diff --git a/.cspell-wordlist.txt b/.cspell-wordlist.txt new file mode 100644 index 000000000..9db8c4bde --- /dev/null +++ b/.cspell-wordlist.txt @@ -0,0 +1,48 @@ +swmansion +executorch +execu +Execu +torch +huggingface +bbox +bboxes +deeplab +unsqueeze +qlora +spinquant +efficientnet +ssdlite +udnie +crnn +mobilenet +microcontrollers +notimestamps +seqs +smollm +qwen +XNNPACK +EFFICIENTNET +SSDLITE +MOBILENET +UDNIE +CRNN +SPINQUANT +QLORA +GGUF +deeplabv +DEELABV +ARGMAX +Abaza +Adyghe +Chech +Dargwa +Ingush +Karbadian +Lezghian +Occitan +Tabassaran +Sinhala +Infima +sublabel +Aeonik +Lexend diff --git a/.cspell.json b/.cspell.json new file mode 100644 index 000000000..c1332b118 --- /dev/null +++ b/.cspell.json @@ -0,0 +1,12 @@ +{ + "version": "0.2", + "language": "en", + "ignorePaths": ["**/node_modules", "**/Pods"], + "dictionaryDefinitions": [ + { + "name": "project-words", + "path": ".cspell-wordlist.txt" + } + ], + "dictionaries": ["project-words"] +} diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 000000000..bead4757e --- /dev/null +++ b/.eslintrc @@ -0,0 +1,38 @@ +{ + "parserOptions": { + "requireConfigFile": false, + "babelOptions": { + "presets": [ + "@babel/preset-react" + ] + } + }, + "root": true, + "extends": [ + "@react-native", + "prettier", + "plugin:@cspell/recommended" + ], + "rules": { + "react/react-in-jsx-scope": "off", + "prettier/prettier": [ + "error", + { + "quoteProps": "consistent", + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false + } + ], + "@cspell/spellchecker": ["warn", { "customWordListFile": ".cspell-wordlist.txt" }] + + }, + "plugins": [ + "eslint-plugin-prettier" + ], + "ignorePatterns": [ + "node_modules/", + "lib/" + ] +} \ No newline at end of file diff --git a/.github/workflows/build-android-llama-example.yml b/.github/workflows/build-android-llm-example.yml similarity index 71% rename from .github/workflows/build-android-llama-example.yml rename to .github/workflows/build-android-llm-example.yml index 6549fcabd..7b8bc94d0 100644 --- a/.github/workflows/build-android-llama-example.yml +++ b/.github/workflows/build-android-llm-example.yml @@ -1,27 +1,27 @@ -name: Llama Example app Android build check +name: LLM Example app Android build check on: pull_request: paths: - - .github/workflows/build-android-llama-example.yml + - .github/workflows/build-android-llm-example.yml - android/** - third-party/android/** - - examples/llama/package.json - - examples/llama/android/** + - examples/llm/package.json + - examples/llm/android/** push: branches: - main paths: - - .github/workflows/build-android-llama-example.yml + - .github/workflows/build-android-llm-example.yml - android/** - third-party/android/** - - examples/llama/package.json - - examples/llama/android/** + - examples/llm/package.json + - examples/llm/android/** jobs: build: if: github.repository == 'software-mansion/react-native-executorch' runs-on: ubuntu-latest env: - WORKING_DIRECTORY: examples/llama + WORKING_DIRECTORY: examples/llm concurrency: group: android-${{ github.ref }} cancel-in-progress: true diff --git a/.github/workflows/build-ios-llama-example.yml b/.github/workflows/build-ios-llm-example.yml similarity index 61% rename from .github/workflows/build-ios-llama-example.yml rename to .github/workflows/build-ios-llm-example.yml index f9f764589..de9a0304a 100644 --- a/.github/workflows/build-ios-llama-example.yml +++ b/.github/workflows/build-ios-llm-example.yml @@ -1,19 +1,19 @@ -name: Llama Example app iOS build check +name: LLM Example app iOS build check on: push: branches: - main paths: - - '.github/workflows/build-ios-llama-example.yml' + - '.github/workflows/build-ios-llm-example.yml' - '*.podspec' - - 'examples/llama/ios/**' - - 'examples/llama/package.json' + - 'examples/llm/ios/**' + - 'examples/llm/package.json' pull_request: paths: - - '.github/workflows/build-ios-llama-example.yml' + - '.github/workflows/build-ios-llm-example.yml' - '*.podspec' - - 'examples/llama/ios/**' - - 'examples/llama/package.json' + - 'examples/llm/ios/**' + - 'examples/llm/package.json' jobs: build: if: github.repository == 'software-mansion/react-native-executorch' @@ -25,17 +25,17 @@ jobs: - name: Check out Git repository uses: actions/checkout@v4 - name: Install node dependencies - working-directory: examples/llama + working-directory: examples/llm run: yarn - name: Install pods - working-directory: examples/llama/ios + working-directory: examples/llm/ios run: pod install - name: Build app - working-directory: examples/llama/ios + working-directory: examples/llm/ios run: | set -o pipefail && xcodebuild \ - -workspace llama.xcworkspace \ - -scheme llama \ + -workspace llm.xcworkspace \ + -scheme llm \ -sdk iphonesimulator \ -configuration Debug \ -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \ diff --git a/.gitignore b/.gitignore index cfe2bb4fd..adc6bf23a 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,7 @@ lib/ # React Native Codegen ios/generated android/generated + +# custom +*.tgz +Makefile diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..05b14e37f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "executorch"] + path = third-party/executorch + url = https://github.com/software-mansion-labs/executorch +[submodule "tokenizers-cpp"] + path = third-party/tokenizers-cpp + url = https://github.com/software-mansion-labs/tokenizers-cpp diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000..18e6e995e --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "quoteProps": "consistent", + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "useTabs": false +} \ No newline at end of file diff --git a/README.md b/README.md index 7cb45edf5..2917b3d80 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ React Native Executorch supports only the [New React Native architecture](https: If your app still runs on the old architecture, please consider upgrading to the New Architecture. -## Readymade models 🤖 +## Ready-made models 🤖 To run any AI model in ExecuTorch, you need to export it to a `.pte` format. If you're interested in experimenting with your own models, we highly encourage you to check out the [Python API](https://pypi.org/project/executorch/). If you prefer focusing on developing your React Native app, we will cover several common use cases. For more details, please refer to the documentation. @@ -43,16 +43,17 @@ Add this to your component file: ```tsx import { - LLAMA3_2_3B_QLORA, - LLAMA3_2_3B_TOKENIZER, useLLM, + LLAMA3_2_1B, + LLAMA3_2_TOKENIZER_CONFIG, } from 'react-native-executorch'; function MyComponent() { // Initialize the model 🚀 const llama = useLLM({ - modelSource: LLAMA3_2_3B_QLORA, - tokenizerSource: LLAMA3_2_3B_TOKENIZER, + modelSource: LLAMA3_2_1B, + tokenizerSource: LLAMA3_2_TOKENIZER, + tokenizerConfigSource: LLAMA3_2_TOKENIZER_CONFIG, }); // ... rest of your component } @@ -67,8 +68,8 @@ const handleGenerate = async () => { const prompt = 'The meaning of life is'; // Generate text based on your desired prompt - const response = await llama.generate(prompt); - console.log('Llama says:', response); + await llama.runInference(prompt); + console.log('Llama says:', llama.response); }; ``` @@ -84,9 +85,9 @@ We currently host two example apps demonstrating use cases of our library: - examples/speech-to-text - Whisper and Moonshine models ready for transcription tasks - examples/computer-vision - computer vision related tasks -- examples/llama - chat applications showcasing use of LLMs +- examples/llm - chat applications showcasing use of LLMs -If you would like to run it, navigate to it's project directory, for example `examples/llama` from the repository root and install dependencies with: +If you would like to run it, navigate to it's project directory, for example `examples/llm` from the repository root and install dependencies with: ```bash yarn diff --git a/android/CMakeLists.txt b/android/CMakeLists.txt new file mode 100644 index 000000000..96164c49c --- /dev/null +++ b/android/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.13) +project(RnExecutorch) + +set (CMAKE_VERBOSE_MAKEFILE ON) +set (CMAKE_CXX_STANDARD 20) + +include("${REACT_NATIVE_DIR}/ReactAndroid/cmake-utils/folly-flags.cmake") +add_compile_options(${folly_FLAGS}) + +string(APPEND CMAKE_CXX_FLAGS " -DRCT_NEW_ARCH_ENABLED") + +set(ANDROID_CPP_DIR "${CMAKE_SOURCE_DIR}/src/main/cpp") +set(COMMON_CPP_DIR "${CMAKE_SOURCE_DIR}/../common") +set(LIBS_DIR "${CMAKE_SOURCE_DIR}/../third-party/android/libs") +set(INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../third-party/include") + +add_subdirectory("${ANDROID_CPP_DIR}") \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index daa09700b..7d4ed01c4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,3 +1,5 @@ +import org.apache.tools.ant.taskdefs.condition.Os + buildscript { ext { agp_version = '8.4.2' @@ -21,19 +23,20 @@ buildscript { def reactNativeArchitectures() { def value = rootProject.getProperties().get("reactNativeArchitectures") - return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] -} - -def isNewArchitectureEnabled() { - return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" + // react-native-executorch supports only these architectures. This is due to + // Executorch not supporting anything else. + def defaultArchitectures = ["x86_64", "arm64-v8a"] + if(!value) { + return defaultArchitectures + } + def architectures = value.split(",") + return architectures.findAll { it in defaultArchitectures } } apply plugin: "com.android.library" apply plugin: "kotlin-android" +apply plugin: "com.facebook.react" -if (isNewArchitectureEnabled()) { - apply plugin: "com.facebook.react" -} def getExtOrDefault(name) { return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties["RnExecutorch_" + name] @@ -52,6 +55,38 @@ def supportsNamespace() { return (major == 7 && minor >= 3) || major >= 8 } +def safeAppExtGet(prop, fallback) { + def appProject = rootProject.allprojects.find { it.plugins.hasPlugin('com.android.application') } + appProject?.ext?.has(prop) ? appProject.ext.get(prop) : fallback +} + +def toPlatformFileString(String path) { + if (Os.isFamily(Os.FAMILY_WINDOWS)) { + path = path.replace(File.separatorChar, '/' as char) + } + return path +} + +def resolveReactNativeDirectory() { + def reactNativeLocation = safeAppExtGet("REACT_NATIVE_NODE_MODULES_DIR", null) + + if (reactNativeLocation !== null) { + return file(reactNativeLocation) + } + + // Fallback to node resolver for custom directory structures like monorepos. + def reactNativePackage = file(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()) + if(reactNativePackage.exists()) { + return reactNativePackage.parentFile + } + + throw new GradleException( + "[RnExecutorch] Unable to resolve react-native location in node_modules. You should project extension property (in `app/build.gradle`) `REACT_NATIVE_NODE_MODULES_DIR` with path to react-native." + ) +} + +def reactNativeRootDir = resolveReactNativeDirectory() + android { if (supportsNamespace()) { namespace "com.swmansion.rnexecutorch" @@ -63,12 +98,34 @@ android { } } + buildFeatures { + prefab true + prefabPublishing true + buildConfig true + } + compileSdkVersion getExtOrIntegerDefault("compileSdkVersion") defaultConfig { minSdkVersion getExtOrIntegerDefault("minSdkVersion") targetSdkVersion getExtOrIntegerDefault("targetSdkVersion") - buildConfigField("boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()) + externalNativeBuild { + cmake { + cppFlags "-O2 -frtti -fexceptions -Wall -fstack-protector-all -fopenmp -static-openmp" + abiFilters (*reactNativeArchitectures()) + arguments "-DANDROID_STL=c++_shared", + "-DREACT_NATIVE_DIR=${toPlatformFileString(reactNativeRootDir.path)}" + "-DBUILD_DIR=${project.buildDir}" + "-DANDROID_TOOLCHAIN=clang" + } + } + } + + + externalNativeBuild { + cmake { + path "CMakeLists.txt" + } } buildTypes { @@ -85,6 +142,7 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + } repositories { @@ -101,9 +159,11 @@ dependencies { //noinspection GradleDynamicVersion implementation 'com.github.wendykierp:JTransforms:3.1' implementation "com.facebook.react:react-android:+" + implementation "com.facebook.react:react-native:+" + implementation 'com.facebook.fbjni:fbjni:0.6.0' implementation 'org.opencv:opencv:4.10.0' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'com.github.software-mansion:react-native-executorch:main-SNAPSHOT' + implementation(files("../third-party/android/libs/executorch/executorch.aar")) implementation 'org.opencv:opencv:4.10.0' implementation("com.squareup.okhttp3:okhttp:4.9.2") } diff --git a/android/src/main/cpp/CMakeLists.txt b/android/src/main/cpp/CMakeLists.txt new file mode 100644 index 000000000..901946bba --- /dev/null +++ b/android/src/main/cpp/CMakeLists.txt @@ -0,0 +1,71 @@ +cmake_minimum_required(VERSION 3.13) + +file(GLOB_RECURSE ANDROID_CPP_SOURCES CONFIGURE_DEPENDS "${ANDROID_CPP_DIR}/*.cpp") +file(GLOB_RECURSE COMMON_CPP_SOURCES CONFIGURE_DEPENDS "${COMMON_CPP_DIR}/*.cpp" "${COMMON_CPP_DIR}/*.c") + +add_library(react-native-executorch SHARED ${ANDROID_CPP_SOURCES} ${COMMON_CPP_SOURCES}) + +find_package(ReactAndroid REQUIRED CONFIG) +find_package(fbjni REQUIRED CONFIG) + +target_include_directories( + react-native-executorch + PUBLIC + "${COMMON_CPP_DIR}" + "${ANDROID_CPP_DIR}" + "${INCLUDE_DIR}" + "${REACT_NATIVE_DIR}/ReactCommon" + "${REACT_NATIVE_DIR}/ReactAndroid/src/main/jni/react/turbomodule" + "${REACT_NATIVE_DIR}/ReactCommon/callinvoker" +) + +set(LINK_LIBRARIES + ReactAndroid::jsi + fbjni::fbjni + android + log +) + +set(RN_VERSION_LINK_LIBRARIES + ReactAndroid::reactnative +) + +# Dependencies: +# ------- Executorch ------- + +add_library(executorch SHARED IMPORTED) + +set_target_properties(executorch PROPERTIES + IMPORTED_LOCATION "${LIBS_DIR}/executorch/${ANDROID_ABI}/libexecutorch.so") + +# ------- OpenCV ------- + +set(OPENCV_LIBS + "${LIBS_DIR}/opencv/${ANDROID_ABI}/libopencv_core.a" + "${LIBS_DIR}/opencv/${ANDROID_ABI}/libopencv_features2d.a" + "${LIBS_DIR}/opencv/${ANDROID_ABI}/libopencv_highgui.a" + "${LIBS_DIR}/opencv/${ANDROID_ABI}/libopencv_imgproc.a" + "${LIBS_DIR}/opencv/${ANDROID_ABI}/libopencv_photo.a" + "${LIBS_DIR}/opencv/${ANDROID_ABI}/libopencv_video.a" +) + +if(ANDROID_ABI STREQUAL "arm64-v8a") + set(OPENCV_THIRD_PARTY_LIBS + "${LIBS_DIR}/opencv-third-party/${ANDROID_ABI}/libkleidicv_hal.a" + "${LIBS_DIR}/opencv-third-party/${ANDROID_ABI}/libkleidicv_thread.a" + "${LIBS_DIR}/opencv-third-party/${ANDROID_ABI}/libkleidicv.a" + ) +elseif(ANDROID_ABI STREQUAL "x86_64") + set(OPENCV_THIRD_PARTY_LIBS "") +endif() + +# -------------- + +target_link_libraries( + react-native-executorch + ${LINK_LIBRARIES} + ${RN_VERSION_LINK_LIBRARIES} + ${OPENCV_LIBS} + ${OPENCV_THIRD_PARTY_LIBS} + executorch +) \ No newline at end of file diff --git a/android/src/main/cpp/ETInstallerModule.cpp b/android/src/main/cpp/ETInstallerModule.cpp new file mode 100644 index 000000000..d69af8634 --- /dev/null +++ b/android/src/main/cpp/ETInstallerModule.cpp @@ -0,0 +1,76 @@ +#include "ETInstallerModule.h" + +#include + +#include +#include + +namespace rnexecutorch { +JavaVM *java_machine; +using namespace facebook::jni; + +ETInstallerModule::ETInstallerModule( + jni::alias_ref &jThis, + jsi::Runtime *jsiRuntime, + const std::shared_ptr &jsCallInvoker) + : javaPart_(make_global(jThis)), jsiRuntime_(jsiRuntime), + jsCallInvoker_(jsCallInvoker) {} + +jni::local_ref ETInstallerModule::initHybrid( + jni::alias_ref jThis, jlong jsContext, + jni::alias_ref + jsCallInvokerHolder) { + auto jsCallInvoker = jsCallInvokerHolder->cthis()->getCallInvoker(); + auto rnRuntime = reinterpret_cast(jsContext); + return makeCxxInstance(jThis, rnRuntime, jsCallInvoker); +} + +void ETInstallerModule::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", ETInstallerModule::initHybrid), + makeNativeMethod("injectJSIBindings", + ETInstallerModule::injectJSIBindings), + }); +} + +void ETInstallerModule::injectJSIBindings() { + // Grab a function for fetching images via URL from Java + auto fetchDataByUrl = [](std::string url) { + // Attaching Current Thread to JVM + + JNIEnv *env = nullptr; + int getEnvStat = java_machine->GetEnv((void **)&env, JNI_VERSION_1_6); + if (getEnvStat == JNI_EDETACHED) { + if (java_machine->AttachCurrentThread(&env, nullptr) != 0) { + throw std::runtime_error("Failed to attach thread to JVM"); + } + } + static jclass cls = javaClassStatic().get(); + static jmethodID method = env->GetStaticMethodID( + cls, "fetchByteDataFromUrl", "(Ljava/lang/String;)[B"); + + jstring jUrl = env->NewStringUTF(url.c_str()); + jbyteArray byteData = + (jbyteArray)env->CallStaticObjectMethod(cls, method, jUrl); + + if (env->IsSameObject(byteData, NULL)) { + throw std::runtime_error("Error fetching data from a url"); + } + + int size = env->GetArrayLength(byteData); + jbyte *bytes = env->GetByteArrayElements(byteData, JNI_FALSE); + std::byte *dataBytePtr = reinterpret_cast(bytes); + + return std::vector(dataBytePtr, dataBytePtr + size); + }; + + RnExecutorchInstaller::injectJSIBindings(jsiRuntime_, jsCallInvoker_, + fetchDataByUrl); +} +} // namespace rnexecutorch + +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { + rnexecutorch::java_machine = vm; + return facebook::jni::initialize( + vm, [] { rnexecutorch::ETInstallerModule::registerNatives(); }); +} \ No newline at end of file diff --git a/android/src/main/cpp/ETInstallerModule.h b/android/src/main/cpp/ETInstallerModule.h new file mode 100644 index 000000000..78a95f4f8 --- /dev/null +++ b/android/src/main/cpp/ETInstallerModule.h @@ -0,0 +1,43 @@ +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace rnexecutorch { + +using namespace facebook; +using namespace react; + +class ETInstallerModule : public jni::HybridClass { +public: + static auto constexpr kJavaDescriptor = + "Lcom/swmansion/rnexecutorch/ETInstaller;"; + + static jni::local_ref + initHybrid(jni::alias_ref jThis, jlong jsContext, + jni::alias_ref + jsCallInvokerHolder); + + static void registerNatives(); + + void injectJSIBindings(); + +private: + friend HybridBase; + + jni::global_ref javaPart_; + jsi::Runtime *jsiRuntime_; + std::shared_ptr jsCallInvoker_; + + explicit ETInstallerModule( + jni::alias_ref &jThis, + jsi::Runtime *jsiRuntime, + const std::shared_ptr &jsCallInvoker); +}; + +} // namespace rnexecutorch \ No newline at end of file diff --git a/android/src/main/java/com/swmansion/rnexecutorch/ETInstaller.kt b/android/src/main/java/com/swmansion/rnexecutorch/ETInstaller.kt new file mode 100644 index 000000000..acc43c0a9 --- /dev/null +++ b/android/src/main/java/com/swmansion/rnexecutorch/ETInstaller.kt @@ -0,0 +1,66 @@ +package com.swmansion.rnexecutorch + +import com.facebook.jni.HybridData +import com.facebook.proguard.annotations.DoNotStrip +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.common.annotations.FrameworkAPI +import com.facebook.react.module.annotations.ReactModule +import com.facebook.react.turbomodule.core.CallInvokerHolderImpl +import java.io.InputStream +import java.net.URL + +@OptIn(FrameworkAPI::class) +@ReactModule(name = ETInstaller.NAME) +class ETInstaller( + reactContext: ReactApplicationContext, +) : NativeETInstallerSpec(reactContext) { + companion object { + const val NAME = NativeETInstallerSpec.NAME + + @JvmStatic + @DoNotStrip + @Throws(Exception::class) + fun fetchByteDataFromUrl(source: String): ByteArray? { + try { + val url = URL(source) + val connection = url.openConnection() + connection.connect() + + val inputStream: InputStream = connection.getInputStream() + val data = inputStream.readBytes() + inputStream.close() + + return data + } catch (exception: Throwable) { + return null + } + } + } + + private val mHybridData: HybridData + + external fun initHybrid( + jsContext: Long, + callInvoker: CallInvokerHolderImpl, + ): HybridData + + private external fun injectJSIBindings() + + init { + try { + System.loadLibrary("executorch") + System.loadLibrary("react-native-executorch") + val jsCallInvokerHolder = reactContext.jsCallInvokerHolder as CallInvokerHolderImpl + mHybridData = initHybrid(reactContext.javaScriptContextHolder!!.get(), jsCallInvokerHolder) + } catch (exception: UnsatisfiedLinkError) { + throw RuntimeException("Could not load native module ETInstaller", exception) + } + } + + @ReactMethod(isBlockingSynchronousMethod = true) + override fun install(): Boolean { + injectJSIBindings() + return true + } +} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/ETModule.kt b/android/src/main/java/com/swmansion/rnexecutorch/ETModule.kt index 55fad74a8..3f64f4c06 100644 --- a/android/src/main/java/com/swmansion/rnexecutorch/ETModule.kt +++ b/android/src/main/java/com/swmansion/rnexecutorch/ETModule.kt @@ -9,7 +9,6 @@ import com.swmansion.rnexecutorch.utils.ETError import com.swmansion.rnexecutorch.utils.TensorUtils import org.pytorch.executorch.EValue import org.pytorch.executorch.Module -import java.net.URL class ETModule( reactContext: ReactApplicationContext, @@ -23,7 +22,7 @@ class ETModule( modelSource: String, promise: Promise, ) { - module = Module.load(URL(modelSource).path) + module = Module.load(modelSource) promise.resolve(0) } diff --git a/android/src/main/java/com/swmansion/rnexecutorch/ImageSegmentation.kt b/android/src/main/java/com/swmansion/rnexecutorch/ImageSegmentation.kt deleted file mode 100644 index c18fa8ed3..000000000 --- a/android/src/main/java/com/swmansion/rnexecutorch/ImageSegmentation.kt +++ /dev/null @@ -1,58 +0,0 @@ -package com.swmansion.rnexecutorch - -import android.util.Log -import com.facebook.react.bridge.Promise -import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.bridge.ReadableArray -import com.swmansion.rnexecutorch.models.imagesegmentation.ImageSegmentationModel -import com.swmansion.rnexecutorch.utils.ETError -import com.swmansion.rnexecutorch.utils.ImageProcessor -import org.opencv.android.OpenCVLoader - -class ImageSegmentation( - reactContext: ReactApplicationContext, -) : NativeImageSegmentationSpec(reactContext) { - private lateinit var model: ImageSegmentationModel - - companion object { - const val NAME = "ImageSegmentation" - - init { - if (!OpenCVLoader.initLocal()) { - Log.d("rn_executorch", "OpenCV not loaded") - } else { - Log.d("rn_executorch", "OpenCV loaded") - } - } - } - - override fun loadModule( - modelSource: String, - promise: Promise, - ) { - try { - model = ImageSegmentationModel(reactApplicationContext) - model.loadModel(modelSource) - promise.resolve(0) - } catch (e: Exception) { - promise.reject(e.message!!, ETError.InvalidModelSource.toString()) - } - } - - override fun forward( - input: String, - classesOfInterest: ReadableArray, - resize: Boolean, - promise: Promise, - ) { - try { - val output = - model.runModel(Triple(ImageProcessor.readImage(input), classesOfInterest, resize)) - promise.resolve(output) - } catch (e: Exception) { - promise.reject(e.message!!, e.message) - } - } - - override fun getName(): String = NAME -} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/LLM.kt b/android/src/main/java/com/swmansion/rnexecutorch/LLM.kt index 6eba31ec8..e315d6a4e 100644 --- a/android/src/main/java/com/swmansion/rnexecutorch/LLM.kt +++ b/android/src/main/java/com/swmansion/rnexecutorch/LLM.kt @@ -3,22 +3,13 @@ package com.swmansion.rnexecutorch import android.util.Log import com.facebook.react.bridge.Promise import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.bridge.ReadableArray -import com.swmansion.rnexecutorch.utils.ArrayUtils -import com.swmansion.rnexecutorch.utils.llms.ChatRole -import com.swmansion.rnexecutorch.utils.llms.ConversationManager -import com.swmansion.rnexecutorch.utils.llms.END_OF_TEXT_TOKEN -import org.pytorch.executorch.LlamaCallback -import org.pytorch.executorch.LlamaModule -import java.net.URL +import org.pytorch.executorch.extension.llm.LlmCallback +import org.pytorch.executorch.extension.llm.LlmModule class LLM( reactContext: ReactApplicationContext, -) : NativeLLMSpec(reactContext), - LlamaCallback { - private var llamaModule: LlamaModule? = null - private var tempLlamaResponse = StringBuilder() - private lateinit var conversationManager: ConversationManager +) : NativeLLMSpec(reactContext), LlmCallback { + private var llmModule: LlmModule? = null override fun getName(): String = NAME @@ -28,7 +19,6 @@ class LLM( override fun onResult(result: String) { emitOnToken(result) - this.tempLlamaResponse.append(result) } override fun onStats(tps: Float) { @@ -38,20 +28,10 @@ class LLM( override fun loadLLM( modelSource: String, tokenizerSource: String, - systemPrompt: String, - messageHistory: ReadableArray, - contextWindowLength: Double, promise: Promise, ) { try { - this.conversationManager = - ConversationManager( - contextWindowLength.toInt(), - systemPrompt, - ArrayUtils.createMapArray(messageHistory), - ) - llamaModule = LlamaModule(1, URL(modelSource).path, URL(tokenizerSource).path, 0.7f) - this.tempLlamaResponse.clear() + llmModule = LlmModule(modelSource, tokenizerSource, 0.7f) promise.resolve("Model loaded successfully") } catch (e: Exception) { promise.reject("Model loading failed", e.message) @@ -62,35 +42,19 @@ class LLM( input: String, promise: Promise, ) { - this.conversationManager.addResponse(input, ChatRole.USER) - val conversation = this.conversationManager.getConversation() - Thread { - llamaModule!!.generate(conversation, (conversation.length * 0.75).toInt() + 64, this, false) - - // When we call .interrupt(), the LLM doesn't produce EOT token, that also could happen when the - // generated sequence length is larger than specified in the JNI callback, hence we check if EOT - // is there and if not, we append it to the output and emit the EOT token to the JS side. - if (!this.tempLlamaResponse.endsWith(END_OF_TEXT_TOKEN)) { - this.onResult(END_OF_TEXT_TOKEN) - } - - // We want to add the LLM response to the conversation once all the tokens are generated. - // Each token is appended to the tempLlamaResponse StringBuilder in onResult callback. - this.conversationManager.addResponse(this.tempLlamaResponse.toString(), ChatRole.ASSISTANT) - this.tempLlamaResponse.clear() - Log.d("ExecutorchLib", this.conversationManager.getConversation()) - }.start() - - promise.resolve("Inference completed successfully") + llmModule!!.generate(input, this) + promise.resolve("Inference completed successfully") + } + .start() } override fun interrupt() { - llamaModule!!.stop() + llmModule!!.stop() } - override fun deleteModule() { - llamaModule = null + override fun releaseResources() { + llmModule = null } companion object { diff --git a/android/src/main/java/com/swmansion/rnexecutorch/RnExecutorchPackage.kt b/android/src/main/java/com/swmansion/rnexecutorch/RnExecutorchPackage.kt index 3c78d4d7f..ee289e7a1 100644 --- a/android/src/main/java/com/swmansion/rnexecutorch/RnExecutorchPackage.kt +++ b/android/src/main/java/com/swmansion/rnexecutorch/RnExecutorchPackage.kt @@ -18,8 +18,6 @@ class RnExecutorchPackage : TurboReactPackage() { LLM(reactContext) } else if (name == ETModule.NAME) { ETModule(reactContext) - } else if (name == StyleTransfer.NAME) { - StyleTransfer(reactContext) } else if (name == Classification.NAME) { Classification(reactContext) } else if (name == ObjectDetection.NAME) { @@ -30,8 +28,12 @@ class RnExecutorchPackage : TurboReactPackage() { OCR(reactContext) } else if (name == VerticalOCR.NAME) { VerticalOCR(reactContext) - } else if (name == ImageSegmentation.NAME) { - ImageSegmentation(reactContext) + } else if (name == ETInstaller.NAME) { + ETInstaller(reactContext) + } else if (name == Tokenizer.NAME) { + Tokenizer(reactContext) + } else if (name == TextEmbeddings.NAME) { + TextEmbeddings(reactContext) } else { null } @@ -45,6 +47,7 @@ class RnExecutorchPackage : TurboReactPackage() { LLM.NAME, false, // canOverrideExistingModule false, // needsEagerInit + true, // hasConstants false, // isCxxModule true, ) @@ -54,16 +57,7 @@ class RnExecutorchPackage : TurboReactPackage() { ETModule.NAME, false, // canOverrideExistingModule false, // needsEagerInit - false, // isCxxModule - true, - ) - - moduleInfos[StyleTransfer.NAME] = - ReactModuleInfo( - StyleTransfer.NAME, - StyleTransfer.NAME, - false, // canOverrideExistingModule - false, // needsEagerInit + true, // hasConstants false, // isCxxModule true, ) @@ -74,6 +68,7 @@ class RnExecutorchPackage : TurboReactPackage() { Classification.NAME, false, // canOverrideExistingModule false, // needsEagerInit + true, // hasConstants false, // isCxxModule true, ) @@ -84,6 +79,7 @@ class RnExecutorchPackage : TurboReactPackage() { ObjectDetection.NAME, false, // canOverrideExistingModule false, // needsEagerInit + true, // hasConstants false, // isCxxModule true, ) @@ -94,6 +90,7 @@ class RnExecutorchPackage : TurboReactPackage() { SpeechToText.NAME, false, // canOverrideExistingModule false, // needsEagerInit + true, // hasConstants false, // isCxxModule true, ) @@ -104,6 +101,7 @@ class RnExecutorchPackage : TurboReactPackage() { OCR.NAME, false, // canOverrideExistingModule false, // needsEagerInit + true, // hasConstants false, // isCxxModule true, ) @@ -114,16 +112,43 @@ class RnExecutorchPackage : TurboReactPackage() { VerticalOCR.NAME, false, // canOverrideExistingModule false, // needsEagerInit + true, // hasConstants + false, // isCxxModule + true, + ) + + moduleInfos[Tokenizer.NAME] = + ReactModuleInfo( + Tokenizer.NAME, + Tokenizer.NAME, + false, // canOverrideExistingModule + false, // needsEagerInit + true, // hasConstants + false, // isCxxModule + true, + ) + + moduleInfos[ETInstaller.NAME] = + ReactModuleInfo( + ETInstaller.NAME, + ETInstaller.NAME, + false, // canOverrideExistingModule + false, // needsEagerInit + true, // hasConstants + false, // isCxxModule + true, + ) + + moduleInfos[TextEmbeddings.NAME] = + ReactModuleInfo( + TextEmbeddings.NAME, + TextEmbeddings.NAME, + false, // canOverrideExistingModule + false, // needsEagerInit false, // isCxxModule true, ) - moduleInfos[ImageSegmentation.NAME] = ReactModuleInfo( - ImageSegmentation.NAME, ImageSegmentation.NAME, false, // canOverrideExistingModule - false, // needsEagerInit - false, // isCxxModule - true - ) moduleInfos } } diff --git a/android/src/main/java/com/swmansion/rnexecutorch/StyleTransfer.kt b/android/src/main/java/com/swmansion/rnexecutorch/StyleTransfer.kt deleted file mode 100644 index 224794e17..000000000 --- a/android/src/main/java/com/swmansion/rnexecutorch/StyleTransfer.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.swmansion.rnexecutorch - -import android.util.Log -import com.facebook.react.bridge.Promise -import com.facebook.react.bridge.ReactApplicationContext -import com.swmansion.rnexecutorch.models.styletransfer.StyleTransferModel -import com.swmansion.rnexecutorch.utils.ETError -import com.swmansion.rnexecutorch.utils.ImageProcessor -import org.opencv.android.OpenCVLoader - -class StyleTransfer( - reactContext: ReactApplicationContext, -) : NativeStyleTransferSpec(reactContext) { - private lateinit var styleTransferModel: StyleTransferModel - - companion object { - const val NAME = "StyleTransfer" - - init { - if (!OpenCVLoader.initLocal()) { - Log.d("rn_executorch", "OpenCV not loaded") - } else { - Log.d("rn_executorch", "OpenCV loaded") - } - } - } - - override fun loadModule( - modelSource: String, - promise: Promise, - ) { - try { - styleTransferModel = StyleTransferModel(reactApplicationContext) - styleTransferModel.loadModel(modelSource) - promise.resolve(0) - } catch (e: Exception) { - promise.reject(e.message!!, ETError.InvalidModelSource.toString()) - } - } - - override fun forward( - input: String, - promise: Promise, - ) { - try { - val output = styleTransferModel.runModel(ImageProcessor.readImage(input)) - promise.resolve(ImageProcessor.saveToTempFile(reactApplicationContext, output)) - } catch (e: Exception) { - promise.reject(e.message!!, e.message) - } - } - - override fun getName(): String = NAME -} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/TextEmbeddings.kt b/android/src/main/java/com/swmansion/rnexecutorch/TextEmbeddings.kt new file mode 100644 index 000000000..ff8b9edb5 --- /dev/null +++ b/android/src/main/java/com/swmansion/rnexecutorch/TextEmbeddings.kt @@ -0,0 +1,51 @@ +package com.swmansion.rnexecutorch + +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.WritableNativeArray +import com.swmansion.rnexecutorch.models.textEmbeddings.TextEmbeddingsModel +import com.swmansion.rnexecutorch.utils.ETError + +class TextEmbeddings( + reactContext: ReactApplicationContext, +) : NativeTextEmbeddingsSpec(reactContext) { + private lateinit var textEmbeddingsModel: TextEmbeddingsModel + + companion object { + const val NAME = "TextEmbeddings" + } + + override fun loadModule( + modelSource: String, + tokenizerSource: String, + promise: Promise, + ) { + try { + textEmbeddingsModel = TextEmbeddingsModel(reactApplicationContext) + + textEmbeddingsModel.loadModel(modelSource) + textEmbeddingsModel.loadTokenizer(tokenizerSource) + + promise.resolve(0) + } catch (e: Exception) { + promise.reject(e.message!!, ETError.InvalidModelSource.toString()) + } + } + + override fun forward( + input: String, + promise: Promise, + ) { + try { + val output = textEmbeddingsModel.runModel(input) + val writableArray = WritableNativeArray() + output.forEach { writableArray.pushDouble(it) } + + promise.resolve(writableArray) + } catch (e: Exception) { + promise.reject(e.message!!, e.message) + } + } + + override fun getName(): String = NAME +} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/Tokenizer.kt b/android/src/main/java/com/swmansion/rnexecutorch/Tokenizer.kt new file mode 100644 index 000000000..012562e4c --- /dev/null +++ b/android/src/main/java/com/swmansion/rnexecutorch/Tokenizer.kt @@ -0,0 +1,86 @@ +package com.swmansion.rnexecutorch + +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReadableArray +import com.swmansion.rnexecutorch.utils.ArrayUtils.Companion.createIntArray +import com.swmansion.rnexecutorch.utils.ArrayUtils.Companion.createReadableArrayFromIntArray +import com.swmansion.rnexecutorch.utils.ETError +import org.pytorch.executorch.HuggingFaceTokenizer + +class Tokenizer( + reactContext: ReactApplicationContext, +) : NativeTokenizerSpec(reactContext) { + private lateinit var tokenizer: HuggingFaceTokenizer + + companion object { + const val NAME = "Tokenizer" + } + + override fun loadModule( + tokenizerSource: String, + promise: Promise, + ) { + try { + tokenizer = HuggingFaceTokenizer(tokenizerSource) + promise.resolve(0) + } catch (e: Exception) { + promise.reject(e.message!!, ETError.InvalidModelSource.toString()) + } + } + + override fun decode( + input: ReadableArray, + skipSpecialTokens: Boolean, + promise: Promise, + ) { + try { + promise.resolve(tokenizer.decode(createIntArray(input), skipSpecialTokens)) + } catch (e: Exception) { + promise.reject(e.message!!, ETError.UndefinedError.toString()) + } + } + + override fun encode( + input: String, + promise: Promise, + ) { + try { + promise.resolve(createReadableArrayFromIntArray(tokenizer.encode(input))) + } catch (e: Exception) { + promise.reject(e.message!!, ETError.UndefinedError.toString()) + } + } + + override fun getVocabSize(promise: Promise) { + try { + promise.resolve(tokenizer.vocabSize) + } catch (e: Exception) { + promise.reject(e.message!!, ETError.UndefinedError.toString()) + } + } + + override fun idToToken( + id: Double, + promise: Promise, + ) { + try { + promise.resolve(tokenizer.idToToken(id.toInt())) + } catch (e: Exception) { + promise.reject(e.message!!, ETError.UndefinedError.toString()) + } + } + + override fun tokenToId( + token: String, + promise: Promise, + ) { + try { + promise.resolve(tokenizer.tokenToId(token)) + } catch (e: Exception) { + promise.reject(e.message!!, ETError.UndefinedError.toString()) + } + } + + override fun getName(): String = NAME +} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/models/BaseModel.kt b/android/src/main/java/com/swmansion/rnexecutorch/models/BaseModel.kt index 5318cc4f2..9e010e347 100644 --- a/android/src/main/java/com/swmansion/rnexecutorch/models/BaseModel.kt +++ b/android/src/main/java/com/swmansion/rnexecutorch/models/BaseModel.kt @@ -5,7 +5,6 @@ import com.swmansion.rnexecutorch.utils.ETError import org.pytorch.executorch.EValue import org.pytorch.executorch.Module import org.pytorch.executorch.Tensor -import java.net.URL abstract class BaseModel( val context: Context, @@ -13,12 +12,12 @@ abstract class BaseModel( protected lateinit var module: Module fun loadModel(modelSource: String) { - module = Module.load(URL(modelSource).path) + module = Module.load(modelSource) } - protected fun forward(input: EValue): Array { + protected fun forward(vararg inputs: EValue): Array { try { - val result = module.forward(input) + val result = module.forward(*inputs) return result } catch (e: IllegalArgumentException) { // The error is thrown when transformation to Tensor fails diff --git a/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsModel.kt b/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsModel.kt new file mode 100644 index 000000000..3a21013b3 --- /dev/null +++ b/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsModel.kt @@ -0,0 +1,48 @@ +package com.swmansion.rnexecutorch.models.textEmbeddings + +import com.facebook.react.bridge.ReactApplicationContext +import com.swmansion.rnexecutorch.models.BaseModel +import org.pytorch.executorch.EValue +import org.pytorch.executorch.HuggingFaceTokenizer +import org.pytorch.executorch.Tensor + +class TextEmbeddingsModel( + reactApplicationContext: ReactApplicationContext, +) : BaseModel(reactApplicationContext) { + private lateinit var tokenizer: HuggingFaceTokenizer + + fun loadTokenizer(tokenizerSource: String) { + tokenizer = HuggingFaceTokenizer(tokenizerSource) + } + + fun preprocess(input: String): Array { + val inputIds = tokenizer.encode(input).map { it.toLong() }.toLongArray() + val attentionMask = inputIds.map { if (it != 0L) 1L else 0L }.toLongArray() + return arrayOf(inputIds, attentionMask) // Shape: [2, max_length] + } + + fun postprocess( + modelOutput: FloatArray, // [max_length * embedding_dim] + attentionMask: LongArray, // [max_length] + ): DoubleArray { + val modelOutputDouble = modelOutput.map { it.toDouble() }.toDoubleArray() + val embeddings = TextEmbeddingsUtils.meanPooling(modelOutputDouble, attentionMask) + return TextEmbeddingsUtils.normalize(embeddings) + } + + override fun runModel(input: String): DoubleArray { + val modelInput = preprocess(input) + val inputsIds = modelInput[0] + val attentionMask = modelInput[1] + + val inputsIdsShape = longArrayOf(1, inputsIds.size.toLong()) + val attentionMaskShape = longArrayOf(1, attentionMask.size.toLong()) + + val inputIdsEValue = EValue.from(Tensor.fromBlob(inputsIds, inputsIdsShape)) + val attentionMaskEValue = EValue.from(Tensor.fromBlob(attentionMask, attentionMaskShape)) + + val modelOutput = forward(inputIdsEValue, attentionMaskEValue)[0].toTensor().dataAsFloatArray + + return postprocess(modelOutput, attentionMask) + } +} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsUtils.kt b/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsUtils.kt new file mode 100644 index 000000000..57209e8ae --- /dev/null +++ b/android/src/main/java/com/swmansion/rnexecutorch/models/TextEmbeddings/TextEmbeddingsUtils.kt @@ -0,0 +1,37 @@ +package com.swmansion.rnexecutorch.models.textEmbeddings + +import kotlin.math.sqrt + +class TextEmbeddingsUtils { + companion object { + fun meanPooling( + modelOutput: DoubleArray, + attentionMask: LongArray, + ): DoubleArray { + val attentionMaskLength = attentionMask.size + val modelOutputLength = modelOutput.size + val embeddingDim = modelOutputLength / attentionMaskLength + + val result = DoubleArray(embeddingDim) + var sumMask = attentionMask.sum().toDouble() + sumMask = maxOf(sumMask, 1e-9) + + for (i in 0 until embeddingDim) { + var sum = 0.0 + for (j in 0 until attentionMaskLength) { + sum += modelOutput[j * embeddingDim + i] * attentionMask[j] + } + result[i] = sum / sumMask + } + + return result + } + + fun normalize(embeddings: DoubleArray): DoubleArray { + var sum = embeddings.sumOf { it * it } + sum = maxOf(sqrt(sum), 1e-9) + + return embeddings.map { it / sum }.toDoubleArray() + } + } +} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/Constants.kt b/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/Constants.kt deleted file mode 100644 index 7ba7fcb5c..000000000 --- a/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/Constants.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.swmansion.rnexecutorch.models.imagesegmentation - -val deeplabv3_resnet50_labels: Array = - arrayOf( - "BACKGROUND", - "AEROPLANE", - "BICYCLE", - "BIRD", - "BOAT", - "BOTTLE", - "BUS", - "CAR", - "CAT", - "CHAIR", - "COW", - "DININGTABLE", - "DOG", - "HORSE", - "MOTORBIKE", - "PERSON", - "POTTEDPLANT", - "SHEEP", - "SOFA", - "TRAIN", - "TVMONITOR", - ) diff --git a/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/ImageSegmentationModel.kt b/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/ImageSegmentationModel.kt deleted file mode 100644 index 36c1594b4..000000000 --- a/android/src/main/java/com/swmansion/rnexecutorch/models/imageSegmentation/ImageSegmentationModel.kt +++ /dev/null @@ -1,139 +0,0 @@ -package com.swmansion.rnexecutorch.models.imagesegmentation - -import com.facebook.react.bridge.Arguments -import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.bridge.ReadableArray -import com.facebook.react.bridge.WritableMap -import com.swmansion.rnexecutorch.models.BaseModel -import com.swmansion.rnexecutorch.utils.ArrayUtils -import com.swmansion.rnexecutorch.utils.ImageProcessor -import com.swmansion.rnexecutorch.utils.softmax -import org.opencv.core.CvType -import org.opencv.core.Mat -import org.opencv.core.Size -import org.opencv.imgproc.Imgproc -import org.pytorch.executorch.EValue - -class ImageSegmentationModel( - reactApplicationContext: ReactApplicationContext, -) : BaseModel, WritableMap>(reactApplicationContext) { - private lateinit var originalSize: Size - - private fun getModelImageSize(): Size { - val inputShape = module.getInputShape(0) - val width = inputShape[inputShape.lastIndex] - val height = inputShape[inputShape.lastIndex - 1] - - return Size(height.toDouble(), width.toDouble()) - } - - fun preprocess(input: Mat): EValue { - originalSize = input.size() - Imgproc.resize(input, input, getModelImageSize()) - return ImageProcessor.matToEValue(input, module.getInputShape(0)) - } - - private fun extractResults( - result: FloatArray, - numLabels: Int, - resize: Boolean, - ): List { - val modelSize = getModelImageSize() - val numModelPixels = (modelSize.height * modelSize.width).toInt() - - val extractedLabelScores = mutableListOf() - - for (label in 0.., - numLabels: Int, - outputSize: Size, - ): IntArray { - val numPixels = (outputSize.height * outputSize.width).toInt() - val argMax = IntArray(numPixels) - for (pixel in 0..() - for (buffer in labelScores) { - scores.add(buffer[pixel]) - } - val adjustedScores = softmax(scores.toTypedArray()) - for (label in 0.., - classesOfInterest: ReadableArray, - resize: Boolean, - ): WritableMap { - val outputData = output[0].toTensor().dataAsFloatArray - val modelSize = getModelImageSize() - val numLabels = deeplabv3_resnet50_labels.size - - require(outputData.count() == (numLabels * modelSize.height * modelSize.width).toInt()) { "Model generated unexpected output size." } - - val outputSize = if (resize) originalSize else modelSize - - val extractedResults = extractResults(outputData, numLabels, resize) - - val argMax = adjustScoresPerPixel(extractedResults, numLabels, outputSize) - - val labelSet = mutableSetOf() - // Filter by the label set when base class changed - for (i in 0..): WritableMap { - val modelInput = preprocess(input.first) - val modelOutput = forward(modelInput) - return postprocess(modelOutput, input.second, input.third) - } -} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/models/styleTransfer/StyleTransferModel.kt b/android/src/main/java/com/swmansion/rnexecutorch/models/styleTransfer/StyleTransferModel.kt deleted file mode 100644 index 4019015dd..000000000 --- a/android/src/main/java/com/swmansion/rnexecutorch/models/styleTransfer/StyleTransferModel.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.swmansion.rnexecutorch.models.styletransfer - -import com.facebook.react.bridge.ReactApplicationContext -import com.swmansion.rnexecutorch.utils.ImageProcessor -import org.opencv.core.Mat -import org.opencv.core.Size -import org.opencv.imgproc.Imgproc -import org.pytorch.executorch.EValue -import com.swmansion.rnexecutorch.models.BaseModel - -class StyleTransferModel( - reactApplicationContext: ReactApplicationContext, -) : BaseModel(reactApplicationContext) { - private lateinit var originalSize: Size - - private fun getModelImageSize(): Size { - val inputShape = module.getInputShape(0) - val width = inputShape[inputShape.lastIndex] - val height = inputShape[inputShape.lastIndex - 1] - - return Size(height.toDouble(), width.toDouble()) - } - - fun preprocess(input: Mat): EValue { - originalSize = input.size() - Imgproc.resize(input, input, getModelImageSize()) - return ImageProcessor.matToEValue(input, module.getInputShape(0)) - } - - fun postprocess(output: Array): Mat { - val tensor = output[0].toTensor() - val modelShape = getModelImageSize() - val result = ImageProcessor.eValueToMat(tensor.dataAsFloatArray, modelShape.width.toInt(), modelShape.height.toInt()) - Imgproc.resize(result, result, originalSize) - return result - } - - override fun runModel(input: Mat): Mat { - val modelInput = preprocess(input) - val modelOutput = forward(modelInput) - return postprocess(modelOutput) - } -} diff --git a/android/src/main/java/com/swmansion/rnexecutorch/utils/llms/ConversationManager.kt b/android/src/main/java/com/swmansion/rnexecutorch/utils/llms/ConversationManager.kt deleted file mode 100644 index 08388a2c0..000000000 --- a/android/src/main/java/com/swmansion/rnexecutorch/utils/llms/ConversationManager.kt +++ /dev/null @@ -1,68 +0,0 @@ -package com.swmansion.rnexecutorch.utils.llms - -enum class ChatRole { - SYSTEM, - USER, - ASSISTANT, -} - -const val BEGIN_OF_TEXT_TOKEN = "<|begin_of_text|>" -const val END_OF_TEXT_TOKEN = "<|eot_id|>" -const val START_HEADER_ID_TOKEN = "<|start_header_id|>" -const val END_HEADER_ID_TOKEN = "<|end_header_id|>" - -class ConversationManager( - private val numMessagesContextWindow: Int, - systemPrompt: String, - messageHistory: Array>, -) { - private val basePrompt: String - private val messages = ArrayDeque() - - init { - this.basePrompt = - BEGIN_OF_TEXT_TOKEN + - getHeaderTokenFromRole(ChatRole.SYSTEM) + - systemPrompt + - END_OF_TEXT_TOKEN + - getHeaderTokenFromRole(ChatRole.USER) - - messageHistory.forEach { message -> - when (message["role"]) { - "user" -> addResponse(message["content"]!!, ChatRole.USER) - "assistant" -> addResponse(message["content"]!!, ChatRole.ASSISTANT) - } - } - } - - fun addResponse( - text: String, - senderRole: ChatRole, - ) { - if (this.messages.size >= this.numMessagesContextWindow) { - this.messages.removeFirst() - } - val formattedMessage: String = - if (senderRole == ChatRole.ASSISTANT) { - text + getHeaderTokenFromRole(ChatRole.USER) - } else { - text + END_OF_TEXT_TOKEN + getHeaderTokenFromRole(ChatRole.ASSISTANT) - } - this.messages.add(formattedMessage) - } - - fun getConversation(): String { - val prompt = StringBuilder(this.basePrompt) - for (elem in this.messages) { - prompt.append(elem) - } - return prompt.toString() - } - - private fun getHeaderTokenFromRole(role: ChatRole): String = - when (role) { - ChatRole.SYSTEM -> START_HEADER_ID_TOKEN + "system" + END_HEADER_ID_TOKEN - ChatRole.USER -> START_HEADER_ID_TOKEN + "user" + END_HEADER_ID_TOKEN - ChatRole.ASSISTANT -> START_HEADER_ID_TOKEN + "assistant" + END_HEADER_ID_TOKEN - } -} diff --git a/common/ada/ada.cpp b/common/ada/ada.cpp new file mode 100644 index 000000000..2f9263a1f --- /dev/null +++ b/common/ada/ada.cpp @@ -0,0 +1,17406 @@ +/* auto-generated on 2025-01-30 14:25:38 -0500. Do not edit! */ +/* begin file src/ada.cpp */ +#include "ada.h" +/* begin file src/checkers.cpp */ + +#include +#include +#include + +namespace ada::checkers { + +ada_really_inline constexpr bool is_ipv4(std::string_view view) noexcept { + // The string is not empty and does not contain upper case ASCII characters. + // + // Optimization. To be considered as a possible ipv4, the string must end + // with 'x' or a lowercase hex character. + // Most of the time, this will be false so this simple check will save a lot + // of effort. + // If the address ends with a dot, we need to prune it (special case). + if (view.ends_with('.')) { + view.remove_suffix(1); + if (view.empty()) { + return false; + } + } + char last_char = view.back(); + bool possible_ipv4 = (last_char >= '0' && last_char <= '9') || + (last_char >= 'a' && last_char <= 'f') || + last_char == 'x'; + if (!possible_ipv4) { + return false; + } + // From the last character, find the last dot. + size_t last_dot = view.rfind('.'); + if (last_dot != std::string_view::npos) { + // We have at least one dot. + view = view.substr(last_dot + 1); + } + /** Optimization opportunity: we have basically identified the last number of + the ipv4 if we return true here. We might as well parse it and have at + least one number parsed when we get to parse_ipv4. */ + if (std::ranges::all_of(view, ada::checkers::is_digit)) { + return true; + } + // It could be hex (0x), but not if there is a single character. + if (view.size() == 1) { + return false; + } + // It must start with 0x. + if (!view.starts_with("0x")) { + return false; + } + // We must allow "0x". + if (view.size() == 2) { + return true; + } + // We have 0x followed by some characters, we need to check that they are + // hexadecimals. + return std::all_of(view.begin() + 2, view.end(), + ada::unicode::is_lowercase_hex); +} + +// for use with path_signature, we include all characters that need percent +// encoding. +static constexpr std::array path_signature_table = + []() consteval { + std::array result{}; + for (size_t i = 0; i < 256; i++) { + if (i <= 0x20 || i == 0x22 || i == 0x23 || i == 0x3c || i == 0x3e || + i == 0x3f || i == 0x60 || i == 0x7b || i == 0x7d || i > 0x7e) { + result[i] = 1; + } else if (i == 0x25) { + result[i] = 8; + } else if (i == 0x2e) { + result[i] = 4; + } else if (i == 0x5c) { + result[i] = 2; + } else { + result[i] = 0; + } + } + return result; + }(); + +ada_really_inline constexpr uint8_t +path_signature(std::string_view input) noexcept { + // The path percent-encode set is the query percent-encode set and U+003F (?), + // U+0060 (`), U+007B ({), and U+007D (}). The query percent-encode set is the + // C0 control percent-encode set and U+0020 SPACE, U+0022 ("), U+0023 (#), + // U+003C (<), and U+003E (>). The C0 control percent-encode set are the C0 + // controls and all code points greater than U+007E (~). + size_t i = 0; + uint8_t accumulator{}; + for (; i + 7 < input.size(); i += 8) { + accumulator |= uint8_t(path_signature_table[uint8_t(input[i])] | + path_signature_table[uint8_t(input[i + 1])] | + path_signature_table[uint8_t(input[i + 2])] | + path_signature_table[uint8_t(input[i + 3])] | + path_signature_table[uint8_t(input[i + 4])] | + path_signature_table[uint8_t(input[i + 5])] | + path_signature_table[uint8_t(input[i + 6])] | + path_signature_table[uint8_t(input[i + 7])]); + } + for (; i < input.size(); i++) { + accumulator |= uint8_t(path_signature_table[uint8_t(input[i])]); + } + return accumulator; +} + +ada_really_inline constexpr bool +verify_dns_length(std::string_view input) noexcept { + if (input.back() == '.') { + if (input.size() > 254) + return false; + } else if (input.size() > 253) + return false; + + size_t start = 0; + while (start < input.size()) { + auto dot_location = input.find('.', start); + // If not found, it's likely the end of the domain + if (dot_location == std::string_view::npos) + dot_location = input.size(); + + auto label_size = dot_location - start; + if (label_size > 63 || label_size == 0) + return false; + + start = dot_location + 1; + } + + return true; +} +} // namespace ada::checkers +/* end file src/checkers.cpp */ +/* begin file src/unicode.cpp */ + +ADA_PUSH_DISABLE_ALL_WARNINGS +/* begin file src/ada_idna.cpp */ +/* auto-generated on 2024-12-18 09:44:34 -0500. Do not edit! */ +/* begin file src/idna.cpp */ +/* begin file src/unicode_transcoding.cpp */ + +#include +#include +#include + +namespace ada::idna { + +size_t utf8_to_utf32(const char *buf, size_t len, char32_t *utf32_output) { + const uint8_t *data = reinterpret_cast(buf); + size_t pos = 0; + char32_t *start{utf32_output}; + while (pos < len) { + // try to convert the next block of 16 ASCII bytes + if (pos + 16 <= len) { // if it is safe to read 16 more + // bytes, check that they are ascii + uint64_t v1; + std::memcpy(&v1, data + pos, sizeof(uint64_t)); + uint64_t v2; + std::memcpy(&v2, data + pos + sizeof(uint64_t), sizeof(uint64_t)); + uint64_t v{v1 | v2}; + if ((v & 0x8080808080808080) == 0) { + size_t final_pos = pos + 16; + while (pos < final_pos) { + *utf32_output++ = char32_t(buf[pos]); + pos++; + } + continue; + } + } + uint8_t leading_byte = data[pos]; // leading byte + if (leading_byte < 0b10000000) { + // converting one ASCII byte !!! + *utf32_output++ = char32_t(leading_byte); + pos++; + } else if ((leading_byte & 0b11100000) == 0b11000000) { + // We have a two-byte UTF-8 + if (pos + 1 >= len) { + return 0; + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } + // range check + uint32_t code_point = + (leading_byte & 0b00011111) << 6 | (data[pos + 1] & 0b00111111); + if (code_point < 0x80 || 0x7ff < code_point) { + return 0; + } + *utf32_output++ = char32_t(code_point); + pos += 2; + } else if ((leading_byte & 0b11110000) == 0b11100000) { + // We have a three-byte UTF-8 + if (pos + 2 >= len) { + return 0; + } // minimal bound checking + + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return 0; + } + // range check + uint32_t code_point = (leading_byte & 0b00001111) << 12 | + (data[pos + 1] & 0b00111111) << 6 | + (data[pos + 2] & 0b00111111); + if (code_point < 0x800 || 0xffff < code_point || + (0xd7ff < code_point && code_point < 0xe000)) { + return 0; + } + *utf32_output++ = char32_t(code_point); + pos += 3; + } else if ((leading_byte & 0b11111000) == 0b11110000) { // 0b11110000 + // we have a 4-byte UTF-8 word. + if (pos + 3 >= len) { + return 0; + } // minimal bound checking + if ((data[pos + 1] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 2] & 0b11000000) != 0b10000000) { + return 0; + } + if ((data[pos + 3] & 0b11000000) != 0b10000000) { + return 0; + } + + // range check + uint32_t code_point = (leading_byte & 0b00000111) << 18 | + (data[pos + 1] & 0b00111111) << 12 | + (data[pos + 2] & 0b00111111) << 6 | + (data[pos + 3] & 0b00111111); + if (code_point <= 0xffff || 0x10ffff < code_point) { + return 0; + } + *utf32_output++ = char32_t(code_point); + pos += 4; + } else { + return 0; + } + } + return utf32_output - start; +} + +size_t utf8_length_from_utf32(const char32_t *buf, size_t len) { + // We are not BOM aware. + const uint32_t *p = reinterpret_cast(buf); + size_t counter{0}; + for (size_t i = 0; i != len; ++i) { + ++counter; // ASCII + counter += static_cast(p[i] > 0x7F); // two-byte + counter += static_cast(p[i] > 0x7FF); // three-byte + counter += static_cast(p[i] > 0xFFFF); // four-bytes + } + return counter; +} + +size_t utf32_length_from_utf8(const char *buf, size_t len) { + const int8_t *p = reinterpret_cast(buf); + return std::count_if(p, std::next(p, len), [](int8_t c) { + // -65 is 0b10111111, anything larger in two-complement's + // should start a new code point. + return c > -65; + }); +} + +size_t utf32_to_utf8(const char32_t *buf, size_t len, char *utf8_output) { + const uint32_t *data = reinterpret_cast(buf); + size_t pos = 0; + char *start{utf8_output}; + while (pos < len) { + // try to convert the next block of 2 ASCII characters + if (pos + 2 <= len) { // if it is safe to read 8 more + // bytes, check that they are ascii + uint64_t v; + std::memcpy(&v, data + pos, sizeof(uint64_t)); + if ((v & 0xFFFFFF80FFFFFF80) == 0) { + *utf8_output++ = char(buf[pos]); + *utf8_output++ = char(buf[pos + 1]); + pos += 2; + continue; + } + } + uint32_t word = data[pos]; + if ((word & 0xFFFFFF80) == 0) { + // will generate one UTF-8 bytes + *utf8_output++ = char(word); + pos++; + } else if ((word & 0xFFFFF800) == 0) { + // will generate two UTF-8 bytes + // we have 0b110XXXXX 0b10XXXXXX + *utf8_output++ = char((word >> 6) | 0b11000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); + pos++; + } else if ((word & 0xFFFF0000) == 0) { + // will generate three UTF-8 bytes + // we have 0b1110XXXX 0b10XXXXXX 0b10XXXXXX + if (word >= 0xD800 && word <= 0xDFFF) { + return 0; + } + *utf8_output++ = char((word >> 12) | 0b11100000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); + pos++; + } else { + // will generate four UTF-8 bytes + // we have 0b11110XXX 0b10XXXXXX 0b10XXXXXX + // 0b10XXXXXX + if (word > 0x10FFFF) { + return 0; + } + *utf8_output++ = char((word >> 18) | 0b11110000); + *utf8_output++ = char(((word >> 12) & 0b111111) | 0b10000000); + *utf8_output++ = char(((word >> 6) & 0b111111) | 0b10000000); + *utf8_output++ = char((word & 0b111111) | 0b10000000); + pos++; + } + } + return utf8_output - start; +} +} // namespace ada::idna +/* end file src/unicode_transcoding.cpp */ +/* begin file src/mapping.cpp */ + +#include +#include +#include + +/* begin file src/mapping_tables.cpp */ +// IDNA 15.1.0 + +// clang-format off +#ifndef ADA_IDNA_TABLES_H +#define ADA_IDNA_TABLES_H +#include + +namespace ada::idna { + +const uint32_t mappings[5165] = +{ + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 32, 32, 776, 32, 772, 50, 51, 32, 769, + 956, 32, 807, 49, 49, 8260, 52, 49, 8260, 50, 51, 8260, 52, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 248, 249, 250, 251, 252, 253, 254, 257, 259, 261, 263, 265, 267, + 269, 271, 273, 275, 277, 279, 281, 283, 285, 287, 289, 291, 293, 295, 297, 299, + 301, 303, 105, 775, 309, 311, 314, 316, 318, 108, 183, 322, 324, 326, 328, 700, + 110, 331, 333, 335, 337, 339, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, + 361, 363, 365, 367, 369, 371, 373, 375, 255, 378, 380, 382, 595, 387, 389, 596, + 392, 598, 599, 396, 477, 601, 603, 402, 608, 611, 617, 616, 409, 623, 626, 629, + 417, 419, 421, 640, 424, 643, 429, 648, 432, 650, 651, 436, 438, 658, 441, 445, + 100, 382, 108, 106, 110, 106, 462, 464, 466, 468, 470, 472, 474, 476, 479, 481, + 483, 485, 487, 489, 491, 493, 495, 100, 122, 501, 405, 447, 505, 507, 509, 511, + 513, 515, 517, 519, 521, 523, 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, + 414, 547, 549, 551, 553, 555, 557, 559, 561, 563, 11365, 572, 410, 11366, 578, 384, + 649, 652, 583, 585, 587, 589, 591, 614, 633, 635, 641, 32, 774, 32, 775, 32, 778, + 32, 808, 32, 771, 32, 779, 661, 768, 787, 776, 769, 953, 881, 883, 697, 887, 32, + 953, 59, 1011, 32, 776, 769, 940, 941, 942, 943, 972, 973, 974, 945, 946, 947, 948, + 949, 950, 951, 952, 954, 955, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, + 968, 969, 970, 971, 983, 985, 987, 989, 991, 993, 995, 997, 999, 1001, 1003, 1005, + 1007, 1016, 1019, 891, 892, 893, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, + 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1072, 1073, 1074, 1075, 1076, 1077, + 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, + 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1121, 1123, + 1125, 1127, 1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 1145, 1147, 1149, 1151, + 1153, 1163, 1165, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, + 1189, 1191, 1193, 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1211, 1213, 1215, + 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1233, 1235, 1237, 1239, 1241, 1243, 1245, + 1247, 1249, 1251, 1253, 1255, 1257, 1259, 1261, 1263, 1265, 1267, 1269, 1271, 1273, + 1275, 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299, 1301, + 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323, 1325, 1327, 1377, + 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, + 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, + 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1381, 1410, 1575, 1652, 1608, + 1652, 1735, 1652, 1610, 1652, 2325, 2364, 2326, 2364, 2327, 2364, 2332, 2364, 2337, + 2364, 2338, 2364, 2347, 2364, 2351, 2364, 2465, 2492, 2466, 2492, 2479, 2492, 2610, + 2620, 2616, 2620, 2582, 2620, 2583, 2620, 2588, 2620, 2603, 2620, 2849, 2876, 2850, + 2876, 3661, 3634, 3789, 3762, 3755, 3737, 3755, 3745, 3851, 3906, 4023, 3916, 4023, + 3921, 4023, 3926, 4023, 3931, 4023, 3904, 4021, 3953, 3954, 3953, 3956, 4018, 3968, + 4018, 3953, 3968, 4019, 3968, 4019, 3953, 3968, 3986, 4023, 3996, 4023, 4001, 4023, + 4006, 4023, 4011, 4023, 3984, 4021, 11559, 11565, 4316, 5104, 5105, 5106, 5107, + 5108, 5109, 42571, 4304, 4305, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4314, + 4315, 4317, 4318, 4319, 4320, 4321, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4329, + 4330, 4331, 4332, 4333, 4334, 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4342, 4343, + 4344, 4345, 4346, 4349, 4350, 4351, 592, 593, 7426, 604, 7446, 7447, 7453, 7461, + 594, 597, 607, 609, 613, 618, 7547, 669, 621, 7557, 671, 625, 624, 627, 628, 632, + 642, 427, 7452, 656, 657, 7681, 7683, 7685, 7687, 7689, 7691, 7693, 7695, 7697, + 7699, 7701, 7703, 7705, 7707, 7709, 7711, 7713, 7715, 7717, 7719, 7721, 7723, 7725, + 7727, 7729, 7731, 7733, 7735, 7737, 7739, 7741, 7743, 7745, 7747, 7749, 7751, 7753, + 7755, 7757, 7759, 7761, 7763, 7765, 7767, 7769, 7771, 7773, 7775, 7777, 7779, 7781, + 7783, 7785, 7787, 7789, 7791, 7793, 7795, 7797, 7799, 7801, 7803, 7805, 7807, 7809, + 7811, 7813, 7815, 7817, 7819, 7821, 7823, 7825, 7827, 7829, 97, 702, 223, 7841, + 7843, 7845, 7847, 7849, 7851, 7853, 7855, 7857, 7859, 7861, 7863, 7865, 7867, 7869, + 7871, 7873, 7875, 7877, 7879, 7881, 7883, 7885, 7887, 7889, 7891, 7893, 7895, 7897, + 7899, 7901, 7903, 7905, 7907, 7909, 7911, 7913, 7915, 7917, 7919, 7921, 7923, 7925, + 7927, 7929, 7931, 7933, 7935, 7936, 7937, 7938, 7939, 7940, 7941, 7942, 7943, 7952, + 7953, 7954, 7955, 7956, 7957, 7968, 7969, 7970, 7971, 7972, 7973, 7974, 7975, 7984, + 7985, 7986, 7987, 7988, 7989, 7990, 7991, 8000, 8001, 8002, 8003, 8004, 8005, 8017, + 8019, 8021, 8023, 8032, 8033, 8034, 8035, 8036, 8037, 8038, 8039, 7936, 953, 7937, + 953, 7938, 953, 7939, 953, 7940, 953, 7941, 953, 7942, 953, 7943, 953, 7968, 953, + 7969, 953, 7970, 953, 7971, 953, 7972, 953, 7973, 953, 7974, 953, 7975, 953, 8032, + 953, 8033, 953, 8034, 953, 8035, 953, 8036, 953, 8037, 953, 8038, 953, 8039, 953, + 8048, 953, 945, 953, 940, 953, 8118, 953, 8112, 8113, 32, 787, 32, 834, 32, 776, + 834, 8052, 953, 951, 953, 942, 953, 8134, 953, 8050, 32, 787, 768, 32, 787, 769, + 32, 787, 834, 912, 8144, 8145, 8054, 32, 788, 768, 32, 788, 769, 32, 788, 834, 944, + 8160, 8161, 8058, 8165, 32, 776, 768, 96, 8060, 953, 969, 953, 974, 953, 8182, 953, + 8056, 8208, 32, 819, 8242, 8242, 8242, 8242, 8242, 8245, 8245, 8245, 8245, 8245, + 33, 33, 32, 773, 63, 63, 63, 33, 33, 63, 48, 53, 54, 55, 56, 57, 43, 8722, 61, 40, + 41, 97, 47, 99, 97, 47, 115, 176, 99, 99, 47, 111, 99, 47, 117, 176, 102, 115, 109, + 116, 101, 108, 116, 109, 1488, 1489, 1490, 1491, 102, 97, 120, 8721, 49, 8260, 55, + 49, 8260, 57, 49, 8260, 49, 48, 49, 8260, 51, 50, 8260, 51, 49, 8260, 53, 50, 8260, + 53, 51, 8260, 53, 52, 8260, 53, 49, 8260, 54, 53, 8260, 54, 49, 8260, 56, 51, 8260, + 56, 53, 8260, 56, 55, 8260, 56, 105, 105, 105, 105, 105, 105, 118, 118, 105, 118, + 105, 105, 118, 105, 105, 105, 105, 120, 120, 105, 120, 105, 105, 48, 8260, 51, 8747, + 8747, 8747, 8747, 8747, 8750, 8750, 8750, 8750, 8750, 12296, 12297, 49, 50, 49, + 51, 49, 52, 49, 53, 49, 54, 49, 55, 49, 56, 49, 57, 50, 48, 40, 49, 41, 40, 50, + 41, 40, 51, 41, 40, 52, 41, 40, 53, 41, 40, 54, 41, 40, 55, 41, 40, 56, 41, 40, + 57, 41, 40, 49, 48, 41, 40, 49, 49, 41, 40, 49, 50, 41, 40, 49, 51, 41, 40, 49, + 52, 41, 40, 49, 53, 41, 40, 49, 54, 41, 40, 49, 55, 41, 40, 49, 56, 41, 40, 49, + 57, 41, 40, 50, 48, 41, 40, 97, 41, 40, 98, 41, 40, 99, 41, 40, 100, 41, 40, 101, + 41, 40, 102, 41, 40, 103, 41, 40, 104, 41, 40, 105, 41, 40, 106, 41, 40, 107, 41, + 40, 108, 41, 40, 109, 41, 40, 110, 41, 40, 111, 41, 40, 112, 41, 40, 113, 41, 40, + 114, 41, 40, 115, 41, 40, 116, 41, 40, 117, 41, 40, 118, 41, 40, 119, 41, 40, 120, + 41, 40, 121, 41, 40, 122, 41, 58, 58, 61, 61, 61, 10973, 824, 11312, 11313, 11314, + 11315, 11316, 11317, 11318, 11319, 11320, 11321, 11322, 11323, 11324, 11325, 11326, + 11327, 11328, 11329, 11330, 11331, 11332, 11333, 11334, 11335, 11336, 11337, 11338, + 11339, 11340, 11341, 11342, 11343, 11344, 11345, 11346, 11347, 11348, 11349, 11350, + 11351, 11352, 11353, 11354, 11355, 11356, 11357, 11358, 11359, 11361, 619, 7549, + 637, 11368, 11370, 11372, 11379, 11382, 575, 576, 11393, 11395, 11397, 11399, 11401, + 11403, 11405, 11407, 11409, 11411, 11413, 11415, 11417, 11419, 11421, 11423, 11425, + 11427, 11429, 11431, 11433, 11435, 11437, 11439, 11441, 11443, 11445, 11447, 11449, + 11451, 11453, 11455, 11457, 11459, 11461, 11463, 11465, 11467, 11469, 11471, 11473, + 11475, 11477, 11479, 11481, 11483, 11485, 11487, 11489, 11491, 11500, 11502, 11507, + 11617, 27597, 40863, 19968, 20008, 20022, 20031, 20057, 20101, 20108, 20128, 20154, + 20799, 20837, 20843, 20866, 20886, 20907, 20960, 20981, 20992, 21147, 21241, 21269, + 21274, 21304, 21313, 21340, 21353, 21378, 21430, 21448, 21475, 22231, 22303, 22763, + 22786, 22794, 22805, 22823, 22899, 23376, 23424, 23544, 23567, 23586, 23608, 23662, + 23665, 24027, 24037, 24049, 24062, 24178, 24186, 24191, 24308, 24318, 24331, 24339, + 24400, 24417, 24435, 24515, 25096, 25142, 25163, 25903, 25908, 25991, 26007, 26020, + 26041, 26080, 26085, 26352, 26376, 26408, 27424, 27490, 27513, 27571, 27595, 27604, + 27611, 27663, 27668, 27700, 28779, 29226, 29238, 29243, 29247, 29255, 29273, 29275, + 29356, 29572, 29577, 29916, 29926, 29976, 29983, 29992, 30000, 30091, 30098, 30326, + 30333, 30382, 30399, 30446, 30683, 30690, 30707, 31034, 31160, 31166, 31348, 31435, + 31481, 31859, 31992, 32566, 32593, 32650, 32701, 32769, 32780, 32786, 32819, 32895, + 32905, 33251, 33258, 33267, 33276, 33292, 33307, 33311, 33390, 33394, 33400, 34381, + 34411, 34880, 34892, 34915, 35198, 35211, 35282, 35328, 35895, 35910, 35925, 35960, + 35997, 36196, 36208, 36275, 36523, 36554, 36763, 36784, 36789, 37009, 37193, 37318, + 37324, 37329, 38263, 38272, 38428, 38582, 38585, 38632, 38737, 38750, 38754, 38761, + 38859, 38893, 38899, 38913, 39080, 39131, 39135, 39318, 39321, 39340, 39592, 39640, + 39647, 39717, 39727, 39730, 39740, 39770, 40165, 40565, 40575, 40613, 40635, 40643, + 40653, 40657, 40697, 40701, 40718, 40723, 40736, 40763, 40778, 40786, 40845, 40860, + 40864, 46, 12306, 21316, 21317, 32, 12441, 32, 12442, 12424, 12426, 12467, 12488, + 4352, 4353, 4522, 4354, 4524, 4525, 4355, 4356, 4357, 4528, 4529, 4530, 4531, 4532, + 4533, 4378, 4358, 4359, 4360, 4385, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, + 4369, 4370, 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, + 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, 4372, 4373, 4551, 4552, 4556, + 4558, 4563, 4567, 4569, 4380, 4573, 4575, 4381, 4382, 4384, 4386, 4387, 4391, 4393, + 4395, 4396, 4397, 4398, 4399, 4402, 4406, 4416, 4423, 4428, 4593, 4594, 4439, 4440, + 4441, 4484, 4485, 4488, 4497, 4498, 4500, 4510, 4513, 19977, 22235, 19978, 20013, + 19979, 30002, 19993, 19969, 22825, 22320, 40, 4352, 41, 40, 4354, 41, 40, 4355, + 41, 40, 4357, 41, 40, 4358, 41, 40, 4359, 41, 40, 4361, 41, 40, 4363, 41, 40, 4364, + 41, 40, 4366, 41, 40, 4367, 41, 40, 4368, 41, 40, 4369, 41, 40, 4370, 41, 40, 44032, + 41, 40, 45208, 41, 40, 45796, 41, 40, 46972, 41, 40, 47560, 41, 40, 48148, 41, 40, + 49324, 41, 40, 50500, 41, 40, 51088, 41, 40, 52264, 41, 40, 52852, 41, 40, 53440, + 41, 40, 54028, 41, 40, 54616, 41, 40, 51452, 41, 40, 50724, 51204, 41, 40, 50724, + 54980, 41, 40, 19968, 41, 40, 20108, 41, 40, 19977, 41, 40, 22235, 41, 40, 20116, + 41, 40, 20845, 41, 40, 19971, 41, 40, 20843, 41, 40, 20061, 41, 40, 21313, 41, 40, + 26376, 41, 40, 28779, 41, 40, 27700, 41, 40, 26408, 41, 40, 37329, 41, 40, 22303, + 41, 40, 26085, 41, 40, 26666, 41, 40, 26377, 41, 40, 31038, 41, 40, 21517, 41, 40, + 29305, 41, 40, 36001, 41, 40, 31069, 41, 40, 21172, 41, 40, 20195, 41, 40, 21628, + 41, 40, 23398, 41, 40, 30435, 41, 40, 20225, 41, 40, 36039, 41, 40, 21332, 41, 40, + 31085, 41, 40, 20241, 41, 40, 33258, 41, 40, 33267, 41, 21839, 24188, 31631, 112, + 116, 101, 50, 50, 50, 52, 50, 53, 50, 54, 50, 55, 50, 56, 50, 57, 51, 48, 51, 51, + 51, 52, 51, 53, 52280, 44256, 51452, 51032, 50864, 31192, 30007, 36969, 20778, 21360, + 27880, 38917, 20889, 27491, 24038, 21491, 21307, 23447, 22812, 51, 54, 51, 55, 51, + 56, 51, 57, 52, 48, 52, 52, 52, 53, 52, 54, 52, 55, 52, 56, 52, 57, 53, 48, 49, + 26376, 50, 26376, 51, 26376, 52, 26376, 53, 26376, 54, 26376, 55, 26376, 56, 26376, + 57, 26376, 49, 48, 26376, 49, 49, 26376, 49, 50, 26376, 104, 103, 101, 114, 103, + 101, 118, 108, 116, 100, 12450, 12452, 12454, 12456, 12458, 12459, 12461, 12463, + 12465, 12469, 12471, 12473, 12475, 12477, 12479, 12481, 12484, 12486, 12490, 12491, + 12492, 12493, 12494, 12495, 12498, 12501, 12504, 12507, 12510, 12511, 12512, 12513, + 12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, 12525, 12527, 12528, 12529, + 12530, 20196, 21644, 12450, 12497, 12540, 12488, 12450, 12523, 12501, 12449, 12450, + 12531, 12506, 12450, 12450, 12540, 12523, 12452, 12491, 12531, 12464, 12452, 12531, + 12481, 12454, 12457, 12531, 12456, 12473, 12463, 12540, 12489, 12456, 12540, 12459, + 12540, 12458, 12531, 12473, 12458, 12540, 12512, 12459, 12452, 12522, 12459, 12521, + 12483, 12488, 12459, 12525, 12522, 12540, 12460, 12525, 12531, 12460, 12531, 12510, + 12462, 12460, 12462, 12491, 12540, 12461, 12517, 12522, 12540, 12462, 12523, 12480, + 12540, 12461, 12525, 12461, 12525, 12464, 12521, 12512, 12461, 12525, 12513, 12540, + 12488, 12523, 12461, 12525, 12527, 12483, 12488, 12464, 12521, 12512, 12488, 12531, + 12463, 12523, 12476, 12452, 12525, 12463, 12525, 12540, 12493, 12465, 12540, 12473, + 12467, 12523, 12490, 12467, 12540, 12509, 12469, 12452, 12463, 12523, 12469, 12531, + 12481, 12540, 12512, 12471, 12522, 12531, 12464, 12475, 12531, 12481, 12475, 12531, + 12488, 12480, 12540, 12473, 12487, 12471, 12489, 12523, 12490, 12494, 12494, 12483, + 12488, 12495, 12452, 12484, 12497, 12540, 12475, 12531, 12488, 12497, 12540, 12484, + 12496, 12540, 12524, 12523, 12500, 12450, 12473, 12488, 12523, 12500, 12463, 12523, + 12500, 12467, 12499, 12523, 12501, 12449, 12521, 12483, 12489, 12501, 12451, 12540, + 12488, 12502, 12483, 12471, 12455, 12523, 12501, 12521, 12531, 12504, 12463, 12479, + 12540, 12523, 12506, 12477, 12506, 12491, 12498, 12504, 12523, 12484, 12506, 12531, + 12473, 12506, 12540, 12472, 12505, 12540, 12479, 12509, 12452, 12531, 12488, 12508, + 12523, 12488, 12507, 12531, 12509, 12531, 12489, 12507, 12540, 12523, 12507, 12540, + 12531, 12510, 12452, 12463, 12525, 12510, 12452, 12523, 12510, 12483, 12495, 12510, + 12523, 12463, 12510, 12531, 12471, 12519, 12531, 12511, 12463, 12525, 12531, 12511, + 12522, 12511, 12522, 12496, 12540, 12523, 12513, 12460, 12513, 12460, 12488, 12531, + 12516, 12540, 12489, 12516, 12540, 12523, 12518, 12450, 12531, 12522, 12483, 12488, + 12523, 12522, 12521, 12523, 12500, 12540, 12523, 12540, 12502, 12523, 12524, 12512, + 12524, 12531, 12488, 12466, 12531, 48, 28857, 49, 28857, 50, 28857, 51, 28857, 52, + 28857, 53, 28857, 54, 28857, 55, 28857, 56, 28857, 57, 28857, 49, 48, 28857, 49, + 49, 28857, 49, 50, 28857, 49, 51, 28857, 49, 52, 28857, 49, 53, 28857, 49, 54, 28857, + 49, 55, 28857, 49, 56, 28857, 49, 57, 28857, 50, 48, 28857, 50, 49, 28857, 50, 50, + 28857, 50, 51, 28857, 50, 52, 28857, 104, 112, 97, 100, 97, 97, 117, 98, 97, 114, + 111, 118, 112, 99, 100, 109, 100, 109, 50, 100, 109, 51, 105, 117, 24179, 25104, + 26157, 21644, 22823, 27491, 26126, 27835, 26666, 24335, 20250, 31038, 110, 97, 956, + 97, 109, 97, 107, 97, 107, 98, 109, 98, 103, 98, 99, 97, 108, 107, 99, 97, 108, + 112, 102, 110, 102, 956, 102, 956, 103, 109, 103, 107, 103, 104, 122, 107, 104, + 122, 109, 104, 122, 116, 104, 122, 956, 108, 109, 108, 100, 108, 102, 109, 110, + 109, 956, 109, 109, 109, 99, 109, 107, 109, 109, 109, 50, 99, 109, 50, 107, 109, + 50, 109, 109, 51, 99, 109, 51, 107, 109, 51, 109, 8725, 115, 109, 8725, 115, 50, + 107, 112, 97, 109, 112, 97, 103, 112, 97, 114, 97, 100, 114, 97, 100, 8725, 115, + 114, 97, 100, 8725, 115, 50, 112, 115, 110, 115, 956, 115, 109, 115, 112, 118, 110, + 118, 956, 118, 109, 118, 107, 118, 112, 119, 110, 119, 956, 119, 109, 119, 107, + 119, 107, 969, 109, 969, 98, 113, 99, 8725, 107, 103, 100, 98, 103, 121, 104, 97, + 105, 110, 107, 107, 107, 116, 108, 110, 108, 111, 103, 108, 120, 109, 105, 108, + 109, 111, 108, 112, 104, 112, 112, 109, 112, 114, 115, 118, 119, 98, 118, 8725, + 109, 97, 8725, 109, 49, 26085, 50, 26085, 51, 26085, 52, 26085, 53, 26085, 54, 26085, + 55, 26085, 56, 26085, 57, 26085, 49, 48, 26085, 49, 49, 26085, 49, 50, 26085, 49, + 51, 26085, 49, 52, 26085, 49, 53, 26085, 49, 54, 26085, 49, 55, 26085, 49, 56, 26085, + 49, 57, 26085, 50, 48, 26085, 50, 49, 26085, 50, 50, 26085, 50, 51, 26085, 50, 52, + 26085, 50, 53, 26085, 50, 54, 26085, 50, 55, 26085, 50, 56, 26085, 50, 57, 26085, + 51, 48, 26085, 51, 49, 26085, 103, 97, 108, 42561, 42563, 42565, 42567, 42569, 42573, + 42575, 42577, 42579, 42581, 42583, 42585, 42587, 42589, 42591, 42593, 42595, 42597, + 42599, 42601, 42603, 42605, 42625, 42627, 42629, 42631, 42633, 42635, 42637, 42639, + 42641, 42643, 42645, 42647, 42649, 42651, 42787, 42789, 42791, 42793, 42795, 42797, + 42799, 42803, 42805, 42807, 42809, 42811, 42813, 42815, 42817, 42819, 42821, 42823, + 42825, 42827, 42829, 42831, 42833, 42835, 42837, 42839, 42841, 42843, 42845, 42847, + 42849, 42851, 42853, 42855, 42857, 42859, 42861, 42863, 42874, 42876, 7545, 42879, + 42881, 42883, 42885, 42887, 42892, 42897, 42899, 42903, 42905, 42907, 42909, 42911, + 42913, 42915, 42917, 42919, 42921, 620, 670, 647, 43859, 42933, 42935, 42937, 42939, + 42941, 42943, 42945, 42947, 42900, 7566, 42952, 42954, 42961, 42967, 42969, 42998, + 43831, 43858, 653, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, + 5035, 5036, 5037, 5038, 5039, 5040, 5041, 5042, 5043, 5044, 5045, 5046, 5047, 5048, + 5049, 5050, 5051, 5052, 5053, 5054, 5055, 5056, 5057, 5058, 5059, 5060, 5061, 5062, + 5063, 5064, 5065, 5066, 5067, 5068, 5069, 5070, 5071, 5072, 5073, 5074, 5075, 5076, + 5077, 5078, 5079, 5080, 5081, 5082, 5083, 5084, 5085, 5086, 5087, 5088, 5089, 5090, + 5091, 5092, 5093, 5094, 5095, 5096, 5097, 5098, 5099, 5100, 5101, 5102, 5103, 35912, + 26356, 36040, 28369, 20018, 21477, 22865, 21895, 22856, 25078, 30313, 32645, 34367, + 34746, 35064, 37007, 27138, 27931, 28889, 29662, 33853, 37226, 39409, 20098, 21365, + 27396, 29211, 34349, 40478, 23888, 28651, 34253, 35172, 25289, 33240, 34847, 24266, + 26391, 28010, 29436, 37070, 20358, 20919, 21214, 25796, 27347, 29200, 30439, 34310, + 34396, 36335, 38706, 39791, 40442, 30860, 31103, 32160, 33737, 37636, 35542, 22751, + 24324, 31840, 32894, 29282, 30922, 36034, 38647, 22744, 23650, 27155, 28122, 28431, + 32047, 32311, 38475, 21202, 32907, 20956, 20940, 31260, 32190, 33777, 38517, 35712, + 25295, 35582, 20025, 23527, 24594, 29575, 30064, 21271, 30971, 20415, 24489, 19981, + 27852, 25976, 32034, 21443, 22622, 30465, 33865, 35498, 27578, 27784, 25342, 33509, + 25504, 30053, 20142, 20841, 20937, 26753, 31975, 33391, 35538, 37327, 21237, 21570, + 24300, 26053, 28670, 31018, 38317, 39530, 40599, 40654, 26310, 27511, 36706, 24180, + 24976, 25088, 25754, 28451, 29001, 29833, 31178, 32244, 32879, 36646, 34030, 36899, + 37706, 21015, 21155, 21693, 28872, 35010, 24265, 24565, 25467, 27566, 31806, 29557, + 22265, 23994, 24604, 29618, 29801, 32666, 32838, 37428, 38646, 38728, 38936, 20363, + 31150, 37300, 38584, 24801, 20102, 20698, 23534, 23615, 26009, 29134, 30274, 34044, + 36988, 26248, 38446, 21129, 26491, 26611, 27969, 28316, 29705, 30041, 30827, 32016, + 39006, 25134, 38520, 20523, 23833, 28138, 36650, 24459, 24900, 26647, 38534, 21033, + 21519, 23653, 26131, 26446, 26792, 27877, 29702, 30178, 32633, 35023, 35041, 38626, + 21311, 28346, 21533, 29136, 29848, 34298, 38563, 40023, 40607, 26519, 28107, 33256, + 31520, 31890, 29376, 28825, 35672, 20160, 33590, 21050, 20999, 24230, 25299, 31958, + 23429, 27934, 26292, 36667, 38477, 24275, 20800, 21952, 22618, 26228, 20958, 29482, + 30410, 31036, 31070, 31077, 31119, 38742, 31934, 34322, 35576, 36920, 37117, 39151, + 39164, 39208, 40372, 37086, 38583, 20398, 20711, 20813, 21193, 21220, 21329, 21917, + 22022, 22120, 22592, 22696, 23652, 24724, 24936, 24974, 25074, 25935, 26082, 26257, + 26757, 28023, 28186, 28450, 29038, 29227, 29730, 30865, 31049, 31048, 31056, 31062, + 31117, 31118, 31296, 31361, 31680, 32265, 32321, 32626, 32773, 33261, 33401, 33879, + 35088, 35222, 35585, 35641, 36051, 36104, 36790, 38627, 38911, 38971, 24693, 148206, + 33304, 20006, 20917, 20840, 20352, 20805, 20864, 21191, 21242, 21845, 21913, 21986, + 22707, 22852, 22868, 23138, 23336, 24274, 24281, 24425, 24493, 24792, 24910, 24840, + 24928, 25140, 25540, 25628, 25682, 25942, 26395, 26454, 28379, 28363, 28702, 30631, + 29237, 29359, 29809, 29958, 30011, 30237, 30239, 30427, 30452, 30538, 30528, 30924, + 31409, 31867, 32091, 32574, 33618, 33775, 34681, 35137, 35206, 35519, 35531, 35565, + 35722, 36664, 36978, 37273, 37494, 38524, 38875, 38923, 39698, 141386, 141380, 144341, + 15261, 16408, 16441, 152137, 154832, 163539, 40771, 40846, 102, 102, 102, 105, 102, + 108, 102, 102, 108, 1396, 1398, 1396, 1381, 1396, 1387, 1406, 1398, 1396, 1389, + 1497, 1460, 1522, 1463, 1506, 1492, 1499, 1500, 1501, 1512, 1514, 1513, 1473, 1513, + 1474, 1513, 1468, 1473, 1513, 1468, 1474, 1488, 1463, 1488, 1464, 1488, 1468, 1489, + 1468, 1490, 1468, 1491, 1468, 1492, 1468, 1493, 1468, 1494, 1468, 1496, 1468, 1497, + 1468, 1498, 1468, 1499, 1468, 1500, 1468, 1502, 1468, 1504, 1468, 1505, 1468, 1507, + 1468, 1508, 1468, 1510, 1468, 1511, 1468, 1512, 1468, 1514, 1468, 1493, 1465, 1489, + 1471, 1499, 1471, 1508, 1471, 1488, 1500, 1649, 1659, 1662, 1664, 1658, 1663, 1657, + 1700, 1702, 1668, 1667, 1670, 1671, 1677, 1676, 1678, 1672, 1688, 1681, 1705, 1711, + 1715, 1713, 1722, 1723, 1728, 1729, 1726, 1746, 1747, 1709, 1734, 1736, 1739, 1733, + 1737, 1744, 1609, 1574, 1575, 1574, 1749, 1574, 1608, 1574, 1735, 1574, 1734, 1574, + 1736, 1574, 1744, 1574, 1609, 1740, 1574, 1580, 1574, 1581, 1574, 1605, 1574, 1610, + 1576, 1580, 1576, 1581, 1576, 1582, 1576, 1605, 1576, 1609, 1576, 1610, 1578, 1580, + 1578, 1581, 1578, 1582, 1578, 1605, 1578, 1609, 1578, 1610, 1579, 1580, 1579, 1605, + 1579, 1609, 1579, 1610, 1580, 1581, 1580, 1605, 1581, 1605, 1582, 1580, 1582, 1581, + 1582, 1605, 1587, 1580, 1587, 1581, 1587, 1582, 1587, 1605, 1589, 1581, 1589, 1605, + 1590, 1580, 1590, 1581, 1590, 1582, 1590, 1605, 1591, 1581, 1591, 1605, 1592, 1605, + 1593, 1580, 1593, 1605, 1594, 1580, 1594, 1605, 1601, 1580, 1601, 1581, 1601, 1582, + 1601, 1605, 1601, 1609, 1601, 1610, 1602, 1581, 1602, 1605, 1602, 1609, 1602, 1610, + 1603, 1575, 1603, 1580, 1603, 1581, 1603, 1582, 1603, 1604, 1603, 1605, 1603, 1609, + 1603, 1610, 1604, 1580, 1604, 1581, 1604, 1582, 1604, 1605, 1604, 1609, 1604, 1610, + 1605, 1580, 1605, 1605, 1605, 1609, 1605, 1610, 1606, 1580, 1606, 1581, 1606, 1582, + 1606, 1605, 1606, 1609, 1606, 1610, 1607, 1580, 1607, 1605, 1607, 1609, 1607, 1610, + 1610, 1581, 1610, 1582, 1610, 1609, 1584, 1648, 1585, 1648, 1609, 1648, 32, 1612, + 1617, 32, 1613, 1617, 32, 1614, 1617, 32, 1615, 1617, 32, 1616, 1617, 32, 1617, + 1648, 1574, 1585, 1574, 1586, 1574, 1606, 1576, 1585, 1576, 1586, 1576, 1606, 1578, + 1585, 1578, 1586, 1578, 1606, 1579, 1585, 1579, 1586, 1579, 1606, 1605, 1575, 1606, + 1585, 1606, 1586, 1606, 1606, 1610, 1585, 1610, 1586, 1574, 1582, 1574, 1607, 1576, + 1607, 1578, 1607, 1589, 1582, 1604, 1607, 1606, 1607, 1607, 1648, 1579, 1607, 1587, + 1607, 1588, 1605, 1588, 1607, 1600, 1614, 1617, 1600, 1615, 1617, 1600, 1616, 1617, + 1591, 1609, 1591, 1610, 1593, 1609, 1593, 1610, 1594, 1609, 1594, 1610, 1587, 1609, + 1587, 1610, 1588, 1609, 1588, 1610, 1581, 1609, 1580, 1609, 1580, 1610, 1582, 1609, + 1589, 1609, 1589, 1610, 1590, 1609, 1590, 1610, 1588, 1580, 1588, 1581, 1588, 1582, + 1588, 1585, 1587, 1585, 1589, 1585, 1590, 1585, 1575, 1611, 1578, 1580, 1605, 1578, + 1581, 1580, 1578, 1581, 1605, 1578, 1582, 1605, 1578, 1605, 1580, 1578, 1605, 1581, + 1578, 1605, 1582, 1581, 1605, 1610, 1581, 1605, 1609, 1587, 1581, 1580, 1587, 1580, + 1581, 1587, 1580, 1609, 1587, 1605, 1581, 1587, 1605, 1580, 1587, 1605, 1605, 1589, + 1581, 1581, 1589, 1605, 1605, 1588, 1581, 1605, 1588, 1580, 1610, 1588, 1605, 1582, + 1588, 1605, 1605, 1590, 1581, 1609, 1590, 1582, 1605, 1591, 1605, 1581, 1591, 1605, + 1605, 1591, 1605, 1610, 1593, 1580, 1605, 1593, 1605, 1605, 1593, 1605, 1609, 1594, + 1605, 1605, 1594, 1605, 1610, 1594, 1605, 1609, 1601, 1582, 1605, 1602, 1605, 1581, + 1602, 1605, 1605, 1604, 1581, 1605, 1604, 1581, 1610, 1604, 1581, 1609, 1604, 1580, + 1580, 1604, 1582, 1605, 1604, 1605, 1581, 1605, 1581, 1580, 1605, 1581, 1610, 1605, + 1580, 1581, 1605, 1582, 1605, 1605, 1580, 1582, 1607, 1605, 1580, 1607, 1605, 1605, + 1606, 1581, 1605, 1606, 1581, 1609, 1606, 1580, 1605, 1606, 1580, 1609, 1606, 1605, + 1610, 1606, 1605, 1609, 1610, 1605, 1605, 1576, 1582, 1610, 1578, 1580, 1610, 1578, + 1580, 1609, 1578, 1582, 1610, 1578, 1582, 1609, 1578, 1605, 1610, 1578, 1605, 1609, + 1580, 1605, 1610, 1580, 1581, 1609, 1580, 1605, 1609, 1587, 1582, 1609, 1589, 1581, + 1610, 1588, 1581, 1610, 1590, 1581, 1610, 1604, 1580, 1610, 1604, 1605, 1610, 1610, + 1580, 1610, 1610, 1605, 1610, 1605, 1605, 1610, 1602, 1605, 1610, 1606, 1581, 1610, + 1593, 1605, 1610, 1603, 1605, 1610, 1606, 1580, 1581, 1605, 1582, 1610, 1604, 1580, + 1605, 1603, 1605, 1605, 1580, 1581, 1610, 1581, 1580, 1610, 1605, 1580, 1610, 1601, + 1605, 1610, 1576, 1581, 1610, 1587, 1582, 1610, 1606, 1580, 1610, 1589, 1604, 1746, + 1602, 1604, 1746, 1575, 1604, 1604, 1607, 1575, 1603, 1576, 1585, 1605, 1581, 1605, + 1583, 1589, 1604, 1593, 1605, 1585, 1587, 1608, 1604, 1593, 1604, 1610, 1607, 1608, + 1587, 1604, 1605, 1589, 1604, 1609, 1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, + 32, 1593, 1604, 1610, 1607, 32, 1608, 1587, 1604, 1605, 1580, 1604, 32, 1580, 1604, + 1575, 1604, 1607, 1585, 1740, 1575, 1604, 44, 12289, 12310, 12311, 8212, 8211, 95, + 123, 125, 12308, 12309, 12304, 12305, 12298, 12299, 12300, 12301, 12302, 12303, + 91, 93, 35, 38, 42, 45, 60, 62, 92, 36, 37, 64, 32, 1611, 1600, 1611, 1600, 1617, + 32, 1618, 1600, 1618, 1569, 1570, 1571, 1572, 1573, 1577, 1604, 1570, 1604, 1571, + 1604, 1573, 34, 39, 94, 124, 126, 10629, 10630, 12539, 12453, 12515, 162, 163, 172, + 166, 165, 8361, 9474, 8592, 8593, 8594, 8595, 9632, 9675, 66600, 66601, 66602, 66603, + 66604, 66605, 66606, 66607, 66608, 66609, 66610, 66611, 66612, 66613, 66614, 66615, + 66616, 66617, 66618, 66619, 66620, 66621, 66622, 66623, 66624, 66625, 66626, 66627, + 66628, 66629, 66630, 66631, 66632, 66633, 66634, 66635, 66636, 66637, 66638, 66639, + 66776, 66777, 66778, 66779, 66780, 66781, 66782, 66783, 66784, 66785, 66786, 66787, + 66788, 66789, 66790, 66791, 66792, 66793, 66794, 66795, 66796, 66797, 66798, 66799, + 66800, 66801, 66802, 66803, 66804, 66805, 66806, 66807, 66808, 66809, 66810, 66811, + 66967, 66968, 66969, 66970, 66971, 66972, 66973, 66974, 66975, 66976, 66977, 66979, + 66980, 66981, 66982, 66983, 66984, 66985, 66986, 66987, 66988, 66989, 66990, 66991, + 66992, 66993, 66995, 66996, 66997, 66998, 66999, 67000, 67001, 67003, 67004, 720, + 721, 665, 675, 43878, 677, 676, 7569, 600, 606, 681, 612, 610, 667, 668, 615, 644, + 682, 683, 122628, 42894, 622, 122629, 654, 122630, 630, 631, 634, 122632, 638, 680, + 678, 43879, 679, 11377, 655, 673, 674, 664, 448, 449, 450, 122634, 122654, 68800, + 68801, 68802, 68803, 68804, 68805, 68806, 68807, 68808, 68809, 68810, 68811, 68812, + 68813, 68814, 68815, 68816, 68817, 68818, 68819, 68820, 68821, 68822, 68823, 68824, + 68825, 68826, 68827, 68828, 68829, 68830, 68831, 68832, 68833, 68834, 68835, 68836, + 68837, 68838, 68839, 68840, 68841, 68842, 68843, 68844, 68845, 68846, 68847, 68848, + 68849, 68850, 71872, 71873, 71874, 71875, 71876, 71877, 71878, 71879, 71880, 71881, + 71882, 71883, 71884, 71885, 71886, 71887, 71888, 71889, 71890, 71891, 71892, 71893, + 71894, 71895, 71896, 71897, 71898, 71899, 71900, 71901, 71902, 71903, 93792, 93793, + 93794, 93795, 93796, 93797, 93798, 93799, 93800, 93801, 93802, 93803, 93804, 93805, + 93806, 93807, 93808, 93809, 93810, 93811, 93812, 93813, 93814, 93815, 93816, 93817, + 93818, 93819, 93820, 93821, 93822, 93823, 119127, 119141, 119128, 119141, 119128, + 119141, 119150, 119128, 119141, 119151, 119128, 119141, 119152, 119128, 119141, + 119153, 119128, 119141, 119154, 119225, 119141, 119226, 119141, 119225, 119141, + 119150, 119226, 119141, 119150, 119225, 119141, 119151, 119226, 119141, 119151, + 305, 567, 8711, 8706, 1231, 125218, 125219, 125220, 125221, 125222, 125223, 125224, + 125225, 125226, 125227, 125228, 125229, 125230, 125231, 125232, 125233, 125234, + 125235, 125236, 125237, 125238, 125239, 125240, 125241, 125242, 125243, 125244, + 125245, 125246, 125247, 125248, 125249, 125250, 125251, 1646, 1697, 1647, 48, 44, + 49, 44, 50, 44, 51, 44, 52, 44, 53, 44, 54, 44, 55, 44, 56, 44, 57, 44, 12308, 115, + 12309, 119, 122, 104, 118, 115, 100, 115, 115, 112, 112, 118, 119, 99, 109, 114, + 100, 106, 12411, 12363, 12467, 12467, 23383, 21452, 22810, 35299, 20132, 26144, + 28961, 21069, 24460, 20877, 26032, 21021, 32066, 36009, 22768, 21561, 28436, 25237, + 25429, 36938, 25351, 25171, 31105, 31354, 21512, 28288, 30003, 21106, 21942, 37197, + 12308, 26412, 12309, 12308, 19977, 12309, 12308, 20108, 12309, 12308, 23433, 12309, + 12308, 28857, 12309, 12308, 25171, 12309, 12308, 30423, 12309, 12308, 21213, 12309, + 12308, 25943, 12309, 24471, 21487, 20029, 20024, 20033, 131362, 20320, 20411, 20482, + 20602, 20633, 20687, 13470, 132666, 20820, 20836, 20855, 132380, 13497, 20839, 132427, + 20887, 20900, 20172, 20908, 168415, 20995, 13535, 21051, 21062, 21111, 13589, 21253, + 21254, 21321, 21338, 21363, 21373, 21375, 133676, 28784, 21450, 21471, 133987, 21483, + 21489, 21510, 21662, 21560, 21576, 21608, 21666, 21750, 21776, 21843, 21859, 21892, + 21931, 21939, 21954, 22294, 22295, 22097, 22132, 22766, 22478, 22516, 22541, 22411, + 22578, 22577, 22700, 136420, 22770, 22775, 22790, 22818, 22882, 136872, 136938, + 23020, 23067, 23079, 23000, 23142, 14062, 23304, 23358, 137672, 23491, 23512, 23539, + 138008, 23551, 23558, 14209, 23648, 23744, 23693, 138724, 23875, 138726, 23918, + 23915, 23932, 24033, 24034, 14383, 24061, 24104, 24125, 24169, 14434, 139651, 14460, + 24240, 24243, 24246, 172946, 140081, 33281, 24354, 14535, 144056, 156122, 24418, + 24427, 14563, 24474, 24525, 24535, 24569, 24705, 14650, 14620, 141012, 24775, 24904, + 24908, 24954, 25010, 24996, 25007, 25054, 25115, 25181, 25265, 25300, 25424, 142092, + 25405, 25340, 25448, 25475, 25572, 142321, 25634, 25541, 25513, 14894, 25705, 25726, + 25757, 25719, 14956, 25964, 143370, 26083, 26360, 26185, 15129, 15112, 15076, 20882, + 20885, 26368, 26268, 32941, 17369, 26401, 26462, 26451, 144323, 15177, 26618, 26501, + 26706, 144493, 26766, 26655, 26900, 26946, 27043, 27114, 27304, 145059, 27355, 15384, + 27425, 145575, 27476, 15438, 27506, 27551, 27579, 146061, 138507, 146170, 27726, + 146620, 27839, 27853, 27751, 27926, 27966, 28009, 28024, 28037, 146718, 27956, 28207, + 28270, 15667, 28359, 147153, 28153, 28526, 147294, 147342, 28614, 28729, 28699, + 15766, 28746, 28797, 28791, 28845, 132389, 28997, 148067, 29084, 29224, 29264, 149000, + 29312, 29333, 149301, 149524, 29562, 29579, 16044, 29605, 16056, 29767, 29788, 29829, + 29898, 16155, 29988, 150582, 30014, 150674, 139679, 30224, 151457, 151480, 151620, + 16380, 16392, 151795, 151794, 151833, 151859, 30494, 30495, 30603, 16454, 16534, + 152605, 30798, 16611, 153126, 153242, 153285, 31211, 16687, 31306, 31311, 153980, + 154279, 16898, 154539, 31686, 31689, 16935, 154752, 31954, 17056, 31976, 31971, + 32000, 155526, 32099, 17153, 32199, 32258, 32325, 17204, 156200, 156231, 17241, + 156377, 32634, 156478, 32661, 32762, 156890, 156963, 32864, 157096, 32880, 144223, + 17365, 32946, 33027, 17419, 33086, 23221, 157607, 157621, 144275, 144284, 33284, + 36766, 17515, 33425, 33419, 33437, 21171, 33457, 33459, 33469, 33510, 158524, 33565, + 33635, 33709, 33571, 33725, 33767, 33619, 33738, 33740, 33756, 158774, 159083, 158933, + 17707, 34033, 34035, 34070, 160714, 34148, 159532, 17757, 17761, 159665, 159954, + 17771, 34384, 34407, 34409, 34473, 34440, 34574, 34530, 34600, 34667, 34694, 34785, + 34817, 17913, 34912, 161383, 35031, 35038, 17973, 35066, 13499, 161966, 162150, + 18110, 18119, 35488, 162984, 36011, 36033, 36123, 36215, 163631, 133124, 36299, + 36284, 36336, 133342, 36564, 165330, 165357, 37012, 37105, 37137, 165678, 37147, + 37432, 37591, 37592, 37500, 37881, 37909, 166906, 38283, 18837, 38327, 167287, 18918, + 38595, 23986, 38691, 168261, 168474, 19054, 19062, 38880, 168970, 19122, 169110, + 38953, 169398, 39138, 19251, 39209, 39335, 39362, 39422, 19406, 170800, 40000, 40189, + 19662, 19693, 40295, 172238, 19704, 172293, 172558, 172689, 19798, 40702, 40709, + 40719, 40726, 173568, + +}; +const uint32_t table[8002][2] = +{ + {0, 1}, {65, 16777219}, {66, 16777475}, {67, 16777731}, + {68, 16777987}, {69, 16778243}, {70, 16778499}, {71, 16778755}, + {72, 16779011}, {73, 16779267}, {74, 16779523}, {75, 16779779}, + {76, 16780035}, {77, 16780291}, {78, 16780547}, {79, 16780803}, + {80, 16781059}, {81, 16781315}, {82, 16781571}, {83, 16781827}, + {84, 16782083}, {85, 16782339}, {86, 16782595}, {87, 16782851}, + {88, 16783107}, {89, 16783363}, {90, 16783619}, {91, 1}, + {128, 2}, {160, 16783875}, {161, 1}, {168, 33561347}, + {169, 1}, {170, 16777219}, {171, 1}, {173, 0}, + {174, 1}, {175, 33561859}, {176, 1}, {178, 16785155}, + {179, 16785411}, {180, 33562883}, {181, 16786179}, {182, 1}, + {184, 33563651}, {185, 16786947}, {186, 16780803}, {187, 1}, + {188, 50341635}, {189, 50342403}, {190, 50343171}, {191, 1}, + {192, 16789507}, {193, 16789763}, {194, 16790019}, {195, 16790275}, + {196, 16790531}, {197, 16790787}, {198, 16791043}, {199, 16791299}, + {200, 16791555}, {201, 16791811}, {202, 16792067}, {203, 16792323}, + {204, 16792579}, {205, 16792835}, {206, 16793091}, {207, 16793347}, + {208, 16793603}, {209, 16793859}, {210, 16794115}, {211, 16794371}, + {212, 16794627}, {213, 16794883}, {214, 16795139}, {215, 1}, + {216, 16795395}, {217, 16795651}, {218, 16795907}, {219, 16796163}, + {220, 16796419}, {221, 16796675}, {222, 16796931}, {223, 1}, + {256, 16797187}, {257, 1}, {258, 16797443}, {259, 1}, + {260, 16797699}, {261, 1}, {262, 16797955}, {263, 1}, + {264, 16798211}, {265, 1}, {266, 16798467}, {267, 1}, + {268, 16798723}, {269, 1}, {270, 16798979}, {271, 1}, + {272, 16799235}, {273, 1}, {274, 16799491}, {275, 1}, + {276, 16799747}, {277, 1}, {278, 16800003}, {279, 1}, + {280, 16800259}, {281, 1}, {282, 16800515}, {283, 1}, + {284, 16800771}, {285, 1}, {286, 16801027}, {287, 1}, + {288, 16801283}, {289, 1}, {290, 16801539}, {291, 1}, + {292, 16801795}, {293, 1}, {294, 16802051}, {295, 1}, + {296, 16802307}, {297, 1}, {298, 16802563}, {299, 1}, + {300, 16802819}, {301, 1}, {302, 16803075}, {303, 1}, + {304, 33580547}, {305, 1}, {306, 33556483}, {308, 16803843}, + {309, 1}, {310, 16804099}, {311, 1}, {313, 16804355}, + {314, 1}, {315, 16804611}, {316, 1}, {317, 16804867}, + {318, 1}, {319, 33582339}, {321, 16805635}, {322, 1}, + {323, 16805891}, {324, 1}, {325, 16806147}, {326, 1}, + {327, 16806403}, {328, 1}, {329, 33583875}, {330, 16807171}, + {331, 1}, {332, 16807427}, {333, 1}, {334, 16807683}, + {335, 1}, {336, 16807939}, {337, 1}, {338, 16808195}, + {339, 1}, {340, 16808451}, {341, 1}, {342, 16808707}, + {343, 1}, {344, 16808963}, {345, 1}, {346, 16809219}, + {347, 1}, {348, 16809475}, {349, 1}, {350, 16809731}, + {351, 1}, {352, 16809987}, {353, 1}, {354, 16810243}, + {355, 1}, {356, 16810499}, {357, 1}, {358, 16810755}, + {359, 1}, {360, 16811011}, {361, 1}, {362, 16811267}, + {363, 1}, {364, 16811523}, {365, 1}, {366, 16811779}, + {367, 1}, {368, 16812035}, {369, 1}, {370, 16812291}, + {371, 1}, {372, 16812547}, {373, 1}, {374, 16812803}, + {375, 1}, {376, 16813059}, {377, 16813315}, {378, 1}, + {379, 16813571}, {380, 1}, {381, 16813827}, {382, 1}, + {383, 16781827}, {384, 1}, {385, 16814083}, {386, 16814339}, + {387, 1}, {388, 16814595}, {389, 1}, {390, 16814851}, + {391, 16815107}, {392, 1}, {393, 16815363}, {394, 16815619}, + {395, 16815875}, {396, 1}, {398, 16816131}, {399, 16816387}, + {400, 16816643}, {401, 16816899}, {402, 1}, {403, 16817155}, + {404, 16817411}, {405, 1}, {406, 16817667}, {407, 16817923}, + {408, 16818179}, {409, 1}, {412, 16818435}, {413, 16818691}, + {414, 1}, {415, 16818947}, {416, 16819203}, {417, 1}, + {418, 16819459}, {419, 1}, {420, 16819715}, {421, 1}, + {422, 16819971}, {423, 16820227}, {424, 1}, {425, 16820483}, + {426, 1}, {428, 16820739}, {429, 1}, {430, 16820995}, + {431, 16821251}, {432, 1}, {433, 16821507}, {434, 16821763}, + {435, 16822019}, {436, 1}, {437, 16822275}, {438, 1}, + {439, 16822531}, {440, 16822787}, {441, 1}, {444, 16823043}, + {445, 1}, {452, 33600515}, {455, 33601027}, {458, 33601539}, + {461, 16824835}, {462, 1}, {463, 16825091}, {464, 1}, + {465, 16825347}, {466, 1}, {467, 16825603}, {468, 1}, + {469, 16825859}, {470, 1}, {471, 16826115}, {472, 1}, + {473, 16826371}, {474, 1}, {475, 16826627}, {476, 1}, + {478, 16826883}, {479, 1}, {480, 16827139}, {481, 1}, + {482, 16827395}, {483, 1}, {484, 16827651}, {485, 1}, + {486, 16827907}, {487, 1}, {488, 16828163}, {489, 1}, + {490, 16828419}, {491, 1}, {492, 16828675}, {493, 1}, + {494, 16828931}, {495, 1}, {497, 33606403}, {500, 16829699}, + {501, 1}, {502, 16829955}, {503, 16830211}, {504, 16830467}, + {505, 1}, {506, 16830723}, {507, 1}, {508, 16830979}, + {509, 1}, {510, 16831235}, {511, 1}, {512, 16831491}, + {513, 1}, {514, 16831747}, {515, 1}, {516, 16832003}, + {517, 1}, {518, 16832259}, {519, 1}, {520, 16832515}, + {521, 1}, {522, 16832771}, {523, 1}, {524, 16833027}, + {525, 1}, {526, 16833283}, {527, 1}, {528, 16833539}, + {529, 1}, {530, 16833795}, {531, 1}, {532, 16834051}, + {533, 1}, {534, 16834307}, {535, 1}, {536, 16834563}, + {537, 1}, {538, 16834819}, {539, 1}, {540, 16835075}, + {541, 1}, {542, 16835331}, {543, 1}, {544, 16835587}, + {545, 1}, {546, 16835843}, {547, 1}, {548, 16836099}, + {549, 1}, {550, 16836355}, {551, 1}, {552, 16836611}, + {553, 1}, {554, 16836867}, {555, 1}, {556, 16837123}, + {557, 1}, {558, 16837379}, {559, 1}, {560, 16837635}, + {561, 1}, {562, 16837891}, {563, 1}, {570, 16838147}, + {571, 16838403}, {572, 1}, {573, 16838659}, {574, 16838915}, + {575, 1}, {577, 16839171}, {578, 1}, {579, 16839427}, + {580, 16839683}, {581, 16839939}, {582, 16840195}, {583, 1}, + {584, 16840451}, {585, 1}, {586, 16840707}, {587, 1}, + {588, 16840963}, {589, 1}, {590, 16841219}, {591, 1}, + {688, 16779011}, {689, 16841475}, {690, 16779523}, {691, 16781571}, + {692, 16841731}, {693, 16841987}, {694, 16842243}, {695, 16782851}, + {696, 16783363}, {697, 1}, {728, 33619715}, {729, 33620227}, + {730, 33620739}, {731, 33621251}, {732, 33621763}, {733, 33622275}, + {734, 1}, {736, 16817411}, {737, 16780035}, {738, 16781827}, + {739, 16783107}, {740, 16845571}, {741, 1}, {832, 16845827}, + {833, 16785923}, {834, 1}, {835, 16846083}, {836, 33623555}, + {837, 16846851}, {838, 1}, {847, 0}, {848, 1}, + {880, 16847107}, {881, 1}, {882, 16847363}, {883, 1}, + {884, 16847619}, {885, 1}, {886, 16847875}, {887, 1}, + {888, 2}, {890, 33625347}, {891, 1}, {894, 16848643}, + {895, 16848899}, {896, 2}, {900, 33562883}, {901, 50403587}, + {902, 16849923}, {903, 16805379}, {904, 16850179}, {905, 16850435}, + {906, 16850691}, {907, 2}, {908, 16850947}, {909, 2}, + {910, 16851203}, {911, 16851459}, {912, 1}, {913, 16851715}, + {914, 16851971}, {915, 16852227}, {916, 16852483}, {917, 16852739}, + {918, 16852995}, {919, 16853251}, {920, 16853507}, {921, 16846851}, + {922, 16853763}, {923, 16854019}, {924, 16786179}, {925, 16854275}, + {926, 16854531}, {927, 16854787}, {928, 16855043}, {929, 16855299}, + {930, 2}, {931, 16855555}, {932, 16855811}, {933, 16856067}, + {934, 16856323}, {935, 16856579}, {936, 16856835}, {937, 16857091}, + {938, 16857347}, {939, 16857603}, {940, 1}, {975, 16857859}, + {976, 16851971}, {977, 16853507}, {978, 16856067}, {979, 16851203}, + {980, 16857603}, {981, 16856323}, {982, 16855043}, {983, 1}, + {984, 16858115}, {985, 1}, {986, 16858371}, {987, 1}, + {988, 16858627}, {989, 1}, {990, 16858883}, {991, 1}, + {992, 16859139}, {993, 1}, {994, 16859395}, {995, 1}, + {996, 16859651}, {997, 1}, {998, 16859907}, {999, 1}, + {1000, 16860163}, {1001, 1}, {1002, 16860419}, {1003, 1}, + {1004, 16860675}, {1005, 1}, {1006, 16860931}, {1007, 1}, + {1008, 16853763}, {1009, 16855299}, {1010, 16855555}, {1011, 1}, + {1012, 16853507}, {1013, 16852739}, {1014, 1}, {1015, 16861187}, + {1016, 1}, {1017, 16855555}, {1018, 16861443}, {1019, 1}, + {1021, 16861699}, {1022, 16861955}, {1023, 16862211}, {1024, 16862467}, + {1025, 16862723}, {1026, 16862979}, {1027, 16863235}, {1028, 16863491}, + {1029, 16863747}, {1030, 16864003}, {1031, 16864259}, {1032, 16864515}, + {1033, 16864771}, {1034, 16865027}, {1035, 16865283}, {1036, 16865539}, + {1037, 16865795}, {1038, 16866051}, {1039, 16866307}, {1040, 16866563}, + {1041, 16866819}, {1042, 16867075}, {1043, 16867331}, {1044, 16867587}, + {1045, 16867843}, {1046, 16868099}, {1047, 16868355}, {1048, 16868611}, + {1049, 16868867}, {1050, 16869123}, {1051, 16869379}, {1052, 16869635}, + {1053, 16869891}, {1054, 16870147}, {1055, 16870403}, {1056, 16870659}, + {1057, 16870915}, {1058, 16871171}, {1059, 16871427}, {1060, 16871683}, + {1061, 16871939}, {1062, 16872195}, {1063, 16872451}, {1064, 16872707}, + {1065, 16872963}, {1066, 16873219}, {1067, 16873475}, {1068, 16873731}, + {1069, 16873987}, {1070, 16874243}, {1071, 16874499}, {1072, 1}, + {1120, 16874755}, {1121, 1}, {1122, 16875011}, {1123, 1}, + {1124, 16875267}, {1125, 1}, {1126, 16875523}, {1127, 1}, + {1128, 16875779}, {1129, 1}, {1130, 16876035}, {1131, 1}, + {1132, 16876291}, {1133, 1}, {1134, 16876547}, {1135, 1}, + {1136, 16876803}, {1137, 1}, {1138, 16877059}, {1139, 1}, + {1140, 16877315}, {1141, 1}, {1142, 16877571}, {1143, 1}, + {1144, 16877827}, {1145, 1}, {1146, 16878083}, {1147, 1}, + {1148, 16878339}, {1149, 1}, {1150, 16878595}, {1151, 1}, + {1152, 16878851}, {1153, 1}, {1162, 16879107}, {1163, 1}, + {1164, 16879363}, {1165, 1}, {1166, 16879619}, {1167, 1}, + {1168, 16879875}, {1169, 1}, {1170, 16880131}, {1171, 1}, + {1172, 16880387}, {1173, 1}, {1174, 16880643}, {1175, 1}, + {1176, 16880899}, {1177, 1}, {1178, 16881155}, {1179, 1}, + {1180, 16881411}, {1181, 1}, {1182, 16881667}, {1183, 1}, + {1184, 16881923}, {1185, 1}, {1186, 16882179}, {1187, 1}, + {1188, 16882435}, {1189, 1}, {1190, 16882691}, {1191, 1}, + {1192, 16882947}, {1193, 1}, {1194, 16883203}, {1195, 1}, + {1196, 16883459}, {1197, 1}, {1198, 16883715}, {1199, 1}, + {1200, 16883971}, {1201, 1}, {1202, 16884227}, {1203, 1}, + {1204, 16884483}, {1205, 1}, {1206, 16884739}, {1207, 1}, + {1208, 16884995}, {1209, 1}, {1210, 16885251}, {1211, 1}, + {1212, 16885507}, {1213, 1}, {1214, 16885763}, {1215, 1}, + {1216, 2}, {1217, 16886019}, {1218, 1}, {1219, 16886275}, + {1220, 1}, {1221, 16886531}, {1222, 1}, {1223, 16886787}, + {1224, 1}, {1225, 16887043}, {1226, 1}, {1227, 16887299}, + {1228, 1}, {1229, 16887555}, {1230, 1}, {1232, 16887811}, + {1233, 1}, {1234, 16888067}, {1235, 1}, {1236, 16888323}, + {1237, 1}, {1238, 16888579}, {1239, 1}, {1240, 16888835}, + {1241, 1}, {1242, 16889091}, {1243, 1}, {1244, 16889347}, + {1245, 1}, {1246, 16889603}, {1247, 1}, {1248, 16889859}, + {1249, 1}, {1250, 16890115}, {1251, 1}, {1252, 16890371}, + {1253, 1}, {1254, 16890627}, {1255, 1}, {1256, 16890883}, + {1257, 1}, {1258, 16891139}, {1259, 1}, {1260, 16891395}, + {1261, 1}, {1262, 16891651}, {1263, 1}, {1264, 16891907}, + {1265, 1}, {1266, 16892163}, {1267, 1}, {1268, 16892419}, + {1269, 1}, {1270, 16892675}, {1271, 1}, {1272, 16892931}, + {1273, 1}, {1274, 16893187}, {1275, 1}, {1276, 16893443}, + {1277, 1}, {1278, 16893699}, {1279, 1}, {1280, 16893955}, + {1281, 1}, {1282, 16894211}, {1283, 1}, {1284, 16894467}, + {1285, 1}, {1286, 16894723}, {1287, 1}, {1288, 16894979}, + {1289, 1}, {1290, 16895235}, {1291, 1}, {1292, 16895491}, + {1293, 1}, {1294, 16895747}, {1295, 1}, {1296, 16896003}, + {1297, 1}, {1298, 16896259}, {1299, 1}, {1300, 16896515}, + {1301, 1}, {1302, 16896771}, {1303, 1}, {1304, 16897027}, + {1305, 1}, {1306, 16897283}, {1307, 1}, {1308, 16897539}, + {1309, 1}, {1310, 16897795}, {1311, 1}, {1312, 16898051}, + {1313, 1}, {1314, 16898307}, {1315, 1}, {1316, 16898563}, + {1317, 1}, {1318, 16898819}, {1319, 1}, {1320, 16899075}, + {1321, 1}, {1322, 16899331}, {1323, 1}, {1324, 16899587}, + {1325, 1}, {1326, 16899843}, {1327, 1}, {1328, 2}, + {1329, 16900099}, {1330, 16900355}, {1331, 16900611}, {1332, 16900867}, + {1333, 16901123}, {1334, 16901379}, {1335, 16901635}, {1336, 16901891}, + {1337, 16902147}, {1338, 16902403}, {1339, 16902659}, {1340, 16902915}, + {1341, 16903171}, {1342, 16903427}, {1343, 16903683}, {1344, 16903939}, + {1345, 16904195}, {1346, 16904451}, {1347, 16904707}, {1348, 16904963}, + {1349, 16905219}, {1350, 16905475}, {1351, 16905731}, {1352, 16905987}, + {1353, 16906243}, {1354, 16906499}, {1355, 16906755}, {1356, 16907011}, + {1357, 16907267}, {1358, 16907523}, {1359, 16907779}, {1360, 16908035}, + {1361, 16908291}, {1362, 16908547}, {1363, 16908803}, {1364, 16909059}, + {1365, 16909315}, {1366, 16909571}, {1367, 2}, {1369, 1}, + {1415, 33687043}, {1416, 1}, {1419, 2}, {1421, 1}, + {1424, 2}, {1425, 1}, {1480, 2}, {1488, 1}, + {1515, 2}, {1519, 1}, {1525, 2}, {1542, 1}, + {1564, 2}, {1565, 1}, {1653, 33687555}, {1654, 33688067}, + {1655, 33688579}, {1656, 33689091}, {1657, 1}, {1757, 2}, + {1758, 1}, {1806, 2}, {1808, 1}, {1867, 2}, + {1869, 1}, {1970, 2}, {1984, 1}, {2043, 2}, + {2045, 1}, {2094, 2}, {2096, 1}, {2111, 2}, + {2112, 1}, {2140, 2}, {2142, 1}, {2143, 2}, + {2144, 1}, {2155, 2}, {2160, 1}, {2191, 2}, + {2200, 1}, {2274, 2}, {2275, 1}, {2392, 33689603}, + {2393, 33690115}, {2394, 33690627}, {2395, 33691139}, {2396, 33691651}, + {2397, 33692163}, {2398, 33692675}, {2399, 33693187}, {2400, 1}, + {2436, 2}, {2437, 1}, {2445, 2}, {2447, 1}, + {2449, 2}, {2451, 1}, {2473, 2}, {2474, 1}, + {2481, 2}, {2482, 1}, {2483, 2}, {2486, 1}, + {2490, 2}, {2492, 1}, {2501, 2}, {2503, 1}, + {2505, 2}, {2507, 1}, {2511, 2}, {2519, 1}, + {2520, 2}, {2524, 33693699}, {2525, 33694211}, {2526, 2}, + {2527, 33694723}, {2528, 1}, {2532, 2}, {2534, 1}, + {2559, 2}, {2561, 1}, {2564, 2}, {2565, 1}, + {2571, 2}, {2575, 1}, {2577, 2}, {2579, 1}, + {2601, 2}, {2602, 1}, {2609, 2}, {2610, 1}, + {2611, 33695235}, {2612, 2}, {2613, 1}, {2614, 33695747}, + {2615, 2}, {2616, 1}, {2618, 2}, {2620, 1}, + {2621, 2}, {2622, 1}, {2627, 2}, {2631, 1}, + {2633, 2}, {2635, 1}, {2638, 2}, {2641, 1}, + {2642, 2}, {2649, 33696259}, {2650, 33696771}, {2651, 33697283}, + {2652, 1}, {2653, 2}, {2654, 33697795}, {2655, 2}, + {2662, 1}, {2679, 2}, {2689, 1}, {2692, 2}, + {2693, 1}, {2702, 2}, {2703, 1}, {2706, 2}, + {2707, 1}, {2729, 2}, {2730, 1}, {2737, 2}, + {2738, 1}, {2740, 2}, {2741, 1}, {2746, 2}, + {2748, 1}, {2758, 2}, {2759, 1}, {2762, 2}, + {2763, 1}, {2766, 2}, {2768, 1}, {2769, 2}, + {2784, 1}, {2788, 2}, {2790, 1}, {2802, 2}, + {2809, 1}, {2816, 2}, {2817, 1}, {2820, 2}, + {2821, 1}, {2829, 2}, {2831, 1}, {2833, 2}, + {2835, 1}, {2857, 2}, {2858, 1}, {2865, 2}, + {2866, 1}, {2868, 2}, {2869, 1}, {2874, 2}, + {2876, 1}, {2885, 2}, {2887, 1}, {2889, 2}, + {2891, 1}, {2894, 2}, {2901, 1}, {2904, 2}, + {2908, 33698307}, {2909, 33698819}, {2910, 2}, {2911, 1}, + {2916, 2}, {2918, 1}, {2936, 2}, {2946, 1}, + {2948, 2}, {2949, 1}, {2955, 2}, {2958, 1}, + {2961, 2}, {2962, 1}, {2966, 2}, {2969, 1}, + {2971, 2}, {2972, 1}, {2973, 2}, {2974, 1}, + {2976, 2}, {2979, 1}, {2981, 2}, {2984, 1}, + {2987, 2}, {2990, 1}, {3002, 2}, {3006, 1}, + {3011, 2}, {3014, 1}, {3017, 2}, {3018, 1}, + {3022, 2}, {3024, 1}, {3025, 2}, {3031, 1}, + {3032, 2}, {3046, 1}, {3067, 2}, {3072, 1}, + {3085, 2}, {3086, 1}, {3089, 2}, {3090, 1}, + {3113, 2}, {3114, 1}, {3130, 2}, {3132, 1}, + {3141, 2}, {3142, 1}, {3145, 2}, {3146, 1}, + {3150, 2}, {3157, 1}, {3159, 2}, {3160, 1}, + {3163, 2}, {3165, 1}, {3166, 2}, {3168, 1}, + {3172, 2}, {3174, 1}, {3184, 2}, {3191, 1}, + {3213, 2}, {3214, 1}, {3217, 2}, {3218, 1}, + {3241, 2}, {3242, 1}, {3252, 2}, {3253, 1}, + {3258, 2}, {3260, 1}, {3269, 2}, {3270, 1}, + {3273, 2}, {3274, 1}, {3278, 2}, {3285, 1}, + {3287, 2}, {3293, 1}, {3295, 2}, {3296, 1}, + {3300, 2}, {3302, 1}, {3312, 2}, {3313, 1}, + {3316, 2}, {3328, 1}, {3341, 2}, {3342, 1}, + {3345, 2}, {3346, 1}, {3397, 2}, {3398, 1}, + {3401, 2}, {3402, 1}, {3408, 2}, {3412, 1}, + {3428, 2}, {3430, 1}, {3456, 2}, {3457, 1}, + {3460, 2}, {3461, 1}, {3479, 2}, {3482, 1}, + {3506, 2}, {3507, 1}, {3516, 2}, {3517, 1}, + {3518, 2}, {3520, 1}, {3527, 2}, {3530, 1}, + {3531, 2}, {3535, 1}, {3541, 2}, {3542, 1}, + {3543, 2}, {3544, 1}, {3552, 2}, {3558, 1}, + {3568, 2}, {3570, 1}, {3573, 2}, {3585, 1}, + {3635, 33699331}, {3636, 1}, {3643, 2}, {3647, 1}, + {3676, 2}, {3713, 1}, {3715, 2}, {3716, 1}, + {3717, 2}, {3718, 1}, {3723, 2}, {3724, 1}, + {3748, 2}, {3749, 1}, {3750, 2}, {3751, 1}, + {3763, 33699843}, {3764, 1}, {3774, 2}, {3776, 1}, + {3781, 2}, {3782, 1}, {3783, 2}, {3784, 1}, + {3791, 2}, {3792, 1}, {3802, 2}, {3804, 33700355}, + {3805, 33700867}, {3806, 1}, {3808, 2}, {3840, 1}, + {3852, 16924163}, {3853, 1}, {3907, 33701635}, {3908, 1}, + {3912, 2}, {3913, 1}, {3917, 33702147}, {3918, 1}, + {3922, 33702659}, {3923, 1}, {3927, 33703171}, {3928, 1}, + {3932, 33703683}, {3933, 1}, {3945, 33704195}, {3946, 1}, + {3949, 2}, {3953, 1}, {3955, 33704707}, {3956, 1}, + {3957, 33705219}, {3958, 33705731}, {3959, 50483459}, {3960, 33707011}, + {3961, 50484739}, {3962, 1}, {3969, 33706499}, {3970, 1}, + {3987, 33708291}, {3988, 1}, {3992, 2}, {3993, 1}, + {3997, 33708803}, {3998, 1}, {4002, 33709315}, {4003, 1}, + {4007, 33709827}, {4008, 1}, {4012, 33710339}, {4013, 1}, + {4025, 33710851}, {4026, 1}, {4029, 2}, {4030, 1}, + {4045, 2}, {4046, 1}, {4059, 2}, {4096, 1}, + {4256, 2}, {4295, 16934147}, {4296, 2}, {4301, 16934403}, + {4302, 2}, {4304, 1}, {4348, 16934659}, {4349, 1}, + {4447, 2}, {4449, 1}, {4681, 2}, {4682, 1}, + {4686, 2}, {4688, 1}, {4695, 2}, {4696, 1}, + {4697, 2}, {4698, 1}, {4702, 2}, {4704, 1}, + {4745, 2}, {4746, 1}, {4750, 2}, {4752, 1}, + {4785, 2}, {4786, 1}, {4790, 2}, {4792, 1}, + {4799, 2}, {4800, 1}, {4801, 2}, {4802, 1}, + {4806, 2}, {4808, 1}, {4823, 2}, {4824, 1}, + {4881, 2}, {4882, 1}, {4886, 2}, {4888, 1}, + {4955, 2}, {4957, 1}, {4989, 2}, {4992, 1}, + {5018, 2}, {5024, 1}, {5110, 2}, {5112, 16934915}, + {5113, 16935171}, {5114, 16935427}, {5115, 16935683}, {5116, 16935939}, + {5117, 16936195}, {5118, 2}, {5120, 1}, {5760, 2}, + {5761, 1}, {5789, 2}, {5792, 1}, {5881, 2}, + {5888, 1}, {5910, 2}, {5919, 1}, {5943, 2}, + {5952, 1}, {5972, 2}, {5984, 1}, {5997, 2}, + {5998, 1}, {6001, 2}, {6002, 1}, {6004, 2}, + {6016, 1}, {6068, 2}, {6070, 1}, {6110, 2}, + {6112, 1}, {6122, 2}, {6128, 1}, {6138, 2}, + {6144, 1}, {6150, 2}, {6151, 1}, {6155, 0}, + {6158, 2}, {6159, 0}, {6160, 1}, {6170, 2}, + {6176, 1}, {6265, 2}, {6272, 1}, {6315, 2}, + {6320, 1}, {6390, 2}, {6400, 1}, {6431, 2}, + {6432, 1}, {6444, 2}, {6448, 1}, {6460, 2}, + {6464, 1}, {6465, 2}, {6468, 1}, {6510, 2}, + {6512, 1}, {6517, 2}, {6528, 1}, {6572, 2}, + {6576, 1}, {6602, 2}, {6608, 1}, {6619, 2}, + {6622, 1}, {6684, 2}, {6686, 1}, {6751, 2}, + {6752, 1}, {6781, 2}, {6783, 1}, {6794, 2}, + {6800, 1}, {6810, 2}, {6816, 1}, {6830, 2}, + {6832, 1}, {6863, 2}, {6912, 1}, {6989, 2}, + {6992, 1}, {7039, 2}, {7040, 1}, {7156, 2}, + {7164, 1}, {7224, 2}, {7227, 1}, {7242, 2}, + {7245, 1}, {7296, 16867075}, {7297, 16867587}, {7298, 16870147}, + {7299, 16870915}, {7300, 16871171}, {7302, 16873219}, {7303, 16875011}, + {7304, 16936451}, {7305, 2}, {7312, 16936707}, {7313, 16936963}, + {7314, 16937219}, {7315, 16937475}, {7316, 16937731}, {7317, 16937987}, + {7318, 16938243}, {7319, 16938499}, {7320, 16938755}, {7321, 16939011}, + {7322, 16939267}, {7323, 16939523}, {7324, 16934659}, {7325, 16939779}, + {7326, 16940035}, {7327, 16940291}, {7328, 16940547}, {7329, 16940803}, + {7330, 16941059}, {7331, 16941315}, {7332, 16941571}, {7333, 16941827}, + {7334, 16942083}, {7335, 16942339}, {7336, 16942595}, {7337, 16942851}, + {7338, 16943107}, {7339, 16943363}, {7340, 16943619}, {7341, 16943875}, + {7342, 16944131}, {7343, 16944387}, {7344, 16944643}, {7345, 16944899}, + {7346, 16945155}, {7347, 16945411}, {7348, 16945667}, {7349, 16945923}, + {7350, 16946179}, {7351, 16946435}, {7352, 16946691}, {7353, 16946947}, + {7354, 16947203}, {7355, 2}, {7357, 16947459}, {7358, 16947715}, + {7359, 16947971}, {7360, 1}, {7368, 2}, {7376, 1}, + {7419, 2}, {7424, 1}, {7468, 16777219}, {7469, 16791043}, + {7470, 16777475}, {7471, 1}, {7472, 16777987}, {7473, 16778243}, + {7474, 16816131}, {7475, 16778755}, {7476, 16779011}, {7477, 16779267}, + {7478, 16779523}, {7479, 16779779}, {7480, 16780035}, {7481, 16780291}, + {7482, 16780547}, {7483, 1}, {7484, 16780803}, {7485, 16835843}, + {7486, 16781059}, {7487, 16781571}, {7488, 16782083}, {7489, 16782339}, + {7490, 16782851}, {7491, 16777219}, {7492, 16948227}, {7493, 16948483}, + {7494, 16948739}, {7495, 16777475}, {7496, 16777987}, {7497, 16778243}, + {7498, 16816387}, {7499, 16816643}, {7500, 16948995}, {7501, 16778755}, + {7502, 1}, {7503, 16779779}, {7504, 16780291}, {7505, 16807171}, + {7506, 16780803}, {7507, 16814851}, {7508, 16949251}, {7509, 16949507}, + {7510, 16781059}, {7511, 16782083}, {7512, 16782339}, {7513, 16949763}, + {7514, 16818435}, {7515, 16782595}, {7516, 16950019}, {7517, 16851971}, + {7518, 16852227}, {7519, 16852483}, {7520, 16856323}, {7521, 16856579}, + {7522, 16779267}, {7523, 16781571}, {7524, 16782339}, {7525, 16782595}, + {7526, 16851971}, {7527, 16852227}, {7528, 16855299}, {7529, 16856323}, + {7530, 16856579}, {7531, 1}, {7544, 16869891}, {7545, 1}, + {7579, 16950275}, {7580, 16777731}, {7581, 16950531}, {7582, 16793603}, + {7583, 16948995}, {7584, 16778499}, {7585, 16950787}, {7586, 16951043}, + {7587, 16951299}, {7588, 16817923}, {7589, 16817667}, {7590, 16951555}, + {7591, 16951811}, {7592, 16952067}, {7593, 16952323}, {7594, 16952579}, + {7595, 16952835}, {7596, 16953091}, {7597, 16953347}, {7598, 16818691}, + {7599, 16953603}, {7600, 16953859}, {7601, 16818947}, {7602, 16954115}, + {7603, 16954371}, {7604, 16820483}, {7605, 16954627}, {7606, 16839683}, + {7607, 16821507}, {7608, 16954883}, {7609, 16821763}, {7610, 16839939}, + {7611, 16783619}, {7612, 16955139}, {7613, 16955395}, {7614, 16822531}, + {7615, 16853507}, {7616, 1}, {7680, 16955651}, {7681, 1}, + {7682, 16955907}, {7683, 1}, {7684, 16956163}, {7685, 1}, + {7686, 16956419}, {7687, 1}, {7688, 16956675}, {7689, 1}, + {7690, 16956931}, {7691, 1}, {7692, 16957187}, {7693, 1}, + {7694, 16957443}, {7695, 1}, {7696, 16957699}, {7697, 1}, + {7698, 16957955}, {7699, 1}, {7700, 16958211}, {7701, 1}, + {7702, 16958467}, {7703, 1}, {7704, 16958723}, {7705, 1}, + {7706, 16958979}, {7707, 1}, {7708, 16959235}, {7709, 1}, + {7710, 16959491}, {7711, 1}, {7712, 16959747}, {7713, 1}, + {7714, 16960003}, {7715, 1}, {7716, 16960259}, {7717, 1}, + {7718, 16960515}, {7719, 1}, {7720, 16960771}, {7721, 1}, + {7722, 16961027}, {7723, 1}, {7724, 16961283}, {7725, 1}, + {7726, 16961539}, {7727, 1}, {7728, 16961795}, {7729, 1}, + {7730, 16962051}, {7731, 1}, {7732, 16962307}, {7733, 1}, + {7734, 16962563}, {7735, 1}, {7736, 16962819}, {7737, 1}, + {7738, 16963075}, {7739, 1}, {7740, 16963331}, {7741, 1}, + {7742, 16963587}, {7743, 1}, {7744, 16963843}, {7745, 1}, + {7746, 16964099}, {7747, 1}, {7748, 16964355}, {7749, 1}, + {7750, 16964611}, {7751, 1}, {7752, 16964867}, {7753, 1}, + {7754, 16965123}, {7755, 1}, {7756, 16965379}, {7757, 1}, + {7758, 16965635}, {7759, 1}, {7760, 16965891}, {7761, 1}, + {7762, 16966147}, {7763, 1}, {7764, 16966403}, {7765, 1}, + {7766, 16966659}, {7767, 1}, {7768, 16966915}, {7769, 1}, + {7770, 16967171}, {7771, 1}, {7772, 16967427}, {7773, 1}, + {7774, 16967683}, {7775, 1}, {7776, 16967939}, {7777, 1}, + {7778, 16968195}, {7779, 1}, {7780, 16968451}, {7781, 1}, + {7782, 16968707}, {7783, 1}, {7784, 16968963}, {7785, 1}, + {7786, 16969219}, {7787, 1}, {7788, 16969475}, {7789, 1}, + {7790, 16969731}, {7791, 1}, {7792, 16969987}, {7793, 1}, + {7794, 16970243}, {7795, 1}, {7796, 16970499}, {7797, 1}, + {7798, 16970755}, {7799, 1}, {7800, 16971011}, {7801, 1}, + {7802, 16971267}, {7803, 1}, {7804, 16971523}, {7805, 1}, + {7806, 16971779}, {7807, 1}, {7808, 16972035}, {7809, 1}, + {7810, 16972291}, {7811, 1}, {7812, 16972547}, {7813, 1}, + {7814, 16972803}, {7815, 1}, {7816, 16973059}, {7817, 1}, + {7818, 16973315}, {7819, 1}, {7820, 16973571}, {7821, 1}, + {7822, 16973827}, {7823, 1}, {7824, 16974083}, {7825, 1}, + {7826, 16974339}, {7827, 1}, {7828, 16974595}, {7829, 1}, + {7834, 33752067}, {7835, 16967939}, {7836, 1}, {7838, 16975363}, + {7839, 1}, {7840, 16975619}, {7841, 1}, {7842, 16975875}, + {7843, 1}, {7844, 16976131}, {7845, 1}, {7846, 16976387}, + {7847, 1}, {7848, 16976643}, {7849, 1}, {7850, 16976899}, + {7851, 1}, {7852, 16977155}, {7853, 1}, {7854, 16977411}, + {7855, 1}, {7856, 16977667}, {7857, 1}, {7858, 16977923}, + {7859, 1}, {7860, 16978179}, {7861, 1}, {7862, 16978435}, + {7863, 1}, {7864, 16978691}, {7865, 1}, {7866, 16978947}, + {7867, 1}, {7868, 16979203}, {7869, 1}, {7870, 16979459}, + {7871, 1}, {7872, 16979715}, {7873, 1}, {7874, 16979971}, + {7875, 1}, {7876, 16980227}, {7877, 1}, {7878, 16980483}, + {7879, 1}, {7880, 16980739}, {7881, 1}, {7882, 16980995}, + {7883, 1}, {7884, 16981251}, {7885, 1}, {7886, 16981507}, + {7887, 1}, {7888, 16981763}, {7889, 1}, {7890, 16982019}, + {7891, 1}, {7892, 16982275}, {7893, 1}, {7894, 16982531}, + {7895, 1}, {7896, 16982787}, {7897, 1}, {7898, 16983043}, + {7899, 1}, {7900, 16983299}, {7901, 1}, {7902, 16983555}, + {7903, 1}, {7904, 16983811}, {7905, 1}, {7906, 16984067}, + {7907, 1}, {7908, 16984323}, {7909, 1}, {7910, 16984579}, + {7911, 1}, {7912, 16984835}, {7913, 1}, {7914, 16985091}, + {7915, 1}, {7916, 16985347}, {7917, 1}, {7918, 16985603}, + {7919, 1}, {7920, 16985859}, {7921, 1}, {7922, 16986115}, + {7923, 1}, {7924, 16986371}, {7925, 1}, {7926, 16986627}, + {7927, 1}, {7928, 16986883}, {7929, 1}, {7930, 16987139}, + {7931, 1}, {7932, 16987395}, {7933, 1}, {7934, 16987651}, + {7935, 1}, {7944, 16987907}, {7945, 16988163}, {7946, 16988419}, + {7947, 16988675}, {7948, 16988931}, {7949, 16989187}, {7950, 16989443}, + {7951, 16989699}, {7952, 1}, {7958, 2}, {7960, 16989955}, + {7961, 16990211}, {7962, 16990467}, {7963, 16990723}, {7964, 16990979}, + {7965, 16991235}, {7966, 2}, {7968, 1}, {7976, 16991491}, + {7977, 16991747}, {7978, 16992003}, {7979, 16992259}, {7980, 16992515}, + {7981, 16992771}, {7982, 16993027}, {7983, 16993283}, {7984, 1}, + {7992, 16993539}, {7993, 16993795}, {7994, 16994051}, {7995, 16994307}, + {7996, 16994563}, {7997, 16994819}, {7998, 16995075}, {7999, 16995331}, + {8000, 1}, {8006, 2}, {8008, 16995587}, {8009, 16995843}, + {8010, 16996099}, {8011, 16996355}, {8012, 16996611}, {8013, 16996867}, + {8014, 2}, {8016, 1}, {8024, 2}, {8025, 16997123}, + {8026, 2}, {8027, 16997379}, {8028, 2}, {8029, 16997635}, + {8030, 2}, {8031, 16997891}, {8032, 1}, {8040, 16998147}, + {8041, 16998403}, {8042, 16998659}, {8043, 16998915}, {8044, 16999171}, + {8045, 16999427}, {8046, 16999683}, {8047, 16999939}, {8048, 1}, + {8049, 16849923}, {8050, 1}, {8051, 16850179}, {8052, 1}, + {8053, 16850435}, {8054, 1}, {8055, 16850691}, {8056, 1}, + {8057, 16850947}, {8058, 1}, {8059, 16851203}, {8060, 1}, + {8061, 16851459}, {8062, 2}, {8064, 33777411}, {8065, 33777923}, + {8066, 33778435}, {8067, 33778947}, {8068, 33779459}, {8069, 33779971}, + {8070, 33780483}, {8071, 33780995}, {8072, 33777411}, {8073, 33777923}, + {8074, 33778435}, {8075, 33778947}, {8076, 33779459}, {8077, 33779971}, + {8078, 33780483}, {8079, 33780995}, {8080, 33781507}, {8081, 33782019}, + {8082, 33782531}, {8083, 33783043}, {8084, 33783555}, {8085, 33784067}, + {8086, 33784579}, {8087, 33785091}, {8088, 33781507}, {8089, 33782019}, + {8090, 33782531}, {8091, 33783043}, {8092, 33783555}, {8093, 33784067}, + {8094, 33784579}, {8095, 33785091}, {8096, 33785603}, {8097, 33786115}, + {8098, 33786627}, {8099, 33787139}, {8100, 33787651}, {8101, 33788163}, + {8102, 33788675}, {8103, 33789187}, {8104, 33785603}, {8105, 33786115}, + {8106, 33786627}, {8107, 33787139}, {8108, 33787651}, {8109, 33788163}, + {8110, 33788675}, {8111, 33789187}, {8112, 1}, {8114, 33789699}, + {8115, 33790211}, {8116, 33790723}, {8117, 2}, {8118, 1}, + {8119, 33791235}, {8120, 17014531}, {8121, 17014787}, {8122, 17012483}, + {8123, 16849923}, {8124, 33790211}, {8125, 33792259}, {8126, 16846851}, + {8127, 33792259}, {8128, 33792771}, {8129, 50570499}, {8130, 33794051}, + {8131, 33794563}, {8132, 33795075}, {8133, 2}, {8134, 1}, + {8135, 33795587}, {8136, 17018883}, {8137, 16850179}, {8138, 17016835}, + {8139, 16850435}, {8140, 33794563}, {8141, 50573571}, {8142, 50574339}, + {8143, 50575107}, {8144, 1}, {8147, 17021443}, {8148, 2}, + {8150, 1}, {8152, 17021699}, {8153, 17021955}, {8154, 17022211}, + {8155, 16850691}, {8156, 2}, {8157, 50576899}, {8158, 50577667}, + {8159, 50578435}, {8160, 1}, {8163, 17024771}, {8164, 1}, + {8168, 17025027}, {8169, 17025283}, {8170, 17025539}, {8171, 16851203}, + {8172, 17025795}, {8173, 50580483}, {8174, 50403587}, {8175, 17026819}, + {8176, 2}, {8178, 33804291}, {8179, 33804803}, {8180, 33805315}, + {8181, 2}, {8182, 1}, {8183, 33805827}, {8184, 17029123}, + {8185, 16850947}, {8186, 17027075}, {8187, 16851459}, {8188, 33804803}, + {8189, 33562883}, {8190, 33799683}, {8191, 2}, {8192, 16783875}, + {8203, 0}, {8204, 1}, {8206, 2}, {8208, 1}, + {8209, 17029379}, {8210, 1}, {8215, 33806851}, {8216, 1}, + {8228, 2}, {8231, 1}, {8232, 2}, {8239, 16783875}, + {8240, 1}, {8243, 33807363}, {8244, 50585091}, {8245, 1}, + {8246, 33808643}, {8247, 50586371}, {8248, 1}, {8252, 33809923}, + {8253, 1}, {8254, 33810435}, {8255, 1}, {8263, 33810947}, + {8264, 33811459}, {8265, 33811971}, {8266, 1}, {8279, 67361795}, + {8280, 1}, {8287, 16783875}, {8288, 0}, {8289, 2}, + {8292, 0}, {8293, 2}, {8304, 17035267}, {8305, 16779267}, + {8306, 2}, {8308, 16787715}, {8309, 17035523}, {8310, 17035779}, + {8311, 17036035}, {8312, 17036291}, {8313, 17036547}, {8314, 17036803}, + {8315, 17037059}, {8316, 17037315}, {8317, 17037571}, {8318, 17037827}, + {8319, 16780547}, {8320, 17035267}, {8321, 16786947}, {8322, 16785155}, + {8323, 16785411}, {8324, 16787715}, {8325, 17035523}, {8326, 17035779}, + {8327, 17036035}, {8328, 17036291}, {8329, 17036547}, {8330, 17036803}, + {8331, 17037059}, {8332, 17037315}, {8333, 17037571}, {8334, 17037827}, + {8335, 2}, {8336, 16777219}, {8337, 16778243}, {8338, 16780803}, + {8339, 16783107}, {8340, 16816387}, {8341, 16779011}, {8342, 16779779}, + {8343, 16780035}, {8344, 16780291}, {8345, 16780547}, {8346, 16781059}, + {8347, 16781827}, {8348, 16782083}, {8349, 2}, {8352, 1}, + {8360, 33558787}, {8361, 1}, {8385, 2}, {8400, 1}, + {8433, 2}, {8448, 50592515}, {8449, 50593283}, {8450, 16777731}, + {8451, 33816835}, {8452, 1}, {8453, 50594563}, {8454, 50595331}, + {8455, 16816643}, {8456, 1}, {8457, 33818883}, {8458, 16778755}, + {8459, 16779011}, {8463, 16802051}, {8464, 16779267}, {8466, 16780035}, + {8468, 1}, {8469, 16780547}, {8470, 33557763}, {8471, 1}, + {8473, 16781059}, {8474, 16781315}, {8475, 16781571}, {8478, 1}, + {8480, 33819395}, {8481, 50597123}, {8482, 33820675}, {8483, 1}, + {8484, 16783619}, {8485, 1}, {8486, 16857091}, {8487, 1}, + {8488, 16783619}, {8489, 1}, {8490, 16779779}, {8491, 16790787}, + {8492, 16777475}, {8493, 16777731}, {8494, 1}, {8495, 16778243}, + {8497, 16778499}, {8498, 2}, {8499, 16780291}, {8500, 16780803}, + {8501, 17043971}, {8502, 17044227}, {8503, 17044483}, {8504, 17044739}, + {8505, 16779267}, {8506, 1}, {8507, 50599427}, {8508, 16855043}, + {8509, 16852227}, {8511, 16855043}, {8512, 17045763}, {8513, 1}, + {8517, 16777987}, {8519, 16778243}, {8520, 16779267}, {8521, 16779523}, + {8522, 1}, {8528, 50600451}, {8529, 50601219}, {8530, 67379203}, + {8531, 50603011}, {8532, 50603779}, {8533, 50604547}, {8534, 50605315}, + {8535, 50606083}, {8536, 50606851}, {8537, 50607619}, {8538, 50608387}, + {8539, 50609155}, {8540, 50609923}, {8541, 50610691}, {8542, 50611459}, + {8543, 33564419}, {8544, 16779267}, {8545, 33835011}, {8546, 50612739}, + {8547, 33836291}, {8548, 16782595}, {8549, 33836803}, {8550, 50614531}, + {8551, 67392515}, {8552, 33839107}, {8553, 16783107}, {8554, 33839619}, + {8555, 50617347}, {8556, 16780035}, {8557, 16777731}, {8558, 16777987}, + {8559, 16780291}, {8560, 16779267}, {8561, 33835011}, {8562, 50612227}, + {8563, 33836291}, {8564, 16782595}, {8565, 33836803}, {8566, 50614531}, + {8567, 67392515}, {8568, 33839107}, {8569, 16783107}, {8570, 33839619}, + {8571, 50617347}, {8572, 16780035}, {8573, 16777731}, {8574, 16777987}, + {8575, 16780291}, {8576, 1}, {8579, 2}, {8580, 1}, + {8585, 50618115}, {8586, 1}, {8588, 2}, {8592, 1}, + {8748, 33841667}, {8749, 50619395}, {8750, 1}, {8751, 33842947}, + {8752, 50620675}, {8753, 1}, {9001, 17067011}, {9002, 17067267}, + {9003, 1}, {9255, 2}, {9280, 1}, {9291, 2}, + {9312, 16786947}, {9313, 16785155}, {9314, 16785411}, {9315, 16787715}, + {9316, 17035523}, {9317, 17035779}, {9318, 17036035}, {9319, 17036291}, + {9320, 17036547}, {9321, 33825283}, {9322, 33564163}, {9323, 33844739}, + {9324, 33845251}, {9325, 33845763}, {9326, 33846275}, {9327, 33846787}, + {9328, 33847299}, {9329, 33847811}, {9330, 33848323}, {9331, 33848835}, + {9332, 50626563}, {9333, 50627331}, {9334, 50628099}, {9335, 50628867}, + {9336, 50629635}, {9337, 50630403}, {9338, 50631171}, {9339, 50631939}, + {9340, 50632707}, {9341, 67410691}, {9342, 67411715}, {9343, 67412739}, + {9344, 67413763}, {9345, 67414787}, {9346, 67415811}, {9347, 67416835}, + {9348, 67417859}, {9349, 67418883}, {9350, 67419907}, {9351, 67420931}, + {9352, 2}, {9372, 50644739}, {9373, 50645507}, {9374, 50646275}, + {9375, 50647043}, {9376, 50647811}, {9377, 50648579}, {9378, 50649347}, + {9379, 50650115}, {9380, 50650883}, {9381, 50651651}, {9382, 50652419}, + {9383, 50653187}, {9384, 50653955}, {9385, 50654723}, {9386, 50655491}, + {9387, 50656259}, {9388, 50657027}, {9389, 50657795}, {9390, 50658563}, + {9391, 50659331}, {9392, 50660099}, {9393, 50660867}, {9394, 50661635}, + {9395, 50662403}, {9396, 50663171}, {9397, 50663939}, {9398, 16777219}, + {9399, 16777475}, {9400, 16777731}, {9401, 16777987}, {9402, 16778243}, + {9403, 16778499}, {9404, 16778755}, {9405, 16779011}, {9406, 16779267}, + {9407, 16779523}, {9408, 16779779}, {9409, 16780035}, {9410, 16780291}, + {9411, 16780547}, {9412, 16780803}, {9413, 16781059}, {9414, 16781315}, + {9415, 16781571}, {9416, 16781827}, {9417, 16782083}, {9418, 16782339}, + {9419, 16782595}, {9420, 16782851}, {9421, 16783107}, {9422, 16783363}, + {9423, 16783619}, {9424, 16777219}, {9425, 16777475}, {9426, 16777731}, + {9427, 16777987}, {9428, 16778243}, {9429, 16778499}, {9430, 16778755}, + {9431, 16779011}, {9432, 16779267}, {9433, 16779523}, {9434, 16779779}, + {9435, 16780035}, {9436, 16780291}, {9437, 16780547}, {9438, 16780803}, + {9439, 16781059}, {9440, 16781315}, {9441, 16781571}, {9442, 16781827}, + {9443, 16782083}, {9444, 16782339}, {9445, 16782595}, {9446, 16782851}, + {9447, 16783107}, {9448, 16783363}, {9449, 16783619}, {9450, 17035267}, + {9451, 1}, {10764, 67396099}, {10765, 1}, {10868, 50664707}, + {10869, 33888259}, {10870, 50665219}, {10871, 1}, {10972, 33888771}, + {10973, 1}, {11124, 2}, {11126, 1}, {11158, 2}, + {11159, 1}, {11264, 17112067}, {11265, 17112323}, {11266, 17112579}, + {11267, 17112835}, {11268, 17113091}, {11269, 17113347}, {11270, 17113603}, + {11271, 17113859}, {11272, 17114115}, {11273, 17114371}, {11274, 17114627}, + {11275, 17114883}, {11276, 17115139}, {11277, 17115395}, {11278, 17115651}, + {11279, 17115907}, {11280, 17116163}, {11281, 17116419}, {11282, 17116675}, + {11283, 17116931}, {11284, 17117187}, {11285, 17117443}, {11286, 17117699}, + {11287, 17117955}, {11288, 17118211}, {11289, 17118467}, {11290, 17118723}, + {11291, 17118979}, {11292, 17119235}, {11293, 17119491}, {11294, 17119747}, + {11295, 17120003}, {11296, 17120259}, {11297, 17120515}, {11298, 17120771}, + {11299, 17121027}, {11300, 17121283}, {11301, 17121539}, {11302, 17121795}, + {11303, 17122051}, {11304, 17122307}, {11305, 17122563}, {11306, 17122819}, + {11307, 17123075}, {11308, 17123331}, {11309, 17123587}, {11310, 17123843}, + {11311, 17124099}, {11312, 1}, {11360, 17124355}, {11361, 1}, + {11362, 17124611}, {11363, 17124867}, {11364, 17125123}, {11365, 1}, + {11367, 17125379}, {11368, 1}, {11369, 17125635}, {11370, 1}, + {11371, 17125891}, {11372, 1}, {11373, 16948483}, {11374, 16953091}, + {11375, 16948227}, {11376, 16950275}, {11377, 1}, {11378, 17126147}, + {11379, 1}, {11381, 17126403}, {11382, 1}, {11388, 16779523}, + {11389, 16782595}, {11390, 17126659}, {11391, 17126915}, {11392, 17127171}, + {11393, 1}, {11394, 17127427}, {11395, 1}, {11396, 17127683}, + {11397, 1}, {11398, 17127939}, {11399, 1}, {11400, 17128195}, + {11401, 1}, {11402, 17128451}, {11403, 1}, {11404, 17128707}, + {11405, 1}, {11406, 17128963}, {11407, 1}, {11408, 17129219}, + {11409, 1}, {11410, 17129475}, {11411, 1}, {11412, 17129731}, + {11413, 1}, {11414, 17129987}, {11415, 1}, {11416, 17130243}, + {11417, 1}, {11418, 17130499}, {11419, 1}, {11420, 17130755}, + {11421, 1}, {11422, 17131011}, {11423, 1}, {11424, 17131267}, + {11425, 1}, {11426, 17131523}, {11427, 1}, {11428, 17131779}, + {11429, 1}, {11430, 17132035}, {11431, 1}, {11432, 17132291}, + {11433, 1}, {11434, 17132547}, {11435, 1}, {11436, 17132803}, + {11437, 1}, {11438, 17133059}, {11439, 1}, {11440, 17133315}, + {11441, 1}, {11442, 17133571}, {11443, 1}, {11444, 17133827}, + {11445, 1}, {11446, 17134083}, {11447, 1}, {11448, 17134339}, + {11449, 1}, {11450, 17134595}, {11451, 1}, {11452, 17134851}, + {11453, 1}, {11454, 17135107}, {11455, 1}, {11456, 17135363}, + {11457, 1}, {11458, 17135619}, {11459, 1}, {11460, 17135875}, + {11461, 1}, {11462, 17136131}, {11463, 1}, {11464, 17136387}, + {11465, 1}, {11466, 17136643}, {11467, 1}, {11468, 17136899}, + {11469, 1}, {11470, 17137155}, {11471, 1}, {11472, 17137411}, + {11473, 1}, {11474, 17137667}, {11475, 1}, {11476, 17137923}, + {11477, 1}, {11478, 17138179}, {11479, 1}, {11480, 17138435}, + {11481, 1}, {11482, 17138691}, {11483, 1}, {11484, 17138947}, + {11485, 1}, {11486, 17139203}, {11487, 1}, {11488, 17139459}, + {11489, 1}, {11490, 17139715}, {11491, 1}, {11499, 17139971}, + {11500, 1}, {11501, 17140227}, {11502, 1}, {11506, 17140483}, + {11507, 1}, {11508, 2}, {11513, 1}, {11558, 2}, + {11559, 1}, {11560, 2}, {11565, 1}, {11566, 2}, + {11568, 1}, {11624, 2}, {11631, 17140739}, {11632, 1}, + {11633, 2}, {11647, 1}, {11671, 2}, {11680, 1}, + {11687, 2}, {11688, 1}, {11695, 2}, {11696, 1}, + {11703, 2}, {11704, 1}, {11711, 2}, {11712, 1}, + {11719, 2}, {11720, 1}, {11727, 2}, {11728, 1}, + {11735, 2}, {11736, 1}, {11743, 2}, {11744, 1}, + {11870, 2}, {11904, 1}, {11930, 2}, {11931, 1}, + {11935, 17140995}, {11936, 1}, {12019, 17141251}, {12020, 2}, + {12032, 17141507}, {12033, 17141763}, {12034, 17142019}, {12035, 17142275}, + {12036, 17142531}, {12037, 17142787}, {12038, 17143043}, {12039, 17143299}, + {12040, 17143555}, {12041, 17143811}, {12042, 17144067}, {12043, 17144323}, + {12044, 17144579}, {12045, 17144835}, {12046, 17145091}, {12047, 17145347}, + {12048, 17145603}, {12049, 17145859}, {12050, 17146115}, {12051, 17146371}, + {12052, 17146627}, {12053, 17146883}, {12054, 17147139}, {12055, 17147395}, + {12056, 17147651}, {12057, 17147907}, {12058, 17148163}, {12059, 17148419}, + {12060, 17148675}, {12061, 17148931}, {12062, 17149187}, {12063, 17149443}, + {12064, 17149699}, {12065, 17149955}, {12066, 17150211}, {12067, 17150467}, + {12068, 17150723}, {12069, 17150979}, {12070, 17151235}, {12071, 17151491}, + {12072, 17151747}, {12073, 17152003}, {12074, 17152259}, {12075, 17152515}, + {12076, 17152771}, {12077, 17153027}, {12078, 17153283}, {12079, 17153539}, + {12080, 17153795}, {12081, 17154051}, {12082, 17154307}, {12083, 17154563}, + {12084, 17154819}, {12085, 17155075}, {12086, 17155331}, {12087, 17155587}, + {12088, 17155843}, {12089, 17156099}, {12090, 17156355}, {12091, 17156611}, + {12092, 17156867}, {12093, 17157123}, {12094, 17157379}, {12095, 17157635}, + {12096, 17157891}, {12097, 17158147}, {12098, 17158403}, {12099, 17158659}, + {12100, 17158915}, {12101, 17159171}, {12102, 17159427}, {12103, 17159683}, + {12104, 17159939}, {12105, 17160195}, {12106, 17160451}, {12107, 17160707}, + {12108, 17160963}, {12109, 17161219}, {12110, 17161475}, {12111, 17161731}, + {12112, 17161987}, {12113, 17162243}, {12114, 17162499}, {12115, 17162755}, + {12116, 17163011}, {12117, 17163267}, {12118, 17163523}, {12119, 17163779}, + {12120, 17164035}, {12121, 17164291}, {12122, 17164547}, {12123, 17164803}, + {12124, 17165059}, {12125, 17165315}, {12126, 17165571}, {12127, 17165827}, + {12128, 17166083}, {12129, 17166339}, {12130, 17166595}, {12131, 17166851}, + {12132, 17167107}, {12133, 17167363}, {12134, 17167619}, {12135, 17167875}, + {12136, 17168131}, {12137, 17168387}, {12138, 17168643}, {12139, 17168899}, + {12140, 17169155}, {12141, 17169411}, {12142, 17169667}, {12143, 17169923}, + {12144, 17170179}, {12145, 17170435}, {12146, 17170691}, {12147, 17170947}, + {12148, 17171203}, {12149, 17171459}, {12150, 17171715}, {12151, 17171971}, + {12152, 17172227}, {12153, 17172483}, {12154, 17172739}, {12155, 17172995}, + {12156, 17173251}, {12157, 17173507}, {12158, 17173763}, {12159, 17174019}, + {12160, 17174275}, {12161, 17174531}, {12162, 17174787}, {12163, 17175043}, + {12164, 17175299}, {12165, 17175555}, {12166, 17175811}, {12167, 17176067}, + {12168, 17176323}, {12169, 17176579}, {12170, 17176835}, {12171, 17177091}, + {12172, 17177347}, {12173, 17177603}, {12174, 17177859}, {12175, 17178115}, + {12176, 17178371}, {12177, 17178627}, {12178, 17178883}, {12179, 17179139}, + {12180, 17179395}, {12181, 17179651}, {12182, 17179907}, {12183, 17180163}, + {12184, 17180419}, {12185, 17180675}, {12186, 17180931}, {12187, 17181187}, + {12188, 17181443}, {12189, 17181699}, {12190, 17181955}, {12191, 17182211}, + {12192, 17182467}, {12193, 17182723}, {12194, 17182979}, {12195, 17183235}, + {12196, 17183491}, {12197, 17183747}, {12198, 17184003}, {12199, 17184259}, + {12200, 17184515}, {12201, 17184771}, {12202, 17185027}, {12203, 17185283}, + {12204, 17185539}, {12205, 17185795}, {12206, 17186051}, {12207, 17186307}, + {12208, 17186563}, {12209, 17186819}, {12210, 17187075}, {12211, 17187331}, + {12212, 17187587}, {12213, 17187843}, {12214, 17188099}, {12215, 17188355}, + {12216, 17188611}, {12217, 17188867}, {12218, 17189123}, {12219, 17189379}, + {12220, 17189635}, {12221, 17189891}, {12222, 17190147}, {12223, 17190403}, + {12224, 17190659}, {12225, 17190915}, {12226, 17191171}, {12227, 17191427}, + {12228, 17191683}, {12229, 17191939}, {12230, 17192195}, {12231, 17192451}, + {12232, 17192707}, {12233, 17192963}, {12234, 17193219}, {12235, 17193475}, + {12236, 17193731}, {12237, 17193987}, {12238, 17194243}, {12239, 17194499}, + {12240, 17194755}, {12241, 17195011}, {12242, 17195267}, {12243, 17195523}, + {12244, 17195779}, {12245, 17196035}, {12246, 2}, {12288, 16783875}, + {12289, 1}, {12290, 17196291}, {12291, 1}, {12342, 17196547}, + {12343, 1}, {12344, 17147395}, {12345, 17196803}, {12346, 17197059}, + {12347, 1}, {12352, 2}, {12353, 1}, {12439, 2}, + {12441, 1}, {12443, 33974531}, {12444, 33975043}, {12445, 1}, + {12447, 33975555}, {12448, 1}, {12543, 33976067}, {12544, 2}, + {12549, 1}, {12592, 2}, {12593, 17199363}, {12594, 17199619}, + {12595, 17199875}, {12596, 17200131}, {12597, 17200387}, {12598, 17200643}, + {12599, 17200899}, {12600, 17201155}, {12601, 17201411}, {12602, 17201667}, + {12603, 17201923}, {12604, 17202179}, {12605, 17202435}, {12606, 17202691}, + {12607, 17202947}, {12608, 17203203}, {12609, 17203459}, {12610, 17203715}, + {12611, 17203971}, {12612, 17204227}, {12613, 17204483}, {12614, 17204739}, + {12615, 17204995}, {12616, 17205251}, {12617, 17205507}, {12618, 17205763}, + {12619, 17206019}, {12620, 17206275}, {12621, 17206531}, {12622, 17206787}, + {12623, 17207043}, {12624, 17207299}, {12625, 17207555}, {12626, 17207811}, + {12627, 17208067}, {12628, 17208323}, {12629, 17208579}, {12630, 17208835}, + {12631, 17209091}, {12632, 17209347}, {12633, 17209603}, {12634, 17209859}, + {12635, 17210115}, {12636, 17210371}, {12637, 17210627}, {12638, 17210883}, + {12639, 17211139}, {12640, 17211395}, {12641, 17211651}, {12642, 17211907}, + {12643, 17212163}, {12644, 2}, {12645, 17212419}, {12646, 17212675}, + {12647, 17212931}, {12648, 17213187}, {12649, 17213443}, {12650, 17213699}, + {12651, 17213955}, {12652, 17214211}, {12653, 17214467}, {12654, 17214723}, + {12655, 17214979}, {12656, 17215235}, {12657, 17215491}, {12658, 17215747}, + {12659, 17216003}, {12660, 17216259}, {12661, 17216515}, {12662, 17216771}, + {12663, 17217027}, {12664, 17217283}, {12665, 17217539}, {12666, 17217795}, + {12667, 17218051}, {12668, 17218307}, {12669, 17218563}, {12670, 17218819}, + {12671, 17219075}, {12672, 17219331}, {12673, 17219587}, {12674, 17219843}, + {12675, 17220099}, {12676, 17220355}, {12677, 17220611}, {12678, 17220867}, + {12679, 17221123}, {12680, 17221379}, {12681, 17221635}, {12682, 17221891}, + {12683, 17222147}, {12684, 17222403}, {12685, 17222659}, {12686, 17222915}, + {12687, 2}, {12688, 1}, {12690, 17141507}, {12691, 17143043}, + {12692, 17223171}, {12693, 17223427}, {12694, 17223683}, {12695, 17223939}, + {12696, 17224195}, {12697, 17224451}, {12698, 17142531}, {12699, 17224707}, + {12700, 17224963}, {12701, 17225219}, {12702, 17225475}, {12703, 17143555}, + {12704, 1}, {12772, 2}, {12784, 1}, {12800, 50780163}, + {12801, 50780931}, {12802, 50781699}, {12803, 50782467}, {12804, 50783235}, + {12805, 50784003}, {12806, 50784771}, {12807, 50785539}, {12808, 50786307}, + {12809, 50787075}, {12810, 50787843}, {12811, 50788611}, {12812, 50789379}, + {12813, 50790147}, {12814, 50790915}, {12815, 50791683}, {12816, 50792451}, + {12817, 50793219}, {12818, 50793987}, {12819, 50794755}, {12820, 50795523}, + {12821, 50796291}, {12822, 50797059}, {12823, 50797827}, {12824, 50798595}, + {12825, 50799363}, {12826, 50800131}, {12827, 50800899}, {12828, 50801667}, + {12829, 67579651}, {12830, 67580675}, {12831, 2}, {12832, 50804483}, + {12833, 50805251}, {12834, 50806019}, {12835, 50806787}, {12836, 50807555}, + {12837, 50808323}, {12838, 50809091}, {12839, 50809859}, {12840, 50810627}, + {12841, 50811395}, {12842, 50812163}, {12843, 50812931}, {12844, 50813699}, + {12845, 50814467}, {12846, 50815235}, {12847, 50816003}, {12848, 50816771}, + {12849, 50817539}, {12850, 50818307}, {12851, 50819075}, {12852, 50819843}, + {12853, 50820611}, {12854, 50821379}, {12855, 50822147}, {12856, 50822915}, + {12857, 50823683}, {12858, 50824451}, {12859, 50825219}, {12860, 50825987}, + {12861, 50826755}, {12862, 50827523}, {12863, 50828291}, {12864, 50829059}, + {12865, 50829827}, {12866, 50830595}, {12867, 50831363}, {12868, 17277699}, + {12869, 17277955}, {12870, 17158403}, {12871, 17278211}, {12872, 1}, + {12880, 50832899}, {12881, 33844995}, {12882, 34056451}, {12883, 33562371}, + {12884, 34056963}, {12885, 34057475}, {12886, 34057987}, {12887, 34058499}, + {12888, 34059011}, {12889, 34059523}, {12890, 34060035}, {12891, 33827075}, + {12892, 33826307}, {12893, 34060547}, {12894, 34061059}, {12895, 34061571}, + {12896, 17199363}, {12897, 17200131}, {12898, 17200899}, {12899, 17201411}, + {12900, 17203459}, {12901, 17203715}, {12902, 17204483}, {12903, 17204995}, + {12904, 17205251}, {12905, 17205763}, {12906, 17206019}, {12907, 17206275}, + {12908, 17206531}, {12909, 17206787}, {12910, 17236739}, {12911, 17237507}, + {12912, 17238275}, {12913, 17239043}, {12914, 17239811}, {12915, 17240579}, + {12916, 17241347}, {12917, 17242115}, {12918, 17242883}, {12919, 17243651}, + {12920, 17244419}, {12921, 17245187}, {12922, 17245955}, {12923, 17246723}, + {12924, 34062083}, {12925, 34062595}, {12926, 17285891}, {12927, 1}, + {12928, 17141507}, {12929, 17143043}, {12930, 17223171}, {12931, 17223427}, + {12932, 17253379}, {12933, 17254147}, {12934, 17254915}, {12935, 17144323}, + {12936, 17256451}, {12937, 17147395}, {12938, 17160195}, {12939, 17163267}, + {12940, 17163011}, {12941, 17160451}, {12942, 17184003}, {12943, 17149443}, + {12944, 17159683}, {12945, 17263363}, {12946, 17264131}, {12947, 17264899}, + {12948, 17265667}, {12949, 17266435}, {12950, 17267203}, {12951, 17267971}, + {12952, 17268739}, {12953, 17286147}, {12954, 17286403}, {12955, 17150979}, + {12956, 17286659}, {12957, 17286915}, {12958, 17287171}, {12959, 17287427}, + {12960, 17287683}, {12961, 17275651}, {12962, 17287939}, {12963, 17288195}, + {12964, 17223683}, {12965, 17223939}, {12966, 17224195}, {12967, 17288451}, + {12968, 17288707}, {12969, 17288963}, {12970, 17289219}, {12971, 17271043}, + {12972, 17271811}, {12973, 17272579}, {12974, 17273347}, {12975, 17274115}, + {12976, 17289475}, {12977, 34066947}, {12978, 34067459}, {12979, 34067971}, + {12980, 34068483}, {12981, 34068995}, {12982, 33564931}, {12983, 34057219}, + {12984, 34061315}, {12985, 34069507}, {12986, 34070019}, {12987, 34070531}, + {12988, 34071043}, {12989, 34071555}, {12990, 34072067}, {12991, 34072579}, + {12992, 34073091}, {12993, 34073603}, {12994, 34074115}, {12995, 34074627}, + {12996, 34075139}, {12997, 34075651}, {12998, 34076163}, {12999, 34076675}, + {13000, 34077187}, {13001, 50854915}, {13002, 50855683}, {13003, 50856451}, + {13004, 34080003}, {13005, 50857731}, {13006, 34081283}, {13007, 50859011}, + {13008, 17305347}, {13009, 17305603}, {13010, 17305859}, {13011, 17306115}, + {13012, 17306371}, {13013, 17306627}, {13014, 17306883}, {13015, 17307139}, + {13016, 17307395}, {13017, 17198851}, {13018, 17307651}, {13019, 17307907}, + {13020, 17308163}, {13021, 17308419}, {13022, 17308675}, {13023, 17308931}, + {13024, 17309187}, {13025, 17309443}, {13026, 17309699}, {13027, 17199107}, + {13028, 17309955}, {13029, 17310211}, {13030, 17310467}, {13031, 17310723}, + {13032, 17310979}, {13033, 17311235}, {13034, 17311491}, {13035, 17311747}, + {13036, 17312003}, {13037, 17312259}, {13038, 17312515}, {13039, 17312771}, + {13040, 17313027}, {13041, 17313283}, {13042, 17313539}, {13043, 17313795}, + {13044, 17314051}, {13045, 17314307}, {13046, 17314563}, {13047, 17314819}, + {13048, 17315075}, {13049, 17315331}, {13050, 17315587}, {13051, 17315843}, + {13052, 17316099}, {13053, 17316355}, {13054, 17316611}, {13055, 34094083}, + {13056, 67649027}, {13057, 67650051}, {13058, 67651075}, {13059, 50874883}, + {13060, 67652867}, {13061, 50876675}, {13062, 50877443}, {13063, 84432643}, + {13064, 67656707}, {13065, 50880515}, {13066, 50881283}, {13067, 50882051}, + {13068, 67660035}, {13069, 67661059}, {13070, 50884867}, {13071, 50885635}, + {13072, 34109187}, {13073, 50886915}, {13074, 67664899}, {13075, 67665923}, + {13076, 34112515}, {13077, 84444675}, {13078, 101223171}, {13079, 84447491}, + {13080, 50890755}, {13081, 84448771}, {13082, 84450051}, {13083, 67674115}, + {13084, 50897923}, {13085, 50898691}, {13086, 50899459}, {13087, 67677443}, + {13088, 84455683}, {13089, 67679747}, {13090, 50903555}, {13091, 50904323}, + {13092, 50905091}, {13093, 34128643}, {13094, 34129155}, {13095, 34117891}, + {13096, 34129667}, {13097, 50907395}, {13098, 50908163}, {13099, 84463363}, + {13100, 50910211}, {13101, 67688195}, {13102, 84466435}, {13103, 50913283}, + {13104, 34136835}, {13105, 34137347}, {13106, 84469507}, {13107, 67693571}, + {13108, 84471811}, {13109, 50918659}, {13110, 84473859}, {13111, 34143491}, + {13112, 50921219}, {13113, 50921987}, {13114, 50922755}, {13115, 50923523}, + {13116, 50924291}, {13117, 67702275}, {13118, 50926083}, {13119, 34149635}, + {13120, 50927363}, {13121, 50928131}, {13122, 50928899}, {13123, 67706883}, + {13124, 50930691}, {13125, 50931459}, {13126, 50932227}, {13127, 84487427}, + {13128, 67711491}, {13129, 34158083}, {13130, 84490243}, {13131, 34159875}, + {13132, 67714819}, {13133, 67669251}, {13134, 50938627}, {13135, 50939395}, + {13136, 50940163}, {13137, 67718147}, {13138, 34164739}, {13139, 50942467}, + {13140, 67720451}, {13141, 34167043}, {13142, 84499203}, {13143, 50893571}, + {13144, 34168835}, {13145, 34169347}, {13146, 34169859}, {13147, 34170371}, + {13148, 34170883}, {13149, 34171395}, {13150, 34171907}, {13151, 34172419}, + {13152, 34172931}, {13153, 34173443}, {13154, 50951171}, {13155, 50951939}, + {13156, 50952707}, {13157, 50953475}, {13158, 50954243}, {13159, 50955011}, + {13160, 50955779}, {13161, 50956547}, {13162, 50957315}, {13163, 50958083}, + {13164, 50958851}, {13165, 50959619}, {13166, 50960387}, {13167, 50961155}, + {13168, 50961923}, {13169, 50962691}, {13170, 34186243}, {13171, 34186755}, + {13172, 50964483}, {13173, 34188035}, {13174, 34188547}, {13175, 34189059}, + {13176, 50966787}, {13177, 50967555}, {13178, 34191107}, {13179, 34191619}, + {13180, 34192131}, {13181, 34192643}, {13182, 34193155}, {13183, 67748099}, + {13184, 34185731}, {13185, 34194691}, {13186, 34195203}, {13187, 34195715}, + {13188, 34196227}, {13189, 34196739}, {13190, 34197251}, {13191, 34197763}, + {13192, 50975491}, {13193, 67753475}, {13194, 34200067}, {13195, 34200579}, + {13196, 34201091}, {13197, 34201603}, {13198, 34202115}, {13199, 34202627}, + {13200, 34203139}, {13201, 50980867}, {13202, 50981635}, {13203, 50980099}, + {13204, 50982403}, {13205, 34205955}, {13206, 34206467}, {13207, 34206979}, + {13208, 33556995}, {13209, 34207491}, {13210, 34208003}, {13211, 34208515}, + {13212, 34209027}, {13213, 34209539}, {13214, 34210051}, {13215, 50987779}, + {13216, 50988547}, {13217, 34189827}, {13218, 50989315}, {13219, 50990083}, + {13220, 50990851}, {13221, 34190595}, {13222, 50991619}, {13223, 50992387}, + {13224, 67770371}, {13225, 34185731}, {13226, 50994179}, {13227, 50994947}, + {13228, 50995715}, {13229, 50996483}, {13230, 84551683}, {13231, 101330179}, + {13232, 34222851}, {13233, 34223363}, {13234, 34223875}, {13235, 34224387}, + {13236, 34224899}, {13237, 34225411}, {13238, 34225923}, {13239, 34226435}, + {13240, 34226947}, {13241, 34226435}, {13242, 34227459}, {13243, 34227971}, + {13244, 34228483}, {13245, 34228995}, {13246, 34229507}, {13247, 34228995}, + {13248, 34230019}, {13249, 34230531}, {13250, 2}, {13251, 34231043}, + {13252, 33817091}, {13253, 33554947}, {13254, 67785987}, {13255, 2}, + {13256, 34232579}, {13257, 34233091}, {13258, 34233603}, {13259, 34185475}, + {13260, 34234115}, {13261, 34234627}, {13262, 34210051}, {13263, 34235139}, + {13264, 33557251}, {13265, 34235651}, {13266, 51013379}, {13267, 34236931}, + {13268, 34197251}, {13269, 51014659}, {13270, 51015427}, {13271, 34238979}, + {13272, 2}, {13273, 51016707}, {13274, 34240259}, {13275, 34221059}, + {13276, 34240771}, {13277, 34241283}, {13278, 51019011}, {13279, 51019779}, + {13280, 34243331}, {13281, 34243843}, {13282, 34244355}, {13283, 34244867}, + {13284, 34245379}, {13285, 34245891}, {13286, 34246403}, {13287, 34246915}, + {13288, 34247427}, {13289, 51025155}, {13290, 51025923}, {13291, 51026691}, + {13292, 51027459}, {13293, 51028227}, {13294, 51028995}, {13295, 51029763}, + {13296, 51030531}, {13297, 51031299}, {13298, 51032067}, {13299, 51032835}, + {13300, 51033603}, {13301, 51034371}, {13302, 51035139}, {13303, 51035907}, + {13304, 51036675}, {13305, 51037443}, {13306, 51038211}, {13307, 51038979}, + {13308, 51039747}, {13309, 51040515}, {13310, 51041283}, {13311, 51042051}, + {13312, 1}, {42125, 2}, {42128, 1}, {42183, 2}, + {42192, 1}, {42540, 2}, {42560, 17488387}, {42561, 1}, + {42562, 17488643}, {42563, 1}, {42564, 17488899}, {42565, 1}, + {42566, 17489155}, {42567, 1}, {42568, 17489411}, {42569, 1}, + {42570, 16936451}, {42571, 1}, {42572, 17489667}, {42573, 1}, + {42574, 17489923}, {42575, 1}, {42576, 17490179}, {42577, 1}, + {42578, 17490435}, {42579, 1}, {42580, 17490691}, {42581, 1}, + {42582, 17490947}, {42583, 1}, {42584, 17491203}, {42585, 1}, + {42586, 17491459}, {42587, 1}, {42588, 17491715}, {42589, 1}, + {42590, 17491971}, {42591, 1}, {42592, 17492227}, {42593, 1}, + {42594, 17492483}, {42595, 1}, {42596, 17492739}, {42597, 1}, + {42598, 17492995}, {42599, 1}, {42600, 17493251}, {42601, 1}, + {42602, 17493507}, {42603, 1}, {42604, 17493763}, {42605, 1}, + {42624, 17494019}, {42625, 1}, {42626, 17494275}, {42627, 1}, + {42628, 17494531}, {42629, 1}, {42630, 17494787}, {42631, 1}, + {42632, 17495043}, {42633, 1}, {42634, 17495299}, {42635, 1}, + {42636, 17495555}, {42637, 1}, {42638, 17495811}, {42639, 1}, + {42640, 17496067}, {42641, 1}, {42642, 17496323}, {42643, 1}, + {42644, 17496579}, {42645, 1}, {42646, 17496835}, {42647, 1}, + {42648, 17497091}, {42649, 1}, {42650, 17497347}, {42651, 1}, + {42652, 16873219}, {42653, 16873731}, {42654, 1}, {42744, 2}, + {42752, 1}, {42786, 17497603}, {42787, 1}, {42788, 17497859}, + {42789, 1}, {42790, 17498115}, {42791, 1}, {42792, 17498371}, + {42793, 1}, {42794, 17498627}, {42795, 1}, {42796, 17498883}, + {42797, 1}, {42798, 17499139}, {42799, 1}, {42802, 17499395}, + {42803, 1}, {42804, 17499651}, {42805, 1}, {42806, 17499907}, + {42807, 1}, {42808, 17500163}, {42809, 1}, {42810, 17500419}, + {42811, 1}, {42812, 17500675}, {42813, 1}, {42814, 17500931}, + {42815, 1}, {42816, 17501187}, {42817, 1}, {42818, 17501443}, + {42819, 1}, {42820, 17501699}, {42821, 1}, {42822, 17501955}, + {42823, 1}, {42824, 17502211}, {42825, 1}, {42826, 17502467}, + {42827, 1}, {42828, 17502723}, {42829, 1}, {42830, 17502979}, + {42831, 1}, {42832, 17503235}, {42833, 1}, {42834, 17503491}, + {42835, 1}, {42836, 17503747}, {42837, 1}, {42838, 17504003}, + {42839, 1}, {42840, 17504259}, {42841, 1}, {42842, 17504515}, + {42843, 1}, {42844, 17504771}, {42845, 1}, {42846, 17505027}, + {42847, 1}, {42848, 17505283}, {42849, 1}, {42850, 17505539}, + {42851, 1}, {42852, 17505795}, {42853, 1}, {42854, 17506051}, + {42855, 1}, {42856, 17506307}, {42857, 1}, {42858, 17506563}, + {42859, 1}, {42860, 17506819}, {42861, 1}, {42862, 17507075}, + {42863, 1}, {42864, 17507075}, {42865, 1}, {42873, 17507331}, + {42874, 1}, {42875, 17507587}, {42876, 1}, {42877, 17507843}, + {42878, 17508099}, {42879, 1}, {42880, 17508355}, {42881, 1}, + {42882, 17508611}, {42883, 1}, {42884, 17508867}, {42885, 1}, + {42886, 17509123}, {42887, 1}, {42891, 17509379}, {42892, 1}, + {42893, 16951299}, {42894, 1}, {42896, 17509635}, {42897, 1}, + {42898, 17509891}, {42899, 1}, {42902, 17510147}, {42903, 1}, + {42904, 17510403}, {42905, 1}, {42906, 17510659}, {42907, 1}, + {42908, 17510915}, {42909, 1}, {42910, 17511171}, {42911, 1}, + {42912, 17511427}, {42913, 1}, {42914, 17511683}, {42915, 1}, + {42916, 17511939}, {42917, 1}, {42918, 17512195}, {42919, 1}, + {42920, 17512451}, {42921, 1}, {42922, 16841475}, {42923, 16948995}, + {42924, 16951043}, {42925, 17512707}, {42926, 16951555}, {42927, 1}, + {42928, 17512963}, {42929, 17513219}, {42930, 16952067}, {42931, 17513475}, + {42932, 17513731}, {42933, 1}, {42934, 17513987}, {42935, 1}, + {42936, 17514243}, {42937, 1}, {42938, 17514499}, {42939, 1}, + {42940, 17514755}, {42941, 1}, {42942, 17515011}, {42943, 1}, + {42944, 17515267}, {42945, 1}, {42946, 17515523}, {42947, 1}, + {42948, 17515779}, {42949, 16954371}, {42950, 17516035}, {42951, 17516291}, + {42952, 1}, {42953, 17516547}, {42954, 1}, {42955, 2}, + {42960, 17516803}, {42961, 1}, {42962, 2}, {42963, 1}, + {42964, 2}, {42965, 1}, {42966, 17517059}, {42967, 1}, + {42968, 17517315}, {42969, 1}, {42970, 2}, {42994, 16777731}, + {42995, 16778499}, {42996, 16781315}, {42997, 17517571}, {42998, 1}, + {43000, 16802051}, {43001, 16808195}, {43002, 1}, {43053, 2}, + {43056, 1}, {43066, 2}, {43072, 1}, {43128, 2}, + {43136, 1}, {43206, 2}, {43214, 1}, {43226, 2}, + {43232, 1}, {43348, 2}, {43359, 1}, {43389, 2}, + {43392, 1}, {43470, 2}, {43471, 1}, {43482, 2}, + {43486, 1}, {43519, 2}, {43520, 1}, {43575, 2}, + {43584, 1}, {43598, 2}, {43600, 1}, {43610, 2}, + {43612, 1}, {43715, 2}, {43739, 1}, {43767, 2}, + {43777, 1}, {43783, 2}, {43785, 1}, {43791, 2}, + {43793, 1}, {43799, 2}, {43808, 1}, {43815, 2}, + {43816, 1}, {43823, 2}, {43824, 1}, {43868, 17498115}, + {43869, 17517827}, {43870, 17124611}, {43871, 17518083}, {43872, 1}, + {43881, 17518339}, {43882, 1}, {43884, 2}, {43888, 17518595}, + {43889, 17518851}, {43890, 17519107}, {43891, 17519363}, {43892, 17519619}, + {43893, 17519875}, {43894, 17520131}, {43895, 17520387}, {43896, 17520643}, + {43897, 17520899}, {43898, 17521155}, {43899, 17521411}, {43900, 17521667}, + {43901, 17521923}, {43902, 17522179}, {43903, 17522435}, {43904, 17522691}, + {43905, 17522947}, {43906, 17523203}, {43907, 17523459}, {43908, 17523715}, + {43909, 17523971}, {43910, 17524227}, {43911, 17524483}, {43912, 17524739}, + {43913, 17524995}, {43914, 17525251}, {43915, 17525507}, {43916, 17525763}, + {43917, 17526019}, {43918, 17526275}, {43919, 17526531}, {43920, 17526787}, + {43921, 17527043}, {43922, 17527299}, {43923, 17527555}, {43924, 17527811}, + {43925, 17528067}, {43926, 17528323}, {43927, 17528579}, {43928, 17528835}, + {43929, 17529091}, {43930, 17529347}, {43931, 17529603}, {43932, 17529859}, + {43933, 17530115}, {43934, 17530371}, {43935, 17530627}, {43936, 17530883}, + {43937, 17531139}, {43938, 17531395}, {43939, 17531651}, {43940, 17531907}, + {43941, 17532163}, {43942, 17532419}, {43943, 17532675}, {43944, 17532931}, + {43945, 17533187}, {43946, 17533443}, {43947, 17533699}, {43948, 17533955}, + {43949, 17534211}, {43950, 17534467}, {43951, 17534723}, {43952, 17534979}, + {43953, 17535235}, {43954, 17535491}, {43955, 17535747}, {43956, 17536003}, + {43957, 17536259}, {43958, 17536515}, {43959, 17536771}, {43960, 17537027}, + {43961, 17537283}, {43962, 17537539}, {43963, 17537795}, {43964, 17538051}, + {43965, 17538307}, {43966, 17538563}, {43967, 17538819}, {43968, 1}, + {44014, 2}, {44016, 1}, {44026, 2}, {44032, 1}, + {55204, 2}, {55216, 1}, {55239, 2}, {55243, 1}, + {55292, 2}, {63744, 17539075}, {63745, 17539331}, {63746, 17181955}, + {63747, 17539587}, {63748, 17539843}, {63749, 17540099}, {63750, 17540355}, + {63751, 17195779}, {63753, 17540611}, {63754, 17184003}, {63755, 17540867}, + {63756, 17541123}, {63757, 17541379}, {63758, 17541635}, {63759, 17541891}, + {63760, 17542147}, {63761, 17542403}, {63762, 17542659}, {63763, 17542915}, + {63764, 17543171}, {63765, 17543427}, {63766, 17543683}, {63767, 17543939}, + {63768, 17544195}, {63769, 17544451}, {63770, 17544707}, {63771, 17544963}, + {63772, 17545219}, {63773, 17545475}, {63774, 17545731}, {63775, 17545987}, + {63776, 17546243}, {63777, 17546499}, {63778, 17546755}, {63779, 17547011}, + {63780, 17547267}, {63781, 17547523}, {63782, 17547779}, {63783, 17548035}, + {63784, 17548291}, {63785, 17548547}, {63786, 17548803}, {63787, 17549059}, + {63788, 17549315}, {63789, 17549571}, {63790, 17549827}, {63791, 17550083}, + {63792, 17550339}, {63793, 17550595}, {63794, 17550851}, {63795, 17551107}, + {63796, 17173251}, {63797, 17551363}, {63798, 17551619}, {63799, 17551875}, + {63800, 17552131}, {63801, 17552387}, {63802, 17552643}, {63803, 17552899}, + {63804, 17553155}, {63805, 17553411}, {63806, 17553667}, {63807, 17553923}, + {63808, 17191939}, {63809, 17554179}, {63810, 17554435}, {63811, 17554691}, + {63812, 17554947}, {63813, 17555203}, {63814, 17555459}, {63815, 17555715}, + {63816, 17555971}, {63817, 17556227}, {63818, 17556483}, {63819, 17556739}, + {63820, 17556995}, {63821, 17557251}, {63822, 17557507}, {63823, 17557763}, + {63824, 17558019}, {63825, 17558275}, {63826, 17558531}, {63827, 17558787}, + {63828, 17559043}, {63829, 17559299}, {63830, 17559555}, {63831, 17559811}, + {63832, 17560067}, {63833, 17560323}, {63834, 17560579}, {63835, 17560835}, + {63836, 17543171}, {63837, 17561091}, {63838, 17561347}, {63839, 17561603}, + {63840, 17561859}, {63841, 17562115}, {63842, 17562371}, {63843, 17562627}, + {63844, 17562883}, {63845, 17563139}, {63846, 17563395}, {63847, 17563651}, + {63848, 17563907}, {63849, 17564163}, {63850, 17564419}, {63851, 17564675}, + {63852, 17564931}, {63853, 17565187}, {63854, 17565443}, {63855, 17565699}, + {63856, 17565955}, {63857, 17182467}, {63858, 17566211}, {63859, 17566467}, + {63860, 17566723}, {63861, 17566979}, {63862, 17567235}, {63863, 17567491}, + {63864, 17567747}, {63865, 17568003}, {63866, 17568259}, {63867, 17568515}, + {63868, 17568771}, {63869, 17569027}, {63870, 17569283}, {63871, 17569539}, + {63872, 17569795}, {63873, 17150979}, {63874, 17570051}, {63875, 17570307}, + {63876, 17570563}, {63877, 17570819}, {63878, 17571075}, {63879, 17571331}, + {63880, 17571587}, {63881, 17571843}, {63882, 17146115}, {63883, 17572099}, + {63884, 17572355}, {63885, 17572611}, {63886, 17572867}, {63887, 17573123}, + {63888, 17573379}, {63889, 17573635}, {63890, 17573891}, {63891, 17574147}, + {63892, 17574403}, {63893, 17574659}, {63894, 17574915}, {63895, 17575171}, + {63896, 17575427}, {63897, 17575683}, {63898, 17575939}, {63899, 17576195}, + {63900, 17576451}, {63901, 17576707}, {63902, 17576963}, {63903, 17577219}, + {63904, 17577475}, {63905, 17565699}, {63906, 17577731}, {63907, 17577987}, + {63908, 17578243}, {63909, 17578499}, {63910, 17578755}, {63911, 17579011}, + {63912, 17316867}, {63913, 17579267}, {63914, 17561603}, {63915, 17579523}, + {63916, 17579779}, {63917, 17580035}, {63918, 17580291}, {63919, 17580547}, + {63920, 17580803}, {63921, 17581059}, {63922, 17581315}, {63923, 17581571}, + {63924, 17581827}, {63925, 17582083}, {63926, 17582339}, {63927, 17582595}, + {63928, 17582851}, {63929, 17583107}, {63930, 17583363}, {63931, 17583619}, + {63932, 17583875}, {63933, 17584131}, {63934, 17584387}, {63935, 17543171}, + {63936, 17584643}, {63937, 17584899}, {63938, 17585155}, {63939, 17585411}, + {63940, 17195523}, {63941, 17585667}, {63942, 17585923}, {63943, 17586179}, + {63944, 17586435}, {63945, 17586691}, {63946, 17586947}, {63947, 17587203}, + {63948, 17587459}, {63949, 17587715}, {63950, 17587971}, {63951, 17588227}, + {63952, 17588483}, {63953, 17254147}, {63954, 17588739}, {63955, 17588995}, + {63956, 17589251}, {63957, 17589507}, {63958, 17589763}, {63959, 17590019}, + {63960, 17590275}, {63961, 17590531}, {63962, 17590787}, {63963, 17562115}, + {63964, 17591043}, {63965, 17591299}, {63966, 17591555}, {63967, 17591811}, + {63968, 17592067}, {63969, 17592323}, {63970, 17592579}, {63971, 17592835}, + {63972, 17593091}, {63973, 17593347}, {63974, 17593603}, {63975, 17593859}, + {63976, 17594115}, {63977, 17183747}, {63978, 17594371}, {63979, 17594627}, + {63980, 17594883}, {63981, 17595139}, {63982, 17595395}, {63983, 17595651}, + {63984, 17595907}, {63985, 17596163}, {63986, 17596419}, {63987, 17596675}, + {63988, 17596931}, {63989, 17597187}, {63990, 17597443}, {63991, 17171203}, + {63992, 17597699}, {63993, 17597955}, {63994, 17598211}, {63995, 17598467}, + {63996, 17598723}, {63997, 17598979}, {63998, 17599235}, {63999, 17599491}, + {64000, 17599747}, {64001, 17600003}, {64002, 17600259}, {64003, 17600515}, + {64004, 17600771}, {64005, 17601027}, {64006, 17601283}, {64007, 17601539}, + {64008, 17178115}, {64009, 17601795}, {64010, 17178883}, {64011, 17602051}, + {64012, 17602307}, {64013, 17602563}, {64014, 1}, {64016, 17602819}, + {64017, 1}, {64018, 17603075}, {64019, 1}, {64021, 17603331}, + {64022, 17603587}, {64023, 17603843}, {64024, 17604099}, {64025, 17604355}, + {64026, 17604611}, {64027, 17604867}, {64028, 17605123}, {64029, 17605379}, + {64030, 17172995}, {64031, 1}, {64032, 17605635}, {64033, 1}, + {64034, 17605891}, {64035, 1}, {64037, 17606147}, {64038, 17606403}, + {64039, 1}, {64042, 17606659}, {64043, 17606915}, {64044, 17607171}, + {64045, 17607427}, {64046, 17607683}, {64047, 17607939}, {64048, 17608195}, + {64049, 17608451}, {64050, 17608707}, {64051, 17608963}, {64052, 17609219}, + {64053, 17609475}, {64054, 17609731}, {64055, 17609987}, {64056, 17610243}, + {64057, 17610499}, {64058, 17610755}, {64059, 17611011}, {64060, 17152771}, + {64061, 17611267}, {64062, 17611523}, {64063, 17611779}, {64064, 17612035}, + {64065, 17612291}, {64066, 17612547}, {64067, 17612803}, {64068, 17613059}, + {64069, 17613315}, {64070, 17613571}, {64071, 17613827}, {64072, 17614083}, + {64073, 17614339}, {64074, 17614595}, {64075, 17614851}, {64076, 17264899}, + {64077, 17615107}, {64078, 17615363}, {64079, 17615619}, {64080, 17615875}, + {64081, 17267971}, {64082, 17616131}, {64083, 17616387}, {64084, 17616643}, + {64085, 17616899}, {64086, 17617155}, {64087, 17574915}, {64088, 17617411}, + {64089, 17617667}, {64090, 17617923}, {64091, 17618179}, {64092, 17618435}, + {64093, 17618691}, {64095, 17618947}, {64096, 17619203}, {64097, 17619459}, + {64098, 17619715}, {64099, 17619971}, {64100, 17620227}, {64101, 17620483}, + {64102, 17620739}, {64103, 17606147}, {64104, 17620995}, {64105, 17621251}, + {64106, 17621507}, {64107, 17621763}, {64108, 17622019}, {64109, 17622275}, + {64110, 2}, {64112, 17622531}, {64113, 17622787}, {64114, 17623043}, + {64115, 17623299}, {64116, 17623555}, {64117, 17623811}, {64118, 17624067}, + {64119, 17624323}, {64120, 17609731}, {64121, 17624579}, {64122, 17624835}, + {64123, 17625091}, {64124, 17602819}, {64125, 17625347}, {64126, 17625603}, + {64127, 17625859}, {64128, 17626115}, {64129, 17626371}, {64130, 17626627}, + {64131, 17626883}, {64132, 17627139}, {64133, 17627395}, {64134, 17627651}, + {64135, 17627907}, {64136, 17628163}, {64137, 17611779}, {64138, 17628419}, + {64139, 17612035}, {64140, 17628675}, {64141, 17628931}, {64142, 17629187}, + {64143, 17629443}, {64144, 17629699}, {64145, 17603075}, {64146, 17548547}, + {64147, 17629955}, {64148, 17630211}, {64149, 17161219}, {64150, 17565955}, + {64151, 17586947}, {64152, 17630467}, {64153, 17630723}, {64154, 17613827}, + {64155, 17630979}, {64156, 17614083}, {64157, 17631235}, {64158, 17631491}, + {64159, 17631747}, {64160, 17603587}, {64161, 17632003}, {64162, 17632259}, + {64163, 17632515}, {64164, 17632771}, {64165, 17633027}, {64166, 17603843}, + {64167, 17633283}, {64168, 17633539}, {64169, 17633795}, {64170, 17634051}, + {64171, 17634307}, {64172, 17634563}, {64173, 17617155}, {64174, 17634819}, + {64175, 17635075}, {64176, 17574915}, {64177, 17635331}, {64178, 17618179}, + {64179, 17635587}, {64180, 17635843}, {64181, 17636099}, {64182, 17636355}, + {64183, 17636611}, {64184, 17619459}, {64185, 17636867}, {64186, 17605891}, + {64187, 17637123}, {64188, 17619715}, {64189, 17561091}, {64190, 17637379}, + {64191, 17619971}, {64192, 17637635}, {64193, 17620483}, {64194, 17637891}, + {64195, 17638147}, {64196, 17638403}, {64197, 17638659}, {64198, 17638915}, + {64199, 17620995}, {64200, 17605123}, {64201, 17639171}, {64202, 17621251}, + {64203, 17639427}, {64204, 17621507}, {64205, 17639683}, {64206, 17195779}, + {64207, 17639939}, {64208, 17640195}, {64209, 17640451}, {64210, 17640707}, + {64211, 17640963}, {64212, 17641219}, {64213, 17641475}, {64214, 17641731}, + {64215, 17641987}, {64216, 17642243}, {64217, 17642499}, {64218, 2}, + {64256, 34419971}, {64257, 34420483}, {64258, 34420995}, {64259, 51197443}, + {64260, 51198723}, {64261, 33559043}, {64263, 2}, {64275, 34422275}, + {64276, 34422787}, {64277, 34423299}, {64278, 34423811}, {64279, 34424323}, + {64280, 2}, {64285, 34424835}, {64286, 1}, {64287, 34425347}, + {64288, 17648643}, {64289, 17043971}, {64290, 17044739}, {64291, 17648899}, + {64292, 17649155}, {64293, 17649411}, {64294, 17649667}, {64295, 17649923}, + {64296, 17650179}, {64297, 17036803}, {64298, 34427651}, {64299, 34428163}, + {64300, 51205891}, {64301, 51206659}, {64302, 34430211}, {64303, 34430723}, + {64304, 34431235}, {64305, 34431747}, {64306, 34432259}, {64307, 34432771}, + {64308, 34433283}, {64309, 34433795}, {64310, 34434307}, {64311, 2}, + {64312, 34434819}, {64313, 34435331}, {64314, 34435843}, {64315, 34436355}, + {64316, 34436867}, {64317, 2}, {64318, 34437379}, {64319, 2}, + {64320, 34437891}, {64321, 34438403}, {64322, 2}, {64323, 34438915}, + {64324, 34439427}, {64325, 2}, {64326, 34439939}, {64327, 34440451}, + {64328, 34440963}, {64329, 34428675}, {64330, 34441475}, {64331, 34441987}, + {64332, 34442499}, {64333, 34443011}, {64334, 34443523}, {64335, 34444035}, + {64336, 17667331}, {64338, 17667587}, {64342, 17667843}, {64346, 17668099}, + {64350, 17668355}, {64354, 17668611}, {64358, 17668867}, {64362, 17669123}, + {64366, 17669379}, {64370, 17669635}, {64374, 17669891}, {64378, 17670147}, + {64382, 17670403}, {64386, 17670659}, {64388, 17670915}, {64390, 17671171}, + {64392, 17671427}, {64394, 17671683}, {64396, 17671939}, {64398, 17672195}, + {64402, 17672451}, {64406, 17672707}, {64410, 17672963}, {64414, 17673219}, + {64416, 17673475}, {64420, 17673731}, {64422, 17673987}, {64426, 17674243}, + {64430, 17674499}, {64432, 17674755}, {64434, 1}, {64451, 2}, + {64467, 17675011}, {64471, 16911363}, {64473, 17675267}, {64475, 17675523}, + {64477, 33688579}, {64478, 17675779}, {64480, 17676035}, {64482, 17676291}, + {64484, 17676547}, {64488, 17676803}, {64490, 34454275}, {64492, 34454787}, + {64494, 34455299}, {64496, 34455811}, {64498, 34456323}, {64500, 34456835}, + {64502, 34457347}, {64505, 34457859}, {64508, 17681155}, {64512, 34458627}, + {64513, 34459139}, {64514, 34459651}, {64515, 34457859}, {64516, 34460163}, + {64517, 34460675}, {64518, 34461187}, {64519, 34461699}, {64520, 34462211}, + {64521, 34462723}, {64522, 34463235}, {64523, 34463747}, {64524, 34464259}, + {64525, 34464771}, {64526, 34465283}, {64527, 34465795}, {64528, 34466307}, + {64529, 34466819}, {64530, 34467331}, {64531, 34467843}, {64532, 34468355}, + {64533, 34468867}, {64534, 34469379}, {64535, 34469123}, {64536, 34469891}, + {64537, 34470403}, {64538, 34470915}, {64539, 34471427}, {64540, 34471939}, + {64541, 34472451}, {64542, 34472963}, {64543, 34473475}, {64544, 34473987}, + {64545, 34474499}, {64546, 34475011}, {64547, 34475523}, {64548, 34476035}, + {64549, 34476547}, {64550, 34477059}, {64551, 34477571}, {64552, 34478083}, + {64553, 34478595}, {64554, 34479107}, {64555, 34479619}, {64556, 34480131}, + {64557, 34480643}, {64558, 34481155}, {64559, 34481667}, {64560, 34482179}, + {64561, 34482691}, {64562, 34483203}, {64563, 34483715}, {64564, 34484227}, + {64565, 34484739}, {64566, 34485251}, {64567, 34485763}, {64568, 34486275}, + {64569, 34486787}, {64570, 34487299}, {64571, 34487811}, {64572, 34488323}, + {64573, 34488835}, {64574, 34489347}, {64575, 34489859}, {64576, 34490371}, + {64577, 34490883}, {64578, 34491395}, {64579, 34491907}, {64580, 34492419}, + {64581, 34492931}, {64582, 34469635}, {64583, 34470147}, {64584, 34493443}, + {64585, 34493955}, {64586, 34494467}, {64587, 34494979}, {64588, 34495491}, + {64589, 34496003}, {64590, 34496515}, {64591, 34497027}, {64592, 34497539}, + {64593, 34498051}, {64594, 34498563}, {64595, 34499075}, {64596, 34499587}, + {64597, 34468611}, {64598, 34500099}, {64599, 34500611}, {64600, 34492675}, + {64601, 34501123}, {64602, 34499843}, {64603, 34501635}, {64604, 34502147}, + {64605, 34502659}, {64606, 51280387}, {64607, 51281155}, {64608, 51281923}, + {64609, 51282691}, {64610, 51283459}, {64611, 51284227}, {64612, 34507779}, + {64613, 34508291}, {64614, 34459651}, {64615, 34508803}, {64616, 34457859}, + {64617, 34460163}, {64618, 34509315}, {64619, 34509827}, {64620, 34462211}, + {64621, 34510339}, {64622, 34462723}, {64623, 34463235}, {64624, 34510851}, + {64625, 34511363}, {64626, 34465283}, {64627, 34511875}, {64628, 34465795}, + {64629, 34466307}, {64630, 34512387}, {64631, 34512899}, {64632, 34467331}, + {64633, 34513411}, {64634, 34467843}, {64635, 34468355}, {64636, 34482691}, + {64637, 34483203}, {64638, 34484739}, {64639, 34485251}, {64640, 34485763}, + {64641, 34487811}, {64642, 34488323}, {64643, 34488835}, {64644, 34489347}, + {64645, 34491395}, {64646, 34491907}, {64647, 34492419}, {64648, 34513923}, + {64649, 34493443}, {64650, 34514435}, {64651, 34514947}, {64652, 34496515}, + {64653, 34515459}, {64654, 34497027}, {64655, 34497539}, {64656, 34502659}, + {64657, 34515971}, {64658, 34516483}, {64659, 34492675}, {64660, 34494723}, + {64661, 34501123}, {64662, 34499843}, {64663, 34458627}, {64664, 34459139}, + {64665, 34516995}, {64666, 34459651}, {64667, 34517507}, {64668, 34460675}, + {64669, 34461187}, {64670, 34461699}, {64671, 34462211}, {64672, 34518019}, + {64673, 34463747}, {64674, 34464259}, {64675, 34464771}, {64676, 34465283}, + {64677, 34518531}, {64678, 34467331}, {64679, 34468867}, {64680, 34469379}, + {64681, 34469123}, {64682, 34469891}, {64683, 34470403}, {64684, 34471427}, + {64685, 34471939}, {64686, 34472451}, {64687, 34472963}, {64688, 34473475}, + {64689, 34473987}, {64690, 34519043}, {64691, 34474499}, {64692, 34475011}, + {64693, 34475523}, {64694, 34476035}, {64695, 34476547}, {64696, 34477059}, + {64697, 34478083}, {64698, 34478595}, {64699, 34479107}, {64700, 34479619}, + {64701, 34480131}, {64702, 34480643}, {64703, 34481155}, {64704, 34481667}, + {64705, 34482179}, {64706, 34483715}, {64707, 34484227}, {64708, 34486275}, + {64709, 34486787}, {64710, 34487299}, {64711, 34487811}, {64712, 34488323}, + {64713, 34489859}, {64714, 34490371}, {64715, 34490883}, {64716, 34491395}, + {64717, 34519555}, {64718, 34492931}, {64719, 34469635}, {64720, 34470147}, + {64721, 34493443}, {64722, 34494979}, {64723, 34495491}, {64724, 34496003}, + {64725, 34496515}, {64726, 34520067}, {64727, 34498051}, {64728, 34498563}, + {64729, 34520579}, {64730, 34468611}, {64731, 34500099}, {64732, 34500611}, + {64733, 34492675}, {64734, 34497795}, {64735, 34459651}, {64736, 34517507}, + {64737, 34462211}, {64738, 34518019}, {64739, 34465283}, {64740, 34518531}, + {64741, 34467331}, {64742, 34521091}, {64743, 34473475}, {64744, 34521603}, + {64745, 34522115}, {64746, 34522627}, {64747, 34487811}, {64748, 34488323}, + {64749, 34491395}, {64750, 34496515}, {64751, 34520067}, {64752, 34492675}, + {64753, 34497795}, {64754, 51300355}, {64755, 51301123}, {64756, 51301891}, + {64757, 34525443}, {64758, 34525955}, {64759, 34526467}, {64760, 34526979}, + {64761, 34527491}, {64762, 34528003}, {64763, 34528515}, {64764, 34529027}, + {64765, 34529539}, {64766, 34530051}, {64767, 34530563}, {64768, 34500355}, + {64769, 34531075}, {64770, 34531587}, {64771, 34532099}, {64772, 34500867}, + {64773, 34532611}, {64774, 34533123}, {64775, 34533635}, {64776, 34534147}, + {64777, 34534659}, {64778, 34535171}, {64779, 34535683}, {64780, 34522115}, + {64781, 34536195}, {64782, 34536707}, {64783, 34537219}, {64784, 34537731}, + {64785, 34525443}, {64786, 34525955}, {64787, 34526467}, {64788, 34526979}, + {64789, 34527491}, {64790, 34528003}, {64791, 34528515}, {64792, 34529027}, + {64793, 34529539}, {64794, 34530051}, {64795, 34530563}, {64796, 34500355}, + {64797, 34531075}, {64798, 34531587}, {64799, 34532099}, {64800, 34500867}, + {64801, 34532611}, {64802, 34533123}, {64803, 34533635}, {64804, 34534147}, + {64805, 34534659}, {64806, 34535171}, {64807, 34535683}, {64808, 34522115}, + {64809, 34536195}, {64810, 34536707}, {64811, 34537219}, {64812, 34537731}, + {64813, 34534659}, {64814, 34535171}, {64815, 34535683}, {64816, 34522115}, + {64817, 34521603}, {64818, 34522627}, {64819, 34477571}, {64820, 34471939}, + {64821, 34472451}, {64822, 34472963}, {64823, 34534659}, {64824, 34535171}, + {64825, 34535683}, {64826, 34477571}, {64827, 34478083}, {64828, 34538243}, + {64830, 1}, {64848, 51315971}, {64849, 51316739}, {64851, 51317507}, + {64852, 51318275}, {64853, 51319043}, {64854, 51319811}, {64855, 51320579}, + {64856, 51246595}, {64858, 51321347}, {64859, 51322115}, {64860, 51322883}, + {64861, 51323651}, {64862, 51324419}, {64863, 51325187}, {64865, 51325955}, + {64866, 51326723}, {64868, 51327491}, {64870, 51328259}, {64871, 51329027}, + {64873, 51329795}, {64874, 51330563}, {64876, 51331331}, {64878, 51332099}, + {64879, 51332867}, {64881, 51333635}, {64883, 51334403}, {64884, 51335171}, + {64885, 51335939}, {64886, 51336707}, {64888, 51337475}, {64889, 51338243}, + {64890, 51339011}, {64891, 51339779}, {64892, 51340547}, {64894, 51341315}, + {64895, 51342083}, {64896, 51342851}, {64897, 51343619}, {64898, 51344387}, + {64899, 51345155}, {64901, 51345923}, {64903, 51346691}, {64905, 51347459}, + {64906, 51246851}, {64907, 51348227}, {64908, 51348995}, {64909, 51270147}, + {64910, 51247363}, {64911, 51349763}, {64912, 2}, {64914, 51350531}, + {64915, 51351299}, {64916, 51352067}, {64917, 51352835}, {64918, 51353603}, + {64919, 51354371}, {64921, 51355139}, {64922, 51355907}, {64923, 51356675}, + {64924, 51357443}, {64926, 51358211}, {64927, 51358979}, {64928, 51359747}, + {64929, 51360515}, {64930, 51361283}, {64931, 51362051}, {64932, 51362819}, + {64933, 51363587}, {64934, 51364355}, {64935, 51365123}, {64936, 51365891}, + {64937, 51366659}, {64938, 51367427}, {64939, 51368195}, {64940, 51368963}, + {64941, 51369731}, {64942, 51277315}, {64943, 51370499}, {64944, 51371267}, + {64945, 51372035}, {64946, 51372803}, {64947, 51373571}, {64948, 51341315}, + {64949, 51342851}, {64950, 51374339}, {64951, 51375107}, {64952, 51375875}, + {64953, 51376643}, {64954, 51377411}, {64955, 51378179}, {64956, 51377411}, + {64957, 51375875}, {64958, 51378947}, {64959, 51379715}, {64960, 51380483}, + {64961, 51381251}, {64962, 51382019}, {64963, 51378179}, {64964, 51335939}, + {64965, 51328259}, {64966, 51382787}, {64967, 51383555}, {64968, 2}, + {64975, 1}, {64976, 2}, {65008, 51384323}, {65009, 51385091}, + {65010, 68163075}, {65011, 68164099}, {65012, 68165123}, {65013, 68166147}, + {65014, 68167171}, {65015, 68168195}, {65016, 68169219}, {65017, 51393027}, + {65018, 303052035}, {65019, 135284483}, {65020, 68177667}, {65021, 1}, + {65024, 0}, {65040, 17847043}, {65041, 17847299}, {65042, 2}, + {65043, 17110275}, {65044, 16848643}, {65045, 17032707}, {65046, 17033731}, + {65047, 17847555}, {65048, 17847811}, {65049, 2}, {65056, 1}, + {65072, 2}, {65073, 17848067}, {65074, 17848323}, {65075, 17848579}, + {65077, 17037571}, {65078, 17037827}, {65079, 17848835}, {65080, 17849091}, + {65081, 17849347}, {65082, 17849603}, {65083, 17849859}, {65084, 17850115}, + {65085, 17850371}, {65086, 17850627}, {65087, 17067011}, {65088, 17067267}, + {65089, 17850883}, {65090, 17851139}, {65091, 17851395}, {65092, 17851651}, + {65093, 1}, {65095, 17851907}, {65096, 17852163}, {65097, 33810435}, + {65101, 17848579}, {65104, 17847043}, {65105, 17847299}, {65106, 2}, + {65108, 16848643}, {65109, 17110275}, {65110, 17033731}, {65111, 17032707}, + {65112, 17848067}, {65113, 17037571}, {65114, 17037827}, {65115, 17848835}, + {65116, 17849091}, {65117, 17849347}, {65118, 17849603}, {65119, 17852419}, + {65120, 17852675}, {65121, 17852931}, {65122, 17036803}, {65123, 17853187}, + {65124, 17853443}, {65125, 17853699}, {65126, 17037315}, {65127, 2}, + {65128, 17853955}, {65129, 17854211}, {65130, 17854467}, {65131, 17854723}, + {65132, 2}, {65136, 34632195}, {65137, 34632707}, {65138, 34503171}, + {65139, 1}, {65140, 34503939}, {65141, 2}, {65142, 34504707}, + {65143, 34523139}, {65144, 34505475}, {65145, 34523907}, {65146, 34506243}, + {65147, 34524675}, {65148, 34507011}, {65149, 34633219}, {65150, 34633731}, + {65151, 34634243}, {65152, 17857539}, {65153, 17857795}, {65155, 17858051}, + {65157, 17858307}, {65159, 17858563}, {65161, 17677059}, {65165, 16910339}, + {65167, 17683459}, {65171, 17858819}, {65173, 17686531}, {65177, 17689603}, + {65181, 17681667}, {65185, 17682179}, {65189, 17684739}, {65193, 17834243}, + {65195, 17724419}, {65197, 17724931}, {65199, 17731331}, {65201, 17694723}, + {65205, 17744899}, {65209, 17696771}, {65213, 17697795}, {65217, 17699843}, + {65221, 17700867}, {65225, 17701379}, {65229, 17702403}, {65233, 17703427}, + {65237, 17706499}, {65241, 17708547}, {65245, 17710851}, {65249, 17682691}, + {65253, 17717763}, {65257, 17720835}, {65261, 16910851}, {65263, 17676803}, + {65265, 16911875}, {65269, 34636291}, {65271, 34636803}, {65273, 34637315}, + {65275, 34622211}, {65277, 2}, {65279, 0}, {65280, 2}, + {65281, 17032707}, {65282, 17860611}, {65283, 17852419}, {65284, 17854211}, + {65285, 17854467}, {65286, 17852675}, {65287, 17860867}, {65288, 17037571}, + {65289, 17037827}, {65290, 17852931}, {65291, 17036803}, {65292, 17847043}, + {65293, 17853187}, {65294, 17196291}, {65295, 17038339}, {65296, 17035267}, + {65297, 16786947}, {65298, 16785155}, {65299, 16785411}, {65300, 16787715}, + {65301, 17035523}, {65302, 17035779}, {65303, 17036035}, {65304, 17036291}, + {65305, 17036547}, {65306, 17110275}, {65307, 16848643}, {65308, 17853443}, + {65309, 17037315}, {65310, 17853699}, {65311, 17033731}, {65312, 17854723}, + {65313, 16777219}, {65314, 16777475}, {65315, 16777731}, {65316, 16777987}, + {65317, 16778243}, {65318, 16778499}, {65319, 16778755}, {65320, 16779011}, + {65321, 16779267}, {65322, 16779523}, {65323, 16779779}, {65324, 16780035}, + {65325, 16780291}, {65326, 16780547}, {65327, 16780803}, {65328, 16781059}, + {65329, 16781315}, {65330, 16781571}, {65331, 16781827}, {65332, 16782083}, + {65333, 16782339}, {65334, 16782595}, {65335, 16782851}, {65336, 16783107}, + {65337, 16783363}, {65338, 16783619}, {65339, 17851907}, {65340, 17853955}, + {65341, 17852163}, {65342, 17861123}, {65343, 17848579}, {65344, 17026819}, + {65345, 16777219}, {65346, 16777475}, {65347, 16777731}, {65348, 16777987}, + {65349, 16778243}, {65350, 16778499}, {65351, 16778755}, {65352, 16779011}, + {65353, 16779267}, {65354, 16779523}, {65355, 16779779}, {65356, 16780035}, + {65357, 16780291}, {65358, 16780547}, {65359, 16780803}, {65360, 16781059}, + {65361, 16781315}, {65362, 16781571}, {65363, 16781827}, {65364, 16782083}, + {65365, 16782339}, {65366, 16782595}, {65367, 16782851}, {65368, 16783107}, + {65369, 16783363}, {65370, 16783619}, {65371, 17848835}, {65372, 17861379}, + {65373, 17849091}, {65374, 17861635}, {65375, 17861891}, {65376, 17862147}, + {65377, 17196291}, {65378, 17850883}, {65379, 17851139}, {65380, 17847299}, + {65381, 17862403}, {65382, 17316611}, {65383, 17319171}, {65384, 17362179}, + {65385, 17862659}, {65386, 17363715}, {65387, 17323267}, {65388, 17862915}, + {65389, 17333507}, {65390, 17379331}, {65391, 17328899}, {65392, 17317891}, + {65393, 17305347}, {65394, 17305603}, {65395, 17305859}, {65396, 17306115}, + {65397, 17306371}, {65398, 17306627}, {65399, 17306883}, {65400, 17307139}, + {65401, 17307395}, {65402, 17198851}, {65403, 17307651}, {65404, 17307907}, + {65405, 17308163}, {65406, 17308419}, {65407, 17308675}, {65408, 17308931}, + {65409, 17309187}, {65410, 17309443}, {65411, 17309699}, {65412, 17199107}, + {65413, 17309955}, {65414, 17310211}, {65415, 17310467}, {65416, 17310723}, + {65417, 17310979}, {65418, 17311235}, {65419, 17311491}, {65420, 17311747}, + {65421, 17312003}, {65422, 17312259}, {65423, 17312515}, {65424, 17312771}, + {65425, 17313027}, {65426, 17313283}, {65427, 17313539}, {65428, 17313795}, + {65429, 17314051}, {65430, 17314307}, {65431, 17314563}, {65432, 17314819}, + {65433, 17315075}, {65434, 17315331}, {65435, 17315587}, {65436, 17315843}, + {65437, 17319683}, {65438, 17197571}, {65439, 17198083}, {65440, 2}, + {65441, 17199363}, {65442, 17199619}, {65443, 17199875}, {65444, 17200131}, + {65445, 17200387}, {65446, 17200643}, {65447, 17200899}, {65448, 17201155}, + {65449, 17201411}, {65450, 17201667}, {65451, 17201923}, {65452, 17202179}, + {65453, 17202435}, {65454, 17202691}, {65455, 17202947}, {65456, 17203203}, + {65457, 17203459}, {65458, 17203715}, {65459, 17203971}, {65460, 17204227}, + {65461, 17204483}, {65462, 17204739}, {65463, 17204995}, {65464, 17205251}, + {65465, 17205507}, {65466, 17205763}, {65467, 17206019}, {65468, 17206275}, + {65469, 17206531}, {65470, 17206787}, {65471, 2}, {65474, 17207043}, + {65475, 17207299}, {65476, 17207555}, {65477, 17207811}, {65478, 17208067}, + {65479, 17208323}, {65480, 2}, {65482, 17208579}, {65483, 17208835}, + {65484, 17209091}, {65485, 17209347}, {65486, 17209603}, {65487, 17209859}, + {65488, 2}, {65490, 17210115}, {65491, 17210371}, {65492, 17210627}, + {65493, 17210883}, {65494, 17211139}, {65495, 17211395}, {65496, 2}, + {65498, 17211651}, {65499, 17211907}, {65500, 17212163}, {65501, 2}, + {65504, 17863171}, {65505, 17863427}, {65506, 17863683}, {65507, 33561859}, + {65508, 17863939}, {65509, 17864195}, {65510, 17864451}, {65511, 2}, + {65512, 17864707}, {65513, 17864963}, {65514, 17865219}, {65515, 17865475}, + {65516, 17865731}, {65517, 17865987}, {65518, 17866243}, {65519, 2}, + {65536, 1}, {65548, 2}, {65549, 1}, {65575, 2}, + {65576, 1}, {65595, 2}, {65596, 1}, {65598, 2}, + {65599, 1}, {65614, 2}, {65616, 1}, {65630, 2}, + {65664, 1}, {65787, 2}, {65792, 1}, {65795, 2}, + {65799, 1}, {65844, 2}, {65847, 1}, {65935, 2}, + {65936, 1}, {65949, 2}, {65952, 1}, {65953, 2}, + {66000, 1}, {66046, 2}, {66176, 1}, {66205, 2}, + {66208, 1}, {66257, 2}, {66272, 1}, {66300, 2}, + {66304, 1}, {66340, 2}, {66349, 1}, {66379, 2}, + {66384, 1}, {66427, 2}, {66432, 1}, {66462, 2}, + {66463, 1}, {66500, 2}, {66504, 1}, {66518, 2}, + {66560, 17866499}, {66561, 17866755}, {66562, 17867011}, {66563, 17867267}, + {66564, 17867523}, {66565, 17867779}, {66566, 17868035}, {66567, 17868291}, + {66568, 17868547}, {66569, 17868803}, {66570, 17869059}, {66571, 17869315}, + {66572, 17869571}, {66573, 17869827}, {66574, 17870083}, {66575, 17870339}, + {66576, 17870595}, {66577, 17870851}, {66578, 17871107}, {66579, 17871363}, + {66580, 17871619}, {66581, 17871875}, {66582, 17872131}, {66583, 17872387}, + {66584, 17872643}, {66585, 17872899}, {66586, 17873155}, {66587, 17873411}, + {66588, 17873667}, {66589, 17873923}, {66590, 17874179}, {66591, 17874435}, + {66592, 17874691}, {66593, 17874947}, {66594, 17875203}, {66595, 17875459}, + {66596, 17875715}, {66597, 17875971}, {66598, 17876227}, {66599, 17876483}, + {66600, 1}, {66718, 2}, {66720, 1}, {66730, 2}, + {66736, 17876739}, {66737, 17876995}, {66738, 17877251}, {66739, 17877507}, + {66740, 17877763}, {66741, 17878019}, {66742, 17878275}, {66743, 17878531}, + {66744, 17878787}, {66745, 17879043}, {66746, 17879299}, {66747, 17879555}, + {66748, 17879811}, {66749, 17880067}, {66750, 17880323}, {66751, 17880579}, + {66752, 17880835}, {66753, 17881091}, {66754, 17881347}, {66755, 17881603}, + {66756, 17881859}, {66757, 17882115}, {66758, 17882371}, {66759, 17882627}, + {66760, 17882883}, {66761, 17883139}, {66762, 17883395}, {66763, 17883651}, + {66764, 17883907}, {66765, 17884163}, {66766, 17884419}, {66767, 17884675}, + {66768, 17884931}, {66769, 17885187}, {66770, 17885443}, {66771, 17885699}, + {66772, 2}, {66776, 1}, {66812, 2}, {66816, 1}, + {66856, 2}, {66864, 1}, {66916, 2}, {66927, 1}, + {66928, 17885955}, {66929, 17886211}, {66930, 17886467}, {66931, 17886723}, + {66932, 17886979}, {66933, 17887235}, {66934, 17887491}, {66935, 17887747}, + {66936, 17888003}, {66937, 17888259}, {66938, 17888515}, {66939, 2}, + {66940, 17888771}, {66941, 17889027}, {66942, 17889283}, {66943, 17889539}, + {66944, 17889795}, {66945, 17890051}, {66946, 17890307}, {66947, 17890563}, + {66948, 17890819}, {66949, 17891075}, {66950, 17891331}, {66951, 17891587}, + {66952, 17891843}, {66953, 17892099}, {66954, 17892355}, {66955, 2}, + {66956, 17892611}, {66957, 17892867}, {66958, 17893123}, {66959, 17893379}, + {66960, 17893635}, {66961, 17893891}, {66962, 17894147}, {66963, 2}, + {66964, 17894403}, {66965, 17894659}, {66966, 2}, {66967, 1}, + {66978, 2}, {66979, 1}, {66994, 2}, {66995, 1}, + {67002, 2}, {67003, 1}, {67005, 2}, {67072, 1}, + {67383, 2}, {67392, 1}, {67414, 2}, {67424, 1}, + {67432, 2}, {67456, 1}, {67457, 17894915}, {67458, 17895171}, + {67459, 16791043}, {67460, 17895427}, {67461, 16814083}, {67462, 2}, + {67463, 17895683}, {67464, 17895939}, {67465, 17896195}, {67466, 17896451}, + {67467, 16815363}, {67468, 16815619}, {67469, 17896707}, {67470, 17896963}, + {67471, 17897219}, {67472, 17897475}, {67473, 17897731}, {67474, 17897987}, + {67475, 16817155}, {67476, 17898243}, {67477, 16802051}, {67478, 17898499}, + {67479, 17898755}, {67480, 17899011}, {67481, 17899267}, {67482, 17899523}, + {67483, 17512707}, {67484, 17899779}, {67485, 17900035}, {67486, 17900291}, + {67487, 17900547}, {67488, 17900803}, {67489, 17901059}, {67490, 16795395}, + {67491, 17901315}, {67492, 17901571}, {67493, 16781315}, {67494, 17901827}, + {67495, 17902083}, {67496, 17125123}, {67497, 17902339}, {67498, 16819971}, + {67499, 17902595}, {67500, 17902851}, {67501, 17903107}, {67502, 17903363}, + {67503, 16820995}, {67504, 17903619}, {67505, 2}, {67506, 17903875}, + {67507, 17904131}, {67508, 17904387}, {67509, 17904643}, {67510, 17904899}, + {67511, 17905155}, {67512, 17905411}, {67513, 17905667}, {67514, 17905923}, + {67515, 2}, {67584, 1}, {67590, 2}, {67592, 1}, + {67593, 2}, {67594, 1}, {67638, 2}, {67639, 1}, + {67641, 2}, {67644, 1}, {67645, 2}, {67647, 1}, + {67670, 2}, {67671, 1}, {67743, 2}, {67751, 1}, + {67760, 2}, {67808, 1}, {67827, 2}, {67828, 1}, + {67830, 2}, {67835, 1}, {67868, 2}, {67871, 1}, + {67898, 2}, {67903, 1}, {67904, 2}, {67968, 1}, + {68024, 2}, {68028, 1}, {68048, 2}, {68050, 1}, + {68100, 2}, {68101, 1}, {68103, 2}, {68108, 1}, + {68116, 2}, {68117, 1}, {68120, 2}, {68121, 1}, + {68150, 2}, {68152, 1}, {68155, 2}, {68159, 1}, + {68169, 2}, {68176, 1}, {68185, 2}, {68192, 1}, + {68256, 2}, {68288, 1}, {68327, 2}, {68331, 1}, + {68343, 2}, {68352, 1}, {68406, 2}, {68409, 1}, + {68438, 2}, {68440, 1}, {68467, 2}, {68472, 1}, + {68498, 2}, {68505, 1}, {68509, 2}, {68521, 1}, + {68528, 2}, {68608, 1}, {68681, 2}, {68736, 17906179}, + {68737, 17906435}, {68738, 17906691}, {68739, 17906947}, {68740, 17907203}, + {68741, 17907459}, {68742, 17907715}, {68743, 17907971}, {68744, 17908227}, + {68745, 17908483}, {68746, 17908739}, {68747, 17908995}, {68748, 17909251}, + {68749, 17909507}, {68750, 17909763}, {68751, 17910019}, {68752, 17910275}, + {68753, 17910531}, {68754, 17910787}, {68755, 17911043}, {68756, 17911299}, + {68757, 17911555}, {68758, 17911811}, {68759, 17912067}, {68760, 17912323}, + {68761, 17912579}, {68762, 17912835}, {68763, 17913091}, {68764, 17913347}, + {68765, 17913603}, {68766, 17913859}, {68767, 17914115}, {68768, 17914371}, + {68769, 17914627}, {68770, 17914883}, {68771, 17915139}, {68772, 17915395}, + {68773, 17915651}, {68774, 17915907}, {68775, 17916163}, {68776, 17916419}, + {68777, 17916675}, {68778, 17916931}, {68779, 17917187}, {68780, 17917443}, + {68781, 17917699}, {68782, 17917955}, {68783, 17918211}, {68784, 17918467}, + {68785, 17918723}, {68786, 17918979}, {68787, 2}, {68800, 1}, + {68851, 2}, {68858, 1}, {68904, 2}, {68912, 1}, + {68922, 2}, {69216, 1}, {69247, 2}, {69248, 1}, + {69290, 2}, {69291, 1}, {69294, 2}, {69296, 1}, + {69298, 2}, {69373, 1}, {69416, 2}, {69424, 1}, + {69466, 2}, {69488, 1}, {69514, 2}, {69552, 1}, + {69580, 2}, {69600, 1}, {69623, 2}, {69632, 1}, + {69710, 2}, {69714, 1}, {69750, 2}, {69759, 1}, + {69821, 2}, {69822, 1}, {69827, 2}, {69840, 1}, + {69865, 2}, {69872, 1}, {69882, 2}, {69888, 1}, + {69941, 2}, {69942, 1}, {69960, 2}, {69968, 1}, + {70007, 2}, {70016, 1}, {70112, 2}, {70113, 1}, + {70133, 2}, {70144, 1}, {70162, 2}, {70163, 1}, + {70210, 2}, {70272, 1}, {70279, 2}, {70280, 1}, + {70281, 2}, {70282, 1}, {70286, 2}, {70287, 1}, + {70302, 2}, {70303, 1}, {70314, 2}, {70320, 1}, + {70379, 2}, {70384, 1}, {70394, 2}, {70400, 1}, + {70404, 2}, {70405, 1}, {70413, 2}, {70415, 1}, + {70417, 2}, {70419, 1}, {70441, 2}, {70442, 1}, + {70449, 2}, {70450, 1}, {70452, 2}, {70453, 1}, + {70458, 2}, {70459, 1}, {70469, 2}, {70471, 1}, + {70473, 2}, {70475, 1}, {70478, 2}, {70480, 1}, + {70481, 2}, {70487, 1}, {70488, 2}, {70493, 1}, + {70500, 2}, {70502, 1}, {70509, 2}, {70512, 1}, + {70517, 2}, {70656, 1}, {70748, 2}, {70749, 1}, + {70754, 2}, {70784, 1}, {70856, 2}, {70864, 1}, + {70874, 2}, {71040, 1}, {71094, 2}, {71096, 1}, + {71134, 2}, {71168, 1}, {71237, 2}, {71248, 1}, + {71258, 2}, {71264, 1}, {71277, 2}, {71296, 1}, + {71354, 2}, {71360, 1}, {71370, 2}, {71424, 1}, + {71451, 2}, {71453, 1}, {71468, 2}, {71472, 1}, + {71495, 2}, {71680, 1}, {71740, 2}, {71840, 17919235}, + {71841, 17919491}, {71842, 17919747}, {71843, 17920003}, {71844, 17920259}, + {71845, 17920515}, {71846, 17920771}, {71847, 17921027}, {71848, 17921283}, + {71849, 17921539}, {71850, 17921795}, {71851, 17922051}, {71852, 17922307}, + {71853, 17922563}, {71854, 17922819}, {71855, 17923075}, {71856, 17923331}, + {71857, 17923587}, {71858, 17923843}, {71859, 17924099}, {71860, 17924355}, + {71861, 17924611}, {71862, 17924867}, {71863, 17925123}, {71864, 17925379}, + {71865, 17925635}, {71866, 17925891}, {71867, 17926147}, {71868, 17926403}, + {71869, 17926659}, {71870, 17926915}, {71871, 17927171}, {71872, 1}, + {71923, 2}, {71935, 1}, {71943, 2}, {71945, 1}, + {71946, 2}, {71948, 1}, {71956, 2}, {71957, 1}, + {71959, 2}, {71960, 1}, {71990, 2}, {71991, 1}, + {71993, 2}, {71995, 1}, {72007, 2}, {72016, 1}, + {72026, 2}, {72096, 1}, {72104, 2}, {72106, 1}, + {72152, 2}, {72154, 1}, {72165, 2}, {72192, 1}, + {72264, 2}, {72272, 1}, {72355, 2}, {72368, 1}, + {72441, 2}, {72448, 1}, {72458, 2}, {72704, 1}, + {72713, 2}, {72714, 1}, {72759, 2}, {72760, 1}, + {72774, 2}, {72784, 1}, {72813, 2}, {72816, 1}, + {72848, 2}, {72850, 1}, {72872, 2}, {72873, 1}, + {72887, 2}, {72960, 1}, {72967, 2}, {72968, 1}, + {72970, 2}, {72971, 1}, {73015, 2}, {73018, 1}, + {73019, 2}, {73020, 1}, {73022, 2}, {73023, 1}, + {73032, 2}, {73040, 1}, {73050, 2}, {73056, 1}, + {73062, 2}, {73063, 1}, {73065, 2}, {73066, 1}, + {73103, 2}, {73104, 1}, {73106, 2}, {73107, 1}, + {73113, 2}, {73120, 1}, {73130, 2}, {73440, 1}, + {73465, 2}, {73472, 1}, {73489, 2}, {73490, 1}, + {73531, 2}, {73534, 1}, {73562, 2}, {73648, 1}, + {73649, 2}, {73664, 1}, {73714, 2}, {73727, 1}, + {74650, 2}, {74752, 1}, {74863, 2}, {74864, 1}, + {74869, 2}, {74880, 1}, {75076, 2}, {77712, 1}, + {77811, 2}, {77824, 1}, {78896, 2}, {78912, 1}, + {78934, 2}, {82944, 1}, {83527, 2}, {92160, 1}, + {92729, 2}, {92736, 1}, {92767, 2}, {92768, 1}, + {92778, 2}, {92782, 1}, {92863, 2}, {92864, 1}, + {92874, 2}, {92880, 1}, {92910, 2}, {92912, 1}, + {92918, 2}, {92928, 1}, {92998, 2}, {93008, 1}, + {93018, 2}, {93019, 1}, {93026, 2}, {93027, 1}, + {93048, 2}, {93053, 1}, {93072, 2}, {93760, 17927427}, + {93761, 17927683}, {93762, 17927939}, {93763, 17928195}, {93764, 17928451}, + {93765, 17928707}, {93766, 17928963}, {93767, 17929219}, {93768, 17929475}, + {93769, 17929731}, {93770, 17929987}, {93771, 17930243}, {93772, 17930499}, + {93773, 17930755}, {93774, 17931011}, {93775, 17931267}, {93776, 17931523}, + {93777, 17931779}, {93778, 17932035}, {93779, 17932291}, {93780, 17932547}, + {93781, 17932803}, {93782, 17933059}, {93783, 17933315}, {93784, 17933571}, + {93785, 17933827}, {93786, 17934083}, {93787, 17934339}, {93788, 17934595}, + {93789, 17934851}, {93790, 17935107}, {93791, 17935363}, {93792, 1}, + {93851, 2}, {93952, 1}, {94027, 2}, {94031, 1}, + {94088, 2}, {94095, 1}, {94112, 2}, {94176, 1}, + {94181, 2}, {94192, 1}, {94194, 2}, {94208, 1}, + {100344, 2}, {100352, 1}, {101590, 2}, {101632, 1}, + {101641, 2}, {110576, 1}, {110580, 2}, {110581, 1}, + {110588, 2}, {110589, 1}, {110591, 2}, {110592, 1}, + {110883, 2}, {110898, 1}, {110899, 2}, {110928, 1}, + {110931, 2}, {110933, 1}, {110934, 2}, {110948, 1}, + {110952, 2}, {110960, 1}, {111356, 2}, {113664, 1}, + {113771, 2}, {113776, 1}, {113789, 2}, {113792, 1}, + {113801, 2}, {113808, 1}, {113818, 2}, {113820, 1}, + {113824, 0}, {113828, 2}, {118528, 1}, {118574, 2}, + {118576, 1}, {118599, 2}, {118608, 1}, {118724, 2}, + {118784, 1}, {119030, 2}, {119040, 1}, {119079, 2}, + {119081, 1}, {119134, 34712835}, {119135, 34713347}, {119136, 51491075}, + {119137, 51491843}, {119138, 51492611}, {119139, 51493379}, {119140, 51494147}, + {119141, 1}, {119155, 2}, {119163, 1}, {119227, 34717699}, + {119228, 34718211}, {119229, 51495939}, {119230, 51496707}, {119231, 51497475}, + {119232, 51498243}, {119233, 1}, {119275, 2}, {119296, 1}, + {119366, 2}, {119488, 1}, {119508, 2}, {119520, 1}, + {119540, 2}, {119552, 1}, {119639, 2}, {119648, 1}, + {119673, 2}, {119808, 16777219}, {119809, 16777475}, {119810, 16777731}, + {119811, 16777987}, {119812, 16778243}, {119813, 16778499}, {119814, 16778755}, + {119815, 16779011}, {119816, 16779267}, {119817, 16779523}, {119818, 16779779}, + {119819, 16780035}, {119820, 16780291}, {119821, 16780547}, {119822, 16780803}, + {119823, 16781059}, {119824, 16781315}, {119825, 16781571}, {119826, 16781827}, + {119827, 16782083}, {119828, 16782339}, {119829, 16782595}, {119830, 16782851}, + {119831, 16783107}, {119832, 16783363}, {119833, 16783619}, {119834, 16777219}, + {119835, 16777475}, {119836, 16777731}, {119837, 16777987}, {119838, 16778243}, + {119839, 16778499}, {119840, 16778755}, {119841, 16779011}, {119842, 16779267}, + {119843, 16779523}, {119844, 16779779}, {119845, 16780035}, {119846, 16780291}, + {119847, 16780547}, {119848, 16780803}, {119849, 16781059}, {119850, 16781315}, + {119851, 16781571}, {119852, 16781827}, {119853, 16782083}, {119854, 16782339}, + {119855, 16782595}, {119856, 16782851}, {119857, 16783107}, {119858, 16783363}, + {119859, 16783619}, {119860, 16777219}, {119861, 16777475}, {119862, 16777731}, + {119863, 16777987}, {119864, 16778243}, {119865, 16778499}, {119866, 16778755}, + {119867, 16779011}, {119868, 16779267}, {119869, 16779523}, {119870, 16779779}, + {119871, 16780035}, {119872, 16780291}, {119873, 16780547}, {119874, 16780803}, + {119875, 16781059}, {119876, 16781315}, {119877, 16781571}, {119878, 16781827}, + {119879, 16782083}, {119880, 16782339}, {119881, 16782595}, {119882, 16782851}, + {119883, 16783107}, {119884, 16783363}, {119885, 16783619}, {119886, 16777219}, + {119887, 16777475}, {119888, 16777731}, {119889, 16777987}, {119890, 16778243}, + {119891, 16778499}, {119892, 16778755}, {119893, 2}, {119894, 16779267}, + {119895, 16779523}, {119896, 16779779}, {119897, 16780035}, {119898, 16780291}, + {119899, 16780547}, {119900, 16780803}, {119901, 16781059}, {119902, 16781315}, + {119903, 16781571}, {119904, 16781827}, {119905, 16782083}, {119906, 16782339}, + {119907, 16782595}, {119908, 16782851}, {119909, 16783107}, {119910, 16783363}, + {119911, 16783619}, {119912, 16777219}, {119913, 16777475}, {119914, 16777731}, + {119915, 16777987}, {119916, 16778243}, {119917, 16778499}, {119918, 16778755}, + {119919, 16779011}, {119920, 16779267}, {119921, 16779523}, {119922, 16779779}, + {119923, 16780035}, {119924, 16780291}, {119925, 16780547}, {119926, 16780803}, + {119927, 16781059}, {119928, 16781315}, {119929, 16781571}, {119930, 16781827}, + {119931, 16782083}, {119932, 16782339}, {119933, 16782595}, {119934, 16782851}, + {119935, 16783107}, {119936, 16783363}, {119937, 16783619}, {119938, 16777219}, + {119939, 16777475}, {119940, 16777731}, {119941, 16777987}, {119942, 16778243}, + {119943, 16778499}, {119944, 16778755}, {119945, 16779011}, {119946, 16779267}, + {119947, 16779523}, {119948, 16779779}, {119949, 16780035}, {119950, 16780291}, + {119951, 16780547}, {119952, 16780803}, {119953, 16781059}, {119954, 16781315}, + {119955, 16781571}, {119956, 16781827}, {119957, 16782083}, {119958, 16782339}, + {119959, 16782595}, {119960, 16782851}, {119961, 16783107}, {119962, 16783363}, + {119963, 16783619}, {119964, 16777219}, {119965, 2}, {119966, 16777731}, + {119967, 16777987}, {119968, 2}, {119970, 16778755}, {119971, 2}, + {119973, 16779523}, {119974, 16779779}, {119975, 2}, {119977, 16780547}, + {119978, 16780803}, {119979, 16781059}, {119980, 16781315}, {119981, 2}, + {119982, 16781827}, {119983, 16782083}, {119984, 16782339}, {119985, 16782595}, + {119986, 16782851}, {119987, 16783107}, {119988, 16783363}, {119989, 16783619}, + {119990, 16777219}, {119991, 16777475}, {119992, 16777731}, {119993, 16777987}, + {119994, 2}, {119995, 16778499}, {119996, 2}, {119997, 16779011}, + {119998, 16779267}, {119999, 16779523}, {120000, 16779779}, {120001, 16780035}, + {120002, 16780291}, {120003, 16780547}, {120004, 2}, {120005, 16781059}, + {120006, 16781315}, {120007, 16781571}, {120008, 16781827}, {120009, 16782083}, + {120010, 16782339}, {120011, 16782595}, {120012, 16782851}, {120013, 16783107}, + {120014, 16783363}, {120015, 16783619}, {120016, 16777219}, {120017, 16777475}, + {120018, 16777731}, {120019, 16777987}, {120020, 16778243}, {120021, 16778499}, + {120022, 16778755}, {120023, 16779011}, {120024, 16779267}, {120025, 16779523}, + {120026, 16779779}, {120027, 16780035}, {120028, 16780291}, {120029, 16780547}, + {120030, 16780803}, {120031, 16781059}, {120032, 16781315}, {120033, 16781571}, + {120034, 16781827}, {120035, 16782083}, {120036, 16782339}, {120037, 16782595}, + {120038, 16782851}, {120039, 16783107}, {120040, 16783363}, {120041, 16783619}, + {120042, 16777219}, {120043, 16777475}, {120044, 16777731}, {120045, 16777987}, + {120046, 16778243}, {120047, 16778499}, {120048, 16778755}, {120049, 16779011}, + {120050, 16779267}, {120051, 16779523}, {120052, 16779779}, {120053, 16780035}, + {120054, 16780291}, {120055, 16780547}, {120056, 16780803}, {120057, 16781059}, + {120058, 16781315}, {120059, 16781571}, {120060, 16781827}, {120061, 16782083}, + {120062, 16782339}, {120063, 16782595}, {120064, 16782851}, {120065, 16783107}, + {120066, 16783363}, {120067, 16783619}, {120068, 16777219}, {120069, 16777475}, + {120070, 2}, {120071, 16777987}, {120072, 16778243}, {120073, 16778499}, + {120074, 16778755}, {120075, 2}, {120077, 16779523}, {120078, 16779779}, + {120079, 16780035}, {120080, 16780291}, {120081, 16780547}, {120082, 16780803}, + {120083, 16781059}, {120084, 16781315}, {120085, 2}, {120086, 16781827}, + {120087, 16782083}, {120088, 16782339}, {120089, 16782595}, {120090, 16782851}, + {120091, 16783107}, {120092, 16783363}, {120093, 2}, {120094, 16777219}, + {120095, 16777475}, {120096, 16777731}, {120097, 16777987}, {120098, 16778243}, + {120099, 16778499}, {120100, 16778755}, {120101, 16779011}, {120102, 16779267}, + {120103, 16779523}, {120104, 16779779}, {120105, 16780035}, {120106, 16780291}, + {120107, 16780547}, {120108, 16780803}, {120109, 16781059}, {120110, 16781315}, + {120111, 16781571}, {120112, 16781827}, {120113, 16782083}, {120114, 16782339}, + {120115, 16782595}, {120116, 16782851}, {120117, 16783107}, {120118, 16783363}, + {120119, 16783619}, {120120, 16777219}, {120121, 16777475}, {120122, 2}, + {120123, 16777987}, {120124, 16778243}, {120125, 16778499}, {120126, 16778755}, + {120127, 2}, {120128, 16779267}, {120129, 16779523}, {120130, 16779779}, + {120131, 16780035}, {120132, 16780291}, {120133, 2}, {120134, 16780803}, + {120135, 2}, {120138, 16781827}, {120139, 16782083}, {120140, 16782339}, + {120141, 16782595}, {120142, 16782851}, {120143, 16783107}, {120144, 16783363}, + {120145, 2}, {120146, 16777219}, {120147, 16777475}, {120148, 16777731}, + {120149, 16777987}, {120150, 16778243}, {120151, 16778499}, {120152, 16778755}, + {120153, 16779011}, {120154, 16779267}, {120155, 16779523}, {120156, 16779779}, + {120157, 16780035}, {120158, 16780291}, {120159, 16780547}, {120160, 16780803}, + {120161, 16781059}, {120162, 16781315}, {120163, 16781571}, {120164, 16781827}, + {120165, 16782083}, {120166, 16782339}, {120167, 16782595}, {120168, 16782851}, + {120169, 16783107}, {120170, 16783363}, {120171, 16783619}, {120172, 16777219}, + {120173, 16777475}, {120174, 16777731}, {120175, 16777987}, {120176, 16778243}, + {120177, 16778499}, {120178, 16778755}, {120179, 16779011}, {120180, 16779267}, + {120181, 16779523}, {120182, 16779779}, {120183, 16780035}, {120184, 16780291}, + {120185, 16780547}, {120186, 16780803}, {120187, 16781059}, {120188, 16781315}, + {120189, 16781571}, {120190, 16781827}, {120191, 16782083}, {120192, 16782339}, + {120193, 16782595}, {120194, 16782851}, {120195, 16783107}, {120196, 16783363}, + {120197, 16783619}, {120198, 16777219}, {120199, 16777475}, {120200, 16777731}, + {120201, 16777987}, {120202, 16778243}, {120203, 16778499}, {120204, 16778755}, + {120205, 16779011}, {120206, 16779267}, {120207, 16779523}, {120208, 16779779}, + {120209, 16780035}, {120210, 16780291}, {120211, 16780547}, {120212, 16780803}, + {120213, 16781059}, {120214, 16781315}, {120215, 16781571}, {120216, 16781827}, + {120217, 16782083}, {120218, 16782339}, {120219, 16782595}, {120220, 16782851}, + {120221, 16783107}, {120222, 16783363}, {120223, 16783619}, {120224, 16777219}, + {120225, 16777475}, {120226, 16777731}, {120227, 16777987}, {120228, 16778243}, + {120229, 16778499}, {120230, 16778755}, {120231, 16779011}, {120232, 16779267}, + {120233, 16779523}, {120234, 16779779}, {120235, 16780035}, {120236, 16780291}, + {120237, 16780547}, {120238, 16780803}, {120239, 16781059}, {120240, 16781315}, + {120241, 16781571}, {120242, 16781827}, {120243, 16782083}, {120244, 16782339}, + {120245, 16782595}, {120246, 16782851}, {120247, 16783107}, {120248, 16783363}, + {120249, 16783619}, {120250, 16777219}, {120251, 16777475}, {120252, 16777731}, + {120253, 16777987}, {120254, 16778243}, {120255, 16778499}, {120256, 16778755}, + {120257, 16779011}, {120258, 16779267}, {120259, 16779523}, {120260, 16779779}, + {120261, 16780035}, {120262, 16780291}, {120263, 16780547}, {120264, 16780803}, + {120265, 16781059}, {120266, 16781315}, {120267, 16781571}, {120268, 16781827}, + {120269, 16782083}, {120270, 16782339}, {120271, 16782595}, {120272, 16782851}, + {120273, 16783107}, {120274, 16783363}, {120275, 16783619}, {120276, 16777219}, + {120277, 16777475}, {120278, 16777731}, {120279, 16777987}, {120280, 16778243}, + {120281, 16778499}, {120282, 16778755}, {120283, 16779011}, {120284, 16779267}, + {120285, 16779523}, {120286, 16779779}, {120287, 16780035}, {120288, 16780291}, + {120289, 16780547}, {120290, 16780803}, {120291, 16781059}, {120292, 16781315}, + {120293, 16781571}, {120294, 16781827}, {120295, 16782083}, {120296, 16782339}, + {120297, 16782595}, {120298, 16782851}, {120299, 16783107}, {120300, 16783363}, + {120301, 16783619}, {120302, 16777219}, {120303, 16777475}, {120304, 16777731}, + {120305, 16777987}, {120306, 16778243}, {120307, 16778499}, {120308, 16778755}, + {120309, 16779011}, {120310, 16779267}, {120311, 16779523}, {120312, 16779779}, + {120313, 16780035}, {120314, 16780291}, {120315, 16780547}, {120316, 16780803}, + {120317, 16781059}, {120318, 16781315}, {120319, 16781571}, {120320, 16781827}, + {120321, 16782083}, {120322, 16782339}, {120323, 16782595}, {120324, 16782851}, + {120325, 16783107}, {120326, 16783363}, {120327, 16783619}, {120328, 16777219}, + {120329, 16777475}, {120330, 16777731}, {120331, 16777987}, {120332, 16778243}, + {120333, 16778499}, {120334, 16778755}, {120335, 16779011}, {120336, 16779267}, + {120337, 16779523}, {120338, 16779779}, {120339, 16780035}, {120340, 16780291}, + {120341, 16780547}, {120342, 16780803}, {120343, 16781059}, {120344, 16781315}, + {120345, 16781571}, {120346, 16781827}, {120347, 16782083}, {120348, 16782339}, + {120349, 16782595}, {120350, 16782851}, {120351, 16783107}, {120352, 16783363}, + {120353, 16783619}, {120354, 16777219}, {120355, 16777475}, {120356, 16777731}, + {120357, 16777987}, {120358, 16778243}, {120359, 16778499}, {120360, 16778755}, + {120361, 16779011}, {120362, 16779267}, {120363, 16779523}, {120364, 16779779}, + {120365, 16780035}, {120366, 16780291}, {120367, 16780547}, {120368, 16780803}, + {120369, 16781059}, {120370, 16781315}, {120371, 16781571}, {120372, 16781827}, + {120373, 16782083}, {120374, 16782339}, {120375, 16782595}, {120376, 16782851}, + {120377, 16783107}, {120378, 16783363}, {120379, 16783619}, {120380, 16777219}, + {120381, 16777475}, {120382, 16777731}, {120383, 16777987}, {120384, 16778243}, + {120385, 16778499}, {120386, 16778755}, {120387, 16779011}, {120388, 16779267}, + {120389, 16779523}, {120390, 16779779}, {120391, 16780035}, {120392, 16780291}, + {120393, 16780547}, {120394, 16780803}, {120395, 16781059}, {120396, 16781315}, + {120397, 16781571}, {120398, 16781827}, {120399, 16782083}, {120400, 16782339}, + {120401, 16782595}, {120402, 16782851}, {120403, 16783107}, {120404, 16783363}, + {120405, 16783619}, {120406, 16777219}, {120407, 16777475}, {120408, 16777731}, + {120409, 16777987}, {120410, 16778243}, {120411, 16778499}, {120412, 16778755}, + {120413, 16779011}, {120414, 16779267}, {120415, 16779523}, {120416, 16779779}, + {120417, 16780035}, {120418, 16780291}, {120419, 16780547}, {120420, 16780803}, + {120421, 16781059}, {120422, 16781315}, {120423, 16781571}, {120424, 16781827}, + {120425, 16782083}, {120426, 16782339}, {120427, 16782595}, {120428, 16782851}, + {120429, 16783107}, {120430, 16783363}, {120431, 16783619}, {120432, 16777219}, + {120433, 16777475}, {120434, 16777731}, {120435, 16777987}, {120436, 16778243}, + {120437, 16778499}, {120438, 16778755}, {120439, 16779011}, {120440, 16779267}, + {120441, 16779523}, {120442, 16779779}, {120443, 16780035}, {120444, 16780291}, + {120445, 16780547}, {120446, 16780803}, {120447, 16781059}, {120448, 16781315}, + {120449, 16781571}, {120450, 16781827}, {120451, 16782083}, {120452, 16782339}, + {120453, 16782595}, {120454, 16782851}, {120455, 16783107}, {120456, 16783363}, + {120457, 16783619}, {120458, 16777219}, {120459, 16777475}, {120460, 16777731}, + {120461, 16777987}, {120462, 16778243}, {120463, 16778499}, {120464, 16778755}, + {120465, 16779011}, {120466, 16779267}, {120467, 16779523}, {120468, 16779779}, + {120469, 16780035}, {120470, 16780291}, {120471, 16780547}, {120472, 16780803}, + {120473, 16781059}, {120474, 16781315}, {120475, 16781571}, {120476, 16781827}, + {120477, 16782083}, {120478, 16782339}, {120479, 16782595}, {120480, 16782851}, + {120481, 16783107}, {120482, 16783363}, {120483, 16783619}, {120484, 17944579}, + {120485, 17944835}, {120486, 2}, {120488, 16851715}, {120489, 16851971}, + {120490, 16852227}, {120491, 16852483}, {120492, 16852739}, {120493, 16852995}, + {120494, 16853251}, {120495, 16853507}, {120496, 16846851}, {120497, 16853763}, + {120498, 16854019}, {120499, 16786179}, {120500, 16854275}, {120501, 16854531}, + {120502, 16854787}, {120503, 16855043}, {120504, 16855299}, {120505, 16853507}, + {120506, 16855555}, {120507, 16855811}, {120508, 16856067}, {120509, 16856323}, + {120510, 16856579}, {120511, 16856835}, {120512, 16857091}, {120513, 17945091}, + {120514, 16851715}, {120515, 16851971}, {120516, 16852227}, {120517, 16852483}, + {120518, 16852739}, {120519, 16852995}, {120520, 16853251}, {120521, 16853507}, + {120522, 16846851}, {120523, 16853763}, {120524, 16854019}, {120525, 16786179}, + {120526, 16854275}, {120527, 16854531}, {120528, 16854787}, {120529, 16855043}, + {120530, 16855299}, {120531, 16855555}, {120533, 16855811}, {120534, 16856067}, + {120535, 16856323}, {120536, 16856579}, {120537, 16856835}, {120538, 16857091}, + {120539, 17945347}, {120540, 16852739}, {120541, 16853507}, {120542, 16853763}, + {120543, 16856323}, {120544, 16855299}, {120545, 16855043}, {120546, 16851715}, + {120547, 16851971}, {120548, 16852227}, {120549, 16852483}, {120550, 16852739}, + {120551, 16852995}, {120552, 16853251}, {120553, 16853507}, {120554, 16846851}, + {120555, 16853763}, {120556, 16854019}, {120557, 16786179}, {120558, 16854275}, + {120559, 16854531}, {120560, 16854787}, {120561, 16855043}, {120562, 16855299}, + {120563, 16853507}, {120564, 16855555}, {120565, 16855811}, {120566, 16856067}, + {120567, 16856323}, {120568, 16856579}, {120569, 16856835}, {120570, 16857091}, + {120571, 17945091}, {120572, 16851715}, {120573, 16851971}, {120574, 16852227}, + {120575, 16852483}, {120576, 16852739}, {120577, 16852995}, {120578, 16853251}, + {120579, 16853507}, {120580, 16846851}, {120581, 16853763}, {120582, 16854019}, + {120583, 16786179}, {120584, 16854275}, {120585, 16854531}, {120586, 16854787}, + {120587, 16855043}, {120588, 16855299}, {120589, 16855555}, {120591, 16855811}, + {120592, 16856067}, {120593, 16856323}, {120594, 16856579}, {120595, 16856835}, + {120596, 16857091}, {120597, 17945347}, {120598, 16852739}, {120599, 16853507}, + {120600, 16853763}, {120601, 16856323}, {120602, 16855299}, {120603, 16855043}, + {120604, 16851715}, {120605, 16851971}, {120606, 16852227}, {120607, 16852483}, + {120608, 16852739}, {120609, 16852995}, {120610, 16853251}, {120611, 16853507}, + {120612, 16846851}, {120613, 16853763}, {120614, 16854019}, {120615, 16786179}, + {120616, 16854275}, {120617, 16854531}, {120618, 16854787}, {120619, 16855043}, + {120620, 16855299}, {120621, 16853507}, {120622, 16855555}, {120623, 16855811}, + {120624, 16856067}, {120625, 16856323}, {120626, 16856579}, {120627, 16856835}, + {120628, 16857091}, {120629, 17945091}, {120630, 16851715}, {120631, 16851971}, + {120632, 16852227}, {120633, 16852483}, {120634, 16852739}, {120635, 16852995}, + {120636, 16853251}, {120637, 16853507}, {120638, 16846851}, {120639, 16853763}, + {120640, 16854019}, {120641, 16786179}, {120642, 16854275}, {120643, 16854531}, + {120644, 16854787}, {120645, 16855043}, {120646, 16855299}, {120647, 16855555}, + {120649, 16855811}, {120650, 16856067}, {120651, 16856323}, {120652, 16856579}, + {120653, 16856835}, {120654, 16857091}, {120655, 17945347}, {120656, 16852739}, + {120657, 16853507}, {120658, 16853763}, {120659, 16856323}, {120660, 16855299}, + {120661, 16855043}, {120662, 16851715}, {120663, 16851971}, {120664, 16852227}, + {120665, 16852483}, {120666, 16852739}, {120667, 16852995}, {120668, 16853251}, + {120669, 16853507}, {120670, 16846851}, {120671, 16853763}, {120672, 16854019}, + {120673, 16786179}, {120674, 16854275}, {120675, 16854531}, {120676, 16854787}, + {120677, 16855043}, {120678, 16855299}, {120679, 16853507}, {120680, 16855555}, + {120681, 16855811}, {120682, 16856067}, {120683, 16856323}, {120684, 16856579}, + {120685, 16856835}, {120686, 16857091}, {120687, 17945091}, {120688, 16851715}, + {120689, 16851971}, {120690, 16852227}, {120691, 16852483}, {120692, 16852739}, + {120693, 16852995}, {120694, 16853251}, {120695, 16853507}, {120696, 16846851}, + {120697, 16853763}, {120698, 16854019}, {120699, 16786179}, {120700, 16854275}, + {120701, 16854531}, {120702, 16854787}, {120703, 16855043}, {120704, 16855299}, + {120705, 16855555}, {120707, 16855811}, {120708, 16856067}, {120709, 16856323}, + {120710, 16856579}, {120711, 16856835}, {120712, 16857091}, {120713, 17945347}, + {120714, 16852739}, {120715, 16853507}, {120716, 16853763}, {120717, 16856323}, + {120718, 16855299}, {120719, 16855043}, {120720, 16851715}, {120721, 16851971}, + {120722, 16852227}, {120723, 16852483}, {120724, 16852739}, {120725, 16852995}, + {120726, 16853251}, {120727, 16853507}, {120728, 16846851}, {120729, 16853763}, + {120730, 16854019}, {120731, 16786179}, {120732, 16854275}, {120733, 16854531}, + {120734, 16854787}, {120735, 16855043}, {120736, 16855299}, {120737, 16853507}, + {120738, 16855555}, {120739, 16855811}, {120740, 16856067}, {120741, 16856323}, + {120742, 16856579}, {120743, 16856835}, {120744, 16857091}, {120745, 17945091}, + {120746, 16851715}, {120747, 16851971}, {120748, 16852227}, {120749, 16852483}, + {120750, 16852739}, {120751, 16852995}, {120752, 16853251}, {120753, 16853507}, + {120754, 16846851}, {120755, 16853763}, {120756, 16854019}, {120757, 16786179}, + {120758, 16854275}, {120759, 16854531}, {120760, 16854787}, {120761, 16855043}, + {120762, 16855299}, {120763, 16855555}, {120765, 16855811}, {120766, 16856067}, + {120767, 16856323}, {120768, 16856579}, {120769, 16856835}, {120770, 16857091}, + {120771, 17945347}, {120772, 16852739}, {120773, 16853507}, {120774, 16853763}, + {120775, 16856323}, {120776, 16855299}, {120777, 16855043}, {120778, 16858627}, + {120780, 2}, {120782, 17035267}, {120783, 16786947}, {120784, 16785155}, + {120785, 16785411}, {120786, 16787715}, {120787, 17035523}, {120788, 17035779}, + {120789, 17036035}, {120790, 17036291}, {120791, 17036547}, {120792, 17035267}, + {120793, 16786947}, {120794, 16785155}, {120795, 16785411}, {120796, 16787715}, + {120797, 17035523}, {120798, 17035779}, {120799, 17036035}, {120800, 17036291}, + {120801, 17036547}, {120802, 17035267}, {120803, 16786947}, {120804, 16785155}, + {120805, 16785411}, {120806, 16787715}, {120807, 17035523}, {120808, 17035779}, + {120809, 17036035}, {120810, 17036291}, {120811, 17036547}, {120812, 17035267}, + {120813, 16786947}, {120814, 16785155}, {120815, 16785411}, {120816, 16787715}, + {120817, 17035523}, {120818, 17035779}, {120819, 17036035}, {120820, 17036291}, + {120821, 17036547}, {120822, 17035267}, {120823, 16786947}, {120824, 16785155}, + {120825, 16785411}, {120826, 16787715}, {120827, 17035523}, {120828, 17035779}, + {120829, 17036035}, {120830, 17036291}, {120831, 17036547}, {120832, 1}, + {121484, 2}, {121499, 1}, {121504, 2}, {121505, 1}, + {121520, 2}, {122624, 1}, {122655, 2}, {122661, 1}, + {122667, 2}, {122880, 1}, {122887, 2}, {122888, 1}, + {122905, 2}, {122907, 1}, {122914, 2}, {122915, 1}, + {122917, 2}, {122918, 1}, {122923, 2}, {122928, 16866563}, + {122929, 16866819}, {122930, 16867075}, {122931, 16867331}, {122932, 16867587}, + {122933, 16867843}, {122934, 16868099}, {122935, 16868355}, {122936, 16868611}, + {122937, 16869123}, {122938, 16869379}, {122939, 16869635}, {122940, 16870147}, + {122941, 16870403}, {122942, 16870659}, {122943, 16870915}, {122944, 16871171}, + {122945, 16871427}, {122946, 16871683}, {122947, 16871939}, {122948, 16872195}, + {122949, 16872451}, {122950, 16872707}, {122951, 16873475}, {122952, 16873987}, + {122953, 16874243}, {122954, 17495043}, {122955, 16888835}, {122956, 16864003}, + {122957, 16864515}, {122958, 16890883}, {122959, 16883715}, {122960, 17945603}, + {122961, 16866563}, {122962, 16866819}, {122963, 16867075}, {122964, 16867331}, + {122965, 16867587}, {122966, 16867843}, {122967, 16868099}, {122968, 16868355}, + {122969, 16868611}, {122970, 16869123}, {122971, 16869379}, {122972, 16870147}, + {122973, 16870403}, {122974, 16870915}, {122975, 16871427}, {122976, 16871683}, + {122977, 16871939}, {122978, 16872195}, {122979, 16872451}, {122980, 16872707}, + {122981, 16873219}, {122982, 16873475}, {122983, 16879875}, {122984, 16864003}, + {122985, 16863747}, {122986, 16866307}, {122987, 16883203}, {122988, 17490179}, + {122989, 16883971}, {122990, 2}, {123023, 1}, {123024, 2}, + {123136, 1}, {123181, 2}, {123184, 1}, {123198, 2}, + {123200, 1}, {123210, 2}, {123214, 1}, {123216, 2}, + {123536, 1}, {123567, 2}, {123584, 1}, {123642, 2}, + {123647, 1}, {123648, 2}, {124112, 1}, {124154, 2}, + {124896, 1}, {124903, 2}, {124904, 1}, {124908, 2}, + {124909, 1}, {124911, 2}, {124912, 1}, {124927, 2}, + {124928, 1}, {125125, 2}, {125127, 1}, {125143, 2}, + {125184, 17945859}, {125185, 17946115}, {125186, 17946371}, {125187, 17946627}, + {125188, 17946883}, {125189, 17947139}, {125190, 17947395}, {125191, 17947651}, + {125192, 17947907}, {125193, 17948163}, {125194, 17948419}, {125195, 17948675}, + {125196, 17948931}, {125197, 17949187}, {125198, 17949443}, {125199, 17949699}, + {125200, 17949955}, {125201, 17950211}, {125202, 17950467}, {125203, 17950723}, + {125204, 17950979}, {125205, 17951235}, {125206, 17951491}, {125207, 17951747}, + {125208, 17952003}, {125209, 17952259}, {125210, 17952515}, {125211, 17952771}, + {125212, 17953027}, {125213, 17953283}, {125214, 17953539}, {125215, 17953795}, + {125216, 17954051}, {125217, 17954307}, {125218, 1}, {125260, 2}, + {125264, 1}, {125274, 2}, {125278, 1}, {125280, 2}, + {126065, 1}, {126133, 2}, {126209, 1}, {126270, 2}, + {126464, 16910339}, {126465, 17683459}, {126466, 17681667}, {126467, 17834243}, + {126468, 2}, {126469, 16910851}, {126470, 17731331}, {126471, 17682179}, + {126472, 17699843}, {126473, 16911875}, {126474, 17708547}, {126475, 17710851}, + {126476, 17682691}, {126477, 17717763}, {126478, 17694723}, {126479, 17701379}, + {126480, 17703427}, {126481, 17696771}, {126482, 17706499}, {126483, 17724931}, + {126484, 17744899}, {126485, 17686531}, {126486, 17689603}, {126487, 17684739}, + {126488, 17724419}, {126489, 17697795}, {126490, 17700867}, {126491, 17702403}, + {126492, 17954563}, {126493, 17673219}, {126494, 17954819}, {126495, 17955075}, + {126496, 2}, {126497, 17683459}, {126498, 17681667}, {126499, 2}, + {126500, 17720835}, {126501, 2}, {126503, 17682179}, {126504, 2}, + {126505, 16911875}, {126506, 17708547}, {126507, 17710851}, {126508, 17682691}, + {126509, 17717763}, {126510, 17694723}, {126511, 17701379}, {126512, 17703427}, + {126513, 17696771}, {126514, 17706499}, {126515, 2}, {126516, 17744899}, + {126517, 17686531}, {126518, 17689603}, {126519, 17684739}, {126520, 2}, + {126521, 17697795}, {126522, 2}, {126523, 17702403}, {126524, 2}, + {126530, 17681667}, {126531, 2}, {126535, 17682179}, {126536, 2}, + {126537, 16911875}, {126538, 2}, {126539, 17710851}, {126540, 2}, + {126541, 17717763}, {126542, 17694723}, {126543, 17701379}, {126544, 2}, + {126545, 17696771}, {126546, 17706499}, {126547, 2}, {126548, 17744899}, + {126549, 2}, {126551, 17684739}, {126552, 2}, {126553, 17697795}, + {126554, 2}, {126555, 17702403}, {126556, 2}, {126557, 17673219}, + {126558, 2}, {126559, 17955075}, {126560, 2}, {126561, 17683459}, + {126562, 17681667}, {126563, 2}, {126564, 17720835}, {126565, 2}, + {126567, 17682179}, {126568, 17699843}, {126569, 16911875}, {126570, 17708547}, + {126571, 2}, {126572, 17682691}, {126573, 17717763}, {126574, 17694723}, + {126575, 17701379}, {126576, 17703427}, {126577, 17696771}, {126578, 17706499}, + {126579, 2}, {126580, 17744899}, {126581, 17686531}, {126582, 17689603}, + {126583, 17684739}, {126584, 2}, {126585, 17697795}, {126586, 17700867}, + {126587, 17702403}, {126588, 17954563}, {126589, 2}, {126590, 17954819}, + {126591, 2}, {126592, 16910339}, {126593, 17683459}, {126594, 17681667}, + {126595, 17834243}, {126596, 17720835}, {126597, 16910851}, {126598, 17731331}, + {126599, 17682179}, {126600, 17699843}, {126601, 16911875}, {126602, 2}, + {126603, 17710851}, {126604, 17682691}, {126605, 17717763}, {126606, 17694723}, + {126607, 17701379}, {126608, 17703427}, {126609, 17696771}, {126610, 17706499}, + {126611, 17724931}, {126612, 17744899}, {126613, 17686531}, {126614, 17689603}, + {126615, 17684739}, {126616, 17724419}, {126617, 17697795}, {126618, 17700867}, + {126619, 17702403}, {126620, 2}, {126625, 17683459}, {126626, 17681667}, + {126627, 17834243}, {126628, 2}, {126629, 16910851}, {126630, 17731331}, + {126631, 17682179}, {126632, 17699843}, {126633, 16911875}, {126634, 2}, + {126635, 17710851}, {126636, 17682691}, {126637, 17717763}, {126638, 17694723}, + {126639, 17701379}, {126640, 17703427}, {126641, 17696771}, {126642, 17706499}, + {126643, 17724931}, {126644, 17744899}, {126645, 17686531}, {126646, 17689603}, + {126647, 17684739}, {126648, 17724419}, {126649, 17697795}, {126650, 17700867}, + {126651, 17702403}, {126652, 2}, {126704, 1}, {126706, 2}, + {126976, 1}, {127020, 2}, {127024, 1}, {127124, 2}, + {127136, 1}, {127151, 2}, {127153, 1}, {127168, 2}, + {127169, 1}, {127184, 2}, {127185, 1}, {127222, 2}, + {127233, 34732547}, {127234, 34733059}, {127235, 34733571}, {127236, 34734083}, + {127237, 34734595}, {127238, 34735107}, {127239, 34735619}, {127240, 34736131}, + {127241, 34736643}, {127242, 34737155}, {127243, 1}, {127248, 50644739}, + {127249, 50645507}, {127250, 50646275}, {127251, 50647043}, {127252, 50647811}, + {127253, 50648579}, {127254, 50649347}, {127255, 50650115}, {127256, 50650883}, + {127257, 50651651}, {127258, 50652419}, {127259, 50653187}, {127260, 50653955}, + {127261, 50654723}, {127262, 50655491}, {127263, 50656259}, {127264, 50657027}, + {127265, 50657795}, {127266, 50658563}, {127267, 50659331}, {127268, 50660099}, + {127269, 50660867}, {127270, 50661635}, {127271, 50662403}, {127272, 50663171}, + {127273, 50663939}, {127274, 51514883}, {127275, 16777731}, {127276, 16781571}, + {127277, 33554947}, {127278, 34738435}, {127279, 1}, {127280, 16777219}, + {127281, 16777475}, {127282, 16777731}, {127283, 16777987}, {127284, 16778243}, + {127285, 16778499}, {127286, 16778755}, {127287, 16779011}, {127288, 16779267}, + {127289, 16779523}, {127290, 16779779}, {127291, 16780035}, {127292, 16780291}, + {127293, 16780547}, {127294, 16780803}, {127295, 16781059}, {127296, 16781315}, + {127297, 16781571}, {127298, 16781827}, {127299, 16782083}, {127300, 16782339}, + {127301, 16782595}, {127302, 16782851}, {127303, 16783107}, {127304, 16783363}, + {127305, 16783619}, {127306, 34738947}, {127307, 34226435}, {127308, 34739459}, + {127309, 34739971}, {127310, 51517699}, {127311, 34741251}, {127312, 1}, + {127338, 34209283}, {127339, 34189315}, {127340, 34741763}, {127341, 1}, + {127376, 34742275}, {127377, 1}, {127406, 2}, {127462, 1}, + {127488, 34742787}, {127489, 34743299}, {127490, 17307651}, {127491, 2}, + {127504, 17157635}, {127505, 17966595}, {127506, 17966851}, {127507, 17351427}, + {127508, 17143043}, {127509, 17967107}, {127510, 17967363}, {127511, 17225219}, + {127512, 17967619}, {127513, 17967875}, {127514, 17968131}, {127515, 17584387}, + {127516, 17968387}, {127517, 17968643}, {127518, 17968899}, {127519, 17969155}, + {127520, 17969411}, {127521, 17969667}, {127522, 17166851}, {127523, 17969923}, + {127524, 17970179}, {127525, 17970435}, {127526, 17970691}, {127527, 17970947}, + {127528, 17971203}, {127529, 17141507}, {127530, 17223171}, {127531, 17971459}, + {127532, 17288451}, {127533, 17223939}, {127534, 17288707}, {127535, 17971715}, + {127536, 17181187}, {127537, 17971971}, {127538, 17972227}, {127539, 17972483}, + {127540, 17972739}, {127541, 17972995}, {127542, 17264131}, {127543, 17160195}, + {127544, 17973251}, {127545, 17973507}, {127546, 17973763}, {127547, 17974019}, + {127548, 2}, {127552, 51528707}, {127553, 51529475}, {127554, 51530243}, + {127555, 51531011}, {127556, 51531779}, {127557, 51532547}, {127558, 51533315}, + {127559, 51534083}, {127560, 51534851}, {127561, 2}, {127568, 17981187}, + {127569, 17981443}, {127570, 2}, {127584, 1}, {127590, 2}, + {127744, 1}, {128728, 2}, {128732, 1}, {128749, 2}, + {128752, 1}, {128765, 2}, {128768, 1}, {128887, 2}, + {128891, 1}, {128986, 2}, {128992, 1}, {129004, 2}, + {129008, 1}, {129009, 2}, {129024, 1}, {129036, 2}, + {129040, 1}, {129096, 2}, {129104, 1}, {129114, 2}, + {129120, 1}, {129160, 2}, {129168, 1}, {129198, 2}, + {129200, 1}, {129202, 2}, {129280, 1}, {129620, 2}, + {129632, 1}, {129646, 2}, {129648, 1}, {129661, 2}, + {129664, 1}, {129673, 2}, {129680, 1}, {129726, 2}, + {129727, 1}, {129734, 2}, {129742, 1}, {129756, 2}, + {129760, 1}, {129769, 2}, {129776, 1}, {129785, 2}, + {129792, 1}, {129939, 2}, {129940, 1}, {129995, 2}, + {130032, 17035267}, {130033, 16786947}, {130034, 16785155}, {130035, 16785411}, + {130036, 16787715}, {130037, 17035523}, {130038, 17035779}, {130039, 17036035}, + {130040, 17036291}, {130041, 17036547}, {130042, 2}, {131072, 1}, + {173792, 2}, {173824, 1}, {177978, 2}, {177984, 1}, + {178206, 2}, {178208, 1}, {183970, 2}, {183984, 1}, + {191457, 2}, {191472, 1}, {192094, 2}, {194560, 17981699}, + {194561, 17981955}, {194562, 17982211}, {194563, 17982467}, {194564, 17982723}, + {194565, 17608195}, {194566, 17982979}, {194567, 17983235}, {194568, 17983491}, + {194569, 17983747}, {194570, 17608451}, {194571, 17984003}, {194572, 17984259}, + {194573, 17984515}, {194574, 17608707}, {194575, 17984771}, {194576, 17985027}, + {194577, 17985283}, {194578, 17985539}, {194579, 17985795}, {194580, 17986051}, + {194581, 17968899}, {194582, 17986307}, {194583, 17986563}, {194584, 17986819}, + {194585, 17987075}, {194586, 17987331}, {194587, 17622787}, {194588, 17987587}, + {194589, 17145603}, {194590, 17987843}, {194591, 17988099}, {194592, 17988355}, + {194593, 17988611}, {194594, 17973507}, {194595, 17988867}, {194596, 17989123}, + {194597, 17624067}, {194598, 17608963}, {194599, 17609219}, {194600, 17624323}, + {194601, 17989379}, {194602, 17989635}, {194603, 17562627}, {194604, 17989891}, + {194605, 17609475}, {194606, 17990147}, {194607, 17990403}, {194608, 17990659}, + {194609, 17990915}, {194612, 17991171}, {194613, 17991427}, {194614, 17991683}, + {194615, 17991939}, {194616, 17992195}, {194617, 17992451}, {194618, 17992707}, + {194619, 17992963}, {194620, 17993219}, {194621, 17993475}, {194622, 17993731}, + {194623, 17993987}, {194624, 17994243}, {194625, 17994499}, {194626, 17994755}, + {194627, 17995011}, {194628, 17995267}, {194629, 17995523}, {194631, 17624835}, + {194632, 17995779}, {194633, 17996035}, {194634, 17996291}, {194635, 17996547}, + {194636, 17609987}, {194637, 17996803}, {194638, 17997059}, {194639, 17997315}, + {194640, 17599747}, {194641, 17997571}, {194642, 17997827}, {194643, 17998083}, + {194644, 17998339}, {194645, 17998595}, {194646, 17998851}, {194647, 17999107}, + {194648, 17999363}, {194649, 17999619}, {194650, 17999875}, {194651, 18000131}, + {194652, 18000387}, {194653, 17967107}, {194654, 18000643}, {194655, 18000899}, + {194656, 18001155}, {194657, 18001411}, {194658, 18001667}, {194659, 18001923}, + {194660, 18002179}, {194661, 18002435}, {194662, 18002691}, {194663, 18002947}, + {194664, 2}, {194665, 18003203}, {194666, 18003459}, {194668, 18003715}, + {194669, 18003971}, {194670, 18004227}, {194671, 17561603}, {194672, 18004483}, + {194673, 18004739}, {194674, 18004995}, {194675, 18005251}, {194676, 2}, + {194677, 17152259}, {194678, 18005507}, {194679, 18005763}, {194680, 17152771}, + {194681, 18006019}, {194682, 18006275}, {194683, 18006531}, {194684, 18006787}, + {194685, 18007043}, {194686, 18007299}, {194687, 18007555}, {194688, 18007811}, + {194689, 18008067}, {194690, 18008323}, {194691, 18008579}, {194692, 18008835}, + {194693, 18009091}, {194694, 18009347}, {194695, 18009603}, {194696, 18009859}, + {194697, 18010115}, {194698, 18010371}, {194699, 18010627}, {194700, 18010883}, + {194701, 18011139}, {194702, 17548291}, {194703, 18011395}, {194704, 17155331}, + {194705, 18011651}, {194707, 18011907}, {194708, 18012163}, {194710, 18012419}, + {194711, 18012675}, {194712, 18012931}, {194713, 18013187}, {194714, 18013443}, + {194715, 18013699}, {194716, 18013955}, {194717, 18014211}, {194718, 18014467}, + {194719, 18014723}, {194720, 18014979}, {194721, 18015235}, {194722, 18015491}, + {194723, 17611267}, {194724, 18015747}, {194725, 18016003}, {194726, 18016259}, + {194727, 18016515}, {194728, 17627907}, {194729, 18016515}, {194730, 18016771}, + {194731, 17611779}, {194732, 18017027}, {194733, 18017283}, {194734, 18017539}, + {194735, 18017795}, {194736, 17612035}, {194737, 17541379}, {194738, 17414659}, + {194739, 18018051}, {194740, 18018307}, {194741, 18018563}, {194742, 18018819}, + {194743, 18019075}, {194744, 18019331}, {194745, 18019587}, {194746, 18019843}, + {194747, 18020099}, {194748, 18020355}, {194749, 18020611}, {194750, 18020867}, + {194751, 18021123}, {194752, 18021379}, {194753, 18021635}, {194754, 18021891}, + {194755, 18022147}, {194756, 18022403}, {194757, 18022659}, {194758, 18022915}, + {194759, 18023171}, {194760, 17612291}, {194761, 18023427}, {194762, 18023683}, + {194763, 18023939}, {194764, 18024195}, {194765, 18024451}, {194766, 18024707}, + {194767, 17612803}, {194768, 18024963}, {194769, 18025219}, {194770, 18025475}, + {194771, 18025731}, {194772, 18025987}, {194773, 18026243}, {194774, 18026499}, + {194775, 18026755}, {194776, 17548547}, {194777, 17629955}, {194778, 18027011}, + {194779, 18027267}, {194780, 18027523}, {194781, 18027779}, {194782, 18028035}, + {194783, 18028291}, {194784, 18028547}, {194785, 18028803}, {194786, 17613059}, + {194787, 18029059}, {194788, 18029315}, {194789, 18029571}, {194790, 18029827}, + {194791, 17640707}, {194792, 18030083}, {194793, 18030339}, {194794, 18030595}, + {194795, 18030851}, {194796, 18031107}, {194797, 18031363}, {194798, 18031619}, + {194799, 18031875}, {194800, 18032131}, {194801, 18032387}, {194802, 18032643}, + {194803, 18032899}, {194804, 18033155}, {194805, 17565955}, {194806, 18033411}, + {194807, 18033667}, {194808, 18033923}, {194809, 18034179}, {194810, 18034435}, + {194811, 18034691}, {194812, 18034947}, {194813, 18035203}, {194814, 18035459}, + {194815, 18035715}, {194816, 18035971}, {194817, 17613315}, {194818, 17586947}, + {194819, 18036227}, {194820, 18036483}, {194821, 18036739}, {194822, 18036995}, + {194823, 18037251}, {194824, 18037507}, {194825, 18037763}, {194826, 18038019}, + {194827, 17630723}, {194828, 18038275}, {194829, 18038531}, {194830, 18038787}, + {194831, 18039043}, {194832, 18039299}, {194833, 18039555}, {194834, 18039811}, + {194835, 18040067}, {194836, 17630979}, {194837, 18040323}, {194838, 18040579}, + {194839, 18040835}, {194840, 18041091}, {194841, 18041347}, {194842, 18041603}, + {194843, 18041859}, {194844, 18042115}, {194845, 18042371}, {194846, 18042627}, + {194847, 2}, {194848, 18042883}, {194849, 17631491}, {194850, 18043139}, + {194851, 18043395}, {194852, 18043651}, {194853, 18043907}, {194854, 18044163}, + {194855, 18044419}, {194856, 18044675}, {194857, 18044931}, {194858, 18045187}, + {194859, 18045443}, {194860, 18045699}, {194862, 18045955}, {194863, 18046211}, + {194864, 17632003}, {194865, 18046467}, {194866, 18046723}, {194867, 18046979}, + {194868, 18047235}, {194869, 18047491}, {194870, 18047747}, {194871, 18048003}, + {194872, 17562371}, {194873, 18048259}, {194874, 18048515}, {194875, 18048771}, + {194876, 18049027}, {194877, 18049283}, {194878, 18049539}, {194879, 18049795}, + {194880, 17633539}, {194881, 18050051}, {194882, 18050307}, {194883, 18050563}, + {194884, 18050819}, {194885, 18051075}, {194886, 18051331}, {194888, 17633795}, + {194889, 17641219}, {194890, 18051587}, {194891, 18051843}, {194892, 18052099}, + {194893, 18052355}, {194894, 18052611}, {194895, 17552899}, {194896, 17634307}, + {194897, 18052867}, {194898, 18053123}, {194899, 17615875}, {194900, 18053379}, + {194901, 18053635}, {194902, 17604867}, {194903, 18053891}, {194904, 18054147}, + {194905, 17616643}, {194906, 18054403}, {194907, 18054659}, {194908, 18054915}, + {194909, 18055171}, {194911, 2}, {194912, 18055427}, {194913, 18055683}, + {194914, 18055939}, {194915, 18056195}, {194916, 18056451}, {194917, 18056707}, + {194918, 18056963}, {194919, 18057219}, {194920, 18057475}, {194921, 18057731}, + {194922, 18057987}, {194923, 18058243}, {194924, 18058499}, {194925, 18058755}, + {194926, 18059011}, {194927, 18059267}, {194928, 18059523}, {194929, 18059779}, + {194930, 18060035}, {194931, 18060291}, {194932, 18060547}, {194933, 18060803}, + {194934, 18061059}, {194935, 18061315}, {194936, 18061571}, {194937, 18061827}, + {194938, 17618179}, {194939, 18062083}, {194940, 18062339}, {194941, 18062595}, + {194942, 18062851}, {194943, 18063107}, {194944, 18063363}, {194945, 18063619}, + {194946, 18063875}, {194947, 18064131}, {194948, 18064387}, {194949, 18064643}, + {194950, 18064899}, {194951, 18065155}, {194952, 18065411}, {194953, 18065667}, + {194954, 18065923}, {194955, 18011907}, {194956, 18066179}, {194957, 18066435}, + {194958, 18066691}, {194959, 18066947}, {194960, 18067203}, {194961, 18067459}, + {194962, 18067715}, {194963, 18067971}, {194964, 18068227}, {194965, 18068483}, + {194966, 18068739}, {194967, 18068995}, {194968, 17566723}, {194969, 18069251}, + {194970, 18069507}, {194971, 18069763}, {194972, 18070019}, {194973, 18070275}, + {194974, 18070531}, {194975, 17618947}, {194976, 18070787}, {194977, 18071043}, + {194978, 18071299}, {194979, 18071555}, {194980, 18071811}, {194981, 18072067}, + {194982, 18072323}, {194983, 18072579}, {194984, 18072835}, {194985, 18073091}, + {194986, 18073347}, {194987, 18073603}, {194988, 18073859}, {194989, 18074115}, + {194990, 18074371}, {194991, 18074627}, {194992, 18074883}, {194993, 18075139}, + {194994, 18075395}, {194995, 18075651}, {194996, 17551619}, {194997, 18075907}, + {194998, 18076163}, {194999, 18076419}, {195000, 18076675}, {195001, 18076931}, + {195002, 18077187}, {195003, 17636099}, {195004, 18077443}, {195005, 18077699}, + {195006, 18077955}, {195007, 2}, {195008, 18078211}, {195009, 18078467}, + {195010, 18078723}, {195011, 18078979}, {195012, 17178371}, {195013, 18079235}, + {195014, 18079491}, {195015, 18079747}, {195016, 18080003}, {195017, 18080259}, + {195018, 18080515}, {195019, 18080771}, {195020, 18081027}, {195021, 18081283}, + {195022, 18081539}, {195023, 18081795}, {195024, 17637379}, {195025, 17637635}, + {195026, 17180163}, {195027, 18082051}, {195028, 18082307}, {195029, 18082563}, + {195030, 18082819}, {195031, 18083075}, {195032, 18083331}, {195033, 18083587}, + {195034, 18083843}, {195035, 18084099}, {195036, 18084355}, {195037, 18084611}, + {195038, 18084867}, {195039, 17637891}, {195040, 18085123}, {195041, 18085379}, + {195042, 18085635}, {195043, 18085891}, {195044, 18086147}, {195045, 18086403}, + {195046, 18086659}, {195047, 18086915}, {195048, 18087171}, {195049, 18087427}, + {195050, 18087683}, {195051, 18087939}, {195052, 18088195}, {195053, 18088451}, + {195054, 18088707}, {195055, 18088963}, {195056, 18089219}, {195057, 18089475}, + {195058, 18089731}, {195059, 18089987}, {195060, 18090243}, {195061, 18090499}, + {195062, 18090755}, {195063, 18091011}, {195064, 18091267}, {195065, 18091523}, + {195066, 18091779}, {195067, 18092035}, {195068, 18092291}, {195069, 18092547}, + {195070, 17639427}, {195072, 18092803}, {195073, 18093059}, {195074, 18093315}, + {195075, 18093571}, {195076, 18093827}, {195077, 18094083}, {195078, 18094339}, + {195079, 18094595}, {195080, 18094851}, {195081, 18095107}, {195082, 17639683}, + {195083, 18095363}, {195084, 18095619}, {195085, 18095875}, {195086, 18096131}, + {195087, 18096387}, {195088, 18096643}, {195089, 18096899}, {195090, 18097155}, + {195091, 18097411}, {195092, 18097667}, {195093, 17192451}, {195094, 18097923}, + {195095, 17193475}, {195096, 18098179}, {195097, 18098435}, {195098, 18098691}, + {195099, 18098947}, {195100, 17194755}, {195101, 18099203}, {195102, 2}, + {196608, 1}, {201547, 2}, {201552, 1}, {205744, 2}, + {917760, 0}, {918000, 2} +}; + + +} // namespace ada::idna +#endif // ADA_IDNA_TABLES_H +/* end file src/mapping_tables.cpp */ + +namespace ada::idna { + +// This can be greatly accelerated. For now we just use a simply +// binary search. In practice, you should *not* do that. +uint32_t find_range_index(uint32_t key) { + //////////////// + // This could be implemented with std::lower_bound, but we roll our own + // because we want to allow further optimizations in the future. + //////////////// + uint32_t len = std::size(table); + uint32_t low = 0; + uint32_t high = len - 1; + while (low <= high) { + uint32_t middle_index = (low + high) >> 1; // cannot overflow + uint32_t middle_value = table[middle_index][0]; + if (middle_value < key) { + low = middle_index + 1; + } else if (middle_value > key) { + high = middle_index - 1; + } else { + return middle_index; // perfect match + } + } + return low == 0 ? 0 : low - 1; +} + +bool ascii_has_upper_case(char* input, size_t length) { + auto broadcast = [](uint8_t v) -> uint64_t { + return 0x101010101010101ull * v; + }; + uint64_t broadcast_80 = broadcast(0x80); + uint64_t broadcast_Ap = broadcast(128 - 'A'); + uint64_t broadcast_Zp = broadcast(128 - 'Z' - 1); + size_t i = 0; + + uint64_t runner{0}; + + for (; i + 7 < length; i += 8) { + uint64_t word{}; + memcpy(&word, input + i, sizeof(word)); + runner |= (((word + broadcast_Ap) ^ (word + broadcast_Zp)) & broadcast_80); + } + if (i < length) { + uint64_t word{}; + memcpy(&word, input + i, length - i); + runner |= (((word + broadcast_Ap) ^ (word + broadcast_Zp)) & broadcast_80); + } + return runner != 0; +} + +void ascii_map(char* input, size_t length) { + auto broadcast = [](uint8_t v) -> uint64_t { + return 0x101010101010101ull * v; + }; + uint64_t broadcast_80 = broadcast(0x80); + uint64_t broadcast_Ap = broadcast(128 - 'A'); + uint64_t broadcast_Zp = broadcast(128 - 'Z' - 1); + size_t i = 0; + + for (; i + 7 < length; i += 8) { + uint64_t word{}; + memcpy(&word, input + i, sizeof(word)); + word ^= + (((word + broadcast_Ap) ^ (word + broadcast_Zp)) & broadcast_80) >> 2; + memcpy(input + i, &word, sizeof(word)); + } + if (i < length) { + uint64_t word{}; + memcpy(&word, input + i, length - i); + word ^= + (((word + broadcast_Ap) ^ (word + broadcast_Zp)) & broadcast_80) >> 2; + memcpy(input + i, &word, length - i); + } +} + +// Map the characters according to IDNA, returning the empty string on error. +std::u32string map(std::u32string_view input) { + // [Map](https://www.unicode.org/reports/tr46/#ProcessingStepMap). + // For each code point in the domain_name string, look up the status + // value in Section 5, [IDNA Mapping + // Table](https://www.unicode.org/reports/tr46/#IDNA_Mapping_Table), + // and take the following actions: + // * disallowed: Leave the code point unchanged in the string, and + // record that there was an error. + // * ignored: Remove the code point from the string. This is + // equivalent to mapping the code point to an empty string. + // * mapped: Replace the code point in the string by the value for + // the mapping in Section 5, [IDNA Mapping + // Table](https://www.unicode.org/reports/tr46/#IDNA_Mapping_Table). + // * valid: Leave the code point unchanged in the string. + static std::u32string error = U""; + std::u32string answer; + answer.reserve(input.size()); + for (char32_t x : input) { + size_t index = find_range_index(x); + uint32_t descriptor = table[index][1]; + uint8_t code = uint8_t(descriptor); + switch (code) { + case 0: + break; // nothing to do, ignored + case 1: + answer.push_back(x); // valid, we just copy it to output + break; + case 2: + return error; // disallowed + // case 3 : + default: + // We have a mapping + { + size_t char_count = (descriptor >> 24); + uint16_t char_index = uint16_t(descriptor >> 8); + for (size_t idx = char_index; idx < char_index + char_count; idx++) { + answer.push_back(mappings[idx]); + } + } + } + } + return answer; +} +} // namespace ada::idna +/* end file src/mapping.cpp */ +/* begin file src/normalization.cpp */ +/* begin file src/normalization_tables.cpp */ +// IDNA 15.0.0 + +// clang-format off +#ifndef ADA_IDNA_NORMALIZATION_TABLES_H +#define ADA_IDNA_NORMALIZATION_TABLES_H +#include + +/** + * Unicode Standard Annex #15 + * + * UNICODE NORMALIZATION FORMS + * https://www.unicode.org/reports/tr15/ + * + * See https://github.com/uni-algo/uni-algo/blob/c612968c5ed3ace39bde4c894c24286c5f2c7fe2/include/uni_algo/impl/data/data_norm.h for reference. + */ + +namespace ada::idna { + +const uint8_t decomposition_index[4352] = { + 0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 16, 7, 17, 18, 19, 20, 21, 22, 23, 24, 7, + 7, 7, 7, 7, 25, 7, 26, 27, 28, 29, 30, 31, 32, 33, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 34, 35, 7, 7, 7, + 36, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 37, 38, 39, 40, 41, 42, 43, 7, 7, 7, 7, 7, 7, 7, 44, 7, 7, + 7, 7, 7, 7, 7, 7, 45, 46, 7, 47, 48, 49, 7, 7, 7, 50, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 51, 7, 52, 53, 54, 55, 56, 7, 7, 7, + 7, 7, 7, 7, 7, 57, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 58, + 59, 7, 60, 61, 62, 7, 7, 7, 7, 7, 7, 7, 7, 63, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 64, 65, 66, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7}; + +const uint16_t decomposition_block[67][257] = { + {4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 8, 8, 8, 8, + 8, 8, 8, 9, 16, 17, 20, 20, 20, 20, 21, 28, 28, 29, 33, + 37, 45, 48, 48, 49, 57, 61, 64, 65, 77, 89, 100, 100, 108, 116, + 124, 132, 140, 148, 148, 156, 164, 172, 180, 188, 196, 204, 212, 220, 220, + 228, 236, 244, 252, 260, 268, 268, 268, 276, 284, 292, 300, 308, 308, 308, + 316, 324, 332, 340, 348, 356, 356, 364, 372, 380, 388, 396, 404, 412, 420, + 428, 428, 436, 444, 452, 460, 468, 476, 476, 476, 484, 492, 500, 508, 516, + 516, 524}, + {524, 532, 540, 548, 556, 564, 572, 580, 588, 596, 604, 612, + 620, 628, 636, 644, 652, 652, 652, 660, 668, 676, 684, 692, + 700, 708, 716, 724, 732, 740, 748, 756, 764, 772, 780, 788, + 796, 804, 812, 812, 812, 820, 828, 836, 844, 852, 860, 868, + 876, 884, 885, 893, 900, 908, 916, 924, 932, 932, 940, 948, + 956, 964, 972, 981, 989, 996, 996, 996, 1004, 1012, 1020, 1028, + 1036, 1045, 1052, 1052, 1052, 1060, 1068, 1076, 1084, 1092, 1100, 1100, + 1100, 1108, 1116, 1124, 1132, 1140, 1148, 1156, 1164, 1172, 1180, 1188, + 1196, 1204, 1212, 1220, 1228, 1236, 1244, 1244, 1244, 1252, 1260, 1268, + 1276, 1284, 1292, 1300, 1308, 1316, 1324, 1332, 1340, 1348, 1356, 1364, + 1372, 1380, 1388, 1396, 1404, 1412, 1420, 1429, 1432, 1432, 1432, 1432, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, + 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432, + 1432, 1432, 1432, 1432, 1432, 1440, 1448, 1448, 1448, 1448, 1448, 1448, + 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1448, 1456, 1464, 1464, 1464, + 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, 1464, + 1464, 1464, 1464, 1464, 1465, 1477, 1489, 1501, 1509, 1517, 1525, 1533, + 1541, 1548, 1556, 1564, 1572, 1580, 1588, 1596, 1604, 1612, 1624, 1636, + 1648, 1660, 1672, 1684, 1696, 1708, 1708, 1720, 1732, 1744, 1756, 1764, + 1772, 1772, 1772, 1780, 1788, 1796, 1804, 1812, 1820, 1832, 1844, 1852, + 1860, 1869, 1877, 1885, 1892, 1900, 1908, 1908, 1908, 1916, 1924, 1936, + 1948, 1956, 1964, 1972, 1980}, + {1980, 1988, 1996, 2004, 2012, 2020, 2028, 2036, 2044, 2052, 2060, 2068, + 2076, 2084, 2092, 2100, 2108, 2116, 2124, 2132, 2140, 2148, 2156, 2164, + 2172, 2180, 2188, 2196, 2204, 2204, 2204, 2212, 2220, 2220, 2220, 2220, + 2220, 2220, 2220, 2228, 2236, 2244, 2252, 2264, 2276, 2288, 2300, 2308, + 2316, 2328, 2340, 2348, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, + 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2356, 2357, 2361, 2365, 2369, + 2373, 2377, 2381, 2385, 2389, 2392, 2392, 2392, 2392, 2392, 2392, 2392, + 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, + 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, 2392, + 2393, 2401, 2409, 2417, 2425, 2433, 2440, 2440, 2441, 2445, 2449, 2453, + 2457, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, + 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, + 2460, 2460, 2460, 2460, 2460}, + {2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, + 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, + 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, + 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, + 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, 2460, + 2460, 2460, 2460, 2460, 2460, 2464, 2468, 2468, 2472, 2480, 2480, 2480, + 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, + 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, + 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, + 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2480, 2484, 2484, 2484, + 2484, 2484, 2485, 2492, 2492, 2492, 2492, 2496, 2496, 2496, 2496, 2496, + 2497, 2506, 2512, 2520, 2524, 2532, 2540, 2548, 2548, 2556, 2556, 2564, + 2572, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, + 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, 2584, + 2584, 2584, 2584, 2592, 2600, 2608, 2616, 2624, 2632, 2644, 2644, 2644, + 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, + 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2644, 2652, + 2660, 2668, 2676, 2684, 2685, 2689, 2693, 2698, 2706, 2713, 2717, 2720, + 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, + 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, 2720, + 2721, 2725, 2729, 2732, 2733, 2737, 2740, 2740, 2740, 2741, 2744, 2744, + 2744, 2744, 2744, 2744, 2744}, + {2744, 2752, 2760, 2760, 2768, 2768, 2768, 2768, 2776, 2776, 2776, 2776, + 2776, 2784, 2792, 2800, 2800, 2800, 2800, 2800, 2800, 2800, 2800, 2800, + 2800, 2800, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, + 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, + 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2808, 2816, 2816, + 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, + 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2816, 2824, 2832, 2832, + 2840, 2840, 2840, 2840, 2848, 2848, 2848, 2848, 2848, 2856, 2864, 2872, + 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, + 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2872, 2880, + 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, + 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, + 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, + 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, + 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, + 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, 2888, + 2888, 2888, 2896, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, 2904, + 2904, 2904, 2904, 2904, 2904, 2912, 2920, 2928, 2936, 2936, 2936, 2944, + 2952, 2952, 2952, 2960, 2968, 2976, 2984, 2992, 3000, 3000, 3000, 3008, + 3016, 3024, 3032, 3040, 3048, 3048, 3048, 3056, 3064, 3072, 3080, 3088, + 3096, 3104, 3112, 3120, 3128, 3136, 3144, 3144, 3144, 3152, 3160, 3160, + 3160, 3160, 3160, 3160, 3160}, + {3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, 3160, + 3160, 3160, 3160, 3161, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168}, + {3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, + 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3168, 3176, + 3184, 3192, 3200, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, + 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3208, 3209, 3217, 3225, + 3233, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, + 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, + 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, + 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, + 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, + 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, 3240, + 3240, 3248, 3248, 3256, 3256, 3256, 3256, 3256, 3256, 3256, 3256, 3256, + 3256, 3256, 3256, 3256, 3256, 3256, 3256, 3256, 3264, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3272, 3272, 3272, 3272, 3272, 3272, + 3272, 3272, 3280, 3280, 3280, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, 3288, + 3288, 3288, 3288, 3288, 3288, 3296, 3304, 3312, 3320, 3328, 3336, 3344, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, + 3360, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, 3368, + 3368, 3368, 3368, 3368, 3368, 3376, 3384, 3384, 3392, 3392, 3392, 3392, + 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, + 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, + 3392, 3392, 3392, 3392, 3392}, + {3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, + 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, + 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, + 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, 3392, + 3392, 3392, 3392, 3392, 3400, 3400, 3400, 3408, 3408, 3408, 3408, 3408, + 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, + 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, 3408, + 3408, 3408, 3408, 3408, 3408, 3408, 3416, 3424, 3432, 3432, 3432, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440}, + {3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, 3440, + 3440, 3448, 3448, 3448, 3456, 3464, 3464, 3464, 3464, 3464, 3464, 3464, + 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3472, 3480, 3480, + 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, + 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, + 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, + 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, 3480, + 3480, 3480, 3480, 3480, 3480, 3488, 3488, 3488, 3488, 3488, 3488, 3488, + 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, + 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, + 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, + 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3488, 3496, + 3504, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512}, + {3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, + 3512, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, 3520, + 3520, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3536, 3544, 3544, 3552, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564}, + {3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3564, 3572, 3580, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, + 3588, 3588, 3588, 3596, 3596, 3604, 3616, 3624, 3624, 3624, 3624, 3624, + 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, + 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, + 3624, 3624, 3624, 3624, 3624}, + {3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, + 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, + 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, + 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, 3624, + 3624, 3624, 3624, 3625, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, + 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3632, 3633, + 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, + 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, + 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, 3640, + 3640, 3640, 3640, 3640, 3641, 3649, 3656, 3656, 3656, 3656, 3656, 3656, + 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, + 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, + 3656, 3656, 3656, 3656, 3656}, + {3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, 3656, + 3657, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, + 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3660, 3668, 3668, 3668, 3668, + 3668, 3668, 3668, 3668, 3668, 3668, 3676, 3676, 3676, 3676, 3676, 3684, + 3684, 3684, 3684, 3684, 3692, 3692, 3692, 3692, 3692, 3700, 3700, 3700, + 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3700, 3708, 3708, + 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3716, 3716, 3724, 3733, + 3744, 3753, 3764, 3764, 3764, 3764, 3764, 3764, 3764, 3764, 3772, 3772, + 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, + 3772, 3772, 3772, 3772, 3780, 3780, 3780, 3780, 3780, 3780, 3780, 3780, + 3780, 3780, 3788, 3788, 3788, 3788, 3788, 3796, 3796, 3796, 3796, 3796, + 3804, 3804, 3804, 3804, 3804, 3812, 3812, 3812, 3812, 3812, 3812, 3812, + 3812, 3812, 3812, 3812, 3812, 3812, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3820, 3820}, + {3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, 3820, + 3820, 3820, 3820, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, 3828, + 3829, 3832, 3832, 3832, 3832}, + {3832, 3832, 3832, 3832, 3832, 3832, 3832, 3840, 3840, 3848, 3848, 3856, + 3856, 3864, 3864, 3872, 3872, 3872, 3872, 3880, 3880, 3880, 3880, 3880, + 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, + 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, + 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, 3880, + 3888, 3888, 3896, 3896, 3896, 3904, 3912, 3912, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920}, + {3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3921, 3925, 3929, 3932, + 3933, 3937, 3941, 3945, 3949, 3953, 3957, 3961, 3965, 3969, 3973, 3976, + 3977, 3981, 3985, 3989, 3993, 3997, 4001, 4005, 4009, 4013, 4017, 4021, + 4025, 4029, 4033, 4037, 4041, 4045, 4048, 4049, 4053, 4057, 4061, 4065, + 4069, 4073, 4077, 4081, 4085, 4089, 4093, 4097, 4101, 4105, 4109, 4113, + 4117, 4121, 4125, 4129, 4133, 4137, 4141, 4145, 4149, 4153, 4157, 4160, + 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, 4160, + 4161, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, + 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, + 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4164, 4165, + 4169, 4173, 4177, 4181, 4185, 4189, 4193, 4197, 4201, 4205, 4209, 4213, + 4217, 4221, 4225, 4229, 4233, 4237, 4241, 4245, 4249, 4253, 4257, 4261, + 4265, 4269, 4273, 4277, 4281, 4285, 4289, 4293, 4297, 4301, 4305, 4309, + 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, + 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, + 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, + 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, + 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, 4312, + 4312, 4312, 4312, 4312, 4312}, + {4312, 4320, 4328, 4336, 4344, 4352, 4360, 4368, 4376, 4388, 4400, 4408, + 4416, 4424, 4432, 4440, 4448, 4456, 4464, 4472, 4480, 4492, 4504, 4516, + 4528, 4536, 4544, 4552, 4560, 4572, 4584, 4592, 4600, 4608, 4616, 4624, + 4632, 4640, 4648, 4656, 4664, 4672, 4680, 4688, 4696, 4704, 4712, 4724, + 4736, 4744, 4752, 4760, 4768, 4776, 4784, 4792, 4800, 4812, 4824, 4832, + 4840, 4848, 4856, 4864, 4872, 4880, 4888, 4896, 4904, 4912, 4920, 4928, + 4936, 4944, 4952, 4960, 4968, 4980, 4992, 5004, 5016, 5028, 5040, 5052, + 5064, 5072, 5080, 5088, 5096, 5104, 5112, 5120, 5128, 5140, 5152, 5160, + 5168, 5176, 5184, 5192, 5200, 5212, 5224, 5236, 5248, 5260, 5272, 5280, + 5288, 5296, 5304, 5312, 5320, 5328, 5336, 5344, 5352, 5360, 5368, 5376, + 5384, 5396, 5408, 5420, 5432, 5440, 5448, 5456, 5464, 5472, 5480, 5488, + 5496, 5504, 5512, 5520, 5528, 5536, 5544, 5552, 5560, 5568, 5576, 5584, + 5592, 5600, 5608, 5616, 5624, 5632, 5640, 5648, 5656, 5664, 5673, 5682, + 5688, 5688, 5688, 5688, 5688, 5696, 5704, 5712, 5720, 5732, 5744, 5756, + 5768, 5780, 5792, 5804, 5816, 5828, 5840, 5852, 5864, 5876, 5888, 5900, + 5912, 5924, 5936, 5948, 5960, 5968, 5976, 5984, 5992, 6000, 6008, 6020, + 6032, 6044, 6056, 6068, 6080, 6092, 6104, 6116, 6128, 6136, 6144, 6152, + 6160, 6168, 6176, 6184, 6192, 6204, 6216, 6228, 6240, 6252, 6264, 6276, + 6288, 6300, 6312, 6324, 6336, 6348, 6360, 6372, 6384, 6396, 6408, 6420, + 6432, 6440, 6448, 6456, 6464, 6476, 6488, 6500, 6512, 6524, 6536, 6548, + 6560, 6572, 6584, 6592, 6600, 6608, 6616, 6624, 6632, 6640, 6648, 6648, + 6648, 6648, 6648, 6648, 6648}, + {6648, 6656, 6664, 6676, 6688, 6700, 6712, 6724, 6736, 6744, 6752, 6764, + 6776, 6788, 6800, 6812, 6824, 6832, 6840, 6852, 6864, 6876, 6888, 6888, + 6888, 6896, 6904, 6916, 6928, 6940, 6952, 6952, 6952, 6960, 6968, 6980, + 6992, 7004, 7016, 7028, 7040, 7048, 7056, 7068, 7080, 7092, 7104, 7116, + 7128, 7136, 7144, 7156, 7168, 7180, 7192, 7204, 7216, 7224, 7232, 7244, + 7256, 7268, 7280, 7292, 7304, 7312, 7320, 7332, 7344, 7356, 7368, 7368, + 7368, 7376, 7384, 7396, 7408, 7420, 7432, 7432, 7432, 7440, 7448, 7460, + 7472, 7484, 7496, 7508, 7520, 7520, 7528, 7528, 7540, 7540, 7552, 7552, + 7564, 7572, 7580, 7592, 7604, 7616, 7628, 7640, 7652, 7660, 7668, 7680, + 7692, 7704, 7716, 7728, 7740, 7748, 7756, 7764, 7772, 7780, 7788, 7796, + 7804, 7812, 7820, 7828, 7836, 7844, 7852, 7852, 7852, 7864, 7876, 7892, + 7908, 7924, 7940, 7956, 7972, 7984, 7996, 8012, 8028, 8044, 8060, 8076, + 8092, 8104, 8116, 8132, 8148, 8164, 8180, 8196, 8212, 8224, 8236, 8252, + 8268, 8284, 8300, 8316, 8332, 8344, 8356, 8372, 8388, 8404, 8420, 8436, + 8452, 8464, 8476, 8492, 8508, 8524, 8540, 8556, 8572, 8580, 8588, 8600, + 8608, 8620, 8620, 8628, 8640, 8648, 8656, 8664, 8672, 8681, 8688, 8693, + 8701, 8710, 8716, 8728, 8736, 8748, 8748, 8756, 8768, 8776, 8784, 8792, + 8800, 8810, 8818, 8826, 8832, 8840, 8848, 8860, 8872, 8872, 8872, 8880, + 8892, 8900, 8908, 8916, 8924, 8926, 8934, 8942, 8948, 8956, 8964, 8976, + 8988, 8996, 9004, 9012, 9024, 9032, 9040, 9048, 9056, 9066, 9074, 9080, + 9084, 9084, 9084, 9096, 9104, 9116, 9116, 9124, 9136, 9144, 9152, 9160, + 9168, 9178, 9181, 9188, 9190}, + {9190, 9194, 9197, 9201, 9205, 9209, 9213, 9217, 9221, 9225, 9229, 9232, + 9232, 9232, 9232, 9232, 9232, 9233, 9236, 9236, 9236, 9236, 9236, 9237, + 9244, 9244, 9244, 9244, 9244, 9244, 9244, 9244, 9244, 9244, 9244, 9244, + 9245, 9249, 9257, 9268, 9268, 9268, 9268, 9268, 9268, 9268, 9268, 9269, + 9272, 9272, 9272, 9273, 9281, 9292, 9293, 9301, 9312, 9312, 9312, 9312, + 9313, 9320, 9321, 9328, 9328, 9328, 9328, 9328, 9328, 9328, 9328, 9329, + 9337, 9345, 9352, 9352, 9352, 9352, 9352, 9352, 9352, 9352, 9352, 9352, + 9352, 9352, 9352, 9353, 9368, 9368, 9368, 9368, 9368, 9368, 9368, 9369, + 9372, 9372, 9372, 9372, 9372, 9372, 9372, 9372, 9372, 9372, 9372, 9372, + 9372, 9372, 9372, 9372, 9373, 9377, 9380, 9380, 9381, 9385, 9389, 9393, + 9397, 9401, 9405, 9409, 9413, 9417, 9421, 9425, 9429, 9433, 9437, 9441, + 9445, 9449, 9453, 9457, 9461, 9465, 9469, 9473, 9477, 9481, 9485, 9488, + 9489, 9493, 9497, 9501, 9505, 9509, 9513, 9517, 9521, 9525, 9529, 9533, + 9537, 9540, 9540, 9540, 9540, 9540, 9540, 9540, 9540, 9540, 9540, 9540, + 9541, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, + 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, + 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, + 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, + 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, + 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, + 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, 9548, + 9548, 9548, 9548, 9548, 9549}, + {9549, 9561, 9573, 9577, 9584, 9585, 9597, 9609, 9612, 9613, + 9621, 9625, 9629, 9633, 9637, 9641, 9645, 9649, 9653, 9657, + 9660, 9661, 9665, 9672, 9672, 9673, 9677, 9681, 9685, 9689, + 9692, 9692, 9693, 9701, 9713, 9720, 9721, 9724, 9724, 9728, + 9729, 9732, 9732, 9736, 9745, 9749, 9752, 9753, 9757, 9761, + 9764, 9765, 9769, 9773, 9777, 9781, 9785, 9789, 9792, 9793, + 9805, 9809, 9813, 9817, 9821, 9824, 9824, 9824, 9824, 9825, + 9829, 9833, 9837, 9841, 9844, 9844, 9844, 9844, 9844, 9844, + 9845, 9857, 9869, 9885, 9897, 9909, 9921, 9933, 9945, 9957, + 9969, 9981, 9993, 10005, 10017, 10029, 10037, 10041, 10049, 10061, + 10069, 10073, 10081, 10093, 10109, 10117, 10121, 10129, 10141, 10145, + 10149, 10153, 10157, 10161, 10169, 10181, 10189, 10193, 10201, 10213, + 10229, 10237, 10241, 10249, 10261, 10265, 10269, 10273, 10276, 10276, + 10276, 10276, 10276, 10276, 10276, 10276, 10276, 10277, 10288, 10288, + 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, 10288, + 10288, 10288, 10288, 10288, 10288, 10296, 10304, 10304, 10304, 10304, + 10304, 10304, 10304, 10304, 10304, 10304, 10304, 10304, 10304, 10304, + 10304, 10304, 10304, 10304, 10304, 10312, 10312, 10312, 10312, 10312, + 10312, 10312, 10312, 10312, 10312, 10312, 10312, 10312, 10312, 10312, + 10312, 10312, 10312, 10312, 10312, 10312, 10312, 10312, 10312, 10312, + 10312, 10312, 10312, 10312, 10312, 10312, 10320, 10328, 10336, 10336, + 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, + 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, + 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, + 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, 10336, + 10336, 10336, 10336, 10336, 10336, 10336, 10336}, + {10336, 10336, 10336, 10336, 10336, 10344, 10344, 10344, 10344, 10344, + 10352, 10352, 10352, 10360, 10360, 10360, 10360, 10360, 10360, 10360, + 10360, 10360, 10360, 10360, 10360, 10360, 10360, 10360, 10360, 10360, + 10360, 10360, 10360, 10360, 10360, 10360, 10360, 10368, 10368, 10376, + 10376, 10376, 10376, 10376, 10377, 10385, 10396, 10397, 10405, 10416, + 10416, 10416, 10416, 10416, 10416, 10416, 10416, 10416, 10416, 10416, + 10416, 10416, 10416, 10416, 10416, 10416, 10424, 10424, 10424, 10432, + 10432, 10432, 10440, 10440, 10448, 10448, 10448, 10448, 10448, 10448, + 10448, 10448, 10448, 10448, 10448, 10448, 10448, 10448, 10448, 10448, + 10448, 10448, 10448, 10448, 10448, 10448, 10448, 10456, 10456, 10464, + 10464, 10464, 10464, 10464, 10464, 10464, 10464, 10464, 10464, 10464, + 10472, 10480, 10488, 10496, 10504, 10504, 10504, 10512, 10520, 10520, + 10520, 10528, 10536, 10536, 10536, 10536, 10536, 10536, 10536, 10544, + 10552, 10552, 10552, 10560, 10568, 10568, 10568, 10576, 10584, 10584, + 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, + 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, + 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, 10584, + 10584, 10584, 10584, 10592, 10600, 10608, 10616, 10616, 10616, 10616, + 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, + 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, + 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, + 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, 10616, + 10616, 10616, 10616, 10616, 10616, 10624, 10632, 10640, 10648, 10648, + 10648, 10648, 10648, 10648, 10648, 10656, 10664, 10672, 10680, 10680, + 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, + 10680, 10680, 10680, 10680, 10680, 10680, 10680}, + {10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, + 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, + 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, + 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, 10680, + 10680, 10680, 10684, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688}, + {10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, 10688, + 10688, 10688, 10688, 10688, 10688, 10688, 10689, 10693, 10697, 10701, + 10705, 10709, 10713, 10717, 10721, 10725, 10733, 10741, 10749, 10757, + 10765, 10773, 10781, 10789, 10797, 10805, 10813, 10825, 10837, 10849, + 10861, 10873, 10885, 10897, 10909, 10921, 10937, 10953, 10969, 10985, + 11001, 11017, 11033, 11049, 11065, 11081, 11097, 11105, 11113, 11121, + 11129, 11137, 11145, 11153, 11161, 11169, 11181, 11193, 11205, 11217, + 11229, 11241, 11253, 11265, 11277, 11289, 11301, 11313, 11325, 11337, + 11349, 11361, 11373, 11385, 11397, 11409, 11421, 11433, 11445, 11457, + 11469, 11481, 11493, 11505, 11517, 11529, 11541, 11553, 11565, 11577, + 11589, 11601, 11613, 11617, 11621, 11625, 11629, 11633, 11637, 11641, + 11645, 11649, 11653, 11657, 11661, 11665, 11669, 11673, 11677, 11681, + 11685, 11689, 11693, 11697, 11701, 11705, 11709, 11713, 11717, 11721, + 11725, 11729, 11733, 11737, 11741, 11745, 11749, 11753, 11757, 11761, + 11765, 11769, 11773, 11777, 11781, 11785, 11789, 11793, 11797, 11801, + 11805, 11809, 11813, 11817, 11821, 11824, 11824, 11824, 11824, 11824, + 11824, 11824, 11824, 11824, 11824, 11824, 11824, 11824, 11824, 11824, + 11824, 11824, 11824, 11824, 11824, 11824, 11824}, + {11824, 11824, 11824, 11824, 11824, 11824, 11824, 11824, 11824, 11824, + 11824, 11824, 11825, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, 11840, + 11840, 11840, 11840, 11840, 11840, 11840, 11841, 11853, 11861, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, 11872, + 11872, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880}, + {11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, 11880, + 11880, 11880, 11880, 11880, 11881, 11885, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888}, + {11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, 11888, + 11888, 11889, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892}, + {11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, + 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11892, 11893, + 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, + 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, + 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, + 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, + 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, + 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, + 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, + 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, 11896, + 11896, 11896, 11896, 11897, 11900, 11900, 11900, 11900, 11900, 11900, + 11900, 11900, 11900, 11900, 11900, 11900, 11901}, + {11901, 11905, 11909, 11913, 11917, 11921, 11925, 11929, 11933, 11937, + 11941, 11945, 11949, 11953, 11957, 11961, 11965, 11969, 11973, 11977, + 11981, 11985, 11989, 11993, 11997, 12001, 12005, 12009, 12013, 12017, + 12021, 12025, 12029, 12033, 12037, 12041, 12045, 12049, 12053, 12057, + 12061, 12065, 12069, 12073, 12077, 12081, 12085, 12089, 12093, 12097, + 12101, 12105, 12109, 12113, 12117, 12121, 12125, 12129, 12133, 12137, + 12141, 12145, 12149, 12153, 12157, 12161, 12165, 12169, 12173, 12177, + 12181, 12185, 12189, 12193, 12197, 12201, 12205, 12209, 12213, 12217, + 12221, 12225, 12229, 12233, 12237, 12241, 12245, 12249, 12253, 12257, + 12261, 12265, 12269, 12273, 12277, 12281, 12285, 12289, 12293, 12297, + 12301, 12305, 12309, 12313, 12317, 12321, 12325, 12329, 12333, 12337, + 12341, 12345, 12349, 12353, 12357, 12361, 12365, 12369, 12373, 12377, + 12381, 12385, 12389, 12393, 12397, 12401, 12405, 12409, 12413, 12417, + 12421, 12425, 12429, 12433, 12437, 12441, 12445, 12449, 12453, 12457, + 12461, 12465, 12469, 12473, 12477, 12481, 12485, 12489, 12493, 12497, + 12501, 12505, 12509, 12513, 12517, 12521, 12525, 12529, 12533, 12537, + 12541, 12545, 12549, 12553, 12557, 12561, 12565, 12569, 12573, 12577, + 12581, 12585, 12589, 12593, 12597, 12601, 12605, 12609, 12613, 12617, + 12621, 12625, 12629, 12633, 12637, 12641, 12645, 12649, 12653, 12657, + 12661, 12665, 12669, 12673, 12677, 12681, 12685, 12689, 12693, 12697, + 12701, 12705, 12709, 12713, 12717, 12721, 12725, 12729, 12733, 12737, + 12741, 12745, 12749, 12753, 12756, 12756, 12756, 12756, 12756, 12756, + 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, + 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, + 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, 12756, + 12756, 12756, 12756, 12756, 12756, 12756, 12757}, + {12757, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, + 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, + 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, + 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, + 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, 12760, + 12760, 12760, 12760, 12760, 12761, 12764, 12765, 12769, 12773, 12776, + 12776, 12776, 12776, 12776, 12776, 12776, 12776, 12776, 12776, 12776, + 12776, 12776, 12776, 12776, 12776, 12776, 12776, 12784, 12784, 12792, + 12792, 12800, 12800, 12808, 12808, 12816, 12816, 12824, 12824, 12832, + 12832, 12840, 12840, 12848, 12848, 12856, 12856, 12864, 12864, 12872, + 12872, 12872, 12880, 12880, 12888, 12888, 12896, 12896, 12896, 12896, + 12896, 12896, 12896, 12904, 12912, 12912, 12920, 12928, 12928, 12936, + 12944, 12944, 12952, 12960, 12960, 12968, 12976, 12976, 12976, 12976, + 12976, 12976, 12976, 12976, 12976, 12976, 12976, 12976, 12976, 12976, + 12976, 12976, 12976, 12976, 12976, 12976, 12976, 12976, 12976, 12984, + 12984, 12984, 12984, 12984, 12984, 12985, 12993, 13000, 13000, 13009, + 13016, 13016, 13016, 13016, 13016, 13016, 13016, 13016, 13016, 13016, + 13016, 13016, 13016, 13024, 13024, 13032, 13032, 13040, 13040, 13048, + 13048, 13056, 13056, 13064, 13064, 13072, 13072, 13080, 13080, 13088, + 13088, 13096, 13096, 13104, 13104, 13112, 13112, 13112, 13120, 13120, + 13128, 13128, 13136, 13136, 13136, 13136, 13136, 13136, 13136, 13144, + 13152, 13152, 13160, 13168, 13168, 13176, 13184, 13184, 13192, 13200, + 13200, 13208, 13216, 13216, 13216, 13216, 13216, 13216, 13216, 13216, + 13216, 13216, 13216, 13216, 13216, 13216, 13216, 13216, 13216, 13216, + 13216, 13216, 13216, 13216, 13216, 13224, 13224, 13224, 13232, 13240, + 13248, 13256, 13256, 13256, 13256, 13265, 13272}, + {13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, + 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, + 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, + 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, + 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13272, 13273, + 13277, 13281, 13285, 13289, 13293, 13297, 13301, 13305, 13309, 13313, + 13317, 13321, 13325, 13329, 13333, 13337, 13341, 13345, 13349, 13353, + 13357, 13361, 13365, 13369, 13373, 13377, 13381, 13385, 13389, 13393, + 13397, 13401, 13405, 13409, 13413, 13417, 13421, 13425, 13429, 13433, + 13437, 13441, 13445, 13449, 13453, 13457, 13461, 13465, 13469, 13473, + 13477, 13481, 13485, 13489, 13493, 13497, 13501, 13505, 13509, 13513, + 13517, 13521, 13525, 13529, 13533, 13537, 13541, 13545, 13549, 13553, + 13557, 13561, 13565, 13569, 13573, 13577, 13581, 13585, 13589, 13593, + 13597, 13601, 13605, 13609, 13613, 13617, 13621, 13625, 13629, 13633, + 13637, 13641, 13645, 13648, 13648, 13648, 13649, 13653, 13657, 13661, + 13665, 13669, 13673, 13677, 13681, 13685, 13689, 13693, 13697, 13701, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, 13704, + 13704, 13704, 13704, 13704, 13704, 13704, 13705}, + {13705, 13717, 13729, 13741, 13753, 13765, 13777, 13789, 13801, 13813, + 13825, 13837, 13849, 13861, 13873, 13889, 13905, 13921, 13937, 13953, + 13969, 13985, 14001, 14017, 14033, 14049, 14065, 14081, 14097, 14113, + 14141, 14164, 14165, 14177, 14189, 14201, 14213, 14225, 14237, 14249, + 14261, 14273, 14285, 14297, 14309, 14321, 14333, 14345, 14357, 14369, + 14381, 14393, 14405, 14417, 14429, 14441, 14453, 14465, 14477, 14489, + 14501, 14513, 14525, 14537, 14549, 14561, 14573, 14585, 14597, 14601, + 14605, 14609, 14612, 14612, 14612, 14612, 14612, 14612, 14612, 14612, + 14613, 14625, 14633, 14641, 14649, 14657, 14665, 14673, 14681, 14689, + 14697, 14705, 14713, 14721, 14729, 14737, 14745, 14749, 14753, 14757, + 14761, 14765, 14769, 14773, 14777, 14781, 14785, 14789, 14793, 14797, + 14801, 14809, 14817, 14825, 14833, 14841, 14849, 14857, 14865, 14873, + 14881, 14889, 14897, 14905, 14913, 14933, 14949, 14956, 14957, 14961, + 14965, 14969, 14973, 14977, 14981, 14985, 14989, 14993, 14997, 15001, + 15005, 15009, 15013, 15017, 15021, 15025, 15029, 15033, 15037, 15041, + 15045, 15049, 15053, 15057, 15061, 15065, 15069, 15073, 15077, 15081, + 15085, 15089, 15093, 15097, 15101, 15105, 15109, 15113, 15117, 15121, + 15125, 15129, 15133, 15137, 15141, 15145, 15149, 15153, 15161, 15169, + 15177, 15185, 15193, 15201, 15209, 15217, 15225, 15233, 15241, 15249, + 15257, 15265, 15273, 15281, 15289, 15297, 15305, 15313, 15321, 15329, + 15337, 15345, 15357, 15369, 15381, 15389, 15401, 15409, 15421, 15425, + 15429, 15433, 15437, 15441, 15445, 15449, 15453, 15457, 15461, 15465, + 15469, 15473, 15477, 15481, 15485, 15489, 15493, 15497, 15501, 15505, + 15509, 15513, 15517, 15521, 15525, 15529, 15533, 15537, 15541, 15545, + 15549, 15553, 15557, 15561, 15565, 15569, 15573, 15577, 15581, 15585, + 15589, 15593, 15597, 15601, 15605, 15609, 15617}, + {15617, 15637, 15653, 15673, 15685, 15705, 15717, 15729, 15753, 15769, + 15781, 15793, 15805, 15821, 15837, 15853, 15869, 15885, 15901, 15917, + 15941, 15949, 15973, 15997, 16017, 16033, 16057, 16081, 16097, 16109, + 16121, 16137, 16153, 16173, 16193, 16205, 16217, 16233, 16245, 16257, + 16265, 16273, 16285, 16297, 16321, 16337, 16357, 16381, 16397, 16409, + 16421, 16445, 16461, 16485, 16497, 16517, 16529, 16545, 16557, 16573, + 16593, 16609, 16629, 16645, 16653, 16673, 16685, 16697, 16713, 16725, + 16737, 16749, 16769, 16785, 16793, 16817, 16829, 16849, 16865, 16881, + 16893, 16905, 16921, 16929, 16945, 16965, 16973, 16997, 17009, 17017, + 17025, 17033, 17041, 17049, 17057, 17065, 17073, 17081, 17089, 17101, + 17113, 17125, 17137, 17149, 17161, 17173, 17185, 17197, 17209, 17221, + 17233, 17245, 17257, 17269, 17281, 17289, 17297, 17309, 17317, 17325, + 17333, 17345, 17357, 17365, 17373, 17381, 17389, 17397, 17413, 17421, + 17429, 17437, 17445, 17453, 17461, 17469, 17477, 17489, 17505, 17513, + 17521, 17529, 17537, 17545, 17553, 17561, 17573, 17585, 17597, 17609, + 17617, 17625, 17633, 17641, 17649, 17657, 17665, 17673, 17681, 17689, + 17701, 17713, 17721, 17733, 17745, 17757, 17765, 17777, 17789, 17805, + 17813, 17825, 17837, 17849, 17861, 17881, 17905, 17913, 17921, 17929, + 17937, 17945, 17953, 17961, 17969, 17977, 17985, 17993, 18001, 18009, + 18017, 18025, 18033, 18041, 18049, 18065, 18073, 18081, 18089, 18105, + 18117, 18125, 18133, 18141, 18149, 18157, 18165, 18173, 18181, 18189, + 18197, 18209, 18217, 18225, 18237, 18249, 18257, 18273, 18285, 18293, + 18301, 18309, 18317, 18329, 18341, 18349, 18357, 18365, 18373, 18381, + 18389, 18397, 18405, 18413, 18425, 18437, 18449, 18461, 18473, 18485, + 18497, 18509, 18521, 18533, 18545, 18557, 18569, 18581, 18593, 18605, + 18617, 18629, 18641, 18653, 18665, 18677, 18688}, + {18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, 18688, + 18688, 18688, 18688, 18688, 18688, 18688, 18689, 18693, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696}, + {18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, 18696, + 18696, 18696, 18697, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, 18700, + 18700, 18700, 18701, 18705, 18709, 18712, 18712, 18712, 18713, 18717, + 18720, 18720, 18720, 18720, 18720, 18720, 18720}, + {18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, 18720, + 18720, 18720, 18721, 18725, 18729, 18733, 18736, 18736, 18736, 18736, + 18736, 18736, 18736, 18736, 18736, 18737, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, 18740, + 18740, 18740, 18740, 18740, 18740, 18740, 18740}, + {18740, 18744, 18748, 18752, 18756, 18760, 18764, 18768, 18772, 18776, + 18780, 18784, 18788, 18792, 18796, 18800, 18804, 18808, 18812, 18816, + 18820, 18824, 18828, 18832, 18836, 18840, 18844, 18848, 18852, 18856, + 18860, 18864, 18868, 18872, 18876, 18880, 18884, 18888, 18892, 18896, + 18900, 18904, 18908, 18912, 18916, 18920, 18924, 18928, 18932, 18936, + 18940, 18944, 18948, 18952, 18956, 18960, 18964, 18968, 18972, 18976, + 18980, 18984, 18988, 18992, 18996, 19000, 19004, 19008, 19012, 19016, + 19020, 19024, 19028, 19032, 19036, 19040, 19044, 19048, 19052, 19056, + 19060, 19064, 19068, 19072, 19076, 19080, 19084, 19088, 19092, 19096, + 19100, 19104, 19108, 19112, 19116, 19120, 19124, 19128, 19132, 19136, + 19140, 19144, 19148, 19152, 19156, 19160, 19164, 19168, 19172, 19176, + 19180, 19184, 19188, 19192, 19196, 19200, 19204, 19208, 19212, 19216, + 19220, 19224, 19228, 19232, 19236, 19240, 19244, 19248, 19252, 19256, + 19260, 19264, 19268, 19272, 19276, 19280, 19284, 19288, 19292, 19296, + 19300, 19304, 19308, 19312, 19316, 19320, 19324, 19328, 19332, 19336, + 19340, 19344, 19348, 19352, 19356, 19360, 19364, 19368, 19372, 19376, + 19380, 19384, 19388, 19392, 19396, 19400, 19404, 19408, 19412, 19416, + 19420, 19424, 19428, 19432, 19436, 19440, 19444, 19448, 19452, 19456, + 19460, 19464, 19468, 19472, 19476, 19480, 19484, 19488, 19492, 19496, + 19500, 19504, 19508, 19512, 19516, 19520, 19524, 19528, 19532, 19536, + 19540, 19544, 19548, 19552, 19556, 19560, 19564, 19568, 19572, 19576, + 19580, 19584, 19588, 19592, 19596, 19600, 19604, 19608, 19612, 19616, + 19620, 19624, 19628, 19632, 19636, 19640, 19644, 19648, 19652, 19656, + 19660, 19664, 19668, 19672, 19676, 19680, 19684, 19688, 19692, 19696, + 19700, 19704, 19708, 19712, 19716, 19720, 19724, 19728, 19732, 19736, + 19740, 19744, 19748, 19752, 19756, 19760, 19764}, + {19764, 19768, 19772, 19776, 19780, 19784, 19788, 19792, 19796, 19800, + 19804, 19808, 19812, 19816, 19820, 19820, 19820, 19824, 19824, 19828, + 19828, 19828, 19832, 19836, 19840, 19844, 19848, 19852, 19856, 19860, + 19864, 19868, 19868, 19872, 19872, 19876, 19876, 19876, 19880, 19884, + 19884, 19884, 19884, 19888, 19892, 19896, 19900, 19904, 19908, 19912, + 19916, 19920, 19924, 19928, 19932, 19936, 19940, 19944, 19948, 19952, + 19956, 19960, 19964, 19968, 19972, 19976, 19980, 19984, 19988, 19992, + 19996, 20000, 20004, 20008, 20012, 20016, 20020, 20024, 20028, 20032, + 20036, 20040, 20044, 20048, 20052, 20056, 20060, 20064, 20068, 20072, + 20076, 20080, 20084, 20088, 20092, 20096, 20100, 20104, 20108, 20112, + 20116, 20120, 20124, 20128, 20132, 20136, 20140, 20144, 20148, 20152, + 20156, 20156, 20156, 20160, 20164, 20168, 20172, 20176, 20180, 20184, + 20188, 20192, 20196, 20200, 20204, 20208, 20212, 20216, 20220, 20224, + 20228, 20232, 20236, 20240, 20244, 20248, 20252, 20256, 20260, 20264, + 20268, 20272, 20276, 20280, 20284, 20288, 20292, 20296, 20300, 20304, + 20308, 20312, 20316, 20320, 20324, 20328, 20332, 20336, 20340, 20344, + 20348, 20352, 20356, 20360, 20364, 20368, 20372, 20376, 20380, 20384, + 20388, 20392, 20396, 20400, 20404, 20408, 20412, 20416, 20420, 20424, + 20428, 20432, 20436, 20440, 20444, 20448, 20452, 20456, 20460, 20464, + 20468, 20472, 20476, 20480, 20484, 20488, 20492, 20496, 20500, 20504, + 20508, 20512, 20516, 20520, 20524, 20528, 20532, 20536, 20540, 20544, + 20548, 20552, 20556, 20560, 20564, 20568, 20572, 20576, 20580, 20580, + 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, + 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, + 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, 20580, + 20580, 20580, 20580, 20580, 20580, 20580, 20581}, + {20581, 20589, 20597, 20605, 20617, 20629, 20637, 20644, 20644, 20644, + 20644, 20644, 20644, 20644, 20644, 20644, 20644, 20644, 20644, 20645, + 20653, 20661, 20669, 20677, 20684, 20684, 20684, 20684, 20684, 20684, + 20692, 20692, 20701, 20705, 20709, 20713, 20717, 20721, 20725, 20729, + 20733, 20737, 20740, 20748, 20756, 20768, 20780, 20788, 20796, 20804, + 20812, 20820, 20828, 20836, 20844, 20852, 20852, 20860, 20868, 20876, + 20884, 20892, 20892, 20900, 20900, 20908, 20916, 20916, 20924, 20932, + 20932, 20940, 20948, 20956, 20964, 20972, 20980, 20988, 20996, 21005, + 21013, 21017, 21021, 21025, 21029, 21033, 21037, 21041, 21045, 21049, + 21053, 21057, 21061, 21065, 21069, 21073, 21077, 21081, 21085, 21089, + 21093, 21097, 21101, 21105, 21109, 21113, 21117, 21121, 21125, 21129, + 21133, 21137, 21141, 21145, 21149, 21153, 21157, 21161, 21165, 21169, + 21173, 21177, 21181, 21185, 21189, 21193, 21197, 21201, 21205, 21209, + 21213, 21217, 21221, 21225, 21229, 21233, 21237, 21241, 21245, 21249, + 21253, 21257, 21261, 21265, 21269, 21273, 21277, 21281, 21285, 21289, + 21293, 21297, 21301, 21305, 21309, 21313, 21317, 21321, 21325, 21329, + 21333, 21337, 21341, 21345, 21349, 21357, 21365, 21369, 21373, 21377, + 21381, 21385, 21389, 21393, 21397, 21401, 21405, 21413, 21420, 21420, + 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, + 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, + 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, 21420, + 21420, 21421, 21425, 21429, 21433, 21437, 21441, 21445, 21449, 21453, + 21457, 21461, 21469, 21473, 21477, 21481, 21485, 21489, 21493, 21497, + 21501, 21505, 21509, 21513, 21517, 21529, 21541, 21553, 21565, 21577, + 21589, 21601, 21613, 21625, 21637, 21649, 21661, 21673, 21685, 21697, + 21709, 21721, 21733, 21737, 21741, 21745, 21749}, + {21749, 21761, 21773, 21785, 21797, 21809, 21817, 21825, 21833, 21841, + 21849, 21857, 21865, 21873, 21881, 21889, 21897, 21905, 21913, 21921, + 21929, 21937, 21945, 21953, 21961, 21969, 21977, 21985, 21993, 22001, + 22009, 22017, 22025, 22033, 22041, 22049, 22057, 22065, 22073, 22081, + 22089, 22097, 22105, 22113, 22121, 22129, 22137, 22145, 22153, 22161, + 22169, 22177, 22185, 22193, 22201, 22209, 22217, 22225, 22233, 22241, + 22249, 22257, 22265, 22273, 22281, 22289, 22297, 22305, 22313, 22321, + 22329, 22337, 22345, 22353, 22361, 22369, 22377, 22385, 22393, 22401, + 22409, 22417, 22425, 22433, 22441, 22449, 22457, 22465, 22473, 22481, + 22489, 22497, 22505, 22513, 22521, 22533, 22545, 22557, 22569, 22581, + 22593, 22605, 22617, 22629, 22641, 22653, 22665, 22673, 22681, 22689, + 22697, 22705, 22713, 22721, 22729, 22737, 22745, 22753, 22761, 22769, + 22777, 22785, 22793, 22801, 22809, 22817, 22825, 22833, 22841, 22849, + 22857, 22865, 22873, 22881, 22889, 22897, 22905, 22913, 22921, 22929, + 22937, 22945, 22953, 22961, 22969, 22977, 22985, 22993, 23001, 23009, + 23017, 23025, 23037, 23049, 23061, 23073, 23085, 23093, 23101, 23109, + 23117, 23125, 23133, 23141, 23149, 23157, 23165, 23173, 23181, 23189, + 23197, 23205, 23213, 23221, 23229, 23237, 23245, 23253, 23261, 23269, + 23277, 23285, 23293, 23301, 23309, 23317, 23325, 23333, 23341, 23349, + 23357, 23365, 23373, 23381, 23389, 23397, 23405, 23413, 23421, 23429, + 23437, 23445, 23453, 23461, 23469, 23477, 23485, 23493, 23501, 23509, + 23517, 23525, 23533, 23541, 23549, 23557, 23565, 23573, 23581, 23589, + 23597, 23605, 23613, 23621, 23633, 23645, 23653, 23661, 23669, 23677, + 23685, 23693, 23701, 23709, 23717, 23725, 23733, 23741, 23749, 23757, + 23765, 23773, 23781, 23793, 23805, 23817, 23825, 23833, 23841, 23849, + 23857, 23865, 23873, 23881, 23889, 23897, 23905}, + {23905, 23913, 23921, 23929, 23937, 23945, 23953, 23961, 23969, 23977, + 23985, 23993, 24001, 24009, 24017, 24025, 24033, 24041, 24049, 24057, + 24065, 24073, 24081, 24089, 24097, 24105, 24113, 24121, 24129, 24137, + 24145, 24153, 24161, 24169, 24177, 24185, 24193, 24201, 24209, 24217, + 24225, 24233, 24241, 24249, 24257, 24265, 24273, 24281, 24289, 24297, + 24305, 24313, 24321, 24329, 24337, 24345, 24353, 24361, 24369, 24377, + 24385, 24393, 24400, 24400, 24400, 24400, 24400, 24400, 24400, 24400, + 24400, 24400, 24400, 24400, 24400, 24400, 24400, 24400, 24400, 24400, + 24401, 24413, 24425, 24437, 24449, 24461, 24473, 24485, 24497, 24509, + 24521, 24533, 24545, 24557, 24569, 24581, 24593, 24605, 24617, 24629, + 24641, 24653, 24665, 24677, 24689, 24701, 24713, 24725, 24737, 24749, + 24761, 24773, 24785, 24797, 24809, 24821, 24833, 24845, 24857, 24869, + 24881, 24893, 24905, 24917, 24929, 24941, 24953, 24965, 24977, 24989, + 25001, 25013, 25025, 25037, 25049, 25061, 25073, 25085, 25097, 25109, + 25121, 25133, 25145, 25157, 25168, 25168, 25169, 25181, 25193, 25205, + 25217, 25229, 25241, 25253, 25265, 25277, 25289, 25301, 25313, 25325, + 25337, 25349, 25361, 25373, 25385, 25397, 25409, 25421, 25433, 25445, + 25457, 25469, 25481, 25493, 25505, 25517, 25529, 25541, 25553, 25565, + 25577, 25589, 25601, 25613, 25625, 25637, 25649, 25661, 25673, 25685, + 25697, 25709, 25721, 25733, 25745, 25757, 25769, 25781, 25793, 25805, + 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, + 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, + 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, + 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, 25816, + 25817, 25829, 25841, 25857, 25873, 25889, 25905, 25921, 25937, 25953, + 25965, 26037, 26069, 26084, 26084, 26084, 26084}, + {26084, 26084, 26084, 26084, 26084, 26084, 26084, 26084, 26084, 26084, + 26084, 26084, 26084, 26084, 26084, 26084, 26085, 26089, 26093, 26097, + 26101, 26105, 26109, 26113, 26117, 26121, 26132, 26132, 26132, 26132, + 26132, 26132, 26132, 26132, 26132, 26132, 26132, 26132, 26132, 26132, + 26132, 26132, 26132, 26132, 26132, 26132, 26132, 26132, 26133, 26141, + 26145, 26149, 26153, 26157, 26161, 26165, 26169, 26173, 26177, 26181, + 26185, 26189, 26193, 26197, 26201, 26205, 26209, 26213, 26217, 26220, + 26220, 26221, 26225, 26229, 26237, 26245, 26253, 26261, 26265, 26269, + 26273, 26277, 26281, 26284, 26285, 26289, 26293, 26297, 26301, 26305, + 26309, 26313, 26317, 26321, 26325, 26329, 26333, 26337, 26341, 26345, + 26349, 26353, 26357, 26360, 26361, 26365, 26369, 26373, 26376, 26376, + 26376, 26376, 26377, 26385, 26393, 26400, 26401, 26408, 26409, 26417, + 26425, 26433, 26441, 26449, 26457, 26465, 26473, 26481, 26489, 26493, + 26501, 26509, 26517, 26525, 26533, 26541, 26549, 26557, 26565, 26573, + 26581, 26589, 26593, 26597, 26601, 26605, 26609, 26613, 26617, 26621, + 26625, 26629, 26633, 26637, 26641, 26645, 26649, 26653, 26657, 26661, + 26665, 26669, 26673, 26677, 26681, 26685, 26689, 26693, 26697, 26701, + 26705, 26709, 26713, 26717, 26721, 26725, 26729, 26733, 26737, 26741, + 26745, 26749, 26753, 26757, 26761, 26765, 26769, 26773, 26777, 26781, + 26785, 26789, 26793, 26797, 26801, 26805, 26809, 26813, 26817, 26821, + 26825, 26829, 26833, 26837, 26841, 26845, 26849, 26853, 26857, 26861, + 26865, 26869, 26873, 26877, 26881, 26885, 26889, 26893, 26897, 26901, + 26905, 26909, 26913, 26917, 26921, 26925, 26929, 26933, 26937, 26941, + 26945, 26949, 26953, 26957, 26961, 26965, 26969, 26973, 26977, 26981, + 26985, 26989, 26993, 26997, 27001, 27005, 27017, 27029, 27041, 27053, + 27065, 27077, 27085, 27092, 27092, 27092, 27092}, + {27092, 27093, 27097, 27101, 27105, 27109, 27113, 27117, 27121, 27125, + 27129, 27133, 27137, 27141, 27145, 27149, 27153, 27157, 27161, 27165, + 27169, 27173, 27177, 27181, 27185, 27189, 27193, 27197, 27201, 27205, + 27209, 27213, 27217, 27221, 27225, 27229, 27233, 27237, 27241, 27245, + 27249, 27253, 27257, 27261, 27265, 27269, 27273, 27277, 27281, 27285, + 27289, 27293, 27297, 27301, 27305, 27309, 27313, 27317, 27321, 27325, + 27329, 27333, 27337, 27341, 27345, 27349, 27353, 27357, 27361, 27365, + 27369, 27373, 27377, 27381, 27385, 27389, 27393, 27397, 27401, 27405, + 27409, 27413, 27417, 27421, 27425, 27429, 27433, 27437, 27441, 27445, + 27449, 27453, 27457, 27461, 27465, 27469, 27473, 27477, 27481, 27485, + 27489, 27493, 27497, 27501, 27505, 27509, 27513, 27517, 27521, 27525, + 27529, 27533, 27537, 27541, 27545, 27549, 27553, 27557, 27561, 27565, + 27569, 27573, 27577, 27581, 27585, 27589, 27593, 27597, 27601, 27605, + 27609, 27613, 27617, 27621, 27625, 27629, 27633, 27637, 27641, 27645, + 27649, 27653, 27657, 27661, 27665, 27669, 27673, 27677, 27681, 27685, + 27689, 27693, 27697, 27701, 27705, 27709, 27713, 27717, 27721, 27725, + 27729, 27733, 27737, 27741, 27745, 27749, 27753, 27757, 27761, 27765, + 27769, 27773, 27777, 27781, 27785, 27789, 27793, 27797, 27801, 27805, + 27809, 27813, 27817, 27821, 27825, 27829, 27833, 27837, 27841, 27845, + 27849, 27852, 27852, 27852, 27853, 27857, 27861, 27865, 27869, 27873, + 27876, 27876, 27877, 27881, 27885, 27889, 27893, 27897, 27900, 27900, + 27901, 27905, 27909, 27913, 27917, 27921, 27924, 27924, 27925, 27929, + 27933, 27936, 27936, 27936, 27937, 27941, 27945, 27949, 27957, 27961, + 27965, 27968, 27969, 27973, 27977, 27981, 27985, 27989, 27993, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996}, + {27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, + 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27996, 27997, + 28001, 28005, 28009, 28013, 28016, 28017, 28021, 28025, 28029, 28033, + 28037, 28041, 28045, 28049, 28053, 28057, 28061, 28065, 28069, 28073, + 28077, 28081, 28085, 28089, 28093, 28097, 28101, 28105, 28109, 28113, + 28117, 28121, 28125, 28129, 28133, 28137, 28141, 28145, 28149, 28153, + 28157, 28161, 28165, 28169, 28173, 28177, 28181, 28184, 28185, 28189, + 28193, 28197, 28201, 28205, 28209, 28213, 28217, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220}, + {28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, 28220, + 28220, 28220, 28220, 28220, 28220, 28228, 28228, 28236, 28236, 28236, + 28236, 28236, 28236, 28236, 28236, 28236, 28236, 28236, 28236, 28236, + 28236, 28236, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244}, + {28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28244, + 28244, 28244, 28244, 28244, 28244, 28244, 28244, 28252, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260}, + {28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, 28260, + 28260, 28260, 28260, 28260, 28260, 28260, 28268, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276}, + {28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, + 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28276, 28284, 28292, + 28292, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300}, + {28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28300, + 28300, 28300, 28300, 28300, 28300, 28300, 28300, 28308, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316}, + {28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28316, + 28316, 28316, 28316, 28316, 28316, 28316, 28316, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324}, + {28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, 28324, + 28324, 28324, 28324, 28324, 28324, 28332, 28340, 28352, 28364, 28376, + 28388, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, + 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, + 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, + 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, + 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, + 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, + 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, + 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, + 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28400, 28408, 28416, + 28428, 28440, 28452, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464}, + {28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, 28464, + 28464, 28464, 28464, 28464, 28464, 28464, 28465}, + {28465, 28469, 28473, 28477, 28481, 28485, 28489, 28493, 28497, 28501, + 28505, 28509, 28513, 28517, 28521, 28525, 28529, 28533, 28537, 28541, + 28545, 28549, 28553, 28557, 28561, 28565, 28569, 28573, 28577, 28581, + 28585, 28589, 28593, 28597, 28601, 28605, 28609, 28613, 28617, 28621, + 28625, 28629, 28633, 28637, 28641, 28645, 28649, 28653, 28657, 28661, + 28665, 28669, 28673, 28677, 28681, 28685, 28689, 28693, 28697, 28701, + 28705, 28709, 28713, 28717, 28721, 28725, 28729, 28733, 28737, 28741, + 28745, 28749, 28753, 28757, 28761, 28765, 28769, 28773, 28777, 28781, + 28785, 28789, 28793, 28797, 28801, 28804, 28805, 28809, 28813, 28817, + 28821, 28825, 28829, 28833, 28837, 28841, 28845, 28849, 28853, 28857, + 28861, 28865, 28869, 28873, 28877, 28881, 28885, 28889, 28893, 28897, + 28901, 28905, 28909, 28913, 28917, 28921, 28925, 28929, 28933, 28937, + 28941, 28945, 28949, 28953, 28957, 28961, 28965, 28969, 28973, 28977, + 28981, 28985, 28989, 28993, 28997, 29001, 29005, 29009, 29013, 29017, + 29021, 29025, 29029, 29033, 29037, 29041, 29045, 29049, 29053, 29057, + 29061, 29065, 29069, 29073, 29077, 29081, 29085, 29088, 29089, 29093, + 29096, 29096, 29097, 29100, 29100, 29101, 29105, 29108, 29108, 29109, + 29113, 29117, 29121, 29124, 29125, 29129, 29133, 29137, 29141, 29145, + 29149, 29153, 29157, 29161, 29165, 29169, 29172, 29173, 29176, 29177, + 29181, 29185, 29189, 29193, 29197, 29201, 29204, 29205, 29209, 29213, + 29217, 29221, 29225, 29229, 29233, 29237, 29241, 29245, 29249, 29253, + 29257, 29261, 29265, 29269, 29273, 29277, 29281, 29285, 29289, 29293, + 29297, 29301, 29305, 29309, 29313, 29317, 29321, 29325, 29329, 29333, + 29337, 29341, 29345, 29349, 29353, 29357, 29361, 29365, 29369, 29373, + 29377, 29381, 29385, 29389, 29393, 29397, 29401, 29405, 29409, 29413, + 29417, 29421, 29425, 29429, 29433, 29437, 29441}, + {29441, 29445, 29449, 29453, 29457, 29461, 29464, 29465, 29469, 29473, + 29477, 29480, 29480, 29481, 29485, 29489, 29493, 29497, 29501, 29505, + 29509, 29512, 29513, 29517, 29521, 29525, 29529, 29533, 29537, 29540, + 29541, 29545, 29549, 29553, 29557, 29561, 29565, 29569, 29573, 29577, + 29581, 29585, 29589, 29593, 29597, 29601, 29605, 29609, 29613, 29617, + 29621, 29625, 29629, 29633, 29637, 29641, 29645, 29649, 29652, 29653, + 29657, 29661, 29665, 29668, 29669, 29673, 29677, 29681, 29685, 29688, + 29689, 29692, 29692, 29692, 29693, 29697, 29701, 29705, 29709, 29713, + 29717, 29720, 29721, 29725, 29729, 29733, 29737, 29741, 29745, 29749, + 29753, 29757, 29761, 29765, 29769, 29773, 29777, 29781, 29785, 29789, + 29793, 29797, 29801, 29805, 29809, 29813, 29817, 29821, 29825, 29829, + 29833, 29837, 29841, 29845, 29849, 29853, 29857, 29861, 29865, 29869, + 29873, 29877, 29881, 29885, 29889, 29893, 29897, 29901, 29905, 29909, + 29913, 29917, 29921, 29925, 29929, 29933, 29937, 29941, 29945, 29949, + 29953, 29957, 29961, 29965, 29969, 29973, 29977, 29981, 29985, 29989, + 29993, 29997, 30001, 30005, 30009, 30013, 30017, 30021, 30025, 30029, + 30033, 30037, 30041, 30045, 30049, 30053, 30057, 30061, 30065, 30069, + 30073, 30077, 30081, 30085, 30089, 30093, 30097, 30101, 30105, 30109, + 30113, 30117, 30121, 30125, 30129, 30133, 30137, 30141, 30145, 30149, + 30153, 30157, 30161, 30165, 30169, 30173, 30177, 30181, 30185, 30189, + 30193, 30197, 30201, 30205, 30209, 30213, 30217, 30221, 30225, 30229, + 30233, 30237, 30241, 30245, 30249, 30253, 30257, 30261, 30265, 30269, + 30273, 30277, 30281, 30285, 30289, 30293, 30297, 30301, 30305, 30309, + 30313, 30317, 30321, 30325, 30329, 30333, 30337, 30341, 30345, 30349, + 30353, 30357, 30361, 30365, 30369, 30373, 30377, 30381, 30385, 30389, + 30393, 30397, 30401, 30405, 30409, 30413, 30417}, + {30417, 30421, 30425, 30429, 30433, 30437, 30441, 30445, 30449, 30453, + 30457, 30461, 30465, 30469, 30473, 30477, 30481, 30485, 30489, 30493, + 30497, 30501, 30505, 30509, 30513, 30517, 30521, 30525, 30529, 30533, + 30537, 30541, 30545, 30549, 30553, 30557, 30561, 30565, 30569, 30573, + 30577, 30581, 30585, 30589, 30593, 30597, 30601, 30605, 30609, 30613, + 30617, 30621, 30625, 30629, 30633, 30637, 30641, 30645, 30649, 30653, + 30657, 30661, 30665, 30669, 30673, 30677, 30681, 30685, 30689, 30693, + 30697, 30701, 30705, 30709, 30713, 30717, 30721, 30725, 30729, 30733, + 30737, 30741, 30745, 30749, 30753, 30757, 30761, 30765, 30769, 30773, + 30777, 30781, 30785, 30789, 30793, 30797, 30801, 30805, 30809, 30813, + 30817, 30821, 30825, 30829, 30833, 30837, 30841, 30845, 30849, 30853, + 30857, 30861, 30865, 30869, 30873, 30877, 30881, 30885, 30889, 30893, + 30897, 30901, 30905, 30909, 30913, 30917, 30921, 30925, 30929, 30933, + 30937, 30941, 30945, 30949, 30953, 30957, 30961, 30965, 30969, 30973, + 30977, 30981, 30985, 30989, 30993, 30997, 31001, 31005, 31009, 31013, + 31017, 31021, 31025, 31029, 31033, 31037, 31041, 31045, 31049, 31053, + 31057, 31061, 31065, 31069, 31073, 31077, 31080, 31080, 31081, 31085, + 31089, 31093, 31097, 31101, 31105, 31109, 31113, 31117, 31121, 31125, + 31129, 31133, 31137, 31141, 31145, 31149, 31153, 31157, 31161, 31165, + 31169, 31173, 31177, 31181, 31185, 31189, 31193, 31197, 31201, 31205, + 31209, 31213, 31217, 31221, 31225, 31229, 31233, 31237, 31241, 31245, + 31249, 31253, 31257, 31261, 31265, 31269, 31273, 31277, 31281, 31285, + 31289, 31293, 31297, 31301, 31305, 31309, 31313, 31317, 31321, 31325, + 31329, 31333, 31337, 31341, 31345, 31349, 31353, 31357, 31361, 31365, + 31369, 31373, 31377, 31381, 31385, 31389, 31393, 31397, 31401, 31405, + 31409, 31413, 31417, 31421, 31425, 31429, 31433}, + {31433, 31437, 31441, 31445, 31449, 31453, 31457, 31461, 31465, 31469, + 31473, 31477, 31481, 31485, 31489, 31493, 31497, 31501, 31505, 31509, + 31513, 31517, 31521, 31525, 31529, 31533, 31537, 31541, 31545, 31549, + 31553, 31557, 31561, 31565, 31569, 31573, 31577, 31581, 31585, 31589, + 31593, 31597, 31601, 31605, 31609, 31613, 31617, 31621, 31625, 31629, + 31633, 31637, 31641, 31645, 31649, 31653, 31657, 31661, 31665, 31669, + 31673, 31677, 31681, 31685, 31689, 31693, 31697, 31701, 31705, 31709, + 31713, 31717, 31721, 31725, 31729, 31733, 31737, 31741, 31745, 31749, + 31753, 31757, 31761, 31765, 31769, 31773, 31777, 31781, 31785, 31789, + 31793, 31797, 31801, 31805, 31809, 31813, 31817, 31821, 31825, 31829, + 31833, 31837, 31841, 31845, 31849, 31853, 31857, 31861, 31865, 31869, + 31873, 31877, 31881, 31885, 31889, 31893, 31897, 31901, 31905, 31909, + 31913, 31917, 31921, 31925, 31929, 31933, 31937, 31941, 31945, 31949, + 31953, 31957, 31961, 31965, 31969, 31973, 31977, 31981, 31985, 31989, + 31993, 31997, 32001, 32005, 32009, 32013, 32017, 32021, 32025, 32029, + 32033, 32037, 32041, 32045, 32049, 32053, 32057, 32061, 32065, 32069, + 32073, 32077, 32081, 32085, 32089, 32093, 32097, 32101, 32105, 32109, + 32113, 32117, 32121, 32125, 32129, 32133, 32137, 32141, 32145, 32149, + 32153, 32157, 32161, 32165, 32169, 32173, 32177, 32181, 32185, 32189, + 32193, 32197, 32201, 32205, 32209, 32213, 32217, 32221, 32225, 32229, + 32233, 32237, 32241, 32245, 32248, 32248, 32249, 32253, 32257, 32261, + 32265, 32269, 32273, 32277, 32281, 32285, 32289, 32293, 32297, 32301, + 32305, 32309, 32313, 32317, 32321, 32325, 32329, 32333, 32337, 32341, + 32345, 32349, 32353, 32357, 32361, 32365, 32369, 32373, 32377, 32381, + 32385, 32389, 32393, 32397, 32401, 32405, 32409, 32413, 32417, 32421, + 32425, 32429, 32433, 32437, 32441, 32445, 32448}, + {32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, + 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, + 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, + 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, + 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32448, 32449, 32453, + 32457, 32461, 32465, 32469, 32473, 32477, 32481, 32485, 32489, 32493, + 32497, 32501, 32505, 32509, 32513, 32517, 32521, 32525, 32529, 32533, + 32537, 32541, 32545, 32549, 32553, 32557, 32561, 32565, 32569, 32573, + 32577, 32581, 32585, 32589, 32593, 32597, 32601, 32605, 32609, 32613, + 32617, 32621, 32625, 32629, 32633, 32637, 32641, 32645, 32649, 32653, + 32657, 32661, 32665, 32669, 32673, 32677, 32681, 32685, 32689, 32693, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696}, + {32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, 32696, + 32696, 32696, 32696, 32696, 32696, 32696, 32697}, + {32697, 32701, 32705, 32709, 32712, 32713, 32717, 32721, 32725, 32729, + 32733, 32737, 32741, 32745, 32749, 32753, 32757, 32761, 32765, 32769, + 32773, 32777, 32781, 32785, 32789, 32793, 32797, 32801, 32805, 32809, + 32813, 32817, 32820, 32821, 32825, 32828, 32829, 32832, 32832, 32833, + 32836, 32837, 32841, 32845, 32849, 32853, 32857, 32861, 32865, 32869, + 32873, 32876, 32877, 32881, 32885, 32889, 32892, 32893, 32896, 32897, + 32900, 32900, 32900, 32900, 32900, 32900, 32901, 32904, 32904, 32904, + 32904, 32905, 32908, 32909, 32912, 32913, 32916, 32917, 32921, 32925, + 32928, 32929, 32933, 32936, 32937, 32940, 32940, 32941, 32944, 32945, + 32948, 32949, 32952, 32953, 32956, 32957, 32960, 32961, 32965, 32968, + 32969, 32972, 32972, 32973, 32977, 32981, 32985, 32988, 32989, 32993, + 32997, 33001, 33005, 33009, 33013, 33016, 33017, 33021, 33025, 33029, + 33032, 33033, 33037, 33041, 33045, 33048, 33049, 33052, 33053, 33057, + 33061, 33065, 33069, 33073, 33077, 33081, 33085, 33089, 33092, 33093, + 33097, 33101, 33105, 33109, 33113, 33117, 33121, 33125, 33129, 33133, + 33137, 33141, 33145, 33149, 33153, 33157, 33160, 33160, 33160, 33160, + 33160, 33161, 33165, 33169, 33172, 33173, 33177, 33181, 33185, 33189, + 33192, 33193, 33197, 33201, 33205, 33209, 33213, 33217, 33221, 33225, + 33229, 33233, 33237, 33241, 33245, 33249, 33253, 33257, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260}, + {33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, 33260, + 33260, 33260, 33260, 33260, 33260, 33260, 33261}, + {33261, 33269, 33277, 33285, 33293, 33301, 33309, 33317, 33325, 33333, + 33341, 33348, 33348, 33348, 33348, 33348, 33349, 33361, 33373, 33385, + 33397, 33409, 33421, 33433, 33445, 33457, 33469, 33481, 33493, 33505, + 33517, 33529, 33541, 33553, 33565, 33577, 33589, 33601, 33613, 33625, + 33637, 33649, 33661, 33673, 33677, 33681, 33689, 33696, 33697, 33701, + 33705, 33709, 33713, 33717, 33721, 33725, 33729, 33733, 33737, 33741, + 33745, 33749, 33753, 33757, 33761, 33765, 33769, 33773, 33777, 33781, + 33785, 33789, 33793, 33797, 33801, 33809, 33817, 33825, 33833, 33845, + 33852, 33852, 33852, 33852, 33852, 33852, 33852, 33852, 33852, 33852, + 33852, 33852, 33852, 33852, 33852, 33852, 33852, 33852, 33852, 33852, + 33852, 33852, 33852, 33852, 33852, 33852, 33853, 33861, 33869, 33876, + 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, + 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, + 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, 33876, + 33876, 33876, 33876, 33876, 33877, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, 33884, + 33884, 33884, 33884, 33884, 33884, 33884, 33885}, + {33885, 33893, 33901, 33904, 33904, 33904, 33904, 33904, 33904, 33904, + 33904, 33904, 33904, 33904, 33904, 33904, 33905, 33909, 33913, 33917, + 33925, 33929, 33933, 33937, 33941, 33945, 33949, 33953, 33957, 33961, + 33965, 33969, 33973, 33977, 33981, 33985, 33989, 33993, 33997, 34001, + 34005, 34009, 34013, 34017, 34021, 34025, 34029, 34033, 34037, 34041, + 34045, 34049, 34053, 34057, 34061, 34065, 34069, 34073, 34077, 34081, + 34084, 34084, 34084, 34084, 34085, 34097, 34109, 34121, 34133, 34145, + 34157, 34169, 34181, 34192, 34192, 34192, 34192, 34192, 34192, 34192, + 34193, 34197, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200}, + {34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, 34200, + 34201, 34205, 34209, 34213, 34217, 34221, 34225, 34229, 34233, 34237, + 34240, 34240, 34240, 34240, 34240, 34240, 34240}, + {34240, 34244, 34248, 34252, 34256, 34260, 34264, 34268, 34272, 34276, + 34280, 34284, 34288, 34292, 34296, 34300, 34304, 34308, 34312, 34316, + 34320, 34324, 34328, 34332, 34336, 34340, 34344, 34348, 34352, 34356, + 34360, 34364, 34368, 34372, 34376, 34380, 34384, 34388, 34392, 34396, + 34400, 34404, 34408, 34412, 34416, 34420, 34424, 34428, 34432, 34436, + 34440, 34444, 34448, 34452, 34456, 34460, 34464, 34468, 34472, 34476, + 34480, 34484, 34488, 34492, 34496, 34500, 34504, 34508, 34512, 34516, + 34520, 34524, 34528, 34532, 34536, 34540, 34544, 34548, 34552, 34556, + 34560, 34564, 34568, 34572, 34576, 34580, 34584, 34588, 34592, 34596, + 34600, 34604, 34608, 34612, 34616, 34620, 34624, 34628, 34632, 34636, + 34640, 34644, 34648, 34652, 34656, 34660, 34664, 34668, 34672, 34676, + 34680, 34684, 34688, 34692, 34696, 34700, 34704, 34708, 34712, 34716, + 34720, 34724, 34728, 34732, 34736, 34740, 34744, 34748, 34752, 34756, + 34760, 34764, 34768, 34772, 34776, 34780, 34784, 34788, 34792, 34796, + 34800, 34804, 34808, 34812, 34816, 34820, 34824, 34828, 34832, 34836, + 34840, 34844, 34848, 34852, 34856, 34860, 34864, 34868, 34872, 34876, + 34880, 34884, 34888, 34892, 34896, 34900, 34904, 34908, 34912, 34916, + 34920, 34924, 34928, 34932, 34936, 34940, 34944, 34948, 34952, 34956, + 34960, 34964, 34968, 34972, 34976, 34980, 34984, 34988, 34992, 34996, + 35000, 35004, 35008, 35012, 35016, 35020, 35024, 35028, 35032, 35036, + 35040, 35044, 35048, 35052, 35056, 35060, 35064, 35068, 35072, 35076, + 35080, 35084, 35088, 35092, 35096, 35100, 35104, 35108, 35112, 35116, + 35120, 35124, 35128, 35132, 35136, 35140, 35144, 35148, 35152, 35156, + 35160, 35164, 35168, 35172, 35176, 35180, 35184, 35188, 35192, 35196, + 35200, 35204, 35208, 35212, 35216, 35220, 35224, 35228, 35232, 35236, + 35240, 35244, 35248, 35252, 35256, 35260, 35264}, + {35264, 35268, 35272, 35276, 35280, 35284, 35288, 35292, 35296, 35300, + 35304, 35308, 35312, 35316, 35320, 35324, 35328, 35332, 35336, 35340, + 35344, 35348, 35352, 35356, 35360, 35364, 35368, 35372, 35376, 35380, + 35384, 35388, 35392, 35396, 35400, 35404, 35408, 35412, 35416, 35420, + 35424, 35428, 35432, 35436, 35440, 35444, 35448, 35452, 35456, 35460, + 35464, 35468, 35472, 35476, 35480, 35484, 35488, 35492, 35496, 35500, + 35504, 35508, 35512, 35516, 35520, 35524, 35528, 35532, 35536, 35540, + 35544, 35548, 35552, 35556, 35560, 35564, 35568, 35572, 35576, 35580, + 35584, 35588, 35592, 35596, 35600, 35604, 35608, 35612, 35616, 35620, + 35624, 35628, 35632, 35636, 35640, 35644, 35648, 35652, 35656, 35660, + 35664, 35668, 35672, 35676, 35680, 35684, 35688, 35692, 35696, 35700, + 35704, 35708, 35712, 35716, 35720, 35724, 35728, 35732, 35736, 35740, + 35744, 35748, 35752, 35756, 35760, 35764, 35768, 35772, 35776, 35780, + 35784, 35788, 35792, 35796, 35800, 35804, 35808, 35812, 35816, 35820, + 35824, 35828, 35832, 35836, 35840, 35844, 35848, 35852, 35856, 35860, + 35864, 35868, 35872, 35876, 35880, 35884, 35888, 35892, 35896, 35900, + 35904, 35908, 35912, 35916, 35920, 35924, 35928, 35932, 35936, 35940, + 35944, 35948, 35952, 35956, 35960, 35964, 35968, 35972, 35976, 35980, + 35984, 35988, 35992, 35996, 36000, 36004, 36008, 36012, 36016, 36020, + 36024, 36028, 36032, 36036, 36040, 36044, 36048, 36052, 36056, 36060, + 36064, 36068, 36072, 36076, 36080, 36084, 36088, 36092, 36096, 36100, + 36104, 36108, 36112, 36116, 36120, 36124, 36128, 36132, 36136, 36140, + 36144, 36148, 36152, 36156, 36160, 36164, 36168, 36172, 36176, 36180, + 36184, 36188, 36192, 36196, 36200, 36204, 36208, 36212, 36216, 36220, + 36224, 36228, 36232, 36236, 36240, 36244, 36248, 36252, 36256, 36260, + 36264, 36268, 36272, 36276, 36280, 36284, 36288}, + {36288, 36292, 36296, 36300, 36304, 36308, 36312, 36316, 36320, 36324, + 36328, 36332, 36336, 36340, 36344, 36348, 36352, 36356, 36360, 36364, + 36368, 36372, 36376, 36380, 36384, 36388, 36392, 36396, 36400, 36404, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, 36408, + 36408, 36408, 36408, 36408, 36408, 36408, 36408}}; +const char32_t decomposition_data[9102] = { + 0, 32, 32, 776, 97, 32, 772, 50, 51, + 32, 769, 956, 32, 807, 49, 111, 49, 8260, + 52, 49, 8260, 50, 51, 8260, 52, 65, 768, + 65, 769, 65, 770, 65, 771, 65, 776, 65, + 778, 67, 807, 69, 768, 69, 769, 69, 770, + 69, 776, 73, 768, 73, 769, 73, 770, 73, + 776, 78, 771, 79, 768, 79, 769, 79, 770, + 79, 771, 79, 776, 85, 768, 85, 769, 85, + 770, 85, 776, 89, 769, 97, 768, 97, 769, + 97, 770, 97, 771, 97, 776, 97, 778, 99, + 807, 101, 768, 101, 769, 101, 770, 101, 776, + 105, 768, 105, 769, 105, 770, 105, 776, 110, + 771, 111, 768, 111, 769, 111, 770, 111, 771, + 111, 776, 117, 768, 117, 769, 117, 770, 117, + 776, 121, 769, 121, 776, 65, 772, 97, 772, + 65, 774, 97, 774, 65, 808, 97, 808, 67, + 769, 99, 769, 67, 770, 99, 770, 67, 775, + 99, 775, 67, 780, 99, 780, 68, 780, 100, + 780, 69, 772, 101, 772, 69, 774, 101, 774, + 69, 775, 101, 775, 69, 808, 101, 808, 69, + 780, 101, 780, 71, 770, 103, 770, 71, 774, + 103, 774, 71, 775, 103, 775, 71, 807, 103, + 807, 72, 770, 104, 770, 73, 771, 105, 771, + 73, 772, 105, 772, 73, 774, 105, 774, 73, + 808, 105, 808, 73, 775, 73, 74, 105, 106, + 74, 770, 106, 770, 75, 807, 107, 807, 76, + 769, 108, 769, 76, 807, 108, 807, 76, 780, + 108, 780, 76, 183, 108, 183, 78, 769, 110, + 769, 78, 807, 110, 807, 78, 780, 110, 780, + 700, 110, 79, 772, 111, 772, 79, 774, 111, + 774, 79, 779, 111, 779, 82, 769, 114, 769, + 82, 807, 114, 807, 82, 780, 114, 780, 83, + 769, 115, 769, 83, 770, 115, 770, 83, 807, + 115, 807, 83, 780, 115, 780, 84, 807, 116, + 807, 84, 780, 116, 780, 85, 771, 117, 771, + 85, 772, 117, 772, 85, 774, 117, 774, 85, + 778, 117, 778, 85, 779, 117, 779, 85, 808, + 117, 808, 87, 770, 119, 770, 89, 770, 121, + 770, 89, 776, 90, 769, 122, 769, 90, 775, + 122, 775, 90, 780, 122, 780, 115, 79, 795, + 111, 795, 85, 795, 117, 795, 68, 90, 780, + 68, 122, 780, 100, 122, 780, 76, 74, 76, + 106, 108, 106, 78, 74, 78, 106, 110, 106, + 65, 780, 97, 780, 73, 780, 105, 780, 79, + 780, 111, 780, 85, 780, 117, 780, 85, 776, + 772, 117, 776, 772, 85, 776, 769, 117, 776, + 769, 85, 776, 780, 117, 776, 780, 85, 776, + 768, 117, 776, 768, 65, 776, 772, 97, 776, + 772, 65, 775, 772, 97, 775, 772, 198, 772, + 230, 772, 71, 780, 103, 780, 75, 780, 107, + 780, 79, 808, 111, 808, 79, 808, 772, 111, + 808, 772, 439, 780, 658, 780, 106, 780, 68, + 90, 68, 122, 100, 122, 71, 769, 103, 769, + 78, 768, 110, 768, 65, 778, 769, 97, 778, + 769, 198, 769, 230, 769, 216, 769, 248, 769, + 65, 783, 97, 783, 65, 785, 97, 785, 69, + 783, 101, 783, 69, 785, 101, 785, 73, 783, + 105, 783, 73, 785, 105, 785, 79, 783, 111, + 783, 79, 785, 111, 785, 82, 783, 114, 783, + 82, 785, 114, 785, 85, 783, 117, 783, 85, + 785, 117, 785, 83, 806, 115, 806, 84, 806, + 116, 806, 72, 780, 104, 780, 65, 775, 97, + 775, 69, 807, 101, 807, 79, 776, 772, 111, + 776, 772, 79, 771, 772, 111, 771, 772, 79, + 775, 111, 775, 79, 775, 772, 111, 775, 772, + 89, 772, 121, 772, 104, 614, 106, 114, 633, + 635, 641, 119, 121, 32, 774, 32, 775, 32, + 778, 32, 808, 32, 771, 32, 779, 611, 108, + 115, 120, 661, 768, 769, 787, 776, 769, 697, + 32, 837, 59, 32, 769, 168, 769, 913, 769, + 183, 917, 769, 919, 769, 921, 769, 927, 769, + 933, 769, 937, 769, 953, 776, 769, 921, 776, + 933, 776, 945, 769, 949, 769, 951, 769, 953, + 769, 965, 776, 769, 953, 776, 965, 776, 959, + 769, 965, 769, 969, 769, 946, 952, 933, 978, + 769, 978, 776, 966, 960, 954, 961, 962, 920, + 949, 931, 1045, 768, 1045, 776, 1043, 769, 1030, + 776, 1050, 769, 1048, 768, 1059, 774, 1048, 774, + 1080, 774, 1077, 768, 1077, 776, 1075, 769, 1110, + 776, 1082, 769, 1080, 768, 1091, 774, 1140, 783, + 1141, 783, 1046, 774, 1078, 774, 1040, 774, 1072, + 774, 1040, 776, 1072, 776, 1045, 774, 1077, 774, + 1240, 776, 1241, 776, 1046, 776, 1078, 776, 1047, + 776, 1079, 776, 1048, 772, 1080, 772, 1048, 776, + 1080, 776, 1054, 776, 1086, 776, 1256, 776, 1257, + 776, 1069, 776, 1101, 776, 1059, 772, 1091, 772, + 1059, 776, 1091, 776, 1059, 779, 1091, 779, 1063, + 776, 1095, 776, 1067, 776, 1099, 776, 1381, 1410, + 1575, 1619, 1575, 1620, 1608, 1620, 1575, 1621, 1610, + 1620, 1575, 1652, 1608, 1652, 1735, 1652, 1610, 1652, + 1749, 1620, 1729, 1620, 1746, 1620, 2344, 2364, 2352, + 2364, 2355, 2364, 2325, 2364, 2326, 2364, 2327, 2364, + 2332, 2364, 2337, 2364, 2338, 2364, 2347, 2364, 2351, + 2364, 2503, 2494, 2503, 2519, 2465, 2492, 2466, 2492, + 2479, 2492, 2610, 2620, 2616, 2620, 2582, 2620, 2583, + 2620, 2588, 2620, 2603, 2620, 2887, 2902, 2887, 2878, + 2887, 2903, 2849, 2876, 2850, 2876, 2962, 3031, 3014, + 3006, 3015, 3006, 3014, 3031, 3142, 3158, 3263, 3285, + 3270, 3285, 3270, 3286, 3270, 3266, 3270, 3266, 3285, + 3398, 3390, 3399, 3390, 3398, 3415, 3545, 3530, 3545, + 3535, 3545, 3535, 3530, 3545, 3551, 3661, 3634, 3789, + 3762, 3755, 3737, 3755, 3745, 3851, 3906, 4023, 3916, + 4023, 3921, 4023, 3926, 4023, 3931, 4023, 3904, 4021, + 3953, 3954, 3953, 3956, 4018, 3968, 4018, 3953, 3968, + 4019, 3968, 4019, 3953, 3968, 3953, 3968, 3986, 4023, + 3996, 4023, 4001, 4023, 4006, 4023, 4011, 4023, 3984, + 4021, 4133, 4142, 4316, 6917, 6965, 6919, 6965, 6921, + 6965, 6923, 6965, 6925, 6965, 6929, 6965, 6970, 6965, + 6972, 6965, 6974, 6965, 6975, 6965, 6978, 6965, 65, + 198, 66, 68, 69, 398, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 546, 80, 82, 84, + 85, 87, 97, 592, 593, 7426, 98, 100, 101, + 601, 603, 604, 103, 107, 109, 331, 111, 596, + 7446, 7447, 112, 116, 117, 7453, 623, 118, 7461, + 946, 947, 948, 966, 967, 105, 114, 117, 118, + 946, 947, 961, 966, 967, 1085, 594, 99, 597, + 240, 604, 102, 607, 609, 613, 616, 617, 618, + 7547, 669, 621, 7557, 671, 625, 624, 626, 627, + 628, 629, 632, 642, 643, 427, 649, 650, 7452, + 651, 652, 122, 656, 657, 658, 952, 65, 805, + 97, 805, 66, 775, 98, 775, 66, 803, 98, + 803, 66, 817, 98, 817, 67, 807, 769, 99, + 807, 769, 68, 775, 100, 775, 68, 803, 100, + 803, 68, 817, 100, 817, 68, 807, 100, 807, + 68, 813, 100, 813, 69, 772, 768, 101, 772, + 768, 69, 772, 769, 101, 772, 769, 69, 813, + 101, 813, 69, 816, 101, 816, 69, 807, 774, + 101, 807, 774, 70, 775, 102, 775, 71, 772, + 103, 772, 72, 775, 104, 775, 72, 803, 104, + 803, 72, 776, 104, 776, 72, 807, 104, 807, + 72, 814, 104, 814, 73, 816, 105, 816, 73, + 776, 769, 105, 776, 769, 75, 769, 107, 769, + 75, 803, 107, 803, 75, 817, 107, 817, 76, + 803, 108, 803, 76, 803, 772, 108, 803, 772, + 76, 817, 108, 817, 76, 813, 108, 813, 77, + 769, 109, 769, 77, 775, 109, 775, 77, 803, + 109, 803, 78, 775, 110, 775, 78, 803, 110, + 803, 78, 817, 110, 817, 78, 813, 110, 813, + 79, 771, 769, 111, 771, 769, 79, 771, 776, + 111, 771, 776, 79, 772, 768, 111, 772, 768, + 79, 772, 769, 111, 772, 769, 80, 769, 112, + 769, 80, 775, 112, 775, 82, 775, 114, 775, + 82, 803, 114, 803, 82, 803, 772, 114, 803, + 772, 82, 817, 114, 817, 83, 775, 115, 775, + 83, 803, 115, 803, 83, 769, 775, 115, 769, + 775, 83, 780, 775, 115, 780, 775, 83, 803, + 775, 115, 803, 775, 84, 775, 116, 775, 84, + 803, 116, 803, 84, 817, 116, 817, 84, 813, + 116, 813, 85, 804, 117, 804, 85, 816, 117, + 816, 85, 813, 117, 813, 85, 771, 769, 117, + 771, 769, 85, 772, 776, 117, 772, 776, 86, + 771, 118, 771, 86, 803, 118, 803, 87, 768, + 119, 768, 87, 769, 119, 769, 87, 776, 119, + 776, 87, 775, 119, 775, 87, 803, 119, 803, + 88, 775, 120, 775, 88, 776, 120, 776, 89, + 775, 121, 775, 90, 770, 122, 770, 90, 803, + 122, 803, 90, 817, 122, 817, 104, 817, 116, + 776, 119, 778, 121, 778, 97, 702, 383, 775, + 65, 803, 97, 803, 65, 777, 97, 777, 65, + 770, 769, 97, 770, 769, 65, 770, 768, 97, + 770, 768, 65, 770, 777, 97, 770, 777, 65, + 770, 771, 97, 770, 771, 65, 803, 770, 97, + 803, 770, 65, 774, 769, 97, 774, 769, 65, + 774, 768, 97, 774, 768, 65, 774, 777, 97, + 774, 777, 65, 774, 771, 97, 774, 771, 65, + 803, 774, 97, 803, 774, 69, 803, 101, 803, + 69, 777, 101, 777, 69, 771, 101, 771, 69, + 770, 769, 101, 770, 769, 69, 770, 768, 101, + 770, 768, 69, 770, 777, 101, 770, 777, 69, + 770, 771, 101, 770, 771, 69, 803, 770, 101, + 803, 770, 73, 777, 105, 777, 73, 803, 105, + 803, 79, 803, 111, 803, 79, 777, 111, 777, + 79, 770, 769, 111, 770, 769, 79, 770, 768, + 111, 770, 768, 79, 770, 777, 111, 770, 777, + 79, 770, 771, 111, 770, 771, 79, 803, 770, + 111, 803, 770, 79, 795, 769, 111, 795, 769, + 79, 795, 768, 111, 795, 768, 79, 795, 777, + 111, 795, 777, 79, 795, 771, 111, 795, 771, + 79, 795, 803, 111, 795, 803, 85, 803, 117, + 803, 85, 777, 117, 777, 85, 795, 769, 117, + 795, 769, 85, 795, 768, 117, 795, 768, 85, + 795, 777, 117, 795, 777, 85, 795, 771, 117, + 795, 771, 85, 795, 803, 117, 795, 803, 89, + 768, 121, 768, 89, 803, 121, 803, 89, 777, + 121, 777, 89, 771, 121, 771, 945, 787, 945, + 788, 945, 787, 768, 945, 788, 768, 945, 787, + 769, 945, 788, 769, 945, 787, 834, 945, 788, + 834, 913, 787, 913, 788, 913, 787, 768, 913, + 788, 768, 913, 787, 769, 913, 788, 769, 913, + 787, 834, 913, 788, 834, 949, 787, 949, 788, + 949, 787, 768, 949, 788, 768, 949, 787, 769, + 949, 788, 769, 917, 787, 917, 788, 917, 787, + 768, 917, 788, 768, 917, 787, 769, 917, 788, + 769, 951, 787, 951, 788, 951, 787, 768, 951, + 788, 768, 951, 787, 769, 951, 788, 769, 951, + 787, 834, 951, 788, 834, 919, 787, 919, 788, + 919, 787, 768, 919, 788, 768, 919, 787, 769, + 919, 788, 769, 919, 787, 834, 919, 788, 834, + 953, 787, 953, 788, 953, 787, 768, 953, 788, + 768, 953, 787, 769, 953, 788, 769, 953, 787, + 834, 953, 788, 834, 921, 787, 921, 788, 921, + 787, 768, 921, 788, 768, 921, 787, 769, 921, + 788, 769, 921, 787, 834, 921, 788, 834, 959, + 787, 959, 788, 959, 787, 768, 959, 788, 768, + 959, 787, 769, 959, 788, 769, 927, 787, 927, + 788, 927, 787, 768, 927, 788, 768, 927, 787, + 769, 927, 788, 769, 965, 787, 965, 788, 965, + 787, 768, 965, 788, 768, 965, 787, 769, 965, + 788, 769, 965, 787, 834, 965, 788, 834, 933, + 788, 933, 788, 768, 933, 788, 769, 933, 788, + 834, 969, 787, 969, 788, 969, 787, 768, 969, + 788, 768, 969, 787, 769, 969, 788, 769, 969, + 787, 834, 969, 788, 834, 937, 787, 937, 788, + 937, 787, 768, 937, 788, 768, 937, 787, 769, + 937, 788, 769, 937, 787, 834, 937, 788, 834, + 945, 768, 945, 769, 949, 768, 949, 769, 951, + 768, 951, 769, 953, 768, 953, 769, 959, 768, + 959, 769, 965, 768, 965, 769, 969, 768, 969, + 769, 945, 787, 837, 945, 788, 837, 945, 787, + 768, 837, 945, 788, 768, 837, 945, 787, 769, + 837, 945, 788, 769, 837, 945, 787, 834, 837, + 945, 788, 834, 837, 913, 787, 837, 913, 788, + 837, 913, 787, 768, 837, 913, 788, 768, 837, + 913, 787, 769, 837, 913, 788, 769, 837, 913, + 787, 834, 837, 913, 788, 834, 837, 951, 787, + 837, 951, 788, 837, 951, 787, 768, 837, 951, + 788, 768, 837, 951, 787, 769, 837, 951, 788, + 769, 837, 951, 787, 834, 837, 951, 788, 834, + 837, 919, 787, 837, 919, 788, 837, 919, 787, + 768, 837, 919, 788, 768, 837, 919, 787, 769, + 837, 919, 788, 769, 837, 919, 787, 834, 837, + 919, 788, 834, 837, 969, 787, 837, 969, 788, + 837, 969, 787, 768, 837, 969, 788, 768, 837, + 969, 787, 769, 837, 969, 788, 769, 837, 969, + 787, 834, 837, 969, 788, 834, 837, 937, 787, + 837, 937, 788, 837, 937, 787, 768, 837, 937, + 788, 768, 837, 937, 787, 769, 837, 937, 788, + 769, 837, 937, 787, 834, 837, 937, 788, 834, + 837, 945, 774, 945, 772, 945, 768, 837, 945, + 837, 945, 769, 837, 945, 834, 945, 834, 837, + 913, 774, 913, 772, 913, 768, 913, 769, 913, + 837, 32, 787, 953, 32, 787, 32, 834, 168, + 834, 951, 768, 837, 951, 837, 951, 769, 837, + 951, 834, 951, 834, 837, 917, 768, 917, 769, + 919, 768, 919, 769, 919, 837, 8127, 768, 8127, + 769, 8127, 834, 953, 774, 953, 772, 953, 776, + 768, 953, 776, 769, 953, 834, 953, 776, 834, + 921, 774, 921, 772, 921, 768, 921, 769, 8190, + 768, 8190, 769, 8190, 834, 965, 774, 965, 772, + 965, 776, 768, 965, 776, 769, 961, 787, 961, + 788, 965, 834, 965, 776, 834, 933, 774, 933, + 772, 933, 768, 933, 769, 929, 788, 168, 768, + 168, 769, 96, 969, 768, 837, 969, 837, 969, + 769, 837, 969, 834, 969, 834, 837, 927, 768, + 927, 769, 937, 768, 937, 769, 937, 837, 180, + 32, 788, 8194, 8195, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 8208, 32, 819, 46, 46, + 46, 46, 46, 46, 32, 8242, 8242, 8242, 8242, + 8242, 8245, 8245, 8245, 8245, 8245, 33, 33, 32, + 773, 63, 63, 63, 33, 33, 63, 8242, 8242, + 8242, 8242, 32, 48, 105, 52, 53, 54, 55, + 56, 57, 43, 8722, 61, 40, 41, 110, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, + 43, 8722, 61, 40, 41, 97, 101, 111, 120, + 601, 104, 107, 108, 109, 110, 112, 115, 116, + 82, 115, 97, 47, 99, 97, 47, 115, 67, + 176, 67, 99, 47, 111, 99, 47, 117, 400, + 176, 70, 103, 72, 72, 72, 104, 295, 73, + 73, 76, 108, 78, 78, 111, 80, 81, 82, + 82, 82, 83, 77, 84, 69, 76, 84, 77, + 90, 937, 90, 75, 65, 778, 66, 67, 101, + 69, 70, 77, 111, 1488, 1489, 1490, 1491, 105, + 70, 65, 88, 960, 947, 915, 928, 8721, 68, + 100, 101, 105, 106, 49, 8260, 55, 49, 8260, + 57, 49, 8260, 49, 48, 49, 8260, 51, 50, + 8260, 51, 49, 8260, 53, 50, 8260, 53, 51, + 8260, 53, 52, 8260, 53, 49, 8260, 54, 53, + 8260, 54, 49, 8260, 56, 51, 8260, 56, 53, + 8260, 56, 55, 8260, 56, 49, 8260, 73, 73, + 73, 73, 73, 73, 73, 86, 86, 86, 73, + 86, 73, 73, 86, 73, 73, 73, 73, 88, + 88, 88, 73, 88, 73, 73, 76, 67, 68, + 77, 105, 105, 105, 105, 105, 105, 105, 118, + 118, 118, 105, 118, 105, 105, 118, 105, 105, + 105, 105, 120, 120, 120, 105, 120, 105, 105, + 108, 99, 100, 109, 48, 8260, 51, 8592, 824, + 8594, 824, 8596, 824, 8656, 824, 8660, 824, 8658, + 824, 8707, 824, 8712, 824, 8715, 824, 8739, 824, + 8741, 824, 8747, 8747, 8747, 8747, 8747, 8750, 8750, + 8750, 8750, 8750, 8764, 824, 8771, 824, 8773, 824, + 8776, 824, 61, 824, 8801, 824, 8781, 824, 60, + 824, 62, 824, 8804, 824, 8805, 824, 8818, 824, + 8819, 824, 8822, 824, 8823, 824, 8826, 824, 8827, + 824, 8834, 824, 8835, 824, 8838, 824, 8839, 824, + 8866, 824, 8872, 824, 8873, 824, 8875, 824, 8828, + 824, 8829, 824, 8849, 824, 8850, 824, 8882, 824, + 8883, 824, 8884, 824, 8885, 824, 12296, 12297, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 49, + 48, 49, 49, 49, 50, 49, 51, 49, 52, + 49, 53, 49, 54, 49, 55, 49, 56, 49, + 57, 50, 48, 40, 49, 41, 40, 50, 41, + 40, 51, 41, 40, 52, 41, 40, 53, 41, + 40, 54, 41, 40, 55, 41, 40, 56, 41, + 40, 57, 41, 40, 49, 48, 41, 40, 49, + 49, 41, 40, 49, 50, 41, 40, 49, 51, + 41, 40, 49, 52, 41, 40, 49, 53, 41, + 40, 49, 54, 41, 40, 49, 55, 41, 40, + 49, 56, 41, 40, 49, 57, 41, 40, 50, + 48, 41, 49, 46, 50, 46, 51, 46, 52, + 46, 53, 46, 54, 46, 55, 46, 56, 46, + 57, 46, 49, 48, 46, 49, 49, 46, 49, + 50, 46, 49, 51, 46, 49, 52, 46, 49, + 53, 46, 49, 54, 46, 49, 55, 46, 49, + 56, 46, 49, 57, 46, 50, 48, 46, 40, + 97, 41, 40, 98, 41, 40, 99, 41, 40, + 100, 41, 40, 101, 41, 40, 102, 41, 40, + 103, 41, 40, 104, 41, 40, 105, 41, 40, + 106, 41, 40, 107, 41, 40, 108, 41, 40, + 109, 41, 40, 110, 41, 40, 111, 41, 40, + 112, 41, 40, 113, 41, 40, 114, 41, 40, + 115, 41, 40, 116, 41, 40, 117, 41, 40, + 118, 41, 40, 119, 41, 40, 120, 41, 40, + 121, 41, 40, 122, 41, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 48, 8747, 8747, 8747, 8747, 58, + 58, 61, 61, 61, 61, 61, 61, 10973, 824, + 106, 86, 11617, 27597, 40863, 19968, 20008, 20022, 20031, + 20057, 20101, 20108, 20128, 20154, 20799, 20837, 20843, 20866, + 20886, 20907, 20960, 20981, 20992, 21147, 21241, 21269, 21274, + 21304, 21313, 21340, 21353, 21378, 21430, 21448, 21475, 22231, + 22303, 22763, 22786, 22794, 22805, 22823, 22899, 23376, 23424, + 23544, 23567, 23586, 23608, 23662, 23665, 24027, 24037, 24049, + 24062, 24178, 24186, 24191, 24308, 24318, 24331, 24339, 24400, + 24417, 24435, 24515, 25096, 25142, 25163, 25903, 25908, 25991, + 26007, 26020, 26041, 26080, 26085, 26352, 26376, 26408, 27424, + 27490, 27513, 27571, 27595, 27604, 27611, 27663, 27668, 27700, + 28779, 29226, 29238, 29243, 29247, 29255, 29273, 29275, 29356, + 29572, 29577, 29916, 29926, 29976, 29983, 29992, 30000, 30091, + 30098, 30326, 30333, 30382, 30399, 30446, 30683, 30690, 30707, + 31034, 31160, 31166, 31348, 31435, 31481, 31859, 31992, 32566, + 32593, 32650, 32701, 32769, 32780, 32786, 32819, 32895, 32905, + 33251, 33258, 33267, 33276, 33292, 33307, 33311, 33390, 33394, + 33400, 34381, 34411, 34880, 34892, 34915, 35198, 35211, 35282, + 35328, 35895, 35910, 35925, 35960, 35997, 36196, 36208, 36275, + 36523, 36554, 36763, 36784, 36789, 37009, 37193, 37318, 37324, + 37329, 38263, 38272, 38428, 38582, 38585, 38632, 38737, 38750, + 38754, 38761, 38859, 38893, 38899, 38913, 39080, 39131, 39135, + 39318, 39321, 39340, 39592, 39640, 39647, 39717, 39727, 39730, + 39740, 39770, 40165, 40565, 40575, 40613, 40635, 40643, 40653, + 40657, 40697, 40701, 40718, 40723, 40736, 40763, 40778, 40786, + 40845, 40860, 40864, 32, 12306, 21313, 21316, 21317, 12363, + 12441, 12365, 12441, 12367, 12441, 12369, 12441, 12371, 12441, + 12373, 12441, 12375, 12441, 12377, 12441, 12379, 12441, 12381, + 12441, 12383, 12441, 12385, 12441, 12388, 12441, 12390, 12441, + 12392, 12441, 12399, 12441, 12399, 12442, 12402, 12441, 12402, + 12442, 12405, 12441, 12405, 12442, 12408, 12441, 12408, 12442, + 12411, 12441, 12411, 12442, 12358, 12441, 32, 12441, 32, + 12442, 12445, 12441, 12424, 12426, 12459, 12441, 12461, 12441, + 12463, 12441, 12465, 12441, 12467, 12441, 12469, 12441, 12471, + 12441, 12473, 12441, 12475, 12441, 12477, 12441, 12479, 12441, + 12481, 12441, 12484, 12441, 12486, 12441, 12488, 12441, 12495, + 12441, 12495, 12442, 12498, 12441, 12498, 12442, 12501, 12441, + 12501, 12442, 12504, 12441, 12504, 12442, 12507, 12441, 12507, + 12442, 12454, 12441, 12527, 12441, 12528, 12441, 12529, 12441, + 12530, 12441, 12541, 12441, 12467, 12488, 4352, 4353, 4522, + 4354, 4524, 4525, 4355, 4356, 4357, 4528, 4529, 4530, + 4531, 4532, 4533, 4378, 4358, 4359, 4360, 4385, 4361, + 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, + 4449, 4450, 4451, 4452, 4453, 4454, 4455, 4456, 4457, + 4458, 4459, 4460, 4461, 4462, 4463, 4464, 4465, 4466, + 4467, 4468, 4469, 4448, 4372, 4373, 4551, 4552, 4556, + 4558, 4563, 4567, 4569, 4380, 4573, 4575, 4381, 4382, + 4384, 4386, 4387, 4391, 4393, 4395, 4396, 4397, 4398, + 4399, 4402, 4406, 4416, 4423, 4428, 4593, 4594, 4439, + 4440, 4441, 4484, 4485, 4488, 4497, 4498, 4500, 4510, + 4513, 19968, 20108, 19977, 22235, 19978, 20013, 19979, 30002, + 20057, 19993, 19969, 22825, 22320, 20154, 40, 4352, 41, + 40, 4354, 41, 40, 4355, 41, 40, 4357, 41, + 40, 4358, 41, 40, 4359, 41, 40, 4361, 41, + 40, 4363, 41, 40, 4364, 41, 40, 4366, 41, + 40, 4367, 41, 40, 4368, 41, 40, 4369, 41, + 40, 4370, 41, 40, 4352, 4449, 41, 40, 4354, + 4449, 41, 40, 4355, 4449, 41, 40, 4357, 4449, + 41, 40, 4358, 4449, 41, 40, 4359, 4449, 41, + 40, 4361, 4449, 41, 40, 4363, 4449, 41, 40, + 4364, 4449, 41, 40, 4366, 4449, 41, 40, 4367, + 4449, 41, 40, 4368, 4449, 41, 40, 4369, 4449, + 41, 40, 4370, 4449, 41, 40, 4364, 4462, 41, + 40, 4363, 4457, 4364, 4453, 4523, 41, 40, 4363, + 4457, 4370, 4462, 41, 40, 19968, 41, 40, 20108, + 41, 40, 19977, 41, 40, 22235, 41, 40, 20116, + 41, 40, 20845, 41, 40, 19971, 41, 40, 20843, + 41, 40, 20061, 41, 40, 21313, 41, 40, 26376, + 41, 40, 28779, 41, 40, 27700, 41, 40, 26408, + 41, 40, 37329, 41, 40, 22303, 41, 40, 26085, + 41, 40, 26666, 41, 40, 26377, 41, 40, 31038, + 41, 40, 21517, 41, 40, 29305, 41, 40, 36001, + 41, 40, 31069, 41, 40, 21172, 41, 40, 20195, + 41, 40, 21628, 41, 40, 23398, 41, 40, 30435, + 41, 40, 20225, 41, 40, 36039, 41, 40, 21332, + 41, 40, 31085, 41, 40, 20241, 41, 40, 33258, + 41, 40, 33267, 41, 21839, 24188, 25991, 31631, 80, + 84, 69, 50, 49, 50, 50, 50, 51, 50, + 52, 50, 53, 50, 54, 50, 55, 50, 56, + 50, 57, 51, 48, 51, 49, 51, 50, 51, + 51, 51, 52, 51, 53, 4352, 4354, 4355, 4357, + 4358, 4359, 4361, 4363, 4364, 4366, 4367, 4368, 4369, + 4370, 4352, 4449, 4354, 4449, 4355, 4449, 4357, 4449, + 4358, 4449, 4359, 4449, 4361, 4449, 4363, 4449, 4364, + 4449, 4366, 4449, 4367, 4449, 4368, 4449, 4369, 4449, + 4370, 4449, 4366, 4449, 4535, 4352, 4457, 4364, 4462, + 4363, 4468, 4363, 4462, 19968, 20108, 19977, 22235, 20116, + 20845, 19971, 20843, 20061, 21313, 26376, 28779, 27700, 26408, + 37329, 22303, 26085, 26666, 26377, 31038, 21517, 29305, 36001, + 31069, 21172, 31192, 30007, 22899, 36969, 20778, 21360, 27880, + 38917, 20241, 20889, 27491, 19978, 20013, 19979, 24038, 21491, + 21307, 23447, 23398, 30435, 20225, 36039, 21332, 22812, 51, + 54, 51, 55, 51, 56, 51, 57, 52, 48, + 52, 49, 52, 50, 52, 51, 52, 52, 52, + 53, 52, 54, 52, 55, 52, 56, 52, 57, + 53, 48, 49, 26376, 50, 26376, 51, 26376, 52, + 26376, 53, 26376, 54, 26376, 55, 26376, 56, 26376, + 57, 26376, 49, 48, 26376, 49, 49, 26376, 49, + 50, 26376, 72, 103, 101, 114, 103, 101, 86, + 76, 84, 68, 12450, 12452, 12454, 12456, 12458, 12459, + 12461, 12463, 12465, 12467, 12469, 12471, 12473, 12475, 12477, + 12479, 12481, 12484, 12486, 12488, 12490, 12491, 12492, 12493, + 12494, 12495, 12498, 12501, 12504, 12507, 12510, 12511, 12512, + 12513, 12514, 12516, 12518, 12520, 12521, 12522, 12523, 12524, + 12525, 12527, 12528, 12529, 12530, 20196, 21644, 12450, 12495, + 12442, 12540, 12488, 12450, 12523, 12501, 12449, 12450, 12531, + 12504, 12442, 12450, 12450, 12540, 12523, 12452, 12491, 12531, + 12463, 12441, 12452, 12531, 12481, 12454, 12457, 12531, 12456, + 12473, 12463, 12540, 12488, 12441, 12456, 12540, 12459, 12540, + 12458, 12531, 12473, 12458, 12540, 12512, 12459, 12452, 12522, + 12459, 12521, 12483, 12488, 12459, 12525, 12522, 12540, 12459, + 12441, 12525, 12531, 12459, 12441, 12531, 12510, 12461, 12441, + 12459, 12441, 12461, 12441, 12491, 12540, 12461, 12517, 12522, + 12540, 12461, 12441, 12523, 12479, 12441, 12540, 12461, 12525, + 12461, 12525, 12463, 12441, 12521, 12512, 12461, 12525, 12513, + 12540, 12488, 12523, 12461, 12525, 12527, 12483, 12488, 12463, + 12441, 12521, 12512, 12463, 12441, 12521, 12512, 12488, 12531, + 12463, 12523, 12475, 12441, 12452, 12525, 12463, 12525, 12540, + 12493, 12465, 12540, 12473, 12467, 12523, 12490, 12467, 12540, + 12507, 12442, 12469, 12452, 12463, 12523, 12469, 12531, 12481, + 12540, 12512, 12471, 12522, 12531, 12463, 12441, 12475, 12531, + 12481, 12475, 12531, 12488, 12479, 12441, 12540, 12473, 12486, + 12441, 12471, 12488, 12441, 12523, 12488, 12531, 12490, 12494, + 12494, 12483, 12488, 12495, 12452, 12484, 12495, 12442, 12540, + 12475, 12531, 12488, 12495, 12442, 12540, 12484, 12495, 12441, + 12540, 12524, 12523, 12498, 12442, 12450, 12473, 12488, 12523, + 12498, 12442, 12463, 12523, 12498, 12442, 12467, 12498, 12441, + 12523, 12501, 12449, 12521, 12483, 12488, 12441, 12501, 12451, + 12540, 12488, 12501, 12441, 12483, 12471, 12455, 12523, 12501, + 12521, 12531, 12504, 12463, 12479, 12540, 12523, 12504, 12442, + 12477, 12504, 12442, 12491, 12498, 12504, 12523, 12484, 12504, + 12442, 12531, 12473, 12504, 12442, 12540, 12471, 12441, 12504, + 12441, 12540, 12479, 12507, 12442, 12452, 12531, 12488, 12507, + 12441, 12523, 12488, 12507, 12531, 12507, 12442, 12531, 12488, + 12441, 12507, 12540, 12523, 12507, 12540, 12531, 12510, 12452, + 12463, 12525, 12510, 12452, 12523, 12510, 12483, 12495, 12510, + 12523, 12463, 12510, 12531, 12471, 12519, 12531, 12511, 12463, + 12525, 12531, 12511, 12522, 12511, 12522, 12495, 12441, 12540, + 12523, 12513, 12459, 12441, 12513, 12459, 12441, 12488, 12531, + 12513, 12540, 12488, 12523, 12516, 12540, 12488, 12441, 12516, + 12540, 12523, 12518, 12450, 12531, 12522, 12483, 12488, 12523, + 12522, 12521, 12523, 12498, 12442, 12540, 12523, 12540, 12501, + 12441, 12523, 12524, 12512, 12524, 12531, 12488, 12465, 12441, + 12531, 12527, 12483, 12488, 48, 28857, 49, 28857, 50, + 28857, 51, 28857, 52, 28857, 53, 28857, 54, 28857, + 55, 28857, 56, 28857, 57, 28857, 49, 48, 28857, + 49, 49, 28857, 49, 50, 28857, 49, 51, 28857, + 49, 52, 28857, 49, 53, 28857, 49, 54, 28857, + 49, 55, 28857, 49, 56, 28857, 49, 57, 28857, + 50, 48, 28857, 50, 49, 28857, 50, 50, 28857, + 50, 51, 28857, 50, 52, 28857, 104, 80, 97, + 100, 97, 65, 85, 98, 97, 114, 111, 86, + 112, 99, 100, 109, 100, 109, 50, 100, 109, + 51, 73, 85, 24179, 25104, 26157, 21644, 22823, 27491, + 26126, 27835, 26666, 24335, 20250, 31038, 112, 65, 110, + 65, 956, 65, 109, 65, 107, 65, 75, 66, + 77, 66, 71, 66, 99, 97, 108, 107, 99, + 97, 108, 112, 70, 110, 70, 956, 70, 956, + 103, 109, 103, 107, 103, 72, 122, 107, 72, + 122, 77, 72, 122, 71, 72, 122, 84, 72, + 122, 956, 108, 109, 108, 100, 108, 107, 108, + 102, 109, 110, 109, 956, 109, 109, 109, 99, + 109, 107, 109, 109, 109, 50, 99, 109, 50, + 109, 50, 107, 109, 50, 109, 109, 51, 99, + 109, 51, 109, 51, 107, 109, 51, 109, 8725, + 115, 109, 8725, 115, 50, 80, 97, 107, 80, + 97, 77, 80, 97, 71, 80, 97, 114, 97, + 100, 114, 97, 100, 8725, 115, 114, 97, 100, + 8725, 115, 50, 112, 115, 110, 115, 956, 115, + 109, 115, 112, 86, 110, 86, 956, 86, 109, + 86, 107, 86, 77, 86, 112, 87, 110, 87, + 956, 87, 109, 87, 107, 87, 77, 87, 107, + 937, 77, 937, 97, 46, 109, 46, 66, 113, + 99, 99, 99, 100, 67, 8725, 107, 103, 67, + 111, 46, 100, 66, 71, 121, 104, 97, 72, + 80, 105, 110, 75, 75, 75, 77, 107, 116, + 108, 109, 108, 110, 108, 111, 103, 108, 120, + 109, 98, 109, 105, 108, 109, 111, 108, 80, + 72, 112, 46, 109, 46, 80, 80, 77, 80, + 82, 115, 114, 83, 118, 87, 98, 86, 8725, + 109, 65, 8725, 109, 49, 26085, 50, 26085, 51, + 26085, 52, 26085, 53, 26085, 54, 26085, 55, 26085, + 56, 26085, 57, 26085, 49, 48, 26085, 49, 49, + 26085, 49, 50, 26085, 49, 51, 26085, 49, 52, + 26085, 49, 53, 26085, 49, 54, 26085, 49, 55, + 26085, 49, 56, 26085, 49, 57, 26085, 50, 48, + 26085, 50, 49, 26085, 50, 50, 26085, 50, 51, + 26085, 50, 52, 26085, 50, 53, 26085, 50, 54, + 26085, 50, 55, 26085, 50, 56, 26085, 50, 57, + 26085, 51, 48, 26085, 51, 49, 26085, 103, 97, + 108, 1098, 1100, 42863, 67, 70, 81, 294, 339, + 42791, 43831, 619, 43858, 653, 35912, 26356, 36554, 36040, + 28369, 20018, 21477, 40860, 40860, 22865, 37329, 21895, 22856, + 25078, 30313, 32645, 34367, 34746, 35064, 37007, 27138, 27931, + 28889, 29662, 33853, 37226, 39409, 20098, 21365, 27396, 29211, + 34349, 40478, 23888, 28651, 34253, 35172, 25289, 33240, 34847, + 24266, 26391, 28010, 29436, 37070, 20358, 20919, 21214, 25796, + 27347, 29200, 30439, 32769, 34310, 34396, 36335, 38706, 39791, + 40442, 30860, 31103, 32160, 33737, 37636, 40575, 35542, 22751, + 24324, 31840, 32894, 29282, 30922, 36034, 38647, 22744, 23650, + 27155, 28122, 28431, 32047, 32311, 38475, 21202, 32907, 20956, + 20940, 31260, 32190, 33777, 38517, 35712, 25295, 27138, 35582, + 20025, 23527, 24594, 29575, 30064, 21271, 30971, 20415, 24489, + 19981, 27852, 25976, 32034, 21443, 22622, 30465, 33865, 35498, + 27578, 36784, 27784, 25342, 33509, 25504, 30053, 20142, 20841, + 20937, 26753, 31975, 33391, 35538, 37327, 21237, 21570, 22899, + 24300, 26053, 28670, 31018, 38317, 39530, 40599, 40654, 21147, + 26310, 27511, 36706, 24180, 24976, 25088, 25754, 28451, 29001, + 29833, 31178, 32244, 32879, 36646, 34030, 36899, 37706, 21015, + 21155, 21693, 28872, 35010, 35498, 24265, 24565, 25467, 27566, + 31806, 29557, 20196, 22265, 23527, 23994, 24604, 29618, 29801, + 32666, 32838, 37428, 38646, 38728, 38936, 20363, 31150, 37300, + 38584, 24801, 20102, 20698, 23534, 23615, 26009, 27138, 29134, + 30274, 34044, 36988, 40845, 26248, 38446, 21129, 26491, 26611, + 27969, 28316, 29705, 30041, 30827, 32016, 39006, 20845, 25134, + 38520, 20523, 23833, 28138, 36650, 24459, 24900, 26647, 29575, + 38534, 21033, 21519, 23653, 26131, 26446, 26792, 27877, 29702, + 30178, 32633, 35023, 35041, 37324, 38626, 21311, 28346, 21533, + 29136, 29848, 34298, 38563, 40023, 40607, 26519, 28107, 33256, + 31435, 31520, 31890, 29376, 28825, 35672, 20160, 33590, 21050, + 20999, 24230, 25299, 31958, 23429, 27934, 26292, 36667, 34892, + 38477, 35211, 24275, 20800, 21952, 22618, 26228, 20958, 29482, + 30410, 31036, 31070, 31077, 31119, 38742, 31934, 32701, 34322, + 35576, 36920, 37117, 39151, 39164, 39208, 40372, 37086, 38583, + 20398, 20711, 20813, 21193, 21220, 21329, 21917, 22022, 22120, + 22592, 22696, 23652, 23662, 24724, 24936, 24974, 25074, 25935, + 26082, 26257, 26757, 28023, 28186, 28450, 29038, 29227, 29730, + 30865, 31038, 31049, 31048, 31056, 31062, 31069, 31117, 31118, + 31296, 31361, 31680, 32244, 32265, 32321, 32626, 32773, 33261, + 33401, 33401, 33879, 35088, 35222, 35585, 35641, 36051, 36104, + 36790, 36920, 38627, 38911, 38971, 24693, 148206, 33304, 20006, + 20917, 20840, 20352, 20805, 20864, 21191, 21242, 21917, 21845, + 21913, 21986, 22618, 22707, 22852, 22868, 23138, 23336, 24274, + 24281, 24425, 24493, 24792, 24910, 24840, 24974, 24928, 25074, + 25140, 25540, 25628, 25682, 25942, 26228, 26391, 26395, 26454, + 27513, 27578, 27969, 28379, 28363, 28450, 28702, 29038, 30631, + 29237, 29359, 29482, 29809, 29958, 30011, 30237, 30239, 30410, + 30427, 30452, 30538, 30528, 30924, 31409, 31680, 31867, 32091, + 32244, 32574, 32773, 33618, 33775, 34681, 35137, 35206, 35222, + 35519, 35576, 35531, 35585, 35582, 35565, 35641, 35722, 36104, + 36664, 36978, 37273, 37494, 38524, 38627, 38742, 38875, 38911, + 38923, 38971, 39698, 40860, 141386, 141380, 144341, 15261, 16408, + 16441, 152137, 154832, 163539, 40771, 40846, 102, 102, 102, + 105, 102, 108, 102, 102, 105, 102, 102, 108, + 115, 116, 115, 116, 1396, 1398, 1396, 1381, 1396, + 1387, 1406, 1398, 1396, 1389, 1497, 1460, 1522, 1463, + 1506, 1488, 1491, 1492, 1499, 1500, 1501, 1512, 1514, + 43, 1513, 1473, 1513, 1474, 1513, 1468, 1473, 1513, + 1468, 1474, 1488, 1463, 1488, 1464, 1488, 1468, 1489, + 1468, 1490, 1468, 1491, 1468, 1492, 1468, 1493, 1468, + 1494, 1468, 1496, 1468, 1497, 1468, 1498, 1468, 1499, + 1468, 1500, 1468, 1502, 1468, 1504, 1468, 1505, 1468, + 1507, 1468, 1508, 1468, 1510, 1468, 1511, 1468, 1512, + 1468, 1513, 1468, 1514, 1468, 1493, 1465, 1489, 1471, + 1499, 1471, 1508, 1471, 1488, 1500, 1649, 1649, 1659, + 1659, 1659, 1659, 1662, 1662, 1662, 1662, 1664, 1664, + 1664, 1664, 1658, 1658, 1658, 1658, 1663, 1663, 1663, + 1663, 1657, 1657, 1657, 1657, 1700, 1700, 1700, 1700, + 1702, 1702, 1702, 1702, 1668, 1668, 1668, 1668, 1667, + 1667, 1667, 1667, 1670, 1670, 1670, 1670, 1671, 1671, + 1671, 1671, 1677, 1677, 1676, 1676, 1678, 1678, 1672, + 1672, 1688, 1688, 1681, 1681, 1705, 1705, 1705, 1705, + 1711, 1711, 1711, 1711, 1715, 1715, 1715, 1715, 1713, + 1713, 1713, 1713, 1722, 1722, 1723, 1723, 1723, 1723, + 1749, 1620, 1749, 1620, 1729, 1729, 1729, 1729, 1726, + 1726, 1726, 1726, 1746, 1746, 1746, 1620, 1746, 1620, + 1709, 1709, 1709, 1709, 1735, 1735, 1734, 1734, 1736, + 1736, 1735, 1652, 1739, 1739, 1733, 1733, 1737, 1737, + 1744, 1744, 1744, 1744, 1609, 1609, 1610, 1620, 1575, + 1610, 1620, 1575, 1610, 1620, 1749, 1610, 1620, 1749, + 1610, 1620, 1608, 1610, 1620, 1608, 1610, 1620, 1735, + 1610, 1620, 1735, 1610, 1620, 1734, 1610, 1620, 1734, + 1610, 1620, 1736, 1610, 1620, 1736, 1610, 1620, 1744, + 1610, 1620, 1744, 1610, 1620, 1744, 1610, 1620, 1609, + 1610, 1620, 1609, 1610, 1620, 1609, 1740, 1740, 1740, + 1740, 1610, 1620, 1580, 1610, 1620, 1581, 1610, 1620, + 1605, 1610, 1620, 1609, 1610, 1620, 1610, 1576, 1580, + 1576, 1581, 1576, 1582, 1576, 1605, 1576, 1609, 1576, + 1610, 1578, 1580, 1578, 1581, 1578, 1582, 1578, 1605, + 1578, 1609, 1578, 1610, 1579, 1580, 1579, 1605, 1579, + 1609, 1579, 1610, 1580, 1581, 1580, 1605, 1581, 1580, + 1581, 1605, 1582, 1580, 1582, 1581, 1582, 1605, 1587, + 1580, 1587, 1581, 1587, 1582, 1587, 1605, 1589, 1581, + 1589, 1605, 1590, 1580, 1590, 1581, 1590, 1582, 1590, + 1605, 1591, 1581, 1591, 1605, 1592, 1605, 1593, 1580, + 1593, 1605, 1594, 1580, 1594, 1605, 1601, 1580, 1601, + 1581, 1601, 1582, 1601, 1605, 1601, 1609, 1601, 1610, + 1602, 1581, 1602, 1605, 1602, 1609, 1602, 1610, 1603, + 1575, 1603, 1580, 1603, 1581, 1603, 1582, 1603, 1604, + 1603, 1605, 1603, 1609, 1603, 1610, 1604, 1580, 1604, + 1581, 1604, 1582, 1604, 1605, 1604, 1609, 1604, 1610, + 1605, 1580, 1605, 1581, 1605, 1582, 1605, 1605, 1605, + 1609, 1605, 1610, 1606, 1580, 1606, 1581, 1606, 1582, + 1606, 1605, 1606, 1609, 1606, 1610, 1607, 1580, 1607, + 1605, 1607, 1609, 1607, 1610, 1610, 1580, 1610, 1581, + 1610, 1582, 1610, 1605, 1610, 1609, 1610, 1610, 1584, + 1648, 1585, 1648, 1609, 1648, 32, 1612, 1617, 32, + 1613, 1617, 32, 1614, 1617, 32, 1615, 1617, 32, + 1616, 1617, 32, 1617, 1648, 1610, 1620, 1585, 1610, + 1620, 1586, 1610, 1620, 1605, 1610, 1620, 1606, 1610, + 1620, 1609, 1610, 1620, 1610, 1576, 1585, 1576, 1586, + 1576, 1605, 1576, 1606, 1576, 1609, 1576, 1610, 1578, + 1585, 1578, 1586, 1578, 1605, 1578, 1606, 1578, 1609, + 1578, 1610, 1579, 1585, 1579, 1586, 1579, 1605, 1579, + 1606, 1579, 1609, 1579, 1610, 1601, 1609, 1601, 1610, + 1602, 1609, 1602, 1610, 1603, 1575, 1603, 1604, 1603, + 1605, 1603, 1609, 1603, 1610, 1604, 1605, 1604, 1609, + 1604, 1610, 1605, 1575, 1605, 1605, 1606, 1585, 1606, + 1586, 1606, 1605, 1606, 1606, 1606, 1609, 1606, 1610, + 1609, 1648, 1610, 1585, 1610, 1586, 1610, 1605, 1610, + 1606, 1610, 1609, 1610, 1610, 1610, 1620, 1580, 1610, + 1620, 1581, 1610, 1620, 1582, 1610, 1620, 1605, 1610, + 1620, 1607, 1576, 1580, 1576, 1581, 1576, 1582, 1576, + 1605, 1576, 1607, 1578, 1580, 1578, 1581, 1578, 1582, + 1578, 1605, 1578, 1607, 1579, 1605, 1580, 1581, 1580, + 1605, 1581, 1580, 1581, 1605, 1582, 1580, 1582, 1605, + 1587, 1580, 1587, 1581, 1587, 1582, 1587, 1605, 1589, + 1581, 1589, 1582, 1589, 1605, 1590, 1580, 1590, 1581, + 1590, 1582, 1590, 1605, 1591, 1581, 1592, 1605, 1593, + 1580, 1593, 1605, 1594, 1580, 1594, 1605, 1601, 1580, + 1601, 1581, 1601, 1582, 1601, 1605, 1602, 1581, 1602, + 1605, 1603, 1580, 1603, 1581, 1603, 1582, 1603, 1604, + 1603, 1605, 1604, 1580, 1604, 1581, 1604, 1582, 1604, + 1605, 1604, 1607, 1605, 1580, 1605, 1581, 1605, 1582, + 1605, 1605, 1606, 1580, 1606, 1581, 1606, 1582, 1606, + 1605, 1606, 1607, 1607, 1580, 1607, 1605, 1607, 1648, + 1610, 1580, 1610, 1581, 1610, 1582, 1610, 1605, 1610, + 1607, 1610, 1620, 1605, 1610, 1620, 1607, 1576, 1605, + 1576, 1607, 1578, 1605, 1578, 1607, 1579, 1605, 1579, + 1607, 1587, 1605, 1587, 1607, 1588, 1605, 1588, 1607, + 1603, 1604, 1603, 1605, 1604, 1605, 1606, 1605, 1606, + 1607, 1610, 1605, 1610, 1607, 1600, 1614, 1617, 1600, + 1615, 1617, 1600, 1616, 1617, 1591, 1609, 1591, 1610, + 1593, 1609, 1593, 1610, 1594, 1609, 1594, 1610, 1587, + 1609, 1587, 1610, 1588, 1609, 1588, 1610, 1581, 1609, + 1581, 1610, 1580, 1609, 1580, 1610, 1582, 1609, 1582, + 1610, 1589, 1609, 1589, 1610, 1590, 1609, 1590, 1610, + 1588, 1580, 1588, 1581, 1588, 1582, 1588, 1605, 1588, + 1585, 1587, 1585, 1589, 1585, 1590, 1585, 1591, 1609, + 1591, 1610, 1593, 1609, 1593, 1610, 1594, 1609, 1594, + 1610, 1587, 1609, 1587, 1610, 1588, 1609, 1588, 1610, + 1581, 1609, 1581, 1610, 1580, 1609, 1580, 1610, 1582, + 1609, 1582, 1610, 1589, 1609, 1589, 1610, 1590, 1609, + 1590, 1610, 1588, 1580, 1588, 1581, 1588, 1582, 1588, + 1605, 1588, 1585, 1587, 1585, 1589, 1585, 1590, 1585, + 1588, 1580, 1588, 1581, 1588, 1582, 1588, 1605, 1587, + 1607, 1588, 1607, 1591, 1605, 1587, 1580, 1587, 1581, + 1587, 1582, 1588, 1580, 1588, 1581, 1588, 1582, 1591, + 1605, 1592, 1605, 1575, 1611, 1575, 1611, 1578, 1580, + 1605, 1578, 1581, 1580, 1578, 1581, 1580, 1578, 1581, + 1605, 1578, 1582, 1605, 1578, 1605, 1580, 1578, 1605, + 1581, 1578, 1605, 1582, 1580, 1605, 1581, 1580, 1605, + 1581, 1581, 1605, 1610, 1581, 1605, 1609, 1587, 1581, + 1580, 1587, 1580, 1581, 1587, 1580, 1609, 1587, 1605, + 1581, 1587, 1605, 1581, 1587, 1605, 1580, 1587, 1605, + 1605, 1587, 1605, 1605, 1589, 1581, 1581, 1589, 1581, + 1581, 1589, 1605, 1605, 1588, 1581, 1605, 1588, 1581, + 1605, 1588, 1580, 1610, 1588, 1605, 1582, 1588, 1605, + 1582, 1588, 1605, 1605, 1588, 1605, 1605, 1590, 1581, + 1609, 1590, 1582, 1605, 1590, 1582, 1605, 1591, 1605, + 1581, 1591, 1605, 1581, 1591, 1605, 1605, 1591, 1605, + 1610, 1593, 1580, 1605, 1593, 1605, 1605, 1593, 1605, + 1605, 1593, 1605, 1609, 1594, 1605, 1605, 1594, 1605, + 1610, 1594, 1605, 1609, 1601, 1582, 1605, 1601, 1582, + 1605, 1602, 1605, 1581, 1602, 1605, 1605, 1604, 1581, + 1605, 1604, 1581, 1610, 1604, 1581, 1609, 1604, 1580, + 1580, 1604, 1580, 1580, 1604, 1582, 1605, 1604, 1582, + 1605, 1604, 1605, 1581, 1604, 1605, 1581, 1605, 1581, + 1580, 1605, 1581, 1605, 1605, 1581, 1610, 1605, 1580, + 1581, 1605, 1580, 1605, 1605, 1582, 1580, 1605, 1582, + 1605, 1605, 1580, 1582, 1607, 1605, 1580, 1607, 1605, + 1605, 1606, 1581, 1605, 1606, 1581, 1609, 1606, 1580, + 1605, 1606, 1580, 1605, 1606, 1580, 1609, 1606, 1605, + 1610, 1606, 1605, 1609, 1610, 1605, 1605, 1610, 1605, + 1605, 1576, 1582, 1610, 1578, 1580, 1610, 1578, 1580, + 1609, 1578, 1582, 1610, 1578, 1582, 1609, 1578, 1605, + 1610, 1578, 1605, 1609, 1580, 1605, 1610, 1580, 1581, + 1609, 1580, 1605, 1609, 1587, 1582, 1609, 1589, 1581, + 1610, 1588, 1581, 1610, 1590, 1581, 1610, 1604, 1580, + 1610, 1604, 1605, 1610, 1610, 1581, 1610, 1610, 1580, + 1610, 1610, 1605, 1610, 1605, 1605, 1610, 1602, 1605, + 1610, 1606, 1581, 1610, 1602, 1605, 1581, 1604, 1581, + 1605, 1593, 1605, 1610, 1603, 1605, 1610, 1606, 1580, + 1581, 1605, 1582, 1610, 1604, 1580, 1605, 1603, 1605, + 1605, 1604, 1580, 1605, 1606, 1580, 1581, 1580, 1581, + 1610, 1581, 1580, 1610, 1605, 1580, 1610, 1601, 1605, + 1610, 1576, 1581, 1610, 1603, 1605, 1605, 1593, 1580, + 1605, 1589, 1605, 1605, 1587, 1582, 1610, 1606, 1580, + 1610, 1589, 1604, 1746, 1602, 1604, 1746, 1575, 1604, + 1604, 1607, 1575, 1603, 1576, 1585, 1605, 1581, 1605, + 1583, 1589, 1604, 1593, 1605, 1585, 1587, 1608, 1604, + 1593, 1604, 1610, 1607, 1608, 1587, 1604, 1605, 1589, + 1604, 1609, 1589, 1604, 1609, 32, 1575, 1604, 1604, + 1607, 32, 1593, 1604, 1610, 1607, 32, 1608, 1587, + 1604, 1605, 1580, 1604, 32, 1580, 1604, 1575, 1604, + 1607, 1585, 1740, 1575, 1604, 44, 12289, 12290, 58, + 59, 33, 63, 12310, 12311, 46, 46, 46, 46, + 46, 8212, 8211, 95, 95, 40, 41, 123, 125, + 12308, 12309, 12304, 12305, 12298, 12299, 12296, 12297, 12300, + 12301, 12302, 12303, 91, 93, 32, 773, 32, 773, + 32, 773, 32, 773, 95, 95, 95, 44, 12289, + 46, 59, 58, 63, 33, 8212, 40, 41, 123, + 125, 12308, 12309, 35, 38, 42, 43, 45, 60, + 62, 61, 92, 36, 37, 64, 32, 1611, 1600, + 1611, 32, 1612, 32, 1613, 32, 1614, 1600, 1614, + 32, 1615, 1600, 1615, 32, 1616, 1600, 1616, 32, + 1617, 1600, 1617, 32, 1618, 1600, 1618, 1569, 1575, + 1619, 1575, 1619, 1575, 1620, 1575, 1620, 1608, 1620, + 1608, 1620, 1575, 1621, 1575, 1621, 1610, 1620, 1610, + 1620, 1610, 1620, 1610, 1620, 1575, 1575, 1576, 1576, + 1576, 1576, 1577, 1577, 1578, 1578, 1578, 1578, 1579, + 1579, 1579, 1579, 1580, 1580, 1580, 1580, 1581, 1581, + 1581, 1581, 1582, 1582, 1582, 1582, 1583, 1583, 1584, + 1584, 1585, 1585, 1586, 1586, 1587, 1587, 1587, 1587, + 1588, 1588, 1588, 1588, 1589, 1589, 1589, 1589, 1590, + 1590, 1590, 1590, 1591, 1591, 1591, 1591, 1592, 1592, + 1592, 1592, 1593, 1593, 1593, 1593, 1594, 1594, 1594, + 1594, 1601, 1601, 1601, 1601, 1602, 1602, 1602, 1602, + 1603, 1603, 1603, 1603, 1604, 1604, 1604, 1604, 1605, + 1605, 1605, 1605, 1606, 1606, 1606, 1606, 1607, 1607, + 1607, 1607, 1608, 1608, 1609, 1609, 1610, 1610, 1610, + 1610, 1604, 1575, 1619, 1604, 1575, 1619, 1604, 1575, + 1620, 1604, 1575, 1620, 1604, 1575, 1621, 1604, 1575, + 1621, 1604, 1575, 1604, 1575, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, + 10629, 10630, 12290, 12300, 12301, 12289, 12539, 12530, 12449, + 12451, 12453, 12455, 12457, 12515, 12517, 12519, 12483, 12540, + 12450, 12452, 12454, 12456, 12458, 12459, 12461, 12463, 12465, + 12467, 12469, 12471, 12473, 12475, 12477, 12479, 12481, 12484, + 12486, 12488, 12490, 12491, 12492, 12493, 12494, 12495, 12498, + 12501, 12504, 12507, 12510, 12511, 12512, 12513, 12514, 12516, + 12518, 12520, 12521, 12522, 12523, 12524, 12525, 12527, 12531, + 12441, 12442, 4448, 4352, 4353, 4522, 4354, 4524, 4525, + 4355, 4356, 4357, 4528, 4529, 4530, 4531, 4532, 4533, + 4378, 4358, 4359, 4360, 4385, 4361, 4362, 4363, 4364, + 4365, 4366, 4367, 4368, 4369, 4370, 4449, 4450, 4451, + 4452, 4453, 4454, 4455, 4456, 4457, 4458, 4459, 4460, + 4461, 4462, 4463, 4464, 4465, 4466, 4467, 4468, 4469, + 162, 163, 172, 32, 772, 166, 165, 8361, 9474, + 8592, 8593, 8594, 8595, 9632, 9675, 720, 721, 230, + 665, 595, 675, 43878, 677, 676, 598, 599, 7569, + 600, 606, 681, 612, 610, 608, 667, 295, 668, + 615, 644, 682, 683, 620, 122628, 42894, 622, 122629, + 654, 122630, 248, 630, 631, 113, 634, 122632, 637, + 638, 640, 680, 678, 43879, 679, 648, 11377, 655, + 673, 674, 664, 448, 449, 450, 122634, 122654, 69785, + 69818, 69787, 69818, 69797, 69818, 69937, 69927, 69938, 69927, + 70471, 70462, 70471, 70487, 70841, 70842, 70841, 70832, 70841, + 70845, 71096, 71087, 71097, 71087, 71989, 71984, 119127, 119141, + 119128, 119141, 119128, 119141, 119150, 119128, 119141, 119151, 119128, + 119141, 119152, 119128, 119141, 119153, 119128, 119141, 119154, 119225, + 119141, 119226, 119141, 119225, 119141, 119150, 119226, 119141, 119150, + 119225, 119141, 119151, 119226, 119141, 119151, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 97, 98, 99, 100, 101, 102, + 103, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, + 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 65, + 67, 68, 71, 74, 75, 78, 79, 80, 81, + 83, 84, 85, 86, 87, 88, 89, 90, 97, + 98, 99, 100, 102, 104, 105, 106, 107, 108, + 109, 110, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 65, 66, 68, 69, 70, 71, 74, + 75, 76, 77, 78, 79, 80, 81, 83, 84, + 85, 86, 87, 88, 89, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 65, 66, 68, 69, 70, + 71, 73, 74, 75, 76, 77, 79, 83, 84, + 85, 86, 87, 88, 89, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, + 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 305, 567, 913, 914, 915, 916, 917, 918, + 919, 920, 921, 922, 923, 924, 925, 926, 927, + 928, 929, 920, 931, 932, 933, 934, 935, 936, + 937, 8711, 945, 946, 947, 948, 949, 950, 951, + 952, 953, 954, 955, 956, 957, 958, 959, 960, + 961, 962, 963, 964, 965, 966, 967, 968, 969, + 8706, 949, 952, 954, 966, 961, 960, 913, 914, + 915, 916, 917, 918, 919, 920, 921, 922, 923, + 924, 925, 926, 927, 928, 929, 920, 931, 932, + 933, 934, 935, 936, 937, 8711, 945, 946, 947, + 948, 949, 950, 951, 952, 953, 954, 955, 956, + 957, 958, 959, 960, 961, 962, 963, 964, 965, + 966, 967, 968, 969, 8706, 949, 952, 954, 966, + 961, 960, 913, 914, 915, 916, 917, 918, 919, + 920, 921, 922, 923, 924, 925, 926, 927, 928, + 929, 920, 931, 932, 933, 934, 935, 936, 937, + 8711, 945, 946, 947, 948, 949, 950, 951, 952, + 953, 954, 955, 956, 957, 958, 959, 960, 961, + 962, 963, 964, 965, 966, 967, 968, 969, 8706, + 949, 952, 954, 966, 961, 960, 913, 914, 915, + 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 927, 928, 929, 920, 931, 932, 933, + 934, 935, 936, 937, 8711, 945, 946, 947, 948, + 949, 950, 951, 952, 953, 954, 955, 956, 957, + 958, 959, 960, 961, 962, 963, 964, 965, 966, + 967, 968, 969, 8706, 949, 952, 954, 966, 961, + 960, 913, 914, 915, 916, 917, 918, 919, 920, + 921, 922, 923, 924, 925, 926, 927, 928, 929, + 920, 931, 932, 933, 934, 935, 936, 937, 8711, + 945, 946, 947, 948, 949, 950, 951, 952, 953, + 954, 955, 956, 957, 958, 959, 960, 961, 962, + 963, 964, 965, 966, 967, 968, 969, 8706, 949, + 952, 954, 966, 961, 960, 988, 989, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, + 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 1072, 1073, 1074, 1075, 1076, 1077, + 1078, 1079, 1080, 1082, 1083, 1084, 1086, 1087, 1088, + 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1099, + 1101, 1102, 42633, 1241, 1110, 1112, 1257, 1199, 1231, + 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, + 1082, 1083, 1086, 1087, 1089, 1091, 1092, 1093, 1094, + 1095, 1096, 1098, 1099, 1169, 1110, 1109, 1119, 1195, + 42577, 1201, 1575, 1576, 1580, 1583, 1608, 1586, 1581, + 1591, 1610, 1603, 1604, 1605, 1606, 1587, 1593, 1601, + 1589, 1602, 1585, 1588, 1578, 1579, 1582, 1584, 1590, + 1592, 1594, 1646, 1722, 1697, 1647, 1576, 1580, 1607, + 1581, 1610, 1603, 1604, 1605, 1606, 1587, 1593, 1601, + 1589, 1602, 1588, 1578, 1579, 1582, 1590, 1594, 1580, + 1581, 1610, 1604, 1606, 1587, 1593, 1589, 1602, 1588, + 1582, 1590, 1594, 1722, 1647, 1576, 1580, 1607, 1581, + 1591, 1610, 1603, 1605, 1606, 1587, 1593, 1601, 1589, + 1602, 1588, 1578, 1579, 1582, 1590, 1592, 1594, 1646, + 1697, 1575, 1576, 1580, 1583, 1607, 1608, 1586, 1581, + 1591, 1610, 1604, 1605, 1606, 1587, 1593, 1601, 1589, + 1602, 1585, 1588, 1578, 1579, 1582, 1584, 1590, 1592, + 1594, 1576, 1580, 1583, 1608, 1586, 1581, 1591, 1610, + 1604, 1605, 1606, 1587, 1593, 1601, 1589, 1602, 1585, + 1588, 1578, 1579, 1582, 1584, 1590, 1592, 1594, 48, + 46, 48, 44, 49, 44, 50, 44, 51, 44, + 52, 44, 53, 44, 54, 44, 55, 44, 56, + 44, 57, 44, 40, 65, 41, 40, 66, 41, + 40, 67, 41, 40, 68, 41, 40, 69, 41, + 40, 70, 41, 40, 71, 41, 40, 72, 41, + 40, 73, 41, 40, 74, 41, 40, 75, 41, + 40, 76, 41, 40, 77, 41, 40, 78, 41, + 40, 79, 41, 40, 80, 41, 40, 81, 41, + 40, 82, 41, 40, 83, 41, 40, 84, 41, + 40, 85, 41, 40, 86, 41, 40, 87, 41, + 40, 88, 41, 40, 89, 41, 40, 90, 41, + 12308, 83, 12309, 67, 82, 67, 68, 87, 90, + 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 72, + 86, 77, 86, 83, 68, 83, 83, 80, 80, + 86, 87, 67, 77, 67, 77, 68, 77, 82, + 68, 74, 12411, 12363, 12467, 12467, 12469, 25163, 23383, + 21452, 12486, 12441, 20108, 22810, 35299, 22825, 20132, 26144, + 28961, 26009, 21069, 24460, 20877, 26032, 21021, 32066, 29983, + 36009, 22768, 21561, 28436, 25237, 25429, 19968, 19977, 36938, + 24038, 20013, 21491, 25351, 36208, 25171, 31105, 31354, 21512, + 28288, 26377, 26376, 30003, 21106, 21942, 37197, 12308, 26412, + 12309, 12308, 19977, 12309, 12308, 20108, 12309, 12308, 23433, + 12309, 12308, 28857, 12309, 12308, 25171, 12309, 12308, 30423, + 12309, 12308, 21213, 12309, 12308, 25943, 12309, 24471, 21487, + 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 20029, 20024, 20033, 131362, 20320, 20398, 20411, 20482, + 20602, 20633, 20711, 20687, 13470, 132666, 20813, 20820, 20836, + 20855, 132380, 13497, 20839, 20877, 132427, 20887, 20900, 20172, + 20908, 20917, 168415, 20981, 20995, 13535, 21051, 21062, 21106, + 21111, 13589, 21191, 21193, 21220, 21242, 21253, 21254, 21271, + 21321, 21329, 21338, 21363, 21373, 21375, 21375, 21375, 133676, + 28784, 21450, 21471, 133987, 21483, 21489, 21510, 21662, 21560, + 21576, 21608, 21666, 21750, 21776, 21843, 21859, 21892, 21892, + 21913, 21931, 21939, 21954, 22294, 22022, 22295, 22097, 22132, + 20999, 22766, 22478, 22516, 22541, 22411, 22578, 22577, 22700, + 136420, 22770, 22775, 22790, 22810, 22818, 22882, 136872, 136938, + 23020, 23067, 23079, 23000, 23142, 14062, 14076, 23304, 23358, + 23358, 137672, 23491, 23512, 23527, 23539, 138008, 23551, 23558, + 24403, 23586, 14209, 23648, 23662, 23744, 23693, 138724, 23875, + 138726, 23918, 23915, 23932, 24033, 24034, 14383, 24061, 24104, + 24125, 24169, 14434, 139651, 14460, 24240, 24243, 24246, 24266, + 172946, 24318, 140081, 140081, 33281, 24354, 24354, 14535, 144056, + 156122, 24418, 24427, 14563, 24474, 24525, 24535, 24569, 24705, + 14650, 14620, 24724, 141012, 24775, 24904, 24908, 24910, 24908, + 24954, 24974, 25010, 24996, 25007, 25054, 25074, 25078, 25104, + 25115, 25181, 25265, 25300, 25424, 142092, 25405, 25340, 25448, + 25475, 25572, 142321, 25634, 25541, 25513, 14894, 25705, 25726, + 25757, 25719, 14956, 25935, 25964, 143370, 26083, 26360, 26185, + 15129, 26257, 15112, 15076, 20882, 20885, 26368, 26268, 32941, + 17369, 26391, 26395, 26401, 26462, 26451, 144323, 15177, 26618, + 26501, 26706, 26757, 144493, 26766, 26655, 26900, 15261, 26946, + 27043, 27114, 27304, 145059, 27355, 15384, 27425, 145575, 27476, + 15438, 27506, 27551, 27578, 27579, 146061, 138507, 146170, 27726, + 146620, 27839, 27853, 27751, 27926, 27966, 28023, 27969, 28009, + 28024, 28037, 146718, 27956, 28207, 28270, 15667, 28363, 28359, + 147153, 28153, 28526, 147294, 147342, 28614, 28729, 28702, 28699, + 15766, 28746, 28797, 28791, 28845, 132389, 28997, 148067, 29084, + 148395, 29224, 29237, 29264, 149000, 29312, 29333, 149301, 149524, + 29562, 29579, 16044, 29605, 16056, 16056, 29767, 29788, 29809, + 29829, 29898, 16155, 29988, 150582, 30014, 150674, 30064, 139679, + 30224, 151457, 151480, 151620, 16380, 16392, 30452, 151795, 151794, + 151833, 151859, 30494, 30495, 30495, 30538, 16441, 30603, 16454, + 16534, 152605, 30798, 30860, 30924, 16611, 153126, 31062, 153242, + 153285, 31119, 31211, 16687, 31296, 31306, 31311, 153980, 154279, + 154279, 31470, 16898, 154539, 31686, 31689, 16935, 154752, 31954, + 17056, 31976, 31971, 32000, 155526, 32099, 17153, 32199, 32258, + 32325, 17204, 156200, 156231, 17241, 156377, 32634, 156478, 32661, + 32762, 32773, 156890, 156963, 32864, 157096, 32880, 144223, 17365, + 32946, 33027, 17419, 33086, 23221, 157607, 157621, 144275, 144284, + 33281, 33284, 36766, 17515, 33425, 33419, 33437, 21171, 33457, + 33459, 33469, 33510, 158524, 33509, 33565, 33635, 33709, 33571, + 33725, 33767, 33879, 33619, 33738, 33740, 33756, 158774, 159083, + 158933, 17707, 34033, 34035, 34070, 160714, 34148, 159532, 17757, + 17761, 159665, 159954, 17771, 34384, 34396, 34407, 34409, 34473, + 34440, 34574, 34530, 34681, 34600, 34667, 34694, 17879, 34785, + 34817, 17913, 34912, 34915, 161383, 35031, 35038, 17973, 35066, + 13499, 161966, 162150, 18110, 18119, 35488, 35565, 35722, 35925, + 162984, 36011, 36033, 36123, 36215, 163631, 133124, 36299, 36284, + 36336, 133342, 36564, 36664, 165330, 165357, 37012, 37105, 37137, + 165678, 37147, 37432, 37591, 37592, 37500, 37881, 37909, 166906, + 38283, 18837, 38327, 167287, 18918, 38595, 23986, 38691, 168261, + 168474, 19054, 19062, 38880, 168970, 19122, 169110, 38923, 38923, + 38953, 169398, 39138, 19251, 39209, 39335, 39362, 39422, 19406, + 170800, 39698, 40000, 40189, 19662, 19693, 40295, 172238, 19704, + 172293, 172558, 172689, 40635, 19798, 40697, 40702, 40709, 40719, + 40726, 40763, 173568}; + +const uint8_t canonical_combining_class_index[4352] = { + 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, + 15, 0, 0, 0, 16, 17, 18, 19, 20, 21, 22, 0, 0, 23, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 24, 25, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 0, 28, 29, 30, + 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 33, 0, 0, 34, 35, 36, 0, 0, 0, 0, 0, 0, + 37, 0, 0, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0, 52, + 53, 0, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 55, 56, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 61, 56, 62, 0, 63, 0, 0, 0, 64, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}; +const uint8_t canonical_combining_class_block[67][256] = { + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 232, 220, 220, 220, 220, 232, 216, 220, 220, + 220, 220, 220, 202, 202, 220, 220, 220, 220, 202, 202, 220, 220, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 1, 1, 1, 1, 1, 220, 220, 220, + 220, 230, 230, 230, 230, 230, 230, 230, 230, 240, 230, 220, 220, 220, 230, + 230, 230, 220, 220, 0, 230, 230, 230, 220, 220, 220, 220, 230, 232, 220, + 220, 230, 233, 234, 234, 233, 234, 234, 233, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, + 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 230, 230, 230, 230, + 220, 230, 230, 230, 222, 220, 230, 230, 230, 230, 230, 230, 220, 220, 220, + 220, 220, 220, 230, 230, 220, 230, 230, 222, 228, 230, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 0, 23, 0, 24, 25, + 0, 230, 220, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 230, 230, 230, 230, 230, 230, 230, 30, 31, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 28, 29, 30, 31, 32, 33, 34, 230, 230, 220, 220, 230, 230, 230, + 230, 230, 220, 230, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, + 230, 230, 220, 230, 0, 0, 230, 230, 0, 220, 230, 230, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 220, 230, 230, 220, 230, 230, 220, 220, 220, 230, 220, + 220, 230, 220, 230, 230, 230, 220, 230, 220, 230, 220, 230, 220, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, + 230, 230, 220, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 0, 230, 230, 230, 0, 230, 230, 230, 230, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, + 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 230, 220, 220, 220, 230, 230, 230, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 220, 220, 220, + 220, 220, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 0, 220, 230, 230, 220, 230, 230, 220, 230, 230, 230, 220, 220, 220, + 27, 28, 29, 230, 230, 230, 220, 230, 230, 220, 220, 230, 230, 230, 230, + 230}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 230, 220, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 84, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 103, 103, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 107, 107, 107, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 118, 118, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 122, 122, 122, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 220, 0, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, 132, 0, 0, 0, + 0, 0, 130, 130, 130, 130, 0, 0, 130, 0, 230, 230, 9, 0, 230, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 230, 220, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, + 230, 230, 230, 230, 230, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, + 230, 220, 220, 220, 220, 220, 220, 230, 230, 220, 0, 220, 220, 230, 230, + 220, 220, 230, 230, 230, 230, 230, 220, 230, 230, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 230, 230, 230, 230, 230, + 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, + 230, 0, 1, 220, 220, 220, 220, 220, 230, 230, 220, 220, 220, 220, 230, + 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 220, 0, 0, + 0, 0, 0, 0, 230, 0, 0, 0, 230, 230, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 220, + 230, 230, 230, 230, 230, 230, 230, 220, 230, 230, 234, 214, 220, 202, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 232, 228, 228, 220, 218, 230, 233, 220, 230, + 220}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 1, 1, 230, 230, 230, 230, 1, 1, 1, 230, 230, 0, 0, 0, + 0, 230, 0, 0, 0, 1, 1, 230, 220, 230, 1, 1, 220, 220, 220, 220, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 218, 228, 232, 222, 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, + 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, + 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 230, 230, 220, 0, 0, 230, 230, 0, 0, 0, 0, 0, + 230, 230, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 230, 230, 230, 230, 230, 230, 230, 220, 220, 220, 220, 220, 220, + 220, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 0, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 1, 220, 0, + 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, + 230, 230, 230, 220, 230, 220, 220, 220, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 230, 220, 230, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, + 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 7, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 7, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 9, 9, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 216, 216, 1, 1, 1, 0, 0, 0, 226, 216, 216, + 216, 216, 216, 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, + 220, 220, 220, 0, 0, 230, 230, 230, 230, 230, 220, 220, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 230, 230, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {230, 230, 230, 230, 230, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, 230, + 230, 230, 230, 230, 0, 230, 230, 0, 230, 230, 230, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 232, 220, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 220, 220, 220, 220, 220, 220, 220, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, 230, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; + +const uint8_t composition_index[4352] = { + 0, 1, 2, 3, 4, 5, 6, 5, 5, 7, 5, 8, 9, 10, 5, 5, 11, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 12, 5, 5, 13, 14, 5, 15, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 18, 19, 5, 20, 21, 22, 5, 5, 5, 23, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}; +const uint16_t composition_block[67][257] = { + {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 5, 7, 7, 7, 39, 45, 55, 67, 101, 103, 117, 131, 161, + 163, 173, 185, 191, 209, 241, 245, 245, 261, 275, 289, 327, 331, 343, 347, + 365, 377, 377, 377, 377, 377, 377, 377, 409, 415, 425, 437, 471, 473, 487, + 503, 531, 535, 545, 557, 563, 581, 613, 617, 617, 633, 647, 663, 701, 705, + 719, 723, 743, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, + 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, + 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, 755, + 755, 755, 755, 755, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, 761, + 769, 769, 771, 773, 777, 779, 779, 779, 787, 787, 787, 787, 787, 789, 789, + 789, 789, 789, 797, 803, 805, 805, 807, 807, 807, 807, 815, 815, 815, 815, + 815, 815, 823, 823, 825, 827, 831, 833, 833, 833, 841, 841, 841, 841, 841, + 843, 843, 843, 843, 843, 851, 857, 859, 859, 861, 861, 861, 861, 869, 869, + 869, 869}, + {869, 869, 869, 877, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 885, + 885, 885, 885, 885, 889, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, + 893, 893, 897, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, + 901, 903, 905, 905, 905, 905, 905, 907, 909, 909, 909, 909, 909, 909, 909, + 911, 913, 915, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 929, 939, 939, 939, + 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 939, 949, 959, 959, 959, + 959, 959, 959, 959, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, + 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, + 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, + 961, 961, 961, 961, 961, 961, 961, 961, 961, 961, 963, 965, 965, 965, 965, + 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, + 965, 965}, + {965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, + 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, + 965, 965, 965, 965, 965, 965, 965, 965, 965, 967, 969, 971, 973, 973, 973, + 973, 973, 975, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, + 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979}, + {979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, 979, + 979, 979, 993, 993, 993, 993, 1001, 1001, 1011, 1011, 1025, 1025, + 1025, 1025, 1025, 1025, 1033, 1033, 1035, 1035, 1035, 1035, 1047, 1047, + 1047, 1047, 1057, 1057, 1057, 1059, 1059, 1061, 1061, 1061, 1077, 1077, + 1077, 1077, 1085, 1085, 1097, 1097, 1113, 1113, 1113, 1113, 1113, 1113, + 1121, 1121, 1125, 1125, 1125, 1125, 1141, 1141, 1141, 1141, 1153, 1159, + 1165, 1165, 1165, 1167, 1167, 1167, 1167, 1171, 1171, 1171, 1171, 1171, + 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, + 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, + 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, 1171, + 1171, 1171, 1171, 1171, 1171}, + {1171, 1171, 1171, 1171, 1171, 1171, 1171, 1173, 1173, 1173, 1173, 1173, + 1173, 1173, 1173, 1173, 1173, 1177, 1177, 1177, 1179, 1179, 1185, 1189, + 1191, 1199, 1199, 1201, 1201, 1201, 1201, 1203, 1203, 1203, 1203, 1203, + 1211, 1211, 1211, 1211, 1213, 1213, 1213, 1213, 1215, 1215, 1217, 1217, + 1217, 1221, 1221, 1221, 1223, 1223, 1229, 1233, 1235, 1243, 1243, 1245, + 1245, 1245, 1245, 1247, 1247, 1247, 1247, 1247, 1255, 1255, 1255, 1255, + 1257, 1257, 1257, 1257, 1259, 1259, 1261, 1261, 1261, 1261, 1261, 1261, + 1261, 1261, 1261, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, + 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, + 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1265, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, + 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, 1267, + 1267, 1269, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, 1271, + 1271, 1271, 1271, 1271, 1271, 1273, 1275, 1275, 1275, 1275, 1275, 1275, + 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, + 1275, 1275, 1275, 1275, 1275}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, + 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, + 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, + 1275, 1275, 1275, 1275, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, + 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, + 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, 1281, + 1281, 1283, 1283, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, + 1285, 1285, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, + 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1289, 1289, 1289, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291}, + {1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, + 1291, 1291, 1291, 1291, 1291, 1293, 1293, 1293, 1293, 1293, 1293, 1293, + 1293, 1295, 1295, 1295, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, + 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1297, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301}, + {1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, 1301, + 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, + 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, + 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, + 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, + 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, + 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, 1307, + 1307, 1307, 1307, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, + 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, + 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, + 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, + 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1313, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315}, + {1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, + 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1315, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1319, 1319, 1319, 1319, 1319, 1319, 1319, 1325, 1325, 1325, 1325, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327}, + {1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1331, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, 1333, + 1333, 1333, 1339, 1339, 1339, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + 1341, 1341, 1341, 1341, 1341}, + {1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + 1341, 1341, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + 1343, 1343, 1343, 1343, 1343}, + {1343, 1343, 1343, 1343, 1343, 1343, 1345, 1345, 1347, 1347, 1349, 1349, + 1351, 1351, 1353, 1353, 1353, 1353, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1357, + 1357, 1359, 1359, 1361, 1363, 1363, 1363, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365}, + {1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1365, + 1365, 1365, 1365, 1365, 1365, 1365, 1365, 1367, 1369, 1369, 1369, 1369, + 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, + 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1369, + 1369, 1369, 1369, 1369, 1369, 1369, 1369, 1371, 1373, 1373, 1373, 1373, + 1373, 1373, 1373, 1375, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, + 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, + 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, + 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, + 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, 1377, + 1377, 1377, 1377, 1377, 1377, 1381, 1385, 1385, 1385, 1385, 1385, 1385, + 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, 1385, + 1385, 1385, 1385, 1385, 1385, 1387, 1389, 1389, 1389, 1389, 1389, 1389, + 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, 1389, + 1389, 1391, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + 1393, 1393, 1393, 1393, 1393}, + {1393, 1401, 1409, 1411, 1413, 1415, 1417, 1419, 1421, 1429, 1437, 1439, + 1441, 1443, 1445, 1447, 1449, 1453, 1457, 1457, 1457, 1457, 1457, 1457, + 1457, 1461, 1465, 1465, 1465, 1465, 1465, 1465, 1465, 1473, 1481, 1483, + 1485, 1487, 1489, 1491, 1493, 1501, 1509, 1511, 1513, 1515, 1517, 1519, + 1521, 1527, 1533, 1533, 1533, 1533, 1533, 1533, 1533, 1539, 1545, 1545, + 1545, 1545, 1545, 1545, 1545, 1549, 1553, 1553, 1553, 1553, 1553, 1553, + 1553, 1557, 1561, 1561, 1561, 1561, 1561, 1561, 1561, 1567, 1573, 1573, + 1573, 1573, 1573, 1573, 1573, 1573, 1579, 1579, 1579, 1579, 1579, 1579, + 1579, 1587, 1595, 1597, 1599, 1601, 1603, 1605, 1607, 1615, 1623, 1625, + 1627, 1629, 1631, 1633, 1635, 1637, 1637, 1637, 1637, 1639, 1639, 1639, + 1639, 1639, 1639, 1639, 1639, 1641, 1641, 1641, 1641, 1641, 1641, 1641, + 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, + 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, + 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, + 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, + 1641, 1641, 1641, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, 1643, + 1649, 1649, 1649, 1649, 1649, 1649, 1649, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1651, + 1651, 1651, 1651, 1651, 1651, 1651, 1651, 1653, 1653, 1653, 1653, 1653, + 1653, 1653, 1653, 1659, 1659}, + {1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + 1659, 1661, 1661, 1663, 1663, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + 1665, 1665, 1665, 1665, 1665, 1667, 1667, 1669, 1669, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, 1671, + 1671, 1671, 1671, 1671, 1671}, + {1671, 1671, 1671, 1671, 1673, 1673, 1673, 1673, 1673, 1675, 1675, 1675, + 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, + 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, 1677, + 1679, 1679, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, + 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, 1681, + 1681, 1683, 1683, 1683, 1683, 1683, 1683, 1683, 1685, 1685, 1687, 1687, + 1687, 1689, 1689, 1689, 1689, 1689, 1691, 1691, 1691, 1691, 1691, 1691, + 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, 1691, + 1691, 1691, 1693, 1693, 1693, 1695, 1697, 1697, 1697, 1697, 1697, 1697, + 1697, 1697, 1697, 1697, 1697, 1697, 1697, 1699, 1701, 1701, 1701, 1703, + 1705, 1705, 1705, 1707, 1709, 1711, 1713, 1713, 1713, 1713, 1713, 1715, + 1717, 1717, 1717, 1719, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, + 1721, 1721, 1723, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1725, + 1725, 1725, 1725, 1725, 1725, 1725, 1725, 1727, 1727, 1727, 1727, 1727, + 1727, 1729, 1731, 1731, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1735, + 1737, 1739, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741}, + {1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, + 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1743, + 1743, 1743, 1743, 1743, 1745, 1745, 1747, 1747, 1749, 1749, 1751, 1751, + 1753, 1753, 1755, 1755, 1757, 1757, 1759, 1759, 1761, 1761, 1763, 1763, + 1765, 1765, 1767, 1767, 1767, 1769, 1769, 1771, 1771, 1773, 1773, 1773, + 1773, 1773, 1773, 1773, 1777, 1777, 1777, 1781, 1781, 1781, 1785, 1785, + 1785, 1789, 1789, 1789, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, + 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, + 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, 1793, + 1793, 1793, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1797, + 1797, 1797, 1797, 1797, 1799, 1799, 1801, 1801, 1803, 1803, 1805, 1805, + 1807, 1807, 1809, 1809, 1811, 1811, 1813, 1813, 1815, 1815, 1817, 1817, + 1819, 1819, 1821, 1821, 1821, 1823, 1823, 1825, 1825, 1827, 1827, 1827, + 1827, 1827, 1827, 1827, 1831, 1831, 1831, 1835, 1835, 1835, 1839, 1839, + 1839, 1843, 1843, 1843, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, + 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, 1847, + 1849, 1851, 1853, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, 1855, + 1855, 1855, 1857, 1857, 1857}, + {1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, + 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1857, 1859, 1859, + 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1861, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863}, + {1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, 1863, + 1863, 1863, 1865, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867}, + {1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, 1867, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871}, + {1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, 1871, + 1871, 1871, 1871, 1871, 1871, 1871, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877}, + {1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, 1877, + 1877, 1877, 1877, 1877, 1877, 1879, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881}, + {1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, 1881, + 1881, 1881, 1881, 1881, 1881, 1881, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, 1883, + 1883, 1883, 1883, 1883, 1883}}; +const char32_t composition_data[1883] = { + 0, 824, 8814, 824, 8800, 824, 8815, 768, 192, 769, 193, + 770, 194, 771, 195, 772, 256, 774, 258, 775, 550, 776, + 196, 777, 7842, 778, 197, 780, 461, 783, 512, 785, 514, + 803, 7840, 805, 7680, 808, 260, 775, 7682, 803, 7684, 817, + 7686, 769, 262, 770, 264, 775, 266, 780, 268, 807, 199, + 775, 7690, 780, 270, 803, 7692, 807, 7696, 813, 7698, 817, + 7694, 768, 200, 769, 201, 770, 202, 771, 7868, 772, 274, + 774, 276, 775, 278, 776, 203, 777, 7866, 780, 282, 783, + 516, 785, 518, 803, 7864, 807, 552, 808, 280, 813, 7704, + 816, 7706, 775, 7710, 769, 500, 770, 284, 772, 7712, 774, + 286, 775, 288, 780, 486, 807, 290, 770, 292, 775, 7714, + 776, 7718, 780, 542, 803, 7716, 807, 7720, 814, 7722, 768, + 204, 769, 205, 770, 206, 771, 296, 772, 298, 774, 300, + 775, 304, 776, 207, 777, 7880, 780, 463, 783, 520, 785, + 522, 803, 7882, 808, 302, 816, 7724, 770, 308, 769, 7728, + 780, 488, 803, 7730, 807, 310, 817, 7732, 769, 313, 780, + 317, 803, 7734, 807, 315, 813, 7740, 817, 7738, 769, 7742, + 775, 7744, 803, 7746, 768, 504, 769, 323, 771, 209, 775, + 7748, 780, 327, 803, 7750, 807, 325, 813, 7754, 817, 7752, + 768, 210, 769, 211, 770, 212, 771, 213, 772, 332, 774, + 334, 775, 558, 776, 214, 777, 7886, 779, 336, 780, 465, + 783, 524, 785, 526, 795, 416, 803, 7884, 808, 490, 769, + 7764, 775, 7766, 769, 340, 775, 7768, 780, 344, 783, 528, + 785, 530, 803, 7770, 807, 342, 817, 7774, 769, 346, 770, + 348, 775, 7776, 780, 352, 803, 7778, 806, 536, 807, 350, + 775, 7786, 780, 356, 803, 7788, 806, 538, 807, 354, 813, + 7792, 817, 7790, 768, 217, 769, 218, 770, 219, 771, 360, + 772, 362, 774, 364, 776, 220, 777, 7910, 778, 366, 779, + 368, 780, 467, 783, 532, 785, 534, 795, 431, 803, 7908, + 804, 7794, 808, 370, 813, 7798, 816, 7796, 771, 7804, 803, + 7806, 768, 7808, 769, 7810, 770, 372, 775, 7814, 776, 7812, + 803, 7816, 775, 7818, 776, 7820, 768, 7922, 769, 221, 770, + 374, 771, 7928, 772, 562, 775, 7822, 776, 376, 777, 7926, + 803, 7924, 769, 377, 770, 7824, 775, 379, 780, 381, 803, + 7826, 817, 7828, 768, 224, 769, 225, 770, 226, 771, 227, + 772, 257, 774, 259, 775, 551, 776, 228, 777, 7843, 778, + 229, 780, 462, 783, 513, 785, 515, 803, 7841, 805, 7681, + 808, 261, 775, 7683, 803, 7685, 817, 7687, 769, 263, 770, + 265, 775, 267, 780, 269, 807, 231, 775, 7691, 780, 271, + 803, 7693, 807, 7697, 813, 7699, 817, 7695, 768, 232, 769, + 233, 770, 234, 771, 7869, 772, 275, 774, 277, 775, 279, + 776, 235, 777, 7867, 780, 283, 783, 517, 785, 519, 803, + 7865, 807, 553, 808, 281, 813, 7705, 816, 7707, 775, 7711, + 769, 501, 770, 285, 772, 7713, 774, 287, 775, 289, 780, + 487, 807, 291, 770, 293, 775, 7715, 776, 7719, 780, 543, + 803, 7717, 807, 7721, 814, 7723, 817, 7830, 768, 236, 769, + 237, 770, 238, 771, 297, 772, 299, 774, 301, 776, 239, + 777, 7881, 780, 464, 783, 521, 785, 523, 803, 7883, 808, + 303, 816, 7725, 770, 309, 780, 496, 769, 7729, 780, 489, + 803, 7731, 807, 311, 817, 7733, 769, 314, 780, 318, 803, + 7735, 807, 316, 813, 7741, 817, 7739, 769, 7743, 775, 7745, + 803, 7747, 768, 505, 769, 324, 771, 241, 775, 7749, 780, + 328, 803, 7751, 807, 326, 813, 7755, 817, 7753, 768, 242, + 769, 243, 770, 244, 771, 245, 772, 333, 774, 335, 775, + 559, 776, 246, 777, 7887, 779, 337, 780, 466, 783, 525, + 785, 527, 795, 417, 803, 7885, 808, 491, 769, 7765, 775, + 7767, 769, 341, 775, 7769, 780, 345, 783, 529, 785, 531, + 803, 7771, 807, 343, 817, 7775, 769, 347, 770, 349, 775, + 7777, 780, 353, 803, 7779, 806, 537, 807, 351, 775, 7787, + 776, 7831, 780, 357, 803, 7789, 806, 539, 807, 355, 813, + 7793, 817, 7791, 768, 249, 769, 250, 770, 251, 771, 361, + 772, 363, 774, 365, 776, 252, 777, 7911, 778, 367, 779, + 369, 780, 468, 783, 533, 785, 535, 795, 432, 803, 7909, + 804, 7795, 808, 371, 813, 7799, 816, 7797, 771, 7805, 803, + 7807, 768, 7809, 769, 7811, 770, 373, 775, 7815, 776, 7813, + 778, 7832, 803, 7817, 775, 7819, 776, 7821, 768, 7923, 769, + 253, 770, 375, 771, 7929, 772, 563, 775, 7823, 776, 255, + 777, 7927, 778, 7833, 803, 7925, 769, 378, 770, 7825, 775, + 380, 780, 382, 803, 7827, 817, 7829, 768, 8173, 769, 901, + 834, 8129, 768, 7846, 769, 7844, 771, 7850, 777, 7848, 772, + 478, 769, 506, 769, 508, 772, 482, 769, 7688, 768, 7872, + 769, 7870, 771, 7876, 777, 7874, 769, 7726, 768, 7890, 769, + 7888, 771, 7894, 777, 7892, 769, 7756, 772, 556, 776, 7758, + 772, 554, 769, 510, 768, 475, 769, 471, 772, 469, 780, + 473, 768, 7847, 769, 7845, 771, 7851, 777, 7849, 772, 479, + 769, 507, 769, 509, 772, 483, 769, 7689, 768, 7873, 769, + 7871, 771, 7877, 777, 7875, 769, 7727, 768, 7891, 769, 7889, + 771, 7895, 777, 7893, 769, 7757, 772, 557, 776, 7759, 772, + 555, 769, 511, 768, 476, 769, 472, 772, 470, 780, 474, + 768, 7856, 769, 7854, 771, 7860, 777, 7858, 768, 7857, 769, + 7855, 771, 7861, 777, 7859, 768, 7700, 769, 7702, 768, 7701, + 769, 7703, 768, 7760, 769, 7762, 768, 7761, 769, 7763, 775, + 7780, 775, 7781, 775, 7782, 775, 7783, 769, 7800, 769, 7801, + 776, 7802, 776, 7803, 775, 7835, 768, 7900, 769, 7898, 771, + 7904, 777, 7902, 803, 7906, 768, 7901, 769, 7899, 771, 7905, + 777, 7903, 803, 7907, 768, 7914, 769, 7912, 771, 7918, 777, + 7916, 803, 7920, 768, 7915, 769, 7913, 771, 7919, 777, 7917, + 803, 7921, 780, 494, 772, 492, 772, 493, 772, 480, 772, + 481, 774, 7708, 774, 7709, 772, 560, 772, 561, 780, 495, + 768, 8122, 769, 902, 772, 8121, 774, 8120, 787, 7944, 788, + 7945, 837, 8124, 768, 8136, 769, 904, 787, 7960, 788, 7961, + 768, 8138, 769, 905, 787, 7976, 788, 7977, 837, 8140, 768, + 8154, 769, 906, 772, 8153, 774, 8152, 776, 938, 787, 7992, + 788, 7993, 768, 8184, 769, 908, 787, 8008, 788, 8009, 788, + 8172, 768, 8170, 769, 910, 772, 8169, 774, 8168, 776, 939, + 788, 8025, 768, 8186, 769, 911, 787, 8040, 788, 8041, 837, + 8188, 837, 8116, 837, 8132, 768, 8048, 769, 940, 772, 8113, + 774, 8112, 787, 7936, 788, 7937, 834, 8118, 837, 8115, 768, + 8050, 769, 941, 787, 7952, 788, 7953, 768, 8052, 769, 942, + 787, 7968, 788, 7969, 834, 8134, 837, 8131, 768, 8054, 769, + 943, 772, 8145, 774, 8144, 776, 970, 787, 7984, 788, 7985, + 834, 8150, 768, 8056, 769, 972, 787, 8000, 788, 8001, 787, + 8164, 788, 8165, 768, 8058, 769, 973, 772, 8161, 774, 8160, + 776, 971, 787, 8016, 788, 8017, 834, 8166, 768, 8060, 769, + 974, 787, 8032, 788, 8033, 834, 8182, 837, 8179, 768, 8146, + 769, 912, 834, 8151, 768, 8162, 769, 944, 834, 8167, 837, + 8180, 769, 979, 776, 980, 776, 1031, 774, 1232, 776, 1234, + 769, 1027, 768, 1024, 774, 1238, 776, 1025, 774, 1217, 776, + 1244, 776, 1246, 768, 1037, 772, 1250, 774, 1049, 776, 1252, + 769, 1036, 776, 1254, 772, 1262, 774, 1038, 776, 1264, 779, + 1266, 776, 1268, 776, 1272, 776, 1260, 774, 1233, 776, 1235, + 769, 1107, 768, 1104, 774, 1239, 776, 1105, 774, 1218, 776, + 1245, 776, 1247, 768, 1117, 772, 1251, 774, 1081, 776, 1253, + 769, 1116, 776, 1255, 772, 1263, 774, 1118, 776, 1265, 779, + 1267, 776, 1269, 776, 1273, 776, 1261, 776, 1111, 783, 1142, + 783, 1143, 776, 1242, 776, 1243, 776, 1258, 776, 1259, 1619, + 1570, 1620, 1571, 1621, 1573, 1620, 1572, 1620, 1574, 1620, 1730, + 1620, 1747, 1620, 1728, 2364, 2345, 2364, 2353, 2364, 2356, 2494, + 2507, 2519, 2508, 2878, 2891, 2902, 2888, 2903, 2892, 3031, 2964, + 3006, 3018, 3031, 3020, 3006, 3019, 3158, 3144, 3285, 3264, 3266, + 3274, 3285, 3271, 3286, 3272, 3285, 3275, 3390, 3402, 3415, 3404, + 3390, 3403, 3530, 3546, 3535, 3548, 3551, 3550, 3530, 3549, 4142, + 4134, 6965, 6918, 6965, 6920, 6965, 6922, 6965, 6924, 6965, 6926, + 6965, 6930, 6965, 6971, 6965, 6973, 6965, 6976, 6965, 6977, 6965, + 6979, 772, 7736, 772, 7737, 772, 7772, 772, 7773, 775, 7784, + 775, 7785, 770, 7852, 774, 7862, 770, 7853, 774, 7863, 770, + 7878, 770, 7879, 770, 7896, 770, 7897, 768, 7938, 769, 7940, + 834, 7942, 837, 8064, 768, 7939, 769, 7941, 834, 7943, 837, + 8065, 837, 8066, 837, 8067, 837, 8068, 837, 8069, 837, 8070, + 837, 8071, 768, 7946, 769, 7948, 834, 7950, 837, 8072, 768, + 7947, 769, 7949, 834, 7951, 837, 8073, 837, 8074, 837, 8075, + 837, 8076, 837, 8077, 837, 8078, 837, 8079, 768, 7954, 769, + 7956, 768, 7955, 769, 7957, 768, 7962, 769, 7964, 768, 7963, + 769, 7965, 768, 7970, 769, 7972, 834, 7974, 837, 8080, 768, + 7971, 769, 7973, 834, 7975, 837, 8081, 837, 8082, 837, 8083, + 837, 8084, 837, 8085, 837, 8086, 837, 8087, 768, 7978, 769, + 7980, 834, 7982, 837, 8088, 768, 7979, 769, 7981, 834, 7983, + 837, 8089, 837, 8090, 837, 8091, 837, 8092, 837, 8093, 837, + 8094, 837, 8095, 768, 7986, 769, 7988, 834, 7990, 768, 7987, + 769, 7989, 834, 7991, 768, 7994, 769, 7996, 834, 7998, 768, + 7995, 769, 7997, 834, 7999, 768, 8002, 769, 8004, 768, 8003, + 769, 8005, 768, 8010, 769, 8012, 768, 8011, 769, 8013, 768, + 8018, 769, 8020, 834, 8022, 768, 8019, 769, 8021, 834, 8023, + 768, 8027, 769, 8029, 834, 8031, 768, 8034, 769, 8036, 834, + 8038, 837, 8096, 768, 8035, 769, 8037, 834, 8039, 837, 8097, + 837, 8098, 837, 8099, 837, 8100, 837, 8101, 837, 8102, 837, + 8103, 768, 8042, 769, 8044, 834, 8046, 837, 8104, 768, 8043, + 769, 8045, 834, 8047, 837, 8105, 837, 8106, 837, 8107, 837, + 8108, 837, 8109, 837, 8110, 837, 8111, 837, 8114, 837, 8130, + 837, 8178, 837, 8119, 768, 8141, 769, 8142, 834, 8143, 837, + 8135, 837, 8183, 768, 8157, 769, 8158, 834, 8159, 824, 8602, + 824, 8603, 824, 8622, 824, 8653, 824, 8655, 824, 8654, 824, + 8708, 824, 8713, 824, 8716, 824, 8740, 824, 8742, 824, 8769, + 824, 8772, 824, 8775, 824, 8777, 824, 8813, 824, 8802, 824, + 8816, 824, 8817, 824, 8820, 824, 8821, 824, 8824, 824, 8825, + 824, 8832, 824, 8833, 824, 8928, 824, 8929, 824, 8836, 824, + 8837, 824, 8840, 824, 8841, 824, 8930, 824, 8931, 824, 8876, + 824, 8877, 824, 8878, 824, 8879, 824, 8938, 824, 8939, 824, + 8940, 824, 8941, 12441, 12436, 12441, 12364, 12441, 12366, 12441, 12368, + 12441, 12370, 12441, 12372, 12441, 12374, 12441, 12376, 12441, 12378, 12441, + 12380, 12441, 12382, 12441, 12384, 12441, 12386, 12441, 12389, 12441, 12391, + 12441, 12393, 12441, 12400, 12442, 12401, 12441, 12403, 12442, 12404, 12441, + 12406, 12442, 12407, 12441, 12409, 12442, 12410, 12441, 12412, 12442, 12413, + 12441, 12446, 12441, 12532, 12441, 12460, 12441, 12462, 12441, 12464, 12441, + 12466, 12441, 12468, 12441, 12470, 12441, 12472, 12441, 12474, 12441, 12476, + 12441, 12478, 12441, 12480, 12441, 12482, 12441, 12485, 12441, 12487, 12441, + 12489, 12441, 12496, 12442, 12497, 12441, 12499, 12442, 12500, 12441, 12502, + 12442, 12503, 12441, 12505, 12442, 12506, 12441, 12508, 12442, 12509, 12441, + 12535, 12441, 12536, 12441, 12537, 12441, 12538, 12441, 12542, 69818, 69786, + 69818, 69788, 69818, 69803, 69927, 69934, 69927, 69935, 70462, 70475, 70487, + 70476, 70832, 70844, 70842, 70843, 70845, 70846, 71087, 71098, 71087, 71099, + 71984, 71992}; + +} // namespace ada::idna +#endif // ADA_IDNA_NORMALIZATION_TABLES_H +/* end file src/normalization_tables.cpp */ + +namespace ada::idna { + +// See +// https://github.com/uni-algo/uni-algo/blob/c612968c5ed3ace39bde4c894c24286c5f2c7fe2/include/uni_algo/impl/impl_norm.h#L467 +constexpr char32_t hangul_sbase = 0xAC00; +constexpr char32_t hangul_tbase = 0x11A7; +constexpr char32_t hangul_vbase = 0x1161; +constexpr char32_t hangul_lbase = 0x1100; +constexpr char32_t hangul_lcount = 19; +constexpr char32_t hangul_vcount = 21; +constexpr char32_t hangul_tcount = 28; +constexpr char32_t hangul_ncount = hangul_vcount * hangul_tcount; +constexpr char32_t hangul_scount = + hangul_lcount * hangul_vcount * hangul_tcount; + +std::pair compute_decomposition_length( + const std::u32string_view input) noexcept { + bool decomposition_needed{false}; + size_t additional_elements{0}; + for (char32_t current_character : input) { + size_t decomposition_length{0}; + + if (current_character >= hangul_sbase && + current_character < hangul_sbase + hangul_scount) { + decomposition_length = 2; + if ((current_character - hangul_sbase) % hangul_tcount) { + decomposition_length = 3; + } + } else if (current_character < 0x110000) { + const uint8_t di = decomposition_index[current_character >> 8]; + const uint16_t* const decomposition = + decomposition_block[di] + (current_character % 256); + decomposition_length = (decomposition[1] >> 2) - (decomposition[0] >> 2); + if ((decomposition_length > 0) && (decomposition[0] & 1)) { + decomposition_length = 0; + } + } + if (decomposition_length != 0) { + decomposition_needed = true; + additional_elements += decomposition_length - 1; + } + } + return {decomposition_needed, additional_elements}; +} + +void decompose(std::u32string& input, size_t additional_elements) { + input.resize(input.size() + additional_elements); + for (size_t descending_idx = input.size(), + input_count = descending_idx - additional_elements; + input_count--;) { + if (input[input_count] >= hangul_sbase && + input[input_count] < hangul_sbase + hangul_scount) { + // Hangul decomposition. + char32_t s_index = input[input_count] - hangul_sbase; + if (s_index % hangul_tcount != 0) { + input[--descending_idx] = hangul_tbase + s_index % hangul_tcount; + } + input[--descending_idx] = + hangul_vbase + (s_index % hangul_ncount) / hangul_tcount; + input[--descending_idx] = hangul_lbase + s_index / hangul_ncount; + } else if (input[input_count] < 0x110000) { + // Check decomposition_data. + const uint16_t* decomposition = + decomposition_block[decomposition_index[input[input_count] >> 8]] + + (input[input_count] % 256); + uint16_t decomposition_length = + (decomposition[1] >> 2) - (decomposition[0] >> 2); + if (decomposition_length > 0 && (decomposition[0] & 1)) { + decomposition_length = 0; + } + if (decomposition_length > 0) { + // Non-recursive decomposition. + while (decomposition_length-- > 0) { + input[--descending_idx] = decomposition_data[(decomposition[0] >> 2) + + decomposition_length]; + } + } else { + // No decomposition. + input[--descending_idx] = input[input_count]; + } + } else { + // Non-Unicode character. + input[--descending_idx] = input[input_count]; + } + } +} + +uint8_t get_ccc(char32_t c) noexcept { + return c < 0x110000 ? canonical_combining_class_block + [canonical_combining_class_index[c >> 8]][c % 256] + : 0; +} + +void sort_marks(std::u32string& input) { + for (size_t idx = 1; idx < input.size(); idx++) { + uint8_t ccc = get_ccc(input[idx]); + if (ccc == 0) { + continue; + } // Skip non-combining characters. + auto current_character = input[idx]; + size_t back_idx = idx; + while (back_idx != 0 && get_ccc(input[back_idx - 1]) > ccc) { + input[back_idx] = input[back_idx - 1]; + back_idx--; + } + input[back_idx] = current_character; + } +} + +void decompose_nfc(std::u32string& input) { + /** + * Decompose the domain_name string to Unicode Normalization Form C. + * @see https://www.unicode.org/reports/tr46/#ProcessingStepDecompose + */ + auto [decomposition_needed, additional_elements] = + compute_decomposition_length(input); + if (decomposition_needed) { + decompose(input, additional_elements); + } + sort_marks(input); +} + +void compose(std::u32string& input) { + /** + * Compose the domain_name string to Unicode Normalization Form C. + * @see https://www.unicode.org/reports/tr46/#ProcessingStepCompose + */ + size_t input_count{0}; + size_t composition_count{0}; + for (; input_count < input.size(); input_count++, composition_count++) { + input[composition_count] = input[input_count]; + if (input[input_count] >= hangul_lbase && + input[input_count] < hangul_lbase + hangul_lcount) { + if (input_count + 1 < input.size() && + input[input_count + 1] >= hangul_vbase && + input[input_count + 1] < hangul_vbase + hangul_vcount) { + input[composition_count] = + hangul_sbase + + ((input[input_count] - hangul_lbase) * hangul_vcount + + input[input_count + 1] - hangul_vbase) * + hangul_tcount; + input_count++; + if (input_count + 1 < input.size() && + input[input_count + 1] > hangul_tbase && + input[input_count + 1] < hangul_tbase + hangul_tcount) { + input[composition_count] += input[++input_count] - hangul_tbase; + } + } + } else if (input[input_count] >= hangul_sbase && + input[input_count] < hangul_sbase + hangul_scount) { + if ((input[input_count] - hangul_sbase) % hangul_tcount && + input_count + 1 < input.size() && + input[input_count + 1] > hangul_tbase && + input[input_count + 1] < hangul_tbase + hangul_tcount) { + input[composition_count] += input[++input_count] - hangul_tbase; + } + } else if (input[input_count] < 0x110000) { + const uint16_t* composition = + &composition_block[composition_index[input[input_count] >> 8]] + [input[input_count] % 256]; + size_t initial_composition_count = composition_count; + for (int32_t previous_ccc = -1; input_count + 1 < input.size(); + input_count++) { + uint8_t ccc = get_ccc(input[input_count + 1]); + + if (composition[1] != composition[0] && previous_ccc < ccc) { + // Try finding a composition. + uint16_t left = composition[0]; + uint16_t right = composition[1]; + while (left + 2 < right) { + // mean without overflow + uint16_t middle = left + (((right - left) >> 1) & ~1); + if (composition_data[middle] <= input[input_count + 1]) { + left = middle; + } + if (composition_data[middle] >= input[input_count + 1]) { + right = middle; + } + } + if (composition_data[left] == input[input_count + 1]) { + input[initial_composition_count] = composition_data[left + 1]; + composition = + &composition_block + [composition_index[composition_data[left + 1] >> 8]] + [composition_data[left + 1] % 256]; + continue; + } + } + + if (ccc == 0) { + break; + } // Not a combining character. + previous_ccc = ccc; + input[++composition_count] = input[input_count + 1]; + } + } + } + + if (composition_count < input_count) { + input.resize(composition_count); + } +} + +void normalize(std::u32string& input) { + /** + * Normalize the domain_name string to Unicode Normalization Form C. + * @see https://www.unicode.org/reports/tr46/#ProcessingStepNormalize + */ + decompose_nfc(input); + compose(input); +} + +} // namespace ada::idna +/* end file src/normalization.cpp */ +/* begin file src/punycode.cpp */ + +#include + +namespace ada::idna { + +constexpr int32_t base = 36; +constexpr int32_t tmin = 1; +constexpr int32_t tmax = 26; +constexpr int32_t skew = 38; +constexpr int32_t damp = 700; +constexpr int32_t initial_bias = 72; +constexpr uint32_t initial_n = 128; + +static constexpr int32_t char_to_digit_value(char value) { + if (value >= 'a' && value <= 'z') return value - 'a'; + if (value >= '0' && value <= '9') return value - '0' + 26; + return -1; +} + +static constexpr char digit_to_char(int32_t digit) { + return digit < 26 ? char(digit + 97) : char(digit + 22); +} + +static constexpr int32_t adapt(int32_t d, int32_t n, bool firsttime) { + if (firsttime) { + d = d / damp; + } else { + d = d / 2; + } + d += d / n; + int32_t k = 0; + while (d > ((base - tmin) * tmax) / 2) { + d /= base - tmin; + k += base; + } + return k + (((base - tmin + 1) * d) / (d + skew)); +} + +bool punycode_to_utf32(std::string_view input, std::u32string &out) { + int32_t written_out{0}; + out.reserve(out.size() + input.size()); + uint32_t n = initial_n; + int32_t i = 0; + int32_t bias = initial_bias; + // grab ascii content + size_t end_of_ascii = input.find_last_of('-'); + if (end_of_ascii != std::string_view::npos) { + for (uint8_t c : input.substr(0, end_of_ascii)) { + if (c >= 0x80) { + return false; + } + out.push_back(c); + written_out++; + } + input.remove_prefix(end_of_ascii + 1); + } + while (!input.empty()) { + int32_t oldi = i; + int32_t w = 1; + for (int32_t k = base;; k += base) { + if (input.empty()) { + return false; + } + uint8_t code_point = input.front(); + input.remove_prefix(1); + int32_t digit = char_to_digit_value(code_point); + if (digit < 0) { + return false; + } + if (digit > (0x7fffffff - i) / w) { + return false; + } + i = i + digit * w; + int32_t t = k <= bias ? tmin : k >= bias + tmax ? tmax : k - bias; + if (digit < t) { + break; + } + if (w > 0x7fffffff / (base - t)) { + return false; + } + w = w * (base - t); + } + bias = adapt(i - oldi, written_out + 1, oldi == 0); + if (i / (written_out + 1) > int32_t(0x7fffffff - n)) { + return false; + } + n = n + i / (written_out + 1); + i = i % (written_out + 1); + if (n < 0x80) { + return false; + } + out.insert(out.begin() + i, n); + written_out++; + ++i; + } + + return true; +} + +bool verify_punycode(std::string_view input) { + size_t written_out{0}; + uint32_t n = initial_n; + int32_t i = 0; + int32_t bias = initial_bias; + // grab ascii content + size_t end_of_ascii = input.find_last_of('-'); + if (end_of_ascii != std::string_view::npos) { + for (uint8_t c : input.substr(0, end_of_ascii)) { + if (c >= 0x80) { + return false; + } + written_out++; + } + input.remove_prefix(end_of_ascii + 1); + } + while (!input.empty()) { + int32_t oldi = i; + int32_t w = 1; + for (int32_t k = base;; k += base) { + if (input.empty()) { + return false; + } + uint8_t code_point = input.front(); + input.remove_prefix(1); + int32_t digit = char_to_digit_value(code_point); + if (digit < 0) { + return false; + } + if (digit > (0x7fffffff - i) / w) { + return false; + } + i = i + digit * w; + int32_t t = k <= bias ? tmin : k >= bias + tmax ? tmax : k - bias; + if (digit < t) { + break; + } + if (w > 0x7fffffff / (base - t)) { + return false; + } + w = w * (base - t); + } + bias = adapt(i - oldi, int32_t(written_out + 1), oldi == 0); + if (i / (written_out + 1) > 0x7fffffff - n) { + return false; + } + n = n + i / int32_t(written_out + 1); + i = i % int32_t(written_out + 1); + if (n < 0x80) { + return false; + } + written_out++; + ++i; + } + + return true; +} + +bool utf32_to_punycode(std::u32string_view input, std::string &out) { + out.reserve(input.size() + out.size()); + uint32_t n = initial_n; + int32_t d = 0; + int32_t bias = initial_bias; + size_t h = 0; + // first push the ascii content + for (uint32_t c : input) { + if (c < 0x80) { + ++h; + out.push_back(char(c)); + } + if (c > 0x10ffff || (c >= 0xd880 && c < 0xe000)) { + return false; + } + } + size_t b = h; + if (b > 0) { + out.push_back('-'); + } + while (h < input.size()) { + uint32_t m = 0x10FFFF; + for (auto code_point : input) { + if (code_point >= n && code_point < m) m = code_point; + } + + if ((m - n) > (0x7fffffff - d) / (h + 1)) { + return false; + } + d = d + int32_t((m - n) * (h + 1)); + n = m; + for (auto c : input) { + if (c < n) { + if (d == 0x7fffffff) { + return false; + } + ++d; + } + if (c == n) { + int32_t q = d; + for (int32_t k = base;; k += base) { + int32_t t = k <= bias ? tmin : k >= bias + tmax ? tmax : k - bias; + + if (q < t) { + break; + } + out.push_back(digit_to_char(t + ((q - t) % (base - t)))); + q = (q - t) / (base - t); + } + out.push_back(digit_to_char(q)); + bias = adapt(d, int32_t(h + 1), h == b); + d = 0; + ++h; + } + } + ++d; + ++n; + } + return true; +} + +} // namespace ada::idna +/* end file src/punycode.cpp */ +/* begin file src/validity.cpp */ +#include +#include + +namespace ada::idna { + +enum direction : uint8_t { + NONE, + BN, + CS, + ES, + ON, + EN, + L, + R, + NSM, + AL, + AN, + ET, + WS, + RLO, + LRO, + PDF, + RLE, + RLI, + FSI, + PDI, + LRI, + B, + S, + LRE +}; + +struct directions { + uint32_t start_code; + uint32_t final_code; + direction direct; +}; + +static directions dir_table[] = { + {0x0, 0x8, direction::BN}, {0x9, 0x9, direction::S}, + {0xa, 0xa, direction::B}, {0xb, 0xb, direction::S}, + {0xc, 0xc, direction::WS}, {0xd, 0xd, direction::B}, + {0xe, 0x1b, direction::BN}, {0x1c, 0x1e, direction::B}, + {0x1f, 0x1f, direction::S}, {0x20, 0x20, direction::WS}, + {0x21, 0x22, direction::ON}, {0x23, 0x25, direction::ET}, + {0x26, 0x2a, direction::ON}, {0x2b, 0x2b, direction::ES}, + {0x2c, 0x2c, direction::CS}, {0x2d, 0x2d, direction::ES}, + {0x2e, 0x2f, direction::CS}, {0x30, 0x39, direction::EN}, + {0x3a, 0x3a, direction::CS}, {0x3b, 0x40, direction::ON}, + {0x41, 0x5a, direction::L}, {0x5b, 0x60, direction::ON}, + {0x61, 0x7a, direction::L}, {0x7b, 0x7e, direction::ON}, + {0x7f, 0x84, direction::BN}, {0x85, 0x85, direction::B}, + {0x86, 0x9f, direction::BN}, {0xa0, 0xa0, direction::CS}, + {0xa1, 0xa1, direction::ON}, {0xa2, 0xa5, direction::ET}, + {0xa6, 0xa9, direction::ON}, {0xaa, 0xaa, direction::L}, + {0xab, 0xac, direction::ON}, {0xad, 0xad, direction::BN}, + {0xae, 0xaf, direction::ON}, {0xb0, 0xb1, direction::ET}, + {0xb2, 0xb3, direction::EN}, {0xb4, 0xb4, direction::ON}, + {0xb5, 0xb5, direction::L}, {0xb6, 0xb8, direction::ON}, + {0xb9, 0xb9, direction::EN}, {0xba, 0xba, direction::L}, + {0xbb, 0xbf, direction::ON}, {0xc0, 0xd6, direction::L}, + {0xd7, 0xd7, direction::ON}, {0xd8, 0xf6, direction::L}, + {0xf7, 0xf7, direction::ON}, {0xf8, 0x2b8, direction::L}, + {0x2b9, 0x2ba, direction::ON}, {0x2bb, 0x2c1, direction::L}, + {0x2c2, 0x2cf, direction::ON}, {0x2d0, 0x2d1, direction::L}, + {0x2d2, 0x2df, direction::ON}, {0x2e0, 0x2e4, direction::L}, + {0x2e5, 0x2ed, direction::ON}, {0x2ee, 0x2ee, direction::L}, + {0x2ef, 0x2ff, direction::ON}, {0x300, 0x36f, direction::NSM}, + {0x370, 0x373, direction::L}, {0x374, 0x375, direction::ON}, + {0x376, 0x377, direction::L}, {0x37a, 0x37d, direction::L}, + {0x37e, 0x37e, direction::ON}, {0x37f, 0x37f, direction::L}, + {0x384, 0x385, direction::ON}, {0x386, 0x386, direction::L}, + {0x387, 0x387, direction::ON}, {0x388, 0x38a, direction::L}, + {0x38c, 0x38c, direction::L}, {0x38e, 0x3a1, direction::L}, + {0x3a3, 0x3f5, direction::L}, {0x3f6, 0x3f6, direction::ON}, + {0x3f7, 0x482, direction::L}, {0x483, 0x489, direction::NSM}, + {0x48a, 0x52f, direction::L}, {0x531, 0x556, direction::L}, + {0x559, 0x589, direction::L}, {0x58a, 0x58a, direction::ON}, + {0x58d, 0x58e, direction::ON}, {0x58f, 0x58f, direction::ET}, + {0x591, 0x5bd, direction::NSM}, {0x5be, 0x5be, direction::R}, + {0x5bf, 0x5bf, direction::NSM}, {0x5c0, 0x5c0, direction::R}, + {0x5c1, 0x5c2, direction::NSM}, {0x5c3, 0x5c3, direction::R}, + {0x5c4, 0x5c5, direction::NSM}, {0x5c6, 0x5c6, direction::R}, + {0x5c7, 0x5c7, direction::NSM}, {0x5d0, 0x5ea, direction::R}, + {0x5ef, 0x5f4, direction::R}, {0x600, 0x605, direction::AN}, + {0x606, 0x607, direction::ON}, {0x608, 0x608, direction::AL}, + {0x609, 0x60a, direction::ET}, {0x60b, 0x60b, direction::AL}, + {0x60c, 0x60c, direction::CS}, {0x60d, 0x60d, direction::AL}, + {0x60e, 0x60f, direction::ON}, {0x610, 0x61a, direction::NSM}, + {0x61b, 0x61c, direction::AL}, {0x61e, 0x64a, direction::AL}, + {0x64b, 0x65f, direction::NSM}, {0x660, 0x669, direction::AN}, + {0x66a, 0x66a, direction::ET}, {0x66b, 0x66c, direction::AN}, + {0x66d, 0x66f, direction::AL}, {0x670, 0x670, direction::NSM}, + {0x671, 0x6d5, direction::AL}, {0x6d6, 0x6dc, direction::NSM}, + {0x6dd, 0x6dd, direction::AN}, {0x6de, 0x6de, direction::ON}, + {0x6df, 0x6e4, direction::NSM}, {0x6e5, 0x6e6, direction::AL}, + {0x6e7, 0x6e8, direction::NSM}, {0x6e9, 0x6e9, direction::ON}, + {0x6ea, 0x6ed, direction::NSM}, {0x6ee, 0x6ef, direction::AL}, + {0x6f0, 0x6f9, direction::EN}, {0x6fa, 0x70d, direction::AL}, + {0x70f, 0x710, direction::AL}, {0x711, 0x711, direction::NSM}, + {0x712, 0x72f, direction::AL}, {0x730, 0x74a, direction::NSM}, + {0x74d, 0x7a5, direction::AL}, {0x7a6, 0x7b0, direction::NSM}, + {0x7b1, 0x7b1, direction::AL}, {0x7c0, 0x7ea, direction::R}, + {0x7eb, 0x7f3, direction::NSM}, {0x7f4, 0x7f5, direction::R}, + {0x7f6, 0x7f9, direction::ON}, {0x7fa, 0x7fa, direction::R}, + {0x7fd, 0x7fd, direction::NSM}, {0x7fe, 0x815, direction::R}, + {0x816, 0x819, direction::NSM}, {0x81a, 0x81a, direction::R}, + {0x81b, 0x823, direction::NSM}, {0x824, 0x824, direction::R}, + {0x825, 0x827, direction::NSM}, {0x828, 0x828, direction::R}, + {0x829, 0x82d, direction::NSM}, {0x830, 0x83e, direction::R}, + {0x840, 0x858, direction::R}, {0x859, 0x85b, direction::NSM}, + {0x85e, 0x85e, direction::R}, {0x860, 0x86a, direction::AL}, + {0x8a0, 0x8b4, direction::AL}, {0x8b6, 0x8c7, direction::AL}, + {0x8d3, 0x8e1, direction::NSM}, {0x8e2, 0x8e2, direction::AN}, + {0x8e3, 0x902, direction::NSM}, {0x903, 0x939, direction::L}, + {0x93a, 0x93a, direction::NSM}, {0x93b, 0x93b, direction::L}, + {0x93c, 0x93c, direction::NSM}, {0x93d, 0x940, direction::L}, + {0x941, 0x948, direction::NSM}, {0x949, 0x94c, direction::L}, + {0x94d, 0x94d, direction::NSM}, {0x94e, 0x950, direction::L}, + {0x951, 0x957, direction::NSM}, {0x958, 0x961, direction::L}, + {0x962, 0x963, direction::NSM}, {0x964, 0x980, direction::L}, + {0x981, 0x981, direction::NSM}, {0x982, 0x983, direction::L}, + {0x985, 0x98c, direction::L}, {0x98f, 0x990, direction::L}, + {0x993, 0x9a8, direction::L}, {0x9aa, 0x9b0, direction::L}, + {0x9b2, 0x9b2, direction::L}, {0x9b6, 0x9b9, direction::L}, + {0x9bc, 0x9bc, direction::NSM}, {0x9bd, 0x9c0, direction::L}, + {0x9c1, 0x9c4, direction::NSM}, {0x9c7, 0x9c8, direction::L}, + {0x9cb, 0x9cc, direction::L}, {0x9cd, 0x9cd, direction::NSM}, + {0x9ce, 0x9ce, direction::L}, {0x9d7, 0x9d7, direction::L}, + {0x9dc, 0x9dd, direction::L}, {0x9df, 0x9e1, direction::L}, + {0x9e2, 0x9e3, direction::NSM}, {0x9e6, 0x9f1, direction::L}, + {0x9f2, 0x9f3, direction::ET}, {0x9f4, 0x9fa, direction::L}, + {0x9fb, 0x9fb, direction::ET}, {0x9fc, 0x9fd, direction::L}, + {0x9fe, 0x9fe, direction::NSM}, {0xa01, 0xa02, direction::NSM}, + {0xa03, 0xa03, direction::L}, {0xa05, 0xa0a, direction::L}, + {0xa0f, 0xa10, direction::L}, {0xa13, 0xa28, direction::L}, + {0xa2a, 0xa30, direction::L}, {0xa32, 0xa33, direction::L}, + {0xa35, 0xa36, direction::L}, {0xa38, 0xa39, direction::L}, + {0xa3c, 0xa3c, direction::NSM}, {0xa3e, 0xa40, direction::L}, + {0xa41, 0xa42, direction::NSM}, {0xa47, 0xa48, direction::NSM}, + {0xa4b, 0xa4d, direction::NSM}, {0xa51, 0xa51, direction::NSM}, + {0xa59, 0xa5c, direction::L}, {0xa5e, 0xa5e, direction::L}, + {0xa66, 0xa6f, direction::L}, {0xa70, 0xa71, direction::NSM}, + {0xa72, 0xa74, direction::L}, {0xa75, 0xa75, direction::NSM}, + {0xa76, 0xa76, direction::L}, {0xa81, 0xa82, direction::NSM}, + {0xa83, 0xa83, direction::L}, {0xa85, 0xa8d, direction::L}, + {0xa8f, 0xa91, direction::L}, {0xa93, 0xaa8, direction::L}, + {0xaaa, 0xab0, direction::L}, {0xab2, 0xab3, direction::L}, + {0xab5, 0xab9, direction::L}, {0xabc, 0xabc, direction::NSM}, + {0xabd, 0xac0, direction::L}, {0xac1, 0xac5, direction::NSM}, + {0xac7, 0xac8, direction::NSM}, {0xac9, 0xac9, direction::L}, + {0xacb, 0xacc, direction::L}, {0xacd, 0xacd, direction::NSM}, + {0xad0, 0xad0, direction::L}, {0xae0, 0xae1, direction::L}, + {0xae2, 0xae3, direction::NSM}, {0xae6, 0xaf0, direction::L}, + {0xaf1, 0xaf1, direction::ET}, {0xaf9, 0xaf9, direction::L}, + {0xafa, 0xaff, direction::NSM}, {0xb01, 0xb01, direction::NSM}, + {0xb02, 0xb03, direction::L}, {0xb05, 0xb0c, direction::L}, + {0xb0f, 0xb10, direction::L}, {0xb13, 0xb28, direction::L}, + {0xb2a, 0xb30, direction::L}, {0xb32, 0xb33, direction::L}, + {0xb35, 0xb39, direction::L}, {0xb3c, 0xb3c, direction::NSM}, + {0xb3d, 0xb3e, direction::L}, {0xb3f, 0xb3f, direction::NSM}, + {0xb40, 0xb40, direction::L}, {0xb41, 0xb44, direction::NSM}, + {0xb47, 0xb48, direction::L}, {0xb4b, 0xb4c, direction::L}, + {0xb4d, 0xb4d, direction::NSM}, {0xb55, 0xb56, direction::NSM}, + {0xb57, 0xb57, direction::L}, {0xb5c, 0xb5d, direction::L}, + {0xb5f, 0xb61, direction::L}, {0xb62, 0xb63, direction::NSM}, + {0xb66, 0xb77, direction::L}, {0xb82, 0xb82, direction::NSM}, + {0xb83, 0xb83, direction::L}, {0xb85, 0xb8a, direction::L}, + {0xb8e, 0xb90, direction::L}, {0xb92, 0xb95, direction::L}, + {0xb99, 0xb9a, direction::L}, {0xb9c, 0xb9c, direction::L}, + {0xb9e, 0xb9f, direction::L}, {0xba3, 0xba4, direction::L}, + {0xba8, 0xbaa, direction::L}, {0xbae, 0xbb9, direction::L}, + {0xbbe, 0xbbf, direction::L}, {0xbc0, 0xbc0, direction::NSM}, + {0xbc1, 0xbc2, direction::L}, {0xbc6, 0xbc8, direction::L}, + {0xbca, 0xbcc, direction::L}, {0xbcd, 0xbcd, direction::NSM}, + {0xbd0, 0xbd0, direction::L}, {0xbd7, 0xbd7, direction::L}, + {0xbe6, 0xbf2, direction::L}, {0xbf3, 0xbf8, direction::ON}, + {0xbf9, 0xbf9, direction::ET}, {0xbfa, 0xbfa, direction::ON}, + {0xc00, 0xc00, direction::NSM}, {0xc01, 0xc03, direction::L}, + {0xc04, 0xc04, direction::NSM}, {0xc05, 0xc0c, direction::L}, + {0xc0e, 0xc10, direction::L}, {0xc12, 0xc28, direction::L}, + {0xc2a, 0xc39, direction::L}, {0xc3d, 0xc3d, direction::L}, + {0xc3e, 0xc40, direction::NSM}, {0xc41, 0xc44, direction::L}, + {0xc46, 0xc48, direction::NSM}, {0xc4a, 0xc4d, direction::NSM}, + {0xc55, 0xc56, direction::NSM}, {0xc58, 0xc5a, direction::L}, + {0xc60, 0xc61, direction::L}, {0xc62, 0xc63, direction::NSM}, + {0xc66, 0xc6f, direction::L}, {0xc77, 0xc77, direction::L}, + {0xc78, 0xc7e, direction::ON}, {0xc7f, 0xc80, direction::L}, + {0xc81, 0xc81, direction::NSM}, {0xc82, 0xc8c, direction::L}, + {0xc8e, 0xc90, direction::L}, {0xc92, 0xca8, direction::L}, + {0xcaa, 0xcb3, direction::L}, {0xcb5, 0xcb9, direction::L}, + {0xcbc, 0xcbc, direction::NSM}, {0xcbd, 0xcc4, direction::L}, + {0xcc6, 0xcc8, direction::L}, {0xcca, 0xccb, direction::L}, + {0xccc, 0xccd, direction::NSM}, {0xcd5, 0xcd6, direction::L}, + {0xcde, 0xcde, direction::L}, {0xce0, 0xce1, direction::L}, + {0xce2, 0xce3, direction::NSM}, {0xce6, 0xcef, direction::L}, + {0xcf1, 0xcf2, direction::L}, {0xd00, 0xd01, direction::NSM}, + {0xd02, 0xd0c, direction::L}, {0xd0e, 0xd10, direction::L}, + {0xd12, 0xd3a, direction::L}, {0xd3b, 0xd3c, direction::NSM}, + {0xd3d, 0xd40, direction::L}, {0xd41, 0xd44, direction::NSM}, + {0xd46, 0xd48, direction::L}, {0xd4a, 0xd4c, direction::L}, + {0xd4d, 0xd4d, direction::NSM}, {0xd4e, 0xd4f, direction::L}, + {0xd54, 0xd61, direction::L}, {0xd62, 0xd63, direction::NSM}, + {0xd66, 0xd7f, direction::L}, {0xd81, 0xd81, direction::NSM}, + {0xd82, 0xd83, direction::L}, {0xd85, 0xd96, direction::L}, + {0xd9a, 0xdb1, direction::L}, {0xdb3, 0xdbb, direction::L}, + {0xdbd, 0xdbd, direction::L}, {0xdc0, 0xdc6, direction::L}, + {0xdca, 0xdca, direction::NSM}, {0xdcf, 0xdd1, direction::L}, + {0xdd2, 0xdd4, direction::NSM}, {0xdd6, 0xdd6, direction::NSM}, + {0xdd8, 0xddf, direction::L}, {0xde6, 0xdef, direction::L}, + {0xdf2, 0xdf4, direction::L}, {0xe01, 0xe30, direction::L}, + {0xe31, 0xe31, direction::NSM}, {0xe32, 0xe33, direction::L}, + {0xe34, 0xe3a, direction::NSM}, {0xe3f, 0xe3f, direction::ET}, + {0xe40, 0xe46, direction::L}, {0xe47, 0xe4e, direction::NSM}, + {0xe4f, 0xe5b, direction::L}, {0xe81, 0xe82, direction::L}, + {0xe84, 0xe84, direction::L}, {0xe86, 0xe8a, direction::L}, + {0xe8c, 0xea3, direction::L}, {0xea5, 0xea5, direction::L}, + {0xea7, 0xeb0, direction::L}, {0xeb1, 0xeb1, direction::NSM}, + {0xeb2, 0xeb3, direction::L}, {0xeb4, 0xebc, direction::NSM}, + {0xebd, 0xebd, direction::L}, {0xec0, 0xec4, direction::L}, + {0xec6, 0xec6, direction::L}, {0xec8, 0xecd, direction::NSM}, + {0xed0, 0xed9, direction::L}, {0xedc, 0xedf, direction::L}, + {0xf00, 0xf17, direction::L}, {0xf18, 0xf19, direction::NSM}, + {0xf1a, 0xf34, direction::L}, {0xf35, 0xf35, direction::NSM}, + {0xf36, 0xf36, direction::L}, {0xf37, 0xf37, direction::NSM}, + {0xf38, 0xf38, direction::L}, {0xf39, 0xf39, direction::NSM}, + {0xf3a, 0xf3d, direction::ON}, {0xf3e, 0xf47, direction::L}, + {0xf49, 0xf6c, direction::L}, {0xf71, 0xf7e, direction::NSM}, + {0xf7f, 0xf7f, direction::L}, {0xf80, 0xf84, direction::NSM}, + {0xf85, 0xf85, direction::L}, {0xf86, 0xf87, direction::NSM}, + {0xf88, 0xf8c, direction::L}, {0xf8d, 0xf97, direction::NSM}, + {0xf99, 0xfbc, direction::NSM}, {0xfbe, 0xfc5, direction::L}, + {0xfc6, 0xfc6, direction::NSM}, {0xfc7, 0xfcc, direction::L}, + {0xfce, 0xfda, direction::L}, {0x1000, 0x102c, direction::L}, + {0x102d, 0x1030, direction::NSM}, {0x1031, 0x1031, direction::L}, + {0x1032, 0x1037, direction::NSM}, {0x1038, 0x1038, direction::L}, + {0x1039, 0x103a, direction::NSM}, {0x103b, 0x103c, direction::L}, + {0x103d, 0x103e, direction::NSM}, {0x103f, 0x1057, direction::L}, + {0x1058, 0x1059, direction::NSM}, {0x105a, 0x105d, direction::L}, + {0x105e, 0x1060, direction::NSM}, {0x1061, 0x1070, direction::L}, + {0x1071, 0x1074, direction::NSM}, {0x1075, 0x1081, direction::L}, + {0x1082, 0x1082, direction::NSM}, {0x1083, 0x1084, direction::L}, + {0x1085, 0x1086, direction::NSM}, {0x1087, 0x108c, direction::L}, + {0x108d, 0x108d, direction::NSM}, {0x108e, 0x109c, direction::L}, + {0x109d, 0x109d, direction::NSM}, {0x109e, 0x10c5, direction::L}, + {0x10c7, 0x10c7, direction::L}, {0x10cd, 0x10cd, direction::L}, + {0x10d0, 0x1248, direction::L}, {0x124a, 0x124d, direction::L}, + {0x1250, 0x1256, direction::L}, {0x1258, 0x1258, direction::L}, + {0x125a, 0x125d, direction::L}, {0x1260, 0x1288, direction::L}, + {0x128a, 0x128d, direction::L}, {0x1290, 0x12b0, direction::L}, + {0x12b2, 0x12b5, direction::L}, {0x12b8, 0x12be, direction::L}, + {0x12c0, 0x12c0, direction::L}, {0x12c2, 0x12c5, direction::L}, + {0x12c8, 0x12d6, direction::L}, {0x12d8, 0x1310, direction::L}, + {0x1312, 0x1315, direction::L}, {0x1318, 0x135a, direction::L}, + {0x135d, 0x135f, direction::NSM}, {0x1360, 0x137c, direction::L}, + {0x1380, 0x138f, direction::L}, {0x1390, 0x1399, direction::ON}, + {0x13a0, 0x13f5, direction::L}, {0x13f8, 0x13fd, direction::L}, + {0x1400, 0x1400, direction::ON}, {0x1401, 0x167f, direction::L}, + {0x1680, 0x1680, direction::WS}, {0x1681, 0x169a, direction::L}, + {0x169b, 0x169c, direction::ON}, {0x16a0, 0x16f8, direction::L}, + {0x1700, 0x170c, direction::L}, {0x170e, 0x1711, direction::L}, + {0x1712, 0x1714, direction::NSM}, {0x1720, 0x1731, direction::L}, + {0x1732, 0x1734, direction::NSM}, {0x1735, 0x1736, direction::L}, + {0x1740, 0x1751, direction::L}, {0x1752, 0x1753, direction::NSM}, + {0x1760, 0x176c, direction::L}, {0x176e, 0x1770, direction::L}, + {0x1772, 0x1773, direction::NSM}, {0x1780, 0x17b3, direction::L}, + {0x17b4, 0x17b5, direction::NSM}, {0x17b6, 0x17b6, direction::L}, + {0x17b7, 0x17bd, direction::NSM}, {0x17be, 0x17c5, direction::L}, + {0x17c6, 0x17c6, direction::NSM}, {0x17c7, 0x17c8, direction::L}, + {0x17c9, 0x17d3, direction::NSM}, {0x17d4, 0x17da, direction::L}, + {0x17db, 0x17db, direction::ET}, {0x17dc, 0x17dc, direction::L}, + {0x17dd, 0x17dd, direction::NSM}, {0x17e0, 0x17e9, direction::L}, + {0x17f0, 0x17f9, direction::ON}, {0x1800, 0x180a, direction::ON}, + {0x180b, 0x180d, direction::NSM}, {0x180e, 0x180e, direction::BN}, + {0x1810, 0x1819, direction::L}, {0x1820, 0x1878, direction::L}, + {0x1880, 0x1884, direction::L}, {0x1885, 0x1886, direction::NSM}, + {0x1887, 0x18a8, direction::L}, {0x18a9, 0x18a9, direction::NSM}, + {0x18aa, 0x18aa, direction::L}, {0x18b0, 0x18f5, direction::L}, + {0x1900, 0x191e, direction::L}, {0x1920, 0x1922, direction::NSM}, + {0x1923, 0x1926, direction::L}, {0x1927, 0x1928, direction::NSM}, + {0x1929, 0x192b, direction::L}, {0x1930, 0x1931, direction::L}, + {0x1932, 0x1932, direction::NSM}, {0x1933, 0x1938, direction::L}, + {0x1939, 0x193b, direction::NSM}, {0x1940, 0x1940, direction::ON}, + {0x1944, 0x1945, direction::ON}, {0x1946, 0x196d, direction::L}, + {0x1970, 0x1974, direction::L}, {0x1980, 0x19ab, direction::L}, + {0x19b0, 0x19c9, direction::L}, {0x19d0, 0x19da, direction::L}, + {0x19de, 0x19ff, direction::ON}, {0x1a00, 0x1a16, direction::L}, + {0x1a17, 0x1a18, direction::NSM}, {0x1a19, 0x1a1a, direction::L}, + {0x1a1b, 0x1a1b, direction::NSM}, {0x1a1e, 0x1a55, direction::L}, + {0x1a56, 0x1a56, direction::NSM}, {0x1a57, 0x1a57, direction::L}, + {0x1a58, 0x1a5e, direction::NSM}, {0x1a60, 0x1a60, direction::NSM}, + {0x1a61, 0x1a61, direction::L}, {0x1a62, 0x1a62, direction::NSM}, + {0x1a63, 0x1a64, direction::L}, {0x1a65, 0x1a6c, direction::NSM}, + {0x1a6d, 0x1a72, direction::L}, {0x1a73, 0x1a7c, direction::NSM}, + {0x1a7f, 0x1a7f, direction::NSM}, {0x1a80, 0x1a89, direction::L}, + {0x1a90, 0x1a99, direction::L}, {0x1aa0, 0x1aad, direction::L}, + {0x1ab0, 0x1ac0, direction::NSM}, {0x1b00, 0x1b03, direction::NSM}, + {0x1b04, 0x1b33, direction::L}, {0x1b34, 0x1b34, direction::NSM}, + {0x1b35, 0x1b35, direction::L}, {0x1b36, 0x1b3a, direction::NSM}, + {0x1b3b, 0x1b3b, direction::L}, {0x1b3c, 0x1b3c, direction::NSM}, + {0x1b3d, 0x1b41, direction::L}, {0x1b42, 0x1b42, direction::NSM}, + {0x1b43, 0x1b4b, direction::L}, {0x1b50, 0x1b6a, direction::L}, + {0x1b6b, 0x1b73, direction::NSM}, {0x1b74, 0x1b7c, direction::L}, + {0x1b80, 0x1b81, direction::NSM}, {0x1b82, 0x1ba1, direction::L}, + {0x1ba2, 0x1ba5, direction::NSM}, {0x1ba6, 0x1ba7, direction::L}, + {0x1ba8, 0x1ba9, direction::NSM}, {0x1baa, 0x1baa, direction::L}, + {0x1bab, 0x1bad, direction::NSM}, {0x1bae, 0x1be5, direction::L}, + {0x1be6, 0x1be6, direction::NSM}, {0x1be7, 0x1be7, direction::L}, + {0x1be8, 0x1be9, direction::NSM}, {0x1bea, 0x1bec, direction::L}, + {0x1bed, 0x1bed, direction::NSM}, {0x1bee, 0x1bee, direction::L}, + {0x1bef, 0x1bf1, direction::NSM}, {0x1bf2, 0x1bf3, direction::L}, + {0x1bfc, 0x1c2b, direction::L}, {0x1c2c, 0x1c33, direction::NSM}, + {0x1c34, 0x1c35, direction::L}, {0x1c36, 0x1c37, direction::NSM}, + {0x1c3b, 0x1c49, direction::L}, {0x1c4d, 0x1c88, direction::L}, + {0x1c90, 0x1cba, direction::L}, {0x1cbd, 0x1cc7, direction::L}, + {0x1cd0, 0x1cd2, direction::NSM}, {0x1cd3, 0x1cd3, direction::L}, + {0x1cd4, 0x1ce0, direction::NSM}, {0x1ce1, 0x1ce1, direction::L}, + {0x1ce2, 0x1ce8, direction::NSM}, {0x1ce9, 0x1cec, direction::L}, + {0x1ced, 0x1ced, direction::NSM}, {0x1cee, 0x1cf3, direction::L}, + {0x1cf4, 0x1cf4, direction::NSM}, {0x1cf5, 0x1cf7, direction::L}, + {0x1cf8, 0x1cf9, direction::NSM}, {0x1cfa, 0x1cfa, direction::L}, + {0x1d00, 0x1dbf, direction::L}, {0x1dc0, 0x1df9, direction::NSM}, + {0x1dfb, 0x1dff, direction::NSM}, {0x1e00, 0x1f15, direction::L}, + {0x1f18, 0x1f1d, direction::L}, {0x1f20, 0x1f45, direction::L}, + {0x1f48, 0x1f4d, direction::L}, {0x1f50, 0x1f57, direction::L}, + {0x1f59, 0x1f59, direction::L}, {0x1f5b, 0x1f5b, direction::L}, + {0x1f5d, 0x1f5d, direction::L}, {0x1f5f, 0x1f7d, direction::L}, + {0x1f80, 0x1fb4, direction::L}, {0x1fb6, 0x1fbc, direction::L}, + {0x1fbd, 0x1fbd, direction::ON}, {0x1fbe, 0x1fbe, direction::L}, + {0x1fbf, 0x1fc1, direction::ON}, {0x1fc2, 0x1fc4, direction::L}, + {0x1fc6, 0x1fcc, direction::L}, {0x1fcd, 0x1fcf, direction::ON}, + {0x1fd0, 0x1fd3, direction::L}, {0x1fd6, 0x1fdb, direction::L}, + {0x1fdd, 0x1fdf, direction::ON}, {0x1fe0, 0x1fec, direction::L}, + {0x1fed, 0x1fef, direction::ON}, {0x1ff2, 0x1ff4, direction::L}, + {0x1ff6, 0x1ffc, direction::L}, {0x1ffd, 0x1ffe, direction::ON}, + {0x2000, 0x200a, direction::WS}, {0x200b, 0x200d, direction::BN}, + {0x200e, 0x200e, direction::L}, {0x200f, 0x200f, direction::R}, + {0x2010, 0x2027, direction::ON}, {0x2028, 0x2028, direction::WS}, + {0x2029, 0x2029, direction::B}, {0x202a, 0x202a, direction::LRE}, + {0x202b, 0x202b, direction::RLE}, {0x202c, 0x202c, direction::PDF}, + {0x202d, 0x202d, direction::LRO}, {0x202e, 0x202e, direction::RLO}, + {0x202f, 0x202f, direction::CS}, {0x2030, 0x2034, direction::ET}, + {0x2035, 0x2043, direction::ON}, {0x2044, 0x2044, direction::CS}, + {0x2045, 0x205e, direction::ON}, {0x205f, 0x205f, direction::WS}, + {0x2060, 0x2064, direction::BN}, {0x2066, 0x2066, direction::LRI}, + {0x2067, 0x2067, direction::RLI}, {0x2068, 0x2068, direction::FSI}, + {0x2069, 0x2069, direction::PDI}, {0x206a, 0x206f, direction::BN}, + {0x2070, 0x2070, direction::EN}, {0x2071, 0x2071, direction::L}, + {0x2074, 0x2079, direction::EN}, {0x207a, 0x207b, direction::ES}, + {0x207c, 0x207e, direction::ON}, {0x207f, 0x207f, direction::L}, + {0x2080, 0x2089, direction::EN}, {0x208a, 0x208b, direction::ES}, + {0x208c, 0x208e, direction::ON}, {0x2090, 0x209c, direction::L}, + {0x20a0, 0x20bf, direction::ET}, {0x20d0, 0x20f0, direction::NSM}, + {0x2100, 0x2101, direction::ON}, {0x2102, 0x2102, direction::L}, + {0x2103, 0x2106, direction::ON}, {0x2107, 0x2107, direction::L}, + {0x2108, 0x2109, direction::ON}, {0x210a, 0x2113, direction::L}, + {0x2114, 0x2114, direction::ON}, {0x2115, 0x2115, direction::L}, + {0x2116, 0x2118, direction::ON}, {0x2119, 0x211d, direction::L}, + {0x211e, 0x2123, direction::ON}, {0x2124, 0x2124, direction::L}, + {0x2125, 0x2125, direction::ON}, {0x2126, 0x2126, direction::L}, + {0x2127, 0x2127, direction::ON}, {0x2128, 0x2128, direction::L}, + {0x2129, 0x2129, direction::ON}, {0x212a, 0x212d, direction::L}, + {0x212e, 0x212e, direction::ET}, {0x212f, 0x2139, direction::L}, + {0x213a, 0x213b, direction::ON}, {0x213c, 0x213f, direction::L}, + {0x2140, 0x2144, direction::ON}, {0x2145, 0x2149, direction::L}, + {0x214a, 0x214d, direction::ON}, {0x214e, 0x214f, direction::L}, + {0x2150, 0x215f, direction::ON}, {0x2160, 0x2188, direction::L}, + {0x2189, 0x218b, direction::ON}, {0x2190, 0x2211, direction::ON}, + {0x2212, 0x2212, direction::ES}, {0x2213, 0x2213, direction::ET}, + {0x2214, 0x2335, direction::ON}, {0x2336, 0x237a, direction::L}, + {0x237b, 0x2394, direction::ON}, {0x2395, 0x2395, direction::L}, + {0x2396, 0x2426, direction::ON}, {0x2440, 0x244a, direction::ON}, + {0x2460, 0x2487, direction::ON}, {0x2488, 0x249b, direction::EN}, + {0x249c, 0x24e9, direction::L}, {0x24ea, 0x26ab, direction::ON}, + {0x26ac, 0x26ac, direction::L}, {0x26ad, 0x27ff, direction::ON}, + {0x2800, 0x28ff, direction::L}, {0x2900, 0x2b73, direction::ON}, + {0x2b76, 0x2b95, direction::ON}, {0x2b97, 0x2bff, direction::ON}, + {0x2c00, 0x2c2e, direction::L}, {0x2c30, 0x2c5e, direction::L}, + {0x2c60, 0x2ce4, direction::L}, {0x2ce5, 0x2cea, direction::ON}, + {0x2ceb, 0x2cee, direction::L}, {0x2cef, 0x2cf1, direction::NSM}, + {0x2cf2, 0x2cf3, direction::L}, {0x2cf9, 0x2cff, direction::ON}, + {0x2d00, 0x2d25, direction::L}, {0x2d27, 0x2d27, direction::L}, + {0x2d2d, 0x2d2d, direction::L}, {0x2d30, 0x2d67, direction::L}, + {0x2d6f, 0x2d70, direction::L}, {0x2d7f, 0x2d7f, direction::NSM}, + {0x2d80, 0x2d96, direction::L}, {0x2da0, 0x2da6, direction::L}, + {0x2da8, 0x2dae, direction::L}, {0x2db0, 0x2db6, direction::L}, + {0x2db8, 0x2dbe, direction::L}, {0x2dc0, 0x2dc6, direction::L}, + {0x2dc8, 0x2dce, direction::L}, {0x2dd0, 0x2dd6, direction::L}, + {0x2dd8, 0x2dde, direction::L}, {0x2de0, 0x2dff, direction::NSM}, + {0x2e00, 0x2e52, direction::ON}, {0x2e80, 0x2e99, direction::ON}, + {0x2e9b, 0x2ef3, direction::ON}, {0x2f00, 0x2fd5, direction::ON}, + {0x2ff0, 0x2ffb, direction::ON}, {0x3000, 0x3000, direction::WS}, + {0x3001, 0x3004, direction::ON}, {0x3005, 0x3007, direction::L}, + {0x3008, 0x3020, direction::ON}, {0x3021, 0x3029, direction::L}, + {0x302a, 0x302d, direction::NSM}, {0x302e, 0x302f, direction::L}, + {0x3030, 0x3030, direction::ON}, {0x3031, 0x3035, direction::L}, + {0x3036, 0x3037, direction::ON}, {0x3038, 0x303c, direction::L}, + {0x303d, 0x303f, direction::ON}, {0x3041, 0x3096, direction::L}, + {0x3099, 0x309a, direction::NSM}, {0x309b, 0x309c, direction::ON}, + {0x309d, 0x309f, direction::L}, {0x30a0, 0x30a0, direction::ON}, + {0x30a1, 0x30fa, direction::L}, {0x30fb, 0x30fb, direction::ON}, + {0x30fc, 0x30ff, direction::L}, {0x3105, 0x312f, direction::L}, + {0x3131, 0x318e, direction::L}, {0x3190, 0x31bf, direction::L}, + {0x31c0, 0x31e3, direction::ON}, {0x31f0, 0x321c, direction::L}, + {0x321d, 0x321e, direction::ON}, {0x3220, 0x324f, direction::L}, + {0x3250, 0x325f, direction::ON}, {0x3260, 0x327b, direction::L}, + {0x327c, 0x327e, direction::ON}, {0x327f, 0x32b0, direction::L}, + {0x32b1, 0x32bf, direction::ON}, {0x32c0, 0x32cb, direction::L}, + {0x32cc, 0x32cf, direction::ON}, {0x32d0, 0x3376, direction::L}, + {0x3377, 0x337a, direction::ON}, {0x337b, 0x33dd, direction::L}, + {0x33de, 0x33df, direction::ON}, {0x33e0, 0x33fe, direction::L}, + {0x33ff, 0x33ff, direction::ON}, {0x3400, 0x4dbf, direction::L}, + {0x4dc0, 0x4dff, direction::ON}, {0x4e00, 0x9ffc, direction::L}, + {0xa000, 0xa48c, direction::L}, {0xa490, 0xa4c6, direction::ON}, + {0xa4d0, 0xa60c, direction::L}, {0xa60d, 0xa60f, direction::ON}, + {0xa610, 0xa62b, direction::L}, {0xa640, 0xa66e, direction::L}, + {0xa66f, 0xa672, direction::NSM}, {0xa673, 0xa673, direction::ON}, + {0xa674, 0xa67d, direction::NSM}, {0xa67e, 0xa67f, direction::ON}, + {0xa680, 0xa69d, direction::L}, {0xa69e, 0xa69f, direction::NSM}, + {0xa6a0, 0xa6ef, direction::L}, {0xa6f0, 0xa6f1, direction::NSM}, + {0xa6f2, 0xa6f7, direction::L}, {0xa700, 0xa721, direction::ON}, + {0xa722, 0xa787, direction::L}, {0xa788, 0xa788, direction::ON}, + {0xa789, 0xa7bf, direction::L}, {0xa7c2, 0xa7ca, direction::L}, + {0xa7f5, 0xa801, direction::L}, {0xa802, 0xa802, direction::NSM}, + {0xa803, 0xa805, direction::L}, {0xa806, 0xa806, direction::NSM}, + {0xa807, 0xa80a, direction::L}, {0xa80b, 0xa80b, direction::NSM}, + {0xa80c, 0xa824, direction::L}, {0xa825, 0xa826, direction::NSM}, + {0xa827, 0xa827, direction::L}, {0xa828, 0xa82b, direction::ON}, + {0xa82c, 0xa82c, direction::NSM}, {0xa830, 0xa837, direction::L}, + {0xa838, 0xa839, direction::ET}, {0xa840, 0xa873, direction::L}, + {0xa874, 0xa877, direction::ON}, {0xa880, 0xa8c3, direction::L}, + {0xa8c4, 0xa8c5, direction::NSM}, {0xa8ce, 0xa8d9, direction::L}, + {0xa8e0, 0xa8f1, direction::NSM}, {0xa8f2, 0xa8fe, direction::L}, + {0xa8ff, 0xa8ff, direction::NSM}, {0xa900, 0xa925, direction::L}, + {0xa926, 0xa92d, direction::NSM}, {0xa92e, 0xa946, direction::L}, + {0xa947, 0xa951, direction::NSM}, {0xa952, 0xa953, direction::L}, + {0xa95f, 0xa97c, direction::L}, {0xa980, 0xa982, direction::NSM}, + {0xa983, 0xa9b2, direction::L}, {0xa9b3, 0xa9b3, direction::NSM}, + {0xa9b4, 0xa9b5, direction::L}, {0xa9b6, 0xa9b9, direction::NSM}, + {0xa9ba, 0xa9bb, direction::L}, {0xa9bc, 0xa9bd, direction::NSM}, + {0xa9be, 0xa9cd, direction::L}, {0xa9cf, 0xa9d9, direction::L}, + {0xa9de, 0xa9e4, direction::L}, {0xa9e5, 0xa9e5, direction::NSM}, + {0xa9e6, 0xa9fe, direction::L}, {0xaa00, 0xaa28, direction::L}, + {0xaa29, 0xaa2e, direction::NSM}, {0xaa2f, 0xaa30, direction::L}, + {0xaa31, 0xaa32, direction::NSM}, {0xaa33, 0xaa34, direction::L}, + {0xaa35, 0xaa36, direction::NSM}, {0xaa40, 0xaa42, direction::L}, + {0xaa43, 0xaa43, direction::NSM}, {0xaa44, 0xaa4b, direction::L}, + {0xaa4c, 0xaa4c, direction::NSM}, {0xaa4d, 0xaa4d, direction::L}, + {0xaa50, 0xaa59, direction::L}, {0xaa5c, 0xaa7b, direction::L}, + {0xaa7c, 0xaa7c, direction::NSM}, {0xaa7d, 0xaaaf, direction::L}, + {0xaab0, 0xaab0, direction::NSM}, {0xaab1, 0xaab1, direction::L}, + {0xaab2, 0xaab4, direction::NSM}, {0xaab5, 0xaab6, direction::L}, + {0xaab7, 0xaab8, direction::NSM}, {0xaab9, 0xaabd, direction::L}, + {0xaabe, 0xaabf, direction::NSM}, {0xaac0, 0xaac0, direction::L}, + {0xaac1, 0xaac1, direction::NSM}, {0xaac2, 0xaac2, direction::L}, + {0xaadb, 0xaaeb, direction::L}, {0xaaec, 0xaaed, direction::NSM}, + {0xaaee, 0xaaf5, direction::L}, {0xaaf6, 0xaaf6, direction::NSM}, + {0xab01, 0xab06, direction::L}, {0xab09, 0xab0e, direction::L}, + {0xab11, 0xab16, direction::L}, {0xab20, 0xab26, direction::L}, + {0xab28, 0xab2e, direction::L}, {0xab30, 0xab69, direction::L}, + {0xab6a, 0xab6b, direction::ON}, {0xab70, 0xabe4, direction::L}, + {0xabe5, 0xabe5, direction::NSM}, {0xabe6, 0xabe7, direction::L}, + {0xabe8, 0xabe8, direction::NSM}, {0xabe9, 0xabec, direction::L}, + {0xabed, 0xabed, direction::NSM}, {0xabf0, 0xabf9, direction::L}, + {0xac00, 0xd7a3, direction::L}, {0xd7b0, 0xd7c6, direction::L}, + {0xd7cb, 0xd7fb, direction::L}, {0xd800, 0xfa6d, direction::L}, + {0xfa70, 0xfad9, direction::L}, {0xfb00, 0xfb06, direction::L}, + {0xfb13, 0xfb17, direction::L}, {0xfb1d, 0xfb1d, direction::R}, + {0xfb1e, 0xfb1e, direction::NSM}, {0xfb1f, 0xfb28, direction::R}, + {0xfb29, 0xfb29, direction::ES}, {0xfb2a, 0xfb36, direction::R}, + {0xfb38, 0xfb3c, direction::R}, {0xfb3e, 0xfb3e, direction::R}, + {0xfb40, 0xfb41, direction::R}, {0xfb43, 0xfb44, direction::R}, + {0xfb46, 0xfb4f, direction::R}, {0xfb50, 0xfbc1, direction::AL}, + {0xfbd3, 0xfd3d, direction::AL}, {0xfd3e, 0xfd3f, direction::ON}, + {0xfd50, 0xfd8f, direction::AL}, {0xfd92, 0xfdc7, direction::AL}, + {0xfdf0, 0xfdfc, direction::AL}, {0xfdfd, 0xfdfd, direction::ON}, + {0xfe00, 0xfe0f, direction::NSM}, {0xfe10, 0xfe19, direction::ON}, + {0xfe20, 0xfe2f, direction::NSM}, {0xfe30, 0xfe4f, direction::ON}, + {0xfe50, 0xfe50, direction::CS}, {0xfe51, 0xfe51, direction::ON}, + {0xfe52, 0xfe52, direction::CS}, {0xfe54, 0xfe54, direction::ON}, + {0xfe55, 0xfe55, direction::CS}, {0xfe56, 0xfe5e, direction::ON}, + {0xfe5f, 0xfe5f, direction::ET}, {0xfe60, 0xfe61, direction::ON}, + {0xfe62, 0xfe63, direction::ES}, {0xfe64, 0xfe66, direction::ON}, + {0xfe68, 0xfe68, direction::ON}, {0xfe69, 0xfe6a, direction::ET}, + {0xfe6b, 0xfe6b, direction::ON}, {0xfe70, 0xfe74, direction::AL}, + {0xfe76, 0xfefc, direction::AL}, {0xfeff, 0xfeff, direction::BN}, + {0xff01, 0xff02, direction::ON}, {0xff03, 0xff05, direction::ET}, + {0xff06, 0xff0a, direction::ON}, {0xff0b, 0xff0b, direction::ES}, + {0xff0c, 0xff0c, direction::CS}, {0xff0d, 0xff0d, direction::ES}, + {0xff0e, 0xff0f, direction::CS}, {0xff10, 0xff19, direction::EN}, + {0xff1a, 0xff1a, direction::CS}, {0xff1b, 0xff20, direction::ON}, + {0xff21, 0xff3a, direction::L}, {0xff3b, 0xff40, direction::ON}, + {0xff41, 0xff5a, direction::L}, {0xff5b, 0xff65, direction::ON}, + {0xff66, 0xffbe, direction::L}, {0xffc2, 0xffc7, direction::L}, + {0xffca, 0xffcf, direction::L}, {0xffd2, 0xffd7, direction::L}, + {0xffda, 0xffdc, direction::L}, {0xffe0, 0xffe1, direction::ET}, + {0xffe2, 0xffe4, direction::ON}, {0xffe5, 0xffe6, direction::ET}, + {0xffe8, 0xffee, direction::ON}, {0xfff9, 0xfffd, direction::ON}, + {0x10000, 0x1000b, direction::L}, {0x1000d, 0x10026, direction::L}, + {0x10028, 0x1003a, direction::L}, {0x1003c, 0x1003d, direction::L}, + {0x1003f, 0x1004d, direction::L}, {0x10050, 0x1005d, direction::L}, + {0x10080, 0x100fa, direction::L}, {0x10100, 0x10100, direction::L}, + {0x10101, 0x10101, direction::ON}, {0x10102, 0x10102, direction::L}, + {0x10107, 0x10133, direction::L}, {0x10137, 0x1013f, direction::L}, + {0x10140, 0x1018c, direction::ON}, {0x1018d, 0x1018e, direction::L}, + {0x10190, 0x1019c, direction::ON}, {0x101a0, 0x101a0, direction::ON}, + {0x101d0, 0x101fc, direction::L}, {0x101fd, 0x101fd, direction::NSM}, + {0x10280, 0x1029c, direction::L}, {0x102a0, 0x102d0, direction::L}, + {0x102e0, 0x102e0, direction::NSM}, {0x102e1, 0x102fb, direction::EN}, + {0x10300, 0x10323, direction::L}, {0x1032d, 0x1034a, direction::L}, + {0x10350, 0x10375, direction::L}, {0x10376, 0x1037a, direction::NSM}, + {0x10380, 0x1039d, direction::L}, {0x1039f, 0x103c3, direction::L}, + {0x103c8, 0x103d5, direction::L}, {0x10400, 0x1049d, direction::L}, + {0x104a0, 0x104a9, direction::L}, {0x104b0, 0x104d3, direction::L}, + {0x104d8, 0x104fb, direction::L}, {0x10500, 0x10527, direction::L}, + {0x10530, 0x10563, direction::L}, {0x1056f, 0x1056f, direction::L}, + {0x10600, 0x10736, direction::L}, {0x10740, 0x10755, direction::L}, + {0x10760, 0x10767, direction::L}, {0x10800, 0x10805, direction::R}, + {0x10808, 0x10808, direction::R}, {0x1080a, 0x10835, direction::R}, + {0x10837, 0x10838, direction::R}, {0x1083c, 0x1083c, direction::R}, + {0x1083f, 0x10855, direction::R}, {0x10857, 0x1089e, direction::R}, + {0x108a7, 0x108af, direction::R}, {0x108e0, 0x108f2, direction::R}, + {0x108f4, 0x108f5, direction::R}, {0x108fb, 0x1091b, direction::R}, + {0x1091f, 0x1091f, direction::ON}, {0x10920, 0x10939, direction::R}, + {0x1093f, 0x1093f, direction::R}, {0x10980, 0x109b7, direction::R}, + {0x109bc, 0x109cf, direction::R}, {0x109d2, 0x10a00, direction::R}, + {0x10a01, 0x10a03, direction::NSM}, {0x10a05, 0x10a06, direction::NSM}, + {0x10a0c, 0x10a0f, direction::NSM}, {0x10a10, 0x10a13, direction::R}, + {0x10a15, 0x10a17, direction::R}, {0x10a19, 0x10a35, direction::R}, + {0x10a38, 0x10a3a, direction::NSM}, {0x10a3f, 0x10a3f, direction::NSM}, + {0x10a40, 0x10a48, direction::R}, {0x10a50, 0x10a58, direction::R}, + {0x10a60, 0x10a9f, direction::R}, {0x10ac0, 0x10ae4, direction::R}, + {0x10ae5, 0x10ae6, direction::NSM}, {0x10aeb, 0x10af6, direction::R}, + {0x10b00, 0x10b35, direction::R}, {0x10b39, 0x10b3f, direction::ON}, + {0x10b40, 0x10b55, direction::R}, {0x10b58, 0x10b72, direction::R}, + {0x10b78, 0x10b91, direction::R}, {0x10b99, 0x10b9c, direction::R}, + {0x10ba9, 0x10baf, direction::R}, {0x10c00, 0x10c48, direction::R}, + {0x10c80, 0x10cb2, direction::R}, {0x10cc0, 0x10cf2, direction::R}, + {0x10cfa, 0x10cff, direction::R}, {0x10d00, 0x10d23, direction::AL}, + {0x10d24, 0x10d27, direction::NSM}, {0x10d30, 0x10d39, direction::AN}, + {0x10e60, 0x10e7e, direction::AN}, {0x10e80, 0x10ea9, direction::R}, + {0x10eab, 0x10eac, direction::NSM}, {0x10ead, 0x10ead, direction::R}, + {0x10eb0, 0x10eb1, direction::R}, {0x10f00, 0x10f27, direction::R}, + {0x10f30, 0x10f45, direction::AL}, {0x10f46, 0x10f50, direction::NSM}, + {0x10f51, 0x10f59, direction::AL}, {0x10fb0, 0x10fcb, direction::R}, + {0x10fe0, 0x10ff6, direction::R}, {0x11000, 0x11000, direction::L}, + {0x11001, 0x11001, direction::NSM}, {0x11002, 0x11037, direction::L}, + {0x11038, 0x11046, direction::NSM}, {0x11047, 0x1104d, direction::L}, + {0x11052, 0x11065, direction::ON}, {0x11066, 0x1106f, direction::L}, + {0x1107f, 0x11081, direction::NSM}, {0x11082, 0x110b2, direction::L}, + {0x110b3, 0x110b6, direction::NSM}, {0x110b7, 0x110b8, direction::L}, + {0x110b9, 0x110ba, direction::NSM}, {0x110bb, 0x110c1, direction::L}, + {0x110cd, 0x110cd, direction::L}, {0x110d0, 0x110e8, direction::L}, + {0x110f0, 0x110f9, direction::L}, {0x11100, 0x11102, direction::NSM}, + {0x11103, 0x11126, direction::L}, {0x11127, 0x1112b, direction::NSM}, + {0x1112c, 0x1112c, direction::L}, {0x1112d, 0x11134, direction::NSM}, + {0x11136, 0x11147, direction::L}, {0x11150, 0x11172, direction::L}, + {0x11173, 0x11173, direction::NSM}, {0x11174, 0x11176, direction::L}, + {0x11180, 0x11181, direction::NSM}, {0x11182, 0x111b5, direction::L}, + {0x111b6, 0x111be, direction::NSM}, {0x111bf, 0x111c8, direction::L}, + {0x111c9, 0x111cc, direction::NSM}, {0x111cd, 0x111ce, direction::L}, + {0x111cf, 0x111cf, direction::NSM}, {0x111d0, 0x111df, direction::L}, + {0x111e1, 0x111f4, direction::L}, {0x11200, 0x11211, direction::L}, + {0x11213, 0x1122e, direction::L}, {0x1122f, 0x11231, direction::NSM}, + {0x11232, 0x11233, direction::L}, {0x11234, 0x11234, direction::NSM}, + {0x11235, 0x11235, direction::L}, {0x11236, 0x11237, direction::NSM}, + {0x11238, 0x1123d, direction::L}, {0x1123e, 0x1123e, direction::NSM}, + {0x11280, 0x11286, direction::L}, {0x11288, 0x11288, direction::L}, + {0x1128a, 0x1128d, direction::L}, {0x1128f, 0x1129d, direction::L}, + {0x1129f, 0x112a9, direction::L}, {0x112b0, 0x112de, direction::L}, + {0x112df, 0x112df, direction::NSM}, {0x112e0, 0x112e2, direction::L}, + {0x112e3, 0x112ea, direction::NSM}, {0x112f0, 0x112f9, direction::L}, + {0x11300, 0x11301, direction::NSM}, {0x11302, 0x11303, direction::L}, + {0x11305, 0x1130c, direction::L}, {0x1130f, 0x11310, direction::L}, + {0x11313, 0x11328, direction::L}, {0x1132a, 0x11330, direction::L}, + {0x11332, 0x11333, direction::L}, {0x11335, 0x11339, direction::L}, + {0x1133b, 0x1133c, direction::NSM}, {0x1133d, 0x1133f, direction::L}, + {0x11340, 0x11340, direction::NSM}, {0x11341, 0x11344, direction::L}, + {0x11347, 0x11348, direction::L}, {0x1134b, 0x1134d, direction::L}, + {0x11350, 0x11350, direction::L}, {0x11357, 0x11357, direction::L}, + {0x1135d, 0x11363, direction::L}, {0x11366, 0x1136c, direction::NSM}, + {0x11370, 0x11374, direction::NSM}, {0x11400, 0x11437, direction::L}, + {0x11438, 0x1143f, direction::NSM}, {0x11440, 0x11441, direction::L}, + {0x11442, 0x11444, direction::NSM}, {0x11445, 0x11445, direction::L}, + {0x11446, 0x11446, direction::NSM}, {0x11447, 0x1145b, direction::L}, + {0x1145d, 0x1145d, direction::L}, {0x1145e, 0x1145e, direction::NSM}, + {0x1145f, 0x11461, direction::L}, {0x11480, 0x114b2, direction::L}, + {0x114b3, 0x114b8, direction::NSM}, {0x114b9, 0x114b9, direction::L}, + {0x114ba, 0x114ba, direction::NSM}, {0x114bb, 0x114be, direction::L}, + {0x114bf, 0x114c0, direction::NSM}, {0x114c1, 0x114c1, direction::L}, + {0x114c2, 0x114c3, direction::NSM}, {0x114c4, 0x114c7, direction::L}, + {0x114d0, 0x114d9, direction::L}, {0x11580, 0x115b1, direction::L}, + {0x115b2, 0x115b5, direction::NSM}, {0x115b8, 0x115bb, direction::L}, + {0x115bc, 0x115bd, direction::NSM}, {0x115be, 0x115be, direction::L}, + {0x115bf, 0x115c0, direction::NSM}, {0x115c1, 0x115db, direction::L}, + {0x115dc, 0x115dd, direction::NSM}, {0x11600, 0x11632, direction::L}, + {0x11633, 0x1163a, direction::NSM}, {0x1163b, 0x1163c, direction::L}, + {0x1163d, 0x1163d, direction::NSM}, {0x1163e, 0x1163e, direction::L}, + {0x1163f, 0x11640, direction::NSM}, {0x11641, 0x11644, direction::L}, + {0x11650, 0x11659, direction::L}, {0x11660, 0x1166c, direction::ON}, + {0x11680, 0x116aa, direction::L}, {0x116ab, 0x116ab, direction::NSM}, + {0x116ac, 0x116ac, direction::L}, {0x116ad, 0x116ad, direction::NSM}, + {0x116ae, 0x116af, direction::L}, {0x116b0, 0x116b5, direction::NSM}, + {0x116b6, 0x116b6, direction::L}, {0x116b7, 0x116b7, direction::NSM}, + {0x116b8, 0x116b8, direction::L}, {0x116c0, 0x116c9, direction::L}, + {0x11700, 0x1171a, direction::L}, {0x1171d, 0x1171f, direction::NSM}, + {0x11720, 0x11721, direction::L}, {0x11722, 0x11725, direction::NSM}, + {0x11726, 0x11726, direction::L}, {0x11727, 0x1172b, direction::NSM}, + {0x11730, 0x1173f, direction::L}, {0x11800, 0x1182e, direction::L}, + {0x1182f, 0x11837, direction::NSM}, {0x11838, 0x11838, direction::L}, + {0x11839, 0x1183a, direction::NSM}, {0x1183b, 0x1183b, direction::L}, + {0x118a0, 0x118f2, direction::L}, {0x118ff, 0x11906, direction::L}, + {0x11909, 0x11909, direction::L}, {0x1190c, 0x11913, direction::L}, + {0x11915, 0x11916, direction::L}, {0x11918, 0x11935, direction::L}, + {0x11937, 0x11938, direction::L}, {0x1193b, 0x1193c, direction::NSM}, + {0x1193d, 0x1193d, direction::L}, {0x1193e, 0x1193e, direction::NSM}, + {0x1193f, 0x11942, direction::L}, {0x11943, 0x11943, direction::NSM}, + {0x11944, 0x11946, direction::L}, {0x11950, 0x11959, direction::L}, + {0x119a0, 0x119a7, direction::L}, {0x119aa, 0x119d3, direction::L}, + {0x119d4, 0x119d7, direction::NSM}, {0x119da, 0x119db, direction::NSM}, + {0x119dc, 0x119df, direction::L}, {0x119e0, 0x119e0, direction::NSM}, + {0x119e1, 0x119e4, direction::L}, {0x11a00, 0x11a00, direction::L}, + {0x11a01, 0x11a06, direction::NSM}, {0x11a07, 0x11a08, direction::L}, + {0x11a09, 0x11a0a, direction::NSM}, {0x11a0b, 0x11a32, direction::L}, + {0x11a33, 0x11a38, direction::NSM}, {0x11a39, 0x11a3a, direction::L}, + {0x11a3b, 0x11a3e, direction::NSM}, {0x11a3f, 0x11a46, direction::L}, + {0x11a47, 0x11a47, direction::NSM}, {0x11a50, 0x11a50, direction::L}, + {0x11a51, 0x11a56, direction::NSM}, {0x11a57, 0x11a58, direction::L}, + {0x11a59, 0x11a5b, direction::NSM}, {0x11a5c, 0x11a89, direction::L}, + {0x11a8a, 0x11a96, direction::NSM}, {0x11a97, 0x11a97, direction::L}, + {0x11a98, 0x11a99, direction::NSM}, {0x11a9a, 0x11aa2, direction::L}, + {0x11ac0, 0x11af8, direction::L}, {0x11c00, 0x11c08, direction::L}, + {0x11c0a, 0x11c2f, direction::L}, {0x11c30, 0x11c36, direction::NSM}, + {0x11c38, 0x11c3d, direction::NSM}, {0x11c3e, 0x11c45, direction::L}, + {0x11c50, 0x11c6c, direction::L}, {0x11c70, 0x11c8f, direction::L}, + {0x11c92, 0x11ca7, direction::NSM}, {0x11ca9, 0x11ca9, direction::L}, + {0x11caa, 0x11cb0, direction::NSM}, {0x11cb1, 0x11cb1, direction::L}, + {0x11cb2, 0x11cb3, direction::NSM}, {0x11cb4, 0x11cb4, direction::L}, + {0x11cb5, 0x11cb6, direction::NSM}, {0x11d00, 0x11d06, direction::L}, + {0x11d08, 0x11d09, direction::L}, {0x11d0b, 0x11d30, direction::L}, + {0x11d31, 0x11d36, direction::NSM}, {0x11d3a, 0x11d3a, direction::NSM}, + {0x11d3c, 0x11d3d, direction::NSM}, {0x11d3f, 0x11d45, direction::NSM}, + {0x11d46, 0x11d46, direction::L}, {0x11d47, 0x11d47, direction::NSM}, + {0x11d50, 0x11d59, direction::L}, {0x11d60, 0x11d65, direction::L}, + {0x11d67, 0x11d68, direction::L}, {0x11d6a, 0x11d8e, direction::L}, + {0x11d90, 0x11d91, direction::NSM}, {0x11d93, 0x11d94, direction::L}, + {0x11d95, 0x11d95, direction::NSM}, {0x11d96, 0x11d96, direction::L}, + {0x11d97, 0x11d97, direction::NSM}, {0x11d98, 0x11d98, direction::L}, + {0x11da0, 0x11da9, direction::L}, {0x11ee0, 0x11ef2, direction::L}, + {0x11ef3, 0x11ef4, direction::NSM}, {0x11ef5, 0x11ef8, direction::L}, + {0x11fb0, 0x11fb0, direction::L}, {0x11fc0, 0x11fd4, direction::L}, + {0x11fd5, 0x11fdc, direction::ON}, {0x11fdd, 0x11fe0, direction::ET}, + {0x11fe1, 0x11ff1, direction::ON}, {0x11fff, 0x12399, direction::L}, + {0x12400, 0x1246e, direction::L}, {0x12470, 0x12474, direction::L}, + {0x12480, 0x12543, direction::L}, {0x13000, 0x1342e, direction::L}, + {0x13430, 0x13438, direction::L}, {0x14400, 0x14646, direction::L}, + {0x16800, 0x16a38, direction::L}, {0x16a40, 0x16a5e, direction::L}, + {0x16a60, 0x16a69, direction::L}, {0x16a6e, 0x16a6f, direction::L}, + {0x16ad0, 0x16aed, direction::L}, {0x16af0, 0x16af4, direction::NSM}, + {0x16af5, 0x16af5, direction::L}, {0x16b00, 0x16b2f, direction::L}, + {0x16b30, 0x16b36, direction::NSM}, {0x16b37, 0x16b45, direction::L}, + {0x16b50, 0x16b59, direction::L}, {0x16b5b, 0x16b61, direction::L}, + {0x16b63, 0x16b77, direction::L}, {0x16b7d, 0x16b8f, direction::L}, + {0x16e40, 0x16e9a, direction::L}, {0x16f00, 0x16f4a, direction::L}, + {0x16f4f, 0x16f4f, direction::NSM}, {0x16f50, 0x16f87, direction::L}, + {0x16f8f, 0x16f92, direction::NSM}, {0x16f93, 0x16f9f, direction::L}, + {0x16fe0, 0x16fe1, direction::L}, {0x16fe2, 0x16fe2, direction::ON}, + {0x16fe3, 0x16fe3, direction::L}, {0x16fe4, 0x16fe4, direction::NSM}, + {0x16ff0, 0x16ff1, direction::L}, {0x17000, 0x187f7, direction::L}, + {0x18800, 0x18cd5, direction::L}, {0x18d00, 0x18d08, direction::L}, + {0x1b000, 0x1b11e, direction::L}, {0x1b150, 0x1b152, direction::L}, + {0x1b164, 0x1b167, direction::L}, {0x1b170, 0x1b2fb, direction::L}, + {0x1bc00, 0x1bc6a, direction::L}, {0x1bc70, 0x1bc7c, direction::L}, + {0x1bc80, 0x1bc88, direction::L}, {0x1bc90, 0x1bc99, direction::L}, + {0x1bc9c, 0x1bc9c, direction::L}, {0x1bc9d, 0x1bc9e, direction::NSM}, + {0x1bc9f, 0x1bc9f, direction::L}, {0x1bca0, 0x1bca3, direction::BN}, + {0x1d000, 0x1d0f5, direction::L}, {0x1d100, 0x1d126, direction::L}, + {0x1d129, 0x1d166, direction::L}, {0x1d167, 0x1d169, direction::NSM}, + {0x1d16a, 0x1d172, direction::L}, {0x1d173, 0x1d17a, direction::BN}, + {0x1d17b, 0x1d182, direction::NSM}, {0x1d183, 0x1d184, direction::L}, + {0x1d185, 0x1d18b, direction::NSM}, {0x1d18c, 0x1d1a9, direction::L}, + {0x1d1aa, 0x1d1ad, direction::NSM}, {0x1d1ae, 0x1d1e8, direction::L}, + {0x1d200, 0x1d241, direction::ON}, {0x1d242, 0x1d244, direction::NSM}, + {0x1d245, 0x1d245, direction::ON}, {0x1d2e0, 0x1d2f3, direction::L}, + {0x1d300, 0x1d356, direction::ON}, {0x1d360, 0x1d378, direction::L}, + {0x1d400, 0x1d454, direction::L}, {0x1d456, 0x1d49c, direction::L}, + {0x1d49e, 0x1d49f, direction::L}, {0x1d4a2, 0x1d4a2, direction::L}, + {0x1d4a5, 0x1d4a6, direction::L}, {0x1d4a9, 0x1d4ac, direction::L}, + {0x1d4ae, 0x1d4b9, direction::L}, {0x1d4bb, 0x1d4bb, direction::L}, + {0x1d4bd, 0x1d4c3, direction::L}, {0x1d4c5, 0x1d505, direction::L}, + {0x1d507, 0x1d50a, direction::L}, {0x1d50d, 0x1d514, direction::L}, + {0x1d516, 0x1d51c, direction::L}, {0x1d51e, 0x1d539, direction::L}, + {0x1d53b, 0x1d53e, direction::L}, {0x1d540, 0x1d544, direction::L}, + {0x1d546, 0x1d546, direction::L}, {0x1d54a, 0x1d550, direction::L}, + {0x1d552, 0x1d6a5, direction::L}, {0x1d6a8, 0x1d6da, direction::L}, + {0x1d6db, 0x1d6db, direction::ON}, {0x1d6dc, 0x1d714, direction::L}, + {0x1d715, 0x1d715, direction::ON}, {0x1d716, 0x1d74e, direction::L}, + {0x1d74f, 0x1d74f, direction::ON}, {0x1d750, 0x1d788, direction::L}, + {0x1d789, 0x1d789, direction::ON}, {0x1d78a, 0x1d7c2, direction::L}, + {0x1d7c3, 0x1d7c3, direction::ON}, {0x1d7c4, 0x1d7cb, direction::L}, + {0x1d7ce, 0x1d7ff, direction::EN}, {0x1d800, 0x1d9ff, direction::L}, + {0x1da00, 0x1da36, direction::NSM}, {0x1da37, 0x1da3a, direction::L}, + {0x1da3b, 0x1da6c, direction::NSM}, {0x1da6d, 0x1da74, direction::L}, + {0x1da75, 0x1da75, direction::NSM}, {0x1da76, 0x1da83, direction::L}, + {0x1da84, 0x1da84, direction::NSM}, {0x1da85, 0x1da8b, direction::L}, + {0x1da9b, 0x1da9f, direction::NSM}, {0x1daa1, 0x1daaf, direction::NSM}, + {0x1e000, 0x1e006, direction::NSM}, {0x1e008, 0x1e018, direction::NSM}, + {0x1e01b, 0x1e021, direction::NSM}, {0x1e023, 0x1e024, direction::NSM}, + {0x1e026, 0x1e02a, direction::NSM}, {0x1e100, 0x1e12c, direction::L}, + {0x1e130, 0x1e136, direction::NSM}, {0x1e137, 0x1e13d, direction::L}, + {0x1e140, 0x1e149, direction::L}, {0x1e14e, 0x1e14f, direction::L}, + {0x1e2c0, 0x1e2eb, direction::L}, {0x1e2ec, 0x1e2ef, direction::NSM}, + {0x1e2f0, 0x1e2f9, direction::L}, {0x1e2ff, 0x1e2ff, direction::ET}, + {0x1e800, 0x1e8c4, direction::R}, {0x1e8c7, 0x1e8cf, direction::R}, + {0x1e8d0, 0x1e8d6, direction::NSM}, {0x1e900, 0x1e943, direction::R}, + {0x1e944, 0x1e94a, direction::NSM}, {0x1e94b, 0x1e94b, direction::R}, + {0x1e950, 0x1e959, direction::R}, {0x1e95e, 0x1e95f, direction::R}, + {0x1ec71, 0x1ecb4, direction::AL}, {0x1ed01, 0x1ed3d, direction::AL}, + {0x1ee00, 0x1ee03, direction::AL}, {0x1ee05, 0x1ee1f, direction::AL}, + {0x1ee21, 0x1ee22, direction::AL}, {0x1ee24, 0x1ee24, direction::AL}, + {0x1ee27, 0x1ee27, direction::AL}, {0x1ee29, 0x1ee32, direction::AL}, + {0x1ee34, 0x1ee37, direction::AL}, {0x1ee39, 0x1ee39, direction::AL}, + {0x1ee3b, 0x1ee3b, direction::AL}, {0x1ee42, 0x1ee42, direction::AL}, + {0x1ee47, 0x1ee47, direction::AL}, {0x1ee49, 0x1ee49, direction::AL}, + {0x1ee4b, 0x1ee4b, direction::AL}, {0x1ee4d, 0x1ee4f, direction::AL}, + {0x1ee51, 0x1ee52, direction::AL}, {0x1ee54, 0x1ee54, direction::AL}, + {0x1ee57, 0x1ee57, direction::AL}, {0x1ee59, 0x1ee59, direction::AL}, + {0x1ee5b, 0x1ee5b, direction::AL}, {0x1ee5d, 0x1ee5d, direction::AL}, + {0x1ee5f, 0x1ee5f, direction::AL}, {0x1ee61, 0x1ee62, direction::AL}, + {0x1ee64, 0x1ee64, direction::AL}, {0x1ee67, 0x1ee6a, direction::AL}, + {0x1ee6c, 0x1ee72, direction::AL}, {0x1ee74, 0x1ee77, direction::AL}, + {0x1ee79, 0x1ee7c, direction::AL}, {0x1ee7e, 0x1ee7e, direction::AL}, + {0x1ee80, 0x1ee89, direction::AL}, {0x1ee8b, 0x1ee9b, direction::AL}, + {0x1eea1, 0x1eea3, direction::AL}, {0x1eea5, 0x1eea9, direction::AL}, + {0x1eeab, 0x1eebb, direction::AL}, {0x1eef0, 0x1eef1, direction::ON}, + {0x1f000, 0x1f02b, direction::ON}, {0x1f030, 0x1f093, direction::ON}, + {0x1f0a0, 0x1f0ae, direction::ON}, {0x1f0b1, 0x1f0bf, direction::ON}, + {0x1f0c1, 0x1f0cf, direction::ON}, {0x1f0d1, 0x1f0f5, direction::ON}, + {0x1f100, 0x1f10a, direction::EN}, {0x1f10b, 0x1f10f, direction::ON}, + {0x1f110, 0x1f12e, direction::L}, {0x1f12f, 0x1f12f, direction::ON}, + {0x1f130, 0x1f169, direction::L}, {0x1f16a, 0x1f16f, direction::ON}, + {0x1f170, 0x1f1ac, direction::L}, {0x1f1ad, 0x1f1ad, direction::ON}, + {0x1f1e6, 0x1f202, direction::L}, {0x1f210, 0x1f23b, direction::L}, + {0x1f240, 0x1f248, direction::L}, {0x1f250, 0x1f251, direction::L}, + {0x1f260, 0x1f265, direction::ON}, {0x1f300, 0x1f6d7, direction::ON}, + {0x1f6e0, 0x1f6ec, direction::ON}, {0x1f6f0, 0x1f6fc, direction::ON}, + {0x1f700, 0x1f773, direction::ON}, {0x1f780, 0x1f7d8, direction::ON}, + {0x1f7e0, 0x1f7eb, direction::ON}, {0x1f800, 0x1f80b, direction::ON}, + {0x1f810, 0x1f847, direction::ON}, {0x1f850, 0x1f859, direction::ON}, + {0x1f860, 0x1f887, direction::ON}, {0x1f890, 0x1f8ad, direction::ON}, + {0x1f8b0, 0x1f8b1, direction::ON}, {0x1f900, 0x1f978, direction::ON}, + {0x1f97a, 0x1f9cb, direction::ON}, {0x1f9cd, 0x1fa53, direction::ON}, + {0x1fa60, 0x1fa6d, direction::ON}, {0x1fa70, 0x1fa74, direction::ON}, + {0x1fa78, 0x1fa7a, direction::ON}, {0x1fa80, 0x1fa86, direction::ON}, + {0x1fa90, 0x1faa8, direction::ON}, {0x1fab0, 0x1fab6, direction::ON}, + {0x1fac0, 0x1fac2, direction::ON}, {0x1fad0, 0x1fad6, direction::ON}, + {0x1fb00, 0x1fb92, direction::ON}, {0x1fb94, 0x1fbca, direction::ON}, + {0x1fbf0, 0x1fbf9, direction::EN}, {0x20000, 0x2a6dd, direction::L}, + {0x2a700, 0x2b734, direction::L}, {0x2b740, 0x2b81d, direction::L}, + {0x2b820, 0x2cea1, direction::L}, {0x2ceb0, 0x2ebe0, direction::L}, + {0x2f800, 0x2fa1d, direction::L}, {0x30000, 0x3134a, direction::L}, + {0xe0001, 0xe0001, direction::BN}, {0xe0020, 0xe007f, direction::BN}, + {0xe0100, 0xe01ef, direction::NSM}, {0xf0000, 0xffffd, direction::L}, + {0x100000, 0x10fffd, direction::L}}; + +// CheckJoiners and CheckBidi are true for URL specification. + +inline static direction find_direction(uint32_t code_point) noexcept { + auto it = std::lower_bound( + std::begin(dir_table), std::end(dir_table), code_point, + [](const directions& d, uint32_t c) { return d.final_code < c; }); + + // next check is almost surely in vain, but we use it for safety. + if (it == std::end(dir_table)) { + return direction::NONE; + } + // We have that d.final_code >= c. + if (code_point >= it->start_code) { + return it->direct; + } + return direction::NONE; +} + +inline static size_t find_last_not_of_nsm( + const std::u32string_view label) noexcept { + for (int i = label.size() - 1; i >= 0; i--) + if (find_direction(label[i]) != direction::NSM) return i; + + return std::u32string_view::npos; +} + +// An RTL label is a label that contains at least one character of type R, AL, +// or AN. https://www.rfc-editor.org/rfc/rfc5893#section-2 +inline static bool is_rtl_label(const std::u32string_view label) noexcept { + const size_t mask = + (1u << direction::R) | (1u << direction::AL) | (1u << direction::AN); + + size_t directions = 0; + for (size_t i = 0; i < label.size(); i++) { + directions |= 1u << find_direction(label[i]); + } + return (directions & mask) != 0; +} + +bool is_label_valid(const std::u32string_view label) { + if (label.empty()) { + return true; + } + + /////////////// + // We have a normalization step which ensures that we are in NFC. + // If we receive punycode, we normalize and check that the normalized + // version matches the original. + // -------------------------------------- + // The label must be in Unicode Normalization Form NFC. + + // Current URL standard indicatest that CheckHyphens is set to false. + // --------------------------------------- + // If CheckHyphens, the label must not contain a U+002D HYPHEN-MINUS character + // in both the third and fourth positions. If CheckHyphens, the label must + // neither begin nor end with a U+002D HYPHEN-MINUS character. + + // This is not necessary because we segment the + // labels by '.'. + // --------------------------------------- + // The label must not contain a U+002E ( . ) FULL STOP. + // if (label.find('.') != std::string_view::npos) return false; + + // The label must not begin with a combining mark, that is: + // General_Category=Mark. + constexpr static uint32_t combining[] = { + 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, + 0x308, 0x309, 0x30a, 0x30b, 0x30c, 0x30d, 0x30e, 0x30f, + 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, + 0x318, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, + 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, + 0x328, 0x329, 0x32a, 0x32b, 0x32c, 0x32d, 0x32e, 0x32f, + 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, + 0x338, 0x339, 0x33a, 0x33b, 0x33c, 0x33d, 0x33e, 0x33f, + 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, + 0x348, 0x349, 0x34a, 0x34b, 0x34c, 0x34d, 0x34e, 0x34f, + 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, + 0x358, 0x359, 0x35a, 0x35b, 0x35c, 0x35d, 0x35e, 0x35f, + 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, + 0x368, 0x369, 0x36a, 0x36b, 0x36c, 0x36d, 0x36e, 0x36f, + 0x483, 0x484, 0x485, 0x486, 0x487, 0x488, 0x489, 0x591, + 0x592, 0x593, 0x594, 0x595, 0x596, 0x597, 0x598, 0x599, + 0x59a, 0x59b, 0x59c, 0x59d, 0x59e, 0x59f, 0x5a0, 0x5a1, + 0x5a2, 0x5a3, 0x5a4, 0x5a5, 0x5a6, 0x5a7, 0x5a8, 0x5a9, + 0x5aa, 0x5ab, 0x5ac, 0x5ad, 0x5ae, 0x5af, 0x5b0, 0x5b1, + 0x5b2, 0x5b3, 0x5b4, 0x5b5, 0x5b6, 0x5b7, 0x5b8, 0x5b9, + 0x5ba, 0x5bb, 0x5bc, 0x5bd, 0x5bf, 0x5c1, 0x5c2, 0x5c4, + 0x5c5, 0x5c7, 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, + 0x616, 0x617, 0x618, 0x619, 0x61a, 0x64b, 0x64c, 0x64d, + 0x64e, 0x64f, 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, + 0x656, 0x657, 0x658, 0x659, 0x65a, 0x65b, 0x65c, 0x65d, + 0x65e, 0x65f, 0x670, 0x6d6, 0x6d7, 0x6d8, 0x6d9, 0x6da, + 0x6db, 0x6dc, 0x6df, 0x6e0, 0x6e1, 0x6e2, 0x6e3, 0x6e4, + 0x6e7, 0x6e8, 0x6ea, 0x6eb, 0x6ec, 0x6ed, 0x711, 0x730, + 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, 0x738, + 0x739, 0x73a, 0x73b, 0x73c, 0x73d, 0x73e, 0x73f, 0x740, + 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, 0x748, + 0x749, 0x74a, 0x7a6, 0x7a7, 0x7a8, 0x7a9, 0x7aa, 0x7ab, + 0x7ac, 0x7ad, 0x7ae, 0x7af, 0x7b0, 0x7eb, 0x7ec, 0x7ed, + 0x7ee, 0x7ef, 0x7f0, 0x7f1, 0x7f2, 0x7f3, 0x7fd, 0x816, + 0x817, 0x818, 0x819, 0x81b, 0x81c, 0x81d, 0x81e, 0x81f, + 0x820, 0x821, 0x822, 0x823, 0x825, 0x826, 0x827, 0x829, + 0x82a, 0x82b, 0x82c, 0x82d, 0x859, 0x85a, 0x85b, 0x8d3, + 0x8d4, 0x8d5, 0x8d6, 0x8d7, 0x8d8, 0x8d9, 0x8da, 0x8db, + 0x8dc, 0x8dd, 0x8de, 0x8df, 0x8e0, 0x8e1, 0x8e3, 0x8e4, + 0x8e5, 0x8e6, 0x8e7, 0x8e8, 0x8e9, 0x8ea, 0x8eb, 0x8ec, + 0x8ed, 0x8ee, 0x8ef, 0x8f0, 0x8f1, 0x8f2, 0x8f3, 0x8f4, + 0x8f5, 0x8f6, 0x8f7, 0x8f8, 0x8f9, 0x8fa, 0x8fb, 0x8fc, + 0x8fd, 0x8fe, 0x8ff, 0x900, 0x901, 0x902, 0x903, 0x93a, + 0x93b, 0x93c, 0x93e, 0x93f, 0x940, 0x941, 0x942, 0x943, + 0x944, 0x945, 0x946, 0x947, 0x948, 0x949, 0x94a, 0x94b, + 0x94c, 0x94d, 0x94e, 0x94f, 0x951, 0x952, 0x953, 0x954, + 0x955, 0x956, 0x957, 0x962, 0x963, 0x981, 0x982, 0x983, + 0x9bc, 0x9be, 0x9bf, 0x9c0, 0x9c1, 0x9c2, 0x9c3, 0x9c4, + 0x9c7, 0x9c8, 0x9cb, 0x9cc, 0x9cd, 0x9d7, 0x9e2, 0x9e3, + 0x9fe, 0xa01, 0xa02, 0xa03, 0xa3c, 0xa3e, 0xa3f, 0xa40, + 0xa41, 0xa42, 0xa47, 0xa48, 0xa4b, 0xa4c, 0xa4d, 0xa51, + 0xa70, 0xa71, 0xa75, 0xa81, 0xa82, 0xa83, 0xabc, 0xabe, + 0xabf, 0xac0, 0xac1, 0xac2, 0xac3, 0xac4, 0xac5, 0xac7, + 0xac8, 0xac9, 0xacb, 0xacc, 0xacd, 0xae2, 0xae3, 0xafa, + 0xafb, 0xafc, 0xafd, 0xafe, 0xaff, 0xb01, 0xb02, 0xb03, + 0xb3c, 0xb3e, 0xb3f, 0xb40, 0xb41, 0xb42, 0xb43, 0xb44, + 0xb47, 0xb48, 0xb4b, 0xb4c, 0xb4d, 0xb55, 0xb56, 0xb57, + 0xb62, 0xb63, 0xb82, 0xbbe, 0xbbf, 0xbc0, 0xbc1, 0xbc2, + 0xbc6, 0xbc7, 0xbc8, 0xbca, 0xbcb, 0xbcc, 0xbcd, 0xbd7, + 0xc00, 0xc01, 0xc02, 0xc03, 0xc04, 0xc3e, 0xc3f, 0xc40, + 0xc41, 0xc42, 0xc43, 0xc44, 0xc46, 0xc47, 0xc48, 0xc4a, + 0xc4b, 0xc4c, 0xc4d, 0xc55, 0xc56, 0xc62, 0xc63, 0xc81, + 0xc82, 0xc83, 0xcbc, 0xcbe, 0xcbf, 0xcc0, 0xcc1, 0xcc2, + 0xcc3, 0xcc4, 0xcc6, 0xcc7, 0xcc8, 0xcca, 0xccb, 0xccc, + 0xccd, 0xcd5, 0xcd6, 0xce2, 0xce3, 0xd00, 0xd01, 0xd02, + 0xd03, 0xd3b, 0xd3c, 0xd3e, 0xd3f, 0xd40, 0xd41, 0xd42, + 0xd43, 0xd44, 0xd46, 0xd47, 0xd48, 0xd4a, 0xd4b, 0xd4c, + 0xd4d, 0xd57, 0xd62, 0xd63, 0xd81, 0xd82, 0xd83, 0xdca, + 0xdcf, 0xdd0, 0xdd1, 0xdd2, 0xdd3, 0xdd4, 0xdd6, 0xdd8, + 0xdd9, 0xdda, 0xddb, 0xddc, 0xddd, 0xdde, 0xddf, 0xdf2, + 0xdf3, 0xe31, 0xe34, 0xe35, 0xe36, 0xe37, 0xe38, 0xe39, + 0xe3a, 0xe47, 0xe48, 0xe49, 0xe4a, 0xe4b, 0xe4c, 0xe4d, + 0xe4e, 0xeb1, 0xeb4, 0xeb5, 0xeb6, 0xeb7, 0xeb8, 0xeb9, + 0xeba, 0xebb, 0xebc, 0xec8, 0xec9, 0xeca, 0xecb, 0xecc, + 0xecd, 0xf18, 0xf19, 0xf35, 0xf37, 0xf39, 0xf3e, 0xf3f, + 0xf71, 0xf72, 0xf73, 0xf74, 0xf75, 0xf76, 0xf77, 0xf78, + 0xf79, 0xf7a, 0xf7b, 0xf7c, 0xf7d, 0xf7e, 0xf7f, 0xf80, + 0xf81, 0xf82, 0xf83, 0xf84, 0xf86, 0xf87, 0xf8d, 0xf8e, + 0xf8f, 0xf90, 0xf91, 0xf92, 0xf93, 0xf94, 0xf95, 0xf96, + 0xf97, 0xf99, 0xf9a, 0xf9b, 0xf9c, 0xf9d, 0xf9e, 0xf9f, + 0xfa0, 0xfa1, 0xfa2, 0xfa3, 0xfa4, 0xfa5, 0xfa6, 0xfa7, + 0xfa8, 0xfa9, 0xfaa, 0xfab, 0xfac, 0xfad, 0xfae, 0xfaf, + 0xfb0, 0xfb1, 0xfb2, 0xfb3, 0xfb4, 0xfb5, 0xfb6, 0xfb7, + 0xfb8, 0xfb9, 0xfba, 0xfbb, 0xfbc, 0xfc6, 0x102b, 0x102c, + 0x102d, 0x102e, 0x102f, 0x1030, 0x1031, 0x1032, 0x1033, 0x1034, + 0x1035, 0x1036, 0x1037, 0x1038, 0x1039, 0x103a, 0x103b, 0x103c, + 0x103d, 0x103e, 0x1056, 0x1057, 0x1058, 0x1059, 0x105e, 0x105f, + 0x1060, 0x1062, 0x1063, 0x1064, 0x1067, 0x1068, 0x1069, 0x106a, + 0x106b, 0x106c, 0x106d, 0x1071, 0x1072, 0x1073, 0x1074, 0x1082, + 0x1083, 0x1084, 0x1085, 0x1086, 0x1087, 0x1088, 0x1089, 0x108a, + 0x108b, 0x108c, 0x108d, 0x108f, 0x109a, 0x109b, 0x109c, 0x109d, + 0x135d, 0x135e, 0x135f, 0x1712, 0x1713, 0x1714, 0x1732, 0x1733, + 0x1734, 0x1752, 0x1753, 0x1772, 0x1773, 0x17b4, 0x17b5, 0x17b6, + 0x17b7, 0x17b8, 0x17b9, 0x17ba, 0x17bb, 0x17bc, 0x17bd, 0x17be, + 0x17bf, 0x17c0, 0x17c1, 0x17c2, 0x17c3, 0x17c4, 0x17c5, 0x17c6, + 0x17c7, 0x17c8, 0x17c9, 0x17ca, 0x17cb, 0x17cc, 0x17cd, 0x17ce, + 0x17cf, 0x17d0, 0x17d1, 0x17d2, 0x17d3, 0x17dd, 0x180b, 0x180c, + 0x180d, 0x1885, 0x1886, 0x18a9, 0x1920, 0x1921, 0x1922, 0x1923, + 0x1924, 0x1925, 0x1926, 0x1927, 0x1928, 0x1929, 0x192a, 0x192b, + 0x1930, 0x1931, 0x1932, 0x1933, 0x1934, 0x1935, 0x1936, 0x1937, + 0x1938, 0x1939, 0x193a, 0x193b, 0x1a17, 0x1a18, 0x1a19, 0x1a1a, + 0x1a1b, 0x1a55, 0x1a56, 0x1a57, 0x1a58, 0x1a59, 0x1a5a, 0x1a5b, + 0x1a5c, 0x1a5d, 0x1a5e, 0x1a60, 0x1a61, 0x1a62, 0x1a63, 0x1a64, + 0x1a65, 0x1a66, 0x1a67, 0x1a68, 0x1a69, 0x1a6a, 0x1a6b, 0x1a6c, + 0x1a6d, 0x1a6e, 0x1a6f, 0x1a70, 0x1a71, 0x1a72, 0x1a73, 0x1a74, + 0x1a75, 0x1a76, 0x1a77, 0x1a78, 0x1a79, 0x1a7a, 0x1a7b, 0x1a7c, + 0x1a7f, 0x1ab0, 0x1ab1, 0x1ab2, 0x1ab3, 0x1ab4, 0x1ab5, 0x1ab6, + 0x1ab7, 0x1ab8, 0x1ab9, 0x1aba, 0x1abb, 0x1abc, 0x1abd, 0x1abe, + 0x1abf, 0x1ac0, 0x1b00, 0x1b01, 0x1b02, 0x1b03, 0x1b04, 0x1b34, + 0x1b35, 0x1b36, 0x1b37, 0x1b38, 0x1b39, 0x1b3a, 0x1b3b, 0x1b3c, + 0x1b3d, 0x1b3e, 0x1b3f, 0x1b40, 0x1b41, 0x1b42, 0x1b43, 0x1b44, + 0x1b6b, 0x1b6c, 0x1b6d, 0x1b6e, 0x1b6f, 0x1b70, 0x1b71, 0x1b72, + 0x1b73, 0x1b80, 0x1b81, 0x1b82, 0x1ba1, 0x1ba2, 0x1ba3, 0x1ba4, + 0x1ba5, 0x1ba6, 0x1ba7, 0x1ba8, 0x1ba9, 0x1baa, 0x1bab, 0x1bac, + 0x1bad, 0x1be6, 0x1be7, 0x1be8, 0x1be9, 0x1bea, 0x1beb, 0x1bec, + 0x1bed, 0x1bee, 0x1bef, 0x1bf0, 0x1bf1, 0x1bf2, 0x1bf3, 0x1c24, + 0x1c25, 0x1c26, 0x1c27, 0x1c28, 0x1c29, 0x1c2a, 0x1c2b, 0x1c2c, + 0x1c2d, 0x1c2e, 0x1c2f, 0x1c30, 0x1c31, 0x1c32, 0x1c33, 0x1c34, + 0x1c35, 0x1c36, 0x1c37, 0x1cd0, 0x1cd1, 0x1cd2, 0x1cd4, 0x1cd5, + 0x1cd6, 0x1cd7, 0x1cd8, 0x1cd9, 0x1cda, 0x1cdb, 0x1cdc, 0x1cdd, + 0x1cde, 0x1cdf, 0x1ce0, 0x1ce1, 0x1ce2, 0x1ce3, 0x1ce4, 0x1ce5, + 0x1ce6, 0x1ce7, 0x1ce8, 0x1ced, 0x1cf4, 0x1cf7, 0x1cf8, 0x1cf9, + 0x1dc0, 0x1dc1, 0x1dc2, 0x1dc3, 0x1dc4, 0x1dc5, 0x1dc6, 0x1dc7, + 0x1dc8, 0x1dc9, 0x1dca, 0x1dcb, 0x1dcc, 0x1dcd, 0x1dce, 0x1dcf, + 0x1dd0, 0x1dd1, 0x1dd2, 0x1dd3, 0x1dd4, 0x1dd5, 0x1dd6, 0x1dd7, + 0x1dd8, 0x1dd9, 0x1dda, 0x1ddb, 0x1ddc, 0x1ddd, 0x1dde, 0x1ddf, + 0x1de0, 0x1de1, 0x1de2, 0x1de3, 0x1de4, 0x1de5, 0x1de6, 0x1de7, + 0x1de8, 0x1de9, 0x1dea, 0x1deb, 0x1dec, 0x1ded, 0x1dee, 0x1def, + 0x1df0, 0x1df1, 0x1df2, 0x1df3, 0x1df4, 0x1df5, 0x1df6, 0x1df7, + 0x1df8, 0x1df9, 0x1dfb, 0x1dfc, 0x1dfd, 0x1dfe, 0x1dff, 0x20d0, + 0x20d1, 0x20d2, 0x20d3, 0x20d4, 0x20d5, 0x20d6, 0x20d7, 0x20d8, + 0x20d9, 0x20da, 0x20db, 0x20dc, 0x20dd, 0x20de, 0x20df, 0x20e0, + 0x20e1, 0x20e2, 0x20e3, 0x20e4, 0x20e5, 0x20e6, 0x20e7, 0x20e8, + 0x20e9, 0x20ea, 0x20eb, 0x20ec, 0x20ed, 0x20ee, 0x20ef, 0x20f0, + 0x2cef, 0x2cf0, 0x2cf1, 0x2d7f, 0x2de0, 0x2de1, 0x2de2, 0x2de3, + 0x2de4, 0x2de5, 0x2de6, 0x2de7, 0x2de8, 0x2de9, 0x2dea, 0x2deb, + 0x2dec, 0x2ded, 0x2dee, 0x2def, 0x2df0, 0x2df1, 0x2df2, 0x2df3, + 0x2df4, 0x2df5, 0x2df6, 0x2df7, 0x2df8, 0x2df9, 0x2dfa, 0x2dfb, + 0x2dfc, 0x2dfd, 0x2dfe, 0x2dff, 0x302a, 0x302b, 0x302c, 0x302d, + 0x302e, 0x302f, 0x3099, 0x309a, 0xa66f, 0xa670, 0xa671, 0xa672, + 0xa674, 0xa675, 0xa676, 0xa677, 0xa678, 0xa679, 0xa67a, 0xa67b, + 0xa67c, 0xa67d, 0xa69e, 0xa69f, 0xa6f0, 0xa6f1, 0xa802, 0xa806, + 0xa80b, 0xa823, 0xa824, 0xa825, 0xa826, 0xa827, 0xa82c, 0xa880, + 0xa881, 0xa8b4, 0xa8b5, 0xa8b6, 0xa8b7, 0xa8b8, 0xa8b9, 0xa8ba, + 0xa8bb, 0xa8bc, 0xa8bd, 0xa8be, 0xa8bf, 0xa8c0, 0xa8c1, 0xa8c2, + 0xa8c3, 0xa8c4, 0xa8c5, 0xa8e0, 0xa8e1, 0xa8e2, 0xa8e3, 0xa8e4, + 0xa8e5, 0xa8e6, 0xa8e7, 0xa8e8, 0xa8e9, 0xa8ea, 0xa8eb, 0xa8ec, + 0xa8ed, 0xa8ee, 0xa8ef, 0xa8f0, 0xa8f1, 0xa8ff, 0xa926, 0xa927, + 0xa928, 0xa929, 0xa92a, 0xa92b, 0xa92c, 0xa92d, 0xa947, 0xa948, + 0xa949, 0xa94a, 0xa94b, 0xa94c, 0xa94d, 0xa94e, 0xa94f, 0xa950, + 0xa951, 0xa952, 0xa953, 0xa980, 0xa981, 0xa982, 0xa983, 0xa9b3, + 0xa9b4, 0xa9b5, 0xa9b6, 0xa9b7, 0xa9b8, 0xa9b9, 0xa9ba, 0xa9bb, + 0xa9bc, 0xa9bd, 0xa9be, 0xa9bf, 0xa9c0, 0xa9e5, 0xaa29, 0xaa2a, + 0xaa2b, 0xaa2c, 0xaa2d, 0xaa2e, 0xaa2f, 0xaa30, 0xaa31, 0xaa32, + 0xaa33, 0xaa34, 0xaa35, 0xaa36, 0xaa43, 0xaa4c, 0xaa4d, 0xaa7b, + 0xaa7c, 0xaa7d, 0xaab0, 0xaab2, 0xaab3, 0xaab4, 0xaab7, 0xaab8, + 0xaabe, 0xaabf, 0xaac1, 0xaaeb, 0xaaec, 0xaaed, 0xaaee, 0xaaef, + 0xaaf5, 0xaaf6, 0xabe3, 0xabe4, 0xabe5, 0xabe6, 0xabe7, 0xabe8, + 0xabe9, 0xabea, 0xabec, 0xabed, 0xfb1e, 0xfe00, 0xfe01, 0xfe02, + 0xfe03, 0xfe04, 0xfe05, 0xfe06, 0xfe07, 0xfe08, 0xfe09, 0xfe0a, + 0xfe0b, 0xfe0c, 0xfe0d, 0xfe0e, 0xfe0f, 0xfe20, 0xfe21, 0xfe22, + 0xfe23, 0xfe24, 0xfe25, 0xfe26, 0xfe27, 0xfe28, 0xfe29, 0xfe2a, + 0xfe2b, 0xfe2c, 0xfe2d, 0xfe2e, 0xfe2f, 0x101fd, 0x102e0, 0x10376, + 0x10377, 0x10378, 0x10379, 0x1037a, 0x10a01, 0x10a02, 0x10a03, 0x10a05, + 0x10a06, 0x10a0c, 0x10a0d, 0x10a0e, 0x10a0f, 0x10a38, 0x10a39, 0x10a3a, + 0x10a3f, 0x10ae5, 0x10ae6, 0x10d24, 0x10d25, 0x10d26, 0x10d27, 0x10eab, + 0x10eac, 0x10f46, 0x10f47, 0x10f48, 0x10f49, 0x10f4a, 0x10f4b, 0x10f4c, + 0x10f4d, 0x10f4e, 0x10f4f, 0x10f50, 0x11000, 0x11001, 0x11002, 0x11038, + 0x11039, 0x1103a, 0x1103b, 0x1103c, 0x1103d, 0x1103e, 0x1103f, 0x11040, + 0x11041, 0x11042, 0x11043, 0x11044, 0x11045, 0x11046, 0x1107f, 0x11080, + 0x11081, 0x11082, 0x110b0, 0x110b1, 0x110b2, 0x110b3, 0x110b4, 0x110b5, + 0x110b6, 0x110b7, 0x110b8, 0x110b9, 0x110ba, 0x11100, 0x11101, 0x11102, + 0x11127, 0x11128, 0x11129, 0x1112a, 0x1112b, 0x1112c, 0x1112d, 0x1112e, + 0x1112f, 0x11130, 0x11131, 0x11132, 0x11133, 0x11134, 0x11145, 0x11146, + 0x11173, 0x11180, 0x11181, 0x11182, 0x111b3, 0x111b4, 0x111b5, 0x111b6, + 0x111b7, 0x111b8, 0x111b9, 0x111ba, 0x111bb, 0x111bc, 0x111bd, 0x111be, + 0x111bf, 0x111c0, 0x111c9, 0x111ca, 0x111cb, 0x111cc, 0x111ce, 0x111cf, + 0x1122c, 0x1122d, 0x1122e, 0x1122f, 0x11230, 0x11231, 0x11232, 0x11233, + 0x11234, 0x11235, 0x11236, 0x11237, 0x1123e, 0x112df, 0x112e0, 0x112e1, + 0x112e2, 0x112e3, 0x112e4, 0x112e5, 0x112e6, 0x112e7, 0x112e8, 0x112e9, + 0x112ea, 0x11300, 0x11301, 0x11302, 0x11303, 0x1133b, 0x1133c, 0x1133e, + 0x1133f, 0x11340, 0x11341, 0x11342, 0x11343, 0x11344, 0x11347, 0x11348, + 0x1134b, 0x1134c, 0x1134d, 0x11357, 0x11362, 0x11363, 0x11366, 0x11367, + 0x11368, 0x11369, 0x1136a, 0x1136b, 0x1136c, 0x11370, 0x11371, 0x11372, + 0x11373, 0x11374, 0x11435, 0x11436, 0x11437, 0x11438, 0x11439, 0x1143a, + 0x1143b, 0x1143c, 0x1143d, 0x1143e, 0x1143f, 0x11440, 0x11441, 0x11442, + 0x11443, 0x11444, 0x11445, 0x11446, 0x1145e, 0x114b0, 0x114b1, 0x114b2, + 0x114b3, 0x114b4, 0x114b5, 0x114b6, 0x114b7, 0x114b8, 0x114b9, 0x114ba, + 0x114bb, 0x114bc, 0x114bd, 0x114be, 0x114bf, 0x114c0, 0x114c1, 0x114c2, + 0x114c3, 0x115af, 0x115b0, 0x115b1, 0x115b2, 0x115b3, 0x115b4, 0x115b5, + 0x115b8, 0x115b9, 0x115ba, 0x115bb, 0x115bc, 0x115bd, 0x115be, 0x115bf, + 0x115c0, 0x115dc, 0x115dd, 0x11630, 0x11631, 0x11632, 0x11633, 0x11634, + 0x11635, 0x11636, 0x11637, 0x11638, 0x11639, 0x1163a, 0x1163b, 0x1163c, + 0x1163d, 0x1163e, 0x1163f, 0x11640, 0x116ab, 0x116ac, 0x116ad, 0x116ae, + 0x116af, 0x116b0, 0x116b1, 0x116b2, 0x116b3, 0x116b4, 0x116b5, 0x116b6, + 0x116b7, 0x1171d, 0x1171e, 0x1171f, 0x11720, 0x11721, 0x11722, 0x11723, + 0x11724, 0x11725, 0x11726, 0x11727, 0x11728, 0x11729, 0x1172a, 0x1172b, + 0x1182c, 0x1182d, 0x1182e, 0x1182f, 0x11830, 0x11831, 0x11832, 0x11833, + 0x11834, 0x11835, 0x11836, 0x11837, 0x11838, 0x11839, 0x1183a, 0x11930, + 0x11931, 0x11932, 0x11933, 0x11934, 0x11935, 0x11937, 0x11938, 0x1193b, + 0x1193c, 0x1193d, 0x1193e, 0x11940, 0x11942, 0x11943, 0x119d1, 0x119d2, + 0x119d3, 0x119d4, 0x119d5, 0x119d6, 0x119d7, 0x119da, 0x119db, 0x119dc, + 0x119dd, 0x119de, 0x119df, 0x119e0, 0x119e4, 0x11a01, 0x11a02, 0x11a03, + 0x11a04, 0x11a05, 0x11a06, 0x11a07, 0x11a08, 0x11a09, 0x11a0a, 0x11a33, + 0x11a34, 0x11a35, 0x11a36, 0x11a37, 0x11a38, 0x11a39, 0x11a3b, 0x11a3c, + 0x11a3d, 0x11a3e, 0x11a47, 0x11a51, 0x11a52, 0x11a53, 0x11a54, 0x11a55, + 0x11a56, 0x11a57, 0x11a58, 0x11a59, 0x11a5a, 0x11a5b, 0x11a8a, 0x11a8b, + 0x11a8c, 0x11a8d, 0x11a8e, 0x11a8f, 0x11a90, 0x11a91, 0x11a92, 0x11a93, + 0x11a94, 0x11a95, 0x11a96, 0x11a97, 0x11a98, 0x11a99, 0x11c2f, 0x11c30, + 0x11c31, 0x11c32, 0x11c33, 0x11c34, 0x11c35, 0x11c36, 0x11c38, 0x11c39, + 0x11c3a, 0x11c3b, 0x11c3c, 0x11c3d, 0x11c3e, 0x11c3f, 0x11c92, 0x11c93, + 0x11c94, 0x11c95, 0x11c96, 0x11c97, 0x11c98, 0x11c99, 0x11c9a, 0x11c9b, + 0x11c9c, 0x11c9d, 0x11c9e, 0x11c9f, 0x11ca0, 0x11ca1, 0x11ca2, 0x11ca3, + 0x11ca4, 0x11ca5, 0x11ca6, 0x11ca7, 0x11ca9, 0x11caa, 0x11cab, 0x11cac, + 0x11cad, 0x11cae, 0x11caf, 0x11cb0, 0x11cb1, 0x11cb2, 0x11cb3, 0x11cb4, + 0x11cb5, 0x11cb6, 0x11d31, 0x11d32, 0x11d33, 0x11d34, 0x11d35, 0x11d36, + 0x11d3a, 0x11d3c, 0x11d3d, 0x11d3f, 0x11d40, 0x11d41, 0x11d42, 0x11d43, + 0x11d44, 0x11d45, 0x11d47, 0x11d8a, 0x11d8b, 0x11d8c, 0x11d8d, 0x11d8e, + 0x11d90, 0x11d91, 0x11d93, 0x11d94, 0x11d95, 0x11d96, 0x11d97, 0x11ef3, + 0x11ef4, 0x11ef5, 0x11ef6, 0x16af0, 0x16af1, 0x16af2, 0x16af3, 0x16af4, + 0x16b30, 0x16b31, 0x16b32, 0x16b33, 0x16b34, 0x16b35, 0x16b36, 0x16f4f, + 0x16f51, 0x16f52, 0x16f53, 0x16f54, 0x16f55, 0x16f56, 0x16f57, 0x16f58, + 0x16f59, 0x16f5a, 0x16f5b, 0x16f5c, 0x16f5d, 0x16f5e, 0x16f5f, 0x16f60, + 0x16f61, 0x16f62, 0x16f63, 0x16f64, 0x16f65, 0x16f66, 0x16f67, 0x16f68, + 0x16f69, 0x16f6a, 0x16f6b, 0x16f6c, 0x16f6d, 0x16f6e, 0x16f6f, 0x16f70, + 0x16f71, 0x16f72, 0x16f73, 0x16f74, 0x16f75, 0x16f76, 0x16f77, 0x16f78, + 0x16f79, 0x16f7a, 0x16f7b, 0x16f7c, 0x16f7d, 0x16f7e, 0x16f7f, 0x16f80, + 0x16f81, 0x16f82, 0x16f83, 0x16f84, 0x16f85, 0x16f86, 0x16f87, 0x16f8f, + 0x16f90, 0x16f91, 0x16f92, 0x16fe4, 0x16ff0, 0x16ff1, 0x1bc9d, 0x1bc9e, + 0x1d165, 0x1d166, 0x1d167, 0x1d168, 0x1d169, 0x1d16d, 0x1d16e, 0x1d16f, + 0x1d170, 0x1d171, 0x1d172, 0x1d17b, 0x1d17c, 0x1d17d, 0x1d17e, 0x1d17f, + 0x1d180, 0x1d181, 0x1d182, 0x1d185, 0x1d186, 0x1d187, 0x1d188, 0x1d189, + 0x1d18a, 0x1d18b, 0x1d1aa, 0x1d1ab, 0x1d1ac, 0x1d1ad, 0x1d242, 0x1d243, + 0x1d244, 0x1da00, 0x1da01, 0x1da02, 0x1da03, 0x1da04, 0x1da05, 0x1da06, + 0x1da07, 0x1da08, 0x1da09, 0x1da0a, 0x1da0b, 0x1da0c, 0x1da0d, 0x1da0e, + 0x1da0f, 0x1da10, 0x1da11, 0x1da12, 0x1da13, 0x1da14, 0x1da15, 0x1da16, + 0x1da17, 0x1da18, 0x1da19, 0x1da1a, 0x1da1b, 0x1da1c, 0x1da1d, 0x1da1e, + 0x1da1f, 0x1da20, 0x1da21, 0x1da22, 0x1da23, 0x1da24, 0x1da25, 0x1da26, + 0x1da27, 0x1da28, 0x1da29, 0x1da2a, 0x1da2b, 0x1da2c, 0x1da2d, 0x1da2e, + 0x1da2f, 0x1da30, 0x1da31, 0x1da32, 0x1da33, 0x1da34, 0x1da35, 0x1da36, + 0x1da3b, 0x1da3c, 0x1da3d, 0x1da3e, 0x1da3f, 0x1da40, 0x1da41, 0x1da42, + 0x1da43, 0x1da44, 0x1da45, 0x1da46, 0x1da47, 0x1da48, 0x1da49, 0x1da4a, + 0x1da4b, 0x1da4c, 0x1da4d, 0x1da4e, 0x1da4f, 0x1da50, 0x1da51, 0x1da52, + 0x1da53, 0x1da54, 0x1da55, 0x1da56, 0x1da57, 0x1da58, 0x1da59, 0x1da5a, + 0x1da5b, 0x1da5c, 0x1da5d, 0x1da5e, 0x1da5f, 0x1da60, 0x1da61, 0x1da62, + 0x1da63, 0x1da64, 0x1da65, 0x1da66, 0x1da67, 0x1da68, 0x1da69, 0x1da6a, + 0x1da6b, 0x1da6c, 0x1da75, 0x1da84, 0x1da9b, 0x1da9c, 0x1da9d, 0x1da9e, + 0x1da9f, 0x1daa1, 0x1daa2, 0x1daa3, 0x1daa4, 0x1daa5, 0x1daa6, 0x1daa7, + 0x1daa8, 0x1daa9, 0x1daaa, 0x1daab, 0x1daac, 0x1daad, 0x1daae, 0x1daaf, + 0x1e000, 0x1e001, 0x1e002, 0x1e003, 0x1e004, 0x1e005, 0x1e006, 0x1e008, + 0x1e009, 0x1e00a, 0x1e00b, 0x1e00c, 0x1e00d, 0x1e00e, 0x1e00f, 0x1e010, + 0x1e011, 0x1e012, 0x1e013, 0x1e014, 0x1e015, 0x1e016, 0x1e017, 0x1e018, + 0x1e01b, 0x1e01c, 0x1e01d, 0x1e01e, 0x1e01f, 0x1e020, 0x1e021, 0x1e023, + 0x1e024, 0x1e026, 0x1e027, 0x1e028, 0x1e029, 0x1e02a, 0x1e130, 0x1e131, + 0x1e132, 0x1e133, 0x1e134, 0x1e135, 0x1e136, 0x1e2ec, 0x1e2ed, 0x1e2ee, + 0x1e2ef, 0x1e8d0, 0x1e8d1, 0x1e8d2, 0x1e8d3, 0x1e8d4, 0x1e8d5, 0x1e8d6, + 0x1e944, 0x1e945, 0x1e946, 0x1e947, 0x1e948, 0x1e949, 0x1e94a, 0xe0100, + 0xe0101, 0xe0102, 0xe0103, 0xe0104, 0xe0105, 0xe0106, 0xe0107, 0xe0108, + 0xe0109, 0xe010a, 0xe010b, 0xe010c, 0xe010d, 0xe010e, 0xe010f, 0xe0110, + 0xe0111, 0xe0112, 0xe0113, 0xe0114, 0xe0115, 0xe0116, 0xe0117, 0xe0118, + 0xe0119, 0xe011a, 0xe011b, 0xe011c, 0xe011d, 0xe011e, 0xe011f, 0xe0120, + 0xe0121, 0xe0122, 0xe0123, 0xe0124, 0xe0125, 0xe0126, 0xe0127, 0xe0128, + 0xe0129, 0xe012a, 0xe012b, 0xe012c, 0xe012d, 0xe012e, 0xe012f, 0xe0130, + 0xe0131, 0xe0132, 0xe0133, 0xe0134, 0xe0135, 0xe0136, 0xe0137, 0xe0138, + 0xe0139, 0xe013a, 0xe013b, 0xe013c, 0xe013d, 0xe013e, 0xe013f, 0xe0140, + 0xe0141, 0xe0142, 0xe0143, 0xe0144, 0xe0145, 0xe0146, 0xe0147, 0xe0148, + 0xe0149, 0xe014a, 0xe014b, 0xe014c, 0xe014d, 0xe014e, 0xe014f, 0xe0150, + 0xe0151, 0xe0152, 0xe0153, 0xe0154, 0xe0155, 0xe0156, 0xe0157, 0xe0158, + 0xe0159, 0xe015a, 0xe015b, 0xe015c, 0xe015d, 0xe015e, 0xe015f, 0xe0160, + 0xe0161, 0xe0162, 0xe0163, 0xe0164, 0xe0165, 0xe0166, 0xe0167, 0xe0168, + 0xe0169, 0xe016a, 0xe016b, 0xe016c, 0xe016d, 0xe016e, 0xe016f, 0xe0170, + 0xe0171, 0xe0172, 0xe0173, 0xe0174, 0xe0175, 0xe0176, 0xe0177, 0xe0178, + 0xe0179, 0xe017a, 0xe017b, 0xe017c, 0xe017d, 0xe017e, 0xe017f, 0xe0180, + 0xe0181, 0xe0182, 0xe0183, 0xe0184, 0xe0185, 0xe0186, 0xe0187, 0xe0188, + 0xe0189, 0xe018a, 0xe018b, 0xe018c, 0xe018d, 0xe018e, 0xe018f, 0xe0190, + 0xe0191, 0xe0192, 0xe0193, 0xe0194, 0xe0195, 0xe0196, 0xe0197, 0xe0198, + 0xe0199, 0xe019a, 0xe019b, 0xe019c, 0xe019d, 0xe019e, 0xe019f, 0xe01a0, + 0xe01a1, 0xe01a2, 0xe01a3, 0xe01a4, 0xe01a5, 0xe01a6, 0xe01a7, 0xe01a8, + 0xe01a9, 0xe01aa, 0xe01ab, 0xe01ac, 0xe01ad, 0xe01ae, 0xe01af, 0xe01b0, + 0xe01b1, 0xe01b2, 0xe01b3, 0xe01b4, 0xe01b5, 0xe01b6, 0xe01b7, 0xe01b8, + 0xe01b9, 0xe01ba, 0xe01bb, 0xe01bc, 0xe01bd, 0xe01be, 0xe01bf, 0xe01c0, + 0xe01c1, 0xe01c2, 0xe01c3, 0xe01c4, 0xe01c5, 0xe01c6, 0xe01c7, 0xe01c8, + 0xe01c9, 0xe01ca, 0xe01cb, 0xe01cc, 0xe01cd, 0xe01ce, 0xe01cf, 0xe01d0, + 0xe01d1, 0xe01d2, 0xe01d3, 0xe01d4, 0xe01d5, 0xe01d6, 0xe01d7, 0xe01d8, + 0xe01d9, 0xe01da, 0xe01db, 0xe01dc, 0xe01dd, 0xe01de, 0xe01df, 0xe01e0, + 0xe01e1, 0xe01e2, 0xe01e3, 0xe01e4, 0xe01e5, 0xe01e6, 0xe01e7, 0xe01e8, + 0xe01e9, 0xe01ea, 0xe01eb, 0xe01ec, 0xe01ed, 0xe01ee, 0xe01ef}; + if (std::binary_search(std::begin(combining), std::end(combining), + label.front())) { + return false; + } + // We verify this next step as part of the mapping: + // --------------------------------------------- + // Each code point in the label must only have certain status values + // according to Section 5, IDNA Mapping Table: + // - For Transitional Processing, each value must be valid. + // - For Nontransitional Processing, each value must be either valid or + // deviation. + + // If CheckJoiners, the label must satisfy the ContextJ rules from Appendix + // A, in The Unicode Code Points and Internationalized Domain Names for + // Applications (IDNA) [IDNA2008]. + constexpr static uint32_t virama[] = { + 0x094D, 0x09CD, 0x0A4D, 0x0ACD, 0x0B4D, 0x0BCD, 0x0C4D, 0x0CCD, + 0x0D3B, 0x0D3C, 0x0D4D, 0x0DCA, 0x0E3A, 0x0EBA, 0x0F84, 0x1039, + 0x103A, 0x1714, 0x1734, 0x17D2, 0x1A60, 0x1B44, 0x1BAA, 0x1BAB, + 0x1BF2, 0x1BF3, 0x2D7F, 0xA806, 0xA82C, 0xA8C4, 0xA953, 0xA9C0, + 0xAAF6, 0xABED, 0x10A3F, 0x11046, 0x1107F, 0x110B9, 0x11133, 0x11134, + 0x111C0, 0x11235, 0x112EA, 0x1134D, 0x11442, 0x114C2, 0x115BF, 0x1163F, + 0x116B6, 0x1172B, 0x11839, 0x1193D, 0x1193E, 0x119E0, 0x11A34, 0x11A47, + 0x11A99, 0x11C3F, 0x11D44, 0x11D45, 0x11D97}; + constexpr static uint32_t R[] = { + 0x622, 0x623, 0x624, 0x625, 0x627, 0x629, 0x62f, 0x630, 0x631, + 0x632, 0x648, 0x671, 0x672, 0x673, 0x675, 0x676, 0x677, 0x688, + 0x689, 0x68a, 0x68b, 0x68c, 0x68d, 0x68e, 0x68f, 0x690, 0x691, + 0x692, 0x693, 0x694, 0x695, 0x696, 0x697, 0x698, 0x699, 0x6c0, + 0x6c3, 0x6c4, 0x6c5, 0x6c6, 0x6c7, 0x6c8, 0x6c9, 0x6ca, 0x6cb, + 0x6cd, 0x6cf, 0x6d2, 0x6d3, 0x6d5, 0x6ee, 0x6ef, 0x710, 0x715, + 0x716, 0x717, 0x718, 0x719, 0x71e, 0x728, 0x72a, 0x72c, 0x72f, + 0x74d, 0x759, 0x75a, 0x75b, 0x854, 0x8aa, 0x8ab, 0x8ac}; + constexpr static uint32_t L[] = {0xa872}; + constexpr static uint32_t D[] = { + 0x620, 0x626, 0x628, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x633, + 0x634, 0x635, 0x636, 0x637, 0x638, 0x639, 0x63a, 0x63b, 0x63c, + 0x63d, 0x63e, 0x63f, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, + 0x647, 0x649, 0x64a, 0x66e, 0x66f, 0x678, 0x679, 0x67a, 0x67b, + 0x67c, 0x67d, 0x67e, 0x67f, 0x680, 0x681, 0x682, 0x683, 0x684, + 0x685, 0x686, 0x687, 0x69a, 0x69b, 0x69c, 0x69d, 0x69e, 0x69f, + 0x6a0, 0x6a1, 0x6a2, 0x6a3, 0x6a4, 0x6a5, 0x6a6, 0x6a7, 0x6a8, + 0x6a9, 0x6aa, 0x6ab, 0x6ac, 0x6ad, 0x6ae, 0x6af, 0x6b0, 0x6b1, + 0x6b2, 0x6b3, 0x6b4, 0x6b5, 0x6b6, 0x6b7, 0x6b8, 0x6b9, 0x6ba, + 0x6bb, 0x6bc, 0x6bd, 0x6be, 0x6bf, 0x6c1, 0x6c2, 0x6cc, 0x6ce, + 0x6d0, 0x6d1, 0x6fa, 0x6fb, 0x6fc, 0x6ff, 0x712, 0x713, 0x714, + 0x71a, 0x71b, 0x71c, 0x71d, 0x71f, 0x720, 0x721, 0x722, 0x723, + 0x724, 0x725, 0x726, 0x727, 0x729, 0x72b, 0x72d, 0x72e, 0x74e, + 0x74f, 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, + 0x758, 0x75c, 0x75d, 0x75e, 0x75f, 0x760, 0x761, 0x762, 0x763, + 0x764, 0x765, 0x766, 0x850, 0x851, 0x852, 0x853, 0x855, 0x8a0, + 0x8a2, 0x8a3, 0x8a4, 0x8a5, 0x8a6, 0x8a7, 0x8a8, 0x8a9, 0x1807, + 0x1820, 0x1821, 0x1822, 0x1823, 0x1824, 0x1825, 0x1826, 0x1827, 0x1828, + 0x1829, 0x182a, 0x182b, 0x182c, 0x182d, 0x182e, 0x182f, 0x1830, 0x1831, + 0x1832, 0x1833, 0x1834, 0x1835, 0x1836, 0x1837, 0x1838, 0x1839, 0x183a, + 0x183b, 0x183c, 0x183d, 0x183e, 0x183f, 0x1840, 0x1841, 0x1842, 0x1843, + 0x1844, 0x1845, 0x1846, 0x1847, 0x1848, 0x1849, 0x184a, 0x184b, 0x184c, + 0x184d, 0x184e, 0x184f, 0x1850, 0x1851, 0x1852, 0x1853, 0x1854, 0x1855, + 0x1856, 0x1857, 0x1858, 0x1859, 0x185a, 0x185b, 0x185c, 0x185d, 0x185e, + 0x185f, 0x1860, 0x1861, 0x1862, 0x1863, 0x1864, 0x1865, 0x1866, 0x1867, + 0x1868, 0x1869, 0x186a, 0x186b, 0x186c, 0x186d, 0x186e, 0x186f, 0x1870, + 0x1871, 0x1872, 0x1873, 0x1874, 0x1875, 0x1876, 0x1877, 0x1887, 0x1888, + 0x1889, 0x188a, 0x188b, 0x188c, 0x188d, 0x188e, 0x188f, 0x1890, 0x1891, + 0x1892, 0x1893, 0x1894, 0x1895, 0x1896, 0x1897, 0x1898, 0x1899, 0x189a, + 0x189b, 0x189c, 0x189d, 0x189e, 0x189f, 0x18a0, 0x18a1, 0x18a2, 0x18a3, + 0x18a4, 0x18a5, 0x18a6, 0x18a7, 0x18a8, 0x18aa, 0xa840, 0xa841, 0xa842, + 0xa843, 0xa844, 0xa845, 0xa846, 0xa847, 0xa848, 0xa849, 0xa84a, 0xa84b, + 0xa84c, 0xa84d, 0xa84e, 0xa84f, 0xa850, 0xa851, 0xa852, 0xa853, 0xa854, + 0xa855, 0xa856, 0xa857, 0xa858, 0xa859, 0xa85a, 0xa85b, 0xa85c, 0xa85d, + 0xa85e, 0xa85f, 0xa860, 0xa861, 0xa862, 0xa863, 0xa864, 0xa865, 0xa866, + 0xa867, 0xa868, 0xa869, 0xa86a, 0xa86b, 0xa86c, 0xa86d, 0xa86e, 0xa86f, + 0xa870, 0xa871}; + + for (size_t i = 0; i < label.size(); i++) { + uint32_t c = label[i]; + if (c == 0x200c) { + if (i > 0) { + if (std::binary_search(std::begin(virama), std::end(virama), + label[i - 1])) { + return true; + } + } + if ((i == 0) || (i + 1 >= label.size())) { + return false; + } + // we go backward looking for L or D + auto is_l_or_d = [](uint32_t code) { + return std::binary_search(std::begin(L), std::end(L), code) || + std::binary_search(std::begin(D), std::end(D), code); + }; + auto is_r_or_d = [](uint32_t code) { + return std::binary_search(std::begin(R), std::end(R), code) || + std::binary_search(std::begin(D), std::end(D), code); + }; + std::u32string_view before = label.substr(0, i); + std::u32string_view after = label.substr(i + 1); + return (std::find_if(before.begin(), before.end(), is_l_or_d) != + before.end()) && + (std::find_if(after.begin(), after.end(), is_r_or_d) != + after.end()); + } else if (c == 0x200d) { + if (i > 0) { + if (std::binary_search(std::begin(virama), std::end(virama), + label[i - 1])) { + return true; + } + } + return false; + } + } + + // If CheckBidi, and if the domain name is a Bidi domain name, then the label + // must satisfy all six of the numbered conditions in [IDNA2008] RFC 5893, + // Section 2. + + // The following rule, consisting of six conditions, applies to labels + // in Bidi domain names. The requirements that this rule satisfies are + // described in Section 3. All of the conditions must be satisfied for + // the rule to be satisfied. + // + // 1. The first character must be a character with Bidi property L, R, + // or AL. If it has the R or AL property, it is an RTL label; if it + // has the L property, it is an LTR label. + // + // 2. In an RTL label, only characters with the Bidi properties R, AL, + // AN, EN, ES, CS, ET, ON, BN, or NSM are allowed. + // + // 3. In an RTL label, the end of the label must be a character with + // Bidi property R, AL, EN, or AN, followed by zero or more + // characters with Bidi property NSM. + // + // 4. In an RTL label, if an EN is present, no AN may be present, and + // vice versa. + // + // 5. In an LTR label, only characters with the Bidi properties L, EN, + // ES, CS, ET, ON, BN, or NSM are allowed. + // + // 6. In an LTR label, the end of the label must be a character with + // Bidi property L or EN, followed by zero or more characters with + // Bidi property NSM. + + size_t last_non_nsm_char = find_last_not_of_nsm(label); + if (last_non_nsm_char == std::u32string_view::npos) { + return false; + } + + // A "Bidi domain name" is a domain name that contains at least one RTL label. + // The following rule, consisting of six conditions, applies to labels in Bidi + // domain names. + if (is_rtl_label(label)) { + // The first character must be a character with Bidi property L, R, + // or AL. If it has the R or AL property, it is an RTL label; if it + // has the L property, it is an LTR label. + + if (find_direction(label[0]) == direction::L) { + // Eval as LTR + + // In an LTR label, only characters with the Bidi properties L, EN, + // ES, CS, ET, ON, BN, or NSM are allowed. + for (size_t i = 0; i < last_non_nsm_char; i++) { + const direction d = find_direction(label[i]); + if (!(d == direction::L || d == direction::EN || d == direction::ES || + d == direction::CS || d == direction::ET || d == direction::ON || + d == direction::BN || d == direction::NSM)) { + return false; + } + + if ((i == last_non_nsm_char) && + !(d == direction::L || d == direction::EN)) { + return false; + } + } + + return true; + + } else { + // Eval as RTL + + bool has_an = false; + bool has_en = false; + for (size_t i = 0; i <= last_non_nsm_char; i++) { + const direction d = find_direction(label[i]); + + // In an RTL label, if an EN is present, no AN may be present, and vice + // versa. + if ((d == direction::EN && ((has_en = true) && has_an)) || + (d == direction::AN && ((has_an = true) && has_en))) { + return false; + } + + if (!(d == direction::R || d == direction::AL || d == direction::AN || + d == direction::EN || d == direction::ES || d == direction::CS || + d == direction::ET || d == direction::ON || d == direction::BN || + d == direction::NSM)) { + return false; + } + + if (i == last_non_nsm_char && + !(d == direction::R || d == direction::AL || d == direction::AN || + d == direction::EN)) { + return false; + } + } + + return true; + } + } + + return true; +} + +} // namespace ada::idna +/* end file src/validity.cpp */ +/* begin file src/to_ascii.cpp */ + +#include +#include + + +namespace ada::idna { + +bool constexpr is_ascii(std::u32string_view view) { + for (uint32_t c : view) { + if (c >= 0x80) { + return false; + } + } + return true; +} + +bool constexpr is_ascii(std::string_view view) { + for (uint8_t c : view) { + if (c >= 0x80) { + return false; + } + } + return true; +} + +constexpr static uint8_t is_forbidden_domain_code_point_table[] = { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; + +static_assert(sizeof(is_forbidden_domain_code_point_table) == 256); + +inline bool is_forbidden_domain_code_point(const char c) noexcept { + return is_forbidden_domain_code_point_table[uint8_t(c)]; +} + +bool contains_forbidden_domain_code_point(std::string_view view) { + return ( + std::any_of(view.begin(), view.end(), is_forbidden_domain_code_point)); +} + +// We return "" on error. +static std::string from_ascii_to_ascii(std::string_view ut8_string) { + static const std::string error = ""; + // copy and map + // we could be more efficient by avoiding the copy when unnecessary. + std::string mapped_string = std::string(ut8_string); + ascii_map(mapped_string.data(), mapped_string.size()); + std::string out; + size_t label_start = 0; + + while (label_start != mapped_string.size()) { + size_t loc_dot = mapped_string.find('.', label_start); + bool is_last_label = (loc_dot == std::string_view::npos); + size_t label_size = is_last_label ? mapped_string.size() - label_start + : loc_dot - label_start; + size_t label_size_with_dot = is_last_label ? label_size : label_size + 1; + std::string_view label_view(mapped_string.data() + label_start, label_size); + label_start += label_size_with_dot; + if (label_size == 0) { + // empty label? Nothing to do. + } else if (label_view.starts_with("xn--")) { + // The xn-- part is the expensive game. + out.append(label_view); + std::string_view puny_segment_ascii( + out.data() + out.size() - label_view.size() + 4, + label_view.size() - 4); + std::u32string tmp_buffer; + bool is_ok = ada::idna::punycode_to_utf32(puny_segment_ascii, tmp_buffer); + if (!is_ok) { + return error; + } + std::u32string post_map = ada::idna::map(tmp_buffer); + if (tmp_buffer != post_map) { + return error; + } + std::u32string pre_normal = post_map; + normalize(post_map); + if (post_map != pre_normal) { + return error; + } + if (post_map.empty()) { + return error; + } + if (!is_label_valid(post_map)) { + return error; + } + } else { + out.append(label_view); + } + if (!is_last_label) { + out.push_back('.'); + } + } + return out; +} + +// We return "" on error. +std::string to_ascii(std::string_view ut8_string) { + if (is_ascii(ut8_string)) { + return from_ascii_to_ascii(ut8_string); + } + static const std::string error = ""; + // We convert to UTF-32 + size_t utf32_length = + ada::idna::utf32_length_from_utf8(ut8_string.data(), ut8_string.size()); + std::u32string utf32(utf32_length, '\0'); + size_t actual_utf32_length = ada::idna::utf8_to_utf32( + ut8_string.data(), ut8_string.size(), utf32.data()); + if (actual_utf32_length == 0) { + return error; + } + // mapping + utf32 = ada::idna::map(utf32); + normalize(utf32); + std::string out; + size_t label_start = 0; + + while (label_start != utf32.size()) { + size_t loc_dot = utf32.find('.', label_start); + bool is_last_label = (loc_dot == std::string_view::npos); + size_t label_size = + is_last_label ? utf32.size() - label_start : loc_dot - label_start; + size_t label_size_with_dot = is_last_label ? label_size : label_size + 1; + std::u32string_view label_view(utf32.data() + label_start, label_size); + label_start += label_size_with_dot; + if (label_size == 0) { + // empty label? Nothing to do. + } else if (label_view.starts_with(U"xn--")) { + // we do not need to check, e.g., Xn-- because mapping goes to lower case + for (char32_t c : label_view) { + if (c >= 0x80) { + return error; + } + out += (unsigned char)(c); + } + std::string_view puny_segment_ascii( + out.data() + out.size() - label_view.size() + 4, + label_view.size() - 4); + std::u32string tmp_buffer; + bool is_ok = ada::idna::punycode_to_utf32(puny_segment_ascii, tmp_buffer); + if (!is_ok) { + return error; + } + std::u32string post_map = ada::idna::map(tmp_buffer); + if (tmp_buffer != post_map) { + return error; + } + std::u32string pre_normal = post_map; + normalize(post_map); + if (post_map != pre_normal) { + return error; + } + if (post_map.empty()) { + return error; + } + if (!is_label_valid(post_map)) { + return error; + } + } else { + // The fast path here is an ascii label. + if (is_ascii(label_view)) { + // no validation needed. + for (char32_t c : label_view) { + out += (unsigned char)(c); + } + } else { + // slow path. + // first check validity. + if (!is_label_valid(label_view)) { + return error; + } + // It is valid! So now we must encode it as punycode... + out.append("xn--"); + bool is_ok = ada::idna::utf32_to_punycode(label_view, out); + if (!is_ok) { + return error; + } + } + } + if (!is_last_label) { + out.push_back('.'); + } + } + return out; +} +} // namespace ada::idna +/* end file src/to_ascii.cpp */ +/* begin file src/to_unicode.cpp */ + +#include +#include + + +namespace ada::idna { +std::string to_unicode(std::string_view input) { + std::string output; + output.reserve(input.size()); + + size_t label_start = 0; + while (label_start < input.size()) { + size_t loc_dot = input.find('.', label_start); + bool is_last_label = (loc_dot == std::string_view::npos); + size_t label_size = + is_last_label ? input.size() - label_start : loc_dot - label_start; + auto label_view = std::string_view(input.data() + label_start, label_size); + + if (label_view.starts_with("xn--") && ada::idna::is_ascii(label_view)) { + label_view.remove_prefix(4); + if (ada::idna::verify_punycode(label_view)) { + std::u32string tmp_buffer; + if (ada::idna::punycode_to_utf32(label_view, tmp_buffer)) { + auto utf8_size = ada::idna::utf8_length_from_utf32(tmp_buffer.data(), + tmp_buffer.size()); + std::string final_utf8(utf8_size, '\0'); + ada::idna::utf32_to_utf8(tmp_buffer.data(), tmp_buffer.size(), + final_utf8.data()); + output.append(final_utf8); + } else { + // ToUnicode never fails. If any step fails, then the original input + // sequence is returned immediately in that step. + output.append( + std::string_view(input.data() + label_start, label_size)); + } + } else { + output.append(std::string_view(input.data() + label_start, label_size)); + } + } else { + output.append(label_view); + } + + if (!is_last_label) { + output.push_back('.'); + } + + label_start += label_size + 1; + } + + return output; +} +} // namespace ada::idna +/* end file src/to_unicode.cpp */ +/* begin file src/identifier.cpp */ + +#include +#include +#include + +/* begin file src/id_tables.cpp */ +// IDNA 15.1.0 + +// clang-format off +#ifndef ADA_IDNA_IDENTIFIER_TABLES_H +#define ADA_IDNA_IDENTIFIER_TABLES_H +#include + +namespace ada::idna { + +const uint32_t id_continue[1344][2] = +{ + {48, 57}, {65, 90}, {95, 95}, {97, 122}, + {170, 170}, {181, 181}, {183, 183}, {186, 186}, + {192, 214}, {216, 246}, {248, 442}, {443, 443}, + {444, 447}, {448, 451}, {452, 659}, {660, 660}, + {661, 687}, {688, 705}, {710, 721}, {736, 740}, + {748, 748}, {750, 750}, {768, 879}, {880, 883}, + {884, 884}, {886, 887}, {890, 890}, {891, 893}, + {895, 895}, {902, 902}, {903, 903}, {904, 906}, + {908, 908}, {910, 929}, {931, 1013}, {1015, 1153}, + {1155, 1159}, {1162, 1327}, {1329, 1366}, {1369, 1369}, + {1376, 1416}, {1425, 1469}, {1471, 1471}, {1473, 1474}, + {1476, 1477}, {1479, 1479}, {1488, 1514}, {1519, 1522}, + {1552, 1562}, {1568, 1599}, {1600, 1600}, {1601, 1610}, + {1611, 1631}, {1632, 1641}, {1646, 1647}, {1648, 1648}, + {1649, 1747}, {1749, 1749}, {1750, 1756}, {1759, 1764}, + {1765, 1766}, {1767, 1768}, {1770, 1773}, {1774, 1775}, + {1776, 1785}, {1786, 1788}, {1791, 1791}, {1808, 1808}, + {1809, 1809}, {1810, 1839}, {1840, 1866}, {1869, 1957}, + {1958, 1968}, {1969, 1969}, {1984, 1993}, {1994, 2026}, + {2027, 2035}, {2036, 2037}, {2042, 2042}, {2045, 2045}, + {2048, 2069}, {2070, 2073}, {2074, 2074}, {2075, 2083}, + {2084, 2084}, {2085, 2087}, {2088, 2088}, {2089, 2093}, + {2112, 2136}, {2137, 2139}, {2144, 2154}, {2160, 2183}, + {2185, 2190}, {2200, 2207}, {2208, 2248}, {2249, 2249}, + {2250, 2273}, {2275, 2306}, {2307, 2307}, {2308, 2361}, + {2362, 2362}, {2363, 2363}, {2364, 2364}, {2365, 2365}, + {2366, 2368}, {2369, 2376}, {2377, 2380}, {2381, 2381}, + {2382, 2383}, {2384, 2384}, {2385, 2391}, {2392, 2401}, + {2402, 2403}, {2406, 2415}, {2417, 2417}, {2418, 2432}, + {2433, 2433}, {2434, 2435}, {2437, 2444}, {2447, 2448}, + {2451, 2472}, {2474, 2480}, {2482, 2482}, {2486, 2489}, + {2492, 2492}, {2493, 2493}, {2494, 2496}, {2497, 2500}, + {2503, 2504}, {2507, 2508}, {2509, 2509}, {2510, 2510}, + {2519, 2519}, {2524, 2525}, {2527, 2529}, {2530, 2531}, + {2534, 2543}, {2544, 2545}, {2556, 2556}, {2558, 2558}, + {2561, 2562}, {2563, 2563}, {2565, 2570}, {2575, 2576}, + {2579, 2600}, {2602, 2608}, {2610, 2611}, {2613, 2614}, + {2616, 2617}, {2620, 2620}, {2622, 2624}, {2625, 2626}, + {2631, 2632}, {2635, 2637}, {2641, 2641}, {2649, 2652}, + {2654, 2654}, {2662, 2671}, {2672, 2673}, {2674, 2676}, + {2677, 2677}, {2689, 2690}, {2691, 2691}, {2693, 2701}, + {2703, 2705}, {2707, 2728}, {2730, 2736}, {2738, 2739}, + {2741, 2745}, {2748, 2748}, {2749, 2749}, {2750, 2752}, + {2753, 2757}, {2759, 2760}, {2761, 2761}, {2763, 2764}, + {2765, 2765}, {2768, 2768}, {2784, 2785}, {2786, 2787}, + {2790, 2799}, {2809, 2809}, {2810, 2815}, {2817, 2817}, + {2818, 2819}, {2821, 2828}, {2831, 2832}, {2835, 2856}, + {2858, 2864}, {2866, 2867}, {2869, 2873}, {2876, 2876}, + {2877, 2877}, {2878, 2878}, {2879, 2879}, {2880, 2880}, + {2881, 2884}, {2887, 2888}, {2891, 2892}, {2893, 2893}, + {2901, 2902}, {2903, 2903}, {2908, 2909}, {2911, 2913}, + {2914, 2915}, {2918, 2927}, {2929, 2929}, {2946, 2946}, + {2947, 2947}, {2949, 2954}, {2958, 2960}, {2962, 2965}, + {2969, 2970}, {2972, 2972}, {2974, 2975}, {2979, 2980}, + {2984, 2986}, {2990, 3001}, {3006, 3007}, {3008, 3008}, + {3009, 3010}, {3014, 3016}, {3018, 3020}, {3021, 3021}, + {3024, 3024}, {3031, 3031}, {3046, 3055}, {3072, 3072}, + {3073, 3075}, {3076, 3076}, {3077, 3084}, {3086, 3088}, + {3090, 3112}, {3114, 3129}, {3132, 3132}, {3133, 3133}, + {3134, 3136}, {3137, 3140}, {3142, 3144}, {3146, 3149}, + {3157, 3158}, {3160, 3162}, {3165, 3165}, {3168, 3169}, + {3170, 3171}, {3174, 3183}, {3200, 3200}, {3201, 3201}, + {3202, 3203}, {3205, 3212}, {3214, 3216}, {3218, 3240}, + {3242, 3251}, {3253, 3257}, {3260, 3260}, {3261, 3261}, + {3262, 3262}, {3263, 3263}, {3264, 3268}, {3270, 3270}, + {3271, 3272}, {3274, 3275}, {3276, 3277}, {3285, 3286}, + {3293, 3294}, {3296, 3297}, {3298, 3299}, {3302, 3311}, + {3313, 3314}, {3315, 3315}, {3328, 3329}, {3330, 3331}, + {3332, 3340}, {3342, 3344}, {3346, 3386}, {3387, 3388}, + {3389, 3389}, {3390, 3392}, {3393, 3396}, {3398, 3400}, + {3402, 3404}, {3405, 3405}, {3406, 3406}, {3412, 3414}, + {3415, 3415}, {3423, 3425}, {3426, 3427}, {3430, 3439}, + {3450, 3455}, {3457, 3457}, {3458, 3459}, {3461, 3478}, + {3482, 3505}, {3507, 3515}, {3517, 3517}, {3520, 3526}, + {3530, 3530}, {3535, 3537}, {3538, 3540}, {3542, 3542}, + {3544, 3551}, {3558, 3567}, {3570, 3571}, {3585, 3632}, + {3633, 3633}, {3634, 3635}, {3636, 3642}, {3648, 3653}, + {3654, 3654}, {3655, 3662}, {3664, 3673}, {3713, 3714}, + {3716, 3716}, {3718, 3722}, {3724, 3747}, {3749, 3749}, + {3751, 3760}, {3761, 3761}, {3762, 3763}, {3764, 3772}, + {3773, 3773}, {3776, 3780}, {3782, 3782}, {3784, 3790}, + {3792, 3801}, {3804, 3807}, {3840, 3840}, {3864, 3865}, + {3872, 3881}, {3893, 3893}, {3895, 3895}, {3897, 3897}, + {3902, 3903}, {3904, 3911}, {3913, 3948}, {3953, 3966}, + {3967, 3967}, {3968, 3972}, {3974, 3975}, {3976, 3980}, + {3981, 3991}, {3993, 4028}, {4038, 4038}, {4096, 4138}, + {4139, 4140}, {4141, 4144}, {4145, 4145}, {4146, 4151}, + {4152, 4152}, {4153, 4154}, {4155, 4156}, {4157, 4158}, + {4159, 4159}, {4160, 4169}, {4176, 4181}, {4182, 4183}, + {4184, 4185}, {4186, 4189}, {4190, 4192}, {4193, 4193}, + {4194, 4196}, {4197, 4198}, {4199, 4205}, {4206, 4208}, + {4209, 4212}, {4213, 4225}, {4226, 4226}, {4227, 4228}, + {4229, 4230}, {4231, 4236}, {4237, 4237}, {4238, 4238}, + {4239, 4239}, {4240, 4249}, {4250, 4252}, {4253, 4253}, + {4256, 4293}, {4295, 4295}, {4301, 4301}, {4304, 4346}, + {4348, 4348}, {4349, 4351}, {4352, 4680}, {4682, 4685}, + {4688, 4694}, {4696, 4696}, {4698, 4701}, {4704, 4744}, + {4746, 4749}, {4752, 4784}, {4786, 4789}, {4792, 4798}, + {4800, 4800}, {4802, 4805}, {4808, 4822}, {4824, 4880}, + {4882, 4885}, {4888, 4954}, {4957, 4959}, {4969, 4977}, + {4992, 5007}, {5024, 5109}, {5112, 5117}, {5121, 5740}, + {5743, 5759}, {5761, 5786}, {5792, 5866}, {5870, 5872}, + {5873, 5880}, {5888, 5905}, {5906, 5908}, {5909, 5909}, + {5919, 5937}, {5938, 5939}, {5940, 5940}, {5952, 5969}, + {5970, 5971}, {5984, 5996}, {5998, 6000}, {6002, 6003}, + {6016, 6067}, {6068, 6069}, {6070, 6070}, {6071, 6077}, + {6078, 6085}, {6086, 6086}, {6087, 6088}, {6089, 6099}, + {6103, 6103}, {6108, 6108}, {6109, 6109}, {6112, 6121}, + {6155, 6157}, {6159, 6159}, {6160, 6169}, {6176, 6210}, + {6211, 6211}, {6212, 6264}, {6272, 6276}, {6277, 6278}, + {6279, 6312}, {6313, 6313}, {6314, 6314}, {6320, 6389}, + {6400, 6430}, {6432, 6434}, {6435, 6438}, {6439, 6440}, + {6441, 6443}, {6448, 6449}, {6450, 6450}, {6451, 6456}, + {6457, 6459}, {6470, 6479}, {6480, 6509}, {6512, 6516}, + {6528, 6571}, {6576, 6601}, {6608, 6617}, {6618, 6618}, + {6656, 6678}, {6679, 6680}, {6681, 6682}, {6683, 6683}, + {6688, 6740}, {6741, 6741}, {6742, 6742}, {6743, 6743}, + {6744, 6750}, {6752, 6752}, {6753, 6753}, {6754, 6754}, + {6755, 6756}, {6757, 6764}, {6765, 6770}, {6771, 6780}, + {6783, 6783}, {6784, 6793}, {6800, 6809}, {6823, 6823}, + {6832, 6845}, {6847, 6862}, {6912, 6915}, {6916, 6916}, + {6917, 6963}, {6964, 6964}, {6965, 6965}, {6966, 6970}, + {6971, 6971}, {6972, 6972}, {6973, 6977}, {6978, 6978}, + {6979, 6980}, {6981, 6988}, {6992, 7001}, {7019, 7027}, + {7040, 7041}, {7042, 7042}, {7043, 7072}, {7073, 7073}, + {7074, 7077}, {7078, 7079}, {7080, 7081}, {7082, 7082}, + {7083, 7085}, {7086, 7087}, {7088, 7097}, {7098, 7141}, + {7142, 7142}, {7143, 7143}, {7144, 7145}, {7146, 7148}, + {7149, 7149}, {7150, 7150}, {7151, 7153}, {7154, 7155}, + {7168, 7203}, {7204, 7211}, {7212, 7219}, {7220, 7221}, + {7222, 7223}, {7232, 7241}, {7245, 7247}, {7248, 7257}, + {7258, 7287}, {7288, 7293}, {7296, 7304}, {7312, 7354}, + {7357, 7359}, {7376, 7378}, {7380, 7392}, {7393, 7393}, + {7394, 7400}, {7401, 7404}, {7405, 7405}, {7406, 7411}, + {7412, 7412}, {7413, 7414}, {7415, 7415}, {7416, 7417}, + {7418, 7418}, {7424, 7467}, {7468, 7530}, {7531, 7543}, + {7544, 7544}, {7545, 7578}, {7579, 7615}, {7616, 7679}, + {7680, 7957}, {7960, 7965}, {7968, 8005}, {8008, 8013}, + {8016, 8023}, {8025, 8025}, {8027, 8027}, {8029, 8029}, + {8031, 8061}, {8064, 8116}, {8118, 8124}, {8126, 8126}, + {8130, 8132}, {8134, 8140}, {8144, 8147}, {8150, 8155}, + {8160, 8172}, {8178, 8180}, {8182, 8188}, {8204, 8205}, + {8255, 8256}, {8276, 8276}, {8305, 8305}, {8319, 8319}, + {8336, 8348}, {8400, 8412}, {8417, 8417}, {8421, 8432}, + {8450, 8450}, {8455, 8455}, {8458, 8467}, {8469, 8469}, + {8472, 8472}, {8473, 8477}, {8484, 8484}, {8486, 8486}, + {8488, 8488}, {8490, 8493}, {8494, 8494}, {8495, 8500}, + {8501, 8504}, {8505, 8505}, {8508, 8511}, {8517, 8521}, + {8526, 8526}, {8544, 8578}, {8579, 8580}, {8581, 8584}, + {11264, 11387}, {11388, 11389}, {11390, 11492}, {11499, 11502}, + {11503, 11505}, {11506, 11507}, {11520, 11557}, {11559, 11559}, + {11565, 11565}, {11568, 11623}, {11631, 11631}, {11647, 11647}, + {11648, 11670}, {11680, 11686}, {11688, 11694}, {11696, 11702}, + {11704, 11710}, {11712, 11718}, {11720, 11726}, {11728, 11734}, + {11736, 11742}, {11744, 11775}, {12293, 12293}, {12294, 12294}, + {12295, 12295}, {12321, 12329}, {12330, 12333}, {12334, 12335}, + {12337, 12341}, {12344, 12346}, {12347, 12347}, {12348, 12348}, + {12353, 12438}, {12441, 12442}, {12443, 12444}, {12445, 12446}, + {12447, 12447}, {12449, 12538}, {12539, 12539}, {12540, 12542}, + {12543, 12543}, {12549, 12591}, {12593, 12686}, {12704, 12735}, + {12784, 12799}, {13312, 19903}, {19968, 40980}, {40981, 40981}, + {40982, 42124}, {42192, 42231}, {42232, 42237}, {42240, 42507}, + {42508, 42508}, {42512, 42527}, {42528, 42537}, {42538, 42539}, + {42560, 42605}, {42606, 42606}, {42607, 42607}, {42612, 42621}, + {42623, 42623}, {42624, 42651}, {42652, 42653}, {42654, 42655}, + {42656, 42725}, {42726, 42735}, {42736, 42737}, {42775, 42783}, + {42786, 42863}, {42864, 42864}, {42865, 42887}, {42888, 42888}, + {42891, 42894}, {42895, 42895}, {42896, 42954}, {42960, 42961}, + {42963, 42963}, {42965, 42969}, {42994, 42996}, {42997, 42998}, + {42999, 42999}, {43000, 43001}, {43002, 43002}, {43003, 43009}, + {43010, 43010}, {43011, 43013}, {43014, 43014}, {43015, 43018}, + {43019, 43019}, {43020, 43042}, {43043, 43044}, {43045, 43046}, + {43047, 43047}, {43052, 43052}, {43072, 43123}, {43136, 43137}, + {43138, 43187}, {43188, 43203}, {43204, 43205}, {43216, 43225}, + {43232, 43249}, {43250, 43255}, {43259, 43259}, {43261, 43262}, + {43263, 43263}, {43264, 43273}, {43274, 43301}, {43302, 43309}, + {43312, 43334}, {43335, 43345}, {43346, 43347}, {43360, 43388}, + {43392, 43394}, {43395, 43395}, {43396, 43442}, {43443, 43443}, + {43444, 43445}, {43446, 43449}, {43450, 43451}, {43452, 43453}, + {43454, 43456}, {43471, 43471}, {43472, 43481}, {43488, 43492}, + {43493, 43493}, {43494, 43494}, {43495, 43503}, {43504, 43513}, + {43514, 43518}, {43520, 43560}, {43561, 43566}, {43567, 43568}, + {43569, 43570}, {43571, 43572}, {43573, 43574}, {43584, 43586}, + {43587, 43587}, {43588, 43595}, {43596, 43596}, {43597, 43597}, + {43600, 43609}, {43616, 43631}, {43632, 43632}, {43633, 43638}, + {43642, 43642}, {43643, 43643}, {43644, 43644}, {43645, 43645}, + {43646, 43695}, {43696, 43696}, {43697, 43697}, {43698, 43700}, + {43701, 43702}, {43703, 43704}, {43705, 43709}, {43710, 43711}, + {43712, 43712}, {43713, 43713}, {43714, 43714}, {43739, 43740}, + {43741, 43741}, {43744, 43754}, {43755, 43755}, {43756, 43757}, + {43758, 43759}, {43762, 43762}, {43763, 43764}, {43765, 43765}, + {43766, 43766}, {43777, 43782}, {43785, 43790}, {43793, 43798}, + {43808, 43814}, {43816, 43822}, {43824, 43866}, {43868, 43871}, + {43872, 43880}, {43881, 43881}, {43888, 43967}, {43968, 44002}, + {44003, 44004}, {44005, 44005}, {44006, 44007}, {44008, 44008}, + {44009, 44010}, {44012, 44012}, {44013, 44013}, {44016, 44025}, + {44032, 55203}, {55216, 55238}, {55243, 55291}, {63744, 64109}, + {64112, 64217}, {64256, 64262}, {64275, 64279}, {64285, 64285}, + {64286, 64286}, {64287, 64296}, {64298, 64310}, {64312, 64316}, + {64318, 64318}, {64320, 64321}, {64323, 64324}, {64326, 64433}, + {64467, 64829}, {64848, 64911}, {64914, 64967}, {65008, 65019}, + {65024, 65039}, {65056, 65071}, {65075, 65076}, {65101, 65103}, + {65136, 65140}, {65142, 65276}, {65296, 65305}, {65313, 65338}, + {65343, 65343}, {65345, 65370}, {65381, 65381}, {65382, 65391}, + {65392, 65392}, {65393, 65437}, {65438, 65439}, {65440, 65470}, + {65474, 65479}, {65482, 65487}, {65490, 65495}, {65498, 65500}, + {65536, 65547}, {65549, 65574}, {65576, 65594}, {65596, 65597}, + {65599, 65613}, {65616, 65629}, {65664, 65786}, {65856, 65908}, + {66045, 66045}, {66176, 66204}, {66208, 66256}, {66272, 66272}, + {66304, 66335}, {66349, 66368}, {66369, 66369}, {66370, 66377}, + {66378, 66378}, {66384, 66421}, {66422, 66426}, {66432, 66461}, + {66464, 66499}, {66504, 66511}, {66513, 66517}, {66560, 66639}, + {66640, 66717}, {66720, 66729}, {66736, 66771}, {66776, 66811}, + {66816, 66855}, {66864, 66915}, {66928, 66938}, {66940, 66954}, + {66956, 66962}, {66964, 66965}, {66967, 66977}, {66979, 66993}, + {66995, 67001}, {67003, 67004}, {67072, 67382}, {67392, 67413}, + {67424, 67431}, {67456, 67461}, {67463, 67504}, {67506, 67514}, + {67584, 67589}, {67592, 67592}, {67594, 67637}, {67639, 67640}, + {67644, 67644}, {67647, 67669}, {67680, 67702}, {67712, 67742}, + {67808, 67826}, {67828, 67829}, {67840, 67861}, {67872, 67897}, + {67968, 68023}, {68030, 68031}, {68096, 68096}, {68097, 68099}, + {68101, 68102}, {68108, 68111}, {68112, 68115}, {68117, 68119}, + {68121, 68149}, {68152, 68154}, {68159, 68159}, {68192, 68220}, + {68224, 68252}, {68288, 68295}, {68297, 68324}, {68325, 68326}, + {68352, 68405}, {68416, 68437}, {68448, 68466}, {68480, 68497}, + {68608, 68680}, {68736, 68786}, {68800, 68850}, {68864, 68899}, + {68900, 68903}, {68912, 68921}, {69248, 69289}, {69291, 69292}, + {69296, 69297}, {69373, 69375}, {69376, 69404}, {69415, 69415}, + {69424, 69445}, {69446, 69456}, {69488, 69505}, {69506, 69509}, + {69552, 69572}, {69600, 69622}, {69632, 69632}, {69633, 69633}, + {69634, 69634}, {69635, 69687}, {69688, 69702}, {69734, 69743}, + {69744, 69744}, {69745, 69746}, {69747, 69748}, {69749, 69749}, + {69759, 69761}, {69762, 69762}, {69763, 69807}, {69808, 69810}, + {69811, 69814}, {69815, 69816}, {69817, 69818}, {69826, 69826}, + {69840, 69864}, {69872, 69881}, {69888, 69890}, {69891, 69926}, + {69927, 69931}, {69932, 69932}, {69933, 69940}, {69942, 69951}, + {69956, 69956}, {69957, 69958}, {69959, 69959}, {69968, 70002}, + {70003, 70003}, {70006, 70006}, {70016, 70017}, {70018, 70018}, + {70019, 70066}, {70067, 70069}, {70070, 70078}, {70079, 70080}, + {70081, 70084}, {70089, 70092}, {70094, 70094}, {70095, 70095}, + {70096, 70105}, {70106, 70106}, {70108, 70108}, {70144, 70161}, + {70163, 70187}, {70188, 70190}, {70191, 70193}, {70194, 70195}, + {70196, 70196}, {70197, 70197}, {70198, 70199}, {70206, 70206}, + {70207, 70208}, {70209, 70209}, {70272, 70278}, {70280, 70280}, + {70282, 70285}, {70287, 70301}, {70303, 70312}, {70320, 70366}, + {70367, 70367}, {70368, 70370}, {70371, 70378}, {70384, 70393}, + {70400, 70401}, {70402, 70403}, {70405, 70412}, {70415, 70416}, + {70419, 70440}, {70442, 70448}, {70450, 70451}, {70453, 70457}, + {70459, 70460}, {70461, 70461}, {70462, 70463}, {70464, 70464}, + {70465, 70468}, {70471, 70472}, {70475, 70477}, {70480, 70480}, + {70487, 70487}, {70493, 70497}, {70498, 70499}, {70502, 70508}, + {70512, 70516}, {70656, 70708}, {70709, 70711}, {70712, 70719}, + {70720, 70721}, {70722, 70724}, {70725, 70725}, {70726, 70726}, + {70727, 70730}, {70736, 70745}, {70750, 70750}, {70751, 70753}, + {70784, 70831}, {70832, 70834}, {70835, 70840}, {70841, 70841}, + {70842, 70842}, {70843, 70846}, {70847, 70848}, {70849, 70849}, + {70850, 70851}, {70852, 70853}, {70855, 70855}, {70864, 70873}, + {71040, 71086}, {71087, 71089}, {71090, 71093}, {71096, 71099}, + {71100, 71101}, {71102, 71102}, {71103, 71104}, {71128, 71131}, + {71132, 71133}, {71168, 71215}, {71216, 71218}, {71219, 71226}, + {71227, 71228}, {71229, 71229}, {71230, 71230}, {71231, 71232}, + {71236, 71236}, {71248, 71257}, {71296, 71338}, {71339, 71339}, + {71340, 71340}, {71341, 71341}, {71342, 71343}, {71344, 71349}, + {71350, 71350}, {71351, 71351}, {71352, 71352}, {71360, 71369}, + {71424, 71450}, {71453, 71455}, {71456, 71457}, {71458, 71461}, + {71462, 71462}, {71463, 71467}, {71472, 71481}, {71488, 71494}, + {71680, 71723}, {71724, 71726}, {71727, 71735}, {71736, 71736}, + {71737, 71738}, {71840, 71903}, {71904, 71913}, {71935, 71942}, + {71945, 71945}, {71948, 71955}, {71957, 71958}, {71960, 71983}, + {71984, 71989}, {71991, 71992}, {71995, 71996}, {71997, 71997}, + {71998, 71998}, {71999, 71999}, {72000, 72000}, {72001, 72001}, + {72002, 72002}, {72003, 72003}, {72016, 72025}, {72096, 72103}, + {72106, 72144}, {72145, 72147}, {72148, 72151}, {72154, 72155}, + {72156, 72159}, {72160, 72160}, {72161, 72161}, {72163, 72163}, + {72164, 72164}, {72192, 72192}, {72193, 72202}, {72203, 72242}, + {72243, 72248}, {72249, 72249}, {72250, 72250}, {72251, 72254}, + {72263, 72263}, {72272, 72272}, {72273, 72278}, {72279, 72280}, + {72281, 72283}, {72284, 72329}, {72330, 72342}, {72343, 72343}, + {72344, 72345}, {72349, 72349}, {72368, 72440}, {72704, 72712}, + {72714, 72750}, {72751, 72751}, {72752, 72758}, {72760, 72765}, + {72766, 72766}, {72767, 72767}, {72768, 72768}, {72784, 72793}, + {72818, 72847}, {72850, 72871}, {72873, 72873}, {72874, 72880}, + {72881, 72881}, {72882, 72883}, {72884, 72884}, {72885, 72886}, + {72960, 72966}, {72968, 72969}, {72971, 73008}, {73009, 73014}, + {73018, 73018}, {73020, 73021}, {73023, 73029}, {73030, 73030}, + {73031, 73031}, {73040, 73049}, {73056, 73061}, {73063, 73064}, + {73066, 73097}, {73098, 73102}, {73104, 73105}, {73107, 73108}, + {73109, 73109}, {73110, 73110}, {73111, 73111}, {73112, 73112}, + {73120, 73129}, {73440, 73458}, {73459, 73460}, {73461, 73462}, + {73472, 73473}, {73474, 73474}, {73475, 73475}, {73476, 73488}, + {73490, 73523}, {73524, 73525}, {73526, 73530}, {73534, 73535}, + {73536, 73536}, {73537, 73537}, {73538, 73538}, {73552, 73561}, + {73648, 73648}, {73728, 74649}, {74752, 74862}, {74880, 75075}, + {77712, 77808}, {77824, 78895}, {78912, 78912}, {78913, 78918}, + {78919, 78933}, {82944, 83526}, {92160, 92728}, {92736, 92766}, + {92768, 92777}, {92784, 92862}, {92864, 92873}, {92880, 92909}, + {92912, 92916}, {92928, 92975}, {92976, 92982}, {92992, 92995}, + {93008, 93017}, {93027, 93047}, {93053, 93071}, {93760, 93823}, + {93952, 94026}, {94031, 94031}, {94032, 94032}, {94033, 94087}, + {94095, 94098}, {94099, 94111}, {94176, 94177}, {94179, 94179}, + {94180, 94180}, {94192, 94193}, {94208, 100343}, {100352, 101589}, + {101632, 101640}, {110576, 110579}, {110581, 110587}, {110589, 110590}, + {110592, 110882}, {110898, 110898}, {110928, 110930}, {110933, 110933}, + {110948, 110951}, {110960, 111355}, {113664, 113770}, {113776, 113788}, + {113792, 113800}, {113808, 113817}, {113821, 113822}, {118528, 118573}, + {118576, 118598}, {119141, 119142}, {119143, 119145}, {119149, 119154}, + {119163, 119170}, {119173, 119179}, {119210, 119213}, {119362, 119364}, + {119808, 119892}, {119894, 119964}, {119966, 119967}, {119970, 119970}, + {119973, 119974}, {119977, 119980}, {119982, 119993}, {119995, 119995}, + {119997, 120003}, {120005, 120069}, {120071, 120074}, {120077, 120084}, + {120086, 120092}, {120094, 120121}, {120123, 120126}, {120128, 120132}, + {120134, 120134}, {120138, 120144}, {120146, 120485}, {120488, 120512}, + {120514, 120538}, {120540, 120570}, {120572, 120596}, {120598, 120628}, + {120630, 120654}, {120656, 120686}, {120688, 120712}, {120714, 120744}, + {120746, 120770}, {120772, 120779}, {120782, 120831}, {121344, 121398}, + {121403, 121452}, {121461, 121461}, {121476, 121476}, {121499, 121503}, + {121505, 121519}, {122624, 122633}, {122634, 122634}, {122635, 122654}, + {122661, 122666}, {122880, 122886}, {122888, 122904}, {122907, 122913}, + {122915, 122916}, {122918, 122922}, {122928, 122989}, {123023, 123023}, + {123136, 123180}, {123184, 123190}, {123191, 123197}, {123200, 123209}, + {123214, 123214}, {123536, 123565}, {123566, 123566}, {123584, 123627}, + {123628, 123631}, {123632, 123641}, {124112, 124138}, {124139, 124139}, + {124140, 124143}, {124144, 124153}, {124896, 124902}, {124904, 124907}, + {124909, 124910}, {124912, 124926}, {124928, 125124}, {125136, 125142}, + {125184, 125251}, {125252, 125258}, {125259, 125259}, {125264, 125273}, + {126464, 126467}, {126469, 126495}, {126497, 126498}, {126500, 126500}, + {126503, 126503}, {126505, 126514}, {126516, 126519}, {126521, 126521}, + {126523, 126523}, {126530, 126530}, {126535, 126535}, {126537, 126537}, + {126539, 126539}, {126541, 126543}, {126545, 126546}, {126548, 126548}, + {126551, 126551}, {126553, 126553}, {126555, 126555}, {126557, 126557}, + {126559, 126559}, {126561, 126562}, {126564, 126564}, {126567, 126570}, + {126572, 126578}, {126580, 126583}, {126585, 126588}, {126590, 126590}, + {126592, 126601}, {126603, 126619}, {126625, 126627}, {126629, 126633}, + {126635, 126651}, {130032, 130041}, {131072, 173791}, {173824, 177977}, + {177984, 178205}, {178208, 183969}, {183984, 191456}, {191472, 192093}, + {194560, 195101}, {196608, 201546}, {201552, 205743}, {917760, 917999} +}; +const uint32_t id_start[740][2] = +{ + {65, 90}, {97, 122}, {170, 170}, {181, 181}, + {186, 186}, {192, 214}, {216, 246}, {248, 442}, + {443, 443}, {444, 447}, {448, 451}, {452, 659}, + {660, 660}, {661, 687}, {688, 705}, {710, 721}, + {736, 740}, {748, 748}, {750, 750}, {880, 883}, + {884, 884}, {886, 887}, {890, 890}, {891, 893}, + {895, 895}, {902, 902}, {904, 906}, {908, 908}, + {910, 929}, {931, 1013}, {1015, 1153}, {1162, 1327}, + {1329, 1366}, {1369, 1369}, {1376, 1416}, {1488, 1514}, + {1519, 1522}, {1568, 1599}, {1600, 1600}, {1601, 1610}, + {1646, 1647}, {1649, 1747}, {1749, 1749}, {1765, 1766}, + {1774, 1775}, {1786, 1788}, {1791, 1791}, {1808, 1808}, + {1810, 1839}, {1869, 1957}, {1969, 1969}, {1994, 2026}, + {2036, 2037}, {2042, 2042}, {2048, 2069}, {2074, 2074}, + {2084, 2084}, {2088, 2088}, {2112, 2136}, {2144, 2154}, + {2160, 2183}, {2185, 2190}, {2208, 2248}, {2249, 2249}, + {2308, 2361}, {2365, 2365}, {2384, 2384}, {2392, 2401}, + {2417, 2417}, {2418, 2432}, {2437, 2444}, {2447, 2448}, + {2451, 2472}, {2474, 2480}, {2482, 2482}, {2486, 2489}, + {2493, 2493}, {2510, 2510}, {2524, 2525}, {2527, 2529}, + {2544, 2545}, {2556, 2556}, {2565, 2570}, {2575, 2576}, + {2579, 2600}, {2602, 2608}, {2610, 2611}, {2613, 2614}, + {2616, 2617}, {2649, 2652}, {2654, 2654}, {2674, 2676}, + {2693, 2701}, {2703, 2705}, {2707, 2728}, {2730, 2736}, + {2738, 2739}, {2741, 2745}, {2749, 2749}, {2768, 2768}, + {2784, 2785}, {2809, 2809}, {2821, 2828}, {2831, 2832}, + {2835, 2856}, {2858, 2864}, {2866, 2867}, {2869, 2873}, + {2877, 2877}, {2908, 2909}, {2911, 2913}, {2929, 2929}, + {2947, 2947}, {2949, 2954}, {2958, 2960}, {2962, 2965}, + {2969, 2970}, {2972, 2972}, {2974, 2975}, {2979, 2980}, + {2984, 2986}, {2990, 3001}, {3024, 3024}, {3077, 3084}, + {3086, 3088}, {3090, 3112}, {3114, 3129}, {3133, 3133}, + {3160, 3162}, {3165, 3165}, {3168, 3169}, {3200, 3200}, + {3205, 3212}, {3214, 3216}, {3218, 3240}, {3242, 3251}, + {3253, 3257}, {3261, 3261}, {3293, 3294}, {3296, 3297}, + {3313, 3314}, {3332, 3340}, {3342, 3344}, {3346, 3386}, + {3389, 3389}, {3406, 3406}, {3412, 3414}, {3423, 3425}, + {3450, 3455}, {3461, 3478}, {3482, 3505}, {3507, 3515}, + {3517, 3517}, {3520, 3526}, {3585, 3632}, {3634, 3635}, + {3648, 3653}, {3654, 3654}, {3713, 3714}, {3716, 3716}, + {3718, 3722}, {3724, 3747}, {3749, 3749}, {3751, 3760}, + {3762, 3763}, {3773, 3773}, {3776, 3780}, {3782, 3782}, + {3804, 3807}, {3840, 3840}, {3904, 3911}, {3913, 3948}, + {3976, 3980}, {4096, 4138}, {4159, 4159}, {4176, 4181}, + {4186, 4189}, {4193, 4193}, {4197, 4198}, {4206, 4208}, + {4213, 4225}, {4238, 4238}, {4256, 4293}, {4295, 4295}, + {4301, 4301}, {4304, 4346}, {4348, 4348}, {4349, 4351}, + {4352, 4680}, {4682, 4685}, {4688, 4694}, {4696, 4696}, + {4698, 4701}, {4704, 4744}, {4746, 4749}, {4752, 4784}, + {4786, 4789}, {4792, 4798}, {4800, 4800}, {4802, 4805}, + {4808, 4822}, {4824, 4880}, {4882, 4885}, {4888, 4954}, + {4992, 5007}, {5024, 5109}, {5112, 5117}, {5121, 5740}, + {5743, 5759}, {5761, 5786}, {5792, 5866}, {5870, 5872}, + {5873, 5880}, {5888, 5905}, {5919, 5937}, {5952, 5969}, + {5984, 5996}, {5998, 6000}, {6016, 6067}, {6103, 6103}, + {6108, 6108}, {6176, 6210}, {6211, 6211}, {6212, 6264}, + {6272, 6276}, {6277, 6278}, {6279, 6312}, {6314, 6314}, + {6320, 6389}, {6400, 6430}, {6480, 6509}, {6512, 6516}, + {6528, 6571}, {6576, 6601}, {6656, 6678}, {6688, 6740}, + {6823, 6823}, {6917, 6963}, {6981, 6988}, {7043, 7072}, + {7086, 7087}, {7098, 7141}, {7168, 7203}, {7245, 7247}, + {7258, 7287}, {7288, 7293}, {7296, 7304}, {7312, 7354}, + {7357, 7359}, {7401, 7404}, {7406, 7411}, {7413, 7414}, + {7418, 7418}, {7424, 7467}, {7468, 7530}, {7531, 7543}, + {7544, 7544}, {7545, 7578}, {7579, 7615}, {7680, 7957}, + {7960, 7965}, {7968, 8005}, {8008, 8013}, {8016, 8023}, + {8025, 8025}, {8027, 8027}, {8029, 8029}, {8031, 8061}, + {8064, 8116}, {8118, 8124}, {8126, 8126}, {8130, 8132}, + {8134, 8140}, {8144, 8147}, {8150, 8155}, {8160, 8172}, + {8178, 8180}, {8182, 8188}, {8305, 8305}, {8319, 8319}, + {8336, 8348}, {8450, 8450}, {8455, 8455}, {8458, 8467}, + {8469, 8469}, {8472, 8472}, {8473, 8477}, {8484, 8484}, + {8486, 8486}, {8488, 8488}, {8490, 8493}, {8494, 8494}, + {8495, 8500}, {8501, 8504}, {8505, 8505}, {8508, 8511}, + {8517, 8521}, {8526, 8526}, {8544, 8578}, {8579, 8580}, + {8581, 8584}, {11264, 11387}, {11388, 11389}, {11390, 11492}, + {11499, 11502}, {11506, 11507}, {11520, 11557}, {11559, 11559}, + {11565, 11565}, {11568, 11623}, {11631, 11631}, {11648, 11670}, + {11680, 11686}, {11688, 11694}, {11696, 11702}, {11704, 11710}, + {11712, 11718}, {11720, 11726}, {11728, 11734}, {11736, 11742}, + {12293, 12293}, {12294, 12294}, {12295, 12295}, {12321, 12329}, + {12337, 12341}, {12344, 12346}, {12347, 12347}, {12348, 12348}, + {12353, 12438}, {12443, 12444}, {12445, 12446}, {12447, 12447}, + {12449, 12538}, {12540, 12542}, {12543, 12543}, {12549, 12591}, + {12593, 12686}, {12704, 12735}, {12784, 12799}, {13312, 19903}, + {19968, 40980}, {40981, 40981}, {40982, 42124}, {42192, 42231}, + {42232, 42237}, {42240, 42507}, {42508, 42508}, {42512, 42527}, + {42538, 42539}, {42560, 42605}, {42606, 42606}, {42623, 42623}, + {42624, 42651}, {42652, 42653}, {42656, 42725}, {42726, 42735}, + {42775, 42783}, {42786, 42863}, {42864, 42864}, {42865, 42887}, + {42888, 42888}, {42891, 42894}, {42895, 42895}, {42896, 42954}, + {42960, 42961}, {42963, 42963}, {42965, 42969}, {42994, 42996}, + {42997, 42998}, {42999, 42999}, {43000, 43001}, {43002, 43002}, + {43003, 43009}, {43011, 43013}, {43015, 43018}, {43020, 43042}, + {43072, 43123}, {43138, 43187}, {43250, 43255}, {43259, 43259}, + {43261, 43262}, {43274, 43301}, {43312, 43334}, {43360, 43388}, + {43396, 43442}, {43471, 43471}, {43488, 43492}, {43494, 43494}, + {43495, 43503}, {43514, 43518}, {43520, 43560}, {43584, 43586}, + {43588, 43595}, {43616, 43631}, {43632, 43632}, {43633, 43638}, + {43642, 43642}, {43646, 43695}, {43697, 43697}, {43701, 43702}, + {43705, 43709}, {43712, 43712}, {43714, 43714}, {43739, 43740}, + {43741, 43741}, {43744, 43754}, {43762, 43762}, {43763, 43764}, + {43777, 43782}, {43785, 43790}, {43793, 43798}, {43808, 43814}, + {43816, 43822}, {43824, 43866}, {43868, 43871}, {43872, 43880}, + {43881, 43881}, {43888, 43967}, {43968, 44002}, {44032, 55203}, + {55216, 55238}, {55243, 55291}, {63744, 64109}, {64112, 64217}, + {64256, 64262}, {64275, 64279}, {64285, 64285}, {64287, 64296}, + {64298, 64310}, {64312, 64316}, {64318, 64318}, {64320, 64321}, + {64323, 64324}, {64326, 64433}, {64467, 64829}, {64848, 64911}, + {64914, 64967}, {65008, 65019}, {65136, 65140}, {65142, 65276}, + {65313, 65338}, {65345, 65370}, {65382, 65391}, {65392, 65392}, + {65393, 65437}, {65438, 65439}, {65440, 65470}, {65474, 65479}, + {65482, 65487}, {65490, 65495}, {65498, 65500}, {65536, 65547}, + {65549, 65574}, {65576, 65594}, {65596, 65597}, {65599, 65613}, + {65616, 65629}, {65664, 65786}, {65856, 65908}, {66176, 66204}, + {66208, 66256}, {66304, 66335}, {66349, 66368}, {66369, 66369}, + {66370, 66377}, {66378, 66378}, {66384, 66421}, {66432, 66461}, + {66464, 66499}, {66504, 66511}, {66513, 66517}, {66560, 66639}, + {66640, 66717}, {66736, 66771}, {66776, 66811}, {66816, 66855}, + {66864, 66915}, {66928, 66938}, {66940, 66954}, {66956, 66962}, + {66964, 66965}, {66967, 66977}, {66979, 66993}, {66995, 67001}, + {67003, 67004}, {67072, 67382}, {67392, 67413}, {67424, 67431}, + {67456, 67461}, {67463, 67504}, {67506, 67514}, {67584, 67589}, + {67592, 67592}, {67594, 67637}, {67639, 67640}, {67644, 67644}, + {67647, 67669}, {67680, 67702}, {67712, 67742}, {67808, 67826}, + {67828, 67829}, {67840, 67861}, {67872, 67897}, {67968, 68023}, + {68030, 68031}, {68096, 68096}, {68112, 68115}, {68117, 68119}, + {68121, 68149}, {68192, 68220}, {68224, 68252}, {68288, 68295}, + {68297, 68324}, {68352, 68405}, {68416, 68437}, {68448, 68466}, + {68480, 68497}, {68608, 68680}, {68736, 68786}, {68800, 68850}, + {68864, 68899}, {69248, 69289}, {69296, 69297}, {69376, 69404}, + {69415, 69415}, {69424, 69445}, {69488, 69505}, {69552, 69572}, + {69600, 69622}, {69635, 69687}, {69745, 69746}, {69749, 69749}, + {69763, 69807}, {69840, 69864}, {69891, 69926}, {69956, 69956}, + {69959, 69959}, {69968, 70002}, {70006, 70006}, {70019, 70066}, + {70081, 70084}, {70106, 70106}, {70108, 70108}, {70144, 70161}, + {70163, 70187}, {70207, 70208}, {70272, 70278}, {70280, 70280}, + {70282, 70285}, {70287, 70301}, {70303, 70312}, {70320, 70366}, + {70405, 70412}, {70415, 70416}, {70419, 70440}, {70442, 70448}, + {70450, 70451}, {70453, 70457}, {70461, 70461}, {70480, 70480}, + {70493, 70497}, {70656, 70708}, {70727, 70730}, {70751, 70753}, + {70784, 70831}, {70852, 70853}, {70855, 70855}, {71040, 71086}, + {71128, 71131}, {71168, 71215}, {71236, 71236}, {71296, 71338}, + {71352, 71352}, {71424, 71450}, {71488, 71494}, {71680, 71723}, + {71840, 71903}, {71935, 71942}, {71945, 71945}, {71948, 71955}, + {71957, 71958}, {71960, 71983}, {71999, 71999}, {72001, 72001}, + {72096, 72103}, {72106, 72144}, {72161, 72161}, {72163, 72163}, + {72192, 72192}, {72203, 72242}, {72250, 72250}, {72272, 72272}, + {72284, 72329}, {72349, 72349}, {72368, 72440}, {72704, 72712}, + {72714, 72750}, {72768, 72768}, {72818, 72847}, {72960, 72966}, + {72968, 72969}, {72971, 73008}, {73030, 73030}, {73056, 73061}, + {73063, 73064}, {73066, 73097}, {73112, 73112}, {73440, 73458}, + {73474, 73474}, {73476, 73488}, {73490, 73523}, {73648, 73648}, + {73728, 74649}, {74752, 74862}, {74880, 75075}, {77712, 77808}, + {77824, 78895}, {78913, 78918}, {82944, 83526}, {92160, 92728}, + {92736, 92766}, {92784, 92862}, {92880, 92909}, {92928, 92975}, + {92992, 92995}, {93027, 93047}, {93053, 93071}, {93760, 93823}, + {93952, 94026}, {94032, 94032}, {94099, 94111}, {94176, 94177}, + {94179, 94179}, {94208, 100343}, {100352, 101589}, {101632, 101640}, + {110576, 110579}, {110581, 110587}, {110589, 110590}, {110592, 110882}, + {110898, 110898}, {110928, 110930}, {110933, 110933}, {110948, 110951}, + {110960, 111355}, {113664, 113770}, {113776, 113788}, {113792, 113800}, + {113808, 113817}, {119808, 119892}, {119894, 119964}, {119966, 119967}, + {119970, 119970}, {119973, 119974}, {119977, 119980}, {119982, 119993}, + {119995, 119995}, {119997, 120003}, {120005, 120069}, {120071, 120074}, + {120077, 120084}, {120086, 120092}, {120094, 120121}, {120123, 120126}, + {120128, 120132}, {120134, 120134}, {120138, 120144}, {120146, 120485}, + {120488, 120512}, {120514, 120538}, {120540, 120570}, {120572, 120596}, + {120598, 120628}, {120630, 120654}, {120656, 120686}, {120688, 120712}, + {120714, 120744}, {120746, 120770}, {120772, 120779}, {122624, 122633}, + {122634, 122634}, {122635, 122654}, {122661, 122666}, {122928, 122989}, + {123136, 123180}, {123191, 123197}, {123214, 123214}, {123536, 123565}, + {123584, 123627}, {124112, 124138}, {124139, 124139}, {124896, 124902}, + {124904, 124907}, {124909, 124910}, {124912, 124926}, {124928, 125124}, + {125184, 125251}, {125259, 125259}, {126464, 126467}, {126469, 126495}, + {126497, 126498}, {126500, 126500}, {126503, 126503}, {126505, 126514}, + {126516, 126519}, {126521, 126521}, {126523, 126523}, {126530, 126530}, + {126535, 126535}, {126537, 126537}, {126539, 126539}, {126541, 126543}, + {126545, 126546}, {126548, 126548}, {126551, 126551}, {126553, 126553}, + {126555, 126555}, {126557, 126557}, {126559, 126559}, {126561, 126562}, + {126564, 126564}, {126567, 126570}, {126572, 126578}, {126580, 126583}, + {126585, 126588}, {126590, 126590}, {126592, 126601}, {126603, 126619}, + {126625, 126627}, {126629, 126633}, {126635, 126651}, {131072, 173791}, + {173824, 177977}, {177984, 178205}, {178208, 183969}, {183984, 191456}, + {191472, 192093}, {194560, 195101}, {196608, 201546}, {201552, 205743} +}; + + +} // namespace ada::idna +#endif // ADA_IDNA_IDENTIFIER_TABLES_H + +/* end file src/id_tables.cpp */ + +namespace ada::idna { +// return 0xffffffff in case of error +// We do not fully validate the input +uint32_t get_first_code_point(std::string_view input) { + constexpr uint32_t error = 0xffffffff; + // Check if the input is empty + if (input.empty()) { + return error; + } + + uint32_t code_point = 0; + size_t number_bytes = 0; + unsigned char first_byte = input[0]; + + if ((first_byte & 0x80) == 0) { + // 1-byte character (ASCII) + return first_byte; + } else if ((first_byte & 0xE0) == 0xC0) { + // 2-byte character + code_point = first_byte & 0x1F; + number_bytes = 2; + } else if ((first_byte & 0xF0) == 0xE0) { + // 3-byte character + code_point = first_byte & 0x0F; + number_bytes = 3; + } else if ((first_byte & 0xF8) == 0xF0) { + // 4-byte character + code_point = first_byte & 0x07; + number_bytes = 4; + } else { + return error; + } + + // Decode the remaining bytes + for (size_t i = 1; i < number_bytes; ++i) { + if (i >= input.size()) { + return error; + } + unsigned char byte = input[i]; + if ((byte & 0xC0) != 0x80) { + return error; + } + code_point = (code_point << 6) | (byte & 0x3F); + } + return code_point; +} + +bool is_ascii_letter(char32_t c) { + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'); +} + +bool is_ascii_letter_or_digit(char32_t c) { + return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9'); +} + +bool valid_name_code_point(char32_t code_point, bool first) { + // https://tc39.es/ecma262/#prod-IdentifierStart + // Fast paths: + if (first && + (code_point == '$' || code_point == '_' || is_ascii_letter(code_point))) { + return true; + } + if (!first && (code_point == '$' || is_ascii_letter_or_digit(code_point))) { + return true; + } + // Slow path... + if (code_point == 0xffffffff) { + return false; // minimal error handling + } + if (first) { + auto iter = std::lower_bound( + std::begin(ada::idna::id_start), std::end(ada::idna::id_start), + code_point, [](const uint32_t* range, uint32_t code_point) { + return range[1] < code_point; + }); + return iter != std::end(id_start) && code_point >= (*iter)[0]; + } else { + auto iter = std::lower_bound( + std::begin(id_continue), std::end(id_continue), code_point, + [](const uint32_t* range, uint32_t code_point) { + return range[1] < code_point; + }); + return iter != std::end(id_start) && code_point >= (*iter)[0]; + } +} +} // namespace ada::idna +/* end file src/identifier.cpp */ +/* end file src/idna.cpp */ +/* end file src/ada_idna.cpp */ +ADA_POP_DISABLE_WARNINGS + +#include +#if ADA_NEON +#include +#elif ADA_SSE2 +#include +#endif + +namespace ada::unicode { + +constexpr bool is_tabs_or_newline(char c) noexcept { + return c == '\r' || c == '\n' || c == '\t'; +} + +constexpr uint64_t broadcast(uint8_t v) noexcept { + return 0x101010101010101ull * v; +} + +constexpr bool to_lower_ascii(char* input, size_t length) noexcept { + uint64_t broadcast_80 = broadcast(0x80); + uint64_t broadcast_Ap = broadcast(128 - 'A'); + uint64_t broadcast_Zp = broadcast(128 - 'Z' - 1); + uint64_t non_ascii = 0; + size_t i = 0; + + for (; i + 7 < length; i += 8) { + uint64_t word{}; + memcpy(&word, input + i, sizeof(word)); + non_ascii |= (word & broadcast_80); + word ^= + (((word + broadcast_Ap) ^ (word + broadcast_Zp)) & broadcast_80) >> 2; + memcpy(input + i, &word, sizeof(word)); + } + if (i < length) { + uint64_t word{}; + memcpy(&word, input + i, length - i); + non_ascii |= (word & broadcast_80); + word ^= + (((word + broadcast_Ap) ^ (word + broadcast_Zp)) & broadcast_80) >> 2; + memcpy(input + i, &word, length - i); + } + return non_ascii == 0; +} +#if ADA_NEON +ada_really_inline bool has_tabs_or_newline( + std::string_view user_input) noexcept { + // first check for short strings in which case we do it naively. + if (user_input.size() < 16) { // slow path + return std::any_of(user_input.begin(), user_input.end(), + is_tabs_or_newline); + } + // fast path for long strings (expected to be common) + size_t i = 0; + /** + * The fastest way to check for `\t` (==9), '\n'(== 10) and `\r` (==13) relies + * on table lookup instruction. We notice that these are all unique numbers + * between 0..15. Let's prepare a special register, where we put '\t' in the + * 9th position, '\n' - 10th and '\r' - 13th. Then we shuffle this register by + * input register. If the input had `\t` in position X then this shuffled + * register will also have '\t' in that position. Comparing input with this + * shuffled register will mark us all interesting characters in the input. + * + * credit for algorithmic idea: @aqrit, credit for description: + * @DenisYaroshevskiy + */ + static uint8_t rnt_array[16] = {1, 0, 0, 0, 0, 0, 0, 0, + 0, 9, 10, 0, 0, 13, 0, 0}; + const uint8x16_t rnt = vld1q_u8(rnt_array); + // m['0xd', '0xa', '0x9'] + uint8x16_t running{0}; + for (; i + 15 < user_input.size(); i += 16) { + uint8x16_t word = vld1q_u8((const uint8_t*)user_input.data() + i); + + running = vorrq_u8(running, vceqq_u8(vqtbl1q_u8(rnt, word), word)); + } + if (i < user_input.size()) { + uint8x16_t word = + vld1q_u8((const uint8_t*)user_input.data() + user_input.length() - 16); + running = vorrq_u8(running, vceqq_u8(vqtbl1q_u8(rnt, word), word)); + } + return vmaxvq_u32(vreinterpretq_u32_u8(running)) != 0; +} +#elif ADA_SSE2 +ada_really_inline bool has_tabs_or_newline( + std::string_view user_input) noexcept { + // first check for short strings in which case we do it naively. + if (user_input.size() < 16) { // slow path + return std::any_of(user_input.begin(), user_input.end(), + is_tabs_or_newline); + } + // fast path for long strings (expected to be common) + size_t i = 0; + const __m128i mask1 = _mm_set1_epi8('\r'); + const __m128i mask2 = _mm_set1_epi8('\n'); + const __m128i mask3 = _mm_set1_epi8('\t'); + // If we supported SSSE3, we could use the algorithm that we use for NEON. + __m128i running{0}; + for (; i + 15 < user_input.size(); i += 16) { + __m128i word = _mm_loadu_si128((const __m128i*)(user_input.data() + i)); + running = _mm_or_si128( + _mm_or_si128(running, _mm_or_si128(_mm_cmpeq_epi8(word, mask1), + _mm_cmpeq_epi8(word, mask2))), + _mm_cmpeq_epi8(word, mask3)); + } + if (i < user_input.size()) { + __m128i word = _mm_loadu_si128( + (const __m128i*)(user_input.data() + user_input.length() - 16)); + running = _mm_or_si128( + _mm_or_si128(running, _mm_or_si128(_mm_cmpeq_epi8(word, mask1), + _mm_cmpeq_epi8(word, mask2))), + _mm_cmpeq_epi8(word, mask3)); + } + return _mm_movemask_epi8(running) != 0; +} +#else +ada_really_inline bool has_tabs_or_newline( + std::string_view user_input) noexcept { + auto has_zero_byte = [](uint64_t v) { + return ((v - 0x0101010101010101) & ~(v) & 0x8080808080808080); + }; + size_t i = 0; + uint64_t mask1 = broadcast('\r'); + uint64_t mask2 = broadcast('\n'); + uint64_t mask3 = broadcast('\t'); + uint64_t running{0}; + for (; i + 7 < user_input.size(); i += 8) { + uint64_t word{}; + memcpy(&word, user_input.data() + i, sizeof(word)); + uint64_t xor1 = word ^ mask1; + uint64_t xor2 = word ^ mask2; + uint64_t xor3 = word ^ mask3; + running |= has_zero_byte(xor1) | has_zero_byte(xor2) | has_zero_byte(xor3); + } + if (i < user_input.size()) { + uint64_t word{}; + memcpy(&word, user_input.data() + i, user_input.size() - i); + uint64_t xor1 = word ^ mask1; + uint64_t xor2 = word ^ mask2; + uint64_t xor3 = word ^ mask3; + running |= has_zero_byte(xor1) | has_zero_byte(xor2) | has_zero_byte(xor3); + } + return running; +} +#endif + +// A forbidden host code point is U+0000 NULL, U+0009 TAB, U+000A LF, U+000D CR, +// U+0020 SPACE, U+0023 (#), U+002F (/), U+003A (:), U+003C (<), U+003E (>), +// U+003F (?), U+0040 (@), U+005B ([), U+005C (\), U+005D (]), U+005E (^), or +// U+007C (|). +constexpr static std::array is_forbidden_host_code_point_table = + []() consteval { + std::array result{}; + for (uint8_t c : {'\0', '\x09', '\x0a', '\x0d', ' ', '#', '/', ':', '<', + '>', '?', '@', '[', '\\', ']', '^', '|'}) { + result[c] = true; + } + return result; + }(); + +ada_really_inline constexpr bool is_forbidden_host_code_point( + const char c) noexcept { + return is_forbidden_host_code_point_table[uint8_t(c)]; +} + +constexpr static std::array is_forbidden_domain_code_point_table = + []() consteval { + std::array result{}; + for (uint8_t c : {'\0', '\x09', '\x0a', '\x0d', ' ', '#', '/', ':', '<', + '>', '?', '@', '[', '\\', ']', '^', '|', '%'}) { + result[c] = true; + } + for (uint8_t c = 0; c <= 32; c++) { + result[c] = true; + } + for (size_t c = 127; c < 255; c++) { + result[c] = true; + } + return result; + }(); + +static_assert(sizeof(is_forbidden_domain_code_point_table) == 256); + +ada_really_inline constexpr bool is_forbidden_domain_code_point( + const char c) noexcept { + return is_forbidden_domain_code_point_table[uint8_t(c)]; +} + +ada_really_inline constexpr bool contains_forbidden_domain_code_point( + const char* input, size_t length) noexcept { + size_t i = 0; + uint8_t accumulator{}; + for (; i + 4 <= length; i += 4) { + accumulator |= is_forbidden_domain_code_point_table[uint8_t(input[i])]; + accumulator |= is_forbidden_domain_code_point_table[uint8_t(input[i + 1])]; + accumulator |= is_forbidden_domain_code_point_table[uint8_t(input[i + 2])]; + accumulator |= is_forbidden_domain_code_point_table[uint8_t(input[i + 3])]; + } + for (; i < length; i++) { + accumulator |= is_forbidden_domain_code_point_table[uint8_t(input[i])]; + } + return accumulator; +} + +constexpr static std::array + is_forbidden_domain_code_point_table_or_upper = []() consteval { + std::array result{}; + for (uint8_t c : {'\0', '\x09', '\x0a', '\x0d', ' ', '#', '/', ':', '<', + '>', '?', '@', '[', '\\', ']', '^', '|', '%'}) { + result[c] = 1; + } + for (uint8_t c = 'A'; c <= 'Z'; c++) { + result[c] = 2; + } + for (uint8_t c = 0; c <= 32; c++) { + result[c] = 1; + } + for (size_t c = 127; c < 255; c++) { + result[c] = 1; + } + return result; + }(); + +ada_really_inline constexpr uint8_t +contains_forbidden_domain_code_point_or_upper(const char* input, + size_t length) noexcept { + size_t i = 0; + uint8_t accumulator{}; + for (; i + 4 <= length; i += 4) { + accumulator |= + is_forbidden_domain_code_point_table_or_upper[uint8_t(input[i])]; + accumulator |= + is_forbidden_domain_code_point_table_or_upper[uint8_t(input[i + 1])]; + accumulator |= + is_forbidden_domain_code_point_table_or_upper[uint8_t(input[i + 2])]; + accumulator |= + is_forbidden_domain_code_point_table_or_upper[uint8_t(input[i + 3])]; + } + for (; i < length; i++) { + accumulator |= + is_forbidden_domain_code_point_table_or_upper[uint8_t(input[i])]; + } + return accumulator; +} + +// std::isalnum(c) || c == '+' || c == '-' || c == '.') is true for +constexpr static std::array is_alnum_plus_table = []() consteval { + std::array result{}; + for (size_t c = 0; c < 256; c++) { + result[c] = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || c == '+' || c == '-' || c == '.'; + } + return result; +}(); + +ada_really_inline constexpr bool is_alnum_plus(const char c) noexcept { + return is_alnum_plus_table[uint8_t(c)]; + // A table is almost surely much faster than the + // following under most compilers: return + // return (std::isalnum(c) || c == '+' || c == '-' || c == '.'); +} + +ada_really_inline constexpr bool is_ascii_hex_digit(const char c) noexcept { + return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || + (c >= 'a' && c <= 'f'); +} + +ada_really_inline constexpr bool is_ascii_digit(const char c) noexcept { + // An ASCII digit is a code point in the range U+0030 (0) to U+0039 (9), + // inclusive. + return (c >= '0' && c <= '9'); +} + +ada_really_inline constexpr bool is_ascii(const char32_t c) noexcept { + // If code point is between U+0000 and U+007F inclusive, then return true. + return c <= 0x7F; +} + +ada_really_inline constexpr bool is_c0_control_or_space(const char c) noexcept { + return (unsigned char)c <= ' '; +} + +ada_really_inline constexpr bool is_ascii_tab_or_newline( + const char c) noexcept { + return c == '\t' || c == '\n' || c == '\r'; +} + +constexpr std::string_view table_is_double_dot_path_segment[] = { + "..", "%2e.", ".%2e", "%2e%2e"}; + +ada_really_inline constexpr bool is_double_dot_path_segment( + std::string_view input) noexcept { + // This will catch most cases: + // The length must be 2,4 or 6. + // We divide by two and require + // that the result be between 1 and 3 inclusively. + uint64_t half_length = uint64_t(input.size()) / 2; + if (half_length - 1 > 2) { + return false; + } + // We have a string of length 2, 4 or 6. + // We now check the first character: + if ((input[0] != '.') && (input[0] != '%')) { + return false; + } + // We are unlikely the get beyond this point. + int hash_value = (input.size() + (unsigned)(input[0])) & 3; + const std::string_view target = table_is_double_dot_path_segment[hash_value]; + if (target.size() != input.size()) { + return false; + } + // We almost never get here. + // Optimizing the rest is relatively unimportant. + auto prefix_equal_unsafe = [](std::string_view a, std::string_view b) { + uint16_t A, B; + memcpy(&A, a.data(), sizeof(A)); + memcpy(&B, b.data(), sizeof(B)); + return A == B; + }; + if (!prefix_equal_unsafe(input, target)) { + return false; + } + for (size_t i = 2; i < input.size(); i++) { + char c = input[i]; + if ((uint8_t((c | 0x20) - 0x61) <= 25 ? (c | 0x20) : c) != target[i]) { + return false; + } + } + return true; + // The above code might be a bit better than the code below. Compilers + // are not stupid and may use the fact that these strings have length 2,4 and + // 6 and other tricks. + // return input == ".." || + // input == ".%2e" || input == ".%2E" || + // input == "%2e." || input == "%2E." || + // input == "%2e%2e" || input == "%2E%2E" || input == "%2E%2e" || input == + // "%2e%2E"; +} + +ada_really_inline constexpr bool is_single_dot_path_segment( + std::string_view input) noexcept { + return input == "." || input == "%2e" || input == "%2E"; +} + +ada_really_inline constexpr bool is_lowercase_hex(const char c) noexcept { + return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f'); +} + +constexpr static char hex_to_binary_table[] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10, 11, + 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 13, 14, 15}; +unsigned constexpr convert_hex_to_binary(const char c) noexcept { + return hex_to_binary_table[c - '0']; +} + +std::string percent_decode(const std::string_view input, size_t first_percent) { + // next line is for safety only, we expect users to avoid calling + // percent_decode when first_percent is outside the range. + if (first_percent == std::string_view::npos) { + return std::string(input); + } + std::string dest; + dest.reserve(input.length()); + dest.append(input.substr(0, first_percent)); + const char* pointer = input.data() + first_percent; + const char* end = input.data() + input.size(); + // Optimization opportunity: if the following code gets + // called often, it can be optimized quite a bit. + while (pointer < end) { + const char ch = pointer[0]; + size_t remaining = end - pointer - 1; + if (ch != '%' || remaining < 2 || + ( // ch == '%' && // It is unnecessary to check that ch == '%'. + (!is_ascii_hex_digit(pointer[1]) || + !is_ascii_hex_digit(pointer[2])))) { + dest += ch; + pointer++; + } else { + unsigned a = convert_hex_to_binary(pointer[1]); + unsigned b = convert_hex_to_binary(pointer[2]); + char c = static_cast(a * 16 + b); + dest += c; + pointer += 3; + } + } + return dest; +} + +std::string percent_encode(const std::string_view input, + const uint8_t character_set[]) { + auto pointer = std::ranges::find_if(input, [character_set](const char c) { + return character_sets::bit_at(character_set, c); + }); + // Optimization: Don't iterate if percent encode is not required + if (pointer == input.end()) { + return std::string(input); + } + + std::string result; + result.reserve(input.length()); // in the worst case, percent encoding might + // produce 3 characters. + result.append(input.substr(0, std::distance(input.begin(), pointer))); + + for (; pointer != input.end(); pointer++) { + if (character_sets::bit_at(character_set, *pointer)) { + result.append(character_sets::hex + uint8_t(*pointer) * 4, 3); + } else { + result += *pointer; + } + } + + return result; +} + +template +bool percent_encode(const std::string_view input, const uint8_t character_set[], + std::string& out) { + ada_log("percent_encode ", input, " to output string while ", + append ? "appending" : "overwriting"); + auto pointer = + std::find_if(input.begin(), input.end(), [character_set](const char c) { + return character_sets::bit_at(character_set, c); + }); + ada_log("percent_encode done checking, moved to ", + std::distance(input.begin(), pointer)); + + // Optimization: Don't iterate if percent encode is not required + if (pointer == input.end()) { + ada_log("percent_encode encoding not needed."); + return false; + } + if constexpr (!append) { + out.clear(); + } + ada_log("percent_encode appending ", std::distance(input.begin(), pointer), + " bytes"); + out.append(input.data(), std::distance(input.begin(), pointer)); + ada_log("percent_encode processing ", std::distance(pointer, input.end()), + " bytes"); + for (; pointer != input.end(); pointer++) { + if (character_sets::bit_at(character_set, *pointer)) { + out.append(character_sets::hex + uint8_t(*pointer) * 4, 3); + } else { + out += *pointer; + } + } + return true; +} + +bool to_ascii(std::optional& out, const std::string_view plain, + size_t first_percent) { + std::string percent_decoded_buffer; + std::string_view input = plain; + if (first_percent != std::string_view::npos) { + percent_decoded_buffer = unicode::percent_decode(plain, first_percent); + input = percent_decoded_buffer; + } + // input is a non-empty UTF-8 string, must be percent decoded + std::string idna_ascii = ada::idna::to_ascii(input); + if (idna_ascii.empty() || contains_forbidden_domain_code_point( + idna_ascii.data(), idna_ascii.size())) { + return false; + } + out = std::move(idna_ascii); + return true; +} + +std::string percent_encode(const std::string_view input, + const uint8_t character_set[], size_t index) { + std::string out; + out.append(input.data(), index); + auto pointer = input.begin() + index; + for (; pointer != input.end(); pointer++) { + if (character_sets::bit_at(character_set, *pointer)) { + out.append(character_sets::hex + uint8_t(*pointer) * 4, 3); + } else { + out += *pointer; + } + } + return out; +} + +} // namespace ada::unicode +/* end file src/unicode.cpp */ +/* begin file src/serializers.cpp */ +#include +#include +#include + +namespace ada::serializers { + +void find_longest_sequence_of_ipv6_pieces( + const std::array& address, size_t& compress, + size_t& compress_length) noexcept { + for (size_t i = 0; i < 8; i++) { + if (address[i] == 0) { + size_t next = i + 1; + while (next != 8 && address[next] == 0) ++next; + const size_t count = next - i; + if (compress_length < count) { + compress_length = count; + compress = i; + if (next == 8) break; + i = next; + } + } + } +} + +std::string ipv6(const std::array& address) noexcept { + size_t compress_length = 0; // The length of a long sequence of zeros. + size_t compress = 0; // The start of a long sequence of zeros. + find_longest_sequence_of_ipv6_pieces(address, compress, compress_length); + + if (compress_length <= 1) { + // Optimization opportunity: Find a faster way then snprintf for imploding + // and return here. + compress = compress_length = 8; + } + + std::string output(4 * 8 + 7 + 2, '\0'); + size_t piece_index = 0; + char* point = output.data(); + char* point_end = output.data() + output.size(); + *point++ = '['; + while (true) { + if (piece_index == compress) { + *point++ = ':'; + // If we skip a value initially, we need to write '::', otherwise + // a single ':' will do since it follows a previous ':'. + if (piece_index == 0) { + *point++ = ':'; + } + piece_index += compress_length; + if (piece_index == 8) { + break; + } + } + point = std::to_chars(point, point_end, address[piece_index], 16).ptr; + piece_index++; + if (piece_index == 8) { + break; + } + *point++ = ':'; + } + *point++ = ']'; + output.resize(point - output.data()); + return output; +} + +std::string ipv4(const uint64_t address) noexcept { + std::string output(15, '\0'); + char* point = output.data(); + char* point_end = output.data() + output.size(); + point = std::to_chars(point, point_end, uint8_t(address >> 24)).ptr; + for (int i = 2; i >= 0; i--) { + *point++ = '.'; + point = std::to_chars(point, point_end, uint8_t(address >> (i * 8))).ptr; + } + output.resize(point - output.data()); + return output; +} + +} // namespace ada::serializers +/* end file src/serializers.cpp */ +/* begin file src/implementation.cpp */ + +#include + + +namespace ada { + +template +ada_warn_unused tl::expected parse( + std::string_view input, const result_type* base_url) { + result_type u = + ada::parser::parse_url_impl(input, base_url); + if (!u.is_valid) { + return tl::unexpected(errors::type_error); + } + return u; +} + +template ada::result parse(std::string_view input, + const url* base_url = nullptr); +template ada::result parse( + std::string_view input, const url_aggregator* base_url = nullptr); + +std::string href_from_file(std::string_view input) { + // This is going to be much faster than constructing a URL. + std::string tmp_buffer; + std::string_view internal_input; + if (unicode::has_tabs_or_newline(input)) { + tmp_buffer = input; + helpers::remove_ascii_tab_or_newline(tmp_buffer); + internal_input = tmp_buffer; + } else { + internal_input = input; + } + std::string path; + if (internal_input.empty()) { + path = "/"; + } else if ((internal_input[0] == '/') || (internal_input[0] == '\\')) { + helpers::parse_prepared_path(internal_input.substr(1), + ada::scheme::type::FILE, path); + } else { + helpers::parse_prepared_path(internal_input, ada::scheme::type::FILE, path); + } + return "file://" + path; +} + +bool can_parse(std::string_view input, const std::string_view* base_input) { + ada::url_aggregator base_aggregator; + ada::url_aggregator* base_pointer = nullptr; + + if (base_input != nullptr) { + base_aggregator = ada::parser::parse_url_impl( + *base_input, nullptr); + if (!base_aggregator.is_valid) { + return false; + } + base_pointer = &base_aggregator; + } + + ada::url_aggregator result = + ada::parser::parse_url_impl(input, + base_pointer); + return result.is_valid; +} + +ada_warn_unused std::string to_string(ada::encoding_type type) { + switch (type) { + case ada::encoding_type::UTF8: + return "UTF-8"; + case ada::encoding_type::UTF_16LE: + return "UTF-16LE"; + case ada::encoding_type::UTF_16BE: + return "UTF-16BE"; + default: + unreachable(); + } +} + +} // namespace ada +/* end file src/implementation.cpp */ +/* begin file src/helpers.cpp */ + +#include +#include + +namespace ada::helpers { + +template +void encode_json(std::string_view view, out_iter out) { + // trivial implementation. could be faster. + const char* hexvalues = + "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"; + for (uint8_t c : view) { + if (c == '\\') { + *out++ = '\\'; + *out++ = '\\'; + } else if (c == '"') { + *out++ = '\\'; + *out++ = '"'; + } else if (c <= 0x1f) { + *out++ = '\\'; + *out++ = 'u'; + *out++ = '0'; + *out++ = '0'; + *out++ = hexvalues[2 * c]; + *out++ = hexvalues[2 * c + 1]; + } else { + *out++ = c; + } + } +} + +ada_unused std::string get_state(ada::state s) { + switch (s) { + case ada::state::AUTHORITY: + return "Authority"; + case ada::state::SCHEME_START: + return "Scheme Start"; + case ada::state::SCHEME: + return "Scheme"; + case ada::state::HOST: + return "Host"; + case ada::state::NO_SCHEME: + return "No Scheme"; + case ada::state::FRAGMENT: + return "Fragment"; + case ada::state::RELATIVE_SCHEME: + return "Relative Scheme"; + case ada::state::RELATIVE_SLASH: + return "Relative Slash"; + case ada::state::FILE: + return "File"; + case ada::state::FILE_HOST: + return "File Host"; + case ada::state::FILE_SLASH: + return "File Slash"; + case ada::state::PATH_OR_AUTHORITY: + return "Path or Authority"; + case ada::state::SPECIAL_AUTHORITY_IGNORE_SLASHES: + return "Special Authority Ignore Slashes"; + case ada::state::SPECIAL_AUTHORITY_SLASHES: + return "Special Authority Slashes"; + case ada::state::SPECIAL_RELATIVE_OR_AUTHORITY: + return "Special Relative or Authority"; + case ada::state::QUERY: + return "Query"; + case ada::state::PATH: + return "Path"; + case ada::state::PATH_START: + return "Path Start"; + case ada::state::OPAQUE_PATH: + return "Opaque Path"; + case ada::state::PORT: + return "Port"; + default: + return "unknown state"; + } +} + +ada_really_inline std::optional prune_hash( + std::string_view& input) noexcept { + // compiles down to 20--30 instructions including a class to memchr (C + // function). this function should be quite fast. + size_t location_of_first = input.find('#'); + if (location_of_first == std::string_view::npos) { + return std::nullopt; + } + std::string_view hash = input; + hash.remove_prefix(location_of_first + 1); + input.remove_suffix(input.size() - location_of_first); + return hash; +} + +ada_really_inline bool shorten_path(std::string& path, + ada::scheme::type type) noexcept { + // Let path be url's path. + // If url's scheme is "file", path's size is 1, and path[0] is a normalized + // Windows drive letter, then return. + if (type == ada::scheme::type::FILE && + path.find('/', 1) == std::string_view::npos && !path.empty()) { + if (checkers::is_normalized_windows_drive_letter( + helpers::substring(path, 1))) { + return false; + } + } + + // Remove path's last item, if any. + size_t last_delimiter = path.rfind('/'); + if (last_delimiter != std::string::npos) { + path.erase(last_delimiter); + return true; + } + + return false; +} + +ada_really_inline bool shorten_path(std::string_view& path, + ada::scheme::type type) noexcept { + // Let path be url's path. + // If url's scheme is "file", path's size is 1, and path[0] is a normalized + // Windows drive letter, then return. + if (type == ada::scheme::type::FILE && + path.find('/', 1) == std::string_view::npos && !path.empty()) { + if (checkers::is_normalized_windows_drive_letter( + helpers::substring(path, 1))) { + return false; + } + } + + // Remove path's last item, if any. + if (!path.empty()) { + size_t slash_loc = path.rfind('/'); + if (slash_loc != std::string_view::npos) { + path.remove_suffix(path.size() - slash_loc); + return true; + } + } + + return false; +} + +ada_really_inline void remove_ascii_tab_or_newline( + std::string& input) noexcept { + // if this ever becomes a performance issue, we could use an approach similar + // to has_tabs_or_newline + std::erase_if(input, ada::unicode::is_ascii_tab_or_newline); +} + +ada_really_inline constexpr std::string_view substring(std::string_view input, + size_t pos) noexcept { + ADA_ASSERT_TRUE(pos <= input.size()); + // The following is safer but unneeded if we have the above line: + // return pos > input.size() ? std::string_view() : input.substr(pos); + return input.substr(pos); +} + +ada_really_inline void resize(std::string_view& input, size_t pos) noexcept { + ADA_ASSERT_TRUE(pos <= input.size()); + input.remove_suffix(input.size() - pos); +} + +// computes the number of trailing zeroes +// this is a private inline function only defined in this source file. +ada_really_inline int trailing_zeroes(uint32_t input_num) noexcept { +#ifdef ADA_REGULAR_VISUAL_STUDIO + unsigned long ret; + // Search the mask data from least significant bit (LSB) + // to the most significant bit (MSB) for a set bit (1). + _BitScanForward(&ret, input_num); + return (int)ret; +#else // ADA_REGULAR_VISUAL_STUDIO + return __builtin_ctzl(input_num); +#endif // ADA_REGULAR_VISUAL_STUDIO +} + +// starting at index location, this finds the next location of a character +// :, /, \\, ? or [. If none is found, view.size() is returned. +// For use within get_host_delimiter_location. +#if ADA_NEON +// The ada_make_uint8x16_t macro is necessary because Visual Studio does not +// support direct initialization of uint8x16_t. See +// https://developercommunity.visualstudio.com/t/error-C2078:-too-many-initializers-whe/402911?q=backend+neon +#ifndef ada_make_uint8x16_t +#define ada_make_uint8x16_t(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, \ + x13, x14, x15, x16) \ + ([=]() { \ + static uint8_t array[16] = {x1, x2, x3, x4, x5, x6, x7, x8, \ + x9, x10, x11, x12, x13, x14, x15, x16}; \ + return vld1q_u8(array); \ + }()) +#endif + +ada_really_inline size_t find_next_host_delimiter_special( + std::string_view view, size_t location) noexcept { + // first check for short strings in which case we do it naively. + if (view.size() - location < 16) { // slow path + for (size_t i = location; i < view.size(); i++) { + if (view[i] == ':' || view[i] == '/' || view[i] == '\\' || + view[i] == '?' || view[i] == '[') { + return i; + } + } + return size_t(view.size()); + } + auto to_bitmask = [](uint8x16_t input) -> uint16_t { + uint8x16_t bit_mask = + ada_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x01, + 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80); + uint8x16_t minput = vandq_u8(input, bit_mask); + uint8x16_t tmp = vpaddq_u8(minput, minput); + tmp = vpaddq_u8(tmp, tmp); + tmp = vpaddq_u8(tmp, tmp); + return vgetq_lane_u16(vreinterpretq_u16_u8(tmp), 0); + }; + + // fast path for long strings (expected to be common) + size_t i = location; + uint8x16_t low_mask = + ada_make_uint8x16_t(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x04, 0x00, 0x00, 0x03); + uint8x16_t high_mask = + ada_make_uint8x16_t(0x00, 0x00, 0x02, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); + uint8x16_t fmask = vmovq_n_u8(0xf); + uint8x16_t zero{0}; + for (; i + 15 < view.size(); i += 16) { + uint8x16_t word = vld1q_u8((const uint8_t*)view.data() + i); + uint8x16_t lowpart = vqtbl1q_u8(low_mask, vandq_u8(word, fmask)); + uint8x16_t highpart = vqtbl1q_u8(high_mask, vshrq_n_u8(word, 4)); + uint8x16_t classify = vandq_u8(lowpart, highpart); + if (vmaxvq_u32(vreinterpretq_u32_u8(classify)) != 0) { + uint8x16_t is_zero = vceqq_u8(classify, zero); + uint16_t is_non_zero = ~to_bitmask(is_zero); + return i + trailing_zeroes(is_non_zero); + } + } + + if (i < view.size()) { + uint8x16_t word = + vld1q_u8((const uint8_t*)view.data() + view.length() - 16); + uint8x16_t lowpart = vqtbl1q_u8(low_mask, vandq_u8(word, fmask)); + uint8x16_t highpart = vqtbl1q_u8(high_mask, vshrq_n_u8(word, 4)); + uint8x16_t classify = vandq_u8(lowpart, highpart); + if (vmaxvq_u32(vreinterpretq_u32_u8(classify)) != 0) { + uint8x16_t is_zero = vceqq_u8(classify, zero); + uint16_t is_non_zero = ~to_bitmask(is_zero); + return view.length() - 16 + trailing_zeroes(is_non_zero); + } + } + return size_t(view.size()); +} +#elif ADA_SSE2 +ada_really_inline size_t find_next_host_delimiter_special( + std::string_view view, size_t location) noexcept { + // first check for short strings in which case we do it naively. + if (view.size() - location < 16) { // slow path + for (size_t i = location; i < view.size(); i++) { + if (view[i] == ':' || view[i] == '/' || view[i] == '\\' || + view[i] == '?' || view[i] == '[') { + return i; + } + } + return size_t(view.size()); + } + // fast path for long strings (expected to be common) + size_t i = location; + const __m128i mask1 = _mm_set1_epi8(':'); + const __m128i mask2 = _mm_set1_epi8('/'); + const __m128i mask3 = _mm_set1_epi8('\\'); + const __m128i mask4 = _mm_set1_epi8('?'); + const __m128i mask5 = _mm_set1_epi8('['); + + for (; i + 15 < view.size(); i += 16) { + __m128i word = _mm_loadu_si128((const __m128i*)(view.data() + i)); + __m128i m1 = _mm_cmpeq_epi8(word, mask1); + __m128i m2 = _mm_cmpeq_epi8(word, mask2); + __m128i m3 = _mm_cmpeq_epi8(word, mask3); + __m128i m4 = _mm_cmpeq_epi8(word, mask4); + __m128i m5 = _mm_cmpeq_epi8(word, mask5); + __m128i m = _mm_or_si128( + _mm_or_si128(_mm_or_si128(m1, m2), _mm_or_si128(m3, m4)), m5); + int mask = _mm_movemask_epi8(m); + if (mask != 0) { + return i + trailing_zeroes(mask); + } + } + if (i < view.size()) { + __m128i word = + _mm_loadu_si128((const __m128i*)(view.data() + view.length() - 16)); + __m128i m1 = _mm_cmpeq_epi8(word, mask1); + __m128i m2 = _mm_cmpeq_epi8(word, mask2); + __m128i m3 = _mm_cmpeq_epi8(word, mask3); + __m128i m4 = _mm_cmpeq_epi8(word, mask4); + __m128i m5 = _mm_cmpeq_epi8(word, mask5); + __m128i m = _mm_or_si128( + _mm_or_si128(_mm_or_si128(m1, m2), _mm_or_si128(m3, m4)), m5); + int mask = _mm_movemask_epi8(m); + if (mask != 0) { + return view.length() - 16 + trailing_zeroes(mask); + } + } + return size_t(view.length()); +} +#else +// : / [ \\ ? +static constexpr std::array special_host_delimiters = + []() consteval { + std::array result{}; + for (int i : {':', '/', '[', '\\', '?'}) { + result[i] = 1; + } + return result; + }(); +// credit: @the-moisrex recommended a table-based approach +ada_really_inline size_t find_next_host_delimiter_special( + std::string_view view, size_t location) noexcept { + auto const str = view.substr(location); + for (auto pos = str.begin(); pos != str.end(); ++pos) { + if (special_host_delimiters[(uint8_t)*pos]) { + return pos - str.begin() + location; + } + } + return size_t(view.size()); +} +#endif + +// starting at index location, this finds the next location of a character +// :, /, ? or [. If none is found, view.size() is returned. +// For use within get_host_delimiter_location. +#if ADA_NEON +ada_really_inline size_t find_next_host_delimiter(std::string_view view, + size_t location) noexcept { + // first check for short strings in which case we do it naively. + if (view.size() - location < 16) { // slow path + for (size_t i = location; i < view.size(); i++) { + if (view[i] == ':' || view[i] == '/' || view[i] == '?' || + view[i] == '[') { + return i; + } + } + return size_t(view.size()); + } + auto to_bitmask = [](uint8x16_t input) -> uint16_t { + uint8x16_t bit_mask = + ada_make_uint8x16_t(0x01, 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x01, + 0x02, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80); + uint8x16_t minput = vandq_u8(input, bit_mask); + uint8x16_t tmp = vpaddq_u8(minput, minput); + tmp = vpaddq_u8(tmp, tmp); + tmp = vpaddq_u8(tmp, tmp); + return vgetq_lane_u16(vreinterpretq_u16_u8(tmp), 0); + }; + + // fast path for long strings (expected to be common) + size_t i = location; + uint8x16_t low_mask = + ada_make_uint8x16_t(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x03); + uint8x16_t high_mask = + ada_make_uint8x16_t(0x00, 0x00, 0x02, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); + uint8x16_t fmask = vmovq_n_u8(0xf); + uint8x16_t zero{0}; + for (; i + 15 < view.size(); i += 16) { + uint8x16_t word = vld1q_u8((const uint8_t*)view.data() + i); + uint8x16_t lowpart = vqtbl1q_u8(low_mask, vandq_u8(word, fmask)); + uint8x16_t highpart = vqtbl1q_u8(high_mask, vshrq_n_u8(word, 4)); + uint8x16_t classify = vandq_u8(lowpart, highpart); + if (vmaxvq_u32(vreinterpretq_u32_u8(classify)) != 0) { + uint8x16_t is_zero = vceqq_u8(classify, zero); + uint16_t is_non_zero = ~to_bitmask(is_zero); + return i + trailing_zeroes(is_non_zero); + } + } + + if (i < view.size()) { + uint8x16_t word = + vld1q_u8((const uint8_t*)view.data() + view.length() - 16); + uint8x16_t lowpart = vqtbl1q_u8(low_mask, vandq_u8(word, fmask)); + uint8x16_t highpart = vqtbl1q_u8(high_mask, vshrq_n_u8(word, 4)); + uint8x16_t classify = vandq_u8(lowpart, highpart); + if (vmaxvq_u32(vreinterpretq_u32_u8(classify)) != 0) { + uint8x16_t is_zero = vceqq_u8(classify, zero); + uint16_t is_non_zero = ~to_bitmask(is_zero); + return view.length() - 16 + trailing_zeroes(is_non_zero); + } + } + return size_t(view.size()); +} +#elif ADA_SSE2 +ada_really_inline size_t find_next_host_delimiter(std::string_view view, + size_t location) noexcept { + // first check for short strings in which case we do it naively. + if (view.size() - location < 16) { // slow path + for (size_t i = location; i < view.size(); i++) { + if (view[i] == ':' || view[i] == '/' || view[i] == '?' || + view[i] == '[') { + return i; + } + } + return size_t(view.size()); + } + // fast path for long strings (expected to be common) + size_t i = location; + const __m128i mask1 = _mm_set1_epi8(':'); + const __m128i mask2 = _mm_set1_epi8('/'); + const __m128i mask4 = _mm_set1_epi8('?'); + const __m128i mask5 = _mm_set1_epi8('['); + + for (; i + 15 < view.size(); i += 16) { + __m128i word = _mm_loadu_si128((const __m128i*)(view.data() + i)); + __m128i m1 = _mm_cmpeq_epi8(word, mask1); + __m128i m2 = _mm_cmpeq_epi8(word, mask2); + __m128i m4 = _mm_cmpeq_epi8(word, mask4); + __m128i m5 = _mm_cmpeq_epi8(word, mask5); + __m128i m = _mm_or_si128(_mm_or_si128(m1, m2), _mm_or_si128(m4, m5)); + int mask = _mm_movemask_epi8(m); + if (mask != 0) { + return i + trailing_zeroes(mask); + } + } + if (i < view.size()) { + __m128i word = + _mm_loadu_si128((const __m128i*)(view.data() + view.length() - 16)); + __m128i m1 = _mm_cmpeq_epi8(word, mask1); + __m128i m2 = _mm_cmpeq_epi8(word, mask2); + __m128i m4 = _mm_cmpeq_epi8(word, mask4); + __m128i m5 = _mm_cmpeq_epi8(word, mask5); + __m128i m = _mm_or_si128(_mm_or_si128(m1, m2), _mm_or_si128(m4, m5)); + int mask = _mm_movemask_epi8(m); + if (mask != 0) { + return view.length() - 16 + trailing_zeroes(mask); + } + } + return size_t(view.length()); +} +#else +// : / [ ? +static constexpr std::array host_delimiters = []() consteval { + std::array result{}; + for (int i : {':', '/', '?', '['}) { + result[i] = 1; + } + return result; +}(); +// credit: @the-moisrex recommended a table-based approach +ada_really_inline size_t find_next_host_delimiter(std::string_view view, + size_t location) noexcept { + auto const str = view.substr(location); + for (auto pos = str.begin(); pos != str.end(); ++pos) { + if (host_delimiters[(uint8_t)*pos]) { + return pos - str.begin() + location; + } + } + return size_t(view.size()); +} +#endif + +ada_really_inline std::pair get_host_delimiter_location( + const bool is_special, std::string_view& view) noexcept { + /** + * The spec at https://url.spec.whatwg.org/#hostname-state expects us to + * compute a variable called insideBrackets but this variable is only used + * once, to check whether a ':' character was found outside brackets. Exact + * text: "Otherwise, if c is U+003A (:) and insideBrackets is false, then:". + * It is conceptually simpler and arguably more efficient to just return a + * Boolean indicating whether ':' was found outside brackets. + */ + const size_t view_size = view.size(); + size_t location = 0; + bool found_colon = false; + /** + * Performance analysis: + * + * We are basically seeking the end of the hostname which can be indicated + * by the end of the view, or by one of the characters ':', '/', '?', '\\' + * (where '\\' is only applicable for special URLs). However, these must + * appear outside a bracket range. E.g., if you have [something?]fd: then the + * '?' does not count. + * + * So we can skip ahead to the next delimiter, as long as we include '[' in + * the set of delimiters, and that we handle it first. + * + * So the trick is to have a fast function that locates the next delimiter. + * Unless we find '[', then it only needs to be called once! Ideally, such a + * function would be provided by the C++ standard library, but it seems that + * find_first_of is not very fast, so we are forced to roll our own. + * + * We do not break into two loops for speed, but for clarity. + */ + if (is_special) { + // We move to the next delimiter. + location = find_next_host_delimiter_special(view, location); + // Unless we find '[' then we are going only going to have to call + // find_next_host_delimiter_special once. + for (; location < view_size; + location = find_next_host_delimiter_special(view, location)) { + if (view[location] == '[') { + location = view.find(']', location); + if (location == std::string_view::npos) { + // performance: view.find might get translated to a memchr, which + // has no notion of std::string_view::npos, so the code does not + // reflect the assembly. + location = view_size; + break; + } + } else { + found_colon = view[location] == ':'; + break; + } + } + } else { + // We move to the next delimiter. + location = find_next_host_delimiter(view, location); + // Unless we find '[' then we are going only going to have to call + // find_next_host_delimiter_special once. + for (; location < view_size; + location = find_next_host_delimiter(view, location)) { + if (view[location] == '[') { + location = view.find(']', location); + if (location == std::string_view::npos) { + // performance: view.find might get translated to a memchr, which + // has no notion of std::string_view::npos, so the code does not + // reflect the assembly. + location = view_size; + break; + } + } else { + found_colon = view[location] == ':'; + break; + } + } + } + // performance: remove_suffix may translate into a single instruction. + view.remove_suffix(view_size - location); + return {location, found_colon}; +} + +void trim_c0_whitespace(std::string_view& input) noexcept { + while (!input.empty() && + ada::unicode::is_c0_control_or_space(input.front())) { + input.remove_prefix(1); + } + while (!input.empty() && ada::unicode::is_c0_control_or_space(input.back())) { + input.remove_suffix(1); + } +} + +ada_really_inline void parse_prepared_path(std::string_view input, + ada::scheme::type type, + std::string& path) { + ada_log("parse_prepared_path ", input); + uint8_t accumulator = checkers::path_signature(input); + // Let us first detect a trivial case. + // If it is special, we check that we have no dot, no %, no \ and no + // character needing percent encoding. Otherwise, we check that we have no %, + // no dot, and no character needing percent encoding. + constexpr uint8_t need_encoding = 1; + constexpr uint8_t backslash_char = 2; + constexpr uint8_t dot_char = 4; + constexpr uint8_t percent_char = 8; + bool special = type != ada::scheme::NOT_SPECIAL; + bool may_need_slow_file_handling = (type == ada::scheme::type::FILE && + checkers::is_windows_drive_letter(input)); + bool trivial_path = + (special ? (accumulator == 0) + : ((accumulator & (need_encoding | dot_char | percent_char)) == + 0)) && + (!may_need_slow_file_handling); + if (accumulator == dot_char && !may_need_slow_file_handling) { + // '4' means that we have at least one dot, but nothing that requires + // percent encoding or decoding. The only part that is not trivial is + // that we may have single dots and double dots path segments. + // If we have such segments, then we either have a path that begins + // with '.' (easy to check), or we have the sequence './'. + // Note: input cannot be empty, it must at least contain one character ('.') + // Note: we know that '\' is not present. + if (input[0] != '.') { + size_t slashdot = input.find("/."); + if (slashdot == std::string_view::npos) { // common case + trivial_path = true; + } else { // uncommon + // only three cases matter: /./, /.. or a final / + trivial_path = + !(slashdot + 2 == input.size() || input[slashdot + 2] == '.' || + input[slashdot + 2] == '/'); + } + } + } + if (trivial_path) { + ada_log("parse_path trivial"); + path += '/'; + path += input; + return; + } + // We are going to need to look a bit at the path, but let us see if we can + // ignore percent encoding *and* backslashes *and* percent characters. + // Except for the trivial case, this is likely to capture 99% of paths out + // there. + bool fast_path = + (special && + (accumulator & (need_encoding | backslash_char | percent_char)) == 0) && + (type != ada::scheme::type::FILE); + if (fast_path) { + ada_log("parse_prepared_path fast"); + // Here we don't need to worry about \ or percent encoding. + // We also do not have a file protocol. We might have dots, however, + // but dots must as appear as '.', and they cannot be encoded because + // the symbol '%' is not present. + size_t previous_location = 0; // We start at 0. + do { + size_t new_location = input.find('/', previous_location); + // std::string_view path_view = input; + // We process the last segment separately: + if (new_location == std::string_view::npos) { + std::string_view path_view = input.substr(previous_location); + if (path_view == "..") { // The path ends with .. + // e.g., if you receive ".." with an empty path, you go to "/". + if (path.empty()) { + path = '/'; + return; + } + // Fast case where we have nothing to do: + if (path.back() == '/') { + return; + } + // If you have the path "/joe/myfriend", + // then you delete 'myfriend'. + path.resize(path.rfind('/') + 1); + return; + } + path += '/'; + if (path_view != ".") { + path.append(path_view); + } + return; + } else { + // This is a non-final segment. + std::string_view path_view = + input.substr(previous_location, new_location - previous_location); + previous_location = new_location + 1; + if (path_view == "..") { + size_t last_delimiter = path.rfind('/'); + if (last_delimiter != std::string::npos) { + path.erase(last_delimiter); + } + } else if (path_view != ".") { + path += '/'; + path.append(path_view); + } + } + } while (true); + } else { + ada_log("parse_path slow"); + // we have reached the general case + bool needs_percent_encoding = (accumulator & 1); + std::string path_buffer_tmp; + do { + size_t location = (special && (accumulator & 2)) + ? input.find_first_of("/\\") + : input.find('/'); + std::string_view path_view = input; + if (location != std::string_view::npos) { + path_view.remove_suffix(path_view.size() - location); + input.remove_prefix(location + 1); + } + // path_buffer is either path_view or it might point at a percent encoded + // temporary file. + std::string_view path_buffer = + (needs_percent_encoding && + ada::unicode::percent_encode( + path_view, character_sets::PATH_PERCENT_ENCODE, path_buffer_tmp)) + ? path_buffer_tmp + : path_view; + if (unicode::is_double_dot_path_segment(path_buffer)) { + if ((helpers::shorten_path(path, type) || special) && + location == std::string_view::npos) { + path += '/'; + } + } else if (unicode::is_single_dot_path_segment(path_buffer) && + (location == std::string_view::npos)) { + path += '/'; + } + // Otherwise, if path_buffer is not a single-dot path segment, then: + else if (!unicode::is_single_dot_path_segment(path_buffer)) { + // If url's scheme is "file", url's path is empty, and path_buffer is a + // Windows drive letter, then replace the second code point in + // path_buffer with U+003A (:). + if (type == ada::scheme::type::FILE && path.empty() && + checkers::is_windows_drive_letter(path_buffer)) { + path += '/'; + path += path_buffer[0]; + path += ':'; + path_buffer.remove_prefix(2); + path.append(path_buffer); + } else { + // Append path_buffer to url's path. + path += '/'; + path.append(path_buffer); + } + } + if (location == std::string_view::npos) { + return; + } + } while (true); + } +} + +bool overlaps(std::string_view input1, const std::string& input2) noexcept { + ada_log("helpers::overlaps check if string_view '", input1, "' [", + input1.size(), " bytes] is part of string '", input2, "' [", + input2.size(), " bytes]"); + return !input1.empty() && !input2.empty() && input1.data() >= input2.data() && + input1.data() < input2.data() + input2.size(); +} + +template +ada_really_inline void strip_trailing_spaces_from_opaque_path( + url_type& url) noexcept { + ada_log("helpers::strip_trailing_spaces_from_opaque_path"); + if (!url.has_opaque_path) return; + if (url.has_hash()) return; + if (url.has_search()) return; + + auto path = std::string(url.get_pathname()); + while (!path.empty() && path.back() == ' ') { + path.resize(path.size() - 1); + } + url.update_base_pathname(path); +} + +// @ / \\ ? +static constexpr std::array authority_delimiter_special = + []() consteval { + std::array result{}; + for (uint8_t i : {'@', '/', '\\', '?'}) { + result[i] = 1; + } + return result; + }(); +// credit: @the-moisrex recommended a table-based approach +ada_really_inline size_t +find_authority_delimiter_special(std::string_view view) noexcept { + // performance note: we might be able to gain further performance + // with SIMD instrinsics. + for (auto pos = view.begin(); pos != view.end(); ++pos) { + if (authority_delimiter_special[(uint8_t)*pos]) { + return pos - view.begin(); + } + } + return size_t(view.size()); +} + +// @ / ? +static constexpr std::array authority_delimiter = []() consteval { + std::array result{}; + for (uint8_t i : {'@', '/', '?'}) { + result[i] = 1; + } + return result; +}(); +// credit: @the-moisrex recommended a table-based approach +ada_really_inline size_t +find_authority_delimiter(std::string_view view) noexcept { + // performance note: we might be able to gain further performance + // with SIMD instrinsics. + for (auto pos = view.begin(); pos != view.end(); ++pos) { + if (authority_delimiter[(uint8_t)*pos]) { + return pos - view.begin(); + } + } + return size_t(view.size()); +} + +} // namespace ada::helpers + +namespace ada { +ada_warn_unused std::string to_string(ada::state state) { + return ada::helpers::get_state(state); +} +#undef ada_make_uint8x16_t +} // namespace ada +/* end file src/helpers.cpp */ +/* begin file src/url.cpp */ + +#include +#include +#include +#include + +namespace ada { + +bool url::parse_opaque_host(std::string_view input) { + ada_log("parse_opaque_host ", input, " [", input.size(), " bytes]"); + if (std::ranges::any_of(input.begin(), input.end(), + ada::unicode::is_forbidden_host_code_point)) { + return is_valid = false; + } + + // Return the result of running UTF-8 percent-encode on input using the C0 + // control percent-encode set. + host = ada::unicode::percent_encode( + input, ada::character_sets::C0_CONTROL_PERCENT_ENCODE); + return true; +} + +bool url::parse_ipv4(std::string_view input) { + ada_log("parse_ipv4 ", input, " [", input.size(), " bytes]"); + if (input.back() == '.') { + input.remove_suffix(1); + } + size_t digit_count{0}; + int pure_decimal_count = 0; // entries that are decimal + std::string_view original_input = + input; // we might use this if pure_decimal_count == 4. + uint64_t ipv4{0}; + // we could unroll for better performance? + for (; (digit_count < 4) && !(input.empty()); digit_count++) { + uint32_t + segment_result{}; // If any number exceeds 32 bits, we have an error. + bool is_hex = checkers::has_hex_prefix(input); + if (is_hex && ((input.length() == 2) || + ((input.length() > 2) && (input[2] == '.')))) { + // special case + segment_result = 0; + input.remove_prefix(2); + } else { + std::from_chars_result r{}; + if (is_hex) { + r = std::from_chars(input.data() + 2, input.data() + input.size(), + segment_result, 16); + } else if ((input.length() >= 2) && input[0] == '0' && + checkers::is_digit(input[1])) { + r = std::from_chars(input.data() + 1, input.data() + input.size(), + segment_result, 8); + } else { + pure_decimal_count++; + r = std::from_chars(input.data(), input.data() + input.size(), + segment_result, 10); + } + if (r.ec != std::errc()) { + return is_valid = false; + } + input.remove_prefix(r.ptr - input.data()); + } + if (input.empty()) { + // We have the last value. + // At this stage, ipv4 contains digit_count*8 bits. + // So we have 32-digit_count*8 bits left. + if (segment_result >= (uint64_t(1) << (32 - digit_count * 8))) { + return is_valid = false; + } + ipv4 <<= (32 - digit_count * 8); + ipv4 |= segment_result; + goto final; + } else { + // There is more, so that the value must no be larger than 255 + // and we must have a '.'. + if ((segment_result > 255) || (input[0] != '.')) { + return is_valid = false; + } + ipv4 <<= 8; + ipv4 |= segment_result; + input.remove_prefix(1); // remove '.' + } + } + if ((digit_count != 4) || (!input.empty())) { + return is_valid = false; + } +final: + // We could also check r.ptr to see where the parsing ended. + if (pure_decimal_count == 4) { + host = original_input; // The original input was already all decimal and we + // validated it. + } else { + host = ada::serializers::ipv4(ipv4); // We have to reserialize the address. + } + host_type = IPV4; + return true; +} + +bool url::parse_ipv6(std::string_view input) { + ada_log("parse_ipv6 ", input, " [", input.size(), " bytes]"); + + if (input.empty()) { + return is_valid = false; + } + // Let address be a new IPv6 address whose IPv6 pieces are all 0. + std::array address{}; + + // Let pieceIndex be 0. + int piece_index = 0; + + // Let compress be null. + std::optional compress{}; + + // Let pointer be a pointer for input. + std::string_view::iterator pointer = input.begin(); + + // If c is U+003A (:), then: + if (input[0] == ':') { + // If remaining does not start with U+003A (:), validation error, return + // failure. + if (input.size() == 1 || input[1] != ':') { + ada_log("parse_ipv6 starts with : but the rest does not start with :"); + return is_valid = false; + } + + // Increase pointer by 2. + pointer += 2; + + // Increase pieceIndex by 1 and then set compress to pieceIndex. + compress = ++piece_index; + } + + // While c is not the EOF code point: + while (pointer != input.end()) { + // If pieceIndex is 8, validation error, return failure. + if (piece_index == 8) { + ada_log("parse_ipv6 piece_index == 8"); + return is_valid = false; + } + + // If c is U+003A (:), then: + if (*pointer == ':') { + // If compress is non-null, validation error, return failure. + if (compress.has_value()) { + ada_log("parse_ipv6 compress is non-null"); + return is_valid = false; + } + + // Increase pointer and pieceIndex by 1, set compress to pieceIndex, and + // then continue. + pointer++; + compress = ++piece_index; + continue; + } + + // Let value and length be 0. + uint16_t value = 0, length = 0; + + // While length is less than 4 and c is an ASCII hex digit, + // set value to value times 0x10 + c interpreted as hexadecimal number, and + // increase pointer and length by 1. + while (length < 4 && pointer != input.end() && + unicode::is_ascii_hex_digit(*pointer)) { + // https://stackoverflow.com/questions/39060852/why-does-the-addition-of-two-shorts-return-an-int + value = uint16_t(value * 0x10 + unicode::convert_hex_to_binary(*pointer)); + pointer++; + length++; + } + + // If c is U+002E (.), then: + if (pointer != input.end() && *pointer == '.') { + // If length is 0, validation error, return failure. + if (length == 0) { + ada_log("parse_ipv6 length is 0"); + return is_valid = false; + } + + // Decrease pointer by length. + pointer -= length; + + // If pieceIndex is greater than 6, validation error, return failure. + if (piece_index > 6) { + ada_log("parse_ipv6 piece_index > 6"); + return is_valid = false; + } + + // Let numbersSeen be 0. + int numbers_seen = 0; + + // While c is not the EOF code point: + while (pointer != input.end()) { + // Let ipv4Piece be null. + std::optional ipv4_piece{}; + + // If numbersSeen is greater than 0, then: + if (numbers_seen > 0) { + // If c is a U+002E (.) and numbersSeen is less than 4, then increase + // pointer by 1. + if (*pointer == '.' && numbers_seen < 4) { + pointer++; + } + // Otherwise, validation error, return failure. + else { + ada_log("parse_ipv6 Otherwise, validation error, return failure"); + return is_valid = false; + } + } + + // If c is not an ASCII digit, validation error, return failure. + if (pointer == input.end() || !checkers::is_digit(*pointer)) { + ada_log( + "parse_ipv6 If c is not an ASCII digit, validation error, return " + "failure"); + return is_valid = false; + } + + // While c is an ASCII digit: + while (pointer != input.end() && checkers::is_digit(*pointer)) { + // Let number be c interpreted as decimal number. + int number = *pointer - '0'; + + // If ipv4Piece is null, then set ipv4Piece to number. + if (!ipv4_piece.has_value()) { + ipv4_piece = number; + } + // Otherwise, if ipv4Piece is 0, validation error, return failure. + else if (ipv4_piece == 0) { + ada_log("parse_ipv6 if ipv4Piece is 0, validation error"); + return is_valid = false; + } + // Otherwise, set ipv4Piece to ipv4Piece times 10 + number. + else { + ipv4_piece = *ipv4_piece * 10 + number; + } + + // If ipv4Piece is greater than 255, validation error, return failure. + if (ipv4_piece > 255) { + ada_log("parse_ipv6 ipv4_piece > 255"); + return is_valid = false; + } + + // Increase pointer by 1. + pointer++; + } + + // Set address[pieceIndex] to address[pieceIndex] times 0x100 + + // ipv4Piece. + // https://stackoverflow.com/questions/39060852/why-does-the-addition-of-two-shorts-return-an-int + address[piece_index] = + uint16_t(address[piece_index] * 0x100 + *ipv4_piece); + + // Increase numbersSeen by 1. + numbers_seen++; + + // If numbersSeen is 2 or 4, then increase pieceIndex by 1. + if (numbers_seen == 2 || numbers_seen == 4) { + piece_index++; + } + } + + // If numbersSeen is not 4, validation error, return failure. + if (numbers_seen != 4) { + return is_valid = false; + } + + // Break. + break; + } + // Otherwise, if c is U+003A (:): + else if ((pointer != input.end()) && (*pointer == ':')) { + // Increase pointer by 1. + pointer++; + + // If c is the EOF code point, validation error, return failure. + if (pointer == input.end()) { + ada_log( + "parse_ipv6 If c is the EOF code point, validation error, return " + "failure"); + return is_valid = false; + } + } + // Otherwise, if c is not the EOF code point, validation error, return + // failure. + else if (pointer != input.end()) { + ada_log( + "parse_ipv6 Otherwise, if c is not the EOF code point, validation " + "error, return failure"); + return is_valid = false; + } + + // Set address[pieceIndex] to value. + address[piece_index] = value; + + // Increase pieceIndex by 1. + piece_index++; + } + + // If compress is non-null, then: + if (compress.has_value()) { + // Let swaps be pieceIndex - compress. + int swaps = piece_index - *compress; + + // Set pieceIndex to 7. + piece_index = 7; + + // While pieceIndex is not 0 and swaps is greater than 0, + // swap address[pieceIndex] with address[compress + swaps - 1], and then + // decrease both pieceIndex and swaps by 1. + while (piece_index != 0 && swaps > 0) { + std::swap(address[piece_index], address[*compress + swaps - 1]); + piece_index--; + swaps--; + } + } + // Otherwise, if compress is null and pieceIndex is not 8, validation error, + // return failure. + else if (piece_index != 8) { + ada_log( + "parse_ipv6 if compress is null and pieceIndex is not 8, validation " + "error, return failure"); + return is_valid = false; + } + host = ada::serializers::ipv6(address); + ada_log("parse_ipv6 ", *host); + host_type = IPV6; + return true; +} + +template +ada_really_inline bool url::parse_scheme(const std::string_view input) { + auto parsed_type = ada::scheme::get_scheme_type(input); + bool is_input_special = (parsed_type != ada::scheme::NOT_SPECIAL); + /** + * In the common case, we will immediately recognize a special scheme (e.g., + *http, https), in which case, we can go really fast. + **/ + if (is_input_special) { // fast path!!! + if constexpr (has_state_override) { + // If url's scheme is not a special scheme and buffer is a special scheme, + // then return. + if (is_special() != is_input_special) { + return false; + } + + // If url includes credentials or has a non-null port, and buffer is + // "file", then return. + if ((has_credentials() || port.has_value()) && + parsed_type == ada::scheme::type::FILE) { + return false; + } + + // If url's scheme is "file" and its host is an empty host, then return. + // An empty host is the empty string. + if (type == ada::scheme::type::FILE && host.has_value() && + host.value().empty()) { + return false; + } + } + + type = parsed_type; + + if constexpr (has_state_override) { + // This is uncommon. + uint16_t urls_scheme_port = get_special_port(); + + if (urls_scheme_port) { + // If url's port is url's scheme's default port, then set url's port to + // null. + if (port.has_value() && *port == urls_scheme_port) { + port = std::nullopt; + } + } + } + } else { // slow path + std::string _buffer(input); + // Next function is only valid if the input is ASCII and returns false + // otherwise, but it seems that we always have ascii content so we do not + // need to check the return value. + // bool is_ascii = + unicode::to_lower_ascii(_buffer.data(), _buffer.size()); + + if constexpr (has_state_override) { + // If url's scheme is a special scheme and buffer is not a special scheme, + // then return. If url's scheme is not a special scheme and buffer is a + // special scheme, then return. + if (is_special() != ada::scheme::is_special(_buffer)) { + return true; + } + + // If url includes credentials or has a non-null port, and buffer is + // "file", then return. + if ((has_credentials() || port.has_value()) && _buffer == "file") { + return true; + } + + // If url's scheme is "file" and its host is an empty host, then return. + // An empty host is the empty string. + if (type == ada::scheme::type::FILE && host.has_value() && + host.value().empty()) { + return true; + } + } + + set_scheme(std::move(_buffer)); + + if constexpr (has_state_override) { + // This is uncommon. + uint16_t urls_scheme_port = get_special_port(); + + if (urls_scheme_port) { + // If url's port is url's scheme's default port, then set url's port to + // null. + if (port.has_value() && *port == urls_scheme_port) { + port = std::nullopt; + } + } + } + } + + return true; +} + +ada_really_inline bool url::parse_host(std::string_view input) { + ada_log("parse_host ", input, " [", input.size(), " bytes]"); + if (input.empty()) { + return is_valid = false; + } // technically unnecessary. + // If input starts with U+005B ([), then: + if (input[0] == '[') { + // If input does not end with U+005D (]), validation error, return failure. + if (input.back() != ']') { + return is_valid = false; + } + ada_log("parse_host ipv6"); + + // Return the result of IPv6 parsing input with its leading U+005B ([) and + // trailing U+005D (]) removed. + input.remove_prefix(1); + input.remove_suffix(1); + return parse_ipv6(input); + } + + // If isNotSpecial is true, then return the result of opaque-host parsing + // input. + if (!is_special()) { + return parse_opaque_host(input); + } + // Let domain be the result of running UTF-8 decode without BOM on the + // percent-decoding of input. Let asciiDomain be the result of running domain + // to ASCII with domain and false. The most common case is an ASCII input, in + // which case we do not need to call the expensive 'to_ascii' if a few + // conditions are met: no '%' and no 'xn-' subsequence. + std::string buffer = std::string(input); + // This next function checks that the result is ascii, but we are going to + // to check anyhow with is_forbidden. + // bool is_ascii = + unicode::to_lower_ascii(buffer.data(), buffer.size()); + bool is_forbidden = unicode::contains_forbidden_domain_code_point( + buffer.data(), buffer.size()); + if (is_forbidden == 0 && buffer.find("xn-") == std::string_view::npos) { + // fast path + host = std::move(buffer); + if (checkers::is_ipv4(host.value())) { + ada_log("parse_host fast path ipv4"); + return parse_ipv4(host.value()); + } + ada_log("parse_host fast path ", *host); + return true; + } + ada_log("parse_host calling to_ascii"); + is_valid = ada::unicode::to_ascii(host, input, input.find('%')); + if (!is_valid) { + ada_log("parse_host to_ascii returns false"); + return is_valid = false; + } + ada_log("parse_host to_ascii succeeded ", *host, " [", host->size(), + " bytes]"); + + if (std::any_of(host.value().begin(), host.value().end(), + ada::unicode::is_forbidden_domain_code_point)) { + host = std::nullopt; + return is_valid = false; + } + + // If asciiDomain ends in a number, then return the result of IPv4 parsing + // asciiDomain. + if (checkers::is_ipv4(host.value())) { + ada_log("parse_host got ipv4 ", *host); + return parse_ipv4(host.value()); + } + + return true; +} + +ada_really_inline void url::parse_path(std::string_view input) { + ada_log("parse_path ", input); + std::string tmp_buffer; + std::string_view internal_input; + if (unicode::has_tabs_or_newline(input)) { + tmp_buffer = input; + // Optimization opportunity: Instead of copying and then pruning, we could + // just directly build the string from user_input. + helpers::remove_ascii_tab_or_newline(tmp_buffer); + internal_input = tmp_buffer; + } else { + internal_input = input; + } + + // If url is special, then: + if (is_special()) { + if (internal_input.empty()) { + path = "/"; + } else if ((internal_input[0] == '/') || (internal_input[0] == '\\')) { + helpers::parse_prepared_path(internal_input.substr(1), type, path); + } else { + helpers::parse_prepared_path(internal_input, type, path); + } + } else if (!internal_input.empty()) { + if (internal_input[0] == '/') { + helpers::parse_prepared_path(internal_input.substr(1), type, path); + } else { + helpers::parse_prepared_path(internal_input, type, path); + } + } else { + if (!host.has_value()) { + path = "/"; + } + } +} + +[[nodiscard]] std::string url::to_string() const { + if (!is_valid) { + return "null"; + } + std::string answer; + auto back = std::back_insert_iterator(answer); + answer.append("{\n"); + answer.append("\t\"protocol\":\""); + helpers::encode_json(get_protocol(), back); + answer.append("\",\n"); + if (has_credentials()) { + answer.append("\t\"username\":\""); + helpers::encode_json(username, back); + answer.append("\",\n"); + answer.append("\t\"password\":\""); + helpers::encode_json(password, back); + answer.append("\",\n"); + } + if (host.has_value()) { + answer.append("\t\"host\":\""); + helpers::encode_json(host.value(), back); + answer.append("\",\n"); + } + if (port.has_value()) { + answer.append("\t\"port\":\""); + answer.append(std::to_string(port.value())); + answer.append("\",\n"); + } + answer.append("\t\"path\":\""); + helpers::encode_json(path, back); + answer.append("\",\n"); + answer.append("\t\"opaque path\":"); + answer.append((has_opaque_path ? "true" : "false")); + if (has_search()) { + answer.append(",\n"); + answer.append("\t\"query\":\""); + helpers::encode_json(query.value(), back); + answer.append("\""); + } + if (hash.has_value()) { + answer.append(",\n"); + answer.append("\t\"hash\":\""); + helpers::encode_json(hash.value(), back); + answer.append("\""); + } + answer.append("\n}"); + return answer; +} + +[[nodiscard]] bool url::has_valid_domain() const noexcept { + if (!host.has_value()) { + return false; + } + return checkers::verify_dns_length(host.value()); +} + +[[nodiscard]] std::string url::get_origin() const noexcept { + if (is_special()) { + // Return a new opaque origin. + if (type == scheme::FILE) { + return "null"; + } + return ada::helpers::concat(get_protocol(), "//", get_host()); + } + + if (non_special_scheme == "blob") { + if (!path.empty()) { + auto result = ada::parse(path); + if (result && + (result->type == scheme::HTTP || result->type == scheme::HTTPS)) { + // If pathURL's scheme is not "http" and not "https", then return a + // new opaque origin. + return ada::helpers::concat(result->get_protocol(), "//", + result->get_host()); + } + } + } + + // Return a new opaque origin. + return "null"; +} + +[[nodiscard]] std::string url::get_protocol() const noexcept { + if (is_special()) { + return helpers::concat(ada::scheme::details::is_special_list[type], ":"); + } + // We only move the 'scheme' if it is non-special. + return helpers::concat(non_special_scheme, ":"); +} + +[[nodiscard]] std::string url::get_host() const noexcept { + // If url's host is null, then return the empty string. + // If url's port is null, return url's host, serialized. + // Return url's host, serialized, followed by U+003A (:) and url's port, + // serialized. + if (!host.has_value()) { + return ""; + } + if (port.has_value()) { + return host.value() + ":" + get_port(); + } + return host.value(); +} + +[[nodiscard]] std::string url::get_hostname() const noexcept { + return host.value_or(""); +} + +[[nodiscard]] std::string url::get_search() const noexcept { + // If this's URL's query is either null or the empty string, then return the + // empty string. Return U+003F (?), followed by this's URL's query. + return (!query.has_value() || (query.value().empty())) ? "" + : "?" + query.value(); +} + +[[nodiscard]] const std::string& url::get_username() const noexcept { + return username; +} + +[[nodiscard]] const std::string& url::get_password() const noexcept { + return password; +} + +[[nodiscard]] std::string url::get_port() const noexcept { + return port.has_value() ? std::to_string(port.value()) : ""; +} + +[[nodiscard]] std::string url::get_hash() const noexcept { + // If this's URL's fragment is either null or the empty string, then return + // the empty string. Return U+0023 (#), followed by this's URL's fragment. + return (!hash.has_value() || (hash.value().empty())) ? "" + : "#" + hash.value(); +} + +template +bool url::set_host_or_hostname(const std::string_view input) { + if (has_opaque_path) { + return false; + } + + std::optional previous_host = host; + std::optional previous_port = port; + + size_t host_end_pos = input.find('#'); + std::string _host(input.data(), host_end_pos != std::string_view::npos + ? host_end_pos + : input.size()); + helpers::remove_ascii_tab_or_newline(_host); + std::string_view new_host(_host); + + // If url's scheme is "file", then set state to file host state, instead of + // host state. + if (type != ada::scheme::type::FILE) { + std::string_view host_view(_host.data(), _host.length()); + auto [location, found_colon] = + helpers::get_host_delimiter_location(is_special(), host_view); + + // Otherwise, if c is U+003A (:) and insideBrackets is false, then: + // Note: the 'found_colon' value is true if and only if a colon was + // encountered while not inside brackets. + if (found_colon) { + if constexpr (override_hostname) { + return false; + } + std::string_view buffer = new_host.substr(location + 1); + if (!buffer.empty()) { + set_port(buffer); + } + } + // If url is special and host_view is the empty string, validation error, + // return failure. Otherwise, if state override is given, host_view is the + // empty string, and either url includes credentials or url's port is + // non-null, return. + else if (host_view.empty() && + (is_special() || has_credentials() || port.has_value())) { + return false; + } + + // Let host be the result of host parsing host_view with url is not special. + if (host_view.empty() && !is_special()) { + host = ""; + return true; + } + + bool succeeded = parse_host(host_view); + if (!succeeded) { + host = std::move(previous_host); + update_base_port(previous_port); + } + return succeeded; + } + + size_t location = new_host.find_first_of("/\\?"); + if (location != std::string_view::npos) { + new_host.remove_suffix(new_host.length() - location); + } + + if (new_host.empty()) { + // Set url's host to the empty string. + host = ""; + } else { + // Let host be the result of host parsing buffer with url is not special. + if (!parse_host(new_host)) { + host = std::move(previous_host); + update_base_port(previous_port); + return false; + } + + // If host is "localhost", then set host to the empty string. + if (host == "localhost") { + host = ""; + } + } + return true; +} + +bool url::set_host(const std::string_view input) { + return set_host_or_hostname(input); +} + +bool url::set_hostname(const std::string_view input) { + return set_host_or_hostname(input); +} + +bool url::set_username(const std::string_view input) { + if (cannot_have_credentials_or_port()) { + return false; + } + username = ada::unicode::percent_encode( + input, character_sets::USERINFO_PERCENT_ENCODE); + return true; +} + +bool url::set_password(const std::string_view input) { + if (cannot_have_credentials_or_port()) { + return false; + } + password = ada::unicode::percent_encode( + input, character_sets::USERINFO_PERCENT_ENCODE); + return true; +} + +bool url::set_port(const std::string_view input) { + if (cannot_have_credentials_or_port()) { + return false; + } + std::string trimmed(input); + helpers::remove_ascii_tab_or_newline(trimmed); + if (trimmed.empty()) { + port = std::nullopt; + return true; + } + + // Input should not start with a non-digit character. + if (!ada::unicode::is_ascii_digit(trimmed.front())) { + return false; + } + + // Revert changes if parse_port fails. + std::optional previous_port = port; + parse_port(trimmed); + if (is_valid) { + return true; + } + port = std::move(previous_port); + is_valid = true; + return false; +} + +void url::set_hash(const std::string_view input) { + if (input.empty()) { + hash = std::nullopt; + helpers::strip_trailing_spaces_from_opaque_path(*this); + return; + } + + std::string new_value; + new_value = input[0] == '#' ? input.substr(1) : input; + helpers::remove_ascii_tab_or_newline(new_value); + hash = unicode::percent_encode(new_value, + ada::character_sets::FRAGMENT_PERCENT_ENCODE); +} + +void url::set_search(const std::string_view input) { + if (input.empty()) { + query = std::nullopt; + helpers::strip_trailing_spaces_from_opaque_path(*this); + return; + } + + std::string new_value; + new_value = input[0] == '?' ? input.substr(1) : input; + helpers::remove_ascii_tab_or_newline(new_value); + + auto query_percent_encode_set = + is_special() ? ada::character_sets::SPECIAL_QUERY_PERCENT_ENCODE + : ada::character_sets::QUERY_PERCENT_ENCODE; + + query = ada::unicode::percent_encode(new_value, query_percent_encode_set); +} + +bool url::set_pathname(const std::string_view input) { + if (has_opaque_path) { + return false; + } + path.clear(); + parse_path(input); + return true; +} + +bool url::set_protocol(const std::string_view input) { + std::string view(input); + helpers::remove_ascii_tab_or_newline(view); + if (view.empty()) { + return true; + } + + // Schemes should start with alpha values. + if (!checkers::is_alpha(view[0])) { + return false; + } + + view.append(":"); + + std::string::iterator pointer = + std::ranges::find_if_not(view, unicode::is_alnum_plus); + + if (pointer != view.end() && *pointer == ':') { + return parse_scheme( + std::string_view(view.data(), pointer - view.begin())); + } + return false; +} + +bool url::set_href(const std::string_view input) { + ada::result out = ada::parse(input); + + if (out) { + *this = *out; + } + + return out.has_value(); +} + +} // namespace ada +/* end file src/url.cpp */ +/* begin file src/parser.cpp */ + +#include + + +namespace ada::parser { + +template +result_type parse_url_impl(std::string_view user_input, + const result_type* base_url) { + // We can specialize the implementation per type. + // Important: result_type_is_ada_url is evaluated at *compile time*. This + // means that doing if constexpr(result_type_is_ada_url) { something } else { + // something else } is free (at runtime). This means that ada::url_aggregator + // and ada::url **do not have to support the exact same API**. + constexpr bool result_type_is_ada_url = std::is_same_v; + constexpr bool result_type_is_ada_url_aggregator = + std::is_same_v; + static_assert(result_type_is_ada_url || + result_type_is_ada_url_aggregator); // We don't support + // anything else for now. + + ada_log("ada::parser::parse_url('", user_input, "' [", user_input.size(), + " bytes],", (base_url != nullptr ? base_url->to_string() : "null"), + ")"); + + state state = state::SCHEME_START; + result_type url{}; + + // We refuse to parse URL strings that exceed 4GB. Such strings are almost + // surely the result of a bug or are otherwise a security concern. + if (user_input.size() > std::numeric_limits::max()) [[unlikely]] { + url.is_valid = false; + } + // Going forward, user_input.size() is in [0, + // std::numeric_limits::max). If we are provided with an invalid + // base, or the optional_url was invalid, we must return. + if (base_url != nullptr) { + url.is_valid &= base_url->is_valid; + } + if (!url.is_valid) { + return url; + } + if constexpr (result_type_is_ada_url_aggregator && store_values) { + // Most of the time, we just need user_input.size(). + // In some instances, we may need a bit more. + /////////////////////////// + // This is *very* important. This line should *not* be removed + // hastily. There are principled reasons why reserve is important + // for performance. If you have a benchmark with small inputs, + // it may not matter, but in other instances, it could. + //// + // This rounds up to the next power of two. + // We know that user_input.size() is in [0, + // std::numeric_limits::max). + uint32_t reserve_capacity = + (0xFFFFFFFF >> + helpers::leading_zeroes(uint32_t(1 | user_input.size()))) + + 1; + url.reserve(reserve_capacity); + } + std::string tmp_buffer; + std::string_view url_data; + if (unicode::has_tabs_or_newline(user_input)) [[unlikely]] { + tmp_buffer = user_input; + // Optimization opportunity: Instead of copying and then pruning, we could + // just directly build the string from user_input. + helpers::remove_ascii_tab_or_newline(tmp_buffer); + url_data = tmp_buffer; + } else [[likely]] { + url_data = user_input; + } + + // Leading and trailing control characters are uncommon and easy to deal with + // (no performance concern). + helpers::trim_c0_whitespace(url_data); + + // Optimization opportunity. Most websites do not have fragment. + std::optional fragment = helpers::prune_hash(url_data); + // We add it last so that an implementation like ada::url_aggregator + // can append it last to its internal buffer, thus improving performance. + + // Here url_data no longer has its fragment. + // We are going to access the data from url_data (it is immutable). + // At any given time, we are pointing at byte 'input_position' in url_data. + // The input_position variable should range from 0 to input_size. + // It is illegal to access url_data at input_size. + size_t input_position = 0; + const size_t input_size = url_data.size(); + // Keep running the following state machine by switching on state. + // If after a run pointer points to the EOF code point, go to the next step. + // Otherwise, increase pointer by 1 and continue with the state machine. + // We never decrement input_position. + while (input_position <= input_size) { + ada_log("In parsing at ", input_position, " out of ", input_size, + " in state ", ada::to_string(state)); + switch (state) { + case state::SCHEME_START: { + ada_log("SCHEME_START ", helpers::substring(url_data, input_position)); + // If c is an ASCII alpha, append c, lowercased, to buffer, and set + // state to scheme state. + if ((input_position != input_size) && + checkers::is_alpha(url_data[input_position])) { + state = state::SCHEME; + input_position++; + } else { + // Otherwise, if state override is not given, set state to no scheme + // state and decrease pointer by 1. + state = state::NO_SCHEME; + } + break; + } + case state::SCHEME: { + ada_log("SCHEME ", helpers::substring(url_data, input_position)); + // If c is an ASCII alphanumeric, U+002B (+), U+002D (-), or U+002E (.), + // append c, lowercased, to buffer. + while ((input_position != input_size) && + (unicode::is_alnum_plus(url_data[input_position]))) { + input_position++; + } + // Otherwise, if c is U+003A (:), then: + if ((input_position != input_size) && + (url_data[input_position] == ':')) { + ada_log("SCHEME the scheme should be ", + url_data.substr(0, input_position)); + if constexpr (result_type_is_ada_url) { + if (!url.parse_scheme(url_data.substr(0, input_position))) { + return url; + } + } else { + // we pass the colon along instead of painfully adding it back. + if (!url.parse_scheme_with_colon( + url_data.substr(0, input_position + 1))) { + return url; + } + } + ada_log("SCHEME the scheme is ", url.get_protocol()); + + // If url's scheme is "file", then: + if (url.type == scheme::type::FILE) { + // Set state to file state. + state = state::FILE; + } + // Otherwise, if url is special, base is non-null, and base's scheme + // is url's scheme: Note: Doing base_url->scheme is unsafe if base_url + // != nullptr is false. + else if (url.is_special() && base_url != nullptr && + base_url->type == url.type) { + // Set state to special relative or authority state. + state = state::SPECIAL_RELATIVE_OR_AUTHORITY; + } + // Otherwise, if url is special, set state to special authority + // slashes state. + else if (url.is_special()) { + state = state::SPECIAL_AUTHORITY_SLASHES; + } + // Otherwise, if remaining starts with an U+002F (/), set state to + // path or authority state and increase pointer by 1. + else if (input_position + 1 < input_size && + url_data[input_position + 1] == '/') { + state = state::PATH_OR_AUTHORITY; + input_position++; + } + // Otherwise, set url's path to the empty string and set state to + // opaque path state. + else { + state = state::OPAQUE_PATH; + } + } + // Otherwise, if state override is not given, set buffer to the empty + // string, state to no scheme state, and start over (from the first code + // point in input). + else { + state = state::NO_SCHEME; + input_position = 0; + break; + } + input_position++; + break; + } + case state::NO_SCHEME: { + ada_log("NO_SCHEME ", helpers::substring(url_data, input_position)); + // If base is null, or base has an opaque path and c is not U+0023 (#), + // validation error, return failure. + if (base_url == nullptr || + (base_url->has_opaque_path && !fragment.has_value())) { + ada_log("NO_SCHEME validation error"); + url.is_valid = false; + return url; + } + // Otherwise, if base has an opaque path and c is U+0023 (#), + // set url's scheme to base's scheme, url's path to base's path, url's + // query to base's query, and set state to fragment state. + else if (base_url->has_opaque_path && fragment.has_value() && + input_position == input_size) { + ada_log("NO_SCHEME opaque base with fragment"); + url.copy_scheme(*base_url); + url.has_opaque_path = base_url->has_opaque_path; + + if constexpr (result_type_is_ada_url) { + url.path = base_url->path; + url.query = base_url->query; + } else { + url.update_base_pathname(base_url->get_pathname()); + url.update_base_search(base_url->get_search()); + } + url.update_unencoded_base_hash(*fragment); + return url; + } + // Otherwise, if base's scheme is not "file", set state to relative + // state and decrease pointer by 1. + else if (base_url->type != scheme::type::FILE) { + ada_log("NO_SCHEME non-file relative path"); + state = state::RELATIVE_SCHEME; + } + // Otherwise, set state to file state and decrease pointer by 1. + else { + ada_log("NO_SCHEME file base type"); + state = state::FILE; + } + break; + } + case state::AUTHORITY: { + ada_log("AUTHORITY ", helpers::substring(url_data, input_position)); + // most URLs have no @. Having no @ tells us that we don't have to worry + // about AUTHORITY. Of course, we could have @ and still not have to + // worry about AUTHORITY. + // TODO: Instead of just collecting a bool, collect the location of the + // '@' and do something useful with it. + // TODO: We could do various processing early on, using a single pass + // over the string to collect information about it, e.g., telling us + // whether there is a @ and if so, where (or how many). + + // Check if url data contains an @. + if (url_data.find('@', input_position) == std::string_view::npos) { + state = state::HOST; + break; + } + bool at_sign_seen{false}; + bool password_token_seen{false}; + /** + * We expect something of the sort... + * https://user:pass@example.com:1234/foo/bar?baz#quux + * --------^ + */ + do { + std::string_view view = url_data.substr(input_position); + // The delimiters are @, /, ? \\. + size_t location = + url.is_special() ? helpers::find_authority_delimiter_special(view) + : helpers::find_authority_delimiter(view); + std::string_view authority_view = view.substr(0, location); + size_t end_of_authority = input_position + authority_view.size(); + // If c is U+0040 (@), then: + if ((end_of_authority != input_size) && + (url_data[end_of_authority] == '@')) { + // If atSignSeen is true, then prepend "%40" to buffer. + if (at_sign_seen) { + if (password_token_seen) { + if constexpr (result_type_is_ada_url) { + url.password += "%40"; + } else { + url.append_base_password("%40"); + } + } else { + if constexpr (result_type_is_ada_url) { + url.username += "%40"; + } else { + url.append_base_username("%40"); + } + } + } + + at_sign_seen = true; + + if (!password_token_seen) { + size_t password_token_location = authority_view.find(':'); + password_token_seen = + password_token_location != std::string_view::npos; + + if constexpr (store_values) { + if (!password_token_seen) { + if constexpr (result_type_is_ada_url) { + url.username += unicode::percent_encode( + authority_view, + character_sets::USERINFO_PERCENT_ENCODE); + } else { + url.append_base_username(unicode::percent_encode( + authority_view, + character_sets::USERINFO_PERCENT_ENCODE)); + } + } else { + if constexpr (result_type_is_ada_url) { + url.username += unicode::percent_encode( + authority_view.substr(0, password_token_location), + character_sets::USERINFO_PERCENT_ENCODE); + url.password += unicode::percent_encode( + authority_view.substr(password_token_location + 1), + character_sets::USERINFO_PERCENT_ENCODE); + } else { + url.append_base_username(unicode::percent_encode( + authority_view.substr(0, password_token_location), + character_sets::USERINFO_PERCENT_ENCODE)); + url.append_base_password(unicode::percent_encode( + authority_view.substr(password_token_location + 1), + character_sets::USERINFO_PERCENT_ENCODE)); + } + } + } + } else if constexpr (store_values) { + if constexpr (result_type_is_ada_url) { + url.password += unicode::percent_encode( + authority_view, character_sets::USERINFO_PERCENT_ENCODE); + } else { + url.append_base_password(unicode::percent_encode( + authority_view, character_sets::USERINFO_PERCENT_ENCODE)); + } + } + } + // Otherwise, if one of the following is true: + // - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) + // - url is special and c is U+005C (\) + else if (end_of_authority == input_size || + url_data[end_of_authority] == '/' || + url_data[end_of_authority] == '?' || + (url.is_special() && url_data[end_of_authority] == '\\')) { + // If atSignSeen is true and authority_view is the empty string, + // validation error, return failure. + if (at_sign_seen && authority_view.empty()) { + url.is_valid = false; + return url; + } + state = state::HOST; + break; + } + if (end_of_authority == input_size) { + if constexpr (store_values) { + if (fragment.has_value()) { + url.update_unencoded_base_hash(*fragment); + } + } + return url; + } + input_position = end_of_authority + 1; + } while (true); + + break; + } + case state::SPECIAL_RELATIVE_OR_AUTHORITY: { + ada_log("SPECIAL_RELATIVE_OR_AUTHORITY ", + helpers::substring(url_data, input_position)); + + // If c is U+002F (/) and remaining starts with U+002F (/), + // then set state to special authority ignore slashes state and increase + // pointer by 1. + if (url_data.substr(input_position, 2) == "//") { + state = state::SPECIAL_AUTHORITY_IGNORE_SLASHES; + input_position += 2; + } else { + // Otherwise, validation error, set state to relative state and + // decrease pointer by 1. + state = state::RELATIVE_SCHEME; + } + + break; + } + case state::PATH_OR_AUTHORITY: { + ada_log("PATH_OR_AUTHORITY ", + helpers::substring(url_data, input_position)); + + // If c is U+002F (/), then set state to authority state. + if ((input_position != input_size) && + (url_data[input_position] == '/')) { + state = state::AUTHORITY; + input_position++; + } else { + // Otherwise, set state to path state, and decrease pointer by 1. + state = state::PATH; + } + + break; + } + case state::RELATIVE_SCHEME: { + ada_log("RELATIVE_SCHEME ", + helpers::substring(url_data, input_position)); + + // Set url's scheme to base's scheme. + url.copy_scheme(*base_url); + + // If c is U+002F (/), then set state to relative slash state. + if ((input_position != input_size) && + (url_data[input_position] == '/')) { + ada_log( + "RELATIVE_SCHEME if c is U+002F (/), then set state to relative " + "slash state"); + state = state::RELATIVE_SLASH; + } else if (url.is_special() && (input_position != input_size) && + (url_data[input_position] == '\\')) { + // Otherwise, if url is special and c is U+005C (\), validation error, + // set state to relative slash state. + ada_log( + "RELATIVE_SCHEME if url is special and c is U+005C, validation " + "error, set state to relative slash state"); + state = state::RELATIVE_SLASH; + } else { + ada_log("RELATIVE_SCHEME otherwise"); + // Set url's username to base's username, url's password to base's + // password, url's host to base's host, url's port to base's port, + // url's path to a clone of base's path, and url's query to base's + // query. + if constexpr (result_type_is_ada_url) { + url.username = base_url->username; + url.password = base_url->password; + url.host = base_url->host; + url.port = base_url->port; + // cloning the base path includes cloning the has_opaque_path flag + url.has_opaque_path = base_url->has_opaque_path; + url.path = base_url->path; + url.query = base_url->query; + } else { + url.update_base_authority(base_url->get_href(), + base_url->get_components()); + url.update_host_to_base_host(base_url->get_hostname()); + url.update_base_port(base_url->retrieve_base_port()); + // cloning the base path includes cloning the has_opaque_path flag + url.has_opaque_path = base_url->has_opaque_path; + url.update_base_pathname(base_url->get_pathname()); + url.update_base_search(base_url->get_search()); + } + + url.has_opaque_path = base_url->has_opaque_path; + + // If c is U+003F (?), then set url's query to the empty string, and + // state to query state. + if ((input_position != input_size) && + (url_data[input_position] == '?')) { + state = state::QUERY; + } + // Otherwise, if c is not the EOF code point: + else if (input_position != input_size) { + // Set url's query to null. + url.clear_search(); + if constexpr (result_type_is_ada_url) { + // Shorten url's path. + helpers::shorten_path(url.path, url.type); + } else { + std::string_view path = url.get_pathname(); + if (helpers::shorten_path(path, url.type)) { + url.update_base_pathname(std::move(std::string(path))); + } + } + // Set state to path state and decrease pointer by 1. + state = state::PATH; + break; + } + } + input_position++; + break; + } + case state::RELATIVE_SLASH: { + ada_log("RELATIVE_SLASH ", + helpers::substring(url_data, input_position)); + + // If url is special and c is U+002F (/) or U+005C (\), then: + if (url.is_special() && (input_position != input_size) && + (url_data[input_position] == '/' || + url_data[input_position] == '\\')) { + // Set state to special authority ignore slashes state. + state = state::SPECIAL_AUTHORITY_IGNORE_SLASHES; + } + // Otherwise, if c is U+002F (/), then set state to authority state. + else if ((input_position != input_size) && + (url_data[input_position] == '/')) { + state = state::AUTHORITY; + } + // Otherwise, set + // - url's username to base's username, + // - url's password to base's password, + // - url's host to base's host, + // - url's port to base's port, + // - state to path state, and then, decrease pointer by 1. + else { + if constexpr (result_type_is_ada_url) { + url.username = base_url->username; + url.password = base_url->password; + url.host = base_url->host; + url.port = base_url->port; + } else { + url.update_base_authority(base_url->get_href(), + base_url->get_components()); + url.update_host_to_base_host(base_url->get_hostname()); + url.update_base_port(base_url->retrieve_base_port()); + } + state = state::PATH; + break; + } + + input_position++; + break; + } + case state::SPECIAL_AUTHORITY_SLASHES: { + ada_log("SPECIAL_AUTHORITY_SLASHES ", + helpers::substring(url_data, input_position)); + + // If c is U+002F (/) and remaining starts with U+002F (/), + // then set state to special authority ignore slashes state and increase + // pointer by 1. + if (url_data.substr(input_position, 2) == "//") { + input_position += 2; + } + + [[fallthrough]]; + } + case state::SPECIAL_AUTHORITY_IGNORE_SLASHES: { + ada_log("SPECIAL_AUTHORITY_IGNORE_SLASHES ", + helpers::substring(url_data, input_position)); + + // If c is neither U+002F (/) nor U+005C (\), then set state to + // authority state and decrease pointer by 1. + while ((input_position != input_size) && + ((url_data[input_position] == '/') || + (url_data[input_position] == '\\'))) { + input_position++; + } + state = state::AUTHORITY; + + break; + } + case state::QUERY: { + ada_log("QUERY ", helpers::substring(url_data, input_position)); + if constexpr (store_values) { + // Let queryPercentEncodeSet be the special-query percent-encode set + // if url is special; otherwise the query percent-encode set. + const uint8_t* query_percent_encode_set = + url.is_special() ? character_sets::SPECIAL_QUERY_PERCENT_ENCODE + : character_sets::QUERY_PERCENT_ENCODE; + + // Percent-encode after encoding, with encoding, buffer, and + // queryPercentEncodeSet, and append the result to url's query. + url.update_base_search(url_data.substr(input_position), + query_percent_encode_set); + ada_log("QUERY update_base_search completed "); + if (fragment.has_value()) { + url.update_unencoded_base_hash(*fragment); + } + } + return url; + } + case state::HOST: { + ada_log("HOST ", helpers::substring(url_data, input_position)); + + std::string_view host_view = url_data.substr(input_position); + auto [location, found_colon] = + helpers::get_host_delimiter_location(url.is_special(), host_view); + input_position = (location != std::string_view::npos) + ? input_position + location + : input_size; + // Otherwise, if c is U+003A (:) and insideBrackets is false, then: + // Note: the 'found_colon' value is true if and only if a colon was + // encountered while not inside brackets. + if (found_colon) { + // If buffer is the empty string, validation error, return failure. + // Let host be the result of host parsing buffer with url is not + // special. + ada_log("HOST parsing ", host_view); + if (!url.parse_host(host_view)) { + return url; + } + ada_log("HOST parsing results in ", url.get_hostname()); + // Set url's host to host, buffer to the empty string, and state to + // port state. + state = state::PORT; + input_position++; + } + // Otherwise, if one of the following is true: + // - c is the EOF code point, U+002F (/), U+003F (?), or U+0023 (#) + // - url is special and c is U+005C (\) + // The get_host_delimiter_location function either brings us to + // the colon outside of the bracket, or to one of those characters. + else { + // If url is special and host_view is the empty string, validation + // error, return failure. + if (host_view.empty() && url.is_special()) { + url.is_valid = false; + return url; + } + ada_log("HOST parsing ", host_view, " href=", url.get_href()); + // Let host be the result of host parsing host_view with url is not + // special. + if (host_view.empty()) { + url.update_base_hostname(""); + } else if (!url.parse_host(host_view)) { + return url; + } + ada_log("HOST parsing results in ", url.get_hostname(), + " href=", url.get_href()); + + // Set url's host to host, and state to path start state. + state = state::PATH_START; + } + + break; + } + case state::OPAQUE_PATH: { + ada_log("OPAQUE_PATH ", helpers::substring(url_data, input_position)); + std::string_view view = url_data.substr(input_position); + // If c is U+003F (?), then set url's query to the empty string and + // state to query state. + size_t location = view.find('?'); + if (location != std::string_view::npos) { + view.remove_suffix(view.size() - location); + state = state::QUERY; + input_position += location + 1; + } else { + input_position = input_size + 1; + } + url.has_opaque_path = true; + // This is a really unlikely scenario in real world. We should not seek + // to optimize it. + url.update_base_pathname(unicode::percent_encode( + view, character_sets::C0_CONTROL_PERCENT_ENCODE)); + break; + } + case state::PORT: { + ada_log("PORT ", helpers::substring(url_data, input_position)); + std::string_view port_view = url_data.substr(input_position); + input_position += url.parse_port(port_view, true); + if (!url.is_valid) { + return url; + } + state = state::PATH_START; + [[fallthrough]]; + } + case state::PATH_START: { + ada_log("PATH_START ", helpers::substring(url_data, input_position)); + + // If url is special, then: + if (url.is_special()) { + // Set state to path state. + state = state::PATH; + + // Optimization: Avoiding going into PATH state improves the + // performance of urls ending with /. + if (input_position == input_size) { + if constexpr (store_values) { + url.update_base_pathname("/"); + if (fragment.has_value()) { + url.update_unencoded_base_hash(*fragment); + } + } + return url; + } + // If c is neither U+002F (/) nor U+005C (\), then decrease pointer + // by 1. We know that (input_position == input_size) is impossible + // here, because of the previous if-check. + if ((url_data[input_position] != '/') && + (url_data[input_position] != '\\')) { + break; + } + } + // Otherwise, if state override is not given and c is U+003F (?), + // set url's query to the empty string and state to query state. + else if ((input_position != input_size) && + (url_data[input_position] == '?')) { + state = state::QUERY; + } + // Otherwise, if c is not the EOF code point: + else if (input_position != input_size) { + // Set state to path state. + state = state::PATH; + + // If c is not U+002F (/), then decrease pointer by 1. + if (url_data[input_position] != '/') { + break; + } + } + + input_position++; + break; + } + case state::PATH: { + ada_log("PATH ", helpers::substring(url_data, input_position)); + std::string_view view = url_data.substr(input_position); + + // Most time, we do not need percent encoding. + // Furthermore, we can immediately locate the '?'. + size_t locofquestionmark = view.find('?'); + if (locofquestionmark != std::string_view::npos) { + state = state::QUERY; + view.remove_suffix(view.size() - locofquestionmark); + input_position += locofquestionmark + 1; + } else { + input_position = input_size + 1; + } + if constexpr (store_values) { + if constexpr (result_type_is_ada_url) { + helpers::parse_prepared_path(view, url.type, url.path); + } else { + url.consume_prepared_path(view); + ADA_ASSERT_TRUE(url.validate()); + } + } + break; + } + case state::FILE_SLASH: { + ada_log("FILE_SLASH ", helpers::substring(url_data, input_position)); + + // If c is U+002F (/) or U+005C (\), then: + if ((input_position != input_size) && + (url_data[input_position] == '/' || + url_data[input_position] == '\\')) { + ada_log("FILE_SLASH c is U+002F or U+005C"); + // Set state to file host state. + state = state::FILE_HOST; + input_position++; + } else { + ada_log("FILE_SLASH otherwise"); + // If base is non-null and base's scheme is "file", then: + // Note: it is unsafe to do base_url->scheme unless you know that + // base_url_has_value() is true. + if (base_url != nullptr && base_url->type == scheme::type::FILE) { + // Set url's host to base's host. + if constexpr (result_type_is_ada_url) { + url.host = base_url->host; + } else { + url.update_host_to_base_host(base_url->get_host()); + } + // If the code point substring from pointer to the end of input does + // not start with a Windows drive letter and base's path[0] is a + // normalized Windows drive letter, then append base's path[0] to + // url's path. + if (!base_url->get_pathname().empty()) { + if (!checkers::is_windows_drive_letter( + url_data.substr(input_position))) { + std::string_view first_base_url_path = + base_url->get_pathname().substr(1); + size_t loc = first_base_url_path.find('/'); + if (loc != std::string_view::npos) { + helpers::resize(first_base_url_path, loc); + } + if (checkers::is_normalized_windows_drive_letter( + first_base_url_path)) { + if constexpr (result_type_is_ada_url) { + url.path += '/'; + url.path += first_base_url_path; + } else { + url.append_base_pathname( + helpers::concat("/", first_base_url_path)); + } + } + } + } + } + + // Set state to path state, and decrease pointer by 1. + state = state::PATH; + } + + break; + } + case state::FILE_HOST: { + ada_log("FILE_HOST ", helpers::substring(url_data, input_position)); + std::string_view view = url_data.substr(input_position); + + size_t location = view.find_first_of("/\\?"); + std::string_view file_host_buffer( + view.data(), + (location != std::string_view::npos) ? location : view.size()); + + if (checkers::is_windows_drive_letter(file_host_buffer)) { + state = state::PATH; + } else if (file_host_buffer.empty()) { + // Set url's host to the empty string. + if constexpr (result_type_is_ada_url) { + url.host = ""; + } else { + url.update_base_hostname(""); + } + // Set state to path start state. + state = state::PATH_START; + } else { + size_t consumed_bytes = file_host_buffer.size(); + input_position += consumed_bytes; + // Let host be the result of host parsing buffer with url is not + // special. + if (!url.parse_host(file_host_buffer)) { + return url; + } + + if constexpr (result_type_is_ada_url) { + // If host is "localhost", then set host to the empty string. + if (url.host.has_value() && url.host.value() == "localhost") { + url.host = ""; + } + } else { + if (url.get_hostname() == "localhost") { + url.update_base_hostname(""); + } + } + + // Set buffer to the empty string and state to path start state. + state = state::PATH_START; + } + + break; + } + case state::FILE: { + ada_log("FILE ", helpers::substring(url_data, input_position)); + std::string_view file_view = url_data.substr(input_position); + + url.set_protocol_as_file(); + if constexpr (result_type_is_ada_url) { + // Set url's host to the empty string. + url.host = ""; + } else { + url.update_base_hostname(""); + } + // If c is U+002F (/) or U+005C (\), then: + if (input_position != input_size && + (url_data[input_position] == '/' || + url_data[input_position] == '\\')) { + ada_log("FILE c is U+002F or U+005C"); + // Set state to file slash state. + state = state::FILE_SLASH; + } + // Otherwise, if base is non-null and base's scheme is "file": + else if (base_url != nullptr && base_url->type == scheme::type::FILE) { + // Set url's host to base's host, url's path to a clone of base's + // path, and url's query to base's query. + ada_log("FILE base non-null"); + if constexpr (result_type_is_ada_url) { + url.host = base_url->host; + url.path = base_url->path; + url.query = base_url->query; + } else { + url.update_host_to_base_host(base_url->get_hostname()); + url.update_base_pathname(base_url->get_pathname()); + url.update_base_search(base_url->get_search()); + } + url.has_opaque_path = base_url->has_opaque_path; + + // If c is U+003F (?), then set url's query to the empty string and + // state to query state. + if (input_position != input_size && url_data[input_position] == '?') { + state = state::QUERY; + } + // Otherwise, if c is not the EOF code point: + else if (input_position != input_size) { + // Set url's query to null. + url.clear_search(); + // If the code point substring from pointer to the end of input does + // not start with a Windows drive letter, then shorten url's path. + if (!checkers::is_windows_drive_letter(file_view)) { + if constexpr (result_type_is_ada_url) { + helpers::shorten_path(url.path, url.type); + } else { + std::string_view path = url.get_pathname(); + if (helpers::shorten_path(path, url.type)) { + url.update_base_pathname(std::move(std::string(path))); + } + } + } + // Otherwise: + else { + // Set url's path to an empty list. + url.clear_pathname(); + url.has_opaque_path = true; + } + + // Set state to path state and decrease pointer by 1. + state = state::PATH; + break; + } + } + // Otherwise, set state to path state, and decrease pointer by 1. + else { + ada_log("FILE go to path"); + state = state::PATH; + break; + } + + input_position++; + break; + } + default: + unreachable(); + } + } + if constexpr (store_values) { + if (fragment.has_value()) { + url.update_unencoded_base_hash(*fragment); + } + } + return url; +} + +template url parse_url_impl(std::string_view user_input, + const url* base_url = nullptr); +template url_aggregator parse_url_impl( + std::string_view user_input, const url_aggregator* base_url = nullptr); + +template +result_type parse_url(std::string_view user_input, + const result_type* base_url) { + return parse_url_impl(user_input, base_url); +} + +template url parse_url(std::string_view user_input, + const url* base_url = nullptr); +template url_aggregator parse_url( + std::string_view user_input, const url_aggregator* base_url = nullptr); +} // namespace ada::parser +/* end file src/parser.cpp */ +/* begin file src/url_components.cpp */ + +#include + +namespace ada { + +[[nodiscard]] std::string url_components::to_string() const { + std::string answer; + auto back = std::back_insert_iterator(answer); + answer.append("{\n"); + + answer.append("\t\"protocol_end\":\""); + helpers::encode_json(std::to_string(protocol_end), back); + answer.append("\",\n"); + + answer.append("\t\"username_end\":\""); + helpers::encode_json(std::to_string(username_end), back); + answer.append("\",\n"); + + answer.append("\t\"host_start\":\""); + helpers::encode_json(std::to_string(host_start), back); + answer.append("\",\n"); + + answer.append("\t\"host_end\":\""); + helpers::encode_json(std::to_string(host_end), back); + answer.append("\",\n"); + + answer.append("\t\"port\":\""); + helpers::encode_json(std::to_string(port), back); + answer.append("\",\n"); + + answer.append("\t\"pathname_start\":\""); + helpers::encode_json(std::to_string(pathname_start), back); + answer.append("\",\n"); + + answer.append("\t\"search_start\":\""); + helpers::encode_json(std::to_string(search_start), back); + answer.append("\",\n"); + + answer.append("\t\"hash_start\":\""); + helpers::encode_json(std::to_string(hash_start), back); + answer.append("\",\n"); + + answer.append("\n}"); + return answer; +} + +} // namespace ada +/* end file src/url_components.cpp */ +/* begin file src/url_aggregator.cpp */ + +#include +#include + +namespace ada { +template +[[nodiscard]] ada_really_inline bool url_aggregator::parse_scheme_with_colon( + const std::string_view input_with_colon) { + ada_log("url_aggregator::parse_scheme_with_colon ", input_with_colon); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input_with_colon, buffer)); + std::string_view input{input_with_colon}; + input.remove_suffix(1); + auto parsed_type = ada::scheme::get_scheme_type(input); + const bool is_input_special = (parsed_type != ada::scheme::NOT_SPECIAL); + /** + * In the common case, we will immediately recognize a special scheme (e.g., + *http, https), in which case, we can go really fast. + **/ + if (is_input_special) { // fast path!!! + if constexpr (has_state_override) { + // If url's scheme is not a special scheme and buffer is a special scheme, + // then return. + if (is_special() != is_input_special) { + return false; + } + + // If url includes credentials or has a non-null port, and buffer is + // "file", then return. + if ((has_credentials() || components.port != url_components::omitted) && + parsed_type == ada::scheme::type::FILE) { + return false; + } + + // If url's scheme is "file" and its host is an empty host, then return. + // An empty host is the empty string. + if (type == ada::scheme::type::FILE && + components.host_start == components.host_end) { + return false; + } + } + + type = parsed_type; + set_scheme_from_view_with_colon(input_with_colon); + + if constexpr (has_state_override) { + // This is uncommon. + uint16_t urls_scheme_port = get_special_port(); + + // If url's port is url's scheme's default port, then set url's port to + // null. + if (components.port == urls_scheme_port) { + clear_port(); + } + } + } else { // slow path + std::string _buffer(input); + // Next function is only valid if the input is ASCII and returns false + // otherwise, but it seems that we always have ascii content so we do not + // need to check the return value. + unicode::to_lower_ascii(_buffer.data(), _buffer.size()); + + if constexpr (has_state_override) { + // If url's scheme is a special scheme and buffer is not a special scheme, + // then return. If url's scheme is not a special scheme and buffer is a + // special scheme, then return. + if (is_special() != ada::scheme::is_special(_buffer)) { + return true; + } + + // If url includes credentials or has a non-null port, and buffer is + // "file", then return. + if ((has_credentials() || components.port != url_components::omitted) && + _buffer == "file") { + return true; + } + + // If url's scheme is "file" and its host is an empty host, then return. + // An empty host is the empty string. + if (type == ada::scheme::type::FILE && + components.host_start == components.host_end) { + return true; + } + } + + set_scheme(_buffer); + + if constexpr (has_state_override) { + // This is uncommon. + uint16_t urls_scheme_port = get_special_port(); + + // If url's port is url's scheme's default port, then set url's port to + // null. + if (components.port == urls_scheme_port) { + clear_port(); + } + } + } + ADA_ASSERT_TRUE(validate()); + return true; +} + +inline void url_aggregator::copy_scheme(const url_aggregator& u) noexcept { + ada_log("url_aggregator::copy_scheme ", u.buffer); + ADA_ASSERT_TRUE(validate()); + // next line could overflow but unsigned arithmetic has well-defined + // overflows. + uint32_t new_difference = u.components.protocol_end - components.protocol_end; + type = u.type; + buffer.erase(0, components.protocol_end); + buffer.insert(0, u.get_protocol()); + components.protocol_end = u.components.protocol_end; + + // No need to update the components + if (new_difference == 0) { + return; + } + + // Update the rest of the components. + components.username_end += new_difference; + components.host_start += new_difference; + components.host_end += new_difference; + components.pathname_start += new_difference; + if (components.search_start != url_components::omitted) { + components.search_start += new_difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += new_difference; + } + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::set_scheme_from_view_with_colon( + std::string_view new_scheme_with_colon) noexcept { + ada_log("url_aggregator::set_scheme_from_view_with_colon ", + new_scheme_with_colon); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!new_scheme_with_colon.empty() && + new_scheme_with_colon.back() == ':'); + // next line could overflow but unsigned arithmetic has well-defined + // overflows. + uint32_t new_difference = + uint32_t(new_scheme_with_colon.size()) - components.protocol_end; + + if (buffer.empty()) { + buffer.append(new_scheme_with_colon); + } else { + buffer.erase(0, components.protocol_end); + buffer.insert(0, new_scheme_with_colon); + } + components.protocol_end += new_difference; + + // Update the rest of the components. + components.username_end += new_difference; + components.host_start += new_difference; + components.host_end += new_difference; + components.pathname_start += new_difference; + if (components.search_start != url_components::omitted) { + components.search_start += new_difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += new_difference; + } + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::set_scheme(std::string_view new_scheme) noexcept { + ada_log("url_aggregator::set_scheme ", new_scheme); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(new_scheme.empty() || new_scheme.back() != ':'); + // next line could overflow but unsigned arithmetic has well-defined + // overflows. + uint32_t new_difference = + uint32_t(new_scheme.size()) - components.protocol_end + 1; + + type = ada::scheme::get_scheme_type(new_scheme); + if (buffer.empty()) { + buffer.append(helpers::concat(new_scheme, ":")); + } else { + buffer.erase(0, components.protocol_end); + buffer.insert(0, helpers::concat(new_scheme, ":")); + } + components.protocol_end = uint32_t(new_scheme.size() + 1); + + // Update the rest of the components. + components.username_end += new_difference; + components.host_start += new_difference; + components.host_end += new_difference; + components.pathname_start += new_difference; + if (components.search_start != url_components::omitted) { + components.search_start += new_difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += new_difference; + } + ADA_ASSERT_TRUE(validate()); +} + +bool url_aggregator::set_protocol(const std::string_view input) { + ada_log("url_aggregator::set_protocol ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + std::string view(input); + helpers::remove_ascii_tab_or_newline(view); + if (view.empty()) { + return true; + } + + // Schemes should start with alpha values. + if (!checkers::is_alpha(view[0])) { + return false; + } + + view.append(":"); + + std::string::iterator pointer = + std::ranges::find_if_not(view, unicode::is_alnum_plus); + + if (pointer != view.end() && *pointer == ':') { + return parse_scheme_with_colon( + std::string_view(view.data(), pointer - view.begin() + 1)); + } + return false; +} + +bool url_aggregator::set_username(const std::string_view input) { + ada_log("url_aggregator::set_username '", input, "' "); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (cannot_have_credentials_or_port()) { + return false; + } + size_t idx = ada::unicode::percent_encode_index( + input, character_sets::USERINFO_PERCENT_ENCODE); + if (idx == input.size()) { + update_base_username(input); + } else { + // We only create a temporary string if we have to! + update_base_username(ada::unicode::percent_encode( + input, character_sets::USERINFO_PERCENT_ENCODE, idx)); + } + ADA_ASSERT_TRUE(validate()); + return true; +} + +bool url_aggregator::set_password(const std::string_view input) { + ada_log("url_aggregator::set_password '", input, "'"); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (cannot_have_credentials_or_port()) { + return false; + } + size_t idx = ada::unicode::percent_encode_index( + input, character_sets::USERINFO_PERCENT_ENCODE); + if (idx == input.size()) { + update_base_password(input); + } else { + // We only create a temporary string if we have to! + update_base_password(ada::unicode::percent_encode( + input, character_sets::USERINFO_PERCENT_ENCODE, idx)); + } + ADA_ASSERT_TRUE(validate()); + return true; +} + +bool url_aggregator::set_port(const std::string_view input) { + ada_log("url_aggregator::set_port ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (cannot_have_credentials_or_port()) { + return false; + } + std::string trimmed(input); + helpers::remove_ascii_tab_or_newline(trimmed); + if (trimmed.empty()) { + clear_port(); + return true; + } + + // Input should not start with a non-digit character. + if (!ada::unicode::is_ascii_digit(trimmed.front())) { + return false; + } + + // Revert changes if parse_port fails. + uint32_t previous_port = components.port; + parse_port(trimmed); + if (is_valid) { + return true; + } + update_base_port(previous_port); + is_valid = true; + ADA_ASSERT_TRUE(validate()); + return false; +} + +bool url_aggregator::set_pathname(const std::string_view input) { + ada_log("url_aggregator::set_pathname ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (has_opaque_path) { + return false; + } + clear_pathname(); + parse_path(input); + if (get_pathname().starts_with("//") && !has_authority() && !has_dash_dot()) { + buffer.insert(components.pathname_start, "/."); + components.pathname_start += 2; + } + ADA_ASSERT_TRUE(validate()); + return true; +} + +ada_really_inline void url_aggregator::parse_path(std::string_view input) { + ada_log("url_aggregator::parse_path ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + std::string tmp_buffer; + std::string_view internal_input; + if (unicode::has_tabs_or_newline(input)) { + tmp_buffer = input; + // Optimization opportunity: Instead of copying and then pruning, we could + // just directly build the string from user_input. + helpers::remove_ascii_tab_or_newline(tmp_buffer); + internal_input = tmp_buffer; + } else { + internal_input = input; + } + + // If url is special, then: + if (is_special()) { + if (internal_input.empty()) { + update_base_pathname("/"); + } else if ((internal_input[0] == '/') || (internal_input[0] == '\\')) { + consume_prepared_path(internal_input.substr(1)); + } else { + consume_prepared_path(internal_input); + } + } else if (!internal_input.empty()) { + if (internal_input[0] == '/') { + consume_prepared_path(internal_input.substr(1)); + } else { + consume_prepared_path(internal_input); + } + } else { + // Non-special URLs with an empty host can have their paths erased + // Path-only URLs cannot have their paths erased + if (components.host_start == components.host_end && !has_authority()) { + update_base_pathname("/"); + } + } + ADA_ASSERT_TRUE(validate()); +} + +void url_aggregator::set_search(const std::string_view input) { + ada_log("url_aggregator::set_search ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (input.empty()) { + clear_search(); + helpers::strip_trailing_spaces_from_opaque_path(*this); + return; + } + + std::string new_value; + new_value = input[0] == '?' ? input.substr(1) : input; + helpers::remove_ascii_tab_or_newline(new_value); + + auto query_percent_encode_set = + is_special() ? ada::character_sets::SPECIAL_QUERY_PERCENT_ENCODE + : ada::character_sets::QUERY_PERCENT_ENCODE; + + update_base_search(new_value, query_percent_encode_set); + ADA_ASSERT_TRUE(validate()); +} + +void url_aggregator::set_hash(const std::string_view input) { + ada_log("url_aggregator::set_hash ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (input.empty()) { + if (components.hash_start != url_components::omitted) { + buffer.resize(components.hash_start); + components.hash_start = url_components::omitted; + } + helpers::strip_trailing_spaces_from_opaque_path(*this); + return; + } + + std::string new_value; + new_value = input[0] == '#' ? input.substr(1) : input; + helpers::remove_ascii_tab_or_newline(new_value); + update_unencoded_base_hash(new_value); + ADA_ASSERT_TRUE(validate()); +} + +bool url_aggregator::set_href(const std::string_view input) { + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + ada_log("url_aggregator::set_href ", input, " [", input.size(), " bytes]"); + ada::result out = ada::parse(input); + ada_log("url_aggregator::set_href, success :", out.has_value()); + + if (out) { + ada_log("url_aggregator::set_href, parsed ", out->to_string()); + // TODO: Figure out why the following line puts test to never finish. + *this = *out; + } + + return out.has_value(); +} + +ada_really_inline bool url_aggregator::parse_host(std::string_view input) { + ada_log("url_aggregator:parse_host \"", input, "\" [", input.size(), + " bytes]"); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (input.empty()) { + return is_valid = false; + } // technically unnecessary. + // If input starts with U+005B ([), then: + if (input[0] == '[') { + // If input does not end with U+005D (]), validation error, return failure. + if (input.back() != ']') { + return is_valid = false; + } + ada_log("parse_host ipv6"); + + // Return the result of IPv6 parsing input with its leading U+005B ([) and + // trailing U+005D (]) removed. + input.remove_prefix(1); + input.remove_suffix(1); + return parse_ipv6(input); + } + + // If isNotSpecial is true, then return the result of opaque-host parsing + // input. + if (!is_special()) { + return parse_opaque_host(input); + } + // Let domain be the result of running UTF-8 decode without BOM on the + // percent-decoding of input. Let asciiDomain be the result of running domain + // to ASCII with domain and false. The most common case is an ASCII input, in + // which case we do not need to call the expensive 'to_ascii' if a few + // conditions are met: no '%' and no 'xn-' subsequence. + + // Often, the input does not contain any forbidden code points, and no upper + // case ASCII letter, then we can just copy it to the buffer. We want to + // optimize for such a common case. + uint8_t is_forbidden_or_upper = + unicode::contains_forbidden_domain_code_point_or_upper(input.data(), + input.size()); + // Minor optimization opportunity: + // contains_forbidden_domain_code_point_or_upper could be extend to check for + // the presence of characters that cannot appear in the ipv4 address and we + // could also check whether x and n and - are present, and so we could skip + // some of the checks below. However, the gains are likely to be small, and + // the code would be more complex. + if (is_forbidden_or_upper == 0 && + input.find("xn-") == std::string_view::npos) { + // fast path + update_base_hostname(input); + if (checkers::is_ipv4(get_hostname())) { + ada_log("parse_host fast path ipv4"); + return parse_ipv4(get_hostname(), true); + } + ada_log("parse_host fast path ", get_hostname()); + return true; + } + // We have encountered at least one forbidden code point or the input contains + // 'xn-' (case insensitive), so we need to call 'to_ascii' to perform the full + // conversion. + + ada_log("parse_host calling to_ascii"); + std::optional host = std::string(get_hostname()); + is_valid = ada::unicode::to_ascii(host, input, input.find('%')); + if (!is_valid) { + ada_log("parse_host to_ascii returns false"); + return is_valid = false; + } + ada_log("parse_host to_ascii succeeded ", *host, " [", host->size(), + " bytes]"); + + if (std::any_of(host.value().begin(), host.value().end(), + ada::unicode::is_forbidden_domain_code_point)) { + return is_valid = false; + } + + // If asciiDomain ends in a number, then return the result of IPv4 parsing + // asciiDomain. + if (checkers::is_ipv4(host.value())) { + ada_log("parse_host got ipv4 ", *host); + return parse_ipv4(host.value(), false); + } + + update_base_hostname(host.value()); + ADA_ASSERT_TRUE(validate()); + return true; +} + +template +bool url_aggregator::set_host_or_hostname(const std::string_view input) { + ada_log("url_aggregator::set_host_or_hostname ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (has_opaque_path) { + return false; + } + + std::string previous_host(get_hostname()); + uint32_t previous_port = components.port; + + size_t host_end_pos = input.find('#'); + std::string _host(input.data(), host_end_pos != std::string_view::npos + ? host_end_pos + : input.size()); + helpers::remove_ascii_tab_or_newline(_host); + std::string_view new_host(_host); + + // If url's scheme is "file", then set state to file host state, instead of + // host state. + if (type != ada::scheme::type::FILE) { + std::string_view host_view(_host.data(), _host.length()); + auto [location, found_colon] = + helpers::get_host_delimiter_location(is_special(), host_view); + + // Otherwise, if c is U+003A (:) and insideBrackets is false, then: + // Note: the 'found_colon' value is true if and only if a colon was + // encountered while not inside brackets. + if (found_colon) { + if constexpr (override_hostname) { + return false; + } + std::string_view sub_buffer = new_host.substr(location + 1); + if (!sub_buffer.empty()) { + set_port(sub_buffer); + } + } + // If url is special and host_view is the empty string, validation error, + // return failure. Otherwise, if state override is given, host_view is the + // empty string, and either url includes credentials or url's port is + // non-null, return. + else if (host_view.empty() && + (is_special() || has_credentials() || has_port())) { + return false; + } + + // Let host be the result of host parsing host_view with url is not special. + if (host_view.empty() && !is_special()) { + if (has_hostname()) { + clear_hostname(); // easy! + } else if (has_dash_dot()) { + add_authority_slashes_if_needed(); + delete_dash_dot(); + } + return true; + } + + bool succeeded = parse_host(host_view); + if (!succeeded) { + update_base_hostname(previous_host); + update_base_port(previous_port); + } else if (has_dash_dot()) { + // Should remove dash_dot from pathname + delete_dash_dot(); + } + return succeeded; + } + + size_t location = new_host.find_first_of("/\\?"); + if (location != std::string_view::npos) { + new_host.remove_suffix(new_host.length() - location); + } + + if (new_host.empty()) { + // Set url's host to the empty string. + clear_hostname(); + } else { + // Let host be the result of host parsing buffer with url is not special. + if (!parse_host(new_host)) { + update_base_hostname(previous_host); + update_base_port(previous_port); + return false; + } + + // If host is "localhost", then set host to the empty string. + if (helpers::substring(buffer, components.host_start, + components.host_end) == "localhost") { + clear_hostname(); + } + } + ADA_ASSERT_TRUE(validate()); + return true; +} + +bool url_aggregator::set_host(const std::string_view input) { + ada_log("url_aggregator::set_host '", input, "'"); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + return set_host_or_hostname(input); +} + +bool url_aggregator::set_hostname(const std::string_view input) { + ada_log("url_aggregator::set_hostname '", input, "'"); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + return set_host_or_hostname(input); +} + +[[nodiscard]] std::string url_aggregator::get_origin() const noexcept { + ada_log("url_aggregator::get_origin"); + if (is_special()) { + // Return a new opaque origin. + if (type == scheme::FILE) { + return "null"; + } + + return helpers::concat(get_protocol(), "//", get_host()); + } + + if (get_protocol() == "blob:") { + std::string_view path = get_pathname(); + if (!path.empty()) { + auto out = ada::parse(path); + if (out && (out->type == scheme::HTTP || out->type == scheme::HTTPS)) { + // If pathURL's scheme is not "http" and not "https", then return a + // new opaque origin. + return helpers::concat(out->get_protocol(), "//", out->get_host()); + } + } + } + + // Return a new opaque origin. + return "null"; +} + +[[nodiscard]] std::string_view url_aggregator::get_username() const noexcept + ada_lifetime_bound { + ada_log("url_aggregator::get_username"); + if (has_non_empty_username()) { + return helpers::substring(buffer, components.protocol_end + 2, + components.username_end); + } + return ""; +} + +[[nodiscard]] std::string_view url_aggregator::get_password() const noexcept + ada_lifetime_bound { + ada_log("url_aggregator::get_password"); + if (has_non_empty_password()) { + return helpers::substring(buffer, components.username_end + 1, + components.host_start); + } + return ""; +} + +[[nodiscard]] std::string_view url_aggregator::get_port() const noexcept + ada_lifetime_bound { + ada_log("url_aggregator::get_port"); + if (components.port == url_components::omitted) { + return ""; + } + return helpers::substring(buffer, components.host_end + 1, + components.pathname_start); +} + +[[nodiscard]] std::string_view url_aggregator::get_hash() const noexcept + ada_lifetime_bound { + ada_log("url_aggregator::get_hash"); + // If this's URL's fragment is either null or the empty string, then return + // the empty string. Return U+0023 (#), followed by this's URL's fragment. + if (components.hash_start == url_components::omitted) { + return ""; + } + if (buffer.size() - components.hash_start <= 1) { + return ""; + } + return helpers::substring(buffer, components.hash_start); +} + +[[nodiscard]] std::string_view url_aggregator::get_host() const noexcept + ada_lifetime_bound { + ada_log("url_aggregator::get_host"); + // Technically, we should check if there is a hostname, but + // the code below works even if there isn't. + // if(!has_hostname()) { return ""; } + size_t start = components.host_start; + if (components.host_end > components.host_start && + buffer[components.host_start] == '@') { + start++; + } + // if we have an empty host, then the space between components.host_end and + // components.pathname_start may be occupied by /. + if (start == components.host_end) { + return {}; + } + return helpers::substring(buffer, start, components.pathname_start); +} + +[[nodiscard]] std::string_view url_aggregator::get_hostname() const noexcept + ada_lifetime_bound { + ada_log("url_aggregator::get_hostname"); + // Technically, we should check if there is a hostname, but + // the code below works even if there isn't. + // if(!has_hostname()) { return ""; } + size_t start = components.host_start; + // So host_start is not where the host begins. + if (components.host_end > components.host_start && + buffer[components.host_start] == '@') { + start++; + } + return helpers::substring(buffer, start, components.host_end); +} + +[[nodiscard]] std::string_view url_aggregator::get_search() const noexcept + ada_lifetime_bound { + ada_log("url_aggregator::get_search"); + // If this's URL's query is either null or the empty string, then return the + // empty string. Return U+003F (?), followed by this's URL's query. + if (components.search_start == url_components::omitted) { + return ""; + } + auto ending_index = uint32_t(buffer.size()); + if (components.hash_start != url_components::omitted) { + ending_index = components.hash_start; + } + if (ending_index - components.search_start <= 1) { + return ""; + } + return helpers::substring(buffer, components.search_start, ending_index); +} + +[[nodiscard]] std::string_view url_aggregator::get_protocol() const noexcept + ada_lifetime_bound { + ada_log("url_aggregator::get_protocol"); + return helpers::substring(buffer, 0, components.protocol_end); +} + +[[nodiscard]] std::string ada::url_aggregator::to_string() const { + ada_log("url_aggregator::to_string buffer:", buffer, " [", buffer.size(), + " bytes]"); + if (!is_valid) { + return "null"; + } + + std::string answer; + auto back = std::back_insert_iterator(answer); + answer.append("{\n"); + + answer.append("\t\"buffer\":\""); + helpers::encode_json(buffer, back); + answer.append("\",\n"); + + answer.append("\t\"protocol\":\""); + helpers::encode_json(get_protocol(), back); + answer.append("\",\n"); + + if (has_credentials()) { + answer.append("\t\"username\":\""); + helpers::encode_json(get_username(), back); + answer.append("\",\n"); + answer.append("\t\"password\":\""); + helpers::encode_json(get_password(), back); + answer.append("\",\n"); + } + + answer.append("\t\"host\":\""); + helpers::encode_json(get_host(), back); + answer.append("\",\n"); + + answer.append("\t\"path\":\""); + helpers::encode_json(get_pathname(), back); + answer.append("\",\n"); + answer.append("\t\"opaque path\":"); + answer.append((has_opaque_path ? "true" : "false")); + answer.append(",\n"); + + if (components.search_start != url_components::omitted) { + answer.append("\t\"query\":\""); + helpers::encode_json(get_search(), back); + answer.append("\",\n"); + } + if (components.hash_start != url_components::omitted) { + answer.append("\t\"fragment\":\""); + helpers::encode_json(get_hash(), back); + answer.append("\",\n"); + } + + auto convert_offset_to_string = [](uint32_t offset) -> std::string { + if (offset == url_components::omitted) { + return "null"; + } else { + return std::to_string(offset); + } + }; + + answer.append("\t\"protocol_end\":"); + answer.append(convert_offset_to_string(components.protocol_end)); + answer.append(",\n"); + + answer.append("\t\"username_end\":"); + answer.append(convert_offset_to_string(components.username_end)); + answer.append(",\n"); + + answer.append("\t\"host_start\":"); + answer.append(convert_offset_to_string(components.host_start)); + answer.append(",\n"); + + answer.append("\t\"host_end\":"); + answer.append(convert_offset_to_string(components.host_end)); + answer.append(",\n"); + + answer.append("\t\"port\":"); + answer.append(convert_offset_to_string(components.port)); + answer.append(",\n"); + + answer.append("\t\"pathname_start\":"); + answer.append(convert_offset_to_string(components.pathname_start)); + answer.append(",\n"); + + answer.append("\t\"search_start\":"); + answer.append(convert_offset_to_string(components.search_start)); + answer.append(",\n"); + + answer.append("\t\"hash_start\":"); + answer.append(convert_offset_to_string(components.hash_start)); + answer.append("\n}"); + + return answer; +} + +[[nodiscard]] bool url_aggregator::has_valid_domain() const noexcept { + if (components.host_start == components.host_end) { + return false; + } + return checkers::verify_dns_length(get_hostname()); +} + +bool url_aggregator::parse_ipv4(std::string_view input, bool in_place) { + ada_log("parse_ipv4 ", input, " [", input.size(), + " bytes], overlaps with buffer: ", + helpers::overlaps(input, buffer) ? "yes" : "no"); + ADA_ASSERT_TRUE(validate()); + const bool trailing_dot = (input.back() == '.'); + if (trailing_dot) { + input.remove_suffix(1); + } + size_t digit_count{0}; + int pure_decimal_count = 0; // entries that are decimal + uint64_t ipv4{0}; + // we could unroll for better performance? + for (; (digit_count < 4) && !(input.empty()); digit_count++) { + uint32_t + segment_result{}; // If any number exceeds 32 bits, we have an error. + bool is_hex = checkers::has_hex_prefix(input); + if (is_hex && ((input.length() == 2) || + ((input.length() > 2) && (input[2] == '.')))) { + // special case + segment_result = 0; + input.remove_prefix(2); + } else { + std::from_chars_result r{}; + if (is_hex) { + ada_log("parse_ipv4 trying to parse hex number"); + r = std::from_chars(input.data() + 2, input.data() + input.size(), + segment_result, 16); + } else if ((input.length() >= 2) && input[0] == '0' && + checkers::is_digit(input[1])) { + ada_log("parse_ipv4 trying to parse octal number"); + r = std::from_chars(input.data() + 1, input.data() + input.size(), + segment_result, 8); + } else { + ada_log("parse_ipv4 trying to parse decimal number"); + pure_decimal_count++; + r = std::from_chars(input.data(), input.data() + input.size(), + segment_result, 10); + } + if (r.ec != std::errc()) { + ada_log("parse_ipv4 parsing failed"); + return is_valid = false; + } + ada_log("parse_ipv4 parsed ", segment_result); + input.remove_prefix(r.ptr - input.data()); + } + if (input.empty()) { + // We have the last value. + // At this stage, ipv4 contains digit_count*8 bits. + // So we have 32-digit_count*8 bits left. + if (segment_result >= (uint64_t(1) << (32 - digit_count * 8))) { + return is_valid = false; + } + ipv4 <<= (32 - digit_count * 8); + ipv4 |= segment_result; + goto final; + } else { + // There is more, so that the value must no be larger than 255 + // and we must have a '.'. + if ((segment_result > 255) || (input[0] != '.')) { + return is_valid = false; + } + ipv4 <<= 8; + ipv4 |= segment_result; + input.remove_prefix(1); // remove '.' + } + } + if ((digit_count != 4) || (!input.empty())) { + ada_log("parse_ipv4 found invalid (more than 4 numbers or empty) "); + return is_valid = false; + } +final: + ada_log("url_aggregator::parse_ipv4 completed ", get_href(), + " host: ", get_host()); + + // We could also check r.ptr to see where the parsing ended. + if (in_place && pure_decimal_count == 4 && !trailing_dot) { + ada_log( + "url_aggregator::parse_ipv4 completed and was already correct in the " + "buffer"); + // The original input was already all decimal and we validated it. So we + // don't need to do anything. + } else { + ada_log("url_aggregator::parse_ipv4 completed and we need to update it"); + // Optimization opportunity: Get rid of unnecessary string return in ipv4 + // serializer. + // TODO: This is likely a bug because it goes back update_base_hostname, not + // what we want to do. + update_base_hostname( + ada::serializers::ipv4(ipv4)); // We have to reserialize the address. + } + host_type = IPV4; + ADA_ASSERT_TRUE(validate()); + return true; +} + +bool url_aggregator::parse_ipv6(std::string_view input) { + // TODO: Implement in_place optimization: we know that input points + // in the buffer, so we can just check whether the buffer is already + // well formatted. + // TODO: Find a way to merge parse_ipv6 with url.cpp implementation. + ada_log("parse_ipv6 ", input, " [", input.size(), " bytes]"); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (input.empty()) { + return is_valid = false; + } + // Let address be a new IPv6 address whose IPv6 pieces are all 0. + std::array address{}; + + // Let pieceIndex be 0. + int piece_index = 0; + + // Let compress be null. + std::optional compress{}; + + // Let pointer be a pointer for input. + std::string_view::iterator pointer = input.begin(); + + // If c is U+003A (:), then: + if (input[0] == ':') { + // If remaining does not start with U+003A (:), validation error, return + // failure. + if (input.size() == 1 || input[1] != ':') { + ada_log("parse_ipv6 starts with : but the rest does not start with :"); + return is_valid = false; + } + + // Increase pointer by 2. + pointer += 2; + + // Increase pieceIndex by 1 and then set compress to pieceIndex. + compress = ++piece_index; + } + + // While c is not the EOF code point: + while (pointer != input.end()) { + // If pieceIndex is 8, validation error, return failure. + if (piece_index == 8) { + ada_log("parse_ipv6 piece_index == 8"); + return is_valid = false; + } + + // If c is U+003A (:), then: + if (*pointer == ':') { + // If compress is non-null, validation error, return failure. + if (compress.has_value()) { + ada_log("parse_ipv6 compress is non-null"); + return is_valid = false; + } + + // Increase pointer and pieceIndex by 1, set compress to pieceIndex, and + // then continue. + pointer++; + compress = ++piece_index; + continue; + } + + // Let value and length be 0. + uint16_t value = 0, length = 0; + + // While length is less than 4 and c is an ASCII hex digit, + // set value to value times 0x10 + c interpreted as hexadecimal number, and + // increase pointer and length by 1. + while (length < 4 && pointer != input.end() && + unicode::is_ascii_hex_digit(*pointer)) { + // https://stackoverflow.com/questions/39060852/why-does-the-addition-of-two-shorts-return-an-int + value = uint16_t(value * 0x10 + unicode::convert_hex_to_binary(*pointer)); + pointer++; + length++; + } + + // If c is U+002E (.), then: + if (pointer != input.end() && *pointer == '.') { + // If length is 0, validation error, return failure. + if (length == 0) { + ada_log("parse_ipv6 length is 0"); + return is_valid = false; + } + + // Decrease pointer by length. + pointer -= length; + + // If pieceIndex is greater than 6, validation error, return failure. + if (piece_index > 6) { + ada_log("parse_ipv6 piece_index > 6"); + return is_valid = false; + } + + // Let numbersSeen be 0. + int numbers_seen = 0; + + // While c is not the EOF code point: + while (pointer != input.end()) { + // Let ipv4Piece be null. + std::optional ipv4_piece{}; + + // If numbersSeen is greater than 0, then: + if (numbers_seen > 0) { + // If c is a U+002E (.) and numbersSeen is less than 4, then increase + // pointer by 1. + if (*pointer == '.' && numbers_seen < 4) { + pointer++; + } else { + // Otherwise, validation error, return failure. + ada_log("parse_ipv6 Otherwise, validation error, return failure"); + return is_valid = false; + } + } + + // If c is not an ASCII digit, validation error, return failure. + if (pointer == input.end() || !checkers::is_digit(*pointer)) { + ada_log( + "parse_ipv6 If c is not an ASCII digit, validation error, return " + "failure"); + return is_valid = false; + } + + // While c is an ASCII digit: + while (pointer != input.end() && checkers::is_digit(*pointer)) { + // Let number be c interpreted as decimal number. + int number = *pointer - '0'; + + // If ipv4Piece is null, then set ipv4Piece to number. + if (!ipv4_piece.has_value()) { + ipv4_piece = number; + } + // Otherwise, if ipv4Piece is 0, validation error, return failure. + else if (ipv4_piece == 0) { + ada_log("parse_ipv6 if ipv4Piece is 0, validation error"); + return is_valid = false; + } + // Otherwise, set ipv4Piece to ipv4Piece times 10 + number. + else { + ipv4_piece = *ipv4_piece * 10 + number; + } + + // If ipv4Piece is greater than 255, validation error, return failure. + if (ipv4_piece > 255) { + ada_log("parse_ipv6 ipv4_piece > 255"); + return is_valid = false; + } + + // Increase pointer by 1. + pointer++; + } + + // Set address[pieceIndex] to address[pieceIndex] times 0x100 + + // ipv4Piece. + // https://stackoverflow.com/questions/39060852/why-does-the-addition-of-two-shorts-return-an-int + address[piece_index] = + uint16_t(address[piece_index] * 0x100 + *ipv4_piece); + + // Increase numbersSeen by 1. + numbers_seen++; + + // If numbersSeen is 2 or 4, then increase pieceIndex by 1. + if (numbers_seen == 2 || numbers_seen == 4) { + piece_index++; + } + } + + // If numbersSeen is not 4, validation error, return failure. + if (numbers_seen != 4) { + return is_valid = false; + } + + // Break. + break; + } + // Otherwise, if c is U+003A (:): + else if ((pointer != input.end()) && (*pointer == ':')) { + // Increase pointer by 1. + pointer++; + + // If c is the EOF code point, validation error, return failure. + if (pointer == input.end()) { + ada_log( + "parse_ipv6 If c is the EOF code point, validation error, return " + "failure"); + return is_valid = false; + } + } + // Otherwise, if c is not the EOF code point, validation error, return + // failure. + else if (pointer != input.end()) { + ada_log( + "parse_ipv6 Otherwise, if c is not the EOF code point, validation " + "error, return failure"); + return is_valid = false; + } + + // Set address[pieceIndex] to value. + address[piece_index] = value; + + // Increase pieceIndex by 1. + piece_index++; + } + + // If compress is non-null, then: + if (compress.has_value()) { + // Let swaps be pieceIndex - compress. + int swaps = piece_index - *compress; + + // Set pieceIndex to 7. + piece_index = 7; + + // While pieceIndex is not 0 and swaps is greater than 0, + // swap address[pieceIndex] with address[compress + swaps - 1], and then + // decrease both pieceIndex and swaps by 1. + while (piece_index != 0 && swaps > 0) { + std::swap(address[piece_index], address[*compress + swaps - 1]); + piece_index--; + swaps--; + } + } + // Otherwise, if compress is null and pieceIndex is not 8, validation error, + // return failure. + else if (piece_index != 8) { + ada_log( + "parse_ipv6 if compress is null and pieceIndex is not 8, validation " + "error, return failure"); + return is_valid = false; + } + // TODO: Optimization opportunity: Get rid of unnecessary string creation. + // TODO: This is likely a bug because it goes back update_base_hostname, not + // what we want to do. + update_base_hostname(ada::serializers::ipv6(address)); + ada_log("parse_ipv6 ", get_hostname()); + ADA_ASSERT_TRUE(validate()); + host_type = IPV6; + return true; +} + +bool url_aggregator::parse_opaque_host(std::string_view input) { + ada_log("parse_opaque_host ", input, " [", input.size(), " bytes]"); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (std::any_of(input.begin(), input.end(), + ada::unicode::is_forbidden_host_code_point)) { + return is_valid = false; + } + + // Return the result of running UTF-8 percent-encode on input using the C0 + // control percent-encode set. + size_t idx = ada::unicode::percent_encode_index( + input, character_sets::C0_CONTROL_PERCENT_ENCODE); + if (idx == input.size()) { + update_base_hostname(input); + } else { + // We only create a temporary string if we need to. + update_base_hostname(ada::unicode::percent_encode( + input, character_sets::C0_CONTROL_PERCENT_ENCODE, idx)); + } + ADA_ASSERT_TRUE(validate()); + return true; +} + +[[nodiscard]] std::string url_aggregator::to_diagram() const { + if (!is_valid) { + return "invalid"; + } + std::string answer; + answer.append(buffer); + answer.append(" ["); + answer.append(std::to_string(buffer.size())); + answer.append(" bytes]"); + answer.append("\n"); + // first line + std::string line1; + line1.resize(buffer.size(), ' '); + if (components.hash_start != url_components::omitted) { + line1[components.hash_start] = '|'; + } + if (components.search_start != url_components::omitted) { + line1[components.search_start] = '|'; + } + if (components.pathname_start != buffer.size()) { + line1[components.pathname_start] = '|'; + } + if (components.host_end != buffer.size()) { + line1[components.host_end] = '|'; + } + if (components.host_start != buffer.size()) { + line1[components.host_start] = '|'; + } + if (components.username_end != buffer.size()) { + line1[components.username_end] = '|'; + } + if (components.protocol_end != buffer.size()) { + line1[components.protocol_end] = '|'; + } + answer.append(line1); + answer.append("\n"); + + std::string line2 = line1; + if (components.hash_start != url_components::omitted) { + line2[components.hash_start] = '`'; + line1[components.hash_start] = ' '; + + for (size_t i = components.hash_start + 1; i < line2.size(); i++) { + line2[i] = '-'; + } + line2.append(" hash_start"); + answer.append(line2); + answer.append("\n"); + } + + std::string line3 = line1; + if (components.search_start != url_components::omitted) { + line3[components.search_start] = '`'; + line1[components.search_start] = ' '; + + for (size_t i = components.search_start + 1; i < line3.size(); i++) { + line3[i] = '-'; + } + line3.append(" search_start "); + line3.append(std::to_string(components.search_start)); + answer.append(line3); + answer.append("\n"); + } + + std::string line4 = line1; + if (components.pathname_start != buffer.size()) { + line4[components.pathname_start] = '`'; + line1[components.pathname_start] = ' '; + for (size_t i = components.pathname_start + 1; i < line4.size(); i++) { + line4[i] = '-'; + } + line4.append(" pathname_start "); + line4.append(std::to_string(components.pathname_start)); + answer.append(line4); + answer.append("\n"); + } + + std::string line5 = line1; + if (components.host_end != buffer.size()) { + line5[components.host_end] = '`'; + line1[components.host_end] = ' '; + + for (size_t i = components.host_end + 1; i < line5.size(); i++) { + line5[i] = '-'; + } + line5.append(" host_end "); + line5.append(std::to_string(components.host_end)); + answer.append(line5); + answer.append("\n"); + } + + std::string line6 = line1; + if (components.host_start != buffer.size()) { + line6[components.host_start] = '`'; + line1[components.host_start] = ' '; + + for (size_t i = components.host_start + 1; i < line6.size(); i++) { + line6[i] = '-'; + } + line6.append(" host_start "); + line6.append(std::to_string(components.host_start)); + answer.append(line6); + answer.append("\n"); + } + + std::string line7 = line1; + if (components.username_end != buffer.size()) { + line7[components.username_end] = '`'; + line1[components.username_end] = ' '; + + for (size_t i = components.username_end + 1; i < line7.size(); i++) { + line7[i] = '-'; + } + line7.append(" username_end "); + line7.append(std::to_string(components.username_end)); + answer.append(line7); + answer.append("\n"); + } + + std::string line8 = line1; + if (components.protocol_end != buffer.size()) { + line8[components.protocol_end] = '`'; + line1[components.protocol_end] = ' '; + + for (size_t i = components.protocol_end + 1; i < line8.size(); i++) { + line8[i] = '-'; + } + line8.append(" protocol_end "); + line8.append(std::to_string(components.protocol_end)); + answer.append(line8); + answer.append("\n"); + } + + if (components.hash_start == url_components::omitted) { + answer.append("note: hash omitted\n"); + } + if (components.search_start == url_components::omitted) { + answer.append("note: search omitted\n"); + } + if (components.protocol_end > buffer.size()) { + answer.append("warning: protocol_end overflows\n"); + } + if (components.username_end > buffer.size()) { + answer.append("warning: username_end overflows\n"); + } + if (components.host_start > buffer.size()) { + answer.append("warning: host_start overflows\n"); + } + if (components.host_end > buffer.size()) { + answer.append("warning: host_end overflows\n"); + } + if (components.pathname_start > buffer.size()) { + answer.append("warning: pathname_start overflows\n"); + } + return answer; +} + +void url_aggregator::delete_dash_dot() { + ada_log("url_aggregator::delete_dash_dot"); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(has_dash_dot()); + buffer.erase(components.host_end, 2); + components.pathname_start -= 2; + if (components.search_start != url_components::omitted) { + components.search_start -= 2; + } + if (components.hash_start != url_components::omitted) { + components.hash_start -= 2; + } + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!has_dash_dot()); +} + +inline void url_aggregator::consume_prepared_path(std::string_view input) { + ada_log("url_aggregator::consume_prepared_path ", input); + /*** + * This is largely duplicated code from helpers::parse_prepared_path, which is + * unfortunate. This particular function is nearly identical, except that it + * is a method on url_aggregator. The idea is that the trivial path (which is + * very common) merely appends to the buffer. This is the same trivial path as + * with helpers::parse_prepared_path, except that we have the additional check + * for is_at_path(). Otherwise, we grab a copy of the current path and we + * modify it, and then insert it back into the buffer. + */ + uint8_t accumulator = checkers::path_signature(input); + // Let us first detect a trivial case. + // If it is special, we check that we have no dot, no %, no \ and no + // character needing percent encoding. Otherwise, we check that we have no %, + // no dot, and no character needing percent encoding. + constexpr uint8_t need_encoding = 1; + constexpr uint8_t backslash_char = 2; + constexpr uint8_t dot_char = 4; + constexpr uint8_t percent_char = 8; + bool special = type != ada::scheme::NOT_SPECIAL; + bool may_need_slow_file_handling = (type == ada::scheme::type::FILE && + checkers::is_windows_drive_letter(input)); + bool trivial_path = + (special ? (accumulator == 0) + : ((accumulator & (need_encoding | dot_char | percent_char)) == + 0)) && + (!may_need_slow_file_handling); + if (accumulator == dot_char && !may_need_slow_file_handling) { + // '4' means that we have at least one dot, but nothing that requires + // percent encoding or decoding. The only part that is not trivial is + // that we may have single dots and double dots path segments. + // If we have such segments, then we either have a path that begins + // with '.' (easy to check), or we have the sequence './'. + // Note: input cannot be empty, it must at least contain one character ('.') + // Note: we know that '\' is not present. + if (input[0] != '.') { + size_t slashdot = input.find("/."); + if (slashdot == std::string_view::npos) { // common case + trivial_path = true; + } else { // uncommon + // only three cases matter: /./, /.. or a final / + trivial_path = + !(slashdot + 2 == input.size() || input[slashdot + 2] == '.' || + input[slashdot + 2] == '/'); + } + } + } + if (trivial_path && is_at_path()) { + ada_log("parse_path trivial"); + buffer += '/'; + buffer += input; + return; + } + std::string path = std::string(get_pathname()); + // We are going to need to look a bit at the path, but let us see if we can + // ignore percent encoding *and* backslashes *and* percent characters. + // Except for the trivial case, this is likely to capture 99% of paths out + // there. + bool fast_path = + (special && + (accumulator & (need_encoding | backslash_char | percent_char)) == 0) && + (type != ada::scheme::type::FILE); + if (fast_path) { + ada_log("parse_prepared_path fast"); + // Here we don't need to worry about \ or percent encoding. + // We also do not have a file protocol. We might have dots, however, + // but dots must as appear as '.', and they cannot be encoded because + // the symbol '%' is not present. + size_t previous_location = 0; // We start at 0. + do { + size_t new_location = input.find('/', previous_location); + // std::string_view path_view = input; + // We process the last segment separately: + if (new_location == std::string_view::npos) { + std::string_view path_view = input.substr(previous_location); + if (path_view == "..") { // The path ends with .. + // e.g., if you receive ".." with an empty path, you go to "/". + if (path.empty()) { + path = '/'; + update_base_pathname(path); + return; + } + // Fast case where we have nothing to do: + if (path.back() == '/') { + update_base_pathname(path); + return; + } + // If you have the path "/joe/myfriend", + // then you delete 'myfriend'. + path.resize(path.rfind('/') + 1); + update_base_pathname(path); + return; + } + path += '/'; + if (path_view != ".") { + path.append(path_view); + } + update_base_pathname(path); + return; + } else { + // This is a non-final segment. + std::string_view path_view = + input.substr(previous_location, new_location - previous_location); + previous_location = new_location + 1; + if (path_view == "..") { + size_t last_delimiter = path.rfind('/'); + if (last_delimiter != std::string::npos) { + path.erase(last_delimiter); + } + } else if (path_view != ".") { + path += '/'; + path.append(path_view); + } + } + } while (true); + } else { + ada_log("parse_path slow"); + // we have reached the general case + bool needs_percent_encoding = (accumulator & 1); + std::string path_buffer_tmp; + do { + size_t location = (special && (accumulator & 2)) + ? input.find_first_of("/\\") + : input.find('/'); + std::string_view path_view = input; + if (location != std::string_view::npos) { + path_view.remove_suffix(path_view.size() - location); + input.remove_prefix(location + 1); + } + // path_buffer is either path_view or it might point at a percent encoded + // temporary string. + std::string_view path_buffer = + (needs_percent_encoding && + ada::unicode::percent_encode( + path_view, character_sets::PATH_PERCENT_ENCODE, path_buffer_tmp)) + ? path_buffer_tmp + : path_view; + if (unicode::is_double_dot_path_segment(path_buffer)) { + if ((helpers::shorten_path(path, type) || special) && + location == std::string_view::npos) { + path += '/'; + } + } else if (unicode::is_single_dot_path_segment(path_buffer) && + (location == std::string_view::npos)) { + path += '/'; + } + // Otherwise, if path_buffer is not a single-dot path segment, then: + else if (!unicode::is_single_dot_path_segment(path_buffer)) { + // If url's scheme is "file", url's path is empty, and path_buffer is a + // Windows drive letter, then replace the second code point in + // path_buffer with U+003A (:). + if (type == ada::scheme::type::FILE && path.empty() && + checkers::is_windows_drive_letter(path_buffer)) { + path += '/'; + path += path_buffer[0]; + path += ':'; + path_buffer.remove_prefix(2); + path.append(path_buffer); + } else { + // Append path_buffer to url's path. + path += '/'; + path.append(path_buffer); + } + } + if (location == std::string_view::npos) { + update_base_pathname(path); + return; + } + } while (true); + } +} +} // namespace ada +/* end file src/url_aggregator.cpp */ +/* begin file src/url_pattern.cpp */ + +#include +#include +#include + +namespace ada { + +tl::expected url_pattern_init::process( + url_pattern_init init, std::string_view type, + std::optional protocol, + std::optional username, + std::optional password, + std::optional hostname, + std::optional port, + std::optional pathname, + std::optional search, + std::optional hash) { + // Let result be the result of creating a new URLPatternInit. + auto result = url_pattern_init{}; + + // If protocol is not null, set result["protocol"] to protocol. + if (protocol.has_value()) result.protocol = *protocol; + + // If username is not null, set result["username"] to username. + if (username.has_value()) result.username = *username; + + // If password is not null, set result["password"] to password. + if (password.has_value()) result.password = *password; + + // If hostname is not null, set result["hostname"] to hostname. + if (hostname.has_value()) result.hostname = *hostname; + + // If port is not null, set result["port"] to port. + if (port.has_value()) result.port = *port; + + // If pathname is not null, set result["pathname"] to pathname. + if (pathname.has_value()) result.pathname = *pathname; + + // If search is not null, set result["search"] to search. + if (search.has_value()) result.search = *search; + + // If hash is not null, set result["hash"] to hash. + if (hash.has_value()) result.hash = *hash; + + // Let baseURL be null. + std::optional base_url{}; + + // If init["baseURL"] exists: + if (init.base_url.has_value()) { + // Set baseURL to the result of parsing init["baseURL"]. + auto parsing_result = ada::parse(*init.base_url); + // If baseURL is failure, then throw a TypeError. + if (!parsing_result) { + return tl::unexpected(errors::type_error); + } + base_url = std::move(*parsing_result); + + // If init["protocol"] does not exist, then set result["protocol"] to the + // result of processing a base URL string given baseURL’s scheme and type. + if (!init.protocol.has_value()) { + ADA_ASSERT_TRUE(base_url.has_value()); + std::string_view base_url_protocol = base_url->get_protocol(); + if (base_url_protocol.ends_with(":")) base_url_protocol.remove_suffix(1); + result.protocol = + url_pattern_helpers::process_base_url_string(base_url_protocol, type); + } + + // If type is not "pattern" and init contains none of "protocol", + // "hostname", "port" and "username", then set result["username"] to the + // result of processing a base URL string given baseURL’s username and type. + if (type != "pattern" && !init.protocol && !init.hostname && !init.port && + !init.username) { + result.username = url_pattern_helpers::process_base_url_string( + base_url->get_username(), type); + } + + // TODO: Optimization opportunity: Merge this with the previous check. + // If type is not "pattern" and init contains none of "protocol", + // "hostname", "port", "username" and "password", then set + // result["password"] to the result of processing a base URL string given + // baseURL’s password and type. + if (type != "pattern" && !init.protocol && !init.hostname && !init.port && + !init.username && !init.password) { + result.password = url_pattern_helpers::process_base_url_string( + base_url->get_password(), type); + } + + // If init contains neither "protocol" nor "hostname", then: + if (!init.protocol && !init.hostname) { + // Let baseHost be baseURL’s host. + // If baseHost is null, then set baseHost to the empty string. + auto base_host = base_url->get_hostname(); + // Set result["hostname"] to the result of processing a base URL string + // given baseHost and type. + result.hostname = + url_pattern_helpers::process_base_url_string(base_host, type); + } + + // If init contains none of "protocol", "hostname", and "port", then: + if (!init.protocol && !init.hostname && !init.port) { + // If baseURL’s port is null, then set result["port"] to the empty string. + // Otherwise, set result["port"] to baseURL’s port, serialized. + result.port = base_url->get_port(); + } + + // If init contains none of "protocol", "hostname", "port", and "pathname", + // then set result["pathname"] to the result of processing a base URL string + // given the result of URL path serializing baseURL and type. + if (!init.protocol && !init.hostname && !init.port && !init.pathname) { + result.pathname = url_pattern_helpers::process_base_url_string( + base_url->get_pathname(), type); + } + + // If init contains none of "protocol", "hostname", "port", "pathname", and + // "search", then: + if (!init.protocol && !init.hostname && !init.port && !init.pathname && + !init.search) { + // Let baseQuery be baseURL’s query. + // Set result["search"] to the result of processing a base URL string + // given baseQuery and type. + result.search = url_pattern_helpers::process_base_url_string( + base_url->get_search(), type); + } + + // If init contains none of "protocol", "hostname", "port", "pathname", + // "search", and "hash", then: + if (!init.protocol && !init.hostname && !init.port && !init.pathname && + !init.search && !init.hash) { + // Let baseFragment be baseURL’s fragment. + // Set result["hash"] to the result of processing a base URL string given + // baseFragment and type. + result.hash = url_pattern_helpers::process_base_url_string( + base_url->get_hash(), type); + } + } + + // If init["protocol"] exists, then set result["protocol"] to the result of + // process protocol for init given init["protocol"] and type. + if (init.protocol) { + auto process_result = process_protocol(*init.protocol, type); + if (!process_result) { + return tl::unexpected(process_result.error()); + } + result.protocol = std::move(*process_result); + } + + // If init["username"] exists, then set result["username"] to the result of + // process username for init given init["username"] and type. + if (init.username.has_value()) { + auto process_result = process_username(*init.username, type); + if (!process_result) { + return tl::unexpected(process_result.error()); + } + result.username = std::move(*process_result); + } + + // If init["password"] exists, then set result["password"] to the result of + // process password for init given init["password"] and type. + if (init.password.has_value()) { + auto process_result = process_password(*init.password, type); + if (!process_result) { + return tl::unexpected(process_result.error()); + } + result.password = std::move(*process_result); + } + + // If init["hostname"] exists, then set result["hostname"] to the result of + // process hostname for init given init["hostname"] and type. + if (init.hostname.has_value()) { + auto process_result = process_hostname(*init.hostname, type); + if (!process_result) { + return tl::unexpected(process_result.error()); + } + result.hostname = std::move(*process_result); + } + + // If init["port"] exists, then set result["port"] to the result of process + // port for init given init["port"], result["protocol"], and type. + if (init.port) { + auto process_result = + process_port(*init.port, result.protocol.value_or("fake"), type); + if (!process_result) { + return tl::unexpected(process_result.error()); + } + result.port = std::move(*process_result); + } + + // If init["pathname"] exists: + if (init.pathname.has_value()) { + // Set result["pathname"] to init["pathname"]. + result.pathname = init.pathname; + + // If the following are all true: + // - baseURL is not null; + // - baseURL has an opaque path; and + // - the result of running is an absolute pathname given result["pathname"] + // and type is false, + if (base_url && !base_url->has_opaque_path && + !url_pattern_helpers::is_absolute_pathname(*result.pathname, type)) { + // Let baseURLPath be the result of running process a base URL string + // given the result of URL path serializing baseURL and type. + std::string base_url_path = url_pattern_helpers::process_base_url_string( + base_url->get_pathname(), type); + + // Let slash index be the index of the last U+002F (/) code point found in + // baseURLPath, interpreted as a sequence of code points, or null if there + // are no instances of the code point. + auto slash_index = base_url_path.find_last_of('/'); + + // If slash index is not null: + if (slash_index != std::string::npos) { + // Let new pathname be the code point substring from 0 to slash index + + // 1 within baseURLPath. + std::string new_pathname = base_url_path.substr(0, slash_index + 1); + // Append result["pathname"] to the end of new pathname. + ADA_ASSERT_TRUE(result.pathname.has_value()); + new_pathname.append(result.pathname.value()); + // Set result["pathname"] to new pathname. + result.pathname = std::move(new_pathname); + } + } + + // Set result["pathname"] to the result of process pathname for init given + // result["pathname"], result["protocol"], and type. + auto pathname_processing_result = + process_pathname(*result.pathname, result.protocol.value_or(""), type); + if (!pathname_processing_result) { + return tl::unexpected(pathname_processing_result.error()); + } + result.pathname = std::move(*pathname_processing_result); + } + + // If init["search"] exists then set result["search"] to the result of process + // search for init given init["search"] and type. + if (init.search) { + auto process_result = process_search(*init.search, type); + if (!process_result) { + return tl::unexpected(process_result.error()); + } + result.search = std::move(*process_result); + } + + // If init["hash"] exists then set result["hash"] to the result of process + // hash for init given init["hash"] and type. + if (init.hash) { + auto process_result = process_hash(*init.hash, type); + if (!process_result) { + return tl::unexpected(process_result.error()); + } + result.hash = std::move(*process_result); + } + // Return result. + return result; +} + +tl::expected url_pattern_init::process_protocol( + std::string_view value, std::string_view type) { + ada_log("process_protocol=", value, " [", type, "]"); + // Let strippedValue be the given value with a single trailing U+003A (:) + // removed, if any. + if (value.ends_with(":")) { + value.remove_suffix(1); + } + // If type is "pattern" then return strippedValue. + if (type == "pattern") { + return std::string(value); + } + // Return the result of running canonicalize a protocol given strippedValue. + return url_pattern_helpers::canonicalize_protocol(value); +} + +tl::expected url_pattern_init::process_username( + std::string_view value, std::string_view type) { + // If type is "pattern" then return value. + if (type == "pattern") { + return std::string(value); + } + // Return the result of running canonicalize a username given value. + return url_pattern_helpers::canonicalize_username(value); +} + +tl::expected url_pattern_init::process_password( + std::string_view value, std::string_view type) { + // If type is "pattern" then return value. + if (type == "pattern") { + return std::string(value); + } + // Return the result of running canonicalize a password given value. + return url_pattern_helpers::canonicalize_password(value); +} + +tl::expected url_pattern_init::process_hostname( + std::string_view value, std::string_view type) { + ada_log("process_hostname value=", value, " type=", type); + // If type is "pattern" then return value. + if (type == "pattern") { + return std::string(value); + } + // Return the result of running canonicalize a hostname given value. + return url_pattern_helpers::canonicalize_hostname(value); +} + +tl::expected url_pattern_init::process_port( + std::string_view port, std::string_view protocol, std::string_view type) { + // If type is "pattern" then return portValue. + if (type == "pattern") { + return std::string(port); + } + // Return the result of running canonicalize a port given portValue and + // protocolValue. + return url_pattern_helpers::canonicalize_port_with_protocol(port, protocol); +} + +tl::expected url_pattern_init::process_pathname( + std::string_view value, std::string_view protocol, std::string_view type) { + // If type is "pattern" then return pathnameValue. + if (type == "pattern") { + return std::string(value); + } + + // If protocolValue is a special scheme or the empty string, then return the + // result of running canonicalize a pathname given pathnameValue. + if (protocol.empty() || scheme::is_special(protocol)) { + return url_pattern_helpers::canonicalize_pathname(value); + } + + // Return the result of running canonicalize an opaque pathname given + // pathnameValue. + return url_pattern_helpers::canonicalize_opaque_pathname(value); +} + +tl::expected url_pattern_init::process_search( + std::string_view value, std::string_view type) { + // Let strippedValue be the given value with a single leading U+003F (?) + // removed, if any. + if (value.starts_with("?")) { + value.remove_prefix(1); + } + ADA_ASSERT_TRUE(!value.starts_with("?")); + // If type is "pattern" then return strippedValue. + if (type == "pattern") { + return std::string(value); + } + // Return the result of running canonicalize a search given strippedValue. + return url_pattern_helpers::canonicalize_search(value); +} + +tl::expected url_pattern_init::process_hash( + std::string_view value, std::string_view type) { + // Let strippedValue be the given value with a single leading U+0023 (#) + // removed, if any. + if (value.starts_with("#")) { + value.remove_prefix(1); + } + ADA_ASSERT_TRUE(!value.starts_with("#")); + // If type is "pattern" then return strippedValue. + if (type == "pattern") { + return std::string(value); + } + // Return the result of running canonicalize a hash given strippedValue. + return url_pattern_helpers::canonicalize_hash(value); +} + +} // namespace ada +/* end file src/url_pattern.cpp */ +/* begin file src/url_pattern_helpers.cpp */ + +#include +#include +#include + +namespace ada::url_pattern_helpers { + +std::tuple> +generate_regular_expression_and_name_list( + const std::vector& part_list, + url_pattern_compile_component_options options) { + // Let result be "^" + std::string result = "^"; + + // Let name list be a new list + std::vector name_list{}; + const std::string full_wildcard_regexp_value = ".*"; + + // For each part of part list: + for (const url_pattern_part& part : part_list) { + // If part's type is "fixed-text": + if (part.type == url_pattern_part_type::FIXED_TEXT) { + // If part's modifier is "none" + if (part.modifier == url_pattern_part_modifier::none) { + // Append the result of running escape a regexp string given part's + // value + result += escape_regexp_string(part.value); + } else { + // A "fixed-text" part with a modifier uses a non capturing group + // (?:) + // Append "(?:" to the end of result. + result.append("(?:"); + // Append the result of running escape a regexp string given part’s + // value to the end of result. + result.append(escape_regexp_string(part.value)); + // Append ")" to the end of result. + result.append(")"); + // Append the result of running convert a modifier to a string given + // part’s modifier to the end of result. + result.append(convert_modifier_to_string(part.modifier)); + } + continue; + } + + // Assert: part's name is not the empty string + ADA_ASSERT_TRUE(!part.name.empty()); + + // Append part's name to name list + name_list.push_back(part.name); + + // Let regexp value be part's value + std::string regexp_value = part.value; + + // If part's type is "segment-wildcard" + if (part.type == url_pattern_part_type::SEGMENT_WILDCARD) { + // then set regexp value to the result of running generate a segment + // wildcard regexp given options. + regexp_value = generate_segment_wildcard_regexp(options); + } + // Otherwise if part's type is "full-wildcard" + else if (part.type == url_pattern_part_type::FULL_WILDCARD) { + // then set regexp value to full wildcard regexp value. + regexp_value = full_wildcard_regexp_value; + } + + // If part's prefix is the empty string and part's suffix is the empty + // string + if (part.prefix.empty() && part.suffix.empty()) { + // If part's modifier is "none" or "optional" + if (part.modifier == url_pattern_part_modifier::none || + part.modifier == url_pattern_part_modifier::optional) { + // () + result += "(" + regexp_value + ")" + + convert_modifier_to_string(part.modifier); + } else { + // ((?:)) + result += "((?:" + regexp_value + ")" + + convert_modifier_to_string(part.modifier) + ")"; + } + continue; + } + + // If part's modifier is "none" or "optional" + if (part.modifier == url_pattern_part_modifier::none || + part.modifier == url_pattern_part_modifier::optional) { + // (?:()) + result += "(?:" + escape_regexp_string(part.prefix) + "(" + regexp_value + + ")" + escape_regexp_string(part.suffix) + ")" + + convert_modifier_to_string(part.modifier); + continue; + } + + // Assert: part's modifier is "zero-or-more" or "one-or-more" + ADA_ASSERT_TRUE(part.modifier == url_pattern_part_modifier::zero_or_more || + part.modifier == url_pattern_part_modifier::one_or_more); + + // Assert: part's prefix is not the empty string or part's suffix is not the + // empty string + ADA_ASSERT_TRUE(!part.prefix.empty() || !part.suffix.empty()); + + // (?:((?:)(?:(?:))*))? + // Append "(?:" to the end of result. + result.append("(?:"); + // Append the result of running escape a regexp string given part’s prefix + // to the end of result. + result.append(escape_regexp_string(part.prefix)); + // Append "((?:" to the end of result. + result.append("((?:"); + // Append regexp value to the end of result. + result.append(regexp_value); + // Append ")(?:" to the end of result. + result.append(")(?:"); + // Append the result of running escape a regexp string given part’s suffix + // to the end of result. + result.append(escape_regexp_string(part.suffix)); + // Append the result of running escape a regexp string given part’s prefix + // to the end of result. + result.append(escape_regexp_string(part.prefix)); + // Append "(?:" to the end of result. + result.append("(?:"); + // Append regexp value to the end of result. + result.append(regexp_value); + // Append "))*)" to the end of result. + result.append("))*)"); + // Append the result of running escape a regexp string given part’s suffix + // to the end of result. + result.append(escape_regexp_string(part.suffix)); + // Append ")" to the end of result. + result.append(")"); + + // If part's modifier is "zero-or-more" then append "?" to the end of result + if (part.modifier == url_pattern_part_modifier::zero_or_more) { + result += "?"; + } + } + + // Append "$" to the end of result + result += "$"; + + // Return (result, name list) + return {result, name_list}; +} + +bool is_ipv6_address(std::string_view input) noexcept { + // If input’s code point length is less than 2, then return false. + if (input.size() < 2) return false; + + // Let input code points be input interpreted as a list of code points. + // If input code points[0] is U+005B ([), then return true. + if (input.front() == '[') return true; + // If input code points[0] is U+007B ({) and input code points[1] is U+005B + // ([), then return true. + if (input.starts_with("{[")) return true; + // If input code points[0] is U+005C (\) and input code points[1] is U+005B + // ([), then return true. + return input.starts_with("\\["); +} + +std::string convert_modifier_to_string(url_pattern_part_modifier modifier) { + // TODO: Optimize this. + switch (modifier) { + // If modifier is "zero-or-more", then return "*". + case url_pattern_part_modifier::zero_or_more: + return "*"; + // If modifier is "optional", then return "?". + case url_pattern_part_modifier::optional: + return "?"; + // If modifier is "one-or-more", then return "+". + case url_pattern_part_modifier::one_or_more: + return "+"; + // Return the empty string. + default: + return ""; + } +} + +std::string generate_segment_wildcard_regexp( + url_pattern_compile_component_options options) { + // Let result be "[^". + std::string result = "[^"; + // Append the result of running escape a regexp string given options’s + // delimiter code point to the end of result. + result.append(escape_regexp_string(options.get_delimiter())); + // Append "]+?" to the end of result. + result.append("]+?"); + // Return result. + ada_log("generate_segment_wildcard_regexp result: ", result); + return result; +} + +tl::expected canonicalize_protocol( + std::string_view input) { + ada_log("canonicalize_protocol called with input=", input); + // If value is the empty string, return value. + if (input.empty()) [[unlikely]] { + return ""; + } + + // IMPORTANT: Deviation from the spec. We remove the trailing ':' here. + if (input.ends_with(":")) { + input.remove_suffix(1); + } + + // Let dummyURL be a new URL record. + // Let parseResult be the result of running the basic URL parser given value + // followed by "://dummy.test", with dummyURL as url. + if (auto dummy_url = ada::parse( + std::string(input) + "://dummy.test", nullptr)) { + // IMPORTANT: Deviation from the spec. We remove the trailing ':' here. + // Since URL parser always return protocols ending with `:` + auto protocol = dummy_url->get_protocol(); + protocol.remove_suffix(1); + return std::string(protocol); + } + // If parseResult is failure, then throw a TypeError. + return tl::unexpected(errors::type_error); +} + +tl::expected canonicalize_username( + std::string_view input) { + // If value is the empty string, return value. + if (input.empty()) [[unlikely]] { + return ""; + } + // Let dummyURL be a new URL record. + auto url = ada::parse("fake://dummy.test", nullptr); + ADA_ASSERT_TRUE(url.has_value()); + // Set the username given dummyURL and value. + if (!url->set_username(input)) { + return tl::unexpected(errors::type_error); + } + // Return dummyURL’s username. + return std::string(url->get_username()); +} + +tl::expected canonicalize_password( + std::string_view input) { + // If value is the empty string, return value. + if (input.empty()) [[unlikely]] { + return ""; + } + // Let dummyURL be a new URL record. + // Set the password given dummyURL and value. + auto url = ada::parse("fake://dummy.test", nullptr); + + ADA_ASSERT_TRUE(url.has_value()); + if (!url->set_password(input)) { + return tl::unexpected(errors::type_error); + } + // Return dummyURL’s password. + return std::string(url->get_password()); +} + +tl::expected canonicalize_hostname( + std::string_view input) { + ada_log("canonicalize_hostname input=", input); + // If value is the empty string, return value. + if (input.empty()) [[unlikely]] { + return ""; + } + // Let dummyURL be a new URL record. + // Let parseResult be the result of running the basic URL parser given value + // with dummyURL as url and hostname state as state override. + + // IMPORTANT: The protocol needs to be a special protocol, otherwise the + // hostname will not be converted using IDNA. + auto url = ada::parse("https://dummy.test", nullptr); + ADA_ASSERT_TRUE(url); + // if (!isValidHostnameInput(hostname)) return kj::none; + if (!url->set_hostname(input)) { + // If parseResult is failure, then throw a TypeError. + return tl::unexpected(errors::type_error); + } + // Return dummyURL’s host, serialized, or empty string if it is null. + return std::string(url->get_hostname()); +} + +tl::expected canonicalize_ipv6_hostname( + std::string_view input) { + ada_log("canonicalize_ipv6_hostname input=", input); + // TODO: Optimization opportunity: Use lookup table to speed up checking + if (std::ranges::any_of(input, [](char c) { + return c != '[' && c != ']' && c != ':' && + !unicode::is_ascii_hex_digit(c); + })) { + return tl::unexpected(errors::type_error); + } + // Append the result of running ASCII lowercase given code point to the end of + // result. + auto hostname = std::string(input); + unicode::to_lower_ascii(hostname.data(), hostname.size()); + return hostname; +} + +tl::expected canonicalize_port( + std::string_view port_value) { + // If portValue is the empty string, return portValue. + if (port_value.empty()) [[unlikely]] { + return ""; + } + // Let dummyURL be a new URL record. + // If protocolValue was given, then set dummyURL’s scheme to protocolValue. + // Let parseResult be the result of running basic URL parser given portValue + // with dummyURL as url and port state as state override. + auto url = ada::parse("fake://dummy.test", nullptr); + ADA_ASSERT_TRUE(url); + if (url->set_port(port_value)) { + // Return dummyURL’s port, serialized, or empty string if it is null. + return std::string(url->get_port()); + } + // If parseResult is failure, then throw a TypeError. + return tl::unexpected(errors::type_error); +} + +tl::expected canonicalize_port_with_protocol( + std::string_view port_value, std::string_view protocol) { + // If portValue is the empty string, return portValue. + if (port_value.empty()) [[unlikely]] { + return ""; + } + + // TODO: Remove this + // We have an empty protocol because get_protocol() returns an empty string + // We should handle this in the caller rather than here. + if (protocol.empty()) { + protocol = "fake"; + } else if (protocol.ends_with(":")) { + protocol.remove_suffix(1); + } + // Let dummyURL be a new URL record. + // If protocolValue was given, then set dummyURL’s scheme to protocolValue. + // Let parseResult be the result of running basic URL parser given portValue + // with dummyURL as url and port state as state override. + auto url = ada::parse(std::string(protocol) + "://dummy.test", + nullptr); + // TODO: Remove has_port() check. + // This is actually a bug with url parser where set_port() returns true for + // "invalid80" port value. + if (url && url->set_port(port_value) && url->has_port()) { + // Return dummyURL’s port, serialized, or empty string if it is null. + return std::string(url->get_port()); + } + // TODO: Remove this once the previous has_port() check is removed. + if (url) { + if (scheme::is_special(protocol) && url->get_port().empty()) { + return ""; + } + } + // If parseResult is failure, then throw a TypeError. + return tl::unexpected(errors::type_error); +} + +tl::expected canonicalize_pathname( + std::string_view input) { + // If value is the empty string, then return value. + if (input.empty()) [[unlikely]] { + return ""; + } + // Let leading slash be true if the first code point in value is U+002F (/) + // and otherwise false. + const bool leading_slash = input.starts_with("/"); + // Let modified value be "/-" if leading slash is false and otherwise the + // empty string. + const auto modified_value = leading_slash ? "" : "/-"; + const auto full_url = + std::string("fake://fake-url") + modified_value + std::string(input); + if (auto url = ada::parse(full_url, nullptr)) { + const auto pathname = url->get_pathname(); + // If leading slash is false, then set result to the code point substring + // from 2 to the end of the string within result. + return leading_slash ? std::string(pathname) + : std::string(pathname.substr(2)); + } + // If parseResult is failure, then throw a TypeError. + return tl::unexpected(errors::type_error); +} + +tl::expected canonicalize_opaque_pathname( + std::string_view input) { + // If value is the empty string, return value. + if (input.empty()) [[unlikely]] { + return ""; + } + // Let dummyURL be a new URL record. + // Set dummyURL’s path to the empty string. + // Let parseResult be the result of running URL parsing given value with + // dummyURL as url and opaque path state as state override. + if (auto url = + ada::parse("fake:" + std::string(input), nullptr)) { + // Return the result of URL path serializing dummyURL. + return std::string(url->get_pathname()); + } + // If parseResult is failure, then throw a TypeError. + return tl::unexpected(errors::type_error); +} + +tl::expected canonicalize_search(std::string_view input) { + // If value is the empty string, return value. + if (input.empty()) [[unlikely]] { + return ""; + } + // Let dummyURL be a new URL record. + // Set dummyURL’s query to the empty string. + // Let parseResult be the result of running basic URL parser given value with + // dummyURL as url and query state as state override. + auto url = ada::parse("fake://dummy.test", nullptr); + ADA_ASSERT_TRUE(url.has_value()); + url->set_search(input); + if (url->has_search()) { + const auto search = url->get_search(); + return std::string(search.substr(1)); + } + return tl::unexpected(errors::type_error); +} + +tl::expected canonicalize_hash(std::string_view input) { + // If value is the empty string, return value. + if (input.empty()) [[unlikely]] { + return ""; + } + // Let dummyURL be a new URL record. + // Set dummyURL’s fragment to the empty string. + // Let parseResult be the result of running basic URL parser given value with + // dummyURL as url and fragment state as state override. + auto url = ada::parse("fake://dummy.test", nullptr); + ADA_ASSERT_TRUE(url.has_value()); + url->set_hash(input); + // Return dummyURL’s fragment. + if (url->has_hash()) { + const auto hash = url->get_hash(); + return std::string(hash.substr(1)); + } + return tl::unexpected(errors::type_error); +} + +tl::expected, errors> tokenize(std::string_view input, + token_policy policy) { + ada_log("tokenize input: ", input); + // Let tokenizer be a new tokenizer. + // Set tokenizer’s input to input. + // Set tokenizer’s policy to policy. + auto tokenizer = Tokenizer(input, policy); + // While tokenizer’s index is less than tokenizer’s input's code point length: + while (tokenizer.index < tokenizer.input.size()) { + // Run seek and get the next code point given tokenizer and tokenizer’s + // index. + tokenizer.seek_and_get_next_code_point(tokenizer.index); + + // If tokenizer’s code point is U+002A (*): + if (tokenizer.code_point == '*') { + // Run add a token with default position and length given tokenizer and + // "asterisk". + tokenizer.add_token_with_defaults(token_type::ASTERISK); + ada_log("add ASTERISK token"); + // Continue. + continue; + } + + // If tokenizer’s code point is U+002B (+) or U+003F (?): + if (tokenizer.code_point == '+' || tokenizer.code_point == '?') { + // Run add a token with default position and length given tokenizer and + // "other-modifier". + tokenizer.add_token_with_defaults(token_type::OTHER_MODIFIER); + // Continue. + continue; + } + + // If tokenizer’s code point is U+005C (\): + if (tokenizer.code_point == '\\') { + // If tokenizer’s index is equal to tokenizer’s input's code point length + // − 1: + if (tokenizer.index == tokenizer.input.size() - 1) { + // Run process a tokenizing error given tokenizer, tokenizer’s next + // index, and tokenizer’s index. + if (auto error = tokenizer.process_tokenizing_error( + tokenizer.next_index, tokenizer.index)) { + ada_log("process_tokenizing_error failed"); + return tl::unexpected(*error); + } + continue; + } + + // Let escaped index be tokenizer’s next index. + auto escaped_index = tokenizer.next_index; + // Run get the next code point given tokenizer. + tokenizer.get_next_code_point(); + // Run add a token with default length given tokenizer, "escaped-char", + // tokenizer’s next index, and escaped index. + tokenizer.add_token_with_default_length( + token_type::ESCAPED_CHAR, tokenizer.next_index, escaped_index); + ada_log("add ESCAPED_CHAR token on next_index ", tokenizer.next_index, + " with escaped index ", escaped_index); + // Continue. + continue; + } + + // If tokenizer’s code point is U+007B ({): + if (tokenizer.code_point == '{') { + // Run add a token with default position and length given tokenizer and + // "open". + tokenizer.add_token_with_defaults(token_type::OPEN); + ada_log("add OPEN token"); + continue; + } + + // If tokenizer’s code point is U+007D (}): + if (tokenizer.code_point == '}') { + // Run add a token with default position and length given tokenizer and + // "close". + tokenizer.add_token_with_defaults(token_type::CLOSE); + ada_log("add CLOSE token"); + continue; + } + + // If tokenizer’s code point is U+003A (:): + if (tokenizer.code_point == ':') { + // Let name position be tokenizer’s next index. + auto name_position = tokenizer.next_index; + // Let name start be name position. + auto name_start = name_position; + // While name position is less than tokenizer’s input's code point length: + while (name_position < tokenizer.input.size()) { + // Run seek and get the next code point given tokenizer and name + // position. + tokenizer.seek_and_get_next_code_point(name_position); + // Let first code point be true if name position equals name start and + // false otherwise. + bool first_code_point = name_position == name_start; + // Let valid code point be the result of running is a valid name code + // point given tokenizer’s code point and first code point. + auto valid_code_point = + idna::valid_name_code_point(tokenizer.code_point, first_code_point); + ada_log("tokenizer.code_point=", uint32_t(tokenizer.code_point), + " first_code_point=", first_code_point, + " valid_code_point=", valid_code_point); + // If valid code point is false break. + if (!valid_code_point) break; + // Set name position to tokenizer’s next index. + name_position = tokenizer.next_index; + } + + // If name position is less than or equal to name start: + if (name_position <= name_start) { + // Run process a tokenizing error given tokenizer, name start, and + // tokenizer’s index. + if (auto error = tokenizer.process_tokenizing_error(name_start, + tokenizer.index)) { + ada_log("process_tokenizing_error failed"); + return tl::unexpected(*error); + } + // Continue + continue; + } + + // Run add a token with default length given tokenizer, "name", name + // position, and name start. + tokenizer.add_token_with_default_length(token_type::NAME, name_position, + name_start); + continue; + } + + // If tokenizer’s code point is U+0028 ((): + if (tokenizer.code_point == '(') { + // Let depth be 1. + size_t depth = 1; + // Let regexp position be tokenizer’s next index. + auto regexp_position = tokenizer.next_index; + // Let regexp start be regexp position. + auto regexp_start = regexp_position; + // Let error be false. + bool error = false; + + // While regexp position is less than tokenizer’s input's code point + // length: + while (regexp_position < tokenizer.input.size()) { + // Run seek and get the next code point given tokenizer and regexp + // position. + tokenizer.seek_and_get_next_code_point(regexp_position); + + // TODO: Optimization opportunity: The next 2 if statements can be + // merged. If the result of running is ASCII given tokenizer’s code + // point is false: + if (!unicode::is_ascii(tokenizer.code_point)) { + // Run process a tokenizing error given tokenizer, regexp start, and + // tokenizer’s index. + if (auto process_error = tokenizer.process_tokenizing_error( + regexp_start, tokenizer.index)) { + return tl::unexpected(*process_error); + } + // Set error to true. + error = true; + break; + } + + // If regexp position equals regexp start and tokenizer’s code point is + // U+003F (?): + if (regexp_position == regexp_start && tokenizer.code_point == '?') { + // Run process a tokenizing error given tokenizer, regexp start, and + // tokenizer’s index. + if (auto process_error = tokenizer.process_tokenizing_error( + regexp_start, tokenizer.index)) { + return tl::unexpected(*process_error); + } + // Set error to true; + error = true; + break; + } + + // If tokenizer’s code point is U+005C (\): + if (tokenizer.code_point == '\\') { + // If regexp position equals tokenizer’s input's code point length − 1 + if (regexp_position == tokenizer.input.size() - 1) { + // Run process a tokenizing error given tokenizer, regexp start, and + // tokenizer’s index. + if (auto process_error = tokenizer.process_tokenizing_error( + regexp_start, tokenizer.index)) { + return tl::unexpected(*process_error); + } + // Set error to true. + error = true; + break; + } + // Run get the next code point given tokenizer. + tokenizer.get_next_code_point(); + // If the result of running is ASCII given tokenizer’s code point is + // false: + if (!unicode::is_ascii(tokenizer.code_point)) { + // Run process a tokenizing error given tokenizer, regexp start, and + // tokenizer’s index. + if (auto process_error = tokenizer.process_tokenizing_error( + regexp_start, tokenizer.index); + process_error.has_value()) { + return tl::unexpected(*process_error); + } + // Set error to true. + error = true; + break; + } + // Set regexp position to tokenizer’s next index. + regexp_position = tokenizer.next_index; + continue; + } + + // If tokenizer’s code point is U+0029 ()): + if (tokenizer.code_point == ')') { + // Decrement depth by 1. + depth--; + // If depth is 0: + if (depth == 0) { + // Set regexp position to tokenizer’s next index. + regexp_position = tokenizer.next_index; + // Break. + break; + } + } else if (tokenizer.code_point == '(') { + // Otherwise if tokenizer’s code point is U+0028 ((): + // Increment depth by 1. + depth++; + // If regexp position equals tokenizer’s input's code point length − + // 1: + if (regexp_position == tokenizer.input.size() - 1) { + // Run process a tokenizing error given tokenizer, regexp start, and + // tokenizer’s index. + if (auto process_error = tokenizer.process_tokenizing_error( + regexp_start, tokenizer.index)) { + return tl::unexpected(*process_error); + } + // Set error to true. + error = true; + break; + } + // Let temporary position be tokenizer’s next index. + auto temporary_position = tokenizer.next_index; + // Run get the next code point given tokenizer. + tokenizer.get_next_code_point(); + // If tokenizer’s code point is not U+003F (?): + if (tokenizer.code_point != '?') { + // Run process a tokenizing error given tokenizer, regexp start, and + // tokenizer’s index. + if (auto process_error = tokenizer.process_tokenizing_error( + regexp_start, tokenizer.index)) { + return tl::unexpected(*process_error); + } + // Set error to true. + error = true; + break; + } + // Set tokenizer’s next index to temporary position. + tokenizer.next_index = temporary_position; + } + // Set regexp position to tokenizer’s next index. + regexp_position = tokenizer.next_index; + } + + // If error is true continue. + if (error) continue; + // If depth is not zero: + if (depth != 0) { + // Run process a tokenizing error given tokenizer, regexp start, and + // tokenizer’s index. + if (auto process_error = tokenizer.process_tokenizing_error( + regexp_start, tokenizer.index)) { + return tl::unexpected(*process_error); + } + continue; + } + // Let regexp length be regexp position − regexp start − 1. + auto regexp_length = regexp_position - regexp_start - 1; + // If regexp length is zero: + if (regexp_length == 0) { + // Run process a tokenizing error given tokenizer, regexp start, and + // tokenizer’s index. + if (auto process_error = tokenizer.process_tokenizing_error( + regexp_start, tokenizer.index)) { + ada_log("process_tokenizing_error failed"); + return tl::unexpected(*process_error); + } + continue; + } + // Run add a token given tokenizer, "regexp", regexp position, regexp + // start, and regexp length. + tokenizer.add_token(token_type::REGEXP, regexp_position, regexp_start, + regexp_length); + continue; + } + // Run add a token with default position and length given tokenizer and + // "char". + tokenizer.add_token_with_defaults(token_type::CHAR); + } + // Run add a token with default length given tokenizer, "end", tokenizer’s + // index, and tokenizer’s index. + tokenizer.add_token_with_default_length(token_type::END, tokenizer.index, + tokenizer.index); + + ada_log("tokenizer.token_list size is: ", tokenizer.token_list.size()); + // Return tokenizer’s token list. + return tokenizer.token_list; +} + +std::string escape_pattern_string(std::string_view input) { + ada_log("escape_pattern_string called with input=", input); + if (input.empty()) [[unlikely]] { + return ""; + } + // Assert: input is an ASCII string. + ADA_ASSERT_TRUE(ada::idna::is_ascii(input)); + // Let result be the empty string. + std::string result{}; + result.reserve(input.size()); + + // TODO: Optimization opportunity: Use a lookup table + constexpr auto should_escape = [](const char c) { + return c == '+' || c == '*' || c == '?' || c == ':' || c == '{' || + c == '}' || c == '(' || c == ')' || c == '\\'; + }; + + // While index is less than input’s length: + for (const auto& c : input) { + if (should_escape(c)) { + // then append U+005C (\) to the end of result. + result.append("\\"); + } + + // Append c to the end of result. + result += c; + } + // Return result. + return result; +} + +namespace { +constexpr std::array escape_regexp_table = []() consteval { + std::array out{}; + for (auto& c : {'.', '+', '*', '?', '^', '$', '{', '}', '(', ')', '[', ']', + '|', '/', '\\'}) { + out[c] = 1; + } + return out; +}(); + +constexpr bool should_escape_regexp_char(char c) { + return escape_regexp_table[(uint8_t)c]; +} +} // namespace + +std::string escape_regexp_string(std::string_view input) { + // Assert: input is an ASCII string. + ADA_ASSERT_TRUE(idna::is_ascii(input)); + // Let result be the empty string. + std::string result{}; + result.reserve(input.size()); + for (const auto& c : input) { + // TODO: Optimize this even further + if (should_escape_regexp_char(c)) { + result.append(std::string("\\") + c); + } else { + result.push_back(c); + } + } + return result; +} + +std::string process_base_url_string(std::string_view input, + std::string_view type) { + // If type is not "pattern" return input. + if (type != "pattern") { + return std::string(input); + } + // Return the result of escaping a pattern string given input. + return escape_pattern_string(input); +} + +constexpr bool is_absolute_pathname(std::string_view input, + std::string_view type) noexcept { + // If input is the empty string, then return false. + if (input.empty()) [[unlikely]] { + return false; + } + // If input[0] is U+002F (/), then return true. + if (input.starts_with("/")) return true; + // If type is "url", then return false. + if (type == "url") return false; + // If input’s code point length is less than 2, then return false. + if (input.size() < 2) return false; + // If input[0] is U+005C (\) and input[1] is U+002F (/), then return true. + if (input.starts_with("\\/")) return true; + // If input[0] is U+007B ({) and input[1] is U+002F (/), then return true. + if (input.starts_with("{/")) return true; + // Return false. + return false; +} + +std::string generate_pattern_string( + std::vector& part_list, + url_pattern_compile_component_options& options) { + // Let result be the empty string. + std::string result{}; + // Let index list be the result of getting the indices for part list. + // For each index of index list: + for (size_t index = 0; index < part_list.size(); index++) { + // Let part be part list[index]. + auto part = part_list[index]; + // Let previous part be part list[index - 1] if index is greater than 0, + // otherwise let it be null. + // TODO: Optimization opportunity. Find a way to avoid making a copy here. + std::optional previous_part = + index == 0 ? std::nullopt : std::optional(part_list[index - 1]); + // Let next part be part list[index + 1] if index is less than index list’s + // size - 1, otherwise let it be null. + std::optional next_part = + index < part_list.size() - 1 ? std::optional(part_list[index + 1]) + : std::nullopt; + // If part’s type is "fixed-text" then: + if (part.type == url_pattern_part_type::FIXED_TEXT) { + // If part’s modifier is "none" then: + if (part.modifier == url_pattern_part_modifier::none) { + // Append the result of running escape a pattern string given part’s + // value to the end of result. + result.append(escape_pattern_string(part.value)); + continue; + } + // Append "{" to the end of result. + result += "{"; + // Append the result of running escape a pattern string given part’s value + // to the end of result. + result.append(escape_pattern_string(part.value)); + // Append "}" to the end of result. + result += "}"; + // Append the result of running convert a modifier to a string given + // part’s modifier to the end of result. + result.append(convert_modifier_to_string(part.modifier)); + continue; + } + // Let custom name be true if part’s name[0] is not an ASCII digit; + // otherwise false. + bool custom_name = !unicode::is_ascii_digit(part.name[0]); + // Let needs grouping be true if at least one of the following are true, + // otherwise let it be false: + // - part’s suffix is not the empty string. + // - part’s prefix is not the empty string and is not options’s prefix code + // point. + bool needs_grouping = + !part.suffix.empty() || + (!part.prefix.empty() && part.prefix[0] != options.get_prefix()[0]); + + // If all of the following are true: + // - needs grouping is false; and + // - custom name is true; and + // - part’s type is "segment-wildcard"; and + // - part’s modifier is "none"; and + // - next part is not null; and + // - next part’s prefix is the empty string; and + // - next part’s suffix is the empty string + if (!needs_grouping && custom_name && + part.type == url_pattern_part_type::SEGMENT_WILDCARD && + part.modifier == url_pattern_part_modifier::none && + next_part.has_value() && next_part->prefix.empty() && + next_part->suffix.empty()) { + // If next part’s type is "fixed-text": + if (next_part->type == url_pattern_part_type::FIXED_TEXT) { + // Set needs grouping to true if the result of running is a valid name + // code point given next part’s value's first code point and the boolean + // false is true. + if (idna::valid_name_code_point(next_part->value[0], false)) { + needs_grouping = true; + } + } else { + // Set needs grouping to true if next part’s name[0] is an ASCII digit. + needs_grouping = !next_part->name.empty() && + unicode::is_ascii_digit(next_part->name[0]); + } + } + + // If all of the following are true: + // - needs grouping is false; and + // - part’s prefix is the empty string; and + // - previous part is not null; and + // - previous part’s type is "fixed-text"; and + // - previous part’s value's last code point is options’s prefix code point. + // then set needs grouping to true. + if (!needs_grouping && part.prefix.empty() && previous_part.has_value() && + previous_part->type == url_pattern_part_type::FIXED_TEXT && + !options.get_prefix().empty() && + previous_part->value.at(previous_part->value.size() - 1) == + options.get_prefix()[0]) { + needs_grouping = true; + } + + // Assert: part’s name is not the empty string or null. + ADA_ASSERT_TRUE(!part.name.empty()); + + // If needs grouping is true, then append "{" to the end of result. + if (needs_grouping) { + result.append("{"); + } + + // Append the result of running escape a pattern string given part’s prefix + // to the end of result. + result.append(escape_pattern_string(part.prefix)); + + // If custom name is true: + if (custom_name) { + // Append ":" to the end of result. + result.append(":"); + // Append part’s name to the end of result. + result.append(part.name); + } + + // If part’s type is "regexp" then: + if (part.type == url_pattern_part_type::REGEXP) { + // Append "(" to the end of result. + result.append("("); + // Append part’s value to the end of result. + result.append(part.value); + // Append ")" to the end of result. + result.append(")"); + } else if (part.type == url_pattern_part_type::SEGMENT_WILDCARD && + !custom_name) { + // Otherwise if part’s type is "segment-wildcard" and custom name is + // false: Append "(" to the end of result. + result.append("("); + // Append the result of running generate a segment wildcard regexp given + // options to the end of result. + result.append(generate_segment_wildcard_regexp(options)); + // Append ")" to the end of result. + result.append(")"); + } else if (part.type == url_pattern_part_type::FULL_WILDCARD) { + // Otherwise if part’s type is "full-wildcard": + // If custom name is false and one of the following is true: + // - previous part is null; or + // - previous part’s type is "fixed-text"; or + // - previous part’s modifier is not "none"; or + // - needs grouping is true; or + // - part’s prefix is not the empty string + // - then append "*" to the end of result. + if (!custom_name && + (!previous_part.has_value() || + previous_part->type == url_pattern_part_type::FIXED_TEXT || + previous_part->modifier != url_pattern_part_modifier::none || + needs_grouping || !part.prefix.empty())) { + result.append("*"); + } else { + // Append "(" to the end of result. + // Append full wildcard regexp value to the end of result. + // Append ")" to the end of result. + result.append("(.*)"); + } + } + + // If all of the following are true: + // - part’s type is "segment-wildcard"; and + // - custom name is true; and + // - part’s suffix is not the empty string; and + // - The result of running is a valid name code point given part’s suffix's + // first code point and the boolean false is true then append U+005C (\) to + // the end of result. + if (part.type == url_pattern_part_type::SEGMENT_WILDCARD && custom_name && + !part.suffix.empty() && + idna::valid_name_code_point(part.suffix[0], false)) { + result.append("\\"); + } + + // Append the result of running escape a pattern string given part’s suffix + // to the end of result. + result.append(escape_pattern_string(part.suffix)); + // If needs grouping is true, then append "}" to the end of result. + if (needs_grouping) result.append("}"); + // Append the result of running convert a modifier to a string given part’s + // modifier to the end of result. + result.append(convert_modifier_to_string(part.modifier)); + } + // Return result. + return result; +} +} // namespace ada::url_pattern_helpers +/* end file src/url_pattern_helpers.cpp */ +/* begin file src/url_pattern_regex.cpp */ + +namespace ada::url_pattern_regex { + +#ifdef ADA_USE_UNSAFE_STD_REGEX_PROVIDER +std::optional std_regex_provider::create_instance( + std::string_view pattern, bool ignore_case) { + // Let flags be an empty string. + // If options’s ignore case is true then set flags to "vi". + // Otherwise set flags to "v" + auto flags = ignore_case + ? std::regex::icase | std::regex_constants::ECMAScript + : std::regex_constants::ECMAScript; + try { + return std::regex(pattern.data(), pattern.size(), flags); + } catch (const std::regex_error& e) { + (void)e; + ada_log("std_regex_provider::create_instance failed:", e.what()); + return std::nullopt; + } +} + +std::optional>> +std_regex_provider::regex_search(std::string_view input, + const std::regex& pattern) { + std::string input_str( + input.begin(), + input.end()); // Convert string_view to string for regex_search + std::smatch match_result; + if (!std::regex_search(input_str, match_result, pattern, + std::regex_constants::match_any)) { + return std::nullopt; + } + std::vector> matches; + // If input is empty, let's assume the result will be empty as well. + if (input.empty() || match_result.empty()) { + return matches; + } + matches.reserve(match_result.size()); + for (size_t i = 1; i < match_result.size(); ++i) { + if (auto entry = match_result[i]; entry.matched) { + matches.emplace_back(entry.str()); + } + } + return matches; +} + +bool std_regex_provider::regex_match(std::string_view input, + const std::regex& pattern) { + return std::regex_match(input.begin(), input.end(), pattern); +} + +#endif // ADA_USE_UNSAFE_STD_REGEX_PROVIDER + +} // namespace ada::url_pattern_regex +/* end file src/url_pattern_regex.cpp */ +/* begin file src/ada_c.cpp */ + +ada::result& get_instance(void* result) noexcept { + return *(ada::result*)result; +} + +extern "C" { +typedef void* ada_url; +typedef void* ada_url_search_params; +typedef void* ada_strings; +typedef void* ada_url_search_params_keys_iter; +typedef void* ada_url_search_params_values_iter; +typedef void* ada_url_search_params_entries_iter; + +struct ada_string { + const char* data; + size_t length; +}; + +struct ada_owned_string { + const char* data; + size_t length; +}; + +struct ada_string_pair { + ada_string key; + ada_string value; +}; + +ada_string ada_string_create(const char* data, size_t length) { + ada_string out{}; + out.data = data; + out.length = length; + return out; +} + +struct ada_url_components { + /* + * By using 32-bit integers, we implicitly assume that the URL string + * cannot exceed 4 GB. + * + * https://user:pass@example.com:1234/foo/bar?baz#quux + * | | | | ^^^^| | | + * | | | | | | | `----- hash_start + * | | | | | | `--------- search_start + * | | | | | `----------------- pathname_start + * | | | | `--------------------- port + * | | | `----------------------- host_end + * | | `---------------------------------- host_start + * | `--------------------------------------- username_end + * `--------------------------------------------- protocol_end + */ + uint32_t protocol_end; + /** + * Username end is not `omitted` by default (-1) to make username and password + * getters less costly to implement. + */ + uint32_t username_end; + uint32_t host_start; + uint32_t host_end; + uint32_t port; + uint32_t pathname_start; + uint32_t search_start; + uint32_t hash_start; +}; + +ada_url ada_parse(const char* input, size_t length) noexcept { + return new ada::result( + ada::parse(std::string_view(input, length))); +} + +ada_url ada_parse_with_base(const char* input, size_t input_length, + const char* base, size_t base_length) noexcept { + auto base_out = + ada::parse(std::string_view(base, base_length)); + + if (!base_out) { + return new ada::result(base_out); + } + + return new ada::result(ada::parse( + std::string_view(input, input_length), &base_out.value())); +} + +bool ada_can_parse(const char* input, size_t length) noexcept { + return ada::can_parse(std::string_view(input, length)); +} + +bool ada_can_parse_with_base(const char* input, size_t input_length, + const char* base, size_t base_length) noexcept { + std::string_view base_view(base, base_length); + return ada::can_parse(std::string_view(input, input_length), &base_view); +} + +void ada_free(ada_url result) noexcept { + auto* r = (ada::result*)result; + delete r; +} + +ada_url ada_copy(ada_url input) noexcept { + ada::result& r = get_instance(input); + return new ada::result(r); +} + +bool ada_is_valid(ada_url result) noexcept { + ada::result& r = get_instance(result); + return r.has_value(); +} + +// caller must free the result with ada_free_owned_string +ada_owned_string ada_get_origin(ada_url result) noexcept { + ada::result& r = get_instance(result); + ada_owned_string owned{}; + if (!r) { + owned.data = nullptr; + owned.length = 0; + return owned; + } + std::string out = r->get_origin(); + owned.length = out.size(); + owned.data = new char[owned.length]; + memcpy((void*)owned.data, out.data(), owned.length); + return owned; +} + +void ada_free_owned_string(ada_owned_string owned) noexcept { + delete[] owned.data; +} + +ada_string ada_get_href(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_href(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_username(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_username(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_password(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_password(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_port(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_port(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_hash(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_hash(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_host(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_host(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_hostname(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_hostname(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_pathname(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_pathname(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_search(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_search(); + return ada_string_create(out.data(), out.length()); +} + +ada_string ada_get_protocol(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view out = r->get_protocol(); + return ada_string_create(out.data(), out.length()); +} + +uint8_t ada_get_host_type(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return 0; + } + return r->host_type; +} + +uint8_t ada_get_scheme_type(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return 0; + } + return r->type; +} + +bool ada_set_href(ada_url result, const char* input, size_t length) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->set_href(std::string_view(input, length)); +} + +bool ada_set_host(ada_url result, const char* input, size_t length) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->set_host(std::string_view(input, length)); +} + +bool ada_set_hostname(ada_url result, const char* input, + size_t length) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->set_hostname(std::string_view(input, length)); +} + +bool ada_set_protocol(ada_url result, const char* input, + size_t length) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->set_protocol(std::string_view(input, length)); +} + +bool ada_set_username(ada_url result, const char* input, + size_t length) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->set_username(std::string_view(input, length)); +} + +bool ada_set_password(ada_url result, const char* input, + size_t length) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->set_password(std::string_view(input, length)); +} + +bool ada_set_port(ada_url result, const char* input, size_t length) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->set_port(std::string_view(input, length)); +} + +bool ada_set_pathname(ada_url result, const char* input, + size_t length) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->set_pathname(std::string_view(input, length)); +} + +/** + * Update the search/query of the URL. + * + * If a URL has `?` as the search value, passing empty string to this function + * does not remove the attribute. If you need to remove it, please use + * `ada_clear_search` method. + */ +void ada_set_search(ada_url result, const char* input, size_t length) noexcept { + ada::result& r = get_instance(result); + if (r) { + r->set_search(std::string_view(input, length)); + } +} + +/** + * Update the hash/fragment of the URL. + * + * If a URL has `#` as the hash value, passing empty string to this function + * does not remove the attribute. If you need to remove it, please use + * `ada_clear_hash` method. + */ +void ada_set_hash(ada_url result, const char* input, size_t length) noexcept { + ada::result& r = get_instance(result); + if (r) { + r->set_hash(std::string_view(input, length)); + } +} + +void ada_clear_port(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (r) { + r->clear_port(); + } +} + +/** + * Removes the hash of the URL. + * + * Despite `ada_set_hash` method, this function allows the complete + * removal of the hash attribute, even if it has a value of `#`. + */ +void ada_clear_hash(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (r) { + r->clear_hash(); + } +} + +/** + * Removes the search of the URL. + * + * Despite `ada_set_search` method, this function allows the complete + * removal of the search attribute, even if it has a value of `?`. + */ +void ada_clear_search(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (r) { + r->clear_search(); + } +} + +bool ada_has_credentials(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_credentials(); +} + +bool ada_has_empty_hostname(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_empty_hostname(); +} + +bool ada_has_hostname(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_hostname(); +} + +bool ada_has_non_empty_username(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_non_empty_username(); +} + +bool ada_has_non_empty_password(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_non_empty_password(); +} + +bool ada_has_port(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_port(); +} + +bool ada_has_password(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_password(); +} + +bool ada_has_hash(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_hash(); +} + +bool ada_has_search(ada_url result) noexcept { + ada::result& r = get_instance(result); + if (!r) { + return false; + } + return r->has_search(); +} + +// returns a pointer to the internal url_aggregator::url_components +const ada_url_components* ada_get_components(ada_url result) noexcept { + static_assert(sizeof(ada_url_components) == sizeof(ada::url_components)); + ada::result& r = get_instance(result); + if (!r) { + return nullptr; + } + return reinterpret_cast(&r->get_components()); +} + +ada_owned_string ada_idna_to_unicode(const char* input, size_t length) { + std::string out = ada::idna::to_unicode(std::string_view(input, length)); + ada_owned_string owned{}; + owned.length = out.length(); + owned.data = new char[owned.length]; + memcpy((void*)owned.data, out.data(), owned.length); + return owned; +} + +ada_owned_string ada_idna_to_ascii(const char* input, size_t length) { + std::string out = ada::idna::to_ascii(std::string_view(input, length)); + ada_owned_string owned{}; + owned.length = out.size(); + owned.data = new char[owned.length]; + memcpy((void*)owned.data, out.data(), owned.length); + return owned; +} + +ada_url_search_params ada_parse_search_params(const char* input, + size_t length) { + return new ada::result( + ada::url_search_params(std::string_view(input, length))); +} + +void ada_free_search_params(ada_url_search_params result) { + auto* r = (ada::result*)result; + delete r; +} + +ada_owned_string ada_search_params_to_string(ada_url_search_params result) { + ada::result& r = + *(ada::result*)result; + if (!r) return ada_owned_string{nullptr, 0}; + std::string out = r->to_string(); + ada_owned_string owned{}; + owned.length = out.size(); + owned.data = new char[owned.length]; + memcpy((void*)owned.data, out.data(), owned.length); + return owned; +} + +size_t ada_search_params_size(ada_url_search_params result) { + ada::result& r = + *(ada::result*)result; + if (!r) { + return 0; + } + return r->size(); +} + +void ada_search_params_sort(ada_url_search_params result) { + ada::result& r = + *(ada::result*)result; + if (r) { + r->sort(); + } +} + +void ada_search_params_reset(ada_url_search_params result, const char* input, + size_t length) { + ada::result& r = + *(ada::result*)result; + if (r) { + r->reset(std::string_view(input, length)); + } +} + +void ada_search_params_append(ada_url_search_params result, const char* key, + size_t key_length, const char* value, + size_t value_length) { + ada::result& r = + *(ada::result*)result; + if (r) { + r->append(std::string_view(key, key_length), + std::string_view(value, value_length)); + } +} + +void ada_search_params_set(ada_url_search_params result, const char* key, + size_t key_length, const char* value, + size_t value_length) { + ada::result& r = + *(ada::result*)result; + if (r) { + r->set(std::string_view(key, key_length), + std::string_view(value, value_length)); + } +} + +void ada_search_params_remove(ada_url_search_params result, const char* key, + size_t key_length) { + ada::result& r = + *(ada::result*)result; + if (r) { + r->remove(std::string_view(key, key_length)); + } +} + +void ada_search_params_remove_value(ada_url_search_params result, + const char* key, size_t key_length, + const char* value, size_t value_length) { + ada::result& r = + *(ada::result*)result; + if (r) { + r->remove(std::string_view(key, key_length), + std::string_view(value, value_length)); + } +} + +bool ada_search_params_has(ada_url_search_params result, const char* key, + size_t key_length) { + ada::result& r = + *(ada::result*)result; + if (!r) { + return false; + } + return r->has(std::string_view(key, key_length)); +} + +bool ada_search_params_has_value(ada_url_search_params result, const char* key, + size_t key_length, const char* value, + size_t value_length) { + ada::result& r = + *(ada::result*)result; + if (!r) { + return false; + } + return r->has(std::string_view(key, key_length), + std::string_view(value, value_length)); +} + +ada_string ada_search_params_get(ada_url_search_params result, const char* key, + size_t key_length) { + ada::result& r = + *(ada::result*)result; + if (!r) { + return ada_string_create(nullptr, 0); + } + auto found = r->get(std::string_view(key, key_length)); + if (!found.has_value()) { + return ada_string_create(nullptr, 0); + } + return ada_string_create(found->data(), found->length()); +} + +ada_strings ada_search_params_get_all(ada_url_search_params result, + const char* key, size_t key_length) { + ada::result& r = + *(ada::result*)result; + if (!r) { + return new ada::result>( + std::vector()); + } + return new ada::result>( + r->get_all(std::string_view(key, key_length))); +} + +ada_url_search_params_keys_iter ada_search_params_get_keys( + ada_url_search_params result) { + ada::result& r = + *(ada::result*)result; + if (!r) { + return new ada::result( + ada::url_search_params_keys_iter()); + } + return new ada::result(r->get_keys()); +} + +ada_url_search_params_values_iter ada_search_params_get_values( + ada_url_search_params result) { + ada::result& r = + *(ada::result*)result; + if (!r) { + return new ada::result( + ada::url_search_params_values_iter()); + } + return new ada::result(r->get_values()); +} + +ada_url_search_params_entries_iter ada_search_params_get_entries( + ada_url_search_params result) { + ada::result& r = + *(ada::result*)result; + if (!r) { + return new ada::result( + ada::url_search_params_entries_iter()); + } + return new ada::result(r->get_entries()); +} + +void ada_free_strings(ada_strings result) { + auto* r = (ada::result>*)result; + delete r; +} + +size_t ada_strings_size(ada_strings result) { + auto* r = (ada::result>*)result; + if (!r) { + return 0; + } + return (*r)->size(); +} + +ada_string ada_strings_get(ada_strings result, size_t index) { + auto* r = (ada::result>*)result; + if (!r) { + return ada_string_create(nullptr, 0); + } + std::string_view view = (*r)->at(index); + return ada_string_create(view.data(), view.length()); +} + +void ada_free_search_params_keys_iter(ada_url_search_params_keys_iter result) { + auto* r = (ada::result*)result; + delete r; +} + +ada_string ada_search_params_keys_iter_next( + ada_url_search_params_keys_iter result) { + auto* r = (ada::result*)result; + if (!r) { + return ada_string_create(nullptr, 0); + } + auto next = (*r)->next(); + if (!next.has_value()) { + return ada_string_create(nullptr, 0); + } + return ada_string_create(next->data(), next->length()); +} + +bool ada_search_params_keys_iter_has_next( + ada_url_search_params_keys_iter result) { + auto* r = (ada::result*)result; + if (!r) { + return false; + } + return (*r)->has_next(); +} + +void ada_free_search_params_values_iter( + ada_url_search_params_values_iter result) { + auto* r = (ada::result*)result; + delete r; +} + +ada_string ada_search_params_values_iter_next( + ada_url_search_params_values_iter result) { + auto* r = (ada::result*)result; + if (!r) { + return ada_string_create(nullptr, 0); + } + auto next = (*r)->next(); + if (!next.has_value()) { + return ada_string_create(nullptr, 0); + } + return ada_string_create(next->data(), next->length()); +} + +bool ada_search_params_values_iter_has_next( + ada_url_search_params_values_iter result) { + auto* r = (ada::result*)result; + if (!r) { + return false; + } + return (*r)->has_next(); +} + +void ada_free_search_params_entries_iter( + ada_url_search_params_entries_iter result) { + auto* r = (ada::result*)result; + delete r; +} + +ada_string_pair ada_search_params_entries_iter_next( + ada_url_search_params_entries_iter result) { + auto* r = (ada::result*)result; + if (!r) return {ada_string_create(nullptr, 0), ada_string_create(nullptr, 0)}; + auto next = (*r)->next(); + if (!next.has_value()) { + return {ada_string_create(nullptr, 0), ada_string_create(nullptr, 0)}; + } + return ada_string_pair{ + ada_string_create(next->first.data(), next->first.length()), + ada_string_create(next->second.data(), next->second.length())}; +} + +bool ada_search_params_entries_iter_has_next( + ada_url_search_params_entries_iter result) { + auto* r = (ada::result*)result; + if (!r) { + return false; + } + return (*r)->has_next(); +} + +} // extern "C" +/* end file src/ada_c.cpp */ +/* end file src/ada.cpp */ diff --git a/common/ada/ada.h b/common/ada/ada.h new file mode 100644 index 000000000..b191694dc --- /dev/null +++ b/common/ada/ada.h @@ -0,0 +1,10274 @@ +/* auto-generated on 2025-01-30 14:25:38 -0500. Do not edit! */ +/* begin file include/ada.h */ +/** + * @file ada.h + * @brief Includes all definitions for Ada. + */ +#ifndef ADA_H +#define ADA_H + +/* begin file include/ada/ada_idna.h */ +/* auto-generated on 2024-12-18 09:44:34 -0500. Do not edit! */ +/* begin file include/idna.h */ +#ifndef ADA_IDNA_H +#define ADA_IDNA_H + +/* begin file include/ada/idna/unicode_transcoding.h */ +#ifndef ADA_IDNA_UNICODE_TRANSCODING_H +#define ADA_IDNA_UNICODE_TRANSCODING_H + +#include +#include + +namespace ada::idna { + +size_t utf8_to_utf32(const char *buf, size_t len, char32_t *utf32_output); + +size_t utf8_length_from_utf32(const char32_t *buf, size_t len); + +size_t utf32_length_from_utf8(const char *buf, size_t len); + +size_t utf32_to_utf8(const char32_t *buf, size_t len, char *utf8_output); + +} // namespace ada::idna + +#endif // ADA_IDNA_UNICODE_TRANSCODING_H +/* end file include/ada/idna/unicode_transcoding.h */ +/* begin file include/ada/idna/mapping.h */ +#ifndef ADA_IDNA_MAPPING_H +#define ADA_IDNA_MAPPING_H + +#include +#include + +namespace ada::idna { + +// If the input is ascii, then the mapping is just -> lower case. +void ascii_map(char *input, size_t length); +// check whether an ascii string needs mapping +bool ascii_has_upper_case(char *input, size_t length); +// Map the characters according to IDNA, returning the empty string on error. +std::u32string map(std::u32string_view input); + +} // namespace ada::idna + +#endif +/* end file include/ada/idna/mapping.h */ +/* begin file include/ada/idna/normalization.h */ +#ifndef ADA_IDNA_NORMALIZATION_H +#define ADA_IDNA_NORMALIZATION_H + +#include +#include + +namespace ada::idna { + +// Normalize the characters according to IDNA (Unicode Normalization Form C). +void normalize(std::u32string &input); + +} // namespace ada::idna +#endif +/* end file include/ada/idna/normalization.h */ +/* begin file include/ada/idna/punycode.h */ +#ifndef ADA_IDNA_PUNYCODE_H +#define ADA_IDNA_PUNYCODE_H + +#include +#include + +namespace ada::idna { + +bool punycode_to_utf32(std::string_view input, std::u32string &out); +bool verify_punycode(std::string_view input); +bool utf32_to_punycode(std::u32string_view input, std::string &out); + +} // namespace ada::idna + +#endif // ADA_IDNA_PUNYCODE_H +/* end file include/ada/idna/punycode.h */ +/* begin file include/ada/idna/validity.h */ +#ifndef ADA_IDNA_VALIDITY_H +#define ADA_IDNA_VALIDITY_H + +#include +#include + +namespace ada::idna { + +/** + * @see https://www.unicode.org/reports/tr46/#Validity_Criteria + */ +bool is_label_valid(std::u32string_view label); + +} // namespace ada::idna + +#endif // ADA_IDNA_VALIDITY_H +/* end file include/ada/idna/validity.h */ +/* begin file include/ada/idna/to_ascii.h */ +#ifndef ADA_IDNA_TO_ASCII_H +#define ADA_IDNA_TO_ASCII_H + +#include +#include + +namespace ada::idna { + +// Converts a domain (e.g., www.google.com) possibly containing international +// characters to an ascii domain (with punycode). It will not do percent +// decoding: percent decoding should be done prior to calling this function. We +// do not remove tabs and spaces, they should have been removed prior to calling +// this function. We also do not trim control characters. We also assume that +// the input is not empty. We return "" on error. +// +// +// This function may accept or even produce invalid domains. +std::string to_ascii(std::string_view ut8_string); + +// Returns true if the string contains a forbidden code point according to the +// WHATGL URL specification: +// https://url.spec.whatwg.org/#forbidden-domain-code-point +bool contains_forbidden_domain_code_point(std::string_view ascii_string); + +bool constexpr is_ascii(std::u32string_view view); +bool constexpr is_ascii(std::string_view view); + +} // namespace ada::idna + +#endif // ADA_IDNA_TO_ASCII_H +/* end file include/ada/idna/to_ascii.h */ +/* begin file include/ada/idna/to_unicode.h */ + +#ifndef ADA_IDNA_TO_UNICODE_H +#define ADA_IDNA_TO_UNICODE_H + +#include + +namespace ada::idna { + +std::string to_unicode(std::string_view input); + +} // namespace ada::idna + +#endif // ADA_IDNA_TO_UNICODE_H +/* end file include/ada/idna/to_unicode.h */ +/* begin file include/ada/idna/identifier.h */ +#ifndef ADA_IDNA_IDENTIFIER_H +#define ADA_IDNA_IDENTIFIER_H + +#include +#include + +namespace ada::idna { + +// Access the first code point of the input string. +// Verify if it is valid name code point given a Unicode code point and a +// boolean first: If first is true return the result of checking if code point +// is contained in the IdentifierStart set of code points. Otherwise return the +// result of checking if code point is contained in the IdentifierPart set of +// code points. Returns false if the input is empty or the code point is not +// valid. There is minimal Unicode error handling: the input should be valid +// UTF-8. https://urlpattern.spec.whatwg.org/#is-a-valid-name-code-point +bool valid_name_code_point(char32_t input, bool first); + +} // namespace ada::idna + +#endif +/* end file include/ada/idna/identifier.h */ + +#endif +/* end file include/idna.h */ +/* end file include/ada/ada_idna.h */ +/* begin file include/ada/character_sets.h */ +/** + * @file character_sets.h + * @brief Declaration of the character sets used by unicode functions. + * @author Node.js + * @see https://github.com/nodejs/node/blob/main/src/node_url_tables.cc + */ +#ifndef ADA_CHARACTER_SETS_H +#define ADA_CHARACTER_SETS_H + +/* begin file include/ada/common_defs.h */ +/** + * @file common_defs.h + * @brief Common definitions for cross-platform compiler support. + */ +#ifndef ADA_COMMON_DEFS_H +#define ADA_COMMON_DEFS_H + +// https://en.cppreference.com/w/cpp/feature_test#Library_features +// detect C++20 features +#include + +#ifdef _MSC_VER +#define ADA_VISUAL_STUDIO 1 +/** + * We want to differentiate carefully between + * clang under visual studio and regular visual + * studio. + */ +#ifdef __clang__ +// clang under visual studio +#define ADA_CLANG_VISUAL_STUDIO 1 +#else +// just regular visual studio (best guess) +#define ADA_REGULAR_VISUAL_STUDIO 1 +#endif // __clang__ +#endif // _MSC_VER + +#if defined(__GNUC__) +// Marks a block with a name so that MCA analysis can see it. +#define ADA_BEGIN_DEBUG_BLOCK(name) __asm volatile("# LLVM-MCA-BEGIN " #name); +#define ADA_END_DEBUG_BLOCK(name) __asm volatile("# LLVM-MCA-END " #name); +#define ADA_DEBUG_BLOCK(name, block) \ + BEGIN_DEBUG_BLOCK(name); \ + block; \ + END_DEBUG_BLOCK(name); +#else +#define ADA_BEGIN_DEBUG_BLOCK(name) +#define ADA_END_DEBUG_BLOCK(name) +#define ADA_DEBUG_BLOCK(name, block) +#endif + +// Align to N-byte boundary +#define ADA_ROUNDUP_N(a, n) (((a) + ((n) - 1)) & ~((n) - 1)) +#define ADA_ROUNDDOWN_N(a, n) ((a) & ~((n) - 1)) + +#define ADA_ISALIGNED_N(ptr, n) (((uintptr_t)(ptr) & ((n) - 1)) == 0) + +#if defined(ADA_REGULAR_VISUAL_STUDIO) + +#define ada_really_inline __forceinline +#define ada_never_inline __declspec(noinline) + +#define ada_unused +#define ada_warn_unused + +#define ADA_PUSH_DISABLE_WARNINGS __pragma(warning(push)) +#define ADA_PUSH_DISABLE_ALL_WARNINGS __pragma(warning(push, 0)) +#define ADA_DISABLE_VS_WARNING(WARNING_NUMBER) \ + __pragma(warning(disable : WARNING_NUMBER)) +// Get rid of Intellisense-only warnings (Code Analysis) +// Though __has_include is C++17, it is supported in Visual Studio 2017 or +// better (_MSC_VER>=1910). +#ifdef __has_include +#if __has_include() +#include +#define ADA_DISABLE_UNDESIRED_WARNINGS \ + ADA_DISABLE_VS_WARNING(ALL_CPPCORECHECK_WARNINGS) +#endif +#endif + +#ifndef ADA_DISABLE_UNDESIRED_WARNINGS +#define ADA_DISABLE_UNDESIRED_WARNINGS +#endif + +#define ADA_DISABLE_DEPRECATED_WARNING ADA_DISABLE_VS_WARNING(4996) +#define ADA_DISABLE_STRICT_OVERFLOW_WARNING +#define ADA_POP_DISABLE_WARNINGS __pragma(warning(pop)) + +#else // ADA_REGULAR_VISUAL_STUDIO + +#define ada_really_inline inline __attribute__((always_inline)) +#define ada_never_inline inline __attribute__((noinline)) + +#define ada_unused __attribute__((unused)) +#define ada_warn_unused __attribute__((warn_unused_result)) + +#define ADA_PUSH_DISABLE_WARNINGS _Pragma("GCC diagnostic push") +// gcc doesn't seem to disable all warnings with all and extra, add warnings +// here as necessary +#define ADA_PUSH_DISABLE_ALL_WARNINGS \ + ADA_PUSH_DISABLE_WARNINGS \ + ADA_DISABLE_GCC_WARNING("-Weffc++") \ + ADA_DISABLE_GCC_WARNING("-Wall") \ + ADA_DISABLE_GCC_WARNING("-Wconversion") \ + ADA_DISABLE_GCC_WARNING("-Wextra") \ + ADA_DISABLE_GCC_WARNING("-Wattributes") \ + ADA_DISABLE_GCC_WARNING("-Wimplicit-fallthrough") \ + ADA_DISABLE_GCC_WARNING("-Wnon-virtual-dtor") \ + ADA_DISABLE_GCC_WARNING("-Wreturn-type") \ + ADA_DISABLE_GCC_WARNING("-Wshadow") \ + ADA_DISABLE_GCC_WARNING("-Wunused-parameter") \ + ADA_DISABLE_GCC_WARNING("-Wunused-variable") +#define ADA_PRAGMA(P) _Pragma(#P) +#define ADA_DISABLE_GCC_WARNING(WARNING) \ + ADA_PRAGMA(GCC diagnostic ignored WARNING) +#if defined(ADA_CLANG_VISUAL_STUDIO) +#define ADA_DISABLE_UNDESIRED_WARNINGS \ + ADA_DISABLE_GCC_WARNING("-Wmicrosoft-include") +#else +#define ADA_DISABLE_UNDESIRED_WARNINGS +#endif +#define ADA_DISABLE_DEPRECATED_WARNING \ + ADA_DISABLE_GCC_WARNING("-Wdeprecated-declarations") +#define ADA_DISABLE_STRICT_OVERFLOW_WARNING \ + ADA_DISABLE_GCC_WARNING("-Wstrict-overflow") +#define ADA_POP_DISABLE_WARNINGS _Pragma("GCC diagnostic pop") + +#endif // MSC_VER + +#if defined(ADA_VISUAL_STUDIO) +/** + * It does not matter here whether you are using + * the regular visual studio or clang under visual + * studio. + */ +#if ADA_USING_LIBRARY +#define ADA_DLLIMPORTEXPORT __declspec(dllimport) +#else +#define ADA_DLLIMPORTEXPORT __declspec(dllexport) +#endif +#else +#define ADA_DLLIMPORTEXPORT +#endif + +/// If EXPR is an error, returns it. +#define ADA_TRY(EXPR) \ + { \ + auto _err = (EXPR); \ + if (_err) { \ + return _err; \ + } \ + } + +// __has_cpp_attribute is part of C++20 +#if !defined(__has_cpp_attribute) +#define __has_cpp_attribute(x) 0 +#endif + +#if __has_cpp_attribute(gnu::noinline) +#define ADA_ATTRIBUTE_NOINLINE [[gnu::noinline]] +#else +#define ADA_ATTRIBUTE_NOINLINE +#endif + +namespace ada { +[[noreturn]] inline void unreachable() { +#ifdef __GNUC__ + __builtin_unreachable(); +#elif defined(_MSC_VER) + __assume(false); +#else +#endif +} +} // namespace ada + +// Unless the programmer has already set ADA_DEVELOPMENT_CHECKS, +// we want to set it under debug builds. We detect a debug build +// under Visual Studio when the _DEBUG macro is set. Under the other +// compilers, we use the fact that they define __OPTIMIZE__ whenever +// they allow optimizations. +// It is possible that this could miss some cases where ADA_DEVELOPMENT_CHECKS +// is helpful, but the programmer can set the macro ADA_DEVELOPMENT_CHECKS. +// It could also wrongly set ADA_DEVELOPMENT_CHECKS (e.g., if the programmer +// sets _DEBUG in a release build under Visual Studio, or if some compiler fails +// to set the __OPTIMIZE__ macro). +#if !defined(ADA_DEVELOPMENT_CHECKS) && !defined(NDEBUG) +#ifdef _MSC_VER +// Visual Studio seems to set _DEBUG for debug builds. +#ifdef _DEBUG +#define ADA_DEVELOPMENT_CHECKS 1 +#endif // _DEBUG +#else // _MSC_VER +// All other compilers appear to set __OPTIMIZE__ to a positive integer +// when the compiler is optimizing. +#ifndef __OPTIMIZE__ +#define ADA_DEVELOPMENT_CHECKS 1 +#endif // __OPTIMIZE__ +#endif // _MSC_VER +#endif // ADA_DEVELOPMENT_CHECKS + +#define ADA_STR(x) #x + +#if ADA_DEVELOPMENT_CHECKS +#define ADA_REQUIRE(EXPR) \ + { \ + if (!(EXPR) { abort(); }) \ + } + +#define ADA_FAIL(MESSAGE) \ + do { \ + std::cerr << "FAIL: " << (MESSAGE) << std::endl; \ + abort(); \ + } while (0); +#define ADA_ASSERT_EQUAL(LHS, RHS, MESSAGE) \ + do { \ + if (LHS != RHS) { \ + std::cerr << "Mismatch: '" << LHS << "' - '" << RHS << "'" << std::endl; \ + ADA_FAIL(MESSAGE); \ + } \ + } while (0); +#define ADA_ASSERT_TRUE(COND) \ + do { \ + if (!(COND)) { \ + std::cerr << "Assert at line " << __LINE__ << " of file " << __FILE__ \ + << std::endl; \ + ADA_FAIL(ADA_STR(COND)); \ + } \ + } while (0); +#else +#define ADA_FAIL(MESSAGE) +#define ADA_ASSERT_EQUAL(LHS, RHS, MESSAGE) +#define ADA_ASSERT_TRUE(COND) +#endif + +#ifdef ADA_VISUAL_STUDIO +#define ADA_ASSUME(COND) __assume(COND) +#else +#define ADA_ASSUME(COND) \ + do { \ + if (!(COND)) { \ + __builtin_unreachable(); \ + } \ + } while (0) +#endif + +#if defined(__SSE2__) || defined(__x86_64__) || defined(__x86_64) || \ + (defined(_M_AMD64) || defined(_M_X64) || \ + (defined(_M_IX86_FP) && _M_IX86_FP == 2)) +#define ADA_SSE2 1 +#endif + +#if defined(__aarch64__) || defined(_M_ARM64) +#define ADA_NEON 1 +#endif + +#ifndef __has_cpp_attribute +#define ada_lifetime_bound +#elif __has_cpp_attribute(msvc::lifetimebound) +#define ada_lifetime_bound [[msvc::lifetimebound]] +#elif __has_cpp_attribute(clang::lifetimebound) +#define ada_lifetime_bound [[clang::lifetimebound]] +#elif __has_cpp_attribute(lifetimebound) +#define ada_lifetime_bound [[lifetimebound]] +#else +#define ada_lifetime_bound +#endif + +#ifdef __cpp_lib_format +#if __cpp_lib_format >= 202110L +#include +#define ADA_HAS_FORMAT 1 +#endif +#endif + +#endif // ADA_COMMON_DEFS_H +/* end file include/ada/common_defs.h */ +#include + +/** + * These functions are not part of our public API and may + * change at any time. + * @private + * @namespace ada::character_sets + * @brief Includes the definitions for unicode character sets. + */ +namespace ada::character_sets { +ada_really_inline constexpr bool bit_at(const uint8_t a[], uint8_t i); +} // namespace ada::character_sets + +#endif // ADA_CHARACTER_SETS_H +/* end file include/ada/character_sets.h */ +/* begin file include/ada/character_sets-inl.h */ +/** + * @file character_sets-inl.h + * @brief Definitions of the character sets used by unicode functions. + * @author Node.js + * @see https://github.com/nodejs/node/blob/main/src/node_url_tables.cc + */ +#ifndef ADA_CHARACTER_SETS_INL_H +#define ADA_CHARACTER_SETS_INL_H + +/** + * These functions are not part of our public API and may + * change at any time. + * @private + */ +namespace ada::character_sets { + +constexpr char hex[1024] = "%00\0%01\0%02\0%03\0%04\0%05\0%06\0%07\0" + "%08\0%09\0%0A\0%0B\0%0C\0%0D\0%0E\0%0F\0" + "%10\0%11\0%12\0%13\0%14\0%15\0%16\0%17\0" + "%18\0%19\0%1A\0%1B\0%1C\0%1D\0%1E\0%1F\0" + "%20\0%21\0%22\0%23\0%24\0%25\0%26\0%27\0" + "%28\0%29\0%2A\0%2B\0%2C\0%2D\0%2E\0%2F\0" + "%30\0%31\0%32\0%33\0%34\0%35\0%36\0%37\0" + "%38\0%39\0%3A\0%3B\0%3C\0%3D\0%3E\0%3F\0" + "%40\0%41\0%42\0%43\0%44\0%45\0%46\0%47\0" + "%48\0%49\0%4A\0%4B\0%4C\0%4D\0%4E\0%4F\0" + "%50\0%51\0%52\0%53\0%54\0%55\0%56\0%57\0" + "%58\0%59\0%5A\0%5B\0%5C\0%5D\0%5E\0%5F\0" + "%60\0%61\0%62\0%63\0%64\0%65\0%66\0%67\0" + "%68\0%69\0%6A\0%6B\0%6C\0%6D\0%6E\0%6F\0" + "%70\0%71\0%72\0%73\0%74\0%75\0%76\0%77\0" + "%78\0%79\0%7A\0%7B\0%7C\0%7D\0%7E\0%7F\0" + "%80\0%81\0%82\0%83\0%84\0%85\0%86\0%87\0" + "%88\0%89\0%8A\0%8B\0%8C\0%8D\0%8E\0%8F\0" + "%90\0%91\0%92\0%93\0%94\0%95\0%96\0%97\0" + "%98\0%99\0%9A\0%9B\0%9C\0%9D\0%9E\0%9F\0" + "%A0\0%A1\0%A2\0%A3\0%A4\0%A5\0%A6\0%A7\0" + "%A8\0%A9\0%AA\0%AB\0%AC\0%AD\0%AE\0%AF\0" + "%B0\0%B1\0%B2\0%B3\0%B4\0%B5\0%B6\0%B7\0" + "%B8\0%B9\0%BA\0%BB\0%BC\0%BD\0%BE\0%BF\0" + "%C0\0%C1\0%C2\0%C3\0%C4\0%C5\0%C6\0%C7\0" + "%C8\0%C9\0%CA\0%CB\0%CC\0%CD\0%CE\0%CF\0" + "%D0\0%D1\0%D2\0%D3\0%D4\0%D5\0%D6\0%D7\0" + "%D8\0%D9\0%DA\0%DB\0%DC\0%DD\0%DE\0%DF\0" + "%E0\0%E1\0%E2\0%E3\0%E4\0%E5\0%E6\0%E7\0" + "%E8\0%E9\0%EA\0%EB\0%EC\0%ED\0%EE\0%EF\0" + "%F0\0%F1\0%F2\0%F3\0%F4\0%F5\0%F6\0%F7\0" + "%F8\0%F9\0%FA\0%FB\0%FC\0%FD\0%FE\0%FF"; + +constexpr uint8_t C0_CONTROL_PERCENT_ENCODE[32] = { + // 00 01 02 03 04 05 06 07 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 08 09 0A 0B 0C 0D 0E 0F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 10 11 12 13 14 15 16 17 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 18 19 1A 1B 1C 1D 1E 1F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 20 21 22 23 24 25 26 27 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 28 29 2A 2B 2C 2D 2E 2F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 30 31 32 33 34 35 36 37 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 38 39 3A 3B 3C 3D 3E 3F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 40 41 42 43 44 45 46 47 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 48 49 4A 4B 4C 4D 4E 4F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 50 51 52 53 54 55 56 57 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 58 59 5A 5B 5C 5D 5E 5F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 60 61 62 63 64 65 66 67 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 68 69 6A 6B 6C 6D 6E 6F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 70 71 72 73 74 75 76 77 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 78 79 7A 7B 7C 7D 7E 7F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x80, + // 80 81 82 83 84 85 86 87 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 88 89 8A 8B 8C 8D 8E 8F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 90 91 92 93 94 95 96 97 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 98 99 9A 9B 9C 9D 9E 9F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A0 A1 A2 A3 A4 A5 A6 A7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A8 A9 AA AB AC AD AE AF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B0 B1 B2 B3 B4 B5 B6 B7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B8 B9 BA BB BC BD BE BF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C0 C1 C2 C3 C4 C5 C6 C7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C8 C9 CA CB CC CD CE CF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D0 D1 D2 D3 D4 D5 D6 D7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D8 D9 DA DB DC DD DE DF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E0 E1 E2 E3 E4 E5 E6 E7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E8 E9 EA EB EC ED EE EF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F0 F1 F2 F3 F4 F5 F6 F7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F8 F9 FA FB FC FD FE FF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80}; + +constexpr uint8_t SPECIAL_QUERY_PERCENT_ENCODE[32] = { + // 00 01 02 03 04 05 06 07 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 08 09 0A 0B 0C 0D 0E 0F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 10 11 12 13 14 15 16 17 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 18 19 1A 1B 1C 1D 1E 1F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 20 21 22 23 24 25 26 27 + 0x01 | 0x00 | 0x04 | 0x08 | 0x00 | 0x00 | 0x00 | 0x80, + // 28 29 2A 2B 2C 2D 2E 2F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 30 31 32 33 34 35 36 37 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 38 39 3A 3B 3C 3D 3E 3F + 0x00 | 0x00 | 0x00 | 0x00 | 0x10 | 0x00 | 0x40 | 0x00, + // 40 41 42 43 44 45 46 47 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 48 49 4A 4B 4C 4D 4E 4F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 50 51 52 53 54 55 56 57 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 58 59 5A 5B 5C 5D 5E 5F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 60 61 62 63 64 65 66 67 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 68 69 6A 6B 6C 6D 6E 6F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 70 71 72 73 74 75 76 77 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 78 79 7A 7B 7C 7D 7E 7F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x80, + // 80 81 82 83 84 85 86 87 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 88 89 8A 8B 8C 8D 8E 8F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 90 91 92 93 94 95 96 97 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 98 99 9A 9B 9C 9D 9E 9F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A0 A1 A2 A3 A4 A5 A6 A7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A8 A9 AA AB AC AD AE AF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B0 B1 B2 B3 B4 B5 B6 B7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B8 B9 BA BB BC BD BE BF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C0 C1 C2 C3 C4 C5 C6 C7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C8 C9 CA CB CC CD CE CF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D0 D1 D2 D3 D4 D5 D6 D7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D8 D9 DA DB DC DD DE DF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E0 E1 E2 E3 E4 E5 E6 E7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E8 E9 EA EB EC ED EE EF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F0 F1 F2 F3 F4 F5 F6 F7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F8 F9 FA FB FC FD FE FF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80}; + +constexpr uint8_t QUERY_PERCENT_ENCODE[32] = { + // 00 01 02 03 04 05 06 07 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 08 09 0A 0B 0C 0D 0E 0F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 10 11 12 13 14 15 16 17 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 18 19 1A 1B 1C 1D 1E 1F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 20 21 22 23 24 25 26 27 + 0x01 | 0x00 | 0x04 | 0x08 | 0x00 | 0x00 | 0x00 | 0x00, + // 28 29 2A 2B 2C 2D 2E 2F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 30 31 32 33 34 35 36 37 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 38 39 3A 3B 3C 3D 3E 3F + 0x00 | 0x00 | 0x00 | 0x00 | 0x10 | 0x00 | 0x40 | 0x00, + // 40 41 42 43 44 45 46 47 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 48 49 4A 4B 4C 4D 4E 4F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 50 51 52 53 54 55 56 57 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 58 59 5A 5B 5C 5D 5E 5F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 60 61 62 63 64 65 66 67 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 68 69 6A 6B 6C 6D 6E 6F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 70 71 72 73 74 75 76 77 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 78 79 7A 7B 7C 7D 7E 7F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x80, + // 80 81 82 83 84 85 86 87 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 88 89 8A 8B 8C 8D 8E 8F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 90 91 92 93 94 95 96 97 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 98 99 9A 9B 9C 9D 9E 9F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A0 A1 A2 A3 A4 A5 A6 A7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A8 A9 AA AB AC AD AE AF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B0 B1 B2 B3 B4 B5 B6 B7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B8 B9 BA BB BC BD BE BF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C0 C1 C2 C3 C4 C5 C6 C7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C8 C9 CA CB CC CD CE CF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D0 D1 D2 D3 D4 D5 D6 D7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D8 D9 DA DB DC DD DE DF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E0 E1 E2 E3 E4 E5 E6 E7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E8 E9 EA EB EC ED EE EF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F0 F1 F2 F3 F4 F5 F6 F7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F8 F9 FA FB FC FD FE FF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80}; + +constexpr uint8_t FRAGMENT_PERCENT_ENCODE[32] = { + // 00 01 02 03 04 05 06 07 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 08 09 0A 0B 0C 0D 0E 0F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 10 11 12 13 14 15 16 17 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 18 19 1A 1B 1C 1D 1E 1F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 20 21 22 23 24 25 26 27 + 0x01 | 0x00 | 0x04 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 28 29 2A 2B 2C 2D 2E 2F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 30 31 32 33 34 35 36 37 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 38 39 3A 3B 3C 3D 3E 3F + 0x00 | 0x00 | 0x00 | 0x00 | 0x10 | 0x00 | 0x40 | 0x00, + // 40 41 42 43 44 45 46 47 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 48 49 4A 4B 4C 4D 4E 4F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 50 51 52 53 54 55 56 57 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 58 59 5A 5B 5C 5D 5E 5F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 60 61 62 63 64 65 66 67 + 0x01 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 68 69 6A 6B 6C 6D 6E 6F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 70 71 72 73 74 75 76 77 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 78 79 7A 7B 7C 7D 7E 7F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x80, + // 80 81 82 83 84 85 86 87 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 88 89 8A 8B 8C 8D 8E 8F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 90 91 92 93 94 95 96 97 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 98 99 9A 9B 9C 9D 9E 9F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A0 A1 A2 A3 A4 A5 A6 A7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A8 A9 AA AB AC AD AE AF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B0 B1 B2 B3 B4 B5 B6 B7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B8 B9 BA BB BC BD BE BF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C0 C1 C2 C3 C4 C5 C6 C7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C8 C9 CA CB CC CD CE CF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D0 D1 D2 D3 D4 D5 D6 D7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D8 D9 DA DB DC DD DE DF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E0 E1 E2 E3 E4 E5 E6 E7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E8 E9 EA EB EC ED EE EF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F0 F1 F2 F3 F4 F5 F6 F7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F8 F9 FA FB FC FD FE FF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80}; + +constexpr uint8_t USERINFO_PERCENT_ENCODE[32] = { + // 00 01 02 03 04 05 06 07 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 08 09 0A 0B 0C 0D 0E 0F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 10 11 12 13 14 15 16 17 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 18 19 1A 1B 1C 1D 1E 1F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 20 21 22 23 24 25 26 27 + 0x01 | 0x00 | 0x04 | 0x08 | 0x00 | 0x00 | 0x00 | 0x00, + // 28 29 2A 2B 2C 2D 2E 2F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x80, + // 30 31 32 33 34 35 36 37 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 38 39 3A 3B 3C 3D 3E 3F + 0x00 | 0x00 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 40 41 42 43 44 45 46 47 + 0x01 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 48 49 4A 4B 4C 4D 4E 4F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 50 51 52 53 54 55 56 57 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 58 59 5A 5B 5C 5D 5E 5F + 0x00 | 0x00 | 0x00 | 0x08 | 0x10 | 0x20 | 0x40 | 0x00, + // 60 61 62 63 64 65 66 67 + 0x01 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 68 69 6A 6B 6C 6D 6E 6F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 70 71 72 73 74 75 76 77 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 78 79 7A 7B 7C 7D 7E 7F + 0x00 | 0x00 | 0x00 | 0x08 | 0x10 | 0x20 | 0x00 | 0x80, + // 80 81 82 83 84 85 86 87 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 88 89 8A 8B 8C 8D 8E 8F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 90 91 92 93 94 95 96 97 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 98 99 9A 9B 9C 9D 9E 9F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A0 A1 A2 A3 A4 A5 A6 A7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A8 A9 AA AB AC AD AE AF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B0 B1 B2 B3 B4 B5 B6 B7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B8 B9 BA BB BC BD BE BF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C0 C1 C2 C3 C4 C5 C6 C7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C8 C9 CA CB CC CD CE CF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D0 D1 D2 D3 D4 D5 D6 D7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D8 D9 DA DB DC DD DE DF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E0 E1 E2 E3 E4 E5 E6 E7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E8 E9 EA EB EC ED EE EF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F0 F1 F2 F3 F4 F5 F6 F7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F8 F9 FA FB FC FD FE FF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80}; + +constexpr uint8_t PATH_PERCENT_ENCODE[32] = { + // 00 01 02 03 04 05 06 07 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 08 09 0A 0B 0C 0D 0E 0F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 10 11 12 13 14 15 16 17 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 18 19 1A 1B 1C 1D 1E 1F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 20 21 22 23 24 25 26 27 + 0x01 | 0x00 | 0x04 | 0x08 | 0x00 | 0x00 | 0x00 | 0x00, + // 28 29 2A 2B 2C 2D 2E 2F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 30 31 32 33 34 35 36 37 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 38 39 3A 3B 3C 3D 3E 3F + 0x00 | 0x00 | 0x00 | 0x00 | 0x10 | 0x00 | 0x40 | 0x80, + // 40 41 42 43 44 45 46 47 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 48 49 4A 4B 4C 4D 4E 4F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 50 51 52 53 54 55 56 57 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 58 59 5A 5B 5C 5D 5E 5F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 60 61 62 63 64 65 66 67 + 0x01 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 68 69 6A 6B 6C 6D 6E 6F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 70 71 72 73 74 75 76 77 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 78 79 7A 7B 7C 7D 7E 7F + 0x00 | 0x00 | 0x00 | 0x08 | 0x00 | 0x20 | 0x00 | 0x80, + // 80 81 82 83 84 85 86 87 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 88 89 8A 8B 8C 8D 8E 8F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 90 91 92 93 94 95 96 97 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 98 99 9A 9B 9C 9D 9E 9F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A0 A1 A2 A3 A4 A5 A6 A7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A8 A9 AA AB AC AD AE AF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B0 B1 B2 B3 B4 B5 B6 B7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B8 B9 BA BB BC BD BE BF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C0 C1 C2 C3 C4 C5 C6 C7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C8 C9 CA CB CC CD CE CF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D0 D1 D2 D3 D4 D5 D6 D7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D8 D9 DA DB DC DD DE DF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E0 E1 E2 E3 E4 E5 E6 E7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E8 E9 EA EB EC ED EE EF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F0 F1 F2 F3 F4 F5 F6 F7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F8 F9 FA FB FC FD FE FF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80}; + +constexpr uint8_t WWW_FORM_URLENCODED_PERCENT_ENCODE[32] = { + // 00 01 02 03 04 05 06 07 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 08 09 0A 0B 0C 0D 0E 0F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 10 11 12 13 14 15 16 17 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 18 19 1A 1B 1C 1D 1E 1F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 20 21 22 23 24 25 26 27 + 0x00 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 28 29 2A 2B 2C 2D 2E 2F + 0x01 | 0x02 | 0x00 | 0x08 | 0x10 | 0x00 | 0x00 | 0x80, + // 30 31 32 33 34 35 36 37 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 38 39 3A 3B 3C 3D 3E 3F + 0x00 | 0x00 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 40 41 42 43 44 45 46 47 + 0x01 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 48 49 4A 4B 4C 4D 4E 4F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 50 51 52 53 54 55 56 57 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 58 59 5A 5B 5C 5D 5E 5F + 0x00 | 0x00 | 0x00 | 0x08 | 0x00 | 0x20 | 0x40 | 0x00, + // 60 61 62 63 64 65 66 67 + 0x01 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 68 69 6A 6B 6C 6D 6E 6F + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 70 71 72 73 74 75 76 77 + 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00 | 0x00, + // 78 79 7A 7B 7C 7D 7E 7F + 0x00 | 0x00 | 0x00 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 80 81 82 83 84 85 86 87 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 88 89 8A 8B 8C 8D 8E 8F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 90 91 92 93 94 95 96 97 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // 98 99 9A 9B 9C 9D 9E 9F + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A0 A1 A2 A3 A4 A5 A6 A7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // A8 A9 AA AB AC AD AE AF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B0 B1 B2 B3 B4 B5 B6 B7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // B8 B9 BA BB BC BD BE BF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C0 C1 C2 C3 C4 C5 C6 C7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // C8 C9 CA CB CC CD CE CF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D0 D1 D2 D3 D4 D5 D6 D7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // D8 D9 DA DB DC DD DE DF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E0 E1 E2 E3 E4 E5 E6 E7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // E8 E9 EA EB EC ED EE EF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F0 F1 F2 F3 F4 F5 F6 F7 + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80, + // F8 F9 FA FB FC FD FE FF + 0x01 | 0x02 | 0x04 | 0x08 | 0x10 | 0x20 | 0x40 | 0x80}; + +ada_really_inline constexpr bool bit_at(const uint8_t a[], const uint8_t i) { + return !!(a[i >> 3] & (1 << (i & 7))); +} + +} // namespace ada::character_sets + +#endif // ADA_CHARACTER_SETS_INL_H +/* end file include/ada/character_sets-inl.h */ +/* begin file include/ada/checkers-inl.h */ +/** + * @file checkers-inl.h + * @brief Definitions for URL specific checkers used within Ada. + */ +#ifndef ADA_CHECKERS_INL_H +#define ADA_CHECKERS_INL_H + +#include +#include + +namespace ada::checkers { + +constexpr bool has_hex_prefix_unsafe(std::string_view input) { + // This is actually efficient code, see has_hex_prefix for the assembly. + constexpr bool is_little_endian = std::endian::native == std::endian::little; + constexpr uint16_t word0x = 0x7830; + uint16_t two_first_bytes = + static_cast(input[0]) | + static_cast((static_cast(input[1]) << 8)); + if constexpr (is_little_endian) { + two_first_bytes |= 0x2000; + } else { + two_first_bytes |= 0x020; + } + return two_first_bytes == word0x; +} + +constexpr bool has_hex_prefix(std::string_view input) { + return input.size() >= 2 && has_hex_prefix_unsafe(input); +} + +constexpr bool is_digit(char x) noexcept { return (x >= '0') & (x <= '9'); } + +constexpr char to_lower(char x) noexcept { return (x | 0x20); } + +constexpr bool is_alpha(char x) noexcept { + return (to_lower(x) >= 'a') && (to_lower(x) <= 'z'); +} + +constexpr bool is_windows_drive_letter(std::string_view input) noexcept { + return input.size() >= 2 && + (is_alpha(input[0]) && ((input[1] == ':') || (input[1] == '|'))) && + ((input.size() == 2) || (input[2] == '/' || input[2] == '\\' || + input[2] == '?' || input[2] == '#')); +} + +constexpr bool +is_normalized_windows_drive_letter(std::string_view input) noexcept { + return input.size() >= 2 && (is_alpha(input[0]) && (input[1] == ':')); +} + +} // namespace ada::checkers + +#endif // ADA_CHECKERS_INL_H +/* end file include/ada/checkers-inl.h */ +/* begin file include/ada/log.h */ +/** + * @file log.h + * @brief Includes the definitions for logging. + * @private Excluded from docs through the doxygen file. + */ +#ifndef ADA_LOG_H +#define ADA_LOG_H + +// To enable logging, set ADA_LOGGING to 1: +#ifndef ADA_LOGGING +#define ADA_LOGGING 0 +#endif + +#if ADA_LOGGING +#include +#endif // ADA_LOGGING + +namespace ada { + +/** + * Log a message. If you want to have no overhead when logging is disabled, use + * the ada_log macro. + * @private + */ +template +constexpr ada_really_inline void log([[maybe_unused]] Args... args) { +#if ADA_LOGGING + ((std::cout << "ADA_LOG: ") << ... << args) << std::endl; +#endif // ADA_LOGGING +} +} // namespace ada + +#if ADA_LOGGING +#ifndef ada_log +#define ada_log(...) \ + do { \ + ada::log(__VA_ARGS__); \ + } while (0) +#endif // ada_log +#else +#define ada_log(...) +#endif // ADA_LOGGING + +#endif // ADA_LOG_H +/* end file include/ada/log.h */ +/* begin file include/ada/encoding_type.h */ +/** + * @file encoding_type.h + * @brief Definition for supported encoding types. + */ +#ifndef ADA_ENCODING_TYPE_H +#define ADA_ENCODING_TYPE_H + +#include + +namespace ada { + +/** + * This specification defines three encodings with the same names as encoding + * schemes defined in the Unicode standard: UTF-8, UTF-16LE, and UTF-16BE. + * + * @see https://encoding.spec.whatwg.org/#encodings + */ +enum class encoding_type { + UTF8, + UTF_16LE, + UTF_16BE, +}; + +/** + * Convert a encoding_type to string. + */ +ada_warn_unused std::string to_string(encoding_type type); + +} // namespace ada + +#endif // ADA_ENCODING_TYPE_H +/* end file include/ada/encoding_type.h */ +/* begin file include/ada/helpers.h */ +/** + * @file helpers.h + * @brief Definitions for helper functions used within Ada. + */ +#ifndef ADA_HELPERS_H +#define ADA_HELPERS_H + +/* begin file include/ada/url_base.h */ +/** + * @file url_base.h + * @brief Declaration for the basic URL definitions + */ +#ifndef ADA_URL_BASE_H +#define ADA_URL_BASE_H + +/* begin file include/ada/scheme.h */ +/** + * @file scheme.h + * @brief Declarations for the URL scheme. + */ +#ifndef ADA_SCHEME_H +#define ADA_SCHEME_H + +#include + +/** + * @namespace ada::scheme + * @brief Includes the scheme declarations + */ +namespace ada::scheme { + +/** + * Type of the scheme as an enum. + * Using strings to represent a scheme type is not ideal because + * checking for types involves string comparisons. It is faster to use + * a simple integer. + * In C++11, we are allowed to specify the underlying type of the enum. + * We pick an 8-bit integer (which allows up to 256 types). Specifying the + * type of the enum may help integration with other systems if the type + * variable is exposed (since its value will not depend on the compiler). + */ +enum type : uint8_t { + HTTP = 0, + NOT_SPECIAL = 1, + HTTPS = 2, + WS = 3, + FTP = 4, + WSS = 5, + FILE = 6 +}; + +/** + * A special scheme is an ASCII string that is listed in the first column of the + * following table. The default port for a special scheme is listed in the + * second column on the same row. The default port for any other ASCII string is + * null. + * + * @see https://url.spec.whatwg.org/#url-miscellaneous + * @param scheme + * @return If scheme is a special scheme + */ +ada_really_inline constexpr bool is_special(std::string_view scheme); + +/** + * A special scheme is an ASCII string that is listed in the first column of the + * following table. The default port for a special scheme is listed in the + * second column on the same row. The default port for any other ASCII string is + * null. + * + * @see https://url.spec.whatwg.org/#url-miscellaneous + * @param scheme + * @return The special port + */ +constexpr uint16_t get_special_port(std::string_view scheme) noexcept; + +/** + * Returns the port number of a special scheme. + * @see https://url.spec.whatwg.org/#special-scheme + */ +constexpr uint16_t get_special_port(ada::scheme::type type) noexcept; +/** + * Returns the scheme of an input, or NOT_SPECIAL if it's not a special scheme + * defined by the spec. + */ +constexpr ada::scheme::type get_scheme_type(std::string_view scheme) noexcept; + +} // namespace ada::scheme + +#endif // ADA_SCHEME_H +/* end file include/ada/scheme.h */ + +#include + +namespace ada { + +/** + * Type of URL host as an enum. + */ +enum url_host_type : uint8_t { + /** + * Represents common URLs such as "https://www.google.com" + */ + DEFAULT = 0, + /** + * Represents ipv4 addresses such as "http://127.0.0.1" + */ + IPV4 = 1, + /** + * Represents ipv6 addresses such as + * "http://[2001:db8:3333:4444:5555:6666:7777:8888]" + */ + IPV6 = 2, +}; + +/** + * @brief Base class of URL implementations + * + * @details A url_base contains a few attributes: is_valid, has_opaque_path and + * type. All non-trivial implementation details are in derived classes such as + * ada::url and ada::url_aggregator. + * + * It is an abstract class that cannot be instantiated directly. + */ +struct url_base { + virtual ~url_base() = default; + + /** + * Used for returning the validity from the result of the URL parser. + */ + bool is_valid{true}; + + /** + * A URL has an opaque path if its path is a string. + */ + bool has_opaque_path{false}; + + /** + * URL hosts type + */ + url_host_type host_type = url_host_type::DEFAULT; + + /** + * @private + */ + ada::scheme::type type{ada::scheme::type::NOT_SPECIAL}; + + /** + * A URL is special if its scheme is a special scheme. A URL is not special if + * its scheme is not a special scheme. + */ + [[nodiscard]] ada_really_inline constexpr bool is_special() const noexcept; + + /** + * The origin getter steps are to return the serialization of this's URL's + * origin. [HTML] + * @return a newly allocated string. + * @see https://url.spec.whatwg.org/#concept-url-origin + */ + [[nodiscard]] virtual std::string get_origin() const noexcept = 0; + + /** + * Returns true if this URL has a valid domain as per RFC 1034 and + * corresponding specifications. Among other things, it requires + * that the domain string has fewer than 255 octets. + */ + [[nodiscard]] virtual bool has_valid_domain() const noexcept = 0; + + /** + * @private + * + * Return the 'special port' if the URL is special and not 'file'. + * Returns 0 otherwise. + */ + [[nodiscard]] inline uint16_t get_special_port() const noexcept; + + /** + * @private + * + * Get the default port if the url's scheme has one, returns 0 otherwise. + */ + [[nodiscard]] ada_really_inline uint16_t scheme_default_port() const noexcept; + + /** + * @private + * + * Parse a port (16-bit decimal digit) from the provided input. + * We assume that the input does not contain spaces or tabs + * within the ASCII digits. + * It returns how many bytes were consumed when a number is successfully + * parsed. + * @return On failure, it returns zero. + * @see https://url.spec.whatwg.org/#host-parsing + */ + virtual size_t parse_port(std::string_view view, + bool check_trailing_content) noexcept = 0; + + virtual ada_really_inline size_t parse_port(std::string_view view) noexcept { + return this->parse_port(view, false); + } + + /** + * Returns a JSON string representation of this URL. + */ + [[nodiscard]] virtual std::string to_string() const = 0; + + /** @private */ + virtual inline void clear_pathname() = 0; + + /** @private */ + virtual inline void clear_search() = 0; + + /** @private */ + [[nodiscard]] virtual inline bool has_hash() const noexcept = 0; + + /** @private */ + [[nodiscard]] virtual inline bool has_search() const noexcept = 0; + +}; // url_base + +} // namespace ada + +#endif +/* end file include/ada/url_base.h */ + +#include +#include + +#if ADA_DEVELOPMENT_CHECKS +#include +#endif // ADA_DEVELOPMENT_CHECKS + +/** + * These functions are not part of our public API and may + * change at any time. + * + * @private + * @namespace ada::helpers + * @brief Includes the definitions for helper functions + */ +namespace ada::helpers { + +/** + * @private + */ +template +void encode_json(std::string_view view, out_iter out); + +/** + * @private + * This function is used to prune a fragment from a url, and returning the + * removed string if input has fragment. + * + * @details prune_hash seeks the first '#' and returns everything after it + * as a string_view, and modifies (in place) the input so that it points at + * everything before the '#'. If no '#' is found, the input is left unchanged + * and std::nullopt is returned. + * + * @attention The function is non-allocating and it does not throw. + * @returns Note that the returned string_view might be empty! + */ +ada_really_inline std::optional +prune_hash(std::string_view &input) noexcept; + +/** + * @private + * Defined by the URL specification, shorten a URLs paths. + * @see https://url.spec.whatwg.org/#shorten-a-urls-path + * @returns Returns true if path is shortened. + */ +ada_really_inline bool shorten_path(std::string &path, + ada::scheme::type type) noexcept; + +/** + * @private + * Defined by the URL specification, shorten a URLs paths. + * @see https://url.spec.whatwg.org/#shorten-a-urls-path + * @returns Returns true if path is shortened. + */ +ada_really_inline bool shorten_path(std::string_view &path, + ada::scheme::type type) noexcept; + +/** + * @private + * + * Parse the path from the provided input and append to the existing + * (possibly empty) path. The input cannot contain tabs and spaces: it + * is the user's responsibility to check. + * + * The input is expected to be UTF-8. + * + * @see https://url.spec.whatwg.org/ + */ +ada_really_inline void parse_prepared_path(std::string_view input, + ada::scheme::type type, + std::string &path); + +/** + * @private + * Remove and mutate all ASCII tab or newline characters from an input. + */ +ada_really_inline void remove_ascii_tab_or_newline(std::string &input) noexcept; + +/** + * @private + * Return the substring from input going from index pos to the end. + * This function cannot throw. + */ +ada_really_inline constexpr std::string_view substring(std::string_view input, + size_t pos) noexcept; + +/** + * @private + * Returns true if the string_view points within the string. + */ +bool overlaps(std::string_view input1, const std::string &input2) noexcept; + +/** + * @private + * Return the substring from input going from index pos1 to the pos2 (non + * included). The length of the substring is pos2 - pos1. + */ +ada_really_inline constexpr std::string_view +substring(std::string_view input, size_t pos1, size_t pos2) noexcept { +#if ADA_DEVELOPMENT_CHECKS + if (pos2 < pos1) { + std::cerr << "Negative-length substring: [" << pos1 << " to " << pos2 << ")" + << std::endl; + abort(); + } +#endif + return input.substr(pos1, pos2 - pos1); +} + +/** + * @private + * Modify the string_view so that it has the new size pos, assuming that pos <= + * input.size(). This function cannot throw. + */ +ada_really_inline void resize(std::string_view &input, size_t pos) noexcept; + +/** + * @private + * Returns a host's delimiter location depending on the state of the instance, + * and whether a colon was found outside brackets. Used by the host parser. + */ +ada_really_inline std::pair +get_host_delimiter_location(bool is_special, std::string_view &view) noexcept; + +/** + * @private + * Removes leading and trailing C0 control and whitespace characters from + * string. + */ +void trim_c0_whitespace(std::string_view &input) noexcept; + +/** + * @private + * @see + * https://url.spec.whatwg.org/#potentially-strip-trailing-spaces-from-an-opaque-path + */ +template +ada_really_inline void +strip_trailing_spaces_from_opaque_path(url_type &url) noexcept; + +/** + * @private + * Finds the delimiter of a view in authority state. + */ +ada_really_inline size_t +find_authority_delimiter_special(std::string_view view) noexcept; + +/** + * @private + * Finds the delimiter of a view in authority state. + */ +ada_really_inline size_t +find_authority_delimiter(std::string_view view) noexcept; + +/** + * @private + */ +template +inline void inner_concat(std::string &buffer, T t) { + buffer.append(t); +} + +/** + * @private + */ +template +inline void inner_concat(std::string &buffer, T t, Args... args) { + buffer.append(t); + return inner_concat(buffer, args...); +} + +/** + * @private + * Concatenate the arguments and return a string. + * @returns a string + */ +template std::string concat(Args... args) { + std::string answer; + inner_concat(answer, args...); + return answer; +} + +/** + * @private + * @return Number of leading zeroes. + */ +inline int leading_zeroes(uint32_t input_num) noexcept { +#if ADA_REGULAR_VISUAL_STUDIO + unsigned long leading_zero(0); + unsigned long in(input_num); + return _BitScanReverse(&leading_zero, in) ? int(31 - leading_zero) : 32; +#else + return __builtin_clz(input_num); +#endif // ADA_REGULAR_VISUAL_STUDIO +} + +/** + * @private + * Counts the number of decimal digits necessary to represent x. + * faster than std::to_string(x).size(). + * @return digit count + */ +inline int fast_digit_count(uint32_t x) noexcept { + auto int_log2 = [](uint32_t z) -> int { + return 31 - ada::helpers::leading_zeroes(z | 1); + }; + // Compiles to very few instructions. Note that the + // table is static and thus effectively a constant. + // We leave it inside the function because it is meaningless + // outside of it (this comes at no performance cost). + const static uint64_t table[] = { + 4294967296, 8589934582, 8589934582, 8589934582, 12884901788, + 12884901788, 12884901788, 17179868184, 17179868184, 17179868184, + 21474826480, 21474826480, 21474826480, 21474826480, 25769703776, + 25769703776, 25769703776, 30063771072, 30063771072, 30063771072, + 34349738368, 34349738368, 34349738368, 34349738368, 38554705664, + 38554705664, 38554705664, 41949672960, 41949672960, 41949672960, + 42949672960, 42949672960}; + return int((x + table[int_log2(x)]) >> 32); +} +} // namespace ada::helpers + +#endif // ADA_HELPERS_H +/* end file include/ada/helpers.h */ +/* begin file include/ada/parser.h */ +/** + * @file parser.h + * @brief Definitions for the parser. + */ +#ifndef ADA_PARSER_H +#define ADA_PARSER_H + +#include +#include + +/* begin file include/ada/expected.h */ +/** + * @file expected.h + * @brief Definitions for std::expected + * @private Excluded from docs through the doxygen file. + */ +/// +// expected - An implementation of std::expected with extensions +// Written in 2017 by Sy Brand (tartanllama@gmail.com, @TartanLlama) +// +// Documentation available at http://tl.tartanllama.xyz/ +// +// To the extent possible under law, the author(s) have dedicated all +// copyright and related and neighboring rights to this software to the +// public domain worldwide. This software is distributed without any warranty. +// +// You should have received a copy of the CC0 Public Domain Dedication +// along with this software. If not, see +// . +/// + +#ifndef TL_EXPECTED_HPP +#define TL_EXPECTED_HPP + +#define TL_EXPECTED_VERSION_MAJOR 1 +#define TL_EXPECTED_VERSION_MINOR 1 +#define TL_EXPECTED_VERSION_PATCH 0 + +#include +#include +#include +#include + +#if defined(__EXCEPTIONS) || defined(_CPPUNWIND) +#define TL_EXPECTED_EXCEPTIONS_ENABLED +#endif + +#if (defined(_MSC_VER) && _MSC_VER == 1900) +#define TL_EXPECTED_MSVC2015 +#define TL_EXPECTED_MSVC2015_CONSTEXPR +#else +#define TL_EXPECTED_MSVC2015_CONSTEXPR constexpr +#endif + +#if (defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ <= 9 && \ + !defined(__clang__)) +#define TL_EXPECTED_GCC49 +#endif + +#if (defined(__GNUC__) && __GNUC__ == 5 && __GNUC_MINOR__ <= 4 && \ + !defined(__clang__)) +#define TL_EXPECTED_GCC54 +#endif + +#if (defined(__GNUC__) && __GNUC__ == 5 && __GNUC_MINOR__ <= 5 && \ + !defined(__clang__)) +#define TL_EXPECTED_GCC55 +#endif + +#if !defined(TL_ASSERT) +// can't have assert in constexpr in C++11 and GCC 4.9 has a compiler bug +#if (__cplusplus > 201103L) && !defined(TL_EXPECTED_GCC49) +#include +#define TL_ASSERT(x) assert(x) +#else +#define TL_ASSERT(x) +#endif +#endif + +#if (defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ <= 9 && \ + !defined(__clang__)) +// GCC < 5 doesn't support overloading on const&& for member functions + +#define TL_EXPECTED_NO_CONSTRR +// GCC < 5 doesn't support some standard C++11 type traits +#define TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) \ + std::has_trivial_copy_constructor +#define TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(T) \ + std::has_trivial_copy_assign + +// This one will be different for GCC 5.7 if it's ever supported +#define TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(T) \ + std::is_trivially_destructible + +// GCC 5 < v < 8 has a bug in is_trivially_copy_constructible which breaks +// std::vector for non-copyable types +#elif (defined(__GNUC__) && __GNUC__ < 8 && !defined(__clang__)) +#ifndef TL_GCC_LESS_8_TRIVIALLY_COPY_CONSTRUCTIBLE_MUTEX +#define TL_GCC_LESS_8_TRIVIALLY_COPY_CONSTRUCTIBLE_MUTEX +namespace tl { +namespace detail { +template +struct is_trivially_copy_constructible + : std::is_trivially_copy_constructible {}; +#ifdef _GLIBCXX_VECTOR +template +struct is_trivially_copy_constructible> : std::false_type {}; +#endif +} // namespace detail +} // namespace tl +#endif + +#define TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) \ + tl::detail::is_trivially_copy_constructible +#define TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(T) \ + std::is_trivially_copy_assignable +#define TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(T) \ + std::is_trivially_destructible +#else +#define TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(T) \ + std::is_trivially_copy_constructible +#define TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(T) \ + std::is_trivially_copy_assignable +#define TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(T) \ + std::is_trivially_destructible +#endif + +#if __cplusplus > 201103L +#define TL_EXPECTED_CXX14 +#endif + +#ifdef TL_EXPECTED_GCC49 +#define TL_EXPECTED_GCC49_CONSTEXPR +#else +#define TL_EXPECTED_GCC49_CONSTEXPR constexpr +#endif + +#if (__cplusplus == 201103L || defined(TL_EXPECTED_MSVC2015) || \ + defined(TL_EXPECTED_GCC49)) +#define TL_EXPECTED_11_CONSTEXPR +#else +#define TL_EXPECTED_11_CONSTEXPR constexpr +#endif + +namespace tl { +template class expected; + +#ifndef TL_MONOSTATE_INPLACE_MUTEX +#define TL_MONOSTATE_INPLACE_MUTEX +class monostate {}; + +struct in_place_t { + explicit in_place_t() = default; +}; +static constexpr in_place_t in_place{}; +#endif + +template class unexpected { +public: + static_assert(!std::is_same::value, "E must not be void"); + + unexpected() = delete; + constexpr explicit unexpected(const E &e) : m_val(e) {} + + constexpr explicit unexpected(E &&e) : m_val(std::move(e)) {} + + template ::value>::type * = nullptr> + constexpr explicit unexpected(Args &&...args) + : m_val(std::forward(args)...) {} + template < + class U, class... Args, + typename std::enable_if &, Args &&...>::value>::type * = nullptr> + constexpr explicit unexpected(std::initializer_list l, Args &&...args) + : m_val(l, std::forward(args)...) {} + + constexpr const E &value() const & { return m_val; } + TL_EXPECTED_11_CONSTEXPR E &value() & { return m_val; } + TL_EXPECTED_11_CONSTEXPR E &&value() && { return std::move(m_val); } + constexpr const E &&value() const && { return std::move(m_val); } + +private: + E m_val; +}; + +#ifdef __cpp_deduction_guides +template unexpected(E) -> unexpected; +#endif + +template +constexpr bool operator==(const unexpected &lhs, const unexpected &rhs) { + return lhs.value() == rhs.value(); +} +template +constexpr bool operator!=(const unexpected &lhs, const unexpected &rhs) { + return lhs.value() != rhs.value(); +} +template +constexpr bool operator<(const unexpected &lhs, const unexpected &rhs) { + return lhs.value() < rhs.value(); +} +template +constexpr bool operator<=(const unexpected &lhs, const unexpected &rhs) { + return lhs.value() <= rhs.value(); +} +template +constexpr bool operator>(const unexpected &lhs, const unexpected &rhs) { + return lhs.value() > rhs.value(); +} +template +constexpr bool operator>=(const unexpected &lhs, const unexpected &rhs) { + return lhs.value() >= rhs.value(); +} + +template +unexpected::type> make_unexpected(E &&e) { + return unexpected::type>(std::forward(e)); +} + +struct unexpect_t { + unexpect_t() = default; +}; +static constexpr unexpect_t unexpect{}; + +namespace detail { +template +[[noreturn]] TL_EXPECTED_11_CONSTEXPR void throw_exception(E &&e) { +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + throw std::forward(e); +#else + (void)e; +#ifdef _MSC_VER + __assume(0); +#else + __builtin_unreachable(); +#endif +#endif +} + +#ifndef TL_TRAITS_MUTEX +#define TL_TRAITS_MUTEX +// C++14-style aliases for brevity +template using remove_const_t = typename std::remove_const::type; +template +using remove_reference_t = typename std::remove_reference::type; +template using decay_t = typename std::decay::type; +template +using enable_if_t = typename std::enable_if::type; +template +using conditional_t = typename std::conditional::type; + +// std::conjunction from C++17 +template struct conjunction : std::true_type {}; +template struct conjunction : B {}; +template +struct conjunction + : std::conditional, B>::type {}; + +#if defined(_LIBCPP_VERSION) && __cplusplus == 201103L +#define TL_TRAITS_LIBCXX_MEM_FN_WORKAROUND +#endif + +// In C++11 mode, there's an issue in libc++'s std::mem_fn +// which results in a hard-error when using it in a noexcept expression +// in some cases. This is a check to workaround the common failing case. +#ifdef TL_TRAITS_LIBCXX_MEM_FN_WORKAROUND +template +struct is_pointer_to_non_const_member_func : std::false_type {}; +template +struct is_pointer_to_non_const_member_func + : std::true_type {}; +template +struct is_pointer_to_non_const_member_func + : std::true_type {}; +template +struct is_pointer_to_non_const_member_func + : std::true_type {}; +template +struct is_pointer_to_non_const_member_func + : std::true_type {}; +template +struct is_pointer_to_non_const_member_func + : std::true_type {}; +template +struct is_pointer_to_non_const_member_func + : std::true_type {}; + +template struct is_const_or_const_ref : std::false_type {}; +template struct is_const_or_const_ref : std::true_type {}; +template struct is_const_or_const_ref : std::true_type {}; +#endif + +// std::invoke from C++17 +// https://stackoverflow.com/questions/38288042/c11-14-invoke-workaround +template < + typename Fn, typename... Args, +#ifdef TL_TRAITS_LIBCXX_MEM_FN_WORKAROUND + typename = enable_if_t::value && + is_const_or_const_ref::value)>, +#endif + typename = enable_if_t>::value>, int = 0> +constexpr auto invoke(Fn &&f, Args &&...args) noexcept( + noexcept(std::mem_fn(f)(std::forward(args)...))) + -> decltype(std::mem_fn(f)(std::forward(args)...)) { + return std::mem_fn(f)(std::forward(args)...); +} + +template >::value>> +constexpr auto invoke(Fn &&f, Args &&...args) noexcept( + noexcept(std::forward(f)(std::forward(args)...))) + -> decltype(std::forward(f)(std::forward(args)...)) { + return std::forward(f)(std::forward(args)...); +} + +// std::invoke_result from C++17 +template struct invoke_result_impl; + +template +struct invoke_result_impl< + F, + decltype(detail::invoke(std::declval(), std::declval()...), void()), + Us...> { + using type = + decltype(detail::invoke(std::declval(), std::declval()...)); +}; + +template +using invoke_result = invoke_result_impl; + +template +using invoke_result_t = typename invoke_result::type; + +#if defined(_MSC_VER) && _MSC_VER <= 1900 +// TODO make a version which works with MSVC 2015 +template struct is_swappable : std::true_type {}; + +template struct is_nothrow_swappable : std::true_type {}; +#else +// https://stackoverflow.com/questions/26744589/what-is-a-proper-way-to-implement-is-swappable-to-test-for-the-swappable-concept +namespace swap_adl_tests { +// if swap ADL finds this then it would call std::swap otherwise (same +// signature) +struct tag {}; + +template tag swap(T &, T &); +template tag swap(T (&a)[N], T (&b)[N]); + +// helper functions to test if an unqualified swap is possible, and if it +// becomes std::swap +template std::false_type can_swap(...) noexcept(false); +template (), std::declval()))> +std::true_type can_swap(int) noexcept(noexcept(swap(std::declval(), + std::declval()))); + +template std::false_type uses_std(...); +template +std::is_same(), std::declval())), tag> +uses_std(int); + +template +struct is_std_swap_noexcept + : std::integral_constant::value && + std::is_nothrow_move_assignable::value> {}; + +template +struct is_std_swap_noexcept : is_std_swap_noexcept {}; + +template +struct is_adl_swap_noexcept + : std::integral_constant(0))> {}; +} // namespace swap_adl_tests + +template +struct is_swappable + : std::integral_constant< + bool, + decltype(detail::swap_adl_tests::can_swap(0))::value && + (!decltype(detail::swap_adl_tests::uses_std(0))::value || + (std::is_move_assignable::value && + std::is_move_constructible::value))> {}; + +template +struct is_swappable + : std::integral_constant< + bool, + decltype(detail::swap_adl_tests::can_swap(0))::value && + (!decltype(detail::swap_adl_tests::uses_std( + 0))::value || + is_swappable::value)> {}; + +template +struct is_nothrow_swappable + : std::integral_constant< + bool, + is_swappable::value && + ((decltype(detail::swap_adl_tests::uses_std(0))::value && + detail::swap_adl_tests::is_std_swap_noexcept::value) || + (!decltype(detail::swap_adl_tests::uses_std(0))::value && + detail::swap_adl_tests::is_adl_swap_noexcept::value))> {}; +#endif +#endif + +// Trait for checking if a type is a tl::expected +template struct is_expected_impl : std::false_type {}; +template +struct is_expected_impl> : std::true_type {}; +template using is_expected = is_expected_impl>; + +template +using expected_enable_forward_value = detail::enable_if_t< + std::is_constructible::value && + !std::is_same, in_place_t>::value && + !std::is_same, detail::decay_t>::value && + !std::is_same, detail::decay_t>::value>; + +template +using expected_enable_from_other = detail::enable_if_t< + std::is_constructible::value && + std::is_constructible::value && + !std::is_constructible &>::value && + !std::is_constructible &&>::value && + !std::is_constructible &>::value && + !std::is_constructible &&>::value && + !std::is_convertible &, T>::value && + !std::is_convertible &&, T>::value && + !std::is_convertible &, T>::value && + !std::is_convertible &&, T>::value>; + +template +using is_void_or = conditional_t::value, std::true_type, U>; + +template +using is_copy_constructible_or_void = + is_void_or>; + +template +using is_move_constructible_or_void = + is_void_or>; + +template +using is_copy_assignable_or_void = is_void_or>; + +template +using is_move_assignable_or_void = is_void_or>; + +} // namespace detail + +namespace detail { +struct no_init_t {}; +static constexpr no_init_t no_init{}; + +// Implements the storage of the values, and ensures that the destructor is +// trivial if it can be. +// +// This specialization is for where neither `T` or `E` is trivially +// destructible, so the destructors must be called on destruction of the +// `expected` +template ::value, + bool = std::is_trivially_destructible::value> +struct expected_storage_base { + constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {} + constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {} + + template ::value> * = + nullptr> + constexpr expected_storage_base(in_place_t, Args &&...args) + : m_val(std::forward(args)...), m_has_val(true) {} + + template &, Args &&...>::value> * = nullptr> + constexpr expected_storage_base(in_place_t, std::initializer_list il, + Args &&...args) + : m_val(il, std::forward(args)...), m_has_val(true) {} + template ::value> * = + nullptr> + constexpr explicit expected_storage_base(unexpect_t, Args &&...args) + : m_unexpect(std::forward(args)...), m_has_val(false) {} + + template &, Args &&...>::value> * = nullptr> + constexpr explicit expected_storage_base(unexpect_t, + std::initializer_list il, + Args &&...args) + : m_unexpect(il, std::forward(args)...), m_has_val(false) {} + + ~expected_storage_base() { + if (m_has_val) { + m_val.~T(); + } else { + m_unexpect.~unexpected(); + } + } + union { + T m_val; + unexpected m_unexpect; + char m_no_init; + }; + bool m_has_val; +}; + +// This specialization is for when both `T` and `E` are trivially-destructible, +// so the destructor of the `expected` can be trivial. +template struct expected_storage_base { + constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {} + constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {} + + template ::value> * = + nullptr> + constexpr expected_storage_base(in_place_t, Args &&...args) + : m_val(std::forward(args)...), m_has_val(true) {} + + template &, Args &&...>::value> * = nullptr> + constexpr expected_storage_base(in_place_t, std::initializer_list il, + Args &&...args) + : m_val(il, std::forward(args)...), m_has_val(true) {} + template ::value> * = + nullptr> + constexpr explicit expected_storage_base(unexpect_t, Args &&...args) + : m_unexpect(std::forward(args)...), m_has_val(false) {} + + template &, Args &&...>::value> * = nullptr> + constexpr explicit expected_storage_base(unexpect_t, + std::initializer_list il, + Args &&...args) + : m_unexpect(il, std::forward(args)...), m_has_val(false) {} + + ~expected_storage_base() = default; + union { + T m_val; + unexpected m_unexpect; + char m_no_init; + }; + bool m_has_val; +}; + +// T is trivial, E is not. +template struct expected_storage_base { + constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {} + TL_EXPECTED_MSVC2015_CONSTEXPR expected_storage_base(no_init_t) + : m_no_init(), m_has_val(false) {} + + template ::value> * = + nullptr> + constexpr expected_storage_base(in_place_t, Args &&...args) + : m_val(std::forward(args)...), m_has_val(true) {} + + template &, Args &&...>::value> * = nullptr> + constexpr expected_storage_base(in_place_t, std::initializer_list il, + Args &&...args) + : m_val(il, std::forward(args)...), m_has_val(true) {} + template ::value> * = + nullptr> + constexpr explicit expected_storage_base(unexpect_t, Args &&...args) + : m_unexpect(std::forward(args)...), m_has_val(false) {} + + template &, Args &&...>::value> * = nullptr> + constexpr explicit expected_storage_base(unexpect_t, + std::initializer_list il, + Args &&...args) + : m_unexpect(il, std::forward(args)...), m_has_val(false) {} + + ~expected_storage_base() { + if (!m_has_val) { + m_unexpect.~unexpected(); + } + } + + union { + T m_val; + unexpected m_unexpect; + char m_no_init; + }; + bool m_has_val; +}; + +// E is trivial, T is not. +template struct expected_storage_base { + constexpr expected_storage_base() : m_val(T{}), m_has_val(true) {} + constexpr expected_storage_base(no_init_t) : m_no_init(), m_has_val(false) {} + + template ::value> * = + nullptr> + constexpr expected_storage_base(in_place_t, Args &&...args) + : m_val(std::forward(args)...), m_has_val(true) {} + + template &, Args &&...>::value> * = nullptr> + constexpr expected_storage_base(in_place_t, std::initializer_list il, + Args &&...args) + : m_val(il, std::forward(args)...), m_has_val(true) {} + template ::value> * = + nullptr> + constexpr explicit expected_storage_base(unexpect_t, Args &&...args) + : m_unexpect(std::forward(args)...), m_has_val(false) {} + + template &, Args &&...>::value> * = nullptr> + constexpr explicit expected_storage_base(unexpect_t, + std::initializer_list il, + Args &&...args) + : m_unexpect(il, std::forward(args)...), m_has_val(false) {} + + ~expected_storage_base() { + if (m_has_val) { + m_val.~T(); + } + } + union { + T m_val; + unexpected m_unexpect; + char m_no_init; + }; + bool m_has_val; +}; + +// `T` is `void`, `E` is trivially-destructible +template struct expected_storage_base { +#if __GNUC__ <= 5 +// no constexpr for GCC 4/5 bug +#else + TL_EXPECTED_MSVC2015_CONSTEXPR +#endif + expected_storage_base() : m_has_val(true) {} + + constexpr expected_storage_base(no_init_t) : m_val(), m_has_val(false) {} + + constexpr expected_storage_base(in_place_t) : m_has_val(true) {} + + template ::value> * = + nullptr> + constexpr explicit expected_storage_base(unexpect_t, Args &&...args) + : m_unexpect(std::forward(args)...), m_has_val(false) {} + + template &, Args &&...>::value> * = nullptr> + constexpr explicit expected_storage_base(unexpect_t, + std::initializer_list il, + Args &&...args) + : m_unexpect(il, std::forward(args)...), m_has_val(false) {} + + ~expected_storage_base() = default; + struct dummy {}; + union { + unexpected m_unexpect; + dummy m_val; + }; + bool m_has_val; +}; + +// `T` is `void`, `E` is not trivially-destructible +template struct expected_storage_base { + constexpr expected_storage_base() : m_dummy(), m_has_val(true) {} + constexpr expected_storage_base(no_init_t) : m_dummy(), m_has_val(false) {} + + constexpr expected_storage_base(in_place_t) : m_dummy(), m_has_val(true) {} + + template ::value> * = + nullptr> + constexpr explicit expected_storage_base(unexpect_t, Args &&...args) + : m_unexpect(std::forward(args)...), m_has_val(false) {} + + template &, Args &&...>::value> * = nullptr> + constexpr explicit expected_storage_base(unexpect_t, + std::initializer_list il, + Args &&...args) + : m_unexpect(il, std::forward(args)...), m_has_val(false) {} + + ~expected_storage_base() { + if (!m_has_val) { + m_unexpect.~unexpected(); + } + } + + union { + unexpected m_unexpect; + char m_dummy; + }; + bool m_has_val; +}; + +// This base class provides some handy member functions which can be used in +// further derived classes +template +struct expected_operations_base : expected_storage_base { + using expected_storage_base::expected_storage_base; + + template void construct(Args &&...args) noexcept { + new (std::addressof(this->m_val)) T(std::forward(args)...); + this->m_has_val = true; + } + + template void construct_with(Rhs &&rhs) noexcept { + new (std::addressof(this->m_val)) T(std::forward(rhs).get()); + this->m_has_val = true; + } + + template void construct_error(Args &&...args) noexcept { + new (std::addressof(this->m_unexpect)) + unexpected(std::forward(args)...); + this->m_has_val = false; + } + +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + + // These assign overloads ensure that the most efficient assignment + // implementation is used while maintaining the strong exception guarantee. + // The problematic case is where rhs has a value, but *this does not. + // + // This overload handles the case where we can just copy-construct `T` + // directly into place without throwing. + template ::value> + * = nullptr> + void assign(const expected_operations_base &rhs) noexcept { + if (!this->m_has_val && rhs.m_has_val) { + geterr().~unexpected(); + construct(rhs.get()); + } else { + assign_common(rhs); + } + } + + // This overload handles the case where we can attempt to create a copy of + // `T`, then no-throw move it into place if the copy was successful. + template ::value && + std::is_nothrow_move_constructible::value> + * = nullptr> + void assign(const expected_operations_base &rhs) noexcept { + if (!this->m_has_val && rhs.m_has_val) { + T tmp = rhs.get(); + geterr().~unexpected(); + construct(std::move(tmp)); + } else { + assign_common(rhs); + } + } + + // This overload is the worst-case, where we have to move-construct the + // unexpected value into temporary storage, then try to copy the T into place. + // If the construction succeeds, then everything is fine, but if it throws, + // then we move the old unexpected value back into place before rethrowing the + // exception. + template ::value && + !std::is_nothrow_move_constructible::value> + * = nullptr> + void assign(const expected_operations_base &rhs) { + if (!this->m_has_val && rhs.m_has_val) { + auto tmp = std::move(geterr()); + geterr().~unexpected(); + +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + try { + construct(rhs.get()); + } catch (...) { + geterr() = std::move(tmp); + throw; + } +#else + construct(rhs.get()); +#endif + } else { + assign_common(rhs); + } + } + + // These overloads do the same as above, but for rvalues + template ::value> + * = nullptr> + void assign(expected_operations_base &&rhs) noexcept { + if (!this->m_has_val && rhs.m_has_val) { + geterr().~unexpected(); + construct(std::move(rhs).get()); + } else { + assign_common(std::move(rhs)); + } + } + + template ::value> + * = nullptr> + void assign(expected_operations_base &&rhs) { + if (!this->m_has_val && rhs.m_has_val) { + auto tmp = std::move(geterr()); + geterr().~unexpected(); +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + try { + construct(std::move(rhs).get()); + } catch (...) { + geterr() = std::move(tmp); + throw; + } +#else + construct(std::move(rhs).get()); +#endif + } else { + assign_common(std::move(rhs)); + } + } + +#else + + // If exceptions are disabled then we can just copy-construct + void assign(const expected_operations_base &rhs) noexcept { + if (!this->m_has_val && rhs.m_has_val) { + geterr().~unexpected(); + construct(rhs.get()); + } else { + assign_common(rhs); + } + } + + void assign(expected_operations_base &&rhs) noexcept { + if (!this->m_has_val && rhs.m_has_val) { + geterr().~unexpected(); + construct(std::move(rhs).get()); + } else { + assign_common(std::move(rhs)); + } + } + +#endif + + // The common part of move/copy assigning + template void assign_common(Rhs &&rhs) { + if (this->m_has_val) { + if (rhs.m_has_val) { + get() = std::forward(rhs).get(); + } else { + destroy_val(); + construct_error(std::forward(rhs).geterr()); + } + } else { + if (!rhs.m_has_val) { + geterr() = std::forward(rhs).geterr(); + } + } + } + + bool has_value() const { return this->m_has_val; } + + TL_EXPECTED_11_CONSTEXPR T &get() & { return this->m_val; } + constexpr const T &get() const & { return this->m_val; } + TL_EXPECTED_11_CONSTEXPR T &&get() && { return std::move(this->m_val); } +#ifndef TL_EXPECTED_NO_CONSTRR + constexpr const T &&get() const && { return std::move(this->m_val); } +#endif + + TL_EXPECTED_11_CONSTEXPR unexpected &geterr() & { + return this->m_unexpect; + } + constexpr const unexpected &geterr() const & { return this->m_unexpect; } + TL_EXPECTED_11_CONSTEXPR unexpected &&geterr() && { + return std::move(this->m_unexpect); + } +#ifndef TL_EXPECTED_NO_CONSTRR + constexpr const unexpected &&geterr() const && { + return std::move(this->m_unexpect); + } +#endif + + TL_EXPECTED_11_CONSTEXPR void destroy_val() { get().~T(); } +}; + +// This base class provides some handy member functions which can be used in +// further derived classes +template +struct expected_operations_base : expected_storage_base { + using expected_storage_base::expected_storage_base; + + template void construct() noexcept { this->m_has_val = true; } + + // This function doesn't use its argument, but needs it so that code in + // levels above this can work independently of whether T is void + template void construct_with(Rhs &&) noexcept { + this->m_has_val = true; + } + + template void construct_error(Args &&...args) noexcept { + new (std::addressof(this->m_unexpect)) + unexpected(std::forward(args)...); + this->m_has_val = false; + } + + template void assign(Rhs &&rhs) noexcept { + if (!this->m_has_val) { + if (rhs.m_has_val) { + geterr().~unexpected(); + construct(); + } else { + geterr() = std::forward(rhs).geterr(); + } + } else { + if (!rhs.m_has_val) { + construct_error(std::forward(rhs).geterr()); + } + } + } + + bool has_value() const { return this->m_has_val; } + + TL_EXPECTED_11_CONSTEXPR unexpected &geterr() & { + return this->m_unexpect; + } + constexpr const unexpected &geterr() const & { return this->m_unexpect; } + TL_EXPECTED_11_CONSTEXPR unexpected &&geterr() && { + return std::move(this->m_unexpect); + } +#ifndef TL_EXPECTED_NO_CONSTRR + constexpr const unexpected &&geterr() const && { + return std::move(this->m_unexpect); + } +#endif + + TL_EXPECTED_11_CONSTEXPR void destroy_val() { + // no-op + } +}; + +// This class manages conditionally having a trivial copy constructor +// This specialization is for when T and E are trivially copy constructible +template ::value && + TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(E)::value> +struct expected_copy_base : expected_operations_base { + using expected_operations_base::expected_operations_base; +}; + +// This specialization is for when T or E are not trivially copy constructible +template +struct expected_copy_base : expected_operations_base { + using expected_operations_base::expected_operations_base; + + expected_copy_base() = default; + expected_copy_base(const expected_copy_base &rhs) + : expected_operations_base(no_init) { + if (rhs.has_value()) { + this->construct_with(rhs); + } else { + this->construct_error(rhs.geterr()); + } + } + + expected_copy_base(expected_copy_base &&rhs) = default; + expected_copy_base &operator=(const expected_copy_base &rhs) = default; + expected_copy_base &operator=(expected_copy_base &&rhs) = default; +}; + +// This class manages conditionally having a trivial move constructor +// Unfortunately there's no way to achieve this in GCC < 5 AFAIK, since it +// doesn't implement an analogue to std::is_trivially_move_constructible. We +// have to make do with a non-trivial move constructor even if T is trivially +// move constructible +#ifndef TL_EXPECTED_GCC49 +template >::value && + std::is_trivially_move_constructible::value> +struct expected_move_base : expected_copy_base { + using expected_copy_base::expected_copy_base; +}; +#else +template struct expected_move_base; +#endif +template +struct expected_move_base : expected_copy_base { + using expected_copy_base::expected_copy_base; + + expected_move_base() = default; + expected_move_base(const expected_move_base &rhs) = default; + + expected_move_base(expected_move_base &&rhs) noexcept( + std::is_nothrow_move_constructible::value) + : expected_copy_base(no_init) { + if (rhs.has_value()) { + this->construct_with(std::move(rhs)); + } else { + this->construct_error(std::move(rhs.geterr())); + } + } + expected_move_base &operator=(const expected_move_base &rhs) = default; + expected_move_base &operator=(expected_move_base &&rhs) = default; +}; + +// This class manages conditionally having a trivial copy assignment operator +template < + class T, class E, + bool = + is_void_or< + T, conjunction>::value && + TL_EXPECTED_IS_TRIVIALLY_COPY_ASSIGNABLE(E)::value && + TL_EXPECTED_IS_TRIVIALLY_COPY_CONSTRUCTIBLE(E)::value && + TL_EXPECTED_IS_TRIVIALLY_DESTRUCTIBLE(E)::value> +struct expected_copy_assign_base : expected_move_base { + using expected_move_base::expected_move_base; +}; + +template +struct expected_copy_assign_base : expected_move_base { + using expected_move_base::expected_move_base; + + expected_copy_assign_base() = default; + expected_copy_assign_base(const expected_copy_assign_base &rhs) = default; + + expected_copy_assign_base(expected_copy_assign_base &&rhs) = default; + expected_copy_assign_base &operator=(const expected_copy_assign_base &rhs) { + this->assign(rhs); + return *this; + } + expected_copy_assign_base & + operator=(expected_copy_assign_base &&rhs) = default; +}; + +// This class manages conditionally having a trivial move assignment operator +// Unfortunately there's no way to achieve this in GCC < 5 AFAIK, since it +// doesn't implement an analogue to std::is_trivially_move_assignable. We have +// to make do with a non-trivial move assignment operator even if T is trivially +// move assignable +#ifndef TL_EXPECTED_GCC49 +template < + class T, class E, + bool = is_void_or< + T, conjunction, + std::is_trivially_move_constructible, + std::is_trivially_move_assignable>>::value && + std::is_trivially_destructible::value && + std::is_trivially_move_constructible::value && + std::is_trivially_move_assignable::value> +struct expected_move_assign_base : expected_copy_assign_base { + using expected_copy_assign_base::expected_copy_assign_base; +}; +#else +template struct expected_move_assign_base; +#endif + +template +struct expected_move_assign_base + : expected_copy_assign_base { + using expected_copy_assign_base::expected_copy_assign_base; + + expected_move_assign_base() = default; + expected_move_assign_base(const expected_move_assign_base &rhs) = default; + + expected_move_assign_base(expected_move_assign_base &&rhs) = default; + + expected_move_assign_base & + operator=(const expected_move_assign_base &rhs) = default; + + expected_move_assign_base & + operator=(expected_move_assign_base &&rhs) noexcept( + std::is_nothrow_move_constructible::value && + std::is_nothrow_move_assignable::value) { + this->assign(std::move(rhs)); + return *this; + } +}; + +// expected_delete_ctor_base will conditionally delete copy and move +// constructors depending on whether T is copy/move constructible +template ::value && + std::is_copy_constructible::value), + bool EnableMove = (is_move_constructible_or_void::value && + std::is_move_constructible::value)> +struct expected_delete_ctor_base { + expected_delete_ctor_base() = default; + expected_delete_ctor_base(const expected_delete_ctor_base &) = default; + expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept = default; + expected_delete_ctor_base & + operator=(const expected_delete_ctor_base &) = default; + expected_delete_ctor_base & + operator=(expected_delete_ctor_base &&) noexcept = default; +}; + +template +struct expected_delete_ctor_base { + expected_delete_ctor_base() = default; + expected_delete_ctor_base(const expected_delete_ctor_base &) = default; + expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept = delete; + expected_delete_ctor_base & + operator=(const expected_delete_ctor_base &) = default; + expected_delete_ctor_base & + operator=(expected_delete_ctor_base &&) noexcept = default; +}; + +template +struct expected_delete_ctor_base { + expected_delete_ctor_base() = default; + expected_delete_ctor_base(const expected_delete_ctor_base &) = delete; + expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept = default; + expected_delete_ctor_base & + operator=(const expected_delete_ctor_base &) = default; + expected_delete_ctor_base & + operator=(expected_delete_ctor_base &&) noexcept = default; +}; + +template +struct expected_delete_ctor_base { + expected_delete_ctor_base() = default; + expected_delete_ctor_base(const expected_delete_ctor_base &) = delete; + expected_delete_ctor_base(expected_delete_ctor_base &&) noexcept = delete; + expected_delete_ctor_base & + operator=(const expected_delete_ctor_base &) = default; + expected_delete_ctor_base & + operator=(expected_delete_ctor_base &&) noexcept = default; +}; + +// expected_delete_assign_base will conditionally delete copy and move +// constructors depending on whether T and E are copy/move constructible + +// assignable +template ::value && + std::is_copy_constructible::value && + is_copy_assignable_or_void::value && + std::is_copy_assignable::value), + bool EnableMove = (is_move_constructible_or_void::value && + std::is_move_constructible::value && + is_move_assignable_or_void::value && + std::is_move_assignable::value)> +struct expected_delete_assign_base { + expected_delete_assign_base() = default; + expected_delete_assign_base(const expected_delete_assign_base &) = default; + expected_delete_assign_base(expected_delete_assign_base &&) noexcept = + default; + expected_delete_assign_base & + operator=(const expected_delete_assign_base &) = default; + expected_delete_assign_base & + operator=(expected_delete_assign_base &&) noexcept = default; +}; + +template +struct expected_delete_assign_base { + expected_delete_assign_base() = default; + expected_delete_assign_base(const expected_delete_assign_base &) = default; + expected_delete_assign_base(expected_delete_assign_base &&) noexcept = + default; + expected_delete_assign_base & + operator=(const expected_delete_assign_base &) = default; + expected_delete_assign_base & + operator=(expected_delete_assign_base &&) noexcept = delete; +}; + +template +struct expected_delete_assign_base { + expected_delete_assign_base() = default; + expected_delete_assign_base(const expected_delete_assign_base &) = default; + expected_delete_assign_base(expected_delete_assign_base &&) noexcept = + default; + expected_delete_assign_base & + operator=(const expected_delete_assign_base &) = delete; + expected_delete_assign_base & + operator=(expected_delete_assign_base &&) noexcept = default; +}; + +template +struct expected_delete_assign_base { + expected_delete_assign_base() = default; + expected_delete_assign_base(const expected_delete_assign_base &) = default; + expected_delete_assign_base(expected_delete_assign_base &&) noexcept = + default; + expected_delete_assign_base & + operator=(const expected_delete_assign_base &) = delete; + expected_delete_assign_base & + operator=(expected_delete_assign_base &&) noexcept = delete; +}; + +// This is needed to be able to construct the expected_default_ctor_base which +// follows, while still conditionally deleting the default constructor. +struct default_constructor_tag { + explicit constexpr default_constructor_tag() = default; +}; + +// expected_default_ctor_base will ensure that expected has a deleted default +// consturctor if T is not default constructible. +// This specialization is for when T is default constructible +template ::value || std::is_void::value> +struct expected_default_ctor_base { + constexpr expected_default_ctor_base() noexcept = default; + constexpr expected_default_ctor_base( + expected_default_ctor_base const &) noexcept = default; + constexpr expected_default_ctor_base(expected_default_ctor_base &&) noexcept = + default; + expected_default_ctor_base & + operator=(expected_default_ctor_base const &) noexcept = default; + expected_default_ctor_base & + operator=(expected_default_ctor_base &&) noexcept = default; + + constexpr explicit expected_default_ctor_base(default_constructor_tag) {} +}; + +// This specialization is for when T is not default constructible +template struct expected_default_ctor_base { + constexpr expected_default_ctor_base() noexcept = delete; + constexpr expected_default_ctor_base( + expected_default_ctor_base const &) noexcept = default; + constexpr expected_default_ctor_base(expected_default_ctor_base &&) noexcept = + default; + expected_default_ctor_base & + operator=(expected_default_ctor_base const &) noexcept = default; + expected_default_ctor_base & + operator=(expected_default_ctor_base &&) noexcept = default; + + constexpr explicit expected_default_ctor_base(default_constructor_tag) {} +}; +} // namespace detail + +template class bad_expected_access : public std::exception { +public: + explicit bad_expected_access(E e) : m_val(std::move(e)) {} + + virtual const char *what() const noexcept override { + return "Bad expected access"; + } + + const E &error() const & { return m_val; } + E &error() & { return m_val; } + const E &&error() const && { return std::move(m_val); } + E &&error() && { return std::move(m_val); } + +private: + E m_val; +}; + +/// An `expected` object is an object that contains the storage for +/// another object and manages the lifetime of this contained object `T`. +/// Alternatively it could contain the storage for another unexpected object +/// `E`. The contained object may not be initialized after the expected object +/// has been initialized, and may not be destroyed before the expected object +/// has been destroyed. The initialization state of the contained object is +/// tracked by the expected object. +template +class expected : private detail::expected_move_assign_base, + private detail::expected_delete_ctor_base, + private detail::expected_delete_assign_base, + private detail::expected_default_ctor_base { + static_assert(!std::is_reference::value, "T must not be a reference"); + static_assert(!std::is_same::type>::value, + "T must not be in_place_t"); + static_assert(!std::is_same::type>::value, + "T must not be unexpect_t"); + static_assert( + !std::is_same>::type>::value, + "T must not be unexpected"); + static_assert(!std::is_reference::value, "E must not be a reference"); + + T *valptr() { return std::addressof(this->m_val); } + const T *valptr() const { return std::addressof(this->m_val); } + unexpected *errptr() { return std::addressof(this->m_unexpect); } + const unexpected *errptr() const { + return std::addressof(this->m_unexpect); + } + + template ::value> * = nullptr> + TL_EXPECTED_11_CONSTEXPR U &val() { + return this->m_val; + } + TL_EXPECTED_11_CONSTEXPR unexpected &err() { return this->m_unexpect; } + + template ::value> * = nullptr> + constexpr const U &val() const { + return this->m_val; + } + constexpr const unexpected &err() const { return this->m_unexpect; } + + using impl_base = detail::expected_move_assign_base; + using ctor_base = detail::expected_default_ctor_base; + +public: + typedef T value_type; + typedef E error_type; + typedef unexpected unexpected_type; + +#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) + template TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) & { + return and_then_impl(*this, std::forward(f)); + } + template TL_EXPECTED_11_CONSTEXPR auto and_then(F &&f) && { + return and_then_impl(std::move(*this), std::forward(f)); + } + template constexpr auto and_then(F &&f) const & { + return and_then_impl(*this, std::forward(f)); + } + +#ifndef TL_EXPECTED_NO_CONSTRR + template constexpr auto and_then(F &&f) const && { + return and_then_impl(std::move(*this), std::forward(f)); + } +#endif + +#else + template + TL_EXPECTED_11_CONSTEXPR auto + and_then(F &&f) & -> decltype(and_then_impl(std::declval(), + std::forward(f))) { + return and_then_impl(*this, std::forward(f)); + } + template + TL_EXPECTED_11_CONSTEXPR auto + and_then(F &&f) && -> decltype(and_then_impl(std::declval(), + std::forward(f))) { + return and_then_impl(std::move(*this), std::forward(f)); + } + template + constexpr auto and_then(F &&f) const & -> decltype(and_then_impl( + std::declval(), std::forward(f))) { + return and_then_impl(*this, std::forward(f)); + } + +#ifndef TL_EXPECTED_NO_CONSTRR + template + constexpr auto and_then(F &&f) const && -> decltype(and_then_impl( + std::declval(), std::forward(f))) { + return and_then_impl(std::move(*this), std::forward(f)); + } +#endif +#endif + +#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) + template TL_EXPECTED_11_CONSTEXPR auto map(F &&f) & { + return expected_map_impl(*this, std::forward(f)); + } + template TL_EXPECTED_11_CONSTEXPR auto map(F &&f) && { + return expected_map_impl(std::move(*this), std::forward(f)); + } + template constexpr auto map(F &&f) const & { + return expected_map_impl(*this, std::forward(f)); + } + template constexpr auto map(F &&f) const && { + return expected_map_impl(std::move(*this), std::forward(f)); + } +#else + template + TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl( + std::declval(), std::declval())) + map(F &&f) & { + return expected_map_impl(*this, std::forward(f)); + } + template + TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval(), + std::declval())) + map(F &&f) && { + return expected_map_impl(std::move(*this), std::forward(f)); + } + template + constexpr decltype(expected_map_impl(std::declval(), + std::declval())) + map(F &&f) const & { + return expected_map_impl(*this, std::forward(f)); + } + +#ifndef TL_EXPECTED_NO_CONSTRR + template + constexpr decltype(expected_map_impl(std::declval(), + std::declval())) + map(F &&f) const && { + return expected_map_impl(std::move(*this), std::forward(f)); + } +#endif +#endif + +#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) + template TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) & { + return expected_map_impl(*this, std::forward(f)); + } + template TL_EXPECTED_11_CONSTEXPR auto transform(F &&f) && { + return expected_map_impl(std::move(*this), std::forward(f)); + } + template constexpr auto transform(F &&f) const & { + return expected_map_impl(*this, std::forward(f)); + } + template constexpr auto transform(F &&f) const && { + return expected_map_impl(std::move(*this), std::forward(f)); + } +#else + template + TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl( + std::declval(), std::declval())) + transform(F &&f) & { + return expected_map_impl(*this, std::forward(f)); + } + template + TL_EXPECTED_11_CONSTEXPR decltype(expected_map_impl(std::declval(), + std::declval())) + transform(F &&f) && { + return expected_map_impl(std::move(*this), std::forward(f)); + } + template + constexpr decltype(expected_map_impl(std::declval(), + std::declval())) + transform(F &&f) const & { + return expected_map_impl(*this, std::forward(f)); + } + +#ifndef TL_EXPECTED_NO_CONSTRR + template + constexpr decltype(expected_map_impl(std::declval(), + std::declval())) + transform(F &&f) const && { + return expected_map_impl(std::move(*this), std::forward(f)); + } +#endif +#endif + +#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) + template TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) & { + return map_error_impl(*this, std::forward(f)); + } + template TL_EXPECTED_11_CONSTEXPR auto map_error(F &&f) && { + return map_error_impl(std::move(*this), std::forward(f)); + } + template constexpr auto map_error(F &&f) const & { + return map_error_impl(*this, std::forward(f)); + } + template constexpr auto map_error(F &&f) const && { + return map_error_impl(std::move(*this), std::forward(f)); + } +#else + template + TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval(), + std::declval())) + map_error(F &&f) & { + return map_error_impl(*this, std::forward(f)); + } + template + TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval(), + std::declval())) + map_error(F &&f) && { + return map_error_impl(std::move(*this), std::forward(f)); + } + template + constexpr decltype(map_error_impl(std::declval(), + std::declval())) + map_error(F &&f) const & { + return map_error_impl(*this, std::forward(f)); + } + +#ifndef TL_EXPECTED_NO_CONSTRR + template + constexpr decltype(map_error_impl(std::declval(), + std::declval())) + map_error(F &&f) const && { + return map_error_impl(std::move(*this), std::forward(f)); + } +#endif +#endif +#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) + template TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) & { + return map_error_impl(*this, std::forward(f)); + } + template TL_EXPECTED_11_CONSTEXPR auto transform_error(F &&f) && { + return map_error_impl(std::move(*this), std::forward(f)); + } + template constexpr auto transform_error(F &&f) const & { + return map_error_impl(*this, std::forward(f)); + } + template constexpr auto transform_error(F &&f) const && { + return map_error_impl(std::move(*this), std::forward(f)); + } +#else + template + TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval(), + std::declval())) + transform_error(F &&f) & { + return map_error_impl(*this, std::forward(f)); + } + template + TL_EXPECTED_11_CONSTEXPR decltype(map_error_impl(std::declval(), + std::declval())) + transform_error(F &&f) && { + return map_error_impl(std::move(*this), std::forward(f)); + } + template + constexpr decltype(map_error_impl(std::declval(), + std::declval())) + transform_error(F &&f) const & { + return map_error_impl(*this, std::forward(f)); + } + +#ifndef TL_EXPECTED_NO_CONSTRR + template + constexpr decltype(map_error_impl(std::declval(), + std::declval())) + transform_error(F &&f) const && { + return map_error_impl(std::move(*this), std::forward(f)); + } +#endif +#endif + template expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) & { + return or_else_impl(*this, std::forward(f)); + } + + template expected TL_EXPECTED_11_CONSTEXPR or_else(F &&f) && { + return or_else_impl(std::move(*this), std::forward(f)); + } + + template expected constexpr or_else(F &&f) const & { + return or_else_impl(*this, std::forward(f)); + } + +#ifndef TL_EXPECTED_NO_CONSTRR + template expected constexpr or_else(F &&f) const && { + return or_else_impl(std::move(*this), std::forward(f)); + } +#endif + constexpr expected() = default; + constexpr expected(const expected &rhs) = default; + constexpr expected(expected &&rhs) = default; + expected &operator=(const expected &rhs) = default; + expected &operator=(expected &&rhs) = default; + + template ::value> * = + nullptr> + constexpr expected(in_place_t, Args &&...args) + : impl_base(in_place, std::forward(args)...), + ctor_base(detail::default_constructor_tag{}) {} + + template &, Args &&...>::value> * = nullptr> + constexpr expected(in_place_t, std::initializer_list il, Args &&...args) + : impl_base(in_place, il, std::forward(args)...), + ctor_base(detail::default_constructor_tag{}) {} + + template ::value> * = + nullptr, + detail::enable_if_t::value> * = + nullptr> + explicit constexpr expected(const unexpected &e) + : impl_base(unexpect, e.value()), + ctor_base(detail::default_constructor_tag{}) {} + + template < + class G = E, + detail::enable_if_t::value> * = + nullptr, + detail::enable_if_t::value> * = nullptr> + constexpr expected(unexpected const &e) + : impl_base(unexpect, e.value()), + ctor_base(detail::default_constructor_tag{}) {} + + template < + class G = E, + detail::enable_if_t::value> * = nullptr, + detail::enable_if_t::value> * = nullptr> + explicit constexpr expected(unexpected &&e) noexcept( + std::is_nothrow_constructible::value) + : impl_base(unexpect, std::move(e.value())), + ctor_base(detail::default_constructor_tag{}) {} + + template < + class G = E, + detail::enable_if_t::value> * = nullptr, + detail::enable_if_t::value> * = nullptr> + constexpr expected(unexpected &&e) noexcept( + std::is_nothrow_constructible::value) + : impl_base(unexpect, std::move(e.value())), + ctor_base(detail::default_constructor_tag{}) {} + + template ::value> * = + nullptr> + constexpr explicit expected(unexpect_t, Args &&...args) + : impl_base(unexpect, std::forward(args)...), + ctor_base(detail::default_constructor_tag{}) {} + + template &, Args &&...>::value> * = nullptr> + constexpr explicit expected(unexpect_t, std::initializer_list il, + Args &&...args) + : impl_base(unexpect, il, std::forward(args)...), + ctor_base(detail::default_constructor_tag{}) {} + + template ::value && + std::is_convertible::value)> * = + nullptr, + detail::expected_enable_from_other + * = nullptr> + explicit TL_EXPECTED_11_CONSTEXPR expected(const expected &rhs) + : ctor_base(detail::default_constructor_tag{}) { + if (rhs.has_value()) { + this->construct(*rhs); + } else { + this->construct_error(rhs.error()); + } + } + + template ::value && + std::is_convertible::value)> * = + nullptr, + detail::expected_enable_from_other + * = nullptr> + TL_EXPECTED_11_CONSTEXPR expected(const expected &rhs) + : ctor_base(detail::default_constructor_tag{}) { + if (rhs.has_value()) { + this->construct(*rhs); + } else { + this->construct_error(rhs.error()); + } + } + + template < + class U, class G, + detail::enable_if_t::value && + std::is_convertible::value)> * = nullptr, + detail::expected_enable_from_other * = nullptr> + explicit TL_EXPECTED_11_CONSTEXPR expected(expected &&rhs) + : ctor_base(detail::default_constructor_tag{}) { + if (rhs.has_value()) { + this->construct(std::move(*rhs)); + } else { + this->construct_error(std::move(rhs.error())); + } + } + + template < + class U, class G, + detail::enable_if_t<(std::is_convertible::value && + std::is_convertible::value)> * = nullptr, + detail::expected_enable_from_other * = nullptr> + TL_EXPECTED_11_CONSTEXPR expected(expected &&rhs) + : ctor_base(detail::default_constructor_tag{}) { + if (rhs.has_value()) { + this->construct(std::move(*rhs)); + } else { + this->construct_error(std::move(rhs.error())); + } + } + + template < + class U = T, + detail::enable_if_t::value> * = nullptr, + detail::expected_enable_forward_value * = nullptr> + explicit TL_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v) + : expected(in_place, std::forward(v)) {} + + template < + class U = T, + detail::enable_if_t::value> * = nullptr, + detail::expected_enable_forward_value * = nullptr> + TL_EXPECTED_MSVC2015_CONSTEXPR expected(U &&v) + : expected(in_place, std::forward(v)) {} + + template < + class U = T, class G = T, + detail::enable_if_t::value> * = + nullptr, + detail::enable_if_t::value> * = nullptr, + detail::enable_if_t< + (!std::is_same, detail::decay_t>::value && + !detail::conjunction, + std::is_same>>::value && + std::is_constructible::value && + std::is_assignable::value && + std::is_nothrow_move_constructible::value)> * = nullptr> + expected &operator=(U &&v) { + if (has_value()) { + val() = std::forward(v); + } else { + err().~unexpected(); + ::new (valptr()) T(std::forward(v)); + this->m_has_val = true; + } + + return *this; + } + + template < + class U = T, class G = T, + detail::enable_if_t::value> * = + nullptr, + detail::enable_if_t::value> * = nullptr, + detail::enable_if_t< + (!std::is_same, detail::decay_t>::value && + !detail::conjunction, + std::is_same>>::value && + std::is_constructible::value && + std::is_assignable::value && + std::is_nothrow_move_constructible::value)> * = nullptr> + expected &operator=(U &&v) { + if (has_value()) { + val() = std::forward(v); + } else { + auto tmp = std::move(err()); + err().~unexpected(); + +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + try { + ::new (valptr()) T(std::forward(v)); + this->m_has_val = true; + } catch (...) { + err() = std::move(tmp); + throw; + } +#else + ::new (valptr()) T(std::forward(v)); + this->m_has_val = true; +#endif + } + + return *this; + } + + template ::value && + std::is_assignable::value> * = nullptr> + expected &operator=(const unexpected &rhs) { + if (!has_value()) { + err() = rhs; + } else { + this->destroy_val(); + ::new (errptr()) unexpected(rhs); + this->m_has_val = false; + } + + return *this; + } + + template ::value && + std::is_move_assignable::value> * = nullptr> + expected &operator=(unexpected &&rhs) noexcept { + if (!has_value()) { + err() = std::move(rhs); + } else { + this->destroy_val(); + ::new (errptr()) unexpected(std::move(rhs)); + this->m_has_val = false; + } + + return *this; + } + + template ::value> * = nullptr> + void emplace(Args &&...args) { + if (has_value()) { + val().~T(); + } else { + err().~unexpected(); + this->m_has_val = true; + } + ::new (valptr()) T(std::forward(args)...); + } + + template ::value> * = nullptr> + void emplace(Args &&...args) { + if (has_value()) { + val().~T(); + ::new (valptr()) T(std::forward(args)...); + } else { + auto tmp = std::move(err()); + err().~unexpected(); + +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + try { + ::new (valptr()) T(std::forward(args)...); + this->m_has_val = true; + } catch (...) { + err() = std::move(tmp); + throw; + } +#else + ::new (valptr()) T(std::forward(args)...); + this->m_has_val = true; +#endif + } + } + + template &, Args &&...>::value> * = nullptr> + void emplace(std::initializer_list il, Args &&...args) { + if (has_value()) { + T t(il, std::forward(args)...); + val() = std::move(t); + } else { + err().~unexpected(); + ::new (valptr()) T(il, std::forward(args)...); + this->m_has_val = true; + } + } + + template &, Args &&...>::value> * = nullptr> + void emplace(std::initializer_list il, Args &&...args) { + if (has_value()) { + T t(il, std::forward(args)...); + val() = std::move(t); + } else { + auto tmp = std::move(err()); + err().~unexpected(); + +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + try { + ::new (valptr()) T(il, std::forward(args)...); + this->m_has_val = true; + } catch (...) { + err() = std::move(tmp); + throw; + } +#else + ::new (valptr()) T(il, std::forward(args)...); + this->m_has_val = true; +#endif + } + } + +private: + using t_is_void = std::true_type; + using t_is_not_void = std::false_type; + using t_is_nothrow_move_constructible = std::true_type; + using move_constructing_t_can_throw = std::false_type; + using e_is_nothrow_move_constructible = std::true_type; + using move_constructing_e_can_throw = std::false_type; + + void swap_where_both_have_value(expected & /*rhs*/, t_is_void) noexcept { + // swapping void is a no-op + } + + void swap_where_both_have_value(expected &rhs, t_is_not_void) { + using std::swap; + swap(val(), rhs.val()); + } + + void swap_where_only_one_has_value(expected &rhs, t_is_void) noexcept( + std::is_nothrow_move_constructible::value) { + ::new (errptr()) unexpected_type(std::move(rhs.err())); + rhs.err().~unexpected_type(); + std::swap(this->m_has_val, rhs.m_has_val); + } + + void swap_where_only_one_has_value(expected &rhs, t_is_not_void) { + swap_where_only_one_has_value_and_t_is_not_void( + rhs, typename std::is_nothrow_move_constructible::type{}, + typename std::is_nothrow_move_constructible::type{}); + } + + void swap_where_only_one_has_value_and_t_is_not_void( + expected &rhs, t_is_nothrow_move_constructible, + e_is_nothrow_move_constructible) noexcept { + auto temp = std::move(val()); + val().~T(); + ::new (errptr()) unexpected_type(std::move(rhs.err())); + rhs.err().~unexpected_type(); + ::new (rhs.valptr()) T(std::move(temp)); + std::swap(this->m_has_val, rhs.m_has_val); + } + + void swap_where_only_one_has_value_and_t_is_not_void( + expected &rhs, t_is_nothrow_move_constructible, + move_constructing_e_can_throw) { + auto temp = std::move(val()); + val().~T(); +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + try { + ::new (errptr()) unexpected_type(std::move(rhs.err())); + rhs.err().~unexpected_type(); + ::new (rhs.valptr()) T(std::move(temp)); + std::swap(this->m_has_val, rhs.m_has_val); + } catch (...) { + val() = std::move(temp); + throw; + } +#else + ::new (errptr()) unexpected_type(std::move(rhs.err())); + rhs.err().~unexpected_type(); + ::new (rhs.valptr()) T(std::move(temp)); + std::swap(this->m_has_val, rhs.m_has_val); +#endif + } + + void swap_where_only_one_has_value_and_t_is_not_void( + expected &rhs, move_constructing_t_can_throw, + e_is_nothrow_move_constructible) { + auto temp = std::move(rhs.err()); + rhs.err().~unexpected_type(); +#ifdef TL_EXPECTED_EXCEPTIONS_ENABLED + try { + ::new (rhs.valptr()) T(std::move(val())); + val().~T(); + ::new (errptr()) unexpected_type(std::move(temp)); + std::swap(this->m_has_val, rhs.m_has_val); + } catch (...) { + rhs.err() = std::move(temp); + throw; + } +#else + ::new (rhs.valptr()) T(std::move(val())); + val().~T(); + ::new (errptr()) unexpected_type(std::move(temp)); + std::swap(this->m_has_val, rhs.m_has_val); +#endif + } + +public: + template + detail::enable_if_t::value && + detail::is_swappable::value && + (std::is_nothrow_move_constructible::value || + std::is_nothrow_move_constructible::value)> + swap(expected &rhs) noexcept(std::is_nothrow_move_constructible::value && + detail::is_nothrow_swappable::value && + std::is_nothrow_move_constructible::value && + detail::is_nothrow_swappable::value) { + if (has_value() && rhs.has_value()) { + swap_where_both_have_value(rhs, typename std::is_void::type{}); + } else if (!has_value() && rhs.has_value()) { + rhs.swap(*this); + } else if (has_value()) { + swap_where_only_one_has_value(rhs, typename std::is_void::type{}); + } else { + using std::swap; + swap(err(), rhs.err()); + } + } + + constexpr const T *operator->() const { + TL_ASSERT(has_value()); + return valptr(); + } + TL_EXPECTED_11_CONSTEXPR T *operator->() { + TL_ASSERT(has_value()); + return valptr(); + } + + template ::value> * = nullptr> + constexpr const U &operator*() const & { + TL_ASSERT(has_value()); + return val(); + } + template ::value> * = nullptr> + TL_EXPECTED_11_CONSTEXPR U &operator*() & { + TL_ASSERT(has_value()); + return val(); + } + template ::value> * = nullptr> + constexpr const U &&operator*() const && { + TL_ASSERT(has_value()); + return std::move(val()); + } + template ::value> * = nullptr> + TL_EXPECTED_11_CONSTEXPR U &&operator*() && { + TL_ASSERT(has_value()); + return std::move(val()); + } + + constexpr bool has_value() const noexcept { return this->m_has_val; } + constexpr explicit operator bool() const noexcept { return this->m_has_val; } + + template ::value> * = nullptr> + TL_EXPECTED_11_CONSTEXPR const U &value() const & { + if (!has_value()) + detail::throw_exception(bad_expected_access(err().value())); + return val(); + } + template ::value> * = nullptr> + TL_EXPECTED_11_CONSTEXPR U &value() & { + if (!has_value()) + detail::throw_exception(bad_expected_access(err().value())); + return val(); + } + template ::value> * = nullptr> + TL_EXPECTED_11_CONSTEXPR const U &&value() const && { + if (!has_value()) + detail::throw_exception(bad_expected_access(std::move(err()).value())); + return std::move(val()); + } + template ::value> * = nullptr> + TL_EXPECTED_11_CONSTEXPR U &&value() && { + if (!has_value()) + detail::throw_exception(bad_expected_access(std::move(err()).value())); + return std::move(val()); + } + + constexpr const E &error() const & { + TL_ASSERT(!has_value()); + return err().value(); + } + TL_EXPECTED_11_CONSTEXPR E &error() & { + TL_ASSERT(!has_value()); + return err().value(); + } + constexpr const E &&error() const && { + TL_ASSERT(!has_value()); + return std::move(err().value()); + } + TL_EXPECTED_11_CONSTEXPR E &&error() && { + TL_ASSERT(!has_value()); + return std::move(err().value()); + } + + template constexpr T value_or(U &&v) const & { + static_assert(std::is_copy_constructible::value && + std::is_convertible::value, + "T must be copy-constructible and convertible to from U&&"); + return bool(*this) ? **this : static_cast(std::forward(v)); + } + template TL_EXPECTED_11_CONSTEXPR T value_or(U &&v) && { + static_assert(std::is_move_constructible::value && + std::is_convertible::value, + "T must be move-constructible and convertible to from U&&"); + return bool(*this) ? std::move(**this) : static_cast(std::forward(v)); + } +}; + +namespace detail { +template using exp_t = typename detail::decay_t::value_type; +template using err_t = typename detail::decay_t::error_type; +template using ret_t = expected>; + +#ifdef TL_EXPECTED_CXX14 +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + *std::declval()))> +constexpr auto and_then_impl(Exp &&exp, F &&f) { + static_assert(detail::is_expected::value, "F must return an expected"); + + return exp.has_value() + ? detail::invoke(std::forward(f), *std::forward(exp)) + : Ret(unexpect, std::forward(exp).error()); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval()))> +constexpr auto and_then_impl(Exp &&exp, F &&f) { + static_assert(detail::is_expected::value, "F must return an expected"); + + return exp.has_value() ? detail::invoke(std::forward(f)) + : Ret(unexpect, std::forward(exp).error()); +} +#else +template struct TC; +template (), + *std::declval())), + detail::enable_if_t>::value> * = nullptr> +auto and_then_impl(Exp &&exp, F &&f) -> Ret { + static_assert(detail::is_expected::value, "F must return an expected"); + + return exp.has_value() + ? detail::invoke(std::forward(f), *std::forward(exp)) + : Ret(unexpect, std::forward(exp).error()); +} + +template ())), + detail::enable_if_t>::value> * = nullptr> +constexpr auto and_then_impl(Exp &&exp, F &&f) -> Ret { + static_assert(detail::is_expected::value, "F must return an expected"); + + return exp.has_value() ? detail::invoke(std::forward(f)) + : Ret(unexpect, std::forward(exp).error()); +} +#endif + +#ifdef TL_EXPECTED_CXX14 +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + *std::declval())), + detail::enable_if_t::value> * = nullptr> +constexpr auto expected_map_impl(Exp &&exp, F &&f) { + using result = ret_t>; + return exp.has_value() ? result(detail::invoke(std::forward(f), + *std::forward(exp))) + : result(unexpect, std::forward(exp).error()); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + *std::declval())), + detail::enable_if_t::value> * = nullptr> +auto expected_map_impl(Exp &&exp, F &&f) { + using result = expected>; + if (exp.has_value()) { + detail::invoke(std::forward(f), *std::forward(exp)); + return result(); + } + + return result(unexpect, std::forward(exp).error()); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval())), + detail::enable_if_t::value> * = nullptr> +constexpr auto expected_map_impl(Exp &&exp, F &&f) { + using result = ret_t>; + return exp.has_value() ? result(detail::invoke(std::forward(f))) + : result(unexpect, std::forward(exp).error()); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval())), + detail::enable_if_t::value> * = nullptr> +auto expected_map_impl(Exp &&exp, F &&f) { + using result = expected>; + if (exp.has_value()) { + detail::invoke(std::forward(f)); + return result(); + } + + return result(unexpect, std::forward(exp).error()); +} +#else +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + *std::declval())), + detail::enable_if_t::value> * = nullptr> + +constexpr auto expected_map_impl(Exp &&exp, F &&f) + -> ret_t> { + using result = ret_t>; + + return exp.has_value() ? result(detail::invoke(std::forward(f), + *std::forward(exp))) + : result(unexpect, std::forward(exp).error()); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + *std::declval())), + detail::enable_if_t::value> * = nullptr> + +auto expected_map_impl(Exp &&exp, F &&f) -> expected> { + if (exp.has_value()) { + detail::invoke(std::forward(f), *std::forward(exp)); + return {}; + } + + return unexpected>(std::forward(exp).error()); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval())), + detail::enable_if_t::value> * = nullptr> + +constexpr auto expected_map_impl(Exp &&exp, F &&f) + -> ret_t> { + using result = ret_t>; + + return exp.has_value() ? result(detail::invoke(std::forward(f))) + : result(unexpect, std::forward(exp).error()); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval())), + detail::enable_if_t::value> * = nullptr> + +auto expected_map_impl(Exp &&exp, F &&f) -> expected> { + if (exp.has_value()) { + detail::invoke(std::forward(f)); + return {}; + } + + return unexpected>(std::forward(exp).error()); +} +#endif + +#if defined(TL_EXPECTED_CXX14) && !defined(TL_EXPECTED_GCC49) && \ + !defined(TL_EXPECTED_GCC54) && !defined(TL_EXPECTED_GCC55) +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +constexpr auto map_error_impl(Exp &&exp, F &&f) { + using result = expected, detail::decay_t>; + return exp.has_value() + ? result(*std::forward(exp)) + : result(unexpect, detail::invoke(std::forward(f), + std::forward(exp).error())); +} +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +auto map_error_impl(Exp &&exp, F &&f) { + using result = expected, monostate>; + if (exp.has_value()) { + return result(*std::forward(exp)); + } + + detail::invoke(std::forward(f), std::forward(exp).error()); + return result(unexpect, monostate{}); +} +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +constexpr auto map_error_impl(Exp &&exp, F &&f) { + using result = expected, detail::decay_t>; + return exp.has_value() + ? result() + : result(unexpect, detail::invoke(std::forward(f), + std::forward(exp).error())); +} +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +auto map_error_impl(Exp &&exp, F &&f) { + using result = expected, monostate>; + if (exp.has_value()) { + return result(); + } + + detail::invoke(std::forward(f), std::forward(exp).error()); + return result(unexpect, monostate{}); +} +#else +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +constexpr auto map_error_impl(Exp &&exp, F &&f) + -> expected, detail::decay_t> { + using result = expected, detail::decay_t>; + + return exp.has_value() + ? result(*std::forward(exp)) + : result(unexpect, detail::invoke(std::forward(f), + std::forward(exp).error())); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +auto map_error_impl(Exp &&exp, F &&f) -> expected, monostate> { + using result = expected, monostate>; + if (exp.has_value()) { + return result(*std::forward(exp)); + } + + detail::invoke(std::forward(f), std::forward(exp).error()); + return result(unexpect, monostate{}); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +constexpr auto map_error_impl(Exp &&exp, F &&f) + -> expected, detail::decay_t> { + using result = expected, detail::decay_t>; + + return exp.has_value() + ? result() + : result(unexpect, detail::invoke(std::forward(f), + std::forward(exp).error())); +} + +template >::value> * = nullptr, + class Ret = decltype(detail::invoke(std::declval(), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +auto map_error_impl(Exp &&exp, F &&f) -> expected, monostate> { + using result = expected, monostate>; + if (exp.has_value()) { + return result(); + } + + detail::invoke(std::forward(f), std::forward(exp).error()); + return result(unexpect, monostate{}); +} +#endif + +#ifdef TL_EXPECTED_CXX14 +template (), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +constexpr auto or_else_impl(Exp &&exp, F &&f) { + static_assert(detail::is_expected::value, "F must return an expected"); + return exp.has_value() ? std::forward(exp) + : detail::invoke(std::forward(f), + std::forward(exp).error()); +} + +template (), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +detail::decay_t or_else_impl(Exp &&exp, F &&f) { + return exp.has_value() ? std::forward(exp) + : (detail::invoke(std::forward(f), + std::forward(exp).error()), + std::forward(exp)); +} +#else +template (), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +auto or_else_impl(Exp &&exp, F &&f) -> Ret { + static_assert(detail::is_expected::value, "F must return an expected"); + return exp.has_value() ? std::forward(exp) + : detail::invoke(std::forward(f), + std::forward(exp).error()); +} + +template (), + std::declval().error())), + detail::enable_if_t::value> * = nullptr> +detail::decay_t or_else_impl(Exp &&exp, F &&f) { + return exp.has_value() ? std::forward(exp) + : (detail::invoke(std::forward(f), + std::forward(exp).error()), + std::forward(exp)); +} +#endif +} // namespace detail + +template +constexpr bool operator==(const expected &lhs, + const expected &rhs) { + return (lhs.has_value() != rhs.has_value()) + ? false + : (!lhs.has_value() ? lhs.error() == rhs.error() : *lhs == *rhs); +} +template +constexpr bool operator!=(const expected &lhs, + const expected &rhs) { + return (lhs.has_value() != rhs.has_value()) + ? true + : (!lhs.has_value() ? lhs.error() != rhs.error() : *lhs != *rhs); +} +template +constexpr bool operator==(const expected &lhs, + const expected &rhs) { + return (lhs.has_value() != rhs.has_value()) + ? false + : (!lhs.has_value() ? lhs.error() == rhs.error() : true); +} +template +constexpr bool operator!=(const expected &lhs, + const expected &rhs) { + return (lhs.has_value() != rhs.has_value()) + ? true + : (!lhs.has_value() ? lhs.error() == rhs.error() : false); +} + +template +constexpr bool operator==(const expected &x, const U &v) { + return x.has_value() ? *x == v : false; +} +template +constexpr bool operator==(const U &v, const expected &x) { + return x.has_value() ? *x == v : false; +} +template +constexpr bool operator!=(const expected &x, const U &v) { + return x.has_value() ? *x != v : true; +} +template +constexpr bool operator!=(const U &v, const expected &x) { + return x.has_value() ? *x != v : true; +} + +template +constexpr bool operator==(const expected &x, const unexpected &e) { + return x.has_value() ? false : x.error() == e.value(); +} +template +constexpr bool operator==(const unexpected &e, const expected &x) { + return x.has_value() ? false : x.error() == e.value(); +} +template +constexpr bool operator!=(const expected &x, const unexpected &e) { + return x.has_value() ? true : x.error() != e.value(); +} +template +constexpr bool operator!=(const unexpected &e, const expected &x) { + return x.has_value() ? true : x.error() != e.value(); +} + +template ::value || + std::is_move_constructible::value) && + detail::is_swappable::value && + std::is_move_constructible::value && + detail::is_swappable::value> * = nullptr> +void swap(expected &lhs, + expected &rhs) noexcept(noexcept(lhs.swap(rhs))) { + lhs.swap(rhs); +} +} // namespace tl + +#endif +/* end file include/ada/expected.h */ +/* begin file include/ada/url_pattern_regex.h */ +/** + * @file url_search_params.h + * @brief Declaration for the URL Search Params + */ +#ifndef ADA_URL_PATTERN_REGEX_H +#define ADA_URL_PATTERN_REGEX_H + +#ifdef ADA_USE_UNSAFE_STD_REGEX_PROVIDER +#include +#endif // ADA_USE_UNSAFE_STD_REGEX_PROVIDER + +namespace ada::url_pattern_regex { + +template +concept regex_concept = requires(T t, std::string_view pattern, + bool ignore_case, std::string_view input) { + // Ensure the class has a type alias 'regex_type' + typename T::regex_type; + + // Function to create a regex instance + { + T::create_instance(pattern, ignore_case) + } -> std::same_as>; + + // Function to perform regex search + { + T::regex_search(input, std::declval()) + } -> std::same_as>>>; + + // Function to match regex pattern + { + T::regex_match(input, std::declval()) + } -> std::same_as; + + // Copy constructor + { T(std::declval()) } -> std::same_as; + + // Move constructor + { T(std::declval()) } -> std::same_as; +}; + +#ifdef ADA_USE_UNSAFE_STD_REGEX_PROVIDER +class std_regex_provider { +public: + std_regex_provider() = default; + using regex_type = std::regex; + static std::optional create_instance(std::string_view pattern, + bool ignore_case); + static std::optional>> + regex_search(std::string_view input, const regex_type &pattern); + static bool regex_match(std::string_view input, const regex_type &pattern); +}; +#endif // ADA_USE_UNSAFE_STD_REGEX_PROVIDER + +} // namespace ada::url_pattern_regex + +#endif // ADA_URL_PATTERN_REGEX_H +/* end file include/ada/url_pattern_regex.h */ +/* begin file include/ada/url_pattern_init.h */ +/** + * @file url_pattern_init.h + * @brief Declaration for the url_pattern_init implementation. + */ +#ifndef ADA_URL_PATTERN_INIT_H +#define ADA_URL_PATTERN_INIT_H + +/* begin file include/ada/errors.h */ +/** + * @file errors.h + * @brief Definitions for the errors. + */ +#ifndef ADA_ERRORS_H +#define ADA_ERRORS_H + +#include +namespace ada { +enum class errors : uint8_t { type_error }; +} // namespace ada +#endif // ADA_ERRORS_H +/* end file include/ada/errors.h */ + +#include +#include +#include + +#if ADA_TESTING +#include +#endif // ADA_TESTING + +namespace ada { + +// Important: C++20 allows us to use concept rather than `using` or `typedef +// and allows functions with second argument, which is optional (using either +// std::nullopt or a parameter with default value) +template +concept url_pattern_encoding_callback = requires(F f, std::string_view sv) { + { f(sv) } -> std::same_as>; +}; + +// A structure providing matching patterns for individual components +// of a URL. When a URLPattern is created, or when a URLPattern is +// used to match or test against a URL, the input can be given as +// either a string or a URLPatternInit struct. If a string is given, +// it will be parsed to create a URLPatternInit. The URLPatternInit +// API is defined as part of the URLPattern specification. +struct url_pattern_init { + // @see https://urlpattern.spec.whatwg.org/#process-a-urlpatterninit + static tl::expected + process(url_pattern_init init, std::string_view type, + std::optional protocol = std::nullopt, + std::optional username = std::nullopt, + std::optional password = std::nullopt, + std::optional hostname = std::nullopt, + std::optional port = std::nullopt, + std::optional pathname = std::nullopt, + std::optional search = std::nullopt, + std::optional hash = std::nullopt); + + // @see https://urlpattern.spec.whatwg.org/#process-protocol-for-init + static tl::expected + process_protocol(std::string_view value, std::string_view type); + + // @see https://urlpattern.spec.whatwg.org/#process-username-for-init + static tl::expected + process_username(std::string_view value, std::string_view type); + + // @see https://urlpattern.spec.whatwg.org/#process-password-for-init + static tl::expected + process_password(std::string_view value, std::string_view type); + + // @see https://urlpattern.spec.whatwg.org/#process-hostname-for-init + static tl::expected + process_hostname(std::string_view value, std::string_view type); + + // @see https://urlpattern.spec.whatwg.org/#process-port-for-init + static tl::expected + process_port(std::string_view port, std::string_view protocol, + std::string_view type); + + // @see https://urlpattern.spec.whatwg.org/#process-pathname-for-init + static tl::expected + process_pathname(std::string_view value, std::string_view protocol, + std::string_view type); + + // @see https://urlpattern.spec.whatwg.org/#process-search-for-init + static tl::expected + process_search(std::string_view value, std::string_view type); + + // @see https://urlpattern.spec.whatwg.org/#process-hash-for-init + static tl::expected process_hash(std::string_view value, + std::string_view type); + +#if ADA_TESTING + friend void PrintTo(const url_pattern_init &init, std::ostream *os) { + *os << "protocol: '" << init.protocol.value_or("undefined") << "', "; + *os << "username: '" << init.username.value_or("undefined") << "', "; + *os << "password: '" << init.password.value_or("undefined") << "', "; + *os << "hostname: '" << init.hostname.value_or("undefined") << "', "; + *os << "port: '" << init.port.value_or("undefined") << "', "; + *os << "pathname: '" << init.pathname.value_or("undefined") << "', "; + *os << "search: '" << init.search.value_or("undefined") << "', "; + *os << "hash: '" << init.hash.value_or("undefined") << "', "; + *os << "base_url: '" << init.base_url.value_or("undefined") << "', "; + } +#endif // ADA_TESTING + + bool operator==(const url_pattern_init &) const; + + std::optional protocol{}; + std::optional username{}; + std::optional password{}; + std::optional hostname{}; + std::optional port{}; + std::optional pathname{}; + std::optional search{}; + std::optional hash{}; + std::optional base_url{}; +}; +} // namespace ada + +#endif // ADA_URL_PATTERN_INIT_H +/* end file include/ada/url_pattern_init.h */ + +/** + * @private + */ +namespace ada { +struct url_aggregator; +struct url; +template class url_pattern; +struct url_pattern_options; +enum class errors : uint8_t; +} // namespace ada + +/** + * @namespace ada::parser + * @brief Includes the definitions for supported parsers + */ +namespace ada::parser { +/** + * Parses a url. The parameter user_input is the input to be parsed: + * it should be a valid UTF-8 string. The parameter base_url is an optional + * parameter that can be used to resolve relative URLs. If the base_url is + * provided, the user_input is resolved against the base_url. + */ +template +result_type parse_url(std::string_view user_input, + const result_type *base_url = nullptr); + +extern template url_aggregator +parse_url(std::string_view user_input, + const url_aggregator *base_url); +extern template url parse_url(std::string_view user_input, + const url *base_url); + +template +result_type parse_url_impl(std::string_view user_input, + const result_type *base_url = nullptr); + +extern template url_aggregator +parse_url_impl(std::string_view user_input, + const url_aggregator *base_url); +extern template url parse_url_impl(std::string_view user_input, + const url *base_url); + +template +tl::expected, errors> +parse_url_pattern_impl(std::variant input, + const std::string_view *base_url, + const url_pattern_options *options); + +} // namespace ada::parser + +#endif // ADA_PARSER_H +/* end file include/ada/parser.h */ +/* begin file include/ada/parser-inl.h */ +/** + * @file parser-inl.h + */ +#ifndef ADA_PARSER_INL_H +#define ADA_PARSER_INL_H + +/* begin file include/ada/url_pattern.h */ +/** + * @file url_pattern.h + * @brief Declaration for the URLPattern implementation. + */ +#ifndef ADA_URL_PATTERN_H +#define ADA_URL_PATTERN_H + +/* begin file include/ada/implementation.h */ +/** + * @file implementation.h + * @brief Definitions for user facing functions for parsing URL and it's + * components. + */ +#ifndef ADA_IMPLEMENTATION_H +#define ADA_IMPLEMENTATION_H + +#include +#include + +/* begin file include/ada/url.h */ +/** + * @file url.h + * @brief Declaration for the URL + */ +#ifndef ADA_URL_H +#define ADA_URL_H + +#include +#include +#include +#include + +/* begin file include/ada/checkers.h */ +/** + * @file checkers.h + * @brief Declarations for URL specific checkers used within Ada. + */ +#ifndef ADA_CHECKERS_H +#define ADA_CHECKERS_H + +#include +#include + +/** + * These functions are not part of our public API and may + * change at any time. + * @private + * @namespace ada::checkers + * @brief Includes the definitions for validation functions + */ +namespace ada::checkers { + +/** + * @private + * Assuming that x is an ASCII letter, this function returns the lower case + * equivalent. + * @details More likely to be inlined by the compiler and constexpr. + */ +constexpr char to_lower(char x) noexcept; + +/** + * @private + * Returns true if the character is an ASCII letter. Equivalent to std::isalpha + * but more likely to be inlined by the compiler. + * + * @attention std::isalpha is not constexpr generally. + */ +constexpr bool is_alpha(char x) noexcept; + +/** + * @private + * Check whether a string starts with 0x or 0X. The function is only + * safe if input.size() >=2. + * + * @see has_hex_prefix + */ +constexpr bool has_hex_prefix_unsafe(std::string_view input); +/** + * @private + * Check whether a string starts with 0x or 0X. + */ +constexpr bool has_hex_prefix(std::string_view input); + +/** + * @private + * Check whether x is an ASCII digit. More likely to be inlined than + * std::isdigit. + */ +constexpr bool is_digit(char x) noexcept; + +/** + * @private + * @details A string starts with a Windows drive letter if all of the following + * are true: + * + * - its length is greater than or equal to 2 + * - its first two code points are a Windows drive letter + * - its length is 2 or its third code point is U+002F (/), U+005C (\), U+003F + * (?), or U+0023 (#). + * + * https://url.spec.whatwg.org/#start-with-a-windows-drive-letter + */ +inline constexpr bool is_windows_drive_letter(std::string_view input) noexcept; + +/** + * @private + * @details A normalized Windows drive letter is a Windows drive letter of which + * the second code point is U+003A (:). + */ +inline constexpr bool +is_normalized_windows_drive_letter(std::string_view input) noexcept; + +/** + * @private + * Returns true if an input is an ipv4 address. It is assumed that the string + * does not contain uppercase ASCII characters (the input should have been + * lowered cased before calling this function) and is not empty. + */ +ada_really_inline constexpr bool is_ipv4(std::string_view view) noexcept; + +/** + * @private + * Returns a bitset. If the first bit is set, then at least one character needs + * percent encoding. If the second bit is set, a \\ is found. If the third bit + * is set then we have a dot. If the fourth bit is set, then we have a percent + * character. + */ +ada_really_inline constexpr uint8_t +path_signature(std::string_view input) noexcept; + +/** + * @private + * Returns true if the length of the domain name and its labels are according to + * the specifications. The length of the domain must be 255 octets (253 + * characters not including the last 2 which are the empty label reserved at the + * end). When the empty label is included (a dot at the end), the domain name + * can have 254 characters. The length of a label must be at least 1 and at most + * 63 characters. + * @see section 3.1. of https://www.rfc-editor.org/rfc/rfc1034 + * @see https://www.unicode.org/reports/tr46/#ToASCII + */ +ada_really_inline constexpr bool +verify_dns_length(std::string_view input) noexcept; + +} // namespace ada::checkers + +#endif // ADA_CHECKERS_H +/* end file include/ada/checkers.h */ +/* begin file include/ada/url_components.h */ +/** + * @file url_components.h + * @brief Declaration for the URL Components + */ +#ifndef ADA_URL_COMPONENTS_H +#define ADA_URL_COMPONENTS_H + +namespace ada { + +/** + * @brief URL Component representations using offsets. + * + * @details We design the url_components struct so that it is as small + * and simple as possible. This version uses 32 bytes. + * + * This struct is used to extract components from a single 'href'. + */ +struct url_components { + constexpr static uint32_t omitted = uint32_t(-1); + + url_components() = default; + url_components(const url_components &u) = default; + url_components(url_components &&u) noexcept = default; + url_components &operator=(url_components &&u) noexcept = default; + url_components &operator=(const url_components &u) = default; + ~url_components() = default; + + /* + * By using 32-bit integers, we implicitly assume that the URL string + * cannot exceed 4 GB. + * + * https://user:pass@example.com:1234/foo/bar?baz#quux + * | | | | ^^^^| | | + * | | | | | | | `----- hash_start + * | | | | | | `--------- search_start + * | | | | | `----------------- pathname_start + * | | | | `--------------------- port + * | | | `----------------------- host_end + * | | `---------------------------------- host_start + * | `--------------------------------------- username_end + * `--------------------------------------------- protocol_end + */ + uint32_t protocol_end{0}; + /** + * Username end is not `omitted` by default to make username and password + * getters less costly to implement. + */ + uint32_t username_end{0}; + uint32_t host_start{0}; + uint32_t host_end{0}; + uint32_t port{omitted}; + uint32_t pathname_start{0}; + uint32_t search_start{omitted}; + uint32_t hash_start{omitted}; + + /** + * Check the following conditions: + * protocol_end < username_end < ... < hash_start, + * expect when a value is omitted. It also computes + * a lower bound on the possible string length that may match these + * offsets. + * @return true if the offset values are + * consistent with a possible URL string + */ + [[nodiscard]] constexpr bool check_offset_consistency() const noexcept; + + /** + * Converts a url_components to JSON stringified version. + */ + [[nodiscard]] std::string to_string() const; + +}; // struct url_components +} // namespace ada +#endif +/* end file include/ada/url_components.h */ + +namespace ada { + +struct url_aggregator; + +// namespace parser { +// template +// result_type parse_url(std::string_view user_input, +// const result_type* base_url = nullptr); +// template +// result_type parse_url_impl(std::string_view user_input, +// const result_type* base_url = nullptr); +// } + +/** + * @brief Generic URL struct reliant on std::string instantiation. + * + * @details To disambiguate from a valid URL string it can also be referred to + * as a URL record. A URL is a struct that represents a universal identifier. + * Unlike the url_aggregator, the ada::url represents the different components + * of a parsed URL as independent std::string instances. This makes the + * structure heavier and more reliant on memory allocations. When getting + * components from the parsed URL, a new std::string is typically constructed. + * + * @see https://url.spec.whatwg.org/#url-representation + */ +struct url : url_base { + url() = default; + url(const url &u) = default; + url(url &&u) noexcept = default; + url &operator=(url &&u) noexcept = default; + url &operator=(const url &u) = default; + ~url() override = default; + + /** + * @private + * A URL's username is an ASCII string identifying a username. It is initially + * the empty string. + */ + std::string username{}; + + /** + * @private + * A URL's password is an ASCII string identifying a password. It is initially + * the empty string. + */ + std::string password{}; + + /** + * @private + * A URL's host is null or a host. It is initially null. + */ + std::optional host{}; + + /** + * @private + * A URL's port is either null or a 16-bit unsigned integer that identifies a + * networking port. It is initially null. + */ + std::optional port{}; + + /** + * @private + * A URL's path is either an ASCII string or a list of zero or more ASCII + * strings, usually identifying a location. + */ + std::string path{}; + + /** + * @private + * A URL's query is either null or an ASCII string. It is initially null. + */ + std::optional query{}; + + /** + * @private + * A URL's fragment is either null or an ASCII string that can be used for + * further processing on the resource the URL's other components identify. It + * is initially null. + */ + std::optional hash{}; + + /** @return true if it has an host but it is the empty string */ + [[nodiscard]] inline bool has_empty_hostname() const noexcept; + /** @return true if the URL has a (non default) port */ + [[nodiscard]] inline bool has_port() const noexcept; + /** @return true if it has a host (included an empty host) */ + [[nodiscard]] inline bool has_hostname() const noexcept; + [[nodiscard]] bool has_valid_domain() const noexcept override; + + /** + * Returns a JSON string representation of this URL. + */ + [[nodiscard]] std::string to_string() const override; + + /** + * @see https://url.spec.whatwg.org/#dom-url-href + * @see https://url.spec.whatwg.org/#concept-url-serializer + */ + [[nodiscard]] ada_really_inline std::string get_href() const noexcept; + + /** + * The origin getter steps are to return the serialization of this's URL's + * origin. [HTML] + * @return a newly allocated string. + * @see https://url.spec.whatwg.org/#concept-url-origin + */ + [[nodiscard]] std::string get_origin() const noexcept override; + + /** + * The protocol getter steps are to return this's URL's scheme, followed by + * U+003A (:). + * @return a newly allocated string. + * @see https://url.spec.whatwg.org/#dom-url-protocol + */ + [[nodiscard]] std::string get_protocol() const noexcept; + + /** + * Return url's host, serialized, followed by U+003A (:) and url's port, + * serialized. + * When there is no host, this function returns the empty string. + * @return a newly allocated string. + * @see https://url.spec.whatwg.org/#dom-url-host + */ + [[nodiscard]] std::string get_host() const noexcept; + + /** + * Return this's URL's host, serialized. + * When there is no host, this function returns the empty string. + * @return a newly allocated string. + * @see https://url.spec.whatwg.org/#dom-url-hostname + */ + [[nodiscard]] std::string get_hostname() const noexcept; + + /** + * The pathname getter steps are to return the result of URL path serializing + * this's URL. + * @return a newly allocated string. + * @see https://url.spec.whatwg.org/#dom-url-pathname + */ + [[nodiscard]] constexpr std::string_view get_pathname() const noexcept; + + /** + * Compute the pathname length in bytes without instantiating a view or a + * string. + * @return size of the pathname in bytes + * @see https://url.spec.whatwg.org/#dom-url-pathname + */ + [[nodiscard]] ada_really_inline size_t get_pathname_length() const noexcept; + + /** + * Return U+003F (?), followed by this's URL's query. + * @return a newly allocated string. + * @see https://url.spec.whatwg.org/#dom-url-search + */ + [[nodiscard]] std::string get_search() const noexcept; + + /** + * The username getter steps are to return this's URL's username. + * @return a constant reference to the underlying string. + * @see https://url.spec.whatwg.org/#dom-url-username + */ + [[nodiscard]] const std::string &get_username() const noexcept; + + /** + * @return Returns true on successful operation. + * @see https://url.spec.whatwg.org/#dom-url-username + */ + bool set_username(std::string_view input); + + /** + * @return Returns true on success. + * @see https://url.spec.whatwg.org/#dom-url-password + */ + bool set_password(std::string_view input); + + /** + * @return Returns true on success. + * @see https://url.spec.whatwg.org/#dom-url-port + */ + bool set_port(std::string_view input); + + /** + * This function always succeeds. + * @see https://url.spec.whatwg.org/#dom-url-hash + */ + void set_hash(std::string_view input); + + /** + * This function always succeeds. + * @see https://url.spec.whatwg.org/#dom-url-search + */ + void set_search(std::string_view input); + + /** + * @return Returns true on success. + * @see https://url.spec.whatwg.org/#dom-url-search + */ + bool set_pathname(std::string_view input); + + /** + * @return Returns true on success. + * @see https://url.spec.whatwg.org/#dom-url-host + */ + bool set_host(std::string_view input); + + /** + * @return Returns true on success. + * @see https://url.spec.whatwg.org/#dom-url-hostname + */ + bool set_hostname(std::string_view input); + + /** + * @return Returns true on success. + * @see https://url.spec.whatwg.org/#dom-url-protocol + */ + bool set_protocol(std::string_view input); + + /** + * @see https://url.spec.whatwg.org/#dom-url-href + */ + bool set_href(std::string_view input); + + /** + * The password getter steps are to return this's URL's password. + * @return a constant reference to the underlying string. + * @see https://url.spec.whatwg.org/#dom-url-password + */ + [[nodiscard]] const std::string &get_password() const noexcept; + + /** + * Return this's URL's port, serialized. + * @return a newly constructed string representing the port. + * @see https://url.spec.whatwg.org/#dom-url-port + */ + [[nodiscard]] std::string get_port() const noexcept; + + /** + * Return U+0023 (#), followed by this's URL's fragment. + * @return a newly constructed string representing the hash. + * @see https://url.spec.whatwg.org/#dom-url-hash + */ + [[nodiscard]] std::string get_hash() const noexcept; + + /** + * A URL includes credentials if its username or password is not the empty + * string. + */ + [[nodiscard]] ada_really_inline bool has_credentials() const noexcept; + + /** + * Useful for implementing efficient serialization for the URL. + * + * https://user:pass@example.com:1234/foo/bar?baz#quux + * | | | | ^^^^| | | + * | | | | | | | `----- hash_start + * | | | | | | `--------- search_start + * | | | | | `----------------- pathname_start + * | | | | `--------------------- port + * | | | `----------------------- host_end + * | | `---------------------------------- host_start + * | `--------------------------------------- username_end + * `--------------------------------------------- protocol_end + * + * Inspired after servo/url + * + * @return a newly constructed component. + * + * @see + * https://github.com/servo/rust-url/blob/b65a45515c10713f6d212e6726719a020203cc98/url/src/quirks.rs#L31 + */ + [[nodiscard]] ada_really_inline ada::url_components + get_components() const noexcept; + /** @return true if the URL has a hash component */ + [[nodiscard]] constexpr bool has_hash() const noexcept override; + /** @return true if the URL has a search component */ + [[nodiscard]] constexpr bool has_search() const noexcept override; + +private: + friend ada::url ada::parser::parse_url(std::string_view, + const ada::url *); + friend ada::url_aggregator + ada::parser::parse_url(std::string_view, + const ada::url_aggregator *); + friend void ada::helpers::strip_trailing_spaces_from_opaque_path( + ada::url &url) noexcept; + + friend ada::url ada::parser::parse_url_impl(std::string_view, + const ada::url *); + friend ada::url_aggregator + ada::parser::parse_url_impl( + std::string_view, const ada::url_aggregator *); + + inline void update_unencoded_base_hash(std::string_view input); + inline void update_base_hostname(std::string_view input); + inline void update_base_search(std::string_view input, + const uint8_t query_percent_encode_set[]); + inline void update_base_search(std::optional &&input); + inline void update_base_pathname(std::string_view input); + inline void update_base_username(std::string_view input); + inline void update_base_password(std::string_view input); + inline void update_base_port(std::optional input); + + /** + * Sets the host or hostname according to override condition. + * Return true on success. + * @see https://url.spec.whatwg.org/#hostname-state + */ + template + bool set_host_or_hostname(std::string_view input); + + /** + * Return true on success. + * @see https://url.spec.whatwg.org/#concept-ipv4-parser + */ + [[nodiscard]] bool parse_ipv4(std::string_view input); + + /** + * Return true on success. + * @see https://url.spec.whatwg.org/#concept-ipv6-parser + */ + [[nodiscard]] bool parse_ipv6(std::string_view input); + + /** + * Return true on success. + * @see https://url.spec.whatwg.org/#concept-opaque-host-parser + */ + [[nodiscard]] bool parse_opaque_host(std::string_view input); + + /** + * A URL's scheme is an ASCII string that identifies the type of URL and can + * be used to dispatch a URL for further processing after parsing. It is + * initially the empty string. We only set non_special_scheme when the scheme + * is non-special, otherwise we avoid constructing string. + * + * Special schemes are stored in ada::scheme::details::is_special_list so we + * typically do not need to store them in each url instance. + */ + std::string non_special_scheme{}; + + /** + * A URL cannot have a username/password/port if its host is null or the empty + * string, or its scheme is "file". + */ + [[nodiscard]] inline bool cannot_have_credentials_or_port() const; + + ada_really_inline size_t parse_port( + std::string_view view, bool check_trailing_content) noexcept override; + + ada_really_inline size_t parse_port(std::string_view view) noexcept override { + return this->parse_port(view, false); + } + + /** + * Parse the host from the provided input. We assume that + * the input does not contain spaces or tabs. Control + * characters and spaces are not trimmed (they should have + * been removed if needed). + * Return true on success. + * @see https://url.spec.whatwg.org/#host-parsing + */ + [[nodiscard]] ada_really_inline bool parse_host(std::string_view input); + + template + [[nodiscard]] ada_really_inline bool parse_scheme(std::string_view input); + + constexpr void clear_pathname() override; + constexpr void clear_search() override; + constexpr void set_protocol_as_file(); + + /** + * Parse the path from the provided input. + * Return true on success. Control characters not + * trimmed from the ends (they should have + * been removed if needed). + * + * The input is expected to be UTF-8. + * + * @see https://url.spec.whatwg.org/ + */ + ada_really_inline void parse_path(std::string_view input); + + /** + * Set the scheme for this URL. The provided scheme should be a valid + * scheme string, be lower-cased, not contain spaces or tabs. It should + * have no spurious trailing or leading content. + */ + inline void set_scheme(std::string &&new_scheme) noexcept; + + /** + * Take the scheme from another URL. The scheme string is moved from the + * provided url. + */ + constexpr void copy_scheme(ada::url &&u) noexcept; + + /** + * Take the scheme from another URL. The scheme string is copied from the + * provided url. + */ + constexpr void copy_scheme(const ada::url &u); + +}; // struct url + +inline std::ostream &operator<<(std::ostream &out, const ada::url &u); +} // namespace ada + +#endif // ADA_URL_H +/* end file include/ada/url.h */ + +namespace ada { + +template +using result = tl::expected; + +/** + * The URL parser takes a scalar value string input, with an optional null or + * base URL base (default null). The parser assumes the input is a valid ASCII + * or UTF-8 string. + * + * @param input the string input to analyze (must be valid ASCII or UTF-8) + * @param base_url the optional URL input to use as a base url. + * @return a parsed URL. + */ +template +ada_warn_unused ada::result +parse(std::string_view input, const result_type *base_url = nullptr); + +extern template ada::result parse(std::string_view input, + const url *base_url); +extern template ada::result +parse(std::string_view input, const url_aggregator *base_url); + +/** + * Verifies whether the URL strings can be parsed. The function assumes + * that the inputs are valid ASCII or UTF-8 strings. + * @see https://url.spec.whatwg.org/#dom-url-canparse + * @return If URL can be parsed or not. + */ +bool can_parse(std::string_view input, + const std::string_view *base_input = nullptr); + +/** + * Implementation of the URL pattern parsing algorithm. + * @see https://urlpattern.spec.whatwg.org + * + * @param input valid UTF-8 string or URLPatternInit struct + * @param base_url an optional valid UTF-8 string + * @param options an optional url_pattern_options struct + * @return url_pattern instance + */ +template +ada_warn_unused tl::expected, errors> +parse_url_pattern(std::variant input, + const std::string_view *base_url = nullptr, + const url_pattern_options *options = nullptr); + +/** + * Computes a href string from a file path. The function assumes + * that the input is a valid ASCII or UTF-8 string. + * @return a href string (starts with file:://) + */ +std::string href_from_file(std::string_view path); +} // namespace ada + +#endif // ADA_IMPLEMENTATION_H +/* end file include/ada/implementation.h */ + +#include +#include +#include +#include + +#if ADA_TESTING +#include +#endif // ADA_TESTING + +namespace ada { + +enum class url_pattern_part_type : uint8_t { + // The part represents a simple fixed text string. + FIXED_TEXT, + // The part represents a matching group with a custom regular expression. + REGEXP, + // The part represents a matching group that matches code points up to the + // next separator code point. This is typically used for a named group like + // ":foo" that does not have a custom regular expression. + SEGMENT_WILDCARD, + // The part represents a matching group that greedily matches all code points. + // This is typically used for the "*" wildcard matching group. + FULL_WILDCARD, +}; + +enum class url_pattern_part_modifier : uint8_t { + // The part does not have a modifier. + none, + // The part has an optional modifier indicated by the U+003F (?) code point. + optional, + // The part has a "zero or more" modifier indicated by the U+002A (*) code + // point. + zero_or_more, + // The part has a "one or more" modifier indicated by the U+002B (+) code + // point. + one_or_more, +}; + +// @see https://urlpattern.spec.whatwg.org/#part +class url_pattern_part { +public: + url_pattern_part(url_pattern_part_type _type, std::string &&_value, + url_pattern_part_modifier _modifier) + : type(_type), value(_value), modifier(_modifier) {} + + url_pattern_part(url_pattern_part_type _type, std::string &&_value, + url_pattern_part_modifier _modifier, std::string &&_name, + std::string &&_prefix, std::string &&_suffix) + : type(_type), value(_value), modifier(_modifier), name(_name), + prefix(_prefix), suffix(_suffix) {} + // A part has an associated type, a string, which must be set upon creation. + url_pattern_part_type type; + // A part has an associated value, a string, which must be set upon creation. + std::string value; + // A part has an associated modifier a string, which must be set upon + // creation. + url_pattern_part_modifier modifier; + // A part has an associated name, a string, initially the empty string. + std::string name{}; + // A part has an associated prefix, a string, initially the empty string. + std::string prefix{}; + // A part has an associated suffix, a string, initially the empty string. + std::string suffix{}; + + inline bool is_regexp() const noexcept; +}; + +// @see https://urlpattern.spec.whatwg.org/#options-header +struct url_pattern_compile_component_options { + url_pattern_compile_component_options() = default; + explicit url_pattern_compile_component_options( + std::optional new_delimiter = std::nullopt, + std::optional new_prefix = std::nullopt) + : delimiter(new_delimiter), prefix(new_prefix) {} + + inline std::string_view get_delimiter() const ada_warn_unused; + inline std::string_view get_prefix() const ada_warn_unused; + + // @see https://urlpattern.spec.whatwg.org/#options-ignore-case + bool ignore_case = false; + + static url_pattern_compile_component_options DEFAULT; + static url_pattern_compile_component_options HOSTNAME; + static url_pattern_compile_component_options PATHNAME; + +private: + // @see https://urlpattern.spec.whatwg.org/#options-delimiter-code-point + std::optional delimiter{}; + // @see https://urlpattern.spec.whatwg.org/#options-prefix-code-point + std::optional prefix{}; +}; + +// The default options is an options struct with delimiter code point set to +// the empty string and prefix code point set to the empty string. +inline url_pattern_compile_component_options + url_pattern_compile_component_options::DEFAULT(std::nullopt, std::nullopt); + +// The hostname options is an options struct with delimiter code point set +// "." and prefix code point set to the empty string. +inline url_pattern_compile_component_options + url_pattern_compile_component_options::HOSTNAME('.', std::nullopt); + +// The pathname options is an options struct with delimiter code point set +// "/" and prefix code point set to "/". +inline url_pattern_compile_component_options + url_pattern_compile_component_options::PATHNAME('/', '/'); + +// A struct providing the URLPattern matching results for a single +// URL component. The URLPatternComponentResult is only ever used +// as a member attribute of a URLPatternResult struct. The +// URLPatternComponentResult API is defined as part of the URLPattern +// specification. +struct url_pattern_component_result { + std::string input; + std::unordered_map> groups; + + bool operator==(const url_pattern_component_result &) const; + +#if ADA_TESTING + friend void PrintTo(const url_pattern_component_result &result, + std::ostream *os) { + *os << "input: '" << result.input << "', group: "; + for (const auto &group : result.groups) { + *os << "(" << group.first << ", " << group.second.value_or("undefined") + << ") "; + } + } +#endif // ADA_TESTING +}; + +template +class url_pattern_component { +public: + url_pattern_component() = default; + + // This function explicitly takes a std::string because it is moved. + // To avoid unnecessary copy, move each value while calling the constructor. + url_pattern_component(std::string &&new_pattern, + typename regex_provider::regex_type &&new_regexp, + std::vector &&new_group_name_list, + bool new_has_regexp_groups) + : regexp(std::move(new_regexp)), pattern(std::move(new_pattern)), + group_name_list(new_group_name_list), + has_regexp_groups(new_has_regexp_groups) {} + + // @see https://urlpattern.spec.whatwg.org/#compile-a-component + template + static tl::expected + compile(std::string_view input, F &encoding_callback, + url_pattern_compile_component_options &options); + + // @see https://urlpattern.spec.whatwg.org/#create-a-component-match-result + url_pattern_component_result create_component_match_result( + std::string_view input, + std::vector> &&exec_result); + +#if ADA_TESTING + friend void PrintTo(const url_pattern_component &component, + std::ostream *os) { + *os << "pattern: '" << component.pattern + << "', has_regexp_groups: " << component.has_regexp_groups + << "group_name_list: "; + for (const auto &name : component.group_name_list) { + *os << name << ", "; + } + } +#endif // ADA_TESTING + + typename regex_provider::regex_type regexp{}; + std::string pattern{}; + std::vector group_name_list{}; + bool has_regexp_groups = false; +}; + +using url_pattern_input = std::variant; + +// A struct providing the URLPattern matching results for all +// components of a URL. The URLPatternResult API is defined as +// part of the URLPattern specification. +struct url_pattern_result { + std::vector inputs; + url_pattern_component_result protocol; + url_pattern_component_result username; + url_pattern_component_result password; + url_pattern_component_result hostname; + url_pattern_component_result port; + url_pattern_component_result pathname; + url_pattern_component_result search; + url_pattern_component_result hash; +}; + +struct url_pattern_options { + bool ignore_case = false; + +#if ADA_TESTING + friend void PrintTo(const url_pattern_options &options, std::ostream *os) { + *os << "ignore_case: '" << options.ignore_case; + } +#endif // ADA_TESTING +}; + +// URLPattern is a Web Platform standard API for matching URLs against a +// pattern syntax (think of it as a regular expression for URLs). It is +// defined in https://wicg.github.io/urlpattern. +// More information about the URL Pattern syntax can be found at +// https://developer.mozilla.org/en-US/docs/Web/API/URL_Pattern_API +template class url_pattern { +public: + url_pattern() = default; + + /** + * @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-exec + */ + result> + exec(const url_pattern_input &input, + const std::string_view *base_url = nullptr); + + /** + * @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-test + */ + result test(const url_pattern_input &input, + const std::string_view *base_url = nullptr); + + /** + * @see https://urlpattern.spec.whatwg.org/#url-pattern-match + * This function expects a valid UTF-8 string if input is a string. + */ + result> + match(const url_pattern_input &input, + const std::string_view *base_url_string = nullptr); + + // @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-protocol + [[nodiscard]] std::string_view get_protocol() const ada_lifetime_bound; + // @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-username + [[nodiscard]] std::string_view get_username() const ada_lifetime_bound; + // @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-password + [[nodiscard]] std::string_view get_password() const ada_lifetime_bound; + // @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-hostname + [[nodiscard]] std::string_view get_hostname() const ada_lifetime_bound; + // @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-port + [[nodiscard]] std::string_view get_port() const ada_lifetime_bound; + // @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-pathname + [[nodiscard]] std::string_view get_pathname() const ada_lifetime_bound; + // @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-search + [[nodiscard]] std::string_view get_search() const ada_lifetime_bound; + // @see https://urlpattern.spec.whatwg.org/#dom-urlpattern-hash + [[nodiscard]] std::string_view get_hash() const ada_lifetime_bound; + + // If ignoreCase is true, the JavaScript regular expression created for each + // pattern must use the `vi` flag. Otherwise, they must use the `v` flag. + [[nodiscard]] bool ignore_case() const; + + // @see https://urlpattern.spec.whatwg.org/#url-pattern-has-regexp-groups + [[nodiscard]] bool has_regexp_groups() const; + +#if ADA_TESTING + friend void PrintTo(const url_pattern &c, std::ostream *os) { + *os << "protocol_component: '" << c.get_protocol() << ", "; + *os << "username_component: '" << c.get_username() << ", "; + *os << "password_component: '" << c.get_password() << ", "; + *os << "hostname_component: '" << c.get_hostname() << ", "; + *os << "port_component: '" << c.get_port() << ", "; + *os << "pathname_component: '" << c.get_pathname() << ", "; + *os << "search_component: '" << c.get_search() << ", "; + *os << "hash_component: '" << c.get_hash(); + } +#endif // ADA_TESTING + + template + friend tl::expected, errors> parser::parse_url_pattern_impl( + std::variant input, + const std::string_view *base_url, const url_pattern_options *options); + +private: + url_pattern_component protocol_component{}; + url_pattern_component username_component{}; + url_pattern_component password_component{}; + url_pattern_component hostname_component{}; + url_pattern_component port_component{}; + url_pattern_component pathname_component{}; + url_pattern_component search_component{}; + url_pattern_component hash_component{}; + bool ignore_case_ = false; +}; + +} // namespace ada + +#endif +/* end file include/ada/url_pattern.h */ +/* begin file include/ada/url_pattern_helpers.h */ +/** + * @file url_pattern_helpers.h + * @brief Declaration for the URLPattern helpers. + */ +#ifndef ADA_URL_PATTERN_HELPERS_H +#define ADA_URL_PATTERN_HELPERS_H + +#include +#include +#include + +namespace ada { +enum class errors : uint8_t; +} + +namespace ada::url_pattern_helpers { + +// @see https://urlpattern.spec.whatwg.org/#token +enum class token_type : uint8_t { + INVALID_CHAR, // 0 + OPEN, // 1 + CLOSE, // 2 + REGEXP, // 3 + NAME, // 4 + CHAR, // 5 + ESCAPED_CHAR, // 6 + OTHER_MODIFIER, // 7 + ASTERISK, // 8 + END, // 9 +}; + +std::string to_string(token_type type); + +// @see https://urlpattern.spec.whatwg.org/#tokenize-policy +enum class token_policy { + strict, + lenient, +}; + +// @see https://urlpattern.spec.whatwg.org/#tokens +class token { +public: + token(token_type _type, size_t _index, std::string &&_value) + : type(_type), index(_index), value(std::move(_value)) {} + + // A token has an associated type, a string, initially "invalid-char". + token_type type = token_type::INVALID_CHAR; + + // A token has an associated index, a number, initially 0. It is the position + // of the first code point in the pattern string represented by the token. + size_t index = 0; + + // A token has an associated value, a string, initially the empty string. It + // contains the code points from the pattern string represented by the token. + std::string value{}; +}; + +// @see https://urlpattern.spec.whatwg.org/#pattern-parser +template class url_pattern_parser { +public: + url_pattern_parser(F &encoding_callback_, + std::string_view segment_wildcard_regexp_) + : encoding_callback(encoding_callback_), + segment_wildcard_regexp(segment_wildcard_regexp_) {} + + bool can_continue() const { return index < tokens.size(); } + + // @see https://urlpattern.spec.whatwg.org/#try-to-consume-a-token + token *try_consume_token(token_type type); + // @see https://urlpattern.spec.whatwg.org/#try-to-consume-a-modifier-token + token *try_consume_modifier_token(); + // @see + // https://urlpattern.spec.whatwg.org/#try-to-consume-a-regexp-or-wildcard-token + token *try_consume_regexp_or_wildcard_token(const token *name_token); + // @see https://urlpattern.spec.whatwg.org/#consume-text + std::string consume_text(); + // @see https://urlpattern.spec.whatwg.org/#consume-a-required-token + bool consume_required_token(token_type type); + // @see + // https://urlpattern.spec.whatwg.org/#maybe-add-a-part-from-the-pending-fixed-value + std::optional + maybe_add_part_from_the_pending_fixed_value() ada_warn_unused; + // @see https://urlpattern.spec.whatwg.org/#add-a-part + std::optional add_part(std::string_view prefix, token *name_token, + token *regexp_or_wildcard_token, + std::string_view suyffix, + token *modifier_token) ada_warn_unused; + + std::vector tokens{}; + F &encoding_callback; + std::string segment_wildcard_regexp; + std::vector parts{}; + std::string pending_fixed_value{}; + size_t index = 0; + size_t next_numeric_name = 0; +}; + +// @see https://urlpattern.spec.whatwg.org/#tokenizer +class Tokenizer { +public: + explicit Tokenizer(std::string_view new_input, token_policy new_policy) + : input(new_input), policy(new_policy) {} + + // @see https://urlpattern.spec.whatwg.org/#get-the-next-code-point + void get_next_code_point(); + + // @see https://urlpattern.spec.whatwg.org/#seek-and-get-the-next-code-point + void seek_and_get_next_code_point(size_t index); + + // @see https://urlpattern.spec.whatwg.org/#add-a-token + + void add_token(token_type type, size_t next_position, size_t value_position, + size_t value_length); + + // @see https://urlpattern.spec.whatwg.org/#add-a-token-with-default-length + void add_token_with_default_length(token_type type, size_t next_position, + size_t value_position); + + // @see + // https://urlpattern.spec.whatwg.org/#add-a-token-with-default-position-and-length + void add_token_with_defaults(token_type type); + + // @see https://urlpattern.spec.whatwg.org/#process-a-tokenizing-error + std::optional + process_tokenizing_error(size_t next_position, + size_t value_position) ada_warn_unused; + + friend tl::expected, errors> + tokenize(std::string_view input, token_policy policy); + +private: + // has an associated input, a pattern string, initially the empty string. + std::string input; + // has an associated policy, a tokenize policy, initially "strict". + token_policy policy; + // has an associated token list, a token list, initially an empty list. + std::vector token_list{}; + // has an associated index, a number, initially 0. + size_t index = 0; + // has an associated next index, a number, initially 0. + size_t next_index = 0; + // has an associated code point, a Unicode code point, initially null. + char32_t code_point{}; +}; + +// @see https://urlpattern.spec.whatwg.org/#constructor-string-parser +template +struct constructor_string_parser { + explicit constructor_string_parser(std::string_view new_input, + std::vector &&new_token_list) + : input(new_input), token_list(std::move(new_token_list)) {} + + // @see https://urlpattern.spec.whatwg.org/#rewind + void rewind(); + + // @see https://urlpattern.spec.whatwg.org/#is-a-hash-prefix + bool is_hash_prefix(); + + // @see https://urlpattern.spec.whatwg.org/#is-a-search-prefix + bool is_search_prefix(); + + // @see https://urlpattern.spec.whatwg.org/#parse-a-constructor-string + static tl::expected parse(std::string_view input); + + // @see https://urlpattern.spec.whatwg.org/#constructor-string-parser-state + enum class State { + INIT, + PROTOCOL, + AUTHORITY, + USERNAME, + PASSWORD, + HOSTNAME, + PORT, + PATHNAME, + SEARCH, + HASH, + DONE, + }; + + // @see https://urlpattern.spec.whatwg.org/#change-state + void change_state(State state, size_t skip); + + // @see https://urlpattern.spec.whatwg.org/#is-a-group-open + bool is_group_open() const; + + // @see https://urlpattern.spec.whatwg.org/#is-a-group-close + bool is_group_close() const; + + // @see https://urlpattern.spec.whatwg.org/#is-a-protocol-suffix + bool is_protocol_suffix(); + + // @see + // https://urlpattern.spec.whatwg.org/#compute-protocol-matches-a-special-scheme-flag + std::optional compute_protocol_matches_special_scheme_flag(); + + // @see https://urlpattern.spec.whatwg.org/#next-is-authority-slashes + bool next_is_authority_slashes(); + + // @see https://urlpattern.spec.whatwg.org/#is-an-identity-terminator + bool is_an_identity_terminator(); + + // @see https://urlpattern.spec.whatwg.org/#is-a-pathname-start + bool is_pathname_start(); + + // @see https://urlpattern.spec.whatwg.org/#is-a-password-prefix + bool is_password_prefix(); + + // @see https://urlpattern.spec.whatwg.org/#is-an-ipv6-open + bool is_an_ipv6_open(); + + // @see https://urlpattern.spec.whatwg.org/#is-an-ipv6-close + bool is_an_ipv6_close(); + + // @see https://urlpattern.spec.whatwg.org/#is-a-port-prefix + bool is_port_prefix(); + +private: + // @see https://urlpattern.spec.whatwg.org/#is-a-non-special-pattern-char + bool is_non_special_pattern_char(size_t index, std::string_view value); + + // @see https://urlpattern.spec.whatwg.org/#get-a-safe-token + const token *get_safe_token(size_t index); + + // @see https://urlpattern.spec.whatwg.org/#make-a-component-string + std::string make_component_string(); + // has an associated input, a string, which must be set upon creation. + std::string input; + // has an associated token list, a token list, which must be set upon + // creation. + std::vector token_list; + // has an associated result, a URLPatternInit, initially set to a new + // URLPatternInit. + url_pattern_init result{}; + // has an associated component start, a number, initially set to 0. + size_t component_start = 0; + // has an associated token index, a number, initially set to 0. + size_t token_index = 0; + // has an associated token increment, a number, initially set to 1. + size_t token_increment = 1; + // has an associated group depth, a number, initially set to 0. + size_t group_depth = 0; + // has an associated hostname IPv6 bracket depth, a number, initially set to + // 0. + size_t hostname_ipv6_bracket_depth = 0; + // has an associated protocol matches a special scheme flag, a boolean, + // initially set to false. + bool protocol_matches_a_special_scheme_flag = false; + // has an associated state, a string, initially set to "init". + State state = State::INIT; +}; + +// @see https://urlpattern.spec.whatwg.org/#canonicalize-a-protocol +tl::expected canonicalize_protocol(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-a-username +tl::expected canonicalize_username(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-a-password +tl::expected canonicalize_password(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-a-password +tl::expected canonicalize_hostname(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-an-ipv6-hostname +tl::expected +canonicalize_ipv6_hostname(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-a-port +tl::expected canonicalize_port(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-a-port +tl::expected +canonicalize_port_with_protocol(std::string_view input, + std::string_view protocol); + +// @see https://wicg.github.io/urlpattern/#canonicalize-a-pathname +tl::expected canonicalize_pathname(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-an-opaque-pathname +tl::expected +canonicalize_opaque_pathname(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-a-search +tl::expected canonicalize_search(std::string_view input); + +// @see https://wicg.github.io/urlpattern/#canonicalize-a-hash +tl::expected canonicalize_hash(std::string_view input); + +// @see https://urlpattern.spec.whatwg.org/#tokenize +tl::expected, errors> tokenize(std::string_view input, + token_policy policy); + +// @see https://urlpattern.spec.whatwg.org/#process-a-base-url-string +std::string process_base_url_string(std::string_view input, + std::string_view type); + +// @see https://urlpattern.spec.whatwg.org/#escape-a-pattern-string +std::string escape_pattern_string(std::string_view input); + +// @see https://urlpattern.spec.whatwg.org/#escape-a-regexp-string +std::string escape_regexp_string(std::string_view input); + +// @see https://urlpattern.spec.whatwg.org/#is-an-absolute-pathname +constexpr bool is_absolute_pathname(std::string_view input, + std::string_view type) noexcept; + +// @see https://urlpattern.spec.whatwg.org/#parse-a-pattern-string +template +tl::expected, errors> +parse_pattern_string(std::string_view input, + url_pattern_compile_component_options &options, + F &encoding_callback); + +// @see https://urlpattern.spec.whatwg.org/#generate-a-pattern-string +std::string +generate_pattern_string(std::vector &part_list, + url_pattern_compile_component_options &options); + +// @see +// https://urlpattern.spec.whatwg.org/#generate-a-regular-expression-and-name-list +std::tuple> +generate_regular_expression_and_name_list( + const std::vector &part_list, + url_pattern_compile_component_options options); + +// @see https://urlpattern.spec.whatwg.org/#hostname-pattern-is-an-ipv6-address +bool is_ipv6_address(std::string_view input) noexcept; + +// @see +// https://urlpattern.spec.whatwg.org/#protocol-component-matches-a-special-scheme +template +bool protocol_component_matches_special_scheme( + ada::url_pattern_component &input); + +// @see https://urlpattern.spec.whatwg.org/#convert-a-modifier-to-a-string +std::string convert_modifier_to_string(url_pattern_part_modifier modifier); + +// @see https://urlpattern.spec.whatwg.org/#generate-a-segment-wildcard-regexp +std::string +generate_segment_wildcard_regexp(url_pattern_compile_component_options options); + +} // namespace ada::url_pattern_helpers + +#endif +/* end file include/ada/url_pattern_helpers.h */ + +#include +#include + +namespace ada::parser { +template +tl::expected, errors> +parse_url_pattern_impl(std::variant input, + const std::string_view *base_url, + const url_pattern_options *options) { + // Let init be null. + url_pattern_init init; + + // If input is a scalar value string then: + if (std::holds_alternative(input)) { + // Set init to the result of running parse a constructor string given input. + auto parse_result = + url_pattern_helpers::constructor_string_parser::parse( + std::get(input)); + if (!parse_result) { + ada_log("constructor_string_parser::parse failed"); + return tl::unexpected(parse_result.error()); + } + init = std::move(*parse_result); + // If baseURL is null and init["protocol"] does not exist, then throw a + // TypeError. + if (!base_url && !init.protocol) { + ada_log("base url is null and protocol is not set"); + return tl::unexpected(errors::type_error); + } + + // If baseURL is not null, set init["baseURL"] to baseURL. + if (base_url) { + init.base_url = std::string(*base_url); + } + } else { + // Assert: input is a URLPatternInit. + ADA_ASSERT_TRUE(std::holds_alternative(input)); + // If baseURL is not null, then throw a TypeError. + if (base_url) { + ada_log("base url is not null"); + return tl::unexpected(errors::type_error); + } + // Optimization: Avoid copy by moving the input value. + // Set init to input. + init = std::move(std::get(input)); + } + + // Let processedInit be the result of process a URLPatternInit given init, + // "pattern", null, null, null, null, null, null, null, and null. + // TODO: Make "pattern" an enum to avoid creating a string everytime. + auto processed_init = url_pattern_init::process(init, "pattern"); + if (!processed_init) { + ada_log("url_pattern_init::process failed for init and 'pattern'"); + return tl::unexpected(processed_init.error()); + } + + // For each componentName of « "protocol", "username", "password", "hostname", + // "port", "pathname", "search", "hash" If processedInit[componentName] does + // not exist, then set processedInit[componentName] to "*". + ADA_ASSERT_TRUE(processed_init.has_value()); + if (!processed_init->protocol) + processed_init->protocol = "*"; + if (!processed_init->username) + processed_init->username = "*"; + if (!processed_init->password) + processed_init->password = "*"; + if (!processed_init->hostname) + processed_init->hostname = "*"; + if (!processed_init->port) + processed_init->port = "*"; + if (!processed_init->pathname) + processed_init->pathname = "*"; + if (!processed_init->search) + processed_init->search = "*"; + if (!processed_init->hash) + processed_init->hash = "*"; + + ada_log("-- processed_init->protocol: ", processed_init->protocol.value()); + ada_log("-- processed_init->username: ", processed_init->username.value()); + ada_log("-- processed_init->password: ", processed_init->password.value()); + ada_log("-- processed_init->hostname: ", processed_init->hostname.value()); + ada_log("-- processed_init->port: ", processed_init->port.value()); + ada_log("-- processed_init->pathname: ", processed_init->pathname.value()); + ada_log("-- processed_init->search: ", processed_init->search.value()); + ada_log("-- processed_init->hash: ", processed_init->hash.value()); + + // If processedInit["protocol"] is a special scheme and processedInit["port"] + // is a string which represents its corresponding default port in radix-10 + // using ASCII digits then set processedInit["port"] to the empty string. + // TODO: Optimization opportunity. + if (scheme::is_special(*processed_init->protocol)) { + std::string_view port = processed_init->port.value(); + helpers::trim_c0_whitespace(port); + if (std::to_string(scheme::get_special_port(*processed_init->protocol)) == + port) { + processed_init->port->clear(); + } + } + + // Let urlPattern be a new URL pattern. + url_pattern url_pattern_{}; + + // Set urlPattern’s protocol component to the result of compiling a component + // given processedInit["protocol"], canonicalize a protocol, and default + // options. + auto protocol_component = url_pattern_component::compile( + processed_init->protocol.value(), + url_pattern_helpers::canonicalize_protocol, + url_pattern_compile_component_options::DEFAULT); + if (!protocol_component) { + ada_log("url_pattern_component::compile failed for protocol ", + processed_init->protocol.value()); + return tl::unexpected(protocol_component.error()); + } + url_pattern_.protocol_component = std::move(*protocol_component); + + // Set urlPattern’s username component to the result of compiling a component + // given processedInit["username"], canonicalize a username, and default + // options. + auto username_component = url_pattern_component::compile( + processed_init->username.value(), + url_pattern_helpers::canonicalize_username, + url_pattern_compile_component_options::DEFAULT); + if (!username_component) { + ada_log("url_pattern_component::compile failed for username ", + processed_init->username.value()); + return tl::unexpected(username_component.error()); + } + url_pattern_.username_component = std::move(*username_component); + + // Set urlPattern’s password component to the result of compiling a component + // given processedInit["password"], canonicalize a password, and default + // options. + auto password_component = url_pattern_component::compile( + processed_init->password.value(), + url_pattern_helpers::canonicalize_password, + url_pattern_compile_component_options::DEFAULT); + if (!password_component) { + ada_log("url_pattern_component::compile failed for password ", + processed_init->password.value()); + return tl::unexpected(password_component.error()); + } + url_pattern_.password_component = std::move(*password_component); + + // TODO: Optimization opportunity. The following if statement can be + // simplified. + // If the result running hostname pattern is an IPv6 address given + // processedInit["hostname"] is true, then set urlPattern’s hostname component + // to the result of compiling a component given processedInit["hostname"], + // canonicalize an IPv6 hostname, and hostname options. + if (url_pattern_helpers::is_ipv6_address(processed_init->hostname.value())) { + ada_log("processed_init->hostname is ipv6 address"); + // then set urlPattern’s hostname component to the result of compiling a + // component given processedInit["hostname"], canonicalize an IPv6 hostname, + // and hostname options. + auto hostname_component = url_pattern_component::compile( + processed_init->hostname.value(), + url_pattern_helpers::canonicalize_ipv6_hostname, + url_pattern_compile_component_options::DEFAULT); + if (!hostname_component) { + ada_log("url_pattern_component::compile failed for ipv6 hostname ", + processed_init->hostname.value()); + return tl::unexpected(hostname_component.error()); + } + url_pattern_.hostname_component = std::move(*hostname_component); + } else { + // Otherwise, set urlPattern’s hostname component to the result of compiling + // a component given processedInit["hostname"], canonicalize a hostname, and + // hostname options. + auto hostname_component = url_pattern_component::compile( + processed_init->hostname.value(), + url_pattern_helpers::canonicalize_hostname, + url_pattern_compile_component_options::HOSTNAME); + if (!hostname_component) { + ada_log("url_pattern_component::compile failed for hostname ", + processed_init->hostname.value()); + return tl::unexpected(hostname_component.error()); + } + url_pattern_.hostname_component = std::move(*hostname_component); + } + + // Set urlPattern’s port component to the result of compiling a component + // given processedInit["port"], canonicalize a port, and default options. + auto port_component = url_pattern_component::compile( + processed_init->port.value(), url_pattern_helpers::canonicalize_port, + url_pattern_compile_component_options::DEFAULT); + if (!port_component) { + ada_log("url_pattern_component::compile failed for port ", + processed_init->port.value()); + return tl::unexpected(port_component.error()); + } + url_pattern_.port_component = std::move(*port_component); + + // Let compileOptions be a copy of the default options with the ignore case + // property set to options["ignoreCase"]. + auto compile_options = url_pattern_compile_component_options::DEFAULT; + if (options) { + compile_options.ignore_case = options->ignore_case; + } + + // TODO: Optimization opportunity: Simplify this if statement. + // If the result of running protocol component matches a special scheme given + // urlPattern’s protocol component is true, then: + if (url_pattern_helpers::protocol_component_matches_special_scheme< + regex_provider>(url_pattern_.protocol_component)) { + // Let pathCompileOptions be copy of the pathname options with the ignore + // case property set to options["ignoreCase"]. + auto path_compile_options = url_pattern_compile_component_options::PATHNAME; + if (options) { + path_compile_options.ignore_case = options->ignore_case; + } + + // Set urlPattern’s pathname component to the result of compiling a + // component given processedInit["pathname"], canonicalize a pathname, and + // pathCompileOptions. + auto pathname_component = url_pattern_component::compile( + processed_init->pathname.value(), + url_pattern_helpers::canonicalize_pathname, path_compile_options); + if (!pathname_component) { + ada_log("url_pattern_component::compile failed for pathname ", + processed_init->pathname.value()); + return tl::unexpected(pathname_component.error()); + } + url_pattern_.pathname_component = std::move(*pathname_component); + } else { + // Otherwise set urlPattern’s pathname component to the result of compiling + // a component given processedInit["pathname"], canonicalize an opaque + // pathname, and compileOptions. + auto pathname_component = url_pattern_component::compile( + processed_init->pathname.value(), + url_pattern_helpers::canonicalize_opaque_pathname, compile_options); + if (!pathname_component) { + ada_log("url_pattern_component::compile failed for opaque pathname ", + processed_init->pathname.value()); + return tl::unexpected(pathname_component.error()); + } + url_pattern_.pathname_component = std::move(*pathname_component); + } + + // Set urlPattern’s search component to the result of compiling a component + // given processedInit["search"], canonicalize a search, and compileOptions. + auto search_component = url_pattern_component::compile( + processed_init->search.value(), url_pattern_helpers::canonicalize_search, + compile_options); + if (!search_component) { + ada_log("url_pattern_component::compile failed for search ", + processed_init->search.value()); + return tl::unexpected(search_component.error()); + } + url_pattern_.search_component = std::move(*search_component); + + // Set urlPattern’s hash component to the result of compiling a component + // given processedInit["hash"], canonicalize a hash, and compileOptions. + auto hash_component = url_pattern_component::compile( + processed_init->hash.value(), url_pattern_helpers::canonicalize_hash, + compile_options); + if (!hash_component) { + ada_log("url_pattern_component::compile failed for hash ", + processed_init->hash.value()); + return tl::unexpected(hash_component.error()); + } + url_pattern_.hash_component = std::move(*hash_component); + + // Return urlPattern. + return url_pattern_; +} + +} // namespace ada::parser + +#endif // ADA_PARSER_INL_H +/* end file include/ada/parser-inl.h */ +/* begin file include/ada/scheme-inl.h */ +/** + * @file scheme-inl.h + * @brief Definitions for the URL scheme. + */ +#ifndef ADA_SCHEME_INL_H +#define ADA_SCHEME_INL_H + +namespace ada::scheme { + +/** + * @namespace ada::scheme::details + * @brief Includes the definitions for scheme specific entities + */ +namespace details { +// for use with is_special and get_special_port +// Spaces, if present, are removed from URL. +constexpr std::string_view is_special_list[] = {"http", " ", "https", "ws", + "ftp", "wss", "file", " "}; +// for use with get_special_port +constexpr uint16_t special_ports[] = {80, 0, 443, 80, 21, 443, 0, 0}; +} // namespace details + +/**** + * @private + * In is_special, get_scheme_type, and get_special_port, we + * use a standard hashing technique to find the index of the scheme in + * the is_special_list. The hashing technique is based on the size of + * the scheme and the first character of the scheme. It ensures that we + * do at most one string comparison per call. If the protocol is + * predictible (e.g., it is always "http"), we can get a better average + * performance by using a simpler approach where we loop and compare + * scheme with all possible protocols starting with the most likely + * protocol. Doing multiple comparisons may have a poor worst case + * performance, however. In this instance, we choose a potentially + * slightly lower best-case performance for a better worst-case + * performance. We can revisit this choice at any time. + * + * Reference: + * Schmidt, Douglas C. "Gperf: A perfect hash function generator." + * More C++ gems 17 (2000). + * + * Reference: https://en.wikipedia.org/wiki/Perfect_hash_function + * + * Reference: https://github.com/ada-url/ada/issues/617 + ****/ + +ada_really_inline constexpr bool is_special(std::string_view scheme) { + if (scheme.empty()) { + return false; + } + int hash_value = (2 * scheme.size() + (unsigned)(scheme[0])) & 7; + const std::string_view target = details::is_special_list[hash_value]; + return (target[0] == scheme[0]) && (target.substr(1) == scheme.substr(1)); +} +constexpr uint16_t get_special_port(std::string_view scheme) noexcept { + if (scheme.empty()) { + return 0; + } + int hash_value = (2 * scheme.size() + (unsigned)(scheme[0])) & 7; + const std::string_view target = details::is_special_list[hash_value]; + if ((target[0] == scheme[0]) && (target.substr(1) == scheme.substr(1))) { + return details::special_ports[hash_value]; + } else { + return 0; + } +} +constexpr uint16_t get_special_port(ada::scheme::type type) noexcept { + return details::special_ports[int(type)]; +} +constexpr ada::scheme::type get_scheme_type(std::string_view scheme) noexcept { + if (scheme.empty()) { + return ada::scheme::NOT_SPECIAL; + } + int hash_value = (2 * scheme.size() + (unsigned)(scheme[0])) & 7; + const std::string_view target = details::is_special_list[hash_value]; + if ((target[0] == scheme[0]) && (target.substr(1) == scheme.substr(1))) { + return ada::scheme::type(hash_value); + } else { + return ada::scheme::NOT_SPECIAL; + } +} + +} // namespace ada::scheme + +#endif // ADA_SCHEME_INL_H +/* end file include/ada/scheme-inl.h */ +/* begin file include/ada/serializers.h */ +/** + * @file serializers.h + * @brief Definitions for the URL serializers. + */ +#ifndef ADA_SERIALIZERS_H +#define ADA_SERIALIZERS_H + +#include +#include + +/** + * @namespace ada::serializers + * @brief Includes the definitions for URL serializers + */ +namespace ada::serializers { + +/** + * Finds and returns the longest sequence of 0 values in a ipv6 input. + */ +void find_longest_sequence_of_ipv6_pieces( + const std::array &address, size_t &compress, + size_t &compress_length) noexcept; + +/** + * Serializes an ipv6 address. + * @details An IPv6 address is a 128-bit unsigned integer that identifies a + * network address. + * @see https://url.spec.whatwg.org/#concept-ipv6-serializer + */ +std::string ipv6(const std::array &address) noexcept; + +/** + * Serializes an ipv4 address. + * @details An IPv4 address is a 32-bit unsigned integer that identifies a + * network address. + * @see https://url.spec.whatwg.org/#concept-ipv4-serializer + */ +std::string ipv4(uint64_t address) noexcept; + +} // namespace ada::serializers + +#endif // ADA_SERIALIZERS_H +/* end file include/ada/serializers.h */ +/* begin file include/ada/state.h */ +/** + * @file state.h + * @brief Definitions for the states of the URL state machine. + */ +#ifndef ADA_STATE_H +#define ADA_STATE_H + +#include + +namespace ada { + +/** + * @see https://url.spec.whatwg.org/#url-parsing + */ +enum class state { + /** + * @see https://url.spec.whatwg.org/#authority-state + */ + AUTHORITY, + + /** + * @see https://url.spec.whatwg.org/#scheme-start-state + */ + SCHEME_START, + + /** + * @see https://url.spec.whatwg.org/#scheme-state + */ + SCHEME, + + /** + * @see https://url.spec.whatwg.org/#host-state + */ + HOST, + + /** + * @see https://url.spec.whatwg.org/#no-scheme-state + */ + NO_SCHEME, + + /** + * @see https://url.spec.whatwg.org/#fragment-state + */ + FRAGMENT, + + /** + * @see https://url.spec.whatwg.org/#relative-state + */ + RELATIVE_SCHEME, + + /** + * @see https://url.spec.whatwg.org/#relative-slash-state + */ + RELATIVE_SLASH, + + /** + * @see https://url.spec.whatwg.org/#file-state + */ + FILE, + + /** + * @see https://url.spec.whatwg.org/#file-host-state + */ + FILE_HOST, + + /** + * @see https://url.spec.whatwg.org/#file-slash-state + */ + FILE_SLASH, + + /** + * @see https://url.spec.whatwg.org/#path-or-authority-state + */ + PATH_OR_AUTHORITY, + + /** + * @see https://url.spec.whatwg.org/#special-authority-ignore-slashes-state + */ + SPECIAL_AUTHORITY_IGNORE_SLASHES, + + /** + * @see https://url.spec.whatwg.org/#special-authority-slashes-state + */ + SPECIAL_AUTHORITY_SLASHES, + + /** + * @see https://url.spec.whatwg.org/#special-relative-or-authority-state + */ + SPECIAL_RELATIVE_OR_AUTHORITY, + + /** + * @see https://url.spec.whatwg.org/#query-state + */ + QUERY, + + /** + * @see https://url.spec.whatwg.org/#path-state + */ + PATH, + + /** + * @see https://url.spec.whatwg.org/#path-start-state + */ + PATH_START, + + /** + * @see https://url.spec.whatwg.org/#cannot-be-a-base-url-path-state + */ + OPAQUE_PATH, + + /** + * @see https://url.spec.whatwg.org/#port-state + */ + PORT, +}; + +/** + * Stringify a URL state machine state. + */ +ada_warn_unused std::string to_string(ada::state s); + +} // namespace ada + +#endif // ADA_STATE_H +/* end file include/ada/state.h */ +/* begin file include/ada/unicode.h */ +/** + * @file unicode.h + * @brief Definitions for all unicode specific functions. + */ +#ifndef ADA_UNICODE_H +#define ADA_UNICODE_H + +#include +#include + +/** + * Unicode operations. These functions are not part of our public API and may + * change at any time. + * + * @private + * @namespace ada::unicode + * @brief Includes the definitions for unicode operations + */ +namespace ada::unicode { + +/** + * @private + * We receive a UTF-8 string representing a domain name. + * If the string is percent encoded, we apply percent decoding. + * + * Given a domain, we need to identify its labels. + * They are separated by label-separators: + * + * U+002E (.) FULL STOP + * U+FF0E FULLWIDTH FULL STOP + * U+3002 IDEOGRAPHIC FULL STOP + * U+FF61 HALFWIDTH IDEOGRAPHIC FULL STOP + * + * They are all mapped to U+002E. + * + * We process each label into a string that should not exceed 63 octets. + * If the string is already punycode (starts with "xn--"), then we must + * scan it to look for unallowed code points. + * Otherwise, if the string is not pure ASCII, we need to transcode it + * to punycode by following RFC 3454 which requires us to + * - Map characters (see section 3), + * - Normalize (see section 4), + * - Reject forbidden characters, + * - Check for right-to-left characters and if so, check all requirements (see + * section 6), + * - Optionally reject based on unassigned code points (section 7). + * + * The Unicode standard provides a table of code points with a mapping, a list + * of forbidden code points and so forth. This table is subject to change and + * will vary based on the implementation. For Unicode 15, the table is at + * https://www.unicode.org/Public/idna/15.0.0/IdnaMappingTable.txt + * If you use ICU, they parse this table and map it to code using a Python + * script. + * + * The resulting strings should not exceed 255 octets according to RFC 1035 + * section 2.3.4. ICU checks for label size and domain size, but these errors + * are ignored. + * + * @see https://url.spec.whatwg.org/#concept-domain-to-ascii + * + */ +bool to_ascii(std::optional &out, std::string_view plain, + size_t first_percent); + +/** + * @private + * Checks if the input has tab or newline characters. + * + * @attention The has_tabs_or_newline function is a bottleneck and it is simple + * enough that compilers like GCC can 'autovectorize it'. + */ +ada_really_inline bool +has_tabs_or_newline(std::string_view user_input) noexcept; + +/** + * @private + * Checks if the input is a forbidden host code point. + * @see https://url.spec.whatwg.org/#forbidden-host-code-point + */ +ada_really_inline constexpr bool is_forbidden_host_code_point(char c) noexcept; + +/** + * @private + * Checks if the input contains a forbidden domain code point. + * @see https://url.spec.whatwg.org/#forbidden-domain-code-point + */ +ada_really_inline constexpr bool +contains_forbidden_domain_code_point(const char *input, size_t length) noexcept; + +/** + * @private + * Checks if the input contains a forbidden domain code point in which case + * the first bit is set to 1. If the input contains an upper case ASCII letter, + * then the second bit is set to 1. + * @see https://url.spec.whatwg.org/#forbidden-domain-code-point + */ +ada_really_inline constexpr uint8_t +contains_forbidden_domain_code_point_or_upper(const char *input, + size_t length) noexcept; + +/** + * @private + * Checks if the input is a forbidden domain code point. + * @see https://url.spec.whatwg.org/#forbidden-domain-code-point + */ +ada_really_inline constexpr bool +is_forbidden_domain_code_point(char c) noexcept; + +/** + * @private + * Checks if the input is alphanumeric, '+', '-' or '.' + */ +ada_really_inline constexpr bool is_alnum_plus(char c) noexcept; + +/** + * @private + * @details An ASCII hex digit is an ASCII upper hex digit or ASCII lower hex + * digit. An ASCII upper hex digit is an ASCII digit or a code point in the + * range U+0041 (A) to U+0046 (F), inclusive. An ASCII lower hex digit is an + * ASCII digit or a code point in the range U+0061 (a) to U+0066 (f), inclusive. + */ +ada_really_inline constexpr bool is_ascii_hex_digit(char c) noexcept; + +/** + * @private + * An ASCII digit is a code point in the range U+0030 (0) to U+0039 (9), + * inclusive. + */ +ada_really_inline constexpr bool is_ascii_digit(char c) noexcept; + +/** + * @private + * @details If a char is between U+0000 and U+007F inclusive, then it's an ASCII + * character. + */ +ada_really_inline constexpr bool is_ascii(char32_t c) noexcept; + +/** + * @private + * Checks if the input is a C0 control or space character. + * + * @details A C0 control or space is a C0 control or U+0020 SPACE. + * A C0 control is a code point in the range U+0000 NULL to U+001F INFORMATION + * SEPARATOR ONE, inclusive. + */ +ada_really_inline constexpr bool is_c0_control_or_space(char c) noexcept; + +/** + * @private + * Checks if the input is a ASCII tab or newline character. + * + * @details An ASCII tab or newline is U+0009 TAB, U+000A LF, or U+000D CR. + */ +ada_really_inline constexpr bool is_ascii_tab_or_newline(char c) noexcept; + +/** + * @private + * @details A double-dot path segment must be ".." or an ASCII case-insensitive + * match for ".%2e", "%2e.", or "%2e%2e". + */ +ada_really_inline constexpr bool +is_double_dot_path_segment(std::string_view input) noexcept; + +/** + * @private + * @details A single-dot path segment must be "." or an ASCII case-insensitive + * match for "%2e". + */ +ada_really_inline constexpr bool +is_single_dot_path_segment(std::string_view input) noexcept; + +/** + * @private + * @details ipv4 character might contain 0-9 or a-f character ranges. + */ +ada_really_inline constexpr bool is_lowercase_hex(char c) noexcept; + +/** + * @private + * @details Convert hex to binary. Caller is responsible to ensure that + * the parameter is an hexadecimal digit (0-9, A-F, a-f). + */ +ada_really_inline unsigned constexpr convert_hex_to_binary(char c) noexcept; + +/** + * @private + * first_percent should be = input.find('%') + * + * @todo It would be faster as noexcept maybe, but it could be unsafe since. + * @author Node.js + * @see https://github.com/nodejs/node/blob/main/src/node_url.cc#L245 + * @see https://encoding.spec.whatwg.org/#utf-8-decode-without-bom + */ +std::string percent_decode(std::string_view input, size_t first_percent); + +/** + * @private + * Returns a percent-encoding string whether percent encoding was needed or not. + * @see https://github.com/nodejs/node/blob/main/src/node_url.cc#L226 + */ +std::string percent_encode(std::string_view input, + const uint8_t character_set[]); +/** + * @private + * Returns a percent-encoded string version of input, while starting the percent + * encoding at the provided index. + * @see https://github.com/nodejs/node/blob/main/src/node_url.cc#L226 + */ +std::string percent_encode(std::string_view input, + const uint8_t character_set[], size_t index); +/** + * @private + * Returns true if percent encoding was needed, in which case, we store + * the percent-encoded content in 'out'. If the boolean 'append' is set to + * true, the content is appended to 'out'. + * If percent encoding is not needed, out is left unchanged. + * @see https://github.com/nodejs/node/blob/main/src/node_url.cc#L226 + */ +template +bool percent_encode(std::string_view input, const uint8_t character_set[], + std::string &out); +/** + * @private + * Returns the index at which percent encoding should start, or (equivalently), + * the length of the prefix that does not require percent encoding. + */ +ada_really_inline size_t percent_encode_index(std::string_view input, + const uint8_t character_set[]); +/** + * @private + * Lowers the string in-place, assuming that the content is ASCII. + * Return true if the content was ASCII. + */ +constexpr bool to_lower_ascii(char *input, size_t length) noexcept; +} // namespace ada::unicode + +#endif // ADA_UNICODE_H +/* end file include/ada/unicode.h */ +/* begin file include/ada/url_base-inl.h */ +/** + * @file url_base-inl.h + * @brief Inline functions for url base + */ +#ifndef ADA_URL_BASE_INL_H +#define ADA_URL_BASE_INL_H + +#include +#if ADA_REGULAR_VISUAL_STUDIO +#include +#endif // ADA_REGULAR_VISUAL_STUDIO + +namespace ada { + +[[nodiscard]] ada_really_inline constexpr bool +url_base::is_special() const noexcept { + return type != ada::scheme::NOT_SPECIAL; +} + +[[nodiscard]] inline uint16_t url_base::get_special_port() const noexcept { + return ada::scheme::get_special_port(type); +} + +[[nodiscard]] ada_really_inline uint16_t +url_base::scheme_default_port() const noexcept { + return scheme::get_special_port(type); +} + +} // namespace ada + +#endif // ADA_URL_BASE_INL_H +/* end file include/ada/url_base-inl.h */ +/* begin file include/ada/url-inl.h */ +/** + * @file url-inl.h + * @brief Definitions for the URL + */ +#ifndef ADA_URL_INL_H +#define ADA_URL_INL_H + +#include +#include +#include +#if ADA_REGULAR_VISUAL_STUDIO +#include +#endif // ADA_REGULAR_VISUAL_STUDIO + +namespace ada { +[[nodiscard]] ada_really_inline bool url::has_credentials() const noexcept { + return !username.empty() || !password.empty(); +} +[[nodiscard]] ada_really_inline bool url::has_port() const noexcept { + return port.has_value(); +} +[[nodiscard]] inline bool url::cannot_have_credentials_or_port() const { + return !host.has_value() || host.value().empty() || + type == ada::scheme::type::FILE; +} +[[nodiscard]] inline bool url::has_empty_hostname() const noexcept { + if (!host.has_value()) { + return false; + } + return host.value().empty(); +} +[[nodiscard]] inline bool url::has_hostname() const noexcept { + return host.has_value(); +} +inline std::ostream &operator<<(std::ostream &out, const ada::url &u) { + return out << u.to_string(); +} + +[[nodiscard]] size_t url::get_pathname_length() const noexcept { + return path.size(); +} + +[[nodiscard]] constexpr std::string_view url::get_pathname() const noexcept { + return path; +} + +[[nodiscard]] ada_really_inline ada::url_components +url::get_components() const noexcept { + url_components out{}; + + // protocol ends with ':'. for example: "https:" + out.protocol_end = uint32_t(get_protocol().size()); + + // Trailing index is always the next character of the current one. + size_t running_index = out.protocol_end; + + if (host.has_value()) { + // 2 characters for "//" and 1 character for starting index + out.host_start = out.protocol_end + 2; + + if (has_credentials()) { + out.username_end = uint32_t(out.host_start + username.size()); + + out.host_start += uint32_t(username.size()); + + if (!password.empty()) { + out.host_start += uint32_t(password.size() + 1); + } + + out.host_end = uint32_t(out.host_start + host.value().size()); + } else { + out.username_end = out.host_start; + + // Host does not start with "@" if it does not include credentials. + out.host_end = uint32_t(out.host_start + host.value().size()) - 1; + } + + running_index = out.host_end + 1; + } else { + // Update host start and end date to the same index, since it does not + // exist. + out.host_start = out.protocol_end; + out.host_end = out.host_start; + + if (!has_opaque_path && path.starts_with("//")) { + // If url's host is null, url does not have an opaque path, url's path's + // size is greater than 1, and url's path[0] is the empty string, then + // append U+002F (/) followed by U+002E (.) to output. + running_index = out.protocol_end + 2; + } else { + running_index = out.protocol_end; + } + } + + if (port.has_value()) { + out.port = *port; + running_index += helpers::fast_digit_count(*port) + 1; // Port omits ':' + } + + out.pathname_start = uint32_t(running_index); + + running_index += path.size(); + + if (query.has_value()) { + out.search_start = uint32_t(running_index); + running_index += get_search().size(); + if (get_search().empty()) { + running_index++; + } + } + + if (hash.has_value()) { + out.hash_start = uint32_t(running_index); + } + + return out; +} + +inline void url::update_base_hostname(std::string_view input) { host = input; } + +inline void url::update_unencoded_base_hash(std::string_view input) { + // We do the percent encoding + hash = unicode::percent_encode(input, + ada::character_sets::FRAGMENT_PERCENT_ENCODE); +} + +inline void url::update_base_search(std::string_view input, + const uint8_t query_percent_encode_set[]) { + query = ada::unicode::percent_encode(input, query_percent_encode_set); +} + +inline void url::update_base_search(std::optional &&input) { + query = std::move(input); +} + +inline void url::update_base_pathname(const std::string_view input) { + path = input; +} + +inline void url::update_base_username(const std::string_view input) { + username = input; +} + +inline void url::update_base_password(const std::string_view input) { + password = input; +} + +inline void url::update_base_port(std::optional input) { + port = input; +} + +constexpr void url::clear_pathname() { path.clear(); } + +constexpr void url::clear_search() { query = std::nullopt; } + +[[nodiscard]] constexpr bool url::has_hash() const noexcept { + return hash.has_value(); +} + +[[nodiscard]] constexpr bool url::has_search() const noexcept { + return query.has_value(); +} + +constexpr void url::set_protocol_as_file() { type = ada::scheme::type::FILE; } + +inline void url::set_scheme(std::string &&new_scheme) noexcept { + type = ada::scheme::get_scheme_type(new_scheme); + // We only move the 'scheme' if it is non-special. + if (!is_special()) { + non_special_scheme = std::move(new_scheme); + } +} + +constexpr void url::copy_scheme(ada::url &&u) noexcept { + non_special_scheme = u.non_special_scheme; + type = u.type; +} + +constexpr void url::copy_scheme(const ada::url &u) { + non_special_scheme = u.non_special_scheme; + type = u.type; +} + +[[nodiscard]] ada_really_inline std::string url::get_href() const noexcept { + std::string output = get_protocol(); + + if (host.has_value()) { + output += "//"; + if (has_credentials()) { + output += username; + if (!password.empty()) { + output += ":" + get_password(); + } + output += "@"; + } + output += host.value(); + if (port.has_value()) { + output += ":" + get_port(); + } + } else if (!has_opaque_path && path.starts_with("//")) { + // If url's host is null, url does not have an opaque path, url's path's + // size is greater than 1, and url's path[0] is the empty string, then + // append U+002F (/) followed by U+002E (.) to output. + output += "/."; + } + output += path; + if (query.has_value()) { + output += "?" + query.value(); + } + if (hash.has_value()) { + output += "#" + hash.value(); + } + return output; +} + +ada_really_inline size_t url::parse_port(std::string_view view, + bool check_trailing_content) noexcept { + ada_log("parse_port('", view, "') ", view.size()); + if (!view.empty() && view[0] == '-') { + ada_log("parse_port: view[0] == '0' && view.size() > 1"); + is_valid = false; + return 0; + } + uint16_t parsed_port{}; + auto r = std::from_chars(view.data(), view.data() + view.size(), parsed_port); + if (r.ec == std::errc::result_out_of_range) { + ada_log("parse_port: r.ec == std::errc::result_out_of_range"); + is_valid = false; + return 0; + } + ada_log("parse_port: ", parsed_port); + const auto consumed = size_t(r.ptr - view.data()); + ada_log("parse_port: consumed ", consumed); + if (check_trailing_content) { + is_valid &= + (consumed == view.size() || view[consumed] == '/' || + view[consumed] == '?' || (is_special() && view[consumed] == '\\')); + } + ada_log("parse_port: is_valid = ", is_valid); + if (is_valid) { + // scheme_default_port can return 0, and we should allow 0 as a base port. + auto default_port = scheme_default_port(); + bool is_port_valid = (default_port == 0 && parsed_port == 0) || + (default_port != parsed_port); + port = (r.ec == std::errc() && is_port_valid) ? std::optional(parsed_port) + : std::nullopt; + } + return consumed; +} + +} // namespace ada + +#endif // ADA_URL_H +/* end file include/ada/url-inl.h */ +/* begin file include/ada/url_components-inl.h */ +/** + * @file url_components.h + * @brief Declaration for the URL Components + */ +#ifndef ADA_URL_COMPONENTS_INL_H +#define ADA_URL_COMPONENTS_INL_H + +namespace ada { + +[[nodiscard]] constexpr bool +url_components::check_offset_consistency() const noexcept { + /** + * https://user:pass@example.com:1234/foo/bar?baz#quux + * | | | | ^^^^| | | + * | | | | | | | `----- hash_start + * | | | | | | `--------- search_start + * | | | | | `----------------- pathname_start + * | | | | `--------------------- port + * | | | `----------------------- host_end + * | | `---------------------------------- host_start + * | `--------------------------------------- username_end + * `--------------------------------------------- protocol_end + */ + // These conditions can be made more strict. + if (protocol_end == url_components::omitted) { + return false; + } + uint32_t index = protocol_end; + + if (username_end == url_components::omitted) { + return false; + } + if (username_end < index) { + return false; + } + index = username_end; + + if (host_start == url_components::omitted) { + return false; + } + if (host_start < index) { + return false; + } + index = host_start; + + if (port != url_components::omitted) { + if (port > 0xffff) { + return false; + } + uint32_t port_length = helpers::fast_digit_count(port) + 1; + if (index + port_length < index) { + return false; + } + index += port_length; + } + + if (pathname_start == url_components::omitted) { + return false; + } + if (pathname_start < index) { + return false; + } + index = pathname_start; + + if (search_start != url_components::omitted) { + if (search_start < index) { + return false; + } + index = search_start; + } + + if (hash_start != url_components::omitted) { + if (hash_start < index) { + return false; + } + } + + return true; +} + +} // namespace ada +#endif +/* end file include/ada/url_components-inl.h */ +/* begin file include/ada/url_aggregator.h */ +/** + * @file url_aggregator.h + * @brief Declaration for the basic URL definitions + */ +#ifndef ADA_URL_AGGREGATOR_H +#define ADA_URL_AGGREGATOR_H + +#include +#include +#include + +namespace ada { + +namespace parser {} + +/** + * @brief Lightweight URL struct. + * + * @details The url_aggregator class aims to minimize temporary memory + * allocation while representing a parsed URL. Internally, it contains a single + * normalized URL (the href), and it makes available the components, mostly + * using std::string_view. + */ +struct url_aggregator : url_base { + url_aggregator() = default; + url_aggregator(const url_aggregator &u) = default; + url_aggregator(url_aggregator &&u) noexcept = default; + url_aggregator &operator=(url_aggregator &&u) noexcept = default; + url_aggregator &operator=(const url_aggregator &u) = default; + ~url_aggregator() override = default; + + bool set_href(std::string_view input); + bool set_host(std::string_view input); + bool set_hostname(std::string_view input); + bool set_protocol(std::string_view input); + bool set_username(std::string_view input); + bool set_password(std::string_view input); + bool set_port(std::string_view input); + bool set_pathname(std::string_view input); + void set_search(std::string_view input); + void set_hash(std::string_view input); + + [[nodiscard]] bool has_valid_domain() const noexcept override; + /** + * The origin getter steps are to return the serialization of this's URL's + * origin. [HTML] + * @return a newly allocated string. + * @see https://url.spec.whatwg.org/#concept-url-origin + */ + [[nodiscard]] std::string get_origin() const noexcept override; + /** + * Return the normalized string. + * This function does not allocate memory. + * It is highly efficient. + * @return a constant reference to the underlying normalized URL. + * @see https://url.spec.whatwg.org/#dom-url-href + * @see https://url.spec.whatwg.org/#concept-url-serializer + */ + [[nodiscard]] constexpr std::string_view + get_href() const noexcept ada_lifetime_bound; + /** + * The username getter steps are to return this's URL's username. + * This function does not allocate memory. + * @return a lightweight std::string_view. + * @see https://url.spec.whatwg.org/#dom-url-username + */ + [[nodiscard]] std::string_view + get_username() const noexcept ada_lifetime_bound; + /** + * The password getter steps are to return this's URL's password. + * This function does not allocate memory. + * @return a lightweight std::string_view. + * @see https://url.spec.whatwg.org/#dom-url-password + */ + [[nodiscard]] std::string_view + get_password() const noexcept ada_lifetime_bound; + /** + * Return this's URL's port, serialized. + * This function does not allocate memory. + * @return a lightweight std::string_view. + * @see https://url.spec.whatwg.org/#dom-url-port + */ + [[nodiscard]] std::string_view get_port() const noexcept ada_lifetime_bound; + /** + * Return U+0023 (#), followed by this's URL's fragment. + * This function does not allocate memory. + * @return a lightweight std::string_view.. + * @see https://url.spec.whatwg.org/#dom-url-hash + */ + [[nodiscard]] std::string_view get_hash() const noexcept ada_lifetime_bound; + /** + * Return url's host, serialized, followed by U+003A (:) and url's port, + * serialized. + * This function does not allocate memory. + * When there is no host, this function returns the empty view. + * @return a lightweight std::string_view. + * @see https://url.spec.whatwg.org/#dom-url-host + */ + [[nodiscard]] std::string_view get_host() const noexcept ada_lifetime_bound; + /** + * Return this's URL's host, serialized. + * This function does not allocate memory. + * When there is no host, this function returns the empty view. + * @return a lightweight std::string_view. + * @see https://url.spec.whatwg.org/#dom-url-hostname + */ + [[nodiscard]] std::string_view + get_hostname() const noexcept ada_lifetime_bound; + /** + * The pathname getter steps are to return the result of URL path serializing + * this's URL. + * This function does not allocate memory. + * @return a lightweight std::string_view. + * @see https://url.spec.whatwg.org/#dom-url-pathname + */ + [[nodiscard]] constexpr std::string_view + get_pathname() const noexcept ada_lifetime_bound; + /** + * Compute the pathname length in bytes without instantiating a view or a + * string. + * @return size of the pathname in bytes + * @see https://url.spec.whatwg.org/#dom-url-pathname + */ + [[nodiscard]] ada_really_inline uint32_t get_pathname_length() const noexcept; + /** + * Return U+003F (?), followed by this's URL's query. + * This function does not allocate memory. + * @return a lightweight std::string_view. + * @see https://url.spec.whatwg.org/#dom-url-search + */ + [[nodiscard]] std::string_view get_search() const noexcept ada_lifetime_bound; + /** + * The protocol getter steps are to return this's URL's scheme, followed by + * U+003A (:). + * This function does not allocate memory. + * @return a lightweight std::string_view. + * @see https://url.spec.whatwg.org/#dom-url-protocol + */ + [[nodiscard]] std::string_view + get_protocol() const noexcept ada_lifetime_bound; + + /** + * A URL includes credentials if its username or password is not the empty + * string. + */ + [[nodiscard]] ada_really_inline constexpr bool + has_credentials() const noexcept; + + /** + * Useful for implementing efficient serialization for the URL. + * + * https://user:pass@example.com:1234/foo/bar?baz#quux + * | | | | ^^^^| | | + * | | | | | | | `----- hash_start + * | | | | | | `--------- search_start + * | | | | | `----------------- pathname_start + * | | | | `--------------------- port + * | | | `----------------------- host_end + * | | `---------------------------------- host_start + * | `--------------------------------------- username_end + * `--------------------------------------------- protocol_end + * + * Inspired after servo/url + * + * @return a constant reference to the underlying component attribute. + * + * @see + * https://github.com/servo/rust-url/blob/b65a45515c10713f6d212e6726719a020203cc98/url/src/quirks.rs#L31 + */ + [[nodiscard]] ada_really_inline const url_components & + get_components() const noexcept; + /** + * Returns a string representation of this URL. + */ + [[nodiscard]] std::string to_string() const override; + /** + * Returns a string diagram of this URL. + */ + [[nodiscard]] std::string to_diagram() const; + + /** + * Verifies that the parsed URL could be valid. Useful for debugging purposes. + * @return true if the URL is valid, otherwise return true of the offsets are + * possible. + */ + [[nodiscard]] constexpr bool validate() const noexcept; + + /** @return true if it has an host but it is the empty string */ + [[nodiscard]] constexpr bool has_empty_hostname() const noexcept; + /** @return true if it has a host (included an empty host) */ + [[nodiscard]] constexpr bool has_hostname() const noexcept; + /** @return true if the URL has a non-empty username */ + [[nodiscard]] constexpr bool has_non_empty_username() const noexcept; + /** @return true if the URL has a non-empty password */ + [[nodiscard]] constexpr bool has_non_empty_password() const noexcept; + /** @return true if the URL has a (non default) port */ + [[nodiscard]] constexpr bool has_port() const noexcept; + /** @return true if the URL has a password */ + [[nodiscard]] constexpr bool has_password() const noexcept; + /** @return true if the URL has a hash component */ + [[nodiscard]] constexpr bool has_hash() const noexcept override; + /** @return true if the URL has a search component */ + [[nodiscard]] constexpr bool has_search() const noexcept override; + + inline void clear_port(); + inline void clear_hash(); + inline void clear_search() override; + +private: + // helper methods + friend void helpers::strip_trailing_spaces_from_opaque_path( + url_aggregator &url) noexcept; + // parse_url methods + friend url_aggregator + parser::parse_url(std::string_view, const url_aggregator *); + + friend url_aggregator + parser::parse_url_impl(std::string_view, + const url_aggregator *); + friend url_aggregator + parser::parse_url_impl(std::string_view, + const url_aggregator *); + // url_pattern methods + template + friend tl::expected, errors> + parse_url_pattern_impl(std::variant input, + const std::string_view *base_url, + const url_pattern_options *options); + + std::string buffer{}; + url_components components{}; + + /** + * Returns true if neither the search, nor the hash nor the pathname + * have been set. + * @return true if the buffer is ready to receive the path. + */ + [[nodiscard]] ada_really_inline bool is_at_path() const noexcept; + + inline void add_authority_slashes_if_needed() noexcept; + + /** + * To optimize performance, you may indicate how much memory to allocate + * within this instance. + */ + constexpr void reserve(uint32_t capacity); + + ada_really_inline size_t parse_port( + std::string_view view, bool check_trailing_content) noexcept override; + + ada_really_inline size_t parse_port(std::string_view view) noexcept override { + return this->parse_port(view, false); + } + + /** + * Return true on success. The 'in_place' parameter indicates whether the + * the string_view input is pointing in the buffer. When in_place is false, + * we must nearly always update the buffer. + * @see https://url.spec.whatwg.org/#concept-ipv4-parser + */ + [[nodiscard]] bool parse_ipv4(std::string_view input, bool in_place); + + /** + * Return true on success. + * @see https://url.spec.whatwg.org/#concept-ipv6-parser + */ + [[nodiscard]] bool parse_ipv6(std::string_view input); + + /** + * Return true on success. + * @see https://url.spec.whatwg.org/#concept-opaque-host-parser + */ + [[nodiscard]] bool parse_opaque_host(std::string_view input); + + ada_really_inline void parse_path(std::string_view input); + + /** + * A URL cannot have a username/password/port if its host is null or the empty + * string, or its scheme is "file". + */ + [[nodiscard]] constexpr bool cannot_have_credentials_or_port() const; + + template + bool set_host_or_hostname(std::string_view input); + + ada_really_inline bool parse_host(std::string_view input); + + inline void update_base_authority(std::string_view base_buffer, + const url_components &base); + inline void update_unencoded_base_hash(std::string_view input); + inline void update_base_hostname(std::string_view input); + inline void update_base_search(std::string_view input); + inline void update_base_search(std::string_view input, + const uint8_t *query_percent_encode_set); + inline void update_base_pathname(std::string_view input); + inline void update_base_username(std::string_view input); + inline void append_base_username(std::string_view input); + inline void update_base_password(std::string_view input); + inline void append_base_password(std::string_view input); + inline void update_base_port(uint32_t input); + inline void append_base_pathname(std::string_view input); + [[nodiscard]] inline uint32_t retrieve_base_port() const; + constexpr void clear_hostname(); + constexpr void clear_password(); + constexpr void clear_pathname() override; + [[nodiscard]] constexpr bool has_dash_dot() const noexcept; + void delete_dash_dot(); + inline void consume_prepared_path(std::string_view input); + template + [[nodiscard]] ada_really_inline bool + parse_scheme_with_colon(std::string_view input); + ada_really_inline uint32_t replace_and_resize(uint32_t start, uint32_t end, + std::string_view input); + [[nodiscard]] constexpr bool has_authority() const noexcept; + constexpr void set_protocol_as_file(); + inline void set_scheme(std::string_view new_scheme) noexcept; + /** + * Fast function to set the scheme from a view with a colon in the + * buffer, does not change type. + */ + inline void set_scheme_from_view_with_colon( + std::string_view new_scheme_with_colon) noexcept; + inline void copy_scheme(const url_aggregator &u) noexcept; + + inline void update_host_to_base_host(const std::string_view input) noexcept; + +}; // url_aggregator + +inline std::ostream &operator<<(std::ostream &out, const url &u); +} // namespace ada + +#endif +/* end file include/ada/url_aggregator.h */ +/* begin file include/ada/url_aggregator-inl.h */ +/** + * @file url_aggregator-inl.h + * @brief Inline functions for url aggregator + */ +#ifndef ADA_URL_AGGREGATOR_INL_H +#define ADA_URL_AGGREGATOR_INL_H + +/* begin file include/ada/unicode-inl.h */ +/** + * @file unicode-inl.h + * @brief Definitions for unicode operations. + */ +#ifndef ADA_UNICODE_INL_H +#define ADA_UNICODE_INL_H + +/** + * Unicode operations. These functions are not part of our public API and may + * change at any time. + * + * private + * @namespace ada::unicode + * @brief Includes the declarations for unicode operations + */ +namespace ada::unicode { +ada_really_inline size_t percent_encode_index(const std::string_view input, + const uint8_t character_set[]) { + const char *data = input.data(); + const size_t size = input.size(); + + // Process 8 bytes at a time using unrolled loop + size_t i = 0; + for (; i + 8 <= size; i += 8) { + unsigned char chunk[8]; + std::memcpy(&chunk, data + i, + 8); // entices compiler to unconditionally process 8 characters + + // Check 8 characters at once + for (size_t j = 0; j < 8; j++) { + if (character_sets::bit_at(character_set, chunk[j])) { + return i + j; + } + } + } + + // Handle remaining bytes + for (; i < size; i++) { + if (character_sets::bit_at(character_set, data[i])) { + return i; + } + } + + return size; +} +} // namespace ada::unicode + +#endif // ADA_UNICODE_INL_H +/* end file include/ada/unicode-inl.h */ + +#include +#include + +namespace ada { + +inline void +url_aggregator::update_base_authority(std::string_view base_buffer, + const ada::url_components &base) { + std::string_view input = base_buffer.substr( + base.protocol_end, base.host_start - base.protocol_end); + ada_log("url_aggregator::update_base_authority ", input); + + bool input_starts_with_dash = input.starts_with("//"); + uint32_t diff = components.host_start - components.protocol_end; + + buffer.erase(components.protocol_end, + components.host_start - components.protocol_end); + components.username_end = components.protocol_end; + + if (input_starts_with_dash) { + input.remove_prefix(2); + diff += 2; // add "//" + buffer.insert(components.protocol_end, "//"); + components.username_end += 2; + } + + size_t password_delimiter = input.find(':'); + + // Check if input contains both username and password by checking the + // delimiter: ":" A typical input that contains authority would be "user:pass" + if (password_delimiter != std::string_view::npos) { + // Insert both username and password + std::string_view username = input.substr(0, password_delimiter); + std::string_view password = input.substr(password_delimiter + 1); + + buffer.insert(components.protocol_end + diff, username); + diff += uint32_t(username.size()); + buffer.insert(components.protocol_end + diff, ":"); + components.username_end = components.protocol_end + diff; + buffer.insert(components.protocol_end + diff + 1, password); + diff += uint32_t(password.size()) + 1; + } else if (!input.empty()) { + // Insert only username + buffer.insert(components.protocol_end + diff, input); + components.username_end = + components.protocol_end + diff + uint32_t(input.size()); + diff += uint32_t(input.size()); + } + + components.host_start += diff; + + if (buffer.size() > base.host_start && buffer[base.host_start] != '@') { + buffer.insert(components.host_start, "@"); + diff++; + } + components.host_end += diff; + components.pathname_start += diff; + if (components.search_start != url_components::omitted) { + components.search_start += diff; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += diff; + } +} + +inline void url_aggregator::update_unencoded_base_hash(std::string_view input) { + ada_log("url_aggregator::update_unencoded_base_hash ", input, " [", + input.size(), " bytes], buffer is '", buffer, "' [", buffer.size(), + " bytes] components.hash_start = ", components.hash_start); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (components.hash_start != url_components::omitted) { + buffer.resize(components.hash_start); + } + components.hash_start = uint32_t(buffer.size()); + buffer += "#"; + bool encoding_required = unicode::percent_encode( + input, ada::character_sets::FRAGMENT_PERCENT_ENCODE, buffer); + // When encoding_required is false, then buffer is left unchanged, and percent + // encoding was not deemed required. + if (!encoding_required) { + buffer.append(input); + } + ada_log("url_aggregator::update_unencoded_base_hash final buffer is '", + buffer, "' [", buffer.size(), " bytes]"); + ADA_ASSERT_TRUE(validate()); +} + +ada_really_inline uint32_t url_aggregator::replace_and_resize( + uint32_t start, uint32_t end, std::string_view input) { + uint32_t current_length = end - start; + uint32_t input_size = uint32_t(input.size()); + uint32_t new_difference = input_size - current_length; + + if (current_length == 0) { + buffer.insert(start, input); + } else if (input_size == current_length) { + buffer.replace(start, input_size, input); + } else if (input_size < current_length) { + buffer.erase(start, current_length - input_size); + buffer.replace(start, input_size, input); + } else { + buffer.replace(start, current_length, input.substr(0, current_length)); + buffer.insert(start + current_length, input.substr(current_length)); + } + + return new_difference; +} + +inline void url_aggregator::update_base_hostname(const std::string_view input) { + ada_log("url_aggregator::update_base_hostname ", input, " [", input.size(), + " bytes], buffer is '", buffer, "' [", buffer.size(), " bytes]"); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + + // This next line is required for when parsing a URL like `foo://` + add_authority_slashes_if_needed(); + + bool has_credentials = components.protocol_end + 2 < components.host_start; + uint32_t new_difference = + replace_and_resize(components.host_start, components.host_end, input); + + if (has_credentials) { + buffer.insert(components.host_start, "@"); + new_difference++; + } + components.host_end += new_difference; + components.pathname_start += new_difference; + if (components.search_start != url_components::omitted) { + components.search_start += new_difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += new_difference; + } + ADA_ASSERT_TRUE(validate()); +} + +[[nodiscard]] ada_really_inline uint32_t +url_aggregator::get_pathname_length() const noexcept { + ada_log("url_aggregator::get_pathname_length"); + uint32_t ending_index = uint32_t(buffer.size()); + if (components.search_start != url_components::omitted) { + ending_index = components.search_start; + } else if (components.hash_start != url_components::omitted) { + ending_index = components.hash_start; + } + return ending_index - components.pathname_start; +} + +[[nodiscard]] ada_really_inline bool +url_aggregator::is_at_path() const noexcept { + return buffer.size() == components.pathname_start; +} + +inline void url_aggregator::update_base_search(std::string_view input) { + ada_log("url_aggregator::update_base_search ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (input.empty()) { + clear_search(); + return; + } + + if (input[0] == '?') { + input.remove_prefix(1); + } + + if (components.hash_start == url_components::omitted) { + if (components.search_start == url_components::omitted) { + components.search_start = uint32_t(buffer.size()); + buffer += "?"; + } else { + buffer.resize(components.search_start + 1); + } + + buffer.append(input); + } else { + if (components.search_start == url_components::omitted) { + components.search_start = components.hash_start; + } else { + buffer.erase(components.search_start, + components.hash_start - components.search_start); + components.hash_start = components.search_start; + } + + buffer.insert(components.search_start, "?"); + buffer.insert(components.search_start + 1, input); + components.hash_start += uint32_t(input.size() + 1); // Do not forget `?` + } + + ADA_ASSERT_TRUE(validate()); +} + +inline void +url_aggregator::update_base_search(std::string_view input, + const uint8_t query_percent_encode_set[]) { + ada_log("url_aggregator::update_base_search ", input, + " with encoding parameter ", to_string(), "\n", to_diagram()); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + + if (components.hash_start == url_components::omitted) { + if (components.search_start == url_components::omitted) { + components.search_start = uint32_t(buffer.size()); + buffer += "?"; + } else { + buffer.resize(components.search_start + 1); + } + + bool encoding_required = + unicode::percent_encode(input, query_percent_encode_set, buffer); + // When encoding_required is false, then buffer is left unchanged, and + // percent encoding was not deemed required. + if (!encoding_required) { + buffer.append(input); + } + } else { + if (components.search_start == url_components::omitted) { + components.search_start = components.hash_start; + } else { + buffer.erase(components.search_start, + components.hash_start - components.search_start); + components.hash_start = components.search_start; + } + + buffer.insert(components.search_start, "?"); + size_t idx = + ada::unicode::percent_encode_index(input, query_percent_encode_set); + if (idx == input.size()) { + buffer.insert(components.search_start + 1, input); + components.hash_start += uint32_t(input.size() + 1); // Do not forget `?` + } else { + buffer.insert(components.search_start + 1, input, 0, idx); + input.remove_prefix(idx); + // We only create a temporary string if we need percent encoding and + // we attempt to create as small a temporary string as we can. + std::string encoded = + ada::unicode::percent_encode(input, query_percent_encode_set); + buffer.insert(components.search_start + idx + 1, encoded); + components.hash_start += + uint32_t(encoded.size() + idx + 1); // Do not forget `?` + } + } + + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::update_base_pathname(const std::string_view input) { + ada_log("url_aggregator::update_base_pathname '", input, "' [", input.size(), + " bytes] \n", to_diagram()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + ADA_ASSERT_TRUE(validate()); + + const bool begins_with_dashdash = input.starts_with("//"); + if (!begins_with_dashdash && has_dash_dot()) { + // We must delete the ./ + delete_dash_dot(); + } + + if (begins_with_dashdash && !has_opaque_path && !has_authority() && + !has_dash_dot()) { + // If url's host is null, url does not have an opaque path, url's path's + // size is greater than 1, then append U+002F (/) followed by U+002E (.) to + // output. + buffer.insert(components.pathname_start, "/."); + components.pathname_start += 2; + } + + uint32_t difference = replace_and_resize( + components.pathname_start, + components.pathname_start + get_pathname_length(), input); + if (components.search_start != url_components::omitted) { + components.search_start += difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += difference; + } + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::append_base_pathname(const std::string_view input) { + ada_log("url_aggregator::append_base_pathname ", input, " ", to_string(), + "\n", to_diagram()); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); +#if ADA_DEVELOPMENT_CHECKS + // computing the expected password. + std::string path_expected(get_pathname()); + path_expected.append(input); +#endif // ADA_DEVELOPMENT_CHECKS + uint32_t ending_index = uint32_t(buffer.size()); + if (components.search_start != url_components::omitted) { + ending_index = components.search_start; + } else if (components.hash_start != url_components::omitted) { + ending_index = components.hash_start; + } + buffer.insert(ending_index, input); + + if (components.search_start != url_components::omitted) { + components.search_start += uint32_t(input.size()); + } + if (components.hash_start != url_components::omitted) { + components.hash_start += uint32_t(input.size()); + } +#if ADA_DEVELOPMENT_CHECKS + std::string path_after = std::string(get_pathname()); + ADA_ASSERT_EQUAL(path_expected, path_after, + "append_base_pathname problem after inserting " + + std::string(input)); +#endif // ADA_DEVELOPMENT_CHECKS + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::update_base_username(const std::string_view input) { + ada_log("url_aggregator::update_base_username '", input, "' ", to_string(), + "\n", to_diagram()); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + + add_authority_slashes_if_needed(); + + bool has_password = has_non_empty_password(); + bool host_starts_with_at = buffer.size() > components.host_start && + buffer[components.host_start] == '@'; + uint32_t diff = replace_and_resize(components.protocol_end + 2, + components.username_end, input); + + components.username_end += diff; + components.host_start += diff; + + if (!input.empty() && !host_starts_with_at) { + buffer.insert(components.host_start, "@"); + diff++; + } else if (input.empty() && host_starts_with_at && !has_password) { + // Input is empty, there is no password, and we need to remove "@" from + // hostname + buffer.erase(components.host_start, 1); + diff--; + } + + components.host_end += diff; + components.pathname_start += diff; + if (components.search_start != url_components::omitted) { + components.search_start += diff; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += diff; + } + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::append_base_username(const std::string_view input) { + ada_log("url_aggregator::append_base_username ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); +#if ADA_DEVELOPMENT_CHECKS + // computing the expected password. + std::string username_expected(get_username()); + username_expected.append(input); +#endif // ADA_DEVELOPMENT_CHECKS + add_authority_slashes_if_needed(); + + // If input is empty, do nothing. + if (input.empty()) { + return; + } + + uint32_t difference = uint32_t(input.size()); + buffer.insert(components.username_end, input); + components.username_end += difference; + components.host_start += difference; + + if (buffer[components.host_start] != '@' && + components.host_start != components.host_end) { + buffer.insert(components.host_start, "@"); + difference++; + } + + components.host_end += difference; + components.pathname_start += difference; + if (components.search_start != url_components::omitted) { + components.search_start += difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += difference; + } +#if ADA_DEVELOPMENT_CHECKS + std::string username_after(get_username()); + ADA_ASSERT_EQUAL(username_expected, username_after, + "append_base_username problem after inserting " + + std::string(input)); +#endif // ADA_DEVELOPMENT_CHECKS + ADA_ASSERT_TRUE(validate()); +} + +constexpr void url_aggregator::clear_password() { + ada_log("url_aggregator::clear_password ", to_string()); + ADA_ASSERT_TRUE(validate()); + if (!has_password()) { + return; + } + + uint32_t diff = components.host_start - components.username_end; + buffer.erase(components.username_end, diff); + components.host_start -= diff; + components.host_end -= diff; + components.pathname_start -= diff; + if (components.search_start != url_components::omitted) { + components.search_start -= diff; + } + if (components.hash_start != url_components::omitted) { + components.hash_start -= diff; + } +} + +inline void url_aggregator::update_base_password(const std::string_view input) { + ada_log("url_aggregator::update_base_password ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + + add_authority_slashes_if_needed(); + + // TODO: Optimization opportunity. Merge the following removal functions. + if (input.empty()) { + clear_password(); + + // Remove username too, if it is empty. + if (!has_non_empty_username()) { + update_base_username(""); + } + + return; + } + + bool password_exists = has_password(); + uint32_t difference = uint32_t(input.size()); + + if (password_exists) { + uint32_t current_length = + components.host_start - components.username_end - 1; + buffer.erase(components.username_end + 1, current_length); + difference -= current_length; + } else { + buffer.insert(components.username_end, ":"); + difference++; + } + + buffer.insert(components.username_end + 1, input); + components.host_start += difference; + + // The following line is required to add "@" to hostname. When updating + // password if hostname does not start with "@", it is "update_base_password"s + // responsibility to set it. + if (buffer[components.host_start] != '@') { + buffer.insert(components.host_start, "@"); + difference++; + } + + components.host_end += difference; + components.pathname_start += difference; + if (components.search_start != url_components::omitted) { + components.search_start += difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += difference; + } + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::append_base_password(const std::string_view input) { + ada_log("url_aggregator::append_base_password ", input, " ", to_string(), + "\n", to_diagram()); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); +#if ADA_DEVELOPMENT_CHECKS + // computing the expected password. + std::string password_expected = std::string(get_password()); + password_expected.append(input); +#endif // ADA_DEVELOPMENT_CHECKS + add_authority_slashes_if_needed(); + + // If input is empty, do nothing. + if (input.empty()) { + return; + } + + uint32_t difference = uint32_t(input.size()); + if (has_password()) { + buffer.insert(components.host_start, input); + } else { + difference++; // Increment for ":" + buffer.insert(components.username_end, ":"); + buffer.insert(components.username_end + 1, input); + } + components.host_start += difference; + + // The following line is required to add "@" to hostname. When updating + // password if hostname does not start with "@", it is "append_base_password"s + // responsibility to set it. + if (buffer[components.host_start] != '@') { + buffer.insert(components.host_start, "@"); + difference++; + } + + components.host_end += difference; + components.pathname_start += difference; + if (components.search_start != url_components::omitted) { + components.search_start += difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += difference; + } +#if ADA_DEVELOPMENT_CHECKS + std::string password_after(get_password()); + ADA_ASSERT_EQUAL(password_expected, password_after, + "append_base_password problem after inserting " + + std::string(input)); +#endif // ADA_DEVELOPMENT_CHECKS + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::update_base_port(uint32_t input) { + ada_log("url_aggregator::update_base_port"); + ADA_ASSERT_TRUE(validate()); + if (input == url_components::omitted) { + clear_port(); + return; + } + // calling std::to_string(input.value()) is unfortunate given that the port + // value is probably already available as a string. + std::string value = helpers::concat(":", std::to_string(input)); + uint32_t difference = uint32_t(value.size()); + + if (components.port != url_components::omitted) { + difference -= components.pathname_start - components.host_end; + buffer.erase(components.host_end, + components.pathname_start - components.host_end); + } + + buffer.insert(components.host_end, value); + components.pathname_start += difference; + if (components.search_start != url_components::omitted) { + components.search_start += difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += difference; + } + components.port = input; + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::clear_port() { + ada_log("url_aggregator::clear_port"); + ADA_ASSERT_TRUE(validate()); + if (components.port == url_components::omitted) { + return; + } + uint32_t length = components.pathname_start - components.host_end; + buffer.erase(components.host_end, length); + components.pathname_start -= length; + if (components.search_start != url_components::omitted) { + components.search_start -= length; + } + if (components.hash_start != url_components::omitted) { + components.hash_start -= length; + } + components.port = url_components::omitted; + ADA_ASSERT_TRUE(validate()); +} + +[[nodiscard]] inline uint32_t url_aggregator::retrieve_base_port() const { + ada_log("url_aggregator::retrieve_base_port"); + return components.port; +} + +inline void url_aggregator::clear_search() { + ada_log("url_aggregator::clear_search"); + ADA_ASSERT_TRUE(validate()); + if (components.search_start == url_components::omitted) { + return; + } + + if (components.hash_start == url_components::omitted) { + buffer.resize(components.search_start); + } else { + buffer.erase(components.search_start, + components.hash_start - components.search_start); + components.hash_start = components.search_start; + } + + components.search_start = url_components::omitted; + +#if ADA_DEVELOPMENT_CHECKS + ADA_ASSERT_EQUAL(get_search(), "", + "search should have been cleared on buffer=" + buffer + + " with " + components.to_string() + "\n" + to_diagram()); +#endif + ADA_ASSERT_TRUE(validate()); +} + +inline void url_aggregator::clear_hash() { + ada_log("url_aggregator::clear_hash"); + ADA_ASSERT_TRUE(validate()); + if (components.hash_start == url_components::omitted) { + return; + } + buffer.resize(components.hash_start); + components.hash_start = url_components::omitted; + +#if ADA_DEVELOPMENT_CHECKS + ADA_ASSERT_EQUAL(get_hash(), "", + "hash should have been cleared on buffer=" + buffer + + " with " + components.to_string() + "\n" + to_diagram()); +#endif + ADA_ASSERT_TRUE(validate()); +} + +constexpr void url_aggregator::clear_pathname() { + ada_log("url_aggregator::clear_pathname"); + ADA_ASSERT_TRUE(validate()); + uint32_t ending_index = uint32_t(buffer.size()); + if (components.search_start != url_components::omitted) { + ending_index = components.search_start; + } else if (components.hash_start != url_components::omitted) { + ending_index = components.hash_start; + } + uint32_t pathname_length = ending_index - components.pathname_start; + buffer.erase(components.pathname_start, pathname_length); + uint32_t difference = pathname_length; + if (components.pathname_start == components.host_end + 2 && + buffer[components.host_end] == '/' && + buffer[components.host_end + 1] == '.') { + components.pathname_start -= 2; + buffer.erase(components.host_end, 2); + difference += 2; + } + if (components.search_start != url_components::omitted) { + components.search_start -= difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start -= difference; + } + ada_log("url_aggregator::clear_pathname completed, running checks..."); +#if ADA_DEVELOPMENT_CHECKS + ADA_ASSERT_EQUAL(get_pathname(), "", + "pathname should have been cleared on buffer=" + buffer + + " with " + components.to_string() + "\n" + to_diagram()); +#endif + ADA_ASSERT_TRUE(validate()); + ada_log("url_aggregator::clear_pathname completed, running checks... ok"); +} + +constexpr void url_aggregator::clear_hostname() { + ada_log("url_aggregator::clear_hostname"); + ADA_ASSERT_TRUE(validate()); + if (!has_authority()) { + return; + } + ADA_ASSERT_TRUE(has_authority()); + + uint32_t hostname_length = components.host_end - components.host_start; + uint32_t start = components.host_start; + + // If hostname starts with "@", we should not remove that character. + if (hostname_length > 0 && buffer[start] == '@') { + start++; + hostname_length--; + } + buffer.erase(start, hostname_length); + components.host_end = start; + components.pathname_start -= hostname_length; + if (components.search_start != url_components::omitted) { + components.search_start -= hostname_length; + } + if (components.hash_start != url_components::omitted) { + components.hash_start -= hostname_length; + } +#if ADA_DEVELOPMENT_CHECKS + ADA_ASSERT_EQUAL(get_hostname(), "", + "hostname should have been cleared on buffer=" + buffer + + " with " + components.to_string() + "\n" + to_diagram()); +#endif + ADA_ASSERT_TRUE(has_authority()); + ADA_ASSERT_EQUAL(has_empty_hostname(), true, + "hostname should have been cleared on buffer=" + buffer + + " with " + components.to_string() + "\n" + to_diagram()); + ADA_ASSERT_TRUE(validate()); +} + +[[nodiscard]] constexpr bool url_aggregator::has_hash() const noexcept { + ada_log("url_aggregator::has_hash"); + return components.hash_start != url_components::omitted; +} + +[[nodiscard]] constexpr bool url_aggregator::has_search() const noexcept { + ada_log("url_aggregator::has_search"); + return components.search_start != url_components::omitted; +} + +constexpr bool url_aggregator::has_credentials() const noexcept { + ada_log("url_aggregator::has_credentials"); + return has_non_empty_username() || has_non_empty_password(); +} + +constexpr bool url_aggregator::cannot_have_credentials_or_port() const { + ada_log("url_aggregator::cannot_have_credentials_or_port"); + return type == ada::scheme::type::FILE || + components.host_start == components.host_end; +} + +[[nodiscard]] ada_really_inline const ada::url_components & +url_aggregator::get_components() const noexcept { + return components; +} + +[[nodiscard]] constexpr bool +ada::url_aggregator::has_authority() const noexcept { + ada_log("url_aggregator::has_authority"); + // Performance: instead of doing this potentially expensive check, we could + // have a boolean in the struct. + return components.protocol_end + 2 <= components.host_start && + helpers::substring(buffer, components.protocol_end, + components.protocol_end + 2) == "//"; +} + +inline void ada::url_aggregator::add_authority_slashes_if_needed() noexcept { + ada_log("url_aggregator::add_authority_slashes_if_needed"); + ADA_ASSERT_TRUE(validate()); + // Protocol setter will insert `http:` to the URL. It is up to hostname setter + // to insert + // `//` initially to the buffer, since it depends on the hostname existence. + if (has_authority()) { + return; + } + // Performance: the common case is components.protocol_end == buffer.size() + // Optimization opportunity: in many cases, the "//" is part of the input and + // the insert could be fused with another insert. + buffer.insert(components.protocol_end, "//"); + components.username_end += 2; + components.host_start += 2; + components.host_end += 2; + components.pathname_start += 2; + if (components.search_start != url_components::omitted) { + components.search_start += 2; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += 2; + } + ADA_ASSERT_TRUE(validate()); +} + +constexpr void ada::url_aggregator::reserve(uint32_t capacity) { + buffer.reserve(capacity); +} + +constexpr bool url_aggregator::has_non_empty_username() const noexcept { + ada_log("url_aggregator::has_non_empty_username"); + return components.protocol_end + 2 < components.username_end; +} + +constexpr bool url_aggregator::has_non_empty_password() const noexcept { + ada_log("url_aggregator::has_non_empty_password"); + return components.host_start - components.username_end > 0; +} + +constexpr bool url_aggregator::has_password() const noexcept { + ada_log("url_aggregator::has_password"); + // This function does not care about the length of the password + return components.host_start > components.username_end && + buffer[components.username_end] == ':'; +} + +constexpr bool url_aggregator::has_empty_hostname() const noexcept { + if (!has_hostname()) { + return false; + } + if (components.host_start == components.host_end) { + return true; + } + if (components.host_end > components.host_start + 1) { + return false; + } + return components.username_end != components.host_start; +} + +constexpr bool url_aggregator::has_hostname() const noexcept { + return has_authority(); +} + +constexpr bool url_aggregator::has_port() const noexcept { + ada_log("url_aggregator::has_port"); + // A URL cannot have a username/password/port if its host is null or the empty + // string, or its scheme is "file". + return has_hostname() && components.pathname_start != components.host_end; +} + +[[nodiscard]] constexpr bool url_aggregator::has_dash_dot() const noexcept { + // If url's host is null, url does not have an opaque path, url's path's size + // is greater than 1, and url's path[0] is the empty string, then append + // U+002F (/) followed by U+002E (.) to output. + ada_log("url_aggregator::has_dash_dot"); +#if ADA_DEVELOPMENT_CHECKS + // If pathname_start and host_end are exactly two characters apart, then we + // either have a one-digit port such as http://test.com:5?param=1 or else we + // have a /.: sequence such as "non-spec:/.//". We test that this is the case. + if (components.pathname_start == components.host_end + 2) { + ADA_ASSERT_TRUE((buffer[components.host_end] == '/' && + buffer[components.host_end + 1] == '.') || + (buffer[components.host_end] == ':' && + checkers::is_digit(buffer[components.host_end + 1]))); + } + if (components.pathname_start == components.host_end + 2 && + buffer[components.host_end] == '/' && + buffer[components.host_end + 1] == '.') { + ADA_ASSERT_TRUE(components.pathname_start + 1 < buffer.size()); + ADA_ASSERT_TRUE(buffer[components.pathname_start] == '/'); + ADA_ASSERT_TRUE(buffer[components.pathname_start + 1] == '/'); + } +#endif + // Performance: it should be uncommon for components.pathname_start == + // components.host_end + 2 to be true. So we put this check first in the + // sequence. Most times, we do not have an opaque path. Checking for '/.' is + // more expensive, but should be uncommon. + return components.pathname_start == components.host_end + 2 && + !has_opaque_path && buffer[components.host_end] == '/' && + buffer[components.host_end + 1] == '.'; +} + +[[nodiscard]] constexpr std::string_view +url_aggregator::get_href() const noexcept ada_lifetime_bound { + ada_log("url_aggregator::get_href"); + return buffer; +} + +ada_really_inline size_t url_aggregator::parse_port( + std::string_view view, bool check_trailing_content) noexcept { + ada_log("url_aggregator::parse_port('", view, "') ", view.size()); + if (!view.empty() && view[0] == '-') { + ada_log("parse_port: view[0] == '0' && view.size() > 1"); + is_valid = false; + return 0; + } + uint16_t parsed_port{}; + auto r = std::from_chars(view.data(), view.data() + view.size(), parsed_port); + if (r.ec == std::errc::result_out_of_range) { + ada_log("parse_port: r.ec == std::errc::result_out_of_range"); + is_valid = false; + return 0; + } + ada_log("parse_port: ", parsed_port); + const size_t consumed = size_t(r.ptr - view.data()); + ada_log("parse_port: consumed ", consumed); + if (check_trailing_content) { + is_valid &= + (consumed == view.size() || view[consumed] == '/' || + view[consumed] == '?' || (is_special() && view[consumed] == '\\')); + } + ada_log("parse_port: is_valid = ", is_valid); + if (is_valid) { + ada_log("parse_port", r.ec == std::errc()); + // scheme_default_port can return 0, and we should allow 0 as a base port. + auto default_port = scheme_default_port(); + bool is_port_valid = (default_port == 0 && parsed_port == 0) || + (default_port != parsed_port); + if (r.ec == std::errc() && is_port_valid) { + update_base_port(parsed_port); + } else { + clear_port(); + } + } + return consumed; +} + +constexpr void url_aggregator::set_protocol_as_file() { + ada_log("url_aggregator::set_protocol_as_file "); + ADA_ASSERT_TRUE(validate()); + type = ada::scheme::type::FILE; + // next line could overflow but unsigned arithmetic has well-defined + // overflows. + uint32_t new_difference = 5 - components.protocol_end; + + if (buffer.empty()) { + buffer.append("file:"); + } else { + buffer.erase(0, components.protocol_end); + buffer.insert(0, "file:"); + } + components.protocol_end = 5; + + // Update the rest of the components. + components.username_end += new_difference; + components.host_start += new_difference; + components.host_end += new_difference; + components.pathname_start += new_difference; + if (components.search_start != url_components::omitted) { + components.search_start += new_difference; + } + if (components.hash_start != url_components::omitted) { + components.hash_start += new_difference; + } + ADA_ASSERT_TRUE(validate()); +} + +[[nodiscard]] constexpr bool url_aggregator::validate() const noexcept { + if (!is_valid) { + return true; + } + if (!components.check_offset_consistency()) { + ada_log("url_aggregator::validate inconsistent components \n", + to_diagram()); + return false; + } + // We have a credible components struct, but let us investivate more + // carefully: + /** + * https://user:pass@example.com:1234/foo/bar?baz#quux + * | | | | ^^^^| | | + * | | | | | | | `----- hash_start + * | | | | | | `--------- search_start + * | | | | | `----------------- pathname_start + * | | | | `--------------------- port + * | | | `----------------------- host_end + * | | `---------------------------------- host_start + * | `--------------------------------------- username_end + * `--------------------------------------------- protocol_end + */ + if (components.protocol_end == url_components::omitted) { + ada_log("url_aggregator::validate omitted protocol_end \n", to_diagram()); + return false; + } + if (components.username_end == url_components::omitted) { + ada_log("url_aggregator::validate omitted username_end \n", to_diagram()); + return false; + } + if (components.host_start == url_components::omitted) { + ada_log("url_aggregator::validate omitted host_start \n", to_diagram()); + return false; + } + if (components.host_end == url_components::omitted) { + ada_log("url_aggregator::validate omitted host_end \n", to_diagram()); + return false; + } + if (components.pathname_start == url_components::omitted) { + ada_log("url_aggregator::validate omitted pathname_start \n", to_diagram()); + return false; + } + + if (components.protocol_end > buffer.size()) { + ada_log("url_aggregator::validate protocol_end overflow \n", to_diagram()); + return false; + } + if (components.username_end > buffer.size()) { + ada_log("url_aggregator::validate username_end overflow \n", to_diagram()); + return false; + } + if (components.host_start > buffer.size()) { + ada_log("url_aggregator::validate host_start overflow \n", to_diagram()); + return false; + } + if (components.host_end > buffer.size()) { + ada_log("url_aggregator::validate host_end overflow \n", to_diagram()); + return false; + } + if (components.pathname_start > buffer.size()) { + ada_log("url_aggregator::validate pathname_start overflow \n", + to_diagram()); + return false; + } + + if (components.protocol_end > 0) { + if (buffer[components.protocol_end - 1] != ':') { + ada_log( + "url_aggregator::validate missing : at the end of the protocol \n", + to_diagram()); + return false; + } + } + + if (components.username_end != buffer.size() && + components.username_end > components.protocol_end + 2) { + if (buffer[components.username_end] != ':' && + buffer[components.username_end] != '@') { + ada_log( + "url_aggregator::validate missing : or @ at the end of the username " + "\n", + to_diagram()); + return false; + } + } + + if (components.host_start != buffer.size()) { + if (components.host_start > components.username_end) { + if (buffer[components.host_start] != '@') { + ada_log( + "url_aggregator::validate missing @ at the end of the password \n", + to_diagram()); + return false; + } + } else if (components.host_start == components.username_end && + components.host_end > components.host_start) { + if (components.host_start == components.protocol_end + 2) { + if (buffer[components.protocol_end] != '/' || + buffer[components.protocol_end + 1] != '/') { + ada_log( + "url_aggregator::validate missing // between protocol and host " + "\n", + to_diagram()); + return false; + } + } else { + if (components.host_start > components.protocol_end && + buffer[components.host_start] != '@') { + ada_log( + "url_aggregator::validate missing @ at the end of the username " + "\n", + to_diagram()); + return false; + } + } + } else { + if (components.host_end != components.host_start) { + ada_log("url_aggregator::validate expected omitted host \n", + to_diagram()); + return false; + } + } + } + if (components.host_end != buffer.size() && + components.pathname_start > components.host_end) { + if (components.pathname_start == components.host_end + 2 && + buffer[components.host_end] == '/' && + buffer[components.host_end + 1] == '.') { + if (components.pathname_start + 1 >= buffer.size() || + buffer[components.pathname_start] != '/' || + buffer[components.pathname_start + 1] != '/') { + ada_log( + "url_aggregator::validate expected the path to begin with // \n", + to_diagram()); + return false; + } + } else if (buffer[components.host_end] != ':') { + ada_log("url_aggregator::validate missing : at the port \n", + to_diagram()); + return false; + } + } + if (components.pathname_start != buffer.size() && + components.pathname_start < components.search_start && + components.pathname_start < components.hash_start && !has_opaque_path) { + if (buffer[components.pathname_start] != '/') { + ada_log("url_aggregator::validate missing / at the path \n", + to_diagram()); + return false; + } + } + if (components.search_start != url_components::omitted) { + if (buffer[components.search_start] != '?') { + ada_log("url_aggregator::validate missing ? at the search \n", + to_diagram()); + return false; + } + } + if (components.hash_start != url_components::omitted) { + if (buffer[components.hash_start] != '#') { + ada_log("url_aggregator::validate missing # at the hash \n", + to_diagram()); + return false; + } + } + + return true; +} + +[[nodiscard]] constexpr std::string_view +url_aggregator::get_pathname() const noexcept ada_lifetime_bound { + ada_log("url_aggregator::get_pathname pathname_start = ", + components.pathname_start, " buffer.size() = ", buffer.size(), + " components.search_start = ", components.search_start, + " components.hash_start = ", components.hash_start); + auto ending_index = uint32_t(buffer.size()); + if (components.search_start != url_components::omitted) { + ending_index = components.search_start; + } else if (components.hash_start != url_components::omitted) { + ending_index = components.hash_start; + } + return helpers::substring(buffer, components.pathname_start, ending_index); +} + +inline std::ostream &operator<<(std::ostream &out, + const ada::url_aggregator &u) { + return out << u.to_string(); +} + +void url_aggregator::update_host_to_base_host( + const std::string_view input) noexcept { + ada_log("url_aggregator::update_host_to_base_host ", input); + ADA_ASSERT_TRUE(validate()); + ADA_ASSERT_TRUE(!helpers::overlaps(input, buffer)); + if (type != ada::scheme::type::FILE) { + // Let host be the result of host parsing host_view with url is not special. + if (input.empty() && !is_special()) { + if (has_hostname()) { + clear_hostname(); + } else if (has_dash_dot()) { + add_authority_slashes_if_needed(); + delete_dash_dot(); + } + return; + } + } + update_base_hostname(input); + ADA_ASSERT_TRUE(validate()); + return; +} +} // namespace ada + +#endif // ADA_URL_AGGREGATOR_INL_H +/* end file include/ada/url_aggregator-inl.h */ +/* begin file include/ada/url_search_params.h */ +/** + * @file url_search_params.h + * @brief Declaration for the URL Search Params + */ +#ifndef ADA_URL_SEARCH_PARAMS_H +#define ADA_URL_SEARCH_PARAMS_H + +#include +#include +#include +#include + +namespace ada { + +enum class url_search_params_iter_type { + KEYS, + VALUES, + ENTRIES, +}; + +template +struct url_search_params_iter; + +typedef std::pair key_value_view_pair; + +using url_search_params_keys_iter = + url_search_params_iter; +using url_search_params_values_iter = + url_search_params_iter; +using url_search_params_entries_iter = + url_search_params_iter; + +/** + * @see https://url.spec.whatwg.org/#interface-urlsearchparams + */ +struct url_search_params { + url_search_params() = default; + + /** + * @see + * https://github.com/web-platform-tests/wpt/blob/master/url/urlsearchparams-constructor.any.js + */ + explicit url_search_params(const std::string_view input) { + initialize(input); + } + + url_search_params(const url_search_params &u) = default; + url_search_params(url_search_params &&u) noexcept = default; + url_search_params &operator=(url_search_params &&u) noexcept = default; + url_search_params &operator=(const url_search_params &u) = default; + ~url_search_params() = default; + + [[nodiscard]] inline size_t size() const noexcept; + + /** + * @see https://url.spec.whatwg.org/#dom-urlsearchparams-append + */ + inline void append(std::string_view key, std::string_view value); + + /** + * @see https://url.spec.whatwg.org/#dom-urlsearchparams-delete + */ + inline void remove(std::string_view key); + inline void remove(std::string_view key, std::string_view value); + + /** + * @see https://url.spec.whatwg.org/#dom-urlsearchparams-get + */ + inline std::optional get(std::string_view key); + + /** + * @see https://url.spec.whatwg.org/#dom-urlsearchparams-getall + */ + inline std::vector get_all(std::string_view key); + + /** + * @see https://url.spec.whatwg.org/#dom-urlsearchparams-has + */ + inline bool has(std::string_view key) noexcept; + inline bool has(std::string_view key, std::string_view value) noexcept; + + /** + * @see https://url.spec.whatwg.org/#dom-urlsearchparams-set + */ + inline void set(std::string_view key, std::string_view value); + + /** + * @see https://url.spec.whatwg.org/#dom-urlsearchparams-sort + */ + inline void sort(); + + /** + * @see https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior + */ + inline std::string to_string() const; + + /** + * Returns a simple JS-style iterator over all of the keys in this + * url_search_params. The keys in the iterator are not unique. The valid + * lifespan of the iterator is tied to the url_search_params. The iterator + * must be freed when you're done with it. + * @see https://url.spec.whatwg.org/#interface-urlsearchparams + */ + inline url_search_params_keys_iter get_keys(); + + /** + * Returns a simple JS-style iterator over all of the values in this + * url_search_params. The valid lifespan of the iterator is tied to the + * url_search_params. The iterator must be freed when you're done with it. + * @see https://url.spec.whatwg.org/#interface-urlsearchparams + */ + inline url_search_params_values_iter get_values(); + + /** + * Returns a simple JS-style iterator over all of the entries in this + * url_search_params. The entries are pairs of keys and corresponding values. + * The valid lifespan of the iterator is tied to the url_search_params. The + * iterator must be freed when you're done with it. + * @see https://url.spec.whatwg.org/#interface-urlsearchparams + */ + inline url_search_params_entries_iter get_entries(); + + /** + * C++ style conventional iterator support. const only because we + * do not really want the params to be modified via the iterator. + */ + inline auto begin() const { return params.begin(); } + inline auto end() const { return params.end(); } + inline auto front() const { return params.front(); } + inline auto back() const { return params.back(); } + inline auto operator[](size_t index) const { return params[index]; } + + /** + * @private + * Used to reset the search params to a new input. + * Used primarily for C API. + * @param input + */ + void reset(std::string_view input); + +private: + typedef std::pair key_value_pair; + std::vector params{}; + + /** + * @see https://url.spec.whatwg.org/#concept-urlencoded-parser + */ + void initialize(std::string_view init); + + template + friend struct url_search_params_iter; +}; // url_search_params + +/** + * Implements a non-conventional iterator pattern that is closer in style to + * JavaScript's definition of an iterator. + * + * @see https://webidl.spec.whatwg.org/#idl-iterable + */ +template +struct url_search_params_iter { + inline url_search_params_iter() : params(EMPTY) {} + url_search_params_iter(const url_search_params_iter &u) = default; + url_search_params_iter(url_search_params_iter &&u) noexcept = default; + url_search_params_iter & + operator=(url_search_params_iter &&u) noexcept = default; + url_search_params_iter &operator=(const url_search_params_iter &u) = default; + ~url_search_params_iter() = default; + + /** + * Return the next item in the iterator or std::nullopt if done. + */ + inline std::optional next(); + + inline bool has_next() const; + +private: + static url_search_params EMPTY; + inline url_search_params_iter(url_search_params ¶ms_) : params(params_) {} + + url_search_params ¶ms; + size_t pos = 0; + + friend struct url_search_params; +}; + +} // namespace ada +#endif +/* end file include/ada/url_search_params.h */ +/* begin file include/ada/url_search_params-inl.h */ +/** + * @file url_search_params-inl.h + * @brief Inline declarations for the URL Search Params + */ +#ifndef ADA_URL_SEARCH_PARAMS_INL_H +#define ADA_URL_SEARCH_PARAMS_INL_H + +#include +#include +#include +#include +#include +#include + +namespace ada { + +// A default, empty url_search_params for use with empty iterators. +template +url_search_params url_search_params_iter::EMPTY; + +inline void url_search_params::reset(std::string_view input) { + params.clear(); + initialize(input); +} + +inline void url_search_params::initialize(std::string_view input) { + if (!input.empty() && input.front() == '?') { + input.remove_prefix(1); + } + + auto process_key_value = [&](const std::string_view current) { + auto equal = current.find('='); + + if (equal == std::string_view::npos) { + std::string name(current); + std::ranges::replace(name, '+', ' '); + params.emplace_back(unicode::percent_decode(name, name.find('%')), ""); + } else { + std::string name(current.substr(0, equal)); + std::string value(current.substr(equal + 1)); + + std::ranges::replace(name, '+', ' '); + std::ranges::replace(value, '+', ' '); + + params.emplace_back(unicode::percent_decode(name, name.find('%')), + unicode::percent_decode(value, value.find('%'))); + } + }; + + while (!input.empty()) { + auto ampersand_index = input.find('&'); + + if (ampersand_index == std::string_view::npos) { + if (!input.empty()) { + process_key_value(input); + } + break; + } else if (ampersand_index != 0) { + process_key_value(input.substr(0, ampersand_index)); + } + + input.remove_prefix(ampersand_index + 1); + } +} + +inline void url_search_params::append(const std::string_view key, + const std::string_view value) { + params.emplace_back(key, value); +} + +inline size_t url_search_params::size() const noexcept { return params.size(); } + +inline std::optional +url_search_params::get(const std::string_view key) { + auto entry = std::ranges::find_if( + params, [&key](const auto ¶m) { return param.first == key; }); + + if (entry == params.end()) { + return std::nullopt; + } + + return entry->second; +} + +inline std::vector +url_search_params::get_all(const std::string_view key) { + std::vector out{}; + + for (auto ¶m : params) { + if (param.first == key) { + out.emplace_back(param.second); + } + } + + return out; +} + +inline bool url_search_params::has(const std::string_view key) noexcept { + auto entry = std::ranges::find_if( + params, [&key](const auto ¶m) { return param.first == key; }); + return entry != params.end(); +} + +inline bool url_search_params::has(std::string_view key, + std::string_view value) noexcept { + auto entry = std::ranges::find_if(params, [&key, &value](const auto ¶m) { + return param.first == key && param.second == value; + }); + return entry != params.end(); +} + +inline std::string url_search_params::to_string() const { + auto character_set = ada::character_sets::WWW_FORM_URLENCODED_PERCENT_ENCODE; + std::string out{}; + for (size_t i = 0; i < params.size(); i++) { + auto key = ada::unicode::percent_encode(params[i].first, character_set); + auto value = ada::unicode::percent_encode(params[i].second, character_set); + + // Performance optimization: Move this inside percent_encode. + std::ranges::replace(key, ' ', '+'); + std::ranges::replace(value, ' ', '+'); + + if (i != 0) { + out += "&"; + } + out.append(key); + out += "="; + out.append(value); + } + return out; +} + +inline void url_search_params::set(const std::string_view key, + const std::string_view value) { + const auto find = [&key](const auto ¶m) { return param.first == key; }; + + auto it = std::ranges::find_if(params, find); + + if (it == params.end()) { + params.emplace_back(key, value); + } else { + it->second = value; + params.erase(std::remove_if(std::next(it), params.end(), find), + params.end()); + } +} + +inline void url_search_params::remove(const std::string_view key) { + std::erase_if(params, + [&key](const auto ¶m) { return param.first == key; }); +} + +inline void url_search_params::remove(const std::string_view key, + const std::string_view value) { + std::erase_if(params, [&key, &value](const auto ¶m) { + return param.first == key && param.second == value; + }); +} + +inline void url_search_params::sort() { + std::ranges::stable_sort( + params, [](const key_value_pair &lhs, const key_value_pair &rhs) { + return lhs.first < rhs.first; + }); +} + +inline url_search_params_keys_iter url_search_params::get_keys() { + return url_search_params_keys_iter(*this); +} + +/** + * @see https://url.spec.whatwg.org/#interface-urlsearchparams + */ +inline url_search_params_values_iter url_search_params::get_values() { + return url_search_params_values_iter(*this); +} + +/** + * @see https://url.spec.whatwg.org/#interface-urlsearchparams + */ +inline url_search_params_entries_iter url_search_params::get_entries() { + return url_search_params_entries_iter(*this); +} + +template +inline bool url_search_params_iter::has_next() const { + return pos < params.params.size(); +} + +template <> +inline std::optional url_search_params_keys_iter::next() { + if (!has_next()) { + return std::nullopt; + } + return params.params[pos++].first; +} + +template <> +inline std::optional url_search_params_values_iter::next() { + if (!has_next()) { + return std::nullopt; + } + return params.params[pos++].second; +} + +template <> +inline std::optional +url_search_params_entries_iter::next() { + if (!has_next()) { + return std::nullopt; + } + return params.params[pos++]; +} + +} // namespace ada + +#endif // ADA_URL_SEARCH_PARAMS_INL_H +/* end file include/ada/url_search_params-inl.h */ +/* begin file include/ada/url_pattern-inl.h */ +/** + * @file url_pattern-inl.h + * @brief Declaration for the URLPattern inline functions. + */ +#ifndef ADA_URL_PATTERN_INL_H +#define ADA_URL_PATTERN_INL_H + +#include + +namespace ada { + +inline bool url_pattern_init::operator==(const url_pattern_init &other) const { + return protocol == other.protocol && username == other.username && + password == other.password && hostname == other.hostname && + port == other.port && search == other.search && hash == other.hash && + pathname == other.pathname; +} + +inline bool url_pattern_component_result::operator==( + const url_pattern_component_result &other) const { + return input == other.input && groups == other.groups; +} + +template +url_pattern_component_result +url_pattern_component::create_component_match_result( + std::string_view input, + std::vector> &&exec_result) { + // Let result be a new URLPatternComponentResult. + // Set result["input"] to input. + // Let groups be a record. + auto result = + url_pattern_component_result{.input = std::string(input), .groups = {}}; + + // Optimization: Let's reserve the size. + result.groups.reserve(exec_result.size()); + + // We explicitly start iterating from 0 even though the spec + // says we should start from 1. This case is handled by the + // std_regex_provider. + for (size_t index = 0; index < exec_result.size(); index++) { + result.groups.insert({ + group_name_list[index], + std::move(exec_result[index]), + }); + } + return result; +} + +template +std::string_view +url_pattern::get_protocol() const ada_lifetime_bound { + // Return this's associated URL pattern's protocol component's pattern string. + return protocol_component.pattern; +} +template +std::string_view +url_pattern::get_username() const ada_lifetime_bound { + // Return this's associated URL pattern's username component's pattern string. + return username_component.pattern; +} +template +std::string_view +url_pattern::get_password() const ada_lifetime_bound { + // Return this's associated URL pattern's password component's pattern string. + return password_component.pattern; +} +template +std::string_view +url_pattern::get_hostname() const ada_lifetime_bound { + // Return this's associated URL pattern's hostname component's pattern string. + return hostname_component.pattern; +} +template +std::string_view +url_pattern::get_port() const ada_lifetime_bound { + // Return this's associated URL pattern's port component's pattern string. + return port_component.pattern; +} +template +std::string_view +url_pattern::get_pathname() const ada_lifetime_bound { + // Return this's associated URL pattern's pathname component's pattern string. + return pathname_component.pattern; +} +template +std::string_view +url_pattern::get_search() const ada_lifetime_bound { + // Return this's associated URL pattern's search component's pattern string. + return search_component.pattern; +} +template +std::string_view +url_pattern::get_hash() const ada_lifetime_bound { + // Return this's associated URL pattern's hash component's pattern string. + return hash_component.pattern; +} +template +bool url_pattern::ignore_case() const { + return ignore_case_; +} +template +bool url_pattern::has_regexp_groups() const { + // If this's associated URL pattern's has regexp groups, then return true. + return protocol_component.has_regexp_groups || + username_component.has_regexp_groups || + password_component.has_regexp_groups || + hostname_component.has_regexp_groups || + port_component.has_regexp_groups || + pathname_component.has_regexp_groups || + search_component.has_regexp_groups || hash_component.has_regexp_groups; +} + +inline bool url_pattern_part::is_regexp() const noexcept { + return type == url_pattern_part_type::REGEXP; +} + +inline std::string_view +url_pattern_compile_component_options::get_delimiter() const { + if (delimiter) { + return {&delimiter.value(), 1}; + } + return {}; +} + +inline std::string_view +url_pattern_compile_component_options::get_prefix() const { + if (prefix) { + return {&prefix.value(), 1}; + } + return {}; +} + +template +template +tl::expected, errors> +url_pattern_component::compile( + std::string_view input, F &encoding_callback, + url_pattern_compile_component_options &options) { + ada_log("url_pattern_component::compile input: ", input); + // Let part list be the result of running parse a pattern string given input, + // options, and encoding callback. + auto part_list = url_pattern_helpers::parse_pattern_string(input, options, + encoding_callback); + + if (!part_list) { + ada_log("parse_pattern_string failed"); + return tl::unexpected(part_list.error()); + } + + // Let (regular expression string, name list) be the result of running + // generate a regular expression and name list given part list and options. + auto [regular_expression_string, name_list] = + url_pattern_helpers::generate_regular_expression_and_name_list(*part_list, + options); + + ada_log("regular expression string: ", regular_expression_string); + + // Let pattern string be the result of running generate a pattern + // string given part list and options. + auto pattern_string = + url_pattern_helpers::generate_pattern_string(*part_list, options); + + // Let regular expression be RegExpCreate(regular expression string, + // flags). If this throws an exception, catch it, and throw a + // TypeError. + std::optional regular_expression = + regex_provider::create_instance(regular_expression_string, + options.ignore_case); + + if (!regular_expression) { + return tl::unexpected(errors::type_error); + } + + // For each part of part list: + // - If part’s type is "regexp", then set has regexp groups to true. + const auto has_regexp = [](const auto &part) { return part.is_regexp(); }; + const bool has_regexp_groups = std::ranges::any_of(*part_list, has_regexp); + + ada_log("has regexp groups: ", has_regexp_groups); + + // Return a new component whose pattern string is pattern string, regular + // expression is regular expression, group name list is name list, and has + // regexp groups is has regexp groups. + return url_pattern_component( + std::move(pattern_string), std::move(*regular_expression), + std::move(name_list), has_regexp_groups); +} + +template +result> +url_pattern::exec(const url_pattern_input &input, + const std::string_view *base_url) { + // Return the result of match given this's associated URL pattern, input, and + // baseURL if given. + return match(input, base_url); +} + +template +result +url_pattern::test(const url_pattern_input &input, + const std::string_view *base_url) { + // TODO: Optimization opportunity. Rather than returning `url_pattern_result` + // Implement a fast path just like `can_parse()` in ada_url. + // Let result be the result of match given this's associated URL pattern, + // input, and baseURL if given. + // If result is null, return false. + if (auto result = match(input, base_url); result.has_value()) { + return result->has_value(); + } + return tl::unexpected(errors::type_error); +} + +template +result> +url_pattern::match(const url_pattern_input &input, + const std::string_view *base_url_string) { + std::string protocol{}; + std::string username{}; + std::string password{}; + std::string hostname{}; + std::string port{}; + std::string pathname{}; + std::string search{}; + std::string hash{}; + + // Let inputs be an empty list. + // Append input to inputs. + std::vector inputs{input}; + + // If input is a URLPatternInit then: + if (std::holds_alternative(input)) { + ada_log( + "url_pattern::match called with url_pattern_init and base_url_string=", + base_url_string); + // If baseURLString was given, throw a TypeError. + if (base_url_string) { + ada_log("failed to match because base_url_string was given"); + return tl::unexpected(errors::type_error); + } + + // Let applyResult be the result of process a URLPatternInit given input, + // "url", protocol, username, password, hostname, port, pathname, search, + // and hash. + auto apply_result = url_pattern_init::process( + std::get(input), "url", protocol, username, password, + hostname, port, pathname, search, hash); + + // If this throws an exception, catch it, and return null. + if (!apply_result.has_value()) { + ada_log("match returned std::nullopt because process threw"); + return std::nullopt; + } + + // Set protocol to applyResult["protocol"]. + ADA_ASSERT_TRUE(apply_result->protocol.has_value()); + protocol = apply_result->protocol.value(); + + // Set username to applyResult["username"]. + ADA_ASSERT_TRUE(apply_result->username.has_value()); + username = apply_result->username.value(); + + // Set password to applyResult["password"]. + ADA_ASSERT_TRUE(apply_result->password.has_value()); + password = apply_result->password.value(); + + // Set hostname to applyResult["hostname"]. + ADA_ASSERT_TRUE(apply_result->hostname.has_value()); + hostname = apply_result->hostname.value(); + + // Set port to applyResult["port"]. + ADA_ASSERT_TRUE(apply_result->port.has_value()); + port = apply_result->port.value(); + + // Set pathname to applyResult["pathname"]. + ADA_ASSERT_TRUE(apply_result->pathname.has_value()); + pathname = apply_result->pathname.value(); + + // Set search to applyResult["search"]. + ADA_ASSERT_TRUE(apply_result->search.has_value()); + if (apply_result->search->starts_with("?")) { + search = apply_result->search->substr(1); + } else { + search = apply_result->search.value(); + } + + // Set hash to applyResult["hash"]. + ADA_ASSERT_TRUE(apply_result->hash.has_value()); + ADA_ASSERT_TRUE(!apply_result->hash->starts_with("#")); + hash = apply_result->hash.value(); + } else { + ADA_ASSERT_TRUE(std::holds_alternative(input)); + + // Let baseURL be null. + result base_url; + + // If baseURLString was given, then: + if (base_url_string) { + // Let baseURL be the result of parsing baseURLString. + base_url = ada::parse(*base_url_string, nullptr); + + // If baseURL is failure, return null. + if (!base_url) { + ada_log("match returned std::nullopt because failed to parse base_url=", + *base_url_string); + return std::nullopt; + } + + // Append baseURLString to inputs. + inputs.emplace_back(*base_url_string); + } + + url_aggregator *base_url_value = + base_url.has_value() ? &base_url.value() : nullptr; + + // Set url to the result of parsing input given baseURL. + auto url = ada::parse(std::get(input), + base_url_value); + + // If url is failure, return null. + if (!url) { + ada_log("match returned std::nullopt because url failed"); + return std::nullopt; + } + + // Set protocol to url’s scheme. + // IMPORTANT: Not documented on the URLPattern spec, but protocol suffix ':' + // is removed. Similar work was done on workerd: + // https://github.com/cloudflare/workerd/blob/8620d14012513a6ce04d079e401d3becac3c67bd/src/workerd/jsg/url.c%2B%2B#L2038 + protocol = url->get_protocol().substr(0, url->get_protocol().size() - 1); + // Set username to url’s username. + username = url->get_username(); + // Set password to url’s password. + password = url->get_password(); + // Set hostname to url’s host, serialized, or the empty string if the value + // is null. + hostname = url->get_hostname(); + // Set port to url’s port, serialized, or the empty string if the value is + // null. + port = url->get_port(); + // Set pathname to the result of URL path serializing url. + pathname = url->get_pathname(); + // Set search to url’s query or the empty string if the value is null. + // IMPORTANT: Not documented on the URLPattern spec, but search prefix '?' + // is removed. Similar work was done on workerd: + // https://github.com/cloudflare/workerd/blob/8620d14012513a6ce04d079e401d3becac3c67bd/src/workerd/jsg/url.c%2B%2B#L2232 + if (url->has_search()) { + ADA_ASSERT_TRUE(url->get_search().starts_with("?")); + search = url->get_search().substr(1); + } else { + search = ""; + } + // Set hash to url’s fragment or the empty string if the value is null. + // IMPORTANT: Not documented on the URLPattern spec, but hash prefix '#' is + // removed. Similar work was done on workerd: + // https://github.com/cloudflare/workerd/blob/8620d14012513a6ce04d079e401d3becac3c67bd/src/workerd/jsg/url.c%2B%2B#L2242 + if (url->has_hash()) { + ADA_ASSERT_TRUE(url->get_hash().starts_with("#")); + hash = url->get_hash().substr(1); + } else { + hash = ""; + } + } + + // Let protocolExecResult be RegExpBuiltinExec(urlPattern’s protocol + // component's regular expression, protocol). + auto protocol_exec_result = + regex_provider::regex_search(protocol, protocol_component.regexp); + + // Let usernameExecResult be RegExpBuiltinExec(urlPattern’s username + // component's regular expression, username). + auto username_exec_result = + regex_provider::regex_search(username, username_component.regexp); + + // Let passwordExecResult be RegExpBuiltinExec(urlPattern’s password + // component's regular expression, password). + auto password_exec_result = + regex_provider::regex_search(password, password_component.regexp); + + // Let hostnameExecResult be RegExpBuiltinExec(urlPattern’s hostname + // component's regular expression, hostname). + auto hostname_exec_result = + regex_provider::regex_search(hostname, hostname_component.regexp); + + // Let portExecResult be RegExpBuiltinExec(urlPattern’s port component's + // regular expression, port). + auto port_exec_result = + regex_provider::regex_search(port, port_component.regexp); + + // Let pathnameExecResult be RegExpBuiltinExec(urlPattern’s pathname + // component's regular expression, pathname). + auto pathname_exec_result = + regex_provider::regex_search(pathname, pathname_component.regexp); + + // Let searchExecResult be RegExpBuiltinExec(urlPattern’s search component's + // regular expression, search). + auto search_exec_result = + regex_provider::regex_search(search, search_component.regexp); + + // Let hashExecResult be RegExpBuiltinExec(urlPattern’s hash component's + // regular expression, hash). + auto hash_exec_result = + regex_provider::regex_search(hash, hash_component.regexp); + + // If protocolExecResult, usernameExecResult, passwordExecResult, + // hostnameExecResult, portExecResult, pathnameExecResult, searchExecResult, + // or hashExecResult are null then return null. + if (!protocol_exec_result || !username_exec_result || !password_exec_result || + !hostname_exec_result || !port_exec_result || !pathname_exec_result || + !search_exec_result || !hash_exec_result) { + return std::nullopt; + } + + // Let result be a new URLPatternResult. + auto result = url_pattern_result{}; + // Set result["inputs"] to inputs. + result.inputs = std::move(inputs); + // Set result["protocol"] to the result of creating a component match result + // given urlPattern’s protocol component, protocol, and protocolExecResult. + result.protocol = protocol_component.create_component_match_result( + protocol, std::move(*protocol_exec_result)); + + // Set result["username"] to the result of creating a component match result + // given urlPattern’s username component, username, and usernameExecResult. + result.username = username_component.create_component_match_result( + username, std::move(*username_exec_result)); + + // Set result["password"] to the result of creating a component match result + // given urlPattern’s password component, password, and passwordExecResult. + result.password = password_component.create_component_match_result( + password, std::move(*password_exec_result)); + + // Set result["hostname"] to the result of creating a component match result + // given urlPattern’s hostname component, hostname, and hostnameExecResult. + result.hostname = hostname_component.create_component_match_result( + hostname, std::move(*hostname_exec_result)); + + // Set result["port"] to the result of creating a component match result given + // urlPattern’s port component, port, and portExecResult. + result.port = port_component.create_component_match_result( + port, std::move(*port_exec_result)); + + // Set result["pathname"] to the result of creating a component match result + // given urlPattern’s pathname component, pathname, and pathnameExecResult. + result.pathname = pathname_component.create_component_match_result( + pathname, std::move(*pathname_exec_result)); + + // Set result["search"] to the result of creating a component match result + // given urlPattern’s search component, search, and searchExecResult. + result.search = search_component.create_component_match_result( + search, std::move(*search_exec_result)); + + // Set result["hash"] to the result of creating a component match result given + // urlPattern’s hash component, hash, and hashExecResult. + result.hash = hash_component.create_component_match_result( + hash, std::move(*hash_exec_result)); + + return result; +} + +} // namespace ada + +#endif +/* end file include/ada/url_pattern-inl.h */ +/* begin file include/ada/url_pattern_helpers-inl.h */ +/** + * @file url_pattern_helpers-inl.h + * @brief Declaration for the URLPattern helpers. + */ +#ifndef ADA_URL_PATTERN_HELPERS_INL_H +#define ADA_URL_PATTERN_HELPERS_INL_H + +#include +#include + +namespace ada::url_pattern_helpers { +inline std::string to_string(token_type type) { + switch (type) { + case token_type::INVALID_CHAR: + return "INVALID_CHAR"; + case token_type::OPEN: + return "OPEN"; + case token_type::CLOSE: + return "CLOSE"; + case token_type::REGEXP: + return "REGEXP"; + case token_type::NAME: + return "NAME"; + case token_type::CHAR: + return "CHAR"; + case token_type::ESCAPED_CHAR: + return "ESCAPED_CHAR"; + case token_type::OTHER_MODIFIER: + return "OTHER_MODIFIER"; + case token_type::ASTERISK: + return "ASTERISK"; + case token_type::END: + return "END"; + default: + ada::unreachable(); + } +} + +template +void constructor_string_parser::rewind() { + // Set parser’s token index to parser’s component start. + token_index = component_start; + // Set parser’s token increment to 0. + token_increment = 0; +} + +template +bool constructor_string_parser::is_hash_prefix() { + // Return the result of running is a non-special pattern char given parser, + // parser’s token index and "#". + return is_non_special_pattern_char(token_index, "#"); +} + +template +bool constructor_string_parser::is_search_prefix() { + // If result of running is a non-special pattern char given parser, parser’s + // token index and "?" is true, then return true. + if (is_non_special_pattern_char(token_index, "?")) { + return true; + } + + // If parser’s token list[parser’s token index]'s value is not "?", then + // return false. + if (token_list[token_index].value != "?") { + return false; + } + + // If previous index is less than 0, then return true. + if (token_index == 0) + return true; + // Let previous index be parser’s token index − 1. + auto previous_index = token_index - 1; + // Let previous token be the result of running get a safe token given parser + // and previous index. + auto previous_token = get_safe_token(previous_index); + ADA_ASSERT_TRUE(previous_token); + // If any of the following are true, then return false: + // - previous token’s type is "name". + // - previous token’s type is "regexp". + // - previous token’s type is "close". + // - previous token’s type is "asterisk". + return !(previous_token->type == token_type::NAME || + previous_token->type == token_type::REGEXP || + previous_token->type == token_type::CLOSE || + previous_token->type == token_type::ASTERISK); +} + +template +bool constructor_string_parser::is_non_special_pattern_char( + size_t index, std::string_view value) { + // Let token be the result of running get a safe token given parser and index. + auto token = get_safe_token(index); + ADA_ASSERT_TRUE(token); + + // If token’s value is not value, then return false. + if (token->value != value) { + return false; + } + + // If any of the following are true: + // - token’s type is "char"; + // - token’s type is "escaped-char"; or + // - token’s type is "invalid-char", + // - then return true. + return token->type == token_type::CHAR || + token->type == token_type::ESCAPED_CHAR || + token->type == token_type::INVALID_CHAR; +} + +template +const token * +constructor_string_parser::get_safe_token(size_t index) { + // If index is less than parser’s token list's size, then return parser’s + // token list[index]. + if (index < token_list.size()) [[likely]] { + return &token_list[index]; + } + + // Assert: parser’s token list's size is greater than or equal to 1. + ADA_ASSERT_TRUE(!token_list.empty()); + + // Let token be parser’s token list[last index]. + // Assert: token’s type is "end". + ADA_ASSERT_TRUE(token_list.back().type == token_type::END); + + // Return token. + return &token_list.back(); +} + +template +bool constructor_string_parser::is_group_open() const { + // If parser’s token list[parser’s token index]'s type is "open", then return + // true. + return token_list[token_index].type == token_type::OPEN; +} + +template +bool constructor_string_parser::is_group_close() const { + // If parser’s token list[parser’s token index]'s type is "close", then return + // true. + return token_list[token_index].type == token_type::CLOSE; +} + +template +bool constructor_string_parser::next_is_authority_slashes() { + // If the result of running is a non-special pattern char given parser, + // parser’s token index + 1, and "/" is false, then return false. + if (!is_non_special_pattern_char(token_index + 1, "/")) { + return false; + } + // If the result of running is a non-special pattern char given parser, + // parser’s token index + 2, and "/" is false, then return false. + if (!is_non_special_pattern_char(token_index + 2, "/")) { + return false; + } + return true; +} + +template +bool constructor_string_parser::is_protocol_suffix() { + // Return the result of running is a non-special pattern char given parser, + // parser’s token index, and ":". + return is_non_special_pattern_char(token_index, ":"); +} + +template +void constructor_string_parser::change_state(State new_state, + size_t skip) { + // If parser’s state is not "init", not "authority", and not "done", then set + // parser’s result[parser’s state] to the result of running make a component + // string given parser. + if (state != State::INIT && state != State::AUTHORITY && + state != State::DONE) { + auto value = make_component_string(); + // TODO: Simplify this. + switch (state) { + case State::PROTOCOL: { + result.protocol = value; + break; + } + case State::USERNAME: { + result.username = value; + break; + } + case State::PASSWORD: { + result.password = value; + break; + } + case State::HOSTNAME: { + result.hostname = value; + break; + } + case State::PORT: { + result.port = value; + break; + } + case State::PATHNAME: { + result.pathname = value; + break; + } + case State::SEARCH: { + result.search = value; + break; + } + case State::HASH: { + result.hash = value; + break; + } + default: + ada::unreachable(); + } + } + + // If parser’s state is not "init" and new state is not "done", then: + if (state != State::INIT && new_state != State::DONE) { + // If parser’s state is "protocol", "authority", "username", or "password"; + // new state is "port", "pathname", "search", or "hash"; and parser’s + // result["hostname"] does not exist, then set parser’s result["hostname"] + // to the empty string. + if ((state == State::PROTOCOL || state == State::AUTHORITY || + state == State::USERNAME || state == State::PASSWORD) && + (new_state == State::PORT || new_state == State::PATHNAME || + new_state == State::SEARCH || new_state == State::HASH) && + !result.hostname) + result.hostname = ""; + } + + // If parser’s state is "protocol", "authority", "username", "password", + // "hostname", or "port"; new state is "search" or "hash"; and parser’s + // result["pathname"] does not exist, then: + if ((state == State::PROTOCOL || state == State::AUTHORITY || + state == State::USERNAME || state == State::PASSWORD || + state == State::HOSTNAME || state == State::PORT) && + (new_state == State::SEARCH || new_state == State::HASH) && + !result.pathname) { + if (protocol_matches_a_special_scheme_flag) { + result.pathname = "/"; + } else { + // Otherwise, set parser’s result["pathname"] to the empty string. + result.pathname = ""; + } + } + + // If parser’s state is "protocol", "authority", "username", "password", + // "hostname", "port", or "pathname"; new state is "hash"; and parser’s + // result["search"] does not exist, then set parser’s result["search"] to + // the empty string. + if ((state == State::PROTOCOL || state == State::AUTHORITY || + state == State::USERNAME || state == State::PASSWORD || + state == State::HOSTNAME || state == State::PORT || + state == State::PATHNAME) && + new_state == State::HASH && !result.search) { + result.search = ""; + } + + // Set parser’s state to new state. + state = new_state; + // Increment parser’s token index by skip. + token_index += skip; + // Set parser’s component start to parser’s token index. + component_start = token_index; + // Set parser’s token increment to 0. + token_increment = 0; +} + +template +std::string constructor_string_parser::make_component_string() { + // Assert: parser’s token index is less than parser’s token list's size. + ADA_ASSERT_TRUE(token_index < token_list.size()); + + // Let token be parser’s token list[parser’s token index]. + // Let end index be token’s index. + const auto end_index = token_list[token_index].index; + // Let component start token be the result of running get a safe token given + // parser and parser’s component start. + const auto component_start_token = get_safe_token(component_start); + ADA_ASSERT_TRUE(component_start_token); + // Let component start input index be component start token’s index. + const auto component_start_input_index = component_start_token->index; + // Return the code point substring from component start input index to end + // index within parser’s input. + return input.substr(component_start_input_index, + end_index - component_start_input_index); +} + +template +bool constructor_string_parser::is_an_identity_terminator() { + // Return the result of running is a non-special pattern char given parser, + // parser’s token index, and "@". + return is_non_special_pattern_char(token_index, "@"); +} + +template +bool constructor_string_parser::is_pathname_start() { + // Return the result of running is a non-special pattern char given parser, + // parser’s token index, and "/". + return is_non_special_pattern_char(token_index, "/"); +} + +template +bool constructor_string_parser::is_password_prefix() { + // Return the result of running is a non-special pattern char given parser, + // parser’s token index, and ":". + return is_non_special_pattern_char(token_index, ":"); +} + +template +bool constructor_string_parser::is_an_ipv6_open() { + // Return the result of running is a non-special pattern char given parser, + // parser’s token index, and "[". + return is_non_special_pattern_char(token_index, "["); +} + +template +bool constructor_string_parser::is_an_ipv6_close() { + // Return the result of running is a non-special pattern char given parser, + // parser’s token index, and "]". + return is_non_special_pattern_char(token_index, "]"); +} + +template +bool constructor_string_parser::is_port_prefix() { + // Return the result of running is a non-special pattern char given parser, + // parser’s token index, and ":". + return is_non_special_pattern_char(token_index, ":"); +} + +inline void Tokenizer::get_next_code_point() { + ada_log("Tokenizer::get_next_code_point called with index=", next_index); + ADA_ASSERT_TRUE(next_index < input.size()); + // this assumes that we have a valid, non-truncated UTF-8 stream. + code_point = 0; + size_t number_bytes = 0; + unsigned char first_byte = input[next_index]; + + if ((first_byte & 0x80) == 0) { + // 1-byte character (ASCII) + next_index++; + code_point = first_byte; + ada_log("Tokenizer::get_next_code_point returning ASCII code point=", + uint32_t(code_point)); + ada_log("Tokenizer::get_next_code_point next_index =", next_index, + " input.size()=", input.size()); + return; + } + ada_log("Tokenizer::get_next_code_point read first byte=", + uint32_t(first_byte)); + if ((first_byte & 0xE0) == 0xC0) { + code_point = first_byte & 0x1F; + number_bytes = 2; + ada_log("Tokenizer::get_next_code_point two bytes"); + } else if ((first_byte & 0xF0) == 0xE0) { + code_point = first_byte & 0x0F; + number_bytes = 3; + ada_log("Tokenizer::get_next_code_point three bytes"); + } else if ((first_byte & 0xF8) == 0xF0) { + code_point = first_byte & 0x07; + number_bytes = 4; + ada_log("Tokenizer::get_next_code_point four bytes"); + } + ADA_ASSERT_TRUE(number_bytes + next_index <= input.size()); + + for (size_t i = 1 + next_index; i < number_bytes + next_index; ++i) { + unsigned char byte = input[i]; + ada_log("Tokenizer::get_next_code_point read byte=", uint32_t(byte)); + code_point = (code_point << 6) | (byte & 0x3F); + } + ada_log("Tokenizer::get_next_code_point returning non-ASCII code point=", + uint32_t(code_point)); + ada_log("Tokenizer::get_next_code_point next_index =", next_index, + " input.size()=", input.size()); + next_index += number_bytes; +} + +inline void Tokenizer::seek_and_get_next_code_point(size_t new_index) { + ada_log("Tokenizer::seek_and_get_next_code_point called with new_index=", + new_index); + // Set tokenizer’s next index to index. + next_index = new_index; + // Run get the next code point given tokenizer. + get_next_code_point(); +} + +inline void Tokenizer::add_token(token_type type, size_t next_position, + size_t value_position, size_t value_length) { + ada_log("Tokenizer::add_token called with type=", to_string(type), + " next_position=", next_position, " value_position=", value_position); + ADA_ASSERT_TRUE(next_position >= value_position); + + // Let token be a new token. + // Set token’s type to type. + // Set token’s index to tokenizer’s index. + // Set token’s value to the code point substring from value position with + // length value length within tokenizer’s input. + // Append token to the back of tokenizer’s token list. + token_list.emplace_back(type, index, + input.substr(value_position, value_length)); + // Set tokenizer’s index to next position. + index = next_position; +} + +inline void Tokenizer::add_token_with_default_length(token_type type, + size_t next_position, + size_t value_position) { + // Let computed length be next position − value position. + auto computed_length = next_position - value_position; + // Run add a token given tokenizer, type, next position, value position, and + // computed length. + add_token(type, next_position, value_position, computed_length); +} + +inline void Tokenizer::add_token_with_defaults(token_type type) { + ada_log("Tokenizer::add_token_with_defaults called with type=", + to_string(type)); + // Run add a token with default length given tokenizer, type, tokenizer’s next + // index, and tokenizer’s index. + add_token_with_default_length(type, next_index, index); +} + +inline ada_warn_unused std::optional +Tokenizer::process_tokenizing_error(size_t next_position, + size_t value_position) { + // If tokenizer’s policy is "strict", then throw a TypeError. + if (policy == token_policy::strict) { + ada_log("process_tokenizing_error failed with next_position=", + next_position, " value_position=", value_position); + return errors::type_error; + } + // Assert: tokenizer’s policy is "lenient". + ADA_ASSERT_TRUE(policy == token_policy::lenient); + // Run add a token with default length given tokenizer, "invalid-char", next + // position, and value position. + add_token_with_default_length(token_type::INVALID_CHAR, next_position, + value_position); + return std::nullopt; +} + +template +token *url_pattern_parser::try_consume_modifier_token() { + // Let token be the result of running try to consume a token given parser and + // "other-modifier". + auto token = try_consume_token(token_type::OTHER_MODIFIER); + // If token is not null, then return token. + if (token) + return token; + // Set token to the result of running try to consume a token given parser and + // "asterisk". + // Return token. + return try_consume_token(token_type::ASTERISK); +} + +template +token *url_pattern_parser::try_consume_regexp_or_wildcard_token( + const token *name_token) { + // Let token be the result of running try to consume a token given parser and + // "regexp". + auto token = try_consume_token(token_type::REGEXP); + // If name token is null and token is null, then set token to the result of + // running try to consume a token given parser and "asterisk". + if (!name_token && !token) { + token = try_consume_token(token_type::ASTERISK); + } + // Return token. + return token; +} + +template +token *url_pattern_parser::try_consume_token(token_type type) { + ada_log("url_pattern_parser::try_consume_token called with type=", + to_string(type)); + // Assert: parser’s index is less than parser’s token list size. + ADA_ASSERT_TRUE(index < tokens.size()); + // Let next token be parser’s token list[parser’s index]. + auto &next_token = tokens[index]; + // If next token’s type is not type return null. + if (next_token.type != type) + return nullptr; + // Increase parser’s index by 1. + index++; + // Return next token. + return &next_token; +} + +template +std::string url_pattern_parser::consume_text() { + // Let result be the empty string. + std::string result{}; + // While true: + while (true) { + // Let token be the result of running try to consume a token given parser + // and "char". + auto token = try_consume_token(token_type::CHAR); + // If token is null, then set token to the result of running try to consume + // a token given parser and "escaped-char". + if (!token) + token = try_consume_token(token_type::ESCAPED_CHAR); + // If token is null, then break. + if (!token) + break; + // Append token’s value to the end of result. + result.append(token->value); + } + // Return result. + return result; +} + +template +bool url_pattern_parser::consume_required_token(token_type type) { + ada_log("url_pattern_parser::consume_required_token called with type=", + to_string(type)); + // Let result be the result of running try to consume a token given parser and + // type. + return try_consume_token(type) != nullptr; +} + +template +std::optional +url_pattern_parser::maybe_add_part_from_the_pending_fixed_value() { + // If parser’s pending fixed value is the empty string, then return. + if (pending_fixed_value.empty()) { + ada_log("pending_fixed_value is empty"); + return std::nullopt; + } + // Let encoded value be the result of running parser’s encoding callback given + // parser’s pending fixed value. + auto encoded_value = encoding_callback(pending_fixed_value); + if (!encoded_value) { + ada_log("failed to encode pending_fixed_value: ", pending_fixed_value); + return encoded_value.error(); + } + // Set parser’s pending fixed value to the empty string. + pending_fixed_value.clear(); + // Let part be a new part whose type is "fixed-text", value is encoded value, + // and modifier is "none". + // Append part to parser’s part list. + parts.emplace_back(url_pattern_part_type::FIXED_TEXT, + std::move(*encoded_value), + url_pattern_part_modifier::none); + return std::nullopt; +} + +template +std::optional url_pattern_parser::add_part( + std::string_view prefix, token *name_token, token *regexp_or_wildcard_token, + std::string_view suffix, token *modifier_token) { + // Let modifier be "none". + auto modifier = url_pattern_part_modifier::none; + // If modifier token is not null: + if (modifier_token) { + // If modifier token’s value is "?" then set modifier to "optional". + if (modifier_token->value == "?") { + modifier = url_pattern_part_modifier::optional; + } else if (modifier_token->value == "*") { + // Otherwise if modifier token’s value is "*" then set modifier to + // "zero-or-more". + modifier = url_pattern_part_modifier::zero_or_more; + } else if (modifier_token->value == "+") { + // Otherwise if modifier token’s value is "+" then set modifier to + // "one-or-more". + modifier = url_pattern_part_modifier::one_or_more; + } + } + // If name token is null and regexp or wildcard token is null and modifier + // is "none": + if (!name_token && !regexp_or_wildcard_token && + modifier == url_pattern_part_modifier::none) { + // Append prefix to the end of parser’s pending fixed value. + pending_fixed_value.append(prefix); + return std::nullopt; + } + // Run maybe add a part from the pending fixed value given parser. + if (auto error = maybe_add_part_from_the_pending_fixed_value()) { + return *error; + } + // If name token is null and regexp or wildcard token is null: + if (!name_token && !regexp_or_wildcard_token) { + // Assert: suffix is the empty string. + ADA_ASSERT_TRUE(suffix.empty()); + // If prefix is the empty string, then return. + if (prefix.empty()) + return std::nullopt; + // Let encoded value be the result of running parser’s encoding callback + // given prefix. + auto encoded_value = encoding_callback(prefix); + if (!encoded_value) { + return encoded_value.error(); + } + // Let part be a new part whose type is "fixed-text", value is encoded + // value, and modifier is modifier. + // Append part to parser’s part list. + parts.emplace_back(url_pattern_part_type::FIXED_TEXT, + std::move(*encoded_value), modifier); + return std::nullopt; + } + // Let regexp value be the empty string. + std::string regexp_value{}; + // If regexp or wildcard token is null, then set regexp value to parser’s + // segment wildcard regexp. + if (!regexp_or_wildcard_token) { + regexp_value = segment_wildcard_regexp; + } else if (regexp_or_wildcard_token->type == token_type::ASTERISK) { + // Otherwise if regexp or wildcard token’s type is "asterisk", then set + // regexp value to the full wildcard regexp value. + regexp_value = ".*"; + } else { + // Otherwise set regexp value to regexp or wildcard token’s value. + regexp_value = regexp_or_wildcard_token->value; + } + // Let type be "regexp". + auto type = url_pattern_part_type::REGEXP; + // If regexp value is parser’s segment wildcard regexp: + if (regexp_value == segment_wildcard_regexp) { + // Set type to "segment-wildcard". + type = url_pattern_part_type::SEGMENT_WILDCARD; + // Set regexp value to the empty string. + regexp_value.clear(); + } else if (regexp_value == ".*") { + // Otherwise if regexp value is the full wildcard regexp value: + // Set type to "full-wildcard". + type = url_pattern_part_type::FULL_WILDCARD; + // Set regexp value to the empty string. + regexp_value.clear(); + } + // Let name be the empty string. + std::string name{}; + // If name token is not null, then set name to name token’s value. + if (name_token) { + name = name_token->value; + } else if (regexp_or_wildcard_token) { + // Otherwise if regexp or wildcard token is not null: + // Set name to parser’s next numeric name, serialized. + // TODO: Make sure this is correct. + name = std::to_string(next_numeric_name); + // Increment parser’s next numeric name by 1. + next_numeric_name++; + } + // If the result of running is a duplicate name given parser and name is + // true, then throw a TypeError. + if (std::ranges::any_of( + parts, [&name](const auto &part) { return part.name == name; })) { + return errors::type_error; + } + // Let encoded prefix be the result of running parser’s encoding callback + // given prefix. + auto encoded_prefix = encoding_callback(prefix); + if (!encoded_prefix) + return encoded_prefix.error(); + // Let encoded suffix be the result of running parser’s encoding callback + // given suffix. + auto encoded_suffix = encoding_callback(suffix); + if (!encoded_suffix) + return encoded_suffix.error(); + // Let part be a new part whose type is type, value is regexp value, + // modifier is modifier, name is name, prefix is encoded prefix, and suffix + // is encoded suffix. + // Append part to parser’s part list. + parts.emplace_back(type, std::move(regexp_value), modifier, std::move(name), + std::move(*encoded_prefix), std::move(*encoded_suffix)); + return std::nullopt; +} + +template +tl::expected, errors> +parse_pattern_string(std::string_view input, + url_pattern_compile_component_options &options, + F &encoding_callback) { + ada_log("parse_pattern_string input=", input); + // Let parser be a new pattern parser whose encoding callback is encoding + // callback and segment wildcard regexp is the result of running generate a + // segment wildcard regexp given options. + auto parser = url_pattern_parser( + encoding_callback, generate_segment_wildcard_regexp(options)); + // Set parser’s token list to the result of running tokenize given input and + // "strict". + auto tokenize_result = tokenize(input, token_policy::strict); + if (!tokenize_result) { + ada_log("parse_pattern_string tokenize failed"); + return tl::unexpected(tokenize_result.error()); + } + parser.tokens = std::move(*tokenize_result); + + // While parser’s index is less than parser’s token list's size: + while (parser.can_continue()) { + // Let char token be the result of running try to consume a token given + // parser and "char". + auto char_token = parser.try_consume_token(token_type::CHAR); + // Let name token be the result of running try to consume a token given + // parser and "name". + auto name_token = parser.try_consume_token(token_type::NAME); + // Let regexp or wildcard token be the result of running try to consume a + // regexp or wildcard token given parser and name token. + auto regexp_or_wildcard_token = + parser.try_consume_regexp_or_wildcard_token(name_token); + // If name token is not null or regexp or wildcard token is not null: + if (name_token || regexp_or_wildcard_token) { + // Let prefix be the empty string. + std::string prefix{}; + // If char token is not null then set prefix to char token’s value. + if (char_token) + prefix = char_token->value; + // If prefix is not the empty string and not options’s prefix code point: + if (!prefix.empty() && prefix != options.get_prefix()) { + // Append prefix to the end of parser’s pending fixed value. + parser.pending_fixed_value.append(prefix); + // Set prefix to the empty string. + prefix.clear(); + } + // Run maybe add a part from the pending fixed value given parser. + if (auto error = parser.maybe_add_part_from_the_pending_fixed_value()) { + ada_log("maybe_add_part_from_the_pending_fixed_value failed"); + return tl::unexpected(*error); + } + // Let modifier token be the result of running try to consume a modifier + // token given parser. + auto modifier_token = parser.try_consume_modifier_token(); + // Run add a part given parser, prefix, name token, regexp or wildcard + // token, the empty string, and modifier token. + if (auto error = + parser.add_part(prefix, name_token, regexp_or_wildcard_token, "", + modifier_token)) { + ada_log("parser.add_part failed"); + return tl::unexpected(*error); + } + // Continue. + continue; + } + + // Let fixed token be char token. + auto fixed_token = char_token; + // If fixed token is null, then set fixed token to the result of running try + // to consume a token given parser and "escaped-char". + if (!fixed_token) + fixed_token = parser.try_consume_token(token_type::ESCAPED_CHAR); + // If fixed token is not null: + if (fixed_token) { + // Append fixed token’s value to parser’s pending fixed value. + parser.pending_fixed_value.append(fixed_token->value); + // Continue. + continue; + } + // Let open token be the result of running try to consume a token given + // parser and "open". + auto open_token = parser.try_consume_token(token_type::OPEN); + // If open token is not null: + if (open_token) { + // Set prefix be the result of running consume text given parser. + auto prefix_ = parser.consume_text(); + // Set name token to the result of running try to consume a token given + // parser and "name". + name_token = parser.try_consume_token(token_type::NAME); + // Set regexp or wildcard token to the result of running try to consume a + // regexp or wildcard token given parser and name token. + regexp_or_wildcard_token = + parser.try_consume_regexp_or_wildcard_token(name_token); + // Let suffix be the result of running consume text given parser. + auto suffix_ = parser.consume_text(); + // Run consume a required token given parser and "close". + if (!parser.consume_required_token(token_type::CLOSE)) { + ada_log("parser.consume_required_token failed"); + return tl::unexpected(errors::type_error); + } + // Set modifier token to the result of running try to consume a modifier + // token given parser. + auto modifier_token = parser.try_consume_modifier_token(); + // Run add a part given parser, prefix, name token, regexp or wildcard + // token, suffix, and modifier token. + if (auto error = + parser.add_part(prefix_, name_token, regexp_or_wildcard_token, + suffix_, modifier_token)) { + return tl::unexpected(*error); + } + // Continue. + continue; + } + // Run maybe add a part from the pending fixed value given parser. + if (auto error = parser.maybe_add_part_from_the_pending_fixed_value()) { + ada_log("maybe_add_part_from_the_pending_fixed_value failed on line 992"); + return tl::unexpected(*error); + } + // Run consume a required token given parser and "end". + if (!parser.consume_required_token(token_type::END)) { + return tl::unexpected(errors::type_error); + } + } + ada_log("parser.parts size is: ", parser.parts.size()); + // Return parser’s part list. + return parser.parts; +} + +template +bool protocol_component_matches_special_scheme( + url_pattern_component &component) { + // let's avoid unnecessary copy here. + auto ®ex = component.regexp; + return regex_provider::regex_match("http", regex) || + regex_provider::regex_match("https", regex) || + regex_provider::regex_match("ws", regex) || + regex_provider::regex_match("wss", regex) || + regex_provider::regex_match("ftp", regex); +} + +template +inline std::optional constructor_string_parser< + regex_provider>::compute_protocol_matches_special_scheme_flag() { + ada_log("constructor_string_parser::compute_protocol_matches_special_scheme_" + "flag"); + // Let protocol string be the result of running make a component string given + // parser. + auto protocol_string = make_component_string(); + // Let protocol component be the result of compiling a component given + // protocol string, canonicalize a protocol, and default options. + auto protocol_component = url_pattern_component::compile( + protocol_string, canonicalize_protocol, + url_pattern_compile_component_options::DEFAULT); + if (!protocol_component) { + ada_log("url_pattern_component::compile failed for protocol_string ", + protocol_string); + return protocol_component.error(); + } + // If the result of running protocol component matches a special scheme given + // protocol component is true, then set parser’s protocol matches a special + // scheme flag to true. + if (protocol_component_matches_special_scheme(*protocol_component)) { + protocol_matches_a_special_scheme_flag = true; + } + return std::nullopt; +} + +template +tl::expected +constructor_string_parser::parse(std::string_view input) { + ada_log("constructor_string_parser::parse input=", input); + // Let parser be a new constructor string parser whose input is input and + // token list is the result of running tokenize given input and "lenient". + auto token_list = tokenize(input, token_policy::lenient); + if (!token_list) { + return tl::unexpected(token_list.error()); + } + auto parser = constructor_string_parser(input, std::move(*token_list)); + + // While parser’s token index is less than parser’s token list size: + while (parser.token_index < parser.token_list.size()) { + // Set parser’s token increment to 1. + parser.token_increment = 1; + + // If parser’s token list[parser’s token index]'s type is "end" then: + if (parser.token_list[parser.token_index].type == token_type::END) { + // If parser’s state is "init": + if (parser.state == State::INIT) { + // Run rewind given parser. + parser.rewind(); + // If the result of running is a hash prefix given parser is true, then + // run change state given parser, "hash" and 1. + if (parser.is_hash_prefix()) { + parser.change_state(State::HASH, 1); + } else if (parser.is_search_prefix()) { + // Otherwise if the result of running is a search prefix given parser + // is true: Run change state given parser, "search" and 1. + parser.change_state(State::SEARCH, 1); + } else { + // Run change state given parser, "pathname" and 0. + parser.change_state(State::PATHNAME, 0); + } + // Increment parser’s token index by parser’s token increment. + parser.token_index += parser.token_increment; + // Continue. + continue; + } + + if (parser.state == State::AUTHORITY) { + // If parser’s state is "authority": + // Run rewind and set state given parser, and "hostname". + parser.rewind(); + parser.change_state(State::HOSTNAME, 0); + // Increment parser’s token index by parser’s token increment. + parser.token_index += parser.token_increment; + // Continue. + continue; + } + + // Run change state given parser, "done" and 0. + parser.change_state(State::DONE, 0); + // Break. + break; + } + + // If the result of running is a group open given parser is true: + if (parser.is_group_open()) { + // Increment parser’s group depth by 1. + parser.group_depth += 1; + // Increment parser’s token index by parser’s token increment. + parser.token_index += parser.token_increment; + } + + // If parser’s group depth is greater than 0: + if (parser.group_depth > 0) { + // If the result of running is a group close given parser is true, then + // decrement parser’s group depth by 1. + if (parser.is_group_close()) { + parser.group_depth -= 1; + } else { + // Increment parser’s token index by parser’s token increment. + parser.token_index += parser.token_increment; + continue; + } + } + + // Switch on parser’s state and run the associated steps: + switch (parser.state) { + case State::INIT: { + // If the result of running is a protocol suffix given parser is true: + if (parser.is_protocol_suffix()) { + // Run rewind and set state given parser and "protocol". + parser.rewind(); + parser.change_state(State::PROTOCOL, 0); + } + break; + } + case State::PROTOCOL: { + // If the result of running is a protocol suffix given parser is true: + if (parser.is_protocol_suffix()) { + // Run compute protocol matches a special scheme flag given parser. + if (const auto error = + parser.compute_protocol_matches_special_scheme_flag()) { + ada_log("compute_protocol_matches_special_scheme_flag failed"); + return tl::unexpected(*error); + } + // Let next state be "pathname". + auto next_state = State::PATHNAME; + // Let skip be 1. + auto skip = 1; + // If the result of running next is authority slashes given parser is + // true: + if (parser.next_is_authority_slashes()) { + // Set next state to "authority". + next_state = State::AUTHORITY; + // Set skip to 3. + skip = 3; + } else if (parser.protocol_matches_a_special_scheme_flag) { + // Otherwise if parser’s protocol matches a special scheme flag is + // true, then set next state to "authority". + next_state = State::AUTHORITY; + } + + // Run change state given parser, next state, and skip. + parser.change_state(next_state, skip); + } + break; + } + case State::AUTHORITY: { + // If the result of running is an identity terminator given parser is + // true, then run rewind and set state given parser and "username". + if (parser.is_an_identity_terminator()) { + parser.rewind(); + parser.change_state(State::USERNAME, 0); + } else if (parser.is_pathname_start() || parser.is_search_prefix() || + parser.is_hash_prefix()) { + // Otherwise if any of the following are true: + // - the result of running is a pathname start given parser; + // - the result of running is a search prefix given parser; or + // - the result of running is a hash prefix given parser, + // then run rewind and set state given parser and "hostname". + parser.rewind(); + parser.change_state(State::HOSTNAME, 0); + } + break; + } + case State::USERNAME: { + // If the result of running is a password prefix given parser is true, + // then run change state given parser, "password", and 1. + if (parser.is_password_prefix()) { + parser.change_state(State::PASSWORD, 1); + } else if (parser.is_an_identity_terminator()) { + // Otherwise if the result of running is an identity terminator given + // parser is true, then run change state given parser, "hostname", + // and 1. + parser.change_state(State::HOSTNAME, 1); + } + break; + } + case State::PASSWORD: { + // If the result of running is an identity terminator given parser is + // true, then run change state given parser, "hostname", and 1. + if (parser.is_an_identity_terminator()) { + parser.change_state(State::HOSTNAME, 1); + } + break; + } + case State::HOSTNAME: { + // If the result of running is an IPv6 open given parser is true, then + // increment parser’s hostname IPv6 bracket depth by 1. + if (parser.is_an_ipv6_open()) { + parser.hostname_ipv6_bracket_depth += 1; + } else if (parser.is_an_ipv6_close()) { + // Otherwise if the result of running is an IPv6 close given parser is + // true, then decrement parser’s hostname IPv6 bracket depth by 1. + parser.hostname_ipv6_bracket_depth -= 1; + } else if (parser.is_port_prefix() && + parser.hostname_ipv6_bracket_depth == 0) { + // Otherwise if the result of running is a port prefix given parser is + // true and parser’s hostname IPv6 bracket depth is zero, then run + // change state given parser, "port", and 1. + parser.change_state(State::PORT, 1); + } else if (parser.is_pathname_start()) { + // Otherwise if the result of running is a pathname start given parser + // is true, then run change state given parser, "pathname", and 0. + parser.change_state(State::PATHNAME, 0); + } else if (parser.is_search_prefix()) { + // Otherwise if the result of running is a search prefix given parser + // is true, then run change state given parser, "search", and 1. + parser.change_state(State::SEARCH, 1); + } else if (parser.is_hash_prefix()) { + // Otherwise if the result of running is a hash prefix given parser is + // true, then run change state given parser, "hash", and 1. + parser.change_state(State::HASH, 1); + } + + break; + } + case State::PORT: { + // If the result of running is a pathname start given parser is true, + // then run change state given parser, "pathname", and 0. + if (parser.is_pathname_start()) { + parser.change_state(State::PATHNAME, 0); + } else if (parser.is_search_prefix()) { + // Otherwise if the result of running is a search prefix given parser + // is true, then run change state given parser, "search", and 1. + parser.change_state(State::SEARCH, 1); + } else if (parser.is_hash_prefix()) { + // Otherwise if the result of running is a hash prefix given parser is + // true, then run change state given parser, "hash", and 1. + parser.change_state(State::HASH, 1); + } + break; + } + case State::PATHNAME: { + // If the result of running is a search prefix given parser is true, + // then run change state given parser, "search", and 1. + if (parser.is_search_prefix()) { + parser.change_state(State::SEARCH, 1); + } else if (parser.is_hash_prefix()) { + // Otherwise if the result of running is a hash prefix given parser is + // true, then run change state given parser, "hash", and 1. + parser.change_state(State::HASH, 1); + } + break; + } + case State::SEARCH: { + // If the result of running is a hash prefix given parser is true, then + // run change state given parser, "hash", and 1. + if (parser.is_hash_prefix()) { + parser.change_state(State::HASH, 1); + } + } + case State::HASH: { + // Do nothing + break; + } + default: { + // Assert: This step is never reached. + unreachable(); + } + } + + // Increment parser’s token index by parser’s token increment. + parser.token_index += parser.token_increment; + } + + // If parser’s result contains "hostname" and not "port", then set parser’s + // result["port"] to the empty string. + if (parser.result.hostname && !parser.result.port) { + parser.result.port = ""; + } + + // Return parser’s result. + return parser.result; +} + +} // namespace ada::url_pattern_helpers + +#endif +/* end file include/ada/url_pattern_helpers-inl.h */ + +// Public API +/* begin file include/ada/ada_version.h */ +/** + * @file ada_version.h + * @brief Definitions for Ada's version number. + */ +#ifndef ADA_ADA_VERSION_H +#define ADA_ADA_VERSION_H + +#define ADA_VERSION "3.0.0" + +namespace ada { + +enum { + ADA_VERSION_MAJOR = 3, + ADA_VERSION_MINOR = 0, + ADA_VERSION_REVISION = 0, +}; + +} // namespace ada + +#endif // ADA_ADA_VERSION_H +/* end file include/ada/ada_version.h */ +/* begin file include/ada/implementation-inl.h */ +/** + * @file implementation-inl.h + */ +#ifndef ADA_IMPLEMENTATION_INL_H +#define ADA_IMPLEMENTATION_INL_H + +#include +#include + +namespace ada { + +template +ada_warn_unused tl::expected, errors> +parse_url_pattern(std::variant input, + const std::string_view *base_url, + const url_pattern_options *options) { + return parser::parse_url_pattern_impl(std::move(input), + base_url, options); +} + +} // namespace ada + +#endif // ADA_IMPLEMENTATION_INL_H +/* end file include/ada/implementation-inl.h */ + +#endif // ADA_H +/* end file include/ada.h */ diff --git a/common/rnexecutorch/Log.cpp b/common/rnexecutorch/Log.cpp new file mode 100644 index 000000000..1deaadcee --- /dev/null +++ b/common/rnexecutorch/Log.cpp @@ -0,0 +1,68 @@ +#include "Log.h" + +#include +#include + +#ifdef __ANDROID__ +#include +#endif +#ifdef __APPLE__ +#include +#endif + +namespace rnexecutorch { + +#ifdef __ANDROID__ +android_LogPriority androidLogLevel(LOG_LEVEL logLevel) { + switch (logLevel) { + case LOG_LEVEL::Info: + default: + return ANDROID_LOG_INFO; + case LOG_LEVEL::Error: + return ANDROID_LOG_ERROR; + case LOG_LEVEL::Debug: + return ANDROID_LOG_DEBUG; + } +} +#endif + +void log(LOG_LEVEL logLevel, const char *fmt, ...) { + va_list args; + va_start(args, fmt); + + // Maximum length of a log message. + static constexpr size_t kMaxLogMessageLength = 1024; + char buf[kMaxLogMessageLength]; + size_t len = vsnprintf(buf, kMaxLogMessageLength, fmt, args); + if (len >= kMaxLogMessageLength - 1) { + for (std::size_t i = 0; i < 3; ++i) + buf[kMaxLogMessageLength - 2 - i] = '.'; + len = kMaxLogMessageLength - 3; + } + buf[kMaxLogMessageLength - 1] = 0; + +#ifdef __ANDROID__ + + __android_log_print(androidLogLevel(logLevel), "RnExecutorch", "%s", buf); + +#endif // ifdef __ANDROID__ +#ifdef __APPLE__ + + switch (logLevel) { + case LOG_LEVEL::Info: + default: + os_log_info(OS_LOG_DEFAULT, "%s", buf); + break; + case LOG_LEVEL::Error: + os_log_error(OS_LOG_DEFAULT, "%s", buf); + break; + case LOG_LEVEL::Debug: + os_log_debug(OS_LOG_DEFAULT, "%s", buf); + break; + } + +#endif // ifdef __APPLE__ + va_end(args); +} + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/Log.h b/common/rnexecutorch/Log.h new file mode 100644 index 000000000..0072271d7 --- /dev/null +++ b/common/rnexecutorch/Log.h @@ -0,0 +1,10 @@ +#pragma once + +namespace rnexecutorch { + +enum class LOG_LEVEL { Info, Error, Debug }; + +// const char* instead of const std::string& as va_start doesn't take references +void log(LOG_LEVEL logLevel, const char *fmt, ...); + +} // namespace rnexecutorch diff --git a/common/rnexecutorch/RnExecutorchInstaller.cpp b/common/rnexecutorch/RnExecutorchInstaller.cpp new file mode 100644 index 000000000..bdfdab231 --- /dev/null +++ b/common/rnexecutorch/RnExecutorchInstaller.cpp @@ -0,0 +1,29 @@ +#include "RnExecutorchInstaller.h" + +#include +#include +#include + +namespace rnexecutorch { + +// This function fetches data from a url address. It is implemented in +// Kotlin/ObjectiveC++ and then bound to this variable. It's done to not handle +// SSL intricacies manually, as it is done automagically in ObjC++/Kotlin. +FetchUrlFunc_t fetchUrlFunc; + +void RnExecutorchInstaller::injectJSIBindings( + jsi::Runtime *jsiRuntime, std::shared_ptr jsCallInvoker, + FetchUrlFunc_t fetchDataFromUrl) { + fetchUrlFunc = fetchDataFromUrl; + + jsiRuntime->global().setProperty( + *jsiRuntime, "loadStyleTransfer", + RnExecutorchInstaller::loadModel(jsiRuntime, jsCallInvoker, + "loadStyleTransfer")); + + jsiRuntime->global().setProperty( + *jsiRuntime, "loadImageSegmentation", + RnExecutorchInstaller::loadModel( + jsiRuntime, jsCallInvoker, "loadImageSegmentation")); +} +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/RnExecutorchInstaller.h b/common/rnexecutorch/RnExecutorchInstaller.h new file mode 100644 index 000000000..3acb45c9b --- /dev/null +++ b/common/rnexecutorch/RnExecutorchInstaller.h @@ -0,0 +1,77 @@ +#pragma once + +#include +#include +#include + +#include +#include + +#include +#include + +namespace rnexecutorch { + +using FetchUrlFunc_t = std::function(std::string)>; +extern FetchUrlFunc_t fetchUrlFunc; + +using namespace facebook; + +class RnExecutorchInstaller { +public: + static void + injectJSIBindings(jsi::Runtime *jsiRuntime, + std::shared_ptr jsCallInvoker, + FetchUrlFunc_t fetchDataFromUrl); + +private: + template + static jsi::Function + loadModel(jsi::Runtime *jsiRuntime, + std::shared_ptr jsCallInvoker, + const std::string &loadFunctionName) { + + return jsi::Function::createFromHostFunction( + *jsiRuntime, jsi::PropNameID::forAscii(*jsiRuntime, loadFunctionName), + 0, + [jsCallInvoker](jsi::Runtime &runtime, const jsi::Value &thisValue, + const jsi::Value *args, size_t count) -> jsi::Value { + if (count != 1) { + char errorMessage[100]; + std::snprintf( + errorMessage, sizeof(errorMessage), + "Argument count mismatch, was expecting: 1 but got: %zu", + count); + throw jsi::JSError(runtime, errorMessage); + } + try { + auto source = + jsiconversion::getValue(args[0], runtime); + + auto modelImplementationPtr = + std::make_shared(source, jsCallInvoker); + auto modelHostObject = std::make_shared>( + modelImplementationPtr, jsCallInvoker); + + return jsi::Object::createFromHostObject(runtime, modelHostObject); + } catch (const std::runtime_error &e) { + // This catch should be merged with the next one + // (std::runtime_error inherits from std::exception) HOWEVER react + // native has broken RTTI which breaks proper exception type + // checking. Remove when the following change is present in our + // version: + // https://github.com/facebook/react-native/commit/3132cc88dd46f95898a756456bebeeb6c248f20e + throw jsi::JSError(runtime, e.what()); + return jsi::Value(); + } catch (const std::exception &e) { + throw jsi::JSError(runtime, e.what()); + return jsi::Value(); + } catch (...) { + throw jsi::JSError(runtime, "Unknown error"); + return jsi::Value(); + } + }); + } +}; + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/data_processing/FileUtils.h b/common/rnexecutorch/data_processing/FileUtils.h new file mode 100644 index 000000000..98035b07b --- /dev/null +++ b/common/rnexecutorch/data_processing/FileUtils.h @@ -0,0 +1,14 @@ +#pragma once + +#include +#include + +namespace rnexecutorch::fileutils { + +inline std::string getTimeID() { + return std::to_string(std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count()); +} + +} // namespace rnexecutorch::fileutils diff --git a/common/rnexecutorch/data_processing/ImageProcessing.cpp b/common/rnexecutorch/data_processing/ImageProcessing.cpp new file mode 100644 index 000000000..20461d169 --- /dev/null +++ b/common/rnexecutorch/data_processing/ImageProcessing.cpp @@ -0,0 +1,129 @@ +#include "ImageProcessing.h" + +#include +#include + +#include + +#include +#include +#include +#include + +namespace rnexecutorch { +// This is defined in RnExecutorchInstaller.cpp. This function fetches data +// from a url address. It is implemented in Kotlin/ObjectiveC++ and then bound +// to this variable. It's done to not handle SSL intricacies manually, as it is +// done automagically in ObjC++/Kotlin. +extern FetchUrlFunc_t fetchUrlFunc; +namespace imageprocessing { +std::vector colorMatToVector(const cv::Mat &mat) { + return colorMatToVector(mat, cv::Scalar(0.0, 0.0, 0.0), + cv::Scalar(1.0, 1.0, 1.0)); +} + +std::vector colorMatToVector(const cv::Mat &mat, cv::Scalar mean, + cv::Scalar variance) { + int pixelCount = mat.cols * mat.rows; + std::vector v(pixelCount * 3); + + for (int i = 0; i < pixelCount; i++) { + int row = i / mat.cols; + int col = i % mat.cols; + cv::Vec3b pixel = mat.at(row, col); + v[0 * pixelCount + i] = + (pixel[0] - mean[0] * 255.0) / (variance[0] * 255.0); + v[1 * pixelCount + i] = + (pixel[1] - mean[1] * 255.0) / (variance[1] * 255.0); + v[2 * pixelCount + i] = + (pixel[2] - mean[2] * 255.0) / (variance[2] * 255.0); + } + + return v; +} + +cv::Mat bufferToColorMat(const std::span &buffer, + cv::Size matSize) { + cv::Mat mat(matSize, CV_8UC3); + + int pixelCount = matSize.width * matSize.height; + for (int i = 0; i < pixelCount; i++) { + int row = i / matSize.width; + int col = i % matSize.width; + + float r = buffer[0 * pixelCount + i]; + float g = buffer[1 * pixelCount + i]; + float b = buffer[2 * pixelCount + i]; + + cv::Vec3b color(static_cast(b * 255), static_cast(g * 255), + static_cast(r * 255)); + mat.at(row, col) = color; + } + + return mat; +} + +std::string saveToTempFile(const cv::Mat &image) { + std::string filename = "rn_executorch_" + fileutils::getTimeID() + ".png"; + + std::filesystem::path tempDir = std::filesystem::temp_directory_path(); + std::filesystem::path filePath = tempDir / filename; + + if (!cv::imwrite(filePath.string(), image)) { + throw std::runtime_error("Failed to save the image: " + filePath.string()); + } + + return "file://" + filePath.string(); +} + +cv::Mat readImage(const std::string &imageURI) { + cv::Mat image; + + if (imageURI.starts_with("data")) { + // base64 + std::stringstream uriStream(imageURI); + std::string stringData; + std::size_t segmentIndex{0}; + while (std::getline(uriStream, stringData, ',')) { + ++segmentIndex; + } + if (segmentIndex != 1) { + throw std::runtime_error("Read image error: invalid base64 URI"); + } + auto data = base64_decode(stringData); + cv::Mat encodedData(1, data.size(), CV_8UC1, (void *)data.data()); + image = cv::imdecode(encodedData, cv::IMREAD_COLOR); + } else if (imageURI.starts_with("file")) { + // local file + auto url = ada::parse(imageURI); + image = cv::imread(std::string{url->get_pathname()}, cv::IMREAD_COLOR); + } else if (imageURI.starts_with("http")) { + // remote file + std::vector imageData = fetchUrlFunc(imageURI); + image = cv::imdecode( + cv::Mat(1, imageData.size(), CV_8UC1, (void *)imageData.data()), + cv::IMREAD_COLOR); + } else { + throw std::runtime_error("Read image error: unknown protocol"); + } + + if (image.empty()) { + throw std::runtime_error("Read image error: invalid argument"); + } + + return image; +} + +TensorPtr getTensorFromMatrix(const std::vector &sizes, + const cv::Mat &matrix) { + std::vector inputVector = colorMatToVector(matrix); + return executorch::extension::make_tensor_ptr(sizes, inputVector); +} + +cv::Mat getMatrixFromTensor(cv::Size size, const Tensor &tensor) { + auto resultData = static_cast(tensor.const_data_ptr()); + return bufferToColorMat(std::span(resultData, tensor.numel()), + size); +} +} // namespace imageprocessing +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/data_processing/ImageProcessing.h b/common/rnexecutorch/data_processing/ImageProcessing.h new file mode 100644 index 000000000..7e2a59e29 --- /dev/null +++ b/common/rnexecutorch/data_processing/ImageProcessing.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace rnexecutorch::imageprocessing { +using executorch::aten::Tensor; +using executorch::extension::TensorPtr; + +/// @brief Convert a OpenCV matrix to channel-first vector representation +std::vector colorMatToVector(const cv::Mat &mat, cv::Scalar mean, + cv::Scalar variance); +/// @brief Convert a OpenCV matrix to channel-first vector representation +std::vector colorMatToVector(const cv::Mat &mat); +/// @brief Convert a channel-first representation of an RGB image to OpenCV +/// matrix +cv::Mat bufferToColorMat(const std::span &buffer, + cv::Size matSize); +std::string saveToTempFile(const cv::Mat &image); +cv::Mat readImage(const std::string &imageURI); +TensorPtr getTensorFromMatrix(const std::vector &sizes, + const cv::Mat &mat); +cv::Mat getMatrixFromTensor(cv::Size size, const Tensor &tensor); + +} // namespace rnexecutorch::imageprocessing \ No newline at end of file diff --git a/common/rnexecutorch/data_processing/Numerical.cpp b/common/rnexecutorch/data_processing/Numerical.cpp new file mode 100644 index 000000000..618683f00 --- /dev/null +++ b/common/rnexecutorch/data_processing/Numerical.cpp @@ -0,0 +1,19 @@ +#include "Numerical.h" + +#include +#include + +namespace rnexecutorch::numerical { +void softmax(std::vector &v) { + float max = *std::max_element(v.begin(), v.end()); + + float sum = 0.0f; + for (float &x : v) { + x = std::exp(x - max); + sum += x; + } + for (float &x : v) { + x /= sum; + } +} +} // namespace rnexecutorch::numerical \ No newline at end of file diff --git a/common/rnexecutorch/data_processing/Numerical.h b/common/rnexecutorch/data_processing/Numerical.h new file mode 100644 index 000000000..66d96b51e --- /dev/null +++ b/common/rnexecutorch/data_processing/Numerical.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +namespace rnexecutorch::numerical { +void softmax(std::vector &v); +} // namespace rnexecutorch::numerical \ No newline at end of file diff --git a/common/rnexecutorch/data_processing/base64.cpp b/common/rnexecutorch/data_processing/base64.cpp new file mode 100644 index 000000000..a79bee9b8 --- /dev/null +++ b/common/rnexecutorch/data_processing/base64.cpp @@ -0,0 +1,110 @@ +#include "base64.h" +#include + +static const std::string base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + +static inline bool is_base64(BYTE c) { + return (isalnum(c) || (c == '+') || (c == '/')); +} + +std::string base64_encode(BYTE const *buf, unsigned int bufLen) { + std::string ret; + int i = 0; + int j = 0; + BYTE char_array_3[3]; + BYTE char_array_4[4]; + + while (bufLen--) { + char_array_3[i++] = *(buf++); + if (i == 3) { + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = + ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = + ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for (i = 0; (i < 4); i++) { + ret += base64_chars[char_array_4[i]]; + } + i = 0; + } + } + + if (i) { + for (j = i; j < 3; j++) { + char_array_3[j] = '\0'; + } + + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = + ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = + ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for (j = 0; (j < i + 1); j++) { + ret += base64_chars[char_array_4[j]]; + } + + while ((i++ < 3)) { + ret += '='; + } + } + + return ret; +} + +std::vector base64_decode(std::string const &encoded_string) { + int in_len = encoded_string.size(); + int i = 0; + int j = 0; + int in_ = 0; + BYTE char_array_4[4], char_array_3[3]; + std::vector ret; + + while (in_len-- && (encoded_string[in_] != '=') && + is_base64(encoded_string[in_])) { + char_array_4[i++] = encoded_string[in_]; + in_++; + if (i == 4) { + for (i = 0; i < 4; i++) { + char_array_4[i] = base64_chars.find(char_array_4[i]); + } + + char_array_3[0] = + (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = + ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (i = 0; (i < 3); i++) { + ret.push_back(char_array_3[i]); + } + i = 0; + } + } + + if (i) { + for (j = i; j < 4; j++) { + char_array_4[j] = 0; + } + + for (j = 0; j < 4; j++) { + char_array_4[j] = base64_chars.find(char_array_4[j]); + } + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = + ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (j = 0; (j < i - 1); j++) { + ret.push_back(char_array_3[j]); + } + } + + return ret; +} \ No newline at end of file diff --git a/common/rnexecutorch/data_processing/base64.h b/common/rnexecutorch/data_processing/base64.h new file mode 100644 index 000000000..5ebaaa84f --- /dev/null +++ b/common/rnexecutorch/data_processing/base64.h @@ -0,0 +1,46 @@ +/* + base64.cpp and base64.h + + base64 encoding and decoding with C++. + More information at + https://renenyffenegger.ch/notes/development/Base64/Encoding-and-decoding-base-64-with-cpp + + Version: 2.rc.09 (release candidate) + + Copyright (C) 2004-2017, 2020-2022 René Nyffenegger + + This source code is provided 'as-is', without any express or implied + warranty. In no event will the author 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 source code must not be misrepresented; you must not + claim that you wrote the original source code. If you use this source code + 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 source code. + + 3. This notice may not be removed or altered from any source distribution. + + René Nyffenegger rene.nyffenegger@adp-gmbh.ch + +*/ + +// Modified version by LihO at https://stackoverflow.com/a/13935718/7470700 + +#ifndef _BASE64_H_ +#define _BASE64_H_ + +#include +#include +typedef unsigned char BYTE; + +std::string base64_encode(BYTE const *buf, unsigned int bufLen); +std::vector base64_decode(std::string const &); + +#endif \ No newline at end of file diff --git a/common/rnexecutorch/host_objects/JsiConversions.h b/common/rnexecutorch/host_objects/JsiConversions.h new file mode 100644 index 000000000..4cd1c43dc --- /dev/null +++ b/common/rnexecutorch/host_objects/JsiConversions.h @@ -0,0 +1,101 @@ +#pragma once + +#include +#include + +#include + +namespace rnexecutorch::jsiconversion { + +using namespace facebook; + +// Conversion from jsi to C++ types -------------------------------------------- + +template T getValue(const jsi::Value &val, jsi::Runtime &runtime); + +template <> +inline double getValue(const jsi::Value &val, jsi::Runtime &runtime) { + return val.asNumber(); +} + +template <> +inline bool getValue(const jsi::Value &val, jsi::Runtime &runtime) { + return val.asBool(); +} + +template <> +inline std::string getValue(const jsi::Value &val, + jsi::Runtime &runtime) { + return val.getString(runtime).utf8(runtime); +} + +template <> +inline std::vector +getValue>(const jsi::Value &val, + jsi::Runtime &runtime) { + jsi::Array array = val.asObject(runtime).asArray(runtime); + size_t length = array.size(runtime); + std::vector result; + result.reserve(length); + + for (size_t i = 0; i < length; ++i) { + jsi::Value element = array.getValueAtIndex(runtime, i); + result.push_back(getValue(element, runtime)); + } + return result; +} + +// C++ set from JS array. Set with heterogenerous look-up (adding std::less<> +// enables querying with std::string_view). +template <> +inline std::set> +getValue>>(const jsi::Value &val, + jsi::Runtime &runtime) { + + jsi::Array array = val.asObject(runtime).asArray(runtime); + size_t length = array.size(runtime); + std::set> result; + + for (size_t i = 0; i < length; ++i) { + jsi::Value element = array.getValueAtIndex(runtime, i); + result.insert(getValue(element, runtime)); + } + return result; +} + +// Conversion from C++ types to jsi -------------------------------------------- + +// Implementation functions might return any type, but in a promise we can only +// return jsi::Value or jsi::Object. For each type being returned +// we add a function here. + +inline jsi::Value getJsiValue(std::shared_ptr valuePtr, + jsi::Runtime &runtime) { + return std::move(*valuePtr); +} + +inline jsi::Value getJsiValue(const std::string &str, jsi::Runtime &runtime) { + return jsi::String::createFromAscii(runtime, str); +} + +template +constexpr std::size_t getArgumentCount(R (Model::*f)(Types...)) { + return sizeof...(Types); +} + +template +std::tuple fillTupleFromArgs(std::index_sequence, + const jsi::Value *args, + jsi::Runtime &runtime) { + return std::make_tuple(getValue(args[I], runtime)...); +} + +template +std::tuple createArgsTupleFromJsi(R (Model::*f)(Types...), + const jsi::Value *args, + jsi::Runtime &runtime) { + return fillTupleFromArgs(std::index_sequence_for{}, args, + runtime); +} + +} // namespace rnexecutorch::jsiconversion \ No newline at end of file diff --git a/common/rnexecutorch/host_objects/ModelHostObject.h b/common/rnexecutorch/host_objects/ModelHostObject.h new file mode 100644 index 000000000..a81aebcce --- /dev/null +++ b/common/rnexecutorch/host_objects/ModelHostObject.h @@ -0,0 +1,102 @@ +#pragma once + +#include +#include +#include +#include + +#include + +#include +#include +#include +#include + +namespace rnexecutorch { + +template class ModelHostObject : public JsiHostObject { +public: + explicit ModelHostObject(const std::shared_ptr &model, + std::shared_ptr callInvoker) + : model(model), callInvoker(callInvoker) { + addFunctions(JSI_EXPORT_FUNCTION(ModelHostObject, + promiseHostFunction<&Model::forward>, + "forward")); + } + + // A generic host function that resolves a promise with a result of a + // function. JSI arguments are converted to the types provided in the function + // signature, and the return value is converted back to JSI before resolving. + template JSI_HOST_FUNCTION(promiseHostFunction) { + auto promise = Promise::createPromise( + runtime, callInvoker, + [this, count, args, &runtime](std::shared_ptr promise) { + constexpr std::size_t functionArgCount = + jsiconversion::getArgumentCount(FnPtr); + if (functionArgCount != count) { + char errorMessage[100]; + std::snprintf( + errorMessage, sizeof(errorMessage), + "Argument count mismatch, was expecting: %zu but got: %zu", + functionArgCount, count); + promise->reject(errorMessage); + return; + } + + try { + auto argsConverted = + jsiconversion::createArgsTupleFromJsi(FnPtr, args, runtime); + + // We need to dispatch a thread if we want the function to be + // asynchronous. In this thread all accesses to jsi::Runtime need to + // be done via the callInvoker. + std::thread([this, promise, + argsConverted = std::move(argsConverted)]() { + try { + auto result = + std::apply(std::bind_front(FnPtr, model), argsConverted); + // The result is copied. It should either be quickly copiable, + // or passed with a shared_ptr. + callInvoker->invokeAsync([promise, + result](jsi::Runtime &runtime) { + promise->resolve( + jsiconversion::getJsiValue(std::move(result), runtime)); + }); + } catch (const std::runtime_error &e) { + // This catch should be merged with the next two + // (std::runtime_error and jsi::JSError inherits from + // std::exception) HOWEVER react native has broken RTTI which + // breaks proper exception type checking. Remove when the + // following change is present in our version: + // https://github.com/facebook/react-native/commit/3132cc88dd46f95898a756456bebeeb6c248f20e + callInvoker->invokeAsync( + [&e, promise]() { promise->reject(e.what()); }); + return; + } catch (const jsi::JSError &e) { + callInvoker->invokeAsync( + [&e, promise]() { promise->reject(e.what()); }); + return; + } catch (const std::exception &e) { + callInvoker->invokeAsync( + [&e, promise]() { promise->reject(e.what()); }); + return; + } catch (...) { + callInvoker->invokeAsync( + [promise]() { promise->reject("Unknown error"); }); + return; + } + }).detach(); + } catch (...) { + promise->reject("Couldn't parse JS arguments in a native function"); + } + }); + + return promise; + } + +private: + std::shared_ptr model; + std::shared_ptr callInvoker; +}; + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/jsi/JsiHostObject.cpp b/common/rnexecutorch/jsi/JsiHostObject.cpp new file mode 100644 index 000000000..d07434325 --- /dev/null +++ b/common/rnexecutorch/jsi/JsiHostObject.cpp @@ -0,0 +1,108 @@ +#include "JsiHostObject.h" + +// set this value to 1 in order to debug the construction/destruction +#define JSI_DEBUG_ALLOCATIONS 1 + +namespace rnexecutorch { + +#if JSI_DEBUG_ALLOCATIONS +int objCounter = 0; +std::vector objects; +#endif + +JsiHostObject::JsiHostObject() { + getters_ = std::make_unique>(); + functions_ = std::make_unique< + std::unordered_map>(); + setters_ = std::make_unique>(); + +#if JSI_DEBUG_ALLOCATIONS + objects.push_back(this); + objCounter++; +#endif +} + +JsiHostObject::~JsiHostObject() { +#if JSI_DEBUG_ALLOCATIONS + for (size_t i = 0; i < objects.size(); ++i) { + if (objects.at(i) == this) { + objects.erase(objects.begin() + i); + break; + } + } + objCounter--; +#endif +} + +std::vector JsiHostObject::getPropertyNames(jsi::Runtime &rt) { + std::vector propertyNames; + propertyNames.reserve(getters_->size() + functions_->size() + + setters_->size()); + + for (const auto &it : *getters_) { + propertyNames.push_back(jsi::PropNameID::forUtf8(rt, it.first)); + } + + for (const auto &it : *functions_) { + propertyNames.push_back(jsi::PropNameID::forAscii(rt, it.first)); + } + + for (const auto &it : *setters_) { + propertyNames.push_back(jsi::PropNameID::forAscii(rt, it.first)); + } + + return propertyNames; +} + +jsi::Value JsiHostObject::get(jsi::Runtime &runtime, + const jsi::PropNameID &name) { + auto nameAsString = name.utf8(runtime); + auto &hostFunctionCache = hostFunctionCache_.get(runtime); + + auto cachedFunction = hostFunctionCache.find(nameAsString); + if (cachedFunction != hostFunctionCache.end()) { + return cachedFunction->second.asFunction(runtime); + } + + auto getter = getters_->find(nameAsString); + if (getter != getters_->end()) { + auto dispatcher = std::bind(getter->second, this, std::placeholders::_1); + + return dispatcher(runtime); + } + + auto function = functions_->find(nameAsString); + if (function == functions_->end()) { + return jsi::Value::undefined(); + } + + auto dispatcher = + std::bind(function->second, reinterpret_cast(this), + std::placeholders::_1, std::placeholders::_2, + std::placeholders::_3, std::placeholders::_4); + + return hostFunctionCache + .emplace(nameAsString, jsi::Function::createFromHostFunction( + runtime, name, 0, dispatcher)) + .first->second.asFunction(runtime); +} + +void JsiHostObject::set(jsi::Runtime &runtime, const jsi::PropNameID &name, + const jsi::Value &value) { + auto nameAsString = name.utf8(runtime); + + auto setter = setters_->find(nameAsString); + + if (setter != setters_->end()) { + auto dispatcher = std::bind(setter->second, this, std::placeholders::_1, + std::placeholders::_2); + + return dispatcher(runtime, value); + } +} +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/jsi/JsiHostObject.h b/common/rnexecutorch/jsi/JsiHostObject.h new file mode 100644 index 000000000..8b78f3f88 --- /dev/null +++ b/common/rnexecutorch/jsi/JsiHostObject.h @@ -0,0 +1,87 @@ +#pragma once +// Adapted from https://github.com/software-mansion/react-native-audio-api + +#include + +#include +#include +#include +#include +#include +#include +#include + +#define JSI_HOST_FUNCTION(NAME) \ + jsi::Value NAME(jsi::Runtime &runtime, const jsi::Value &thisValue, \ + const jsi::Value *args, size_t count) + +#define JSI_EXPORT_FUNCTION(CLASS, FUNCTION, NAME) \ + std::make_pair( \ + NAME, \ + static_cast( \ + &CLASS::FUNCTION)) + +#define JSI_PROPERTY_GETTER(name) jsi::Value name(jsi::Runtime &runtime) + +#define JSI_EXPORT_PROPERTY_GETTER(CLASS, FUNCTION) \ + std::make_pair(std::string(#FUNCTION), \ + static_cast( \ + &CLASS::FUNCTION)) + +#define JSI_PROPERTY_SETTER(name) \ + void name(jsi::Runtime &runtime, const jsi::Value &value) + +#define JSI_EXPORT_PROPERTY_SETTER(CLASS, FUNCTION) \ + std::make_pair(std::string(#FUNCTION), \ + static_cast(&CLASS::FUNCTION)) + +namespace rnexecutorch { + +using namespace facebook; + +class JsiHostObject : public jsi::HostObject { +public: + JsiHostObject(); + ~JsiHostObject() override; + + std::vector getPropertyNames(jsi::Runtime &rt) override; + + jsi::Value get(jsi::Runtime &runtime, const jsi::PropNameID &name) override; + + void set(jsi::Runtime &runtime, const jsi::PropNameID &name, + const jsi::Value &value) override; + + template void addGetters(Args... args) { + (getters_->insert(args), ...); + } + + template void addSetters(Args... args) { + (setters_->insert(args), ...); + } + + template void addFunctions(Args... args) { + (functions_->insert(args), ...); + } + +protected: + std::unique_ptr> + getters_; + + std::unique_ptr< + std::unordered_map> + functions_; + + std::unique_ptr> + setters_; + +private: + RuntimeAwareCache> hostFunctionCache_; +}; + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/jsi/OwningArrayBuffer.h b/common/rnexecutorch/jsi/OwningArrayBuffer.h new file mode 100644 index 000000000..51e9b63e4 --- /dev/null +++ b/common/rnexecutorch/jsi/OwningArrayBuffer.h @@ -0,0 +1,29 @@ +#pragma once + +#include + +namespace rnexecutorch { + +using namespace facebook; + +class OwningArrayBuffer : public jsi::MutableBuffer { +public: + OwningArrayBuffer(const size_t size) : size_(size) { + data_ = new uint8_t[size]; + } + ~OwningArrayBuffer() override { delete[] data_; } + + OwningArrayBuffer(const OwningArrayBuffer &) = delete; + OwningArrayBuffer(OwningArrayBuffer &&) = delete; + OwningArrayBuffer &operator=(const OwningArrayBuffer &) = delete; + OwningArrayBuffer &operator=(OwningArrayBuffer &&) = delete; + + [[nodiscard]] size_t size() const override { return size_; } + uint8_t *data() override { return data_; } + +private: + uint8_t *data_; + const size_t size_; +}; + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/jsi/Promise.cpp b/common/rnexecutorch/jsi/Promise.cpp new file mode 100644 index 000000000..f08f26654 --- /dev/null +++ b/common/rnexecutorch/jsi/Promise.cpp @@ -0,0 +1,20 @@ +#include "Promise.h" + +namespace rnexecutorch { + +Promise::Promise(jsi::Runtime &runtime, + std::shared_ptr callInvoker, + jsi::Value resolver, jsi::Value rejecter) + : runtime(runtime), callInvoker(callInvoker), + _resolver(std::move(resolver)), _rejecter(std::move(rejecter)) {} + +void Promise::resolve(jsi::Value &&result) { + _resolver.asObject(runtime).asFunction(runtime).call(runtime, result); +} + +void Promise::reject(std::string message) { + jsi::JSError error(runtime, message); + _rejecter.asObject(runtime).asFunction(runtime).call(runtime, error.value()); +} + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/jsi/Promise.h b/common/rnexecutorch/jsi/Promise.h new file mode 100644 index 000000000..4dba08891 --- /dev/null +++ b/common/rnexecutorch/jsi/Promise.h @@ -0,0 +1,69 @@ +#pragma once + +#include +#include + +#include +#include + +namespace rnexecutorch { + +using namespace facebook; + +class Promise; + +template +concept PromiseRunFn = + std::invocable> && + std::same_as>, void>; + +class Promise { +public: + Promise(jsi::Runtime &runtime, + std::shared_ptr callInvoker, jsi::Value resolver, + jsi::Value rejecter); + + Promise(const Promise &) = delete; + Promise &operator=(const Promise &) = delete; + + void resolve(jsi::Value &&result); + void reject(std::string error); + + /** + Creates a new promise and runs the supplied "run" function that takes this + promise. We use a template for the function type to not use std::function + and be able to bind a lambda. + */ + template + static jsi::Value + createPromise(jsi::Runtime &runtime, + std::shared_ptr callInvoker, Fn &&run) { + // Get Promise ctor from global + auto promiseCtor = + runtime.global().getPropertyAsFunction(runtime, "Promise"); + + auto promiseCallback = jsi::Function::createFromHostFunction( + runtime, jsi::PropNameID::forUtf8(runtime, "PromiseCallback"), 2, + [run = std::move(run), + callInvoker](jsi::Runtime &runtime, const jsi::Value &thisValue, + const jsi::Value *arguments, size_t count) -> jsi::Value { + // Call function + auto promise = std::make_shared( + runtime, callInvoker, arguments[0].asObject(runtime), + arguments[1].asObject(runtime)); + run(promise); + + return jsi::Value::undefined(); + }); + + return promiseCtor.callAsConstructor(runtime, promiseCallback); + } + +private: + jsi::Runtime &runtime; + std::shared_ptr callInvoker; + jsi::Value _resolver; + jsi::Value _rejecter; +}; + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/jsi/RuntimeAwareCache.h b/common/rnexecutorch/jsi/RuntimeAwareCache.h new file mode 100644 index 000000000..dc7c8d0ff --- /dev/null +++ b/common/rnexecutorch/jsi/RuntimeAwareCache.h @@ -0,0 +1,58 @@ +#pragma once +// Adapted from https://github.com/software-mansion/react-native-audio-api + +// Header in jsi/ need to be added like this. See comment in JsiHostObject.h. +#include + +#include +#include +#include +#include + +namespace rnexecutorch { + +using namespace facebook; + +/** + * Provides a way to keep data specific to a jsi::Runtime instance that gets + * cleaned up when that runtime is destroyed. This is necessary because JSI does + * not allow for its associated objects to be retained past the runtime + * lifetime. If an object (e.g. jsi::Values or jsi::Function instances) is kept + * after the runtime is torn down, its destructor (once it is destroyed + * eventually) will result in a crash (JSI objects keep a pointer to memory + * managed by the runtime, accessing that portion of the memory after runtime is + * deleted is the root cause of that crash). + */ +template +class RuntimeAwareCache : public RuntimeLifecycleListener { +public: + void onRuntimeDestroyed(jsi::Runtime *rt) override { + // A runtime has been destroyed, so destroy the related cache. + runtimeCaches_.erase(rt); + } + + ~RuntimeAwareCache() override { + for (auto &cache : runtimeCaches_) { + // remove all `onRuntimeDestroyed` listeners. + RuntimeLifecycleMonitor::removeListener(*cache.first, this); + } + } + + T &get(jsi::Runtime &rt) { + if (runtimeCaches_.count(&rt) == 0) { + // This is the first time this Runtime has been accessed. + // We set up a `onRuntimeDestroyed` listener for it and + // initialize the cache map. + RuntimeLifecycleMonitor::addListener(rt, this); + + T cache; + runtimeCaches_.emplace(&rt, std::move(cache)); + } + return runtimeCaches_.at(&rt); + } + +private: + std::unordered_map runtimeCaches_; +}; + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/jsi/RuntimeLifecycleMonitor.cpp b/common/rnexecutorch/jsi/RuntimeLifecycleMonitor.cpp new file mode 100644 index 000000000..a0d5465ca --- /dev/null +++ b/common/rnexecutorch/jsi/RuntimeLifecycleMonitor.cpp @@ -0,0 +1,53 @@ +#include "RuntimeLifecycleMonitor.h" + +namespace rnexecutorch { + +static std::unordered_map> + listeners; + +struct RuntimeLifecycleMonitorObject : public jsi::HostObject { + jsi::Runtime *rt_; + explicit RuntimeLifecycleMonitorObject(jsi::Runtime *rt) : rt_(rt) {} + ~RuntimeLifecycleMonitorObject() override { + auto listenersSet = listeners.find(rt_); + if (listenersSet != listeners.end()) { + for (auto listener : listenersSet->second) { + listener->onRuntimeDestroyed(rt_); + } + listeners.erase(listenersSet); + } + } +}; + +void RuntimeLifecycleMonitor::addListener(jsi::Runtime &rt, + RuntimeLifecycleListener *listener) { + auto listenersSet = listeners.find(&rt); + if (listenersSet == listeners.end()) { + // We install a global host object in the provided runtime, this way we can + // use that host object destructor to get notified when the runtime is being + // terminated. We use a unique name for the object as it gets saved with the + // runtime's global object. + rt.global().setProperty( + rt, "__rnaudioapi_runtime_lifecycle_monitor", + jsi::Object::createFromHostObject( + rt, std::make_shared(&rt))); + std::unordered_set newSet; + newSet.insert(listener); + listeners.emplace(&rt, std::move(newSet)); + } else { + listenersSet->second.insert(listener); + } +} + +void RuntimeLifecycleMonitor::removeListener( + jsi::Runtime &rt, RuntimeLifecycleListener *listener) { + auto listenersSet = listeners.find(&rt); + if (listenersSet == listeners.end()) { + // nothing to do here + } else { + listenersSet->second.erase(listener); + } +} + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/jsi/RuntimeLifecycleMonitor.h b/common/rnexecutorch/jsi/RuntimeLifecycleMonitor.h new file mode 100644 index 000000000..7d0e88bbb --- /dev/null +++ b/common/rnexecutorch/jsi/RuntimeLifecycleMonitor.h @@ -0,0 +1,35 @@ +#pragma once +// Adapted from https://github.com/software-mansion/react-native-audio-api + +#include +#include +#include +#include +#include + +namespace rnexecutorch { + +using namespace facebook; + +/** + * Listener interface that allows for getting notified when a jsi::Runtime + * instance is destroyed. + */ +struct RuntimeLifecycleListener { + virtual ~RuntimeLifecycleListener() = default; + virtual void onRuntimeDestroyed(jsi::Runtime *) = 0; +}; + +/** + * This class provides an API via static methods for registering and + * unregistering runtime lifecycle listeners. The listeners can be used to + * cleanup any data that references a given jsi::Runtime instance before it gets + * destroyed. + */ +struct RuntimeLifecycleMonitor { + static void addListener(jsi::Runtime &rt, RuntimeLifecycleListener *listener); + static void removeListener(jsi::Runtime &rt, + RuntimeLifecycleListener *listener); +}; + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/models/BaseModel.cpp b/common/rnexecutorch/models/BaseModel.cpp new file mode 100644 index 000000000..bb9073640 --- /dev/null +++ b/common/rnexecutorch/models/BaseModel.cpp @@ -0,0 +1,43 @@ +#include "BaseModel.h" + +#include + +namespace rnexecutorch { + +using namespace facebook; +using ::executorch::extension::Module; +using ::executorch::runtime::Error; + +BaseModel::BaseModel(const std::string &modelSource, + std::shared_ptr callInvoker) + : module(std::make_unique( + modelSource, Module::LoadMode::MmapUseMlockIgnoreErrors)), + callInvoker(callInvoker) { + Error loadError = module->load(); + if (loadError != Error::Ok) { + throw std::runtime_error("Couldn't load the model, error: " + + std::to_string(static_cast(loadError))); + } +} + +std::vector> BaseModel::getInputShape() { + auto method_meta = module->method_meta("forward"); + + if (!method_meta.ok()) { + throw std::runtime_error("Failed to load forward"); + } + std::vector> output; + std::size_t numInputs = method_meta->num_inputs(); + output.reserve(numInputs); + for (std::size_t input = 0; input < numInputs; ++input) { + auto input_meta = method_meta->input_tensor_meta(input); + if (!input_meta.ok()) { + throw std::runtime_error("Failed to load forward input"); + } + auto shape = input_meta->sizes(); + output.emplace_back(std::vector(shape.begin(), shape.end())); + } + return output; +} + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/models/BaseModel.h b/common/rnexecutorch/models/BaseModel.h new file mode 100644 index 000000000..492ae8c04 --- /dev/null +++ b/common/rnexecutorch/models/BaseModel.h @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include +#include +#include + +namespace rnexecutorch { +using namespace facebook; + +class BaseModel { +public: + BaseModel(const std::string &modelSource, + std::shared_ptr callInvoker); + std::vector> getInputShape(); + +protected: + std::unique_ptr module; + // If possible, models should not use the JS runtime to keep JSI internals + // away from logic, however, sometimes this would incur too big of a penalty + // (unnecessary copies instead of working on JS memory). In this case + // CallInvoker can be used to get jsi::Runtime, and use it in a safe manner. + std::shared_ptr callInvoker; +}; +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/models/image_segmentation/Constants.h b/common/rnexecutorch/models/image_segmentation/Constants.h new file mode 100644 index 000000000..a6d69e1c2 --- /dev/null +++ b/common/rnexecutorch/models/image_segmentation/Constants.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +namespace rnexecutorch { +inline constexpr std::array deeplabv3_resnet50_labels = { + "BACKGROUND", "AEROPLANE", "BICYCLE", "BIRD", "BOAT", + "BOTTLE", "BUS", "CAR", "CAT", "CHAIR", + "COW", "DININGTABLE", "DOG", "HORSE", "MOTORBIKE", + "PERSON", "POTTEDPLANT", "SHEEP", "SOFA", "TRAIN", + "TVMONITOR"}; +} \ No newline at end of file diff --git a/common/rnexecutorch/models/image_segmentation/ImageSegmentation.cpp b/common/rnexecutorch/models/image_segmentation/ImageSegmentation.cpp new file mode 100644 index 000000000..f2f595745 --- /dev/null +++ b/common/rnexecutorch/models/image_segmentation/ImageSegmentation.cpp @@ -0,0 +1,186 @@ +#include "ImageSegmentation.h" + +#include + +#include + +#include +#include +#include +#include + +namespace rnexecutorch { + +ImageSegmentation::ImageSegmentation( + const std::string &modelSource, + std::shared_ptr callInvoker) + : BaseModel(modelSource, callInvoker) { + auto inputTensors = getInputShape(); + if (inputTensors.size() == 0) { + throw std::runtime_error("Model seems to not take any input tensors."); + } + std::vector modelInputShape = inputTensors[0]; + if (modelInputShape.size() < 2) { + char errorMessage[100]; + std::snprintf(errorMessage, sizeof(errorMessage), + "Unexpected model input size, expected at least 2 dimentions " + "but got: %zu.", + modelInputShape.size()); + throw std::runtime_error(errorMessage); + } + modelImageSize = cv::Size(modelInputShape[modelInputShape.size() - 1], + modelInputShape[modelInputShape.size() - 2]); + numModelPixels = modelImageSize.area(); +} + +std::shared_ptr +ImageSegmentation::forward(std::string imageSource, + std::set> classesOfInterest, + bool resize) { + auto [inputTensor, originalSize] = preprocess(imageSource); + + auto forwardResult = module->forward(inputTensor); + if (!forwardResult.ok()) { + throw std::runtime_error( + "Failed to forward, error: " + + std::to_string(static_cast(forwardResult.error()))); + } + + return postprocess(forwardResult->at(0).toTensor(), originalSize, + classesOfInterest, resize); +} + +std::pair +ImageSegmentation::preprocess(const std::string &imageSource) { + cv::Mat input = imageprocessing::readImage(imageSource); + cv::Size inputSize = input.size(); + + cv::resize(input, input, modelImageSize); + + std::vector inputVector = imageprocessing::colorMatToVector(input); + return { + executorch::extension::make_tensor_ptr(getInputShape()[0], inputVector), + inputSize}; +} + +std::shared_ptr ImageSegmentation::postprocess( + const Tensor &tensor, cv::Size originalSize, + std::set> classesOfInterest, bool resize) { + + auto dataPtr = static_cast(tensor.const_data_ptr()); + auto resultData = std::span(dataPtr, tensor.numel()); + + // We copy the ET-owned data to jsi array buffers that can be directly + // returned to JS + std::vector> resultClasses; + resultClasses.reserve(numClasses); + for (std::size_t cl = 0; cl < numClasses; ++cl) { + auto classBuffer = + std::make_shared(numModelPixels * sizeof(float)); + resultClasses.push_back(classBuffer); + std::memcpy(classBuffer->data(), &resultData[cl * numModelPixels], + numModelPixels * sizeof(float)); + } + + // Apply softmax per each pixel across all classes + for (std::size_t pixel = 0; pixel < numModelPixels; ++pixel) { + std::vector classValues(numClasses); + for (std::size_t cl = 0; cl < numClasses; ++cl) { + classValues[cl] = + reinterpret_cast(resultClasses[cl]->data())[pixel]; + } + numerical::softmax(classValues); + for (std::size_t cl = 0; cl < numClasses; ++cl) { + reinterpret_cast(resultClasses[cl]->data())[pixel] = + classValues[cl]; + } + } + + // Calculate the maximum class for each pixel + auto argmax = + std::make_shared(numModelPixels * sizeof(int32_t)); + for (std::size_t pixel = 0; pixel < numModelPixels; ++pixel) { + float max = reinterpret_cast(resultClasses[0]->data())[pixel]; + int maxInd = 0; + for (int cl = 1; cl < numClasses; ++cl) { + if (reinterpret_cast(resultClasses[cl]->data())[pixel] > max) { + maxInd = cl; + max = reinterpret_cast(resultClasses[cl]->data())[pixel]; + } + } + reinterpret_cast(argmax->data())[pixel] = maxInd; + } + + auto buffersToReturn = std::make_shared>>(); + for (std::size_t cl = 0; cl < numClasses; ++cl) { + if (classesOfInterest.contains(deeplabv3_resnet50_labels[cl])) { + (*buffersToReturn)[deeplabv3_resnet50_labels[cl]] = resultClasses[cl]; + } + } + + // Resize selected classes and argmax + if (resize) { + cv::Mat argmaxMat(modelImageSize, CV_32SC1, argmax->data()); + cv::resize(argmaxMat, argmaxMat, originalSize, 0, 0, + cv::InterpolationFlags::INTER_NEAREST); + argmax = std::make_shared(originalSize.area() * + sizeof(int32_t)); + std::memcpy(argmax->data(), argmaxMat.data, + originalSize.area() * sizeof(int32_t)); + + for (auto &[label, arrayBuffer] : *buffersToReturn) { + cv::Mat classMat(modelImageSize, CV_32FC1, arrayBuffer->data()); + cv::resize(classMat, classMat, originalSize); + arrayBuffer = std::make_shared(originalSize.area() * + sizeof(float)); + std::memcpy(arrayBuffer->data(), classMat.data, + originalSize.area() * sizeof(float)); + } + } + return populateDictionary(argmax, buffersToReturn); +} + +std::shared_ptr ImageSegmentation::populateDictionary( + std::shared_ptr argmax, + std::shared_ptr>> + classesToOutput) { + // Synchronize the invoked thread to return when the dict is constructed + auto promisePtr = std::make_shared>(); + std::future doneFuture = promisePtr->get_future(); + + std::shared_ptr dictPtr = nullptr; + callInvoker->invokeAsync( + [argmax, classesToOutput, &dictPtr, promisePtr](jsi::Runtime &runtime) { + dictPtr = std::make_shared(runtime); + auto argmaxArrayBuffer = jsi::ArrayBuffer(runtime, argmax); + + auto int32ArrayCtor = + runtime.global().getPropertyAsFunction(runtime, "Int32Array"); + auto int32Array = + int32ArrayCtor.callAsConstructor(runtime, argmaxArrayBuffer) + .getObject(runtime); + dictPtr->setProperty(runtime, "ARGMAX", int32Array); + + for (auto &[classLabel, owningBuffer] : *classesToOutput) { + auto classArrayBuffer = jsi::ArrayBuffer(runtime, owningBuffer); + + auto float32ArrayCtor = + runtime.global().getPropertyAsFunction(runtime, "Float32Array"); + auto float32Array = + float32ArrayCtor.callAsConstructor(runtime, classArrayBuffer) + .getObject(runtime); + + dictPtr->setProperty( + runtime, jsi::String::createFromAscii(runtime, classLabel.data()), + float32Array); + } + promisePtr->set_value(); + }); + + doneFuture.wait(); + return dictPtr; +} + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/models/image_segmentation/ImageSegmentation.h b/common/rnexecutorch/models/image_segmentation/ImageSegmentation.h new file mode 100644 index 000000000..ce919a753 --- /dev/null +++ b/common/rnexecutorch/models/image_segmentation/ImageSegmentation.h @@ -0,0 +1,44 @@ +#pragma once + +#include +#include + +#include +#include +#include + +#include +#include +#include + +namespace rnexecutorch { +using namespace facebook; + +using executorch::aten::Tensor; +using executorch::extension::TensorPtr; + +class ImageSegmentation : public BaseModel { +public: + ImageSegmentation(const std::string &modelSource, + std::shared_ptr callInvoker); + std::shared_ptr + forward(std::string imageSource, + std::set> classesOfInterest, bool resize); + +private: + std::pair preprocess(const std::string &imageSource); + std::shared_ptr + postprocess(const Tensor &tensor, cv::Size originalSize, + std::set> classesOfInterest, + bool resize); + std::shared_ptr populateDictionary( + std::shared_ptr argmax, + std::shared_ptr>> + classesToOutput); + + static constexpr std::size_t numClasses{deeplabv3_resnet50_labels.size()}; + cv::Size modelImageSize; + std::size_t numModelPixels; +}; +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/models/style_transfer/StyleTransfer.cpp b/common/rnexecutorch/models/style_transfer/StyleTransfer.cpp new file mode 100644 index 000000000..7c5234aa8 --- /dev/null +++ b/common/rnexecutorch/models/style_transfer/StyleTransfer.cpp @@ -0,0 +1,68 @@ +#include "StyleTransfer.h" + +#include +#include + +#include + +#include +#include + +namespace rnexecutorch { +using namespace facebook; +using executorch::extension::Module; +using executorch::extension::TensorPtr; +using executorch::runtime::Error; + +StyleTransfer::StyleTransfer(const std::string &modelSource, + std::shared_ptr callInvoker) + : BaseModel(modelSource, callInvoker) { + auto inputTensors = getInputShape(); + if (inputTensors.size() == 0) { + throw std::runtime_error("Model seems to not take any input tensors."); + } + std::vector modelInputShape = inputTensors[0]; + if (modelInputShape.size() < 2) { + char errorMessage[100]; + std::snprintf(errorMessage, sizeof(errorMessage), + "Unexpected model input size, expected at least 2 dimentions " + "but got: %zu.", + modelInputShape.size()); + throw std::runtime_error(errorMessage); + } + modelImageSize = cv::Size(modelInputShape[modelInputShape.size() - 1], + modelInputShape[modelInputShape.size() - 2]); +} + +std::pair +StyleTransfer::preprocess(const std::string &imageSource) { + cv::Mat image = imageprocessing::readImage(imageSource); + auto originalSize = image.size(); + cv::resize(image, image, modelImageSize); + + return {imageprocessing::getTensorFromMatrix(getInputShape()[0], image), + originalSize}; +} + +std::string StyleTransfer::postprocess(const Tensor &tensor, + cv::Size originalSize) { + cv::Mat mat = imageprocessing::getMatrixFromTensor(modelImageSize, tensor); + cv::resize(mat, mat, originalSize); + + return imageprocessing::saveToTempFile(mat); +} + +std::string StyleTransfer::forward(std::string imageSource) { + auto [tensor, originalSize] = preprocess(imageSource); + + auto forwardResult = module->forward(tensor); + if (!forwardResult.ok()) { + throw std::runtime_error( + "Failed to forward, error: " + + std::to_string(static_cast(forwardResult.error()))); + } + + return postprocess(forwardResult->at(0).toTensor(), originalSize); +} + +} // namespace rnexecutorch \ No newline at end of file diff --git a/common/rnexecutorch/models/style_transfer/StyleTransfer.h b/common/rnexecutorch/models/style_transfer/StyleTransfer.h new file mode 100644 index 000000000..809cac804 --- /dev/null +++ b/common/rnexecutorch/models/style_transfer/StyleTransfer.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include + +#include +#include +#include +#include + +#include + +namespace rnexecutorch { +using namespace facebook; +using executorch::aten::Tensor; +using executorch::extension::TensorPtr; + +class StyleTransfer : public BaseModel { +public: + StyleTransfer(const std::string &modelSource, + std::shared_ptr callInvoker); + std::string forward(std::string imageSource); + +private: + std::pair preprocess(const std::string &imageSource); + std::string postprocess(const Tensor &tensor, cv::Size originalSize); + + cv::Size modelImageSize{0, 0}; +}; +} // namespace rnexecutorch diff --git a/docs/docs/benchmarks/_category_.json b/docs/docs/benchmarks/_category_.json index e79033469..001b34959 100644 --- a/docs/docs/benchmarks/_category_.json +++ b/docs/docs/benchmarks/_category_.json @@ -1,6 +1,6 @@ { "label": "Benchmarks", - "position": 8, + "position": 7, "link": { "type": "generated-index" } diff --git a/docs/docs/benchmarks/inference-time.md b/docs/docs/benchmarks/inference-time.md index 25bc5145d..fbae48dd2 100644 --- a/docs/docs/benchmarks/inference-time.md +++ b/docs/docs/benchmarks/inference-time.md @@ -30,23 +30,23 @@ Times presented in the tables are measured as consecutive runs of the model. Ini ## OCR -| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | Samsung Galaxy S21 (XNNPACK) [ms] | -| ----------- | :--------------------------: | :------------------------------: | :------------------------: | :-------------------------------: | :-------------------------------: | -| CRAFT_800 | 2099 | 2227 | ❌ | 2245 | 7108 | -| CRNN_EN_512 | 70 | 252 | ❌ | 54 | 151 | -| CRNN_EN_256 | 39 | 123 | ❌ | 24 | 78 | -| CRNN_EN_128 | 17 | 83 | ❌ | 14 | 39 | +| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | Samsung Galaxy S21 (XNNPACK) [ms] | +| --------------------- | :--------------------------: | :------------------------------: | :------------------------: | :-------------------------------: | :-------------------------------: | +| Detector (CRAFT_800) | 2099 | 2227 | ❌ | 2245 | 7108 | +| Recognizer (CRNN_512) | 70 | 252 | ❌ | 54 | 151 | +| Recognizer (CRNN_256) | 39 | 123 | ❌ | 24 | 78 | +| Recognizer (CRNN_128) | 17 | 83 | ❌ | 14 | 39 | ❌ - Insufficient RAM. ## Vertical OCR -| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | Samsung Galaxy S21 (XNNPACK) [ms] | -| ----------- | :--------------------------: | :------------------------------: | :------------------------: | :-------------------------------: | :-------------------------------: | -| CRAFT_1280 | 5457 | 5833 | ❌ | 6296 | 14053 | -| CRAFT_320 | 1351 | 1460 | ❌ | 1485 | 3101 | -| CRNN_EN_512 | 39 | 123 | ❌ | 24 | 78 | -| CRNN_EN_64 | 10 | 33 | ❌ | 7 | 18 | +| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | Samsung Galaxy S21 (XNNPACK) [ms] | +| --------------------- | :--------------------------: | :------------------------------: | :------------------------: | :-------------------------------: | :-------------------------------: | +| Detector (CRAFT_1280) | 5457 | 5833 | ❌ | 6296 | 14053 | +| Detector (CRAFT_320) | 1351 | 1460 | ❌ | 1485 | 3101 | +| Recognizer (CRNN_512) | 39 | 123 | ❌ | 24 | 78 | +| Recognizer (CRNN_64) | 10 | 33 | ❌ | 7 | 18 | ❌ - Insufficient RAM. @@ -99,3 +99,9 @@ Average time for decoding one token in sequence of 100 tokens, with encoding con | Moonshine-tiny (10s) | 54.24 | 51.74 | 55.07 | 46.31 | 32.41 | | Moonshine-tiny (30s) | 76.38 | 76.19 | 87.37 | 65.61 | 45.04 | | Whisper-tiny (30s) | 128.03 | 113.65 | 141.63 | 89.08 | 84.49 | + +## Text Embeddings + +| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) | OnePlus 12 (XNNPACK) [ms] | +| ---------------- | :--------------------------: | :------------------------------: | :------------------------: | :--------------------------: | :-----------------------: | +| ALL_MINILM_L6_V2 | 105 | 126 | 151 | 165 | 152 | diff --git a/docs/docs/benchmarks/memory-usage.md b/docs/docs/benchmarks/memory-usage.md index 96836fb25..a3f57295b 100644 --- a/docs/docs/benchmarks/memory-usage.md +++ b/docs/docs/benchmarks/memory-usage.md @@ -26,16 +26,16 @@ sidebar_position: 2 ## OCR -| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | -| --------------------------------------------------- | :--------------------: | :----------------: | -| CRAFT_800 + CRNN_EN_512 + CRNN_EN_256 + CRNN_EN_128 | 2100 | 1782 | +| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | +| -------------------------------------------------------------------------------------------- | :--------------------: | :----------------: | +| Detector (CRAFT_800) + Recognizer (CRNN_512) + Recognizer (CRNN_256) + Recognizer (CRNN_128) | 2100 | 1782 | ## Vertical OCR -| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | -| ------------------------------------ | :--------------------: | :----------------: | -| CRAFT_1280 + CRAFT_320 + CRNN_EN_512 | 2770 | 3720 | -| CRAFT_1280 + CRAFT_320 + CRNN_EN_64 | 1770 | 2740 | +| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | +| -------------------------------------------------------------------- | :--------------------: | :----------------: | +| Detector (CRAFT_1280) + Detector (CRAFT_320) + Recognizer (CRNN_512) | 2770 | 3720 | +| Detector(CRAFT_1280) + Detector(CRAFT_320) + Recognizer (CRNN_64) | 1770 | 2740 | ## LLMs @@ -54,3 +54,9 @@ sidebar_position: 2 | -------------- | :--------------------: | :----------------: | | WHISPER_TINY | 900 | 600 | | MOONSHINE_TINY | 650 | 560 | + +## Text Embeddings + +| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | +| ---------------- | :--------------------: | :----------------: | +| ALL_MINILM_L6_V2 | 140 | 64 | diff --git a/docs/docs/benchmarks/model-size.md b/docs/docs/benchmarks/model-size.md index 0b65f88f7..6b2206c67 100644 --- a/docs/docs/benchmarks/model-size.md +++ b/docs/docs/benchmarks/model-size.md @@ -26,21 +26,25 @@ sidebar_position: 1 ## OCR -| Model | XNNPACK [MB] | -| ----------- | :----------: | -| CRAFT_800 | 83.1 | -| CRNN_EN_512 | 547 | -| CRNN_EN_256 | 277 | -| CRNN_EN_128 | 142 | +| Model | XNNPACK [MB] | +| --------------------- | :----------: | +| Detector (CRAFT_800) | 83.1 | +| Recognizer (CRNN_512) | 15 - 18\* | +| Recognizer (CRNN_256) | 16 - 18\* | +| Recognizer (CRNN_128) | 17 - 19\* | + +\* - The model weights vary depending on the language. ## Vertical OCR -| Model | XNNPACK [MB] | -| ----------- | :----------: | -| CRAFT_1280 | 83.1 | -| CRAFT_320 | 83.1 | -| CRNN_EN_512 | 277 | -| CRNN_EN_64 | 74.3 | +| Model | XNNPACK [MB] | +| ------------------------ | :----------: | +| Detector (CRAFT_1280) | 83.1 | +| Detector (CRAFT_320) | 83.1 | +| Recognizer (CRNN_EN_512) | 15 - 18\* | +| Recognizer (CRNN_EN_64) | 15 - 16\* | + +\* - The model weights vary depending on the language. ## LLMs @@ -59,3 +63,9 @@ sidebar_position: 1 | -------------- | :----------: | | WHISPER_TINY | 231.0 | | MOONSHINE_TINY | 148.9 | + +## Text Embeddings + +| Model | XNNPACK [MB] | +| ---------------- | :----------: | +| ALL_MINILM_L6_V2 | 91 | diff --git a/docs/docs/computer-vision/_category_.json b/docs/docs/computer-vision/_category_.json index 1a78d5e75..5aa6c0263 100644 --- a/docs/docs/computer-vision/_category_.json +++ b/docs/docs/computer-vision/_category_.json @@ -1,6 +1,6 @@ { "label": "Computer Vision", - "position": 4, + "position": 3, "link": { "type": "generated-index" } diff --git a/docs/docs/computer-vision/useClassification.md b/docs/docs/computer-vision/useClassification.md index 0ad5a1179..f383f4100 100644 --- a/docs/docs/computer-vision/useClassification.md +++ b/docs/docs/computer-vision/useClassification.md @@ -10,7 +10,7 @@ Usually, the class with the highest probability is the one that is assigned to a ::: :::caution -It is recommended to use models provided by us, which are available at our [Hugging Face repository](https://huggingface.co/software-mansion/react-native-executorch-efficientnet-v2-s). You can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library +It is recommended to use models provided by us, which are available at our [Hugging Face repository](https://huggingface.co/software-mansion/react-native-executorch-efficientnet-v2-s). You can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library. ::: ## Reference diff --git a/docs/docs/computer-vision/useImageSegmentation.md b/docs/docs/computer-vision/useImageSegmentation.md new file mode 100644 index 000000000..657cdaacd --- /dev/null +++ b/docs/docs/computer-vision/useImageSegmentation.md @@ -0,0 +1,117 @@ +--- +title: useImageSegmentation +sidebar_position: 2 +--- + +Semantic image segmentation, akin to image classification, tries to assign the content of the image to one of the predefined classes. However, in case of segmentation this classification is done on a per-pixel basis, so as the result the model provides an image-sized array of scores for each of the classes. You can then use this information to detect objects on a per-pixel basis. React Native ExecuTorch offers a dedicated hook `useImageSegmentation` for this task. + +:::caution +It is recommended to use models provided by us which are available at our [Hugging Face repository](https://huggingface.co/software-mansion/react-native-executorch-style-transfer-candy), you can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library. +::: + +## Reference + +```typescript +import { + useImageSegmentation, + DEEPLAB_V3_RESNET50, +} from 'react-native-executorch'; + +const model = useImageSegmentation({ + modelSource: DEEPLAB_V3_RESNET50, +}); + +const imageUri = 'file::///Users/.../cute_cat.png'; + +try { + const outputDict = await model.forward(imageUri); +} catch (error) { + console.error(error); +} +``` + +### Arguments + +**`modelSource`** +A string that specifies the location of the model binary. For more information, take a look at [loading models](../fundamentals/loading-models.md) page. + +### Returns + +| Field | Type | Description | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `forward` | `(input: string, classesOfInterest?: DeeplabLabel[], resize?: boolean) => Promise<{[key in DeeplabLabel]?: number[]}>` | Executes the model's forward pass, where:
\* `input` can be a fetchable resource or a Base64-encoded string.
\* `classesOfInterest` is an optional list of `DeeplabLabel` used to indicate additional arrays of probabilities to output (see section "Running the model"). The default is an empty list.
\* `resize` is an optional boolean to indicate whether the output should be resized to the original image dimensions, or left in the size of the model (see section "Running the model"). The default is `false`.

The return is a dictionary containing:
\* for the key `DeeplabLabel.ARGMAX` an array of integers corresponding to the most probable class for each pixel
\* an array of floats for each class from `classesOfInterest` corresponding to the probabilities for this class. | +| `error` | string | null | Contains the error message if the model failed to load. | +| `isGenerating` | `boolean` | Indicates whether the model is currently processing an inference. | +| `isReady` | `boolean` | Indicates whether the model has successfully loaded and is ready for inference. | +| `downloadProgress` | `number` | Represents the download progress as a value between 0 and 1. | + +## Running the model + +To run the model, you can use the `forward` method. It accepts three arguments: a required image, an optional list of classes, and an optional flag whether to resize the output to the original dimensions. + +- The image can be a remote URL, a local file URI, or a base64-encoded image. +- The `classesOfInterest` list contains classes for which to output the full results. By default the list is empty, and only the most probable classes are returned (essentially an arg max for each pixel). Look at [`DeeplabLabel`](http://github.com/software-mansion/react-native-executorch/blob/main/src/types/image_segmentation.ts) enum for possible classes. +- The `resize` flag says whether the output will be rescaled back to the size of the image you put in. The default is `false`. The model runs inference on a scaled (probably smaller) version of your image (224x224 for `DEEPLAB_V3_RESNET50`). If you choose to resize, the output will be `number[]` of size `width * height` of your original image. + +:::caution +Setting `resize` to true will make `forward` slower. +::: + +`forward` returns a promise which can resolve either to an error or a dictionary containing number arrays with size depending on `resize`: + +- For the key `DeeplabLabel.ARGMAX` the array contains for each pixel an integer corresponding to the class with the highest probability. +- For every other key from `DeeplabLabel`, if the label was included in `classesOfInterest` the dictionary will contain an array of floats corresponding to the probability of this class for every pixel. + +## Example + +```typescript +function App(){ + const model = useImageSegmentation( + modelSource: DEEPLAB_V3_RESNET50, + ); + + ... + const imageUri = 'file::///Users/.../cute_cat.png'; + + try{ + const outputDict = await model.forward(imageUri, [DeeplabLabel.CAT], true); + }catch(error){ + console.error(error); + } + ... +} +``` + +## Supported models + +| Model | Number of classes | Class list | +| ------------------------------------------------------------------------------------------------------------------------------ | ----------------- | -------------------------------------------------------------------------------------------------------------------- | +| [deeplabv3_resnet50](https://pytorch.org/vision/0.20/models/generated/torchvision.models.segmentation.deeplabv3_resnet50.html) | 21 | [DeeplabLabel](http://github.com/software-mansion/react-native-executorch/blob/main/src/types/image_segmentation.ts) | + +## Benchmarks + +### Model size + +| Model | XNNPACK [MB] | +| ----------------- | ------------ | +| DEELABV3_RESNET50 | 168 | + +### Memory usage + +:::warning warning +Data presented in the following sections is based on inference with non-resized output. When resize is enabled, expect higher memory usage and inference time with higher resolutions. +::: + +| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | +| ----------------- | ---------------------- | ------------------ | +| DEELABV3_RESNET50 | 930 | 660 | + +### Inference time + +:::warning warning +Times presented in the tables are measured as consecutive runs of the model. Initial run times may be up to 2x longer due to model loading and initialization. +::: + +| Model | iPhone 16 Pro (Core ML) [ms] | iPhone 14 Pro Max (Core ML) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | +| ----------------- | ---------------------------- | -------------------------------- | --------------------------------- | +| DEELABV3_RESNET50 | 1000 | 670 | 700 | diff --git a/docs/docs/computer-vision/useOCR.md b/docs/docs/computer-vision/useOCR.md index 848a30f86..f9eca7f76 100644 --- a/docs/docs/computer-vision/useOCR.md +++ b/docs/docs/computer-vision/useOCR.md @@ -51,7 +51,71 @@ interface RecognizerSources { recognizerSmall: string | number; } -type OCRLanguage = 'en'; +type OCRLanguage = + | 'abq' + | 'ady' + | 'af' + | 'ava' + | 'az' + | 'be' + | 'bg' + | 'bs' + | 'ch_sim' + | 'che' + | 'cs' + | 'cy' + | 'da' + | 'dar' + | 'de' + | 'en' + | 'es' + | 'et' + | 'fr' + | 'ga' + | 'hr' + | 'hu' + | 'id' + | 'inh' + | 'ic' + | 'it' + | 'ja' + | 'kbd' + | 'kn' + | 'ko' + | 'ku' + | 'la' + | 'lbe' + | 'lez' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'ms' + | 'mt' + | 'nl' + | 'no' + | 'oc' + | 'pi' + | 'pl' + | 'pt' + | 'ro' + | 'ru' + | 'rs_cyrillic' + | 'rs_latin' + | 'sk' + | 'sl' + | 'sq' + | 'sv' + | 'sw' + | 'tab' + | 'te' + | 'th' + | 'tjk' + | 'tl' + | 'tr' + | 'uk' + | 'uz' + | 'vi'; interface Point { x: number; @@ -151,31 +215,104 @@ function App() { } ``` +## Supported languages + +| Language | Code Name | +| :----------------: | :---------: | +| Abaza | abq | +| Adyghe | ady | +| Africans | af | +| Avar | ava | +| Azerbaijani | az | +| Belarusian | be | +| Bulgarian | bg | +| Bosnian | bs | +| Simplified Chinese | ch_sim | +| Chechen | che | +| Chech | cs | +| Welsh | cy | +| Danish | da | +| Dargwa | dar | +| German | de | +| English | en | +| Spanish | es | +| Estonian | et | +| French | fr | +| Irish | ga | +| Croatian | hr | +| Hungarian | hu | +| Indonesian | id | +| Ingush | inh | +| Icelandic | ic | +| Italian | it | +| Japanese | ja | +| Karbadian | kbd | +| Kannada | kn | +| Korean | ko | +| Kurdish | ku | +| Latin | la | +| Lak | lbe | +| Lezghian | lez | +| Lithuanian | lt | +| Latvian | lv | +| Maori | mi | +| Mongolian | mn | +| Malay | ms | +| Maltese | mt | +| Dutch | nl | +| Norwegian | no | +| Occitan | oc | +| Pali | pi | +| Polish | pl | +| Portuguese | pt | +| Romanian | ro | +| Russian | ru | +| Serbian (Cyrillic) | rs_cyrillic | +| Serbian (Latin) | rs_latin | +| Slovak | sk | +| Slovenian | sl | +| Albanian | sq | +| Swedish | sv | +| Swahili | sw | +| Tabassaran | tab | +| Telugu | te | +| Thai | th | +| Tajik | tjk | +| Tagalog | tl | +| Turkish | tr | +| Ukrainian | uk | +| Uzbek | uz | +| Vietnamese | vi | + ## Supported models -| Model | Type | -| ------------------------------------------------------ | :--------: | -| [CRAFT_800](https://github.com/clovaai/CRAFT-pytorch) | Detector | -| [CRNN_EN_512](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | -| [CRNN_EN_256](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | -| [CRNN_EN_128](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | +| Model | Type | +| ------------------------------------------------------- | :--------: | +| [CRAFT_800\*](https://github.com/clovaai/CRAFT-pytorch) | Detector | +| [CRNN_512\*](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | +| [CRNN_256\*](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | +| [CRNN_128\*](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | + +\* - The number following the underscore (\_) indicates the input image width used during model export. ## Benchmarks ### Model size -| Model | XNNPACK [MB] | -| ----------- | :----------: | -| CRAFT_800 | 83.1 | -| CRNN_EN_512 | 547 | -| CRNN_EN_256 | 277 | -| CRNN_EN_128 | 142 | +| Model | XNNPACK [MB] | +| --------------------- | :----------: | +| Detector (CRAFT_800) | 83.1 | +| Recognizer (CRNN_512) | 15 - 18\* | +| Recognizer (CRNN_256) | 16 - 18\* | +| Recognizer (CRNN_128) | 17 - 19\* | + +\* - The model weights vary depending on the language. ### Memory usage -| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | -| --------------------------------------------------- | :--------------------: | :----------------: | -| CRAFT_800 + CRNN_EN_512 + CRNN_EN_256 + CRNN_EN_128 | 2100 | 1782 | +| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | +| -------------------------------------------------------------------------------------------- | :--------------------: | :----------------: | +| Detector (CRAFT_800) + Recognizer (CRNN_512) + Recognizer (CRNN_256) + Recognizer (CRNN_128) | 2100 | 1782 | ### Inference time @@ -183,11 +320,11 @@ function App() { Times presented in the tables are measured as consecutive runs of the model. Initial run times may be up to 2x longer due to model loading and initialization. ::: -| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | Samsung Galaxy S21 (XNNPACK) [ms] | -| ----------- | :--------------------------: | :------------------------------: | :------------------------: | :-------------------------------: | :-------------------------------: | -| CRAFT_800 | 2099 | 2227 | ❌ | 2245 | 7108 | -| CRNN_EN_512 | 70 | 252 | ❌ | 54 | 151 | -| CRNN_EN_256 | 39 | 123 | ❌ | 24 | 78 | -| CRNN_EN_128 | 17 | 83 | ❌ | 14 | 39 | +| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | Samsung Galaxy S21 (XNNPACK) [ms] | +| --------------------- | :--------------------------: | :------------------------------: | :------------------------: | :-------------------------------: | :-------------------------------: | +| Detector (CRAFT_800) | 2099 | 2227 | ❌ | 2245 | 7108 | +| Recognizer (CRNN_512) | 70 | 252 | ❌ | 54 | 151 | +| Recognizer (CRNN_256) | 39 | 123 | ❌ | 24 | 78 | +| Recognizer (CRNN_128) | 17 | 83 | ❌ | 14 | 39 | ❌ - Insufficient RAM. diff --git a/docs/docs/computer-vision/useStyleTransfer.md b/docs/docs/computer-vision/useStyleTransfer.md index 989581e10..8ccad4e0e 100644 --- a/docs/docs/computer-vision/useStyleTransfer.md +++ b/docs/docs/computer-vision/useStyleTransfer.md @@ -6,7 +6,7 @@ sidebar_position: 2 Style transfer is a technique used in computer graphics and machine learning where the visual style of one image is applied to the content of another. This is achieved using algorithms that manipulate data from both images, typically with the aid of a neural network. The result is a new image that combines the artistic elements of one picture with the structural details of another, effectively merging art with traditional imagery. React Native ExecuTorch offers a dedicated hook `useStyleTransfer`, for this task. However before you start you'll need to obtain ExecuTorch-compatible model binary. :::caution -It is recommended to use models provided by us which are available at our [Hugging Face repository](https://huggingface.co/software-mansion/react-native-executorch-style-transfer-candy), you can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library +It is recommended to use models provided by us which are available at our [Hugging Face repository](https://huggingface.co/software-mansion/react-native-executorch-style-transfer-candy), you can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library. ::: ## Reference diff --git a/docs/docs/computer-vision/useVerticalOCR.md b/docs/docs/computer-vision/useVerticalOCR.md index 3bcfe642f..f492347b3 100644 --- a/docs/docs/computer-vision/useVerticalOCR.md +++ b/docs/docs/computer-vision/useVerticalOCR.md @@ -62,7 +62,71 @@ interface RecognizerSources { recognizerSmall: string | number; } -type OCRLanguage = 'en'; +type OCRLanguage = + | 'abq' + | 'ady' + | 'af' + | 'ava' + | 'az' + | 'be' + | 'bg' + | 'bs' + | 'ch_sim' + | 'che' + | 'cs' + | 'cy' + | 'da' + | 'dar' + | 'de' + | 'en' + | 'es' + | 'et' + | 'fr' + | 'ga' + | 'hr' + | 'hu' + | 'id' + | 'inh' + | 'ic' + | 'it' + | 'ja' + | 'kbd' + | 'kn' + | 'ko' + | 'ku' + | 'la' + | 'lbe' + | 'lez' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'ms' + | 'mt' + | 'nl' + | 'no' + | 'oc' + | 'pi' + | 'pl' + | 'pt' + | 'ro' + | 'ru' + | 'rs_cyrillic' + | 'rs_latin' + | 'sk' + | 'sl' + | 'sq' + | 'sv' + | 'sw' + | 'tab' + | 'te' + | 'th' + | 'tjk' + | 'tl' + | 'tr' + | 'uk' + | 'uz' + | 'vi'; interface Point { x: number; @@ -132,7 +196,7 @@ interface OCRDetection { ``` The `bbox` property contains information about the bounding box of detected text regions. It is represented as four points, which are corners of detected bounding box. -The `text` property contains the text recognized withinh detected text region. The `score` represents the confidence score of the recognized text. +The `text` property contains the text recognized within detected text region. The `score` represents the confidence score of the recognized text. ## Example @@ -171,32 +235,105 @@ function App() { } ``` +## Supported languages + +| Language | Code Name | +| :----------------: | :---------: | +| Abaza | abq | +| Adyghe | ady | +| Africans | af | +| Avar | ava | +| Azerbaijani | az | +| Belarusian | be | +| Bulgarian | bg | +| Bosnian | bs | +| Simplified Chinese | ch_sim | +| Chechen | che | +| Chech | cs | +| Welsh | cy | +| Danish | da | +| Dargwa | dar | +| German | de | +| English | en | +| Spanish | es | +| Estonian | et | +| French | fr | +| Irish | ga | +| Croatian | hr | +| Hungarian | hu | +| Indonesian | id | +| Ingush | inh | +| Icelandic | ic | +| Italian | it | +| Japanese | ja | +| Karbadian | kbd | +| Kannada | kn | +| Korean | ko | +| Kurdish | ku | +| Latin | la | +| Lak | lbe | +| Lezghian | lez | +| Lithuanian | lt | +| Latvian | lv | +| Maori | mi | +| Mongolian | mn | +| Malay | ms | +| Maltese | mt | +| Dutch | nl | +| Norwegian | no | +| Occitan | oc | +| Pali | pi | +| Polish | pl | +| Portuguese | pt | +| Romanian | ro | +| Russian | ru | +| Serbian (Cyrillic) | rs_cyrillic | +| Serbian (Latin) | rs_latin | +| Slovak | sk | +| Slovenian | sl | +| Albanian | sq | +| Swedish | sv | +| Swahili | sw | +| Tabassaran | tab | +| Telugu | te | +| Thai | th | +| Tajik | tjk | +| Tagalog | tl | +| Turkish | tr | +| Ukrainian | uk | +| Uzbek | uz | +| Vietnamese | vi | + ## Supported models | Model | Type | | -------------------------------------------------------- | ---------- | -| [CRAFT_1280](https://github.com/clovaai/CRAFT-pytorch) | Detector | -| [CRAFT_NARROW](https://github.com/clovaai/CRAFT-pytorch) | Detector | -| [CRNN_EN_512](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | -| [CRNN_EN_64](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | +| [CRAFT_1280\*](https://github.com/clovaai/CRAFT-pytorch) | Detector | +| [CRAFT_320\*](https://github.com/clovaai/CRAFT-pytorch) | Detector | +| [CRNN_512\*](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | +| [CRNN_64\*](https://www.jaided.ai/easyocr/modelhub/) | Recognizer | + +\* - The number following the underscore (\_) indicates the input image width used during model export. ## Benchmarks ### Model size -| Model | XNNPACK [MB] | -| ----------- | :----------: | -| CRAFT_1280 | 83.1 | -| CRAFT_320 | 83.1 | -| CRNN_EN_512 | 277 | -| CRNN_EN_64 | 74.3 | +| Model | XNNPACK [MB] | +| --------------------- | :----------: | +| Detector (CRAFT_1280) | 83.1 | +| Detector (CRAFT_320) | 83.1 | +| Recognizer (CRNN_512) | 15 - 18\* | +| Recognizer (CRNN_64) | 15 - 16\* | + +\* - The model weights vary depending on the language. ### Memory usage -| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | -| ------------------------------------ | :--------------------: | :----------------: | -| CRAFT_1280 + CRAFT_320 + CRNN_EN_512 | 2770 | 3720 | -| CRAFT_1280 + CRAFT_320 + CRNN_EN_64 | 1770 | 2740 | +| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | +| -------------------------------------------------------------------- | :--------------------: | :----------------: | +| Detector (CRAFT_1280) + Detector (CRAFT_320) + Recognizer (CRNN_512) | 2770 | 3720 | +| Detector(CRAFT_1280) + Detector(CRAFT_320) + Recognizer (CRNN_64) | 1770 | 2740 | ### Inference time @@ -204,11 +341,11 @@ function App() { Times presented in the tables are measured as consecutive runs of the model. Initial run times may be up to 2x longer due to model loading and initialization. ::: -| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | Samsung Galaxy S21 (XNNPACK) [ms] | -| ----------- | :--------------------------: | :------------------------------: | :------------------------: | :-------------------------------: | :-------------------------------: | -| CRAFT_1280 | 5457 | 5833 | ❌ | 6296 | 14053 | -| CRAFT_320 | 1351 | 1460 | ❌ | 1485 | 3101 | -| CRNN_EN_512 | 39 | 123 | ❌ | 24 | 78 | -| CRNN_EN_64 | 10 | 33 | ❌ | 7 | 18 | +| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | Samsung Galaxy S21 (XNNPACK) [ms] | +| --------------------- | :--------------------------: | :------------------------------: | :------------------------: | :-------------------------------: | :-------------------------------: | +| Detector (CRAFT_1280) | 5457 | 5833 | ❌ | 6296 | 14053 | +| Detector (CRAFT_320) | 1351 | 1460 | ❌ | 1485 | 3101 | +| Recognizer (CRNN_512) | 39 | 123 | ❌ | 24 | 78 | +| Recognizer (CRNN_64) | 10 | 33 | ❌ | 7 | 18 | ❌ - Insufficient RAM. diff --git a/docs/docs/hookless-api/_category_.json b/docs/docs/executorch-bindings/_category_.json similarity index 66% rename from docs/docs/hookless-api/_category_.json rename to docs/docs/executorch-bindings/_category_.json index 6c0a89084..8654a4251 100644 --- a/docs/docs/hookless-api/_category_.json +++ b/docs/docs/executorch-bindings/_category_.json @@ -1,5 +1,5 @@ { - "label": "Hookless API", + "label": "ExecuTorch Bindings", "position": 5, "link": { "type": "generated-index" diff --git a/docs/docs/module-api/executorch-bindings.md b/docs/docs/executorch-bindings/useExecutorchModule.md similarity index 99% rename from docs/docs/module-api/executorch-bindings.md rename to docs/docs/executorch-bindings/useExecutorchModule.md index 3aa26b59f..6b47892ac 100644 --- a/docs/docs/module-api/executorch-bindings.md +++ b/docs/docs/executorch-bindings/useExecutorchModule.md @@ -1,5 +1,5 @@ --- -title: ExecuTorch Bindings +title: useExecutorchModule sidebar_position: 1 --- @@ -9,7 +9,7 @@ ExecuTorch bindings provide streamlined interface to access the [Module API](htt These bindings are primarily intended for custom model integration where no dedicated hook exists. If you are considering using a provided model, first verify whether a dedicated hook is available. Dedicated hooks simplify the implementation process by managing necessary pre and post-processing automatically. Utilizing these can save you effort and reduce complexity, ensuring you do not implement additional handling that is already covered. ::: -## Intializing ExecuTorch Module +## Initializing ExecuTorch Module You can initialize the ExecuTorch module in your JavaScript application using the `useExecutorchModule` hook. This hook facilitates the loading of models from the specified source and prepares them for use. diff --git a/docs/docs/utils/_category_.json b/docs/docs/faq/_category_.json similarity index 77% rename from docs/docs/utils/_category_.json rename to docs/docs/faq/_category_.json index fe7e29fe8..5d82736aa 100644 --- a/docs/docs/utils/_category_.json +++ b/docs/docs/faq/_category_.json @@ -1,5 +1,5 @@ { - "label": "Utils", + "label": "FAQ", "position": 7, "link": { "type": "generated-index" diff --git a/docs/docs/faq/frequently-asked-questions.md b/docs/docs/faq/frequently-asked-questions.md new file mode 100644 index 000000000..d5780d60b --- /dev/null +++ b/docs/docs/faq/frequently-asked-questions.md @@ -0,0 +1,40 @@ +--- +title: Frequently asked questions +sidebar_position: 1 +--- + +This section is meant to answer some common community inquiries, especially regarding the ExecuTorch runtime or adding your own models. If you can't see an answer to your question, feel free to open up a [discussion](https://github.com/software-mansion/react-native-executorch/discussions/new/choose). + +### What models are supported? + +Each hook documentation subpage (useClassification, useLLM, etc.) contains a supported models section, which lists the models that are runnable within the library with close to no setup. For running your custom models, refer to `ExecuTorchModule` or `useExecuTorchModule`. + +### How can I run my own AI model? + +To run your own model, you need to directly access the underlying [ExecuTorch Module API](https://pytorch.org/executorch/stable/extension-module.html). We provide an experimental [React hook](../executorch-bindings/useExecutorchModule.md) along with a [TypeScript alternative](../typescript-api/ExecutorchModule.md), which serve as a way to use the aforementioned API without the need of diving into native code. In order to get a model in a format runnable by the runtime, you'll need to get your hands dirty with some ExecuTorch knowledge. For more guides on exporting models, please refer to the [ExecuTorch tutorials](https://pytorch.org/executorch/stable/tutorials/export-to-executorch-tutorial.html). Once you obtain your model in a `.pte` format, you can run it with `useExecuTorchModule` and `ExecuTorchModule`. + +### Can you do function calling with useLLM? + +If your model supports tool calling (i.e. its chat template can process tools) you can use the method explained in [useLLM page](../natural-language-processing/useLLM.md#tool-calling). + +If your model doesn't support it, you can still work around it using context. For details, refer to [this comment](https://github.com/software-mansion/react-native-executorch/issues/173#issuecomment-2775082278). + +### Can I use React Native ExecuTorch in bare React Native apps? + +To use the library, you need to install Expo Modules first. For a setup guide, refer to [this tutorial](https://docs.expo.dev/bare/installing-expo-modules/). This is because we use Expo File System under the hood to download and manage the model binaries. + +### Do you support the old architecture? + +The old architecture is not supported and we're currently not planning to add support. + +### Can I run GGUF models using the library? + +No, as of now ExecuTorch runtime doesn't provide a reliable way to use GGUF models, hence it is not possible. + +### Are the models leveraging GPU acceleration? + +While it is possible to run some models using Core ML on iOS, which is a backend that utilizes CPU, GPU and ANE, we currently don't have many models exported to Core ML. For Android, the current state of GPU acceleration is pretty limited. As of now, there are attempts of running the models using a Vulkan backend. However the operator support is very limited meaning that the resulting performance is often inferior to XNNPACK. Hence, most of the models use XNNPACK, which is a highly optimized and mature CPU backend that runs on both Android and iOS. + +### Does this library support XNNPACK and Core ML? + +Yes, all of the backends are linked, therefore the only thing that needs to be done on your end is to export the model with the backend that you're interested in using. diff --git a/docs/docs/fundamentals/loading-models.md b/docs/docs/fundamentals/loading-models.md index 5c56d7912..ccf4f7759 100644 --- a/docs/docs/fundamentals/loading-models.md +++ b/docs/docs/fundamentals/loading-models.md @@ -1,6 +1,6 @@ --- title: Loading models -sidebar_position: 1 +sidebar_position: 2 --- There are three different methods available for loading model files, depending on their size and location. diff --git a/docs/docs/hookless-api/LLMModule.md b/docs/docs/hookless-api/LLMModule.md deleted file mode 100644 index 037b151bf..000000000 --- a/docs/docs/hookless-api/LLMModule.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: LLMModule -sidebar_position: 3 ---- - -Hookless implementation of the [useLLM](../llms/useLLM.md) hook. - -## Reference - -```typescript -import { - LLMModule, - LLAMA3_2_1B_QLORA, - LLAMA3_2_1B_TOKENIZER, -} from 'react-native-executorch'; - -// Listening for download progress -LLMModule.onDownloadProgress((progress) => { - console.log(progress); -}); - -// Loading the model -await LLMModule.load(LLAMA3_2_1B_QLORA, LLAMA3_2_1B_TOKENIZER); - -// Listening for token -LLMModule.onToken((token) => { - console.log(token); -}); - -// Running the model -LLMModule.generate('Hello, World!'); - -// Interrupting the model -LLMModule.interrupt(); - -// Deleting the model from memory -LLMModule.delete(); -``` - -### Methods - -| Method | Type | Description | -| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | -| `load` | `LLMModule.load(modelSource: ResourceSource, tokenizerSource: ResourceSource, systemPrompt?: string, messageHistory?: MessageType[], contextWindowLength?: number): Promise` | Loads the model. Checkout the [loading the model](#loading-the-model) section for details. | -| `onDownloadProgress` | `(callback: (downloadProgress: number) => void): any` | Subscribe to the download progress event. | -| `generate` | `(input: string): Promise` | Method to start generating a response with the given input string. | -| `onToken` | (callback: (data: string | undefined) => void): any | Subscribe to the token generation event. | -| `interrupt` | `(): void` | Method to interrupt the current inference | -| `delete` | `(): void` | Method to delete the model from memory. | - -
-Type definitions - -```typescript -type ResourceSource = string | number; - -interface MessageType { - role: 'user' | 'assistant'; - content: string; -} -``` - -
- -## Loading the model - -To load the model, use the `load` method. It accepts: - -- `modelSource` - A string that specifies the location of the model binary. For more information, take a look at [loading models](../fundamentals/loading-models.md) page. -- `tokenizerSource` - URL to the binary file which contains the tokenizer -- `systemPrompt` - Often used to tell the model what is its purpose, for example - "Be a helpful translator" -- `messageHistory` - An array of `MessageType` objects that represent the conversation history. This can be used to provide context to the model. -- `contextWindowLength` - The number of messages from the current conversation that the model will use to generate a response. The higher the number, the more context the model will have. Keep in mind that using larger context windows will result in longer inference time and higher memory usage. - -This method returns a promise, which can resolve to an error or void. - -## Listening for download progress - -To subscribe to the download progress event, you can use the `onDownloadProgress` method. It accepts a callback function that will be called whenever the download progress changes. - -## Running the model - -To run the model, you can use the `generate` method. It accepts one argument, which is the input string. The method returns a promise, which can resolve to an error or void. - -## Listening for token - -To subscribe to the token event, you can use the `onToken` method. It accepts a callback function that will be called whenever a token is generated. - -## Interrupting the model - -In order to interrupt the model, you can use the `interrupt` method. - -## Deleting the model from memory - -To delete the model from memory, you can use the `delete` method. diff --git a/docs/docs/llms/exporting-llama.md b/docs/docs/llms/exporting-llama.md deleted file mode 100644 index 28b3ceb99..000000000 --- a/docs/docs/llms/exporting-llama.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: Exporting Llama -sidebar_position: 2 ---- - -In order to make the process of export as simple as possible for you, we created a script that runs a Docker container and exports the model. - -## Steps to export Llama - -### 1. Create an account - -Get a [HuggingFace](https://huggingface.co/) account. This will allow you to download needed files. You can also use the [official Llama website](https://www.llama.com/llama-downloads/). - -### 2. Select a model - -Pick the model that suits your needs. Before you download it, you'll need to accept a license. For best performance, we recommend using Spin-Quant or QLoRA versions of the model: - -- [Llama 3.2 3B](https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct/tree/main/original) -- [Llama 3.2 1B](https://huggingface.co/meta-llama/Llama-3.2-1B-Instruct/tree/main/original) -- [Llama 3.2 3B Spin-Quant](https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct-SpinQuant_INT4_EO8/tree/main) -- [Llama 3.2 1B Spin-Quant](https://huggingface.co/meta-llama/Llama-3.2-1B-Instruct-SpinQuant_INT4_EO8/tree/main) -- [Llama 3.2 3B QLoRA](https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct-QLORA_INT4_EO8/tree/main) -- [Llama 3.2 1B QLoRA](https://huggingface.co/meta-llama/Llama-3.2-1B-Instruct-QLORA_INT4_EO8/tree/main) - -### 3. Download files - -Download the `consolidated.00.pth`, `params.json` and `tokenizer.model` files. If you can't see them, make sure to check the `original` directory. - -### 4. Rename the tokenizer file - -Rename the `tokenizer.model` file to `tokenizer.bin` as required by the library: - -```bash -mv tokenizer.model tokenizer.bin -``` - -### 5. Run the export script - -Navigate to the `llama_export` directory and run the following command: - -```bash -./build_llama_binary.sh --model-path /path/to/consolidated.00.pth --params-path /path/to/params.json -``` - -The script will pull a Docker image from Docker Hub, and then run it to export the model. By default the output (llama3_2.pte file) will be saved in the `llama-export/outputs` directory. However, you can override that behavior with the `--output-path [path]` flag. - -:::note -This Docker image was tested on MacOS with ARM chip. This might not work in other environments. -::: diff --git a/docs/docs/llms/useLLM.md b/docs/docs/llms/useLLM.md deleted file mode 100644 index 822449c5f..000000000 --- a/docs/docs/llms/useLLM.md +++ /dev/null @@ -1,198 +0,0 @@ ---- -title: useLLM -sidebar_position: 1 -keywords: - [ - llm, - large language model, - llama, - llama 3, - react native, - executorch, - ai, - machine learning, - on-device, - mobile ai, - inference, - text generation, - ] -description: "Learn how to use Llama models in your React Native applications with React Native ExecuTorch's useLLM hook." ---- - -React Native ExecuTorch supports Llama 3.2 models, including quantized versions. Before getting started, you’ll need to obtain the .pte binary—a serialized model—and the tokenizer. There are various ways to accomplish this: - -- For your convienience, it's best if you use models exported by us, you can get them from our [HuggingFace repository](https://huggingface.co/software-mansion/react-native-executorch-llama-3.2). You can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library. -- If you want to export model by yourself, you can use a Docker image that we've prepared. To see how it works, check out [exporting Llama](./exporting-llama) -- Follow the official [tutorial](https://github.com/pytorch/executorch/blob/fe20be98c/examples/demo-apps/android/LlamaDemo/docs/delegates/xnnpack_README.md) made by ExecuTorch team to build the model and tokenizer yourself - -## Initializing - -In order to load a model into the app, you need to run the following code: - -```typescript -import { useLLM, LLAMA3_2_1B } from 'react-native-executorch'; - -const messageHistory = [ - { role: 'user', content: 'Hello' }, - { role: 'assistant', content: 'Hi, how can I help you?' }, -]; - -const llama = useLLM({ - modelSource: LLAMA3_2_1B, - tokenizerSource: require('../assets/tokenizer.bin'), - systemPrompt: 'Be a helpful assistant', - messageHistory: messageHistory, - contextWindowLength: 3, -}); -``` - -
-Type definitions - -```typescript -const useLLM: ({ - modelSource, - tokenizerSource, - systemPrompt, - messageHistory, - contextWindowLength, -}: { - modelSource: ResourceSource; - tokenizerSource: ResourceSource; - systemPrompt?: string; - messageHistory?: MessageType[]; - contextWindowLength?: number; -}) => Model; - -interface Model { - generate: (input: string) => Promise; - response: string; - downloadProgress: number; - error: string | null; - isModelGenerating: boolean; - isGenerating: boolean; - isModelReady: boolean; - isReady: boolean; - interrupt: () => void; -} - -type ResourceSource = string | number; - -interface MessageType { - role: 'user' | 'assistant'; - content: string; -} -``` - -
- -
- -The code snippet above fetches the model from the specified URL, loads it into memory, and returns an object with various methods and properties for controlling the model. You can monitor the loading progress by checking the `llama.downloadProgress` and `llama.isReady` property, and if anything goes wrong, the `llama.error` property will contain the error message. - -:::danger -Lower-end devices might not be able to fit LLMs into memory. We recommend using quantized models to reduce the memory footprint. -::: - -:::caution -Given computational constraints, our architecture is designed to support only one instance of the model runner at the time. Consequently, this means you can have only one active component leveraging `useLLM` concurrently. -::: - -### Arguments - -**`modelSource`** - A string that specifies the location of the model binary. For more information, take a look at [loading models](../fundamentals/loading-models.md) section. - -**`tokenizerSource`** - URL to the binary file which contains the tokenizer - -**`systemPrompt`** - Often used to tell the model what is its purpose, for example - "Be a helpful translator" - -**`messageHistory`** - An array of `MessageType` objects that represent the conversation history. This can be used to provide context to the model. - -**`contextWindowLength`** - The number of messages from the current conversation that the model will use to generate a response. The higher the number, the more context the model will have. Keep in mind that using larger context windows will result in longer inference time and higher memory usage. - -:::note -Make sure that the reference to the `messageHistory` array is stable. Depending on your use case, you might use `useState` or `useRef` to store the message history. -::: - -### Returns - -| Field | Type | Description | -| ------------------ | ---------------------------------- | --------------------------------------------------------------------------------------------------------------- | -| `generate` | `(input: string) => Promise` | Function to start generating a response with the given input string. | -| `response` | `string` | State of the generated response. This field is updated with each token generated by the model | -| `error` | string | null | Contains the error message if the model failed to load | -| `isGenerating` | `boolean` | Indicates whether the model is currently generating a response | -| `interrupt` | `() => void` | Function to interrupt the current inference | -| `isReady` | `boolean` | Indicates whether the model is ready | -| `downloadProgress` | `number` | Represents the download progress as a value between 0 and 1, indicating the extent of the model file retrieval. | - -## Sending a message - -In order to send a message to the model, one can use the following code: - -```typescript -const llama = useLLM({ - modelSource: LLAMA3_2_1B, - tokenizerSource: require('../assets/tokenizer.bin'), -}); - -... -const message = 'Hi, who are you?'; -await llama.generate(message); -... -``` - -## Listening for the response - -As you might've noticed, there is no return value from the `runInference` function. Instead, the `.response` field of the model is updated with each token. -This is how you can render the response of the model: - -```typescript -... -return ( - {llama.response} -) -``` - -Behind the scenes, tokens are generated one by one, and the response property is updated with each token as it’s created. This means that the text component will re-render whenever llama.response gets updated. - -Sometimes, you might want to stop the model while it’s generating. To do this, you can use `interrupt()`, which will halt the model and append the current response to its internal conversation state. - -There are also cases when you need to check if tokens are being generated, such as to conditionally render a stop button. We’ve made this easy with the `isTokenBeingGenerated` property. - -## Benchmarks - -### Model size - -| Model | XNNPACK [GB] | -| --------------------- | :----------: | -| LLAMA3_2_1B | 2.47 | -| LLAMA3_2_1B_SPINQUANT | 1.14 | -| LLAMA3_2_1B_QLORA | 1.18 | -| LLAMA3_2_3B | 6.43 | -| LLAMA3_2_3B_SPINQUANT | 2.55 | -| LLAMA3_2_3B_QLORA | 2.65 | - -### Memory usage - -| Model | Android (XNNPACK) [GB] | iOS (XNNPACK) [GB] | -| --------------------- | :--------------------: | :----------------: | -| LLAMA3_2_1B | 3.2 | 3.1 | -| LLAMA3_2_1B_SPINQUANT | 1.9 | 2 | -| LLAMA3_2_1B_QLORA | 2.2 | 2.5 | -| LLAMA3_2_3B | 7.1 | 7.3 | -| LLAMA3_2_3B_SPINQUANT | 3.7 | 3.8 | -| LLAMA3_2_3B_QLORA | 4 | 4.1 | - -### Inference time - -| Model | iPhone 16 Pro (XNNPACK) [tokens/s] | iPhone 13 Pro (XNNPACK) [tokens/s] | iPhone SE 3 (XNNPACK) [tokens/s] | Samsung Galaxy S24 (XNNPACK) [tokens/s] | OnePlus 12 (XNNPACK) [tokens/s] | -| --------------------- | :--------------------------------: | :--------------------------------: | :------------------------------: | :-------------------------------------: | :-----------------------------: | -| LLAMA3_2_1B | 16.1 | 11.4 | ❌ | 15.6 | 19.3 | -| LLAMA3_2_1B_SPINQUANT | 40.6 | 16.7 | 16.5 | 40.3 | 48.2 | -| LLAMA3_2_1B_QLORA | 31.8 | 11.4 | 11.2 | 37.3 | 44.4 | -| LLAMA3_2_3B | ❌ | ❌ | ❌ | ❌ | 7.1 | -| LLAMA3_2_3B_SPINQUANT | 17.2 | 8.2 | ❌ | 16.2 | 19.4 | -| LLAMA3_2_3B_QLORA | 14.5 | ❌ | ❌ | 14.8 | 18.1 | - -❌ - Insufficient RAM. diff --git a/docs/docs/llms/_category_.json b/docs/docs/natural-language-processing/_category_.json similarity index 61% rename from docs/docs/llms/_category_.json rename to docs/docs/natural-language-processing/_category_.json index db6111115..73ed00bf6 100644 --- a/docs/docs/llms/_category_.json +++ b/docs/docs/natural-language-processing/_category_.json @@ -1,5 +1,5 @@ { - "label": "LLMs", + "label": "Natural Language Processing", "position": 2, "link": { "type": "generated-index" diff --git a/docs/docs/natural-language-processing/useLLM.md b/docs/docs/natural-language-processing/useLLM.md new file mode 100644 index 000000000..00958633c --- /dev/null +++ b/docs/docs/natural-language-processing/useLLM.md @@ -0,0 +1,300 @@ +--- +title: useLLM +sidebar_position: 1 +keywords: + [ + llm, + large language model, + llama, + llama 3, + react native, + executorch, + ai, + machine learning, + on-device, + mobile ai, + inference, + text generation, + tool calling, + function calling, + ] +description: "Learn how to use LLMs in your React Native applications with React Native ExecuTorch's useLLM hook." +--- + +React Native ExecuTorch supports a variety of LLMs (checkout our [HuggingFace repository](https://huggingface.co/software-mansion) for model already converted to ExecuTorch format) including Llama 3.2. Before getting started, you’ll need to obtain the .pte binary—a serialized model, the tokenizer and tokenizer config JSON files. There are various ways to accomplish this: + +- For your convenience, it's best if you use models exported by us, you can get them from our [HuggingFace repository](https://huggingface.co/software-mansion). You can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library. +- Follow the official [tutorial](https://github.com/pytorch/executorch/blob/fe20be98c/examples/demo-apps/android/LlamaDemo/docs/delegates/xnnpack_README.md) made by ExecuTorch team to build the model and tokenizer yourself. + +## Initializing + +In order to load a model into the app, you need to run the following code: + +```typescript +import { + useLLM, + LLAMA3_2_1B, + LLAMA3_2_TOKENIZER_CONFIG, +} from 'react-native-executorch'; + +const messageHistory = [ + { role: 'user', content: 'Hello' }, + { role: 'assistant', content: 'Hi, how can I help you?' }, +]; + +const llm = useLLM({ + modelSource: LLAMA3_2_1B, + tokenizerSource: LLAMA3_2_TOKENIZER, + tokenizerConfigSource: LLAMA3_2_TOKENIZER_CONFIG, +}); +``` + +
+Type definitions + +```typescript +const useLLM: ({ + modelSource, + tokenizerSource, + tokenizerConfigSource, + chatConfig, + toolsConfig, +}: { + modelSource: ResourceSource; + tokenizerSource: ResourceSource; + tokenizerConfigSource: ResourceSource; + chatConfig?: Partial; + toolsConfig?: ToolsConfig; +}) => LLMType; + +interface LLMType { + messageHistory: MessageType[]; + response: string; + isReady: boolean; + isGenerating: boolean; + downloadProgress: number; + error: string | null; + runInference: (input: string) => Promise; + sendMessage: (message: string) => Promise; + deleteMessage: (index: number) => void; + interrupt: () => void; +} + +type ResourceSource = string | number; + +type MessageRole = 'user' | 'assistant' | 'system'; + +interface MessageType { + role: MessageRole; + content: string; +} +interface ChatConfig { + initialMessageHistory: MessageType[]; + contextWindowLength: number; + systemPrompt: string; +} + +// tool calling +interface ToolsConfig { + tools: LLMTool[]; + executeToolCallback: (call: ToolCall) => Promise; + displayToolCalls?: boolean; +} + +interface ToolCall { + toolName: string; + arguments: Object; +} + +type LLMTool = Object; +``` + +
+ +
+ +The code snippet above fetches the model from the specified URL, loads it into memory, and returns an object with various methods and properties for controlling the model. You can monitor the loading progress by checking the `llm.downloadProgress` and `llm.isReady` property, and if anything goes wrong, the `llm.error` property will contain the error message. + +:::danger +Lower-end devices might not be able to fit LLMs into memory. We recommend using quantized models to reduce the memory footprint. +::: + +:::caution +Given computational constraints, our architecture is designed to support only one instance of the model runner at the time. Consequently, this means you can have only one active component leveraging `useLLM` concurrently. +::: + +### Arguments + +**`modelSource`** - A string that specifies the location of the model binary. For more information, take a look at [loading models](../fundamentals/loading-models.md) section. + +**`tokenizerSource`** - URL to the JSON file which contains the tokenizer + +**`tokenizerConfigSource`** - URL to the JSON file which contains the tokenizer config + +**`chatConfig`** - Object configuring chat management, contains following properties: + +- **`systemPrompt`** - Often used to tell the model what is its purpose, for example - "Be a helpful translator". + +- **`initialMessageHistory`** - An array of `MessageType` objects that represent the conversation history. This can be used to provide initial context to the model. + +- **`contextWindowLength`** - The number of messages from the current conversation that the model will use to generate a response. The higher the number, the more context the model will have. Keep in mind that using larger context windows will result in longer inference time and higher memory usage. + +**`toolsConfig`** - Object configuring options for enabling and managing tool use. **It will only have effect if your model's chat template support it**. Contains following properties: + +- **`tools`** - List of objects defining tools. + +- **`executeToolCallback`** - Function that accepts `ToolCall`, executes tool and returns the string to model. + +- **`displayToolCalls`** - If set to true, JSON tool calls will be displayed in chat. If false, only answers will be displayed. + +### Returns + +| Field | Type | Description | +| ------------------ | ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `messageHistory` | `MessageType[]` | State of the generated response. This field is updated with each token generated by the model | +| `response` | `string` | State of the generated response. This field is updated with each token generated by the model | +| `isReady` | `boolean` | Indicates whether the model is ready | +| `isGenerating` | `boolean` | Indicates whether the model is currently generating a response | +| `downloadProgress` | `number` | Represents the download progress as a value between 0 and 1, indicating the extent of the model file retrieval. | +| `error` | string | null | Contains the error message if the model failed to load | +| `sendMessage` | `(message: string, tools?: LLMTool[]) => Promise` | Method to add user message to conversation. After model responds, `messageHistory` will be updated with both user message and model response. | +| `deleteMessage` | `(index: number) => void` | Deletes all messages starting with message on `index` position. | +| `runInference` | `(input: string) => Promise` | Runs model inference with raw input string. You need to provide entire conversation and prompt (in correct format and with special tokens!) in input string to this method. It doesn't manage conversation context. It is intended for users that need access to the model itself without any wrapper. If you want simple chat with model consider using `sendMessage` | +| `interrupt` | `() => void` | Function to interrupt the current inference | + +## Sending a message + +In order to send a message to the model, one can use the following code: + +```typescript +const llm = useLLM({ + modelSource: LLAMA3_2_1B, + tokenizerSource: LLAMA3_2_TOKENIZER, + tokenizerConfigSource: LLAMA3_2_TOKENIZER_CONFIG, + chatConfig: { + systemPrompt: 'Be a helpful assistant', + initialMessageHistory: [], + contextWindowLength: 5, + }, +}); + +... +const message = 'Hi, who are you?'; +await llm.sendMessage(message); +... +``` + +## Listening for the response + +As you might've noticed, there is no return value from the `sendMessage` function. Instead, the `response` field of the model is updated with each token. +This is how you can render the response of the model: + +```typescript +... +return ( + {llm.response} +) +``` + +Behind the scenes, tokens are generated one by one, and the response property is updated with each token as it’s created. This means that the text component will re-render whenever llm.response gets updated. + +If you want to render entire conversation you can use `messageHistory` field: + +```typescript +return ( + + {llm.messageHistory.map((message) => ( + {message.content} + ))} + +) +``` + +Sometimes, you might want to stop the model while it’s generating. To do this, you can use `interrupt()`, which will halt the model and append the current response to the conversation history. + +There are also cases when you need to check if tokens are being generated, such as to conditionally render a stop button. We’ve made this easy with the `isGenerating` property. + +## Tool calling + +Sometimes text processing capabilities of LLMs are not enough. That's when you may want to introduce tool calling (also called function calling). It allows model to use external tools to perform its task. The tools may be any arbitrary function that you want your model to run. It may retrieve some data from 3rd party API. It may do an action inside an app like changing or it may use system APIs to interact with you phone (turning on torchlight, adding events to your calendar, changing volume etc.). + +```typescript +const TOOL_DEFINITIONS: LLMTool[] = [ + { + name: 'get_weather', + description: 'Get/check weather in given location.', + parameters: { + type: 'dict', + properties: { + location: { + type: 'string', + description: 'Location where user wants to check weather', + }, + }, + required: ['location'], + }, + }, +]; + +const llm = useLLM({ + modelSource: HAMMER2_1_1_5B, + tokenizerSource: HAMMER2_1_1_5B_TOKENIZER, + tokenizerConfigSource: HAMMER2_1_1_5B_TOKENIZER_CONFIG, + toolsConfig: { + tools: TOOL_DEFINITIONS, + // we don't implement any tool execution here + // we just want to showcase model's ability + executeToolCallback: async (call) => { + if (call.toolName == 'get_weather') { + console.log('Checking weather!'); + // perform call to some weather API + const mockResults = 'Weather is great!'; + return mockResult; + } + return null; + }, + // just for demo purpose + displayToolCalls: true, + }, +}); + +const message = `Hi, what's the weather like in Cracow right now?`; +await llm.sendMessage(message); +``` + +## Benchmarks + +### Model size + +| Model | XNNPACK [GB] | +| --------------------- | :----------: | +| LLAMA3_2_1B | 2.47 | +| LLAMA3_2_1B_SPINQUANT | 1.14 | +| LLAMA3_2_1B_QLORA | 1.18 | +| LLAMA3_2_3B | 6.43 | +| LLAMA3_2_3B_SPINQUANT | 2.55 | +| LLAMA3_2_3B_QLORA | 2.65 | + +### Memory usage + +| Model | Android (XNNPACK) [GB] | iOS (XNNPACK) [GB] | +| --------------------- | :--------------------: | :----------------: | +| LLAMA3_2_1B | 3.2 | 3.1 | +| LLAMA3_2_1B_SPINQUANT | 1.9 | 2 | +| LLAMA3_2_1B_QLORA | 2.2 | 2.5 | +| LLAMA3_2_3B | 7.1 | 7.3 | +| LLAMA3_2_3B_SPINQUANT | 3.7 | 3.8 | +| LLAMA3_2_3B_QLORA | 4 | 4.1 | + +### Inference time + +| Model | iPhone 16 Pro (XNNPACK) [tokens/s] | iPhone 13 Pro (XNNPACK) [tokens/s] | iPhone SE 3 (XNNPACK) [tokens/s] | Samsung Galaxy S24 (XNNPACK) [tokens/s] | OnePlus 12 (XNNPACK) [tokens/s] | +| --------------------- | :--------------------------------: | :--------------------------------: | :------------------------------: | :-------------------------------------: | :-----------------------------: | +| LLAMA3_2_1B | 16.1 | 11.4 | ❌ | 15.6 | 19.3 | +| LLAMA3_2_1B_SPINQUANT | 40.6 | 16.7 | 16.5 | 40.3 | 48.2 | +| LLAMA3_2_1B_QLORA | 31.8 | 11.4 | 11.2 | 37.3 | 44.4 | +| LLAMA3_2_3B | ❌ | ❌ | ❌ | ❌ | 7.1 | +| LLAMA3_2_3B_SPINQUANT | 17.2 | 8.2 | ❌ | 16.2 | 19.4 | +| LLAMA3_2_3B_QLORA | 14.5 | ❌ | ❌ | 14.8 | 18.1 | + +❌ - Insufficient RAM. diff --git a/docs/docs/speech-to-text/useSpeechToText.md b/docs/docs/natural-language-processing/useSpeechToText.md similarity index 81% rename from docs/docs/speech-to-text/useSpeechToText.md rename to docs/docs/natural-language-processing/useSpeechToText.md index d55d02b48..dd5b751d1 100644 --- a/docs/docs/speech-to-text/useSpeechToText.md +++ b/docs/docs/natural-language-processing/useSpeechToText.md @@ -1,6 +1,6 @@ --- title: useSpeechToText -sidebar_position: 1 +sidebar_position: 2 keywords: [ speech to text, @@ -26,7 +26,7 @@ Currently, we do not support direct microphone input streaming to the model. Ins ::: :::caution -It is recommended to use models provided by us, which are available at our [Hugging Face repository](https://huggingface.co/software-mansion/react-native-executorch-moonshine-tiny). You can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library +It is recommended to use models provided by us, which are available at our [Hugging Face repository](https://huggingface.co/software-mansion/react-native-executorch-moonshine-tiny). You can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library. ::: ## Reference @@ -70,7 +70,7 @@ Given that STT models can process audio no longer than 30 seconds, there is a ne ### Arguments **`modelName`** -A literal of `"moonshine" | "whisper"` which serves as an identifier for which model should be used. +A literal of `"moonshine" | "whisper" | "whisperMultilingual` which serves as an identifier for which model should be used. **`encoderSource?`** A string that specifies the location of a .pte file for the encoder. For further information on passing model sources, check out [Loading Models](https://docs.swmansion.com/react-native-executorch/docs/fundamentals/loading-models). Defaults to [constants](https://github.com/software-mansion/react-native-executorch/blob/main/src/constants/modelUrls.ts) for given model. @@ -94,7 +94,7 @@ Specifies config for both `overlapSeconds` and `windowSize` values. Three option | Field | Type | Description | | -------------------- | ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `transcribe` | `(input: number[]) => Promise` | Starts a transcription process for a given input array, which should be a waveform at 16kHz. Resolves a promise with the output transcription when the model is finished. | +| `transcribe` | `(input: number[], audioLanguage?: SpeechToTextLanguage) => Promise` | Starts a transcription process for a given input array, which should be a waveform at 16kHz. Resolves a promise with the output transcription when the model is finished. For multilingual models, you have to specify the audioLanguage flag, which is the language of the spoken language in the audio. | | `error` | Error | undefined | Contains the error message if the model failed to load. | | `sequence` | string | This property is updated with each generated token. If you're looking to obtain tokens as they're generated, you should use this property. | | `isGenerating` | `boolean` | Indicates whether the model is currently processing an inference. | @@ -102,9 +102,107 @@ Specifies config for both `overlapSeconds` and `windowSize` values. Three option | `configureStreaming` | (overlapSeconds?: number, windowSize?: number, streamingConfig?: 'fast' | 'balanced' | 'quality') | Configures options for the streaming algorithm:
  • `overlapSeconds` determines how much adjacent audio chunks overlap (increasing it slows down transcription, decreases probability of weird wording at the chunks intersection, setting it larger than 3 seconds generally is discouraged),
  • `windowSize` describes size of the audio chunks (increasing it speeds up the end to end transcription time, but increases latency for the first token to be returned),
  • `streamingConfig` predefined configs for `windowSize` and `overlapSeconds` values.
Keep `windowSize + 2 * overlapSeconds <= 30`. | | `downloadProgress` | `number` | Tracks the progress of the model download process. | +
+Type definitions + +```typescript +enum SpeechToTextLanguage { + Afrikaans = 'af', + Albanian = 'sq', + Arabic = 'ar', + Armenian = 'hy', + Azerbaijani = 'az', + Basque = 'eu', + Belarusian = 'be', + Bengali = 'bn', + Bosnian = 'bs', + Bulgarian = 'bg', + Burmese = 'my', + Catalan = 'ca', + Chinese = 'zh', + Croatian = 'hr', + Czech = 'cs', + Danish = 'da', + Dutch = 'nl', + Estonian = 'et', + English = 'en', + Finnish = 'fi', + French = 'fr', + Galician = 'gl', + Georgian = 'ka', + German = 'de', + Greek = 'el', + Gujarati = 'gu', + HaitianCreole = 'ht', + Hebrew = 'he', + Hindi = 'hi', + Hungarian = 'hu', + Icelandic = 'is', + Indonesian = 'id', + Italian = 'it', + Japanese = 'ja', + Kannada = 'kn', + Kazakh = 'kk', + Khmer = 'km', + Korean = 'ko', + Lao = 'lo', + Latvian = 'lv', + Lithuanian = 'lt', + Macedonian = 'mk', + Malagasy = 'mg', + Malay = 'ms', + Malayalam = 'ml', + Maltese = 'mt', + Marathi = 'mr', + Nepali = 'ne', + Norwegian = 'no', + Persian = 'fa', + Polish = 'pl', + Portuguese = 'pt', + Punjabi = 'pa', + Romanian = 'ro', + Russian = 'ru', + Serbian = 'sr', + Sinhala = 'si', + Slovak = 'sk', + Slovenian = 'sl', + Spanish = 'es', + Sundanese = 'su', + Swahili = 'sw', + Swedish = 'sv', + Tagalog = 'tl', + Tajik = 'tg', + Tamil = 'ta', + Telugu = 'te', + Thai = 'th', + Turkish = 'tr', + Ukrainian = 'uk', + Urdu = 'ur', + Uzbek = 'uz', + Vietnamese = 'vi', + Welsh = 'cy', + Yiddish = 'yi', +} +``` + +
+ ## Running the model -Before running the model's `transcribe` method be sure to obtain waveform of the audio You wish to transcribe. You need to obtain the waveform from audio on your own (remember to use sampling rate of 16kHz!), in the snippet above we provide an example how you can do that. In the latter case just pass the obtained waveform as argument to the `transcribe` method which returns a promise resolving to the generated tokens when successful. If the model fails during inference the `error` property contains details of the error. If you want to obtain tokens in a streaming fashion, you can also use the sequence property, which is updated with each generated token, similar to the [useLLM](../llms/useLLM.md) hook. +Before running the model's `transcribe` method be sure to obtain waveform of the audio You wish to transcribe. You need to obtain the waveform from audio on your own (remember to use sampling rate of 16kHz!), in the snippet above we provide an example how you can do that. In the latter case just pass the obtained waveform as argument to the `transcribe` method which returns a promise resolving to the generated tokens when successful. If the model fails during inference the `error` property contains details of the error. If you want to obtain tokens in a streaming fashion, you can also use the sequence property, which is updated with each generated token, similar to the [useLLM](../natural-language-processing/useLLM.md) hook. + +#### Multilingual transcription + +If you aim to obtain a transcription in other languages than English, in v0.4.0 we introduced a new model - `whisperMultilingual`, a multilingual version of Whisper. To obtain the output text in your desired language, make sure pass `audioLanguage` to `transcribe`. You should not pass this flag if you're using a non-multilingual model. For example: + +```typescript +import { SpeechToTextLanguage } from 'react-native-executorch'; + +// Rest of your code... +const mySpanishAudio = ...; +await model.transcribe(mySpanishAudio, SpeechToTextLanguage.Spanish); +// Rest of your code... +``` ## Example @@ -129,17 +227,18 @@ function App() { title="Transcribe" /> {error ? error : sequence} - + **** ); } ``` ## Supported models -| Model | Language | -| --------------------------------------------------------------------- | :------: | -| [Whisper tiny.en](https://huggingface.co/openai/whisper-tiny.en) | English | -| [Moonshine tiny](https://huggingface.co/UsefulSensors/moonshine-tiny) | English | +| Model | Language | +| --------------------------------------------------------------------- | :----------: | +| [Whisper tiny.en](https://huggingface.co/openai/whisper-tiny.en) | English | +| [Whisper tiny](https://huggingface.co/openai/whisper-tiny) | Multilingual | +| [Moonshine tiny](https://huggingface.co/UsefulSensors/moonshine-tiny) | English | ## Benchmarks diff --git a/docs/docs/natural-language-processing/useTextEmbeddings.md b/docs/docs/natural-language-processing/useTextEmbeddings.md new file mode 100644 index 000000000..408984ca5 --- /dev/null +++ b/docs/docs/natural-language-processing/useTextEmbeddings.md @@ -0,0 +1,143 @@ +--- +title: useTextEmbeddings +sidebar_position: 3 +keywords: + [ + text embedding, + text embeddings, + embeddings, + react native, + executorch, + ai, + machine learning, + on-device, + mobile ai, + ] +description: "Learn how to use text embeddings models in your React Native applications with React Native ExecuTorch's useTextEmbeddings hook." +--- + +Text Embedding is the process of converting text into a numerical representation. This representation can be used for various natural language processing tasks, such as semantic search, text classification, and clustering. + +:::caution +It is recommended to use models provided by us, which are available at our [Hugging Face repository](https://huggingface.co/software-mansion/react-native-executorch-all-MiniLM-L6-v2). You can also use [constants](https://github.com/software-mansion/react-native-executorch/tree/main/src/constants/modelUrls.ts) shipped with our library. +::: + +## Reference + +```typescript +import { + useTextEmbeddings, + ALL_MINILM_L6_V2, + ALL_MINILM_L6_V2_TOKENIZER, +} from 'react-native-executorch'; + +const model = useTextEmbeddings({ + modelSource: ALL_MINILM_L6_V2, + tokenizerSource: ALL_MINILM_L6_V2_TOKENIZER, +}); + +try { + const embedding = await model.forward('Hello World!'); +} catch (error) { + console.error(error); +} +``` + +### Arguments + +**`modelSource`** +A string that specifies the location of the model binary. For more information, take a look at [loading models](../fundamentals/loading-models.md) page. + +**`tokenizerSource`** +A string that specifies the location of the tokenizer JSON file. + +### Returns + +| Field | Type | Description | +| ------------------ | -------------------------------------- | --------------------------------------------------------------------------------- | +| `forward` | `(input: string) => Promise` | Executes the model's forward pass, where `input` is a text that will be embedded. | +| `error` | string | null | Contains the error message if the model failed to load. | +| `isGenerating` | `boolean` | Indicates whether the model is currently processing an inference. | +| `isReady` | `boolean` | Indicates whether the model has successfully loaded and is ready for inference. | +| `downloadProgress` | `number` | Represents the download progress as a value between 0 and 1. | + +## Running the model + +To run the model, you can use the `forward` method. It accepts one argument, which is a string representing the text you want to embed. The function returns a promise, which can resolve either to an error or an array of numbers representing the embedding. + +:::info +The returned embedding vector is normalized, meaning that its length is equal to 1. This allows for easier comparison of vectors using cosine similarity, just calculate the dot product of two vectors to get the cosine similarity score. +::: + +## Example + +```typescript +import { + useTextEmbeddings, + ALL_MINILM_L6_V2, + ALL_MINILM_L6_V2_TOKENIZER, +} from 'react-native-executorch'; + +const dotProduct = (a: number[], b: number[]) => + a.reduce((sum, val, i) => sum + val * b[i], 0); + +function App() { + const model = useTextEmbeddings({ + modelSource: ALL_MINILM_L6_V2, + tokenizerSource: ALL_MINILM_L6_V2_TOKENIZER, + }); + + ... + + try { + const helloWorldEmbedding = await model.forward('Hello World!'); + const goodMorningEmbedding = await model.forward('Good Morning!'); + + // The embeddings are normalized, so we can use dot product to calculate cosine similarity + const similarity = dotProduct( + helloWorldEmbedding, + goodMorningEmbedding + ); + + console.log(`Cosine similarity: ${similarity}`); + } catch (error) { + console.error(error); + } + + ... +} +``` + +## Supported models + +| Model | Language | Max Tokens | Embedding Dimensions | +| --------------------------------------------------------------------------------- | :------: | :--------: | :------------------: | +| [all-MiniLM-L6-v2](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) | English | 256 | 384 | + +**`Max Tokens`** - the maximum number of tokens that can be processed by the model. If the input text exceeds this limit, it will be truncated. + +**`Embedding Dimensions`** - the size of the output embedding vector. This is the number of dimensions in the vector representation of the input text. + +## Benchmarks + +### Model size + +| Model | XNNPACK [MB] | +| ---------------- | :----------: | +| ALL_MINILM_L6_V2 | 91 | + +### Memory usage + +| Model | Android (XNNPACK) [MB] | iOS (XNNPACK) [MB] | +| ---------------- | :--------------------: | :----------------: | +| ALL_MINILM_L6_V2 | 140 | 64 | + +### Inference time + +:::warning warning +Times presented in the tables are measured as consecutive runs of the model. Initial run times may be up to 2x longer due to model loading and initialization. +::: + +| Model | iPhone 16 Pro (XNNPACK) [ms] | iPhone 14 Pro Max (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) | OnePlus 12 (XNNPACK) [ms] | +| ---------------- | :--------------------------: | :------------------------------: | :------------------------: | :--------------------------: | :-----------------------: | +| ALL_MINILM_L6_V2 | 105 | 126 | 151 | 165 | 152 | diff --git a/docs/docs/natural-language-processing/useTokenizer.md b/docs/docs/natural-language-processing/useTokenizer.md new file mode 100644 index 000000000..0fae7ece6 --- /dev/null +++ b/docs/docs/natural-language-processing/useTokenizer.md @@ -0,0 +1,109 @@ +--- +title: useTokenizer +sidebar_position: 4 +keywords: + [ + tokenizer, + text tokenizer, + tokenization, + react native, + executorch, + ai, + machine learning, + on-device, + mobile ai, + ] +description: "Learn how to tokenize your text in your React Native applications using React Native ExecuTorch's useTokenizer hook." +--- + +Tokenization is the process of breaking down text into smaller units called tokens. It’s a crucial step in natural language processing that +converts text into a format that machine learning models can understand. + +:::info +We are using [Hugging Face Tokenizers](https://huggingface.co/docs/tokenizers/index) under the hood, ensuring compatibility with the Hugging Face ecosystem. +::: + +## Reference + +```typescript +import { + useTokenizer, + ALL_MINILM_L6_V2_TOKENIZER, +} from 'react-native-executorch'; + +const tokenizer = useTokenizer({ + tokenizerSource: ALL_MINILM_L6_V2_TOKENIZER, +}); + +const text = 'Hello, world!'; + +try { + // Tokenize the text + const tokens = await tokenizer.encode(text); + console.log('Tokens:', tokens); + + // Decode the tokens back to text + const decodedText = await tokenizer.decode(tokens); + console.log('Decoded text:', decodedText); +} catch (error) { + console.error('Error tokenizing text:', error); +} +``` + +## Arguments + +A string that specifies the path or URI of the tokenizer JSON file. + +### Returns + +| Field | Type | Description | +| ------------------ | ------------------------------------- | --------------------------------------------------------------------- | +| `encode` | `(text: string) => Promise` | Converts a string into an array of token IDs. | +| `decode` | `(ids: number[]) => Promise` | Converts an array of token IDs into a string. | +| `getVocabSize` | `() => Promise` | Returns the size of the tokenizer's vocabulary. | +| `idToToken` | `(id: number) => Promise` | Returns the token associated to the ID. | +| `tokenToId` | `(token: string) => Promise` | Returns the ID associated to the token. | +| `error` | string | null | Contains the error message if the tokenizer failed to load. | +| `isGenerating` | `boolean` | Indicates whether the tokenizer is currently running. | +| `isReady` | `boolean` | Indicates whether the tokenizer has successfully loaded and is ready. | +| `downloadProgress` | `number` | Represents the download progress as a value between 0 and 1. | + +## Example + +```typescript +import { + useTokenizer, + ALL_MINILM_L6_V2_TOKENIZER, +} from 'react-native-executorch'; + +function App() { + const tokenizer = useTokenizer({ + tokenizerSource: ALL_MINILM_L6_V2_TOKENIZER, + }); + + ... + + try { + const text = 'Hello, world!'; + + const vocabSize = await tokenizer.getVocabSize(); + console.log('Vocabulary size:', vocabSize); + + const tokens = await tokenizer.encode(text); + console.log('Token IDs:', tokens); + + const decoded = await tokenizer.decode(tokens); + console.log('Decoded text:', decoded); + + const tokenId = await tokenizer.tokenToId('hello'); + console.log('Token ID for "Hello":', tokenId); + + const token = await tokenizer.idToToken(tokenId); + console.log('Token for ID:', token); + } catch (error) { + console.error(error); + } + + ... +} +``` diff --git a/docs/docs/hookless-api/ClassificationModule.md b/docs/docs/typescript-api/ClassificationModule.md similarity index 92% rename from docs/docs/hookless-api/ClassificationModule.md rename to docs/docs/typescript-api/ClassificationModule.md index 2e62cbd4a..795437c4f 100644 --- a/docs/docs/hookless-api/ClassificationModule.md +++ b/docs/docs/typescript-api/ClassificationModule.md @@ -1,9 +1,8 @@ --- title: ClassificationModule -sidebar_position: 1 --- -Hookless implementation of the [useClassification](../computer-vision/useClassification.md) hook. +TypeScript API implementation of the [useClassification](../computer-vision/useClassification.md) hook. ## Reference @@ -34,7 +33,7 @@ const classesWithProbabilities = await ClassificationModule.forward(imageUri); Type definitions ```typescript -type ResourceSource = string | number; +type ResourceSource = string | number | object; ``` diff --git a/docs/docs/hookless-api/ExecutorchModule.md b/docs/docs/typescript-api/ExecutorchModule.md similarity index 96% rename from docs/docs/hookless-api/ExecutorchModule.md rename to docs/docs/typescript-api/ExecutorchModule.md index 0b8709522..484515e6d 100644 --- a/docs/docs/hookless-api/ExecutorchModule.md +++ b/docs/docs/typescript-api/ExecutorchModule.md @@ -1,9 +1,8 @@ --- title: ExecuTorchModule -sidebar_position: 2 --- -Hookless implementation of the [useExecutorchModule](../module-api/executorch-bindings.md) hook. +TypeScript API implementation of the [useExecutorchModule](../executorch-bindings/useExecutorchModule.md) hook. ## Reference @@ -38,7 +37,7 @@ const output = await ExecutorchModule.forward(input, shape); Type definitions ```typescript -type ResourceSource = string | number; +type ResourceSource = string | number | object; export type ETInput = | Int8Array diff --git a/docs/docs/typescript-api/ImageSegmentationModule.md b/docs/docs/typescript-api/ImageSegmentationModule.md new file mode 100644 index 000000000..d29906e66 --- /dev/null +++ b/docs/docs/typescript-api/ImageSegmentationModule.md @@ -0,0 +1,60 @@ +--- +title: ImageSegmentationModule +--- + +TypeScript API implementation of the [useImageSegmentation](../computer-vision/useImageSegmentation.md) hook. + +## Reference + +```typescript +import { + ImageSegmentationModule, + DEEPLAB_V3_RESNET50, +} from 'react-native-executorch'; + +const imageUri = 'path/to/image.png'; + +// Loading the model +await ImageSegmentationModule.load(DEEPLAB_V3_RESNET50); + +// Running the model +const outputDict = await StyleTransferModule.forward(imageUri); +``` + +### Methods + +| Method | Type | Description | +| -------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `load` | `(modelSource: ResourceSource): Promise` | Loads the model, where `modelSource` is a string that specifies the location of the model binary. | +| `forward` | `(input: string, classesOfInterest?: DeeplabLabel[], resize?: boolean) => Promise<{[key in DeeplabLabel]?: number[]}>` | Executes the model's forward pass, where :
\* `input` can be a fetchable resource or a Base64-encoded string.
\* `classesOfInterest` is an optional list of `DeeplabLabel` used to indicate additional arrays of probabilities to output (see section "Running the model"). The default is an empty list.
\* `resize` is an optional boolean to indicate whether the output should be resized to the original image dimensions, or left in the size of the model (see section "Running the model"). The default is `false`.

The return is a dictionary containing:
\* for the key `DeeplabLabel.ARGMAX` an array of integers corresponding to the most probable class for each pixel
\* an array of floats for each class from `classesOfInterest` corresponding to the probabilities for this class. | +| `onDownloadProgress` | `(callback: (downloadProgress: number) => void): any` | Subscribe to the download progress event. | + +
+Type definitions + +```typescript +type ResourceSource = string | number | object; +``` + +
+ +## Loading the model + +To load the model, use the `load` method. It accepts the `modelSource` which is a string that specifies the location of the model binary. For more information, take a look at [loading models](../fundamentals/loading-models.md) page. This method returns a promise, which can resolve to an error or void. + +## Running the model + +To run the model, you can use the `forward` method. It accepts three arguments: a required image, an optional list of classes, and an optional flag whether to resize the output to the original dimensions. + +- The image can be a remote URL, a local file URI, or a base64-encoded image. +- The `classesOfInterest` list contains classes for which to output the full results. By default the list is empty, and only the most probable classes are returned (essentially an arg max for each pixel). Look at `DeeplabLabel` enum for possible classes. +- The `resize` flag says whether the output will be rescaled back to the size of the image you put in. The default is `false`. The model runs inference on a scaled (probably smaller) version of your image (224x224 for the `DEEPLAB_V3_RESNET50`). If you choose to resize, the output will be `number[]` of size `width * height` of your original image. + +:::caution +Setting `resize` to true will make `forward` slower. +::: + +`forward` returns a promise which can resolve either to an error or a dictionary containing number arrays with size depending on `resize`: + +- For the key `DeeplabLabel.ARGMAX` the array contains for each pixel an integer corresponding to the class with the highest probability. +- For every other key from `DeeplabLabel`, if the label was included in `classesOfInterest` the dictionary will contain an array of floats corresponding to the probability of this class for every pixel. diff --git a/docs/docs/typescript-api/LLMModule.md b/docs/docs/typescript-api/LLMModule.md new file mode 100644 index 000000000..684fe69d7 --- /dev/null +++ b/docs/docs/typescript-api/LLMModule.md @@ -0,0 +1,141 @@ +--- +title: LLMModule +sidebar_position: 3 +--- + +TypeScript API implementation of the [useLLM](../natural-language-processing/useLLM.md) hook. + +## Reference + +```typescript +import { + LLAMA3_2_1B_QLORA, + LLAMA3_2_TOKENIZER, + LLAMA3_2_TOKENIZER_CONFIG, + LLMModule, +} from 'react-native-executorch'; + +const printDownloadProgress = (progress: number) => { + console.log(progress); +}; + +// Loading the model +await LLMModule.load( + { + modelSource:, + tokenizerSource: LLAMA3_2_TOKENIZER, + tokenizerConfigSource: LLAMA3_2_TOKENIZER_CONFIG, + onDownloadProgressCallback: printDownloadProgress, + } +); + +// Running the model +await LLMModule.sendMessage('Hello, World!'); + +// Interrupting the model (to actually interrupt the generation it would have to be called when sendMessage or runInference is running) +LLMModule.interrupt(); + +// Deleting the model from memory +LLMModule.delete(); +``` + +### Methods + +| Method | Type | Description | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `load` | `({ modelSource: ResourceSource, tokenizerSource: ResourceSource, tokenizerConfigSource: ResourceSource, chatConfig?: Partial, onDownloadProgressCallback?: (downloadProgress: number) => void, responseCallback?: (response: string) => void, messageHistoryCallback?: (messageHistory: MessageType[]) => void}) => Promise` | Loads the model. Checkout the [loading the model](#loading-the-model) section for details. | +| `sendMessage` | `(message: string, tools?: LLMTool[]) => Promise` | Method to add user message to conversation. After model responds it will call`messageHistoryCallback()`containing both user message and model response. It also returns them. | +| `runInference` | `(input: string) => Promise` | Runs model inference with raw input string. You need to provide entire conversation and prompt (in correct format and with special tokens!) in input string to this method. It doesn't manage conversation context. It is intended for users that need access to the model itself without any wrapper. If you want simple chat with model consider using`sendMessage` | +| `delete` | `() => void` | Method to delete the model from memory. | +| `interrupt` | `() => void` | Interrupts model generation. | + +
+Type definitions + +```typescript +type ResourceSource = string | number; + +type MessageRole = 'user' | 'assistant' | 'system'; + +interface MessageType { + role: MessageRole; + content: string; +} +interface ChatConfig { + initialMessageHistory: MessageType[]; + contextWindowLength: number; + systemPrompt: string; +} + +// tool calling +interface ToolsConfig { + tools: LLMTool[]; + executeToolCallback: (call: ToolCall) => Promise; + displayToolCalls?: boolean; +} + +interface ToolCall { + toolName: string; + arguments: Object; +} + +type LLMTool = Object; +``` + +
+ +## Loading the model + +To load the model, use the `load` method. It accepts object with following fields: + +**`modelSource`** - A string that specifies the location of the model binary. + +**`tokenizerSource`** - URL to the JSON file which contains the tokenizer. + +**`tokenizerConfigSource`** - URL to the JSON file which contains the tokenizer config. + +**`chatConfig`** - Object configuring chat management: + +- **`systemPrompt`** - Often used to tell the model what is its purpose, for example - "Be a helpful translator". + +- **`initialMessageHistory`** - An array of `MessageType` objects that represent the conversation history. This can be used to provide initial context to the model. + +- **`contextWindowLength`** - The number of messages from the current conversation that the model will use to generate a response. The higher the number, the more context the model will have. Keep in mind that using larger context windows will result in longer inference time and higher memory usage. + +**`toolsConfig`** - Object configuring options for enabling and managing tool use. **It will only have effect if your model's chat template support it**. Contains following properties: + +- **`tools`** - List of objects defining tools. + +- **`executeToolCallback`** - Function that accepts `ToolCall`, executes tool and returns the string to model. + +- **`displayToolCalls`** - If set to true, JSON tool calls will be displayed in chat. If false, only answers will be displayed. + +**`onDownloadProgressCallback`** - Function that will be called on download progress. + +**`responseCallback`** - Function that will be called on every generated token. + +**`messageHistoryCallback`** - Function that will be called on every finished message. Returns entire message history. + +This method returns a promise, which can resolve to an error or void. + +## Listening for download progress + +To subscribe to the download progress event, you can pass the `modelDownloadProgressCallback` functions to constructor. This function will be called whenever the download progress changes. + +## Running the model + +To run the model, you can use the `sendMessage` method. It accepts the user message. After model responds it will return new message history containing both user message and model response.. Additionally, it will call `messageHistoryCallback`. + +Alternatively, you can use `runInference`. It provides direct access to the model, without any wrapper, so the input string is passed straight into the model. If you're not sure what are implications of that, you're better off with `sendMessage` + +## Listening for token + +To subscribe to the token generation event, you can pass `responseCallback` or `messageHistoryCallback` functions to constructor. `responseCallback` is called on every token and contains only the most recent model response and `messageHistoryCallback` is called whenever model finishes generation and contains all message history including user's and model's last messages. + +## Interrupting the model + +In order to interrupt the model, you can use the `interrupt` method. + +## Deleting the model from memory + +To delete the model from memory, you can use the `delete` method. diff --git a/docs/docs/hookless-api/OCRModule.md b/docs/docs/typescript-api/OCRModule.md similarity index 84% rename from docs/docs/hookless-api/OCRModule.md rename to docs/docs/typescript-api/OCRModule.md index 493371196..eadfbb5f6 100644 --- a/docs/docs/hookless-api/OCRModule.md +++ b/docs/docs/typescript-api/OCRModule.md @@ -1,9 +1,8 @@ --- title: OCRModule -sidebar_position: 6 --- -Hookless implementation of the [useOCR](../computer-vision/useOCR.md) hook. +TypeScript API implementation of the [useOCR](../computer-vision/useOCR.md) hook. ## Reference @@ -50,7 +49,71 @@ interface RecognizerSources { recognizerSmall: string | number; } -type OCRLanguage = 'en'; +type OCRLanguage = + | 'abq' + | 'ady' + | 'af' + | 'ava' + | 'az' + | 'be' + | 'bg' + | 'bs' + | 'ch_sim' + | 'che' + | 'cs' + | 'cy' + | 'da' + | 'dar' + | 'de' + | 'en' + | 'es' + | 'et' + | 'fr' + | 'ga' + | 'hr' + | 'hu' + | 'id' + | 'inh' + | 'ic' + | 'it' + | 'ja' + | 'kbd' + | 'kn' + | 'ko' + | 'ku' + | 'la' + | 'lbe' + | 'lez' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'ms' + | 'mt' + | 'nl' + | 'no' + | 'oc' + | 'pi' + | 'pl' + | 'pt' + | 'ro' + | 'ru' + | 'rs_cyrillic' + | 'rs_latin' + | 'sk' + | 'sl' + | 'sq' + | 'sv' + | 'sw' + | 'tab' + | 'te' + | 'th' + | 'tjk' + | 'tl' + | 'tr' + | 'uk' + | 'uz' + | 'vi'; interface Point { x: number; diff --git a/docs/docs/hookless-api/ObjectDetectionModule.md b/docs/docs/typescript-api/ObjectDetectionModule.md similarity index 93% rename from docs/docs/hookless-api/ObjectDetectionModule.md rename to docs/docs/typescript-api/ObjectDetectionModule.md index 6c730b7fe..eca529641 100644 --- a/docs/docs/hookless-api/ObjectDetectionModule.md +++ b/docs/docs/typescript-api/ObjectDetectionModule.md @@ -1,9 +1,8 @@ --- title: ObjectDetectionModule -sidebar_position: 5 --- -Hookless implementation of the [useObjectDetection](../computer-vision/useObjectDetection.md) hook. +TypeScript API implementation of the [useObjectDetection](../computer-vision/useObjectDetection.md) hook. ## Reference @@ -34,7 +33,7 @@ const detections = await ObjectDetectionModule.forward(imageUri); Type definitions ```typescript -type ResourceSource = string | number; +type ResourceSource = string | number | object; interface Bbox { x1: number; diff --git a/docs/docs/hookless-api/SpeechToTextModule.md b/docs/docs/typescript-api/SpeechToTextModule.md similarity index 56% rename from docs/docs/hookless-api/SpeechToTextModule.md rename to docs/docs/typescript-api/SpeechToTextModule.md index f31087d37..c006baa75 100644 --- a/docs/docs/hookless-api/SpeechToTextModule.md +++ b/docs/docs/typescript-api/SpeechToTextModule.md @@ -1,9 +1,8 @@ --- title: SpeechToTextModule -sidebar_position: 6 --- -Hookless implementation of the [useSpeechToText](../speech-to-text/useSpeechToText.md) hook. +TypeScript API implementation of the [useSpeechToText](../natural-language-processing/useSpeechToText.md) hook. ## Reference @@ -38,19 +37,97 @@ const transcribedText = await SpeechToTextModule.transcribe(waveform); ### Methods -| Method | Type | Description | -| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `load` | (modelName: 'whisper' | 'moonshine, transcribeCallback?: (sequence: string) => void, modelDownloadProgressCallback?: (downloadProgress: number) => void, encoderSource?: ResourceSource, decoderSource?: ResourceSource, tokenizerSource?: ResourceSource) | Loads the model specified with `modelName`, where `encoderSource`, `decoderSource`, `tokenizerSource` are strings specifying the location of the binaries for the models. `modelDownloadProgressCallback` allows you to monitor the current progress of the model download, while `transcribeCallback` is invoked with each generated token | -| `transcribe` | `(waveform: number[]): Promise` | Starts a transcription process for a given input array, which should be a waveform at 16kHz. Resolves a promise with the output transcription when the model is finished. | -| `encode` | `(waveform: number[]) => Promise` | Runs the encoding part of the model. Returns a float array representing the output of the encoder. | -| `decode` | `(tokens: number[], encodings?: number[]) => Promise` | Runs the decoder of the model. Returns a single token representing a next token in the output sequence. If `encodings` are provided then they are used for decoding process, if not then the cached encodings from most recent `encode` call are used. The cached option is much faster due to very large overhead for communication between native and react layers. | -| `configureStreaming` | (overlapSeconds?: number, windowSize?: number, streamingConfig?: 'fast' | 'balanced' | 'quality') => void | Configures options for the streaming algorithm:
  • `overlapSeconds` determines how much adjacent audio chunks overlap (increasing it slows down transcription, decreases probability of weird wording at the chunks intersection, setting it larger than 3 seconds generally is discouraged),
  • `windowSize` describes size of the audio chunks (increasing it speeds up the end to end transcription time, but increases latency for the first token to be returned),
  • `streamingConfig` predefined configs for `windowSize` and `overlapSeconds` values.
Keep `windowSize + 2 * overlapSeconds <= 30`. | +| Method | Type | Description | +| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `load` | (modelName: 'whisper' | 'moonshine' | 'whisperMultilingual', transcribeCallback?: (sequence: string) => void, modelDownloadProgressCallback?: (downloadProgress: number) => void, encoderSource?: ResourceSource, decoderSource?: ResourceSource, tokenizerSource?: ResourceSource) | Loads the model specified with `modelName`, where `encoderSource`, `decoderSource`, `tokenizerSource` are strings specifying the location of the binaries for the models. `modelDownloadProgressCallback` allows you to monitor the current progress of the model download, while `transcribeCallback` is invoked with each generated token | +| `transcribe` | `(waveform: number[], audioLanguage?: SpeechToTextLanguage): Promise` | Starts a transcription process for a given input array, which should be a waveform at 16kHz. Resolves a promise with the output transcription when the model is finished. For multilingual models, you have to specify the audioLanguage flag, which is the language of the spoken language in the audio. | +| `encode` | `(waveform: number[]) => Promise` | Runs the encoding part of the model. Returns a float array representing the output of the encoder. | +| `decode` | `(tokens: number[], encodings?: number[]) => Promise` | Runs the decoder of the model. Returns a single token representing a next token in the output sequence. If `encodings` are provided then they are used for decoding process, if not then the cached encodings from most recent `encode` call are used. The cached option is much faster due to very large overhead for communication between native and react layers. | +| `configureStreaming` | (overlapSeconds?: number, windowSize?: number, streamingConfig?: 'fast' | 'balanced' | 'quality') => void | Configures options for the streaming algorithm:
  • `overlapSeconds` determines how much adjacent audio chunks overlap (increasing it slows down transcription, decreases probability of weird wording at the chunks intersection, setting it larger than 3 seconds generally is discouraged),
  • `windowSize` describes size of the audio chunks (increasing it speeds up the end to end transcription time, but increases latency for the first token to be returned),
  • `streamingConfig` predefined configs for `windowSize` and `overlapSeconds` values.
Keep `windowSize + 2 * overlapSeconds <= 30`. |
Type definitions ```typescript -type ResourceSource = string | number; +type ResourceSource = string | number | object; + +enum SpeechToTextLanguage { + Afrikaans = 'af', + Albanian = 'sq', + Arabic = 'ar', + Armenian = 'hy', + Azerbaijani = 'az', + Basque = 'eu', + Belarusian = 'be', + Bengali = 'bn', + Bosnian = 'bs', + Bulgarian = 'bg', + Burmese = 'my', + Catalan = 'ca', + Chinese = 'zh', + Croatian = 'hr', + Czech = 'cs', + Danish = 'da', + Dutch = 'nl', + Estonian = 'et', + English = 'en', + Finnish = 'fi', + French = 'fr', + Galician = 'gl', + Georgian = 'ka', + German = 'de', + Greek = 'el', + Gujarati = 'gu', + HaitianCreole = 'ht', + Hebrew = 'he', + Hindi = 'hi', + Hungarian = 'hu', + Icelandic = 'is', + Indonesian = 'id', + Italian = 'it', + Japanese = 'ja', + Kannada = 'kn', + Kazakh = 'kk', + Khmer = 'km', + Korean = 'ko', + Lao = 'lo', + Latvian = 'lv', + Lithuanian = 'lt', + Macedonian = 'mk', + Malagasy = 'mg', + Malay = 'ms', + Malayalam = 'ml', + Maltese = 'mt', + Marathi = 'mr', + Nepali = 'ne', + Norwegian = 'no', + Persian = 'fa', + Polish = 'pl', + Portuguese = 'pt', + Punjabi = 'pa', + Romanian = 'ro', + Russian = 'ru', + Serbian = 'sr', + Sinhala = 'si', + Slovak = 'sk', + Slovenian = 'sl', + Spanish = 'es', + Sundanese = 'su', + Swahili = 'sw', + Swedish = 'sv', + Tagalog = 'tl', + Tajik = 'tg', + Tamil = 'ta', + Telugu = 'te', + Thai = 'th', + Turkish = 'tr', + Ukrainian = 'uk', + Urdu = 'ur', + Uzbek = 'uz', + Vietnamese = 'vi', + Welsh = 'cy', + Yiddish = 'yi', +} ```
@@ -63,6 +140,19 @@ To load the model, use the `load` method. The required argument is `modelName`, To run the model, you can use the `transcribe` method. It accepts one argument, which is an array of numbers representing a waveform at 16kHz sampling rate. The method returns a promise, which can resolve either to an error or a string containing the output text. +### Multilingual transcription + +If you aim to obtain a transcription in other languages than English, in v0.4.0 we introduced a new model - `whisperMultilingual`, a multilingual version of Whisper. To obtain the output text in your desired language, make sure pass `audioLanguage` to `transcribe`. You should not pass this flag if you're using a non-multilingual model. For example: + +```typescript +import { SpeechToTextLanguage } from 'react-native-executorch'; + +// Rest of your code... +const mySpanishAudio = ...; +await model.transcribe(mySpanishAudio, SpeechToTextLanguage.Spanish); +// Rest of your code... +``` + ## Obtaining the input You need to parse audio to waveform in 16kHz, you can do that in any way most suitable to you. In the snippet at the top of the page we provide an example using `react-native-audio-api`. Once you have the waveform simply pass it as the only argument to `transcribe` method. diff --git a/docs/docs/hookless-api/StyleTransferModule.md b/docs/docs/typescript-api/StyleTransferModule.md similarity index 92% rename from docs/docs/hookless-api/StyleTransferModule.md rename to docs/docs/typescript-api/StyleTransferModule.md index 29c750bee..88a7207d4 100644 --- a/docs/docs/hookless-api/StyleTransferModule.md +++ b/docs/docs/typescript-api/StyleTransferModule.md @@ -1,9 +1,8 @@ --- title: StyleTransferModule -sidebar_position: 4 --- -Hookless implementation of the [useStyleTransfer](../computer-vision/useStyleTransfer.md) hook. +TypeScript API implementation of the [useStyleTransfer](../computer-vision/useStyleTransfer.md) hook. ## Reference @@ -34,7 +33,7 @@ const generatedImageUrl = await StyleTransferModule.forward(imageUri); Type definitions ```typescript -type ResourceSource = string | number; +type ResourceSource = string | number | object; ``` diff --git a/docs/docs/typescript-api/TextEmbeddingsModule.md b/docs/docs/typescript-api/TextEmbeddingsModule.md new file mode 100644 index 000000000..c853ad770 --- /dev/null +++ b/docs/docs/typescript-api/TextEmbeddingsModule.md @@ -0,0 +1,46 @@ +--- +title: TextEmbeddingsModule +--- + +TypeScript API implementation of the [useTextEmbeddings](../natural-language-processing/useTextEmbeddings.md) hook. + +## Reference + +```typescript +import { + TextEmbeddingsModule, + ALL_MINILM_L6_V2, + All_MINILM_L6_V2_TOKENIZER, +} from 'react-native-executorch'; + +// Loading the model +await TextEmbeddingsModule.load(ALL_MINILM_L6_V2, All_MINILM_L6_V2_TOKENIZER); + +// Running the model +const embedding = await TextEmbeddingsModule.forward('Hello World!'); +``` + +### Methods + +| Method | Type | Description | +| -------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `load` | `(modelSource: ResourceSource, tokenizerSource: ResourceSource): Promise` | Loads the model, where `modelSource` is a string that specifies the location of the model binary and `tokenizerSource` is a string that specifies the location of the tokenizer JSON file. | +| `forward` | `(input: string): Promise` | Executes the model's forward pass, where `input` is a text that will be embedded. | +| `onDownloadProgress` | `(callback: (downloadProgress: number) => void): any` | Subscribe to the download progress event. | + +
+Type definitions + +```typescript +type ResourceSource = string | number | object; +``` + +
+ +## Loading the model + +To load the model, use the `load` method. It accepts the `modelSource` which is a string that specifies the location of the model binary and `tokenizerSource` which is a string that specifies the location of the tokenizer JSON file. For more information, take a look at [loading models](../fundamentals/loading-models.md) page. This method returns a promise, which can resolve to an error or void. + +## Running the model + +To run the model, you can use the `forward` method. It accepts one argument, which is the text you want to embed. The method returns a promise, which can resolve either to an error or an array of numbers representing the embedding. diff --git a/docs/docs/typescript-api/TokenizerModule.md b/docs/docs/typescript-api/TokenizerModule.md new file mode 100644 index 000000000..8ba0b4d19 --- /dev/null +++ b/docs/docs/typescript-api/TokenizerModule.md @@ -0,0 +1,60 @@ +--- +title: TokenizerModule +--- + +TypeScript API implementation of the [useTokenizer](../natural-language-processing/useTokenizer.md) hook. + +## Reference + +```typescript +import { + TokenizerModule, + ALL_MINILM_L6_V2_TOKENIZER, +} from 'react-native-executorch'; + +// Load the tokenizer +await TokenizerModule.load(ALL_MINILM_L6_V2_TOKENIZER); +console.log('Tokenizer loaded'); + +// Get tokenizers vocabulary size +const vocabSize = await TokenizerModule.getVocabSize(); +console.log('Vocabulary size:', vocabSize); + +const text = 'Hello, world!'; + +// Tokenize the text +const tokens = await TokenizerModule.encode(text); +console.log('Token IDs:', tokens); + +// Decode the tokens back to text +const decoded = await TokenizerModule.decode(tokens); +console.log('Decoded text:', decoded); + +// Get the token ID for a specific token +const tokenId = await TokenizerModule.tokenToId('hello'); +console.log('Token ID for "Hello":', tokenId); + +// Get the token for a specific ID +const token = await TokenizerModule.idToToken(tokenId); +console.log('Token for ID:', token); +``` + +### Methods + +| Method | Type | Description | +| -------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `load` | `(tokenizerSource: ResourceSource): Promise` | Loads the tokenizer from the specified source. `tokenizerSource` is a string that points to the location of the tokenizer JSON file. | +| `encode` | `(input: string): Promise` | Converts a string into an array of token IDs. | +| `decode` | `(input: number[]): Promise` | Converts an array of token IDs into a string. | +| `getVocabSize` | `(): Promise` | Returns the size of the tokenizer's vocabulary. | +| `idToToken` | `(tokenId: number): Promise` | Returns the token associated to the ID. | +| `tokenToId` | `(token: string): Promise` | Returns the ID associated to the token. | + +
+Type definitions + +```typescript +type ResourceSource = string | number | object; +``` + +
diff --git a/docs/docs/hookless-api/VerticalOCRModule.md b/docs/docs/typescript-api/VerticalOCRModule.md similarity index 86% rename from docs/docs/hookless-api/VerticalOCRModule.md rename to docs/docs/typescript-api/VerticalOCRModule.md index d876b8277..2a7bf887b 100644 --- a/docs/docs/hookless-api/VerticalOCRModule.md +++ b/docs/docs/typescript-api/VerticalOCRModule.md @@ -1,9 +1,8 @@ --- title: VerticalOCRModule -sidebar_position: 7 --- -Hookless implementation of the [useVerticalOCR](../computer-vision/useVerticalOCR.md) hook. +TypeScript API implementation of the [useVerticalOCR](../computer-vision/useVerticalOCR.md) hook. ## Reference @@ -58,7 +57,71 @@ interface RecognizerSources { recognizerSmall: string | number; } -type OCRLanguage = 'en'; +type OCRLanguage = + | 'abq' + | 'ady' + | 'af' + | 'ava' + | 'az' + | 'be' + | 'bg' + | 'bs' + | 'ch_sim' + | 'che' + | 'cs' + | 'cy' + | 'da' + | 'dar' + | 'de' + | 'en' + | 'es' + | 'et' + | 'fr' + | 'ga' + | 'hr' + | 'hu' + | 'id' + | 'inh' + | 'ic' + | 'it' + | 'ja' + | 'kbd' + | 'kn' + | 'ko' + | 'ku' + | 'la' + | 'lbe' + | 'lez' + | 'lt' + | 'lv' + | 'mi' + | 'mn' + | 'ms' + | 'mt' + | 'nl' + | 'no' + | 'oc' + | 'pi' + | 'pl' + | 'pt' + | 'ro' + | 'ru' + | 'rs_cyrillic' + | 'rs_latin' + | 'sk' + | 'sl' + | 'sq' + | 'sv' + | 'sw' + | 'tab' + | 'te' + | 'th' + | 'tjk' + | 'tl' + | 'tr' + | 'uk' + | 'uz' + | 'vi'; interface Point { x: number; diff --git a/docs/docs/speech-to-text/_category_.json b/docs/docs/typescript-api/_category_.json similarity index 52% rename from docs/docs/speech-to-text/_category_.json rename to docs/docs/typescript-api/_category_.json index 554e3476a..556f0f3e7 100644 --- a/docs/docs/speech-to-text/_category_.json +++ b/docs/docs/typescript-api/_category_.json @@ -1,6 +1,6 @@ { - "label": "Speech To Text", - "position": 3, + "label": "TypeScript API", + "position": 4, "link": { "type": "generated-index" } diff --git a/docs/docs/module-api/_category_.json b/docs/docs/utilities/_category_.json similarity index 72% rename from docs/docs/module-api/_category_.json rename to docs/docs/utilities/_category_.json index 8cc82679c..6b399b1f8 100644 --- a/docs/docs/module-api/_category_.json +++ b/docs/docs/utilities/_category_.json @@ -1,5 +1,5 @@ { - "label": "Module API", + "label": "Utilities", "position": 6, "link": { "type": "generated-index" diff --git a/docs/docs/utils/list-downloaded-resources.md b/docs/docs/utilities/list-downloaded-resources.md similarity index 100% rename from docs/docs/utils/list-downloaded-resources.md rename to docs/docs/utilities/list-downloaded-resources.md diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 084af265a..8f66f89c6 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -34,6 +34,7 @@ const config = { customCss: require.resolve('./src/css/index.css'), }, gtag: { + // eslint-disable-next-line @cspell/spellchecker trackingID: 'G-TJND8QJM9P', anonymizeIP: true, }, @@ -88,6 +89,7 @@ const config = { darkTheme: darkCodeTheme, }, algolia: { + // eslint-disable-next-line @cspell/spellchecker appId: '9PIVJVUUXB', apiKey: '8634751cfd500c6708f63ea5fc7446c6', indexName: 'swmansion', diff --git a/docs/src/theme/CodeBlock/highlighting-dark.js b/docs/src/theme/CodeBlock/highlighting-dark.js index e192cd22d..adef025e3 100644 --- a/docs/src/theme/CodeBlock/highlighting-dark.js +++ b/docs/src/theme/CodeBlock/highlighting-dark.js @@ -21,6 +21,7 @@ module.exports = { }, }, { + // eslint-disable-next-line @cspell/spellchecker types: ['string', 'property', 'atrule', 'selector', 'tag'], style: { color: 'var(--swm-navy-light-40)', diff --git a/docs/src/theme/CodeBlock/highlighting-light.js b/docs/src/theme/CodeBlock/highlighting-light.js index 13e5d1aca..99f4e0475 100644 --- a/docs/src/theme/CodeBlock/highlighting-light.js +++ b/docs/src/theme/CodeBlock/highlighting-light.js @@ -21,6 +21,7 @@ module.exports = { }, }, { + // eslint-disable-next-line @cspell/spellchecker types: ['string', 'property', 'atrule', 'selector', 'tag'], style: { color: 'var(--swm-navy-light-80)', diff --git a/examples/computer-vision/App.tsx b/examples/computer-vision/App.tsx index c79519ca8..e0c869b91 100644 --- a/examples/computer-vision/App.tsx +++ b/examples/computer-vision/App.tsx @@ -10,6 +10,7 @@ import { ClassificationScreen } from './screens/ClassificationScreen'; import { ObjectDetectionScreen } from './screens/ObjectDetectionScreen'; import { OCRScreen } from './screens/OCRScreen'; import { VerticalOCRScreen } from './screens/VerticalOCRScreen'; +import { ImageSegmentationScreen } from './screens/ImageSegmentationScreen'; enum ModelType { STYLE_TRANSFER, @@ -17,6 +18,7 @@ enum ModelType { CLASSIFICATION, OCR, VERTICAL_OCR, + IMAGE_SEGMENTATION, } export default function App() { @@ -56,6 +58,13 @@ export default function App() { return ( ); + case ModelType.IMAGE_SEGMENTATION: + return ( + + ); default: return ( @@ -76,6 +85,7 @@ export default function App() { 'Classification', 'OCR', 'Vertical OCR', + 'Image Segmentation', ]} onValueChange={(_, selectedIndex) => { handleModeChange(selectedIndex); diff --git a/examples/computer-vision/android/app/src/main/res/values/styles.xml b/examples/computer-vision/android/app/src/main/res/values/styles.xml index da525212e..4fbf9a105 100644 --- a/examples/computer-vision/android/app/src/main/res/values/styles.xml +++ b/examples/computer-vision/android/app/src/main/res/values/styles.xml @@ -3,6 +3,7 @@ @android:color/black @style/ResetEditText @drawable/rn_edit_text_material + true @color/colorPrimary #ffffff diff --git a/examples/computer-vision/android/build.gradle b/examples/computer-vision/android/build.gradle index e34231b2f..abbcb8ec8 100644 --- a/examples/computer-vision/android/build.gradle +++ b/examples/computer-vision/android/build.gradle @@ -6,7 +6,7 @@ buildscript { minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24') compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35') targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34') - kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.24' + kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25' ndkVersion = "26.1.10909125" } diff --git a/examples/computer-vision/android/gradle.properties b/examples/computer-vision/android/gradle.properties index 7531e9eb2..9f8da2272 100644 --- a/examples/computer-vision/android/gradle.properties +++ b/examples/computer-vision/android/gradle.properties @@ -54,3 +54,6 @@ EX_DEV_CLIENT_NETWORK_INSPECTOR=true # Use legacy packaging to compress native libraries in the resulting APK. expo.useLegacyPackaging=false + +# Whether the app is configured to use edge-to-edge via the app config or `react-native-edge-to-edge` plugin +expo.edgeToEdgeEnabled=false \ No newline at end of file diff --git a/examples/computer-vision/android/settings.gradle b/examples/computer-vision/android/settings.gradle index 9f7256f7d..994aca87b 100644 --- a/examples/computer-vision/android/settings.gradle +++ b/examples/computer-vision/android/settings.gradle @@ -1,5 +1,5 @@ pluginManagement { - includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile().toString()) + includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().toString()) } plugins { id("com.facebook.react.settings") } diff --git a/examples/computer-vision/app.json b/examples/computer-vision/app.json index 59e70db87..0d2e8b221 100644 --- a/examples/computer-vision/app.json +++ b/examples/computer-vision/app.json @@ -28,6 +28,7 @@ }, "web": { "favicon": "./assets/icons/favicon.png" - } + }, + "plugins": ["expo-font"] } } diff --git a/examples/computer-vision/ios/Podfile.lock b/examples/computer-vision/ios/Podfile.lock index 0292515a0..b11ac3d43 100644 --- a/examples/computer-vision/ios/Podfile.lock +++ b/examples/computer-vision/ios/Podfile.lock @@ -1,23 +1,23 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - - EXConstants (17.0.3): + - EXConstants (17.0.8): - ExpoModulesCore - - Expo (52.0.19): + - Expo (52.0.46): - ExpoModulesCore - - ExpoAsset (11.0.1): + - ExpoAsset (11.0.5): - ExpoModulesCore - - ExpoFileSystem (18.0.6): + - ExpoFileSystem (18.0.12): - ExpoModulesCore - - ExpoFont (13.0.1): + - ExpoFont (13.0.4): - ExpoModulesCore - - ExpoKeepAwake (14.0.1): + - ExpoKeepAwake (14.0.3): - ExpoModulesCore - - ExpoModulesCore (2.1.2): + - ExpoModulesCore (2.2.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -36,55 +36,59 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - FBLazyVector (0.76.3) - - fmt (9.1.0) + - fast_float (6.1.4) + - FBLazyVector (0.76.9) + - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.76.3): - - hermes-engine/Pre-built (= 0.76.3) - - hermes-engine/Pre-built (0.76.3) - - opencv-rne (0.1.0) - - RCT-Folly (2024.01.01.00): + - hermes-engine (0.76.9): + - hermes-engine/Pre-built (= 0.76.9) + - hermes-engine/Pre-built (0.76.9) + - opencv-rne (4.11.0) + - RCT-Folly (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Default (= 2024.01.01.00) - - RCT-Folly/Default (2024.01.01.00): + - RCT-Folly/Default (= 2024.10.14.00) + - RCT-Folly/Default (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Fabric (2024.01.01.00): + - RCT-Folly/Fabric (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) - - glog - - RCTDeprecation (0.76.3) - - RCTRequired (0.76.3) - - RCTTypeSafety (0.76.3): - - FBLazyVector (= 0.76.3) - - RCTRequired (= 0.76.3) - - React-Core (= 0.76.3) - - React (0.76.3): - - React-Core (= 0.76.3) - - React-Core/DevSupport (= 0.76.3) - - React-Core/RCTWebSocket (= 0.76.3) - - React-RCTActionSheet (= 0.76.3) - - React-RCTAnimation (= 0.76.3) - - React-RCTBlob (= 0.76.3) - - React-RCTImage (= 0.76.3) - - React-RCTLinking (= 0.76.3) - - React-RCTNetwork (= 0.76.3) - - React-RCTSettings (= 0.76.3) - - React-RCTText (= 0.76.3) - - React-RCTVibration (= 0.76.3) - - React-callinvoker (0.76.3) - - React-Core (0.76.3): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - fast_float + - fmt + - glog + - RCTDeprecation (0.76.9) + - RCTRequired (0.76.9) + - RCTTypeSafety (0.76.9): + - FBLazyVector (= 0.76.9) + - RCTRequired (= 0.76.9) + - React-Core (= 0.76.9) + - React (0.76.9): + - React-Core (= 0.76.9) + - React-Core/DevSupport (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) + - React-RCTActionSheet (= 0.76.9) + - React-RCTAnimation (= 0.76.9) + - React-RCTBlob (= 0.76.9) + - React-RCTImage (= 0.76.9) + - React-RCTLinking (= 0.76.9) + - React-RCTNetwork (= 0.76.9) + - React-RCTSettings (= 0.76.9) + - React-RCTText (= 0.76.9) + - React-RCTVibration (= 0.76.9) + - React-callinvoker (0.76.9) + - React-Core (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) + - React-Core/Default (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -96,10 +100,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.76.3): + - React-Core/CoreModulesHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -113,10 +117,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.76.3): + - React-Core/Default (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-cxxreact - React-featureflags @@ -129,13 +133,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.76.3): + - React-Core/DevSupport (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) - - React-Core/RCTWebSocket (= 0.76.3) + - React-Core/Default (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -147,10 +151,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.76.3): + - React-Core/RCTActionSheetHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -164,10 +168,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.76.3): + - React-Core/RCTAnimationHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -181,10 +185,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.76.3): + - React-Core/RCTBlobHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -198,10 +202,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.76.3): + - React-Core/RCTImageHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -215,10 +219,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.76.3): + - React-Core/RCTLinkingHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -232,10 +236,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.76.3): + - React-Core/RCTNetworkHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -249,10 +253,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.76.3): + - React-Core/RCTSettingsHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -266,10 +270,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.76.3): + - React-Core/RCTTextHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -283,10 +287,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.76.3): + - React-Core/RCTVibrationHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -300,12 +304,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.76.3): + - React-Core/RCTWebSocket (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) + - React-Core/Default (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -317,41 +321,43 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.76.3): + - React-CoreModules (0.76.9): - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.76.3) - - React-Core/CoreModulesHeaders (= 0.76.3) - - React-jsi (= 0.76.3) + - fast_float + - fmt + - RCT-Folly + - RCTTypeSafety + - React-Core/CoreModulesHeaders + - React-jsi - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.76.3) + - React-RCTImage - ReactCodegen - ReactCommon - - SocketRocket (= 0.7.1) - - React-cxxreact (0.76.3): + - SocketRocket + - React-cxxreact (0.76.9): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-debug (= 0.76.3) - - React-jsi (= 0.76.3) + - RCT-Folly + - React-callinvoker + - React-debug + - React-jsi - React-jsinspector - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - React-runtimeexecutor (= 0.76.3) - - React-timing (= 0.76.3) - - React-debug (0.76.3) - - React-defaultsnativemodule (0.76.3): + - React-logger + - React-perflogger + - React-runtimeexecutor + - React-timing + - React-debug (0.76.9) + - React-defaultsnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -372,11 +378,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-domnativemodule (0.76.3): + - React-domnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -394,32 +400,33 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.76.3): + - React-Fabric (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.76.3) - - React-Fabric/attributedstring (= 0.76.3) - - React-Fabric/componentregistry (= 0.76.3) - - React-Fabric/componentregistrynative (= 0.76.3) - - React-Fabric/components (= 0.76.3) - - React-Fabric/core (= 0.76.3) - - React-Fabric/dom (= 0.76.3) - - React-Fabric/imagemanager (= 0.76.3) - - React-Fabric/leakchecker (= 0.76.3) - - React-Fabric/mounting (= 0.76.3) - - React-Fabric/observers (= 0.76.3) - - React-Fabric/scheduler (= 0.76.3) - - React-Fabric/telemetry (= 0.76.3) - - React-Fabric/templateprocessor (= 0.76.3) - - React-Fabric/uimanager (= 0.76.3) + - React-Fabric/animations (= 0.76.9) + - React-Fabric/attributedstring (= 0.76.9) + - React-Fabric/componentregistry (= 0.76.9) + - React-Fabric/componentregistrynative (= 0.76.9) + - React-Fabric/components (= 0.76.9) + - React-Fabric/core (= 0.76.9) + - React-Fabric/dom (= 0.76.9) + - React-Fabric/imagemanager (= 0.76.9) + - React-Fabric/leakchecker (= 0.76.9) + - React-Fabric/mounting (= 0.76.9) + - React-Fabric/observers (= 0.76.9) + - React-Fabric/scheduler (= 0.76.9) + - React-Fabric/telemetry (= 0.76.9) + - React-Fabric/templateprocessor (= 0.76.9) + - React-Fabric/uimanager (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -429,12 +436,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.76.3): + - React-Fabric/animations (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -449,12 +457,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.76.3): + - React-Fabric/attributedstring (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -469,12 +478,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.76.3): + - React-Fabric/componentregistry (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -489,12 +499,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.76.3): + - React-Fabric/componentregistrynative (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -509,20 +520,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.76.3): + - React-Fabric/components (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.76.3) - - React-Fabric/components/root (= 0.76.3) - - React-Fabric/components/view (= 0.76.3) + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.9) + - React-Fabric/components/root (= 0.76.9) + - React-Fabric/components/view (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -532,12 +544,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.76.3): + - React-Fabric/components/legacyviewmanagerinterop (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -552,12 +565,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.76.3): + - React-Fabric/components/root (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -572,12 +586,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.76.3): + - React-Fabric/components/view (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -593,12 +608,13 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.76.3): + - React-Fabric/core (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -613,12 +629,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.76.3): + - React-Fabric/dom (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -633,12 +650,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.76.3): + - React-Fabric/imagemanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -653,12 +671,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.76.3): + - React-Fabric/leakchecker (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -673,12 +692,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.76.3): + - React-Fabric/mounting (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -693,18 +713,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.76.3): + - React-Fabric/observers (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.76.3) + - React-Fabric/observers/events (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -714,12 +735,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.76.3): + - React-Fabric/observers/events (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -734,12 +756,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.76.3): + - React-Fabric/scheduler (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -756,12 +779,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.76.3): + - React-Fabric/telemetry (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -776,12 +800,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.76.3): + - React-Fabric/templateprocessor (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -796,18 +821,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.76.3): + - React-Fabric/uimanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.76.3) + - React-Fabric/uimanager/consistency (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -818,12 +844,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.76.3): + - React-Fabric/uimanager/consistency (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -839,20 +866,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.76.3): + - React-FabricComponents (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.76.3) - - React-FabricComponents/textlayoutmanager (= 0.76.3) + - React-FabricComponents/components (= 0.76.9) + - React-FabricComponents/textlayoutmanager (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -864,27 +892,28 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.76.3): + - React-FabricComponents/components (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.76.3) - - React-FabricComponents/components/iostextinput (= 0.76.3) - - React-FabricComponents/components/modal (= 0.76.3) - - React-FabricComponents/components/rncore (= 0.76.3) - - React-FabricComponents/components/safeareaview (= 0.76.3) - - React-FabricComponents/components/scrollview (= 0.76.3) - - React-FabricComponents/components/text (= 0.76.3) - - React-FabricComponents/components/textinput (= 0.76.3) - - React-FabricComponents/components/unimplementedview (= 0.76.3) + - React-FabricComponents/components/inputaccessory (= 0.76.9) + - React-FabricComponents/components/iostextinput (= 0.76.9) + - React-FabricComponents/components/modal (= 0.76.9) + - React-FabricComponents/components/rncore (= 0.76.9) + - React-FabricComponents/components/safeareaview (= 0.76.9) + - React-FabricComponents/components/scrollview (= 0.76.9) + - React-FabricComponents/components/text (= 0.76.9) + - React-FabricComponents/components/textinput (= 0.76.9) + - React-FabricComponents/components/unimplementedview (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -896,12 +925,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.76.3): + - React-FabricComponents/components/inputaccessory (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -919,12 +949,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.76.3): + - React-FabricComponents/components/iostextinput (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -942,12 +973,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.76.3): + - React-FabricComponents/components/modal (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -965,12 +997,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.76.3): + - React-FabricComponents/components/rncore (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -988,12 +1021,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.76.3): + - React-FabricComponents/components/safeareaview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1011,12 +1045,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.76.3): + - React-FabricComponents/components/scrollview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1034,12 +1069,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.76.3): + - React-FabricComponents/components/text (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1057,12 +1093,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.76.3): + - React-FabricComponents/components/textinput (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1080,12 +1117,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.76.3): + - React-FabricComponents/components/unimplementedview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1103,12 +1141,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.76.3): + - React-FabricComponents/textlayoutmanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1126,30 +1165,31 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.76.3): + - React-FabricImage (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.76.3) - - RCTTypeSafety (= 0.76.3) + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.76.3) + - React-jsiexecutor - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.76.3) - - React-featureflagsnativemodule (0.76.3): + - React-featureflags (0.76.9) + - React-featureflagsnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1166,31 +1206,33 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-graphics (0.76.3): + - React-graphics (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.76.3): + - React-hermes (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.3) + - RCT-Folly + - React-cxxreact - React-jsi - - React-jsiexecutor (= 0.76.3) + - React-jsiexecutor - React-jsinspector - - React-perflogger (= 0.76.3) + - React-perflogger - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.76.3): + - React-idlecallbacksnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1208,7 +1250,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-ImageManager (0.76.3): + - React-ImageManager (0.76.9): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1217,51 +1259,53 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.76.3): + - React-jserrorhandler (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-cxxreact - React-debug - React-jsi - - React-jsi (0.76.3): + - React-jsi (0.76.9): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.76.3): + - RCT-Folly + - React-jsiexecutor (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) + - RCT-Folly + - React-cxxreact + - React-jsi - React-jsinspector - - React-perflogger (= 0.76.3) - - React-jsinspector (0.76.3): + - React-perflogger + - React-jsinspector (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly - React-featureflags - React-jsi - - React-perflogger (= 0.76.3) - - React-runtimeexecutor (= 0.76.3) - - React-jsitracing (0.76.3): + - React-perflogger + - React-runtimeexecutor + - React-jsitracing (0.76.9): - React-jsi - - React-logger (0.76.3): + - React-logger (0.76.9): - glog - - React-Mapbuffer (0.76.3): + - React-Mapbuffer (0.76.9): - glog - React-debug - - React-microtasksnativemodule (0.76.3): + - React-microtasksnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1278,12 +1322,12 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-executorch (0.3.1): + - react-native-executorch (0.3.2): - DoubleConversion - glog - hermes-engine - - opencv-rne (~> 0.1.0) - - RCT-Folly (= 2024.01.01.00) + - opencv-rne (~> 4.11.0) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1299,12 +1343,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - sqlite3 - Yoga - react-native-image-picker (7.2.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1321,11 +1366,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context (5.0.0): + - react-native-safe-area-context (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1334,8 +1379,8 @@ PODS: - React-featureflags - React-graphics - React-ImageManager - - react-native-safe-area-context/common (= 5.0.0) - - react-native-safe-area-context/fabric (= 5.0.0) + - react-native-safe-area-context/common (= 4.12.0) + - react-native-safe-area-context/fabric (= 4.12.0) - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1344,11 +1389,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context/common (5.0.0): + - react-native-safe-area-context/common (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1365,11 +1410,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context/fabric (5.0.0): + - react-native-safe-area-context/fabric (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1387,8 +1432,31 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-nativeconfig (0.76.3) - - React-NativeModulesApple (0.76.3): + - react-native-skia (1.5.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React + - React-callinvoker + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-nativeconfig (0.76.9) + - React-NativeModulesApple (0.76.9): - glog - hermes-engine - React-callinvoker @@ -1399,25 +1467,25 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.76.3): + - React-perflogger (0.76.9): - DoubleConversion - - RCT-Folly (= 2024.01.01.00) - - React-performancetimeline (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) + - React-performancetimeline (0.76.9): + - RCT-Folly (= 2024.10.14.00) - React-cxxreact - React-timing - - React-RCTActionSheet (0.76.3): - - React-Core/RCTActionSheetHeaders (= 0.76.3) - - React-RCTAnimation (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTActionSheet (0.76.9): + - React-Core/RCTActionSheetHeaders (= 0.76.9) + - React-RCTAnimation (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTAppDelegate (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTAppDelegate (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1441,11 +1509,12 @@ PODS: - React-utils - ReactCodegen - ReactCommon - - React-RCTBlob (0.76.3): + - React-RCTBlob (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -1454,10 +1523,10 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTFabric (0.76.3): + - React-RCTFabric (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-Core - React-debug - React-Fabric @@ -1477,8 +1546,8 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTImage (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTImageHeaders - React-jsi @@ -1486,49 +1555,50 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTLinking (0.76.3): - - React-Core/RCTLinkingHeaders (= 0.76.3) - - React-jsi (= 0.76.3) + - React-RCTLinking (0.76.9): + - React-Core/RCTLinkingHeaders (= 0.76.9) + - React-jsi (= 0.76.9) - React-NativeModulesApple - ReactCodegen - ReactCommon - - ReactCommon/turbomodule/core (= 0.76.3) - - React-RCTNetwork (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - ReactCommon/turbomodule/core (= 0.76.9) + - React-RCTNetwork (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTSettings (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTSettings (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTText (0.76.3): - - React-Core/RCTTextHeaders (= 0.76.3) + - React-RCTText (0.76.9): + - React-Core/RCTTextHeaders (= 0.76.9) - Yoga - - React-RCTVibration (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTVibration (0.76.9): + - RCT-Folly (= 2024.10.14.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-rendererconsistency (0.76.3) - - React-rendererdebug (0.76.3): + - React-rendererconsistency (0.76.9) + - React-rendererdebug (0.76.9): - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) + - fast_float + - fmt + - RCT-Folly - React-debug - - React-rncore (0.76.3) - - React-RuntimeApple (0.76.3): + - React-rncore (0.76.9) + - React-RuntimeApple (0.76.9): - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-callinvoker - React-Core/Default - React-CoreModules @@ -1545,10 +1615,10 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.76.3): + - React-RuntimeCore (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-cxxreact - React-featureflags - React-jserrorhandler @@ -1559,11 +1629,11 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.76.3): - - React-jsi (= 0.76.3) - - React-RuntimeHermes (0.76.3): + - React-runtimeexecutor (0.76.9): + - React-jsi (= 0.76.9) + - React-RuntimeHermes (0.76.9): - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-featureflags - React-hermes - React-jsi @@ -1572,10 +1642,10 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.76.3): + - React-runtimescheduler (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-callinvoker - React-cxxreact - React-debug @@ -1587,14 +1657,14 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.76.3) - - React-utils (0.76.3): + - React-timing (0.76.9) + - React-utils (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-debug - - React-jsi (= 0.76.3) - - ReactCodegen (0.76.3): + - React-jsi (= 0.76.9) + - ReactCodegen (0.76.9): - DoubleConversion - glog - hermes-engine @@ -1614,51 +1684,54 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.76.3): - - ReactCommon/turbomodule (= 0.76.3) - - ReactCommon/turbomodule (0.76.3): + - ReactCommon (0.76.9): + - ReactCommon/turbomodule (= 0.76.9) + - ReactCommon/turbomodule (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - ReactCommon/turbomodule/bridging (= 0.76.3) - - ReactCommon/turbomodule/core (= 0.76.3) - - ReactCommon/turbomodule/bridging (0.76.3): + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi + - React-logger + - React-perflogger + - ReactCommon/turbomodule/bridging (= 0.76.9) + - ReactCommon/turbomodule/core (= 0.76.9) + - ReactCommon/turbomodule/bridging (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - ReactCommon/turbomodule/core (0.76.3): + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi (= 0.76.9) + - React-logger + - React-perflogger + - ReactCommon/turbomodule/core (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-debug (= 0.76.3) - - React-featureflags (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - React-utils (= 0.76.3) - - RNReanimated (3.16.5): + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-debug (= 0.76.9) + - React-featureflags (= 0.76.9) + - React-jsi + - React-logger + - React-perflogger + - React-utils (= 0.76.9) + - RNReanimated (3.16.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1674,14 +1747,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.16.5) - - RNReanimated/worklets (= 3.16.5) + - RNReanimated/reanimated (= 3.16.7) + - RNReanimated/worklets (= 3.16.7) - Yoga - - RNReanimated/reanimated (3.16.5): + - RNReanimated/reanimated (3.16.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1697,13 +1770,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.16.5) + - RNReanimated/reanimated/apple (= 3.16.7) - Yoga - - RNReanimated/reanimated/apple (3.16.5): + - RNReanimated/reanimated/apple (3.16.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1720,11 +1793,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated/worklets (3.16.5): + - RNReanimated/worklets (3.16.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1741,11 +1814,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNSVG (15.10.1): + - RNSVG (15.8.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1761,13 +1834,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.10.1) + - RNSVG/common (= 15.8.0) - Yoga - - RNSVG/common (15.10.1): + - RNSVG/common (15.8.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1785,6 +1858,9 @@ PODS: - ReactCommon/turbomodule/core - Yoga - SocketRocket (0.7.1) + - sqlite3 (3.49.1): + - sqlite3/common (= 3.49.1) + - sqlite3/common (3.49.1) - Yoga (0.0.0) DEPENDENCIES: @@ -1797,6 +1873,7 @@ DEPENDENCIES: - ExpoFont (from `../node_modules/expo-font/ios`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) @@ -1835,6 +1912,7 @@ DEPENDENCIES: - react-native-executorch (from `../node_modules/react-native-executorch`) - react-native-image-picker (from `../node_modules/react-native-image-picker`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - "react-native-skia (from `../node_modules/@shopify/react-native-skia`)" - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) @@ -1870,6 +1948,7 @@ SPEC REPOS: trunk: - opencv-rne - SocketRocket + - sqlite3 EXTERNAL SOURCES: boost: @@ -1890,6 +1969,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-keep-awake/ios" ExpoModulesCore: :path: "../node_modules/expo-modules-core" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" fmt: @@ -1963,6 +2044,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-image-picker" react-native-safe-area-context: :path: "../node_modules/react-native-safe-area-context" + react-native-skia: + :path: "../node_modules/@shopify/react-native-skia" React-nativeconfig: :path: "../node_modules/react-native/ReactCommon" React-NativeModulesApple: @@ -2027,82 +2110,85 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 1dca942403ed9342f98334bf4c3621f011aa7946 DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 - EXConstants: dd2fe64c6cdb1383b694c309a63028a8e9f2be6d - Expo: d901db29ffb24ccad280920f3c6de69febb89935 - ExpoAsset: 8138f2a9ec55ae1ad7c3871448379f7d97692d15 - ExpoFileSystem: 179a0661fd6d3c4e5d7e500a99a9cd8b295d9566 - ExpoFont: 7522d869d84ee2ee8093ee997fef5b86f85d856b - ExpoKeepAwake: 783e68647b969b210a786047c3daa7b753dcac1f - ExpoModulesCore: 41844ce131433b266261b44012d5b41ac0513999 - FBLazyVector: be7314029d6ec6b90f0f75ce1195b8130ed9ac4f - fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be + EXConstants: fcfc75800824ac2d5c592b5bc74130bad17b146b + Expo: a6ff273c618506b12129a0d06f2a08201bfbcf43 + ExpoAsset: 48386d40d53a8c1738929b3ed509bcad595b5516 + ExpoFileSystem: 42d363d3b96f9afab980dcef60d5657a4443c655 + ExpoFont: f354e926f8feae5e831ec8087f36652b44a0b188 + ExpoKeepAwake: b0171a73665bfcefcfcc311742a72a956e6aa680 + ExpoModulesCore: c25d77625038b1968ea1afefc719862c0d8dd993 + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45 + fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6 glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a - hermes-engine: 0555a84ea495e8e3b4bde71b597cd87fbb382888 - opencv-rne: 63e933ae2373fc91351f9a348dc46c3f523c2d3f - RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648 - RCTDeprecation: 2c5e1000b04ab70b53956aa498bf7442c3c6e497 - RCTRequired: 5f785a001cf68a551c5f5040fb4c415672dbb481 - RCTTypeSafety: 6b98db8965005d32449605c0d005ecb4fee8a0f7 - React: 8077bf7c185afb515be82518507e16f71a247a5e - React-callinvoker: 519eee9520727805e2867a6d8dad4ebbeed543db - React-Core: e364ceda7d086c7d14adeec0eb880a90073e3dde - React-CoreModules: 291be650024d9db086c95fd1d7e7d9607c6de62b - React-cxxreact: 5cf17d13ca0fc0734e1bb0ed9615d1d1fc45ef78 - React-debug: 931ca94abd6b1bcab539e356e20df788afecae8f - React-defaultsnativemodule: 6afc2dd3619bac12dc54c1ee939bf14f9aa96b42 - React-domnativemodule: f140d46f6f3c3f1efc987c98b464fcbece0cc93a - React-Fabric: e1774fe4b579e34c2c5721e9351c8ce869e7b5f0 - React-FabricComponents: 528ff9f96d150379ed404221d70cc7019ca76865 - React-FabricImage: 31680b7ddc740e040277176fbd6541fcf0fd44af - React-featureflags: 7c7a74b65ee5a228f520b387ebfe0e8d9cecc622 - React-featureflagsnativemodule: dd3450366b1c9557975e457ce6baa151ccee84da - React-graphics: 7f0d3e06d356e8476bd8ba95d90762fc01138ebc - React-hermes: f83fafe6a1c845dace7abad4a5d7366cbb42ab96 - React-idlecallbacksnativemodule: 14ce331438e2bca7d464a8a211b14543aff4dc91 - React-ImageManager: 2b9274ea973f43597a554a182d7ef525836172c6 - React-jserrorhandler: 3b521485275d295cfc6ec6bfa921a1d608693ecf - React-jsi: fd23c1d759feb709784fd4c835b510b90a94dd12 - React-jsiexecutor: 74628d57accc03d4b5df53db813ef6dcd704c9ae - React-jsinspector: 89a1e27e97c762de81bd4b9cb1314750304bba38 - React-jsitracing: 11b6646d7b2ecdc7a475f65b2cb12d3805964195 - React-logger: 26155dc23db5c9038794db915f80bd2044512c2e - React-Mapbuffer: ad1ba0205205a16dbff11b8ade6d1b3959451658 - React-microtasksnativemodule: e771eb9eb6ace5884ee40a293a0e14a9d7a4343c - react-native-executorch: 5dc6cbade251d9f987964d0e1c5ea6da2f16e274 - react-native-image-picker: e7331948589e764ecd5a9c715c3fc14d4e6187e6 - react-native-safe-area-context: d6406c2adbd41b2e09ab1c386781dc1c81a90919 - React-nativeconfig: aeed6e2a8ac02b2df54476afcc7c663416c12bf7 - React-NativeModulesApple: c5b7813da94136f50ef084fa1ac077332dcfc658 - React-perflogger: 6afb7eebf7d9521cc70481688ccddf212970e9d3 - React-performancetimeline: 81884d35896b22d51832e7c8748c8330ec73c491 - React-RCTActionSheet: c940a35d71686941ac2b96dd07bde11ea0f0c34f - React-RCTAnimation: e1dbb4e530d6f58437ab2fae372de3788ecdffab - React-RCTAppDelegate: f9825950ac2c52ae1cf46b648bb362b86b62fe41 - React-RCTBlob: 9cdac4721a76e2d132fb1760eafd0a8f150d1c96 - React-RCTFabric: c0aa01a448bcebb1326d068ed7545eb11561e663 - React-RCTImage: f09f5165807e1a69a2bbac6c7168a8ed57ed4e26 - React-RCTLinking: 4ea06b79cba7e15d8af4d86b1dcede6bd29a47fd - React-RCTNetwork: 43a38148c7a4a2380e76b08f07f02ee8eaac8965 - React-RCTSettings: cc60bb6b38eed0683696b5ddf45b0a4a1441147b - React-RCTText: fbe5e6e886beefd5d432790bc50b7aa2b6504264 - React-RCTVibration: 061dbf7a0a1e77bfc1c4672e7be6884dc12f18bf - React-rendererconsistency: 52b471890a1946991f2db81aa6867b14d93f4ea5 - React-rendererdebug: 3f63479f704e266a3bf104c897315a885c72859b - React-rncore: 33ea67bfd2eeaa4f4a0c9e0e8bd55e9b7ccb9faa - React-RuntimeApple: bcd91a191637ab5895593135de74ac54bf88df5d - React-RuntimeCore: 3a42a7f12f5f6cc4cb0e22446540165d204d7a15 - React-runtimeexecutor: db3f17084ee7b71ab84912c527d428cc3a137841 - React-RuntimeHermes: 91bcd6aeec4bab20cebd33cb8984e3825ccdc77e - React-runtimescheduler: 92a5a092ded9a9aaac765ac940d26b52bac48901 - React-timing: 54693ad0872f64127f7cb41675b1be4fd28ea4dc - React-utils: 2bcaf4f4dfe361344bce2fae428603d518488630 - ReactCodegen: ae99a130606068ed40d1d9c0d5f25fda142a0647 - ReactCommon: 89c87b343deacc8610b099ac764848f0ce937e3e - RNReanimated: eb3170ded1ec1f61d8129c6cc2df06778f99703f - RNSVG: ec2e9d524612ee95db5df143a54518c5404d93f0 + hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11 + opencv-rne: 2305807573b6e29c8c87e3416ab096d09047a7a0 + RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17 + RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83 + RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716 + RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f + React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d + React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea + React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245 + React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c + React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab + React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964 + React-defaultsnativemodule: 18a684542f82ce1897552a1c4b847be414c9566e + React-domnativemodule: 90bdd4ec3ab38c47cfc3461c1e9283a8507d613f + React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b + React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520 + React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576 + React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c + React-featureflagsnativemodule: 742a8325b3c821d2a1ca13a6d2a0fc72d04555e0 + React-graphics: 68969e4e49d73f89da7abef4116c9b5f466aa121 + React-hermes: ac0bcba26a5d288ebc99b500e1097da2d0297ddf + React-idlecallbacksnativemodule: d61d9c9816131bf70d3d80cd04889fc625ee523f + React-ImageManager: e906eec93a9eb6102a06576b89d48d80a4683020 + React-jserrorhandler: ac5dde01104ff444e043cad8f574ca02756e20d6 + React-jsi: 496fa2b9d63b726aeb07d0ac800064617d71211d + React-jsiexecutor: dd22ab48371b80f37a0a30d0e8915b6d0f43a893 + React-jsinspector: 4629ac376f5765e684d19064f2093e55c97fd086 + React-jsitracing: 7a1c9cd484248870cf660733cd3b8114d54c035f + React-logger: c4052eb941cca9a097ef01b59543a656dc088559 + React-Mapbuffer: 33546a3ebefbccb8770c33a1f8a5554fa96a54de + React-microtasksnativemodule: d80ff86c8902872d397d9622f1a97aadcc12cead + react-native-executorch: 63ab47d8a0c602a4dee0acb36f6e8d9891ad357f + react-native-image-picker: dbc35687199a8bf89514e09b6b105557f9f63162 + react-native-safe-area-context: cd916088cac5300c3266876218377518987b995e + react-native-skia: 9b4e1185bdc0d4e7e6488c5419b5643cc456dd2e + React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678 + React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e + React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358 + React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc + React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342 + React-RCTAnimation: 395ab53fd064dff81507c15efb781c8684d9a585 + React-RCTAppDelegate: 345a6f1b82abc578437df0ce7e9c48740eca827c + React-RCTBlob: 13311e554c1a367de063c10ee7c5e6573b2dd1d6 + React-RCTFabric: 007b1a98201cc49b5bc6e1417d7fe3f6fc6e2b78 + React-RCTImage: 1b1f914bcc12187c49ba5d949dac38c2eb9f5cc8 + React-RCTLinking: 4ac7c42beb65e36fba0376f3498f3cd8dd0be7fa + React-RCTNetwork: 938902773add4381e84426a7aa17a2414f5f94f7 + React-RCTSettings: e848f1ba17a7a18479cf5a31d28145f567da8223 + React-RCTText: 7e98fafdde7d29e888b80f0b35544e0cb07913cf + React-RCTVibration: cd7d80affd97dc7afa62f9acd491419558b64b78 + React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6 + React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec + React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74 + React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd + React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb + React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899 + React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385 + React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d + React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9 + React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f + ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b + ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9 + RNReanimated: 2e5069649cbab2c946652d3b97589b2ae0526220 + RNSVG: b889dc9c1948eeea0576a16cc405c91c37a12c19 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 3deb2471faa9916c8a82dda2a22d3fba2620ad37 + sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983 + Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a PODFILE CHECKSUM: d2d76566c3147849493ab633854730a1f661227b -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/examples/computer-vision/ios/computervision.xcodeproj/project.pbxproj b/examples/computer-vision/ios/computervision.xcodeproj/project.pbxproj index 4e1ee12bb..ce46b8224 100644 --- a/examples/computer-vision/ios/computervision.xcodeproj/project.pbxproj +++ b/examples/computer-vision/ios/computervision.xcodeproj/project.pbxproj @@ -12,13 +12,15 @@ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 3D44DDE8855509EE8F14BD35 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 9F1C1E848042D20F63F5A766 /* PrivacyInfo.xcprivacy */; }; 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; - 410BB317783F79CD19490DEA /* libPods-computervision.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B4BA30D50A7961C34FDC0CE3 /* libPods-computervision.a */; }; + 8ECE9C761F0C334C5905F3DC /* libPods-computervision.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A883A86E8ACD521325B193BA /* libPods-computervision.a */; }; B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; EE159840D482449C972B155B /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A2BFCDC01274C44ADBAA6A1 /* noop-file.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 00D3ACA31040E8F7A3BA0935 /* Pods-computervision.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-computervision.debug.xcconfig"; path = "Target Support Files/Pods-computervision/Pods-computervision.debug.xcconfig"; sourceTree = ""; }; + 04B98E7657007205BDD2A29A /* Pods-computervision.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-computervision.release.xcconfig"; path = "Target Support Files/Pods-computervision/Pods-computervision.release.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* computervision.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = computervision.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = computervision/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = computervision/AppDelegate.mm; sourceTree = ""; }; @@ -26,11 +28,9 @@ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = computervision/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = computervision/main.m; sourceTree = ""; }; 9A2BFCDC01274C44ADBAA6A1 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "computervision/noop-file.swift"; sourceTree = ""; }; - 9A9D9D5D3E179ACB16F7C961 /* Pods-computervision.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-computervision.release.xcconfig"; path = "Target Support Files/Pods-computervision/Pods-computervision.release.xcconfig"; sourceTree = ""; }; 9F1C1E848042D20F63F5A766 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = computervision/PrivacyInfo.xcprivacy; sourceTree = ""; }; + A883A86E8ACD521325B193BA /* libPods-computervision.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-computervision.a"; sourceTree = BUILT_PRODUCTS_DIR; }; AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = computervision/SplashScreen.storyboard; sourceTree = ""; }; - B34AACF0D072BF11B622DA21 /* Pods-computervision.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-computervision.debug.xcconfig"; path = "Target Support Files/Pods-computervision/Pods-computervision.debug.xcconfig"; sourceTree = ""; }; - B4BA30D50A7961C34FDC0CE3 /* libPods-computervision.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-computervision.a"; sourceTree = BUILT_PRODUCTS_DIR; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; E5089F61F1384BB681122A7F /* computervision-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "computervision-Bridging-Header.h"; path = "computervision/computervision-Bridging-Header.h"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; @@ -42,7 +42,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 410BB317783F79CD19490DEA /* libPods-computervision.a in Frameworks */, + 8ECE9C761F0C334C5905F3DC /* libPods-computervision.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -70,7 +70,7 @@ isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - B4BA30D50A7961C34FDC0CE3 /* libPods-computervision.a */, + A883A86E8ACD521325B193BA /* libPods-computervision.a */, ); name = Frameworks; sourceTree = ""; @@ -125,8 +125,8 @@ D65327D7A22EEC0BE12398D9 /* Pods */ = { isa = PBXGroup; children = ( - B34AACF0D072BF11B622DA21 /* Pods-computervision.debug.xcconfig */, - 9A9D9D5D3E179ACB16F7C961 /* Pods-computervision.release.xcconfig */, + 00D3ACA31040E8F7A3BA0935 /* Pods-computervision.debug.xcconfig */, + 04B98E7657007205BDD2A29A /* Pods-computervision.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -146,14 +146,14 @@ isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "computervision" */; buildPhases = ( - 4C3CB1F7F4FC3393B10158A0 /* [CP] Check Pods Manifest.lock */, + A44E0F386BE1861A4BB0D152 /* [CP] Check Pods Manifest.lock */, 40729C76425943C737B83F07 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EA61A0AC7C7A004831148A /* [CP] Embed Pods Frameworks */, - 024B2F8B6E2DEF04825F05DE /* [CP] Copy Pods Resources */, + 6B22C61BD8A720CC7014EB81 /* [CP] Embed Pods Frameworks */, + D6A2310306AE2EE1E906EC1D /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -225,7 +225,26 @@ shellPath = /bin/sh; shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; }; - 00EA61A0AC7C7A004831148A /* [CP] Embed Pods Frameworks */ = { + 40729C76425943C737B83F07 /* [Expo] Configure project */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-computervision/expo-configure-project.sh\"\n"; + }; + 6B22C61BD8A720CC7014EB81 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -245,7 +264,29 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-computervision/Pods-computervision-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 024B2F8B6E2DEF04825F05DE /* [CP] Copy Pods Resources */ = { + A44E0F386BE1861A4BB0D152 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-computervision-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + D6A2310306AE2EE1E906EC1D /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -256,7 +297,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", @@ -269,7 +309,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", @@ -281,47 +320,6 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-computervision/Pods-computervision-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 40729C76425943C737B83F07 /* [Expo] Configure project */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - ); - name = "[Expo] Configure project"; - outputFileListPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-computervision/expo-configure-project.sh\"\n"; - }; - 4C3CB1F7F4FC3393B10158A0 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-computervision-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -341,7 +339,7 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B34AACF0D072BF11B622DA21 /* Pods-computervision.debug.xcconfig */; + baseConfigurationReference = 00D3ACA31040E8F7A3BA0935 /* Pods-computervision.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; @@ -378,7 +376,7 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9A9D9D5D3E179ACB16F7C961 /* Pods-computervision.release.xcconfig */; + baseConfigurationReference = 04B98E7657007205BDD2A29A /* Pods-computervision.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; diff --git a/examples/computer-vision/package-lock.json b/examples/computer-vision/package-lock.json deleted file mode 100644 index baa883f86..000000000 --- a/examples/computer-vision/package-lock.json +++ /dev/null @@ -1,10836 +0,0 @@ -{ - "name": "computer-vision", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "computer-vision", - "version": "1.0.0", - "dependencies": { - "expo": "~52.0.17", - "expo-status-bar": "~2.0.0", - "react": "18.3.1", - "react-native": "0.76.3" - }, - "devDependencies": { - "@babel/core": "^7.25.2", - "@types/react": "~18.3.12", - "typescript": "^5.3.3" - } - }, - "node_modules/@0no-co/graphql.web": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.0.12.tgz", - "integrity": "sha512-BTDjjsV/zSPy5fqItwm+KWUfh9CSe9tTtR6rCB72ddtkAxdcHbi4Ir4r/L1Et4lyxmL+i7Rb3m9sjLLi9tYrzA==", - "license": "MIT", - "peerDependencies": { - "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0" - }, - "peerDependenciesMeta": { - "graphql": { - "optional": true - } - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", - "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", - "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.3", - "@babel/types": "^7.26.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", - "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", - "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.9.tgz", - "integrity": "sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-decorators": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.25.9.tgz", - "integrity": "sha512-ykqgwNfSnNOB+C8fV5X4mG3AVmvu+WVxcaU9xHHtBb7PCrPeweMmPjGsn8eMaeJg6SJuoUuZENeeSWaarWqonQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.9.tgz", - "integrity": "sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.25.9.tgz", - "integrity": "sha512-9MhJ/SMTsVqsd69GyQg89lYR4o9T+oDGv5F6IsigxxqFVOyR/IflDLYP8WDI1l8fkhNGGktqkvL5qwNCtGEpgQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.26.0.tgz", - "integrity": "sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.9.tgz", - "integrity": "sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-flow": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", - "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", - "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz", - "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-syntax-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.9.tgz", - "integrity": "sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-flow-strip-types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", - "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-transform-react-display-name": "^7.25.9", - "@babel/plugin-transform-react-jsx": "^7.25.9", - "@babel/plugin-transform-react-jsx-development": "^7.25.9", - "@babel/plugin-transform-react-pure-annotations": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.25.9.tgz", - "integrity": "sha512-8D43jXtGsYmEeDvm4MWHYUpWf8iiXgWYx3fW7E7Wb7Oe6FWqJPl5K6TuFW0dOwNZzEE5rjlaSJYH9JjrUKJszA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.26.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", - "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.3", - "@babel/parser": "^7.26.3", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.3", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse--for-generate-function-map": { - "name": "@babel/traverse", - "version": "7.26.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", - "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.3", - "@babel/parser": "^7.26.3", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.3", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", - "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@expo/bunyan": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@expo/bunyan/-/bunyan-4.0.1.tgz", - "integrity": "sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==", - "license": "MIT", - "dependencies": { - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@expo/cli": { - "version": "0.22.3", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.3.tgz", - "integrity": "sha512-1HBtqInFDFHUJWzTJ1CJj5MR3JwvOiozmRUWF2kVQAeq/bKzSYM6We6B3XoZBM5XP6z6WtnrG87C7BjeW5E/cA==", - "license": "MIT", - "dependencies": { - "@0no-co/graphql.web": "^1.0.8", - "@babel/runtime": "^7.20.0", - "@expo/code-signing-certificates": "^0.0.5", - "@expo/config": "~10.0.4", - "@expo/config-plugins": "~9.0.10", - "@expo/devcert": "^1.1.2", - "@expo/env": "~0.4.0", - "@expo/image-utils": "^0.6.0", - "@expo/json-file": "^9.0.0", - "@expo/metro-config": "~0.19.0", - "@expo/osascript": "^2.0.31", - "@expo/package-manager": "^1.5.0", - "@expo/plist": "^0.2.0", - "@expo/prebuild-config": "^8.0.22", - "@expo/rudder-sdk-node": "^1.1.1", - "@expo/spawn-async": "^1.7.2", - "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "0.76.3", - "@urql/core": "^5.0.6", - "@urql/exchange-retry": "^1.3.0", - "accepts": "^1.3.8", - "arg": "^5.0.2", - "better-opn": "~3.0.2", - "bplist-creator": "0.0.7", - "bplist-parser": "^0.3.1", - "cacache": "^18.0.2", - "chalk": "^4.0.0", - "ci-info": "^3.3.0", - "compression": "^1.7.4", - "connect": "^3.7.0", - "debug": "^4.3.4", - "env-editor": "^0.4.1", - "fast-glob": "^3.3.2", - "form-data": "^3.0.1", - "freeport-async": "^2.0.0", - "fs-extra": "~8.1.0", - "getenv": "^1.0.0", - "glob": "^10.4.2", - "internal-ip": "^4.3.0", - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1", - "lodash.debounce": "^4.0.8", - "minimatch": "^3.0.4", - "node-forge": "^1.3.1", - "npm-package-arg": "^11.0.0", - "ora": "^3.4.0", - "picomatch": "^3.0.1", - "pretty-bytes": "^5.6.0", - "pretty-format": "^29.7.0", - "progress": "^2.0.3", - "prompts": "^2.3.2", - "qrcode-terminal": "0.11.0", - "require-from-string": "^2.0.2", - "requireg": "^0.2.2", - "resolve": "^1.22.2", - "resolve-from": "^5.0.0", - "resolve.exports": "^2.0.2", - "semver": "^7.6.0", - "send": "^0.19.0", - "slugify": "^1.3.4", - "source-map-support": "~0.5.21", - "stacktrace-parser": "^0.1.10", - "structured-headers": "^0.4.1", - "tar": "^6.2.1", - "temp-dir": "^2.0.0", - "tempy": "^0.7.1", - "terminal-link": "^2.1.1", - "undici": "^6.18.2", - "unique-string": "~2.0.0", - "wrap-ansi": "^7.0.0", - "ws": "^8.12.1" - }, - "bin": { - "expo-internal": "build/bin/cli" - } - }, - "node_modules/@expo/cli/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/code-signing-certificates": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", - "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", - "license": "MIT", - "dependencies": { - "node-forge": "^1.2.1", - "nullthrows": "^1.1.1" - } - }, - "node_modules/@expo/config": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.6.tgz", - "integrity": "sha512-xXkfPElrtxznkOZxFASJ7OPa6E9IHSjcZwj5BQ6XUF2dz5M7AFa2h5sXM8AalSaDU5tEBSgoUOjTh5957TlR8g==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~9.0.10", - "@expo/config-types": "^52.0.0", - "@expo/json-file": "^9.0.0", - "deepmerge": "^4.3.1", - "getenv": "^1.0.0", - "glob": "^10.4.2", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0", - "resolve-workspace-root": "^2.0.0", - "semver": "^7.6.0", - "slugify": "^1.3.4", - "sucrase": "3.35.0" - } - }, - "node_modules/@expo/config-plugins": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.12.tgz", - "integrity": "sha512-/Ko/NM+GzvJyRkq8PITm8ms0KY5v0wmN1OQFYRMkcJqOi3PjlhndW+G6bHpJI9mkQXBaUnHwAiGLqIC3+MQ5Wg==", - "license": "MIT", - "dependencies": { - "@expo/config-types": "^52.0.0", - "@expo/json-file": "~9.0.0", - "@expo/plist": "^0.2.0", - "@expo/sdk-runtime-versions": "^1.0.0", - "chalk": "^4.1.2", - "debug": "^4.3.5", - "getenv": "^1.0.0", - "glob": "^10.4.2", - "resolve-from": "^5.0.0", - "semver": "^7.5.4", - "slash": "^3.0.0", - "slugify": "^1.6.6", - "xcode": "^3.0.1", - "xml2js": "0.6.0" - } - }, - "node_modules/@expo/config-plugins/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/config-types": { - "version": "52.0.1", - "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-52.0.1.tgz", - "integrity": "sha512-vD8ZetyKV7U29lR6+NJohYeoLYTH+eNYXJeNiSOrWCz0witJYY11meMmEnpEaVbN89EfC6uauSUOa6wihtbyPQ==", - "license": "MIT" - }, - "node_modules/@expo/config/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/config/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/devcert": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.1.4.tgz", - "integrity": "sha512-fqBODr8c72+gBSX5Ty3SIzaY4bXainlpab78+vEYEKL3fXmsOswMLf0+KE36mUEAa36BYabX7K3EiXOXX5OPMw==", - "license": "MIT", - "dependencies": { - "application-config-path": "^0.1.0", - "command-exists": "^1.2.4", - "debug": "^3.1.0", - "eol": "^0.9.1", - "get-port": "^3.2.0", - "glob": "^10.4.2", - "lodash": "^4.17.21", - "mkdirp": "^0.5.1", - "password-prompt": "^1.0.4", - "sudo-prompt": "^8.2.0", - "tmp": "^0.0.33", - "tslib": "^2.4.0" - } - }, - "node_modules/@expo/devcert/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@expo/env": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@expo/env/-/env-0.4.0.tgz", - "integrity": "sha512-g2JYFqck3xKIwJyK+8LxZ2ENZPWtRgjFWpeht9abnKgzXVXBeSNECFBkg+WQjQocSIdxXhEWM6hz4ZAe7Tc4ng==", - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "debug": "^4.3.4", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "getenv": "^1.0.0" - } - }, - "node_modules/@expo/fingerprint": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.11.3.tgz", - "integrity": "sha512-9lgXmcIePvZ7Wef63XtvuN3HfCUevF4E4tQPdEbH9/dUWwpOvvwQ3KT4OJ9jdh8JJ3nTdO9eDQ/8k8xr1aQ5Kg==", - "license": "MIT", - "dependencies": { - "@expo/spawn-async": "^1.7.2", - "arg": "^5.0.2", - "chalk": "^4.1.2", - "debug": "^4.3.4", - "find-up": "^5.0.0", - "getenv": "^1.0.0", - "minimatch": "^3.0.4", - "p-limit": "^3.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.6.0" - }, - "bin": { - "fingerprint": "bin/cli.js" - } - }, - "node_modules/@expo/fingerprint/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/image-utils": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.6.3.tgz", - "integrity": "sha512-v/JbCKBrHeudxn1gN1TgfPE/pWJSlLPrl29uXJBgrJFQVkViQvUHQNDhaS+UEa9wYI5HHh7XYmtzAehyG4L+GA==", - "license": "MIT", - "dependencies": { - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.0.0", - "fs-extra": "9.0.0", - "getenv": "^1.0.0", - "jimp-compact": "0.16.1", - "parse-png": "^2.1.0", - "resolve-from": "^5.0.0", - "semver": "^7.6.0", - "temp-dir": "~2.0.0", - "unique-string": "~2.0.0" - } - }, - "node_modules/@expo/image-utils/node_modules/fs-extra": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.0.tgz", - "integrity": "sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/image-utils/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@expo/image-utils/node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/image-utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/image-utils/node_modules/universalify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", - "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/json-file": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.0.0.tgz", - "integrity": "sha512-M+55xFVrFzDcgMDf+52lPDLjKB5xwRfStWlv/b/Vu2OLgxGZLWpxoPYjlRoHqxjPbCQIi2ZCbobK+0KuNhsELg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "~7.10.4", - "json5": "^2.2.3", - "write-file-atomic": "^2.3.0" - } - }, - "node_modules/@expo/json-file/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/metro-config": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.6.tgz", - "integrity": "sha512-pRwZyOstsQa1+Ecss3wOqC28wjyjq9qxvJaQL3LH4G8Sef9x2PX+ySRApeQ01nl4ZN5nlyez6iVDF51tn/WhOw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.20.0", - "@babel/generator": "^7.20.5", - "@babel/parser": "^7.20.0", - "@babel/types": "^7.20.0", - "@expo/config": "~10.0.4", - "@expo/env": "~0.4.0", - "@expo/json-file": "~9.0.0", - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.1.0", - "debug": "^4.3.2", - "fs-extra": "^9.1.0", - "getenv": "^1.0.0", - "glob": "^10.4.2", - "jsc-safe-url": "^0.2.4", - "lightningcss": "~1.27.0", - "minimatch": "^3.0.4", - "postcss": "~8.4.32", - "resolve-from": "^5.0.0" - } - }, - "node_modules/@expo/metro-config/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/metro-config/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@expo/metro-config/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/osascript": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.1.4.tgz", - "integrity": "sha512-LcPjxJ5FOFpqPORm+5MRLV0CuYWMthJYV6eerF+lQVXKlvgSn3EOqaHC3Vf3H+vmB0f6G4kdvvFtg40vG4bIhA==", - "license": "MIT", - "dependencies": { - "@expo/spawn-async": "^1.7.2", - "exec-async": "^2.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/package-manager": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.6.1.tgz", - "integrity": "sha512-4rT46wP/94Ll+CWXtFKok1Lbo9XncSUtErFOo/9/3FVughGbIfdG4SKZOAWIpr9wxwEfkyhHfAP9q71ONlWODw==", - "license": "MIT", - "dependencies": { - "@expo/json-file": "^9.0.0", - "@expo/spawn-async": "^1.7.2", - "ansi-regex": "^5.0.0", - "chalk": "^4.0.0", - "find-up": "^5.0.0", - "js-yaml": "^3.13.1", - "micromatch": "^4.0.8", - "npm-package-arg": "^11.0.0", - "ora": "^3.4.0", - "resolve-workspace-root": "^2.0.0", - "split": "^1.0.1", - "sudo-prompt": "9.1.1" - } - }, - "node_modules/@expo/package-manager/node_modules/sudo-prompt": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.1.1.tgz", - "integrity": "sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==", - "license": "MIT" - }, - "node_modules/@expo/plist": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.2.0.tgz", - "integrity": "sha512-F/IZJQaf8OIVnVA6XWUeMPC3OH6MV00Wxf0WC0JhTQht2QgjyHUa3U5Gs3vRtDq8tXNsZneOQRDVwpaOnd4zTQ==", - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "~0.7.7", - "base64-js": "^1.2.3", - "xmlbuilder": "^14.0.0" - } - }, - "node_modules/@expo/prebuild-config": { - "version": "8.0.22", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.22.tgz", - "integrity": "sha512-Kwlf3ymHH37W2nuNA9FzYgZvrImJScLA98939kapnOxfNGAPhmhEw26sfIGmBWAa8ymdL6p+HXQ3+b/xJ74bOg==", - "license": "MIT", - "dependencies": { - "@expo/config": "~10.0.4", - "@expo/config-plugins": "~9.0.10", - "@expo/config-types": "^52.0.0", - "@expo/image-utils": "^0.6.0", - "@expo/json-file": "^9.0.0", - "@react-native/normalize-colors": "0.76.3", - "debug": "^4.3.1", - "fs-extra": "^9.0.0", - "resolve-from": "^5.0.0", - "semver": "^7.6.0", - "xml2js": "0.6.0" - } - }, - "node_modules/@expo/prebuild-config/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/prebuild-config/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@expo/prebuild-config/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@expo/prebuild-config/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@expo/rudder-sdk-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@expo/rudder-sdk-node/-/rudder-sdk-node-1.1.1.tgz", - "integrity": "sha512-uy/hS/awclDJ1S88w9UGpc6Nm9XnNUjzOAAib1A3PVAnGQIwebg8DpFqOthFBTlZxeuV/BKbZ5jmTbtNZkp1WQ==", - "license": "MIT", - "dependencies": { - "@expo/bunyan": "^4.0.0", - "@segment/loosely-validate-event": "^2.0.0", - "fetch-retry": "^4.1.1", - "md5": "^2.2.1", - "node-fetch": "^2.6.1", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/sdk-runtime-versions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", - "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", - "license": "MIT" - }, - "node_modules/@expo/spawn-async": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", - "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@expo/vector-icons": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.0.4.tgz", - "integrity": "sha512-+yKshcbpDfbV4zoXOgHxCwh7lkE9VVTT5T03OUlBsqfze1PLy6Hi4jp1vSb1GVbY6eskvMIivGVc9SKzIv0oEQ==", - "license": "MIT", - "dependencies": { - "prop-types": "^15.8.1" - } - }, - "node_modules/@expo/xcpretty": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.2.tgz", - "integrity": "sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/code-frame": "7.10.4", - "chalk": "^4.1.0", - "find-up": "^5.0.0", - "js-yaml": "^4.1.0" - }, - "bin": { - "excpretty": "build/cli.js" - } - }, - "node_modules/@expo/xcpretty/node_modules/@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@expo/xcpretty/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/@expo/xcpretty/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", - "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", - "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@react-native/assets-registry": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.3.tgz", - "integrity": "sha512-7Fnc3lzCFFpnoyL1egua6d/qUp0KiIpeSLbfOMln4nI2g2BMzyFHdPjJnpLV2NehmS0omOOkrfRqK5u1F/MXzA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.3.tgz", - "integrity": "sha512-mZ7jmIIg4bUnxCqY3yTOkoHvvzsDyrZgfnIKiTGm5QACrsIGa5eT3pMFpMm2OpxGXRDrTMsYdPXE2rCyDX52VQ==", - "license": "MIT", - "dependencies": { - "@react-native/codegen": "0.76.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/babel-preset": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.3.tgz", - "integrity": "sha512-zi2nPlQf9q2fmfPyzwWEj6DU96v8ziWtEfG7CTAX2PG/Vjfsr94vn/wWrCdhBVvLRQ6Kvd/MFAuDYpxmQwIiVQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/plugin-proposal-export-default-from": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-default-from": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.25.2", - "@babel/plugin-transform-react-jsx-self": "^7.24.7", - "@babel/plugin-transform-react-jsx-source": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.25.2", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.76.3", - "babel-plugin-syntax-hermes-parser": "^0.25.1", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/codegen": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.3.tgz", - "integrity": "sha512-oJCH/jbYeGmFJql8/y76gqWCCd74pyug41yzYAjREso1Z7xL88JhDyKMvxEnfhSdMOZYVl479N80xFiXPy3ZYA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.25.3", - "glob": "^7.1.1", - "hermes-parser": "0.23.1", - "invariant": "^2.2.4", - "jscodeshift": "^0.14.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "yargs": "^17.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/@react-native/codegen/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.3.tgz", - "integrity": "sha512-vgsLixHS24jR0d0QqPykBWFaC+V8x9cM3cs4oYXw3W199jgBNGP9MWcUJLazD2vzrT/lUTVBVg0rBeB+4XR6fg==", - "license": "MIT", - "dependencies": { - "@react-native/dev-middleware": "0.76.3", - "@react-native/metro-babel-transformer": "0.76.3", - "chalk": "^4.0.0", - "execa": "^5.1.1", - "invariant": "^2.2.4", - "metro": "^0.81.0", - "metro-config": "^0.81.0", - "metro-core": "^0.81.0", - "node-fetch": "^2.2.0", - "readline": "^1.3.0", - "semver": "^7.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@react-native-community/cli-server-api": "*" - }, - "peerDependenciesMeta": { - "@react-native-community/cli-server-api": { - "optional": true - } - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.3.tgz", - "integrity": "sha512-pMHQ3NpPB28RxXciSvm2yD+uDx3pkhzfuWkc7VFgOduyzPSIr0zotUiOJzsAtrj8++bPbOsAraCeQhCqoOTWQw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/dev-middleware": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.3.tgz", - "integrity": "sha512-b+2IpW40z1/S5Jo5JKrWPmucYU/PzeGyGBZZ/SJvmRnBDaP3txb9yIqNZAII1EWsKNhedh8vyRO5PSuJ9Juqzw==", - "license": "MIT", - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.76.3", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "selfsigned": "^2.4.1", - "serve-static": "^1.13.1", - "ws": "^6.2.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/@react-native/dev-middleware/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "license": "MIT", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.3.tgz", - "integrity": "sha512-t0aYZ8ND7+yc+yIm6Yp52bInneYpki6RSIFZ9/LMUzgMKvEB62ptt/7sfho9QkKHCNxE1DJSWIqLIGi/iHHkyg==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/js-polyfills": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.3.tgz", - "integrity": "sha512-pubJFArMMrdZiytH+W95KngcSQs+LsxOBsVHkwgMnpBfRUxXPMK4fudtBwWvhnwN76Oe+WhxSq7vOS5XgoPhmw==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native/metro-babel-transformer": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.3.tgz", - "integrity": "sha512-b2zQPXmW7avw/7zewc9nzMULPIAjsTwN03hskhxHUJH5pzUf7pIklB3FrgYPZrRhJgzHiNl3tOPu7vqiKzBYPg==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.76.3", - "hermes-parser": "0.23.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/normalize-colors": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.3.tgz", - "integrity": "sha512-Yrpmrh4IDEupUUM/dqVxhAN8QW1VEUR3Qrk2lzJC1jB2s46hDe0hrMP2vs12YJqlzshteOthjwXQlY0TgIzgbg==", - "license": "MIT" - }, - "node_modules/@react-native/virtualized-lists": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.3.tgz", - "integrity": "sha512-wTGv9pVh3vAOWb29xFm+J9VRe9dUcUcb9FyaMLT/Hxa88W4wqa5ZMe1V9UvrrBiA1G5DKjv8/1ZcDsJhyugVKA==", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.2.6", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@segment/loosely-validate-event": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", - "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", - "dependencies": { - "component-type": "^1.2.1", - "join-component": "^1.1.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "22.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", - "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.14", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.14.tgz", - "integrity": "sha512-NzahNKvjNhVjuPBQ+2G7WlxstQ+47kXZNHlUvFakDViuIEfGY926GqhMueQFZ7woG+sPiQKlF36XfrIUVSUfFg==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@urql/core": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.0.8.tgz", - "integrity": "sha512-1GOnUw7/a9bzkcM0+U8U5MmxW2A7FE5YquuEmcJzTtW5tIs2EoS4F2ITpuKBjRBbyRjZgO860nWFPo1m4JImGA==", - "license": "MIT", - "dependencies": { - "@0no-co/graphql.web": "^1.0.5", - "wonka": "^6.3.2" - } - }, - "node_modules/@urql/exchange-retry": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.0.tgz", - "integrity": "sha512-FLt+d81gP4oiHah4hWFDApimc+/xABWMU1AMYsZ1PVB0L0YPtrMCjbOp9WMM7hBzy4gbTDrG24sio0dCfSh/HQ==", - "license": "MIT", - "dependencies": { - "@urql/core": "^5.0.0", - "wonka": "^6.3.2" - }, - "peerDependencies": { - "@urql/core": "^5.0.0" - } - }, - "node_modules/@xmldom/xmldom": { - "version": "0.7.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.7.13.tgz", - "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", - "deprecated": "this version is no longer supported, please update to at least 0.8.*", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/anser": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", - "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", - "license": "MIT" - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "license": "MIT" - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/application-config-path": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz", - "integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==", - "license": "MIT" - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, - "node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "license": "MIT", - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-react-native-web": { - "version": "0.19.13", - "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz", - "integrity": "sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==", - "license": "MIT" - }, - "node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz", - "integrity": "sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==", - "license": "MIT", - "dependencies": { - "hermes-parser": "0.25.1" - } - }, - "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", - "license": "MIT" - }, - "node_modules/babel-plugin-syntax-hermes-parser/node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.25.1" - } - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", - "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-expo": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.3.tgz", - "integrity": "sha512-1695e8y3U/HjifKx33vcNnFMSUSXwPWwhFxRlL6NRx2TENN6gySH82gPOWgxcra6gi+EJgXx52xG3PcqTjwW6w==", - "license": "MIT", - "dependencies": { - "@babel/plugin-proposal-decorators": "^7.12.9", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/preset-react": "^7.22.15", - "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-preset": "0.76.3", - "babel-plugin-react-native-web": "~0.19.13", - "react-refresh": "^0.14.2" - }, - "peerDependencies": { - "babel-plugin-react-compiler": "^19.0.0-beta-9ee70a1-20241017", - "react-compiler-runtime": "^19.0.0-beta-8a03594-20241020" - }, - "peerDependenciesMeta": { - "babel-plugin-react-compiler": { - "optional": true - }, - "react-compiler-runtime": { - "optional": true - } - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/better-opn": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", - "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", - "license": "MIT", - "dependencies": { - "open": "^8.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/better-opn/node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bplist-creator": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz", - "integrity": "sha512-xp/tcaV3T5PCiaY04mXga7o/TE+t95gqeLmADeBI1CvZtdWTbgBt3uLpvh4UWtenKeBhCV6oVxGk38yZr2uYEA==", - "license": "MIT", - "dependencies": { - "stream-buffers": "~2.2.0" - } - }, - "node_modules/bplist-parser": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", - "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", - "license": "MIT", - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "license": "MIT", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "license": "MIT" - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "license": "MIT" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "license": "MIT", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "license": "MIT", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001687", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", - "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", - "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/chromium-edge-launcher": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", - "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "node_modules/chromium-edge-launcher/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "license": "MIT" - }, - "node_modules/component-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.2.tgz", - "integrity": "sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", - "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", - "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "license": "MIT", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", - "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.12" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg==", - "license": "MIT" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", - "license": "Apache-2.0", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "license": "BSD-2-Clause", - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.71", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.71.tgz", - "integrity": "sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/env-editor": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", - "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/exec-async": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", - "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", - "license": "MIT" - }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/execa/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/execa/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/expo": { - "version": "52.0.17", - "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.17.tgz", - "integrity": "sha512-f0WBD2T6p9r/a8v8MqkoWQq7TmbbAgPUg2zZtOp+kBrSCb3obHeNAsPDAUFzh+jEgug2qDVVkauBJa6ACe9AMg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.0", - "@expo/cli": "0.22.3", - "@expo/config": "~10.0.6", - "@expo/config-plugins": "~9.0.12", - "@expo/fingerprint": "0.11.3", - "@expo/metro-config": "0.19.6", - "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~12.0.3", - "expo-asset": "~11.0.1", - "expo-constants": "~17.0.3", - "expo-file-system": "~18.0.4", - "expo-font": "~13.0.1", - "expo-keep-awake": "~14.0.1", - "expo-modules-autolinking": "2.0.3", - "expo-modules-core": "2.1.1", - "fbemitter": "^3.0.0", - "web-streams-polyfill": "^3.3.2", - "whatwg-url-without-unicode": "8.0.0-3" - }, - "bin": { - "expo": "bin/cli" - }, - "peerDependencies": { - "@expo/dom-webview": "*", - "@expo/metro-runtime": "*", - "react": "*", - "react-native": "*", - "react-native-webview": "*" - }, - "peerDependenciesMeta": { - "@expo/dom-webview": { - "optional": true - }, - "@expo/metro-runtime": { - "optional": true - }, - "react-native-webview": { - "optional": true - } - } - }, - "node_modules/expo-asset": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.1.tgz", - "integrity": "sha512-WatvD7JVC89EsllXFYcS/rji3ajVzE2B/USo0TqedsETixwyVCQfrrvCdCPQyuKghrxVNEj8bQ/Qbea/RZLYjg==", - "license": "MIT", - "dependencies": { - "@expo/image-utils": "^0.6.0", - "expo-constants": "~17.0.0", - "invariant": "^2.2.4", - "md5-file": "^3.2.3" - }, - "peerDependencies": { - "expo": "*", - "react": "*", - "react-native": "*" - } - }, - "node_modules/expo-constants": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.3.tgz", - "integrity": "sha512-lnbcX2sAu8SucHXEXxSkhiEpqH+jGrf+TF+MO6sHWIESjwOUVVYlT8qYdjR9xbxWmqFtrI4KV44FkeJf2DaFjQ==", - "license": "MIT", - "dependencies": { - "@expo/config": "~10.0.4", - "@expo/env": "~0.4.0" - }, - "peerDependencies": { - "expo": "*", - "react-native": "*" - } - }, - "node_modules/expo-file-system": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.4.tgz", - "integrity": "sha512-aAWEDwnu0XHOBYvQ9Q0+QIa+483vYJaC4IDsXyWQ73Rtsg273NZh5kYowY+cAocvoSmA99G6htrLBn11ax2bTQ==", - "license": "MIT", - "dependencies": { - "web-streams-polyfill": "^3.3.2" - }, - "peerDependencies": { - "expo": "*", - "react-native": "*" - } - }, - "node_modules/expo-font": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.0.1.tgz", - "integrity": "sha512-8JE47B+6cLeKWr5ql8gU6YsPHjhrz1vMrTqYMm72No/8iW8Sb/uL4Oc0dpmbjq3hLLXBY0xPBQOgU7FQ6Y04Vg==", - "license": "MIT", - "dependencies": { - "fontfaceobserver": "^2.1.0" - }, - "peerDependencies": { - "expo": "*", - "react": "*" - } - }, - "node_modules/expo-keep-awake": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.0.1.tgz", - "integrity": "sha512-c5mGCAIk2YM+Vsdy90BlEJ4ZX+KG5Au9EkJUIxXWlpnuKmDAJ3N+5nEZ7EUO1ZTheqoSBeAo4jJ8rTWPU+JXdw==", - "license": "MIT", - "peerDependencies": { - "expo": "*", - "react": "*" - } - }, - "node_modules/expo-modules-autolinking": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.0.3.tgz", - "integrity": "sha512-Q/ALJ54eS7Cr7cmbP+unEDTkHFQivQerWWrqZxuXOrSFYGCYU22+/xAZXaJOpZwseOVsP74zSkoRY/wBimVs7w==", - "license": "MIT", - "dependencies": { - "@expo/spawn-async": "^1.7.2", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "fast-glob": "^3.2.5", - "find-up": "^5.0.0", - "fs-extra": "^9.1.0", - "require-from-string": "^2.0.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "expo-modules-autolinking": "bin/expo-modules-autolinking.js" - } - }, - "node_modules/expo-modules-autolinking/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/expo-modules-autolinking/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/expo-modules-autolinking/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/expo-modules-core": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.1.1.tgz", - "integrity": "sha512-yQzYCLR2mre4BNMXuqkeJ0oSNgmGEMI6BcmIzeNZbC2NFEjiaDpKvlV9bclYCtyVhUEVNbJcEPYMr6c1Y4eR4w==", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4" - } - }, - "node_modules/expo-status-bar": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/expo-status-bar/-/expo-status-bar-2.0.0.tgz", - "integrity": "sha512-vxxdpvpNDMTEc5uTiIrbTvySKKUsOACmfl8OZuUdjNle05oGqwtq3v5YObwym/njSByjoyuZX8UpXBZnxvarwQ==", - "license": "MIT", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "license": "BSD-3-Clause", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.5.tgz", - "integrity": "sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==", - "license": "MIT", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^1.0.35" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "license": "MIT" - }, - "node_modules/fetch-retry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-4.1.1.tgz", - "integrity": "sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==", - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flow-enums-runtime": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", - "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", - "license": "MIT" - }, - "node_modules/flow-parser": { - "version": "0.256.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.256.0.tgz", - "integrity": "sha512-HFb/GgB7hq+TYosLJuMLdLp8aGlyAVfrJaTvcM0w2rz2T33PjkVbRU419ncK/69cjowUksewuspkBheq9ZX9Hw==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fontfaceobserver": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", - "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", - "license": "BSD-2-Clause" - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.2.tgz", - "integrity": "sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/freeport-async": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", - "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/getenv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", - "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hermes-estree": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.23.1.tgz", - "integrity": "sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==", - "license": "MIT" - }, - "node_modules/hermes-parser": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.23.1.tgz", - "integrity": "sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.23.1" - } - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "license": "MIT", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", - "license": "MIT", - "dependencies": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "license": "MIT" - }, - "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jimp-compact": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", - "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", - "license": "MIT" - }, - "node_modules/join-component": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", - "integrity": "sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsc-android": { - "version": "250231.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-250231.0.0.tgz", - "integrity": "sha512-rS46PvsjYmdmuz1OAWXY/1kCYG7pnf1TBqeTiOJr1iDz7s5DLxxC9n/ZMknLDxzYzNVfI7R95MH10emSSG1Wuw==", - "license": "BSD-2-Clause" - }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", - "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", - "license": "0BSD" - }, - "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", - "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", - "license": "Apache-2.0", - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/lightningcss": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.27.0.tgz", - "integrity": "sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==", - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^1.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-darwin-arm64": "1.27.0", - "lightningcss-darwin-x64": "1.27.0", - "lightningcss-freebsd-x64": "1.27.0", - "lightningcss-linux-arm-gnueabihf": "1.27.0", - "lightningcss-linux-arm64-gnu": "1.27.0", - "lightningcss-linux-arm64-musl": "1.27.0", - "lightningcss-linux-x64-gnu": "1.27.0", - "lightningcss-linux-x64-musl": "1.27.0", - "lightningcss-win32-arm64-msvc": "1.27.0", - "lightningcss-win32-x64-msvc": "1.27.0" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.27.0.tgz", - "integrity": "sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz", - "integrity": "sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz", - "integrity": "sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz", - "integrity": "sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==", - "cpu": [ - "arm" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz", - "integrity": "sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz", - "integrity": "sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz", - "integrity": "sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz", - "integrity": "sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz", - "integrity": "sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz", - "integrity": "sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "license": "MIT", - "dependencies": { - "chalk": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/marky": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.5.tgz", - "integrity": "sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==", - "license": "Apache-2.0" - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "license": "BSD-3-Clause", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5-file": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-3.2.3.tgz", - "integrity": "sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==", - "license": "MIT", - "dependencies": { - "buffer-alloc": "^1.1.0" - }, - "bin": { - "md5-file": "cli.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", - "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/metro": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.81.0.tgz", - "integrity": "sha512-kzdzmpL0gKhEthZ9aOV7sTqvg6NuTxDV8SIm9pf9sO8VVEbKrQk5DNcwupOUjgPPFAuKUc2NkT0suyT62hm2xg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "@babel/types": "^7.25.2", - "accepts": "^1.3.7", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "error-stack-parser": "^2.0.6", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.24.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.81.0", - "metro-cache": "0.81.0", - "metro-cache-key": "0.81.0", - "metro-config": "0.81.0", - "metro-core": "0.81.0", - "metro-file-map": "0.81.0", - "metro-resolver": "0.81.0", - "metro-runtime": "0.81.0", - "metro-source-map": "0.81.0", - "metro-symbolicate": "0.81.0", - "metro-transform-plugins": "0.81.0", - "metro-transform-worker": "0.81.0", - "mime-types": "^2.1.27", - "nullthrows": "^1.1.1", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "strip-ansi": "^6.0.0", - "throat": "^5.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-babel-transformer": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.81.0.tgz", - "integrity": "sha512-Dc0QWK4wZIeHnyZ3sevWGTnnSkIDDn/SWyfrn99zbKbDOCoCYy71PAn9uCRrP/hduKLJQOy+tebd63Rr9D8tXg==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.24.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.24.0.tgz", - "integrity": "sha512-LyoXLB7IFzeZW0EvAbGZacbxBN7t6KKSDqFJPo3Ydow7wDlrDjXwsdiAHV6XOdvEN9MEuWXsSIFN4tzpyrXIHw==", - "license": "MIT" - }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.24.0.tgz", - "integrity": "sha512-IJooSvvu2qNRe7oo9Rb04sUT4omtZqZqf9uq9WM25Tb6v3usmvA93UqfnnoWs5V0uYjEl9Al6MNU10MCGKLwpg==", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.24.0" - } - }, - "node_modules/metro-cache": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.81.0.tgz", - "integrity": "sha512-DyuqySicHXkHUDZFVJmh0ygxBSx6pCKUrTcSgb884oiscV/ROt1Vhye+x+OIHcsodyA10gzZtrVtxIFV4l9I4g==", - "license": "MIT", - "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "metro-core": "0.81.0" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-cache-key": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.81.0.tgz", - "integrity": "sha512-qX/IwtknP9bQZL78OK9xeSvLM/xlGfrs6SlUGgHvrxtmGTRSsxcyqxR+c+7ch1xr05n62Gin/O44QKg5V70rNQ==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-config": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.81.0.tgz", - "integrity": "sha512-6CinEaBe3WLpRlKlYXXu8r1UblJhbwD6Gtnoib5U8j6Pjp7XxMG9h/DGMeNp9aGLDu1OieUqiXpFo7O0/rR5Kg==", - "license": "MIT", - "dependencies": { - "connect": "^3.6.5", - "cosmiconfig": "^5.0.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.6.3", - "metro": "0.81.0", - "metro-cache": "0.81.0", - "metro-core": "0.81.0", - "metro-runtime": "0.81.0" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-core": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.81.0.tgz", - "integrity": "sha512-CVkM5YCOAFkNMvJai6KzA0RpztzfEKRX62/PFMOJ9J7K0uq/UkOFLxcgpcncMIrfy0PbfEj811b69tjULUQe1Q==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.81.0" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-file-map": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.81.0.tgz", - "integrity": "sha512-zMDI5uYhQCyxbye/AuFx/pAbsz9K+vKL7h1ShUXdN2fz4VUPiyQYRsRqOoVG1DsiCgzd5B6LW0YW77NFpjDQeg==", - "license": "MIT", - "dependencies": { - "anymatch": "^3.0.3", - "debug": "^2.2.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.6.3", - "micromatch": "^4.0.4", - "node-abort-controller": "^3.1.1", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=18.18" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/metro-file-map/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro-file-map/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/metro-minify-terser": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.81.0.tgz", - "integrity": "sha512-U2ramh3W822ZR1nfXgIk+emxsf5eZSg10GbQrT0ZizImK8IZ5BmJY+BHRIkQgHzWFpExOVxC7kWbGL1bZALswA==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-resolver": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.81.0.tgz", - "integrity": "sha512-Uu2Q+buHhm571cEwpPek8egMbdSTqmwT/5U7ZVNpK6Z2ElQBBCxd7HmFAslKXa7wgpTO2FAn6MqGeERbAtVDUA==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-runtime": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.81.0.tgz", - "integrity": "sha512-6oYB5HOt37RuGz2eV4A6yhcl+PUTwJYLDlY9vhT+aVjbUWI6MdBCf69vc4f5K5Vpt+yOkjy+2LDwLS0ykWFwYw==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-source-map": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.0.tgz", - "integrity": "sha512-TzsVxhH83dyxg4A4+L1nzNO12I7ps5IHLjKGZH3Hrf549eiZivkdjYiq/S5lOB+p2HiQ+Ykcwtmcja95LIC62g==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.81.0", - "nullthrows": "^1.1.1", - "ob1": "0.81.0", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.0.tgz", - "integrity": "sha512-C/1rWbNTPYp6yzID8IPuQPpVGzJ2rbWYBATxlvQ9dfK5lVNoxcwz77hjcY8ISLsRRR15hyd/zbjCNKPKeNgE1Q==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.81.0", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-transform-plugins": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.81.0.tgz", - "integrity": "sha512-uErLAPBvttGCrmGSCa0dNHlOTk3uJFVEVWa5WDg6tQ79PRmuYRwzUgLhVzn/9/kyr75eUX3QWXN79Jvu4txt6Q==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro-transform-worker": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.81.0.tgz", - "integrity": "sha512-HrQ0twiruhKy0yA+9nK5bIe3WQXZcC66PXTvRIos61/EASLAP2DzEmW7IxN/MGsfZegN2UzqL2CG38+mOB45vg==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "metro": "0.81.0", - "metro-babel-transformer": "0.81.0", - "metro-cache": "0.81.0", - "metro-cache-key": "0.81.0", - "metro-minify-terser": "0.81.0", - "metro-source-map": "0.81.0", - "metro-transform-plugins": "0.81.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/metro/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT" - }, - "node_modules/metro/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.24.0.tgz", - "integrity": "sha512-LyoXLB7IFzeZW0EvAbGZacbxBN7t6KKSDqFJPo3Ydow7wDlrDjXwsdiAHV6XOdvEN9MEuWXsSIFN4tzpyrXIHw==", - "license": "MIT" - }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.24.0.tgz", - "integrity": "sha512-IJooSvvu2qNRe7oo9Rb04sUT4omtZqZqf9uq9WM25Tb6v3usmvA93UqfnnoWs5V0uYjEl9Al6MNU10MCGKLwpg==", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.24.0" - } - }, - "node_modules/metro/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/metro/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/metro/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/nested-error-stacks": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", - "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", - "license": "MIT" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "license": "MIT" - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "license": "MIT" - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-package-arg": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", - "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", - "license": "ISC", - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "license": "MIT", - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", - "license": "MIT" - }, - "node_modules/ob1": { - "version": "0.81.0", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.81.0.tgz", - "integrity": "sha512-6Cvrkxt1tqaRdWqTAMcVYEiO5i1xcF9y7t06nFdjFqkfPsEloCf8WwhXdwBpNUkVYSQlSGS7cDgVQR86miBfBQ==", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=18.18" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/ora/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ora/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-png": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", - "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", - "license": "MIT", - "dependencies": { - "pngjs": "^3.3.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/password-prompt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/password-prompt/-/password-prompt-1.1.3.tgz", - "integrity": "sha512-HkrjG2aJlvF0t2BMH0e2LB/EHf3Lcq3fNMzy4GYHcQblAvOl+QQji1Lx7WRBMqpVK8p+KR7bCg7oqAMXtdgqyw==", - "license": "0BSD", - "dependencies": { - "ansi-escapes": "^4.3.2", - "cross-spawn": "^7.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/plist": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", - "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/plist/node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/plist/node_modules/xmlbuilder": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", - "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", - "license": "MIT", - "engines": { - "node": ">=8.0" - } - }, - "node_modules/pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss": { - "version": "8.4.49", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", - "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qrcode-terminal": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.11.0.tgz", - "integrity": "sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==", - "bin": { - "qrcode-terminal": "bin/qrcode-terminal.js" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-5.3.2.tgz", - "integrity": "sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==", - "license": "MIT", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "license": "MIT" - }, - "node_modules/react-native": { - "version": "0.76.3", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.3.tgz", - "integrity": "sha512-0TUhgmlouRNf6yuDIIAdbQl0g1VsONgCMsLs7Et64hjj5VLMCA7np+4dMrZvGZ3wRNqzgeyT9oWJsUm49AcwSQ==", - "license": "MIT", - "dependencies": { - "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.76.3", - "@react-native/codegen": "0.76.3", - "@react-native/community-cli-plugin": "0.76.3", - "@react-native/gradle-plugin": "0.76.3", - "@react-native/js-polyfills": "0.76.3", - "@react-native/normalize-colors": "0.76.3", - "@react-native/virtualized-lists": "0.76.3", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "^0.23.1", - "base64-js": "^1.5.1", - "chalk": "^4.0.0", - "commander": "^12.0.0", - "event-target-shim": "^5.0.1", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jest-environment-node": "^29.6.3", - "jsc-android": "^250231.0.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.81.0", - "metro-source-map": "^0.81.0", - "mkdirp": "^0.5.1", - "nullthrows": "^1.1.1", - "pretty-format": "^29.7.0", - "promise": "^8.3.0", - "react-devtools-core": "^5.3.1", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.24.0-canary-efb381bbf-20230505", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.3", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/react": "^18.2.6", - "react": "^18.2.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-native/node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.23.1.tgz", - "integrity": "sha512-uNLD0tk2tLUjGFdmCk+u/3FEw2o+BAwW4g+z2QVlxJrzZYOOPADroEcNtTPt5lNiScctaUmnsTkVEnOwZUOLhA==", - "license": "MIT", - "dependencies": { - "hermes-parser": "0.23.1" - } - }, - "node_modules/react-native/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/react-native/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/react-native/node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/react-native/node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "license": "MIT" - }, - "node_modules/react-native/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-native/node_modules/ws": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", - "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", - "license": "MIT", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/readline": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", - "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg==", - "license": "BSD" - }, - "node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "license": "MIT", - "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/remove-trailing-slash": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", - "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==", - "license": "MIT" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requireg": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", - "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", - "dependencies": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/requireg/node_modules/resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "license": "MIT", - "dependencies": { - "path-parse": "^1.0.5" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz", - "integrity": "sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==", - "license": "MIT" - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.24.0-canary-efb381bbf-20230505", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.24.0-canary-efb381bbf-20230505.tgz", - "integrity": "sha512-ABvovCDe/k9IluqSh4/ISoq8tIJnW8euVAWYt5j/bg6dRnqwQwiGO1F/V4AyK96NGF/FB04FhOUDuWj8IKfABA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", - "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-static/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-static/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-plist": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", - "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", - "license": "MIT", - "dependencies": { - "bplist-creator": "0.1.0", - "bplist-parser": "0.3.1", - "plist": "^3.0.5" - } - }, - "node_modules/simple-plist/node_modules/bplist-creator": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", - "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", - "license": "MIT", - "dependencies": { - "stream-buffers": "2.2.x" - } - }, - "node_modules/simple-plist/node_modules/bplist-parser": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", - "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", - "license": "MIT", - "dependencies": { - "big-integer": "1.6.x" - }, - "engines": { - "node": ">= 5.10.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "license": "MIT", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "license": "MIT" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", - "license": "Unlicense", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/structured-headers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", - "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", - "license": "MIT" - }, - "node_modules/sucrase": { - "version": "3.35.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", - "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.2", - "commander": "^4.0.0", - "glob": "^10.3.10", - "lines-and-columns": "^1.1.6", - "mz": "^2.7.0", - "pirates": "^4.0.1", - "ts-interface-checker": "^0.1.9" - }, - "bin": { - "sucrase": "bin/sucrase", - "sucrase-node": "bin/sucrase-node" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/sucrase/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/sudo-prompt": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", - "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==", - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "license": "MIT", - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/temp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/tempy": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.7.1.tgz", - "integrity": "sha512-vXPxwOyaNVi9nyczO16mxmHGpl6ASC5/TVhRRHpqeYHvKQm58EaWNvZXxAhR0lYYnBOQFjXjhzeLsaXdjxLjRg==", - "license": "MIT", - "dependencies": { - "del": "^6.0.0", - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", - "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "license": "MIT", - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "license": "MIT", - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "license": "BSD-3-Clause" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/ts-interface-checker": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "license": "Apache-2.0" - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", - "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/undici": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.0.tgz", - "integrity": "sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "license": "ISC", - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", - "license": "MIT" - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/whatwg-url-without-unicode": { - "version": "8.0.0-3", - "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", - "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", - "license": "MIT", - "dependencies": { - "buffer": "^5.4.3", - "punycode": "^2.1.1", - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/whatwg-url-without-unicode/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wonka": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.4.tgz", - "integrity": "sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xcode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", - "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", - "license": "Apache-2.0", - "dependencies": { - "simple-plist": "^1.1.0", - "uuid": "^7.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/xcode/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/xml2js": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", - "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xml2js/node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlbuilder": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-14.0.0.tgz", - "integrity": "sha512-ts+B2rSe4fIckR6iquDjsKbQFK2NlUk6iG5nf14mDEyldgoc2nEKZ3jZWMPTxGQwVgToSjt6VGIho1H8/fNFTg==", - "license": "MIT", - "engines": { - "node": ">=8.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/examples/computer-vision/package.json b/examples/computer-vision/package.json index 7f39a19ee..8b158a261 100644 --- a/examples/computer-vision/package.json +++ b/examples/computer-vision/package.json @@ -10,18 +10,19 @@ }, "dependencies": { "@react-native/metro-config": "^0.76.3", - "expo": "~52.0.17", - "expo-font": "^13.0.1", - "expo-status-bar": "~2.0.0", + "@shopify/react-native-skia": "1.5.0", + "expo": "~52.0.46", + "expo-font": "~13.0.4", + "expo-status-bar": "~2.0.1", "metro-config": "^0.81.0", "react": "18.3.1", - "react-native": "0.76.3", - "react-native-executorch": "^0.3.0", + "react-native": "0.76.9", + "react-native-executorch": "^0.3.2", "react-native-image-picker": "^7.2.2", "react-native-loading-spinner-overlay": "^3.0.1", - "react-native-reanimated": "^3.16.3", - "react-native-safe-area-context": "^5.0.0", - "react-native-svg": "^15.9.0", + "react-native-reanimated": "~3.16.1", + "react-native-safe-area-context": "4.12.0", + "react-native-svg": "15.8.0", "react-native-svg-transformer": "^1.5.0", "react-native-wheel-scrollview-picker": "^2.0.6" }, diff --git a/examples/computer-vision/screens/ImageSegmentationScreen.tsx b/examples/computer-vision/screens/ImageSegmentationScreen.tsx new file mode 100644 index 000000000..6c3ce8e60 --- /dev/null +++ b/examples/computer-vision/screens/ImageSegmentationScreen.tsx @@ -0,0 +1,188 @@ +import Spinner from 'react-native-loading-spinner-overlay'; +import { BottomBar } from '../components/BottomBar'; +import { getImage } from '../utils'; +import { + useImageSegmentation, + DEEPLAB_V3_RESNET50, + DeeplabLabel, +} from 'react-native-executorch'; +import { + Canvas, + Image as SkiaImage, + Skia, + AlphaType, + ColorType, +} from '@shopify/react-native-skia'; +import { View, StyleSheet, Image } from 'react-native'; +import { useState } from 'react'; + +const width = 224; +const height = 224; + +let pixels = new Uint8Array(width * height * 4); +pixels.fill(255); + +let data = Skia.Data.fromBytes(pixels); +let img = Skia.Image.MakeImage( + { + width: width, + height: height, + alphaType: AlphaType.Opaque, + colorType: ColorType.RGBA_8888, + }, + data, + width * 4 +); + +const numberToColor: number[][] = [ + [255, 87, 51], // 0 Red + [51, 255, 87], // 1 Green + [51, 87, 255], // 2 Blue + [255, 51, 246], // 3 Magenta + [51, 255, 246], // 4 Cyan + [243, 255, 51], // 5 Yellow + [141, 51, 255], // 6 Purple + [255, 131, 51], // 7 Orange + [51, 255, 131], // 8 Spring Green + [131, 51, 255], // 9 Violet + [255, 255, 51], // 10 Bright Yellow + [51, 255, 255], // 11 Aqua + [255, 51, 143], // 12 Deep Pink + [127, 51, 255], // 13 Dark Orchid + [51, 255, 175], // 14 Medium Spring Green + [255, 175, 51], // 15 Sandy Brown + [179, 255, 51], // 16 Chartreuse + [255, 87, 51], // 17 Red (darker shade) + [255, 51, 162], // 18 Hot Pink + [51, 162, 255], // 19 Sky Blue + [162, 51, 255], // 20 Amethyst +]; + +export const ImageSegmentationScreen = ({ + imageUri, + setImageUri, +}: { + imageUri: string; + setImageUri: (imageUri: string) => void; +}) => { + const model = useImageSegmentation({ + modelSource: DEEPLAB_V3_RESNET50, + }); + + const handleCameraPress = async (isCamera: boolean) => { + const image = await getImage(isCamera); + const uri = image?.uri; + setImageUri(uri as string); + }; + + const [resultPresent, setResultPresent] = useState(false); + + const runForward = async () => { + if (imageUri) { + try { + const output = await model.forward(imageUri); + pixels = new Uint8Array(width * height * 4); + + for (let x = 0; x < width; x++) { + for (let y = 0; y < height; y++) { + for (let i = 0; i < 3; i++) { + pixels[(x * height + y) * 4 + i] = + numberToColor[ + (output[DeeplabLabel.ARGMAX] || [])[x * height + y] + ][i]; + } + pixels[(x * height + y) * 4 + 3] = 255; + } + } + + data = Skia.Data.fromBytes(pixels); + img = Skia.Image.MakeImage( + { + width: width, + height: height, + alphaType: AlphaType.Opaque, + colorType: ColorType.RGBA_8888, + }, + data, + width * 4 + ); + setResultPresent(true); + } catch (e) { + console.error(e); + } + } + }; + + if (!model.isReady) { + return ( + + ); + } + + return ( + <> + + + + + {resultPresent && ( + + + + + + )} + + + + ); +}; + +const styles = StyleSheet.create({ + imageCanvasContainer: { + flex: 6, + width: '100%', + padding: 16, + }, + imageContainer: { + flex: 1, + width: '100%', + }, + image: { + flex: 1, + borderRadius: 8, + width: '100%', + }, + canvasContainer: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + gap: 4, + padding: 4, + }, + canvas: { + width: width, + height: height, + }, +}); diff --git a/examples/computer-vision/yarn.lock b/examples/computer-vision/yarn.lock index f671c6ea5..a48c9e771 100644 --- a/examples/computer-vision/yarn.lock +++ b/examples/computer-vision/yarn.lock @@ -6,14 +6,14 @@ __metadata: cacheKey: 8 "@0no-co/graphql.web@npm:^1.0.5, @0no-co/graphql.web@npm:^1.0.8": - version: 1.0.12 - resolution: "@0no-co/graphql.web@npm:1.0.12" + version: 1.1.2 + resolution: "@0no-co/graphql.web@npm:1.1.2" peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 peerDependenciesMeta: graphql: optional: true - checksum: 731b326e0682a119aa16ed4000e5190487ffd3ad1d28fcdfced0c6b8955b118de630b56c2d5505d10676991b090b6dba04b1c19731880cec10c1bc276e4ce1f2 + checksum: ddf4f073c9f03c41a5672b9285ad5573f34ad6d40ed73691c128d5332ff6186222ff909949cf6ef07bad8b417bbb5b609636e049700d3727a196111019a7aab4 languageName: node linkType: hard @@ -36,7 +36,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.26.2": version: 7.26.2 resolution: "@babel/code-frame@npm:7.26.2" dependencies: @@ -47,46 +47,46 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.9": - version: 7.26.3 - resolution: "@babel/compat-data@npm:7.26.3" - checksum: 85c5a9fb365231688c7faeb977f1d659da1c039e17b416f8ef11733f7aebe11fe330dce20c1844cacf243766c1d643d011df1d13cac9eda36c46c6c475693d21 +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/compat-data@npm:7.26.8" + checksum: 1bb04c6860c8c9555b933cb9c3caf5ef1dac331a37a351efb67956fc679f695d487aea76e792dd43823702c1300f7906f2a298e50b4a8d7ec199ada9c340c365 languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.21.3, @babel/core@npm:^7.25.2": - version: 7.26.0 - resolution: "@babel/core@npm:7.26.0" + version: 7.26.10 + resolution: "@babel/core@npm:7.26.10" dependencies: "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.26.0 - "@babel/generator": ^7.26.0 - "@babel/helper-compilation-targets": ^7.25.9 + "@babel/code-frame": ^7.26.2 + "@babel/generator": ^7.26.10 + "@babel/helper-compilation-targets": ^7.26.5 "@babel/helper-module-transforms": ^7.26.0 - "@babel/helpers": ^7.26.0 - "@babel/parser": ^7.26.0 - "@babel/template": ^7.25.9 - "@babel/traverse": ^7.25.9 - "@babel/types": ^7.26.0 + "@babel/helpers": ^7.26.10 + "@babel/parser": ^7.26.10 + "@babel/template": ^7.26.9 + "@babel/traverse": ^7.26.10 + "@babel/types": ^7.26.10 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: b296084cfd818bed8079526af93b5dfa0ba70282532d2132caf71d4060ab190ba26d3184832a45accd82c3c54016985a4109ab9118674347a7e5e9bc464894e6 + checksum: 0217325bd46fb9c828331c14dbe3f015ee13d9aecec423ef5acc0ce8b51a3d2a2d55f2ede252b99d0ab9b2f1a06e2881694a890f92006aeac9ebe5be2914c089 languageName: node linkType: hard -"@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.3": - version: 7.26.3 - resolution: "@babel/generator@npm:7.26.3" +"@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.26.10, @babel/generator@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/generator@npm:7.27.0" dependencies: - "@babel/parser": ^7.26.3 - "@babel/types": ^7.26.3 + "@babel/parser": ^7.27.0 + "@babel/types": ^7.27.0 "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 jsesc: ^3.0.2 - checksum: fb09fa55c66f272badf71c20a3a2cee0fa1a447fed32d1b84f16a668a42aff3e5f5ddc6ed5d832dda1e952187c002ca1a5cdd827022efe591b6ac44cada884ea + checksum: cdb6e3e8441241321192275f7a1265b6d610b44d57ae3bbb6047cb142849fd2ace1e15d5ee0685337e152f5d8760babd3ab898b6e5065e4b344006d2f0da759f languageName: node linkType: hard @@ -99,52 +99,52 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-compilation-targets@npm:7.25.9" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9, @babel/helper-compilation-targets@npm:^7.26.5": + version: 7.27.0 + resolution: "@babel/helper-compilation-targets@npm:7.27.0" dependencies: - "@babel/compat-data": ^7.25.9 + "@babel/compat-data": ^7.26.8 "@babel/helper-validator-option": ^7.25.9 browserslist: ^4.24.0 lru-cache: ^5.1.1 semver: ^6.3.1 - checksum: 3af536e2db358b38f968abdf7d512d425d1018fef2f485d6f131a57a7bcaed32c606b4e148bb230e1508fa42b5b2ac281855a68eb78270f54698c48a83201b9b + checksum: ad8b2351cde8d2e5c417f02f0d88af61ba080439e74f6d6ac578af5d63f8e35d0f36619cf18620ab627e9360c5c4b8a23784eecbef32d97944acb4ad2a57223f languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.25.9, @babel/helper-create-class-features-plugin@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.27.0" dependencies: "@babel/helper-annotate-as-pure": ^7.25.9 "@babel/helper-member-expression-to-functions": ^7.25.9 "@babel/helper-optimise-call-expression": ^7.25.9 - "@babel/helper-replace-supers": ^7.25.9 + "@babel/helper-replace-supers": ^7.26.5 "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/traverse": ^7.27.0 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 91dd5f203ed04568c70b052e2f26dfaac7c146447196c00b8ecbb6d3d2f3b517abadb985d3321a19d143adaed6fe17f7f79f8f50e0c20e9d8ad83e1027b42424 + checksum: 4ec1f044effa7d9984d20ac9201184986c2c9d688495bf8204c5bf0e042c4e6752d336884997b1140f8f36107edda5f02891eb6660273ab906c9b1e6b2491b71 languageName: node linkType: hard "@babel/helper-create-regexp-features-plugin@npm:^7.25.9": - version: 7.26.3 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.26.3" + version: 7.27.0 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.0" dependencies: "@babel/helper-annotate-as-pure": ^7.25.9 regexpu-core: ^6.2.0 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0 - checksum: 50a27d8ce6da5c2fa0c62c132c4d27cfeb36e3233ff1e5220d643de3dafe49423b507382f0b72a696fce7486014b134c1e742f55438590f9405d26765b009af0 + checksum: 9b86f4f42954fe552a784fd9f6325aaf70ec280adf961023e303bdac33428deb26d06efeeaa6b776ef2d4ad43b402238f1e7979152aed798fe7577b6a520e572 languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.6.2, @babel/helper-define-polyfill-provider@npm:^0.6.3": - version: 0.6.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3" +"@babel/helper-define-polyfill-provider@npm:^0.6.3, @babel/helper-define-polyfill-provider@npm:^0.6.4": + version: 0.6.4 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.4" dependencies: "@babel/helper-compilation-targets": ^7.22.6 "@babel/helper-plugin-utils": ^7.22.5 @@ -153,7 +153,7 @@ __metadata: resolve: ^1.14.2 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 710e6d8a5391736b9f53f09d0494575c2e03de199ad8d1349bc8e514cb85251ea1f1842c2ff44830849d482052ddb42ae931101002a87a263b12f649c2e57c01 + checksum: bfbcb41f005ba11497b459cf801650af558b533f383b2f57034e9ccce592a0af699b585898deef93598ed3d9bd14502327e18dfc8a92a3db48b2a49ae2886f86 languageName: node linkType: hard @@ -199,10 +199,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": - version: 7.25.9 - resolution: "@babel/helper-plugin-utils@npm:7.25.9" - checksum: e19ec8acf0b696756e6d84531f532c5fe508dce57aa68c75572a77798bd04587a844a9a6c8ea7d62d673e21fdc174d091c9097fb29aea1c1b49f9c6eaa80f022 +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.26.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.26.5 + resolution: "@babel/helper-plugin-utils@npm:7.26.5" + checksum: 4771fbb1711c624c62d12deabc2ed7435a6e6994b6ce09d5ede1bc1bf19be59c3775461a1e693bdd596af865685e87bb2abc778f62ceadc1b2095a8e2aa74180 languageName: node linkType: hard @@ -219,16 +219,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-replace-supers@npm:7.25.9" +"@babel/helper-replace-supers@npm:^7.25.9, @babel/helper-replace-supers@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/helper-replace-supers@npm:7.26.5" dependencies: "@babel/helper-member-expression-to-functions": ^7.25.9 "@babel/helper-optimise-call-expression": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/traverse": ^7.26.5 peerDependencies: "@babel/core": ^7.0.0 - checksum: 84f40e12520b7023e52d289bf9d569a06284879fe23bbbacad86bec5d978b2669769f11b073fcfeb1567d8c547168323005fda88607a4681ecaeb4a5cdd48bb9 + checksum: c5ab31b29c7cc09e30278f8860ecdb873ce6c84b5c08bc5239c369c7c4fe9f0a63cda61b55b7bbd20edb4e5dc32e73087cc3c57d85264834bd191551d1499185 languageName: node linkType: hard @@ -274,13 +274,13 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.26.0": - version: 7.26.0 - resolution: "@babel/helpers@npm:7.26.0" +"@babel/helpers@npm:^7.26.10": + version: 7.27.0 + resolution: "@babel/helpers@npm:7.27.0" dependencies: - "@babel/template": ^7.25.9 - "@babel/types": ^7.26.0 - checksum: d77fe8d45033d6007eadfa440355c1355eed57902d5a302f450827ad3d530343430a21210584d32eef2f216ae463d4591184c6fc60cf205bbf3a884561469200 + "@babel/template": ^7.27.0 + "@babel/types": ^7.27.0 + checksum: d11bb8ada0c5c298d2dbd478d69b16a79216b812010e78855143e321807df4e34f60ab65e56332e72315ccfe52a22057f0cf1dcc06e518dcfa3e3141bb8576cd languageName: node linkType: hard @@ -296,14 +296,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.3": - version: 7.26.3 - resolution: "@babel/parser@npm:7.26.3" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.26.10, @babel/parser@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/parser@npm:7.27.0" dependencies: - "@babel/types": ^7.26.3 + "@babel/types": ^7.27.0 bin: parser: ./bin/babel-parser.js - checksum: e2bff2e9fa6540ee18fecc058bc74837eda2ddcecbe13454667314a93fc0ba26c1fb862c812d84f6d5f225c3bd8d191c3a42d4296e287a882c4e1f82ff2815ff + checksum: 062a4e6d51553603253990c84e051ed48671a55b9d4e9caf2eff9dc888465070a0cfd288a467dbf0d99507781ea4a835b5606e32ddc0319f1b9273f913676829 languageName: node linkType: hard @@ -445,7 +445,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.12.1, @babel/plugin-syntax-flow@npm:^7.25.9": +"@babel/plugin-syntax-flow@npm:^7.12.1, @babel/plugin-syntax-flow@npm:^7.26.0": version: 7.26.0 resolution: "@babel/plugin-syntax-flow@npm:7.26.0" dependencies: @@ -611,15 +611,15 @@ __metadata: linkType: hard "@babel/plugin-transform-async-generator-functions@npm:^7.25.4": - version: 7.25.9 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9" + version: 7.26.8 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.26.8" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 "@babel/helper-remap-async-to-generator": ^7.25.9 - "@babel/traverse": ^7.25.9 + "@babel/traverse": ^7.26.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 41e02c18c2a57de9f274fa2c5a1bf81a20ab5f321db29cc3051512b9c5bdf3f1a8c42f1fc282cb62343c6d50849f992eede954d5f7fb5e7df48ae0c59ea7e054 + checksum: 10424a1bbfbc7ffdb13cef1e832f76bb2d393a9fbfaa1eaa3091a8f6ec3e2ac0b66cf04fca9cb3fb4dbf3d1bd404d72dfce4a3742b4ef21f6271aca7076a65ef languageName: node linkType: hard @@ -637,13 +637,13 @@ __metadata: linkType: hard "@babel/plugin-transform-block-scoping@npm:^7.25.0": - version: 7.25.9 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9" + version: 7.27.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.27.0" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e869500cfb1995e06e64c9608543b56468639809febfcdd6fcf683bc0bf1be2431cacf2981a168a1a14f4766393e37bc9f7c96d25bc5b5f39a64a8a8ad0bf8e0 + checksum: 5817550c113d3dc4419d55cd8b2b231a8f260cbdee82d4b90f46814c241afc9c18b471ae47c478097f2d3a85ce0a0c1296ebdda59d973a70becbfc7c23901c96 languageName: node linkType: hard @@ -710,26 +710,26 @@ __metadata: linkType: hard "@babel/plugin-transform-flow-strip-types@npm:^7.25.2, @babel/plugin-transform-flow-strip-types@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.25.9" + version: 7.26.5 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.26.5" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 - "@babel/plugin-syntax-flow": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 + "@babel/plugin-syntax-flow": ^7.26.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7f51cd5cc0c3a5ce2fe31c689458706ed40284a1c59b017167c3cbef953550a843450c5cfe6896b154fb645f141a930a4fd925f46b2215d0fcc66e7758202c38 + checksum: a15ae76aea55f1801a5c8ebdfdd0e4616f256ca1eeb504b0781120242aae5a2174439a084bacd2b9e3e83d2a8463cf10c2a8c9f0f0504ded21144297c2b4a380 languageName: node linkType: hard "@babel/plugin-transform-for-of@npm:^7.24.7": - version: 7.25.9 - resolution: "@babel/plugin-transform-for-of@npm:7.25.9" + version: 7.26.9 + resolution: "@babel/plugin-transform-for-of@npm:7.26.9" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 41b56e70256a29fc26ed7fb95ece062d7ec2f3b6ea8f0686349ffd004cd4816132085ee21165b89c502ee7161cb7cfb12510961638851357945dc7bc546475b7 + checksum: 361323cfc1d9e9dc0bf0d68326b5e7f4da5b8a8be8931f6cacda749d39b88ee1b0f9b4d8b771a5a4d52bb881a90da97950c8a9e6fb47f2c9db11d91f6351768e languageName: node linkType: hard @@ -768,7 +768,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.24.8, @babel/plugin-transform-modules-commonjs@npm:^7.25.9": +"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.24.8, @babel/plugin-transform-modules-commonjs@npm:^7.26.3": version: 7.26.3 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3" dependencies: @@ -793,13 +793,13 @@ __metadata: linkType: hard "@babel/plugin-transform-nullish-coalescing-operator@npm:^7.0.0-0, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": - version: 7.25.9 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.9" + version: 7.26.6 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.26.6" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 26e03b1c2c0408cc300e46d8f8cb639653ff3a7b03456d0d8afbb53c44f33a89323f51d99991dade3a5676921119bbdf869728bb7911799b5ef99ffafa2cdd24 + checksum: 752837d532b85c41f6bb868e83809605f513bc9a3b8e88ac3d43757c9bf839af4f246874c1c6d6902bb2844d355efccae602c3856098911f8abdd603672f8379 languageName: node linkType: hard @@ -958,30 +958,30 @@ __metadata: linkType: hard "@babel/plugin-transform-regenerator@npm:^7.24.7": - version: 7.25.9 - resolution: "@babel/plugin-transform-regenerator@npm:7.25.9" + version: 7.27.0 + resolution: "@babel/plugin-transform-regenerator@npm:7.27.0" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 regenerator-transform: ^0.15.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1c09e8087b476c5967282c9790fb8710e065eda77c60f6cb5da541edd59ded9d003d96f8ef640928faab4a0b35bf997673499a194973da4f0c97f0935807a482 + checksum: bd2f3278df31aa41cb34b051352e0d76e1feef6827a83885b6b66893a563cc9cc6bc34fc45899237e81224081ba951d8a7fed009c7de01e890646b291be7903c languageName: node linkType: hard "@babel/plugin-transform-runtime@npm:^7.24.7": - version: 7.25.9 - resolution: "@babel/plugin-transform-runtime@npm:7.25.9" + version: 7.26.10 + resolution: "@babel/plugin-transform-runtime@npm:7.26.10" dependencies: "@babel/helper-module-imports": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 babel-plugin-polyfill-corejs2: ^0.4.10 - babel-plugin-polyfill-corejs3: ^0.10.6 + babel-plugin-polyfill-corejs3: ^0.11.0 babel-plugin-polyfill-regenerator: ^0.6.1 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: db7f20a7a7324dbfe3b43a09f0095c69dadcf8b08567fa7c7fa6e245d97c66cdcdc330e97733b7589261c0e1046bc5cc36741b932ac5dd7757374495b57e7b02 + checksum: f50096ebea8c6106db2906b4b73955139c7c338d86f4940ed329703b49848843cf7a1308cafd6f23f9fc9f35f5e835daba2bb56be991b91d2a4a8092c4a9943b languageName: node linkType: hard @@ -1020,28 +1020,28 @@ __metadata: linkType: hard "@babel/plugin-transform-template-literals@npm:^7.0.0-0": - version: 7.25.9 - resolution: "@babel/plugin-transform-template-literals@npm:7.25.9" + version: 7.26.8 + resolution: "@babel/plugin-transform-template-literals@npm:7.26.8" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 92eb1d6e2d95bd24abbb74fa7640d02b66ff6214e0bb616d7fda298a7821ce15132a4265d576a3502a347a3c9e94b6c69ed265bb0784664592fa076785a3d16a + checksum: 65874c8844ce906507cd5b9c78950d6173f8339b6416a2a9e763021db5a7045315a6f0e58976ec4af5e960c003ef322576c105130a644addb8f94d1a0821a972 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.25.2, @babel/plugin-transform-typescript@npm:^7.25.9": - version: 7.26.3 - resolution: "@babel/plugin-transform-typescript@npm:7.26.3" +"@babel/plugin-transform-typescript@npm:^7.25.2, @babel/plugin-transform-typescript@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/plugin-transform-typescript@npm:7.27.0" dependencies: "@babel/helper-annotate-as-pure": ^7.25.9 - "@babel/helper-create-class-features-plugin": ^7.25.9 - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.27.0 + "@babel/helper-plugin-utils": ^7.26.5 "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 "@babel/plugin-syntax-typescript": ^7.25.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 38ab210e80d4fc4eaa27e88705a961d53f5eae1dcd0ef8794affe3002fec557404e8bb29ca22d18e691a75690e3bcadbfeb8207a830f15cf83231ab5fd1ea08b + checksum: 0629dffb332616d3a07f2718dc1ac1ff6b3092b59cb7b06594484b3bef9d16012ef3fe36b397000092a83aaac014c52b570e484d8903bb6a0a13d0b3a896829c languageName: node linkType: hard @@ -1087,17 +1087,17 @@ __metadata: linkType: hard "@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.16.7, @babel/preset-typescript@npm:^7.23.0": - version: 7.26.0 - resolution: "@babel/preset-typescript@npm:7.26.0" + version: 7.27.0 + resolution: "@babel/preset-typescript@npm:7.27.0" dependencies: - "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 "@babel/helper-validator-option": ^7.25.9 "@babel/plugin-syntax-jsx": ^7.25.9 - "@babel/plugin-transform-modules-commonjs": ^7.25.9 - "@babel/plugin-transform-typescript": ^7.25.9 + "@babel/plugin-transform-modules-commonjs": ^7.26.3 + "@babel/plugin-transform-typescript": ^7.27.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6d8641fa6efd0e10eec5e8f92cd164b916a06d57131cfa5216c281404289c87d2b4995140a1c1d9c3bad171ff6ef2226be5f0585e09577ffff349706e991ec71 + checksum: 64bbde0069d6b40092796a5c02ce192499d6b0cecf208e881318a0a969b4ffea6c52b8b10b03cb6a1b7aa630076a8b49df39af90e421d81410a7269b34a393f3 languageName: node linkType: hard @@ -1117,47 +1117,47 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.8.4": - version: 7.26.0 - resolution: "@babel/runtime@npm:7.26.0" + version: 7.27.0 + resolution: "@babel/runtime@npm:7.27.0" dependencies: regenerator-runtime: ^0.14.0 - checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a + checksum: 3e73d9e65f76fad8f99802b5364c941f4a60c693b3eca66147bb0bfa54cf0fbe017232155e16e3fd83c0a049b51b8d7239efbd73626534abe8b54a6dd57dcb1b languageName: node linkType: hard -"@babel/template@npm:^7.25.0, @babel/template@npm:^7.25.9, @babel/template@npm:^7.3.3": - version: 7.25.9 - resolution: "@babel/template@npm:7.25.9" +"@babel/template@npm:^7.25.0, @babel/template@npm:^7.25.9, @babel/template@npm:^7.26.9, @babel/template@npm:^7.27.0, @babel/template@npm:^7.3.3": + version: 7.27.0 + resolution: "@babel/template@npm:7.27.0" dependencies: - "@babel/code-frame": ^7.25.9 - "@babel/parser": ^7.25.9 - "@babel/types": ^7.25.9 - checksum: 103641fea19c7f4e82dc913aa6b6ac157112a96d7c724d513288f538b84bae04fb87b1f1e495ac1736367b1bc30e10f058b30208fb25f66038e1f1eb4e426472 + "@babel/code-frame": ^7.26.2 + "@babel/parser": ^7.27.0 + "@babel/types": ^7.27.0 + checksum: 46d6db4c204a092f11ad6c3bfb6ec3dc1422e32121186d68ab1b3e633313aa5b7e21f26ca801dbd7da21f256225305a76454429fc500e52dabadb30af35df961 languageName: node linkType: hard -"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.9": - version: 7.26.4 - resolution: "@babel/traverse@npm:7.26.4" +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.10, @babel/traverse@npm:^7.26.5, @babel/traverse@npm:^7.26.8, @babel/traverse@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/traverse@npm:7.27.0" dependencies: "@babel/code-frame": ^7.26.2 - "@babel/generator": ^7.26.3 - "@babel/parser": ^7.26.3 - "@babel/template": ^7.25.9 - "@babel/types": ^7.26.3 + "@babel/generator": ^7.27.0 + "@babel/parser": ^7.27.0 + "@babel/template": ^7.27.0 + "@babel/types": ^7.27.0 debug: ^4.3.1 globals: ^11.1.0 - checksum: dcdf51b27ab640291f968e4477933465c2910bfdcbcff8f5315d1f29b8ff861864f363e84a71fb489f5e9708e8b36b7540608ce019aa5e57ef7a4ba537e62700 + checksum: 922d22aa91200e1880cfa782802100aa5b236fab89a44b9c40cfea94163246efd010626f7dc2b9d7769851c1fa2d8e8f8a1e0168ff4a7094e9b737c32760baa1 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.3, @babel/types@npm:^7.3.3": - version: 7.26.3 - resolution: "@babel/types@npm:7.26.3" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.10, @babel/types@npm:^7.27.0, @babel/types@npm:^7.3.3": + version: 7.27.0 + resolution: "@babel/types@npm:7.27.0" dependencies: "@babel/helper-string-parser": ^7.25.9 "@babel/helper-validator-identifier": ^7.25.9 - checksum: 195f428080dcaadbcecc9445df7f91063beeaa91b49ccd78f38a5af6b75a6a58391d0c6614edb1ea322e57889a1684a0aab8e667951f820196901dd341f931e9 + checksum: 59582019eb8a693d4277015d4dec0233874d884b9019dcd09550332db7f0f2ac9e30eca685bb0ada4bab5a4dc8bbc2a6bcaadb151c69b7e6aa94b5eaf8fc8c51 languageName: node linkType: hard @@ -1170,29 +1170,29 @@ __metadata: languageName: node linkType: hard -"@expo/cli@npm:0.22.18": - version: 0.22.18 - resolution: "@expo/cli@npm:0.22.18" +"@expo/cli@npm:0.22.24": + version: 0.22.24 + resolution: "@expo/cli@npm:0.22.24" dependencies: "@0no-co/graphql.web": ^1.0.8 "@babel/runtime": ^7.20.0 "@expo/code-signing-certificates": ^0.0.5 - "@expo/config": ~10.0.10 - "@expo/config-plugins": ~9.0.15 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 "@expo/devcert": ^1.1.2 "@expo/env": ~0.4.2 "@expo/image-utils": ^0.6.5 "@expo/json-file": ^9.0.2 - "@expo/metro-config": ~0.19.11 + "@expo/metro-config": ~0.19.12 "@expo/osascript": ^2.1.6 "@expo/package-manager": ^1.7.2 "@expo/plist": ^0.2.2 - "@expo/prebuild-config": ^8.0.28 + "@expo/prebuild-config": ^8.0.31 "@expo/rudder-sdk-node": ^1.1.1 "@expo/spawn-async": ^1.7.2 "@expo/ws-tunnel": ^1.0.1 "@expo/xcpretty": ^4.3.0 - "@react-native/dev-middleware": 0.76.7 + "@react-native/dev-middleware": 0.76.9 "@urql/core": ^5.0.6 "@urql/exchange-retry": ^1.3.0 accepts: ^1.3.8 @@ -1248,32 +1248,33 @@ __metadata: ws: ^8.12.1 bin: expo-internal: build/bin/cli - checksum: e33ba0c9acbf5e22076af06ddb4165b31a2b763d401661334abe435589ac456c25bd5416dea5c355b3b6eed7cac07c7a9277ab5f321046cdda05ac3716d43c5e + checksum: a205e110559354ac57055eb81f688d56f8610f33aa7f6a7f138fd1d88d4366c0a1fbb3571b26f06068ca9749dfa3f83d8606e4d4dfdba5445edc29835da45b5c languageName: node linkType: hard -"@expo/cli@npm:0.22.6": - version: 0.22.6 - resolution: "@expo/cli@npm:0.22.6" +"@expo/cli@npm:0.22.26": + version: 0.22.26 + resolution: "@expo/cli@npm:0.22.26" dependencies: "@0no-co/graphql.web": ^1.0.8 "@babel/runtime": ^7.20.0 "@expo/code-signing-certificates": ^0.0.5 - "@expo/config": ~10.0.4 - "@expo/config-plugins": ~9.0.10 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 "@expo/devcert": ^1.1.2 - "@expo/env": ~0.4.0 - "@expo/image-utils": ^0.6.0 - "@expo/json-file": ^9.0.0 - "@expo/metro-config": ~0.19.8 - "@expo/osascript": ^2.0.31 - "@expo/package-manager": ^1.5.0 - "@expo/plist": ^0.2.0 - "@expo/prebuild-config": ^8.0.23 + "@expo/env": ~0.4.2 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@expo/metro-config": ~0.19.12 + "@expo/osascript": ^2.1.6 + "@expo/package-manager": ^1.7.2 + "@expo/plist": ^0.2.2 + "@expo/prebuild-config": ~8.2.0 "@expo/rudder-sdk-node": ^1.1.1 "@expo/spawn-async": ^1.7.2 + "@expo/ws-tunnel": ^1.0.1 "@expo/xcpretty": ^4.3.0 - "@react-native/dev-middleware": 0.76.5 + "@react-native/dev-middleware": 0.76.9 "@urql/core": ^5.0.6 "@urql/exchange-retry": ^1.3.0 accepts: ^1.3.8 @@ -1312,7 +1313,7 @@ __metadata: requireg: ^0.2.2 resolve: ^1.22.2 resolve-from: ^5.0.0 - resolve.exports: ^2.0.2 + resolve.exports: ^2.0.3 semver: ^7.6.0 send: ^0.19.0 slugify: ^1.3.4 @@ -1329,7 +1330,7 @@ __metadata: ws: ^8.12.1 bin: expo-internal: build/bin/cli - checksum: 426cdd48532d3fe2c0d7661479f95cfbe6edc430fc49012d5d50084637844037154d9004e1f07716b5f5f37dcddc2b4701cfaa8124575aa229a32d6b9cdf6f5c + checksum: 32b79ab6a5ee88487e457e5f74249b2e081889521a89d53b452fbd454652428a08164e933681bf7707f4834f1cf529c3b6eaa9df7a077bc1a7bc026442990bf4 languageName: node linkType: hard @@ -1343,13 +1344,13 @@ __metadata: languageName: node linkType: hard -"@expo/config-plugins@npm:~9.0.10, @expo/config-plugins@npm:~9.0.12": - version: 9.0.12 - resolution: "@expo/config-plugins@npm:9.0.12" +"@expo/config-plugins@npm:~9.0.17": + version: 9.0.17 + resolution: "@expo/config-plugins@npm:9.0.17" dependencies: - "@expo/config-types": ^52.0.0 - "@expo/json-file": ~9.0.0 - "@expo/plist": ^0.2.0 + "@expo/config-types": ^52.0.5 + "@expo/json-file": ~9.0.2 + "@expo/plist": ^0.2.2 "@expo/sdk-runtime-versions": ^1.0.0 chalk: ^4.1.2 debug: ^4.3.5 @@ -1361,17 +1362,17 @@ __metadata: slugify: ^1.6.6 xcode: ^3.0.1 xml2js: 0.6.0 - checksum: 061400bc98f23231578b8ff1f6446d2010b4f768ac80792479973afecd4ceddc01af2880fbae82fbbcbfe7b8fd2a4a03449f8ba414b10a7b31f86945145d8717 + checksum: 5f415a3f4b399024d904d5c6e7b807d52f0efb6eddd217e458fa7d26d04b882f45462aa525ee8e49d404aecfc508e2a829ebd168f9a3b949a215a33699b0b92f languageName: node linkType: hard -"@expo/config-plugins@npm:~9.0.15": - version: 9.0.16 - resolution: "@expo/config-plugins@npm:9.0.16" +"@expo/config-plugins@npm:~9.1.2, @expo/config-plugins@npm:~9.1.3": + version: 9.1.3 + resolution: "@expo/config-plugins@npm:9.1.3" dependencies: - "@expo/config-types": ^52.0.5 - "@expo/json-file": ~9.0.2 - "@expo/plist": ^0.2.2 + "@expo/config-types": ^53.0.0-preview.2 + "@expo/json-file": ~9.1.1 + "@expo/plist": ^0.3.1 "@expo/sdk-runtime-versions": ^1.0.0 chalk: ^4.1.2 debug: ^4.3.5 @@ -1383,31 +1384,31 @@ __metadata: slugify: ^1.6.6 xcode: ^3.0.1 xml2js: 0.6.0 - checksum: 717a8868c9a3a718c21461a1679897da5cc6bf97ff0b4b361fed3f453004bad97ac29ba7bd1e24614b04f103af950fb7014bddb23f74e19e7364b0a75591f3c6 - languageName: node - linkType: hard - -"@expo/config-types@npm:^52.0.0": - version: 52.0.1 - resolution: "@expo/config-types@npm:52.0.1" - checksum: eff316abcf9244b880eb40b6eb51f9924973d833148a30084bf76aa33add144822a97a7eefe0c1c24cce3c4951d21f39b980db247944ce0f9c02b397412a3c48 + checksum: f65e8f0865fd25bd16afea97669ebb92d44710806712245d236c9483ab2d874c7e60b2b23f8d9b962375833e39195dbd2e0fce473694ea0e2782f994e59d30dc languageName: node linkType: hard -"@expo/config-types@npm:^52.0.4, @expo/config-types@npm:^52.0.5": +"@expo/config-types@npm:^52.0.5": version: 52.0.5 resolution: "@expo/config-types@npm:52.0.5" checksum: 2e8aa1a0d88e788868df494709f7a2544ef4ff555b038bfe5f6a8e4ee0d20c1e1239e58504026bf0e41afc9422532a8aee6cb0fe121bb8b71ea5521fd9bb27d0 languageName: node linkType: hard -"@expo/config@npm:~10.0.10": - version: 10.0.10 - resolution: "@expo/config@npm:10.0.10" +"@expo/config-types@npm:^53.0.0-preview.2": + version: 53.0.0-preview.2 + resolution: "@expo/config-types@npm:53.0.0-preview.2" + checksum: 13f1e27f7b6ffdc35cb7c12b5c8813fd36aef027a46c854bbf6e15a530e1fe2b247e8c30222056f5e0d55d7d6c96ab4790ff69c506fc6f696678962c3f68d867 + languageName: node + linkType: hard + +"@expo/config@npm:~10.0.11": + version: 10.0.11 + resolution: "@expo/config@npm:10.0.11" dependencies: "@babel/code-frame": ~7.10.4 - "@expo/config-plugins": ~9.0.15 - "@expo/config-types": ^52.0.4 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 "@expo/json-file": ^9.0.2 deepmerge: ^4.3.1 getenv: ^1.0.0 @@ -1418,18 +1419,18 @@ __metadata: semver: ^7.6.0 slugify: ^1.3.4 sucrase: 3.35.0 - checksum: ba9c4a4eaa714824ecc88d27df09bef532268abcad25fd06cc79dfbb8f592e591d3d3afd3288041535be94155536eb5f0c65ab718f661f2d16cbcb881b003a71 + checksum: 28f147b84e49d35306769e620f8e19da12f245e8fd08cf8279512f84eaccfdc3ab69f6ce9ea8e603ae3d0e9d994045336eff450f43b89f0b92f63e4914c47f3a languageName: node linkType: hard -"@expo/config@npm:~10.0.4, @expo/config@npm:~10.0.6": - version: 10.0.6 - resolution: "@expo/config@npm:10.0.6" +"@expo/config@npm:~11.0.1": + version: 11.0.2 + resolution: "@expo/config@npm:11.0.2" dependencies: "@babel/code-frame": ~7.10.4 - "@expo/config-plugins": ~9.0.10 - "@expo/config-types": ^52.0.0 - "@expo/json-file": ^9.0.0 + "@expo/config-plugins": ~9.1.3 + "@expo/config-types": ^53.0.0-preview.2 + "@expo/json-file": ^9.1.1 deepmerge: ^4.3.1 getenv: ^1.0.0 glob: ^10.4.2 @@ -1439,53 +1440,44 @@ __metadata: semver: ^7.6.0 slugify: ^1.3.4 sucrase: 3.35.0 - checksum: c45d51eba65ac7841a1789dd23ace97c1f1cd2eb83835ef6411bf46c3f15fa97019c0b3ccb2848a7f0c734c3eb28ee351b426408e6512c7e999ed6a6186943ff + checksum: a2070e07cc68f0440c51566416f96581b63a44df97ad90eed971ffa5e7e99f2dae05a7d12d7ac536f076a27065428eecf6dacea98cc964fed38ddcca2e7841e2 languageName: node linkType: hard "@expo/devcert@npm:^1.1.2": - version: 1.1.4 - resolution: "@expo/devcert@npm:1.1.4" + version: 1.2.0 + resolution: "@expo/devcert@npm:1.2.0" dependencies: - application-config-path: ^0.1.0 - command-exists: ^1.2.4 + "@expo/sudo-prompt": ^9.3.1 debug: ^3.1.0 - eol: ^0.9.1 - get-port: ^3.2.0 glob: ^10.4.2 - lodash: ^4.17.21 - mkdirp: ^0.5.1 - password-prompt: ^1.0.4 - sudo-prompt: ^8.2.0 - tmp: ^0.0.33 - tslib: ^2.4.0 - checksum: a6bb5ba18d1d4fe5ebfa096f8d332f14bbe8bb942bc3650debf89fb68b5637bd5b7b22f9b28d5971965436bf83d442e843ac7e0e1e7408cce6e575b55c830b6d + checksum: e35d63de8bd3512215b259be75dbb7836ecb8885f94b037fbca5923bf9b3b8391cb8cc28f85c0e4e175b0696d1ea18e720ceb72f21b50ffdab25d750edf99178 languageName: node linkType: hard -"@expo/env@npm:~0.4.0": - version: 0.4.0 - resolution: "@expo/env@npm:0.4.0" +"@expo/env@npm:~0.4.2": + version: 0.4.2 + resolution: "@expo/env@npm:0.4.2" dependencies: chalk: ^4.0.0 debug: ^4.3.4 dotenv: ~16.4.5 dotenv-expand: ~11.0.6 getenv: ^1.0.0 - checksum: b48862546d6b2cadf81f3b4e7e6de484965091c28679404a749b935a928ca8c83610e6a8873df35a88e8fc8fe5d7ae369684616ce5a33328fc235f48df0d76cf + checksum: cc9264e50faf5f38e6253b5c97e775bc8cb29bf8ca37bcd427cbb67dd773a4e62a2bdb030904565bac4644eac89e10fc61206d5aa42e5b1f26acf5ca1f6b9ce9 languageName: node linkType: hard -"@expo/env@npm:~0.4.2": - version: 0.4.2 - resolution: "@expo/env@npm:0.4.2" +"@expo/env@npm:~1.0.2": + version: 1.0.2 + resolution: "@expo/env@npm:1.0.2" dependencies: chalk: ^4.0.0 debug: ^4.3.4 dotenv: ~16.4.5 dotenv-expand: ~11.0.6 getenv: ^1.0.0 - checksum: cc9264e50faf5f38e6253b5c97e775bc8cb29bf8ca37bcd427cbb67dd773a4e62a2bdb030904565bac4644eac89e10fc61206d5aa42e5b1f26acf5ca1f6b9ce9 + checksum: 1b2f394f75d0cccf73695aae7a22c7f33c12906b05aceb00ce16cffbfaaa88fa8210ab233c8c1dc46ee62c96d7d5345dfb67914e37cb59362beaa40319414944 languageName: node linkType: hard @@ -1509,29 +1501,9 @@ __metadata: languageName: node linkType: hard -"@expo/fingerprint@npm:0.11.4": - version: 0.11.4 - resolution: "@expo/fingerprint@npm:0.11.4" - dependencies: - "@expo/spawn-async": ^1.7.2 - arg: ^5.0.2 - chalk: ^4.1.2 - debug: ^4.3.4 - find-up: ^5.0.0 - getenv: ^1.0.0 - minimatch: ^3.0.4 - p-limit: ^3.1.0 - resolve-from: ^5.0.0 - semver: ^7.6.0 - bin: - fingerprint: bin/cli.js - checksum: 8a6018a757dab8159d14715b71b0b9ec1d4b50b5901e8c204ea25eb3703e1de4e71710fe9b5a0a3fb267c62d2b488e0e5ee3477defd8f1656f22565674efe1d8 - languageName: node - linkType: hard - -"@expo/image-utils@npm:^0.6.0": - version: 0.6.3 - resolution: "@expo/image-utils@npm:0.6.3" +"@expo/image-utils@npm:^0.6.5": + version: 0.6.5 + resolution: "@expo/image-utils@npm:0.6.5" dependencies: "@expo/spawn-async": ^1.7.2 chalk: ^4.0.0 @@ -1543,17 +1515,16 @@ __metadata: semver: ^7.6.0 temp-dir: ~2.0.0 unique-string: ~2.0.0 - checksum: 2f55c993698daf7e170b45ff4cbe8cdbeba6a565272195ba54c1e27c4210a3d5a26a6557aa5fe65a60170ae20fce434fadf3aeb9809e2e3fffc009a200098e0e + checksum: f6fe5efd518d84463d767a4fb8a920d8b70779c8d93ba07ef407e0f016452324e3da6cff8292d0e2b436facdaef0073b8d527881e73ff5ba0288b4c942cdb539 languageName: node linkType: hard -"@expo/image-utils@npm:^0.6.5": - version: 0.6.5 - resolution: "@expo/image-utils@npm:0.6.5" +"@expo/image-utils@npm:^0.7.1": + version: 0.7.1 + resolution: "@expo/image-utils@npm:0.7.1" dependencies: "@expo/spawn-async": ^1.7.2 chalk: ^4.0.0 - fs-extra: 9.0.0 getenv: ^1.0.0 jimp-compact: 0.16.1 parse-png: ^2.1.0 @@ -1561,22 +1532,21 @@ __metadata: semver: ^7.6.0 temp-dir: ~2.0.0 unique-string: ~2.0.0 - checksum: f6fe5efd518d84463d767a4fb8a920d8b70779c8d93ba07ef407e0f016452324e3da6cff8292d0e2b436facdaef0073b8d527881e73ff5ba0288b4c942cdb539 + checksum: 5f14acf05d78721c716dd8b8d735210d3515c11a45d571e28e2b6120ee7dce52db516ad64aed3b763d6b1526e45be675a8ac7fb380cc759ffe0bd3148384ee98 languageName: node linkType: hard -"@expo/json-file@npm:^9.0.0, @expo/json-file@npm:~9.0.0": - version: 9.0.0 - resolution: "@expo/json-file@npm:9.0.0" +"@expo/json-file@npm:^9.0.2, @expo/json-file@npm:^9.1.1, @expo/json-file@npm:~9.1.1": + version: 9.1.1 + resolution: "@expo/json-file@npm:9.1.1" dependencies: "@babel/code-frame": ~7.10.4 json5: ^2.2.3 - write-file-atomic: ^2.3.0 - checksum: 28a3db84a8a90eae901df14519f12d075dfd3ecd1502b07bc7c76b6c5445da0983c8d04651d71e2688722e915b56ab785a7372e23cc8e046e92f795fd36eb9d9 + checksum: fb28fd21313149fb33491e4de1b7cb2e5d73f2df5ba968288a9a59039dfbe0d16b777564f319d712ce1797c019f69eded754b59d6884f562748afe4967243254 languageName: node linkType: hard -"@expo/json-file@npm:^9.0.2, @expo/json-file@npm:~9.0.2": +"@expo/json-file@npm:~9.0.2": version: 9.0.2 resolution: "@expo/json-file@npm:9.0.2" dependencies: @@ -1587,15 +1557,15 @@ __metadata: languageName: node linkType: hard -"@expo/metro-config@npm:0.19.11, @expo/metro-config@npm:~0.19.11": - version: 0.19.11 - resolution: "@expo/metro-config@npm:0.19.11" +"@expo/metro-config@npm:0.19.12, @expo/metro-config@npm:~0.19.12": + version: 0.19.12 + resolution: "@expo/metro-config@npm:0.19.12" dependencies: "@babel/core": ^7.20.0 "@babel/generator": ^7.20.5 "@babel/parser": ^7.20.0 "@babel/types": ^7.20.0 - "@expo/config": ~10.0.10 + "@expo/config": ~10.0.11 "@expo/env": ~0.4.2 "@expo/json-file": ~9.0.2 "@expo/spawn-async": ^1.7.2 @@ -1609,153 +1579,90 @@ __metadata: minimatch: ^3.0.4 postcss: ~8.4.32 resolve-from: ^5.0.0 - checksum: 3dc22f8cb388a310a9a65123ef25e18d916a375e77146747166af04e744af83d3b5f7f12d4cd4d53449e10c7ab7eeb9aa87de325827f1c4e25ff3a14bc3d8ffd - languageName: node - linkType: hard - -"@expo/metro-config@npm:0.19.8, @expo/metro-config@npm:~0.19.8": - version: 0.19.8 - resolution: "@expo/metro-config@npm:0.19.8" - dependencies: - "@babel/core": ^7.20.0 - "@babel/generator": ^7.20.5 - "@babel/parser": ^7.20.0 - "@babel/types": ^7.20.0 - "@expo/config": ~10.0.4 - "@expo/env": ~0.4.0 - "@expo/json-file": ~9.0.0 - "@expo/spawn-async": ^1.7.2 - chalk: ^4.1.0 - debug: ^4.3.2 - fs-extra: ^9.1.0 - getenv: ^1.0.0 - glob: ^10.4.2 - jsc-safe-url: ^0.2.4 - lightningcss: ~1.27.0 - minimatch: ^3.0.4 - postcss: ~8.4.32 - resolve-from: ^5.0.0 - checksum: 0146faee1c3be184315260b0d6bd263df17b05dbd042ae49744ca4571f2548bb22b1b67e54d21aaecd5c9232fbf5911f3c3e5eb6807433069422fab37ba0eef4 - languageName: node - linkType: hard - -"@expo/osascript@npm:^2.0.31": - version: 2.1.4 - resolution: "@expo/osascript@npm:2.1.4" - dependencies: - "@expo/spawn-async": ^1.7.2 - exec-async: ^2.2.0 - checksum: d1b757abc83c3e0a2ba8d851bf596e2bf6d3fdbc83010df8afbb0b5e9318a5347f5af394147fb709fe529d75fc3c9749156389bf61213e71d6cc87366c1a8df7 + checksum: 241934860fcf90575de47d67a6de5c701b51e16069a7007c15fac5addc04a66663e66800241aac63635761921829c2c6895217fd2bf6b8d95a00c2e1c664dfc3 languageName: node linkType: hard "@expo/osascript@npm:^2.1.6": - version: 2.1.6 - resolution: "@expo/osascript@npm:2.1.6" + version: 2.2.1 + resolution: "@expo/osascript@npm:2.2.1" dependencies: "@expo/spawn-async": ^1.7.2 exec-async: ^2.2.0 - checksum: 93883d448ac1c829377035369e7ab72133f0104553c31278185aba94605b25349f006e48a86e0a94794a35c26d42f64d7ee6128bb95319dd20af9e7b166210b1 - languageName: node - linkType: hard - -"@expo/package-manager@npm:^1.5.0": - version: 1.6.1 - resolution: "@expo/package-manager@npm:1.6.1" - dependencies: - "@expo/json-file": ^9.0.0 - "@expo/spawn-async": ^1.7.2 - ansi-regex: ^5.0.0 - chalk: ^4.0.0 - find-up: ^5.0.0 - js-yaml: ^3.13.1 - micromatch: ^4.0.8 - npm-package-arg: ^11.0.0 - ora: ^3.4.0 - resolve-workspace-root: ^2.0.0 - split: ^1.0.1 - sudo-prompt: 9.1.1 - checksum: 5271d9e1eb83d42b353c0412b422bf5bcf16181b32ad3d1f24291e9f111d4ac18d0bd120d7aae524f07880b020eaefd51ef7439cfdc8dd3c07add983ed38e32b + checksum: 810eddfbf9d01fbcf406647739786f5b401bf805eed0e770d1713d0226517b28eaf0fc4ea81e2c551ebb4b7c00363fb623275794b7f6e255e7343b0168f9f932 languageName: node linkType: hard "@expo/package-manager@npm:^1.7.2": - version: 1.7.2 - resolution: "@expo/package-manager@npm:1.7.2" + version: 1.8.1 + resolution: "@expo/package-manager@npm:1.8.1" dependencies: - "@expo/json-file": ^9.0.2 + "@expo/json-file": ^9.1.1 "@expo/spawn-async": ^1.7.2 - ansi-regex: ^5.0.0 chalk: ^4.0.0 - find-up: ^5.0.0 - js-yaml: ^3.13.1 - micromatch: ^4.0.8 npm-package-arg: ^11.0.0 ora: ^3.4.0 resolve-workspace-root: ^2.0.0 - split: ^1.0.1 - sudo-prompt: 9.1.1 - checksum: cbf95b5ea1bc4dfde02631d945b36f46540066acb44f6205873c559e0ebd8d5b6bf21e3fc46f5cbd5f06ea65d29708bf8bdb53d2e820a6e6134fcb535447f6d7 + checksum: 8cc215fb9fcddfad4d3be2354908152089db1b1a792cd27cb13b88bdc36257300781ba24e4a36c723c69d1cf8ac450d2b1e702fa03ba6713b51ffad723575210 languageName: node linkType: hard -"@expo/plist@npm:^0.2.0": - version: 0.2.0 - resolution: "@expo/plist@npm:0.2.0" +"@expo/plist@npm:^0.2.2": + version: 0.2.2 + resolution: "@expo/plist@npm:0.2.2" dependencies: "@xmldom/xmldom": ~0.7.7 base64-js: ^1.2.3 xmlbuilder: ^14.0.0 - checksum: f2714a33789451d97d7d4d3699ef0d687cc5c734aedce844f568165f12671aeeb26044eb6cf6fd8ec0cc4da76069019fc510286bd52daa5b509d82e7ce6beb9f + checksum: ccc8256f07352e327092132d885c3e2291f14b3ef6060065eb11080f130a575012cfff7ae92c579b5e04cc6b2587930caed70e277c2f1f5b63591e39366e659a languageName: node linkType: hard -"@expo/plist@npm:^0.2.2": - version: 0.2.2 - resolution: "@expo/plist@npm:0.2.2" +"@expo/plist@npm:^0.3.1": + version: 0.3.1 + resolution: "@expo/plist@npm:0.3.1" dependencies: - "@xmldom/xmldom": ~0.7.7 + "@xmldom/xmldom": ^0.8.8 base64-js: ^1.2.3 - xmlbuilder: ^14.0.0 - checksum: ccc8256f07352e327092132d885c3e2291f14b3ef6060065eb11080f130a575012cfff7ae92c579b5e04cc6b2587930caed70e277c2f1f5b63591e39366e659a + xmlbuilder: ^15.1.1 + checksum: d3797560d9bc44e60b92a6b48055a32514d09db3b4992fd915cffabd8eac5153adbd7892412f7429b9db606864f0b80aec15454c27ca99059793e3811b9f58eb languageName: node linkType: hard -"@expo/prebuild-config@npm:^8.0.23": - version: 8.0.23 - resolution: "@expo/prebuild-config@npm:8.0.23" +"@expo/prebuild-config@npm:^8.0.31": + version: 8.1.3 + resolution: "@expo/prebuild-config@npm:8.1.3" dependencies: - "@expo/config": ~10.0.4 - "@expo/config-plugins": ~9.0.10 - "@expo/config-types": ^52.0.0 - "@expo/image-utils": ^0.6.0 - "@expo/json-file": ^9.0.0 - "@react-native/normalize-colors": 0.76.5 + "@expo/config": ~11.0.1 + "@expo/config-plugins": ~9.1.2 + "@expo/config-types": ^53.0.0-preview.2 + "@expo/image-utils": ^0.7.1 + "@expo/json-file": ^9.1.1 + "@react-native/normalize-colors": 0.79.0 debug: ^4.3.1 - fs-extra: ^9.0.0 resolve-from: ^5.0.0 semver: ^7.6.0 xml2js: 0.6.0 - checksum: d48c00820f37d1ff4226e7ec94d3df6082f537345a10b39da27b8d345b2e861a76df7ed6c05695f897f086a713c460756401f474eec8741e01c84d3df4b30674 + checksum: 2b03451b31385556713da55d9b2dde60fd2ebd1185be0432e550a9fa9f7bf311e8e98fdf468df15a25a608e196e25840a58dc755661f65f44522e485ef33e30c languageName: node linkType: hard -"@expo/prebuild-config@npm:^8.0.28": - version: 8.0.28 - resolution: "@expo/prebuild-config@npm:8.0.28" +"@expo/prebuild-config@npm:~8.2.0": + version: 8.2.0 + resolution: "@expo/prebuild-config@npm:8.2.0" dependencies: - "@expo/config": ~10.0.10 - "@expo/config-plugins": ~9.0.15 - "@expo/config-types": ^52.0.4 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 "@expo/image-utils": ^0.6.5 "@expo/json-file": ^9.0.2 - "@react-native/normalize-colors": 0.76.7 + "@react-native/normalize-colors": 0.76.9 debug: ^4.3.1 fs-extra: ^9.0.0 resolve-from: ^5.0.0 semver: ^7.6.0 xml2js: 0.6.0 - checksum: 30592c1dd4c8d73fdb2badb5b37e8d5040723a9c06877152f364516363ffca5d2cf624b31b1f7748bcaaac766c6b1d51f557addd25e93175f743d77fcec8d67c + checksum: 5c9d194e63cc4ec9ba3076179832ce928208e09846981cccc6f07e70742b1d7a29bf7594788543578ced75a42fbc0d4a624c4bd7af73e755d220170090f0b2e5 languageName: node linkType: hard @@ -1790,19 +1697,28 @@ __metadata: languageName: node linkType: hard +"@expo/sudo-prompt@npm:^9.3.1": + version: 9.3.2 + resolution: "@expo/sudo-prompt@npm:9.3.2" + checksum: 5db5385d7ecaadee7ef768c56ed882ae1b266e4c390325f36967382edefaf6cc2e7845b12b35a91d3ad83b05868548acefe8a015aef3a47d91a2cfc5a0a3cc84 + languageName: node + linkType: hard + "@expo/vector-icons@npm:^14.0.0": - version: 14.0.4 - resolution: "@expo/vector-icons@npm:14.0.4" - dependencies: - prop-types: ^15.8.1 - checksum: 31bd5d4e4e2f0b0620b7e8b55b0c5691875cf57c5737bd0ccef0017d0e7abee66352f3d66a58997b719bd0720cccf8f5119503c69fe1a30398747306ebefeb6e + version: 14.1.0 + resolution: "@expo/vector-icons@npm:14.1.0" + peerDependencies: + expo-font: "*" + react: "*" + react-native: "*" + checksum: 1704db7bc30cf0d8aa6b139bad5ec4fc4e6b3fc576e9bf37d6c40212f4c5c3160c54719f4ac3c3f2f2a59d7ff2a11f7cb23419b586e3bfb128e407943d7fbdfa languageName: node linkType: hard "@expo/ws-tunnel@npm:^1.0.1": - version: 1.0.5 - resolution: "@expo/ws-tunnel@npm:1.0.5" - checksum: 28779c2ef34902044122c7c47400a58f971eb3dc2a8b36cc6529660936890cec7fa28628285c4738e9607a215214417df512c13302747f90b00be49493a3de14 + version: 1.0.6 + resolution: "@expo/ws-tunnel@npm:1.0.6" + checksum: 0db9d5b94cfedfad7784cfd876bafbf9575d0cb00bb537f57954fa8fe6d7151f95b2fa0aa6071b7cc7ab49e3a68bdf647acbc323d7d6b23f07df21f97485ee4f languageName: node linkType: hard @@ -2055,173 +1971,38 @@ __metadata: "@npmcli/fs@npm:^4.0.0": version: 4.0.0 resolution: "@npmcli/fs@npm:4.0.0" - dependencies: - semver: ^7.3.5 - checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a - languageName: node - linkType: hard - -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f - languageName: node - linkType: hard - -"@react-native/assets-registry@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/assets-registry@npm:0.76.3" - checksum: 0a5c3d63eec8ce9e29be9e0cca6aa0bc62580b9820caf948fc44574be75e166b836caa1cd4b53550c880996b36389fb8f2b18652c3e6abeddecc9ca835cd9296 - languageName: node - linkType: hard - -"@react-native/assets-registry@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/assets-registry@npm:0.76.7" - checksum: f197582ad2e2964f5a6afa5a8945b368b7a6fe05cd9fac78e4832ad969cd8b5ad72e048f0c652ce5b4dd1ed7bf28e36254e49d3b7317b16d4481600482259048 - languageName: node - linkType: hard - -"@react-native/babel-plugin-codegen@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/babel-plugin-codegen@npm:0.76.3" - dependencies: - "@react-native/codegen": 0.76.3 - checksum: db24d3d7f89d1aca30fd1a5050deb86982aba54c7df5ac5dc73bcae4ba07275a08af92db1ae383e44366ba206f941333d2a972672db8a57cbd825f4bacea5c0c - languageName: node - linkType: hard - -"@react-native/babel-plugin-codegen@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/babel-plugin-codegen@npm:0.76.5" - dependencies: - "@react-native/codegen": 0.76.5 - checksum: 2bcc678a2122af7c172e4966209bc14a93bcf6067f6bf422c139d192db87e68f8b7dcb6b2ac39f5d4dcfb66b79ea1d528930554427fdfe5b1053025eb3d564ac - languageName: node - linkType: hard - -"@react-native/babel-plugin-codegen@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/babel-plugin-codegen@npm:0.76.7" - dependencies: - "@react-native/codegen": 0.76.7 - checksum: d19f45cc0d3f1de0cbe9fe4b3623d008284957829d7d471adf6c881f2450a3f40ecc152361185a076403419f19f53094f12624915d41fa79a9f214afdaf85e60 - languageName: node - linkType: hard - -"@react-native/babel-preset@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/babel-preset@npm:0.76.3" - dependencies: - "@babel/core": ^7.25.2 - "@babel/plugin-proposal-export-default-from": ^7.24.7 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-syntax-export-default-from": ^7.24.7 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-transform-arrow-functions": ^7.24.7 - "@babel/plugin-transform-async-generator-functions": ^7.25.4 - "@babel/plugin-transform-async-to-generator": ^7.24.7 - "@babel/plugin-transform-block-scoping": ^7.25.0 - "@babel/plugin-transform-class-properties": ^7.25.4 - "@babel/plugin-transform-classes": ^7.25.4 - "@babel/plugin-transform-computed-properties": ^7.24.7 - "@babel/plugin-transform-destructuring": ^7.24.8 - "@babel/plugin-transform-flow-strip-types": ^7.25.2 - "@babel/plugin-transform-for-of": ^7.24.7 - "@babel/plugin-transform-function-name": ^7.25.1 - "@babel/plugin-transform-literals": ^7.25.2 - "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 - "@babel/plugin-transform-modules-commonjs": ^7.24.8 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 - "@babel/plugin-transform-numeric-separator": ^7.24.7 - "@babel/plugin-transform-object-rest-spread": ^7.24.7 - "@babel/plugin-transform-optional-catch-binding": ^7.24.7 - "@babel/plugin-transform-optional-chaining": ^7.24.8 - "@babel/plugin-transform-parameters": ^7.24.7 - "@babel/plugin-transform-private-methods": ^7.24.7 - "@babel/plugin-transform-private-property-in-object": ^7.24.7 - "@babel/plugin-transform-react-display-name": ^7.24.7 - "@babel/plugin-transform-react-jsx": ^7.25.2 - "@babel/plugin-transform-react-jsx-self": ^7.24.7 - "@babel/plugin-transform-react-jsx-source": ^7.24.7 - "@babel/plugin-transform-regenerator": ^7.24.7 - "@babel/plugin-transform-runtime": ^7.24.7 - "@babel/plugin-transform-shorthand-properties": ^7.24.7 - "@babel/plugin-transform-spread": ^7.24.7 - "@babel/plugin-transform-sticky-regex": ^7.24.7 - "@babel/plugin-transform-typescript": ^7.25.2 - "@babel/plugin-transform-unicode-regex": ^7.24.7 - "@babel/template": ^7.25.0 - "@react-native/babel-plugin-codegen": 0.76.3 - babel-plugin-syntax-hermes-parser: ^0.25.1 - babel-plugin-transform-flow-enums: ^0.0.2 - react-refresh: ^0.14.0 - peerDependencies: - "@babel/core": "*" - checksum: 012476667ad1596a0ae45b0b0d0404af724766aa170b22a80f56c4302060e2f5b90bef24a41aef2dd12cbe672a31b8c5c13f72b974cfaad004aef452ac17995c - languageName: node - linkType: hard - -"@react-native/babel-preset@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/babel-preset@npm:0.76.5" - dependencies: - "@babel/core": ^7.25.2 - "@babel/plugin-proposal-export-default-from": ^7.24.7 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-syntax-export-default-from": ^7.24.7 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-transform-arrow-functions": ^7.24.7 - "@babel/plugin-transform-async-generator-functions": ^7.25.4 - "@babel/plugin-transform-async-to-generator": ^7.24.7 - "@babel/plugin-transform-block-scoping": ^7.25.0 - "@babel/plugin-transform-class-properties": ^7.25.4 - "@babel/plugin-transform-classes": ^7.25.4 - "@babel/plugin-transform-computed-properties": ^7.24.7 - "@babel/plugin-transform-destructuring": ^7.24.8 - "@babel/plugin-transform-flow-strip-types": ^7.25.2 - "@babel/plugin-transform-for-of": ^7.24.7 - "@babel/plugin-transform-function-name": ^7.25.1 - "@babel/plugin-transform-literals": ^7.25.2 - "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 - "@babel/plugin-transform-modules-commonjs": ^7.24.8 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 - "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 - "@babel/plugin-transform-numeric-separator": ^7.24.7 - "@babel/plugin-transform-object-rest-spread": ^7.24.7 - "@babel/plugin-transform-optional-catch-binding": ^7.24.7 - "@babel/plugin-transform-optional-chaining": ^7.24.8 - "@babel/plugin-transform-parameters": ^7.24.7 - "@babel/plugin-transform-private-methods": ^7.24.7 - "@babel/plugin-transform-private-property-in-object": ^7.24.7 - "@babel/plugin-transform-react-display-name": ^7.24.7 - "@babel/plugin-transform-react-jsx": ^7.25.2 - "@babel/plugin-transform-react-jsx-self": ^7.24.7 - "@babel/plugin-transform-react-jsx-source": ^7.24.7 - "@babel/plugin-transform-regenerator": ^7.24.7 - "@babel/plugin-transform-runtime": ^7.24.7 - "@babel/plugin-transform-shorthand-properties": ^7.24.7 - "@babel/plugin-transform-spread": ^7.24.7 - "@babel/plugin-transform-sticky-regex": ^7.24.7 - "@babel/plugin-transform-typescript": ^7.25.2 - "@babel/plugin-transform-unicode-regex": ^7.24.7 - "@babel/template": ^7.25.0 - "@react-native/babel-plugin-codegen": 0.76.5 - babel-plugin-syntax-hermes-parser: ^0.25.1 - babel-plugin-transform-flow-enums: ^0.0.2 - react-refresh: ^0.14.0 - peerDependencies: - "@babel/core": "*" - checksum: 1e693e1ce051634bab055a147d7db1a4bb4368d09c98736bfdfe0a50a0d3fda9125ce10279e4da67a435d4f8a18995c111fe91e8bb66b6889ae0ef4184b70542 + dependencies: + semver: ^7.3.5 + checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@react-native/assets-registry@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/assets-registry@npm:0.76.9" + checksum: 07e7da7a20745b6bdea99620e50d69c76219b7232b21cc43982696123a330cebd9d24e1a4be2a61588ab3af5155557e651267dfad9c91ad0bc8e098e6e7ad38f + languageName: node + linkType: hard + +"@react-native/babel-plugin-codegen@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/babel-plugin-codegen@npm:0.76.9" + dependencies: + "@react-native/codegen": 0.76.9 + checksum: 13bba234a6c9e29fa4f7bf13a23ce8aecc5fc00da6cef6f6dd0462f82cdfeeeca62842c054ffe626662a92326774bf22723a90be5ac2158990386422ceee96c5 languageName: node linkType: hard -"@react-native/babel-preset@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/babel-preset@npm:0.76.7" +"@react-native/babel-preset@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/babel-preset@npm:0.76.9" dependencies: "@babel/core": ^7.25.2 "@babel/plugin-proposal-export-default-from": ^7.24.7 @@ -2264,55 +2045,19 @@ __metadata: "@babel/plugin-transform-typescript": ^7.25.2 "@babel/plugin-transform-unicode-regex": ^7.24.7 "@babel/template": ^7.25.0 - "@react-native/babel-plugin-codegen": 0.76.7 + "@react-native/babel-plugin-codegen": 0.76.9 babel-plugin-syntax-hermes-parser: ^0.25.1 babel-plugin-transform-flow-enums: ^0.0.2 react-refresh: ^0.14.0 peerDependencies: "@babel/core": "*" - checksum: 29b48f80d32839d03f17d938e3f2b34f213d6ac3155de9556016132d4e3b9d55ce2b3d18fcd596ba6507f6bbe64174a76c5e94cc3737b39f00467c455de6b2d4 - languageName: node - linkType: hard - -"@react-native/codegen@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/codegen@npm:0.76.3" - dependencies: - "@babel/parser": ^7.25.3 - glob: ^7.1.1 - hermes-parser: 0.23.1 - invariant: ^2.2.4 - jscodeshift: ^0.14.0 - mkdirp: ^0.5.1 - nullthrows: ^1.1.1 - yargs: ^17.6.2 - peerDependencies: - "@babel/preset-env": ^7.1.6 - checksum: 5e9677695dcddabcd045ee448472cdecb13d6db216d021a21e29830487cfaef790ff6c1e59de06a7d70d18cc816dcd939c2cbbfa5c58b78b27d04f3cbacbc5ac - languageName: node - linkType: hard - -"@react-native/codegen@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/codegen@npm:0.76.5" - dependencies: - "@babel/parser": ^7.25.3 - glob: ^7.1.1 - hermes-parser: 0.23.1 - invariant: ^2.2.4 - jscodeshift: ^0.14.0 - mkdirp: ^0.5.1 - nullthrows: ^1.1.1 - yargs: ^17.6.2 - peerDependencies: - "@babel/preset-env": ^7.1.6 - checksum: 8d12b96ee0e895a0aa599a1bae4e854d0acb2e4ee5c5e1acf291adcf262a2aca77494c63f9ca6470e9950987ae3d5d83881dbe91caaf69563ea4dd69d08ecaeb + checksum: b48ac1195d4b52a14134f3dbfa26771aa66db0b787ebced6153d7c60802f1b959a3cf07b873da1b085e7db9b527507d1111302bb177ad52d7c77d635b6f3805b languageName: node linkType: hard -"@react-native/codegen@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/codegen@npm:0.76.7" +"@react-native/codegen@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/codegen@npm:0.76.9" dependencies: "@babel/parser": ^7.25.3 glob: ^7.1.1 @@ -2324,40 +2069,16 @@ __metadata: yargs: ^17.6.2 peerDependencies: "@babel/preset-env": ^7.1.6 - checksum: f5f332c334b0bae892c7f3986c87f20c052b2b1ca9fc927fc91db012e1f062d8feaa01dc2e09d64454ce4e36dc0571d73ae3cb3a2d2aeba485ddc0c3d0e80aa1 - languageName: node - linkType: hard - -"@react-native/community-cli-plugin@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/community-cli-plugin@npm:0.76.3" - dependencies: - "@react-native/dev-middleware": 0.76.3 - "@react-native/metro-babel-transformer": 0.76.3 - chalk: ^4.0.0 - execa: ^5.1.1 - invariant: ^2.2.4 - metro: ^0.81.0 - metro-config: ^0.81.0 - metro-core: ^0.81.0 - node-fetch: ^2.2.0 - readline: ^1.3.0 - semver: ^7.1.3 - peerDependencies: - "@react-native-community/cli-server-api": "*" - peerDependenciesMeta: - "@react-native-community/cli-server-api": - optional: true - checksum: 7d3c76ac702f97a8d75ad1d8e0cedfef7061ed25ed26dde7d39214a26a42b8c594bc8ba9d1cfa8e83fae0069828340b207c771677431619bd1039aa99d9d8032 + checksum: fcb26bd5be6f923eafd05e356ab01c9bbd30cab5e950bb050312a651771bcb2cb8484a3ba511e1460d44f508700565b0b69d43039c8cc61e63b9eacca6b9c756 languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/community-cli-plugin@npm:0.76.7" +"@react-native/community-cli-plugin@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/community-cli-plugin@npm:0.76.9" dependencies: - "@react-native/dev-middleware": 0.76.7 - "@react-native/metro-babel-transformer": 0.76.7 + "@react-native/dev-middleware": 0.76.9 + "@react-native/metro-babel-transformer": 0.76.9 chalk: ^4.0.0 execa: ^5.1.1 invariant: ^2.2.4 @@ -2368,79 +2089,27 @@ __metadata: readline: ^1.3.0 semver: ^7.1.3 peerDependencies: - "@react-native-community/cli-server-api": "*" + "@react-native-community/cli": "*" peerDependenciesMeta: - "@react-native-community/cli-server-api": + "@react-native-community/cli": optional: true - checksum: e6bfaf10dc941388b4342335ba3058728cd48b11315bd419012540ca5a3b5f1141fa42b61eff8271ccbe127d33a4f2b4de5956c9d2225fc1dff27e9846592670 - languageName: node - linkType: hard - -"@react-native/debugger-frontend@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/debugger-frontend@npm:0.76.3" - checksum: 549fea784b9e03a0e4bb05befea92af096705595e34fa6540873b1f00641ceaac3dafaeda212dd80d049f82d0929852c7fb1870bd823158ad780a5c2edfdcf0a + checksum: 1c0c054d20b3b4c978928e80aa5e56cadeb8dfc1c80a374f67a23e80e2acac0fff5aea0b3f6413483f1ba2bad6a65749e8105dd0ebf2dcd6b045f88e3d7c8d24 languageName: node linkType: hard -"@react-native/debugger-frontend@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/debugger-frontend@npm:0.76.5" - checksum: 4f8529ea55f9f1668feb6ff764bcd3917fd38f53fc3b79ec2790b5a741d6746a9534922f22f5366720cea2b78d344c15d43c0439d94cb39970ccae5d1fd24a82 +"@react-native/debugger-frontend@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/debugger-frontend@npm:0.76.9" + checksum: c537ae5be75bb9a0a549d88b6545762364d87a1166c8a7339ccd774257096a2c62f83efdd86c78553a3f1c4ef35cfa7708aba477bf6eeb76b7814ceab2b98069 languageName: node linkType: hard -"@react-native/debugger-frontend@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/debugger-frontend@npm:0.76.7" - checksum: 3ef73a8e5f281d73b17f2b5834d803665506726a77e660a610b0b6511aedf26c82e92fdcf782e1d214c79b70432323f8116f11977f81ed3969c2af9f68f5c903 - languageName: node - linkType: hard - -"@react-native/dev-middleware@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/dev-middleware@npm:0.76.3" - dependencies: - "@isaacs/ttlcache": ^1.4.1 - "@react-native/debugger-frontend": 0.76.3 - chrome-launcher: ^0.15.2 - chromium-edge-launcher: ^0.2.0 - connect: ^3.6.5 - debug: ^2.2.0 - nullthrows: ^1.1.1 - open: ^7.0.3 - selfsigned: ^2.4.1 - serve-static: ^1.13.1 - ws: ^6.2.3 - checksum: 77acfecd6b59594d892afb63efcc54474a38278f233db6163bdf66329603bdb485dc304e0c9a58c5c19c1d7397cfb6b76f08bd5f136d130052db9d73ae6b74b5 - languageName: node - linkType: hard - -"@react-native/dev-middleware@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/dev-middleware@npm:0.76.5" - dependencies: - "@isaacs/ttlcache": ^1.4.1 - "@react-native/debugger-frontend": 0.76.5 - chrome-launcher: ^0.15.2 - chromium-edge-launcher: ^0.2.0 - connect: ^3.6.5 - debug: ^2.2.0 - nullthrows: ^1.1.1 - open: ^7.0.3 - selfsigned: ^2.4.1 - serve-static: ^1.13.1 - ws: ^6.2.3 - checksum: cfd8fbf0d2482e7b1f1c4da5b9d8b388be1cc4ffcd0c097ae5f8df3d6594c8e0feaa7e331383467d70c6d63341478132761d551475d7cd46a3696465bdc01439 - languageName: node - linkType: hard - -"@react-native/dev-middleware@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/dev-middleware@npm:0.76.7" +"@react-native/dev-middleware@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/dev-middleware@npm:0.76.9" dependencies: "@isaacs/ttlcache": ^1.4.1 - "@react-native/debugger-frontend": 0.76.7 + "@react-native/debugger-frontend": 0.76.9 chrome-launcher: ^0.15.2 chromium-edge-launcher: ^0.2.0 connect: ^3.6.5 @@ -2451,140 +2120,67 @@ __metadata: selfsigned: ^2.4.1 serve-static: ^1.13.1 ws: ^6.2.3 - checksum: cc23a959299cd97e0960915a211ebe36a3c36161111bd8f627a5ab6c78a98ddbb893ac52313d6cd11b4c0c35324b8f2a0806676e255e2b0bf578e0aab71414a2 - languageName: node - linkType: hard - -"@react-native/gradle-plugin@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/gradle-plugin@npm:0.76.3" - checksum: 7bde3ae9cbf21f59adc5583cfe25d245ca2921f50d50361e763a59bb02398206c93e61c935a4605609de7e1fe49450594ff56b0b9ccecc07065dbe4c9e9217c6 - languageName: node - linkType: hard - -"@react-native/gradle-plugin@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/gradle-plugin@npm:0.76.7" - checksum: 4a0b1150a9338ade0fb75a036b63d681243ab93c19dea676ac02c59f7b16b28fafe8e2e6106ff0de33d0ad4a1ac358eb90fa9a2b6e9bbc55ffb449f1098329db - languageName: node - linkType: hard - -"@react-native/js-polyfills@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/js-polyfills@npm:0.76.3" - checksum: a33145ee39fe9de0e8b4b3a25cd263d775fe14ac3c4f77c4dc6a77a60c06febacdcefd7271c9aaa2a13336bada413601e3fa3de51eb7e44387b53055d99a1b69 + checksum: 1f7750ae0c4d4d7970a73cd4f8443004a93b91b998a003ddb965274eb718d2a70ff06d182903dcaeccf15d8d245f488a397ea8ae53f6ed5f25e4d476d844b90f languageName: node linkType: hard -"@react-native/js-polyfills@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/js-polyfills@npm:0.76.5" - checksum: 980ba02461a40f794dbc31ff2e0a00c7c209f3d4555fce4f9bef28de79a3336a1db9a46583b3c0d613d1cf3f3d2166f4386824de47857a6ead30c860f31542cb - languageName: node - linkType: hard - -"@react-native/js-polyfills@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/js-polyfills@npm:0.76.7" - checksum: 6dbf035366c6a22e8f868c2e1f69ea6340d8e975e0d9ae6db6c469a37f58bdcdceb355684b3af53d3e76d7d7ff0db56dd6a5be39c9e54d7973c3256b80f1170e - languageName: node - linkType: hard - -"@react-native/metro-babel-transformer@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/metro-babel-transformer@npm:0.76.3" - dependencies: - "@babel/core": ^7.25.2 - "@react-native/babel-preset": 0.76.3 - hermes-parser: 0.23.1 - nullthrows: ^1.1.1 - peerDependencies: - "@babel/core": "*" - checksum: 26be14f178dbfac8f8c75c8c2a87e582e274f4f8fc8f8860e804de042167238b80d8606a1357296240aa59085a9275e4be6797a80afdeed2cbcaa7cf7d8c1793 +"@react-native/gradle-plugin@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/gradle-plugin@npm:0.76.9" + checksum: afc6010cf278ed7dba58fb67cb789965edb6cfb3608e54b518232ef46b651f541915b7f6eae0b298457ccd8626213c687962ec250143e714de5e3bd2dc6dc210 languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/metro-babel-transformer@npm:0.76.5" - dependencies: - "@babel/core": ^7.25.2 - "@react-native/babel-preset": 0.76.5 - hermes-parser: 0.23.1 - nullthrows: ^1.1.1 - peerDependencies: - "@babel/core": "*" - checksum: 55d2391660b83b65afa9eeb6e301ae28d31251adbcd2536acb22b57c1e52620f7c094fcde3244842110da3df13ec04a8e5c00c0420d89354ab29e01f41da1350 +"@react-native/js-polyfills@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/js-polyfills@npm:0.76.9" + checksum: c49aac99f6973b102a9013632c204f02a57d96da500901bc6730ab96f56950d6924417e39c87be640a3a59b67e1af2583432361f55bf42c959aff02a285bcafc languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/metro-babel-transformer@npm:0.76.7" +"@react-native/metro-babel-transformer@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/metro-babel-transformer@npm:0.76.9" dependencies: "@babel/core": ^7.25.2 - "@react-native/babel-preset": 0.76.7 + "@react-native/babel-preset": 0.76.9 hermes-parser: 0.23.1 nullthrows: ^1.1.1 peerDependencies: "@babel/core": "*" - checksum: 26af0564de9bc6c734dd5a08699d74ccded819c7afc0841b4a04e415ed7c4d2ea6f51edb3df23e86da8bd7601db8df38daf16aa83363c2aafee4dd4faf65857d + checksum: cb38d150e30b3e07e2cb8e637e26b4dcb8b58d6accc95f51e507baea94bb970a0077573c319849a3e7d9bf976dadc39cf363bb505f53de1a209e1bb9ea0428f8 languageName: node linkType: hard "@react-native/metro-config@npm:^0.76.3": - version: 0.76.5 - resolution: "@react-native/metro-config@npm:0.76.5" + version: 0.76.9 + resolution: "@react-native/metro-config@npm:0.76.9" dependencies: - "@react-native/js-polyfills": 0.76.5 - "@react-native/metro-babel-transformer": 0.76.5 + "@react-native/js-polyfills": 0.76.9 + "@react-native/metro-babel-transformer": 0.76.9 metro-config: ^0.81.0 metro-runtime: ^0.81.0 - checksum: afdd47fe403d30bf29961e4e3271f16cbd2170150d6c516aeb6018846f6d1bd71e1eca0a7548c90b9ce847c7a7a256971b96b172edc4840a8cb5dd1226bb6d43 - languageName: node - linkType: hard - -"@react-native/normalize-colors@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/normalize-colors@npm:0.76.3" - checksum: 71ce0cbaa52fc87552b0ad83dd3ebd0a76253b7aacdc82ead09a0ada6349457b9927ed10452cb63b89fc18d793852eafaec18f2c79603dbf9dcadb676b2db477 - languageName: node - linkType: hard - -"@react-native/normalize-colors@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/normalize-colors@npm:0.76.5" - checksum: 88758b7cbed118c520ab1d5ebad37198527aa98b503fe003d956059fff9171c22e248a1b227ab87a02be574080271900e03ac71fdc3f1233c3ca4e5a6c6746b7 + checksum: c52dd64967e6ead75d735702def2e29767f56321d888eae48b683e65118852c567c066755fa0f18c554773a8a0cb44493b436f516bf2c96bb6625f86e7439fec languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/normalize-colors@npm:0.76.7" - checksum: 4840d1f3852d908520aa77733dae07bd7bcfaa393e0245ea74716246d626785a6abe3add9c4975cbdabc45f5eaf56bbb133fd63e471b48e975a07ca5c346c9bb +"@react-native/normalize-colors@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/normalize-colors@npm:0.76.9" + checksum: 4fddb977b8aad2e848cb698f13b9ffec539668e8ae891846327d5e23ce3de13dea59a2dfbea8a154ea034791c7abc3f7d1d4c8caae2114f7a683c78b221aed36 languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/virtualized-lists@npm:0.76.3" - dependencies: - invariant: ^2.2.4 - nullthrows: ^1.1.1 - peerDependencies: - "@types/react": ^18.2.6 - react: "*" - react-native: "*" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: b84df110406651a025b9d798cb4511bc7c6db37b44ec885c92bbbc9a220bdd77837a13116d54fe59c16d35ffff013e3c87c28ffa870eb9b9f840d779cef68f90 +"@react-native/normalize-colors@npm:0.79.0": + version: 0.79.0 + resolution: "@react-native/normalize-colors@npm:0.79.0" + checksum: dc0ded31a7d39ae8a991cfe06a20082fba17c32174b9f6c6c07f9c7475cecf12d4f2b5fa0eaf3e1432e86e395c174384abc94bfc67ec6819c538599b8b6170b9 languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/virtualized-lists@npm:0.76.7" +"@react-native/virtualized-lists@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/virtualized-lists@npm:0.76.9" dependencies: invariant: ^2.2.4 nullthrows: ^1.1.1 @@ -2595,7 +2191,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: a25311d70a3ebb6fddd0e5257c9be3f24e7e67e0a86ed17864ff93cfb77d849a952996a613473bc9a6851e0eac16a1d45ac71a3a43719226851e4910907d726f + checksum: 697a04bdf4b5f430164bf666bf60cd0207f4d3fb06b0a62d7c39b54c166973b29c73640e5c1a44f1c6891d93398bedd63eb8addcbe78641d7ebb13b9ab022052 languageName: node linkType: hard @@ -2609,6 +2205,27 @@ __metadata: languageName: node linkType: hard +"@shopify/react-native-skia@npm:1.5.0": + version: 1.5.0 + resolution: "@shopify/react-native-skia@npm:1.5.0" + dependencies: + canvaskit-wasm: 0.39.1 + react-reconciler: 0.27.0 + peerDependencies: + react: ">=18.0" + react-native: ">=0.64" + react-native-reanimated: ">=2.0.0" + peerDependenciesMeta: + react-native: + optional: true + react-native-reanimated: + optional: true + bin: + setup-skia-web: ./scripts/setup-canvaskit.js + checksum: 44cf9edcf1f1062f7306eb990da8b8c9222b92275268fbaaf20e36baa21260b0498ac69131f4f6e871c9049a7cc36a5cc719d0b7a4f60723f6a7a60be3cc0bf5 + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -2795,11 +2412,11 @@ __metadata: linkType: hard "@types/babel__generator@npm:*": - version: 7.6.8 - resolution: "@types/babel__generator@npm:7.6.8" + version: 7.27.0 + resolution: "@types/babel__generator@npm:7.27.0" dependencies: "@babel/types": ^7.0.0 - checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 + checksum: e6739cacfa276c1ad38e1d8a6b4b1f816c2c11564e27f558b68151728489aaf0f4366992107ee4ed7615dfa303f6976dedcdce93df2b247116d1bcd1607ee260 languageName: node linkType: hard @@ -2814,11 +2431,11 @@ __metadata: linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.20.6 - resolution: "@types/babel__traverse@npm:7.20.6" + version: 7.20.7 + resolution: "@types/babel__traverse@npm:7.20.7" dependencies: "@babel/types": ^7.20.7 - checksum: 2bdc65eb62232c2d5c1086adeb0c31e7980e6fd7e50a3483b4a724a1a1029c84d9cb59749cf8de612f9afa2bc14c85b8f50e64e21f8a4398fa77eb9059a4283c + checksum: 2a2e5ad29c34a8b776162b0fe81c9ccb6459b2b46bf230f756ba0276a0258fcae1cbcfdccbb93a1e8b1df44f4939784ee8a1a269f95afe0c78b24b9cb6d50dd1 languageName: node linkType: hard @@ -2866,11 +2483,11 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 22.10.2 - resolution: "@types/node@npm:22.10.2" + version: 22.14.1 + resolution: "@types/node@npm:22.14.1" dependencies: - undici-types: ~6.20.0 - checksum: b22401e6e7d1484e437d802c72f5560e18100b1257b9ad0574d6fe05bebe4dbcb620ea68627d1f1406775070d29ace8b6b51f57e7b1c7b8bafafe6da7f29c843 + undici-types: ~6.21.0 + checksum: e22363f40ac8290da2bb5261c2b348241fd93b000908cefd3c56575df9d4f6b8d102fc8631275eac7ec4a9e0ac4f38f01c9d8104ebbda76c936aef96fd1e55f3 languageName: node linkType: hard @@ -2882,12 +2499,12 @@ __metadata: linkType: hard "@types/react@npm:~18.3.12": - version: 18.3.17 - resolution: "@types/react@npm:18.3.17" + version: 18.3.20 + resolution: "@types/react@npm:18.3.20" dependencies: "@types/prop-types": "*" csstype: ^3.0.2 - checksum: 8107f6f5cc8706a3814e6c927e135ce0c7b40a6d9ae2b8dfb071fee03c6f714456041ecdf92dece599da0db8be7f56f6dc6353d4701f47a04772c7ec0cbb0b59 + checksum: a93a4eec87c671ad9d68eaedaa2aa3688926409802939d2b291800cf926c771eb505a18721174364217ae9e1e8b89d09c1519f06ba1f168271de9f4c832710ea languageName: node linkType: hard @@ -2914,25 +2531,32 @@ __metadata: languageName: node linkType: hard -"@urql/core@npm:^5.0.0, @urql/core@npm:^5.0.6": - version: 5.1.0 - resolution: "@urql/core@npm:5.1.0" +"@urql/core@npm:^5.0.6, @urql/core@npm:^5.1.1": + version: 5.1.1 + resolution: "@urql/core@npm:5.1.1" dependencies: "@0no-co/graphql.web": ^1.0.5 wonka: ^6.3.2 - checksum: 63b8c1f25a5e3a50d84aeae63141e06ee8913c3a53d936fcb8453108034e50938fc774da298f50358ec2f3825bd62b2a3e4754ab1c9107dd9a79cb0c9c0d2a12 + checksum: c28736706abe5d0a0172bcde1c80807aba44606041347beba8e73d5237598034301cccad0169c4f63ba08f5bffe7b3a3ad95ee4a53a0d719ad5525f44b84dbcc languageName: node linkType: hard "@urql/exchange-retry@npm:^1.3.0": - version: 1.3.0 - resolution: "@urql/exchange-retry@npm:1.3.0" + version: 1.3.1 + resolution: "@urql/exchange-retry@npm:1.3.1" dependencies: - "@urql/core": ^5.0.0 + "@urql/core": ^5.1.1 wonka: ^6.3.2 peerDependencies: "@urql/core": ^5.0.0 - checksum: a4da1866406b2244bd28ecd01881aded10d1da7728792d6d9e9c9e718080afd41a3a8694e87c59002ab2ffc823a52662e933a3ef9e7102fd3b2c4f008615ab14 + checksum: c03c81900bdbd11211ce02e97ca4e8d1b36f08a3ad6fee9e9b23a60a59c9ff266500e2723b21a60d29927c0ba8cf5dec59600d2f615f6918ac50e10100d7e543 + languageName: node + linkType: hard + +"@webgpu/types@npm:0.1.21": + version: 0.1.21 + resolution: "@webgpu/types@npm:0.1.21" + checksum: b16ddc4d46a3c507a7f243f14b08b96ebbdb4495f9ea703441ad3525dd5e7e4a5f743f2879e51d74c78846f950e7d60c1349670f75cb7ca03ac3ddf51d46aabe languageName: node linkType: hard @@ -2950,10 +2574,10 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:^2.0.0": - version: 2.0.0 - resolution: "abbrev@npm:2.0.0" - checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: e70b209f5f408dd3a3bbd0eec4b10a2ffd64704a4a3821d0969d84928cc490a8eb60f85b78a95622c1841113edac10161c62e52f5e7d0027aa26786a8136e02e languageName: node linkType: hard @@ -2977,11 +2601,11 @@ __metadata: linkType: hard "acorn@npm:^8.8.2": - version: 8.14.0 - resolution: "acorn@npm:8.14.0" + version: 8.14.1 + resolution: "acorn@npm:8.14.1" bin: acorn: bin/acorn - checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4 + checksum: 260d9bb6017a1b6e42d31364687f0258f78eb20210b36ef2baad38fd619d78d4e95ff7dde9b3dbe0d81f137f79a8d651a845363a26e6985997f7b71145dc5e94 languageName: node linkType: hard @@ -3009,7 +2633,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": +"ansi-escapes@npm:^4.2.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -3088,13 +2712,6 @@ __metadata: languageName: node linkType: hard -"application-config-path@npm:^0.1.0": - version: 0.1.1 - resolution: "application-config-path@npm:0.1.1" - checksum: e478c1e4d515108de89693165d92dab11cfdc69dd0f3ccde034f14a3f4e50007946de9e4dd51cd77d2f7ba9752e75d8e4d937ef053a53e466425d9751c961a37 - languageName: node - linkType: hard - "arg@npm:^5.0.2": version: 5.0.2 resolution: "arg@npm:5.0.2" @@ -3214,38 +2831,38 @@ __metadata: linkType: hard "babel-plugin-polyfill-corejs2@npm:^0.4.10": - version: 0.4.12 - resolution: "babel-plugin-polyfill-corejs2@npm:0.4.12" + version: 0.4.13 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.13" dependencies: "@babel/compat-data": ^7.22.6 - "@babel/helper-define-polyfill-provider": ^0.6.3 + "@babel/helper-define-polyfill-provider": ^0.6.4 semver: ^6.3.1 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: 6e6e6a8b85fec80a310ded2f5c151385e4ac59118909dd6a952e1025e4a478eb79dda45a5a6322cc2e598fd696eb07d4e2fa52418b4101f3dc370bdf8c8939ba + checksum: 553b64eb11bad2cfc220e94f1fb2449755b5c7d54886dca6d8053b13b6e910f349a38bbc75aafd610f88217699db499548919bb5df653d635b9cdeb39d34a68d languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.10.6": - version: 0.10.6 - resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" +"babel-plugin-polyfill-corejs3@npm:^0.11.0": + version: 0.11.1 + resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1" dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.2 - core-js-compat: ^3.38.0 + "@babel/helper-define-polyfill-provider": ^0.6.3 + core-js-compat: ^3.40.0 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: f762f29f7acca576897c63149c850f0a72babd3fb9ea436a2e36f0c339161c4b912a77828541d8188ce8a91e50965c6687120cf36071eabb1b7aa92f279e2164 + checksum: ee39440475ef377a1570ccbc06b1a1d274cbfbbe2e7c3d4c60f38781a47f00a28bd10d8e23430828b965820c41beb2c93c84596baf72583a2c9c3fdfa4397994 languageName: node linkType: hard "babel-plugin-polyfill-regenerator@npm:^0.6.1": - version: 0.6.3 - resolution: "babel-plugin-polyfill-regenerator@npm:0.6.3" + version: 0.6.4 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.4" dependencies: - "@babel/helper-define-polyfill-provider": ^0.6.3 + "@babel/helper-define-polyfill-provider": ^0.6.4 peerDependencies: "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 - checksum: d12696e6b3f280eb78fac551619ca4389262db62c7352cd54bf679d830df8b35596eef2de77cf00db6648eada1c99d49c4f40636dbc9c335a1e5420cfef96750 + checksum: f4d4a803834ffa72713579d696586d8cc654c0025cbd5ec775fc5d37faa00381dcb80e5b97d4b16059443352653585596d87848b5590b1d8670c235408e73fb3 languageName: node linkType: hard @@ -3308,34 +2925,9 @@ __metadata: languageName: node linkType: hard -"babel-preset-expo@npm:~12.0.4": - version: 12.0.4 - resolution: "babel-preset-expo@npm:12.0.4" - dependencies: - "@babel/plugin-proposal-decorators": ^7.12.9 - "@babel/plugin-transform-export-namespace-from": ^7.22.11 - "@babel/plugin-transform-object-rest-spread": ^7.12.13 - "@babel/plugin-transform-parameters": ^7.22.15 - "@babel/preset-react": ^7.22.15 - "@babel/preset-typescript": ^7.23.0 - "@react-native/babel-preset": 0.76.5 - babel-plugin-react-native-web: ~0.19.13 - react-refresh: ^0.14.2 - peerDependencies: - babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 - react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 - peerDependenciesMeta: - babel-plugin-react-compiler: - optional: true - react-compiler-runtime: - optional: true - checksum: 1f5160789ef758c8a31a41f6f32f35cdd10fb88db8a6e8564fc30009ceb5b23428d182e6e3fbbb038e445f19af14ec5ea79d4a684de2ee66bf72eb2c66833e9c - languageName: node - linkType: hard - -"babel-preset-expo@npm:~12.0.9": - version: 12.0.9 - resolution: "babel-preset-expo@npm:12.0.9" +"babel-preset-expo@npm:~12.0.11": + version: 12.0.11 + resolution: "babel-preset-expo@npm:12.0.11" dependencies: "@babel/plugin-proposal-decorators": ^7.12.9 "@babel/plugin-transform-export-namespace-from": ^7.22.11 @@ -3343,7 +2935,7 @@ __metadata: "@babel/plugin-transform-parameters": ^7.22.15 "@babel/preset-react": ^7.22.15 "@babel/preset-typescript": ^7.23.0 - "@react-native/babel-preset": 0.76.7 + "@react-native/babel-preset": 0.76.9 babel-plugin-react-native-web: ~0.19.13 react-refresh: ^0.14.2 peerDependencies: @@ -3354,7 +2946,7 @@ __metadata: optional: true react-compiler-runtime: optional: true - checksum: b62149d7a45814528acd02281edfc5428efafab18beca5551ecfca838dce48004a5976c95c588219db113aa31c3470fe6761a068577e35dcc9ffbe1a90f8d2e9 + checksum: 8ff4437a5e3ea229c22ad2de645abc452f05fe55bc72b2586e4cfe675fcc6b3c83779c1a18343364d200b988cac5e60eed6e616a29eb1446e2294236f9f60d3f languageName: node linkType: hard @@ -3462,9 +3054,9 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.24.0, browserslist@npm:^4.24.2": - version: 4.24.3 - resolution: "browserslist@npm:4.24.3" +"browserslist@npm:^4.24.0, browserslist@npm:^4.24.4": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" dependencies: caniuse-lite: ^1.0.30001688 electron-to-chromium: ^1.5.73 @@ -3472,7 +3064,7 @@ __metadata: update-browserslist-db: ^1.1.1 bin: browserslist: cli.js - checksum: 016efc9953350e3a7212edcfdd72210cb33b339c1a974a77c0715eb67d23d7e5cd0a073ce1c801ab09235d8c213425ca51b92d41bbb829b833872b45f885fe7c + checksum: 64074bf6cf0a9ae3094d753270e3eae9cf925149db45d646f0bc67bacc2e46d7ded64a4e835b95f5fdcf0350f63a83c3755b32f80831f643a47f0886deb8a065 languageName: node linkType: hard @@ -3573,6 +3165,16 @@ __metadata: languageName: node linkType: hard +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b + languageName: node + linkType: hard + "caller-callsite@npm:^2.0.0": version: 2.0.0 resolution: "caller-callsite@npm:2.0.0" @@ -3620,9 +3222,18 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001688": - version: 1.0.30001689 - resolution: "caniuse-lite@npm:1.0.30001689" - checksum: 8d4152076517ac1dfd6d6733ecc8055f3cd3a8b679af8f5858e731312f03967f6a2184553636696e44cee39abdd9ccccc914716235791b0c25f68ef8dea4e24a + version: 1.0.30001713 + resolution: "caniuse-lite@npm:1.0.30001713" + checksum: 45fd9ae77965a694818d495671ba3e9a87e4eed063824b2244c0b83b1ab0ba2d8e71dcd45441f638caadf8f0c99e154a4326bbef5c291327090cdc38feeda6fd + languageName: node + linkType: hard + +"canvaskit-wasm@npm:0.39.1": + version: 0.39.1 + resolution: "canvaskit-wasm@npm:0.39.1" + dependencies: + "@webgpu/types": 0.1.21 + checksum: da62926fc81f424a781e148b4d76bb5fc9b0188f136090b3b287522dc653cb002bfb406e2eff45b55fcc1cafbc7629f988e20ad6c777bab85c1bb09e1091a5e2 languageName: node linkType: hard @@ -3803,13 +3414,6 @@ __metadata: languageName: node linkType: hard -"command-exists@npm:^1.2.4": - version: 1.2.9 - resolution: "command-exists@npm:1.2.9" - checksum: 729ae3d88a2058c93c58840f30341b7f82688a573019535d198b57a4d8cb0135ced0ad7f52b591e5b28a90feb2c675080ce916e56254a0f7c15cb2395277cac3 - languageName: node - linkType: hard - "commander@npm:^12.0.0": version: 12.1.0 resolution: "commander@npm:12.1.0" @@ -3862,8 +3466,8 @@ __metadata: linkType: hard "compression@npm:^1.7.4": - version: 1.7.5 - resolution: "compression@npm:1.7.5" + version: 1.8.0 + resolution: "compression@npm:1.8.0" dependencies: bytes: 3.1.2 compressible: ~2.0.18 @@ -3872,7 +3476,7 @@ __metadata: on-headers: ~1.0.2 safe-buffer: 5.2.1 vary: ~1.1.2 - checksum: d624b5562492518eee82c4f1381ea36f69f1f10b4283bfc2dcafd7d4d7eeed17c3f0e8f2951798594b7064db7ac5a6198df34816bde2d56bb7c75ce1570880e9 + checksum: 12ca3e326b4ccb6b6e51e1d14d96fafd058ddb3be08fe888487d367d42fb4f81f25d4bf77acc517ba724370e7d74469280688baf2da8cad61062bdf62eb9fd45 languageName: node linkType: hard @@ -3882,19 +3486,20 @@ __metadata: dependencies: "@babel/core": ^7.25.2 "@react-native/metro-config": ^0.76.3 + "@shopify/react-native-skia": 1.5.0 "@types/react": ~18.3.12 - expo: ~52.0.17 - expo-font: ^13.0.1 - expo-status-bar: ~2.0.0 + expo: ~52.0.46 + expo-font: ~13.0.4 + expo-status-bar: ~2.0.1 metro-config: ^0.81.0 react: 18.3.1 - react-native: 0.76.3 - react-native-executorch: ^0.3.0 + react-native: 0.76.9 + react-native-executorch: ^0.3.2 react-native-image-picker: ^7.2.2 react-native-loading-spinner-overlay: ^3.0.1 - react-native-reanimated: ^3.16.3 - react-native-safe-area-context: ^5.0.0 - react-native-svg: ^15.9.0 + react-native-reanimated: ~3.16.1 + react-native-safe-area-context: 4.12.0 + react-native-svg: 15.8.0 react-native-svg-transformer: ^1.5.0 react-native-wheel-scrollview-picker: ^2.0.6 typescript: ^5.3.3 @@ -3927,19 +3532,12 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.38.0": - version: 3.39.0 - resolution: "core-js-compat@npm:3.39.0" +"core-js-compat@npm:^3.40.0": + version: 3.41.0 + resolution: "core-js-compat@npm:3.41.0" dependencies: - browserslist: ^4.24.2 - checksum: 2d7d087c3271d711d03a55203d4756f6288317a1ce35cdc8bafaf1833ef21fd67a92a50cff8dcf7df1325ac63720906ab3cf514c85b238c95f65fca1040f6ad6 - languageName: node - linkType: hard - -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + browserslist: ^4.24.4 + checksum: 060f6d6ede3a5f201462ae6f54975ca4eefdb731c4983950c54bc81411fc1c2865a9e916091d034b5229d4dcb79e0f5f8aeda5eeb7a31d940550a5c14e8e8729 languageName: node linkType: hard @@ -3973,11 +3571,11 @@ __metadata: linkType: hard "cross-fetch@npm:^3.1.5": - version: 3.1.8 - resolution: "cross-fetch@npm:3.1.8" + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" dependencies: - node-fetch: ^2.6.12 - checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + node-fetch: ^2.7.0 + checksum: 8ded5ea35f705e81e569e7db244a3f96e05e95996ff51877c89b0c1ec1163c76bb5dad77d0f8fba6bb35a0abacb36403d7271dc586d8b1f636110ee7a8d959fd languageName: node linkType: hard @@ -3994,7 +3592,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": +"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -4178,13 +3776,6 @@ __metadata: languageName: node linkType: hard -"denodeify@npm:^1.2.1": - version: 1.2.1 - resolution: "denodeify@npm:1.2.1" - checksum: a85c8f7fce5626e311edd897c27ad571b29393c4a739dc29baee48328e09edd82364ff697272dd612462c67e48b4766389642b5bdfaea0dc114b7c6a276c0eae - languageName: node - linkType: hard - "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -4245,13 +3836,13 @@ __metadata: linkType: hard "domutils@npm:^3.0.1": - version: 3.1.0 - resolution: "domutils@npm:3.1.0" + version: 3.2.2 + resolution: "domutils@npm:3.2.2" dependencies: dom-serializer: ^2.0.0 domelementtype: ^2.3.0 domhandler: ^5.0.3 - checksum: e5757456ddd173caa411cfc02c2bb64133c65546d2c4081381a3bafc8a57411a41eed70494551aa58030be9e58574fcc489828bebd673863d39924fb4878f416 + checksum: ae941d56f03d857077d55dde9297e960a625229fc2b933187cc4123084d7c2d2517f58283a7336567127029f1e008449bac8ac8506d44341e29e3bb18e02f906 languageName: node linkType: hard @@ -4274,13 +3865,31 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": +"dotenv@npm:^16.4.5": + version: 16.5.0 + resolution: "dotenv@npm:16.5.0" + checksum: 6543fe87b5ddf2d60dd42df6616eec99148a5fc150cb4530fef5bda655db5204a3afa0e6f25f7cd64b20657ace4d79c0ef974bec32fdb462cad18754191e7a90 + languageName: node + linkType: hard + +"dotenv@npm:~16.4.5": version: 16.4.7 resolution: "dotenv@npm:16.4.7" checksum: c27419b5875a44addcc56cc69b7dc5b0e6587826ca85d5b355da9303c6fc317fc9989f1f18366a16378c9fdd9532d14117a1abe6029cc719cdbbef6eaef2cea4 languageName: node linkType: hard +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: ^1.0.1 + es-errors: ^1.3.0 + gopd: ^1.2.0 + checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -4296,9 +3905,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.73": - version: 1.5.74 - resolution: "electron-to-chromium@npm:1.5.74" - checksum: e93db5fdfafe927dcefe2ffef5b8670ae0c340eb8a4fe176918ec8efa53c37aff0ba4c3649c234950af2809d16a186ffead64dd921c9021d629658bf6d17c21f + version: 1.5.136 + resolution: "electron-to-chromium@npm:1.5.136" + checksum: 848e40a5f5b1de9dfbd82f3c29a696afa9a3d5372e6a83aef14ee5779e05f5cc055f7381f4bea46be5a991626683543c28fa1844e10e6d313bbe5d4680deef76 languageName: node linkType: hard @@ -4369,13 +3978,6 @@ __metadata: languageName: node linkType: hard -"eol@npm:^0.9.1": - version: 0.9.1 - resolution: "eol@npm:0.9.1" - checksum: ba9fa998bc8148b935dcf85585eacf049eeaf18d2ab6196710d4d1f59e7dfd0e87b18508dc67144ff8ba12f835a4a4989aeea64c98b13cca77b74b9d4b33bce5 - languageName: node - linkType: hard - "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -4401,6 +4003,41 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: ^1.3.0 + checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: ^1.3.0 + get-intrinsic: ^1.2.6 + has-tostringtag: ^1.0.2 + hasown: ^2.0.2 + checksum: 789f35de4be3dc8d11fdcb91bc26af4ae3e6d602caa93299a8c45cf05d36cc5081454ae2a6d3afa09cceca214b76c046e4f8151e092e6fc7feeb5efb9e794fc6 + languageName: node + linkType: hard + "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -4499,97 +4136,83 @@ __metadata: languageName: node linkType: hard -"expo-asset@npm:^11.0.3, expo-asset@npm:~11.0.4": - version: 11.0.4 - resolution: "expo-asset@npm:11.0.4" - dependencies: - "@expo/image-utils": ^0.6.5 - expo-constants: ~17.0.7 - invariant: ^2.2.4 - md5-file: ^3.2.3 - peerDependencies: - expo: "*" - react: "*" - react-native: "*" - checksum: 21cf9b34e4e51c5af2e424de2445c9d4d5d5e010692f712300f8a7f3c8b89ff39ad92dfb0f177557592a1d49c5480eba0257ff5770f25b4568831cf955853db5 - languageName: node - linkType: hard - -"expo-asset@npm:~11.0.1": - version: 11.0.1 - resolution: "expo-asset@npm:11.0.1" +"expo-asset@npm:^11.0.3": + version: 11.1.1 + resolution: "expo-asset@npm:11.1.1" dependencies: - "@expo/image-utils": ^0.6.0 - expo-constants: ~17.0.0 - invariant: ^2.2.4 - md5-file: ^3.2.3 + "@expo/image-utils": ^0.7.1 + expo-constants: ~17.1.1 peerDependencies: expo: "*" react: "*" react-native: "*" - checksum: 4ad7f64b270b845f2ff6bf738859726b10a90fe08b13e83d8c87defaf86cb9d69e018f73afbbcc7e85c7ea4110895d893184cdb60b2791b0debc2eda55ce003c + checksum: 7d416d49868110086d6b2b10fe594c1b02a1e53775adef9e2f6e0c8e66be5538c11a1db6d9b01b360a02d8fef5936f9fc1e7e91c7f585d6d4fe79df21e4493ef languageName: node linkType: hard -"expo-constants@npm:~17.0.0, expo-constants@npm:~17.0.3": - version: 17.0.3 - resolution: "expo-constants@npm:17.0.3" +"expo-asset@npm:~11.0.5": + version: 11.0.5 + resolution: "expo-asset@npm:11.0.5" dependencies: - "@expo/config": ~10.0.4 - "@expo/env": ~0.4.0 + "@expo/image-utils": ^0.6.5 + expo-constants: ~17.0.8 + invariant: ^2.2.4 + md5-file: ^3.2.3 peerDependencies: expo: "*" + react: "*" react-native: "*" - checksum: 96ef0469771f927dc4224a0ade609994c50638364335d56e9881506f56f5aea176b70e62bc5f5aedb5884b818e952ed76603d00ca6d9def21dc403c80ea2c297 + checksum: 7650dc032f76b0924eedaf24dee135b293e5c3258e0a9e43a6db7c93ef40ea6b6d6a47432bf80f3051f3b62e40a6ccb25e8acca820baa791d52a2e95432868bc languageName: node linkType: hard -"expo-constants@npm:~17.0.7": - version: 17.0.7 - resolution: "expo-constants@npm:17.0.7" +"expo-constants@npm:~17.0.8": + version: 17.0.8 + resolution: "expo-constants@npm:17.0.8" dependencies: - "@expo/config": ~10.0.10 + "@expo/config": ~10.0.11 "@expo/env": ~0.4.2 peerDependencies: expo: "*" react-native: "*" - checksum: 6b7d8536f7dd2a9531ccc1ee946a8cade67fa3a74e44d0bfb70f8098694e0e49a0d981d33760668d4d5475bf6bbf685024f9b2b9c19c9be47f17781aac53b28d + checksum: 493e18f8ea2c49efd69aae37b756ede1c37ecc29ac9bd5c23cb2ca88dbc57109c7f915196bcfaab71ceca2141e9a9806a685f8ac787fa206af7f1391be2e09f2 languageName: node linkType: hard -"expo-file-system@npm:^18.0.10, expo-file-system@npm:~18.0.11": - version: 18.0.11 - resolution: "expo-file-system@npm:18.0.11" +"expo-constants@npm:~17.1.1": + version: 17.1.1 + resolution: "expo-constants@npm:17.1.1" dependencies: - web-streams-polyfill: ^3.3.2 + "@expo/config": ~11.0.1 + "@expo/env": ~1.0.2 peerDependencies: expo: "*" react-native: "*" - checksum: 2cbb30eee9b12a3eff867a425900f6bef47d4417c39744c24ab1d47ef7398c9cb952716db8dd59a4ddc474a9dab4bcfa903412c10a56144d64cb00a9afcc8c56 + checksum: 96ee428e9e9d3af3440de4fee164f220f7d20cafbf3917b8c218eb71280474f88ae2b9cc567ec2b75f4d7e71eb3e09e767a5ccd965b126888fa5f7a3004df3ad languageName: node linkType: hard -"expo-file-system@npm:~18.0.6": - version: 18.0.6 - resolution: "expo-file-system@npm:18.0.6" +"expo-file-system@npm:^18.0.10": + version: 18.1.3 + resolution: "expo-file-system@npm:18.1.3" dependencies: web-streams-polyfill: ^3.3.2 peerDependencies: expo: "*" react-native: "*" - checksum: a0b515f7ad7e9f9c209d1923a01ba4f953e3154f28a96083099a9c20afb538b284b31d45ab30327498e0d8824109b121ca4d8a90cd8916f644e4bab07a1425b5 + checksum: 46f2e3e6ae6d08ca7c1fb64756883de0bc26fdea1ff88a70dec639d18cdb950d09b687abcfb5d1a39c72dc27dd99bada0e056e92226160dc618b283ab6bb3ccf languageName: node linkType: hard -"expo-font@npm:^13.0.1, expo-font@npm:~13.0.1": - version: 13.0.1 - resolution: "expo-font@npm:13.0.1" +"expo-file-system@npm:~18.0.12": + version: 18.0.12 + resolution: "expo-file-system@npm:18.0.12" dependencies: - fontfaceobserver: ^2.1.0 + web-streams-polyfill: ^3.3.2 peerDependencies: expo: "*" - react: "*" - checksum: 7f504cff563ae865d4138c0c5aa9f71a77d4edfbb3d9decde94691832bc7cb9fb9c27ddd64cfdfe81c63c4486102a79213ff8690c7b4c3973bd4e08e87f184cf + react-native: "*" + checksum: 9724e2a9da1cf596d82920cf3cec3d4d6e6544d3b057c7e5895d2aac6f2fc30d9f963774198254fcde707030974407b13a4da7558160fc2278fc388cb183d253 languageName: node linkType: hard @@ -4605,16 +4228,6 @@ __metadata: languageName: node linkType: hard -"expo-keep-awake@npm:~14.0.1": - version: 14.0.1 - resolution: "expo-keep-awake@npm:14.0.1" - peerDependencies: - expo: "*" - react: "*" - checksum: 67a099a1efce432b63890dcfb51f085bf02f2375590882fd8cf8a7d0251ff8512f52ab0d421b08613b67642d373dbee21420585246d25a427ec1776a1c4af485 - languageName: node - linkType: hard - "expo-keep-awake@npm:~14.0.3": version: 14.0.3 resolution: "expo-keep-awake@npm:14.0.3" @@ -4625,24 +4238,6 @@ __metadata: languageName: node linkType: hard -"expo-modules-autolinking@npm:2.0.4": - version: 2.0.4 - resolution: "expo-modules-autolinking@npm:2.0.4" - dependencies: - "@expo/spawn-async": ^1.7.2 - chalk: ^4.1.0 - commander: ^7.2.0 - fast-glob: ^3.2.5 - find-up: ^5.0.0 - fs-extra: ^9.1.0 - require-from-string: ^2.0.2 - resolve-from: ^5.0.0 - bin: - expo-modules-autolinking: bin/expo-modules-autolinking.js - checksum: 23a8279705e2a47e041a3809d28d4d5976f539c1b37298f525b69255fce0fc24279a677e96f769b2626765b684f0450c7e114ed325d1d4300454ad836177a7f7 - languageName: node - linkType: hard - "expo-modules-autolinking@npm:2.0.8": version: 2.0.8 resolution: "expo-modules-autolinking@npm:2.0.8" @@ -4661,53 +4256,44 @@ __metadata: languageName: node linkType: hard -"expo-modules-core@npm:2.1.2": - version: 2.1.2 - resolution: "expo-modules-core@npm:2.1.2" - dependencies: - invariant: ^2.2.4 - checksum: 2d9cc22127755a6fc8432bc928db8d76d702faadf86d74c2364f236ce1f410a2826eba485e6b6566005a3b273ca80f8fa501e06f626b0a4a7e2ef4ecf0bdb720 - languageName: node - linkType: hard - -"expo-modules-core@npm:2.2.2": - version: 2.2.2 - resolution: "expo-modules-core@npm:2.2.2" +"expo-modules-core@npm:2.2.3": + version: 2.2.3 + resolution: "expo-modules-core@npm:2.2.3" dependencies: invariant: ^2.2.4 - checksum: f6934b0519598a5c3f3b31a81d48e290823d714e371a2b8631d9ebcb6226a6e4b67968a1b4de6cdcfb6848f4abcb3eeaa1898ff10ebd79f5c21cd455b239cb22 + checksum: 7b2952f1220b55eb03f395d1549525edeb5bff7bf805257d9652ea4ef85ea71e34ad13b5971f1b559e7aa080f41130846b24cbe3d754660c08196c3ce899143b languageName: node linkType: hard -"expo-status-bar@npm:~2.0.0": - version: 2.0.0 - resolution: "expo-status-bar@npm:2.0.0" +"expo-status-bar@npm:~2.0.1": + version: 2.0.1 + resolution: "expo-status-bar@npm:2.0.1" peerDependencies: react: "*" react-native: "*" - checksum: a04dd216ab739919ea02637112e7554deba2a2c278a4ed6874aa7b89f34f4137a96a903db1d1fb0ad08ba736a2889ed24e56dd230bab803b0f818c630e83dc40 + checksum: 7e9c38c0e2a7a593958756572369fe515dc7bc7eb774eecbd2c008f994c420fa7196796c3ba32117bd801677b84b3335918c18e7e276981d49f1b7b8ebbbde95 languageName: node linkType: hard "expo@npm:^52.0.37": - version: 52.0.37 - resolution: "expo@npm:52.0.37" + version: 52.0.44 + resolution: "expo@npm:52.0.44" dependencies: "@babel/runtime": ^7.20.0 - "@expo/cli": 0.22.18 - "@expo/config": ~10.0.10 - "@expo/config-plugins": ~9.0.15 + "@expo/cli": 0.22.24 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 "@expo/fingerprint": 0.11.11 - "@expo/metro-config": 0.19.11 + "@expo/metro-config": 0.19.12 "@expo/vector-icons": ^14.0.0 - babel-preset-expo: ~12.0.9 - expo-asset: ~11.0.4 - expo-constants: ~17.0.7 - expo-file-system: ~18.0.11 + babel-preset-expo: ~12.0.11 + expo-asset: ~11.0.5 + expo-constants: ~17.0.8 + expo-file-system: ~18.0.12 expo-font: ~13.0.4 expo-keep-awake: ~14.0.3 expo-modules-autolinking: 2.0.8 - expo-modules-core: 2.2.2 + expo-modules-core: 2.2.3 fbemitter: ^3.0.0 web-streams-polyfill: ^3.3.2 whatwg-url-without-unicode: 8.0.0-3 @@ -4726,29 +4312,31 @@ __metadata: optional: true bin: expo: bin/cli - checksum: b1a93a1a642b735469077e87cac062626e49f7fdd326942e1514b56b95fcba29f442f04ad75f2cf781915254bdfd1facbf6367bd584a2636a4cbcc19980c3f28 + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: 971865f1cdbf8d445f8c1dd7284be50c712ca15f88532ee4818c827a48d98b8c0b38b3edf42d19888af5607cb1162d0d20b88e8d020b7d64ac5f0a0b13a701fa languageName: node linkType: hard -"expo@npm:~52.0.17": - version: 52.0.19 - resolution: "expo@npm:52.0.19" +"expo@npm:~52.0.46": + version: 52.0.46 + resolution: "expo@npm:52.0.46" dependencies: "@babel/runtime": ^7.20.0 - "@expo/cli": 0.22.6 - "@expo/config": ~10.0.6 - "@expo/config-plugins": ~9.0.12 - "@expo/fingerprint": 0.11.4 - "@expo/metro-config": 0.19.8 + "@expo/cli": 0.22.26 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/fingerprint": 0.11.11 + "@expo/metro-config": 0.19.12 "@expo/vector-icons": ^14.0.0 - babel-preset-expo: ~12.0.4 - expo-asset: ~11.0.1 - expo-constants: ~17.0.3 - expo-file-system: ~18.0.6 - expo-font: ~13.0.1 - expo-keep-awake: ~14.0.1 - expo-modules-autolinking: 2.0.4 - expo-modules-core: 2.1.2 + babel-preset-expo: ~12.0.11 + expo-asset: ~11.0.5 + expo-constants: ~17.0.8 + expo-file-system: ~18.0.12 + expo-font: ~13.0.4 + expo-keep-awake: ~14.0.3 + expo-modules-autolinking: 2.0.8 + expo-modules-core: 2.2.3 fbemitter: ^3.0.0 web-streams-polyfill: ^3.3.2 whatwg-url-without-unicode: 8.0.0-3 @@ -4767,27 +4355,29 @@ __metadata: optional: true bin: expo: bin/cli - checksum: b8620480ba92f7546b54d7ea1f6534aec2755f0aa42b2a1e7676be89dd31b37d5ad6830db76446e7283a28eb9169d6b56741a136bc071d0cb9258b0f32c07505 + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: 603b4fa89edf9c2aaf8741818bdd5ca46195a461093ecb2c1855164ba9799d2a590a1424f2e11ae7d97f2f8fe64928516a84b8c8ecfbe5a1dad09a5c0edca83e languageName: node linkType: hard "exponential-backoff@npm:^3.1.1": - version: 3.1.1 - resolution: "exponential-backoff@npm:3.1.1" - checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 7e191e3dd6edd8c56c88f2c8037c98fbb8034fe48778be53ed8cb30ccef371a061a4e999a469aab939b92f8f12698f3b426d52f4f76b7a20da5f9f98c3cbc862 languageName: node linkType: hard "fast-glob@npm:^3.2.5, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": - version: 3.3.2 - resolution: "fast-glob@npm:3.3.2" + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 + micromatch: ^4.0.8 + checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd languageName: node linkType: hard @@ -4799,11 +4389,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.17.1 - resolution: "fastq@npm:1.17.1" + version: 1.19.1 + resolution: "fastq@npm:1.19.1" dependencies: reusify: ^1.0.4 - checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 + checksum: 7691d1794fb84ad0ec2a185f10e00f0e1713b894e2c9c4d42f0bc0ba5f8c00e6e655a202074ca0b91b9c3d977aab7c30c41a8dc069fb5368576ac0054870a0e6 languageName: node linkType: hard @@ -4847,6 +4437,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.4.3": + version: 6.4.3 + resolution: "fdir@npm:6.4.3" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: fa53e13c63e8c14add5b70fd47e28267dd5481ebbba4b47720ec25aae7d10a800ef0f2e33de350faaf63c10b3d7b64138925718832220d593f75e724846c736d + languageName: node + linkType: hard + "fetch-retry@npm:^4.1.1": version: 4.1.1 resolution: "fetch-retry@npm:4.1.1" @@ -4926,9 +4528,9 @@ __metadata: linkType: hard "flow-parser@npm:0.*": - version: 0.256.0 - resolution: "flow-parser@npm:0.256.0" - checksum: 39e0052d6fc0b1c34bb34f61398035458f23089d54b143584b25116e4b4c80e03045b1216157a4dd8afb0e016f485e66640b8c788bd9611f2298491d8cb9512b + version: 0.267.0 + resolution: "flow-parser@npm:0.267.0" + checksum: dd705727b9cc0cf1689719b19518f049a6edc777df056fa387912c21e93eddcf035dbd28507d6bfc09a953abedc595a4c13516f73f7ef15af5bd5eaa9248e519 languageName: node linkType: hard @@ -4940,23 +4542,24 @@ __metadata: linkType: hard "foreground-child@npm:^3.1.0": - version: 3.3.0 - resolution: "foreground-child@npm:3.3.0" + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" dependencies: - cross-spawn: ^7.0.0 + cross-spawn: ^7.0.6 signal-exit: ^4.0.1 - checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451 + checksum: b2c1a6fc0bf0233d645d9fefdfa999abf37db1b33e5dab172b3cbfb0662b88bfbd2c9e7ab853533d199050ec6b65c03fcf078fc212d26e4990220e98c6930eef languageName: node linkType: hard "form-data@npm:^3.0.1": - version: 3.0.2 - resolution: "form-data@npm:3.0.2" + version: 3.0.3 + resolution: "form-data@npm:3.0.3" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: 25ffdeed693c8fc59b56082d15ad63f11688fabac2d14918fb339170020f66295e520a6659f3a698217f15c7924fbc593117ecd61d8391a146ea06d686793622 + es-set-tostringtag: ^2.1.0 + mime-types: ^2.1.35 + checksum: e79641abb58b3d7230816ed00645c2732cb64aa44172221644619238106556584aafd908bcc0d728fb06ef6a0d88261e72f4e01111bae3da6d2d7a429e4e1fd2 languageName: node linkType: hard @@ -5074,6 +4677,24 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.2.6": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: ^1.0.2 + es-define-property: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.1.1 + function-bind: ^1.1.2 + get-proto: ^1.0.1 + gopd: ^1.2.0 + has-symbols: ^1.1.0 + hasown: ^2.0.2 + math-intrinsics: ^1.1.0 + checksum: 301008e4482bb9a9cb49e132b88fee093bff373b4e6def8ba219b1e96b60158a6084f273ef5cafe832e42cd93462f4accb46a618d35fe59a2b507f2388c5b79d + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -5081,10 +4702,13 @@ __metadata: languageName: node linkType: hard -"get-port@npm:^3.2.0": - version: 3.2.0 - resolution: "get-port@npm:3.2.0" - checksum: 31f530326569683ac4b7452eb7573c40e9dbe52aec14d80745c35475261e6389160da153d5b8ae911150b4ce99003472b30c69ba5be0cedeaa7865b95542d168 +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: ^1.0.1 + es-object-atoms: ^1.0.0 + checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b languageName: node linkType: hard @@ -5120,7 +4744,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7, glob@npm:^10.4.2": +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.2": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -5171,6 +4795,13 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -5192,6 +4823,22 @@ __metadata: languageName: node linkType: hard +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + "hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -5208,13 +4855,6 @@ __metadata: languageName: node linkType: hard -"hermes-estree@npm:0.24.0": - version: 0.24.0 - resolution: "hermes-estree@npm:0.24.0" - checksum: 23d09013c824cd4628f6bae50c7a703cbafcc26ff1802cb35547fac41be4aac6e9892656bb6eb495e5c8c4b1287311dad8eab0f541ff8f1d2f0265b75053002e - languageName: node - linkType: hard - "hermes-estree@npm:0.25.1": version: 0.25.1 resolution: "hermes-estree@npm:0.25.1" @@ -5231,15 +4871,6 @@ __metadata: languageName: node linkType: hard -"hermes-parser@npm:0.24.0": - version: 0.24.0 - resolution: "hermes-parser@npm:0.24.0" - dependencies: - hermes-estree: 0.24.0 - checksum: c23cb81d320cedc74841c254ea54d94328f65aa6259375d48ab2b5a3ad2b528c55058726d852376811e4018636d8fd9305a4b2bfa5a962297c1baa57444be172 - languageName: node - linkType: hard - "hermes-parser@npm:0.25.1": version: 0.25.1 resolution: "hermes-parser@npm:0.25.1" @@ -5329,13 +4960,13 @@ __metadata: linkType: hard "image-size@npm:^1.0.2": - version: 1.1.1 - resolution: "image-size@npm:1.1.1" + version: 1.2.1 + resolution: "image-size@npm:1.2.1" dependencies: queue: 6.0.2 bin: image-size: bin/image-size.js - checksum: 23b3a515dded89e7f967d52b885b430d6a5a903da954fce703130bfb6069d738d80e6588efd29acfaf5b6933424a56535aa7bf06867e4ebd0250c2ee51f19a4a + checksum: 8601ddd4edc1db16f097f5cf585c23214e29c3b8f4d8a8f8d59b8e3bae2338c8a5073236bfff421d8541091a98a38b802ed049203c745286a69d1aac4e5bc4c7 languageName: node linkType: hard @@ -5350,12 +4981,12 @@ __metadata: linkType: hard "import-fresh@npm:^3.3.0": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + checksum: a06b19461b4879cc654d46f8a6244eb55eb053437afd4cbb6613cad6be203811849ed3e4ea038783092879487299fda24af932b86bdfff67c9055ba3612b8c87 languageName: node linkType: hard @@ -5455,11 +5086,11 @@ __metadata: linkType: hard "is-core-module@npm:^2.16.0": - version: 2.16.0 - resolution: "is-core-module@npm:2.16.0" + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" dependencies: hasown: ^2.0.2 - checksum: 98aa14eaee864c2e86fff4e08813e0da3ca7ac38dd0a43b9f10aeec48bfbc4827e2677349adb626f66921caef7fa9e2745c80b8b7cafe8ac24d46dc8124cc216 + checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 languageName: node linkType: hard @@ -5555,13 +5186,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:~1.0.0": - version: 1.0.0 - resolution: "isarray@npm:1.0.0" - checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -5709,7 +5333,7 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^29.6.3": +"jest-validate@npm:^29.7.0": version: 29.7.0 resolution: "jest-validate@npm:29.7.0" dependencies: @@ -5723,7 +5347,7 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.6.3, jest-worker@npm:^29.7.0": +"jest-worker@npm:^29.7.0": version: 29.7.0 resolution: "jest-worker@npm:29.7.0" dependencies: @@ -6087,13 +5711,6 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 - languageName: node - linkType: hard - "log-symbols@npm:^2.2.0": version: 2.2.0 resolution: "log-symbols@npm:2.2.0" @@ -6103,7 +5720,7 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -6178,9 +5795,16 @@ __metadata: linkType: hard "marky@npm:^1.2.2": - version: 1.2.5 - resolution: "marky@npm:1.2.5" - checksum: 823b946677749551cdfc3b5221685478b5d1b9cc0dc03eff977c6f9a615fb05c67559f9556cb3c0fcb941a9ea0e195e37befd83026443396ccee8b724f54f4c5 + version: 1.3.0 + resolution: "marky@npm:1.3.0" + checksum: c25fe1d45525e317f89d116e87a50d385cc7e7d0d418548e75334273cb97990db37228c365718b5572077c80f22a599c732ccbd3da9728cd806465d63c786eda + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2 languageName: node linkType: hard @@ -6248,155 +5872,148 @@ __metadata: languageName: node linkType: hard -"metro-babel-transformer@npm:0.81.0": - version: 0.81.0 - resolution: "metro-babel-transformer@npm:0.81.0" +"metro-babel-transformer@npm:0.81.4": + version: 0.81.4 + resolution: "metro-babel-transformer@npm:0.81.4" dependencies: "@babel/core": ^7.25.2 flow-enums-runtime: ^0.0.6 - hermes-parser: 0.24.0 + hermes-parser: 0.25.1 nullthrows: ^1.1.1 - checksum: e67ef5175f574fbf4a3b6c4f5fd209eb04026cdc32a38e2ebaea21a8c1d4ca20d234aba8e3bff95bfcf60353aaaa0e6369544fe15b1d02aa07f77ab2c26cf053 + checksum: ebcac865e463b0e84d91ac7e03d16b01c7578e35698ca30a06ca30a5fe31d5921c1293b51c0aca47286eacb2629e56dbd4a271af7dd27126d318ebaeb32477ee languageName: node linkType: hard -"metro-cache-key@npm:0.81.0": - version: 0.81.0 - resolution: "metro-cache-key@npm:0.81.0" +"metro-cache-key@npm:0.81.4": + version: 0.81.4 + resolution: "metro-cache-key@npm:0.81.4" dependencies: flow-enums-runtime: ^0.0.6 - checksum: a96e4062ac0f4684f1d80c8b8c3da380c9d7be506c2bc14750d46a6850610c6e05cb1907cc5421393299f25f40575335e899667519d5435c95a09b0438619847 + checksum: 524f11de4b907024d27de1f190ea8520e3bd7ffa9cfa6d7d4c1a067ad41e4f2acd5b40c756c5dbf0def3e2dfaa5e0780fb54f7d960cd7888c124d44905b1dcfa languageName: node linkType: hard -"metro-cache@npm:0.81.0": - version: 0.81.0 - resolution: "metro-cache@npm:0.81.0" +"metro-cache@npm:0.81.4": + version: 0.81.4 + resolution: "metro-cache@npm:0.81.4" dependencies: exponential-backoff: ^3.1.1 flow-enums-runtime: ^0.0.6 - metro-core: 0.81.0 - checksum: 0498a93b07b8125987268dde7f95b56ea61826be7834b87f03595de905210dc2675855d8dbbbc0aab0a2f50ed8be0086b096a4085f7320247e3fc6added45167 + metro-core: 0.81.4 + checksum: 61e5e129a7eed60ea7b85224df145b959ee3379eab0f5f6d00d9268ee549ff411347e0cfe1738a827d1070ec0bacc225473c80f6cf72780bc3a81a518d5e0ec6 languageName: node linkType: hard -"metro-config@npm:0.81.0, metro-config@npm:^0.81.0": - version: 0.81.0 - resolution: "metro-config@npm:0.81.0" +"metro-config@npm:0.81.4, metro-config@npm:^0.81.0": + version: 0.81.4 + resolution: "metro-config@npm:0.81.4" dependencies: connect: ^3.6.5 cosmiconfig: ^5.0.5 flow-enums-runtime: ^0.0.6 - jest-validate: ^29.6.3 - metro: 0.81.0 - metro-cache: 0.81.0 - metro-core: 0.81.0 - metro-runtime: 0.81.0 - checksum: 4969423a292b4aec8f604ae0f682bd62f463ee7a84459c1cf069ff0239427a01e287b97516d265a6b1ec9e8a7b3eb09ad5a8b914e469c9aff56f25473325fe29 + jest-validate: ^29.7.0 + metro: 0.81.4 + metro-cache: 0.81.4 + metro-core: 0.81.4 + metro-runtime: 0.81.4 + checksum: 3fcee46eb84045a00f708025bd9c710531d29661d9e561eb418f342e97ed4dbffbda1b677e6045f7ec92eb9c6e06d0e429df8372f1050ad005a9820ca9cf4ad4 languageName: node linkType: hard -"metro-core@npm:0.81.0, metro-core@npm:^0.81.0": - version: 0.81.0 - resolution: "metro-core@npm:0.81.0" +"metro-core@npm:0.81.4, metro-core@npm:^0.81.0": + version: 0.81.4 + resolution: "metro-core@npm:0.81.4" dependencies: flow-enums-runtime: ^0.0.6 lodash.throttle: ^4.1.1 - metro-resolver: 0.81.0 - checksum: 4e9e63d4c29f7a4f3e13ee8281c2be4458f5482de5f73d6206782cca78dc580b4d3a16516ff278313fcd1a3e4177e521b3aa0f12768fbf5cc335797557846953 + metro-resolver: 0.81.4 + checksum: d39d5e25dbb949fdeae906c511b78ee19a2caee2ddd018116866715263038baf4be8376255ee0087f892ee7220aeb17f9c8cabbd244742100dc9e87193614f91 languageName: node linkType: hard -"metro-file-map@npm:0.81.0": - version: 0.81.0 - resolution: "metro-file-map@npm:0.81.0" +"metro-file-map@npm:0.81.4": + version: 0.81.4 + resolution: "metro-file-map@npm:0.81.4" dependencies: - anymatch: ^3.0.3 debug: ^2.2.0 fb-watchman: ^2.0.0 flow-enums-runtime: ^0.0.6 - fsevents: ^2.3.2 graceful-fs: ^4.2.4 invariant: ^2.2.4 - jest-worker: ^29.6.3 + jest-worker: ^29.7.0 micromatch: ^4.0.4 - node-abort-controller: ^3.1.1 nullthrows: ^1.1.1 walker: ^1.0.7 - dependenciesMeta: - fsevents: - optional: true - checksum: fc99466066fc57d506a90b8dbfc85b9aed3b3dfe362f42c35e24a3f0244b5f3e94b833b52b20cdd728842a1ef7e6c2132b9951a2c2d4013fb470e3a65b9971e0 + checksum: 7a1008263b527aeefdeb606cede2287f58ab11c9da6b2b68b10ffc93524d6b595c6c8fc86e36ef16c696b11322f1631b905b592f275ec88121104b1feab4e74a languageName: node linkType: hard -"metro-minify-terser@npm:0.81.0": - version: 0.81.0 - resolution: "metro-minify-terser@npm:0.81.0" +"metro-minify-terser@npm:0.81.4": + version: 0.81.4 + resolution: "metro-minify-terser@npm:0.81.4" dependencies: flow-enums-runtime: ^0.0.6 terser: ^5.15.0 - checksum: 53472e5d476613c652f0e8bdf68429c80c66b71dd9a559c2185d56f41a8463ba3431353d453d2e20615875d070389ec24247ddbce67c4d7783bfc85113af18e0 + checksum: 985b0023354f523608d977bcb3c45edf3c5497ca0466fdb5b1125ff2c0cca56b6184a263106c7f6f9f381e950a035f15fb12e977ed169ca13089a75733c3314f languageName: node linkType: hard -"metro-resolver@npm:0.81.0": - version: 0.81.0 - resolution: "metro-resolver@npm:0.81.0" +"metro-resolver@npm:0.81.4": + version: 0.81.4 + resolution: "metro-resolver@npm:0.81.4" dependencies: flow-enums-runtime: ^0.0.6 - checksum: 38349c79b5023d993baf30c7feeb9d60287f33e7bf559b75ce6b4177a4acd991353a0fea0a8caeec9a78efa244c8608c0e5bdff4ac64d6fda89ca0b81c9ca3fc + checksum: 0404d549ac144d5823e4b0383e6718d5fb969c60f3cf4db4a24748f94198b692b1527a92a874b9af00ba28284719063e7aaec5f2913e82438ac5b97d9b406241 languageName: node linkType: hard -"metro-runtime@npm:0.81.0, metro-runtime@npm:^0.81.0": - version: 0.81.0 - resolution: "metro-runtime@npm:0.81.0" +"metro-runtime@npm:0.81.4, metro-runtime@npm:^0.81.0": + version: 0.81.4 + resolution: "metro-runtime@npm:0.81.4" dependencies: "@babel/runtime": ^7.25.0 flow-enums-runtime: ^0.0.6 - checksum: 812869ed71d6017d04c3affafa0b1bd4c86075569e0eb98030b8abddb59923903e3dc8eb23d7dd027384496e27010f6aad7839b0e1105e3873c31d0269fb7971 + checksum: 96029d4be2b828792431318f3a28c4cb82dae0c0c6d5a393874362b9df08ada56ae3f283ad8b6eb0a8c3358518cc7c01b53712482b891fdf292e893d038eb7d1 languageName: node linkType: hard -"metro-source-map@npm:0.81.0, metro-source-map@npm:^0.81.0": - version: 0.81.0 - resolution: "metro-source-map@npm:0.81.0" +"metro-source-map@npm:0.81.4, metro-source-map@npm:^0.81.0": + version: 0.81.4 + resolution: "metro-source-map@npm:0.81.4" dependencies: "@babel/traverse": ^7.25.3 "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3" "@babel/types": ^7.25.2 flow-enums-runtime: ^0.0.6 invariant: ^2.2.4 - metro-symbolicate: 0.81.0 + metro-symbolicate: 0.81.4 nullthrows: ^1.1.1 - ob1: 0.81.0 + ob1: 0.81.4 source-map: ^0.5.6 vlq: ^1.0.0 - checksum: e83742c187427b009a5e15eeddd0af0ef29c6e0b88e5f0ac0ba13142e8883f45ce9d66dc8439ca080cea242e955c4f4ba0d64f8344777479ad89d97fa393ad29 + checksum: 878fe5b2e69f3b658e80f50de61ca8af8085485dfffb67ec1641e80e725a87319cbcf51909ac56baaafcf6156a3a4ba78585901a164d237566b6a19767341633 languageName: node linkType: hard -"metro-symbolicate@npm:0.81.0": - version: 0.81.0 - resolution: "metro-symbolicate@npm:0.81.0" +"metro-symbolicate@npm:0.81.4": + version: 0.81.4 + resolution: "metro-symbolicate@npm:0.81.4" dependencies: flow-enums-runtime: ^0.0.6 invariant: ^2.2.4 - metro-source-map: 0.81.0 + metro-source-map: 0.81.4 nullthrows: ^1.1.1 source-map: ^0.5.6 - through2: ^2.0.1 vlq: ^1.0.0 bin: metro-symbolicate: src/index.js - checksum: 33990dc3722096beb0fabce5d8d2961b8f400e1f2aa6c19ce9760f9d739b63f25c7bd844e37e0de42e7f95c125431f7e42a7ad0b92b9aee8d214fecdfb4018e7 + checksum: b5391c516499e2b761f366558cac4382e42c815fb7eb9551f1e64e95769e06688d6988329d59c7e769076af5ac2abb880a0544f367b523d786b249808b8fb050 languageName: node linkType: hard -"metro-transform-plugins@npm:0.81.0": - version: 0.81.0 - resolution: "metro-transform-plugins@npm:0.81.0" +"metro-transform-plugins@npm:0.81.4": + version: 0.81.4 + resolution: "metro-transform-plugins@npm:0.81.4" dependencies: "@babel/core": ^7.25.2 "@babel/generator": ^7.25.0 @@ -6404,34 +6021,34 @@ __metadata: "@babel/traverse": ^7.25.3 flow-enums-runtime: ^0.0.6 nullthrows: ^1.1.1 - checksum: fea77e227c856cd3a41f55ddcde9852d7408cd3ceb4b434f23e02e5122a95f0a29b1950adae0b806d96bfb26581c1160c4bc62942888698394fcc4e85e0b8ee7 + checksum: 709e7a2ea8fef04d40dc63222cb9b42046b975c1b7eb838c6f9ca315e08a756ad18d0057f2d5e0beaf4e0561cd03be9dfb3b15de286ff102ee386cf49acbae57 languageName: node linkType: hard -"metro-transform-worker@npm:0.81.0": - version: 0.81.0 - resolution: "metro-transform-worker@npm:0.81.0" +"metro-transform-worker@npm:0.81.4": + version: 0.81.4 + resolution: "metro-transform-worker@npm:0.81.4" dependencies: "@babel/core": ^7.25.2 "@babel/generator": ^7.25.0 "@babel/parser": ^7.25.3 "@babel/types": ^7.25.2 flow-enums-runtime: ^0.0.6 - metro: 0.81.0 - metro-babel-transformer: 0.81.0 - metro-cache: 0.81.0 - metro-cache-key: 0.81.0 - metro-minify-terser: 0.81.0 - metro-source-map: 0.81.0 - metro-transform-plugins: 0.81.0 + metro: 0.81.4 + metro-babel-transformer: 0.81.4 + metro-cache: 0.81.4 + metro-cache-key: 0.81.4 + metro-minify-terser: 0.81.4 + metro-source-map: 0.81.4 + metro-transform-plugins: 0.81.4 nullthrows: ^1.1.1 - checksum: 0fa08b09f4e503183af789e39629dd0fdf4209f3453c0642cdef5e683e69644ec925bcccb2bdb3439059c11fc1418b3bcdd7dc38c768183c3deb8e2bc050e604 + checksum: 947b892b0dc8836d55772d0367ed0a797fc68f8b53000e21be5b5c6cc66ab0269292e4cbff3fa9988f4c471dbd979a49dbb11fa780e7022e0ed26b810cbe19ff languageName: node linkType: hard -"metro@npm:0.81.0, metro@npm:^0.81.0": - version: 0.81.0 - resolution: "metro@npm:0.81.0" +"metro@npm:0.81.4, metro@npm:^0.81.0": + version: 0.81.4 + resolution: "metro@npm:0.81.4" dependencies: "@babel/code-frame": ^7.24.7 "@babel/core": ^7.25.2 @@ -6445,39 +6062,37 @@ __metadata: ci-info: ^2.0.0 connect: ^3.6.5 debug: ^2.2.0 - denodeify: ^1.2.1 error-stack-parser: ^2.0.6 flow-enums-runtime: ^0.0.6 graceful-fs: ^4.2.4 - hermes-parser: 0.24.0 + hermes-parser: 0.25.1 image-size: ^1.0.2 invariant: ^2.2.4 - jest-worker: ^29.6.3 + jest-worker: ^29.7.0 jsc-safe-url: ^0.2.2 lodash.throttle: ^4.1.1 - metro-babel-transformer: 0.81.0 - metro-cache: 0.81.0 - metro-cache-key: 0.81.0 - metro-config: 0.81.0 - metro-core: 0.81.0 - metro-file-map: 0.81.0 - metro-resolver: 0.81.0 - metro-runtime: 0.81.0 - metro-source-map: 0.81.0 - metro-symbolicate: 0.81.0 - metro-transform-plugins: 0.81.0 - metro-transform-worker: 0.81.0 + metro-babel-transformer: 0.81.4 + metro-cache: 0.81.4 + metro-cache-key: 0.81.4 + metro-config: 0.81.4 + metro-core: 0.81.4 + metro-file-map: 0.81.4 + metro-resolver: 0.81.4 + metro-runtime: 0.81.4 + metro-source-map: 0.81.4 + metro-symbolicate: 0.81.4 + metro-transform-plugins: 0.81.4 + metro-transform-worker: 0.81.4 mime-types: ^2.1.27 nullthrows: ^1.1.1 serialize-error: ^2.1.0 source-map: ^0.5.6 - strip-ansi: ^6.0.0 throat: ^5.0.0 ws: ^7.5.10 yargs: ^17.6.2 bin: metro: src/cli.js - checksum: 326f13e281ba696361c64b1c6bb77ff5b284771a103a78d446f7944ef8baf89e724bd2a76859c5c4e7adc9e94de2c6619755899efdde9bf1e24d3399e7c7cc00 + checksum: 77d8ffa230500f9e7f834600d9d8a4a8b0a3214f17e3dd4e8b8c2039bd48e3d8322e01068b4faf29093fa8398225cef4a6f130b581c33fef53e94f5646e6e1a9 languageName: node linkType: hard @@ -6499,13 +6114,13 @@ __metadata: linkType: hard "mime-db@npm:>= 1.43.0 < 2": - version: 1.53.0 - resolution: "mime-db@npm:1.53.0" - checksum: 3fd9380bdc0b085d0b56b580e4f89ca4fc3b823722310d795c248f0806b9a80afd5d8f4347f015ad943b9ecfa7cc0b71dffa0db96fa776d01a13474821a2c7fb + version: 1.54.0 + resolution: "mime-db@npm:1.54.0" + checksum: e99aaf2f23f5bd607deb08c83faba5dd25cf2fec90a7cc5b92d8260867ee08dab65312e1a589e60093dc7796d41e5fae013268418482f1db4c7d52d0a0960ac9 languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.35, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -6572,8 +6187,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^4.0.0": - version: 4.0.0 - resolution: "minipass-fetch@npm:4.0.0" + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" dependencies: encoding: ^0.1.13 minipass: ^7.0.3 @@ -6582,7 +6197,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 7d59a31011ab9e4d1af6562dd4c4440e425b2baf4c5edbdd2e22fb25a88629e1cdceca39953ff209da504a46021df520f18fd9a519f36efae4750ff724ddadea + checksum: 3dfca705ce887ca9ff14d73e8d8593996dea1a1ecd8101fdbb9c10549d1f9670bc8fb66ad0192769ead4c2dc01b4f9ca1cf567ded365adff17827a303b948140 languageName: node linkType: hard @@ -6647,12 +6262,11 @@ __metadata: linkType: hard "minizlib@npm:^3.0.1": - version: 3.0.1 - resolution: "minizlib@npm:3.0.1" + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" dependencies: - minipass: ^7.0.4 - rimraf: ^5.0.5 - checksum: da0a53899252380475240c587e52c824f8998d9720982ba5c4693c68e89230718884a209858c156c6e08d51aad35700a3589987e540593c36f6713fe30cd7338 + minipass: ^7.1.2 + checksum: 493bed14dcb6118da7f8af356a8947cf1473289c09658e5aabd69a737800a8c3b1736fb7d7931b722268a9c9bc038a6d53c049b6a6af24b34a121823bb709996 languageName: node linkType: hard @@ -6711,11 +6325,11 @@ __metadata: linkType: hard "nanoid@npm:^3.3.7": - version: 3.3.8 - resolution: "nanoid@npm:3.3.8" + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" bin: nanoid: bin/nanoid.cjs - checksum: dfe0adbc0c77e9655b550c333075f51bb28cfc7568afbf3237249904f9c86c9aaaed1f113f0fddddba75673ee31c758c30c43d4414f014a52a7a626efc5958c9 + checksum: 3be20d8866a57a6b6d218e82549711c8352ed969f9ab3c45379da28f405363ad4c9aeb0b39e9abc101a529ca65a72ff9502b00bf74a912c4b64a9d62dfd26c29 languageName: node linkType: hard @@ -6771,13 +6385,6 @@ __metadata: languageName: node linkType: hard -"node-abort-controller@npm:^3.1.1": - version: 3.1.1 - resolution: "node-abort-controller@npm:3.1.1" - checksum: 2c340916af9710328b11c0828223fc65ba320e0d082214a211311bf64c2891028e42ef276b9799188c4ada9e6e1c54cf7a0b7c05dd9d59fcdc8cd633304c8047 - languageName: node - linkType: hard - "node-dir@npm:^0.1.17": version: 0.1.17 resolution: "node-dir@npm:0.1.17" @@ -6787,7 +6394,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12": +"node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.7.0": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -6809,22 +6416,22 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 11.0.0 - resolution: "node-gyp@npm:11.0.0" + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 - glob: ^10.3.10 graceful-fs: ^4.2.6 make-fetch-happen: ^14.0.3 nopt: ^8.0.0 proc-log: ^5.0.0 semver: ^7.3.5 tar: ^7.4.3 + tinyglobby: ^0.2.12 which: ^5.0.0 bin: node-gyp: bin/node-gyp.js - checksum: d7d5055ccc88177f721c7cd4f8f9440c29a0eb40e7b79dba89ef882ec957975dfc1dcb8225e79ab32481a02016eb13bbc051a913ea88d482d3cbdf2131156af4 + checksum: 2536282ba81f8a94b29482d3622b6ab298611440619e46de4512a6f32396a68b5530357c474b859787069d84a4c537d99e0c71078cce5b9f808bf84eeb78e8fb languageName: node linkType: hard @@ -6843,13 +6450,13 @@ __metadata: linkType: hard "nopt@npm:^8.0.0": - version: 8.0.0 - resolution: "nopt@npm:8.0.0" + version: 8.1.0 + resolution: "nopt@npm:8.1.0" dependencies: - abbrev: ^2.0.0 + abbrev: ^3.0.0 bin: nopt: bin/nopt.js - checksum: 2cfc65e7ee38af2e04aea98f054753b0230011c0eeca4ecf131bd7d25984cbbf6f214586e0ae5dfcc2e830bc0bffa5a7fb28ea8d0b306ffd4ae8ea2d814c1ab3 + checksum: 49cfd3eb6f565e292bf61f2ff1373a457238804d5a5a63a8d786c923007498cba89f3648e3b952bc10203e3e7285752abf5b14eaf012edb821e84f24e881a92a languageName: node linkType: hard @@ -6906,16 +6513,16 @@ __metadata: languageName: node linkType: hard -"ob1@npm:0.81.0": - version: 0.81.0 - resolution: "ob1@npm:0.81.0" +"ob1@npm:0.81.4": + version: 0.81.4 + resolution: "ob1@npm:0.81.4" dependencies: flow-enums-runtime: ^0.0.6 - checksum: f3215ccf72604b4db5f9cfc6c83454a136a035ffd26faffec2c100d5810b87599cc95e167888320f3865959a5f9762c03de20a9e40cf66fc13706886820a9523 + checksum: 76369043728f471ded35d294088e65a3c0876f2f7c73ad9a4dcdda68e1022a4ce72b8052a681f2604c93cd2e7ccf35e945bbb01855378122f7a1ef48ad1cc72c languageName: node linkType: hard -"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -7009,13 +6616,6 @@ __metadata: languageName: node linkType: hard -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d - languageName: node - linkType: hard - "p-finally@npm:^1.0.0": version: 1.0.0 resolution: "p-finally@npm:1.0.0" @@ -7145,16 +6745,6 @@ __metadata: languageName: node linkType: hard -"password-prompt@npm:^1.0.4": - version: 1.1.3 - resolution: "password-prompt@npm:1.1.3" - dependencies: - ansi-escapes: ^4.3.2 - cross-spawn: ^7.0.3 - checksum: 9a5fdbd7360db896809704c141acfe9258450a9982c4c177b82a1e6c69d204800cdab6064abac6736bd7d31142c80108deedf4484146594747cb3ce776816e97 - languageName: node - linkType: hard - "path-dirname@npm:^1.0.2": version: 1.0.2 resolution: "path-dirname@npm:1.0.2" @@ -7221,7 +6811,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 @@ -7242,6 +6832,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: a7a5188c954f82c6585720e9143297ccd0e35ad8072231608086ca950bee672d51b0ef676254af0788205e59bd4e4deb4e7708769226bed725bf13370a7d1464 + languageName: node + linkType: hard + "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -7250,9 +6847,9 @@ __metadata: linkType: hard "pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.6": - version: 4.0.6 - resolution: "pirates@npm:4.0.6" - checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 3dcbaff13c8b5bc158416feb6dc9e49e3c6be5fddc1ea078a05a73ef6b85d79324bbb1ef59b954cdeff000dbf000c1d39f32dc69310c7b78fbada5171b583e40 languageName: node linkType: hard @@ -7326,13 +6923,6 @@ __metadata: languageName: node linkType: hard -"process-nextick-args@npm:~2.0.0": - version: 2.0.1 - resolution: "process-nextick-args@npm:2.0.1" - checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf - languageName: node - linkType: hard - "progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" @@ -7378,17 +6968,6 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.8.1": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: ^1.4.0 - object-assign: ^4.1.1 - react-is: ^16.13.1 - checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 - languageName: node - linkType: hard - "pump@npm:^3.0.0": version: 3.0.2 resolution: "pump@npm:3.0.2" @@ -7462,13 +7041,6 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f - languageName: node - linkType: hard - "react-is@npm:^18.0.0": version: 18.3.1 resolution: "react-is@npm:18.3.1" @@ -7476,21 +7048,18 @@ __metadata: languageName: node linkType: hard -"react-native-executorch@npm:^0.3.0": - version: 0.3.1 - resolution: "react-native-executorch@npm:0.3.1" +"react-native-executorch@npm:^0.3.2": + version: 0.3.2 + resolution: "react-native-executorch@npm:0.3.2" dependencies: expo: ^52.0.37 expo-asset: ^11.0.3 expo-file-system: ^18.0.10 - react: 18.3.1 - react-native: 0.76.7 react-native-live-audio-stream: ^1.1.1 peerDependencies: react: "*" react-native: "*" - react-native-audio-api: "*" - checksum: 5912a8ce85432ecf1657cab241903daba7f04e08aba2b99026705c97126efa599305a88e511ff735d424bc02055492672f7ad915af69b87b93350bb429d4c1e1 + checksum: c5ac5f0739186e05cc5bd5b7d03c9a8709ff037c0704e4cce12a489b20ac3dc572a454088c9cb81828abce755d576e980db1ef55fc64659ca0cfc0962789ab62 languageName: node linkType: hard @@ -7521,9 +7090,9 @@ __metadata: languageName: node linkType: hard -"react-native-reanimated@npm:^3.16.3": - version: 3.16.5 - resolution: "react-native-reanimated@npm:3.16.5" +"react-native-reanimated@npm:~3.16.1": + version: 3.16.7 + resolution: "react-native-reanimated@npm:3.16.7" dependencies: "@babel/plugin-transform-arrow-functions": ^7.0.0-0 "@babel/plugin-transform-class-properties": ^7.0.0-0 @@ -7540,17 +7109,17 @@ __metadata: "@babel/core": ^7.0.0-0 react: "*" react-native: "*" - checksum: 29d28dcf99acb2e3928963106a2860d15c9929712832d8d8437fb563691d0199884a63e925548fe5e4b6fc7a9008eadec3e0294b521d9466c875caf16de9c303 + checksum: 108095709cd7a3effc5b5d276d94e161b399bd2d06e32140834168a0051545401bb09228071447e5925571da3f86f335d2a82c76751cdae07f66faf50b25c97f languageName: node linkType: hard -"react-native-safe-area-context@npm:^5.0.0": - version: 5.0.0 - resolution: "react-native-safe-area-context@npm:5.0.0" +"react-native-safe-area-context@npm:4.12.0": + version: 4.12.0 + resolution: "react-native-safe-area-context@npm:4.12.0" peerDependencies: react: "*" react-native: "*" - checksum: 832ee3e6f0daa501f85f21f4eac1b27636cafdb79f4dc932a85237eeea14721ada8a4a17058de9bf26ef47376f5f21ff267bc248ff3a2f0041b16764cf22df76 + checksum: 04a751afed448b31dc401f0e8ecf9cf3edc4fe77b5c16cb7bc2a70381c3a2ffa54f42a313a46ad7deec0aff74a3f5650cf49db0264ba4a6c4f6a1d69ecf489fd languageName: node linkType: hard @@ -7569,9 +7138,9 @@ __metadata: languageName: node linkType: hard -"react-native-svg@npm:^15.9.0": - version: 15.10.1 - resolution: "react-native-svg@npm:15.10.1" +"react-native-svg@npm:15.8.0": + version: 15.8.0 + resolution: "react-native-svg@npm:15.8.0" dependencies: css-select: ^5.1.0 css-tree: ^1.1.3 @@ -7579,35 +7148,35 @@ __metadata: peerDependencies: react: "*" react-native: "*" - checksum: c210426b424e99730ba35d6bbf18335a99f04f2f234cb5bb578ac685c31cfca5e39d48ebf05f9189edd61c028405f4ff242b5edc98ee3e3f41c8bfa960f5bff4 + checksum: ad9d6093f3aef0d53c5e2a562afb7805009f2bf50fd4ec6e77f8c18a6cb7e06a7793d55cc66d523c7d30c77cae170ee26767c72ad5b1a1f07032420ccf4162fe languageName: node linkType: hard "react-native-wheel-scrollview-picker@npm:^2.0.6": - version: 2.0.6 - resolution: "react-native-wheel-scrollview-picker@npm:2.0.6" + version: 2.0.9 + resolution: "react-native-wheel-scrollview-picker@npm:2.0.9" peerDependencies: "@types/react": "*" "@types/react-native": "*" react: "*" react-native: "*" typescript: "*" - checksum: 0d4d51f208fead67299513e62a5b32214d4c663208ffe766646811cbadde65ab05901037e69fe3a81c8ede8e656d70de998c0e7f05a60495564c9c3da24cafa5 + checksum: 5200c211c523164859245d8f0c47565e0437488ec59d4bd9091f1435374a29ae13b2db7e4b6c4159d2ff5f3f9396904271b97669a22db1a045e87240dee9721b languageName: node linkType: hard -"react-native@npm:0.76.3": - version: 0.76.3 - resolution: "react-native@npm:0.76.3" +"react-native@npm:0.76.9": + version: 0.76.9 + resolution: "react-native@npm:0.76.9" dependencies: "@jest/create-cache-key-function": ^29.6.3 - "@react-native/assets-registry": 0.76.3 - "@react-native/codegen": 0.76.3 - "@react-native/community-cli-plugin": 0.76.3 - "@react-native/gradle-plugin": 0.76.3 - "@react-native/js-polyfills": 0.76.3 - "@react-native/normalize-colors": 0.76.3 - "@react-native/virtualized-lists": 0.76.3 + "@react-native/assets-registry": 0.76.9 + "@react-native/codegen": 0.76.9 + "@react-native/community-cli-plugin": 0.76.9 + "@react-native/gradle-plugin": 0.76.9 + "@react-native/js-polyfills": 0.76.9 + "@react-native/normalize-colors": 0.76.9 + "@react-native/virtualized-lists": 0.76.9 abort-controller: ^3.0.0 anser: ^1.4.9 ansi-regex: ^5.0.0 @@ -7646,61 +7215,19 @@ __metadata: optional: true bin: react-native: cli.js - checksum: 0a2fbb7c1ff0057f69b23447980e912bc42df1c1e6c4be504f8e1d4c7c2182b3ca02b5f217bdf89b82a07d523b1e0e0f3124f3cf5f5876f5fa47f845cdba1c7a + checksum: cf621cef0649920bac2b730998be6eaaf9762d516bc65d9073b46f634bb640dfb6b9b5d64ce6a6e09da64d52d114d96d96435a91c9db8ec61b76c818fe209827 languageName: node linkType: hard -"react-native@npm:0.76.7": - version: 0.76.7 - resolution: "react-native@npm:0.76.7" +"react-reconciler@npm:0.27.0": + version: 0.27.0 + resolution: "react-reconciler@npm:0.27.0" dependencies: - "@jest/create-cache-key-function": ^29.6.3 - "@react-native/assets-registry": 0.76.7 - "@react-native/codegen": 0.76.7 - "@react-native/community-cli-plugin": 0.76.7 - "@react-native/gradle-plugin": 0.76.7 - "@react-native/js-polyfills": 0.76.7 - "@react-native/normalize-colors": 0.76.7 - "@react-native/virtualized-lists": 0.76.7 - abort-controller: ^3.0.0 - anser: ^1.4.9 - ansi-regex: ^5.0.0 - babel-jest: ^29.7.0 - babel-plugin-syntax-hermes-parser: ^0.23.1 - base64-js: ^1.5.1 - chalk: ^4.0.0 - commander: ^12.0.0 - event-target-shim: ^5.0.1 - flow-enums-runtime: ^0.0.6 - glob: ^7.1.1 - invariant: ^2.2.4 - jest-environment-node: ^29.6.3 - jsc-android: ^250231.0.0 - memoize-one: ^5.0.0 - metro-runtime: ^0.81.0 - metro-source-map: ^0.81.0 - mkdirp: ^0.5.1 - nullthrows: ^1.1.1 - pretty-format: ^29.7.0 - promise: ^8.3.0 - react-devtools-core: ^5.3.1 - react-refresh: ^0.14.0 - regenerator-runtime: ^0.13.2 - scheduler: 0.24.0-canary-efb381bbf-20230505 - semver: ^7.1.3 - stacktrace-parser: ^0.1.10 - whatwg-fetch: ^3.0.0 - ws: ^6.2.3 - yargs: ^17.6.2 + loose-envify: ^1.1.0 + scheduler: ^0.21.0 peerDependencies: - "@types/react": ^18.2.6 - react: ^18.2.0 - peerDependenciesMeta: - "@types/react": - optional: true - bin: - react-native: cli.js - checksum: a3ec730c2b5583420e8f99fd53da38dbfc2f440ebbc0480453d43338076eb67f7dc9f06d7b1ed32113bf3efb62b7cf64e04f29b19370cf9bcb16b756dcec9874 + react: ^18.0.0 + checksum: c2ae111f150c2a46970182df12ea8254719fdfec5e26574711b1838fc37863c63671460a351570fd359c088d891e7bb0ff89023c2f7c1582393b57dd517b92c2 languageName: node linkType: hard @@ -7720,21 +7247,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:~2.3.6": - version: 2.3.8 - resolution: "readable-stream@npm:2.3.8" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.3 - isarray: ~1.0.0 - process-nextick-args: ~2.0.0 - safe-buffer: ~5.1.1 - string_decoder: ~1.1.1 - util-deprecate: ~1.0.1 - checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 - languageName: node - linkType: hard - "readline@npm:^1.3.0": version: 1.3.0 resolution: "readline@npm:1.3.0" @@ -7885,7 +7397,7 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^2.0.2, resolve.exports@npm:^2.0.3": +"resolve.exports@npm:^2.0.3": version: 2.0.3 resolution: "resolve.exports@npm:2.0.3" checksum: abfb9f98278dcd0c19b8a49bb486abfafa23df4636d49128ea270dc982053c3ef230a530aecda1fae1322873fdfa6c97674fc539651ddfdb375ac58e0b8ef6df @@ -7893,15 +7405,15 @@ __metadata: linkType: hard "resolve@npm:^1.14.2, resolve@npm:^1.22.2": - version: 1.22.9 - resolution: "resolve@npm:1.22.9" + version: 1.22.10 + resolution: "resolve@npm:1.22.10" dependencies: is-core-module: ^2.16.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: dd7da6c4ccc60bb4884f636b987102bb1cae6c486f7172361719a7f52769660c9a83a2d3520bef71d91f3da27e4fb8a40404c63ee4372a15863f3208bef5af67 + checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf languageName: node linkType: hard @@ -7915,15 +7427,15 @@ __metadata: linkType: hard "resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.2#~builtin": - version: 1.22.9 - resolution: "resolve@patch:resolve@npm%3A1.22.9#~builtin::version=1.22.9&hash=c3c19d" + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=c3c19d" dependencies: is-core-module: ^2.16.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 8db5c0f16ab65f58c036cb5be0964605c97c29b9fdf1e20f298ec027e2a4fd96ad0413aa14f6e761629956dc552cd478c2f9b6c5a07e37e4c85209090162501e + checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d languageName: node linkType: hard @@ -7954,9 +7466,9 @@ __metadata: linkType: hard "reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 64cb3142ac5e9ad689aca289585cb41d22521f4571f73e9488af39f6b1bd62f0cbb3d65e2ecc768ec6494052523f473f1eb4b55c3e9014b3590c17fc6a03e22a languageName: node linkType: hard @@ -7971,17 +7483,6 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^5.0.5": - version: 5.0.10 - resolution: "rimraf@npm:5.0.10" - dependencies: - glob: ^10.3.7 - bin: - rimraf: dist/esm/bin.mjs - checksum: 50e27388dd2b3fa6677385fc1e2966e9157c89c86853b96d02e6915663a96b7ff4d590e14f6f70e90f9b554093aa5dbc05ac3012876be558c06a65437337bc05 - languageName: node - linkType: hard - "rimraf@npm:~2.6.2": version: 2.6.3 resolution: "rimraf@npm:2.6.3" @@ -8009,13 +7510,6 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": - version: 5.1.2 - resolution: "safe-buffer@npm:5.1.2" - checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c - languageName: node - linkType: hard - "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -8039,6 +7533,15 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.21.0": + version: 0.21.0 + resolution: "scheduler@npm:0.21.0" + dependencies: + loose-envify: ^1.1.0 + checksum: 4f8285076041ed2c81acdd1faa987f1655fdbd30554bc667c1ea64743fc74fb3a04ca7d27454b3d678735df5a230137a3b84756061b43dc5796e80701b66d124 + languageName: node + linkType: hard + "selfsigned@npm:^2.4.1": version: 2.4.1 resolution: "selfsigned@npm:2.4.1" @@ -8068,11 +7571,11 @@ __metadata: linkType: hard "semver@npm:^7.1.3, semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.6.0": - version: 7.6.3 - resolution: "semver@npm:7.6.3" + version: 7.7.1 + resolution: "semver@npm:7.7.1" bin: semver: bin/semver.js - checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 + checksum: 586b825d36874007c9382d9e1ad8f93888d8670040add24a28e06a910aeebd673a2eb9e3bf169c6679d9245e66efb9057e0852e70d9daa6c27372aab1dda7104 languageName: node linkType: hard @@ -8274,12 +7777,12 @@ __metadata: linkType: hard "socks@npm:^2.8.3": - version: 2.8.3 - resolution: "socks@npm:2.8.3" + version: 2.8.4 + resolution: "socks@npm:2.8.4" dependencies: ip-address: ^9.0.5 smart-buffer: ^4.2.0 - checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd + checksum: cd1edc924475d5dfde534adf66038df7e62c7343e6b8c0113e52dc9bb6a0a10e25b2f136197f379d695f18e8f0f2b7f6e42977bf720ddbee912a851201c396ad languageName: node linkType: hard @@ -8314,15 +7817,6 @@ __metadata: languageName: node linkType: hard -"split@npm:^1.0.1": - version: 1.0.1 - resolution: "split@npm:1.0.1" - dependencies: - through: 2 - checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a - languageName: node - linkType: hard - "sprintf-js@npm:^1.1.3": version: 1.1.3 resolution: "sprintf-js@npm:1.1.3" @@ -8372,11 +7866,11 @@ __metadata: linkType: hard "stacktrace-parser@npm:^0.1.10": - version: 0.1.10 - resolution: "stacktrace-parser@npm:0.1.10" + version: 0.1.11 + resolution: "stacktrace-parser@npm:0.1.11" dependencies: type-fest: ^0.7.1 - checksum: f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee + checksum: 1120cf716606ec6a8e25cc9b6ada79d7b91e6a599bba1a6664e6badc8b5f37987d7df7d9ad0344f717a042781fd8e1e999de08614a5afea451b68902421036b5 languageName: node linkType: hard @@ -8423,15 +7917,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~1.1.1": - version: 1.1.1 - resolution: "string_decoder@npm:1.1.1" - dependencies: - safe-buffer: ~5.1.0 - checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b - languageName: node - linkType: hard - "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -8505,20 +7990,6 @@ __metadata: languageName: node linkType: hard -"sudo-prompt@npm:9.1.1": - version: 9.1.1 - resolution: "sudo-prompt@npm:9.1.1" - checksum: 20fe5bde6a27725d87938e68d6f99c0798ce9bf3a8fdebd58392a0436df713c66ebf67863e682941ff98ee7611e40ed599e12be7f264c9286106feb0f3db3860 - languageName: node - linkType: hard - -"sudo-prompt@npm:^8.2.0": - version: 8.2.5 - resolution: "sudo-prompt@npm:8.2.5" - checksum: bacff1f18a8ab8dba345cc1f3cf3a02b4cc571f71585df79af95af31278f56107f7c29402f5347b07c489888c63f2deb78d544b93a6347e83d0ed0847f4bc163 - languageName: node - linkType: hard - "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -8655,8 +8126,8 @@ __metadata: linkType: hard "terser@npm:^5.15.0": - version: 5.37.0 - resolution: "terser@npm:5.37.0" + version: 5.39.0 + resolution: "terser@npm:5.39.0" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -8664,7 +8135,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 70c06a8ce1288ff4370a7e481beb6fc8b22fc4995371479f49df1552aa9cf8e794ace66e1da6e87057eda1745644311213f5043bda9a06cf55421eff68b3ac06 + checksum: e39c302aed7a70273c8b03032c37c68c8d9d3b432a7b6abe89caf9d087f7dd94d743c01ee5ba1431a095ad347c4a680b60d258f298a097cf512346d6041eb661 languageName: node linkType: hard @@ -8704,29 +8175,13 @@ __metadata: languageName: node linkType: hard -"through2@npm:^2.0.1": - version: 2.0.5 - resolution: "through2@npm:2.0.5" - dependencies: - readable-stream: ~2.3.6 - xtend: ~4.0.1 - checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 - languageName: node - linkType: hard - -"through@npm:2": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" +"tinyglobby@npm:^0.2.12": + version: 0.2.12 + resolution: "tinyglobby@npm:0.2.12" dependencies: - os-tmpdir: ~1.0.2 - checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + fdir: ^6.4.3 + picomatch: ^4.0.2 + checksum: ef9357fa1b2b661afdccd315cb4995f5f36bce948faaace68aae85fe57bdd8f837883045c88efc50d3186bac6586e4ae2f31026b9a3aac061b884217e6092e23 languageName: node linkType: hard @@ -8767,7 +8222,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.4.0": +"tslib@npm:^2.0.1, tslib@npm:^2.0.3": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a @@ -8803,45 +8258,45 @@ __metadata: linkType: hard "typescript@npm:^5.3.3": - version: 5.7.2 - resolution: "typescript@npm:5.7.2" + version: 5.8.3 + resolution: "typescript@npm:5.8.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: b55300c4cefee8ee380d14fa9359ccb41ff8b54c719f6bc49b424899d662a5ce62ece390ce769568c7f4d14af844085255e63788740084444eb12ef423b13433 + checksum: cb1d081c889a288b962d3c8ae18d337ad6ee88a8e81ae0103fa1fecbe923737f3ba1dbdb3e6d8b776c72bc73bfa6d8d850c0306eed1a51377d2fccdfd75d92c4 languageName: node linkType: hard "typescript@patch:typescript@^5.3.3#~builtin": - version: 5.7.2 - resolution: "typescript@patch:typescript@npm%3A5.7.2#~builtin::version=5.7.2&hash=14eedb" + version: 5.8.3 + resolution: "typescript@patch:typescript@npm%3A5.8.3#~builtin::version=5.8.3&hash=14eedb" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 803430c6da2ba73c25a21880d8d4f08a56d9d2444e6db2ea949ac4abceeece8e4a442b7b9b585db7d8a0b47ebda2060e45fe8ee8b8aca23e27ec1d4844987ee6 + checksum: 1b503525a88ff0ff5952e95870971c4fb2118c17364d60302c21935dedcd6c37e6a0a692f350892bafcef6f4a16d09073fe461158547978d2f16fbe4cb18581c languageName: node linkType: hard "ua-parser-js@npm:^1.0.35": - version: 1.0.39 - resolution: "ua-parser-js@npm:1.0.39" + version: 1.0.40 + resolution: "ua-parser-js@npm:1.0.40" bin: ua-parser-js: script/cli.js - checksum: 19455df8c2348ef53f2e150e7406d3a025a619c2fd69722a1e63363d5ba8d91731ef7585f2dce7d8f14c8782734b4d704c05f246dca5f7565b5ae7d318084f2a + checksum: ae555a33dc9395dd877e295d6adbf5634e047aad7c3358328830218f3ca3a6233e35848cd355465a7612f269860e8029984389282940c7a27c9af4dfcdbba8c3 languageName: node linkType: hard -"undici-types@npm:~6.20.0": - version: 6.20.0 - resolution: "undici-types@npm:6.20.0" - checksum: b7bc50f012dc6afbcce56c9fd62d7e86b20a62ff21f12b7b5cbf1973b9578d90f22a9c7fe50e638e96905d33893bf2f9f16d98929c4673c2480de05c6c96ea8b +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 46331c7d6016bf85b3e8f20c159d62f5ae471aba1eb3dc52fff35a0259d58dcc7d592d4cc4f00c5f9243fa738a11cfa48bd20203040d4a9e6bc25e807fab7ab3 languageName: node linkType: hard "undici@npm:^6.18.2": - version: 6.21.0 - resolution: "undici@npm:6.21.0" - checksum: bc2eb26c4b010a4f816314d48d4529f62b1116405097b2c5f0ac68247c56049a857d11a9f05b237818f04ce4f51d6f5e8d6fcc6aae2ab816c2b7318a9706727c + version: 6.21.2 + resolution: "undici@npm:6.21.2" + checksum: 4d7227910bfee0703ea5c5c9d4343bcb2a80d2ce2eb64698b6fb8cc48852e29f7c7c623126161a5073fd594c9040ae7e7ecc8e093fe6e84a9394dd2595754ec5 languageName: node linkType: hard @@ -8950,23 +8405,16 @@ __metadata: linkType: hard "update-browserslist-db@npm:^1.1.1": - version: 1.1.1 - resolution: "update-browserslist-db@npm:1.1.1" + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" dependencies: escalade: ^3.2.0 - picocolors: ^1.1.0 + picocolors: ^1.1.1 peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js - checksum: 2ea11bd2562122162c3e438d83a1f9125238c0844b6d16d366e3276d0c0acac6036822dc7df65fc5a89c699cdf9f174acf439c39bedf3f9a2f3983976e4b4c3e - languageName: node - linkType: hard - -"util-deprecate@npm:~1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + checksum: 7b6d8d08c34af25ee435bccac542bedcb9e57c710f3c42421615631a80aa6dd28b0a81c9d2afbef53799d482fb41453f714b8a7a0a8003e3b4ec8fb1abb819af languageName: node linkType: hard @@ -9124,9 +8572,9 @@ __metadata: linkType: hard "wonka@npm:^6.3.2": - version: 6.3.4 - resolution: "wonka@npm:6.3.4" - checksum: 6bb57955cb2982fb469a7824484e6854b436f89a7f10b6a981348789d88fbc944665771adc4cc404f62416417eb47ab2b8657d898e5301ccd4a53eaac6a10508 + version: 6.3.5 + resolution: "wonka@npm:6.3.5" + checksum: bd9f4330664ea971ddbc762275c081d5a635bcebd1c567211d43278b925f3394ad454bb33a0ef5e8beadfaad552cdbc92c018dfb96350f3895341998efa5f521 languageName: node linkType: hard @@ -9205,8 +8653,8 @@ __metadata: linkType: hard "ws@npm:^8.12.1": - version: 8.18.0 - resolution: "ws@npm:8.18.0" + version: 8.18.1 + resolution: "ws@npm:8.18.1" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -9215,7 +8663,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975 + checksum: 4658357185d891bc45cc2d42a84f9e192d047e8476fb5cba25b604f7d75ca87ca0dd54cd0b2cc49aeee57c79045a741cb7d0b14501953ac60c790cd105c42f23 languageName: node linkType: hard @@ -9260,13 +8708,6 @@ __metadata: languageName: node linkType: hard -"xtend@npm:~4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a - languageName: node - linkType: hard - "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" diff --git a/examples/llama/assets/tokenizer.bin b/examples/llama/assets/tokenizer.bin deleted file mode 100644 index f0a0ce5f1..000000000 --- a/examples/llama/assets/tokenizer.bin +++ /dev/null @@ -1,128000 +0,0 @@ -IQ== 0 -Ig== 1 -Iw== 2 -JA== 3 -JQ== 4 -Jg== 5 -Jw== 6 -KA== 7 -KQ== 8 -Kg== 9 -Kw== 10 -LA== 11 -LQ== 12 -Lg== 13 -Lw== 14 -MA== 15 -MQ== 16 -Mg== 17 -Mw== 18 -NA== 19 -NQ== 20 -Ng== 21 -Nw== 22 -OA== 23 -OQ== 24 -Og== 25 -Ow== 26 -PA== 27 -PQ== 28 -Pg== 29 -Pw== 30 -QA== 31 -QQ== 32 -Qg== 33 -Qw== 34 -RA== 35 -RQ== 36 -Rg== 37 -Rw== 38 -SA== 39 -SQ== 40 -Sg== 41 -Sw== 42 -TA== 43 -TQ== 44 -Tg== 45 -Tw== 46 -UA== 47 -UQ== 48 -Ug== 49 -Uw== 50 -VA== 51 -VQ== 52 -Vg== 53 -Vw== 54 -WA== 55 -WQ== 56 -Wg== 57 -Ww== 58 -XA== 59 -XQ== 60 -Xg== 61 -Xw== 62 -YA== 63 -YQ== 64 -Yg== 65 -Yw== 66 -ZA== 67 -ZQ== 68 -Zg== 69 -Zw== 70 -aA== 71 -aQ== 72 -ag== 73 -aw== 74 -bA== 75 -bQ== 76 -bg== 77 -bw== 78 -cA== 79 -cQ== 80 -cg== 81 -cw== 82 -dA== 83 -dQ== 84 -dg== 85 -dw== 86 -eA== 87 -eQ== 88 -eg== 89 -ew== 90 -fA== 91 -fQ== 92 -fg== 93 -oQ== 94 -og== 95 -ow== 96 -pA== 97 -pQ== 98 -pg== 99 -pw== 100 -qA== 101 -qQ== 102 -qg== 103 -qw== 104 -rA== 105 -rg== 106 -rw== 107 -sA== 108 -sQ== 109 -sg== 110 -sw== 111 -tA== 112 -tQ== 113 -tg== 114 -tw== 115 -uA== 116 -uQ== 117 -ug== 118 -uw== 119 -vA== 120 -vQ== 121 -vg== 122 -vw== 123 -wA== 124 -wQ== 125 -wg== 126 -ww== 127 -xA== 128 -xQ== 129 -xg== 130 -xw== 131 -yA== 132 -yQ== 133 -yg== 134 -yw== 135 -zA== 136 -zQ== 137 -zg== 138 -zw== 139 -0A== 140 -0Q== 141 -0g== 142 -0w== 143 -1A== 144 -1Q== 145 -1g== 146 -1w== 147 -2A== 148 -2Q== 149 -2g== 150 -2w== 151 -3A== 152 -3Q== 153 -3g== 154 -3w== 155 -4A== 156 -4Q== 157 -4g== 158 -4w== 159 -5A== 160 -5Q== 161 -5g== 162 -5w== 163 -6A== 164 -6Q== 165 -6g== 166 -6w== 167 -7A== 168 -7Q== 169 -7g== 170 -7w== 171 -8A== 172 -8Q== 173 -8g== 174 -8w== 175 -9A== 176 -9Q== 177 -9g== 178 -9w== 179 -+A== 180 -+Q== 181 -+g== 182 -+w== 183 -/A== 184 -/Q== 185 -/g== 186 -/w== 187 -AA== 188 -AQ== 189 -Ag== 190 -Aw== 191 -BA== 192 -BQ== 193 -Bg== 194 -Bw== 195 -CA== 196 -CQ== 197 -Cg== 198 -Cw== 199 -DA== 200 -DQ== 201 -Dg== 202 -Dw== 203 -EA== 204 -EQ== 205 -Eg== 206 -Ew== 207 -FA== 208 -FQ== 209 -Fg== 210 -Fw== 211 -GA== 212 -GQ== 213 -Gg== 214 -Gw== 215 -HA== 216 -HQ== 217 -Hg== 218 -Hw== 219 -IA== 220 -fw== 221 -gA== 222 -gQ== 223 -gg== 224 -gw== 225 -hA== 226 -hQ== 227 -hg== 228 -hw== 229 -iA== 230 -iQ== 231 -ig== 232 -iw== 233 -jA== 234 -jQ== 235 -jg== 236 -jw== 237 -kA== 238 -kQ== 239 -kg== 240 -kw== 241 -lA== 242 -lQ== 243 -lg== 244 -lw== 245 -mA== 246 -mQ== 247 -mg== 248 -mw== 249 -nA== 250 -nQ== 251 -ng== 252 -nw== 253 -oA== 254 -rQ== 255 -ICA= 256 -ICAgIA== 257 -aW4= 258 -IHQ= 259 -ICAgICAgICA= 260 -ZXI= 261 -ICAg 262 -b24= 263 -IGE= 264 -cmU= 265 -YXQ= 266 -c3Q= 267 -ZW4= 268 -b3I= 269 -IHRo 270 -Cgo= 271 -IGM= 272 -bGU= 273 -IHM= 274 -aXQ= 275 -YW4= 276 -YXI= 277 -YWw= 278 -IHRoZQ== 279 -Owo= 280 -IHA= 281 -IGY= 282 -b3U= 283 -ID0= 284 -aXM= 285 -ICAgICAgIA== 286 -aW5n 287 -ZXM= 288 -IHc= 289 -aW9u 290 -ZWQ= 291 -aWM= 292 -IGI= 293 -IGQ= 294 -ZXQ= 295 -IG0= 296 -IG8= 297 -CQk= 298 -cm8= 299 -YXM= 300 -ZWw= 301 -Y3Q= 302 -bmQ= 303 -IGlu 304 -IGg= 305 -ZW50 306 -aWQ= 307 -IG4= 308 -YW0= 309 -ICAgICAgICAgICA= 310 -IHRv 311 -IHJl 312 -LS0= 313 -IHs= 314 -IG9m 315 -b20= 316 -KTsK 317 -aW0= 318 -DQo= 319 -ICg= 320 -aWw= 321 -Ly8= 322 -IGFuZA== 323 -dXI= 324 -c2U= 325 -IGw= 326 -ZXg= 327 -IFM= 328 -YWQ= 329 -ICI= 330 -Y2g= 331 -dXQ= 332 -aWY= 333 -Kio= 334 -IH0= 335 -ZW0= 336 -b2w= 337 -ICAgICAgICAgICAgICAgIA== 338 -dGg= 339 -KQo= 340 -IHsK 341 -IGc= 342 -aWc= 343 -aXY= 344 -LAo= 345 -Y2U= 346 -b2Q= 347 -IHY= 348 -YXRl 349 -IFQ= 350 -YWc= 351 -YXk= 352 -ICo= 353 -b3Q= 354 -dXM= 355 -IEM= 356 -IHN0 357 -IEk= 358 -dW4= 359 -dWw= 360 -dWU= 361 -IEE= 362 -b3c= 363 -ICc= 364 -ZXc= 365 -IDw= 366 -YXRpb24= 367 -KCk= 368 -IGZvcg== 369 -YWI= 370 -b3J0 371 -dW0= 372 -YW1l 373 -IGlz 374 -cGU= 375 -dHI= 376 -Y2s= 377 -4oA= 378 -IHk= 379 -aXN0 380 -LS0tLQ== 381 -LgoK 382 -aGU= 383 -IGU= 384 -bG8= 385 -IE0= 386 -IGJl 387 -ZXJz 388 -IG9u 389 -IGNvbg== 390 -YXA= 391 -dWI= 392 -IFA= 393 -ICAgICAgICAgICAgICAg 394 -YXNz 395 -aW50 396 -Pgo= 397 -bHk= 398 -dXJu 399 -ICQ= 400 -OwoK 401 -YXY= 402 -cG9ydA== 403 -aXI= 404 -LT4= 405 -bnQ= 406 -Y3Rpb24= 407 -ZW5k 408 -IGRl 409 -MDA= 410 -aXRo 411 -b3V0 412 -dHVybg== 413 -b3Vy 414 -ICAgICA= 415 -bGlj 416 -cmVz 417 -cHQ= 418 -PT0= 419 -IHRoaXM= 420 -IHdo 421 -IGlm 422 -IEQ= 423 -dmVy 424 -YWdl 425 -IEI= 426 -aHQ= 427 -ZXh0 428 -PSI= 429 -IHRoYXQ= 430 -KioqKg== 431 -IFI= 432 -IGl0 433 -ZXNz 434 -IEY= 435 -IHI= 436 -b3M= 437 -YW5k 438 -IGFz 439 -ZWN0 440 -a2U= 441 -cm9t 442 -IC8v 443 -Y29u 444 -IEw= 445 -KCI= 446 -cXU= 447 -bGFzcw== 448 -IHdpdGg= 449 -aXo= 450 -ZGU= 451 -IE4= 452 -IGFs 453 -b3A= 454 -dXA= 455 -Z2V0 456 -IH0K 457 -aWxl 458 -IGFu 459 -YXRh 460 -b3Jl 461 -cmk= 462 -IHBybw== 463 -Ow0K 464 -CQkJCQ== 465 -dGVy 466 -YWlu 467 -IFc= 468 -IEU= 469 -IGNvbQ== 470 -IHJldHVybg== 471 -YXJ0 472 -IEg= 473 -YWNr 474 -aW1wb3J0 475 -dWJsaWM= 476 -IG9y 477 -ZXN0 478 -bWVudA== 479 -IEc= 480 -YWJsZQ== 481 -IC0= 482 -aW5l 483 -aWxs 484 -aW5k 485 -ZXJl 486 -Ojo= 487 -aXR5 488 -ICs= 489 -IHRy 490 -ZWxm 491 -aWdodA== 492 -KCc= 493 -b3Jt 494 -dWx0 495 -c3Ry 496 -Li4= 497 -Iiw= 498 -IHlvdQ== 499 -eXBl 500 -cGw= 501 -IG5ldw== 502 -IGo= 503 -ICAgICAgICAgICAgICAgICAgIA== 504 -IGZyb20= 505 -IGV4 506 -IE8= 507 -MjA= 508 -bGQ= 509 -IFs= 510 -b2M= 511 -Ogo= 512 -IHNl 513 -IGxl 514 -LS0tLS0tLS0= 515 -LnM= 516 -ewo= 517 -Jyw= 518 -YW50 519 -IGF0 520 -YXNl 521 -LmM= 522 -IGNo 523 -PC8= 524 -YXZl 525 -YW5n 526 -IGFyZQ== 527 -IGludA== 528 -4oCZ 529 -X3Q= 530 -ZXJ0 531 -aWFs 532 -YWN0 533 -fQo= 534 -aXZl 535 -b2Rl 536 -b3N0 537 -IGNsYXNz 538 -IG5vdA== 539 -b2c= 540 -b3Jk 541 -YWx1ZQ== 542 -YWxs 543 -ZmY= 544 -KCk7Cg== 545 -b250 546 -aW1l 547 -YXJl 548 -IFU= 549 -IHBy 550 -IDo= 551 -aWVz 552 -aXpl 553 -dXJl 554 -IGJ5 555 -aXJl 556 -IH0KCg== 557 -LnA= 558 -IHNo 559 -aWNl 560 -YXN0 561 -cHRpb24= 562 -dHJpbmc= 563 -b2s= 564 -X18= 565 -Y2w= 566 -IyM= 567 -IGhl 568 -YXJk 569 -KS4= 570 -IEA= 571 -aWV3 572 -CQkJ 573 -IHdhcw== 574 -aXA= 575 -dGhpcw== 576 -IHU= 577 -IFRoZQ== 578 -aWRl 579 -YWNl 580 -aWI= 581 -YWM= 582 -cm91 583 -IHdl 584 -amVjdA== 585 -IHB1YmxpYw== 586 -YWs= 587 -dmU= 588 -YXRo 589 -b2lk 590 -ID0+ 591 -dXN0 592 -cXVl 593 -IHJlcw== 594 -KSk= 595 -J3M= 596 -IGs= 597 -YW5z 598 -eXN0 599 -dW5jdGlvbg== 600 -KioqKioqKio= 601 -IGk= 602 -IHVz 603 -cHA= 604 -MTA= 605 -b25l 606 -YWls 607 -PT09PQ== 608 -bmFtZQ== 609 -IHN0cg== 610 -IC8= 611 -ICY= 612 -YWNo 613 -ZGl2 614 -eXN0ZW0= 615 -ZWxs 616 -IGhhdmU= 617 -ZXJy 618 -b3VsZA== 619 -dWxs 620 -cG9u 621 -IEo= 622 -X3A= 623 -ID09 624 -aWdu 625 -U3Q= 626 -Lgo= 627 -IHBs 628 -KTsKCg== 629 -Zm9ybQ== 630 -cHV0 631 -b3VudA== 632 -fQoK 633 -ZGQ= 634 -aXRl 635 -IGdldA== 636 -cnI= 637 -b21l 638 -IOKA 639 -YXJhbQ== 640 -Y2M= 641 -ICov 642 -RVI= 643 -SW4= 644 -bGVz 645 -X3M= 646 -b25n 647 -aWU= 648 -IGNhbg== 649 -IFY= 650 -ZXJ2 651 -cHI= 652 -IHVu 653 -cm93 654 -YmVy 655 -IGRv 656 -bGw= 657 -IGVs 658 -IHNlbGY= 659 -YXRlZA== 660 -YXJ5 661 -IC4= 662 -J10= 663 -dWQ= 664 -IGVu 665 -IFRo 666 -ICAgICAgICAgICAgICAgICAgICAgICA= 667 -dGU= 668 -X2M= 669 -dWN0 670 -IGFi 671 -b3Jr 672 -LmdldA== 673 -ICM= 674 -YXc= 675 -cmVzcw== 676 -b2I= 677 -TmFtZQ== 678 -MjAx 679 -YXBw 680 -Wyc= 681 -IGFsbA== 682 -b3J5 683 -aXRpb24= 684 -YW5jZQ== 685 -ZWFy 686 -IGNvbnQ= 687 -dmVudA== 688 -aWE= 689 -IHdpbGw= 690 -SU4= 691 -ICAgICAgICAg 692 -cmV0dXJu 693 -IDwv 694 -ZGF0YQ== 695 -KQoK 696 -UmU= 697 -cGxl 698 -aWxk 699 -dGhlcg== 700 -IHlvdXI= 701 -Igo= 702 -KCQ= 703 -IG91dA== 704 -KSw= 705 -IGhhcw== 706 -U3RyaW5n 707 -c28= 708 -IHVw 709 -YXg= 710 -IGRlZg== 711 -IGJv 712 -Z2U= 713 -YWxzZQ== 714 -T04= 715 -cGVy 716 -MTI= 717 -aWNo 718 -IGJ1dA== 719 -IAo= 720 -IF8= 721 -X20= 722 -YWRk 723 -cXVlc3Q= 724 -b2RlbA== 725 -c2VsZg== 726 -ZXJ5 727 -ZnQ= 728 -ZW5z 729 -Ly8vLw== 730 -YWtl 731 -LkM= 732 -IGdv 733 -IGZ1bmN0aW9u 734 -IEs= 735 -aXZhdGU= 736 -IGlt 737 -IGNvbnN0 738 -LnQ= 739 -ICovCg== 740 -KTsNCg== 741 -IHZvaWQ= 742 -IHNldA== 743 -IFN5c3RlbQ== 744 -Y3Jp 745 -KCkK 746 -bGk= 747 -CWlm 748 -Lm0= 749 -YWxseQ== 750 -c2V0 751 -ZXA= 752 -4oCZcw== 753 -Ym8= 754 -ZGVm 755 -JywK 756 -IG1l 757 -ICE= 758 -YXRjaA== 759 -Ij4= 760 -IiwK 761 -ZWM= 762 -IElu 763 -cGg= 764 -IHw= 765 -X2Y= 766 -IHZhcg== 767 -ZW5jZQ== 768 -SWQ= 769 -cmVl 770 -aW5r 771 -bGVjdA== 772 -dWc= 773 -ZXRo 774 -IGVsc2U= 775 -LS0tLS0tLS0tLS0tLS0tLQ== 776 -MTk= 777 -Y29udA== 778 -IHNv 779 -YXRpYw== 780 -IGxv 781 -cHJv 782 -dG9u 783 -c3M= 784 -b3du 785 -YWJlbA== 786 -b2ludA== 787 -b3Vz 788 -ZWxk 789 -U1Q= 790 -VGhl 791 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 792 -UkU= 793 -Ijo= 794 -b2xvcg== 795 -dHA= 796 -ZWc= 797 -a2V5 798 -dWRl 799 -IFN0 800 -b3VuZA== 801 -IGFy 802 -Iik7Cg== 803 -ZW5lcg== 804 -c2Vy 805 -MTE= 806 -YmplY3Q= 807 -ZXNzYWdl 808 -ZmVy 809 -IG1vcmU= 810 -YXRpb25z 811 -ZW50cw== 812 -IGhpcw== 813 -IHRoZXk= 814 -LlM= 815 -IFk= 816 -dXNl 817 -bmU= 818 -aXNo 819 -b2xk 820 -X2Q= 821 -aW8= 822 -aWVsZA== 823 -IHBlcg== 824 -Q29udA== 825 -aW5ncw== 826 -IyMjIw== 827 -IGRhdGE= 828 -IHNh 829 -ZWY= 830 -Zm8= 831 -IG9uZQ== 832 -ZW5n 833 -IGRpcw== 834 -QVQ= 835 -IG5hbWU= 836 -IHRydWU= 837 -dmFs 838 -bGVk 839 -LmY= 840 -IG5l 841 -IGVuZA== 842 -MzI= 843 -LlQ= 844 -MTY= 845 -Y3Jl 846 -YXJr 847 -bG9n 848 -RXg= 849 -ZXJyb3I= 850 -X2lk 851 -dXJyZQ== 852 -YW5nZQ== 853 -IG51bGw= 854 -cnJheQ== 855 -IG15 856 -cGFu 857 -aWN0 858 -YXRvcg== 859 -Vmlldw== 860 -TGlzdA== 861 -CXJldHVybg== 862 -4oCd 863 -IHByZQ== 864 -IHg= 865 -Y2x1ZGU= 866 -YXJn 867 -MTU= 868 -b3Y= 869 -Lmg= 870 -ID4= 871 -IHRoZWly 872 -Jyk= 873 -aXJzdA== 874 -aWNr 875 -Z2g= 876 -TEU= 877 -T1I= 878 -IHByaXZhdGU= 879 -dGVt 880 -DQoNCg== 881 -dXNlcg== 882 -ICk= 883 -Y29t 884 -LkE= 885 -IjsK 886 -IGlk 887 -cmVhZA== 888 -IHdobw== 889 -X2I= 890 -Ij4K 891 -IHRpbWU= 892 -IG1hbg== 893 -cnk= 894 -PT09PT09PT0= 895 -cm91cA== 896 -cm9w 897 -cHVibGlj 898 -dmVs 899 -dW1iZXI= 900 -Ymxl 901 -IHdoaWNo 902 -KioqKioqKioqKioqKioqKg== 903 -IGFueQ== 904 -IGZhbHNl 905 -d2U= 906 -IHZhbHVl 907 -IGxp 908 -Iik= 909 -bmRlcg== 910 -Z3I= 911 -IG5v 912 -cGFyYW0= 913 -MjU= 914 -Zmln 915 -LmNvbQ== 916 -IGFwcA== 917 -X2w= 918 -aW9ucw== 919 -LkQ= 920 -IENo 921 -IGFib3V0 922 -IGFkZA== 923 -IHN1 924 -IHN0cmluZw== 925 -SUQ= 926 -IG92ZXI= 927 -c3RyaW5n 928 -Lmw= 929 -b3VyY2U= 930 -MDAw 931 -X0M= 932 -XQo= 933 -IHF1 934 -IFN0cmluZw== 935 -Y2E= 936 -U0U= 937 -IHJv 938 -c2g= 939 -dWFs 940 -VHlwZQ== 941 -c29u 942 -bmV3 943 -ZXJu 944 -IGFn 945 -QVI= 946 -XTsK 947 -XS4= 948 -ID8= 949 -aWNhbA== 950 -IGRlcw== 951 -dXRo 952 -aXg= 953 -YXlz 954 -IHR5cGU= 955 -J3Q= 956 -YXVsdA== 957 -IGludGVy 958 -dmFy 959 -LmI= 960 -IHBhcnQ= 961 -LmQ= 962 -dXJyZW50 963 -SVQ= 964 -RU4= 965 -MzA= 966 -ZW5j 967 -KGY= 968 -cmE= 969 -dmFsdWU= 970 -Y2hv 971 -MTg= 972 -dXR0b24= 973 -b3Nl 974 -MTQ= 975 -ICE9 976 -YXRlcg== 977 -w6k= 978 -cmVhdGU= 979 -b2xs 980 -cG9z 981 -eWxl 982 -bmc= 983 -QUw= 984 -dXNpbmc= 985 -YW1lcw== 986 -IHsNCg== 987 -YXRlcw== 988 -ZWx5 989 -IHdvcms= 990 -IGVt 991 -aW5hbA== 992 -IHNw 993 -IHdoZW4= 994 -LnNldA== 995 -ICAgICAg 996 -KToK 997 -dG8= 998 -cXVpcmU= 999 -aW5kb3c= 1000 -bGVtZW50 1001 -cGVjdA== 1002 -YXNo 1003 -W2k= 1004 -IHVzZQ== 1005 -LkY= 1006 -cGVj 1007 -IGFk 1008 -b3Zl 1009 -Y2VwdGlvbg== 1010 -ZW5ndGg= 1011 -aW5jbHVkZQ== 1012 -YWRlcg== 1013 -ICAgICAgICAgICAgICAgICAgICAgICAgICAg 1014 -YXR1cw== 1015 -VGg= 1016 -aXRsZQ== 1017 -cml0 1018 -dm9pZA== 1019 -KCku 1020 -KAo= 1021 -IG9mZg== 1022 -IG90aGVy 1023 -ICYm 1024 -JzsK 1025 -bXM= 1026 -IGJlZW4= 1027 -IHRl 1028 -bWw= 1029 -Y28= 1030 -bmM= 1031 -MTM= 1032 -ZXJ2aWNl 1033 -ICU= 1034 -KioK 1035 -YW5u 1036 -YWRl 1037 -CgoKCg== 1038 -bG9jaw== 1039 -Y29uc3Q= 1040 -MTAw 1041 -cG9uc2U= 1042 -IHN1cA== 1043 -Kys= 1044 -ZGF0ZQ== 1045 -IGFjYw== 1046 -IGhhZA== 1047 -IGJ1 1048 -MjAw 1049 -IFJl 1050 -IHdlcmU= 1051 -IGZpbGU= 1052 -IHdvdWxk 1053 -IOKAnA== 1054 -dmVu 1055 -aXNz 1056 -IG91cg== 1057 -Y2xhc3M= 1058 -cmF3 1059 -IHllYXI= 1060 -RGF0YQ== 1061 -IHZhbA== 1062 -IHNvbWU= 1063 -ZnRlcg== 1064 -eXM= 1065 -IC8vLw== 1066 -cm91bmQ= 1067 -dmlldw== 1068 -IHBl 1069 -IHRoZXJl 1070 -IHNhaWQ= 1071 -ZHU= 1072 -b2Y= 1073 -bGluZQ== 1074 -Lyo= 1075 -ZHVjdA== 1076 -IGhlcg== 1077 -ICAgICAgICAgICAgIA== 1078 -UmVz 1079 -IGNv 1080 -IGNvbW0= 1081 -aXNl 1082 -bWlu 1083 -ICAgIAo= 1084 -I2luY2x1ZGU= 1085 -ZXRob2Q= 1086 -LlA= 1087 -dXRl 1088 -IGFzcw== 1089 -SW50 1090 -YXNr 1091 -bG9j 1092 -IGxpa2U= 1093 -b2R5 1094 -IGxldA== 1095 -bG9hZA== 1096 -IGFt 1097 -cm9s 1098 -IGdy 1099 -eXA= 1100 -IGFsc28= 1101 -IEl0 1102 -dXJs 1103 -aWZpYw== 1104 -b3Jz 1105 -X1A= 1106 -X24= 1107 -aWdo 1108 -IHRoYW4= 1109 -Q29t 1110 -QU4= 1111 -VUw= 1112 -YXRpbmc= 1113 -MTc= 1114 -IFRoaXM= 1115 -cmVm 1116 -X1M= 1117 -IHN0YXRpYw== 1118 -cm9sbA== 1119 -IGp1c3Q= 1120 -IHJlc3VsdA== 1121 -aWFu 1122 -aWR0aA== 1123 -IHRoZW0= 1124 -KSk7Cg== 1125 -ZGVy 1126 -cmVhaw== 1127 -Q29u 1128 -Oi8v 1129 -dWxl 1130 -Li4u 1131 -YXJjaA== 1132 -ZW1lbnQ= 1133 -IDw8 1134 -NTA= 1135 -dXNo 1136 -ZW5zZQ== 1137 -YXJy 1138 -IGludG8= 1139 -Y2Vzcw== 1140 -YW1w 1141 -aWVk 1142 -dW1lbnQ= 1143 -IFw= 1144 -XSw= 1145 -d28= 1146 -YWxz 1147 -IHdoYXQ= 1148 -YW5j 1149 -VmFsdWU= 1150 -PSc= 1151 -b2x1bQ== 1152 -IHBvcw== 1153 -YWdlcw== 1154 -YXllcg== 1155 -IHNj 1156 -dWVz 1157 -IikK 1158 -X1Q= 1159 -IGxpc3Q= 1160 -KHM= 1161 -IGNhc2U= 1162 -Q2g= 1163 -CQkJCQk= 1164 -Ly8vLy8vLy8= 1165 -cG9uZW50 1166 -IHo= 1167 -IGtu 1168 -bGV0 1169 -REU= 1170 -cmVk 1171 -IGZl 1172 -IH0sCg== 1173 -ICw= 1174 -KHQ= 1175 -IGZpcnN0 1176 -Jyk7Cg== 1177 -d29yZA== 1178 -IGltcG9ydA== 1179 -IGFjdA== 1180 -IGNoYXI= 1181 -Q1Q= 1182 -IFRy 1183 -b3BsZQ== 1184 -PXs= 1185 -CWY= 1186 -MjQ= 1187 -aWVudA== 1188 -Y2VudA== 1189 -Lmo= 1190 -bGVjdGlvbg== 1191 -KSkK 1192 -IG9ubHk= 1193 -IHByaW50 1194 -bWVy 1195 -Llc= 1196 -b2Nr 1197 -IC0t 1198 -VGV4dA== 1199 -IG9w 1200 -YW5r 1201 -IGl0cw== 1202 -IGJhY2s= 1203 -WyI= 1204 -IG5lZWQ= 1205 -IGNs 1206 -IHN1Yg== 1207 -IGxh 1208 -KCg= 1209 -LiI= 1210 -T2JqZWN0 1211 -IHN0YXJ0 1212 -ZmlsZQ== 1213 -KHNlbGY= 1214 -bmVy 1215 -ZXk= 1216 -IHVzZXI= 1217 -IGVudA== 1218 -IENvbQ== 1219 -aXRz 1220 -IENvbg== 1221 -b3VibGU= 1222 -b3dlcg== 1223 -aXRlbQ== 1224 -dmVyeQ== 1225 -IFdl 1226 -NjQ= 1227 -bGljaw== 1228 -IFE= 1229 -cGhw 1230 -dHRw 1231 -Jzo= 1232 -aWNz 1233 -IHVuZGVy 1234 -ICoK 1235 -Lkw= 1236 -KTs= 1237 -aWNlcw== 1238 -IHJlZw== 1239 -KQ0K 1240 -CXB1YmxpYw== 1241 -U1M= 1242 -IHRoZW4= 1243 -cmVhdA== 1244 -aW91cw== 1245 -Lkc= 1246 -ZWs= 1247 -aXJlY3Q= 1248 -aGVjaw== 1249 -Y3JpcHQ= 1250 -bmluZw== 1251 -IFVu 1252 -IG1heQ== 1253 -IFdo 1254 -Qm8= 1255 -SXRlbQ== 1256 -c3RydWN0 1257 -LnN0 1258 -cmVhbQ== 1259 -aWJsZQ== 1260 -bG9hdA== 1261 -IG9yZw== 1262 -dW5k 1263 -c3Vt 1264 -X2lu 1265 -Li4v 1266 -X00= 1267 -IGhvdw== 1268 -cml0ZQ== 1269 -Jwo= 1270 -VG8= 1271 -NDA= 1272 -d3c= 1273 -IHBlb3BsZQ== 1274 -aW5kZXg= 1275 -Lm4= 1276 -aHR0cA== 1277 -KG0= 1278 -ZWN0b3I= 1279 -IGluZA== 1280 -IGphdg== 1281 -XSwK 1282 -IEhl 1283 -X3N0 1284 -ZnVs 1285 -b2xl 1286 -KXsK 1287 -IHNob3VsZA== 1288 -b3B5 1289 -ZWxw 1290 -aWVy 1291 -X25hbWU= 1292 -ZXJzb24= 1293 -SU9O 1294 -b3Rl 1295 -IHRlc3Q= 1296 -IGJldA== 1297 -cnJvcg== 1298 -dWxhcg== 1299 -44A= 1300 -INA= 1301 -YnM= 1302 -dGluZw== 1303 -IG1ha2U= 1304 -VHI= 1305 -IGFmdGVy 1306 -YXJnZXQ= 1307 -Uk8= 1308 -b2x1bW4= 1309 -cmM= 1310 -X3Jl 1311 -ZGVmaW5l 1312 -MjI= 1313 -IHJpZ2h0 1314 -cmlnaHQ= 1315 -ZGF5 1316 -IGxvbmc= 1317 -W10= 1318 -KHA= 1319 -dGQ= 1320 -Y29uZA== 1321 -IFBybw== 1322 -IHJlbQ== 1323 -cHRpb25z 1324 -dmlk 1325 -Lmc= 1326 -IGV4dA== 1327 -IF9f 1328 -JykK 1329 -cGFjZQ== 1330 -bXA= 1331 -IG1pbg== 1332 -c3RhbmNl 1333 -YWly 1334 -YWN0aW9u 1335 -d2g= 1336 -dHlwZQ== 1337 -dXRpbA== 1338 -YWl0 1339 -PD8= 1340 -SUM= 1341 -dGV4dA== 1342 -IHBo 1343 -IGZs 1344 -Lk0= 1345 -Y2Nlc3M= 1346 -YnI= 1347 -Zm9yZQ== 1348 -ZXJzaW9u 1349 -KSwK 1350 -LnJl 1351 -YXRlZw== 1352 -IGxvYw== 1353 -aW5z 1354 -LXM= 1355 -dHJpYg== 1356 -IEludA== 1357 -IGFycmF5 1358 -LCI= 1359 -UHJv 1360 -KGM= 1361 -ZXNzaW9u 1362 -PgoK 1363 -IHNoZQ== 1364 -Il0= 1365 -YXBo 1366 -IGV4cA== 1367 -ZXJ0eQ== 1368 -IFNl 1369 -IHBhcg== 1370 -dW5j 1371 -RVQ= 1372 -IHJlYWQ= 1373 -cHJpbnQ= 1374 -IHJlbA== 1375 -IGZvcm0= 1376 -IGRy 1377 -RXhjZXB0aW9u 1378 -aW5wdXQ= 1379 -IHRyYW5z 1380 -IyMjIyMjIyM= 1381 -b3JkZXI= 1382 -Qnk= 1383 -IGF3 1384 -aXRpZXM= 1385 -dWZm 1386 -cGxheQ== 1387 -LmFkZA== 1388 -IOKAkw== 1389 -IHdhbnQ= 1390 -IGNvbXA= 1391 -bWVudHM= 1392 -IHx8 1393 -YXo= 1394 -YmU= 1395 -IG51bWJlcg== 1396 -IHJlcXVpcmU= 1397 -IEV4 1398 -NjA= 1399 -IGNvbA== 1400 -IGtleQ== 1401 -ZW1iZXI= 1402 -IHR3bw== 1403 -IHNpemU= 1404 -IHdoZXJl 1405 -VVQ= 1406 -cmVzdWx0 1407 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 1408 -b3VnaA== 1409 -b3JsZA== 1410 -b29k 1411 -dWNo 1412 -YXRpdmU= 1413 -Z2Vy 1414 -YXJlbnQ= 1415 -IC8q 1416 -IGFyZw== 1417 -IHdoaWxl 1418 -MjM= 1419 -KHRoaXM= 1420 -IHJlYw== 1421 -IGRpZg== 1422 -U3RhdGU= 1423 -IHNwZWM= 1424 -cmlkZQ== 1425 -X0Y= 1426 -IGxvb2s= 1427 -QU0= 1428 -aWxpdHk= 1429 -ZXRlcg== 1430 -4oCZdA== 1431 -CgoK 1432 -YXlvdXQ= 1433 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 1434 -YWdlcg== 1435 -IGNvdWxk 1436 -IGJy 1437 -ZW5kcw== 1438 -dXJlcw== 1439 -IGtub3c= 1440 -ZXRz 1441 -IElm 1442 -IFNo 1443 -Lnc= 1444 -YmFjaw== 1445 -IHNlcg== 1446 -ICs9 1447 -IGZy 1448 -KCkpOwo= 1449 -IGhhbmQ= 1450 -SW5k 1451 -VUxM 1452 -SW0= 1453 -KCk7Cgo= 1454 -IG1vc3Q= 1455 -IHRyeQ== 1456 -IG5vdw== 1457 -cm91Z2g= 1458 -Pg0K 1459 -YWNrYWdl 1460 -IGhpbQ== 1461 -Ll8= 1462 -aWZ5 1463 -IGJyZWFr 1464 -ICk7Cg== 1465 -cmVu 1466 -I2RlZmluZQ== 1467 -aXR0 1468 -IGFw 1469 -CWM= 1470 -KG4= 1471 -IFlvdQ== 1472 -OgoK 1473 -LW0= 1474 -IGV2ZXJ5 1475 -dXN0b20= 1476 -bGllbnQ= 1477 -b2N1bWVudA== 1478 -Y3JpcHRpb24= 1479 -RXJyb3I= 1480 -LWI= 1481 -0L4= 1482 -XVs= 1483 -OTk= 1484 -dHJhbnM= 1485 -IHBvaW50 1486 -IHN0ZA== 1487 -IGZpbA== 1488 -VGltZQ== 1489 -ODA= 1490 -IG1vZA== 1491 -IC0+ 1492 -IGVycm9y 1493 -YWg= 1494 -IHRleHQ= 1495 -cm9sbGVy 1496 -bG9zZQ== 1497 -cWw= 1498 -IHBvbA== 1499 -Pjwv 1500 -IHNob3c= 1501 -VXNlcg== 1502 -YXNlZA== 1503 -IHsKCg== 1504 -IGZpbmQ= 1505 -0LA= 1506 -RUQ= 1507 -c3Bhbg== 1508 -ZW51 1509 -IGN1cnJlbnQ= 1510 -IHVzZWQ= 1511 -Y2VwdA== 1512 -Y2x1ZA== 1513 -IHBsYXk= 1514 -IGxvZw== 1515 -dXRpb24= 1516 -Zmw= 1517 -IHNlZQ== 1518 -aW5kb3dz 1519 -IGhlbHA= 1520 -IHRoZXNl 1521 -IHBhc3M= 1522 -IGRvd24= 1523 -IGV2ZW4= 1524 -YXNvbg== 1525 -dWlsZA== 1526 -ZnJvbQ== 1527 -KGQ= 1528 -IGJs 1529 -bGFiZWw= 1530 -ZWxzZQ== 1531 -0LU= 1532 -ICgh 1533 -aXplZA== 1534 -KCks 1535 -IG9i 1536 -IGl0ZW0= 1537 -dW1w 1538 -VVI= 1539 -b3Ju 1540 -IGRvbg== 1541 -U2U= 1542 -bWFu 1543 -Mjc= 1544 -YW1wbGU= 1545 -dG4= 1546 -PT09PT09PT09PT09PT09PQ== 1547 -SGU= 1548 -Z3JhbQ== 1549 -IGRpZA== 1550 -d24= 1551 -X2g= 1552 -aXZlcg== 1553 -IHNt 1554 -IHRocm91Z2g= 1555 -IEFu 1556 -Y2hl 1557 -IGludg== 1558 -b3VzZQ== 1559 -IGVz 1560 -IE5ldw== 1561 -ZXhwb3J0 1562 -bWFyeQ== 1563 -dXRv 1564 -bGVy 1565 -IGxhc3Q= 1566 -IGV2ZW50 1567 -dHJ5 1568 -77w= 1569 -aWx5 1570 -aWduZWQ= 1571 -aW5lcw== 1572 -b2xsb3c= 1573 -aWNlbnNl 1574 -c29sZQ== 1575 -bGVhcg== 1576 -KGludA== 1577 -IGFnYWlu 1578 -IGhpZ2g= 1579 -aHRtbA== 1580 -SW5kZXg= 1581 -dXRob3I= 1582 -IC8qKgo= 1583 -IGxpbmU= 1584 -RXZlbnQ= 1585 -X0Q= 1586 -IGRvZXM= 1587 -aXRpYWw= 1588 -IGNy 1589 -YXJz 1590 -Mjg= 1591 -IHRlbQ== 1592 -Y2F1c2U= 1593 -ZmFjZQ== 1594 -IGA= 1595 -X0E= 1596 -QnV0dG9u 1597 -YXR1cmU= 1598 -ZWN0ZWQ= 1599 -RVM= 1600 -aXN0ZXI= 1601 -CQo= 1602 -IGJlZm9yZQ== 1603 -YWxl 1604 -b3RoZXI= 1605 -IGJlY2F1c2U= 1606 -cm9pZA== 1607 -IGVk 1608 -aWs= 1609 -cmVn 1610 -IERl 1611 -IGRpc3Q= 1612 -fSwK 1613 -IHN0YXRl 1614 -IGNvbnM= 1615 -cmludA== 1616 -YXR0 1617 -IGhlcmU= 1618 -aW5lZA== 1619 -IGZpbmFs 1620 -ICIi 1621 -S2V5 1622 -TE8= 1623 -IGRlbA== 1624 -cHR5 1625 -dGhpbmc= 1626 -MjY= 1627 -IEFuZA== 1628 -IHJ1bg== 1629 -IFg= 1630 -eW0= 1631 -LmFwcA== 1632 -IHZlcnk= 1633 -Y2Vz 1634 -X04= 1635 -YXJlZA== 1636 -d2FyZA== 1637 -bGlzdA== 1638 -aXRlZA== 1639 -b2xvZw== 1640 -aXRjaA== 1641 -Qm94 1642 -aWZl 1643 -MzM= 1644 -IGFj 1645 -IG1vZGVs 1646 -IG1vbg== 1647 -IHdheQ== 1648 -bGV0ZQ== 1649 -IGNhbGw= 1650 -IGF0dA== 1651 -IGNhbA== 1652 -dmVydA== 1653 -IGRlYw== 1654 -bGVhc2U= 1655 -b3Vu 1656 -IH0pOwo= 1657 -ZnI= 1658 -Zm9ybWF0aW9u 1659 -ZXRhaWw= 1660 -IG51bQ== 1661 -YWo= 1662 -cXVlcnk= 1663 -IHdlbGw= 1664 -IG9iamVjdA== 1665 -IEFz 1666 -IHllYXJz 1667 -Q29sb3I= 1668 -SVM= 1669 -IGRlZmF1bHQ= 1670 -V2g= 1671 -IGlucw== 1672 -YWludA== 1673 -IGphdmE= 1674 -IHNpbQ== 1675 -IEFy 1676 -bW9u 1677 -dGls 1678 -KCk7DQo= 1679 -KTo= 1680 -U2V0 1681 -Mjk= 1682 -YXR0ZXI= 1683 -IHZpZXc= 1684 -IHByZXM= 1685 -YXJyYXk= 1686 -V2U= 1687 -QXQ= 1688 -IGJlbA== 1689 -IG1hbnk= 1690 -MjE= 1691 -TWFu 1692 -ZW5kZXI= 1693 -IGJlaW5n 1694 -IGdvb2Q= 1695 -CQkJCQkJ 1696 -YXRpb25hbA== 1697 -d2FyZQ== 1698 -LmxvZw== 1699 -ew0K 1700 -IHVzaW5n 1701 -X0I= 1702 -IDo9 1703 -X3c= 1704 -aXN0cw== 1705 -bGlzaA== 1706 -IHN0dWQ= 1707 -IEFs 1708 -IGd1 1709 -Y29uZmln 1710 -dXJpbmc= 1711 -dGltZQ== 1712 -b2tlbg== 1713 -YW1lc3BhY2U= 1714 -IHJlcXVlc3Q= 1715 -IGNoaWxk 1716 -IMM= 1717 -bG9i 1718 -IHBhcmFt 1719 -IH0NCg== 1720 -MDE= 1721 -IGVjaG8= 1722 -ZnVuY3Rpb24= 1723 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 1724 -cHM= 1725 -RWxlbWVudA== 1726 -YWxr 1727 -bGljYXRpb24= 1728 -Ynk= 1729 -U2l6ZQ== 1730 -cmF3aW5n 1731 -IHBlcnNvbg== 1732 -ICAgICAgICAgICAgICAgICA= 1733 -XG4= 1734 -b2JqZWN0 1735 -aW5jZQ== 1736 -RW4= 1737 -RmlsZQ== 1738 -dWY= 1739 -ZmZlY3Q= 1740 -QUM= 1741 -IHN0eWxl 1742 -c3VtbWFyeQ== 1743 -IHF1ZQ== 1744 -X3I= 1745 -ICgk 1746 -TW9kZWw= 1747 -aWRlbnQ= 1748 -IG1ldGhvZA== 1749 -SUw= 1750 -b3R0 1751 -bGVzcw== 1752 -SU5H 1753 -ICgp 1754 -IGV4cGVjdA== 1755 -eW5j 1756 -cGFja2FnZQ== 1757 -MzU= 1758 -dXJz 1759 -IHByb3Q= 1760 -Li8= 1761 -cHJl 1762 -ICkK 1763 -bWE= 1764 -IHN1cg== 1765 -IGZvdW5k 1766 -SW5mbw== 1767 -cGFy 1768 -aW1lcw== 1769 -LmU= 1770 -YWlucw== 1771 -IHBvc3Q= 1772 -LWQ= 1773 -NDU= 1774 -b2xlYW4= 1775 -IHNs 1776 -UEU= 1777 -IHN1Y2g= 1778 -c2VsZWN0 1779 -YWluZXI= 1780 -IHRoaW5r 1781 -IGRpZmZlcg== 1782 -LnI= 1783 -LyoqCg== 1784 -RkY= 1785 -b29s 1786 -cGxhdGU= 1787 -cXVhbA== 1788 -IEZvcg== 1789 -IG11Y2g= 1790 -dWM= 1791 -KG5ldw== 1792 -b2R1bGU= 1793 -IHNvbQ== 1794 -IGh0dHA= 1795 -IExpc3Q= 1796 -IGNvdW50 1797 -IGluc3Q= 1798 -Y2hhcg== 1799 -bWl0 1800 -Lmlk 1801 -YWtpbmc= 1802 -IGdlbmVy 1803 -cHg= 1804 -dmljZQ== 1805 -Mzc= 1806 -X2RhdGE= 1807 -IE5VTEw= 1808 -fQ0K 1809 -aWRk 1810 -44CC 1811 -IG1lZA== 1812 -b3Jn 1813 -aWRlcg== 1814 -YWNoZQ== 1815 -d29yaw== 1816 -IGNoZWNr 1817 -d2Vlbg== 1818 -ICgo 1819 -dGhl 1820 -YW50cw== 1821 -Pjw= 1822 -LkI= 1823 -LWM= 1824 -IG9wZW4= 1825 -IGVzdA== 1826 -ICAgICAgICAK 1827 -IG5leHQ= 1828 -SU0= 1829 -0YI= 1830 -T1Q= 1831 -w7M= 1832 -IGZvbGxvdw== 1833 -Y29udGVudA== 1834 -ICAgICAgICAgICAg 1835 -IGluY2x1ZA== 1836 -SEU= 1837 -IFJlcw== 1838 -IGhyZWY= 1839 -0Lg= 1840 -IGNhcg== 1841 -eXBlcw== 1842 -aW1hZ2U= 1843 -VW4= 1844 -IGJvb2w= 1845 -QUQ= 1846 -IGdhbWU= 1847 -LkZvcm0= 1848 -cm93cw== 1849 -Ki8= 1850 -dmVsb3A= 1851 -LkRyYXdpbmc= 1852 -IHBhdGg= 1853 -aXNpb24= 1854 -IGVhY2g= 1855 -IFBs 1856 -X3R5cGU= 1857 -UGF0aA== 1858 -bmVjdGlvbg== 1859 -IGF2 1860 -Jyku 1861 -IHN1cHBvcnQ= 1862 -RU5U 1863 -cmVt 1864 -Iiku 1865 -IG93bg== 1866 -IGNvcg== 1867 -Y291bnQ= 1868 -bWlzcw== 1869 -dWFsbHk= 1870 -IG1lbQ== 1871 -c3Rk 1872 -aWVuY2U= 1873 -c2VhcmNo 1874 -IgoK 1875 -Rm9ybQ== 1876 -IHNleA== 1877 -ZW5hbWU= 1878 -IHNpZ24= 1879 -IGV0 1880 -ICAgICAgICAgIA== 1881 -Jywn 1882 -IEFwcA== 1883 -IHRob3Nl 1884 -b2Zm 1885 -IGVycg== 1886 -IHN5c3RlbQ== 1887 -IGJlc3Q= 1888 -Y29kZQ== 1889 -IHNhbWU= 1890 -IGRp 1891 -dXNz 1892 -IGNyZWF0ZQ== 1893 -YXRoZXI= 1894 -QXJyYXk= 1895 -Lmlu 1896 -ZmU= 1897 -U2VydmljZQ== 1898 -VU4= 1899 -YXRz 1900 -IFo= 1901 -YWx0aA== 1902 -IG1hZGU= 1903 -dHJ1ZQ== 1904 -QUI= 1905 -IG1hcms= 1906 -cmlk 1907 -aWZpZWQ= 1908 -LA0K 1909 -eW4= 1910 -cHJlc3M= 1911 -IGdyb3Vw 1912 -IGZpbg== 1913 -IExpY2Vuc2U= 1914 -RmllbGQ= 1915 -ZWdlcg== 1916 -IHdvcmxk 1917 -aW5lc3M= 1918 -dHk= 1919 -IHByb2Nlc3M= 1920 -KGI= 1921 -IGNyZQ== 1922 -YXJu 1923 -aXZlcw== 1924 -IG1haW4= 1925 -aWRlbw== 1926 -MzY= 1927 -X2c= 1928 -QUc= 1929 -dmFsaWQ= 1930 -aW1n 1931 -UEk= 1932 -IGNvbG9y 1933 -IHJlcG9ydA== 1934 -IHRha2U= 1935 -cmli 1936 -T00= 1937 -IGRheQ== 1938 -UmVxdWVzdA== 1939 -IHNr 1940 -YmVycw== 1941 -CXM= 1942 -LkFkZA== 1943 -b290 1944 -SW1hZ2U= 1945 -IGNvbXBsZQ== 1946 -b2xsZWN0aW9u 1947 -IHRvcA== 1948 -IGZyZWU= 1949 -QVM= 1950 -RGU= 1951 -IE9u 1952 -SUc= 1953 -OTA= 1954 -ZXRh 1955 -RGF0ZQ== 1956 -IGFjdGlvbg== 1957 -MzQ= 1958 -T3Zlcg== 1959 -aXRvcg== 1960 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 1961 -bm90 1962 -IGluZGV4 1963 -aGVy 1964 -aWNvbg== 1965 -T24= 1966 -Ow0KDQo= 1967 -aXZpdHk= 1968 -bWFuZA== 1969 -LldpbmRvd3M= 1970 -T0w= 1971 -IHJlYWw= 1972 -IG1heA== 1973 -bGFuZA== 1974 -Li4uLg== 1975 -cmFwaA== 1976 -IGJ1aWxk 1977 -bGVn 1978 -YXNzd29yZA== 1979 -PwoK 1980 -4oCm 1981 -b29r 1982 -dWNr 1983 -IG1lc3NhZ2U= 1984 -dGVzdA== 1985 -aXZlcnM= 1986 -Mzg= 1987 -IGlucHV0 1988 -IGFydA== 1989 -IGJldHdlZW4= 1990 -R2V0 1991 -ZW50ZXI= 1992 -Z3JvdW5k 1993 -ZW5l 1994 -w6E= 1995 -Lmxlbmd0aA== 1996 -Tm9kZQ== 1997 -KGk= 1998 -Q2xhc3M= 1999 -Zm9y 2000 -IOKAlA== 2001 -dGVu 2002 -b2lu 2003 -IGtl 2004 -dWk= 2005 -IElO 2006 -IHRhYmxl 2007 -c3Vi 2008 -IExl 2009 -IGhlYWQ= 2010 -IG11c3Q= 2011 -Ly8vLy8vLy8vLy8vLy8vLw== 2012 -LnV0aWw= 2013 -Q29udGV4dA== 2014 -IG9yZGVy 2015 -IG1vdg== 2016 -b3Zlcg== 2017 -IGNvbnRpbg== 2018 -IHNheQ== 2019 -c3RhdGlj 2020 -LlRleHQ= 2021 -IGNsYXNzTmFtZQ== 2022 -cGFueQ== 2023 -IHRlcg== 2024 -aGVhZA== 2025 -cmc= 2026 -IHByb2R1Y3Q= 2027 -VGhpcw== 2028 -LuKAnQ== 2029 -IEJ1dA== 2030 -NzA= 2031 -bG95 2032 -IGRvdWJsZQ== 2033 -c2c= 2034 -IHBsYWNl 2035 -Lng= 2036 -bWVzc2FnZQ== 2037 -IGluZm9ybWF0aW9u 2038 -cHJpdmF0ZQ== 2039 -IG9wZXI= 2040 -Y2Vk 2041 -ZGI= 2042 -Ij48Lw== 2043 -UGFyYW0= 2044 -aWNsZQ== 2045 -IHdlZWs= 2046 -IHByb3A= 2047 -dGFibGU= 2048 -aWRnZXQ= 2049 -cGxhY2U= 2050 -UHJvcA== 2051 -IEFsbA== 2052 -ZWxz 2053 -Ym94 2054 -LgoKCgo= 2055 -LlI= 2056 -IFRv 2057 -aXRlcg== 2058 -U2g= 2059 -dXJhdGlvbg== 2060 -b2xkZXI= 2061 -X2xpc3Q= 2062 -Y29tZQ== 2063 -IHN3 2064 -aXphdGlvbg== 2065 -CWZvcg== 2066 -Ymw= 2067 -IHByb2dyYW0= 2068 -KGU= 2069 -YXBl 2070 -Y2hlY2s= 2071 -LkZvcm1z 2072 -IHVuZA== 2073 -YXRlZ29yeQ== 2074 -NzU= 2075 -YWdz 2076 -IHJlc3BvbnNl 2077 -VVM= 2078 -cmVxdWVzdA== 2079 -IHN0cnVjdA== 2080 -ZXNjcmlwdGlvbg== 2081 -IGNvZGU= 2082 -X0g= 2083 -dWZmZXI= 2084 -IHdpdGhvdXQ= 2085 -bG9iYWw= 2086 -TWFuYWdlcg== 2087 -aWx0ZXI= 2088 -UE8= 2089 -CXRoaXM= 2090 -b3B0aW9u 2091 -IHNvbA== 2092 -ID09PQ== 2093 -YWtlcw== 2094 -Q29udHJvbGxlcg== 2095 -NDQ= 2096 -TWVzc2FnZQ== 2097 -IHJlZg== 2098 -ZXZlcg== 2099 -IFNv 2100 -YWluaW5n 2101 -LmFwcGVuZA== 2102 -IHN0aWxs 2103 -IHByb3ZpZA== 2104 -IGFzc2VydA== 2105 -bWVk 2106 -IGNhcA== 2107 -dXNpbmVzcw== 2108 -IHJlcA== 2109 -dGluZ3M= 2110 -dmVk 2111 -Lk4= 2112 -YXBp 2113 -T0Q= 2114 -IGZpZWxk 2115 -aXZlbg== 2116 -b3Rv 2117 -4oCc 2118 -Y29s 2119 -KHg= 2120 -Z2h0 2121 -UmVzdWx0 2122 -Q29kZQ== 2123 -Lmlz 2124 -bGluaw== 2125 -IGNvdXI= 2126 -QW4= 2127 -IHRlYW0= 2128 -CWludA== 2129 -aWZ0 2130 -NTU= 2131 -IHNlY29uZA== 2132 -IGdvaW5n 2133 -IHJhbmdl 2134 -X0U= 2135 -bmVzcw== 2136 -Mzk= 2137 -IGZhbQ== 2138 -IG5pbA== 2139 -IENvbnQ= 2140 -YWlsYWJsZQ== 2141 -dXRlcw== 2142 -YXRhYg== 2143 -IGZhY3Q= 2144 -IHZpcw== 2145 -KCY= 2146 -IEFO 2147 -MzE= 2148 -QWw= 2149 -dGl0bGU= 2150 -IGFuZHJvaWQ= 2151 -Q0U= 2152 -XCI= 2153 -aXJ0 2154 -IHdyaXQ= 2155 -0L0= 2156 -CW0= 2157 -ZnR3YXJl 2158 -b25k 2159 -IHJldA== 2160 -b3NpdGlvbg== 2161 -IGhvbWU= 2162 -IGxlZnQ= 2163 -YXJncw== 2164 -bWVyaWM= 2165 -NDg= 2166 -IGRpcmVjdA== 2167 -b2Np 2168 -UGw= 2169 -QXM= 2170 -cmV0 2171 -YWRv 2172 -T2Y= 2173 -Y2hu 2174 -IEdldA== 2175 -ZWU= 2176 -cm9zcw== 2177 -KCk7 2178 -X19fXw== 2179 -LnBo 2180 -SXQ= 2181 -b3V0ZQ== 2182 -IGV4cGVy 2183 -Y2hvb2w= 2184 -d3d3 2185 -fSw= 2186 -IGFsbG93 2187 -IMI= 2188 -KCkp 2189 -c2l6ZQ== 2190 -aXNt 2191 -YWk= 2192 -dHJhY3Q= 2193 -YW5l 2194 -Li4uCgo= 2195 -Y29udGV4dA== 2196 -IGJlZw== 2197 -Q0g= 2198 -IHBhZ2U= 2199 -aGlw 2200 -bm8= 2201 -Y29yZQ== 2202 -c3A= 2203 -IGRpZmZlcmVudA== 2204 -aWFibGU= 2205 -IE1l 2206 -X0lO 2207 -YnV0dG9u 2208 -IElz 2209 -ZXJ2aWNlcw== 2210 -IGNh 2211 -IGFyb3VuZA== 2212 -QXBw 2213 -cmF0aW9u 2214 -IHJlY2U= 2215 -IHJlYWxseQ== 2216 -IGltYWdl 2217 -IHRhcmdldA== 2218 -IGRlcA== 2219 -b3B5cmlnaHQ= 2220 -dHJh 2221 -aW5nbGU= 2222 -aXRhbA== 2223 -TGF5b3V0 2224 -IGJvdGg= 2225 -T3ZlcnJpZGU= 2226 -YXJt 2227 -PT4= 2228 -YXRlcmlhbA== 2229 -aWxlZA== 2230 -IHB1dA== 2231 -UXU= 2232 -0YA= 2233 -dW5n 2234 -bWFw 2235 -CQkJCQkJCQk= 2236 -IGxldmVs 2237 -Q29tcG9uZW50 2238 -Ym9vaw== 2239 -Y3JlZW4= 2240 -X1JF 2241 -IGNvbmZpZw== 2242 -44E= 2243 -T3I= 2244 -LmRhdGE= 2245 -IGRvY3VtZW50 2246 -Iiwi 2247 -dHJpYnV0ZQ== 2248 -dXg= 2249 -TG9n 2250 -ZmVyZW5jZQ== 2251 -cG9zdA== 2252 -X2U= 2253 -IGxvY2Fs 2254 -YW5kb20= 2255 -YXNzZXJ0 2256 -VmFs 2257 -bGVjdGVk 2258 -aW5h 2259 -YXRhYmFzZQ== 2260 -QWRk 2261 -IGNvbnRlbnQ= 2262 -LnByaW50 2263 -c2lnbmVk 2264 -cmlj 2265 -LiIKCg== 2266 -IGZh 2267 -IQoK 2268 -LWY= 2269 -aXZlZA== 2270 -IHF1ZXN0 2271 -LmV4 2272 -IGZsb2F0 2273 -IGRldmVsb3A= 2274 -0L7Q 2275 -TWFw 2276 -YWRpbmc= 2277 -IHBvc3M= 2278 -VUU= 2279 -bmFtZXNwYWNl 2280 -X08= 2281 -CWI= 2282 -LkdldA== 2283 -Pig= 2284 -anNvbg== 2285 -ZXRhaWxz 2286 -NjY= 2287 -IHRvbw== 2288 -IGV4dGVuZHM= 2289 -IE5vbmU= 2290 -IGZvcmU= 2291 -KFN0cmluZw== 2292 -Zm9ybWF0 2293 -IGdyZWF0 2294 -aW50ZXI= 2295 -Y2FsZQ== 2296 -0YE= 2297 -cm9u 2298 -aXZpbmc= 2299 -RW50 2300 -ZW5jeQ== 2301 -eHQ= 2302 -b3k= 2303 -MDU= 2304 -IG1vbnRo 2305 -IGhhcHA= 2306 -IHN1cGVy 2307 -YmFy 2308 -ZGVmYXVsdA== 2309 -X2Rl 2310 -b3Jkcw== 2311 -bG4= 2312 -KHsK 2313 -IEluZA== 2314 -YXNlcw== 2315 -IHRpdGxl 2316 -IGNvbnRleHQ= 2317 -MDg= 2318 -b2g= 2319 -LXA= 2320 -RW0= 2321 -IG1ldA== 2322 -VGVzdA== 2323 -IGxpZmU= 2324 -X3Y= 2325 -IFVT 2326 -VUk= 2327 -b2NhdGlvbg== 2328 -bWQ= 2329 -IFsK 2330 -IF0= 2331 -c3c= 2332 -IGluY3Jl 2333 -c2NyaXB0 2334 -ZW50aWFs 2335 -d2F5cw== 2336 -LmRl 2337 -IHNyYw== 2338 -IGNhdGNo 2339 -IEFtZXJpYw== 2340 -Ly8K 2341 -ICAgICAgICAgICAgICA= 2342 -IHBheQ== 2343 -cGxpdA== 2344 -4oCU 2345 -IGNvdW4= 2346 -b2Jq 2347 -LnBocA== 2348 -IGNoYW5nZQ== 2349 -ZXRoaW5n 2350 -J3Jl 2351 -YXN0ZXI= 2352 -bG9z 2353 -bGF0aW9u 2354 -ICAK 2355 -TGU= 2356 -w6Q= 2357 -KHs= 2358 -cmVhZHk= 2359 -IE5v 2360 -IHBvc2l0aW9u 2361 -IG9sZA== 2362 -IGJvb2s= 2363 -YWJsZWQ= 2364 -YnVn 2365 -MjAy 2366 -SGFuZA== 2367 -fTsKCg== 2368 -aXNwbGF5 2369 -YXZpbmc= 2370 -MDQ= 2371 -IGdvdmVy 2372 -IHZlcnNpb24= 2373 -U3lzdGVt 2374 -bmVjdA== 2375 -cmVzcG9uc2U= 2376 -U3R5bGU= 2377 -VXA= 2378 -YW5ndQ== 2379 -IHRocmVl 2380 -aW5pdA== 2381 -ZXJv 2382 -IGxhdw== 2383 -ZW5kaWY= 2384 -IGJhc2U= 2385 -ZW1haWw= 2386 -KGw= 2387 -X1Y= 2388 -IGNvbmY= 2389 -QVRF 2390 -IGR1cmluZw== 2391 -dGVz 2392 -IGNvbnNvbGU= 2393 -IFBy 2394 -IHNwZQ== 2395 -dmVz 2396 -NjU= 2397 -cGF0aA== 2398 -aWFsb2c= 2399 -ZGl0aW9u 2400 -X3Rv 2401 -YXJkcw== 2402 -IGFnYWluc3Q= 2403 -ZXR3b3Jr 2404 -IFBo 2405 -X0w= 2406 -Y3Vy 2407 -aW1pdA== 2408 -V2l0aA== 2409 -IHBvd2Vy 2410 -aXVt 2411 -JzsKCg== 2412 -IHdvbQ== 2413 -bGVmdA== 2414 -b3VyY2Vz 2415 -YXRyaQ== 2416 -IElt 2417 -IE1hbg== 2418 -b3J0aA== 2419 -JHs= 2420 -ODg= 2421 -cXVhbHM= 2422 -ZXNl 2423 -X3NpemU= 2424 -IGlzcw== 2425 -b3RhbA== 2426 -LWc= 2427 -aXF1ZQ== 2428 -cmFtZQ== 2429 -IHdpZHRo 2430 -ZXJn 2431 -KSg= 2432 -aXR0bGU= 2433 -VFI= 2434 -IFRoZXk= 2435 -ZW5jZXM= 2436 -MDI= 2437 -cmw= 2438 -b25z 2439 -IGxhYmVs 2440 -Lnk= 2441 -LXQ= 2442 -dXBkYXRl 2443 -YW5lbA== 2444 -c2M= 2445 -LnRv 2446 -IHByb2plY3Q= 2447 -w7w= 2448 -IGVsZW1lbnQ= 2449 -IHN1Y2Nlc3M= 2450 -CQkK 2451 -LnNo 2452 -cmFt 2453 -Y2hlZA== 2454 -KCkpCg== 2455 -ICgK 2456 -IGRhdGU= 2457 -IHRvdA== 2458 -X1NU 2459 -QWxs 2460 -aWZpY2F0aW9u 2461 -CXZhcg== 2462 -IHRyaQ== 2463 -Y2hlbQ== 2464 -bXk= 2465 -IGJpZw== 2466 -IEFk 2467 -IEF0 2468 -b3Rz 2469 -bnVt 2470 -QWN0 2471 -IG1hcA== 2472 -ZXJh 2473 -Y29wZQ== 2474 -LiQ= 2475 -LOKAnQ== 2476 -IHBvcA== 2477 -IGZldw== 2478 -IGxlbg== 2479 -dWlk 2480 -ZXRlcnM= 2481 -dWxlcw== 2482 -w60= 2483 -c291cmNl 2484 -aHR0cHM= 2485 -IGRlbQ== 2486 -IGVhcg== 2487 -IyMjIyMjIyMjIyMjIyMjIw== 2488 -IG1hdGNo 2489 -b3JpZXM= 2490 -NDk= 2491 -YWNlcw== 2492 -IENs 2493 -IG5vZGU= 2494 -Nzg= 2495 -aXJj 2496 -bG9jYWw= 2497 -dW5pdHk= 2498 -fTsK 2499 -IGFub3RoZXI= 2500 -PDw= 2501 -b2dsZQ== 2502 -IHNpdA== 2503 -ZXdvcms= 2504 -VEU= 2505 -Lkk= 2506 -TlM= 2507 -b2xvZ3k= 2508 -b3VnaHQ= 2509 -LkNvbnQ= 2510 -Pj4= 2511 -IGNhcmU= 2512 -c3RhdGU= 2513 -CXByaXZhdGU= 2514 -IGVmZmVjdA== 2515 -Kysp 2516 -X2ZpbGU= 2517 -ZW5kaW5n 2518 -TGluZQ== 2519 -Rm9y 2520 -aW9y 2521 -IFNj 2522 -IGZ1bg== 2523 -LlNpemU= 2524 -CWVsc2U= 2525 -XSk= 2526 -c3RhcnQ= 2527 -dmlvdXM= 2528 -IH0s 2529 -b3Vycw== 2530 -IGxlZw== 2531 -IHNlcnZpY2U= 2532 -IHNpbmNl 2533 -aXJvbg== 2534 -TGFiZWw= 2535 -IG5vbg== 2536 -IGxvcw== 2537 -aWN0aW9u 2538 -IGZ1bGw= 2539 -YWN0ZXI= 2540 -Ym9hcmQ= 2541 -Z3Jlc3M= 2542 -IHR1cm4= 2543 -aXRoZXI= 2544 -MDk= 2545 -LnNpemU= 2546 -IGJvZHk= 2547 -cmVzaA== 2548 -ZXR1cm4= 2549 -MTk5 2550 -KF8= 2551 -eWxlcw== 2552 -b3JtYWw= 2553 -cGk= 2554 -IHNvbWV0aGluZw== 2555 -IS0t 2556 -dWludA== 2557 -IHByb2R1 2558 -IHN0YW5k 2559 -IHByb2JsZQ== 2560 -IGF2YWlsYWJsZQ== 2561 -bXQ= 2562 -IEJs 2563 -IC4uLg== 2564 -IGJsb2Nr 2565 -SW5wdXQ= 2566 -IGtlZXA= 2567 -Q291bnQ= 2568 -b3Blbg== 2569 -IFsn 2570 -IHRocm93 2571 -dWlsZGVy 2572 -QWN0aW9u 2573 -IHRoaW5ncw== 2574 -VHJ1ZQ== 2575 -IHVybA== 2576 -IEJv 2577 -cHJpbnRm 2578 -IHJlZA== 2579 -anM= 2580 -LmNyZWF0ZQ== 2581 -IE9y 2582 -U3RhdHVz 2583 -SW5zdGFuY2U= 2584 -IGNvbnRyb2w= 2585 -IGNvbWU= 2586 -IGN1c3RvbQ== 2587 -bG9jYXRpb24= 2588 -MDc= 2589 -bW9kZWw= 2590 -IA0K 2591 -IHNvdXJjZQ== 2592 -IGVhcw== 2593 -Lm91dA== 2594 -XQoK 2595 -b25leQ== 2596 -IGF3YWl0 2597 -IHBhcnRpYw== 2598 -QVA= 2599 -dWJsaXNo 2600 -b2Rlcw== 2601 -X3Bybw== 2602 -cGx5 2603 -cml0ZXI= 2604 -IHByb3Y= 2605 -IG1pbGw= 2606 -SFQ= 2607 -XSkK 2608 -IGNoYW5n 2609 -IGFzaw== 2610 -ICAgICAgICAgICAgICAgICAgICAg 2611 -IG91dHB1dA== 2612 -IGVtYWls 2613 -Njg= 2614 -LnB1c2g= 2615 -IH0NCg0K 2616 -aW5hdGlvbg== 2617 -NDc= 2618 -YXRyaXg= 2619 -VGFibGU= 2620 -dWNjZXNz 2621 -XSk7Cg== 2622 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 2623 -IGRpc2M= 2624 -KFs= 2625 -IGJ1c2luZXNz 2626 -aGVpZ2h0 2627 -Lmh0bWw= 2628 -dGE= 2629 -ZmllbGQ= 2630 -IHJlcXVpcmVk 2631 -X1I= 2632 -IGdvdmVybg== 2633 -fQ0KDQo= 2634 -bGV4 2635 -NTAw 2636 -Liw= 2637 -IFNldA== 2638 -dXJjaA== 2639 -Ly8v 2640 -dHM= 2641 -YWY= 2642 -IG1pZ2h0 2643 -aXN0b3J5 2644 -U3Ry 2645 -IG5ldmVy 2646 -UmVzcG9uc2U= 2647 -YXJzZQ== 2648 -YWRh 2649 -IEhvdw== 2650 -ICop 2651 -IDs= 2652 -IGhhcmQ= 2653 -QWQ= 2654 -IGludGVybg== 2655 -dXNlZA== 2656 -KGRhdGE= 2657 -bW9k 2658 -YW5uZWw= 2659 -IG5w 2660 -dWdn 2661 -IC8+Cg== 2662 -IGNhbGxlZA== 2663 -Ym9keQ== 2664 -IGNobw== 2665 -KHI= 2666 -X3NldA== 2667 -aXJk 2668 -ID49 2669 -IH07Cg== 2670 -IG9wdGlvbnM= 2671 -IEdlbmVy 2672 -IGhlaWdodA== 2673 -UG9pbnQ= 2674 -WW91 2675 -ZXR5 2676 -Q2xpY2s= 2677 -IHNtYWxs 2678 -IGlkZQ== 2679 -IGFjY2Vzcw== 2680 -YW5ndWFnZQ== 2681 -IHByb3RlY3RlZA== 2682 -IGpvYg== 2683 -IFRoZXJl 2684 -RGVm 2685 -IGFkZHJlc3M= 2686 -IHVpbnQ= 2687 -Tm90 2688 -b28= 2689 -YXBz 2690 -PGRpdg== 2691 -YWluZWQ= 2692 -YXR1cg== 2693 -IHN1bQ== 2694 -LXc= 2695 -IERhdGU= 2696 -IGxpdHRsZQ== 2697 -IGZyaQ== 2698 -WVBF 2699 -IHBvcnQ= 2700 -ZWg= 2701 -cHJpbmc= 2702 -X3BhdGg= 2703 -IHN0YXR1cw== 2704 -MDY= 2705 -YWlt 2706 -Ym9vbA== 2707 -IGFwcGU= 2708 -IG9z 2709 -Lm5hbWU= 2710 -ZW5zaW9u 2711 -X0c= 2712 -IHVwZGF0ZQ== 2713 -Q29uZmln 2714 -YWZm 2715 -RVJS 2716 -IDw9 2717 -YXRlbHk= 2718 -I2lm 2719 -dWN0aW9u 2720 -OTU= 2721 -IFRl 2722 -IGxpbms= 2723 -IFVzZXI= 2724 -LmZpbmQ= 2725 -Lm9yZw== 2726 -bWU= 2727 -IGdpdmVu 2728 -T3V0 2729 -I2VuZGlm 2730 -IGJldHRlcg== 2731 -UGFnZQ== 2732 -IGZlZWw= 2733 -ZW5u 2734 -TUw= 2735 -IGFscmVhZHk= 2736 -IGluY2x1ZGluZw== 2737 -b29nbGU= 2738 -cnU= 2739 -aWNhbGx5 2740 -cHJvcA== 2741 -bGVhbg== 2742 -b3V0ZXI= 2743 -IGFsd2F5cw== 2744 -b3JkaW5n 2745 -SWY= 2746 -b3JhZ2U= 2747 -IHBhcmVudA== 2748 -dmlz 2749 -CQkJCQkJCQ== 2750 -IGdvdA== 2751 -c3RhbmQ= 2752 -IGxlc3M= 2753 -L3M= 2754 -IEFzcw== 2755 -YXB0 2756 -aXJlZA== 2757 -IEFkZA== 2758 -IGFjY291bnQ= 2759 -cGxveQ== 2760 -IGRlcg== 2761 -cmVzZW50 2762 -IGxvdA== 2763 -IHZhbGlk 2764 -CWQ= 2765 -IGJpdA== 2766 -cG9uZW50cw== 2767 -IGZvbGxvd2luZw== 2768 -X2V4 2769 -U09O 2770 -IHN1cmU= 2771 -b2NpYWw= 2772 -IHByb20= 2773 -ZXJ0aWVz 2774 -aGVhZGVy 2775 -LnBybw== 2776 -IGJvb2xlYW4= 2777 -IHNlYXJjaA== 2778 -a2Vu 2779 -IG9yaWc= 2780 -IGVy 2781 -RWQ= 2782 -RU0= 2783 -YXV0 2784 -bGluZw== 2785 -YWxpdHk= 2786 -QnlJZA== 2787 -YmVk 2788 -CWNhc2U= 2789 -NDY= 2790 -ZXRoZXI= 2791 -cG9zaXQ= 2792 -IGludmVzdA== 2793 -IE9S 2794 -IHNheXM= 2795 -bWlzc2lvbg== 2796 -QU1F 2797 -IHRlbXA= 2798 -b2Fk 2799 -IHJlc3Q= 2800 -aW5mbw== 2801 -IGludGVyZXN0 2802 -QXJn 2803 -IHBlcmZvcm0= 2804 -cG9ucw== 2805 -IFZpZXc= 2806 -IHZlcg== 2807 -bGli 2808 -KGNvbnN0 2809 -VXRpbA== 2810 -TGlzdGVuZXI= 2811 -YXJnZQ== 2812 -Nzc= 2813 -IG11bHQ= 2814 -IGRpZQ== 2815 -IHNpdGU= 2816 -Li4vLi4v 2817 -RUw= 2818 -IHZhbHVlcw== 2819 -IH0pCg== 2820 -cGVu 2821 -Tm8= 2822 -aWNybw== 2823 -IGJlaA== 2824 -ICcuLw== 2825 -YWN5 2826 -cmVj 2827 -KCktPg== 2828 -CSAgIA== 2829 -Iikp 2830 -Q29udGVudA== 2831 -X1c= 2832 -cGxlbWVudA== 2833 -IHdvbg== 2834 -IHZpZGVv 2835 -YWRp 2836 -cG9pbnQ= 2837 -JSU= 2838 -MDM= 2839 -IGds 2840 -ZXJ2ZWQ= 2841 -dmlyb24= 2842 -SUY= 2843 -dXRlZA== 2844 -44M= 2845 -J20= 2846 -IGNlcnQ= 2847 -IHByb2Y= 2848 -IGNlbGw= 2849 -YXJp 2850 -IHBsYXllcg== 2851 -YWlz 2852 -IGNvc3Q= 2853 -IGh1bQ== 2854 -KFI= 2855 -IG9mZmlj 2856 -a3M= 2857 -LnRleHQ= 2858 -YXR1cmVz 2859 -IHRvdGFs 2860 -ICovCgo= 2861 -b3Bl 2862 -IHN0YXQ= 2863 -VU0= 2864 -IGxvYWQ= 2865 -aWdodHM= 2866 -IGNsZWFy 2867 -dXJv 2868 -IHRlY2hu 2869 -dXBwb3J0 2870 -SVI= 2871 -IHJvdw== 2872 -IHNlZW0= 2873 -IHE= 2874 -IHNob3J0 2875 -IE5vdA== 2876 -aXBw 2877 -R3JvdXA= 2878 -c2VjdGlvbg== 2879 -bWF4 2880 -aXJs 2881 -IG92ZXJyaWRl 2882 -IGNvbXBhbnk= 2883 -IGRvbmU= 2884 -Iik7DQo= 2885 -IGdyZQ== 2886 -LlJl 2887 -IGJlbGll 2888 -cmlzdA== 2889 -IGhlYWx0aA== 2890 -QU5U 2891 -KCkKCg== 2892 -IEJl 2893 -LnZhbHVl 2894 -IEdy 2895 -b3R0b20= 2896 -IGFyZ3M= 2897 -UFQ= 2898 -c3RhdHVz 2899 -ZnVuYw== 2900 -dW1lbnRz 2901 -LWg= 2902 -TnVtYmVy 2903 -Og0K 2904 -IExvZw== 2905 -ZXJ2ZXI= 2906 -ICksCg== 2907 -YW1lbnQ= 2908 -IG9iag== 2909 -aW5j 2910 -IGNoaWxkcmVu 2911 -aWN5 2912 -SVo= 2913 -YW5kcw== 2914 -YWJseQ== 2915 -IGRpc3RyaWI= 2916 -IGN1cg== 2917 -ZXJpYWw= 2918 -IGRheXM= 2919 -cmVhdGVk 2920 -cmVjdA== 2921 -LWw= 2922 -aXJt 2923 -aWRkZW4= 2924 -b21i 2925 -IGluaXRpYWw= 2926 -Lmpz 2927 -IOI= 2928 -UXVlcnk= 2929 -IG9ubGluZQ== 2930 -aW1hbA== 2931 -LmNvbg== 2932 -YXU= 2933 -VXJs 2934 -Y29udHJvbA== 2935 -aXJlY3Rpb24= 2936 -IGluc3RhbmNl 2937 -T1JU 2938 -IEZy 2939 -d2hlcmU= 2940 -IGphdmF4 2941 -IG9yZ2Fu 2942 -YXB0ZXI= 2943 -IHJlYXNvbg== 2944 -b3B0aW9ucw== 2945 -NTk= 2946 -IE1hcg== 2947 -KGE= 2948 -IHdpdGhpbg== 2949 -LuKAnQoK 2950 -T0RF 2951 -X0RF 2952 -YWRtaW4= 2953 -ZW5kZWQ= 2954 -IGRlc2lnbg== 2955 -IERhdGE= 2956 -dW5l 2957 -IEZpbGU= 2958 -cm9vdA== 2959 -IGNlbnQ= 2960 -IGFycg== 2961 -X2FkZA== 2962 -bGVu 2963 -cGFnZQ== 2964 -LCc= 2965 -X3N0cg== 2966 -IGJybw== 2967 -YWJpbGl0eQ== 2968 -b3V0aA== 2969 -NTg= 2970 -L2M= 2971 -cG9zZQ== 2972 -aXJ0dWFs 2973 -ZWFyY2g= 2974 -X3VybA== 2975 -YXJnaW4= 2976 -SHR0cA== 2977 -IHNjaG9vbA== 2978 -YXZh 2979 -IGNvbnNpZGVy 2980 -LmxhYmVs 2981 -IEFycmF5 2982 -NDI= 2983 -d2Vi 2984 -b3B0 2985 -LnByaW50bG4= 2986 -dWxhdGlvbg== 2987 -IGZ1bmM= 2988 -UEw= 2989 -ICJc 2990 -IFRleHQ= 2991 -YWN0b3J5 2992 -KGZ1bmN0aW9u 2993 -bnVsbA== 2994 -IGVuZw== 2995 -ZG93bg== 2996 -IGluY2x1ZGU= 2997 -IEVu 2998 -IERy 2999 -IGRi 3000 -ISE= 3001 -c2lkZQ== 3002 -IGluaXQ= 3003 -cXVpcmVk 3004 -IFNoZQ== 3005 -Q29sdW1u 3006 -cmVhY3Q= 3007 -IGFubg== 3008 -IHN0b3A= 3009 -IGxhdGVy 3010 -IFRoYXQ= 3011 -ZW50aW9u 3012 -ZGY= 3013 -VUc= 3014 -SUxF 3015 -IGNsaWVudA== 3016 -cmFmdA== 3017 -ZmZlcg== 3018 -UE9TVA== 3019 -ZWxwZXI= 3020 -IGxvdmU= 3021 -cXVvdGU= 3022 -b3Vk 3023 -IGpzb24= 3024 -IGFibGU= 3025 -IG1lbg== 3026 -QVg= 3027 -IENvcHlyaWdodA== 3028 -w7Y= 3029 -YXZpZw== 3030 -cmVx 3031 -Q2xpZW50 3032 -fSk7Cg== 3033 -LkNvbQ== 3034 -ZXJj 3035 -aWx0 3036 -cGVjaWFs 3037 -X2NvbQ== 3038 -cm9vbQ== 3039 -Lk5hbWU= 3040 -IGdpdmU= 3041 -YW1i 3042 -aWtl 3043 -IGNvbmRpdGlvbg== 3044 -Y2xpZW50 3045 -YXRvcnM= 3046 -OiI= 3047 -IGNvcHk= 3048 -dXR1cmU= 3049 -aXZlcnNpdHk= 3050 -ZXJuYWw= 3051 -e3s= 3052 -IENhbg== 3053 -b3VuYw== 3054 -ZG8= 3055 -IG9jYw== 3056 -IGFwcHJv 3057 -dGhlcnM= 3058 -emU= 3059 -IGVpdGhlcg== 3060 -IEZs 3061 -IGltcG9ydGFudA== 3062 -IGxlYWQ= 3063 -YXR0cg== 3064 -QVJU 3065 -RXF1YWw= 3066 -IGRh 3067 -ZXRjaA== 3068 -ZW50aXR5 3069 -IGZhbWlseQ== 3070 -YWRkaW5n 3071 -IG9wdGlvbg== 3072 -IGV4aXN0 3073 -aWNh 3074 -IE9iamVjdA== 3075 -Njk= 3076 -J3Zl 3077 -dmVycw== 3078 -aXRpb25hbA== 3079 -Njc= 3080 -b3V0cHV0 3081 -IFRydWU= 3082 -IE9G 3083 -X3RpbWU= 3084 -IG9mZmVy 3085 -IH0pOwoK 3086 -SEVS 3087 -ZWdpbg== 3088 -IiI= 3089 -IHdhdGVy 3090 -IGNoZQ== 3091 -IE15 3092 -b3JlZA== 3093 -IHN0ZXA= 3094 -YW5jZXM= 3095 -Q0s= 3096 -QVk= 3097 -4Lg= 3098 -c3RydWN0aW9u 3099 -KEM= 3100 -MzAw 3101 -b3VjaA== 3102 -U3RyZWFt 3103 -YWN0aXZl 3104 -YW1h 3105 -RW50aXR5 3106 -cHJvZHVjdA== 3107 -KCl7Cg== 3108 -IGdvdmVybm1lbnQ= 3109 -IElE 3110 -YWpvcg== 3111 -QW5k 3112 -IGRpc3BsYXk= 3113 -0Ls= 3114 -IHRpbWVz 3115 -IGZvdXI= 3116 -IGZhcg== 3117 -IHByZXNlbnQ= 3118 -IE5T 3119 -IFwK 3120 -dWVzdA== 3121 -IGJhcw== 3122 -ZWNobw== 3123 -Y2hpbGQ= 3124 -aWZpZXI= 3125 -SGFuZGxlcg== 3126 -IGxpYg== 3127 -UHJvcGVydHk= 3128 -dHJhbnNsYXRpb24= 3129 -IHJvb20= 3130 -IG9uY2U= 3131 -IFtd 3132 -Y2VudGVy 3133 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 3134 -IHJlc3VsdHM= 3135 -IGNvbnRpbnVl 3136 -IHRhbGs= 3137 -X2dldA== 3138 -IGdyb3c= 3139 -LnN3 3140 -ZWI= 3141 -IFB1YmxpYw== 3142 -T1A= 3143 -ZWN1dGU= 3144 -b2xz 3145 -ICoq 3146 -Iik7Cgo= 3147 -IG1hc3M= 3148 -dXJlZA== 3149 -LmNsYXNz 3150 -b21pYw== 3151 -IG1lYW4= 3152 -aXBz 3153 -IGF1dA== 3154 -KTsNCg0K 3155 -IHVudGls 3156 -IG1hcmtldA== 3157 -IGFyZWE= 3158 -dWl0 3159 -IGxlbmd0aA== 3160 -IFdpdGg= 3161 -c3RydWN0b3I= 3162 -ZXZlbnQ= 3163 -Ij48 3164 -IFNw 3165 -SVY= 3166 -IG11cw== 3167 -aWZm 3168 -IGtpbmQ= 3169 -YXV0aG9y 3170 -b3VuZHM= 3171 -bWI= 3172 -X2tleQ== 3173 -NDE= 3174 -d2lkdGg= 3175 -cG9zaXRvcnk= 3176 -IGxpZ2h0 3177 -dWs= 3178 -Um93 3179 -b2hu 3180 -YWxm 3181 -dmlyb25tZW50 3182 -YXBwZXI= 3183 -b2xsZWN0aW9ucw== 3184 -IHNpZGU= 3185 -X2luZm8= 3186 -IGV4YW1wbGU= 3187 -aW1hcnk= 3188 -IHdy 3189 -IGNhbXA= 3190 -Y3JpYmU= 3191 -MjU1 3192 -Ii8= 3193 -IG1pc3M= 3194 -d2F5 3195 -IGJhc2Vk 3196 -IHBsYW4= 3197 -Vmlz 3198 -b21haW4= 3199 -dW5r 3200 -IGF3YXk= 3201 -VVA= 3202 -PFQ= 3203 -T1M= 3204 -aW9k 3205 -IE1vbg== 3206 -4oCZcmU= 3207 -IGxpaw== 3208 -w6c= 3209 -aXZlbHk= 3210 -LnY= 3211 -aW1lcg== 3212 -aXplcg== 3213 -U3Vi 3214 -IGJ1dHRvbg== 3215 -IFVw 3216 -IGV4cGVyaWVuY2U= 3217 -Q0w= 3218 -IHJlbmRlcg== 3219 -X3ZhbHVl 3220 -IG5lYXI= 3221 -VVJM 3222 -YWx0 3223 -IGNvdW50cnk= 3224 -aWJpbGl0eQ== 3225 -NTc= 3226 -KCksCg== 3227 -ZWFk 3228 -IGF1dGhvcg== 3229 -IHNwZWNpZmlj 3230 -YmFzZQ== 3231 -KG5hbWU= 3232 -b25lcw== 3233 -IERv 3234 -IGFsb25n 3235 -eWVhcg== 3236 -IGV4cHJlc3M= 3237 -Lic= 3238 -ZW52 3239 -IGJlZ2lu 3240 -IHNvZnR3YXJl 3241 -IGltcA== 3242 -IHdpbg== 3243 -w7Nu 3244 -IHRoaW5n 3245 -VHJhbnM= 3246 -IFRIRQ== 3247 -IDw/ 3248 -IHdoeQ== 3249 -IGRvZXNu 3250 -aWo= 3251 -Z2luZw== 3252 -CWc= 3253 -IHNpbmdsZQ== 3254 -b2Zmc2V0 3255 -YXJuaW5n 3256 -b2dyYXBo 3257 -bGV5 3258 -X2NvdW50 3259 -IGFuYWw= 3260 -Y3JlYXRl 3261 -L20= 3262 -IFJlZw== 3263 -OTg= 3264 -dW5jaA== 3265 -PSQ= 3266 -aXNr 3267 -IHJpZ2h0cw== 3268 -KE0= 3269 -ICIiIgo= 3270 -YXBlcg== 3271 -Lm1vZGVs 3272 -IHBv 3273 -ZW1wdHk= 3274 -YXJ0bWVudA== 3275 -IGFudA== 3276 -IFdoZW4= 3277 -IHdvbWVu 3278 -IEVk 3279 -IHNlYXNvbg== 3280 -IGRlc3Q= 3281 -w6M= 3282 -KGg= 3283 -IHBvc3NpYmxl 3284 -IHNldmVy 3285 -IGJ0bg== 3286 -IGRpZG4= 3287 -IHNlbnQ= 3288 -IGVuYw== 3289 -IGNvbW1hbmQ= 3290 -IF0sCg== 3291 -X3g= 3292 -IHJlY2VudA== 3293 -b2x1dGlvbg== 3294 -dmVjdG9y 3295 -IEJ5 3296 -IE1heQ== 3297 -IEFjdA== 3298 -u78= 3299 -IG1vbmV5 3300 -SU5U 3301 -YnNpdGU= 3302 -CXA= 3303 -Lg0K 3304 -77u/ 3305 -c2w= 3306 -YXR0ZXJu 3307 -IENsYXNz 3308 -IHRvbGQ= 3309 -dWRpbw== 3310 -Y3VycmVudA== 3311 -IGVxdQ== 3312 -IGF1dG8= 3313 -IFN0YXRl 3314 -ZGE= 3315 -bXNn 3316 -KSk7Cgo= 3317 -IHdvcmtpbmc= 3318 -IHF1ZXJ5 3319 -IEJy 3320 -IHdpbmRvdw== 3321 -YXV0aA== 3322 -b25seQ== 3323 -CXQ= 3324 -IGxlYXN0 3325 -YWdu 3326 -IGV4cGw= 3327 -aXR0ZXI= 3328 -YXJpbmc= 3329 -IGNvbHVtbg== 3330 -IEdlbmVyYWw= 3331 -Ijoi 3332 -ZXJhbA== 3333 -cmlvcg== 3334 -IHJlY29yZA== 3335 -SUI= 3336 -RVg= 3337 -IGRhdA== 3338 -IG1ha2luZw== 3339 -dWVk 3340 -IENhcg== 3341 -ZW1w 3342 -Ii4= 3343 -IE1lZA== 3344 -IGNsb3Nl 3345 -IHBlcmNlbnQ= 3346 -IHBhc3Q= 3347 -KGc= 3348 -Oig= 3349 -IHdyaXRl 3350 -IG1vdmU= 3351 -IHBhdA== 3352 -Q29udHJvbA== 3353 -LlRv 3354 -IHZp 3355 -Ki8K 3356 -aW5hdGU= 3357 -J2xs 3358 -YWdlZA== 3359 -TnVsbA== 3360 -IHNwZWNpYWw= 3361 -SVpF 3362 -IGNpdHk= 3363 -LyoK 3364 -IEVuZw== 3365 -aXhlZA== 3366 -aW5hcnk= 3367 -cHk= 3368 -IGVmZg== 3369 -YXJpbw== 3370 -IHRlbGw= 3371 -YXZvcg== 3372 -IHNlbGVjdA== 3373 -bGV2ZWw= 3374 -aW11bQ== 3375 -b3Blcg== 3376 -QnVpbGRlcg== 3377 -SVA= 3378 -JyksCg== 3379 -ZXNj 3380 -IGZvbnQ= 3381 -IjsKCg== 3382 -IEFt 3383 -aXNoZWQ= 3384 -aWxscw== 3385 -SW50ZXI= 3386 -T1c= 3387 -IGNvdXJzZQ== 3388 -IGxhdGU= 3389 -aWRkbGU= 3390 -NDM= 3391 -IGFtb3VudA== 3392 -IGFzeW5j 3393 -aW5v 3394 -Y3Vs 3395 -IOw= 3396 -YW5kbGU= 3397 -X3VzZXI= 3398 -IGJlbg== 3399 -IENhbA== 3400 -ICRf 3401 -IFJlcA== 3402 -IGVub3VnaA== 3403 -VG9rZW4= 3404 -LnVzZXI= 3405 -KGo= 3406 -U2M= 3407 -V2lkdGg= 3408 -bm93 3409 -YXRmb3Jt 3410 -IGxvb2tpbmc= 3411 -IGhvbGQ= 3412 -TW9kdWxl 3413 -SVRZ 3414 -dm8= 3415 -aXNvbg== 3416 -LkRhdGE= 3417 -eWM= 3418 -IHBvdA== 3419 -IFRydW1w 3420 -aWR1YWw= 3421 -aWRlcw== 3422 -cnQ= 3423 -IHByb3BlcnR5 3424 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 3425 -YW1ld29yaw== 3426 -Z28= 3427 -IGxvdw== 3428 -IHBhcmE= 3429 -IHByaWNl 3430 -dXJ5 3431 -IHRvZGF5 3432 -cm95 3433 -ICcv 3434 -IHBvbGl0 3435 -ICcn 3436 -eW1i 3437 -UGg= 3438 -IGFkdg== 3439 -IGF0dGFjaw== 3440 -IFN0ZQ== 3441 -Uk9N 3442 -NDAw 3443 -YW5h 3444 -IG1lYW5z 3445 -IHN0b3J5 3446 -aWRz 3447 -YWtlbg== 3448 -IG1lZXQ= 3449 -IG1vbQ== 3450 -IOKAmA== 3451 -ID8+ 3452 -IGRlbg== 3453 -b2JpbGU= 3454 -Y2hhbmdl 3455 -ICAgICAgICAgICAgCg== 3456 -aWNp 3457 -bmE= 3458 -IEZvcm0= 3459 -IHNvcnQ= 3460 -U2VsZWN0 3461 -cGFyZQ== 3462 -IHRob3VnaHQ= 3463 -X2Nvbg== 3464 -IHRhc2s= 3465 -b2N1cw== 3466 -IERF 3467 -IE1pbg== 3468 -IG9wdA== 3469 -CWJyZWFr 3470 -dW1lcg== 3471 -S0U= 3472 -dGhlbg== 3473 -IGRldA== 3474 -IFRlc3Q= 3475 -cG9ydHM= 3476 -IHJldmlldw== 3477 -KCcv 3478 -bW92ZQ== 3479 -IHN3aXRjaA== 3480 -RVJU 3481 -cGF0Y2g= 3482 -YW5ub3Q= 3483 -44I= 3484 -IGFib3Zl 3485 -aXRpdmU= 3486 -NTY= 3487 -IHF1ZXN0aW9u 3488 -IFF1 3489 -44CCCgo= 3490 -Z2xl 3491 -IHdvcmQ= 3492 -IHByb3ZpZGU= 3493 -IFJldHVybg== 3494 -IHJlc2VhcmNo 3495 -w6Nv 3496 -dXN0cg== 3497 -IHB1Ymxpc2g= 3498 -Y2hlbWE= 3499 -fX0= 3500 -IENPTg== 3501 -LWlu 3502 -YWxsYmFjaw== 3503 -IGNvdmVy 3504 -XFw= 3505 -Y29sb3I= 3506 -IElT 3507 -IHdoZXRoZXI= 3508 -aW1hdGU= 3509 -aXNj 3510 -QmFy 3511 -IGRpdg== 3512 -QmU= 3513 -b3Vybg== 3514 -IGhhdmluZw== 3515 -bGVt 3516 -cGxheWVy 3517 -YWJz 3518 -YW1lcmE= 3519 -bmV5 3520 -IGV4Yw== 3521 -Z2V0aGVy 3522 -cGxpZWQ= 3523 -YW8= 3524 -WyQ= 3525 -ICsr 3526 -aXBl 3527 -c2hvdw== 3528 -L2Q= 3529 -Wzo= 3530 -YWdlbWVudA== 3531 -bGV2 3532 -X0lE 3533 -OTc= 3534 -cmFyeQ== 3535 -YWRlcw== 3536 -X3Nl 3537 -YXVzZQ== 3538 -IGVtcGxveQ== 3539 -ICovDQo= 3540 -IGZyZQ== 3541 -ICdA 3542 -IGNvbXBsZXQ= 3543 -IGxhcmdl 3544 -cmFs 3545 -XHg= 3546 -IGZhYw== 3547 -PFN0cmluZw== 3548 -IGNyZWF0ZWQ= 3549 -dXBlcg== 3550 -LnN0YXRl 3551 -IGhvc3Q= 3552 -ZW5lcmlj 3553 -L2I= 3554 -KCE= 3555 -d2hpbGU= 3556 -aWFz 3557 -QlVH 3558 -ICk7Cgo= 3559 -IHJvbGU= 3560 -UmVn 3561 -IENvbG9y 3562 -U3RhcnQ= 3563 -IHBvcm4= 3564 -dG9w 3565 -IHdlYg== 3566 -IGRldg== 3567 -IGRlYWw= 3568 -KyspCg== 3569 -SW50ZWdlcg== 3570 -cG9zaXRpb24= 3571 -Lm9u 3572 -ICgi 3573 -5Lg= 3574 -IHByb2JsZW0= 3575 -c3Y= 3576 -IHByZXNz 3577 -QUJMRQ== 3578 -QVRJT04= 3579 -IFNlZQ== 3580 -YW5jaA== 3581 -IHRob3VnaA== 3582 -bGVlcA== 3583 -IDwhLS0= 3584 -IHBvaW50cw== 3585 -ICAgICAgICAgICAgICAgICAgICAgICAgIA== 3586 -Lko= 3587 -IDo6 3588 -cHRy 3589 -REI= 3590 -Kys7Cg== 3591 -LnBuZw== 3592 -bm9kZQ== 3593 -c29mdA== 3594 -cG9uZA== 3595 -IGV2ZXI= 3596 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 3597 -TWVudQ== 3598 -KCcj 3599 -IHNlcnZpY2Vz 3600 -cGc= 3601 -fSkK 3602 -cGFyYW1z 3603 -IGFjdHVhbGx5 3604 -ICIv 3605 -RW1wdHk= 3606 -TWV0aG9k 3607 -IGlkZW50 3608 -dW5pYw== 3609 -IG1pbGxpb24= 3610 -IGFmZg== 3611 -c3R5bGU= 3612 -IGNvbmM= 3613 -aW9z 3614 -aWdubWVudA== 3615 -VUxU 3616 -UHI= 3617 -IjsNCg== 3618 -IHVuZGVyc3RhbmQ= 3619 -dWFyeQ== 3620 -IGhhcHBlbg== 3621 -IHNlcnZlcg== 3622 -IENv 3623 -U0M= 3624 -IGxlcw== 3625 -IGZpbGVz 3626 -R3JpZA== 3627 -c3Fs 3628 -IG9mdGVu 3629 -IGluZm8= 3630 -X3Ry 3631 -c3Jj 3632 -b255 3633 -IHNwYWNl 3634 -dW1i 3635 -IHBhc3N3b3Jk 3636 -IHN0b3Jl 3637 -LAoK 3638 -IFdoYXQ= 3639 -Z2Vk 3640 -IEZhbHNl 3641 -VXM= 3642 -c3dlcg== 3643 -X2luZGV4 3644 -IGZvcm1hdA== 3645 -bW9zdA== 3646 -c20= 3647 -TmV3 3648 -IGRldGFpbHM= 3649 -IHByb2I= 3650 -IEFORA== 3651 -KCkNCg== 3652 -aWxhcg== 3653 -ICR7 3654 -cnlwdA== 3655 -LkNvbGxlY3Rpb25z 3656 -JHRoaXM= 3657 -IEZyZWU= 3658 -X29m 3659 -KGZhbHNl 3660 -ZGF0ZWQ= 3661 -ID4+ 3662 -IGZhY2U= 3663 -Q1RJT04= 3664 -IHNhdmU= 3665 -IHR5cA== 3666 -ZGV2 3667 -KCIj 3668 -QUdF 3669 -Y29udGFpbmVy 3670 -ZWRpdA== 3671 -UUw= 3672 -IGl0ZW1z 3673 -IHNvY2lhbA== 3674 -aWVu 3675 -IFJlYWN0 3676 -KS4KCg== 3677 -IG1hcg== 3678 -IHJlZHU= 3679 -IFJF 3680 -LnB1dA== 3681 -IG1ham9y 3682 -Q2VsbA== 3683 -bmV4dA== 3684 -IGV4cGVjdGVk 3685 -IHlldA== 3686 -IGluZGl2 3687 -dHJpYnV0ZXM= 3688 -YXRpcw== 3689 -YW1lZA== 3690 -IGZvb2Q= 3691 -U291cmNl 3692 -KHN0cmluZw== 3693 -ICsK 3694 -aXRlcw== 3695 -ZHI= 3696 -IG1lbWJlcnM= 3697 -IGNvbWI= 3698 -aXRlbXM= 3699 -IFBlcg== 3700 -VEg= 3701 -PVRydWU= 3702 -IGJhcg== 3703 -X1NF 3704 -Y29tbQ== 3705 -KHc= 3706 -KQoKCg== 3707 -IHNlbmQ= 3708 -IGluYw== 3709 -dW5zaWduZWQ= 3710 -RkE= 3711 -IHBhcmFtcw== 3712 -YXBwaW5n 3713 -cm9z 3714 -dWdpbg== 3715 -ZmE= 3716 -IGNvbm5lY3Rpb24= 3717 -IH07Cgo= 3718 -IGJlY29tZQ== 3719 -TW9kZQ== 3720 -IGV2 3721 -IGRpZmY= 3722 -IFVuaXRlZA== 3723 -SGVpZ2h0 3724 -ZnVsbHk= 3725 -aW1hZ2Vz 3726 -IG1ha2Vz 3727 -IGdsb2JhbA== 3728 -IGNvbnRhY3Q= 3729 -JzoK 3730 -IGFicw== 3731 -0LDQ 3732 -ZmxvYXQ= 3733 -IGV4Y2VwdA== 3734 -IFBvbA== 3735 -Q2hpbGQ= 3736 -dHlw 3737 -IGNlcnRhaW4= 3738 -acOzbg== 3739 -T1VU 3740 -IGltcHJv 3741 -aWxlcw== 3742 -IC0tPgo= 3743 -IFBhcnQ= 3744 -dmFsdWVz 3745 -b3Nz 3746 -Lyoq 3747 -aWxpdA== 3748 -IEV2ZW50 3749 -Y3VyaXR5 3750 -c3Rlcg== 3751 -IGNoYXJhY3Rlcg== 3752 -MTk4 3753 -IG5ld3M= 3754 -ICIs 3755 -IGRldmljZQ== 3756 -Y2Vs 3757 -bG9naW4= 3758 -aGVldA== 3759 -RGVmYXVsdA== 3760 -QCI= 3761 -CSA= 3762 -Y2xpY2s= 3763 -KHZhbHVl 3764 -IEFi 3765 -IHByZXZpb3Vz 3766 -RVJST1I= 3767 -b2NhbA== 3768 -IG1hdGVyaWFs 3769 -IGJlbG93 3770 -IENocmlzdA== 3771 -IG1lZGlh 3772 -Y292ZXI= 3773 -IFVJ 3774 -IGZhaWw= 3775 -IGJsYWNr 3776 -IGNvbXBvbmVudA== 3777 -IEFtZXJpY2Fu 3778 -IGFkZGVk 3779 -IGJ1eQ== 3780 -c3RpdA== 3781 -IGNhbWU= 3782 -IGRlbGV0ZQ== 3783 -cHJvcGVydHk= 3784 -b2Rpbmc= 3785 -IGNhcmQ= 3786 -cm9wcw== 3787 -IGh0dHBz 3788 -IHJvb3Q= 3789 -IGhhbmRsZQ== 3790 -Q0M= 3791 -QmFjaw== 3792 -ZW1wbGF0ZQ== 3793 -IGdldHRpbmc= 3794 -X2J5 3795 -bWFpbA== 3796 -X3No 3797 -LmFzc2VydA== 3798 -IERlYw== 3799 -KHRydWU= 3800 -IGNvbXB1dA== 3801 -IGNsYWlt 3802 -Jz0+ 3803 -IFN1Yg== 3804 -IGFpcg== 3805 -b3Bz 3806 -bmF2 3807 -ZW1lbnRz 3808 -KGlk 3809 -IGVudGVy 3810 -YW5nZWQ= 3811 -RW5k 3812 -IGxvY2F0aW9u 3813 -IG5pZ2h0 3814 -IGRvaW5n 3815 -IFJlZA== 3816 -bGlu 3817 -fQoKCg== 3818 -dmlkZXI= 3819 -IHBpY2s= 3820 -IHdhdGNo 3821 -ZXNzYWdlcw== 3822 -IGh1bWFu 3823 -IGRhbQ== 3824 -cGVuZA== 3825 -ZGly 3826 -IHRheA== 3827 -IGdpcmw= 3828 -cmVldA== 3829 -IGJveA== 3830 -IHN0cm9uZw== 3831 -KHY= 3832 -cmVs 3833 -IGludGVyZmFjZQ== 3834 -IG1zZw== 3835 -ZmVjdA== 3836 -X2F0 3837 -IGhvdXNl 3838 -IHRyYWNr 3839 -Jyk7Cgo= 3840 -amU= 3841 -IEpvaG4= 3842 -aXN0cg== 3843 -KFM= 3844 -dWJl 3845 -IGNl 3846 -aXR0ZWQ= 3847 -VkVS 3848 -Kik= 3849 -cGFyZW50 3850 -IGFwcGxpY2F0aW9u 3851 -YW55 3852 -LnN3aW5n 3853 -IHBhY2s= 3854 -XHU= 3855 -IHByYWN0 3856 -IHNlY3Rpb24= 3857 -Y3R4 3858 -IHVuc2lnbmVk 3859 -LlBvaW50 3860 -IE9uZQ== 3861 -xLE= 3862 -aXBsZQ== 3863 -YWlk 3864 -0YM= 3865 -VmVjdG9y 3866 -Ynl0ZQ== 3867 -IHdhaXQ= 3868 -IMOg 3869 -w6U= 3870 -IHRvZ2V0aGVy 3871 -IHRocm93cw== 3872 -Rk8= 3873 -Jykp 3874 -aG9zdA== 3875 -aXNpbmc= 3876 -LnZpZXc= 3877 -IHRlcm1z 3878 -ZnJhbWV3b3Jr 3879 -LXI= 3880 -IGFwcGx5 3881 -IHNlc3Npb24= 3882 -T3B0aW9ucw== 3883 -dWdnZXN0 3884 -IG90aGVycw== 3885 -d2l0dGVy 3886 -IGZ1bmQ= 3887 -SW5pdA== 3888 -X18o 3889 -ZW5zb3I= 3890 -R0VU 3891 -IHNldmVyYWw= 3892 -aWk= 3893 -W2o= 3894 -SU8= 3895 -IHRlbXBsYXRl 3896 -UG9zaXRpb24= 3897 -IGVjb24= 3898 -YWNoaW5l 3899 -IGls 3900 -LnNwcmluZw== 3901 -bWFpbg== 3902 -ZWx0 3903 -aW1lbnQ= 3904 -UmVj 3905 -bW0= 3906 -IFVuaXZlcnNpdHk= 3907 -dXJzb3I= 3908 -ICAgICAgICAgICAgICAgICAgICA= 3909 -R0w= 3910 -aWN0dXJl 3911 -aXRodWI= 3912 -Y2Vy 3913 -Y2FzdA== 3914 -RnJvbQ== 3915 -YWxlcw== 3916 -IHN1YmplY3Q= 3917 -cGFzc3dvcmQ= 3918 -bnk= 3919 -IGVzYw== 3920 -LndyaXRl 3921 -77yM 3922 -V2hhdA== 3923 -Lkg= 3924 -IGhpc3Rvcnk= 3925 -IEZl 3926 -IGluZGl2aWR1YWw= 3927 -dW5pdA== 3928 -IC0tPg== 3929 -IGR1 3930 -SVNU 3931 -IHVzZXJz 3932 -ZnM= 3933 -ZmFsc2U= 3934 -dW50 3935 -VGl0bGU= 3936 -IG1vdA== 3937 -IGZ1dHVyZQ== 3938 -YWNoZWQ= 3939 -IHN0YXJ0ZWQ= 3940 -IG1vZGU= 3941 -ICc8 3942 -X2FycmF5 3943 -IGF4 3944 -J107Cg== 3945 -aXJlcw== 3946 -VGhlcmU= 3947 -dWdodA== 3948 -dG1s 3949 -cG9zZWQ= 3950 -aWN1bHQ= 3951 -IHRvb2s= 3952 -IGdhbWVz 3953 -IH19 3954 -ID8+Cg== 3955 -IHByb2R1Y3Rz 3956 -SXM= 3957 -IGJhZA== 3958 -IERlcw== 3959 -LnBhdGg= 3960 -JwoK 3961 -IFBvc3Q= 3962 -YXZlbA== 3963 -KDo= 3964 -MTUw 3965 -IG5lZWRz 3966 -IGtub3du 3967 -Rmw= 3968 -IGV4ZWM= 3969 -IHNlZW4= 3970 -NTE= 3971 -dW1l 3972 -IGJvcmRlcg== 3973 -IGxpdmU= 3974 -dGVtcA== 3975 -UGVy 3976 -IHZhcmlhYmxl 3977 -aWV0 3978 -IERlZg== 3979 -IGdl 3980 -ZW1l 3981 -X2JhY2s= 3982 -Zmlyc3Q= 3983 -IHByb3ZpZGVk 3984 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 3985 -IGZpbGVuYW1l 3986 -IGhvcGU= 3987 -dWx5 3988 -YXV0bw== 3989 -ZmluZA== 3990 -X3N0cmluZw== 3991 -YnRu 3992 -aXR1ZGU= 3993 -QXR0cmlidXRl 3994 -IHlvdW5n 3995 -LnR4dA== 3996 -IHdlYnNpdGU= 3997 -IFByb3A= 3998 -IGV5 3999 -PigpOwo= 4000 -aW9uYWw= 4001 -QVJS 4002 -aWN0aW9uYXJ5 4003 -dXJ0aGVy 4004 -Ljwv 4005 -QUxM 4006 -IHN0dWR5 4007 -aWxp 4008 -IG5ldHdvcms= 4009 -eWw= 4010 -aXN0YW5jZQ== 4011 -T0s= 4012 -TlU= 4013 -cmVzdA== 4014 -IFNU 4015 -aWNyb3NvZnQ= 4016 -IGxpbWl0 4017 -IGN1dA== 4018 -KCk6Cg== 4019 -IGNvdQ== 4020 -b2du 4021 -IHNpemVvZg== 4022 -aXZhbA== 4023 -IHdlbnQ= 4024 -Lno= 4025 -TGluaw== 4026 -IGZpcmU= 4027 -IGFjcm9zcw== 4028 -IGNvbW11bml0eQ== 4029 -cmVnaW9u 4030 -TkU= 4031 -UmVm 4032 -IG9mZmljaWFs 4033 -IHZpc2l0 4034 -b2x2ZQ== 4035 -IHJlY2VpdmVk 4036 -IHRva2Vu 4037 -IG1vbnRocw== 4038 -IGFuaW0= 4039 -IHBhcnRpY3VsYXI= 4040 -c3R5bGVz 4041 -aWNv 4042 -IGVzcw== 4043 -ODc= 4044 -LkNvbnRyb2w= 4045 -IMOp 4046 -YmFsbA== 4047 -IGxlYXJu 4048 -aW5kaW5n 4049 -VmFy 4050 -IGRlY2w= 4051 -KGVycg== 4052 -TEVDVA== 4053 -T25l 4054 -cGhh 4055 -IH4= 4056 -Zm9ydA== 4057 -YXN1cmU= 4058 -IG1pbmQ= 4059 -IEVuZA== 4060 -Q2hlY2s= 4061 -IHF1aWNr 4062 -Iiks 4063 -QU5E 4064 -dXRpb25z 4065 -QmFzZQ== 4066 -X19fX19fX18= 4067 -IGNvbW1lbnQ= 4068 -SU5F 4069 -4oCZdmU= 4070 -QnV0 4071 -IEVs 4072 -IFVz 4073 -IGFkbWlu 4074 -bWFyaw== 4075 -IE5hbWU= 4076 -YAo= 4077 -IFR5cGU= 4078 -YW1pYw== 4079 -cGM= 4080 -bG9vcg== 4081 -RlQ= 4082 -IG9wcA== 4083 -Y2tldA== 4084 -KS0+ 4085 -dHg= 4086 -IHB1cg== 4087 -dWVs 4088 -eW1ib2w= 4089 -dWF0aW9u 4090 -YW5nZXI= 4091 -IGJhY2tncm91bmQ= 4092 -ZWNlc3M= 4093 -ZWZpbmVk 4094 -Li4uLi4uLi4= 4095 -IGRlc2NyaXB0aW9u 4096 -IHJlcHJlc2VudA== 4097 -IikpOwo= 4098 -cHJlc3Npb24= 4099 -cm93c2Vy 4100 -IHNlcmllcw== 4101 -d2FyZHM= 4102 -NTI= 4103 -KCRf 4104 -YWlzZQ== 4105 -IGhvdA== 4106 -YWNpdHk= 4107 -cmllcw== 4108 -YWN0aW9ucw== 4109 -Q3JlYXRl 4110 -YWRpbw== 4111 -YW1wbGVz 4112 -IG9yaWdpbmFs 4113 -ZW5zaXZl 4114 -Zm9udA== 4115 -c3RyZWFt 4116 -77u/dXNpbmc= 4117 -LnNwcmluZ2ZyYW1ld29yaw== 4118 -MDAx 4119 -c2VydmVy 4120 -IGJpbGw= 4121 -QUNL 4122 -aWxlbmFtZQ== 4123 -IGZyYW1l 4124 -ID0K 4125 -RWRpdA== 4126 -YWRpdXM= 4127 -IGRyYXc= 4128 -YW5rcw== 4129 -IGRldGVy 4130 -IGNvbWVz 4131 -X2ludA== 4132 -IGZvcmVhY2g= 4133 -YW5nbGU= 4134 -IGVsZWN0 4135 -cGVjdGVk 4136 -SGVhZGVy 4137 -aXN0cmF0aW9u 4138 -RmFsc2U= 4139 -IEdhbWU= 4140 -IGZpbHRlcg== 4141 -QWN0aXZpdHk= 4142 -IGxhcmc= 4143 -aW5pdGlvbg== 4144 -ICI8 4145 -MjU2 4146 -aXNlZA== 4147 -IHJlbW92ZQ== 4148 -IFRyYW5z 4149 -bWV0 4150 -c2Vl 4151 -Rm9ybWF0 4152 -Q29tbWFuZA== 4153 -IEVY 4154 -Tm9uZQ== 4155 -IGZyb250 4156 -QVNF 4157 -IFJlYw== 4158 -b3VuZGF0aW9u 4159 -IHZv 4160 -OTY= 4161 -PVwi 4162 -KCo= 4163 -Q2hhbmdl 4164 -LldyaXRl 4165 -Z3JvdXA= 4166 -aWVudHM= 4167 -dXk= 4168 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 4169 -IGRpZw== 4170 -aHI= 4171 -KC0= 4172 -IGdlbg== 4173 -bnVtYmVy 4174 -dmVj 4175 -dXJvcGU= 4176 -ZW50cnk= 4177 -TEw= 4178 -IHN0ZQ== 4179 -VmFsaWQ= 4180 -J10s 4181 -X3BhcmFt 4182 -IHNlbGVjdGVk 4183 -IGFjY29yZGluZw== 4184 -IERpcw== 4185 -IHV0aWw= 4186 -QnVmZmVy 4187 -X2Vycm9y 4188 -IGFzc29jaQ== 4189 -X1NJWkU= 4190 -IHdvcg== 4191 -IHByaW50Zg== 4192 -cmFn 4193 -wqA= 4194 -REQ= 4195 -IFZhbA== 4196 -IGFjdGl2 4197 -RW5n 4198 -ZXRpbWU= 4199 -IHZpcnR1YWw= 4200 -YWlnbg== 4201 -YXVy 4202 -IFByZXM= 4203 -IEV4Y2VwdGlvbg== 4204 -IGFueXRoaW5n 4205 -IE9mZg== 4206 -IGhvdXJz 4207 -IHdhcg== 4208 -QXJncw== 4209 -YWdpbmc= 4210 -IG1vZGVscw== 4211 -IFRpbWU= 4212 -T2I= 4213 -YW1z 4214 -am95 4215 -IGVhcmx5 4216 -LnJlYWQ= 4217 -ODY= 4218 -IGNlbnRlcg== 4219 -IEluaXRpYWw= 4220 -IGxhbmd1YWdl 4221 -bGVuZ3Ro 4222 -eHk= 4223 -IHNu 4224 -IGluZg== 4225 -UG9zdA== 4226 -IGFnbw== 4227 -IGVhc3k= 4228 -X2NvZGU= 4229 -IEFOWQ== 4230 -X2No 4231 -IGRvd25sb2Fk 4232 -KFQ= 4233 -YXZlZA== 4234 -4oCT 4235 -IHN0dWRlbnRz 4236 -IGZpZw== 4237 -bGlnaHQ= 4238 -eHg= 4239 -IGJ1ZmZlcg== 4240 -IERlcA== 4241 -IE1hdGg= 4242 -SVRI 4243 -IHZhcmk= 4244 -IGR1ZQ== 4245 -RmFjdG9yeQ== 4246 -IHBvcg== 4247 -IGVw 4248 -b3R5cGU= 4249 -IGNhbm5vdA== 4250 -IHdoaXRl 4251 -PGludA== 4252 -dGVybg== 4253 -IHJlZ2lzdGVy 4254 -IHByZWQ= 4255 -Y2x1cw== 4256 -X2RhdGU= 4257 -IC8qKg== 4258 -IGF1dGg= 4259 -IFtdCg== 4260 -IHBlcmlvZA== 4261 -bm93bg== 4262 -IHZvdA== 4263 -IHNjcmVlbg== 4264 -J2Q= 4265 -VHlwZXM= 4266 -IHRtcA== 4267 -0LXQ 4268 -dXJhbA== 4269 -IGJlbmVm 4270 -X3k= 4271 -IG5ldA== 4272 -IFN0YXRlcw== 4273 -J11bJw== 4274 -IE5l 4275 -IE5PVA== 4276 -IG5lZw== 4277 -MTAy 4278 -IGNvbW1vbg== 4279 -c2NvcGU= 4280 -IGNyZWQ= 4281 -Z2Vz 4282 -X1RZUEU= 4283 -IHN1Z2dlc3Q= 4284 -b29t 4285 -LgoKCg== 4286 -IGFjY2VwdA== 4287 -IHJhbmRvbQ== 4288 -ZXJt 4289 -IFZlY3Rvcg== 4290 -d2l0aA== 4291 -VEVS 4292 -KHN0cg== 4293 -IHJlc3BvbnM= 4294 -IGhpdA== 4295 -LlNldA== 4296 -Z3JpZA== 4297 -cmlh 4298 -IGNsaWNr 4299 -dW5kbGU= 4300 -Q2FzZQ== 4301 -aW5zZXJ0 4302 -VXRpbHM= 4303 -ICIiIg== 4304 -IGltcGxlbWVudA== 4305 -YXRhbA== 4306 -dGVtcHQ= 4307 -dGVtcGxhdGU= 4308 -b2Ny 4309 -cmV0dXJucw== 4310 -IHBsYXllcnM= 4311 -dXNlcnM= 4312 -ZWRlZg== 4313 -IFRoZXNl 4314 -IGFtb25n 4315 -IGRlYg== 4316 -aGE= 4317 -LmdldEVsZW1lbnQ= 4318 -IGNpcmM= 4319 -IGFuc3dlcg== 4320 -IHdhbGs= 4321 -IHRyZWF0 4322 -IEdl 4323 -IENyZWF0ZQ== 4324 -IGFnZQ== 4325 -IHJlcQ== 4326 -T1NU 4327 -YW5ndWxhcg== 4328 -0Y8= 4329 -IGZpdmU= 4330 -NTM= 4331 -IGRpc3RyaWJ1dGVk 4332 -IGZyaWVuZA== 4333 -VFA= 4334 -IGNsZWFu 4335 -b3dz 4336 -LkNvbnRyb2xz 4337 -ZGlz 4338 -IHdvcmRz 4339 -Lmlv 4340 -enk= 4341 -IGhlYWRlcg== 4342 -IENoZWNr 4343 -4oCZbQ== 4344 -anVzdA== 4345 -aG9sZGVy 4346 -PSI8Pw== 4347 -IEdOVQ== 4348 -IENvbA== 4349 -aW1lc3Q= 4350 -ZW50aWM= 4351 -ewoK 4352 -IHRyZQ== 4353 -bGFzdA== 4354 -bGE= 4355 -IFlvcms= 4356 -TG8= 4357 -IGRpc2N1c3M= 4358 -IEdvZA== 4359 -IGlzc3Vl 4360 -cmV3 4361 -V2luZG93 4362 -IGxhbmQ= 4363 -MTIw 4364 -IHN0cmVhbQ== 4365 -IFBhcg== 4366 -IHF1YWxpdHk= 4367 -UGFy 4368 -X251bQ== 4369 -NTQ= 4370 -IHNhbA== 4371 -ZWx2ZXM= 4372 -T1JE 4373 -KHVzZXI= 4374 -IHdvcmtz 4375 -IGhhbGY= 4376 -ZW5zZXM= 4377 -dmFz 4378 -IHBvbGljZQ== 4379 -KCIv 4380 -dWE= 4381 -IHNpbXBsZQ== 4382 -QWRkcmVzcw== 4383 -IGVtcHR5 4384 -ZXNo 4385 -MTI4 4386 -VXBkYXRl 4387 -IENyZWF0ZWQ= 4388 -KCcu 4389 -KS4K 4390 -ICAgICAgICAgICAgICAgICAg 4391 -IGFncmU= 4392 -IEZST00= 4393 -IGNvb2s= 4394 -IGV2ZXJ5dGhpbmc= 4395 -aWxpdGllcw== 4396 -LnN0YXR1cw== 4397 -IHJlbGF0aW9ucw== 4398 -ZXh0ZXJu 4399 -IG5vdGhpbmc= 4400 -IHJ1bm5pbmc= 4401 -CXZvaWQ= 4402 -Ukk= 4403 -X2E= 4404 -X0NPTg== 4405 -cG9y 4406 -LnN1Yg== 4407 -cmVxdWlyZQ== 4408 -IENpdHk= 4409 -IFdlc3Q= 4410 -IG1vcg== 4411 -c3RvcmU= 4412 -RXF1YWxz 4413 -b2Rlcg== 4414 -IG5h 4415 -IFtb 4416 -ICgn 4417 -IERvbg== 4418 -RVJT 4419 -L3A= 4420 -Lmpzb24= 4421 -YWJvcg== 4422 -IHNvbWVvbmU= 4423 -X3RleHQ= 4424 -LmNzcw== 4425 -LlRhYg== 4426 -IFNvbWU= 4427 -YXRv 4428 -ZG91Ymxl 4429 -IHNoYXJl 4430 -KHZvaWQ= 4431 -X2Rpcg== 4432 -IHVy 4433 -U3RhY2s= 4434 -IFdvcmxk 4435 -Llg= 4436 -c3RyYWN0 4437 -SG93 4438 -LkdlbmVyaWM= 4439 -aWNsZXM= 4440 -IGVudHJ5 4441 -IGNoYW5nZXM= 4442 -IHBlcnNvbmFs 4443 -KEE= 4444 -IG9mZnNldA== 4445 -X3B0cg== 4446 -IHBpZQ== 4447 -IEphbg== 4448 -LWdyb3Vw 4449 -bW9kdWxl 4450 -SXRlbXM= 4451 -IEhvd2V2ZXI= 4452 -dmVyYWdl 4453 -LkZvbnQ= 4454 -IGV2ZW50cw== 4455 -Lm1pbg== 4456 -IGludm9s 4457 -emE= 4458 -IHdob2xl 4459 -IG5lZWRlZA== 4460 -IGxpa2VseQ== 4461 -cmllZg== 4462 -T1JN 4463 -dmVyc2lvbg== 4464 -IGZpZ2h0 4465 -IGVpbg== 4466 -RnJhbWU= 4467 -MTk3 4468 -Z2Vu 4469 -IE91dA== 4470 -YXZpZ2F0aW9u 4471 -TGVuZ3Ro 4472 -aWxsZWQ= 4473 -cXVlbmNl 4474 -ICE9PQ== 4475 -IFNvZnR3YXJl 4476 -IHdyaXRpbmc= 4477 -IHJhdGU= 4478 -J10sCg== 4479 -UGFuZWw= 4480 -aW5uZXI= 4481 -IFsi 4482 -IHR3 4483 -Y2Q= 4484 -IDsK 4485 -X3N0YXRl 4486 -IFNt 4487 -IE1hcms= 4488 -KSkKCg== 4489 -cHJvdA== 4490 -IE1y 4491 -bWV0aG9k 4492 -dXN0b21lcg== 4493 -SWNvbg== 4494 -IGNvcnJlY3Q= 4495 -KG9iamVjdA== 4496 -IE1vcmU= 4497 -IGZhbGw= 4498 -IHZvbA== 4499 -IGRldmVsb3BtZW50 4500 -ZW50bHk= 4501 -IHNp 4502 -bWVkaQ== 4503 -dmluZw== 4504 -UFA= 4505 -YWtlcg== 4506 -IGluZHU= 4507 -IGVsaWY= 4508 -IHByZXQ= 4509 -IGJlbGlldmU= 4510 -bnM= 4511 -b21ldA== 4512 -MTIz 4513 -IEludGVybg== 4514 -UmVjdA== 4515 -U28= 4516 -LmVycm9y 4517 -UmVhZA== 4518 -IGZlYXR1cmVz 4519 -IG1pbnV0ZXM= 4520 -LS0t 4521 -YXNpbmc= 4522 -Y3JldA== 4523 -Ij4NCg== 4524 -LmFubm90 4525 -IGNvbGxlY3Rpb24= 4526 -Jy4= 4527 -IHNpbWlsYXI= 4528 -IHRha2Vu 4529 -KCIl 4530 -T3JkZXI= 4531 -J10K 4532 -LW1k 4533 -IFRI 4534 -YWNlZA== 4535 -IGlzbg== 4536 -L2o= 4537 -IHNvbg== 4538 -Z3JhcGg= 4539 -IEludGVnZXI= 4540 -IG5lY2Vzcw== 4541 -cmVlbg== 4542 -IHVt 4543 -IFw8 4544 -IG1vbWVudA== 4545 -IGJyaW5n 4546 -IGluZGlj 4547 -eXNpcw== 4548 -TGV2ZWw= 4549 -dmVyc2U= 4550 -dXJyZW5j 4551 -X3Rlc3Q= 4552 -IGVudGlyZQ== 4553 -RG93bg== 4554 -IH0KCgo= 4555 -KHJlc3VsdA== 4556 -IFJlYWQ= 4557 -w6g= 4558 -TW9k 4559 -IHRyeWluZw== 4560 -IiksCg== 4561 -IG1lbWJlcg== 4562 -IENvcg== 4563 -T0RP 4564 -LWNvbnRyb2w= 4565 -dW50aW1l 4566 -IFNpbQ== 4567 -RGlhbG9n 4568 -cGxvdA== 4569 -X29u 4570 -IHBoeXM= 4571 -fS8= 4572 -IG5hbWVzcGFjZQ== 4573 -CQ0K 4574 -YWNj 4575 -UGxheWVy 4576 -QVJF 4577 -ODk= 4578 -IGZvb3Q= 4579 -IGJvYXJk 4580 -cGFydA== 4581 -IHN1cw== 4582 -d2lzZQ== 4583 -IE1j 4584 -IHB1c2g= 4585 -QVRB 4586 -IHBsZWFzZQ== 4587 -cmllZA== 4588 -d2VldA== 4589 -Yml0 4590 -aWRlZA== 4591 -VkU= 4592 -IFN3 4593 -VUI= 4594 -IHR5cGVz 4595 -ZWRpYQ== 4596 -IGNsb3M= 4597 -YWNlYm9vaw== 4598 -V2hlbg== 4599 -IGVkaXQ= 4600 -aWdnZXI= 4601 -IGVuZXJn 4602 -Q29udGFpbmVy 4603 -IHBob3Q= 4604 -IENvdW50 4605 -IEV1cm9wZQ== 4606 -Lklz 4607 -IFJ1c3M= 4608 -cGVlZA== 4609 -IFN0cg== 4610 -IHB5 4611 -IGN1bHQ= 4612 -IGRlZmluZWQ= 4613 -Y2NvdW50 4614 -IG9idA== 4615 -LkxvY2F0aW9u 4616 -IHRocmVhZA== 4617 -aWxsZQ== 4618 -IGluc3RlYWQ= 4619 -c3Ryb25n 4620 -IFNlYw== 4621 -VVJF 4622 -IGlkZWE= 4623 -LnNl 4624 -ZW15 4625 -c2VsZWN0ZWQ= 4626 -Q29ubmVjdGlvbg== 4627 -YWNpbmc= 4628 -dGhyZWFk 4629 -Lm5leHQ= 4630 -IGNvbGw= 4631 -IGZpbG0= 4632 -aXN0aWM= 4633 -IGNvbXBldA== 4634 -IGNvbm4= 4635 -dGhvdWdo 4636 -IGNvbXBhbg== 4637 -b2NrZXQ= 4638 -IHRlYWNo 4639 -PSg= 4640 -IHBob25l 4641 -IGFjdGl2ZQ== 4642 -Nzk= 4643 -ZGVsZXRl 4644 -MTAx 4645 -dHJpZXM= 4646 -IG1v 4647 -IGRlYXRo 4648 -fSk7Cgo= 4649 -b2NvbA== 4650 -V2lkZ2V0 4651 -IGFydGljbGU= 4652 -cm9kdQ== 4653 -YW5kaWQ= 4654 -0Ys= 4655 -IENy 4656 -a2E= 4657 -KCk6 4658 -bG9vZA== 4659 -CQkJCg== 4660 -IGFsbW9zdA== 4661 -IHNlbGw= 4662 -ZXJ2bGV0 4663 -cmlw 4664 -VW5pdA== 4665 -IGFwcGxpYw== 4666 -IGNvbm5lY3Q= 4667 -IGZlYXR1cmU= 4668 -IHZpYQ== 4669 -Jyks 4670 -IGxpbQ== 4671 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 4672 -IEd1 4673 -RW5naW5l 4674 -IGVucw== 4675 -IGVudmlyb25tZW50 4676 -YmxvY2s= 4677 -SEVSRQ== 4678 -TlVMTA== 4679 -Z3k= 4680 -dGFn 4681 -KSku 4682 -ZXhw 4683 -IGNvbXBs 4684 -IGluc3RhbGw= 4685 -IGNvbXBsZXRl 4686 -cXVldWU= 4687 -YXR1cmFs 4688 -IGdlbmVyYWw= 4689 -dGhvbg== 4690 -IGFza2Vk 4691 -b3Jlcw== 4692 -KHJlcw== 4693 -IHJlc2VydmVk 4694 -U1A= 4695 -IOKApg== 4696 -xYI= 4697 -IHNpZ25pZmlj 4698 -T2Zm 4699 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 4700 -IEFn 4701 -IEp1c3Q= 4702 -IEVycm9y 4703 -IGluZmw= 4704 -YWRhdGE= 4705 -IGljb24= 4706 -YXNrcw== 4707 -Jyc= 4708 -X0xP 4709 -Py4= 4710 -YWNjb3VudA== 4711 -ICgq 4712 -JykKCg== 4713 -cmFw 4714 -X3Zhcg== 4715 -IEZPUg== 4716 -IHBhcnR5 4717 -IFlvdXI= 4718 -Y2F0 4719 -c3RyeQ== 4720 -Lm5ldw== 4721 -Ym9vdA== 4722 -IE5vdg== 4723 -IHZlY3Rvcg== 4724 -IG5vcm1hbA== 4725 -IGZ1cnRoZXI= 4726 -UmVwb3NpdG9yeQ== 4727 -ODAw 4728 -IGRhdGFiYXNl 4729 -YXR0bGU= 4730 -IG11c2lj 4731 -IHNwZWVk 4732 -IGRvYw== 4733 -cHJvY2Vzcw== 4734 -SUdIVA== 4735 -LnBhcnNl 4736 -IHRha2luZw== 4737 -IHZpb2w= 4738 -Y2VlZA== 4739 -IEFmdGVy 4740 -IGZvcndhcmQ= 4741 -IGNyaXQ= 4742 -Ii8+Cg== 4743 -cm90 4744 -IGZhaWxlZA== 4745 -ZWZvcmU= 4746 -IGNvbmNlcm4= 4747 -b2U= 4748 -YmE= 4749 -IHNlbmRlcg== 4750 -IHRlcm0= 4751 -aGFz 4752 -PSIj 4753 -IHBvdGVudGlhbA== 4754 -TnVt 4755 -IHB1Ymxpc2hlZA== 4756 -LmNsb3Nl 4757 -IEltYWdl 4758 -c3RyYWludA== 4759 -VUQ= 4760 -IE9i 4761 -IHByb2JhYmx5 4762 -bGlt 4763 -IjoK 4764 -b2x1bWU= 4765 -IGNvbnN1bQ== 4766 -NzY= 4767 -YWd1ZQ== 4768 -ZW5zaW9ucw== 4769 -IGludmVzdGln 4770 -LXllYXI= 4771 -Jyk7 4772 -LXNt 4773 -IGVuam95 4774 -b3JpZw== 4775 -ZXJpbmc= 4776 -Y3A= 4777 -bGVhc2Vk 4778 -cGxlbWVudHM= 4779 -IHJldHVybnM= 4780 -cGF0 4781 -Qk8= 4782 -IEhvdXNl 4783 -LkxhYmVs 4784 -IHdlaWdodA== 4785 -aWdoYg== 4786 -IGNvbmRpdGlvbnM= 4787 -IGV4Y2VwdGlvbg== 4788 -ZGVzY3JpcHRpb24= 4789 -IHRyYWQ= 4790 -LXRv 4791 -IHt9 4792 -IG1vZHVsZQ== 4793 -RU5E 4794 -LmFw 4795 -LnByb3Bz 4796 -IGNvbnN0cnVjdG9y 4797 -YXZlcw== 4798 -IGZhdm9y 4799 -IE5vdw== 4800 -O2k= 4801 -IE1haW4= 4802 -X2s= 4803 -ZXJpZXM= 4804 -4oCZbGw= 4805 -dHJhbnNmb3Jt 4806 -aW1lc3RhbXA= 4807 -UHJl 4808 -IG1lcg== 4809 -LnJlcw== 4810 -c3RhbnQ= 4811 -TG9jYXRpb24= 4812 -X05BTUU= 4813 -IGxvc3M= 4814 -IAoK 4815 -bmV0 4816 -IGVuZ2luZQ== 4817 -QmxvY2s= 4818 -IGlzc3Vlcw== 4819 -IHBhcnNl 4820 -IEJhcg== 4821 -IHN0YXk= 4822 -IEpTT04= 4823 -IGRvbQ== 4824 -YWlycw== 4825 -d25lcg== 4826 -IGxvd2Vy 4827 -IiwNCg== 4828 -IERlbQ== 4829 -dWZhY3Q= 4830 -IHBz 4831 -IHBlcmZlY3Q= 4832 -Ukw= 4833 -IGVkdWM= 4834 -bHM= 4835 -ZW1vcnk= 4836 -QVJSQU5U 4837 -dWdl 4838 -IGV4YWN0 4839 -LmtleQ== 4840 -YWxsZWQ= 4841 -ZWNo 4842 -aWVm 4843 -XC8= 4844 -b2tl 4845 -IGZvcm1lcg== 4846 -YWxsb2M= 4847 -IHNpeA== 4848 -aWRh 4849 -IG1hcmdpbg== 4850 -IGhlYXJ0 4851 -YWxk 4852 -cGFjaw== 4853 -LmdldEVsZW1lbnRCeUlk 4854 -IFdBUlJBTlQ= 4855 -IHJhdGhlcg== 4856 -IGJ1aWxkaW5n 4857 -ZXJtYW4= 4858 -bGljZQ== 4859 -IHF1ZXN0aW9ucw== 4860 -aXplcw== 4861 -bGVnZQ== 4862 -aXJlY3Rvcnk= 4863 -IGpl 4864 -IGNhcw== 4865 -cHJvcHM= 4866 -dXRm 4867 -IHNlY3VyaXR5 4868 -IGhvd2V2ZXI= 4869 -d2VpZ2h0 4870 -IGluc2lkZQ== 4871 -IHByZXNpZGVudA== 4872 -Q2hhcg== 4873 -IFdJVEg= 4874 -Lm1hcA== 4875 -IGdyYXBo 4876 -IHRhZw== 4877 -X3N0YXR1cw== 4878 -IGF0dGVtcHQ= 4879 -b3Bw 4880 -dXNlcw== 4881 -CWNvbnN0 4882 -IHJvdW5k 4883 -LCQ= 4884 -IGZyaWVuZHM= 4885 -RW1haWw= 4886 -Pz4= 4887 -UmVzb3VyY2U= 4888 -S0VZ 4889 -b3Nw 4890 -LnF1ZXJ5 4891 -IE5vcnRo 4892 -YWJsZXM= 4893 -aXN0cmli 4894 -X2NsYXNz 4895 -ZWxsbw== 4896 -VGhhdA== 4897 -0Lo= 4898 -cGVjaWFsbHk= 4899 -IFByZXNpZGVudA== 4900 -IGNhbXBhaWdu 4901 -IGFsdA== 4902 -YXJlYQ== 4903 -IGNoYWxs 4904 -IG9wcG9ydA== 4905 -LkNvbg== 4906 -IGVuZXJneQ== 4907 -bGlrZQ== 4908 -LnN0cmluZw== 4909 -aW5ndG9u 4910 -KSo= 4911 -eXk= 4912 -IHByb2Zlc3Npb24= 4913 -aXJ0aA== 4914 -IHNlZw== 4915 -5pw= 4916 -IGhvcg== 4917 -aWVycw== 4918 -Y2Fu 4919 -IGJlaGluZA== 4920 -UHJvZHVjdA== 4921 -Zmc= 4922 -IFNr 4923 -LmpwZw== 4924 -Pzo= 4925 -XTsKCg== 4926 -IGNhbGxiYWNr 4927 -IEh0dHA= 4928 -0Yw= 4929 -bG9uZw== 4930 -TVM= 4931 -QVRI 4932 -IHJhaXNl 4933 -IHdhbnRlZA== 4934 -cm93bg== 4935 -dXRvcg== 4936 -bHQ= 4937 -XT0= 4938 -ZWxpbmU= 4939 -TUE= 4940 -IHNlcGFy 4941 -Y3M= 4942 -c2VtYg== 4943 -RGlz 4944 -YnNlcnY= 4945 -IFdpbGw= 4946 -IHBvbGljeQ== 4947 -IHRoaXJk 4948 -cGhvbmU= 4949 -IGJlZA== 4950 -L2c= 4951 -Ll9f 4952 -IEluYw== 4953 -aXppbmc= 4954 -LnJlbW92ZQ== 4955 -aW5zdGFuY2U= 4956 -LnR5cGU= 4957 -IHNlcnY= 4958 -RWFjaA== 4959 -IGhhcg== 4960 -IE1lc3NhZ2U= 4961 -KGtleQ== 4962 -U0VMRUNU 4963 -UG9z 4964 -KSk7DQo= 4965 -IHJlY29tbQ== 4966 -IHRyYWluaW5n 4967 -IEVudA== 4968 -IENoYXI= 4969 -aWNodA== 4970 -KGZpbGU= 4971 -IHByaW9y 4972 -R2FtZQ== 4973 -IGV4aXQ= 4974 -UGFyYW1z 4975 -LmNvcmU= 4976 -UEM= 4977 -bmVz 4978 -YW5jZWQ= 4979 -KHJlcXVlc3Q= 4980 -UGFzc3dvcmQ= 4981 -fT4K 4982 -IG1hZw== 4983 -IHJlbGVhc2U= 4984 -IHNoYWxs 4985 -dWRlbnQ= 4986 -IFNvdXRo 4987 -YW5kbw== 4988 -Oic= 4989 -LlRhYkluZGV4 4990 -c2s= 4991 -YW5uZXI= 4992 -aXNzZXQ= 4993 -IG91dHNpZGU= 4994 -bGVkZ2U= 4995 -IOU= 4996 -IFJvYg== 4997 -IGltbQ== 4998 -IQo= 4999 -IFdlYg== 5000 -RGVz 5001 -QkM= 5002 -YW5jaWFs 5003 -Um91dGU= 5004 -RGVj 5005 -ZmVyZW5jZXM= 5006 -IHB1cmNo 5007 -IE1vZGVs 5008 -Y3Rvcg== 5009 -Z24= 5010 -X3N0YXJ0 5011 -X3Vu 5012 -Lio= 5013 -aXNlcw== 5014 -IGdyb3VuZA== 5015 -IHVuaXF1ZQ== 5016 -IGJlYXV0 5017 -eyI= 5018 -IHBvdXI= 5019 -IE9jdA== 5020 -IHRyZWU= 5021 -c2V0cw== 5022 -X3Jlcw== 5023 -JyktPg== 5024 -X3JlZw== 5025 -KCJc 5026 -IGJ5dGU= 5027 -Qmw= 5028 -IGRhdGluZw== 5029 -IG1hdHRlcg== 5030 -IFJlbQ== 5031 -ICcuLi8= 5032 -IEF1Zw== 5033 -IExh 5034 -ICQo 5035 -b3VybmFs 5036 -MTEx 5037 -aWFt 5038 -IHNob3dz 5039 -d3JpdGU= 5040 -IGJhbGw= 5041 -IHNpbXBseQ== 5042 -IGZhc3Q= 5043 -IG1lbW9yeQ== 5044 -QVNT 5045 -IE9m 5046 -b3ZlZA== 5047 -YW50ZQ== 5048 -YXVs 5049 -aXN0cnk= 5050 -KSkpOwo= 5051 -IGZpdA== 5052 -PHN0cmluZw== 5053 -IHBvbGl0aWNhbA== 5054 -YW5jZWw= 5055 -Xy4= 5056 -Y2FyZA== 5057 -LmN1cnJlbnQ= 5058 -b2No 5059 -X2ltYWdl 5060 -XHQ= 5061 -Iwo= 5062 -KEw= 5063 -IGluZHVzdHJ5 5064 -Y29taW5n 5065 -IGV4dHJh 5066 -NjAw 5067 -IHJlcG9ydGVk 5068 -LnN0YXJ0 5069 -IHJlc291cmNlcw== 5070 -IGltZw== 5071 -Zmxvdw== 5072 -X0VY 5073 -KG51bGw= 5074 -IFByZQ== 5075 -IHdyb25n 5076 -aW50ZXJmYWNl 5077 -UGFyYW1ldGVy 5078 -bmVycw== 5079 -4bs= 5080 -dHVyZQ== 5081 -ZXJzaXN0 5082 -b3VudHJ5 5083 -IHNlZW1z 5084 -YWxhbmNl 5085 -ZGVzdA== 5086 -CVN0cmluZw== 5087 -IG1haW50 5088 -IHVuaXQ= 5089 -YWN0ZXJz 5090 -IFRS 5091 -aWZ1bA== 5092 -ZXhwb3J0cw== 5093 -cHJvamVjdA== 5094 -QXBwbGljYXRpb24= 5095 -bGVnYXRl 5096 -IHRha2Vz 5097 -dGVybQ== 5098 -IGV0Yw== 5099 -dXN0ZXI= 5100 -IGFwcGVhcg== 5101 -YWRkcmVzcw== 5102 -IGZlbQ== 5103 -aHM= 5104 -IGhvbQ== 5105 -LC0= 5106 -IGRpZmZpY3VsdA== 5107 -IGNvbWluZw== 5108 -T3Blbg== 5109 -IHNldHRpbmdz 5110 -IFdhcg== 5111 -IFRoZW4= 5112 -IGF1dG9t 5113 -IEZvdW5kYXRpb24= 5114 -IHF1aXRl 5115 -RGVzY3JpcHRpb24= 5116 -IGJsb2c= 5117 -aXF1 5118 -UFM= 5119 -MTEw 5120 -X2ZpZWxk 5121 -SnNvbg== 5122 -U1NJT04= 5123 -IFNjaA== 5124 -IExP 5125 -IGRlc2NyaQ== 5126 -IGV2ZXJ5b25l 5127 -IHByZXR0eQ== 5128 -IGxvbmdlcg== 5129 -IG1lbnU= 5130 -IGN1cnJlbnRseQ== 5131 -c2Vj 5132 -IHJlbGF0aW9uc2hpcA== 5133 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 5134 -IE1hcA== 5135 -YXNldA== 5136 -IHBhcmFtZXRlcnM= 5137 -IGNydXNo 5138 -Ig0K 5139 -SUxJVFk= 5140 -aWdyYXRpb24= 5141 -IGNvdXQ= 5142 -dG90YWw= 5143 -IG5hbWVz 5144 -bmRlZg== 5145 -Iik7 5146 -cmllbmQ= 5147 -eW5hbWlj 5148 -IGVmZm9ydA== 5149 -IGFjdHVhbA== 5150 -IGZpZWxkcw== 5151 -T1VO 5152 -dGVycw== 5153 -MjUw 5154 -IGZpeA== 5155 -X21vZGVs 5156 -IGNhc2Vz 5157 -Q0E= 5158 -TXk= 5159 -SW50ZXJmYWNl 5160 -IFNF 5161 -MTk2 5162 -XV0= 5163 -YWxsZQ== 5164 -IE5hdGlvbmFs 5165 -IEFycmF5TGlzdA== 5166 -aW5saW5l 5167 -LlY= 5168 -YXJh 5169 -cmVmaXg= 5170 -YXNj 5171 -UmVhZGVy 5172 -INC/ 5173 -YXN0aWM= 5174 -KCgp 5175 -Q2w= 5176 -LmFubm90YXRpb24= 5177 -IHBlcmZvcm1hbmNl 5178 -YWlseQ== 5179 -LnRvU3RyaW5n 5180 -Lm5ldA== 5181 -dmlld3M= 5182 -LmVuZA== 5183 -YXllcnM= 5184 -bGF0ZQ== 5185 -IEFwcg== 5186 -ZWRlcmFs 5187 -J10p 5188 -LmJvZHk= 5189 -IGhpZ2hlcg== 5190 -X2Zs 5191 -Y3I= 5192 -YWxlcnQ= 5193 -X25vZGU= 5194 -IEdvb2dsZQ== 5195 -IGl0c2VsZg== 5196 -QXV0aA== 5197 -dXJyZW5jeQ== 5198 -IHNpZ25pZmljYW50 5199 -YXBwZW5k 5200 -IHJlc3BlY3Q= 5201 -c3RyYXA= 5202 -IHVuYQ== 5203 -cml0ZXJpYQ== 5204 -UE9SVA== 5205 -LmFwYWNoZQ== 5206 -T3V0cHV0 5207 -IHByb2dyZXNz 5208 -IG1pZA== 5209 -IE1pY3Jvc29mdA== 5210 -IHJlc291cmNl 5211 -YWJsaXNo 5212 -IGRpbQ== 5213 -LmxvYWQ= 5214 -LkFwcA== 5215 -IGRpcmVjdGlvbg== 5216 -IGFkZGl0aW9uYWw= 5217 -ICAgICAgICAgICAgICAgICAgICAgICAg 5218 -IG51bWJlcnM= 5219 -IGNvbXBhbmllcw== 5220 -LlRo 5221 -IHNvdW5k 5222 -dXNlcm5hbWU= 5223 -IHN0YXRlbWVudA== 5224 -IGFsZXJ0 5225 -IGNvbnRyYWN0 5226 -aG9tZQ== 5227 -X2xlbmd0aA== 5228 -LkNvbXBvbmVudA== 5229 -ZXY= 5230 -LkV4 5231 -77ya 5232 -Ijs= 5233 -IEhpZ2g= 5234 -ICkKCg== 5235 -IFBvaW50 5236 -b3Bo 5237 -IGxpbmVz 5238 -LT5f 5239 -IikKCg== 5240 -b3g= 5241 -YXBwbGljYXRpb24= 5242 -IF0K 5243 -CgoKCgoK 5244 -MTgw 5245 -IHNvb24= 5246 -Y3Rpb25z 5247 -aW5nZXI= 5248 -IGpvaW4= 5249 -IFBl 5250 -IOs= 5251 -IGxhcw== 5252 -LkU= 5253 -Y3Nz 5254 -L29y 5255 -IFN0YXJ0 5256 -IFRP 5257 -IHN1YnM= 5258 -Y29ubg== 5259 -Y29tcG9uZW50cw== 5260 -REVCVUc= 5261 -cXVhcmU= 5262 -RnVuY3Rpb24= 5263 -ZW5kYXI= 5264 -LmluZGV4 5265 -IGZpbGw= 5266 -xJk= 5267 -IGNob29zZQ== 5268 -aG93 5269 -IEFtZXJpY2E= 5270 -YXNzZXRz 5271 -LS0tLS0tLS0tLS0t 5272 -IFZhbHVl 5273 -IG9mZmljZQ== 5274 -IHZlaA== 5275 -IHRyYW5zZm9ybQ== 5276 -IEFydA== 5277 -IGluZGU= 5278 -IGZu 5279 -IGltcGxlbWVudHM= 5280 -YW5nbw== 5281 -cGxldGU= 5282 -KyI= 5283 -dG1w 5284 -YW1pbHk= 5285 -IGhhc2g= 5286 -bWlzc2lvbnM= 5287 -RVNU 5288 -Z3Q= 5289 -UHJvdmlkZXI= 5290 -ICAgICAgICAgICAgICAgICAgICAgIA== 5291 -IGZsYWc= 5292 -IHBhcnRpY2lw 5293 -ZGVu 5294 -IFJldHVybnM= 5295 -IG5vdGU= 5296 -w7xy 5297 -cG0= 5298 -aWRlb3M= 5299 -IHNwZWNpZmllZA== 5300 -IEVO 5301 -ZXN0ZXI= 5302 -b2xpZA== 5303 -IHVwb24= 5304 -KHN0ZA== 5305 -CXY= 5306 -ICdc 5307 -dXo= 5308 -IHZlcnQ= 5309 -IHZpY3Q= 5310 -CXNlbGY= 5311 -ICIk 5312 -ODU= 5313 -Lms= 5314 -IGdyb3Vwcw== 5315 -Z2l0aHVi 5316 -bGFuZw== 5317 -IG11dA== 5318 -VE8= 5319 -IHZl 5320 -IFBsZWFzZQ== 5321 -OwoKCg== 5322 -YWNjZXNz 5323 -IHsi 5324 -cmVh 5325 -IHJpc2s= 5326 -aWNrZXI= 5327 -b2dnbGU= 5328 -CXdoaWxl 5329 -QU5H 5330 -LnNlbmQ= 5331 -NzI= 5332 -IHdvbWFu 5333 -IGdldHM= 5334 -IGlnbg== 5335 -IElk 5336 -X2xvZw== 5337 -T05F 5338 -IGV2aWQ= 5339 -IEhhcg== 5340 -X3N1Yg== 5341 -IGVuZGw= 5342 -IGluY2x1ZGVk 5343 -KCkpOwoK 5344 -IEFw 5345 -aWdy 5346 -IHNlbQ== 5347 -IEJsYWNr 5348 -ZG9j 5349 -X3RhYmxl 5350 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 5351 -LXVw 5352 -IGNhdXNl 5353 -IC4u 5354 -IHZhbg== 5355 -X2RpY3Q= 5356 -IGZvY3Vz 5357 -SU5E 5358 -Q0VTUw== 5359 -LkxvZw== 5360 -IG11bHRpcGxl 5361 -aWRv 5362 -IHJlZ2FyZA== 5363 -LU0= 5364 -YW5kbGVy 5365 -b3Vyc2U= 5366 -IGRlZw== 5367 -LlU= 5368 -IGFkZGl0aW9u 5369 -IHZhcmlvdXM= 5370 -IHJlY2VpdmU= 5371 -0LXQvQ== 5372 -IEhU 5373 -T2Jq 5374 -REY= 5375 -IGluY3JlYXNl 5376 -IE9wZW4= 5377 -XTs= 5378 -IGNvbW1pdA== 5379 -Pwo= 5380 -YXRlZ29yaWVz 5381 -YXRvcnk= 5382 -c2hpcA== 5383 -IE1pY2g= 5384 -IGh0bWw= 5385 -cm9taXNl 5386 -IGxlYXZl 5387 -IHN0cmF0ZWc= 5388 -YXZlbg== 5389 -IENvbnNvbGU= 5390 -a25vd24= 5391 -LW4= 5392 -X0xF 5393 -LmNvbXBvbmVudA== 5394 -IGJyZQ== 5395 -U2Vzc2lvbg== 5396 -aWFuY2U= 5397 -IGFsaWdu 5398 -dHlwZWRlZg== 5399 -X3Jlc3VsdA== 5400 -IFdIRVJF 5401 -LnNwbGl0 5402 -IHJlYWRpbmc= 5403 -RkFVTFQ= 5404 -IGNsbw== 5405 -IG5vdGljZQ== 5406 -X3By 5407 -YXJ0ZXI= 5408 -IGxvY2s= 5409 -IHN0YW5kYXJk 5410 -ZXRpYw== 5411 -ZWxsb3c= 5412 -IHBhZGRpbmc= 5413 -IEhpcw== 5414 -IHN0YXRlcw== 5415 -X2Nhc3Q= 5416 -KFA= 5417 -YWE= 5418 -IGludGVybmFs 5419 -ZWFu 5420 -IFBSTw== 5421 -IEtleQ== 5422 -IGVzcGVjaWFsbHk= 5423 -bWluZw== 5424 -IGNyb3Nz 5425 -IG5hdGlvbmFs 5426 -X29iamVjdA== 5427 -ZmlsdGVy 5428 -IHNjcmlwdA== 5429 -LnVwZGF0ZQ== 5430 -X2k= 5431 -IEFzc2VydA== 5432 -L2NvcmU= 5433 -JSUlJQ== 5434 -IHByb2JsZW1z 5435 -aXN0b3I= 5436 -IC49 5437 -IGFyY2g= 5438 -IHdyaXR0ZW4= 5439 -IG1pbGl0 5440 -TUVOVA== 5441 -LmNo 5442 -Y2FwZQ== 5443 -IE11cw== 5444 -X2NvbmZpZw== 5445 -IEFQSQ== 5446 -Zm9vdA== 5447 -IGltYWdlcw== 5448 -ZW5kbA== 5449 -Lklu 5450 -Rmlyc3Q= 5451 -IHBsYXRmb3Jt 5452 -LnByb3Q= 5453 -T3B0aW9u 5454 -c3Rl 5455 -IFRPRE8= 5456 -IGZvcmNl 5457 -LmNvbnQ= 5458 -CWVjaG8= 5459 -IERhdg== 5460 -UHRy 5461 -KEI= 5462 -UlQ= 5463 -IEJhc2U= 5464 -XVsn 5465 -IGFubm91bmM= 5466 -Y29uc29sZQ== 5467 -IFB5 5468 -ZHM= 5469 -LmFz 5470 -IHByZXZlbnQ= 5471 -YXBhbg== 5472 -IHsn 5473 -fTwv 5474 -IFNlcnZpY2U= 5475 -IFNlbg== 5476 -YWRvcg== 5477 -cHJvZmlsZQ== 5478 -VG9w 5479 -IGl0ZXI= 5480 -cG8= 5481 -SUVT 5482 -SlNPTg== 5483 -SUU= 5484 -aWFudA== 5485 -44CB 5486 -X2o= 5487 -IFNlcHQ= 5488 -X21hcA== 5489 -YnVt 5490 -KGNvbnRleHQ= 5491 -IEhvbWU= 5492 -aWFucw== 5493 -R0I= 5494 -NjM= 5495 -IGxpdmluZw== 5496 -IHBhdHRlcm4= 5497 -KGlucHV0 5498 -aWNpZW50 5499 -OTk5 5500 -Q29yZQ== 5501 -IGVudGl0eQ== 5502 -IGludGVn 5503 -Q2hhbmdlZA== 5504 -IHVzZWZ1bA== 5505 -LmluZm8= 5506 -IHRvb2w= 5507 -KGl0ZW0= 5508 -IG9r 5509 -IGZlZWQ= 5510 -SVg= 5511 -w6lz 5512 -IE5ld3M= 5513 -cmVtb3Zl 5514 -ZXJyeQ== 5515 -CQkJCQkJCQkJ 5516 -aXBtZW50 5517 -YXJlcw== 5518 -RG8= 5519 -Q3VycmVudA== 5520 -LmNvbnRlbnQ= 5521 -Lkdyb3Vw 5522 -dXN0cmFs 5523 -INGB 5524 -fSk= 5525 -IHBvcHVsYXI= 5526 -IHN0cmU= 5527 -IG1ldGhvZHM= 5528 -X0VSUk9S 5529 -TGVmdA== 5530 -Y2Fs 5531 -YnNw 5532 -LlRvU3RyaW5n 5533 -IGRpcg== 5534 -IGFsbG93ZWQ= 5535 -IGltcGFjdA== 5536 -IildCg== 5537 -NjI= 5538 -LmNvbmZpZw== 5539 -IGVsZW1lbnRz 5540 -IHByb3Rl 5541 -IHRyYWlu 5542 -LnRy 5543 -cnM= 5544 -IFJlcHVibGlj 5545 -IFRhc2s= 5546 -NjE= 5547 -YXJpZXM= 5548 -KEQ= 5549 -KGdldA== 5550 -4oCmCgo= 5551 -IHJlbGF0ZWQ= 5552 -IHZlcnM= 5553 -IHNpbA== 5554 -ICIiOwo= 5555 -IGNtZA== 5556 -IHRlY2hub2xvZ3k= 5557 -LndpZHRo 5558 -RmxvYXQ= 5559 -IFVzZQ== 5560 -Qm9keQ== 5561 -c2hvdWxk 5562 -LmpvaW4= 5563 -Rm9udA== 5564 -bGx1bQ== 5565 -eWNsZQ== 5566 -IEJyaXQ= 5567 -IG1pdA== 5568 -IHNjYWxl 5569 -IChf 5570 -ZXJuZWw= 5571 -IikpCg== 5572 -IHNjb3Jl 5573 -L3Y= 5574 -IHN0dWRlbnQ= 5575 -VUM= 5576 -LnNob3c= 5577 -IGF2ZXJhZ2U= 5578 -RW5hYmxlZA== 5579 -KGV4 5580 -Y29tbW9u 5581 -aW1hdGlvbg== 5582 -OkAi 5583 -Y2hpZQ== 5584 -IC4uLgoK 5585 -cml2ZXI= 5586 -IE1hcmNo 5587 -Y2F0ZWdvcnk= 5588 -Zmlu 5589 -IGNvdXJ0 5590 -0LI= 5591 -U2VydmVy 5592 -IGNvbnRhaW5lcg== 5593 -LXN0 5594 -X2Zvcg== 5595 -IHBhcnRz 5596 -IGRlY2lzaW9u 5597 -b2Jz 5598 -b3Vi 5599 -bWl0dGVk 5600 -ICQoJyM= 5601 -IHNhdw== 5602 -IGFwcHJvYWNo 5603 -SUNF 5604 -IHNheWluZw== 5605 -IGFueW9uZQ== 5606 -bWV0YQ== 5607 -U0Q= 5608 -IHNvbmc= 5609 -ZGlzcGxheQ== 5610 -T3Blcg== 5611 -b3V0ZXM= 5612 -IGNoYW5uZWw= 5613 -IGNoYW5nZWQ= 5614 -w6o= 5615 -IGZpbmFsbHk= 5616 -X251bWJlcg== 5617 -UGxlYXNl 5618 -4KQ= 5619 -b3Jpbmc= 5620 -LXJl 5621 -IGtpbGw= 5622 -IGRydWc= 5623 -d2luZG93 5624 -IGNvbnZlcnQ= 5625 -b21icmU= 5626 -IHdheXM= 5627 -SGVscGVy 5628 -IEZpcnN0 5629 -KF9f 5630 -dXJpdHk= 5631 -IFdpbmRvd3M= 5632 -ZWVz 5633 -IG1hdA== 5634 -cmFwcGVy 5635 -IHBsdXM= 5636 -YW5nZXM= 5637 -Il0u 5638 -YXpvbg== 5639 -L3Q= 5640 -bGF0 5641 -YXN0ZQ== 5642 -IHByb2ZpbGU= 5643 -IHJlYWR5 5644 -I2lmbmRlZg== 5645 -cm90ZQ== 5646 -IHNlbnNl 5647 -R2VuZXI= 5648 -IENvbmZpZw== 5649 -b215 5650 -IEp1bmU= 5651 -IGxhdGVzdA== 5652 -IHNhZg== 5653 -IHJlZ2lvbg== 5654 -IGRlZXA= 5655 -d2l0Y2g= 5656 -IFBhcms= 5657 -fWA= 5658 -IEZyb20= 5659 -SUk= 5660 -IGN2 5661 -IHJlYWNo 5662 -IGNvdW50ZXI= 5663 -IFdvcms= 5664 -IFVSTA== 5665 -IFVwZGF0ZQ== 5666 -JywNCg== 5667 -IGltbWVkaQ== 5668 -Y2xvc2U= 5669 -YWRvcw== 5670 -ZmVycmVk 5671 -IHdlZWtz 5672 -dXJn 5673 -IGRhbWFnZQ== 5674 -IGxvc3Q= 5675 -YW5p 5676 -X2xv 5677 -IGhpbXNlbGY= 5678 -IGRvZw== 5679 -KV0K 5680 -778= 5681 -cGly 5682 -dHQ= 5683 -IHBhcGVy 5684 -IHRoZW1z 5685 -c2Vjb25k 5686 -IHN0YWZm 5687 -IElucHV0 5688 -Iis= 5689 -IEZhY2Vib29r 5690 -IGFsbG9j 5691 -IHNjaGVk 5692 -QUNF 5693 -IHRoZW1zZWx2ZXM= 5694 -IENvbXBvbmVudA== 5695 -IGRyaXZlcg== 5696 -amE= 5697 -KHBhdGg= 5698 -IGNhdGVnb3J5 5699 -YWxscw== 5700 -cHU= 5701 -bGx1bWluYXRl 5702 -IEFjdGlvbg== 5703 -LmJ1dHRvbg== 5704 -IEdM 5705 -aXN0aWNz 5706 -IG9pbA== 5707 -IHN0b2Nr 5708 -Pic= 5709 -IGRlYWQ= 5710 -VkFM 5711 -UVVF 5712 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 5713 -IGNoYXJn 5714 -UmV0dXJu 5715 -IGZ1bA== 5716 -ZG9t 5717 -IHJ1bGVz 5718 -IG1vZGlmeQ== 5719 -IGV2YWw= 5720 -aGFt 5721 -YXRlbWVudA== 5722 -XDw= 5723 -dWxh 5724 -PUZhbHNl 5725 -UkE= 5726 -IGNvbnRhaW5z 5727 -NzQ= 5728 -IHN0YWNr 5729 -bWFy 5730 -IHt9Cg== 5731 -IHVuZGVmaW5lZA== 5732 -QXNz 5733 -IENoaW5h 5734 -dmV5 5735 -Kgo= 5736 -IHBsYXlpbmc= 5737 -KS8= 5738 -YWN0b3I= 5739 -IGJvdHRvbQ== 5740 -bGllcg== 5741 -IE51bWJlcg== 5742 -IGNvdXBsZQ== 5743 -REM= 5744 -IFNP 5745 -Z29y 5746 -LnNldFRleHQ= 5747 -c3VjY2Vzcw== 5748 -Y29tbWFuZA== 5749 -RmlsdGVy 5750 -IE91cg== 5751 -X2l0ZW0= 5752 -IGN0eA== 5753 -IHJvYWQ= 5754 -VmVyc2lvbg== 5755 -Y2FzZQ== 5756 -dXJ0 5757 -YXZpb3I= 5758 -eWNo 5759 -c2VtYmx5 5760 -IFByb2R1Y3Q= 5761 -IGhlbGQ= 5762 -YWZl 5763 -IGluY2x1ZGVz 5764 -PHF1b3Rl 5765 -IGF2b2lk 5766 -IEZpbg== 5767 -IE1vZA== 5768 -IHRhYg== 5769 -YW5v 5770 -w7E= 5771 -aXBwaW5n 5772 -LWU= 5773 -IGluc2VydA== 5774 -dGFyZ2V0 5775 -Y2hhbg== 5776 -Lk1vZGVs 5777 -SU1F 5778 -XAo= 5779 -IG1hY2hpbmU= 5780 -YXZ5 5781 -IE5P 5782 -IEludGVy 5783 -IG9wZXJhdGlvbg== 5784 -bW9kYWw= 5785 -VGFn 5786 -XTo= 5787 -IHByb2R1Y3Rpb24= 5788 -IGFyZWFz 5789 -IHJlbg== 5790 -X2Zyb20= 5791 -bmJzcA== 5792 -IG9wZXJhdG9y 5793 -bWVu 5794 -YXBwZWQ= 5795 -X3Blcg== 5796 -emVu 5797 -KCIu 5798 -LnNhdmU= 5799 -PSJ7ew== 5800 -IHRvcg== 5801 -KHJlc3BvbnNl 5802 -IGNhbmRpZA== 5803 -IGNvbnY= 5804 -YWlsZWQ= 5805 -IExpYg== 5806 -Y29tcA== 5807 -dXJh 5808 -77+9 5809 -IEhlcmU= 5810 -IGFyZ3VtZW50 5811 -aG9vZA== 5812 -IGVzdGFibGlzaA== 5813 -b2dyYXBoeQ== 5814 -IG9uQ2xpY2s= 5815 -YW1iZGE= 5816 -IHNjaA== 5817 -IG1vdmll 5818 -IHNlYw== 5819 -IGFjdGl2aXR5 5820 -2Kc= 5821 -IHNxbA== 5822 -X2FsbA== 5823 -aW5jaXA= 5824 -IHByb3ZpZGVz 5825 -IHN5cw== 5826 -YWNrZXQ= 5827 -IHdhc24= 5828 -IHVzZXM= 5829 -IEZ1bmN0aW9u 5830 -Lmdvb2dsZQ== 5831 -IFJlc3VsdA== 5832 -ODQ= 5833 -VmlzaWJsZQ== 5834 -YWdtYQ== 5835 -ZWxjb21l 5836 -IFN5 5837 -IENlbnQ= 5838 -QUxTRQ== 5839 -YWNpw7Nu 5840 -RVhU 5841 -IGxpY2Vuc2U= 5842 -IExvbmc= 5843 -IGFjY29t 5844 -IGFiaWxpdHk= 5845 -LmhlaWdodA== 5846 -QWN0aXZl 5847 -b2xvZ2ljYWw= 5848 -b2x5 5849 -KSks 5850 -LlNl 5851 -IHBhcmFtZXRlcg== 5852 -cHJpdGU= 5853 -QUJJTElUWQ== 5854 -LnNlcnZpY2U= 5855 -IEdyb3Vw 5856 -X3F1ZXJ5 5857 -IEl0ZW0= 5858 -aW5pbmc= 5859 -IGp1ZA== 5860 -aW1z 5861 -Zml4 5862 -aW5kZXI= 5863 -YWdyYW0= 5864 -IGZ1bmN0aW9ucw== 5865 -IGV4cGVyaQ== 5866 -IEVt 5867 -IHJvdA== 5868 -IHBlbg== 5869 -LmJ0bg== 5870 -IEFT 5871 -I2lmZGVm 5872 -IGNob2ljZQ== 5873 -IFBhZ2U= 5874 -X1BSTw== 5875 -UVU= 5876 -5Y8= 5877 -YW50aXR5 5878 -wq0= 5879 -d29yZHM= 5880 -IHJlYWRvbmx5 5881 -IGZsZXg= 5882 -cHJvdGVjdGVk 5883 -IEFueQ== 5884 -IGNoYXJhY3RlcnM= 5885 -ZW5jZWQ= 5886 -IEp1bHk= 5887 -aWxlcg== 5888 -Q2FyZA== 5889 -dXJhbmNl 5890 -IHJldg== 5891 -LmV2ZW50 5892 -YWx5 5893 -MTMw 5894 -IHdvbmRlcg== 5895 -IFBvcnQ= 5896 -IGxlZ2Fs 5897 -cm9sZQ== 5898 -IHRlbg== 5899 -IGdvZXM= 5900 -TVA= 5901 -d2hpdGU= 5902 -KToNCg== 5903 -KSkNCg== 5904 -IHJlZmVyZW5jZQ== 5905 -IG1pcw== 5906 -IFByb2plY3Q= 5907 -aWNrcw== 5908 -PiY= 5909 -Q09O 5910 -IHJlcGw= 5911 -IHJlZ3VsYXI= 5912 -U3RvcmFnZQ== 5913 -cmFtZXdvcms= 5914 -IGdvYWw= 5915 -IHRvdWNo 5916 -LndpZGdldA== 5917 -IGJ1aWx0 5918 -ZGVz 5919 -UGFydA== 5920 -KHJl 5921 -IHdvcnRo 5922 -aGli 5923 -Z2FtZQ== 5924 -OTE= 5925 -MTky 5926 -INCy 5927 -YWNpb24= 5928 -IFdoaXRl 5929 -KHR5cGU= 5930 -KGA= 5931 -ODE= 5932 -IG5hdHVyYWw= 5933 -IGluag== 5934 -IGNhbGN1bA== 5935 -IEFwcmls 5936 -Lkxpc3Q= 5937 -IGFzc29jaWF0ZWQ= 5938 -CVN5c3RlbQ== 5939 -fn4= 5940 -PVs= 5941 -IHN0b3JhZ2U= 5942 -IGJ5dGVz 5943 -IHRyYXZlbA== 5944 -IHNvdQ== 5945 -IHBhc3NlZA== 5946 -IT0= 5947 -YXNjcmlwdA== 5948 -Lm9wZW4= 5949 -IGdyaWQ= 5950 -IGJ1cw== 5951 -IHJlY29nbg== 5952 -QWI= 5953 -IGhvbg== 5954 -IENlbnRlcg== 5955 -IHByZWM= 5956 -YnVpbGQ= 5957 -NzM= 5958 -SFRNTA== 5959 -IFNhbg== 5960 -IGNvdW50cmllcw== 5961 -YWxlZA== 5962 -dG9rZW4= 5963 -a3Q= 5964 -IHF1YWw= 5965 -TGFzdA== 5966 -YWRvdw== 5967 -IG1hbnVmYWN0 5968 -aWRhZA== 5969 -amFuZ28= 5970 -TmV4dA== 5971 -eGY= 5972 -LmE= 5973 -IHBvcm5v 5974 -IFBN 5975 -ZXJ2ZQ== 5976 -aXRpbmc= 5977 -X3Ro 5978 -Y2k= 5979 -PU5vbmU= 5980 -Z3M= 5981 -IGxvZ2lu 5982 -YXRpdmVz 5983 -J10pOwo= 5984 -xIU= 5985 -IGlsbA== 5986 -SUE= 5987 -Y2hpbGRyZW4= 5988 -RE8= 5989 -IGxldmVscw== 5990 -IHt7 5991 -IGxvb2tz 5992 -ICIj 5993 -VG9TdHJpbmc= 5994 -IG5lY2Vzc2FyeQ== 5995 -ICAgCg== 5996 -Y2VsbA== 5997 -RW50cnk= 5998 -ICcj 5999 -IGV4dHJlbQ== 6000 -U2VsZWN0b3I= 6001 -IHBsYWNlaG9sZGVy 6002 -TG9hZA== 6003 -IHJlbGVhc2Vk 6004 -T1JF 6005 -RW51bWVy 6006 -IFRW 6007 -U0VU 6008 -aW5x 6009 -UHJlc3M= 6010 -IERlcGFydG1lbnQ= 6011 -IHByb3BlcnRpZXM= 6012 -IHJlc3BvbmQ= 6013 -U2VhcmNo 6014 -YWVs 6015 -IHJlcXU= 6016 -IEJvb2s= 6017 -Lwo= 6018 -KHN0 6019 -IGZpbmFuY2lhbA== 6020 -aWNrZXQ= 6021 -X2lucHV0 6022 -IHRocmVhdA== 6023 -KGlu 6024 -U3RyaXA= 6025 -7J0= 6026 -w6fDo28= 6027 -NzE= 6028 -IGV2aWRlbmNl 6029 -KSk7 6030 -IEJybw== 6031 -IFtdOwo= 6032 -IG91 6033 -YnVm 6034 -U2NyaXB0 6035 -ZGF0 6036 -IHJ1bGU= 6037 -I2ltcG9ydA== 6038 -PSIv 6039 -U2VyaWFs 6040 -IHN0YXJ0aW5n 6041 -W2luZGV4 6042 -YWU= 6043 -IGNvbnRyaWI= 6044 -c2Vzc2lvbg== 6045 -X25ldw== 6046 -dXRhYmxl 6047 -b2Jlcg== 6048 -ICIuLw== 6049 -IGxvZ2dlcg== 6050 -IHJlY2VudGx5 6051 -IHJldHVybmVk 6052 -DQ0K 6053 -KSkpCg== 6054 -aXRpb25z 6055 -IHNlZWs= 6056 -IGNvbW11bmlj 6057 -ICIu 6058 -IHVzZXJuYW1l 6059 -RUNU 6060 -RFM= 6061 -IG90aGVyd2lzZQ== 6062 -IEdlcm1hbg== 6063 -LmF3 6064 -QWRhcHRlcg== 6065 -aXhlbA== 6066 -IHN5c3RlbXM= 6067 -IGRyb3A= 6068 -ODM= 6069 -IHN0cnVjdHVyZQ== 6070 -ICQoIiM= 6071 -ZW5jaWVz 6072 -YW5uaW5n 6073 -IExpbms= 6074 -IFJlc3BvbnNl 6075 -IHN0cmk= 6076 -xbw= 6077 -IERC 6078 -5pc= 6079 -YW5kcm9pZA== 6080 -c3VibWl0 6081 -b3Rpb24= 6082 -OTI= 6083 -KEA= 6084 -LnRlc3Q= 6085 -ODI= 6086 -CgoKCgoKCgo= 6087 -XTsNCg== 6088 -IGRpcmVjdGx5 6089 -ICIl 6090 -cmlz 6091 -ZWx0YQ== 6092 -QUlM 6093 -KXsNCg== 6094 -bWluZQ== 6095 -ICAgICAgICAgICAgICAgICAgICAgICAgICA= 6096 -KGs= 6097 -Ym9u 6098 -YXNpYw== 6099 -cGl0ZQ== 6100 -X19f 6101 -TWF4 6102 -IGVycm9ycw== 6103 -IFdoaWxl 6104 -IGFyZ3VtZW50cw== 6105 -IGVuc3VyZQ== 6106 -UmlnaHQ= 6107 -LWJhc2Vk 6108 -V2Vi 6109 -IC09 6110 -IGludHJvZHU= 6111 -IEluc3Q= 6112 -IFdhc2g= 6113 -b3JkaW4= 6114 -am9pbg== 6115 -RGF0YWJhc2U= 6116 -IGdyYWQ= 6117 -IHVzdWFsbHk= 6118 -SVRF 6119 -UHJvcHM= 6120 -Pz4K 6121 -IEdv 6122 -QE92ZXJyaWRl 6123 -UkVG 6124 -IGlw 6125 -IEF1c3RyYWw= 6126 -IGlzdA== 6127 -Vmlld0J5SWQ= 6128 -IHNlcmlvdXM= 6129 -IGN1c3RvbWVy 6130 -LnByb3RvdHlwZQ== 6131 -b2Rv 6132 -Y29y 6133 -IGRvb3I= 6134 -IFdJVEhPVVQ= 6135 -IHBsYW50 6136 -IGJlZ2Fu 6137 -IGRpc3RhbmNl 6138 -KCkpLg== 6139 -IGNoYW5jZQ== 6140 -IG9yZA== 6141 -Y2FtZQ== 6142 -cHJhZ21h 6143 -IHByb3RlY3Q= 6144 -cmFnbWVudA== 6145 -IE5vZGU= 6146 -ZW5pbmc= 6147 -0Yc= 6148 -IHJvdXRl 6149 -IFNjaG9vbA== 6150 -aGk= 6151 -IG5laWdoYg== 6152 -QWZ0ZXI= 6153 -bGljaXQ= 6154 -IGNvbnRy 6155 -IHByaW1hcnk= 6156 -QUE= 6157 -LldyaXRlTGluZQ== 6158 -dXRpbHM= 6159 -IGJp 6160 -UmVk 6161 -LkxpbnE= 6162 -Lm9iamVjdA== 6163 -IGxlYWRlcnM= 6164 -dW5pdGllcw== 6165 -IGd1bg== 6166 -b250aA== 6167 -IERldg== 6168 -RklMRQ== 6169 -IGNvbW1lbnRz 6170 -X2xlbg== 6171 -YXJyb3c= 6172 -YW1vdW50 6173 -UmFuZ2U= 6174 -c2VydA== 6175 -R3JpZFZpZXc= 6176 -IHVwZGF0ZWQ= 6177 -IE1v 6178 -IGluZm9ybQ== 6179 -b2NpZXR5 6180 -YWxh 6181 -QWNjZXNz 6182 -IGhhYg== 6183 -IGNyZWF0 6184 -X2FyZw== 6185 -IEphbnVhcnk= 6186 -IERheQ== 6187 -IikNCg== 6188 -dXBsZQ== 6189 -ZG9jdW1lbnQ= 6190 -Z29yaXRo 6191 -bWVudQ== 6192 -IE92ZXI= 6193 -YmI= 6194 -LnRpdGxl 6195 -X291dA== 6196 -IGxlZA== 6197 -dXJp 6198 -ID8+PC8= 6199 -Z2w= 6200 -IGJhbms= 6201 -YXltZW50 6202 -CXByaW50Zg== 6203 -TUQ= 6204 -IHNhbXBsZQ== 6205 -IGhhbmRz 6206 -IFZlcnNpb24= 6207 -dWFyaW8= 6208 -IG9mZmVycw== 6209 -aXR5RW5naW5l 6210 -IHNoYXBl 6211 -IHNsZWVw 6212 -X3BvaW50 6213 -U2V0dGluZ3M= 6214 -IGFjaGll 6215 -IHNvbGQ= 6216 -b3Rh 6217 -LmJpbmQ= 6218 -QW0= 6219 -IHNhZmU= 6220 -U3RvcmU= 6221 -IHNoYXJlZA== 6222 -IHByaXY= 6223 -X1ZBTA== 6224 -IHNlbnM= 6225 -KXs= 6226 -IHJlbWVtYmVy 6227 -c2hhcmVk 6228 -ZWxlbWVudA== 6229 -IHNob290 6230 -VmVydA== 6231 -Y291dA== 6232 -IGVudg== 6233 -X2xhYmVs 6234 -ID4K 6235 -cnVu 6236 -IHNjZW5l 6237 -KGFycmF5 6238 -ZGV2aWNl 6239 -X3RpdGxl 6240 -YWdvbg== 6241 -XQ0K 6242 -YWJ5 6243 -IGJlY2FtZQ== 6244 -Ym9vbGVhbg== 6245 -IHBhcms= 6246 -IENvZGU= 6247 -dXBsb2Fk 6248 -cmlkYXk= 6249 -IFNlcHRlbWJlcg== 6250 -RmU= 6251 -IHNlbg== 6252 -Y2luZw== 6253 -Rkw= 6254 -Q29s 6255 -dXRz 6256 -X3BhZ2U= 6257 -aW5u 6258 -IGltcGxpZWQ= 6259 -YWxpbmc= 6260 -IHlvdXJzZWxm 6261 -LkNvdW50 6262 -Y29uZg== 6263 -IGF1ZA== 6264 -X2luaXQ= 6265 -Lik= 6266 -IHdyb3Rl 6267 -MDAz 6268 -Tkc= 6269 -LkVycm9y 6270 -5Ls= 6271 -LmZvcg== 6272 -IGVxdWFs 6273 -IFJlcXVlc3Q= 6274 -IHNlcmlhbA== 6275 -IGFsbG93cw== 6276 -WFg= 6277 -IG1pZGRsZQ== 6278 -Y2hvcg== 6279 -MTk1 6280 -OTQ= 6281 -w7g= 6282 -ZXJ2YWw= 6283 -LkNvbHVtbg== 6284 -cmVhZGluZw== 6285 -IGVzY29ydA== 6286 -IEF1Z3VzdA== 6287 -IHF1aWNrbHk= 6288 -IHdlYXA= 6289 -IENH 6290 -cm9wcmk= 6291 -aG8= 6292 -IGNvcA== 6293 -KHN0cnVjdA== 6294 -IEJpZw== 6295 -IHZz 6296 -IGZyZXF1 6297 -LlZhbHVl 6298 -IGFjdGlvbnM= 6299 -IHByb3Blcg== 6300 -IGlubg== 6301 -IG9iamVjdHM= 6302 -IG1hdHJpeA== 6303 -YXZhc2NyaXB0 6304 -IG9uZXM= 6305 -Lmdyb3Vw 6306 -IGdyZWVu 6307 -IHBhaW50 6308 -b29scw== 6309 -eWNs 6310 -ZW5jb2Rl 6311 -b2x0 6312 -Y29tbWVudA== 6313 -LmFwaQ== 6314 -RGly 6315 -IHVuZQ== 6316 -aXpvbnQ= 6317 -LnBvc2l0aW9u 6318 -IGRlc2lnbmVk 6319 -X3ZhbA== 6320 -YXZp 6321 -aXJpbmc= 6322 -dGFi 6323 -IGxheWVy 6324 -IHZpZXdz 6325 -IHJldmU= 6326 -cmFlbA== 6327 -IE9O 6328 -cmljcw== 6329 -MTYw 6330 -bnA= 6331 -IGNvcmU= 6332 -KCkpOw0K 6333 -TWFpbg== 6334 -IGV4cGVydA== 6335 -CQkNCg== 6336 -X2Vu 6337 -IC8+ 6338 -dXR0ZXI= 6339 -SUFM 6340 -YWlscw== 6341 -IEtpbmc= 6342 -Ki8KCg== 6343 -IE1ldA== 6344 -X2VuZA== 6345 -YWRkcg== 6346 -b3Jh 6347 -IGly 6348 -TWlu 6349 -IHN1cnBy 6350 -IHJlcGU= 6351 -IGRpcmVjdG9yeQ== 6352 -UFVU 6353 -LVM= 6354 -IGVsZWN0aW9u 6355 -aGFwcw== 6356 -LnByZQ== 6357 -Y20= 6358 -VmFsdWVz 6359 -ICIK 6360 -Y29sdW1u 6361 -aXZpbA== 6362 -TG9naW4= 6363 -aW51ZQ== 6364 -OTM= 6365 -IGJlYXV0aWZ1bA== 6366 -IHNlY3JldA== 6367 -KGV2ZW50 6368 -IGNoYXQ= 6369 -dW1z 6370 -IG9yaWdpbg== 6371 -IGVmZmVjdHM= 6372 -IG1hbmFnZW1lbnQ= 6373 -aWxsYQ== 6374 -dGs= 6375 -IHNldHRpbmc= 6376 -IENvdXI= 6377 -IG1hc3NhZ2U= 6378 -CWVuZA== 6379 -IGhhcHB5 6380 -IGZpbmlzaA== 6381 -IGNhbWVyYQ== 6382 -IFZlcg== 6383 -IERlbW9jcg== 6384 -IEhlcg== 6385 -KFE= 6386 -Y29ucw== 6387 -aXRh 6388 -ICcu 6389 -e30= 6390 -CUM= 6391 -IHN0dWZm 6392 -MTk0 6393 -IDoK 6394 -IEFS 6395 -VGFzaw== 6396 -aGlkZGVu 6397 -ZXJvcw== 6398 -SUdO 6399 -YXRpbw== 6400 -IEhlYWx0aA== 6401 -b2x1dGU= 6402 -RW50ZXI= 6403 -Jz4= 6404 -IFR3aXR0ZXI= 6405 -IENvdW50eQ== 6406 -c2NyaWJl 6407 -ID0+Cg== 6408 -IGh5 6409 -Zml0 6410 -IG1pbGl0YXJ5 6411 -IHNhbGU= 6412 -cmVxdWlyZWQ= 6413 -bm9u 6414 -Ym9vdHN0cmFw 6415 -aG9sZA== 6416 -cmlt 6417 -LW9sZA== 6418 -IERvd24= 6419 -IG1lbnRpb24= 6420 -Y29udGFjdA== 6421 -X2dyb3Vw 6422 -b2RheQ== 6423 -IHRvd24= 6424 -IHNvbHV0aW9u 6425 -dWF0ZQ== 6426 -ZWxsaW5n 6427 -XS0+ 6428 -b3Rlcw== 6429 -ZW50YWw= 6430 -b21lbg== 6431 -b3NwaXRhbA== 6432 -IFN1cA== 6433 -X0VO 6434 -IHNsb3c= 6435 -U0VTU0lPTg== 6436 -IGJsdWU= 6437 -YWdv 6438 -IGxpdmVz 6439 -IF4= 6440 -LnVu 6441 -aW5zdA== 6442 -ZW5nZQ== 6443 -IGN1c3RvbWVycw== 6444 -IGNhc3Q= 6445 -dWRnZXQ= 6446 -77yB 6447 -aWNlbnM= 6448 -IGRldGVybWlu 6449 -U2VsZWN0ZWQ= 6450 -X3Bs 6451 -dWV1ZQ== 6452 -IGRhcms= 6453 -Ly8KCg== 6454 -c2k= 6455 -dGhlcm4= 6456 -IEphcGFu 6457 -L3c= 6458 -UFU= 6459 -IEVhc3Q= 6460 -b3ZpZQ== 6461 -IHBhY2thZ2U= 6462 -IG5vcg== 6463 -IGFwaQ== 6464 -Ym90 6465 -Il07Cg== 6466 -X3Bvc3Q= 6467 -dWxhdGU= 6468 -IGNsdWI= 6469 -JykpOwo= 6470 -IGxvb3A= 6471 -UElP 6472 -aW9uZQ== 6473 -c2hvdA== 6474 -SW5pdGlhbA== 6475 -IHBsYXllZA== 6476 -cmVnaXN0ZXI= 6477 -cm91Z2h0 6478 -X21heA== 6479 -YWNlbWVudA== 6480 -bWF0Y2g= 6481 -cmFwaGljcw== 6482 -QVNU 6483 -IGV4aXN0aW5n 6484 -IGNvbXBsZXg= 6485 -REE= 6486 -LkNo 6487 -LmNvbW1vbg== 6488 -bW8= 6489 -ICcuLi8uLi8= 6490 -aXRv 6491 -IGFuYWx5c2lz 6492 -IGRlbGl2ZXI= 6493 -ICAgICAgICAgICAgICAgIAo= 6494 -aWR4 6495 -w6A= 6496 -b25nbw== 6497 -IEVuZ2xpc2g= 6498 -PCEtLQ== 6499 -IGNvbXB1dGVy 6500 -RU5TRQ== 6501 -IHBhcw== 6502 -IHJhaXM= 6503 -SGFzaA== 6504 -IG1vYmlsZQ== 6505 -IG93bmVy 6506 -RklH 6507 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 6508 -dGhlcw== 6509 -IGF0dHI= 6510 -d2Q= 6511 -LnRpbWU= 6512 -YXdu 6513 -IHRyZWF0bWVudA== 6514 -IEFj 6515 -LlZpZXc= 6516 -aW1wbA== 6517 -bW9yZQ== 6518 -cGFzcw== 6519 -IGhh 6520 -LmZyb20= 6521 -IGxlYWRpbmc= 6522 -RkZGRg== 6523 -KGVycm9y 6524 -LnVp 6525 -YXRhcg== 6526 -YWRlcnM= 6527 -ZGF0ZXM= 6528 -IHp1 6529 -IGZsb3c= 6530 -VGFyZ2V0 6531 -IGludm9sdmVk 6532 -IGlv 6533 -cGFyc2U= 6534 -JF8= 6535 -aGVzdA== 6536 -LmludA== 6537 -LWl0ZW0= 6538 -YXN5 6539 -U3A= 6540 -IHNoaWZ0 6541 -TlQ= 6542 -IHRm 6543 -X1RS 6544 -LndlYg== 6545 -Q1M= 6546 -IH0p 6547 -IGV5ZXM= 6548 -MTI1 6549 -MTA1 6550 -X3o= 6551 -Jyk7DQo= 6552 -aWZvcm4= 6553 -IHtA 6554 -IG5pY2U= 6555 -Lmxpc3Q= 6556 -ICAgIA0K 6557 -IGZsb29y 6558 -IHJlZGlyZWN0 6559 -IFVL 6560 -KFsn 6561 -IHdpc2g= 6562 -IGNhcHQ= 6563 -bGVnYWw= 6564 -IElP 6565 -IHN0YWdl 6566 -LlN0cmluZw== 6567 -IEFmcg== 6568 -aWdlbg== 6569 -IFNI 6570 -RGVsZXRl 6571 -ZWxscw== 6572 -IHNvbGlk 6573 -IG1lZXRpbmc= 6574 -IHdvcmtlZA== 6575 -IGVkaXRvcg== 6576 -aW55 6577 -0Lw= 6578 -X3JlYWQ= 6579 -Lklk 6580 -ZWZm 6581 -T2Zmc2V0 6582 -Y2hh 6583 -VVNFUg== 6584 -CQkgICA= 6585 -aXBwZWQ= 6586 -IGRpY3Q= 6587 -IFJ1bg== 6588 -LmhwcA== 6589 -IGFuZw== 6590 -eG1s 6591 -aW1wbGU= 6592 -IG1lZGljYWw= 6593 -X3Rva2Vu 6594 -Y29ubmVjdA== 6595 -IGhvdXI= 6596 -IGNvbnRyb2xsZXI= 6597 -X21lc3NhZ2U= 6598 -VUlE 6599 -R3I= 6600 -YW5kZWQ= 6601 -X0NI 6602 -IGJvb2tz 6603 -IHNwZWFr 6604 -YW1pbmc= 6605 -IG1vdW50 6606 -UmVjb3Jk 6607 -CXN0cnVjdA== 6608 -LldlYg== 6609 -b25kb24= 6610 -IC8vCg== 6611 -IGZlbHQ= 6612 -LkF1dG8= 6613 -aWRnZQ== 6614 -X3Bvcw== 6615 -UFI= 6616 -IG1vZGVybg== 6617 -Q29sbGVjdGlvbg== 6618 -X21zZw== 6619 -Q0Q= 6620 -IExv 6621 -IHNlY29uZHM= 6622 -aWJseQ== 6623 -LmVxdWFscw== 6624 -IGludGVybmF0aW9uYWw= 6625 -I3ByYWdtYQ== 6626 -b290aA== 6627 -V3JpdGVy 6628 -aWF0ZQ== 6629 -IGNlbGU= 6630 -IEJpdA== 6631 -aXZv 6632 -aXZlcnk= 6633 -cmQ= 6634 -SEVDSw== 6635 -IGNhY2hl 6636 -LmNvdW50 6637 -IHJvbGw= 6638 -LlJlYWQ= 6639 -MTA4 6640 -UkVE 6641 -IHNldHVw 6642 -aXpvbnRhbA== 6643 -bW9kZWxz 6644 -YXJndg== 6645 -IGNvbnNpZGVyZWQ= 6646 -PSIuLi8= 6647 -c2V0dGluZ3M= 6648 -IFJlbA== 6649 -IGdyb3d0aA== 6650 -IG1peA== 6651 -IFdhc2hpbmd0b24= 6652 -IHBsdA== 6653 -IElN 6654 -4bo= 6655 -IHR1cm5lZA== 6656 -IERhdGVUaW1l 6657 -IFdlZA== 6658 -KHVybA== 6659 -ICIt 6660 -IGxldHRlcg== 6661 -QXN5bmM= 6662 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 6663 -IE9jdG9iZXI= 6664 -X2xpbmU= 6665 -IGF0dGVudGlvbg== 6666 -IGNvbGxlY3Q= 6667 -IEhhc2g= 6668 -IGltYWc= 6669 -VHJlZQ== 6670 -IHNpdHVhdGlvbg== 6671 -ZXR0ZQ== 6672 -X25v 6673 -SVZF 6674 -IHZvbg== 6675 -LnRhcmdldA== 6676 -IGtub3dsZWRnZQ== 6677 -IGRyaXZl 6678 -LnBvc3Q= 6679 -IGJsb29k 6680 -IGNpdA== 6681 -cHJpbWFyeQ== 6682 -IGNvbmZpZ3VyYXRpb24= 6683 -dGVl 6684 -IHBob3Rv 6685 -aXNvZGU= 6686 -VHJhY2U= 6687 -IGdhdmU= 6688 -IHNob3Q= 6689 -IEFpcg== 6690 -IG1vdGhlcg== 6691 -cHJpY2U= 6692 -IG1vcm5pbmc= 6693 -KSl7Cg== 6694 -LXg= 6695 -IHRyYWRl 6696 -IGRlc2M= 6697 -ICYmCg== 6698 -IHBhcmVudHM= 6699 -QXBp 6700 -5Yg= 6701 -dGVk 6702 -d2Vy 6703 -IOY= 6704 -IHN5 6705 -IEtl 6706 -UGFyc2Vy 6707 -5YU= 6708 -YW5jeQ== 6709 -IHBpZWNl 6710 -aWZvcm5pYQ== 6711 -dG9TdHJpbmc= 6712 -cmFu 6713 -aWRpbmc= 6714 -UFRJT04= 6715 -Y29tZXM= 6716 -L2xpYw== 6717 -LmNsaWVudA== 6718 -RWw= 6719 -TG9uZw== 6720 -IHByb2Zlc3Npb25hbA== 6721 -cnVwdA== 6722 -dmE= 6723 -IGNvbXBsZXRlbHk= 6724 -IHByYWN0aWNl 6725 -MDAy 6726 -IHNlbGVjdGlvbg== 6727 -UmVt 6728 -aW5p 6729 -IGNhbQ== 6730 -UkVF 6731 -IHNpdGVz 6732 -cGE= 6733 -QVRVUw== 6734 -0YHRgg== 6735 -YXJyYW50 6736 -Kig= 6737 -X0tFWQ== 6738 -IEJ1dHRvbg== 6739 -IEZyaWRheQ== 6740 -c2VxdQ== 6741 -IHJlYWRlcg== 6742 -IG1lc3NhZ2Vz 6743 -6K8= 6744 -IGJ1Zg== 6745 -S2U= 6746 -IG5vdg== 6747 -SFA= 6748 -TXNn 6749 -YWxpZ24= 6750 -YXJpbHk= 6751 -ICcs 6752 -X3dpdGg= 6753 -IGRhcw== 6754 -IGhlYXJk 6755 -YXRvbWlj 6756 -cmlhbA== 6757 -KVs= 6758 -IGRpc2U= 6759 -QGVuZA== 6760 -IGdvbGQ= 6761 -IGZhaXI= 6762 -IHNhbGVz 6763 -LkJ1dHRvbg== 6764 -c3RyaWN0 6765 -c2F2ZQ== 6766 -IG1lYXN1cmU= 6767 -ICIr 6768 -ZWNhdXNl 6769 -Vmlld0NvbnRyb2xsZXI= 6770 -IFRhYmxl 6771 -LnBhcmFt 6772 -IGRlY2lkZWQ= 6773 -KCgo 6774 -SU5GTw== 6775 -IG9wcG9ydHVuaXR5 6776 -VGU= 6777 -SUNFTlNF 6778 -Y2NvcmRpbmc= 6779 -a2k= 6780 -IFVO 6781 -IGNvbnRhaW4= 6782 -IG1hbmFnZXI= 6783 -IHBhaW4= 6784 -IEZpcmU= 6785 -cm9tZQ== 6786 -IHBsYW5z 6787 -Rm91bmQ= 6788 -bGF5 6789 -IERlY2VtYmVy 6790 -IGluZmx1 6791 -w7o= 6792 -cmVuY2g= 6793 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 6794 -YXppbmc= 6795 -YnJpZWY= 6796 -Y2FsbA== 6797 -d29vZA== 6798 -IGxvYWRlZA== 6799 -IGdyYW5k 6800 -L2Y= 6801 -aW1w 6802 -X1U= 6803 -MTI3 6804 -U1RS 6805 -4oCi 6806 -IGNyZWRpdA== 6807 -LkNvbG9y 6808 -b3JnZQ== 6809 -UVVFU1Q= 6810 -IGRpZmZlcmVuY2U= 6811 -IFBD 6812 -d2FyZ3M= 6813 -IHB1Yg== 6814 -dW5kYXk= 6815 -IGZyYQ== 6816 -Lm1heA== 6817 -IHRyaWVk 6818 -YW5uZWxz 6819 -c2VuZA== 6820 -IHJlcG9ydHM= 6821 -IGFkdWx0 6822 -5Lo= 6823 -IGNvbnNpc3Q= 6824 -IFN0cmVldA== 6825 -IFByb2dyYW0= 6826 -U1FM 6827 -TWF0cml4 6828 -b3VuY2ls 6829 -LUE= 6830 -CXc= 6831 -IHdob3Nl 6832 -IHJlbGln 6833 -IFNleA== 6834 -IGdpdmVz 6835 -bm9uZQ== 6836 -Lm1lc3NhZ2U= 6837 -KEc= 6838 -LmF3dA== 6839 -LXJpZ2h0 6840 -IE5vdmVtYmVy 6841 -ZWxsaWc= 6842 -MzYw 6843 -dXRpdmU= 6844 -xIM= 6845 -b3Zlcm4= 6846 -IGVhc2lseQ== 6847 -IGlkZWFz 6848 -MTA0 6849 -INC9 6850 -L2Nzcw== 6851 -bHlpbmc= 6852 -ZWxsZQ== 6853 -Q2Fu 6854 -X2NvbG9y 6855 -0L7Qsg== 6856 -IHBhaXI= 6857 -bmd0aA== 6858 -IHNwbGl0 6859 -MTQw 6860 -ZHJvcA== 6861 -YXJ0eQ== 6862 -b25h 6863 -IGNhcGl0YWw= 6864 -IGhlYXI= 6865 -IGV4aXN0cw== 6866 -CWxvZw== 6867 -ZW1v 6868 -UnVu 6869 -b2k= 6870 -IHBhcnNlcg== 6871 -IE1ldGhvZA== 6872 -IGVkdWNhdGlvbg== 6873 -W2s= 6874 -IGxpYnJhcnk= 6875 -PiI7Cg== 6876 -X1VO 6877 -CXN0ZA== 6878 -b2RlZA== 6879 -IGNhbGxz 6880 -aGVyZQ== 6881 -UmVs 6882 -IGJyYW5k 6883 -YmFja2dyb3VuZA== 6884 -Z2E= 6885 -X2FkZHJlc3M= 6886 -X3BhcmFtcw== 6887 -Q2F0ZWdvcnk= 6888 -MTAz 6889 -IEluZGlh 6890 -X2V2ZW50 6891 -IGluZw== 6892 -UmVuZGVy 6893 -LmNs 6894 -dW1weQ== 6895 -IHBldA== 6896 -RkM= 6897 -IEFudA== 6898 -RXh0 6899 -IGNoYXJnZQ== 6900 -ZW5lZA== 6901 -Z3JhZA== 6902 -RU8= 6903 -IGRlcGVuZA== 6904 -IC4KCg== 6905 -ZnJhbWU= 6906 -IGRm 6907 -IGh1Z2U= 6908 -IFBBUlQ= 6909 -ZWRz 6910 -Ozs= 6911 -IEFN 6912 -IGJhc2lj 6913 -IExldA== 6914 -bGljaA== 6915 -IGFybQ== 6916 -IHN0YXI= 6917 -IGZlZGVyYWw= 6918 -V29yaw== 6919 -IGNhcnJ5 6920 -IElzcmFlbA== 6921 -KG9iag== 6922 -PXt7 6923 -IHNhdmVk 6924 -IHN5bg== 6925 -IGNvbnN0YW50 6926 -VkVOVA== 6927 -IHBvc2l0aXZl 6928 -IGNvbmR1Y3Q= 6929 -IHNraW4= 6930 -IGVhcmxpZXI= 6931 -IGxheW91dA== 6932 -IElQ 6933 -T1VS 6934 -IHRpbQ== 6935 -c3R5bGVzaGVldA== 6936 -X2Ns 6937 -IENhcmQ= 6938 -Kyspewo= 6939 -IHRlbXBlcg== 6940 -IERhdmlk 6941 -CXRyeQ== 6942 -LmRhcnQ= 6943 -IHdhbnRz 6944 -IHBpY3R1cmU= 6945 -IHZpZGVvcw== 6946 -IENvbW0= 6947 -aXNpb25z 6948 -X01BWA== 6949 -TWFwcGluZw== 6950 -LWNvbnRlbnQ= 6951 -IEVhcg== 6952 -LWRl 6953 -IHByZW0= 6954 -YnJ1YXJ5 6955 -IGNvbXBvbmVudHM= 6956 -IHRocm91Z2hvdXQ= 6957 -IHB1bGw= 6958 -IHBhZ2Vz 6959 -ZW50ZQ== 6960 -cmVzcG9uZA== 6961 -IGdhcw== 6962 -Y3JpcHRvcg== 6963 -IGVkZ2U= 6964 -IGJvdW5k 6965 -QUNU 6966 -KioqKioq 6967 -IGNyZWF0aW5n 6968 -IENI 6969 -IG51bGxwdHI= 6970 -QnI= 6971 -Kyc= 6972 -LmNv 6973 -Pjo6 6974 -IGxlYXJuaW5n 6975 -Lkxlbmd0aA== 6976 -X1NI 6977 -IHBhdGllbnRz 6978 -QUlO 6979 -IGtpZHM= 6980 -IGNvbWZvcnQ= 6981 -IHNob3du 6982 -dWdpbnM= 6983 -IEJhY2s= 6984 -ZWxsYQ== 6985 -X0NM 6986 -IGxhdA== 6987 -IGRpc3BhdGNo 6988 -IGNsYXNzZXM= 6989 -LmF0 6990 -LmJlZ2lu 6991 -IHN1Y2Nlc3NmdWw= 6992 -YmFu 6993 -IG9idGFpbg== 6994 -IFNs 6995 -IGxhY2s= 6996 -aXRlcmF0b3I= 6997 -VGhyZWFk 6998 -KHNpemU= 6999 -IG5vbmU= 7000 -Lmhhcw== 7001 -X1g= 7002 -c29ydA== 7003 -bmFw 7004 -cGV0 7005 -Ymlu 7006 -NzAw 7007 -IENhbmFkYQ== 7008 -VGhleQ== 7009 -IGRhbnM= 7010 -IE1hdA== 7011 -PHRk 7012 -IGhhaXI= 7013 -ICcnLAo= 7014 -IGN1 7015 -IGxhd3M= 7016 -bGV0ZWQ= 7017 -cGVk 7018 -IHBvdw== 7019 -IGtuZXc= 7020 -X0NPTQ== 7021 -Xyw= 7022 -IE1hZw== 7023 -aWRlbnRz 7024 -KHJlcQ== 7025 -ICks 7026 -LWNlbnRlcg== 7027 -MTkw 7028 -IHdpZGU= 7029 -IEF1dGhvcg== 7030 -c3RhbnRz 7031 -IGpvYnM= 7032 -IG1hdGg= 7033 -ZXRpbWVz 7034 -Qm9vbGVhbg== 7035 -IHNjb3Bl 7036 -X2lz 7037 -IG1lYXM= 7038 -IGtleXM= 7039 -ZWxheQ== 7040 -IGV4YWN0bHk= 7041 -Jz0+Jw== 7042 -IFBhdWw= 7043 -bWFz 7044 -CXByaW50 7045 -KGxlbg== 7046 -ZmQ= 7047 -ICk7 7048 -LkV2ZW50 7049 -cWxp 7050 -aXJpdA== 7051 -aWVsZHM= 7052 -b21hbg== 7053 -IFRvcA== 7054 -IHZvdGU= 7055 -IG1hc2s= 7056 -IHRoZW1l 7057 -LQo= 7058 -IHByb3Bz 7059 -IGZpbmU= 7060 -IHdyaXRlcg== 7061 -X29mZnNldA== 7062 -Y2Fy 7063 -IGFsdGVybg== 7064 -IGNvcHlyaWdodA== 7065 -IGRlc3Ryb3k= 7066 -cHBlcg== 7067 -IGdlbmVyYXRl 7068 -cHBlZA== 7069 -4oCZZA== 7070 -ICAgICAgCg== 7071 -bWFrZQ== 7072 -IFNob3c= 7073 -IGJyb3dzZXI= 7074 -IGZhdm9yaXRl 7075 -IGNhcmVlcg== 7076 -IGhhcHBlbmVk 7077 -KGNoYXI= 7078 -IHJlY29tbWVuZA== 7079 -IGxpdGVy 7080 -LmZpbHRlcg== 7081 -Z3JhZGU= 7082 -IMKj 7083 -UGhvbmU= 7084 -b21z 7085 -IG5hbWVk 7086 -LWxhYmVs 7087 -aXBv 7088 -IE90aGVy 7089 -IHBhbmVs 7090 -IHJvY2s= 7091 -U2NhbGU= 7092 -CWFzc2VydA== 7093 -0LQ= 7094 -IHRydXN0 7095 -ZnJvbnQ= 7096 -IGRlbW9u 7097 -QXI= 7098 -TmV0 7099 -IGVjb25vbWlj 7100 -Zm9vdGVy 7101 -IHJhY2U= 7102 -KG5vZGU= 7103 -IE9wdGlvbg== 7104 -c3BsaXQ= 7105 -IHBoeXNpY2Fs 7106 -aWZlc3Q= 7107 -IHJlbW92ZWQ= 7108 -Lmh0dHA= 7109 -KSksCg== 7110 -IGxvb2tlZA== 7111 -Jzs= 7112 -ZGluZw== 7113 -Z2VzdA== 7114 -YXR1cmRheQ== 7115 -L2xpY2Vuc2Vz 7116 -UHJpY2U= 7117 -IGRybw== 7118 -IHRvd2FyZHM= 7119 -IHVucw== 7120 -IENM 7121 -CXN0YXRpYw== 7122 -IHJvd3M= 7123 -IGRlZmluZQ== 7124 -LnJlcGxhY2U= 7125 -IGZhdGhlcg== 7126 -IERlc2lnbg== 7127 -YXNzaWdu 7128 -bXV0 7129 -RGV2aWNl 7130 -RGlk 7131 -JykpCg== 7132 -b21ldHJ5 7133 -YXlsb2Fk 7134 -IGhpc3Rvcg== 7135 -IFBhcmFt 7136 -IEJvb2xlYW4= 7137 -IG5hdHVyZQ== 7138 -IGpz 7139 -IG5hdGlvbg== 7140 -aWg= 7141 -IGRpc2NvdmVy 7142 -c2Vt 7143 -SGFuZGxl 7144 -CXI= 7145 -IFRlY2hu 7146 -IHdhbGw= 7147 -eyQ= 7148 -QHByb3BlcnR5 7149 -ICIuLi8= 7150 -IGV4YW0= 7151 -LmRyYXc= 7152 -b3BwaW5n 7153 -IG5lYXJseQ== 7154 -IGNvb2w= 7155 -IGluZGVwZW5k 7156 -UkVT 7157 -IGhhbmRsZXI= 7158 -IE1vbmRheQ== 7159 -IHN1bg== 7160 -U3R5bGVz 7161 -b3VzbHk= 7162 -IAk= 7163 -dmVzdA== 7164 -RGlzcGxheQ== 7165 -KHk= 7166 -YXRpY2FsbHk= 7167 -IHByZWRpY3Q= 7168 -eWluZw== 7169 -IHNvbWV0aW1lcw== 7170 -Il0K 7171 -IGRyaW5r 7172 -IGJ1bA== 7173 -aWZpY2F0aW9ucw== 7174 -Lmluc2VydA== 7175 -LnJlZw== 7176 -IHRlc3Rz 7177 -QWxpZ25tZW50 7178 -IGFsbGVn 7179 -IGF0dHJpYnV0ZQ== 7180 -IE5vdGU= 7181 -IG15c2VsZg== 7182 -YXJ0cw== 7183 -Tm93 7184 -IGludGVyZXN0aW5n 7185 -bGllbnRz 7186 -IHBvcHVsYXRpb24= 7187 -IENhbGlmb3JuaWE= 7188 -Ikk= 7189 -5bk= 7190 -IGdyZWF0ZXI= 7191 -dWVzZGF5 7192 -IHRob3Vz 7193 -IGNvc3Rz 7194 -IGxhdW5jaA== 7195 -XEh0dHA= 7196 -a2Vy 7197 -YmFuZA== 7198 -IFBsYXk= 7199 -IGJhbmQ= 7200 -LnNoYXBl 7201 -ZXNvbWU= 7202 -YXJ0aWNsZQ== 7203 -LnJm 7204 -IHdlcg== 7205 -w6Fz 7206 -ZW1iZXJz 7207 -dXNy 7208 -QkE= 7209 -aWNhbg== 7210 -ZXR0 7211 -dmFsaWRhdGU= 7212 -dWx0aQ== 7213 -IGltbWVkaWF0ZWx5 7214 -emVy 7215 -IGZpZ3VyZQ== 7216 -b2Vz 7217 -ZWxsZXI= 7218 -aXJjbGU= 7219 -IFNpZ24= 7220 -LmRi 7221 -IHJhbms= 7222 -Qnl0ZXM= 7223 -IHByb2plY3Rz 7224 -X3JlYw== 7225 -VUxBUg== 7226 -QVBJ 7227 -IExpbmU= 7228 -UG9ydA== 7229 -IHBvbGw= 7230 -IGdpdmluZw== 7231 -aWRlbmNl 7232 -LS0K 7233 -IHBsb3Q= 7234 -aWNpYWw= 7235 -IHdhcnJhbnQ= 7236 -SVRJT04= 7237 -IERvdWJsZQ== 7238 -IGJpbGxpb24= 7239 -Z29yaXRobQ== 7240 -IGVxdWlwbWVudA== 7241 -REFURQ== 7242 -IEAi 7243 -RUU= 7244 -IHBsZQ== 7245 -aWF0aW9u 7246 -IGhlYWRlcnM= 7247 -IHByb2NlZA== 7248 -LkNvbXBvbmVudE1vZGVs 7249 -IE9iYW1h 7250 -IHBh 7251 -IEJlc3Q= 7252 -aW1hdGVseQ== 7253 -LmdldFN0cmluZw== 7254 -Llw= 7255 -bXBsb3k= 7256 -IHJhdw== 7257 -X2Jsb2Nr 7258 -dW5kcmVk 7259 -In0sCg== 7260 -MTEy 7261 -Lkdyb3VwTGF5b3V0 7262 -IGJyb3VnaHQ= 7263 -TlNTdHJpbmc= 7264 -dGhyb3c= 7265 -Y3JlYXRlZA== 7266 -Lk5ldw== 7267 -X3ZpZXc= 7268 -Q1A= 7269 -ZXBz 7270 -T3A= 7271 -IGdyYXRpcw== 7272 -ICci 7273 -IGludGVydmlldw== 7274 -IiIiCg== 7275 -IHBhcnRpYWw= 7276 -IGFyaWE= 7277 -YmluZw== 7278 -QXV0aG9y 7279 -Qm9vaw== 7280 -IFBhdA== 7281 -dW1hbg== 7282 -VXNlcnM= 7283 -cGx1cw== 7284 -MTkz 7285 -IERpcmVjdA== 7286 -dmVudWU= 7287 -YWxwaGE= 7288 -VUNDRVNT 7289 -IENhbGw= 7290 -ICk7DQo= 7291 -aW1hdGVk 7292 -IHJlbWFpbg== 7293 -IGFudGk= 7294 -IExvbmRvbg== 7295 -IHNhZmV0eQ== 7296 -UE9TRQ== 7297 -b2xlcw== 7298 -Y29udHJvbGxlcg== 7299 -Qnl0ZQ== 7300 -IENvdXJ0 7301 -IFBoaWw= 7302 -IEFzc29jaQ== 7303 -ZW5h 7304 -5ZA= 7305 -X1NUUg== 7306 -Y29pbg== 7307 -cmVzaG9sZA== 7308 -IGJhdGNo 7309 -X0NsaWNr 7310 -ZW50aWNhdGlvbg== 7311 -Pic7Cg== 7312 -ZW50eQ== 7313 -IGJlZ2lubmluZw== 7314 -IHplcm8= 7315 -IENvbnZlcnQ= 7316 -IHRlcnI= 7317 -IHBhaWQ= 7318 -IGluY3JlYXNlZA== 7319 -Y2F0Y2g= 7320 -LXNpemU= 7321 -MTE1 7322 -YWN0aXZpdHk= 7323 -ZXF1YWxz 7324 -IHF1ZXVl 7325 -ICIn 7326 -IEludGVybmF0aW9uYWw= 7327 -IGbDvHI= 7328 -dXJzZGF5 7329 -IHNjaWVudA== 7330 -YWxsb3c= 7331 -YXhpcw== 7332 -IGFwcHJvcHJp 7333 -ZWRnZQ== 7334 -IGlkeA== 7335 -U3VjY2Vzcw== 7336 -ZW50aWZpZXI= 7337 -Olw= 7338 -eGlz 7339 -IG1heGltdW0= 7340 -YXJrcw== 7341 -IGJpcnRo 7342 -KGluZGV4 7343 -IG1heWJl 7344 -LnB5 7345 -ZmlsZXM= 7346 -IGxpbWl0ZWQ= 7347 -X2NoZWNr 7348 -bG9vaw== 7349 -cGxpZXM= 7350 -IG1vdmVtZW50 7351 -J10u 7352 -IGJyb2Fk 7353 -IEJF 7354 -IFVuaXR5RW5naW5l 7355 -LmNwcA== 7356 -IEV2ZXJ5 7357 -QWRtaW4= 7358 -IGZhbnM= 7359 -cGFyZWQ= 7360 -CiAgICAK 7361 -IGZvcmVpZ24= 7362 -IHBhbg== 7363 -IHRvdXI= 7364 -IE9yZGVy 7365 -IG1vdmluZw== 7366 -IGF1Zg== 7367 -Q2FsbA== 7368 -Y2I= 7369 -xZ8= 7370 -dmVudG9yeQ== 7371 -IFNxbA== 7372 -IGZ1bGx5 7373 -Q2xpY2tMaXN0ZW5lcg== 7374 -V09SRA== 7375 -IGFubm91bmNlZA== 7376 -KQ0KDQo= 7377 -IGFncmVlZA== 7378 -cmll 7379 -IGVhcm4= 7380 -X2xpbms= 7381 -LmFycmF5 7382 -KHRleHQ= 7383 -IG1hdGVyaWFscw== 7384 -LHA= 7385 -ZmZmZg== 7386 -dmc= 7387 -IMKp 7388 -IHVubGVzcw== 7389 -YWpheA== 7390 -TE9H 7391 -IHNleHVhbA== 7392 -IFwi 7393 -LXRpbWU= 7394 -IGNvYWNo 7395 -IHN1cHBvcnRlZA== 7396 -IHBob3Rvcw== 7397 -aWZvcm0= 7398 -LkNyZWF0ZQ== 7399 -KV0= 7400 -cmllcg== 7401 -IGRpYWxvZw== 7402 -YXZlcg== 7403 -aWdl 7404 -KSs= 7405 -X2lkeA== 7406 -Ols= 7407 -X21pbg== 7408 -IENvbmc= 7409 -IHByZXNzdXJl 7410 -IHRlYW1z 7411 -U2lnbg== 7412 -YmVnaW4= 7413 -cmlhbg== 7414 -TkVTUw== 7415 -TFM= 7416 -IGltcHJvdmU= 7417 -IFN1bmRheQ== 7418 -IGRlZmluaXRpb24= 7419 -aWdlcg== 7420 -cm9sbGVycw== 7421 -IHRoaW5raW5n 7422 -VGVtcGxhdGU= 7423 -LUY= 7424 -IGVtZXJn 7425 -cGxhdGVz 7426 -IFVTQQ== 7427 -LnNldFN0YXRl 7428 -IEFsc28= 7429 -cmV2 7430 -IGVuYWJsZQ== 7431 -IENP 7432 -UEVDVA== 7433 -IGNvbmNlcHQ= 7434 -KS0= 7435 -IOKAog== 7436 -IHNldHM= 7437 -IG1lYW5pbmc= 7438 -ZW1vbg== 7439 -IENvbnM= 7440 -Y21w 7441 -ZWRlcg== 7442 -YW5uZWQ= 7443 -aWNlbnNlZA== 7444 -IFN1cGVy 7445 -IGRhaWx5 7446 -IG11bHRp 7447 -X3U= 7448 -IGNoYWxsZW5n 7449 -X21vZGU= 7450 -IFByb21pc2U= 7451 -IHN0cmljdA== 7452 -am8= 7453 -aW50b24= 7454 -KGxpc3Q= 7455 -T25seQ== 7456 -Pns= 7457 -IHZlaGljbGU= 7458 -7ZU= 7459 -IFBsYXllcg== 7460 -MTA2 7461 -IERlbA== 7462 -IHBvb2w= 7463 -LnVybA== 7464 -bmVzZGF5 7465 -KCk7DQoNCg== 7466 -OTAw 7467 -ICIpOwo= 7468 -TG9jYWw= 7469 -LiIpOwo= 7470 -IG9yZ2FuaXphdGlvbg== 7471 -cmVuZGVy 7472 -IEFwcGxpY2F0aW9u 7473 -IHN1bW1lcg== 7474 -ZXhwZWN0ZWQ= 7475 -TkE= 7476 -IHJhcA== 7477 -X29iag== 7478 -IHN1cmZhY2U= 7479 -IFBVUg== 7480 -IH0sCgo= 7481 -IHZhcmlhYmxlcw== 7482 -KG1lc3NhZ2U= 7483 -IG9waW4= 7484 -LmJhY2s= 7485 -0LDQvQ== 7486 -IHdvcmtlcnM= 7487 -dm0= 7488 -Q28= 7489 -dWdodGVy 7490 -IG1hc3Rlcg== 7491 -ICIiLA== 7492 -IHN0b3JpZXM= 7493 -LlVzZXI= 7494 -IGNlbGVicg== 7495 -aW5lc2U= 7496 -QlM= 7497 -IENvbW1hbmQ= 7498 -YXNoYm9hcmQ= 7499 -IG9n 7500 -a2c= 7501 -LmltYWdl 7502 -LnN0eWxl 7503 -IHN0ZXBz 7504 -IEJlbg== 7505 -KGFyZ3M= 7506 -NDA0 7507 -IFBlcnNvbg== 7508 -LHk= 7509 -IG9mZmljaWFscw== 7510 -fAo= 7511 -IHNraWxscw== 7512 -dmM= 7513 -IGJ1aWxkZXI= 7514 -IGdhcg== 7515 -QWNjb3VudA== 7516 -IEF1dGg= 7517 -55Q= 7518 -J10pCg== 7519 -IEFU 7520 -bm4= 7521 -LkludA== 7522 -U1NFUlQ= 7523 -IGVmZmVjdGl2ZQ== 7524 -TEVURQ== 7525 -IHRvb2xz 7526 -QVJE 7527 -IGRpZ2l0YWw= 7528 -MTkx 7529 -RG91Ymxl 7530 -IEZpbmQ= 7531 -UkM= 7532 -IGlubGluZQ== 7533 -L3I= 7534 -QVJBTQ== 7535 -QVNL 7536 -IGludGVudA== 7537 -YWlnaHQ= 7538 -X2FkZHI= 7539 -IHJlcXVlc3Rz 7540 -LmZpcnN0 7541 -IGRlYnVn 7542 -IHNwZW50 7543 -KCkpKTsK 7544 -xZs= 7545 -IHByaW5jaXA= 7546 -TG9nZ2Vy 7547 -Y2x1ZGVz 7548 -LnVzZQ== 7549 -IHN1cnY= 7550 -bWVkaWE= 7551 -IEZlYnJ1YXJ5 7552 -IE1hYw== 7553 -IG1pc3Npbmc= 7554 -IHdpZmU= 7555 -IHRhbGtpbmc= 7556 -IE1ha2U= 7557 -IGNhcnQ= 7558 -IGxvY2F0ZWQ= 7559 -RW5j 7560 -LWE= 7561 -Y2hyb24= 7562 -IGNhcmRz 7563 -IGd1eQ== 7564 -IHBlcnM= 7565 -IFllcw== 7566 -YXRldmVy 7567 -IEFuZw== 7568 -b2xhcg== 7569 -IEV2ZW4= 7570 -IGFjY3Vy 7571 -IFBvd2Vy 7572 -IEdvbGQ= 7573 -Y2xlYXI= 7574 -UHJvY2Vzcw== 7575 -IHJlY29yZHM= 7576 -IGtpbGxlZA== 7577 -LmNsZWFy 7578 -IFdBUlJBTlRJRVM= 7579 -IHB1cnBvc2U= 7580 -cGFuZWw= 7581 -SkVDVA== 7582 -w61h 7583 -IGV4ZXJj 7584 -V1M= 7585 -L0w= 7586 -LmV4cG9ydHM= 7587 -IF9fXw== 7588 -IHNpbg== 7589 -U2VydmxldA== 7590 -IGTDqQ== 7591 -LmRlbGV0ZQ== 7592 -cm9rZQ== 7593 -U2w= 7594 -dWdo 7595 -ZWFycw== 7596 -IHBvaW50ZXI= 7597 -IGhvcA== 7598 -YWxsZXJ5 7599 -IG9icw== 7600 -Y292ZXJ5 7601 -CWNoYXI= 7602 -CQkJCQkJCQkJCQ== 7603 -CWRlZg== 7604 -b2NpdHk= 7605 -aXRjaGVu 7606 -dWxhdGlvbnM= 7607 -IEZJVA== 7608 -ICku 7609 -c3RyYWludHM= 7610 -dmVudGlvbg== 7611 -IHJlcXVpcmVz 7612 -IE9wZXI= 7613 -TUU= 7614 -T1VOVA== 7615 -YWxsZXQ= 7616 -IG5vcm0= 7617 -SVJF 7618 -ZXhhcw== 7619 -IHByb2dyYW1z 7620 -IHdlYWs= 7621 -Jy4k 7622 -dWluZw== 7623 -CSAgICAgICA= 7624 -IG1pbA== 7625 -IGZpcm0= 7626 -aW5pdGVseQ== 7627 -X1ZBTFVF 7628 -YXBzZQ== 7629 -YXRpc2Y= 7630 -IGRlbWFuZA== 7631 -X21vZA== 7632 -IGRlc2NyaWJlZA== 7633 -IHBsYWNlcw== 7634 -VklE 7635 -IGFsb25l 7636 -IGV4cG9ydA== 7637 -IHZlYw== 7638 -IE1heA== 7639 -IGFjdGl2aXRpZXM= 7640 -aWN0dXJlcw== 7641 -Z2VuZXI= 7642 -IG1h 7643 -gqw= 7644 -IGV4cHJlc3Npb24= 7645 -Q2FsbGJhY2s= 7646 -X2NvbnRlbnQ= 7647 -IE1vc3Q= 7648 -IHRlc3Rpbmc= 7649 -RUM= 7650 -Q0hBTlQ= 7651 -IGFkanVzdA== 7652 -LlRocmVhZGluZw== 7653 -KGN0eA== 7654 -IGFncmVl 7655 -aWdoZXN0 7656 -IHVp 7657 -IExhdw== 7658 -Llk= 7659 -Pjw/ 7660 -IHBvZA== 7661 -LWxn 7662 -4oCdCgo= 7663 -IGRlc2NyaWJl 7664 -IEV1cm9wZWFu 7665 -LXNo 7666 -IFBVUlBPU0U= 7667 -T1JZ 7668 -IGNvbnZlcnM= 7669 -IElsbHVtaW5hdGU= 7670 -IEF2 7671 -KGNo 7672 -PyI= 7673 -Y2hlbg== 7674 -aW1h 7675 -RG9jdW1lbnQ= 7676 -IG9wZXJhdGlvbnM= 7677 -d2lu 7678 -CWZ1bmN0aW9u 7679 -LkltYWdl 7680 -IHNjZW4= 7681 -L2g= 7682 -IFND 7683 -IGV4cGxv 7684 -OiU= 7685 -LyoqDQo= 7686 -TkFNRQ== 7687 -5og= 7688 -KHZhcg== 7689 -IGRpcmVjdG9y 7690 -T05H 7691 -IHlpZWxk 7692 -IGZlZXQ= 7693 -IFNlYXJjaA== 7694 -IEls 7695 -IHJlc3RhdXI= 7696 -ZHVj 7697 -IGludGVnZXI= 7698 -MTA3 7699 -ICcnOwo= 7700 -IGhpZ2hseQ== 7701 -Y2hlY2tlZA== 7702 -IFBBUlRJQw== 7703 -RVJDSEFOVA== 7704 -77yJ 7705 -IG9wdGlt 7706 -UXVldWU= 7707 -IExJ 7708 -aXRhdGlvbg== 7709 -IHRyYW5zcG9ydA== 7710 -aXNzaW9u 7711 -ZmlsbA== 7712 -dXNpb24= 7713 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 7714 -CWJvb2w= 7715 -LXRo 7716 -dXB0 7717 -IGVzc2VudGlhbA== 7718 -YW50ZWQ= 7719 -IGJlbmVmaXRz 7720 -CVM= 7721 -JzsNCg== 7722 -aWtp 7723 -IGdpcmxz 7724 -aWNlZA== 7725 -YnVmZmVy 7726 -XSs= 7727 -IHNvY2tldA== 7728 -IHByaWNlcw== 7729 -IEZyZQ== 7730 -IHNhdA== 7731 -IHdvb2Q= 7732 -TWVudUl0ZW0= 7733 -QVJH 7734 -IEFkbWlu 7735 -T1dO 7736 -ZGs= 7737 -IHJlc2V0 7738 -IGZvcm1z 7739 -INC4 7740 -5pY= 7741 -IFR1ZXNkYXk= 7742 -MTA5 7743 -IEluaXRpYWxpemVk 7744 -X3RyYWlu 7745 -b3Jhcnk= 7746 -YXRlZ29y 7747 -IGR0 7748 -VG90YWw= 7749 -Y29uc3RydWN0 7750 -aWxpZXM= 7751 -IGd1eXM= 7752 -0LXRgA== 7753 -IGluc3RydWN0aW9u 7754 -MDEw 7755 -eWxlZA== 7756 -IGludGVybmV0 7757 -ZXRhZGF0YQ== 7758 -YWR5 7759 -ZmFjZXM= 7760 -amVjdGlvbg== 7761 -IEphY2s= 7762 -IHJlY3Q= 7763 -Wy0= 7764 -IExlZw== 7765 -IGRldmljZXM= 7766 -T0M= 7767 -ICoNCg== 7768 -b3JhdGlvbg== 7769 -ZXJ0YWlu 7770 -IGd1YXJk 7771 -b3N0cmVhbQ== 7772 -IGVudW0= 7773 -LmxheW91dA== 7774 -ICI7Cg== 7775 -dm9rZQ== 7776 -IE9r 7777 -SG9tZQ== 7778 -KHRy 7779 -RVRI 7780 -IGRlbGF5 7781 -IHB1cmNoYXNl 7782 -ZGM= 7783 -IGFyZW4= 7784 -X29uY2U= 7785 -CQkJCQo= 7786 -cm9y 7787 -ZHJhdw== 7788 -LnJ1bg== 7789 -KG1vZGVs 7790 -VGltZW91dA== 7791 -bGlr 7792 -IEFyZw== 7793 -LmVu 7794 -IGZpc2g= 7795 -Y3B5 7796 -X2Zl 7797 -RVJDSEFOVEFCSUxJVFk= 7798 -KFg= 7799 -X291dHB1dA== 7800 -Pz8= 7801 -IGpv 7802 -YW5kYXJk 7803 -IGRvbGw= 7804 -ZXJyb3Jz 7805 -X2Jhc2U= 7806 -IFBBUlRJQ1VMQVI= 7807 -IGxlYWRlcg== 7808 -IGNvbXBhcg== 7809 -IGRvdWI= 7810 -IFZpcw== 7811 -U3RhY2tUcmFjZQ== 7812 -LUM= 7813 -IFN0dWQ= 7814 -c3RpdHV0ZQ== 7815 -TW9yZQ== 7816 -IERlc2NyaXB0aW9u 7817 -V0FSRQ== 7818 -YWRz 7819 -INC6 7820 -YmluZA== 7821 -PXNlbGY= 7822 -ZW1wbG95 7823 -W24= 7824 -LmFsbA== 7825 -LUI= 7826 -JiY= 7827 -YWxt 7828 -IGN1bHR1cmU= 7829 -aG91c2U= 7830 -IHN1ZmZlcg== 7831 -ICcl 7832 -IHN0cmFpZ2h0 7833 -IFN0YXI= 7834 -dWRv 7835 -IGRlZA== 7836 -IENPTQ== 7837 -IGNvbmZpcm0= 7838 -IEdvb2Q= 7839 -LnNj 7840 -X19fX19fX19fX19fX19fXw== 7841 -RFI= 7842 -Q29uZmlndXJhdGlvbg== 7843 -RGF0ZVRpbWU= 7844 -IGFkdmVydA== 7845 -IGNvdWxkbg== 7846 -YXN5bmM= 7847 -c3RhY2s= 7848 -JykNCg== 7849 -S2l0 7850 -IGhvdXM= 7851 -IG1lY2hhbg== 7852 -cmF0ZQ== 7853 -MjA0 7854 -IGF1ZGlv 7855 -CWNvdXQ= 7856 -Y29yZXM= 7857 -IHNwb3Q= 7858 -IGluY3JlYXNpbmc= 7859 -ICMj 7860 -KSkp 7861 -cG9pbnRz 7862 -IGNvbXBhcmVk 7863 -bGln 7864 -IGJlaGF2aW9y 7865 -IEJZ 7866 -IEF0dA== 7867 -Y3JhZnQ= 7868 -aGVhZGVycw== 7869 -ZXRl 7870 -ZW5kcmVnaW9u 7871 -IGRldGFpbA== 7872 -VUxF 7873 -IENvbW1vbg== 7874 -CXByb3RlY3RlZA== 7875 -c3Rvbg== 7876 -IEZJVE5FU1M= 7877 -IGZyZXNo 7878 -Ij4KCg== 7879 -LmV4YW1wbGU= 7880 -YmVyZw== 7881 -IG1vdmVk 7882 -CWU= 7883 -IFNhdHVyZGF5 7884 -IHBheWxvYWQ= 7885 -xIc= 7886 -KToKCg== 7887 -IGJleQ== 7888 -dXJlcg== 7889 -PHNjcmlwdA== 7890 -IHN5bWJvbA== 7891 -IGFzc3Vt 7892 -IHB1bA== 7893 -RWZmZWN0 7894 -IGh1bmRyZWQ= 7895 -VG9vbA== 7896 -YWtlZA== 7897 -Y29ubmVjdGlvbg== 7898 -IHZvaWNl 7899 -IHBk 7900 -IHRyYW5zYWN0aW9u 7901 -IGxpbmtz 7902 -RXJy 7903 -IEluZGlhbg== 7904 -VEM= 7905 -YXRhbG9n 7906 -bmk= 7907 -c2lnbg== 7908 -PDwi 7909 -amk= 7910 -eWE= 7911 -IGRlbW9uc3Ry 7912 -dWxhdGVk 7913 -LlN0 7914 -IGluc3RpdA== 7915 -IGJvb3N0 7916 -IGNlbGxz 7917 -b2xpYw== 7918 -LlBybw== 7919 -Ojwv 7920 -RXZlbnRMaXN0ZW5lcg== 7921 -aWZ5aW5n 7922 -IERp 7923 -b3Jyb3c= 7924 -LmV4ZWN1dGU= 7925 -IGNvbGxlZ2U= 7926 -WW91cg== 7927 -IGxhcmdlc3Q= 7928 -LmRpcw== 7929 -IHF1aQ== 7930 -IGluZGl2aWR1YWxz 7931 -X2J1ZmZlcg== 7932 -IG5n 7933 -U0E= 7934 -IENvbnRyb2w= 7935 -IHNpbmc= 7936 -IHN1aXQ= 7937 -ICAgIAk= 7938 -U0c= 7939 -IGp1bXA= 7940 -IHNtYXJ0 7941 -b21h 7942 -IEV4cA== 7943 -ICct 7944 -IGFzc2lzdA== 7945 -IHN1Y2Nlc3NmdWxseQ== 7946 -c3lz 7947 -IENyZQ== 7948 -X3JlZg== 7949 -IFRodXJzZGF5 7950 -IGJ1cg== 7951 -INC0 7952 -IGJleW9uZA== 7953 -IG5vZGVz 7954 -RGV0YWlscw== 7955 -aW5jdA== 7956 -IEphbWVz 7957 -IGFmZmVjdA== 7958 -ZXhjZXB0aW9u 7959 -IHR5cGVvZg== 7960 -KA0K 7961 -LXNl 7962 -IGZldGNo 7963 -YCw= 7964 -IGNydXNoZXI= 7965 -fS4= 7966 -IEJP 7967 -U2hvdw== 7968 -IHJhdGVz 7969 -IGJvbg== 7970 -LWljb24= 7971 -IE1lZGlh 7972 -UkVTUw== 7973 -IFZhbGlk 7974 -0L7Quw== 7975 -IGZ1Y2s= 7976 -YWNrcw== 7977 -IHN0dWRpZXM= 7978 -TWU= 7979 -IG93bmVycw== 7980 -fWVsc2U= 7981 -IGdyb3dpbmc= 7982 -VmFyaWFibGU= 7983 -IEJlbA== 7984 -LnJhbmRvbQ== 7985 -dmVtZW50 7986 -b255bQ== 7987 -KEY= 7988 -IEZBTFNF 7989 -IHRvcmNo 7990 -KHJvdw== 7991 -aWdv 7992 -c3RydWN0dXJl 7993 -MTIx 7994 -IGNlcnRhaW5seQ== 7995 -RGVw 7996 -IEdyZWVu 7997 -cXVlc3Rpb24= 7998 -IGFkZGluZw== 7999 -IERldmVsb3A= 8000 -X2RlZg== 8001 -IG1hY2g= 8002 -PSU= 8003 -CQkg 8004 -Y29uZHM= 8005 -UHJvamVjdA== 8006 -IHJlamVjdA== 8007 -IM4= 8008 -IHBvb3I= 8009 -IGF3YXJl 8010 -MTE0 8011 -IEJ1aWxk 8012 -IEJyaXRpc2g= 8013 -IE5F 8014 -IG51bWVy 8015 -cmVlcw== 8016 -Y2xhaW0= 8017 -IG1vY2s= 8018 -IG9t 8019 -IHNjcmU= 8020 -T0xE 8021 -LnBs 8022 -ZWxlcg== 8023 -IGNvcnJlc3BvbmQ= 8024 -X0hF 8025 -IGJpbmFyeQ== 8026 -MTE2 8027 -X29yZGVy 8028 -IFNRTA== 8029 -IGFkdmFudA== 8030 -IHByZXY= 8031 -Lls= 8032 -LmFzc2VydEVxdWFs 8033 -cGxpZXI= 8034 -YXJw 8035 -IGNsb3NlZA== 8036 -IGVuY291cg== 8037 -IFFTdHJpbmc= 8038 -YXVk 8039 -IGRldmVsb3BlZA== 8040 -IHBlcm1pc3Npb24= 8041 -LmRlYnVn 8042 -b3BlcmF0b3I= 8043 -ICcK 8044 -IHN5bQ== 8045 -YXRpdmVseQ== 8046 -w6ll 8047 -LWNvbG9y 8048 -IEdFVA== 8049 -a3k= 8050 -IGFsdGhvdWdo 8051 -X3JlcXVlc3Q= 8052 -X2VsZW1lbnQ= 8053 -Li4uLi4uLi4uLi4uLi4uLg== 8054 -X0RBVEE= 8055 -IGFtYXppbmc= 8056 -IHNi 8057 -IERlZmF1bHQ= 8058 -RXZlbnRz 8059 -IGZhaWx1cmU= 8060 -YWNsZQ== 8061 -UHJvcGVydGllcw== 8062 -IGRyZWFt 8063 -IGRpc3Ry 8064 -IGF1 8065 -IGdlbmVyYXRlZA== 8066 -5pU= 8067 -IFRlYW0= 8068 -VVNF 8069 -IGluY29tZQ== 8070 -IGV5ZQ== 8071 -X25vdA== 8072 -Il0s 8073 -X2Zvcm0= 8074 -U3VwcG9ydA== 8075 -b3JkZXJz 8076 -LlByaW50 8077 -dmlsbGU= 8078 -IFdlZG5lc2RheQ== 8079 -b2x2ZXI= 8080 -IG9wcG9z 8081 -aXNhdGlvbg== 8082 -b2xh 8083 -Q2xvc2U= 8084 -PHA= 8085 -X3dpZHRo 8086 -SW52YWxpZA== 8087 -eGI= 8088 -IHN0cnVnZw== 8089 -X2FjdGlvbg== 8090 -IHR4dA== 8091 -IFBhdGg= 8092 -YWxhcg== 8093 -IE1FUkNIQU5UQUJJTElUWQ== 8094 -c2VydmljZQ== 8095 -IE1pY2hhZWw= 8096 -YWJsZVZpZXc= 8097 -RGVidWc= 8098 -b2tlcw== 8099 -U2hl 8100 -IGd1ZXNz 8101 -IEphdmE= 8102 -X1BBVEg= 8103 -IHBhcnRpY3VsYXJseQ== 8104 -IElJ 8105 -IGRvbWFpbg== 8106 -5bm0 8107 -IHJlZHVjZQ== 8108 -LWxlZnQ= 8109 -cmVhbA== 8110 -IGFwcGVhcnM= 8111 -IGNvbW8= 8112 -IFVuaXQ= 8113 -IEdvdmVybg== 8114 -YWxp 8115 -YWxsZWw= 8116 -IEpldw== 8117 -X0k= 8118 -IGNvcw== 8119 -LmNvbG9y 8120 -IEdsb2JhbA== 8121 -IHRlbGU= 8122 -YmVu 8123 -X3RyYW5z 8124 -IHJlYXNvbnM= 8125 -IGVtYg== 8126 -ZW5zaXR5 8127 -bGluZXM= 8128 -b21pbg== 8129 -U2NyZWVu 8130 -0LDRgg== 8131 -cGVjdHM= 8132 -Y2xpcA== 8133 -Zm9v 8134 -cmVudA== 8135 -IGFm 8136 -IGRhbmdlcg== 8137 -aWxpbmc= 8138 -TmFtZXM= 8139 -T3Vy 8140 -IGRpc3RyaWJ1dGlvbg== 8141 -V2hpbGU= 8142 -U0w= 8143 -V3JpdGU= 8144 -IGdvdG8= 8145 -IGNvbG9ycw== 8146 -IHBvd2VyZnVs 8147 -a2lu 8148 -IGRlcHRo 8149 -ZXJjaWFs 8150 -IENvbmdyZXNz 8151 -IE1hcmtldA== 8152 -RGI= 8153 -dW5kZXI= 8154 -IExhc3Q= 8155 -w58= 8156 -Z3JlZw== 8157 -IHBvc3Rz 8158 -X1VSTA== 8159 -b3Rvcw== 8160 -RG9u 8161 -IG1pY3Jv 8162 -IGFycmVzdA== 8163 -0L8= 8164 -IChA 8165 -IEhvdA== 8166 -IEluZGV4 8167 -OyY= 8168 -IyE= 8169 -IE5vcg== 8170 -IENhcA== 8171 -LSg= 8172 -IGludGVyZXN0ZWQ= 8173 -cGVhcg== 8174 -IHJlbnQ= 8175 -IGFsYnVt 8176 -b2xpY3k= 8177 -Lmxhbmc= 8178 -LnRyYW5z 8179 -LmZvcm1hdA== 8180 -IHsNCg0K 8181 -cGhlcmU= 8182 -IGF4aXM= 8183 -IEJ1c2luZXNz 8184 -ZXJzaXN0ZW5jZQ== 8185 -dXJy 8186 -IG1pbmltdW0= 8187 -ZW5kb3I= 8188 -IFNE 8189 -MTEz 8190 -IEludGVybmV0 8191 -5aQ= 8192 -RXhw 8193 -aXZlcnNl 8194 -TU0= 8195 -IG9idmlvdXM= 8196 -IGJhc2lz 8197 -IHNjaWVuY2U= 8198 -IGJ1ZGdldA== 8199 -aXphdGlvbnM= 8200 -UEE= 8201 -IGZsYWdz 8202 -cHJldA== 8203 -TE9DSw== 8204 -IHZhcmlldHk= 8205 -IHRydXRo 8206 -ZHQ= 8207 -IGdvbmU= 8208 -IGJhdHRsZQ== 8209 -PHN0ZA== 8210 -IFNpbA== 8211 -cmY= 8212 -dWRh 8213 -IGVyb3Q= 8214 -IENhbQ== 8215 -IHN0YXRpb24= 8216 -ICc8Lw== 8217 -Y2hlbWU= 8218 -IFN1bg== 8219 -IGZpbmlzaGVk 8220 -IHNob3A= 8221 -IEtvcmU= 8222 -IGVpZ2h0 8223 -X1JFRw== 8224 -TkQ= 8225 -Piw= 8226 -Ij48Pw== 8227 -KG51bQ== 8228 -CWlubGluZQ== 8229 -VHJhbnNhY3Rpb24= 8230 -Lk9u 8231 -IG1haWw= 8232 -cmV5 8233 -cmVzdWx0cw== 8234 -IG5hdg== 8235 -SU1JVA== 8236 -X2lkcw== 8237 -TWFrZQ== 8238 -5Yo= 8239 -TW9kYWw= 8240 -IExPRw== 8241 -IFN1cg== 8242 -IGluc3RhbmNlb2Y= 8243 -IG92ZXJhbGw= 8244 -IEluZm9ybWF0aW9u 8245 -IGNvbnN0cnVjdGlvbg== 8246 -X0ZJTEU= 8247 -YnV0 8248 -IG1lZGlj 8249 -IGR1cmF0aW9u 8250 -aXRuZXNz 8251 -YWdlbnQ= 8252 -QVY= 8253 -IHNldmVu 8254 -b2xm 8255 -IH19Cg== 8256 -Il0sCg== 8257 -MTcw 8258 -MTIy 8259 -IGNhbGxpbmc= 8260 -IGFucw== 8261 -dGhyb3dz 8262 -b3Jpem9udGFs 8263 -IHVzZVN0YXRl 8264 -LmZs 8265 -IFN0YXR1cw== 8266 -IE9ubGluZQ== 8267 -UlI= 8268 -IFJpY2g= 8269 -IEhpbGw= 8270 -IGJyYWlu 8271 -IGZvbGxvd2Vk 8272 -MjQw 8273 -ZW1pYw== 8274 -IHNsaWdodA== 8275 -IGluc3VyYW5jZQ== 8276 -LkFycmF5 8277 -IGFic3RyYWN0 8278 -IFN1bQ== 8279 -cmVkaXJlY3Q= 8280 -b3duZXI= 8281 -KG1zZw== 8282 -IENsaW50b24= 8283 -Tm9u 8284 -CWV4 8285 -IHZvbHVtZQ== 8286 -IEV2ZW50QXJncw== 8287 -LUw= 8288 -IERpbQ== 8289 -IE1hcnQ= 8290 -IGN1cnNvcg== 8291 -IGltcGxlbWVudGF0aW9u 8292 -dXJyZWQ= 8293 -IGxhcmdlcg== 8294 -KTsKCgo= 8295 -Jys= 8296 -LnRyYW5zZm9ybQ== 8297 -IHVwbG9hZA== 8298 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 8299 -RHJhdw== 8300 -bmVs 8301 -CWZsb2F0 8302 -cXJ0 8303 -IE5ldHdvcms= 8304 -IHRpdA== 8305 -QXhpcw== 8306 -LmFuZHJvaWQ= 8307 -IGNvbXBsZXRlZA== 8308 -IG11cg== 8309 -IGNvbHVtbnM= 8310 -eGM= 8311 -IHN1cHBseQ== 8312 -aW1pbmFs 8313 -IHNwcg== 8314 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 8315 -IHVuaXRz 8316 -KHU= 8317 -bWk= 8318 -cmVwbGFjZQ== 8319 -W2tleQ== 8320 -4Lk= 8321 -YW50aWM= 8322 -IHBheW1lbnQ= 8323 -LEI= 8324 -IEFwcGxl 8325 -Z2lu 8326 -UmVxdWlyZWQ= 8327 -Iys= 8328 -bGFuZHM= 8329 -IHNxdQ== 8330 -IGZhY3Rvcg== 8331 -ZGVj 8332 -IHN0cmVuZ3Ro 8333 -IGJveQ== 8334 -IGJhbGFuY2U= 8335 -IHNvdXJjZXM= 8336 -c2NyZWVu 8337 -LXRvcA== 8338 -IEFtYXpvbg== 8339 -IGhpZGRlbg== 8340 -0LXRgg== 8341 -X2NsaWVudA== 8342 -IGVhdA== 8343 -LmRpc3BsYXk= 8344 -IMK7 8345 -IHRyaWdnZXI= 8346 -YW5hZ2Vy 8347 -IHRybw== 8348 -IGNsYWltcw== 8349 -Zm9yZA== 8350 -IENvbXBhbnk= 8351 -IGdpZnQ= 8352 -LDo= 8353 -X2FwcA== 8354 -aGFuZGxl 8355 -IHByb2R1Y2U= 8356 -L2xpYg== 8357 -NTEy 8358 -IC0q 8359 -CXNldA== 8360 -J107 8361 -YXJj 8362 -YW5kZXI= 8363 -IEVuZ2luZQ== 8364 -IGF0dHJpYnV0ZXM= 8365 -dGFzaw== 8366 -PD0= 8367 -KE4= 8368 -IHdhcm0= 8369 -d2hpY2g= 8370 -IEZvcmU= 8371 -YWdub3N0 8372 -bXlz 8373 -IHRhbA== 8374 -IFNhbA== 8375 -Z2k= 8376 -IFByaW50 8377 -IFRSVUU= 8378 -INC+ 8379 -LlVJ 8380 -IGZsYXNo 8381 -cm9wZXJ0eQ== 8382 -LmxvY2F0aW9u 8383 -IE1pbGw= 8384 -Ymk= 8385 -Y29udHI= 8386 -LnJlcXVlc3Q= 8387 -IFNhbQ== 8388 -IG5lZ2F0aXZl 8389 -a2l0 8390 -IHNldHQ= 8391 -LnByaW50U3RhY2tUcmFjZQ== 8392 -YWJl 8393 -CWk= 8394 -IGJ1cm4= 8395 -IHNvY2lldHk= 8396 -Q2FjaGU= 8397 -IFNlY3VyaXR5 8398 -Lm1vZGVscw== 8399 -IFdBUlJBTlRZ 8400 -X3Vw 8401 -Y2VpdmU= 8402 -IGNsaWVudHM= 8403 -LlRy 8404 -IHByb3ZpZGluZw== 8405 -IHJvdXQ= 8406 -bWF0ZXJpYWw= 8407 -IHx8Cg== 8408 -IFNlcg== 8409 -IE9mZmljZQ== 8410 -RlRXQVJF 8411 -ICck 8412 -IGZvYw== 8413 -IGV4Y2VsbA== 8414 -IGNhdA== 8415 -bm9ybWFs 8416 -IGRldGVybWluZQ== 8417 -CXVpbnQ= 8418 -UGFuZQ== 8419 -IGVtcGxveWVlcw== 8420 -IFRleGFz 8421 -IHRyYWZm 8422 -IFJlcG9ydA== 8423 -YW50YQ== 8424 -IEJveA== 8425 -IGRqYW5nbw== 8426 -IHBhcnRuZXI= 8427 -RUI= 8428 -TElORQ== 8429 -IGZlZWxpbmc= 8430 -IGNpdmls 8431 -KGZsb2F0 8432 -U3Fs 8433 -IHdvdWxkbg== 8434 -LmluaXQ= 8435 -LmxlZnQ= 8436 -LXY= 8437 -X2xldmVs 8438 -J30= 8439 -QUY= 8440 -IGxvYWRpbmc= 8441 -IE9ubHk= 8442 -IGNvb2tpZXM= 8443 -IEds 8444 -Q08= 8445 -IHN0cmF0ZWd5 8446 -KCcuLw== 8447 -IHNoaXA= 8448 -cG9zZXM= 8449 -IHNpZ25hbA== 8450 -IGFscGhh 8451 -LnBvcA== 8452 -UmFkaXVz 8453 -IHJlcGxhY2U= 8454 -X0RJUg== 8455 -Y291bnRlcg== 8456 -YnNlcnZhYmxl 8457 -ZWxh 8458 -V2VpZ2h0 8459 -aGFzaA== 8460 -Ym9zZQ== 8461 -Zng= 8462 -IEVtYWls 8463 -IHJlZmVy 8464 -bG9jYWxob3N0 8465 -X1JP 8466 -aXF1ZXM= 8467 -U3RlcA== 8468 -IGFoZWFk 8469 -KFZpZXc= 8470 -IFNlcnZpY2Vz 8471 -IEpzb24= 8472 -ZXNzb3I= 8473 -IHB1bg== 8474 -IGFwcHJvcHJpYXRl 8475 -YWtlcnM= 8476 -b3Nlbg== 8477 -cG9zaW5n 8478 -IGFnZW50 8479 -ZmM= 8480 -IHRyYW5zZmVy 8481 -IGludmFsaWQ= 8482 -IFJlc2VhcmNo 8483 -VmVydGV4 8484 -IGdheQ== 8485 -IGpvdXJuYWw= 8486 -W3g= 8487 -ICIiLAo= 8488 -IFdlbGw= 8489 -LlRhc2tz 8490 -U3BlYw== 8491 -IG9s 8492 -IHNwZW5k 8493 -IEF1c3RyYWxpYQ== 8494 -TWF0Y2g= 8495 -Lmp1bml0 8496 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 8497 -IE1BWA== 8498 -aXphYmxl 8499 -Y2x1c2l2ZQ== 8500 -X3ZhbGlk 8501 -IHF1YXJ0ZXI= 8502 -eWFu 8503 -MDA1 8504 -IEVkaXQ= 8505 -YXJkZW4= 8506 -PW5ldw== 8507 -IGZyYWc= 8508 -Qml0 8509 -emk= 8510 -YWluZQ== 8511 -dWRk 8512 -Lk9iamVjdA== 8513 -ZGVidWc= 8514 -IGNhc2g= 8515 -X0lN 8516 -IGVlbg== 8517 -IGNvbW1lcmNpYWw= 8518 -IFZpZGVv 8519 -bG9hZGVy 8520 -IGZpeGVk 8521 -IGFwcGxpY2F0aW9ucw== 8522 -IF8s 8523 -IFJ1c3NpYQ== 8524 -aXRlY3Q= 8525 -Xyg= 8526 -IEJsb2Nr 8527 -IHNhbg== 8528 -IFRvbQ== 8529 -IHBlcmhhcHM= 8530 -IHNpZw== 8531 -bGV2YW50 8532 -IGNvcnBvcg== 8533 -YXRhc2V0 8534 -cm9uaWM= 8535 -eGU= 8536 -IGV0aA== 8537 -U29tZQ== 8538 -cG9w 8539 -X09L 8540 -IHRlbmQ= 8541 -LlJlcw== 8542 -X2FuZA== 8543 -IHJldmlld3M= 8544 -IHdpbGQ= 8545 -MTE3 8546 -IGRlZ3JlZQ== 8547 -Lk8= 8548 -Lm9iamVjdHM= 8549 -X2FyZ3M= 8550 -bmls 8551 -IGRpc2FibGVk 8552 -UGFyZW50 8553 -IG5vdGVz 8554 -ICIiCg== 8555 -KHN0YXRl 8556 -aXN0cmljdA== 8557 -IGxvZ2dpbmc= 8558 -LklP 8559 -IE1hbA== 8560 -RE0= 8561 -IHhtbA== 8562 -IFJvYmVydA== 8563 -ZWxlbg== 8564 -bGF5b3V0 8565 -Zm9s 8566 -J10pKQ== 8567 -LGI= 8568 -IEplcg== 8569 -ZmlsZW5hbWU= 8570 -IGZhbg== 8571 -IEN1c3RvbQ== 8572 -PSIi 8573 -IERpZQ== 8574 -QnVuZGxl 8575 -LnV0aWxz 8576 -IHRyaXA= 8577 -TUI= 8578 -IHNvZnQ= 8579 -X01PREU= 8580 -IGFwcGxpY2FibGU= 8581 -IHVwcGVy 8582 -RVJWRVI= 8583 -X2Fs 8584 -X0xPRw== 8585 -SGVyZQ== 8586 -d3A= 8587 -IFNlcnZlcg== 8588 -IENsaWVudA== 8589 -IGNoZW0= 8590 -U2Nyb2xs 8591 -IGhpZ2hlc3Q= 8592 -IFNlbGVjdA== 8593 -ICJA 8594 -IFdoeQ== 8595 -U2Vj 8596 -aGVlbA== 8597 -T3BlcmF0aW9u 8598 -IGNvbm5lY3RlZA== 8599 -aXJtZWQ= 8600 -IGNpdGl6 8601 -IENoZQ== 8602 -IGZvcmNlcw== 8603 -IHd3dw== 8604 -Um9vdA== 8605 -QU5DRQ== 8606 -TWFueQ== 8607 -aWNpcA== 8608 -cmdhbg== 8609 -MjIw 8610 -IFRvcg== 8611 -IFByZXNz 8612 -IE1vcg== 8613 -LWxpbmU= 8614 -dWxlZA== 8615 -Plw= 8616 -IHRodXM= 8617 -IFJlZ2lzdGVy 8618 -aG9s 8619 -IENoaW5lc2U= 8620 -IHBvc3RlZA== 8621 -IG1hZ24= 8622 -YWJpbGl0aWVz 8623 -IGRpc2Vhc2U= 8624 -IHJlbWFpbnM= 8625 -IFByb2Y= 8626 -LWZvcm0= 8627 -IGNpbg== 8628 -b3JnYW4= 8629 -aWNhdGU= 8630 -IHN0cmVzcw== 8631 -XSo= 8632 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 8633 -X2NvbnRleHQ= 8634 -b3JyeQ== 8635 -IGRpZWQ= 8636 -bWF0 8637 -IHN0YXJ0cw== 8638 -Lk1lc3NhZ2U= 8639 -IHJ1bnM= 8640 -IGd1aWRl 8641 -IHdhcnJhbnR5 8642 -ZW50aWFscw== 8643 -ZGljdA== 8644 -IFNpemU= 8645 -dWxlcg== 8646 -IHJlc3BvbnNpYmxl 8647 -X1NFVA== 8648 -IGNvbnRhaW5pbmc= 8649 -IFByaWNl 8650 -fHw= 8651 -MzUw 8652 -RlM= 8653 -IGVtcA== 8654 -X2J1dHRvbg== 8655 -KHVpbnQ= 8656 -IHN1ZmY= 8657 -cHRo 8658 -IGRlZmluaXRlbHk= 8659 -cHV0ZQ== 8660 -IG1hcmtldGluZw== 8661 -IFdI 8662 -IFNpZQ== 8663 -Kz0= 8664 -T0xPUg== 8665 -IGNvbnN1bHQ= 8666 -IHNpZ25lZA== 8667 -IHNlcXVlbmNl 8668 -bGVl 8669 -IHJlcXVpcmVtZW50cw== 8670 -aHk= 8671 -RXhwcmVzcw== 8672 -TVQ= 8673 -c2V5 8674 -IHVsdA== 8675 -5a4= 8676 -ZWxsaWdlbmNl 8677 -IGFuYWx5 8678 -IGRyZXNz 8679 -ZW5naW5l 8680 -IEdyZWF0 8681 -IEFuZHJvaWQ= 8682 -IEFsZXg= 8683 -bW9kZQ== 8684 -RGljdGlvbmFyeQ== 8685 -LkRhdGU= 8686 -5L0= 8687 -VklDRQ== 8688 -IGZhbWlsaWVz 8689 -IFJ1c3NpYW4= 8690 -IFRpbWVz 8691 -LmNhbGw= 8692 -JCg= 8693 -UHJvZmlsZQ== 8694 -IGZvbGRlcg== 8695 -Y2hlcw== 8696 -IGxlZ2lz 8697 -X3Jvdw== 8698 -dW5lcw== 8699 -2YQ= 8700 -IH0pLg== 8701 -QXNzZXJ0 8702 -YWdlbg== 8703 -IEhhbmQ= 8704 -SXRlcg== 8705 -IGJpZ2dlc3Q= 8706 -b3JlYWNo 8707 -IHBvbGlj 8708 -IHBlcm1pc3Npb25z 8709 -IHNob3dlZA== 8710 -IEVsZW1lbnQ= 8711 -IHRvcGlj 8712 -4oCU4oCU 8713 -cm9hZA== 8714 -IEJhbms= 8715 -cmVjb3Jk 8716 -IHBhcnRuZXJz 8717 -IFJlZg== 8718 -ZXNzaW9ucw== 8719 -IGFzc2Vzcw== 8720 -VVNU 8721 -IFBhcnR5 8722 -cHJvZHU= 8723 -TEM= 8724 -IHVs 8725 -LmZvcm0= 8726 -aGlkZQ== 8727 -Y29weQ== 8728 -VVRG 8729 -IFNPRlRXQVJF 8730 -DQoNCg0K 8731 -IExpbg== 8732 -dW5h 8733 -dWdhcg== 8734 -IGFkbWluaXN0cmF0aW9u 8735 -IG9wZW5pbmc= 8736 -IHNjYW4= 8737 -IGNvbnRpbnVlZA== 8738 -Y29tcG9uZW50 8739 -LnNw 8740 -IGhhcHBlbnM= 8741 -dW1teQ== 8742 -IFBS 8743 -LkZpbGU= 8744 -IERvd25sb2Fk 8745 -TG9hZGluZw== 8746 -ZGk= 8747 -IHdhaXRpbmc= 8748 -X0FERA== 8749 -VGFi 8750 -LnF1ZXJ5U2VsZWN0b3I= 8751 -IGVjb25vbXk= 8752 -IEZyZW5jaA== 8753 -dHh0 8754 -IGZhbnQ= 8755 -XzsK 8756 -SG9sZGVy 8757 -U0g= 8758 -MDA0 8759 -IG51bXB5 8760 -IHN0cmVldA== 8761 -IG1hbGU= 8762 -XE1vZGVs 8763 -YW5naW5n 8764 -MzMz 8765 -IEJpbGw= 8766 -IHByZXZpb3VzbHk= 8767 -Qkk= 8768 -IFNlY3JldA== 8769 -IG1pc3Q= 8770 -IEZpZWxk 8771 -dXBz 8772 -IFByb2Nlc3M= 8773 -IGtlcHQ= 8774 -IE9U 8775 -IHRyYWRpdGlvbmFs 8776 -Lmk= 8777 -YW1pbg== 8778 -IGhlbHBz 8779 -QW55 8780 -b3JpZ2lu 8781 -aWx0ZXJz 8782 -anU= 8783 -ZGVzYw== 8784 -IEFjY291bnQ= 8785 -ICkNCg== 8786 -a3RvcA== 8787 -b2xseQ== 8788 -IGZz 8789 -IOo= 8790 -IHV0 8791 -IGNlbnRyYWw= 8792 -KHRlc3Q= 8793 -LkFu 8794 -IHNhdGlzZg== 8795 -R1I= 8796 -IEZ1bGw= 8797 -IGhlYXQ= 8798 -aWJlcg== 8799 -IG9udG8= 8800 -bW9z 8801 -U2NoZW1h 8802 -IGZhY3Rvcnk= 8803 -Ii4k 8804 -YXdz 8805 -U3RhdGVtZW50 8806 -KHRhcmdldA== 8807 -CW5ldw== 8808 -LmJl 8809 -IGd1ZXN0 8810 -IG1hbA== 8811 -QVJZ 8812 -IHJlYWNoZWQ= 8813 -IG1vdXNl 8814 -IGNoYWxsZW5nZQ== 8815 -CWRvdWJsZQ== 8816 -IFRlbQ== 8817 -IHRlcnJvcg== 8818 -IGV4dHJhY3Q= 8819 -X1RP 8820 -IHNlcGFyYXRl 8821 -IG1pcg== 8822 -aGVscA== 8823 -IGNhcGFjaXR5 8824 -IFByb3BlcnR5 8825 -a2Fu 8826 -X2NyZWF0ZQ== 8827 -IExpZ2h0 8828 -LnBhcmVudA== 8829 -IHVuZGVyc3RhbmRpbmc= 8830 -IGVhc2llcg== 8831 -IHw9 8832 -IGVuaA== 8833 -IGZhdA== 8834 -IHByb3Rlc3Q= 8835 -YW1t 8836 -X0FU 8837 -LW9m 8838 -aWxz 8839 -IE9o 8840 -IHBzeWNo 8841 -ICQu 8842 -aW5kcw== 8843 -IHJlbGF0aXZl 8844 -c2hvcA== 8845 -c2hvcnQ= 8846 -IFNhbmQ= 8847 -MjEw 8848 -dWVzdGlvbg== 8849 -IGZlYXI= 8850 -LwoK 8851 -LmNvbnRleHQ= 8852 -IHNjaG9vbHM= 8853 -IHNlcnZl 8854 -em9uZQ== 8855 -X2Ri 8856 -IG1ham9yaXR5 8857 -ZXhhbXBsZQ== 8858 -IGxhbmc= 8859 -CSAg 8860 -UmVnaXN0ZXI= 8861 -ZW5kbw== 8862 -IHByb2Nlc3Npbmc= 8863 -X3RlbXBsYXRl 8864 -LXVzZXI= 8865 -IGVn 8866 -Q09N 8867 -IEJsdWU= 8868 -aXJv 8869 -IHJlbW90ZQ== 8870 -IElU 8871 -IyEv 8872 -IHJlZGlzdHJpYg== 8873 -MTI0 8874 -cmF6 8875 -IFNpbmNl 8876 -IFR1cg== 8877 -MTM1 8878 -QmFja2dyb3VuZA== 8879 -PT09 8880 -IHJlZmxlY3Q= 8881 -IHByb3M= 8882 -Y21k 8883 -IHdob20= 8884 -Q29tcGF0 8885 -IEFyZQ== 8886 -SWRlbnRpZmllcg== 8887 -IFRob20= 8888 -X3BvcnQ= 8889 -Z3U= 8890 -IG1vbml0b3I= 8891 -cm0= 8892 -IHBhdGllbnQ= 8893 -dmVydGVy 8894 -IGdhaW4= 8895 -LXVp 8896 -SW5zdA== 8897 -IGRpZXM= 8898 -MTE4 8899 -QXJlYQ== 8900 -X2ZpbHRlcg== 8901 -IGdyYXQ= 8902 -IHJlYWxpdHk= 8903 -b3JkaW5hdGU= 8904 -b2x2ZWQ= 8905 -Q29udGFjdA== 8906 -IGNvbXBsaWFuY2U= 8907 -X29y 8908 -IFZhcg== 8909 -ZGw= 8910 -IGFwcGVuZA== 8911 -R0VS 8912 -KG1heA== 8913 -LnJlbmRlcg== 8914 -IGR5bmFtaWM= 8915 -b3JkaW5hdGVz 8916 -X29wdGlvbnM= 8917 -X2NvbHVtbg== 8918 -IGJhdHRlcg== 8919 -c3BhY2U= 8920 -TGE= 8921 -IFNvdXJjZQ== 8922 -L2Jpbg== 8923 -IGRvcw== 8924 -IEJvYXJk 8925 -IFRocmVhZA== 8926 -IEFM 8927 -KGNvbmZpZw== 8928 -MTQ0 8929 -IE1lcg== 8930 -IG1pbGVz 8931 -X2hlYWRlcg== 8932 -RVRIT0Q= 8933 -aXp6 8934 -IGJlbmVmaXQ= 8935 -IGludGVncg== 8936 -KGN1cnJlbnQ= 8937 -dWxv 8938 -LmRlZmF1bHQ= 8939 -IERpdg== 8940 -IHRvbg== 8941 -b3Ro 8942 -ZXJ2YXRpb24= 8943 -ZWRvbQ== 8944 -IGJhYnk= 8945 -Y2VpdmVk 8946 -LnRvcA== 8947 -cmlvcml0eQ== 8948 -IExvY2Fs 8949 -cmlhZ2U= 8950 -IGF0dGFja3M= 8951 -IGhvc3BpdGFs 8952 -MTY4 8953 -IGZlbWFsZQ== 8954 -IExvZ2lu 8955 -IEZsb3I= 8956 -IGNoYWlu 8957 -YXNoaW9u 8958 -VGV4dHVyZQ== 8959 -U2F2ZQ== 8960 -IGZhcm0= 8961 -LmNvbnRhaW5z 8962 -LlRlc3Q= 8963 -IGtub3dz 8964 -IGdlbmVyYWxseQ== 8965 -aXBlbGluZQ== 8966 -IG1lYW50 8967 -ZW5jaWE= 8968 -IG5pY2h0 8969 -IGNvbnRlbnRz 8970 -UE0= 8971 -Y2hlZHVsZQ== 8972 -KGxpbmU= 8973 -Q0c= 8974 -am9i 8975 -IFJlYWw= 8976 -dWVy 8977 -ZmlybQ== 8978 -INg= 8979 -ZXRybw== 8980 -ImAK 8981 -IHNwZWVjaA== 8982 -IHRocg== 8983 -Zm9yZWFjaA== 8984 -IHdhcm4= 8985 -CWw= 8986 -IGhlYXZ5 8987 -PGxp 8988 -TmU= 8989 -IGludmVzdGlnYXRpb24= 8990 -TWF0aA== 8991 -LXRpdGxl 8992 -IGNodXJjaA== 8993 -IGRlc3BpdGU= 8994 -Y2hhaW4= 8995 -IHdoYXRldmVy 8996 -YXJpYW4= 8997 -Zm4= 8998 -IG1ldGE= 8999 -fSkKCg== 9000 -VUZG 9001 -IHJlZ2FyZGluZw== 9002 -X1NVQ0NFU1M= 9003 -bWVz 9004 -IEludGVudA== 9005 -IHJlc29sdmU= 9006 -cG9zcw== 9007 -aXJh 9008 -Zm9yY2U= 9009 -b2ljZQ== 9010 -w6I= 9011 -IHBt 9012 -IHVwZGF0ZXM= 9013 -QXJy 9014 -INE= 9015 -dGVzdGluZw== 9016 -IHRvd2FyZA== 9017 -bnRheA== 9018 -64s= 9019 -IGxpc3Rlbg== 9020 -IGdvYWxz 9021 -SW5zdGFuY2VTdGF0ZQ== 9022 -RHI= 9023 -IHJhcmU= 9024 -IHRyYWls 9025 -S2V5cw== 9026 -Q2Fs 9027 -Q2Fy 9028 -IFBlb3BsZQ== 9029 -CWxvY2Fs 9030 -Y2xhc3Nlcw== 9031 -UmVmZXJlbmNl 9032 -LmZvckVhY2g= 9033 -ZW1i 9034 -YWN0aXY= 9035 -IHByaW0= 9036 -cmVkaWN0 9037 -IHJhZA== 9038 -5pWw 9039 -LkJhY2s= 9040 -IHNwcmVhZA== 9041 -IGNsb2Nr 9042 -IHZpcg== 9043 -ZWRpdG9y 9044 -IGVmZm9ydHM= 9045 -IGJyYW5jaA== 9046 -IGluZHVzdA== 9047 -IG1vdG9y 9048 -IGFtYg== 9049 -IGRhdGV0aW1l 9050 -IHJlbmNvbnQ= 9051 -IENocmlzdGlhbg== 9052 -IEFtZXJpY2Fucw== 9053 -ZnVsbA== 9054 -IGZtdA== 9055 -Lm1haW4= 9056 -IGNhdXNlZA== 9057 -X3VwZGF0ZQ== 9058 -IENvbnRlbnQ= 9059 -QVRDSA== 9060 -IGJhdGg= 9061 -IEVhY2g= 9062 -IHJhZGlv 9063 -YWNobWVudA== 9064 -dXp6 9065 -U3VibWl0 9066 -IHJlc3RyaWN0 9067 -YWJpbg== 9068 -IExvYWQ= 9069 -IGV4dGVuc2lvbg== 9070 -IGVzc2F5 9071 -IGhhdA== 9072 -YXZpb3Vy 9073 -dG9CZQ== 9074 -Ijpb 9075 -IG9mZmVyZWQ= 9076 -IHZpbGw= 9077 -KGRvdWJsZQ== 9078 -MTE5 9079 -5pel 9080 -YmM= 9081 -X2ZyZWU= 9082 -IE1pc3M= 9083 -IEJlcg== 9084 -IOg= 9085 -IExpa2U= 9086 -IGhlbHBlZA== 9087 -LmdldE5hbWU= 9088 -X0FM 9089 -IHNwaXJpdA== 9090 -IEFwYWNoZQ== 9091 -d3M= 9092 -IHRoZXJlZm9yZQ== 9093 -KHBhcmFtcw== 9094 -X2ltZw== 9095 -IHBlYWNl 9096 -IGluY29y 9097 -IEVYUEVDVA== 9098 -IG1pbm9y 9099 -aXBlcw== 9100 -CWRhdGE= 9101 -c2VsZWN0b3I= 9102 -Y2l0eQ== 9103 -dHJpZQ== 9104 -LmJhc2U= 9105 -X2ZyYW1l 9106 -IG9wZW5lZA== 9107 -L2pzb24= 9108 -TFk= 9109 -bnU= 9110 -LkRl 9111 -dGY= 9112 -bWFyZ2lu 9113 -LlBhcnNl 9114 -IHBp 9115 -IGVx 9116 -YmQ= 9117 -RmllbGRz 9118 -IFRyZWU= 9119 -IGJhbg== 9120 -aXN0YW4= 9121 -CiAgICAgICAgCg== 9122 -CWds 9123 -IHByb2R1Y2Vk 9124 -c3lzdGVt 9125 -TWFyaw== 9126 -X2hhc2g= 9127 -IGJn 9128 -IGNvbnN0aXQ= 9129 -IExlYWd1ZQ== 9130 -IG1pc3Npb24= 9131 -X2Zvcm1hdA== 9132 -KFsK 9133 -Y2x1c2lvbg== 9134 -ISI= 9135 -0Lc= 9136 -YnJlYWs= 9137 -CXN3aXRjaA== 9138 -IHRoZXI= 9139 -VHJhbnNmb3Jt 9140 -IGZvb3RiYWxs 9141 -LWxpbms= 9142 -cm91dGU= 9143 -LmF1dGg= 9144 -IGJhZw== 9145 -b3ZlcnM= 9146 -IGVuYWJsZWQ= 9147 -IHJhYw== 9148 -KEk= 9149 -Q1I= 9150 -YW5jaW5n 9151 -IG1hbmFnZWQ= 9152 -X3E= 9153 -TkdUSA== 9154 -IG1hYw== 9155 -IEF1dG8= 9156 -YW1lbnRl 9157 -ICcnLA== 9158 -LkFwcGVuZA== 9159 -IHBpbg== 9160 -Lml0ZW0= 9161 -YWNraW5n 9162 -IG9jY2Fz 9163 -cGVyc29u 9164 -IHRp 9165 -LlJlZw== 9166 -IGhhdmVu 9167 -IGdsYXNz 9168 -ICI8Lw== 9169 -IFNpbXBsZQ== 9170 -UHJpbnQ= 9171 -IHN1cnJvdW5k 9172 -Tk8= 9173 -44CCCg== 9174 -ICAgICAgICANCg== 9175 -IE1hbnk= 9176 -ICJf 9177 -IHdlZWtlbmQ= 9178 -IHNvbWV3 9179 -LnBhcmFtcw== 9180 -c21hbGw= 9181 -QVRFRA== 9182 -IHBsdWdpbg== 9183 -ZmllbGRz 9184 -IEluaXRpYWxpemU= 9185 -b29u 9186 -YXRpbGU= 9187 -eWU= 9188 -IHZvdXM= 9189 -TEFH 9190 -IG9sZGVy 9191 -IGdhbQ== 9192 -IGV4dHJlbWVseQ== 9193 -IGhldA== 9194 -ZW51bQ== 9195 -IFNFVA== 9196 -eGZm 9197 -IHRpbWVy 9198 -L2luZGV4 9199 -IGNyaXRpY2Fs 9200 -Um93cw== 9201 -X2FyZ3VtZW50 9202 -IGV4ZWN1dGU= 9203 -IHNob3dpbmc= 9204 -LnhtbA== 9205 -LWxpc3Q= 9206 -Um9sZQ== 9207 -dHlwZW5hbWU= 9208 -X21ldGhvZA== 9209 -dGhhdA== 9210 -Y2hlcg== 9211 -IOKG 9212 -WFQ= 9213 -IHRob3VzYW5kcw== 9214 -CW4= 9215 -IHJlc3A= 9216 -X3ByaWNl 9217 -b2x1dA== 9218 -QWc= 9219 -IFR3bw== 9220 -IGJlY29tZXM= 9221 -IGh1cw== 9222 -LlVzZQ== 9223 -dGhlbWU= 9224 -dXJi 9225 -IC8qCg== 9226 -ZXJpYWxpemU= 9227 -QVJO 9228 -IGxvc2U= 9229 -TG93ZXI= 9230 -IHZlbA== 9231 -IGRlZmVuc2U= 9232 -Y29uZGl0aW9u 9233 -IGJlcw== 9234 -IGRyeQ== 9235 -IHNjcm9sbA== 9236 -LlNob3c= 9237 -SUVM 9238 -0L7RgA== 9239 -IFJlc3Q= 9240 -V2hlcmU= 9241 -b29kcw== 9242 -IEplcw== 9243 -IHdpcmU= 9244 -X0lORk8= 9245 -IHN0cmluZ3M= 9246 -Z21lbnQ= 9247 -IG1hdGNoZXM= 9248 -IGVsZWN0cmlj 9249 -IGV4Y2VsbGVudA== 9250 -IENvdW5jaWw= 9251 -aWRhZGU= 9252 -IHd4 9253 -cHVzaA== 9254 -X2VudHJ5 9255 -IHRhc2tz 9256 -IHJpY2g= 9257 -c2E= 9258 -IFNtaXRo 9259 -VU5DVElPTg== 9260 -UG9pbnRlcg== 9261 -cGVjdGl2ZQ== 9262 -MTMx 9263 -IHdpZGdldA== 9264 -aXN0YQ== 9265 -IGFnZW5jeQ== 9266 -IHNpY2g= 9267 -b2xvZ2llcw== 9268 -IHRyaWFs 9269 -YWx5c2lz 9270 -LmNoZWNr 9271 -QVJL 9272 -IG9uQ2hhbmdl 9273 -YWJvdXQ= 9274 -Jywk 9275 -KHZhbA== 9276 -IHBsYWNlZA== 9277 -X05P 9278 -IGRhbg== 9279 -LmVxdWFs 9280 -CSAgICAg 9281 -IHdlYXRoZXI= 9282 -LmdhbWU= 9283 -IGRlc3RpbmF0aW9u 9284 -X1VTRVI= 9285 -aWVjZQ== 9286 -IHByb3ZpZGVy 9287 -Lmxhc3Q= 9288 -cGxleA== 9289 -Tm90ZQ== 9290 -L2pz 9291 -IHDDpQ== 9292 -IHBsYW5uaW5n 9293 -YXR0cmlidXRl 9294 -UFJP 9295 -YXRjaGVz 9296 -IDwt 9297 -IHNlZWluZw== 9298 -IGNhbmNlbA== 9299 -X2luZA== 9300 -LmtleXM= 9301 -IHZpc3VhbA== 9302 -IEN1cnJlbnQ= 9303 -IENvbGxlZ2U= 9304 -IFJvY2s= 9305 -IGFncmVlbWVudA== 9306 -IFN0b3Jl 9307 -b3Zpbmc= 9308 -IGNvcm5lcg== 9309 -YW1waW9ucw== 9310 -SVNF 9311 -Rmlu 9312 -IHByb3RlY3Rpb24= 9313 -IGZp 9314 -UGxheQ== 9315 -cGx1Z2lu 9316 -KX0= 9317 -LmZyYW1l 9318 -LXo= 9319 -IHRyYW5zaXRpb24= 9320 -aWdpbg== 9321 -IGNhbmRpZGF0ZQ== 9322 -IFVuaW9u 9323 -X3ZhbHVlcw== 9324 -KG1hcA== 9325 -Y2xl 9326 -IHRyZW5k 9327 -d2lkZQ== 9328 -YXJlbg== 9329 -TG9j 9330 -VVRI 9331 -IEJheQ== 9332 -IHNtYWxsZXI= 9333 -aXVz 9334 -MTQx 9335 -d2VsbA== 9336 -IGNyaW1pbmFs 9337 -IGNvbmZsaWM= 9338 -YmVydA== 9339 -X0lOVA== 9340 -IGludmVzdG1lbnQ= 9341 -Y3VzdG9t 9342 -IFNlc3Npb24= 9343 -X3dyaXRl 9344 -YW5pYQ== 9345 -IE1hc3M= 9346 -X0VR 9347 -X05PVA== 9348 -IHZpb2xlbmNl 9349 -QXJndW1lbnQ= 9350 -X2VtYWls 9351 -IGJlbG9uZw== 9352 -X2Z1bmN0aW9u 9353 -IGVuZW15 9354 -ZW1h 9355 -IEFkZHJlc3M= 9356 -LmVtcHR5 9357 -IGlubmVy 9358 -IENvbnRhY3Q= 9359 -TG9hZGVy 9360 -PGlucHV0 9361 -IENB 9362 -bG90 9363 -IHBpY3R1cmVz 9364 -IFN1cHBvcnQ= 9365 -X25hbWVz 9366 -MTg4 9367 -TGF5ZXI= 9368 -IENsaWNr 9369 -U3Vt 9370 -w6Y= 9371 -IExvb2s= 9372 -dW91cw== 9373 -TGli 9374 -RmxhZ3M= 9375 -dGVhbQ== 9376 -RVA= 9377 -MTg5 9378 -aGF0 9379 -b3ZlcnJpZGU= 9380 -YXBzZWQ= 9381 -IGxhYmVscw== 9382 -cXVpcw== 9383 -IFN0cmVhbQ== 9384 -X2RldmljZQ== 9385 -IENvbW1pdA== 9386 -KHJvb3Q= 9387 -In0= 9388 -LmlzRW1wdHk= 9389 -MTI2 9390 -CU0= 9391 -IGFuZ2xl 9392 -IEJlY2F1c2U= 9393 -JSUlJSUlJSU= 9394 -IGFpbQ== 9395 -IHN0aWNr 9396 -c3RtdA== 9397 -YWdyYXBo 9398 -YW5zd2Vy 9399 -IGNsaW4= 9400 -IElzbA== 9401 -LmV4dA== 9402 -IElOVA== 9403 -IHN0eWxlcw== 9404 -IGJvcm4= 9405 -IHNjcg== 9406 -IGV4cGFuZA== 9407 -IHJhaXNlZA== 9408 -VGV4dEJveA== 9409 -SUxM 9410 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 9411 -SFRUUA== 9412 -MTMy 9413 -Pik= 9414 -X2NoYXI= 9415 -cmVzb3VyY2U= 9416 -IGVwaXNvZGU= 9417 -ICdf 9418 -IEVz 9419 -IEVhcnRo 9420 -wqDCoA== 9421 -VVBEQVRF 9422 -MTMz 9423 -IFNvdQ== 9424 -dWlz 9425 -dHlwZXM= 9426 -IG1hcw== 9427 -IGZhdg== 9428 -IGNvbnN0cnVjdA== 9429 -X3JhdGU= 9430 -ZXJhcw== 9431 -IHwK 9432 -cm9wZXJ0aWVz 9433 -IGV4dGVybmFs 9434 -IGFwcGxpZWQ= 9435 -IHByZWZpeA== 9436 -b3RlZA== 9437 -bGVycw== 9438 -IGNvbGQ= 9439 -IFNQ 9440 -IENodXJjaA== 9441 -IE91dHB1dA== 9442 -bG9zZWQ= 9443 -55o= 9444 -aWZpY2F0ZQ== 9445 -b3BlcmF0aW9u 9446 -aGVyaXQ= 9447 -eEZG 9448 -LmVudg== 9449 -X2Vycg== 9450 -b3No 9451 -RGlyZWN0aW9u 9452 -Q2FuY2Vs 9453 -IEZyYW5r 9454 -IGZpbmRpbmc= 9455 -LikKCg== 9456 -IHJvdXRlcg== 9457 -44O7 9458 -c2Vz 9459 -IGNyb3c= 9460 -PT0n 9461 -IHNhbmQ= 9462 -IHJpZA== 9463 -aXR1cmU= 9464 -IGVudHJl 9465 -IG9ic2Vydg== 9466 -IHZhYw== 9467 -8J8= 9468 -LVQ= 9469 -QXJ0 9470 -bmlnaHQ= 9471 -LnNlYXJjaA== 9472 -IGV4Y2hhbmdl 9473 -IGRpc3RyaWN0 9474 -Lm9z 9475 -IGRlcGFydG1lbnQ= 9476 -IGRvY3VtZW50cw== 9477 -IGNlbnR1cnk= 9478 -IE5leHQ= 9479 -SG9zdA== 9480 -IEtJTkQ= 9481 -IHN1c3A= 9482 -LVA= 9483 -cmVuZA== 9484 -LmVt 9485 -dWl0ZQ== 9486 -aXN0ZXJz 9487 -KGpzb24= 9488 -IEFubg== 9489 -d3Q= 9490 -YXRp 9491 -IEhUTUw= 9492 -d2hlbg== 9493 -RGlyZWN0b3J5 9494 -IHNodXQ= 9495 -PGE= 9496 -ZWR5 9497 -IGhlYWx0aHk= 9498 -IHRlbXBlcmF0dXJl 9499 -IEdlbg== 9500 -IG1ldGFs 9501 -IHN1Ym1pdA== 9502 -IERP 9503 -IGF0dHJhY3Q= 9504 -IHt9Owo= 9505 -IFdvcmQ= 9506 -IGxs 9507 -IHNlZW1lZA== 9508 -a28= 9509 -SUVE 9510 -IGxhYm9y 9511 -LkNvbnRleHQ= 9512 -IGFzc2V0 9513 -eW91 9514 -IGNhcnM= 9515 -IENvbHVtbg== 9516 -IHLDqQ== 9517 -IHNxdWFyZQ== 9518 -IE5TU3RyaW5n 9519 -4oCdLA== 9520 -YXBlcw== 9521 -Li4uCg== 9522 -IHRoYW5rcw== 9523 -KHByb3Bz 9524 -IHRpY2s= 9525 -IGV4cGVyaW1lbnQ= 9526 -IHByaXNvbg== 9527 -dHJlZQ== 9528 -LXRleHQ= 9529 -IElPRXhjZXB0aW9u 9530 -LXdpZHRo 9531 -X1NUQVRVUw== 9532 -ZmFzdA== 9533 -LWJvZHk= 9534 -LWhlYWRlcg== 9535 -IGd1YXI= 9536 -Y3JldGU= 9537 -IFRpbQ== 9538 -IGNsZWFybHk= 9539 -IFJlcHVibGljYW4= 9540 -IGp1c3RpZnk= 9541 -0LjRgg== 9542 -CSAgICA= 9543 -Y2FjaGU= 9544 -Oy8v 9545 -IHByZXNlbmNl 9546 -IGZhY3RvcnM= 9547 -IGVtcGxveWVl 9548 -XSkp 9549 -TWVtYmVy 9550 -IHNlbGVjdG9y 9551 -Ym9y 9552 -IE1leA== 9553 -55qE 9554 -dXRleA== 9555 -X3RhZw== 9556 -YWlsdXJl 9557 -IE5ldA== 9558 -IHJlbGk= 9559 -RUc= 9560 -IGZwcmludGY= 9561 -IHRlZW4= 9562 -bG9zcw== 9563 -IGxlYXZpbmc= 9564 -MTM0 9565 -RGVsZWdhdGU= 9566 -IGJlYXQ= 9567 -IG1pbnV0ZQ== 9568 -c3Vic2NyaWJl 9569 -IHJlZGlzdHJpYnV0ZQ== 9570 -Q29uc3RhbnRz 9571 -IGNhbmNlcg== 9572 -L3s= 9573 -Qkw= 9574 -IHNwYW4= 9575 -IENoaWxk 9576 -Q2VudGVy 9577 -IGVhcnRo 9578 -WVM= 9579 -IExldmVs 9580 -IHNlYQ== 9581 -LnN1cHBvcnQ= 9582 -LmlubmVy 9583 -Lkl0ZW0= 9584 -aWxsaW5n 9585 -ICAgIAogICAgCg== 9586 -IExhYmVs 9587 -MzIw 9588 -IEVzdA== 9589 -KGFyZw== 9590 -MTQ1 9591 -Ym9Cb3g= 9592 -CWZvcmVhY2g= 9593 -Y29z 9594 -RmFpbGVk 9595 -c3dlcnM= 9596 -RWRpdG9y 9597 -cm9udA== 9598 -IE1Q 9599 -ZXhwcg== 9600 -IExpZmU= 9601 -ID8/ 9602 -w7Zy 9603 -IGF0dGVuZA== 9604 -IFF1ZQ== 9605 -IHNwZWNpZXM= 9606 -LUQ= 9607 -IGF1cw== 9608 -U3RydWN0 9609 -IGFkdmFudGFnZQ== 9610 -b3N0b24= 9611 -LWJsb2Nr 9612 -aW5pdGlhbA== 9613 -Q1JF 9614 -IHRydWx5 9615 -IGNvbXBhcmU= 9616 -b3JuZXk= 9617 -IHNwZWN0 9618 -RnVsbA== 9619 -YmVz 9620 -IHZpc2libGU= 9621 -IG1lc3M= 9622 -c3RhbmNlcw== 9623 -IGNsb3Vk 9624 -X3ZlcnNpb24= 9625 -IGZ1cm4= 9626 -aWNhZ28= 9627 -TE9X 9628 -IHRyYWZmaWM= 9629 -IGZvbA== 9630 -cnlwdG8= 9631 -IGRlY2xhcg== 9632 -IHNsb3Q= 9633 -IEV4dA== 9634 -IEVuZ2xhbmQ= 9635 -IFVuZGVy 9636 -IHRh 9637 -bGV0dGVy 9638 -MjAz 9639 -IG9mZmljZXI= 9640 -IERvbmFsZA== 9641 -WWVz 9642 -X2pzb24= 9643 -SVRhYmxlVmlldw== 9644 -IFVTRQ== 9645 -bXBsb3llZQ== 9646 -IG9waW5pb24= 9647 -IEF1dA== 9648 -Ym9yZGVy 9649 -IGFkdmljZQ== 9650 -IGF1dG9tYXRpY2FsbHk= 9651 -aXNjbw== 9652 -IG1t 9653 -LnZpcw== 9654 -YW1s 9655 -IGluaXRpYWxpemU= 9656 -ICh7 9657 -IDsKCg== 9658 -IGdlbmVyYXRpb24= 9659 -IGJpdHM= 9660 -Y2xpcHNl 9661 -IHVuZg== 9662 -dXRvcnM= 9663 -cGx0 9664 -IGRlbHRh 9665 -ZXN0cm95 9666 -aXNpcw== 9667 -PGJy 9668 -IGxpbWl0YXRpb25z 9669 -IGVuZGVk 9670 -IE1hZA== 9671 -aWxt 9672 -VGhlc2U= 9673 -MTg3 9674 -IE1pbmlzdGVy 9675 -IGNoYXJ0 9676 -RnJhZ21lbnQ= 9677 -IGluZGVwZW5kZW50 9678 -WWVhcg== 9679 -IGluc3Ry 9680 -IHRhZ3M= 9681 -QVZF 9682 -IEFyY2g= 9683 -c3RvcA== 9684 -UHJvZ3Jlc3M= 9685 -IG1p 9686 -IGxlYXJuZWQ= 9687 -R2U= 9688 -IGhvdGVs 9689 -MTUx 9690 -U00= 9691 -VFlQRQ== 9692 -IGN5 9693 -RVJTSU9O 9694 -dW5hdGVseQ== 9695 -bGltaXQ= 9696 -c2Vs 9697 -IG1vdmllcw== 9698 -IHN0ZWVs 9699 -b3o= 9700 -Z2I= 9701 -IENhbXA= 9702 -c2l0ZQ== 9703 -IExvZ2dlcg== 9704 -UExF 9705 -0L7QtA== 9706 -LnJpZ2h0 9707 -IENvcmU= 9708 -IG1peGVk 9709 -c3RlcA== 9710 -IHB1dHM= 9711 -c3VwZXI= 9712 -Um91dGVy 9713 -MTg2 9714 -Lkh0dHA= 9715 -MjIy 9716 -bHlwaA== 9717 -IENvbG9ycw== 9718 -IGFuZHJvaWR4 9719 -LnN0cg== 9720 -IGlubm92 9721 -IGRlY2s= 9722 -Jz4K 9723 -YXBlcnM= 9724 -XSg= 9725 -Y29udGludWU= 9726 -c3BlYw== 9727 -IFJvYWQ= 9728 -QVNI 9729 -aWxpYXI= 9730 -IGNvbnRpbnVlcw== 9731 -IGFwcG9pbnQ= 9732 -ICMK 9733 -IFZpcg== 9734 -ID8+Ig== 9735 -IGJpbg== 9736 -fSIs 9737 -Z29pbmc= 9738 -ZWFjaA== 9739 -QkQ= 9740 -MTg1 9741 -IEFjY2Vzcw== 9742 -RG9j 9743 -IE1hbmFnZW1lbnQ= 9744 -QkVS 9745 -YXNrZXQ= 9746 -LmdldEluc3RhbmNl 9747 -MTI5 9748 -IGVzdGFibGlzaGVk 9749 -c29ja2V0 9750 -SU5T 9751 -CXZpcnR1YWw= 9752 -CXJlc3VsdA== 9753 -UkVBRA== 9754 -X2hlaWdodA== 9755 -MTUy 9756 -IEZvbnQ= 9757 -ICgpOwo= 9758 -X2h0bWw= 9759 -IG5laWdoYm9y 9760 -bG9y 9761 -IGdhdGhlcg== 9762 -IH0pCgo= 9763 -IGlkZW50aXR5 9764 -IGZhYg== 9765 -cGFkZGluZw== 9766 -IFJvdXRl 9767 -RW51bWVyYWJsZQ== 9768 -w7Q= 9769 -IGZvcmNlZA== 9770 -L2pxdWVyeQ== 9771 -LgoKCgoKCg== 9772 -cmVzZW50cw== 9773 -X2xlZnQ= 9774 -LlBhcmFt 9775 -CXRocm93 9776 -IEhhbQ== 9777 -IGV2ZW50dWFsbHk= 9778 -YWNlcg== 9779 -cHVi 9780 -IHRyYQ== 9781 -dW5pcXVl 9782 -ZGVs 9783 -IEZsb3JpZGE= 9784 -IENsZWFu 9785 -eGE= 9786 -IMK3 9787 -IHZhbGlkYXRl 9788 -VmlzdWFs 9789 -RXhwcmVzc2lvbg== 9790 -X2Z1bmM= 9791 -bWVtYmVy 9792 -CWg= 9793 -dHJs 9794 -MTM2 9795 -CUc= 9796 -bmFwc2hvdA== 9797 -IFByb3BUeXBlcw== 9798 -dmlu 9799 -MTUz 9800 -XSkKCg== 9801 -b3ds 9802 -aWZpZXM= 9803 -ICQoJy4= 9804 -IENvbnRleHQ= 9805 -IFRvYXN0 9806 -LktleQ== 9807 -IG9mZmljZXJz 9808 -L24= 9809 -c24= 9810 -dW5kZWZpbmVk 9811 -Lml0ZW1z 9812 -dXRvdw== 9813 -YW1hZ2U= 9814 -IGFjY291bnRz 9815 -b29raWU= 9816 -U2VjdGlvbg== 9817 -aWNpYW5z 9818 -IGFkdmlz 9819 -KGlz 9820 -Wzos 9821 -IEZyYW5jZQ== 9822 -RnVuYw== 9823 -aWNpb3Vz 9824 -IHRvaw== 9825 -Q2hhbm5lbA== 9826 -IEFE 9827 -X05VTQ== 9828 -IHRpbWVvdXQ= 9829 -bGVtbWE= 9830 -cmVtZQ== 9831 -dWo= 9832 -LkFs 9833 -dWNsZWFy 9834 -KG9z 9835 -KCI8 9836 -Wwo= 9837 -ZmV0Y2g= 9838 -IGJhbA== 9839 -IGd1aWQ= 9840 -LWFsaWdu 9841 -IFdyaXRl 9842 -IE9uY2U= 9843 -dXRvd2lyZWQ= 9844 -T0RVTEU= 9845 -IHBpdGNo 9846 -Q0Y= 9847 -Ynl0ZXM= 9848 -IENvbW1pc3Npb24= 9849 -IGluY3JlZA== 9850 -UEVS 9851 -X3Jlc3BvbnNl 9852 -IExvcw== 9853 -cGFyc2Vy 9854 -IGFzc3VtZQ== 9855 -LlJlcXVlc3Q= 9856 -IFRva2Vu 9857 -X3Bvc2l0aW9u 9858 -IG5vbQ== 9859 -LXRlcm0= 9860 -IHJlbWFpbmluZw== 9861 -aW9zdHJlYW0= 9862 -IHBpZWNlcw== 9863 -YXB5 9864 -IExlc3M= 9865 -cmFuZ2U= 9866 -dW1ibg== 9867 -cHJpc2U= 9868 -X29wdGlvbg== 9869 -MjMw 9870 -SW1wbA== 9871 -a3dhcmdz 9872 -IGJ1c2luZXNzZXM= 9873 -QWxlcnQ= 9874 -IHBhcnRpZXM= 9875 -IENvbnRhaW5lcg== 9876 -IFByaXZhdGU= 9877 -IFBsYW4= 9878 -IHJlZ2lzdGVyZWQ= 9879 -IGpvdXI= 9880 -YWNrZXI= 9881 -0LXQvdC4 9882 -Lz4= 9883 -Y2hhdA== 9884 -c2VjdA== 9885 -IGNyZWF0aW9u 9886 -b2x1dGVseQ== 9887 -IGluc3RhbnQ= 9888 -IGRlbGl2ZXJ5 9889 -aWNrZW4= 9890 -eWVz 9891 -MTYz 9892 -IEZyYW5j 9893 -Ymxpbmc= 9894 -ZW5kYQ== 9895 -Wyg= 9896 -X3Jhbmdl 9897 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 9898 -IHNjaGVkdWxl 9899 -Q29ubg== 9900 -IHRoYW5r 9901 -eGQ= 9902 -IGhvb2s= 9903 -IGRvY3VtZW50YXRpb24= 9904 -UGFyYW1ldGVycw== 9905 -SGVsbG8= 9906 -dnQ= 9907 -IGFydGljbGVz 9908 -IHdlc3Q= 9909 -ZGVmaW5lZA== 9910 -LnNlbGVjdA== 9911 -b2tlbnM= 9912 -IFZBTA== 9913 -LmZpbGU= 9914 -cmVzZXQ= 9915 -IG15cw== 9916 -IE1B 9917 -XSks 9918 -IGNpdGllcw== 9919 -cmVsYXRlZA== 9920 -5Zs= 9921 -IGFwcGVhcmVk 9922 -IHdpZA== 9923 -LnBhbmVs 9924 -IElucw== 9925 -LmVudGl0eQ== 9926 -IGRlY3Jl 9927 -IExvdQ== 9928 -KHRpbWU= 9929 -IFRoYW5r 9930 -LmNyZWF0ZUVsZW1lbnQ= 9931 -IG1lbnRpb25lZA== 9932 -b3VuY2U= 9933 -IFRyeQ== 9934 -IFdhbGw= 9935 -L2ltYWdlcw== 9936 -IE1lbnU= 9937 -Jw0K 9938 -IEVy 9939 -IGNyaXRpYw== 9940 -IFllYXI= 9941 -KHBhcmFt 9942 -IGZsbw== 9943 -Tk4= 9944 -b290ZXI= 9945 -IF07Cg== 9946 -IEFmZg== 9947 -ImdpdGh1Yg== 9948 -cm9vbXM= 9949 -IGh5cA== 9950 -Z2xvYmFs 9951 -IGF2ZWM= 9952 -5pyI 9953 -IGNvbXBsZXRpb24= 9954 -IGNvbmQ= 9955 -b255bW91cw== 9956 -KHRlbXA= 9957 -IHN0YXJz 9958 -IHJlbGV2YW50 9959 -IGNvdmVyZWQ= 9960 -IGVsaW0= 9961 -X3R5cGVz 9962 -KGJvb2w= 9963 -IHR1 9964 -X2V4aXN0cw== 9965 -IHNlY3VyZQ== 9966 -IHN0b3JlZA== 9967 -XS8= 9968 -eEY= 9969 -IENvbnRyb2xsZXI= 9970 -IG1pZ3I= 9971 -TUk= 9972 -IERlbg== 9973 -IGFubnVhbA== 9974 -VUlM 9975 -LWFuZA== 9976 -IGNyaW1l 9977 -YmVs 9978 -IGtpdGNoZW4= 9979 -QGc= 9980 -X3Bo 9981 -b3VybmFtZW50 9982 -IFNvY2lhbA== 9983 -IFNwZWNpYWw= 9984 -bG9nZ2Vy 9985 -IHRhaWw= 9986 -IHVua25vd24= 9987 -ZGVk 9988 -IGFwcHJlYw== 9989 -KGRi 9990 -Y2Y= 9991 -MTU1 9992 -IGFzc2lnbg== 9993 -LW91dA== 9994 -IE1vbnQ= 9995 -ZHA= 9996 -d2lkZ2V0 9997 -IHN0b25l 9998 -LXByaW1hcnk= 9999 -LmdyaWQ= 10000 -UmVzdWx0cw== 10001 -YXp6 10002 -IGRhdWdodGVy 10003 -IGN1cnI= 10004 -MTc1 10005 -IGxpbg== 10006 -IHNvdXRo 10007 -Zm9ybXM= 10008 -IE9VVA== 10009 -bGV0dGU= 10010 -YWtz 10011 -aWd1cmU= 10012 -IEVV 10013 -dmFyaWFibGU= 10014 -IGJyaWVm 10015 -IFNjb3R0 10016 -IGNvbmZlcmVuY2U= 10017 -YW5kYQ== 10018 -X2xvY2s= 10019 -b3JhbA== 10020 -IGVpbmU= 10021 -T1JT 10022 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 10023 -ZXNzbw== 10024 -IHJpcw== 10025 -IGdlbmRlcg== 10026 -ZXN0aWM= 10027 -TGljZW5zZQ== 10028 -KG91dA== 10029 -IG1z 10030 -U2Vl 10031 -IHdpbGxpbmc= 10032 -YXpl 10033 -IHNwb3J0cw== 10034 -IHllcw== 10035 -bHU= 10036 -IHB1cnM= 10037 -L2phdmFzY3JpcHQ= 10038 -LXBybw== 10039 -bmF2YmFy 10040 -X3Byb2R1Y3Q= 10041 -L2Jvb3RzdHJhcA== 10042 -IGRyaXZpbmc= 10043 -IMQ= 10044 -IHByb3Bvcw== 10045 -dWx0aXA= 10046 -dXBsaWM= 10047 -LmVtYWls 10048 -IGFwcHJveA== 10049 -KGNs 10050 -IHdlYXI= 10051 -IHJlcGx5 10052 -YXNzZXQ= 10053 -IGljZQ== 10054 -IHR4 10055 -a3I= 10056 -IEdlcm1hbnk= 10057 -IEdlb3JnZQ== 10058 -IGNi 10059 -CWVycg== 10060 -TW92ZQ== 10061 -IHBvbHk= 10062 -dm9pY2U= 10063 -fSI= 10064 -IGFuaW1hbA== 10065 -QXY= 10066 -IExvY2F0aW9u 10067 -IG5hdGl2ZQ== 10068 -XVsi 10069 -PGRvdWJsZQ== 10070 -IG1haXM= 10071 -LGludA== 10072 -IHByZXBhcg== 10073 -IGludGVydmFs 10074 -cGxlbWVudGF0aW9u 10075 -X0VSUg== 10076 -IGJ1Zw== 10077 -PiI= 10078 -c3RhdA== 10079 -IH0sDQo= 10080 -PHNwYW4= 10081 -IGZhaXRo 10082 -IHJvbQ== 10083 -cHJldg== 10084 -IEVsZWN0 10085 -RmluZA== 10086 -IGdvZA== 10087 -b3Rvcg== 10088 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 10089 -b3JpZ2luYWw= 10090 -Q3Bw 10091 -IFNlbmF0ZQ== 10092 -IHBvc2l0aW9ucw== 10093 -IHdlYXBvbnM= 10094 -IGNvZmY= 10095 -IHB1cnBvc2Vz 10096 -cG9s 10097 -IGltcHJlc3M= 10098 -IGFuaW1hbHM= 10099 -LkVudGl0eQ== 10100 -KG5w 10101 -IG11cmRlcg== 10102 -IGBg 10103 -ZmxhZw== 10104 -IHNvbHV0aW9ucw== 10105 -IEFjdGl2ZQ== 10106 -IGJyaWdodA== 10107 -LmRhdGU= 10108 -IHNpdHU= 10109 -77yI 10110 -LklE 10111 -IHNpZQ== 10112 -KSwNCg== 10113 -YWt0 10114 -U3BhY2U= 10115 -LmRhdA== 10116 -LmluZGV4T2Y= 10117 -aGFu 10118 -YXppbmU= 10119 -IFpl 10120 -IGNyYXNo 10121 -KC8= 10122 -Pj0= 10123 -0LE= 10124 -MTM5 10125 -aXZh 10126 -LkF1dG9TaXpl 10127 -IExhdA== 10128 -X2V4dA== 10129 -SW5pdGlhbGl6ZQ== 10130 -LnJlZ2lzdGVy 10131 -MTU2 10132 -T1BZ 10133 -IHJldmVyc2U= 10134 -X2Rpcw== 10135 -J11b 10136 -IHByb21wdA== 10137 -b250bw== 10138 -IEpvdXJuYWw= 10139 -cm91dGVy 10140 -IG15c3FsaQ== 10141 -I2Vsc2U= 10142 -KSI= 10143 -LXhz 10144 -bGV0cw== 10145 -cGhhbg== 10146 -LkxF 10147 -MTM3 10148 -V2lsbA== 10149 -IGFmZm9yZA== 10150 -IHNraWxs 10151 -LXRvZ2dsZQ== 10152 -TkM= 10153 -QmluZA== 10154 -VFM= 10155 -SnVzdA== 10156 -aXRlcmFs 10157 -WVA= 10158 -CXVuc2lnbmVk 10159 -IHdpbmQ= 10160 -MTQ5 10161 -KSk6Cg== 10162 -IHdhcm5pbmc= 10163 -IFdhdGVy 10164 -IGRyYWZ0 10165 -IGNt 10166 -IHNhbQ== 10167 -IGhvbGRpbmc= 10168 -emlw 10169 -IFNjaWVuY2U= 10170 -IHN1cHBvc2Vk 10171 -R2Vu 10172 -IGRpZXQ= 10173 -PGg= 10174 -IFBhc3M= 10175 -dmk= 10176 -IGh1c2JhbmQ= 10177 -77+977+9 10178 -bm90ZQ== 10179 -IEFib3V0 10180 -IEluc3RpdHV0ZQ== 10181 -IGNsaW1hdGU= 10182 -LkZvcm1hdA== 10183 -IG51dA== 10184 -ZXN0ZWQ= 10185 -IGFwcGFyZW50 10186 -IGhvbGRz 10187 -Zmk= 10188 -bmV3cw== 10189 -Q00= 10190 -dmlkZW8= 10191 -Jzon 10192 -RElUSU9O 10193 -cGluZw== 10194 -IHNlbmlvcg== 10195 -d2E= 10196 -LS0+Cg== 10197 -X2RlZmF1bHQ= 10198 -IERhdGFiYXNl 10199 -cmVw 10200 -RVNT 10201 -bmVyZ3k= 10202 -LkZpbmQ= 10203 -X21hc2s= 10204 -IHJpc2U= 10205 -IGtlcm5lbA== 10206 -Ojok 10207 -LlE= 10208 -IG9mZmVyaW5n 10209 -ZGVjbA== 10210 -IENT 10211 -IGxpc3RlZA== 10212 -IG1vc3RseQ== 10213 -ZW5nZXI= 10214 -IGJsb2Nrcw== 10215 -b2xv 10216 -IGdvdmVybmluZw== 10217 -XEY= 10218 -IGNvbmNlbnQ= 10219 -LmdldFRleHQ= 10220 -IG1i 10221 -IG9jY3VycmVk 10222 -IGNoYW5naW5n 10223 -U2NlbmU= 10224 -X0NPREU= 10225 -QmVo 10226 -IlRoZQ== 10227 -IHRpbGU= 10228 -IEFzc29jaWF0aW9u 10229 -CVA= 10230 -YWx0eQ== 10231 -X2Fk 10232 -b2RpZXM= 10233 -aWF0ZWQ= 10234 -IHByZXBhcmVk 10235 -cG9zc2libGU= 10236 -IG1vcnQ= 10237 -VEVTVA== 10238 -MTQy 10239 -IGlnbm9yZQ== 10240 -IGNhbGM= 10241 -IHJz 10242 -IGFzc2VydEVxdWFscw== 10243 -IHN6 10244 -IFRISVM= 10245 -LiIK 10246 -IGNhbnZhcw== 10247 -amF2YQ== 10248 -IGR1dA== 10249 -VkFMSUQ= 10250 -LnNxbA== 10251 -LmlucHV0 10252 -IGF1eA== 10253 -U3Vw 10254 -IGFydGlzdA== 10255 -VmVj 10256 -X1RJTUU= 10257 -LnN0cmluZ2lmeQ== 10258 -ZXR3ZWVu 10259 -IENhdGVnb3J5 10260 -IFst 10261 -IERldkV4cHJlc3M= 10262 -IEp1bA== 10263 -IHJpbmc= 10264 -LmVk 10265 -WVk= 10266 -TGV0 10267 -VGV4dEZpZWxk 10268 -IGZsYXQ= 10269 -X3ByaW50 10270 -IE9USEVS 10271 -YWRpYW4= 10272 -IGNoZWNrZWQ= 10273 -ZWxl 10274 -QWxpZ24= 10275 -c3RhbmRpbmc= 10276 -IFtdLA== 10277 -IGxhYg== 10278 -dWNreQ== 10279 -IENocmlzdG1hcw== 10280 -KGltYWdl 10281 -Lm1vZHVsZQ== 10282 -IGxvdHM= 10283 -IHNsaWdodGx5 10284 -KGZpbmFs 10285 -ZXJnZQ== 10286 -6L8= 10287 -MTQ3 10288 -IFBvbGljZQ== 10289 -MTQz 10290 -IFJpZ2h0 10291 -IGF3YXJk 10292 -IE9T 10293 -IHt9Cgo= 10294 -IHB0cg== 10295 -b3Zlcw== 10296 -aWNhdGVk 10297 -0LXQvA== 10298 -IG1hbmFnZQ== 10299 -b2xpZGF5 10300 -QW1vdW50 10301 -b29sU3RyaXA= 10302 -dGJvZHk= 10303 -TmF2 10304 -d3JhcA== 10305 -QkI= 10306 -IHdhdGNoaW5n 10307 -YXJpb3M= 10308 -IG9wdGlvbmFs 10309 -X0s= 10310 -IExpY2Vuc2Vk 10311 -Lk1hcA== 10312 -VGltZXI= 10313 -IEFQ 10314 -IFJldg== 10315 -KG8= 10316 -LGM= 10317 -dW1pbg== 10318 -ZXRhaWxlZA== 10319 -IEh5 10320 -IGJsYW5r 10321 -YWdnZXI= 10322 -IFNlbGY= 10323 -KClb 10324 -Lm1ha2U= 10325 -ZWFybg== 10326 -Y2hhbm5lbA== 10327 -PHByZQ== 10328 -YmxlbQ== 10329 -X3Bhc3N3b3Jk 10330 -X3Nw 10331 -aWNpbmc= 10332 -ZXo= 10333 -IHRoZW9yeQ== 10334 -IFRlcg== 10335 -MTg0 10336 -LG4= 10337 -bG9nbw== 10338 -IEhUVFA= 10339 -KCkpKQ== 10340 -LmhhbmRsZQ== 10341 -PjsK 10342 -V29ybGQ= 10343 -IHB5dGhvbg== 10344 -IGxpZg== 10345 -IHRyYXY= 10346 -IGNvbnZlbg== 10347 -Y29tcGFueQ== 10348 -IENsdWI= 10349 -MTM4 10350 -VmVy 10351 -QnRu 10352 -IHpvbmU= 10353 -cHJvZHVjdHM= 10354 -IEVkdWM= 10355 -IHZlcmlmeQ== 10356 -IE1pbA== 10357 -b25v 10358 -XSk7Cgo= 10359 -RU5DRQ== 10360 -IHBhY2tldA== 10361 -IGNlcg== 10362 -IGVudW1lcg== 10363 -IHBhcnM= 10364 -Zm9ybWVk 10365 -IG9jY3Vw 10366 -dHJl 10367 -IGV4ZXJjaXNl 10368 -RGF5 10369 -X3N1bQ== 10370 -IGFza2luZw== 10371 -YXB0aW9u 10372 -IG9yZGVycw== 10373 -IHNwZW5kaW5n 10374 -IEVSUg== 10375 -LkRpcw== 10376 -IFV0aWw= 10377 -4oCcSQ== 10378 -XCc= 10379 -Pyk= 10380 -Lz4K 10381 -IGVtb3Q= 10382 -IGluZmx1ZW5jZQ== 10383 -IEFmcmljYQ== 10384 -YXR0ZXJz 10385 -2YU= 10386 -LnNlc3Npb24= 10387 -IGNoaWVm 10388 -CQkJCQkJCQkJCQk= 10389 -IHRvbQ== 10390 -Y2x1ZGVk 10391 -c2VyaWFs 10392 -X2hhbmRsZXI= 10393 -LlR5cGU= 10394 -YXBlZA== 10395 -IHBvbGljaWVz 10396 -LWV4 10397 -LXRy 10398 -Ymxhbms= 10399 -bWVyY2U= 10400 -IGNvdmVyYWdl 10401 -IHJj 10402 -X21hdHJpeA== 10403 -X2JveA== 10404 -IGNoYXJnZXM= 10405 -IEJvc3Rvbg== 10406 -UGU= 10407 -IGNpcmN1bQ== 10408 -IGZpbGxlZA== 10409 -MTQ4 10410 -IG5vcnRo 10411 -aWN0dXJlQm94 10412 -CXJlcw== 10413 -6K4= 10414 -IHRlcm1pbg== 10415 -IFvigKY= 10416 -SVJFQ1Q= 10417 -IGJlcg== 10418 -ICIuLi8uLi8= 10419 -cmV0Y2g= 10420 -LmNvZGU= 10421 -X2NvbA== 10422 -IEdvdmVybm1lbnQ= 10423 -IGFyZ3Y= 10424 -IExvcmQ= 10425 -YXNp 10426 -RXhlYw== 10427 -CWxldA== 10428 -dmVydGlz 10429 -IGRpc2N1c3Npb24= 10430 -ZW5hbmNl 10431 -b3V0dWJl 10432 -dHlwZW9m 10433 -IHNlcnZlZA== 10434 -IFB1dA== 10435 -CXg= 10436 -IHN3ZWV0 10437 -QmVmb3Jl 10438 -YXRlZ3k= 10439 -Lm9m 10440 -IE1hdGVyaWFs 10441 -U29ydA== 10442 -T05U 10443 -aWdpdGFs 10444 -V2h5 10445 -IHN1c3Q= 10446 -IOc= 10447 -YWJldA== 10448 -IHNlZ21lbnQ= 10449 -IFtdLAo= 10450 -IE11c2xpbQ== 10451 -IGZpbmRWaWV3QnlJZA== 10452 -Y3V0 10453 -X1RFWFQ= 10454 -IE1hcnk= 10455 -IGxvdmVk 10456 -IGxpZQ== 10457 -IEpP 10458 -IGlzc2V0 10459 -bW9udGg= 10460 -IHByaW1l 10461 -dGk= 10462 -IENhcm9s 10463 -VXNl 10464 -MTQ2 10465 -IFBvcA== 10466 -IFNhdmU= 10467 -SW50ZXJ2YWw= 10468 -ZXhlY3V0ZQ== 10469 -ZHk= 10470 -IElyYW4= 10471 -X2NvbnQ= 10472 -CVQ= 10473 -IHBoYXNl 10474 -Y2hlY2tib3g= 10475 -d2Vlaw== 10476 -IGhpZGU= 10477 -IHRpbA== 10478 -IGp1 10479 -Q3VzdG9t 10480 -YnVyZw== 10481 -L00= 10482 -VE9O 10483 -IHF1YW50 10484 -IHJ1Yg== 10485 -aXhlbHM= 10486 -IGluc3RhbGxlZA== 10487 -IGR1bXA= 10488 -IHByb3Blcmx5 10489 -KExpc3Q= 10490 -IGRlY2lkZQ== 10491 -YXBwbHk= 10492 -SGFz 10493 -IGtlZXBpbmc= 10494 -IGNpdGl6ZW5z 10495 -IGpvaW50 10496 -cG9vbA== 10497 -U29ja2V0 10498 -X29w 10499 -IHdlYXBvbg== 10500 -Z25vcmU= 10501 -IEV4ZWM= 10502 -b3R0ZW4= 10503 -IE1T 10504 -ICgt 10505 -IFJldmlldw== 10506 -IGV4YW1wbGVz 10507 -IHRpZ2h0 10508 -ISg= 10509 -RFA= 10510 -IE1lc3NhZ2VCb3g= 10511 -IHBob3RvZ3JhcGg= 10512 -MTY0 10513 -VVJJ 10514 -w6l0 10515 -bG93 10516 -IEdyYW5k 10517 -LnBlcnNpc3RlbmNl 10518 -IG1haW50YWlu 10519 -IG51bXM= 10520 -IHppcA== 10521 -aWFscw== 10522 -IEdldHM= 10523 -cGVn 10524 -IEJ1ZmZlcg== 10525 -fn5+fg== 10526 -cmFzdHJ1Y3R1cmU= 10527 -IFBM 10528 -dWVu 10529 -b2JieQ== 10530 -c2l6ZW9m 10531 -IHBpYw== 10532 -IHNlZWQ= 10533 -IGV4cGVyaWVuY2Vk 10534 -IG9kZA== 10535 -IGtpY2s= 10536 -IHByb2NlZHVyZQ== 10537 -YXZpZ2F0b3I= 10538 -LW9u 10539 -LGo= 10540 -IEFsdGhvdWdo 10541 -IHVzZXJJZA== 10542 -YWNjZXB0 10543 -Qmx1ZQ== 10544 -SUNvbG9y 10545 -bGF5ZXI= 10546 -YXZhaWxhYmxl 10547 -IGVuZHM= 10548 -LnRhYmxl 10549 -IGRhdGFzZXQ= 10550 -YnVz 10551 -IGV4cGxhaW4= 10552 -KHBybw== 10553 -IENvbW1pdHRlZQ== 10554 -IG5vdGVk 10555 -XToK 10556 -RGlt 10557 -c3RkaW8= 10558 -MTU0 10559 -LiIsCg== 10560 -X3NvdXJjZQ== 10561 -MTgx 10562 -IFdlZWs= 10563 -IEVkZ2U= 10564 -IG9wZXJhdGluZw== 10565 -IGVzdGU= 10566 -aXBs 10567 -MzMw 10568 -YWdpbmF0aW9u 10569 -IHByb2NlZWQ= 10570 -IGFuaW1hdGlvbg== 10571 -Lk1vZGVscw== 10572 -IFdhdGNo 10573 -aWF0 10574 -IG9wcG9u 10575 -L0E= 10576 -UmVwb3J0 10577 -IHNvdW5kcw== 10578 -X2J1Zg== 10579 -SUVMRA== 10580 -IGJ1bmQ= 10581 -CWdldA== 10582 -LnBy 10583 -KHRtcA== 10584 -IGtpZA== 10585 -PgoKCg== 10586 -IHlhbmc= 10587 -Tm90Rm91bmQ= 10588 -0YY= 10589 -bWF0aA== 10590 -QGdtYWls 10591 -IExJTUlU 10592 -cmVkaWVudHM= 10593 -IHZlbnQ= 10594 -YXZpZ2F0ZQ== 10595 -TG9vaw== 10596 -IHJlbGlnaW91cw== 10597 -IHJhbmQ= 10598 -cmlv 10599 -KEdM 10600 -X2lw 10601 -dWFu 10602 -aWNpZW5jeQ== 10603 -IENoYW5nZQ== 10604 -Pg0KDQo= 10605 -IEVudGl0eQ== 10606 -IHJlbmNvbnRyZQ== 10607 -IFJldA== 10608 -cGxhbg== 10609 -w6lu 10610 -Qk9PTA== 10611 -dXJpZXM= 10612 -dHJhaW4= 10613 -RGVmaW5pdGlvbg== 10614 -PT09PT09PT09PT09 10615 -eno= 10616 -NDUw 10617 -QW5pbWF0aW9u 10618 -IE9L 10619 -X21lbnU= 10620 -LmJs 10621 -X3Njb3Jl 10622 -IGFjYWQ= 10623 -KFN5c3RlbQ== 10624 -IHJlZnJlc2g= 10625 -Jz0+JA== 10626 -LkdyYXBoaWNz 10627 -YW1lbnRv 10628 -cGlk 10629 -dGM= 10630 -IHRpcHM= 10631 -IGhvbWVz 10632 -IGZ1ZWw= 10633 -4pY= 10634 -X2hlbHBlcg== 10635 -ICANCg== 10636 -IFJvb20= 10637 -LkNsb3Nl 10638 -X2F0dHI= 10639 -IE1vdW50 10640 -IEV2 10641 -YXJzZXI= 10642 -X3RvcA== 10643 -ZWFo 10644 -IERlbGV0ZQ== 10645 -44CN 10646 -dWtl 10647 -IHVzYWdl 10648 -YXJpYQ== 10649 -X2Rldg== 10650 -IHRleHR1cmU= 10651 -IGNvbnZlcnNhdGlvbg== 10652 -ZXBlcg== 10653 -QmVhbg== 10654 -ZG9uZQ== 10655 -bm9uYXRvbWlj 10656 -IFNlY29uZA== 10657 -IHNob290aW5n 10658 -X3ByZQ== 10659 -Q29tcG9uZW50cw== 10660 -IF0KCg== 10661 -X18s 10662 -c3RpdHV0aW9u 10663 -LkNoYXI= 10664 -PigpOwoK 10665 -IHByZXNlbnRlZA== 10666 -IHdh 10667 -b2tlcg== 10668 -LQoK 10669 -aW5lcg== 10670 -IGJlY29taW5n 10671 -IGluY2lkZW50 10672 -QXR0 10673 -MTYy 10674 -IHJldmVhbGVk 10675 -Zm9yYw== 10676 -IGJvb3Q= 10677 -LnBhZ2U= 10678 -RW51bWVyYXRvcg== 10679 -MTY1 10680 -Xy0+ 10681 -UGhvdG8= 10682 -IHNwcmluZw== 10683 -LiIs 10684 -IERpY3Rpb25hcnk= 10685 -QkpFQ1Q= 10686 -IGxvY2F0aW9ucw== 10687 -IHNhbXBsZXM= 10688 -SW5wdXRTdHJlYW0= 10689 -IEJyb3du 10690 -IHN0YXRz 10691 -cXVhbGl0eQ== 10692 -0YU= 10693 -LWRpcw== 10694 -IGhlbHBpbmc= 10695 -IHBlZA== 10696 -MjI0 10697 -KHNl 10698 -IFdobw== 10699 -YWxpYW4= 10700 -aW50ZXJuYWw= 10701 -IGZ0 10702 -PigpLg== 10703 -LT57 10704 -IG1pbmU= 10705 -IHNlY3Rvcg== 10706 -IGdybw== 10707 -IG9wcG9ydHVuaXRpZXM= 10708 -IMO8 10709 -IG1w 10710 -IGFsbGVnZWQ= 10711 -IGRvdWJ0 10712 -TW91c2U= 10713 -QWJvdXQ= 10714 -X3BhcnQ= 10715 -IGNoYWly 10716 -IHN0b3BwZWQ= 10717 -MTYx 10718 -bG9vcA== 10719 -ZW50aXRpZXM= 10720 -IGFwcHM= 10721 -YW5zaW9u 10722 -IG1lbnRhbA== 10723 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 10724 -RlI= 10725 -IGRlZmVuZA== 10726 -Y2FyZQ== 10727 -IGlkZWFs 10728 -L2FwaQ== 10729 -dXJmYWNl 10730 -MDEx 10731 -IGVsZQ== 10732 -dWxhdG9y 10733 -IFJpZ2h0cw== 10734 -YW5ndWFnZXM= 10735 -IGZ1bmRz 10736 -IGFkYXB0 10737 -QXR0cmlidXRlcw== 10738 -IGRlcGxveQ== 10739 -b3B0cw== 10740 -IHZhbGlkYXRpb24= 10741 -IGNvbmNlcm5z 10742 -dWNl 10743 -Lm51bQ== 10744 -dWx0dXJl 10745 -aWxh 10746 -IGN1cA== 10747 -IHB1cmU= 10748 -LkZvcmU= 10749 -MTgz 10750 -IEhhc2hNYXA= 10751 -LnZhbHVlT2Y= 10752 -YXNt 10753 -TU8= 10754 -IGNz 10755 -IHN0b3Jlcw== 10756 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 10757 -IGNvbW11bmljYXRpb24= 10758 -bWVt 10759 -LkV2ZW50SGFuZGxlcg== 10760 -LlN0YXR1cw== 10761 -X3JpZ2h0 10762 -LnNldE9u 10763 -U2hlZXQ= 10764 -IGlkZW50aWZ5 10765 -ZW5lcmF0ZWQ= 10766 -b3JkZXJlZA== 10767 -ICJb 10768 -IHN3ZQ== 10769 -Q29uZGl0aW9u 10770 -IEFjY29yZGluZw== 10771 -IHByZXBhcmU= 10772 -IHJvYg== 10773 -UG9vbA== 10774 -IHNwb3J0 10775 -cnY= 10776 -IFJvdXRlcg== 10777 -IGFsdGVybmF0aXZl 10778 -KFtd 10779 -IENoaWNhZ28= 10780 -aXBoZXI= 10781 -aXNjaGU= 10782 -IERpcmVjdG9y 10783 -a2w= 10784 -IFdpbA== 10785 -a2V5cw== 10786 -IG15c3Fs 10787 -IHdlbGNvbWU= 10788 -a2luZw== 10789 -IE1hbmFnZXI= 10790 -IGNhdWdodA== 10791 -KX0K 10792 -U2NvcmU= 10793 -X1BS 10794 -IHN1cnZleQ== 10795 -aGFi 10796 -SGVhZGVycw== 10797 -QURFUg== 10798 -IGRlY29y 10799 -IHR1cm5z 10800 -IHJhZGl1cw== 10801 -ZXJydXB0 10802 -Q29y 10803 -IG1lbA== 10804 -IGludHI= 10805 -KHE= 10806 -IEFD 10807 -YW1vcw== 10808 -TUFY 10809 -IEdyaWQ= 10810 -IEplc3Vz 10811 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 10812 -LkRF 10813 -IHRz 10814 -IGxpbmtlZA== 10815 -ZnJlZQ== 10816 -IFF0 10817 -IC8qKg0K 10818 -IGZhc3Rlcg== 10819 -Y3Ry 10820 -X0o= 10821 -RFQ= 10822 -LkNoZWNr 10823 -IGNvbWJpbmF0aW9u 10824 -IGludGVuZGVk 10825 -LXRoZQ== 10826 -LXR5cGU= 10827 -MTgy 10828 -ZWN0b3Jz 10829 -YW1p 10830 -dXRpbmc= 10831 -IHVtYQ== 10832 -WE1M 10833 -VUNU 10834 -QXA= 10835 -IFJhbmRvbQ== 10836 -IHJhbg== 10837 -LnNvcnQ= 10838 -IHNvcnRlZA== 10839 -LlVu 10840 -NDAx 10841 -X1BFUg== 10842 -aXRvcnk= 10843 -IHByaW9yaXR5 10844 -IEdhbA== 10845 -IE9sZA== 10846 -aG90 10847 -IERpc3BsYXk= 10848 -KHN1Yg== 10849 -X1RI 10850 -X1k= 10851 -IENhcmU= 10852 -bG9hZGluZw== 10853 -S2luZA== 10854 -X2hhbmRsZQ== 10855 -LCw= 10856 -cmFzZQ== 10857 -X3JlcGxhY2U= 10858 -LmFkZEV2ZW50TGlzdGVuZXI= 10859 -IFJU 10860 -MTcy 10861 -IGVudGVyZWQ= 10862 -Z2Vycw== 10863 -IGljaA== 10864 -KHN0YXJ0 10865 -MjA1 10866 -L2FwcA== 10867 -IGJyb3RoZXI= 10868 -TWVtb3J5 10869 -T3V0bGV0 10870 -IHV0Zg== 10871 -cHJlYw== 10872 -IG5hdmlnYXRpb24= 10873 -T1JL 10874 -IGRzdA== 10875 -RGV0YWls 10876 -IGF1ZGllbmNl 10877 -IGR1cg== 10878 -IGNsdXN0ZXI= 10879 -dW5jaGVk 10880 -IF0s 10881 -IGNvbWZvcnRhYmxl 10882 -LnZhbHVlcw== 10883 -IFRvdGFs 10884 -IHNuYXA= 10885 -IHN0YW5kYXJkcw== 10886 -IHBlcmZvcm1lZA== 10887 -aGFuZA== 10888 -KCJA 10889 -5a0= 10890 -IHBoaWw= 10891 -aWJy 10892 -dHJpbQ== 10893 -IGZvcmdldA== 10894 -MTU3 10895 -IGRvY3Rvcg== 10896 -LlRleHRCb3g= 10897 -Mzc3 10898 -aWNvbnM= 10899 -LHM= 10900 -IE9w 10901 -U20= 10902 -U3RvcA== 10903 -CUxpc3Q= 10904 -CXU= 10905 -Q29tbWVudA== 10906 -X1ZFUlNJT04= 10907 -Llh0cmE= 10908 -UGVyc29u 10909 -cmI= 10910 -TE9C 10911 -ICAgICAgICAgICAgICAgICAgICAK 10912 -IENlbnRyYWw= 10913 -Mjcw 10914 -SUNL 10915 -cmFx 10916 -IHB1dHRpbmc= 10917 -IG1k 10918 -IExvdmU= 10919 -UHJvZ3JhbQ== 10920 -Qm9yZGVy 10921 -b29y 10922 -IGFsbG93aW5n 10923 -YWZ0ZXI= 10924 -IGVudHJpZXM= 10925 -IE1heWJl 10926 -XSku 10927 -IFNob3J0 10928 -KVw= 10929 -Lm5vdw== 10930 -ZnJpZW5k 10931 -IHByZWZlcg== 10932 -IEdQSU8= 10933 -b3Npcw== 10934 -IEdhbWVPYmplY3Q= 10935 -IHNraXA= 10936 -IGNvbXBldGl0aW9u 10937 -X21hdGNo 10938 -bGljYXRpb25z 10939 -X0NPTlQ= 10940 -Lmdyb3VwQm94 10941 -IGFscw== 10942 -NjY2 10943 -Ildl 10944 -X2Vx 10945 -bGFu 10946 -X3NlYXJjaA== 10947 -IE11c2lj 10948 -YXNpcw== 10949 -IGJpbmQ= 10950 -IElzbGFuZA== 10951 -cnVt 10952 -KEU= 10953 -IHNlYXQ= 10954 -VmlkZW8= 10955 -IGFjaw== 10956 -cmVlaw== 10957 -PXsoKQ== 10958 -IHJhdGluZw== 10959 -IHJlc3RhdXJhbnQ= 10960 -NDU2 10961 -REVY 10962 -KGJ1Zg== 10963 -cHBpbmc= 10964 -dWFsaXR5 10965 -IGxlYWd1ZQ== 10966 -MTc2 10967 -IGZvY3VzZWQ= 10968 -YXBvbg== 10969 -JGRhdGE= 10970 -Q0xVRA== 10971 -Q0xVRElORw== 10972 -IGFic29sdXRl 10973 -KHF1ZXJ5 10974 -IHRlbGxz 10975 -QW5n 10976 -IGNvbW11bml0aWVz 10977 -IGhvbmVzdA== 10978 -b2tpbmc= 10979 -IGFwYXJ0 10980 -YXJpdHk= 10981 -LyQ= 10982 -X21vZHVsZQ== 10983 -IEVuYw== 10984 -LmFu 10985 -LkNvbmZpZw== 10986 -Q3Jl 10987 -IHNob2Nr 10988 -IEFyYWI= 10989 -SUVOVA== 10990 -L3Jl 10991 -IHJldHJpZQ== 10992 -eWNsZXI= 10993 -aXNh 10994 -IE9yZ2Fu 10995 -LmdyYXBo 10996 -IO0= 10997 -IEJBUw== 10998 -RW51bQ== 10999 -IHBvc3NpYmx5 11000 -0YDQsNA= 11001 -IEphcGFuZXNl 11002 -IGNyYWZ0 11003 -IFBsYWNl 11004 -IHRhbGVudA== 11005 -IGZ1bmRpbmc= 11006 -IGNvbmZpcm1lZA== 11007 -IGN5Y2xl 11008 -L3g= 11009 -R0U= 11010 -IGhlYXJpbmc= 11011 -IHBsYW50cw== 11012 -IG1vdXRo 11013 -cGFnZXM= 11014 -b3JpYQ== 11015 -IFJlbW92ZQ== 11016 -X3RvdGFs 11017 -IG9k 11018 -b2xsYXBzZQ== 11019 -ZG9vcg== 11020 -IGJvdWdodA== 11021 -IGFkZHI= 11022 -QVJDSA== 11023 -X2RpbQ== 11024 -ZGRlbg== 11025 -IGRlY2FkZXM= 11026 -UkVRVUVTVA== 11027 -IHZlcnNpb25z 11028 -ZmlyZQ== 11029 -MDA2 11030 -IG1vdmVz 11031 -ZmI= 11032 -IGNvZmZlZQ== 11033 -LmNvbm5lY3Q= 11034 -IFJvdw== 11035 -IHNjaGVtYQ== 11036 -U2NvcGU= 11037 -LVR5cGU= 11038 -IGZpZ2h0aW5n 11039 -IHJldGFpbA== 11040 -IG1vZGlmaWVk 11041 -VEY= 11042 -RmlsZXM= 11043 -bmll 11044 -X2NvbW1hbmQ= 11045 -c3RvbmU= 11046 -INGC 11047 -X3RocmVhZA== 11048 -IGJvbmQ= 11049 -IERldmVsb3BtZW50 11050 -IHB0 11051 -Rk9STQ== 11052 -cGxldA== 11053 -IGlkZW50aWZpZWQ= 11054 -Y3Bw 11055 -MjA2 11056 -MjI1 11057 -IGNvZGluZw== 11058 -b2tlZA== 11059 -IE1hc3Rlcg== 11060 -SURUSA== 11061 -IHJlc2lkZW50cw== 11062 -cmVkaXQ= 11063 -IFBob3Rv 11064 -PS0= 11065 -dW50ZQ== 11066 -YXRldXI= 11067 -MTU5 11068 -X1NUQVRF 11069 -IFNpbmc= 11070 -IHNoZWV0 11071 -LnZhbA== 11072 -b3JzZQ== 11073 -IGhlcnM= 11074 -IGRldGVybWluZWQ= 11075 -Q29tbW9u 11076 -IHdlZA== 11077 -X3F1ZXVl 11078 -UEg= 11079 -IEF0bA== 11080 -Y3JlZA== 11081 -L0xJQ0VOU0U= 11082 -IG1lcw== 11083 -IGFkdmFuY2Vk 11084 -LmphdmE= 11085 -LlNo 11086 -R28= 11087 -a2lsbA== 11088 -ZnA= 11089 -X3NldHRpbmdz 11090 -IHBhbA== 11091 -IHRydWNr 11092 -IGNvbWJpbmVk 11093 -ICIkew== 11094 -IENvcnBvcg== 11095 -IGpvaW5lZA== 11096 -IEpvc2U= 11097 -IEN1cA== 11098 -dW5z 11099 -ZXN0aXZhbA== 11100 -bGV2aXNpb24= 11101 -IGJyb2tlbg== 11102 -IG1hcnJpYWdl 11103 -IFdlc3Rlcm4= 11104 -IHJlcHJlc2VudHM= 11105 -IFRpdGxl 11106 -IHNz 11107 -LkFzcw== 11108 -b25nb29zZQ== 11109 -aWVudG8= 11110 -PD4oKTsK 11111 -IGFic29sdXRlbHk= 11112 -IHNtb290aA== 11113 -VEVSTg== 11114 -IFVubGVzcw== 11115 -V29yZA== 11116 -IG1lcmdl 11117 -aWdhbg== 11118 -IFZvbA== 11119 -IG5u 11120 -LmdldElk 11121 -INC3 11122 -MTcx 11123 -IHNleHk= 11124 -IHNlZWtpbmc= 11125 -U2luZ2xl 11126 -LnRoaXM= 11127 -MTc5 11128 -IGtvbQ== 11129 -Ym91bmQ= 11130 -OyI= 11131 -IGZvbnRTaXpl 11132 -X2Rm 11133 -IGluanVyeQ== 11134 -KEg= 11135 -IGlzc3VlZA== 11136 -X0VORA== 11137 -OnNlbGY= 11138 -MDIw 11139 -IHBhdGNo 11140 -IGxlYXZlcw== 11141 -IGFkb3B0 11142 -RmlsZU5hbWU= 11143 -44CQ 11144 -IGV4ZWN1dGl2ZQ== 11145 -IEJ5dGU= 11146 -XSkpCg== 11147 -IG51 11148 -b3V0aW5n 11149 -Y2x1ZGluZw== 11150 -LVI= 11151 -Lm9wdGlvbnM= 11152 -IHN1YnN0YW50 11153 -YXZheA== 11154 -IEJVVA== 11155 -IHRlY2huaWNhbA== 11156 -IHR3aWNl 11157 -IG3DoXM= 11158 -IHVuaXZlcnM= 11159 -eXI= 11160 -IGRyYWc= 11161 -IERD 11162 -IHNlZA== 11163 -IGJvdA== 11164 -IFBhbA== 11165 -IEhhbGw= 11166 -Zm9yY2VtZW50 11167 -IGF1Y2g= 11168 -Lm1vZA== 11169 -bm90YXRpb24= 11170 -X2ZpbGVz 11171 -LmxpbmU= 11172 -X2ZsYWc= 11173 -W25hbWU= 11174 -IHJlc29sdXRpb24= 11175 -IGJvdHQ= 11176 -KCJb 11177 -ZW5kZQ== 11178 -KGFycg== 11179 -RnJlZQ== 11180 -KEAi 11181 -IERpc3RyaWN0 11182 -UEVD 11183 -Oi0= 11184 -UGlja2Vy 11185 -IEpv 11186 -ICAgICAK 11187 -IFJpdmVy 11188 -X3Jvd3M= 11189 -IGhlbHBmdWw= 11190 -IG1hc3NpdmU= 11191 -LS0tCg== 11192 -IG1lYXN1cmVz 11193 -MDA3 11194 -IFJ1bnRpbWU= 11195 -IHdvcnJ5 11196 -IFNwZWM= 11197 -CUQ= 11198 -44CR 11199 -ICl7Cg== 11200 -IHdvcnNl 11201 -KGZpbGVuYW1l 11202 -IGxheQ== 11203 -IG1hZ2lj 11204 -IFRoZWly 11205 -b3Vs 11206 -c3Ryb3k= 11207 -IFdoZXJl 11208 -Mjgw 11209 -IHN1ZGRlbg== 11210 -IGRlZmU= 11211 -IGJpbmRpbmc= 11212 -IGZsaWdodA== 11213 -IE9uSW5pdA== 11214 -IFdvbWVu 11215 -IFBvbGljeQ== 11216 -IGRydWdz 11217 -aXNoaW5n 11218 -KCcuLi8= 11219 -IE1lbA== 11220 -cGVhdA== 11221 -dG9y 11222 -IHByb3Bvc2Vk 11223 -IHN0YXRlZA== 11224 -X1JFUw== 11225 -IGVhc3Q= 11226 -MjEy 11227 -IENPTkRJVElPTg== 11228 -X2Rlc2M= 11229 -IHdpbm5pbmc= 11230 -Zm9saW8= 11231 -TWFwcGVy 11232 -IFBhbg== 11233 -IEFuZ2U= 11234 -LnNlcnZsZXQ= 11235 -IGNvcGllcw== 11236 -TE0= 11237 -IHZt 11238 -5Y0= 11239 -IGRpY3Rpb25hcnk= 11240 -U2Vn 11241 -MTc3 11242 -ZWxpbmVz 11243 -IFNlbmQ= 11244 -IGlyb24= 11245 -IEZvcnQ= 11246 -MTY2 11247 -LmRvbWFpbg== 11248 -IGRlYmF0ZQ== 11249 -Tm90TnVsbA== 11250 -ZXE= 11251 -YWNoZXI= 11252 -bGY= 11253 -CWZtdA== 11254 -IGxhd3k= 11255 -MTc4 11256 -xJ8= 11257 -IE1lbg== 11258 -IHRyaW0= 11259 -KE5VTEw= 11260 -ICEh 11261 -IHBhZA== 11262 -IGZvbGxvd3M= 11263 -Il1bIg== 11264 -cmVxdQ== 11265 -IEVw 11266 -LmdpdGh1Yg== 11267 -KGltZw== 11268 -ZXRv 11269 -KCdc 11270 -U2VydmljZXM= 11271 -dW1ibmFpbA== 11272 -X21haW4= 11273 -cGxldGVk 11274 -Zm9ydHVuYXRlbHk= 11275 -IHdpbmRvd3M= 11276 -IHBsYW5l 11277 -IENvbm5lY3Rpb24= 11278 -LmxvY2Fs 11279 -dWFyZA== 11280 -fVw= 11281 -PT0i 11282 -YW5kb24= 11283 -IFJveQ== 11284 -d2VzdA== 11285 -MTU4 11286 -aWdpbmFs 11287 -ZW1pZXM= 11288 -aXR6 11289 -Jyk6Cg== 11290 -IFBldGVy 11291 -IHRvdWdo 11292 -IHJlZHVjZWQ= 11293 -IGNhbGN1bGF0ZQ== 11294 -IHJhcGlk 11295 -Y3VzdG9tZXI= 11296 -IGVmZmljaWVudA== 11297 -IG1lZGl1bQ== 11298 -IGZlbGw= 11299 -LnJlZg== 11300 -IENhcw== 11301 -IGZlZWRiYWNr 11302 -U3BlZWQ= 11303 -KG91dHB1dA== 11304 -YWpl 11305 -IGNhdGVnb3JpZXM= 11306 -IGZlZQ== 11307 -fTs= 11308 -IGRlbGV0ZWQ= 11309 -cmVo 11310 -IHByb29m 11311 -RGVzYw== 11312 -QnVpbGQ= 11313 -IHNpZGVz 11314 -LkFycmF5TGlzdA== 11315 -LSU= 11316 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 11317 -2LE= 11318 -Lm1hdGNo 11319 -0LvQuA== 11320 -IGZlZWxz 11321 -IGFjaGlldmU= 11322 -IGNsaW0= 11323 -X09O 11324 -IENE 11325 -IHRlYWNoZXI= 11326 -X2N1cnJlbnQ= 11327 -Ym4= 11328 -X1BM 11329 -aXN0aW5n 11330 -RW5hYmxl 11331 -R0VO 11332 -IHR2 11333 -IHNvY2s= 11334 -IHBsYXlz 11335 -IGRpc2NvdW50 11336 -IEtF 11337 -IERlYnVn 11338 -Rm9yZQ== 11339 -IElyYXE= 11340 -IGFwcGVhcmFuY2U= 11341 -TW9u 11342 -IHN0eWxlZA== 11343 -IEh1bWFu 11344 -aW90 11345 -IEhpc3Rvcnk= 11346 -IHNhYw== 11347 -IENvbGxlY3Rpb24= 11348 -IHJlY29tbWVuZGVk 11349 -LlNlbGVjdGVk 11350 -IG9yZ2FuaXphdGlvbnM= 11351 -IGRpc2NvdmVyZWQ= 11352 -Y29ob2w= 11353 -YWRhcw== 11354 -IFRob21hcw== 11355 -TWF5 11356 -IGNvbnNlcnY= 11357 -IGRvbWlu 11358 -IEZvbGxvdw== 11359 -IFNlY3Rpb24= 11360 -IFRoYW5rcw== 11361 -VXNlcm5hbWU= 11362 -IHJlY2lwZQ== 11363 -IHdvbmRlcmZ1bA== 11364 -LnNsZWVw 11365 -X2lm 11366 -CQoJCg== 11367 -b3Jubw== 11368 -IHJ1 11369 -X3RhcmdldA== 11370 -LiIi 11371 -4KY= 11372 -RXZlbnRBcmdz 11373 -IGlucHV0cw== 11374 -IGZpZg== 11375 -IHZpc2lvbg== 11376 -Y3k= 11377 -IFNlcmllcw== 11378 -KSgoKA== 11379 -IHRyYWRpbmc= 11380 -IG1hcmtlcg== 11381 -QmVnaW4= 11382 -IHR5cGljYWxseQ== 11383 -IGNhdXNlcw== 11384 -ZHJvcGRvd24= 11385 -X0RFQlVH 11386 -MjYw 11387 -IGRldGVjdA== 11388 -Y291bnRyeQ== 11389 -ISIpOwo= 11390 -CVI= 11391 -YXBweQ== 11392 -IGNyZWY= 11393 -KCc8 11394 -Ij0+ 11395 -IExF 11396 -cmVhZGVy 11397 -IGFkbWluaXN0cg== 11398 -w7U= 11399 -dWNrZXQ= 11400 -IGZhc2hpb24= 11401 -LmNoYXI= 11402 -aXphcg== 11403 -IGRpc2FibGU= 11404 -IHN1Yw== 11405 -IExpdmU= 11406 -aXNzdWU= 11407 -IG1ldGFkYXRh 11408 -ZmxhZ3M= 11409 -IPCf 11410 -IGNvbW1pdHRlZA== 11411 -IHZh 11412 -IHJvdWdo 11413 -ICcnJwo= 11414 -IGhpZ2hsaWdodA== 11415 -X3ZhcnM= 11416 -Vk8= 11417 -IGVuY29kaW5n 11418 -LVo= 11419 -X3NpZ24= 11420 -JCgiIw== 11421 -IHJhaW4= 11422 -cmVhdGVzdA== 11423 -IEVORA== 11424 -U2VsZWN0aW9u 11425 -IGNhbmRpZGF0ZXM= 11426 -IHNhdg== 11427 -LkVtcHR5 11428 -IGRlY2lzaW9ucw== 11429 -IGNvbGxhYm9y 11430 -cmlkZ2U= 11431 -ZmVlZA== 11432 -cmVzc2lvbg== 11433 -IHBlcnNvbnM= 11434 -Vk0= 11435 -MDA4 11436 -ZWdh 11437 -X0JJVA== 11438 -QWNjb3JkaW5n 11439 -YWNrZWQ= 11440 -IGRvbGxhcnM= 11441 -X2xvc3M= 11442 -IENvc3Q= 11443 -fSIK 11444 -Tm90aWZpY2F0aW9u 11445 -IHByb3N0aXQ= 11446 -IGF1dGhvcml0eQ== 11447 -LnJlYw== 11448 -IHNwb2tlcw== 11449 -IFRvZGF5 11450 -aXN0YW50 11451 -IEhlYWQ= 11452 -4oCdLg== 11453 -ZXJ0YWlubWVudA== 11454 -Y2Vhbg== 11455 -Y3VsYXRl 11456 -IHZlbg== 11457 -SG93ZXZlcg== 11458 -X2Fycg== 11459 -IHRva2Vucw== 11460 -R3JhcGg= 11461 -IEp1ZA== 11462 -IFZpcmdpbg== 11463 -IFNlcmlhbA== 11464 -dW5uaW5n 11465 -TXV0YWJsZQ== 11466 -YWdlcnM= 11467 -LmNzdg== 11468 -IGRldmVsb3Bpbmc= 11469 -IGluc3RydWN0aW9ucw== 11470 -IHByb21pc2U= 11471 -IHJlcXVlc3RlZA== 11472 -X2VuY29kZQ== 11473 -LyI= 11474 -IEljb24= 11475 -dWlsdA== 11476 -LWRheQ== 11477 -IGludGVsbGlnZW5jZQ== 11478 -LklT 11479 -IE9ic2VydmFibGU= 11480 -IEhhcmQ= 11481 -Qm9vbA== 11482 -MjEx 11483 -aWRlbnRpYWw= 11484 -LkFuY2hvcg== 11485 -IHNlbGxpbmc= 11486 -Q0k= 11487 -QUdFUw== 11488 -dGxl 11489 -YnVy 11490 -VUZGRVI= 11491 -Ulk= 11492 -IGJpZ2dlcg== 11493 -IHJhdA== 11494 -IGZhbW91cw== 11495 -IHR5cGVuYW1l 11496 -IGV4cGxhaW5lZA== 11497 -fX0K 11498 -IG51Y2xlYXI= 11499 -LU4= 11500 -IGNyaXNpcw== 11501 -IEVudGVy 11502 -IGFuc3dlcnM= 11503 -LyR7 11504 -L3Bs 11505 -IHNlcXU= 11506 -X25leHQ= 11507 -bWFzaw== 11508 -IHN0YW5kaW5n 11509 -IHBsZW50eQ== 11510 -IENyb3Nz 11511 -CXJldA== 11512 -ZHJv 11513 -IENhc3Q= 11514 -MTY3 11515 -PXRydWU= 11516 -IENocmlz 11517 -aWNpbw== 11518 -IE1pa2U= 11519 -RGVjaW1hbA== 11520 -YWRkQ29tcG9uZW50 11521 -TGVu 11522 -IGNvY2s= 11523 -ICN7 11524 -VVJO 11525 -PHRy 11526 -IGF1dGhvcml0aWVz 11527 -UmVzb3VyY2Vz 11528 -LUg= 11529 -Qm90dG9t 11530 -MDEy 11531 -X3F1 11532 -cHV0ZXI= 11533 -ZXN0ZXJkYXk= 11534 -RGlzcGF0Y2g= 11535 -c2luY2U= 11536 -IGZhbWlsaWFy 11537 -LGk= 11538 -VkM= 11539 -IG1lbnQ= 11540 -LEM= 11541 -IGZyZWVkb20= 11542 -IHJvdXRlcw== 11543 -IEJ1eQ== 11544 -IGNvbW1hbmRz 11545 -IG1lc2g= 11546 -L0M= 11547 -IFNldHRpbmdz 11548 -LXN0eWxl 11549 -IHdpdG5lc3M= 11550 -IGNsZQ== 11551 -IHVuaW9u 11552 -ZWZhdWx0 11553 -YXJldA== 11554 -IHRob3VnaHRz 11555 -IC0tLS0= 11556 -X3Byb2Nlc3M= 11557 -X3Vz 11558 -aW5nbHk= 11559 -VUVT 11560 -VG91Y2g= 11561 -INC8 11562 -X29wZW4= 11563 -IFZlYw== 11564 -IHJld2FyZA== 11565 -LkNsaWNr 11566 -Lzo= 11567 -IG5pZQ== 11568 -Q2hhbmdlcw== 11569 -TW9udGg= 11570 -77yf 11571 -IGV4ZWN1dGlvbg== 11572 -IGJlYWNo 11573 -KEludGVnZXI= 11574 -CWE= 11575 -Lyc= 11576 -LkZvbnRTdHlsZQ== 11577 -IGFib3J0 11578 -IFNpbmdsZQ== 11579 -KGlzc2V0 11580 -IGRw 11581 -IH19PC8= 11582 -IE1h 11583 -MjE0 11584 -LlJvd3M= 11585 -IFBldA== 11586 -JSk= 11587 -cmFuZA== 11588 -6YA= 11589 -UnVsZQ== 11590 -IGhlbA== 11591 -MDIx 11592 -UklURQ== 11593 -IHF1aWV0 11594 -IHJhdGlv 11595 -IENPTkRJVElPTlM= 11596 -b3NvcGg= 11597 -IElM 11598 -IGFkdmVudA== 11599 -Y2Fw 11600 -Ozwv 11601 -IFVTQg== 11602 -RHJpdmVy 11603 -IG91cnM= 11604 -IEpvaG5zb24= 11605 -Lks= 11606 -X2RlbGV0ZQ== 11607 -LnE= 11608 -CXN0cg== 11609 -L2NvbW1vbg== 11610 -CXN0cmluZw== 11611 -IFBERg== 11612 -YWN0cw== 11613 -LkFjdGlvbg== 11614 -IFF1ZXJ5 11615 -LnJlc3BvbnNl 11616 -IEdpcmw= 11617 -IHByb2Nlc3Nlcw== 11618 -PEludGVnZXI= 11619 -aW1v 11620 -IGFkZHM= 11621 -IGVudGlyZWx5 11622 -IHdhc2g= 11623 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 11624 -IGFuaW1hdGVk 11625 -IHByb2ZpdA== 11626 -ZW5jaW5n 11627 -L1M= 11628 -IFN5bQ== 11629 -IG1hbnVhbA== 11630 -RG93bmxvYWQ= 11631 -ICghJA== 11632 -IG1vdGlvbg== 11633 -d2VicGFjaw== 11634 -LWJvdHRvbQ== 11635 -IGdyYXR1aXQ= 11636 -UEc= 11637 -KDos 11638 -IGVyYQ== 11639 -IGhv 11640 -IEppbQ== 11641 -cXVpcg== 11642 -IEJBU0lT 11643 -w6Fu 11644 -REVS 11645 -IGV4cGVuc2l2ZQ== 11646 -X2Nv 11647 -Qm91bmRz 11648 -V2VsbA== 11649 -IERlbW9jcmF0aWM= 11650 -IOKGkg== 11651 -LlJlbQ== 11652 -X1NZ 11653 -bmFtZXM= 11654 -IFZp 11655 -IGlzaW5zdGFuY2U= 11656 -XCI+ 11657 -ICo9 11658 -IFBT 11659 -IGRhbmdlcm91cw== 11660 -W3A= 11661 -T01F 11662 -T3RoZXI= 11663 -IFN0cmluZ0J1aWxkZXI= 11664 -UG9pbnRz 11665 -aGVhZGluZw== 11666 -IGN1cnJlbmN5 11667 -IHBlcmNlbnRhZ2U= 11668 -X0FQSQ== 11669 -IGNsYXNzaWM= 11670 -dGhlYWQ= 11671 -IE1P 11672 -RkU= 11673 -SWR4 11674 -YXdhaXQ= 11675 -IMOo 11676 -IGFjY2lkZW50 11677 -IHZhcmlhbnQ= 11678 -IG15c3Q= 11679 -IExhbmQ= 11680 -IEJyZQ== 11681 -IGhhcm0= 11682 -IEFjYw== 11683 -IGNoYXJnZWQ= 11684 -aW9uZXM= 11685 -VmlzaWJpbGl0eQ== 11686 -YXJyeQ== 11687 -IExhbmd1YWdl 11688 -IHdhbGtpbmc= 11689 -Ii4KCg== 11690 -aWZlcg== 11691 -IGxlYWRlcnNoaXA= 11692 -LkZyb20= 11693 -eW5hbQ== 11694 -IHRpbWVzdGFtcA== 11695 -aXB0 11696 -IEhhcw== 11697 -UkVGRVI= 11698 -IEl0cw== 11699 -IGxpc3RlbmVy 11700 -VVRF 11701 -MjEz 11702 -X2Rlc2NyaXB0aW9u 11703 -IGV4cGVyaWVuY2Vz 11704 -IGNyZWF0ZXM= 11705 -UlM= 11706 -Y2FydA== 11707 -YmxhY2s= 11708 -IGNob2ljZXM= 11709 -d2Fy 11710 -NzUw 11711 -ICcnJw== 11712 -IG9yZGVyZWQ= 11713 -IGV2ZW5pbmc= 11714 -IHBpbA== 11715 -IHR1bg== 11716 -IEJhZA== 11717 -KGFwcA== 11718 -cmFuZG9t 11719 -IGV4cGxpY2l0 11720 -IGFycml2ZWQ= 11721 -IGZseQ== 11722 -IGVjb25vbQ== 11723 -LW1haWw= 11724 -IGxpc3Rz 11725 -IGFyY2hpdGVjdA== 11726 -MjM0 11727 -IFBheQ== 11728 -IGRz 11729 -IFNvbA== 11730 -IHZlaGljbGVz 11731 -SHo= 11732 -LWNvbQ== 11733 -IGtpbmc= 11734 -X2VxdWFs 11735 -IEhlbHA= 11736 -IGFidXNl 11737 -NDgw 11738 -MTY5 11739 -LS07Cg== 11740 -IGV4dHI= 11741 -IGNoZW1pY2Fs 11742 -5L8= 11743 -IG9yaWVudA== 11744 -IGJyZWF0aA== 11745 -IFNwYWNl 11746 -KGVsZW1lbnQ= 11747 -d2FpdA== 11748 -REVE 11749 -aWdtYQ== 11750 -IGVudHI= 11751 -IHNvYg== 11752 -LW5hbWU= 11753 -IGFmZmVjdGVk 11754 -aWth 11755 -IGNvYWw= 11756 -X3dvcms= 11757 -IGh1bmRyZWRz 11758 -IHBvbGl0aWNz 11759 -c3ViamVjdA== 11760 -IGNvbnN1bWVy 11761 -QU5HRQ== 11762 -IHJlcGVhdGVk 11763 -U2VuZA== 11764 -ICNb 11765 -IHByb3RvY29s 11766 -IGxlYWRz 11767 -dXNldW0= 11768 -RXZlcnk= 11769 -ODA4 11770 -MTc0 11771 -SW1wb3J0 11772 -KGNvdW50 11773 -IGNoYWxsZW5nZXM= 11774 -IG5vdmVs 11775 -IGRlcGFydA== 11776 -Yml0cw== 11777 -LkN1cnJlbnQ= 11778 -IGAkew== 11779 -b3Rpbmc= 11780 -KFw= 11781 -IGNyZWF0aXZl 11782 -IGJ1ZmY= 11783 -IGludHJvZHVjZWQ= 11784 -dXNpYw== 11785 -bW9kdWxlcw== 11786 -QXJl 11787 -LWRvYw== 11788 -bGFuZ3VhZ2U= 11789 -X2NhY2hl 11790 -IHRvZA== 11791 -Pz48Lw== 11792 -b21ldGhpbmc= 11793 -IGh1bg== 11794 -5bo= 11795 -YXRlcnM= 11796 -SW50ZW50 11797 -IGltcGxlbWVudGVk 11798 -IENhc2U= 11799 -Q2hpbGRyZW4= 11800 -IG5vdGlmaWNhdGlvbg== 11801 -UmVuZGVyZXI= 11802 -V3JhcHBlcg== 11803 -T2JqZWN0cw== 11804 -dGw= 11805 -LkNvbnRhaW5z 11806 -UGx1Z2lu 11807 -LnJvdw== 11808 -IGZvcmc= 11809 -IHBlcm1pdA== 11810 -IHRhcmdldHM= 11811 -IElG 11812 -IHRpcA== 11813 -c2V4 11814 -IHN1cHBvcnRz 11815 -IGZvbGQ= 11816 -cGhvdG8= 11817 -fSwNCg== 11818 -IGdvb2dsZQ== 11819 -JCgnIw== 11820 -IHNoYXJpbmc= 11821 -IGdvb2Rz 11822 -dnM= 11823 -IERhbg== 11824 -UmF0ZQ== 11825 -IE1hcnRpbg== 11826 -IG1hbm5lcg== 11827 -bGll 11828 -LlRoZQ== 11829 -SW50ZXJuYWw= 11830 -IENPTlRS 11831 -TW9jaw== 11832 -UklHSFQ= 11833 -ICd7 11834 -IGNvbnRyb2xz 11835 -TWF0 11836 -IG1hbmQ= 11837 -IGV4dGVuZGVk 11838 -T2s= 11839 -IGVtYmVk 11840 -IHBsYW5ldA== 11841 -IE5vbg== 11842 -LWNo 11843 -KSIs 11844 -ZXBhcg== 11845 -IGJlbGlldmVk 11846 -IEVudmlyb25tZW50 11847 -IEZyaWVuZA== 11848 -LXJlcw== 11849 -IGhhbmRsaW5n 11850 -bmlj 11851 -LWxldmVs 11852 -c2NyaQ== 11853 -WG1s 11854 -QkU= 11855 -dW5nZW4= 11856 -IGFsdGVy 11857 -W2lkeA== 11858 -UG9w 11859 -Y2Ft 11860 -ICgoKA== 11861 -IHNoaXBwaW5n 11862 -IGJhdHRlcnk= 11863 -aWRkbGV3YXJl 11864 -TUM= 11865 -IGltcGw= 11866 -b3RhdGlvbg== 11867 -IExhYg== 11868 -PGZvcm0= 11869 -CW5hbWU= 11870 -IEdhbWVz 11871 -cmF5 11872 -RXh0cmE= 11873 -VHdv 11874 -KHBsYXllcg== 11875 -IExlcw== 11876 -wrA= 11877 -IGNoYXJzZXQ= 11878 -IGpvdXJuZXk= 11879 -ZXRpbmc= 11880 -5pg= 11881 -4pQ= 11882 -55So 11883 -IGRpbg== 11884 -IHBlcm1hbg== 11885 -IHNvbHZl 11886 -IGxhdW5jaGVk 11887 -IG5pbmU= 11888 -IHNlbmRpbmc= 11889 -IHRlbGxpbmc= 11890 -LnBhc3N3b3Jk 11891 -IE1hdHJpeA== 11892 -ZXJpYw== 11893 -IGdyYWI= 11894 -LnU= 11895 -IExpYnJhcnk= 11896 -IGRlYnQ= 11897 -SU5L 11898 -LmZpbmRWaWV3QnlJZA== 11899 -IGZyZXF1ZW5jeQ== 11900 -LmFk 11901 -X1RFU1Q= 11902 -IG5lZ290 11903 -IEFmcmljYW4= 11904 -c2VuZGVy 11905 -xaE= 11906 -R2xvYmFs 11907 -MTcz 11908 -IGV4cGVydHM= 11909 -KyspDQo= 11910 -IGRlcGVuZGluZw== 11911 -Z3JheQ== 11912 -IGp1ZGdl 11913 -IHNlbnRlbmNl 11914 -bG9zdXJl 11915 -QWM= 11916 -IHRyYWNl 11917 -RWRnZQ== 11918 -IGZyaWVuZGx5 11919 -IGNvbmNlcm5lZA== 11920 -YmxvZw== 11921 -IGNsYWltZWQ= 11922 -fSc= 11923 -aW50ZWdlcg== 11924 -X3RyZWU= 11925 -CWNvbnRpbnVl 11926 -eGk= 11927 -IGFjY2VwdGVk 11928 -X29uZQ== 11929 -IEVkdWNhdGlvbg== 11930 -dWJsaXNoZWQ= 11931 -Z29u 11932 -YXBwb2ludA== 11933 -b3V0cw== 11934 -IG1pbmluZw== 11935 -IHNvbmdz 11936 -IGhlcnNlbGY= 11937 -IGdyYW50ZWQ= 11938 -IHBhc3Npb24= 11939 -IExha2U= 11940 -IGxvYW4= 11941 -dWVudA== 11942 -Y2hhbnQ= 11943 -IGRldGFpbGVk 11944 -ZXhjZXB0 11945 -X2NtZA== 11946 -IEhF 11947 -UmVsYXRlZA== 11948 -enQ= 11949 -J30sCg== 11950 -IHNwZWNpZmljYWxseQ== 11951 -U3RhdGlj 11952 -IGNhcnJpZWQ= 11953 -QU5T 11954 -XCI6 11955 -Q3JlYXRlZA== 11956 -IGN1bA== 11957 -XS0= 11958 -X2FwaQ== 11959 -RlA= 11960 -IHNpdHRpbmc= 11961 -ICIiKQ== 11962 -CWdvdG8= 11963 -IEVxdQ== 11964 -IGFzc2F1bHQ= 11965 -a2lucw== 11966 -YW5jZXI= 11967 -b2dlbg== 11968 -IHZvdGVycw== 11969 -IFByb3Q= 11970 -RGVzY3JpcHRvcg== 11971 -44O8 11972 -LkFzc2VydA== 11973 -YnNpdGVz 11974 -b3N0ZXI= 11975 -LW1lbnU= 11976 -IGFybXM= 11977 -LkNsaWVudA== 11978 -LmJhY2tncm91bmQ= 11979 -YXZpdHk= 11980 -IHZ1bA== 11981 -X01BU0s= 11982 -IGhvdXNpbmc= 11983 -IGJlYXI= 11984 -X2l0ZXI= 11985 -cGlyZWQ= 11986 -IG1hcmtldHM= 11987 -IFN0dWRlbnQ= 11988 -IHRpY2tldA== 11989 -IG1pbGxpb25z 11990 -ZmxhdGVy 11991 -KT0= 11992 -IHJlY292ZXI= 11993 -IEZvcmNl 11994 -IEJvdGg= 11995 -IHZpY3RpbQ== 11996 -IERpc2M= 11997 -cmVwb3J0 11998 -IGZvdXJ0aA== 11999 -IEFzc2VtYmx5 12000 -L3VzZXI= 12001 -TnVsbE9y 12002 -dGV4dGFyZWE= 12003 -IGF0aA== 12004 -IChb 12005 -IGNoYW5uZWxz 12006 -IEp1c3RpY2U= 12007 -Y2hvaWNl 12008 -TE9CQUw= 12009 -ZXhlYw== 12010 -ZW1hbGU= 12011 -IGVsZW0= 12012 -X2xl 12013 -IHJlc3BvbnNpYmlsaXR5 12014 -IFR3 12015 -SUNBVElPTg== 12016 -IGVsc2VpZg== 12017 -IGZv 12018 -YXN0cw== 12019 -IHRyZWF0ZWQ= 12020 -c2Vu 12021 -IFZpY3Q= 12022 -c3VtZXI= 12023 -X0JBU0U= 12024 -IGFzdA== 12025 -Pnt7 12026 -IFJlc291cmNl 12027 -IFN0YW5kYXJk 12028 -IFByZW0= 12029 -dXBkYXRlZA== 12030 -aXZhbGVudA== 12031 -IGFzc2V0cw== 12032 -X3RlbXA= 12033 -IGludGVyZXN0cw== 12034 -IGhhcmR3YXJl 12035 -IFJvbQ== 12036 -IFNoYXJl 12037 -ICcnCg== 12038 -ICos 12039 -IFRha2U= 12040 -IEltYWdlcw== 12041 -X0NIRUNL 12042 -KHR5cGVvZg== 12043 -IEp1bg== 12044 -XDxe 12045 -IGxpcXU= 12046 -IHdvcnN0 12047 -eW1ib2xz 12048 -CQkJICAg 12049 -IGRyaXZlcnM= 12050 -IERvY3VtZW50 12051 -ZW5v 12052 -IFRlY2hub2xvZ3k= 12053 -IGFwcHJvdmVk 12054 -dW1wcw== 12055 -IHNub3c= 12056 -Zm9ybWFuY2U= 12057 -X0FTU0VSVA== 12058 -dWl0cw== 12059 -MjA3 12060 -2YY= 12061 -IGRpZmZlcmVuY2Vz 12062 -LlZpc2libGU= 12063 -CQkJDQo= 12064 -IFBz 12065 -X2ZldGNo 12066 -IHRvZG8= 12067 -LicsCg== 12068 -IHNlbA== 12069 -dXJlcnM= 12070 -aW52YWxpZA== 12071 -IHR3ZWV0 12072 -VkVM 12073 -IHJlc2VhcmNoZXJz 12074 -IHNwcmludGY= 12075 -IFJP 12076 -IHBlbA== 12077 -LlRyYW5z 12078 -IGlsbGVnYWw= 12079 -ZGlhbG9n 12080 -c21hcnR5 12081 -bGc= 12082 -X01JTg== 12083 -IGhlcm8= 12084 -ZmluYWw= 12085 -IHBw 12086 -Lkxl 12087 -IGNp 12088 -CVJU 12089 -IHN1Z2dlc3RlZA== 12090 -cGRm 12091 -YWNoaW5n 12092 -IFJv 12093 -IFByb3BlcnRpZXM= 12094 -IFNp 12095 -IGJ1eWluZw== 12096 -IG11 12097 -IGxhbmRz 12098 -aWZpZXJz 12099 -IEZJTEU= 12100 -Uk9VUA== 12101 -IGhvbGRlcg== 12102 -IFNvbg== 12103 -IHN5bXB0 12104 -LnJvdXRl 12105 -KT8= 12106 -IGFyZ2M= 12107 -IGZvcnQ= 12108 -IGNhc2lubw== 12109 -X2NhdGVnb3J5 12110 -IGZvcnVt 12111 -MjE1 12112 -cHJlZml4 12113 -YXB0dXJl 12114 -VHViZQ== 12115 -ZW1z 12116 -aW1pemU= 12117 -IG51ZQ== 12118 -YXVz 12119 -Y291cnNl 12120 -QVRPUg== 12121 -KCkpLA== 12122 -QWR2ZXJ0aXM= 12123 -SU5HUw== 12124 -IGFja25vdw== 12125 -IEtvcmVh 12126 -cGxpbmc= 12127 -IHdvcmtlcg== 12128 -UExJRUQ= 12129 -aGFs 12130 -IFJpY2hhcmQ= 12131 -RWxlbWVudHM= 12132 -CQkJIA== 12133 -c3Rhcg== 12134 -IHJlbGF0aW9uc2hpcHM= 12135 -IGNoZWFw 12136 -QUNI 12137 -IFhNTA== 12138 -LCY= 12139 -IExvdWlz 12140 -IHJpZGU= 12141 -X0ZBSUw= 12142 -IGNodW5r 12143 -W3M= 12144 -X09VVA== 12145 -IGNob3Nlbg== 12146 -X1s= 12147 -Lyg= 12148 -IEplZmY= 12149 -X3Ns 12150 -cHJpdg== 12151 -IENhbmFkaWFu 12152 -IHVuYWJsZQ== 12153 -X0ZMQUc= 12154 -IG5vcw== 12155 -aGlnaA== 12156 -IGxpZnQ= 12157 -ZnVu 12158 -KCl7 12159 -ZWxseQ== 12160 -eWNsZXJWaWV3 12161 -X2Fz 12162 -X0xJU1Q= 12163 -IHJhZGk= 12164 -LmdldFZhbHVl 12165 -MzA0 12166 -IEFuZ2VsZXM= 12167 -IFNwYW4= 12168 -X2luc3RhbmNl 12169 -aXRvcnM= 12170 -MjA4 12171 -IG1pZ3JhdGlvbg== 12172 -QUs= 12173 -T2g= 12174 -wq4= 12175 -LnNlbGVjdGVk 12176 -IEdU 12177 -IGFkdmFuY2U= 12178 -IFN0eWxl 12179 -LkRhdGFHcmlkVmlldw== 12180 -ZWN0aW9u 12181 -0Y4= 12182 -cGlv 12183 -cm9n 12184 -IHNob3BwaW5n 12185 -IFJlY3Q= 12186 -SWxsdW1pbmF0ZQ== 12187 -T1U= 12188 -CWFycmF5 12189 -IHN1YnN0YW50aWFs 12190 -IHByZWdu 12191 -IHByb21vdGU= 12192 -SUVX 12193 -LkxheW91dA== 12194 -IHNpZ25z 12195 -Ly4= 12196 -IGxldHRlcnM= 12197 -Qm9hcmQ= 12198 -Y3RybA== 12199 -Ilw= 12200 -IEpvbmVz 12201 -IHZlcnRleA== 12202 -IGph 12203 -IGFmZmlsaQ== 12204 -IHdlYWx0aA== 12205 -CWRlZmF1bHQ= 12206 -IHNpZ25pZmljYW50bHk= 12207 -IGVj 12208 -IHhz 12209 -YWN0dWFs 12210 -LnBlcg== 12211 -X3N0ZXA= 12212 -YW52YXM= 12213 -bWFj 12214 -IHRyYW5zbA== 12215 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 12216 -SXRlcmF0b3I= 12217 -IG9jaA== 12218 -YWdub3N0aWM= 12219 -IER1cmluZw== 12220 -IERFRkFVTFQ= 12221 -IHRpbGw= 12222 -IHNpZ25hdHVyZQ== 12223 -IGJpcmQ= 12224 -IE9s 12225 -MzEw 12226 -IEly 12227 -SFM= 12228 -YXZhdGFy 12229 -RVNTQUdF 12230 -IGVsZXY= 12231 -IG10 12232 -IE5hdg== 12233 -IHJlbGF4 12234 -IHBsYXRl 12235 -SVRFTQ== 12236 -KGRhdGU= 12237 -Lm5vdA== 12238 -IGdyYWRl 12239 -IH0pLAo= 12240 -PyIKCg== 12241 -aWVuY2Vz 12242 -SGlnaA== 12243 -IERJUw== 12244 -MjMx 12245 -ZGlzYWJsZWQ= 12246 -UVVJ 12247 -IG5vaXNl 12248 -YXV4 12249 -IFVQ 12250 -ODg4 12251 -b3Nh 12252 -IHZvYw== 12253 -ICkp 12254 -b2NvbQ== 12255 -X09GRg== 12256 -IERi 12257 -TG9jaw== 12258 -LmVjbGlwc2U= 12259 -LGQ= 12260 -IERyYXc= 12261 -ICIo 12262 -IHZpc2l0ZWQ= 12263 -IOKI 12264 -IHN1Y2NlZWQ= 12265 -IGltcG9zc2libGU= 12266 -YWlyZQ== 12267 -IFR1cm4= 12268 -IGRpc2g= 12269 -Rkc= 12270 -IHNlbnNvcg== 12271 -QU5O 12272 -YWJh 12273 -IHN1cmc= 12274 -XSk7DQo= 12275 -IGZw 12276 -X2Fu 12277 -LUo= 12278 -LUc= 12279 -IEpvYg== 12280 -Q29udmVydA== 12281 -IEtFWQ== 12282 -IGF1dGhvcnM= 12283 -X3NlcnZlcg== 12284 -XHI= 12285 -IC0qLQ== 12286 -ZmxleA== 12287 -IHNvYw== 12288 -UmV0 12289 -IHNhbHQ= 12290 -IOKApgoK 12291 -IENsZWFy 12292 -KHBhZ2U= 12293 -LWRhbmdlcg== 12294 -IHJvb21z 12295 -Y29udg== 12296 -I3s= 12297 -Lm9w 12298 -IEFyZWE= 12299 -X1ND 12300 -aGVu 12301 -IGJlZ2lucw== 12302 -LXk= 12303 -IGV4Y2l0ZWQ= 12304 -IGlnbm9yZWQ= 12305 -IGJvbnVz 12306 -c3R1ZGVudA== 12307 -IE1lbWJlcg== 12308 -IHJlbGF0aXZlbHk= 12309 -IExvdw== 12310 -IFByb2R1 12311 -YXRld2F5 12312 -cG9zdXJl 12313 -IHRoaWNr 12314 -YW5pZWw= 12315 -KHZpZXc= 12316 -IENydXNo 12317 -RXh0ZW5zaW9u 12318 -SWw= 12319 -ZWVk 12320 -TE9D 12321 -Lmlt 12322 -Lkl0ZW1z 12323 -IGNvbmZsaWN0 12324 -LnByZXZlbnQ= 12325 -MjUy 12326 -IG9uQ3JlYXRl 12327 -dXY= 12328 -aXNlcg== 12329 -IHdhdmU= 12330 -TWFy 12331 -IENvbW11bml0eQ== 12332 -aWNoZQ== 12333 -IE5vdGhpbmc= 12334 -W20= 12335 -IExlZQ== 12336 -cmllbmRz 12337 -MjMy 12338 -w6hyZQ== 12339 -ISEh 12340 -YW56 12341 -LnJlc3VsdA== 12342 -IFNL 12343 -X1BBUkFN 12344 -IGRlbW9jcg== 12345 -QmFja0NvbG9y 12346 -LmV4aXN0cw== 12347 -Ikl0 12348 -KG9wdGlvbnM= 12349 -cmF6eQ== 12350 -YXNlcg== 12351 -XERhdGFiYXNl 12352 -YWxlbmRhcg== 12353 -X2Fzcw== 12354 -O30K 12355 -dmVydGV4 12356 -aW5lY3JhZnQ= 12357 -V2FybmluZw== 12358 -YXJnbw== 12359 -IGFjdG9y 12360 -IEluc3RlYWQ= 12361 -IFVzaW5n 12362 -U2VsZg== 12363 -QGludGVyZmFjZQ== 12364 -IHNwZWFraW5n 12365 -IFBhcmlz 12366 -IExJQ0VOU0U= 12367 -Lm5vZGU= 12368 -IEZvb2Q= 12369 -RUlG 12370 -IEJp 12371 -LlN0YXJ0 12372 -IElC 12373 -IHVuaXZlcnNpdHk= 12374 -MjU0 12375 -IEhlYWRlcg== 12376 -LnByb2R1Y3Q= 12377 -NDA5 12378 -Q29weQ== 12379 -ZXRj 12380 -cmljYWw= 12381 -ID4+Pg== 12382 -Ym9va3M= 12383 -IGFsZ29yaXRobQ== 12384 -ICdfXw== 12385 -KGphdmF4 12386 -IG51bWVyb3Vz 12387 -U2hhcmU= 12388 -SGF2ZQ== 12389 -IHJlY3J1 12390 -IHByb3Zl 12391 -LnN1YnN0cmluZw== 12392 -aGVhbHRo 12393 -0LXQuw== 12394 -IGRlY2ltYWw= 12395 -IGNvbW1pc3Npb24= 12396 -c2NyaXB0aW9u 12397 -eEM= 12398 -IHN1bW1hcnk= 12399 -YXR0ZWQ= 12400 -IGNsb3Nlcg== 12401 -ZmluaXNoZWQ= 12402 -KCkpewo= 12403 -IFdvb2Q= 12404 -MzAx 12405 -X2ZpZWxkcw== 12406 -a3U= 12407 -X2l0ZW1z 12408 -RmxhZw== 12409 -IGNvbmZpZGVuY2U= 12410 -IEZlZGVyYWw= 12411 -ZHV4 12412 -IGNvbXBhdA== 12413 -IHZlcnRpY2Fs 12414 -0Lk= 12415 -w6hz 12416 -OyI+Cg== 12417 -X21hbmFnZXI= 12418 -KCkpKQo= 12419 -SURF 12420 -OiIs 12421 -MjM1 12422 -X18K 12423 -IFdheQ== 12424 -MjIx 12425 -0Yg= 12426 -VGVtcA== 12427 -IFNUUg== 12428 -cml0dGVu 12429 -U3luYw== 12430 -IEFW 12431 -IENFTw== 12432 -IEd1aWQ= 12433 -IGVudmlyb25tZW50YWw= 12434 -IGNvcnJlc3BvbmRpbmc= 12435 -CWNvbnNvbGU= 12436 -IGp1c3RpY2U= 12437 -IEpT 12438 -IGxpdmVk 12439 -Z2Fy 12440 -IEdyYXBo 12441 -IFN0YXQ= 12442 -IGlQaG9uZQ== 12443 -LmFs 12444 -IEhE 12445 -IG9jY3Vy 12446 -IHRocmVzaG9sZA== 12447 -NTA5 12448 -IG9uY2xpY2s= 12449 -UkVH 12450 -LkdyYXBoaWNzVW5pdA== 12451 -TWV0YQ== 12452 -xb4= 12453 -IGN1bQ== 12454 -LmdudQ== 12455 -w6s= 12456 -IG9idGFpbmVk 12457 -IGNvbXBsYWludA== 12458 -IGVhdGluZw== 12459 -IHRhcg== 12460 -X3Rhc2s= 12461 -IG9wdHM= 12462 -MjE2 12463 -KHRv 12464 -UGFzcw== 12465 -IHBsYXN0aWM= 12466 -dGlsaXR5 12467 -IFdpbg== 12468 -LnByZXZlbnREZWZhdWx0 12469 -cGlsZQ== 12470 -IEdhcg== 12471 -IHF1YW50aXR5 12472 -X2xhc3Q= 12473 -IGdyZWF0ZXN0 12474 -RGFv 12475 -X0RJUw== 12476 -IFVzZWQ= 12477 -IEhQ 12478 -cml0aW5n 12479 -U0lPTg== 12480 -Ymx1ZQ== 12481 -ZG9tYWlu 12482 -IHNjb3Jlcw== 12483 -Tm9ybWFs 12484 -X2FkbWlu 12485 -IEFTU0VSVA== 12486 -VGhlbg== 12487 -Kioq 12488 -ZGlzdA== 12489 -bG9u 12490 -IGhhdGU= 12491 -c2hhbA== 12492 -SW1hZ2VWaWV3 12493 -ZGF0YWJhc2U= 12494 -IHBhbmQ= 12495 -IGxvZ2lj 12496 -PWZhbHNl 12497 -Ymc= 12498 -IENvbmZpZ3VyYXRpb24= 12499 -IG51cg== 12500 -T0c= 12501 -IG1hcnJpZWQ= 12502 -Ois= 12503 -IGRyb3BwZWQ= 12504 -MDQw 12505 -IHJlZ2lzdHJhdGlvbg== 12506 -0L7QvA== 12507 -dWx0aXBsZQ== 12508 -aXplcnM= 12509 -c2hhcGU= 12510 -LmNvcHk= 12511 -IHdlYXJpbmc= 12512 -IENhdGg= 12513 -IGRlZGljYXRlZA== 12514 -IC4uLgo= 12515 -IGFkdm9j 12516 -IEZhbWlseQ== 12517 -IHN0YXRlbWVudHM= 12518 -ZW1hdGlj 12519 -YW1waW9uc2hpcA== 12520 -IG1vdGl2 12521 -IEhhdmU= 12522 -IGJsb3c= 12523 -Sm9i 12524 -Y2VydA== 12525 -X3ZlY3Rvcg== 12526 -aW5zdGFsbA== 12527 -IENPUFk= 12528 -ZW1iZWQ= 12529 -RElS 12530 -IFNwcmluZw== 12531 -IGV4aGli 12532 -MjIz 12533 -Y2Ru 12534 -IENvbW1lbnQ= 12535 -IE9wdGlvbmFs 12536 -LnBsYXllcg== 12537 -IERhcms= 12538 -KHBvcw== 12539 -IFNob3VsZA== 12540 -IGNlbnRyZQ== 12541 -IEd1YXJk 12542 -w7N3 12543 -IHRyb3VibGU= 12544 -RU5FUg== 12545 -KHVuc2lnbmVk 12546 -X3NlcnZpY2U= 12547 -IG5z 12548 -dWxpbmc= 12549 -IE1leGljbw== 12550 -IE5Z 12551 -bXlzcWw= 12552 -IGxpYw== 12553 -5Zw= 12554 -TXI= 12555 -LWZs 12556 -IEN1c3RvbWVy 12557 -aWRp 12558 -ID8+Cgo= 12559 -cmlibGU= 12560 -INC/0YA= 12561 -IHNpemVz 12562 -X1NUUklORw== 12563 -dmFsaWRhdGlvbg== 12564 -IEpvbg== 12565 -KEh0dHA= 12566 -YWRkQ2xhc3M= 12567 -Tm9kZXM= 12568 -IGZyYWdtZW50 12569 -IHNwb2tl 12570 -IHdhc3Rl 12571 -Sm9pbg== 12572 -IGlsbHVzdHI= 12573 -ZWxp 12574 -Y2llbnQ= 12575 -IGFpZA== 12576 -IHByb3NlYw== 12577 -Jyl7Cg== 12578 -IHBhc3Npbmc= 12579 -IGZhY2Vz 12580 -U2hhcGU= 12581 -X1o= 12582 -aXRp 12583 -IGFsbGU= 12584 -IHJvYm90 12585 -ICAgICAgIAo= 12586 -IFNwZQ== 12587 -IHJlY2VpdmluZw== 12588 -IERldGFpbHM= 12589 -ICIp 12590 -bWc= 12591 -X1JFRg== 12592 -IGNvbXBhcmlzb24= 12593 -Kiw= 12594 -IEZvdW5k 12595 -X3Nlc3Npb24= 12596 -KFU= 12597 -L0Y= 12598 -IHh4eA== 12599 -TmV0d29yaw== 12600 -ZGVycw== 12601 -IGNhcHR1cmU= 12602 -IGNvcnJl 12603 -IEx0ZA== 12604 -IEFkdg== 12605 -W0A= 12606 -IGNsaXA= 12607 -TWlsbA== 12608 -IFByb2ZpbGU= 12609 -IGVuZGlm 12610 -IG9ibGln 12611 -ZGVzY3JpYmU= 12612 -LmVsZW1lbnQ= 12613 -cml0ZXJpb24= 12614 -TEQ= 12615 -ZXJlZA== 12616 -IGZhdm91cg== 12617 -c2NvcmU= 12618 -IEZpbHRlcg== 12619 -YXR0cmlidXRlcw== 12620 -IGNoZWNrcw== 12621 -SW5mbGF0ZXI= 12622 -IFBsdXM= 12623 -IHNjaWVudGlmaWM= 12624 -IHByaXZhY3k= 12625 -SGVhZA== 12626 -IGZlYXQ= 12627 -IGRlZ3JlZXM= 12628 -IFBhbGU= 12629 -OyI+ 12630 -IGZpbG1z 12631 -IEF1ZGlv 12632 -IFRhZw== 12633 -IEVuZXJneQ== 12634 -aXRhcg== 12635 -cGFyYXRvcg== 12636 -IGZlbGxvdw== 12637 -IGV2dA== 12638 -IFRyaQ== 12639 -IERBTQ== 12640 -Y2xvdWQ= 12641 -IFBhc3N3b3Jk 12642 -IERlbW9jcmF0cw== 12643 -IEFjYWQ= 12644 -JGxhbmc= 12645 -IHJlYg== 12646 -KCkpCgo= 12647 -0L3Riw== 12648 -IEJ1cg== 12649 -cmVhZGNy 12650 -IGhleA== 12651 -MjA5 12652 -Q29uc29sZQ== 12653 -Y3Rs 12654 -b3VzZWw= 12655 -IFdpbGxpYW0= 12656 -IGF6 12657 -X1BPUlQ= 12658 -IHByYWN0aWNlcw== 12659 -IGFueXdoZXJl 12660 -IFBvc2l0aW9u 12661 -IC0+Cg== 12662 -aWFtcw== 12663 -LnVzZXJuYW1l 12664 -cGxhY2Vob2xkZXI= 12665 -IG9kZXI= 12666 -IFNlY3JldGFyeQ== 12667 -IGlU 12668 -bW9uZA== 12669 -ZXZlbnRz 12670 -P+KAnQ== 12671 -LlN1Yg== 12672 -IGF0dGFjaGVk 12673 -IG7Do28= 12674 -IGVzdGF0ZQ== 12675 -MzY1 12676 -LmFjdGlvbg== 12677 -IGZpZ3VyZXM= 12678 -IH0pOw0K 12679 -IHN1YnNjcmk= 12680 -LnRhZw== 12681 -bmFt 12682 -LnBsb3Q= 12683 -bm9vbg== 12684 -bGlhbWVudA== 12685 -Q2hhcmFjdGVy 12686 -LnRhYg== 12687 -IHdpbnRlcg== 12688 -IFZhcmlhYmxl 12689 -IHRyZWVz 12690 -IHByb3Vk 12691 -KFY= 12692 -X2xvYWQ= 12693 -IGhpZXI= 12694 -IEVjb24= 12695 -IGZk 12696 -IHZpY3RpbXM= 12697 -UmVzdA== 12698 -aWFuYQ== 12699 -IGZha2U= 12700 -LlByaW50bG4= 12701 -IHN0cmxlbg== 12702 -IHNhZA== 12703 -IGJsZQ== 12704 -UHJvdA== 12705 -IGJ1dHRvbnM= 12706 -IHRlbGV2aXNpb24= 12707 -IGxvZ28= 12708 -ZXh0ZW5zaW9u 12709 -CWo= 12710 -c3RlaW4= 12711 -YWNpb25lcw== 12712 -ICIiIgoK 12713 -IHNpbXA= 12714 -IHJlY29yZGVk 12715 -IGJyaW5ncw== 12716 -IHByaW5jaXBhbA== 12717 -IGZlZXM= 12718 -KHNvdXJjZQ== 12719 -a2Rpcg== 12720 -IHV0aWxz 12721 -IGNvcnJlY3RseQ== 12722 -Zmls 12723 -IHdlbA== 12724 -UGFpcg== 12725 -LWJ1dHRvbg== 12726 -c2NhbGU= 12727 -dmVyaWZ5 12728 -W2M= 12729 -IC0tLQ== 12730 -IGVzY2FwZQ== 12731 -aWtlcw== 12732 -TG93ZXJDYXNl 12733 -aWNpYW4= 12734 -IGNoYXB0ZXI= 12735 -IFRZUEU= 12736 -IHNoYWRvdw== 12737 -IGF3ZXNvbWU= 12738 -V0U= 12739 -ZWxpZg== 12740 -IGxhbWJkYQ== 12741 -IGRpc3RpbmN0 12742 -IGJhcmU= 12743 -LW9mZg== 12744 -IGNvbG91cg== 12745 -LmFwcGVuZENoaWxk 12746 -b2xlYw== 12747 -YWdh 12748 -LmZpbGw= 12749 -CXN1cGVy 12750 -IGFkag== 12751 -KHBvc2l0aW9u 12752 -LmdldEl0ZW0= 12753 -MjQy 12754 -U2hvcnQ= 12755 -IHRvdGFsbHk= 12756 -VkQ= 12757 -IFRyZQ== 12758 -X2Vw 12759 -dmVtZW50cw== 12760 -IFNvbHV0aW9u 12761 -IGZ1bmRhbWVudA== 12762 -Rm9sbG93 12763 -IGZhY2lsaXR5 12764 -IGhhcHBlbmluZw== 12765 -T0Y= 12766 -LnRleHRCb3g= 12767 -U3Bhbg== 12768 -IMKr 12769 -aWRlbg== 12770 -IGV4Y2VlZA== 12771 -KHBhcmVudA== 12772 -IGNw 12773 -57s= 12774 -IGhhc24= 12775 -IHByaQ== 12776 -IGNvbnNlcXU= 12777 -bmVu 12778 -IElOVE8= 12779 -SWdub3Jl 12780 -IEZ1dHVyZQ== 12781 -IGNhcmJvbg== 12782 -IFN0ZWVs 12783 -Zm10 12784 -b2tpZQ== 12785 -IHNwbA== 12786 -KHRpdGxl 12787 -LWluZm8= 12788 -IGRlYWxz 12789 -IGZpeHR1cmU= 12790 -ZWE= 12791 -RGl2 12792 -IHRlc3RlZA== 12793 -X3JldHVybg== 12794 -KQoKCgo= 12795 -dXBwb3J0ZWQ= 12796 -IENvb2s= 12797 -IHBheWluZw== 12798 -IElsbA== 12799 -IGFycmVzdGVk 12800 -IFByaW1l 12801 -X2NhbGxiYWNr 12802 -PiwK 12803 -ZHJpdmVy 12804 -T25jZQ== 12805 -YWJi 12806 -X2J5dGVz 12807 -IFNldHM= 12808 -KE9iamVjdA== 12809 -IGNj 12810 -IHNoZWxs 12811 -YWxv 12812 -KTsvLw== 12813 -KGxvZw== 12814 -MjY0 12815 -Y3RvcnM= 12816 -KTwv 12817 -IG5laWdoYm9yaG9vZA== 12818 -NDIw 12819 -YWlsYWJpbGl0eQ== 12820 -dm9s 12821 -IHlvdXRo 12822 -IHRlY2huaXF1ZXM= 12823 -IFNjaGVtYQ== 12824 -dWg= 12825 -bWVudGU= 12826 -IHJlcG9zaXRvcnk= 12827 -aW1t 12828 -IGNvb2tpZQ== 12829 -SlM= 12830 -b3ZpZXM= 12831 -Ons= 12832 -Q29tcGxldGU= 12833 -U2luY2U= 12834 -IGxhdWdo 12835 -X0JP 12836 -ZW5hYmxl 12837 -IERvZXM= 12838 -IFdhbGs= 12839 -d2hhdA== 12840 -a2Vz 12841 -IG11bHRpcA== 12842 -aW1lbnRz 12843 -ZXVy 12844 -IHZpY3Rvcnk= 12845 -R2VuZXJhdG9y 12846 -IE1vcw== 12847 -cm92ZXJz 12848 -IGNvbXB1dGU= 12849 -IHByb3ZpZGVycw== 12850 -IE1lZGlj 12851 -TFA= 12852 -X0NPTkZJRw== 12853 -IHZldGVy 12854 -c3RlcnM= 12855 -X3dpbmRvdw== 12856 -dW1lcmlj 12857 -CQkJCQkK 12858 -LlJlc3BvbnNl 12859 -IHJlcGxhY2Vk 12860 -LnJvb3Q= 12861 -LWZyZWU= 12862 -LWNvbnRhaW5lcg== 12863 -IG1hdGNoaW5n 12864 -IEVkaXRvcg== 12865 -PSR7 12866 -IFNhZg== 12867 -IHNpbmQ= 12868 -KGJ1ZmZlcg== 12869 -5Yc= 12870 -LmVkdQ== 12871 -KV07Cg== 12872 -IE5GTA== 12873 -YXlh 12874 -IGRvZ3M= 12875 -IGRlc2lyZQ== 12876 -IE1pZGRsZQ== 12877 -Q2FydA== 12878 -MzA2 12879 -VGhlbWU= 12880 -IG1vYg== 12881 -IGRpc3BsYXllZA== 12882 -aWdpdA== 12883 -IGFkdWx0cw== 12884 -IiIi 12885 -IGRlbGl2ZXJlZA== 12886 -dmlzaWJsZQ== 12887 -Ijp7Cg== 12888 -PDw8 12889 -IEdP 12890 -c2Nyb2xs 12891 -eEU= 12892 -IGFzc2lnbmVk 12893 -IEJvb2w= 12894 -IHdw 12895 -IGNvbWJhdA== 12896 -IEhhdw== 12897 -Li0= 12898 -IHN1cHBvcnRpbmc= 12899 -LkNvbnRlbnQ= 12900 -MzQ1 12901 -aXJjcmFmdA== 12902 -IHNwaW4= 12903 -IENS 12904 -Lm15 12905 -4KU= 12906 -dHBs 12907 -IHNwYWNlcw== 12908 -Pyw= 12909 -Mzg0 12910 -IFN5cmlh 12911 -IHBhdHRlcm5z 12912 -LWJveA== 12913 -IGZyYW1ld29yaw== 12914 -LyU= 12915 -KGxvbmc= 12916 -IHRlYWNoaW5n 12917 -QVJOSU5H 12918 -X2tleXM= 12919 -IHRhYmxlcw== 12920 -VU5D 12921 -aW5hdGlvbnM= 12922 -LXdlaWdodA== 12923 -cmFkaW8= 12924 -IFBhYw== 12925 -LnNlcnZlcg== 12926 -LkNoYXJGaWVsZA== 12927 -cmluZw== 12928 -IHF1b3Rl 12929 -YW5uYQ== 12930 -IHdlcmRlbg== 12931 -IGNyZWFt 12932 -IG1hY2hpbmVz 12933 -LWs= 12934 -Mzc1 12935 -IHN0aW0= 12936 -IFN0b2Nr 12937 -cmljaw== 12938 -IGltcG9ydGFuY2U= 12939 -cng= 12940 -w7Vlcw== 12941 -2Yg= 12942 -IHN0cm9rZQ== 12943 -YWdyYQ== 12944 -IHRhc3Rl 12945 -IERFQlVH 12946 -VGhhbmtz 12947 -IFJlcXVpcmVk 12948 -b3Zh 12949 -TWVkaWE= 12950 -IHNpxJk= 12951 -KGJhc2U= 12952 -cG9zdHM= 12953 -IGZpbGVOYW1l 12954 -Q2hlY2tlZA== 12955 -IGludGVycnVwdA== 12956 -ICgpCg== 12957 -cHl0aG9u 12958 -cGFpcg== 12959 -IGNpcmNsZQ== 12960 -IGluaXRp 12961 -X3N0cmVhbQ== 12962 -IGNvbXByZWg= 12963 -bGVhcm4= 12964 -UHVibGlj 12965 -IGh1bWFucw== 12966 -IGJyaW5naW5n 12967 -b2dyYXBoaWM= 12968 -X2xheWVy 12969 -LWxpa2U= 12970 -dXBwb3J0SW5pdGlhbGl6ZQ== 12971 -aWRlYmFy 12972 -IHZvdGVz 12973 -IGRlc2lyZWQ= 12974 -TWFzaw== 12975 -IHJlbGF0aW9u 12976 -Lkluc3RhbmNl 12977 -SGVscA== 12978 -IGluc3Bpcg== 12979 -IE1vbm8= 12980 -Vmlld01vZGVs 12981 -b21ldGltZXM= 12982 -IGJhY2tncm91bmRDb2xvcg== 12983 -IHJvdGF0aW9u 12984 -IG1hcmk= 12985 -L3Rlc3Q= 12986 -SU5TRVJU 12987 -U3Rhcg== 12988 -cGh5 12989 -SWRz 12990 -X0dFVA== 12991 -IGluY3JlYXNlcw== 12992 -X2Nsb3Nl 12993 -MjMz 12994 -X0ZPUk0= 12995 -IFvigKZdCgo= 12996 -YXph 12997 -VEVYVA== 12998 -IMOk 12999 -IFZhbg== 13000 -IGxpZ2h0cw== 13001 -IEd1aWRl 13002 -IGRhdGVz 13003 -LkNvbW1hbmQ= 13004 -YW1hbg== 13005 -IHBhdGhz 13006 -LmVkaXQ= 13007 -CWFkZA== 13008 -ZHg= 13009 -IHJlYWN0aW9u 13010 -IEJlYWNo 13011 -LmdldE1lc3NhZ2U= 13012 -RW52aXJvbm1lbnQ= 13013 -aW50ZXJlc3Q= 13014 -IG1pbmlzdGVy 13015 -IHJlYWRlcnM= 13016 -CUY= 13017 -IGRvbWVzdGlj 13018 -IGZpbGVk 13019 -Q2l0eQ== 13020 -IG1hcHBpbmc= 13021 -IERFUw== 13022 -IHJlcGFpcg== 13023 -dGljcw== 13024 -aXh0dXJl 13025 -IG5vbWJyZQ== 13026 -LklTdXBwb3J0SW5pdGlhbGl6ZQ== 13027 -em8= 13028 -LklzTnVsbE9y 13029 -IENhcm9saW5h 13030 -IERlcg== 13031 -IEVWRU5U 13032 -IGdlc3Q= 13033 -IGhpc3Q= 13034 -cmVzb3VyY2Vz 13035 -IG9ycGhhbg== 13036 -LkFyZQ== 13037 -IEludmVzdA== 13038 -UkVGRVJSRUQ= 13039 -LkxvZ2dlcg== 13040 -IFJvbWFu 13041 -IGN1bHR1cmFs 13042 -ZmVhdHVyZQ== 13043 -cHRz 13044 -YnQ= 13045 -IGRvdA== 13046 -IGRpYW0= 13047 -dXNwZW5k 13048 -X2FjY2Vzcw== 13049 -KCl7DQo= 13050 -IHN1cnByaXNl 13051 -YWJpbA== 13052 -IHZpcnQ= 13053 -IGJvbWI= 13054 -YXJvbg== 13055 -X0lT 13056 -IHZhc3Q= 13057 -UmVhbA== 13058 -ZXBlbmQ= 13059 -aWN0ZWQ= 13060 -IHBpY2tlZA== 13061 -IEZM 13062 -IFJlcHVibGljYW5z 13063 -Lnplcm9z 13064 -UHJlc3NlZA== 13065 -c3Vw 13066 -LkNvcmU= 13067 -TWljcm9zb2Z0 13068 -c2VydmljZXM= 13069 -YWdpYw== 13070 -aXZlbmVzcw== 13071 -IHBkZg== 13072 -IHJvbGVz 13073 -NDAz 13074 -cmFz 13075 -IGluZHVzdHJpYWw= 13076 -IGZhY2lsaXRpZXM= 13077 -MjQ1 13078 -6KE= 13079 -IG5p 13080 -IGJh 13081 -IGNscw== 13082 -CUI= 13083 -Q3VzdG9tZXI= 13084 -IGltYWdpbmU= 13085 -IGV4cG9ydHM= 13086 -T3V0cHV0U3RyZWFt 13087 -IG1hZA== 13088 -KGRl 13089 -KXsKCg== 13090 -IGZybw== 13091 -aHVz 13092 -IGNvbW1pdHRlZQ== 13093 -7J20 13094 -LHg= 13095 -IGRpdmlzaW9u 13096 -KGNsaWVudA== 13097 -KGphdmE= 13098 -b3B0aW9uYWw= 13099 -LkVxdWFs 13100 -IFBoeXM= 13101 -aW5ndQ== 13102 -MDMz 13103 -NzIw 13104 -IHN5bmM= 13105 -IE5h 13106 -fX08Lw== 13107 -T0xVTQ== 13108 -aXTDqQ== 13109 -IGlkZW50aWZpZXI= 13110 -b3dlZA== 13111 -IGV4dGVudA== 13112 -IGh1cg== 13113 -VkE= 13114 -Y2xhcg== 13115 -IGVkZ2Vz 13116 -Q3JpdGVyaWE= 13117 -IGluZGVlZA== 13118 -aW5oZXJpdA== 13119 -IE5pZ2h0 13120 -MzAy 13121 -IHJlcG9ydGluZw== 13122 -IGVuY291bnRlcg== 13123 -IGtpbmRz 13124 -X3ByZWQ= 13125 -IGNvbnNpZGVyaW5n 13126 -Lig= 13127 -IHByb3RlaW4= 13128 -VHlw 13129 -Z3JpY3VsdA== 13130 -IEJhbGw= 13131 -QENvbXBvbmVudA== 13132 -IEVzcw== 13133 -IFJ1Yg== 13134 -ODAy 13135 -dWxw 13136 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 13137 -aXR1ZA== 13138 -LmF0dHI= 13139 -aWVudGU= 13140 -IHNwZWxs 13141 -IEpvZQ== 13142 -RU5URVI= 13143 -X2hvc3Q= 13144 -aXRhbg== 13145 -IG1hdHRlcnM= 13146 -IGVtZXJnZW5jeQ== 13147 -dWF0ZWQ= 13148 -IENoYXQ= 13149 -PXsn 13150 -Y29udHJp 13151 -YXJrZXI= 13152 -5oiQ 13153 -aXBlcg== 13154 -IHNjaGVtZQ== 13155 -KHN0ZGVycg== 13156 -ICoo 13157 -Y2VpdmVy 13158 -LmNvbHVtbg== 13159 -IG1hcmtlZA== 13160 -X0FUVFI= 13161 -IGJvZGllcw== 13162 -IElNUExJRUQ= 13163 -R2Fw 13164 -IFBPU1Q= 13165 -IGNvcnBvcmF0ZQ== 13166 -IGRpbWVuc2lvbg== 13167 -IGNvbnRyYXN0 13168 -ZXJ2aWV3 13169 -IEVSUk9S 13170 -IGNhcGFibGU= 13171 -IGFkdmVydGlzaW5n 13172 -dXJjaGFzZQ== 13173 -IFBB 13174 -IEZyYW5jaXNjbw== 13175 -IGZhY2luZw== 13176 -44CM 13177 -Z2l0 13178 -IGJlZXI= 13179 -IHNreQ== 13180 -ZG93bmxvYWQ= 13181 -IEN1cg== 13182 -bWM= 13183 -YW5ueQ== 13184 -LmZsb29y 13185 -IGNyaXRlcmlh 13186 -IHBhcnNlSW50 13187 -YCwK 13188 -IGFzcGVjdA== 13189 -IGJ1bmRsZQ== 13190 -Q291bGQ= 13191 -IHRhbms= 13192 -LWlk 13193 -IGh1cnQ= 13194 -IGJyb2FkY2FzdA== 13195 -T0tFTg== 13196 -b3dudA== 13197 -bnVsbGFibGU= 13198 -Q2Fw 13199 -IGFsY29ob2w= 13200 -IENvbGw= 13201 -IEhlbHBlcg== 13202 -IEFm 13203 -Lm1ldGhvZA== 13204 -IHBsYW5uZWQ= 13205 -cGxlcg== 13206 -IFNpdGU= 13207 -IHJlc2M= 13208 -b21lbnQ= 13209 -IEphdmFTY3JpcHQ= 13210 -U0VSVkVS 13211 -IHJocw== 13212 -ZXJlcw== 13213 -KCIs 13214 -aWZp 13215 -LmZpZWxkcw== 13216 -IHBhcmtpbmc= 13217 -IGlzbGFuZA== 13218 -IHNpc3Rlcg== 13219 -Xwo= 13220 -Q29uc3RyYWludHM= 13221 -IEF1c3Q= 13222 -ZGlt 13223 -X3BvaW50cw== 13224 -IGdhcA== 13225 -X2FjdGl2ZQ== 13226 -IHZvb3I= 13227 -IFBP 13228 -QmFn 13229 -LXNjYWxl 13230 -bGFtYmRh 13231 -LkRpc3Bvc2U= 13232 -cnVsZQ== 13233 -IG93bmVk 13234 -IE1lZGljYWw= 13235 -MzAz 13236 -ZW50cmllcw== 13237 -IHNvbGFy 13238 -IHJlc3VsdGluZw== 13239 -IGVzdGltYXRlZA== 13240 -IGltcHJvdmVk 13241 -RHVyYXRpb24= 13242 -ZW1wbG95ZWU= 13243 -JC4= 13244 -QWN0aW9ucw== 13245 -TGlrZQ== 13246 -LCg= 13247 -KFJlcXVlc3Q= 13248 -JXM= 13249 -Lk9wZW4= 13250 -KSIK 13251 -IHBpeGVs 13252 -IGFkYXB0ZXI= 13253 -IHJldmVudWU= 13254 -b2dyYW0= 13255 -IExB 13256 -IE1hY2hpbmU= 13257 -INin 13258 -IGZsZQ== 13259 -IGJpa2U= 13260 -SW5zZXRz 13261 -IGRpc3A= 13262 -IGNvbnNpc3RlbnQ= 13263 -YcOnw6Nv 13264 -Z2VuZGVy 13265 -IFRob3Nl 13266 -cGVyaWVuY2U= 13267 -LkJhY2tDb2xvcg== 13268 -LnBsYXk= 13269 -IHJ1c2g= 13270 -IGF4aW9z 13271 -IG5lY2s= 13272 -X21lbQ== 13273 -LlBSRUZFUlJFRA== 13274 -X2ZpcnN0 13275 -Q0I= 13276 -IFdpZGdldA== 13277 -IHNlcQ== 13278 -aGFy 13279 -IGhpdHM= 13280 -IOKCrA== 13281 -IGNvbnRhaW5lZA== 13282 -cmllbnQ= 13283 -d2F0ZXI= 13284 -TE9BRA== 13285 -IFZpcmdpbmlh 13286 -IEFybQ== 13287 -IC4v 13288 -wrs= 13289 -X3Jvb3Q= 13290 -IGFzc2lzdGFuY2U= 13291 -W10s 13292 -c3luYw== 13293 -IHZlZ2V0 13294 -ZXNjYXBl 13295 -aWNlcg== 13296 -Ym9vc3Q= 13297 -IEZsb2F0 13298 -LVc= 13299 -Ki8NCg== 13300 -Kj4= 13301 -MjE4 13302 -ICQoIi4= 13303 -LnBvcw== 13304 -IGJveXM= 13305 -IHdlZGRpbmc= 13306 -IGFnZW50cw== 13307 -PSJf 13308 -IEFybXk= 13309 -IGhpbnQ= 13310 -dmlzaW9u 13311 -IHRlY2g= 13312 -IENvbm5lY3Q= 13313 -IGxlZ2VuZA== 13314 -IEJldA== 13315 -LkJhc2U= 13316 -U3ViamVjdA== 13317 -IGxpdA== 13318 -UmVtb3Zl 13319 -ICI6 13320 -IEZpbmFs 13321 -cGVhcmFuY2U= 13322 -IGlUdW5lcw== 13323 -IHBhcnRpY2lwYW50cw== 13324 -IFB5dGhvbg== 13325 -IGJ1c3k= 13326 -aWVs 13327 -dmVydGljZXM= 13328 -IHRlbXBsYXRlVXJs 13329 -IENsb3Nl 13330 -SW1n 13331 -IENvcnBvcmF0aW9u 13332 -dGltZXN0YW1w 13333 -IGV4dGVuZA== 13334 -IHdlYnNpdGVz 13335 -IHBvc3NpYmlsaXR5 13336 -0L7Rgg== 13337 -IGvDtg== 13338 -IG1lYXQ= 13339 -IHJlcHJlc2VudGF0aW9u 13340 -MjQx 13341 -IAkJ 13342 -X1NUQVJU 13343 -LmFwcGx5 13344 -IFZhbGxleQ== 13345 -IFN1Y2Nlc3M= 13346 -SGk= 13347 -IG5vYg== 13348 -IElFbnVtZXJhYmxl 13349 -X3NlbGVjdA== 13350 -Z2Vv 13351 -LiIpCg== 13352 -IHR1cm5pbmc= 13353 -IGZhYnJpYw== 13354 -KCIiKTsK 13355 -IHBlcnNwZWN0aXZl 13356 -6Zc= 13357 -IFNu 13358 -VGhhbms= 13359 -O2o= 13360 -LlBhcmFtZXRlcnM= 13361 -CSAgICAgICAgICAg 13362 -IGZhY3Rz 13363 -MzA1 13364 -IHVudA== 13365 -Lmluc3RhbmNl 13366 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 13367 -LWVuZA== 13368 -IEpPSU4= 13369 -IEhlbg== 13370 -IHVyaQ== 13371 -5ZCN 13372 -INC90LA= 13373 -IEluZm8= 13374 -IGNvbmR1Y3RlZA== 13375 -IMOl 13376 -T1VSQ0U= 13377 -IHdpbmU= 13378 -Sm9obg== 13379 -LkVycm9yZg== 13380 -IEFnZQ== 13381 -b3VuZGVk 13382 -IHJlYWxpemU= 13383 -MzEy 13384 -IF07 13385 -IHN1YnNlcXU= 13386 -LG0= 13387 -KFVzZXI= 13388 -aWFubw== 13389 -IGFjY29tcGw= 13390 -aXNw 13391 -LnN0ZA== 13392 -6Yc= 13393 -IEJlZA== 13394 -LnNldEF0dHJpYnV0ZQ== 13395 -QlI= 13396 -a2VlcA== 13397 -IEFMTA== 13398 -IGlzb2w= 13399 -YW1tYQ== 13400 -UGFja2FnZQ== 13401 -IG9jY2FzaW9u 13402 -LXN1Y2Nlc3M= 13403 -0LXQtA== 13404 -IExJTUlURUQ= 13405 -c3RyaXA= 13406 -KCkKCgo= 13407 -aXN0cmlidXRpb24= 13408 -Q29sb3Jz 13409 -ICs6Kw== 13410 -RGlkTG9hZA== 13411 -YWxlcg== 13412 -IHRpZA== 13413 -IExFRA== 13414 -IExpbmtlZA== 13415 -IENhcnQ= 13416 -KCkpDQo= 13417 -X1JFQUQ= 13418 -IGtpbGxpbmc= 13419 -IFBIUA== 13420 -ZmVjdGlvbg== 13421 -IGluc3RhbmNlcw== 13422 -Y3Y= 13423 -Ii8+ 13424 -IHNm 13425 -IHRheGVz 13426 -X2xvY2F0aW9u 13427 -IEJpdGNvaW4= 13428 -dWFibGU= 13429 -cmFuaw== 13430 -aWdub3Jl 13431 -dHJhY2s= 13432 -0LrQsA== 13433 -IHNob3VsZG4= 13434 -IE9Q 13435 -PT57Cg== 13436 -IGtt 13437 -IGhlbHBlcg== 13438 -X2hlYWQ= 13439 -IFdoZXRoZXI= 13440 -b2Nv 13441 -X2Js 13442 -IHN0YXRpc3RpY3M= 13443 -IGJlYXV0eQ== 13444 -IHRvZw== 13445 -dGlw 13446 -64uk 13447 -IGNzdg== 13448 -KHNxbA== 13449 -c3RkbGli 13450 -d2Vhaw== 13451 -IGxpa2Vz 13452 -xI0= 13453 -IHJlcGVhdA== 13454 -IGFwYXJ0bWVudA== 13455 -IGVtcGg= 13456 -X2VkaXQ= 13457 -IHZpdA== 13458 -CXR5cGU= 13459 -MjE3 13460 -RXZlbg== 13461 -dXRlbg== 13462 -IGNpcmN1bXN0YW5jZXM= 13463 -Ymlhbg== 13464 -IHN1Z2Fy 13465 -V2luZG93cw== 13466 -7J4= 13467 -IG9ic2VydmVk 13468 -L2RhdGE= 13469 -IGNhbGVuZGFy 13470 -IHN0cmlrZQ== 13471 -IFJFUw== 13472 -X3Nj 13473 -Zm9ueQ== 13474 -b3JlbQ== 13475 -KHo= 13476 -cG93ZXI= 13477 -ZXRlY3Q= 13478 -IFNhdA== 13479 -LmRlc2NyaXB0aW9u 13480 -IGdhbmc= 13481 -IFNwb3J0cw== 13482 -b25ncw== 13483 -IEJ1bmRsZQ== 13484 -LnN1bQ== 13485 -b25jZQ== 13486 -IGFjY3VzZWQ= 13487 -IGV4cGxvcmU= 13488 -IGFwcHJveGltYXRlbHk= 13489 -IGxvc2luZw== 13490 -dGhlc2lz 13491 -IEZ1bmQ= 13492 -IGRpYWdu 13493 -QXV0b3dpcmVk 13494 -cHJvcGVydGllcw== 13495 -IF8u 13496 -IGNudA== 13497 -Y2VkdXJl 13498 -IHl5 13499 -IGdyYW50 13500 -c29jaw== 13501 -LmlubmVySFRNTA== 13502 -IF0pOwo= 13503 -IENPTkZJRw== 13504 -PSck 13505 -NTUw 13506 -XV07Cg== 13507 -VU5E 13508 -IGdsb2I= 13509 -IGRpcmU= 13510 -dWZmbGU= 13511 -X01FTQ== 13512 -IGF1dGhlbnRpYw== 13513 -Pigi 13514 -IGRlY2FkZQ== 13515 -IEltcG9ydA== 13516 -IG9yaWdpbmFsbHk= 13517 -IGpRdWVyeQ== 13518 -IGluZGljYXRl 13519 -IG91cnNlbHZlcw== 13520 -U3c= 13521 -LmxibA== 13522 -ZW5lcmF0ZQ== 13523 -IGJhc2ljYWxseQ== 13524 -IEhvbQ== 13525 -ICsjKw== 13526 -IEJyaXRhaW4= 13527 -IEthcg== 13528 -dG9FcXVhbA== 13529 -LnN0b3A= 13530 -IG1vZGFs 13531 -aXNp 13532 -IHN1Z2dlc3Rz 13533 -IGR0eXBl 13534 -IHR1cg== 13535 -YmY= 13536 -IGNvbm5lY3Rpb25z 13537 -IEJlZm9yZQ== 13538 -aXN0ZWQ= 13539 -bW91c2U= 13540 -IHB1bGxlZA== 13541 -LmJ1aWxk 13542 -IGxlZ2lzbGF0aW9u 13543 -IGZvcnRo 13544 -cGFk 13545 -ZWdv 13546 -Lk5vdw== 13547 -IGV4Y2l0aW5n 13548 -fQoKCgo= 13549 -IGNvbXBy 13550 -IHNoYXJlcw== 13551 -IHJpZw== 13552 -Z3JlZW4= 13553 -X3ZlYw== 13554 -IGVudW1lcmF0ZQ== 13555 -QXV0bw== 13556 -aWNhdG9y 13557 -IFJheQ== 13558 -YXNzZQ== 13559 -IGhvbGlkYXk= 13560 -IG51bGxhYmxl 13561 -Z3Vu 13562 -X2RldGFpbHM= 13563 -IHdyYXBwZXI= 13564 -c2Vx 13565 -IFlvdW5n 13566 -anVhbmE= 13567 -ICJfXw== 13568 -bGljZW5zZQ== 13569 -c2VydmU= 13570 -Xig= 13571 -aWRlcnM= 13572 -LlJlbW92ZQ== 13573 -cm9wZG93bg== 13574 -J1M= 13575 -cGlu 13576 -KHRva2Vu 13577 -LkRlZmF1bHQ= 13578 -IHJlYXNvbmFibGU= 13579 -YW1waW9u 13580 -IFNvY2lldHk= 13581 -IGJlaQ== 13582 -ZXJ2ZXM= 13583 -cmFk 13584 -IEZveA== 13585 -X2ltYWdlcw== 13586 -IHdoZWVs 13587 -Jylb 13588 -IGNmZw== 13589 -KEJ5 13590 -Q29uc3RydWN0b3I= 13591 -IHZhcnk= 13592 -LnN3aWZ0 13593 -IHByb3h5 13594 -CUg= 13595 -IEFub3RoZXI= 13596 -IFBlbg== 13597 -IGNoZWNraW5n 13598 -IGplc3Q= 13599 -bWFuYWdlcg== 13600 -T3JpZ2lu 13601 -dWdz 13602 -b2ly 13603 -PjwhLS0= 13604 -IGV4cHJlc3NlZA== 13605 -IG1vZGVy 13606 -IGFnZW5jaWVz 13607 -IGlo 13608 -LWhpZGRlbg== 13609 -aW91c2x5 13610 -IFJvZA== 13611 -IHNvbGU= 13612 -TWVk 13613 -LkFueQ== 13614 -IHBj 13615 -YmFs 13616 -RXhhbXBsZQ== 13617 -IFNhbGU= 13618 -IHN0cmlw 13619 -IENvbXA= 13620 -IHByZXNpZGVudGlhbA== 13621 -TW9zdA== 13622 -cHV0YXRpb24= 13623 -KHJlZg== 13624 -IEZvdXI= 13625 -X2ZpbGVuYW1l 13626 -IGVuZm9yY2VtZW50 13627 -2K8= 13628 -IEdlb3Jn 13629 -d2VpZ2h0cw== 13630 -L2w= 13631 -IGFnZ3Jlc3M= 13632 -IGRyYXdpbmc= 13633 -YW5keQ== 13634 -PEk= 13635 -LWo= 13636 -YWth 13637 -aHJlZg== 13638 -IHRlYWNoZXJz 13639 -X1E= 13640 -KGl0 13641 -IE1C 13642 -IHRlbXBvcmFyeQ== 13643 -aXJlYmFzZQ== 13644 -c3RyYQ== 13645 -5pe2 13646 -6LQ= 13647 -KGxhYmVs 13648 -b3Vw 13649 -IHRvcGljcw== 13650 -IHBvcnRpb24= 13651 -aWRvcw== 13652 -IEpld2lzaA== 13653 -IHJlY292ZXJ5 13654 -NjUw 13655 -IHN0YW5kcw== 13656 -I1s= 13657 -IGFmdGVybm9vbg== 13658 -IEFydGljbGU= 13659 -X2F0dA== 13660 -IGV4cGxhbg== 13661 -IFBhaw== 13662 -LnNldE9uQ2xpY2tMaXN0ZW5lcg== 13663 -LmNoaWxkcmVu 13664 -IGlr 13665 -Kyg= 13666 -bGFn 13667 -IGRpc2s= 13668 -IGNvbnRyb3ZlcnM= 13669 -Ij4m 13670 -YXNw 13671 -IHdpZQ== 13672 -IEF1c3RyYWxpYW4= 13673 -IFlvdVR1YmU= 13674 -QXR0cg== 13675 -Y29udGFpbnM= 13676 -ZHVjZQ== 13677 -IE1hdHQ= 13678 -MzQw 13679 -YXRlcm4= 13680 -IHZvbHVudGU= 13681 -IG5ld3Nw 13682 -VlA= 13683 -b2x0aXA= 13684 -IGRlbGVnYXRl 13685 -X21ldGE= 13686 -IGFjY3VyYXRl 13687 -IEV4YW1wbGU= 13688 -JSw= 13689 -IERhaWx5 13690 -IGNhYmlu 13691 -IFNX 13692 -IGxpbWl0cw== 13693 -a2lw 13694 -IGFybXk= 13695 -IGVuZGluZw== 13696 -IGJvc3M= 13697 -IERpYWxvZw== 13698 -QWxzbw== 13699 -PSIjIg== 13700 -b3JkYW4= 13701 -cm93c2U= 13702 -LW1pbg== 13703 -ICIm 13704 -X2xvYw== 13705 -VVg= 13706 -IGRldmVsb3BlcnM= 13707 -IGFjY3VyYWN5 13708 -IG1haW50ZW5hbmNl 13709 -IGhlYXY= 13710 -IGZpbHRlcnM= 13711 -LlRvb2xTdHJpcA== 13712 -IG5hcnI= 13713 -IEVtcA== 13714 -T1JERVI= 13715 -IE1vYmlsZQ== 13716 -LlNlcmlhbA== 13717 -Lm91dHB1dA== 13718 -MjQ0 13719 -LmNvbA== 13720 -TWF0ZXJpYWw= 13721 -dW1h 13722 -IGNvbnN1bWVycw== 13723 -c2hpZnQ= 13724 -IHB1ZWQ= 13725 -IG1pbmk= 13726 -Y29sbGVjdGlvbg== 13727 -IGthbg== 13728 -LmNlbnRlcg== 13729 -SGlzdG9yeQ== 13730 -IGJlbmNo 13731 -KCkpOw== 13732 -aXRvcmllcw== 13733 -IGNyb3dk 13734 -X2NhbGw= 13735 -IHBvd2Vycw== 13736 -LUU= 13737 -IGRpc21pc3M= 13738 -IHRhbGtz 13739 -IENoYW5uZWw= 13740 -Zm9yd2FyZA== 13741 -X2NvbnRyb2w= 13742 -L3NyYw== 13743 -aWVzdA== 13744 -KioqKioqKioqKioqKioqKioqKioqKioq 13745 -IGJldGE= 13746 -KGNvbG9y 13747 -X09CSkVDVA== 13748 -IEFwaQ== 13749 -IGVmZmVjdGl2ZWx5 13750 -Q2FtZXJh 13751 -c2Q= 13752 -dXNzeQ== 13753 -Mjkw 13754 -RGljdA== 13755 -IEVmZmVjdA== 13756 -aWJpbGl0aWVz 13757 -IHJldHVybmluZw== 13758 -IEZhcg== 13759 -ICcnKQ== 13760 -IG1vZHVsZXM= 13761 -MjE5 13762 -aWxhdGlvbg== 13763 -ICgl 13764 -VFJHTA== 13765 -IHN0b3Jt 13766 -b25uYQ== 13767 -IEVYUA== 13768 -IHNwb25z 13769 -IGRpc3Bs 13770 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 13771 -ZmFsbA== 13772 -5Yw= 13773 -aWduS2V5 13774 -X1VT 13775 -ZXRyaWNz 13776 -IGhhbmRsZXM= 13777 -VEw= 13778 -X2Ftb3VudA== 13779 -b3dh 13780 -YnJhbmQ= 13781 -IFRvb2w= 13782 -IHVzdWFs 13783 -Llo= 13784 -Y3JlbWVudA== 13785 -YWRpdW0= 13786 -c3RvY2s= 13787 -IHNlcnZpbmc= 13788 -IEJvbg== 13789 -IGxpbmVhcg== 13790 -IFRhcmdldA== 13791 -IFJhZGlv 13792 -SEw= 13793 -U2hhZGVy 13794 -b21hdGlj 13795 -YWd1ZXM= 13796 -aW5pdHk= 13797 -ZGlmZg== 13798 -X2l0ZXJhdG9y 13799 -cXVvdA== 13800 -ICwK 13801 -Y2FsbGJhY2s= 13802 -IHN5bXB0b21z 13803 -W18= 13804 -IEJ1bA== 13805 -IEZlYg== 13806 -dW5kbw== 13807 -X2FjY291bnQ= 13808 -IHR5cGVkZWY= 13809 -0LjRgQ== 13810 -dHJhcw== 13811 -VXNlcklk 13812 -IFBlbm4= 13813 -IFN1cHJlbWU= 13814 -fT4= 13815 -dXNlcklk 13816 -MzI3 13817 -IEtpbQ== 13818 -IGdh 13819 -IGFydGlzdHM= 13820 -5bg= 13821 -IEFic3RyYWN0 13822 -b2tlbW9u 13823 -IGhhbQ== 13824 -b3ZhbA== 13825 -IGNoYQ== 13826 -YXRlbg== 13827 -5YY= 13828 -Rml4ZWQ= 13829 -IHZ1bG5lcg== 13830 -IFBhcmFtZXRlcnM= 13831 -cXVhbnRpdHk= 13832 -LkNsZWFy 13833 -U2VydmxldFJlcXVlc3Q= 13834 -IHlh 13835 -IHNvdWw= 13836 -MDgw 13837 -dHJhbnNhY3Rpb24= 13838 -IHNvbG8= 13839 -IHBhaXJz 13840 -5pQ= 13841 -IEdyZQ== 13842 -X3dvcmQ= 13843 -IEND 13844 -IGdp 13845 -emll 13846 -IHNjaGVkdWxlZA== 13847 -cm90YXRpb24= 13848 -Z3lwdA== 13849 -dWxvdXM= 13850 -Ojpf 13851 -IEVsbA== 13852 -PCE= 13853 -CQkgIA== 13854 -bHA= 13855 -YWhh 13856 -Q29weXJpZ2h0 13857 -MDA5 13858 -IGRyYW0= 13859 -MjUx 13860 -IGRpYWdyYW0= 13861 -IE1lbQ== 13862 -IGdhcmRlbg== 13863 -Q29tcA== 13864 -IGF0dGVtcHRz 13865 -dWZmaXg= 13866 -Pigp 13867 -IHBoaWxvc29waA== 13868 -X3JlbA== 13869 -5bw= 13870 -IHN2 13871 -LnNlY29uZA== 13872 -YW50bw== 13873 -Lkpzb24= 13874 -IFRlbGU= 13875 -X2xvY2Fs 13876 -X3NlbmQ= 13877 -IGFzcGVjdHM= 13878 -7Jc= 13879 -SUJMRQ== 13880 -IHJhaWw= 13881 -IHdpZGVseQ== 13882 -YXNoZWQ= 13883 -aWFy 13884 -aW5m 13885 -dXBwZXI= 13886 -ZGphbmdv 13887 -X3Jlc3VsdHM= 13888 -aXNzaW5n 13889 -IGVxdWl2YWxlbnQ= 13890 -T1VORA== 13891 -IHR5 13892 -IHBvdGVudGlhbGx5 13893 -QWR2ZXJ0aXNlbWVudA== 13894 -MjM4 13895 -IFJlY29yZA== 13896 -Mzgw 13897 -cmVzZW50YXRpb24= 13898 -X3dpZGdldA== 13899 -b3VuZGluZw== 13900 -IHJlbGlnaW9u 13901 -IGNvbnNj 13902 -IExpbQ== 13903 -LmFt 13904 -SHRtbA== 13905 -ICc6 13906 -UEFUSA== 13907 -X3NwZWM= 13908 -b3J0ZWQ= 13909 -aWRhZGVz 13910 -X3NoYXBl 13911 -IGtlZXBz 13912 -LlNhdmU= 13913 -IExvYw== 13914 -b3Jp 13915 -IFRFU1Q= 13916 -dW5pY2lw 13917 -IHJlZ2lvbnM= 13918 -IGJlbGlldmVz 13919 -L2Vu 13920 -cG9zaXRl 13921 -eyc= 13922 -cHJlcGFyZQ== 13923 -X2NvbnN0 13924 -c2FtcGxl 13925 -IFdpbGxpYW1z 13926 -IHN0cnQ= 13927 -X0dldA== 13928 -IEFuZHJldw== 13929 -LmFjdGl2ZQ== 13930 -IGxheWVycw== 13931 -VmlzdWFsU3R5bGU= 13932 -YXp5 13933 -IEtu 13934 -IGFjaWQ= 13935 -IEFzaWE= 13936 -IGV4Y2Vzcw== 13937 -CW15 13938 -IGtleWJvYXJk 13939 -ZW5zdXM= 13940 -IGNyZXc= 13941 -IG1pc3NlZA== 13942 -bWFzdGVy 13943 -IFdpbGQ= 13944 -IG5ld2x5 13945 -IHdpbm5lcg== 13946 -IHN0dWI= 13947 -aWNvZGU= 13948 -Lm1vdmU= 13949 -RG9tYWlu 13950 -IFNhcg== 13951 -IGZvcmVzdA== 13952 -TEVE 13953 -Y2xhaW1lcg== 13954 -LmV4aXQ= 13955 -IFdpbmRvdw== 13956 -IHJlc2lzdGFuY2U= 13957 -IENIRUNL 13958 -KCIt 13959 -IFJ5YW4= 13960 -IHBpcGU= 13961 -IGNvYXN0 13962 -REVG 13963 -Ly8h 13964 -X29mZg== 13965 -ZXhpdA== 13966 -IHVsdGltYXRlbHk= 13967 -aW1pdGl2ZQ== 13968 -IEtlZXA= 13969 -IGhpc3RvcmljYWw= 13970 -IGFueXdheQ== 13971 -IEphY2tzb24= 13972 -b2NrZXI= 13973 -RVJO 13974 -IFVJTlQ= 13975 -eW50YXg= 13976 -RVJZ 13977 -aXNtcw== 13978 -IGNu 13979 -IG9jY3Vycw== 13980 -IDs7 13981 -VGV4dFZpZXc= 13982 -QUU= 13983 -L2ltZw== 13984 -IHllc3RlcmRheQ== 13985 -LWRlZmF1bHQ= 13986 -IHRpbnk= 13987 -IHByb2M= 13988 -IGFsaXZl 13989 -IFJFRw== 13990 -LnRo 13991 -ZWFyaW5n 13992 -LmdldExvZ2dlcg== 13993 -PGxpbms= 13994 -X2xvZ2lu 13995 -Rm9sZGVy 13996 -YWJj 13997 -bHlwaGljb24= 13998 -0L3Qvg== 13999 -IG5vdGljZWQ= 14000 -b2RpZ28= 14001 -IGVkaXRpb24= 14002 -aW1hdG9y 14003 -LkVuYWJsZWQ= 14004 -LnBhcnNlSW50 14005 -IHlhcmRz 14006 -CQkJCQkJCQkJCQkJ 14007 -IHZlcmJvc2U= 14008 -0LvRjw== 14009 -X0JZ 14010 -LmxvZ2lu 14011 -Lio7Cg== 14012 -IE1pZA== 14013 -w6llcw== 14014 -IGdsbw== 14015 -IGJ1aWxkaW5ncw== 14016 -IHpl 14017 -IEl0ZXI= 14018 -IHR1YmU= 14019 -IFBvdA== 14020 -XE0= 14021 -MjUz 14022 -PHRo 14023 -YnJpZGdl 14024 -IFNjcmlwdA== 14025 -IE1vZHVsZQ== 14026 -IHZhY2M= 14027 -IGluc3RhbGxhdGlvbg== 14028 -dnk= 14029 -VmlzdWFsU3R5bGVCYWNrQ29sb3I= 14030 -IFNN 14031 -LnRvdGFs 14032 -NjQw 14033 -YmF0 14034 -IGZpbmRz 14035 -IGF0bW9z 14036 -U3Vidmlldw== 14037 -aXphcmQ= 14038 -IHJlcGxhY2VtZW50 14039 -bGljYXRlZA== 14040 -YXBpcw== 14041 -IGxvZ2dlZA== 14042 -IExlZnQ= 14043 -R3Vp 14044 -X1R5cGU= 14045 -dG0= 14046 -UGFk 14047 -IGhvdXNlaG9sZA== 14048 -IHJlbGU= 14049 -IHByb3Bvc2Fs 14050 -X0NMQVNT 14051 -MjQz 14052 -Ojo6Og== 14053 -IGluZnJhc3RydWN0dXJl 14054 -SW5qZWN0 14055 -L2h0bWw= 14056 -MjI2 14057 -IGFkcw== 14058 -aXp6YQ== 14059 -IG1n 14060 -Y3RyaW5l 14061 -JQo= 14062 -PGh0bWw= 14063 -LWltYWdl 14064 -IGF0dG9ybmV5 14065 -PG0= 14066 -KCcs 14067 -IGNhbm4= 14068 -IHByaW50bG4= 14069 -b29zZQ== 14070 -IHllbGxvdw== 14071 -LmV4cA== 14072 -cGF5bWVudA== 14073 -IHRhYmxlVmlldw== 14074 -YXdheQ== 14075 -IG9wcG9zaXRpb24= 14076 -IEFnYWlu 14077 -IEhhbmRsZQ== 14078 -IGV4Y2x1c2l2ZQ== 14079 -aW5hcg== 14080 -w6ly 14081 -0L7QsQ== 14082 -IENPREU= 14083 -ZW1wb3Jhcnk= 14084 -IHJlYWN0 14085 -cGlwZQ== 14086 -MjM2 14087 -Y3o= 14088 -LmFjdGl2aXR5 14089 -IGxhcmdlbHk= 14090 -IGRpc3M= 14091 -YXh5 14092 -ZXNpcw== 14093 -IFJlbg== 14094 -IGNvcm4= 14095 -LlVzZVZpc3VhbFN0eWxlQmFja0NvbG9y 14096 -ZGF5cw== 14097 -IGZydWl0 14098 -SW5zZXJ0 14099 -X2VuYw== 14100 -RXN0 14101 -X2RlYw== 14102 -IEx1Yw== 14103 -IMO8YmVy 14104 -cGFyYW1ldGVycw== 14105 -UEVSVA== 14106 -ZXhwcmVzcw== 14107 -X3Byb2ZpbGU= 14108 -VW5rbm93bg== 14109 -IHJldm9sdXRpb24= 14110 -LmFkZHJlc3M= 14111 -X3JlcXVpcmU= 14112 -IHVuaWZvcm0= 14113 -IFBhY2s= 14114 -bGFy 14115 -IFVJVGFibGVWaWV3 14116 -IGRlcGVuZHM= 14117 -VmFsaWRhdGlvbg== 14118 -Y29uZmlybQ== 14119 -T3duZXI= 14120 -IHRyaWI= 14121 -aGV0 14122 -IElkZQ== 14123 -YW5zYXM= 14124 -MjQ3 14125 -TGFuZ3VhZ2U= 14126 -dWV0 14127 -IFBv 14128 -IFN0ZXZl 14129 -IGNvbnRlc3Q= 14130 -X0RFRkFVTFQ= 14131 -IGFwcGFyZW50bHk= 14132 -UkVFTg== 14133 -IGZyZXF1ZW50bHk= 14134 -IHRyYWRpdGlvbg== 14135 -b2NvbGF0ZQ== 14136 -U0k= 14137 -IEFyZ3VtZW50 14138 -Rm9jdXM= 14139 -ZXJ0ZQ== 14140 -IExheW91dA== 14141 -IGR4 14142 -IGdlbmVyYXRvcg== 14143 -IFdhaXQ= 14144 -UG9saWN5 14145 -bGlnaHRz 14146 -LkV4ZWN1dGU= 14147 -NTU1 14148 -UHk= 14149 -IGJlZHJvb20= 14150 -ZWRh 14151 -cmFpZA== 14152 -CXNpemU= 14153 -IGFuY2llbnQ= 14154 -IHB1bXA= 14155 -IGR3 14156 -ICghKA== 14157 -IHNwZWNpZnk= 14158 -KHN0YXR1cw== 14159 -IEZCSQ== 14160 -LmV4Y2VwdGlvbg== 14161 -IHJlbWFyaw== 14162 -bHltcA== 14163 -YW50ZWU= 14164 -VXBsb2Fk 14165 -ZXJuZXQ= 14166 -6aE= 14167 -aW5lbnQ= 14168 -IFJlbmRlcg== 14169 -ZG0= 14170 -IE1lbW9yeQ== 14171 -cmljaA== 14172 -IFRvb2xz 14173 -IGtuZQ== 14174 -IHBlcm0= 14175 -YmFk 14176 -IGRpbm5lcg== 14177 -LnJlc2V0 14178 -IGpMYWJlbA== 14179 -RmVhdHVyZQ== 14180 -LlNlcnZpY2U= 14181 -ICh7Cg== 14182 -IHJlZmVycmVk 14183 -LmNsYXNzTGlzdA== 14184 -MjQ4 14185 -IGluaXRXaXRo 14186 -IFRleHRWaWV3 14187 -IG5laXRoZXI= 14188 -IGNvdW50eQ== 14189 -ICJ7 14190 -56c= 14191 -IHRhY2s= 14192 -Y2xhc3NOYW1l 14193 -IFVTRVI= 14194 -IHJlbmV3 14195 -YGA= 14196 -Z2V0TmFtZQ== 14197 -IGJyb3du 14198 -RXJyb3Jz 14199 -ZXJ0bw== 14200 -IHN1c3RhaW4= 14201 -U08= 14202 -bGV0ZXM= 14203 -IEludmFsaWQ= 14204 -MjQ2 14205 -MjI3 14206 -IGVuZW1pZXM= 14207 -dW5nZQ== 14208 -IGV4aXN0ZW5jZQ== 14209 -ZXJyYQ== 14210 -CiAgCg== 14211 -dXRvcmlhbA== 14212 -I2E= 14213 -cGF5 14214 -Y2hhcmdl 14215 -IElyZQ== 14216 -YXRlc3Q= 14217 -IGV4cGxvcw== 14218 -IGZpcmVk 14219 -TkVS 14220 -IFR5 14221 -aWNpb24= 14222 -VXJp 14223 -IG9idmlvdXNseQ== 14224 -IENvbHVt 14225 -ICcr 14226 -IERldmljZQ== 14227 -LXJlbGF0ZWQ= 14228 -X0FSRw== 14229 -IHZvcg== 14230 -IExlc3Nlcg== 14231 -X09Q 14232 -U2VyaWFsaXplcg== 14233 -IHVwZ3JhZGU= 14234 -TGlnaHQ= 14235 -IGNvZGVz 14236 -Kys7DQo= 14237 -IHdyaXRlcw== 14238 -Zm9vZA== 14239 -IMOpdA== 14240 -QHNlY3Rpb24= 14241 -IHRyYWNrcw== 14242 -IHNlcmlvdXNseQ== 14243 -Y2h0 14244 -NDMw 14245 -KHNpemVvZg== 14246 -IGltbWVkaWF0ZQ== 14247 -IHNjaWVudGlzdHM= 14248 -IHsk 14249 -X25l 14250 -LkFuY2hvclN0eWxlcw== 14251 -IGFjY29tbW9k 14252 -IEhhcnJ5 14253 -IHNpZ2h0 14254 -IFBhbGVzdA== 14255 -ZXJzaXN0ZW50 14256 -INGD 14257 -LWlucHV0 14258 -IGNvb3JkaW5hdGVz 14259 -wrc= 14260 -MjI4 14261 -V2VsY29tZQ== 14262 -LmNvbmY= 14263 -IGdyZXc= 14264 -IGJvbGQ= 14265 -IENQVQ== 14266 -KG15 14267 -IHBlcmZlY3RseQ== 14268 -IG1vbWVudHM= 14269 -IE1vdmll 14270 -LWRhdGE= 14271 -eXN0YWw= 14272 -X1dJRFRI 14273 -MjYy 14274 -IFNjcmVlbg== 14275 -5p0= 14276 -IGRpc2Fw 14277 -IHJlZHVjdGlvbg== 14278 -LkdldENvbXBvbmVudA== 14279 -X01PRFVMRQ== 14280 -IGdlbmVyaWM= 14281 -IGR5 14282 -YWxsZXI= 14283 -IGN1cmw= 14284 -IEJvZHk= 14285 -IGJhbmtz 14286 -LHQ= 14287 -YXZn 14288 -IGV2aWw= 14289 -IG1hbnVmYWN0dXJlcg== 14290 -IHJlY2VpdmVy 14291 -Q29sdW1ucw== 14292 -IGluZ3JlZGllbnRz 14293 -CW91dA== 14294 -cXVlcw== 14295 -LkxvYWQ= 14296 -IHNsb3dseQ== 14297 -IFRvd24= 14298 -IENlbGw= 14299 -X25vcm1hbA== 14300 -X3ByZWZpeA== 14301 -IEFsZXJ0 14302 -KCJ7 14303 -w6Ry 14304 -4oCcVGhl 14305 -IE1E 14306 -IGNvdXJzZXM= 14307 -YXRoYW4= 14308 -6Zk= 14309 -b2Nj 14310 -IFNFUg== 14311 -ZXNpZ24= 14312 -QWRkcg== 14313 -PVsn 14314 -KCIuLw== 14315 -XX0= 14316 -LmZvbnQ= 14317 -IEluc3RhZ3JhbQ== 14318 -IEJvcmRlcg== 14319 -b2Rh 14320 -IGhhbGw= 14321 -IHJ1bQ== 14322 -X2JpdA== 14323 -IHNhdmluZw== 14324 -X2Rvd24= 14325 -UmFuZG9t 14326 -X3JlZ2lzdGVy 14327 -KENvbnRleHQ= 14328 -IG9wcG9zaXRl 14329 -Um9vbQ== 14330 -WUVT 14331 -0LDQvdC4 14332 -IGVuam95ZWQ= 14333 -X3J1bg== 14334 -Q2xlYXI= 14335 -4oCY 14336 -IEZvcmQ= 14337 -b25pYw== 14338 -b3N0ZW4= 14339 -Il0p 14340 -X2F1dGg= 14341 -Ly8NCg== 14342 -IHN1ZmZpY2llbnQ= 14343 -TEVT 14344 -IHBoZW4= 14345 -IG9o 14346 -X2Nzdg== 14347 -IHJvdXRpbmU= 14348 -LkFyZUVxdWFs 14349 -YXlsb3I= 14350 -IGJhc2tldA== 14351 -X0NPTU0= 14352 -cnlwdGVk 14353 -U2lt 14354 -IFNob3A= 14355 -IHN0dWRpbw== 14356 -YXRvcw== 14357 -KFc= 14358 -W3N0cmluZw== 14359 -w6R0 14360 -b2dh 14361 -IHNocg== 14362 -IHNpY2s= 14363 -QW5vdGhlcg== 14364 -IGRvb3Jz 14365 -X05F 14366 -IFRIUkVF 14367 -Lm9yZGVy 14368 -cmF6aWw= 14369 -IG1hcHM= 14370 -X1RSVUU= 14371 -dHJhbnNsYXRl 14372 -IG5lYXJieQ== 14373 -MjY1 14374 -IG5hY2g= 14375 -TE9BVA== 14376 -YmF0Y2g= 14377 -MjI5 14378 -IGx1eA== 14379 -YXNoZXM= 14380 -YW5nZXJz 14381 -4oCm4oCm 14382 -X0VWRU5U 14383 -X1VQ 14384 -IGFjdHM= 14385 -aW52 14386 -X01FVEhPRA== 14387 -Y2Npb24= 14388 -IHJldGFpbg== 14389 -dXRjaA== 14390 -INCx 14391 -IGtub3dpbmc= 14392 -IHJlcHJlc2VudGluZw== 14393 -Tk9U 14394 -cG5n 14395 -Q29udHJhY3Q= 14396 -IHRyaWNr 14397 -IEVkaXRpb24= 14398 -dXBsaWNhdGU= 14399 -IGNvbnRyb2xsZWQ= 14400 -Y2Zn 14401 -amF2YXNjcmlwdA== 14402 -IG1pbGs= 14403 -V2hpdGU= 14404 -U2VxdWVuY2U= 14405 -YXdh 14406 -IGRpc2N1c3NlZA== 14407 -NTAx 14408 -IEJ1c2g= 14409 -IFlFUw== 14410 -LmZhY3Rvcnk= 14411 -dGFncw== 14412 -IHRhY3Q= 14413 -IHNpZA== 14414 -JCQ= 14415 -IEVudW0= 14416 -Mjc1 14417 -IGZyYW1lcw== 14418 -fSk7 14419 -IHJlZ3Vs 14420 -J107DQo= 14421 -UmVnaW9u 14422 -MzIx 14423 -ZmZm 14424 -IGNybw== 14425 -KGNvbQ== 14426 -PSIr 14427 -U3R1ZGVudA== 14428 -IGRpc2FwcG9pbnQ= 14429 -UkVTVUxU 14430 -Q291bnRlcg== 14431 -IGJ1dHRlcg== 14432 -IEhh 14433 -IERpZ2l0YWw= 14434 -IGJpZA== 14435 -Ij57ew== 14436 -aW5nZXJz 14437 -IENvdW50cnk= 14438 -X3RwbA== 14439 -Il0pCg== 14440 -L2s= 14441 -ZGF0aW5n 14442 -OiM= 14443 -IERBVEE= 14444 -eW5jaHJvbg== 14445 -X2JvZHk= 14446 -b2xseXdvb2Q= 14447 -IHZhbG9y 14448 -aXBpZW50 14449 -b2Z0 14450 -VUJM 14451 -ZG9jcw== 14452 -IHN5bmNocm9u 14453 -IGZvcm1lZA== 14454 -cnVwdGlvbg== 14455 -IGxpc3Rh 14456 -UmVxdWVzdE1hcHBpbmc= 14457 -IHZpbGxhZ2U= 14458 -IGtub2Nr 14459 -b2Nz 14460 -Ins= 14461 -X2ZsYWdz 14462 -IHRyYW5zYWN0aW9ucw== 14463 -IGhhYml0 14464 -IEpl 14465 -ZWRlbg== 14466 -IGFpcmNyYWZ0 14467 -aXJr 14468 -IEFC 14469 -IGZhaXJseQ== 14470 -LmludGVy 14471 -LkFjdA== 14472 -IGluc3RydW1lbnQ= 14473 -cmVtb3ZlQ2xhc3M= 14474 -LmNvbW1hbmQ= 14475 -0Yk= 14476 -CW1lbQ== 14477 -KG1pbg== 14478 -IG90 14479 -IGNvbGxl 14480 -PXM= 14481 -dGltZW91dA== 14482 -IGlkcw== 14483 -IE1hdGNo 14484 -aWpu 14485 -emVybw== 14486 -NDEw 14487 -IG5ldHdvcmtz 14488 -Lmdvdg== 14489 -IGludGVs 14490 -IHNlY3Rpb25z 14491 -b3V0aW5l 14492 -KGNtZA== 14493 -KGRpcg== 14494 -IExJQUJJTElUWQ== 14495 -IEJsb2c= 14496 -IGJyaWRnZQ== 14497 -MzA4 14498 -IENW 14499 -Y29udmVydA== 14500 -ICIpCg== 14501 -IEJlcm4= 14502 -X1BP 14503 -ZXZhbA== 14504 -KHNldA== 14505 -dG9vbA== 14506 -IHBheW1lbnRz 14507 -QmVoYXZpb3Vy 14508 -IGNvbmNyZXRl 14509 -IGVsaWc= 14510 -IGFjY2VsZXI= 14511 -IGhvbGU= 14512 -X28= 14513 -VEVHRVI= 14514 -IGdyYXBoaWNz 14515 -T3du 14516 -Rm9ybWF0dGVy 14517 -b25kZXI= 14518 -IHBhY2thZ2Vz 14519 -L2E= 14520 -IEtub3c= 14521 -T3JEZWZhdWx0 14522 -IGR1dHk= 14523 -V2FpdA== 14524 -0L3QsA== 14525 -X3JlY29yZA== 14526 -W3Q= 14527 -TWVzaA== 14528 -IG9uZ29pbmc= 14529 -LmJlYW5z 14530 -IHRhbg== 14531 -IGludGVycHJldA== 14532 -YXN0ZXJz 14533 -UVVBTA== 14534 -IGxlZ3M= 14535 -XFJlcXVlc3Q= 14536 -LWZpbGU= 14537 -X211dGV4 14538 -IFNhaW50 14539 -Ly8j 14540 -IHByb2hpYg== 14541 -KGluZm8= 14542 -Oj0= 14543 -bGludXg= 14544 -IGJsbw== 14545 -b3RpYw== 14546 -CWZpbmFs 14547 -X2V4cA== 14548 -IFN0b3A= 14549 -YXBpbmc= 14550 -KHNhdmVk 14551 -X3B1c2g= 14552 -IGVhc2U= 14553 -X0ZS 14554 -cG9uc2l2ZQ== 14555 -c3RyY21w 14556 -OgoKCgo= 14557 -5Lu2 14558 -b2xp 14559 -IGV4dHJlbWU= 14560 -IHByb2Zlc3Nvcg== 14561 -SW1hZ2Vz 14562 -LklPRXhjZXB0aW9u 14563 -IGFkZHJlc3Nlcw== 14564 -cGxlbWVudGVk 14565 -IGluY29ycG9y 14566 -IHVzZUVmZmVjdA== 14567 -X09G 14568 -IERh 14569 -bm9tYnJl 14570 -SVJTVA== 14571 -IGRpc2NyaW0= 14572 -IGNvbXBlbnM= 14573 -Z3JlZ2F0ZQ== 14574 -YW5jZWxs 14575 -YWNoZXM= 14576 -IENyaXRlcmlh 14577 -JHJlc3VsdA== 14578 -RGVzdHJveQ== 14579 -IHNlY29uZGFyeQ== 14580 -V2F0Y2g= 14581 -IFNlbQ== 14582 -IE1jQw== 14583 -IGFjYWRlbWlj 14584 -VXBwZXI= 14585 -Ojp+ 14586 -dXRyYWw= 14587 -IERvZw== 14588 -YWRlZA== 14589 -MjM3 14590 -VmFsaWRhdG9y 14591 -IGRlcml2ZWQ= 14592 -IHNldFRpbWVvdXQ= 14593 -IEtlbg== 14594 -IHR5cGljYWw= 14595 -IEJvYg== 14596 -IGJvdW5kcw== 14597 -IFNlYXNvbg== 14598 -IGNyYXp5 14599 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 14600 -LXJvdXRlcg== 14601 -aXR0ZXN0 14602 -IE1pcg== 14603 -IGVtb3Rpb25hbA== 14604 -LHY= 14605 -Y24= 14606 -L3N0 14607 -5b0= 14608 -b25vbQ== 14609 -IGRlY2xhcmVk 14610 -Pi4= 14611 -YWlsaW5n 14612 -IC8qPDw8 14613 -IG5vcm1hbGx5 14614 -KE1l 14615 -ZXZpbg== 14616 -bGlrZWx5 14617 -IHBvaW50ZWQ= 14618 -IFN0YWNr 14619 -IHdhbGxz 14620 -LlZlY3Rvcg== 14621 -bWVhbg== 14622 -XV0K 14623 -IGxpc3RlbmluZw== 14624 -YWR2 14625 -IHN3YXA= 14626 -SUZU 14627 -2Ko= 14628 -LmFyZ3Y= 14629 -dWxz 14630 -PG9wdGlvbg== 14631 -bm90YXRpb25z 14632 -IGVtYWlscw== 14633 -IFVrcg== 14634 -YXN0YQ== 14635 -IFRodXM= 14636 -IFN0b25l 14637 -IGFwcGVhbA== 14638 -LuKAmQ== 14639 -IHJlZ3VsYXRpb25z 14640 -UHJlZmVyZW5jZXM= 14641 -IFBob25l 14642 -dWxm 14643 -IERS 14644 -IHRlY2hub2xvZ2llcw== 14645 -IHBhcmFncmFwaA== 14646 -IG5lY2Vzc2FyaWx5 14647 -Mzcw 14648 -MDMw 14649 -LmVhY2g= 14650 -PGZsb2F0 14651 -cmVzYQ== 14652 -IHVuZGVyc3Q= 14653 -IGZpbmdlcg== 14654 -cHJlc3NlZA== 14655 -LWJ5 14656 -aWZmZXI= 14657 -d2F0Y2g= 14658 -IEJh 14659 -QUlN 14660 -IHdlaWdodHM= 14661 -IFJvbg== 14662 -Jyl9fQ== 14663 -W3NlbGY= 14664 -LS0tLS0tLS0tLQo= 14665 -cGVyaW1lbnQ= 14666 -IHRvU3RyaW5n 14667 -eGlj 14668 -IENhbWVyYQ== 14669 -IQoKCgo= 14670 -YXVyYW50 14671 -UHJlZml4 14672 -IGluc3RpdHV0aW9ucw== 14673 -OmludA== 14674 -IGV4cG9zdXJl 14675 -cGF0dGVybg== 14676 -IExpbnV4 14677 -Lm51bWJlcg== 14678 -cmVkaWVudA== 14679 -QXJndW1lbnRFeGNlcHRpb24= 14680 -IENoaWVm 14681 -In0s 14682 -IGVsZWN0cm9uaWM= 14683 -cm9uZw== 14684 -ZXJk 14685 -c3BOZXQ= 14686 -cmFpdA== 14687 -Lycs 14688 -IE9oaW8= 14689 -Q29udHJvbGxlcnM= 14690 -IGNvbnRpbnVpbmc= 14691 -IFRlbXBsYXRl 14692 -IEV0aA== 14693 -c3o= 14694 -L2Vudg== 14695 -RW52 14696 -JS4= 14697 -YXJ0ZXJz 14698 -KSgo 14699 -IFRBQkxF 14700 -IMOu 14701 -cGVyYXR1cmU= 14702 -cHJvZ3Jlc3M= 14703 -UHJlcw== 14704 -6rA= 14705 -aW1wbGVtZW50YXRpb24= 14706 -IGJpZW4= 14707 -IHN0cmVldHM= 14708 -X01TRw== 14709 -TmV3cw== 14710 -IyMj 14711 -Oi8= 14712 -IGN1dHRpbmc= 14713 -eEI= 14714 -cmVzc2Vk 14715 -X0VOQUJMRQ== 14716 -bGFi 14717 -IGNhdXNpbmc= 14718 -XSkpOwo= 14719 -YnJh 14720 -eEZGRkY= 14721 -aWxseQ== 14722 -cGxldGlvbg== 14723 -d2lsbA== 14724 -X2Jhcg== 14725 -IHN0cnVjdHVyZXM= 14726 -IEltcA== 14727 -24w= 14728 -IDw+ 14729 -IC0tLS0tLS0tLS0tLS0tLS0= 14730 -X0JVRkZFUg== 14731 -LmRpcg== 14732 -IHBsYWlu 14733 -IHBlZXI= 14734 -MjQ5 14735 -Z2c= 14736 -b2ludHM= 14737 -IHNvbWV3aGF0 14738 -IHdldA== 14739 -IGVtcGxveW1lbnQ= 14740 -IHRpY2tldHM= 14741 -aXJtcw== 14742 -IHR1cGxl 14743 -c2lz 14744 -JHNxbA== 14745 -cmln 14746 -IGNvbnZlcnNpb24= 14747 -IGdlcw== 14748 -IGNvbmZpZ3VyZQ== 14749 -ZWdy 14750 -IENh 14751 -IF9fKCc= 14752 -b3VzdG9u 14753 -LnRva2Vu 14754 -QmxhY2s= 14755 -IG1hZ2F6aW5l 14756 -QVc= 14757 -LklO 14758 -b3Npbmc= 14759 -IGJyb2tl 14760 -IENydQ== 14761 -REVMRVRF 14762 -IGRlc3Ryb3llZA== 14763 -KE1hdGg= 14764 -IGFwcHJvdmFs 14765 -LWRvbQ== 14766 -IElJSQ== 14767 -dGFibGVWaWV3 14768 -IGRlc2lnbnM= 14769 -IGNydXNoaW5n 14770 -IGNvbnNlbnQ= 14771 -ZGlybmFtZQ== 14772 -b21w 14773 -IGNyeXB0 14774 -Pyg= 14775 -b3JvdWdo 14776 -MzA3 14777 -Lm8= 14778 -CWxpc3Q= 14779 -YW1zdW5n 14780 -LiIiIgo= 14781 -ZXJyaW5n 14782 -R29vZ2xl 14783 -X3BhaXI= 14784 -X0lOSVQ= 14785 -cmVtYXJrcw== 14786 -IGdlYXI= 14787 -RmlsbA== 14788 -bGlmZQ== 14789 -fSIpCg== 14790 -IHN1aXRhYmxl 14791 -IHN1cnByaXNlZA== 14792 -X1JFUVVFU1Q= 14793 -IG1hbmlmZXN0 14794 -YXR0ZW4= 14795 -IGZydXN0cg== 14796 -b3ZlbWVudA== 14797 -LmNsaWNr 14798 -IGlp 14799 -IGV4cGFuc2lvbg== 14800 -aWdz 14801 -UGFyc2U= 14802 -LlJlZ3VsYXI= 14803 -Um9i 14804 -X2xheW91dA== 14805 -7KA= 14806 -IHRyYW5zbGF0aW9u 14807 -IEJlYXV0 14808 -QmVzdA== 14809 -X0NPTE9S 14810 -PGxhYmVs 14811 -IGxpcXVpZA== 14812 -SVRT 14813 -IHByb2Q= 14814 -MjM5 14815 -IG9wZXJhdGU= 14816 -VUlLaXQ= 14817 -IG5hdHVy 14818 -YXJndW1lbnQ= 14819 -X2RldGFpbA== 14820 -IENlbnRyZQ== 14821 -ICItLQ== 14822 -IH19Ig== 14823 -bG9jYWxl 14824 -LnR2 14825 -X3NlcQ== 14826 -IHVwY29taW5n 14827 -Q2hhcnQ= 14828 -IERpdmlzaW9u 14829 -IGNsaW5pY2Fs 14830 -Q29tcGFueQ== 14831 -U2VwYXI= 14832 -bGFz 14833 -IEh1bg== 14834 -OnM= 14835 -IGhlYWRpbmc= 14836 -0L7Qsw== 14837 -ICIiKTsK 14838 -W2lk 14839 -Ymlh 14840 -IHN0cmV0Y2g= 14841 -aWNpZGU= 14842 -IHJlcHJvZHU= 14843 -LnByb2plY3Q= 14844 -bGVnZW5k 14845 -ZW5kZXJz 14846 -IHJlc3BvbnNlcw== 14847 -IG9udA== 14848 -cml0aWNhbA== 14849 -IHJlZnVnZQ== 14850 -IExp 14851 -IDoKCg== 14852 -IFRocmVl 14853 -LmNvbnRyb2xsZXI= 14854 -X0lOREVY 14855 -X0ZPUg== 14856 -XE1vZGVscw== 14857 -amF4 14858 -CWV4aXQ= 14859 -IOKW 14860 -IGNvdmVycw== 14861 -CXk= 14862 -LS4= 14863 -SU5ET1c= 14864 -IGZhaWxz 14865 -aW5jbHVkZXM= 14866 -IGZhdWx0 14867 -NDQw 14868 -IGx5 14869 -NDQ0 14870 -w7Fv 14871 -LnNsaWNl 14872 -SUxFRA== 14873 -IFB1cg== 14874 -IEFzaWFu 14875 -X2JhdGNo 14876 -Lk1heA== 14877 -dmw= 14878 -IENPUFlSSUdIVA== 14879 -IGdpYW50 14880 -IE1hbnVhbA== 14881 -IENvcHk= 14882 -Q2xhc3NOYW1l 14883 -SGVhbHRo 14884 -Q3Vyc29y 14885 -SUJPdXRsZXQ= 14886 -IHR3ZQ== 14887 -5rM= 14888 -X2xhYmVscw== 14889 -IGNvbGxlY3RlZA== 14890 -IGZ1cm5pdHVyZQ== 14891 -IGRlYWxpbmc= 14892 -Q29udHJvbHM= 14893 -IEhvdGVs 14894 -Y2tz 14895 -IGNob3Nl 14896 -4pSA 14897 -b2Rk 14898 -U1I= 14899 -2Yo= 14900 -7IQ= 14901 -IGFjY29yZA== 14902 -IE1vdmU= 14903 -IE1vZGU= 14904 -IE1vY2s= 14905 -IHRocmVhZHM= 14906 -KysrKw== 14907 -IE9wdGlvbnM= 14908 -UmVmcmVzaA== 14909 -IERpZA== 14910 -J10tPg== 14911 -dWNj 14912 -X2NoYW5uZWw= 14913 -LmFicw== 14914 -IHt9LAo= 14915 -IFdhbA== 14916 -ZXJpb3I= 14917 -IG1haW5seQ== 14918 -IERyaXZlcg== 14919 -Tm90Rm91bmRFeGNlcHRpb24= 14920 -IGNvdW50cw== 14921 -ZWFt 14922 -ICY9 14923 -UXVlc3Rpb24= 14924 -IEFsaQ== 14925 -IGFueW1vcmU= 14926 -ZGV0YWls 14927 -dGFpbA== 14928 -IG1pbGU= 14929 -IEZhaXI= 14930 -IHNvcnJ5 14931 -IHN1cnJvdW5kaW5n 14932 -IGFkbQ== 14933 -RGV2 14934 -IG1hcmlqdWFuYQ== 14935 -IFNvdW5k 14936 -IEFzaA== 14937 -RkQ= 14938 -VGVhbQ== 14939 -LnBvcnQ= 14940 -IFtdCgo= 14941 -dWJibGU= 14942 -IGFzYw== 14943 -IGludGVudGlvbg== 14944 -QWNj 14945 -Y2hp 14946 -dXN0ZXJz 14947 -IGluc3BpcmVk 14948 -c2Vn 14949 -Q0xV 14950 -IG1hbmlw 14951 -TWV0YWRhdGE= 14952 -Q29ubmVjdA== 14953 -IEJlaA== 14954 -IGZpbmRpbmdz 14955 -IGFzc2VtYmx5 14956 -d29ybGQ= 14957 -IHJlbWFpbmVk 14958 -IHVpZA== 14959 -KC4= 14960 -IG14 14961 -TG9vcA== 14962 -CgoKCgo= 14963 -IGZhbnRhc3RpYw== 14964 -d2hv 14965 -YWtp 14966 -IEJhc2lj 14967 -IFlldA== 14968 -IFVzZXJz 14969 -aWtpcA== 14970 -IGhlYWRz 14971 -IE1pY2hpZ2Fu 14972 -X2l0 14973 -IFRvcm9udG8= 14974 -IHJlY29yZGluZw== 14975 -IHN1Ym1pdHRlZA== 14976 -X3ZhcmlhYmxl 14977 -bWVkaWF0ZQ== 14978 -LmdyYXBoaWNz 14979 -IHN0b29k 14980 -IHJlYXI= 14981 -dmVsb2NpdHk= 14982 -X01FU1NBR0U= 14983 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 14984 -cm9sZXM= 14985 -IFRvdXI= 14986 -X3llYXI= 14987 -ZW5kbWVudA== 14988 -YW1wcw== 14989 -IElyZWxhbmQ= 14990 -bWFs 14991 -IHlvdW5nZXI= 14992 -IHN0cnVnZ2xl 14993 -IGNhYmxl 14994 -IFNETA== 14995 -KCct 14996 -YW5lcw== 14997 -IE5lZWQ= 14998 -LlJvdw== 14999 -UG9s 15000 -IFBI 15001 -X3NjcmlwdA== 15002 -YWdlbQ== 15003 -IEJhcw== 15004 -X3NwYWNl 15005 -LmxvYw== 15006 -Omk= 15007 -YWRy 15008 -IGVuZ2luZWVyaW5n 15009 -aXRlbg== 15010 -KSY= 15011 -IHVr 15012 -IExpdHRsZQ== 15013 -X0NPVU5U 15014 -eEE= 15015 -QXJyYXlMaXN0 15016 -5o0= 15017 -ICIiKQo= 15018 -QW5jaG9y 15019 -IGhhbmc= 15020 -dHdpdHRlcg== 15021 -IGNvbXBldGl0aXZl 15022 -LnNyYw== 15023 -44GX 15024 -IHRyYW5zbGF0ZQ== 15025 -IENyZWF0ZXM= 15026 -b29rcw== 15027 -IFJvbGw= 15028 -JycnCg== 15029 -L3No 15030 -c29tZQ== 15031 -RW5jb2Rpbmc= 15032 -LnJlc29sdmU= 15033 -IGRlc2lnbmVy 15034 -IFN0b3JhZ2U= 15035 -IHph 15036 -IE5ldmVy 15037 -IHNvbWV3aGVyZQ== 15038 -IGJveGVz 15039 -LnNvdXJjZQ== 15040 -IHB5Z2FtZQ== 15041 -IGdyb3du 15042 -LnR3 15043 -KCkpLAo= 15044 -JyxbJw== 15045 -IG9wcG9uZW50 15046 -KHNyYw== 15047 -LmxheWVy 15048 -QVBQ 15049 -IEFjdGl2 15050 -IGd1ZXN0cw== 15051 -IFZBTFVFUw== 15052 -fTsKCgo= 15053 -Lm5hdGl2ZQ== 15054 -IGFtb3VudHM= 15055 -LlJF 15056 -IGNsb25l 15057 -IHdlcmVu 15058 -ICI8PA== 15059 -X2Fj 15060 -IGJyZWFraW5n 15061 -IHJlbGlhYmxl 15062 -LlBPU1Q= 15063 -IFNreQ== 15064 -ICcm 15065 -IHNhdmVkSW5zdGFuY2VTdGF0ZQ== 15066 -YXN0aW5n 15067 -aWxsaW9u 15068 -Y29tbWVudHM= 15069 -dWx0eQ== 15070 -Lm1lbnU= 15071 -L2NvbmZpZw== 15072 -IAoKCg== 15073 -VE9ETw== 15074 -IHB1cmNoYXNlZA== 15075 -X2Nvcg== 15076 -CWF1dG8= 15077 -Q29tcGF0QWN0aXZpdHk= 15078 -Y29tcGxldGU= 15079 -X2dyYXBo 15080 -aXNvZGVz 15081 -IHNpdHVhdGlvbnM= 15082 -IEhvcg== 15083 -UmVjZWl2ZQ== 15084 -4oCcV2U= 15085 -IGVudGl0aWVz 15086 -LmFzc2VydEVxdWFscw== 15087 -0L7Qug== 15088 -IFNhbnM= 15089 -dmluY2U= 15090 -cm9tcHQ= 15091 -PQo= 15092 -IC8u 15093 -LlNlbGVjdA== 15094 -eWx2 15095 -IGJhdHQ= 15096 -QXVkaW8= 15097 -IGluY3JlYXNpbmdseQ== 15098 -LkJ1bmRsZQ== 15099 -IGV4cGxhaW5z 15100 -MDYw 15101 -dGhlYXN0 15102 -Lm9mZnNldA== 15103 -IGhhbA== 15104 -IHRlY2huaXF1ZQ== 15105 -X2xpbWl0 15106 -IGRyYXdu 15107 -QVlFUg== 15108 -IGZlYXR1cmVk 15109 -eXl5eQ== 15110 -YXRpbg== 15111 -cGhlbg== 15112 -YWNoZWw= 15113 -IVw= 15114 -bG93ZXI= 15115 -IEdS 15116 -IHBhZw== 15117 -IFBhcnNl 15118 -IHRvdQ== 15119 -5LiA 15120 -RGlzdGFuY2U= 15121 -SW5kZXhQYXRo 15122 -IGhlbGw= 15123 -c2lt 15124 -VVRUT04= 15125 -VXNhZ2U= 15126 -ZWxlbml1bQ== 15127 -IEZhbGw= 15128 -ICIuJA== 15129 -IE11 15130 -IGNydWM= 15131 -IHNvbnQ= 15132 -UkVGSVg= 15133 -MzEx 15134 -IGludGVyaW9y 15135 -IE9seW1w 15136 -LkF1dG9TY2FsZQ== 15137 -cGFyYQ== 15138 -QXhpc0FsaWdubWVudA== 15139 -IHJpdmVy 15140 -RHRv 15141 -IHdpdGhkcmF3 15142 -UmVhY3Q= 15143 -LWNsYXNz 15144 -YmVmb3Jl 15145 -X2FsbG9j 15146 -Q29udGVudHM= 15147 -IFdhcw== 15148 -SUNU 15149 -IGZvcm11bGE= 15150 -IGluZGljYXRlcw== 15151 -ICAgIAoK 15152 -X3N0b3Jl 15153 -aXR0aW5n 15154 -IEl0YWxpYW4= 15155 -X1NldA== 15156 -X3JlcG9ydA== 15157 -IHBpZA== 15158 -X1ZFUg== 15159 -IHdpbnM= 15160 -IENsb3Vk 15161 -Iil7Cg== 15162 -Y2hlc3Rlcg== 15163 -IGRlbmllZA== 15164 -IHdpcmQ= 15165 -IFN0ZXA= 15166 -IGludmVzdG9ycw== 15167 -Ym9sZA== 15168 -X2Rpc3BsYXk= 15169 -b3V2ZXI= 15170 -b3Jlcg== 15171 -UmVzZXQ= 15172 -IHN1cmdlcnk= 15173 -IHN0cmF0ZWdpZXM= 15174 -L21hdGVyaWFs 15175 -X3VuaXQ= 15176 -IGNvdW5jaWw= 15177 -LlBlcg== 15178 -IOKAng== 15179 -IHJlZm9ybQ== 15180 -RnJhbWV3b3Jr 15181 -IGxpc3Rpbmc= 15182 -X2J0bg== 15183 -IGJpcw== 15184 -JWQ= 15185 -ZWdhcw== 15186 -IHN1ZGRlbmx5 15187 -X1NFUg== 15188 -MzE1 15189 -IGFv 15190 -X2RpcmVjdG9yeQ== 15191 -ZmFz 15192 -IHByZW1pdW0= 15193 -IHRyYWNraW5n 15194 -IEJM 15195 -IG1hdHVyZQ== 15196 -IGJhdGhyb29t 15197 -ICcvJw== 15198 -IMSR 15199 -UGVyZm9ybWVk 15200 -IHNvbGRpZXJz 15201 -YXJuaW5ncw== 15202 -IHdhbGtlZA== 15203 -LWNvbg== 15204 -Ym90dG9t 15205 -IHN1cnByaXNpbmc= 15206 -IGdlbmU= 15207 -VXN1YXJpbw== 15208 -LkRFRkFVTFQ= 15209 -IE1JVA== 15210 -Q09ERQ== 15211 -IEVneXB0 15212 -cGlja2Vy 15213 -eXNxbA== 15214 -QVRVUkU= 15215 -ZGV0YWlscw== 15216 -IENvbmZlcmVuY2U= 15217 -SW5mb3JtYXRpb24= 15218 -IE1haWw= 15219 -LWRvd24= 15220 -cmFyaWVz 15221 -YnJv 15222 -IHN1YmplY3Rz 15223 -ICcq 15224 -6K+3 15225 -b3JpZW50 15226 -OkA= 15227 -dmVyYm9zZQ== 15228 -RUY= 15229 -IHRvbGVy 15230 -MzEz 15231 -ZW5nZXJz 15232 -IGVuZHBvaW50 15233 -IHN0cmFuZ2U= 15234 -IGNvbG9u 15235 -IHByZWZlcnJlZA== 15236 -ZGVw 15237 -IEVW 15238 -QVJSQVk= 15239 -IHdoZQ== 15240 -IHB1cA== 15241 -X25vZGVz 15242 -IHRhbGtlZA== 15243 -IGluc3RpdHV0aW9u 15244 -ZGJj 15245 -IGV4cG9zZWQ= 15246 -dGVlbg== 15247 -IEZyb250 15248 -VFQ= 15249 -X05PTkU= 15250 -XC9cLw== 15251 -cHJvZ3JhbQ== 15252 -IGVuY291cmFnZQ== 15253 -LmA= 15254 -c2hpcmU= 15255 -IElzbGFt 15256 -MzI1 15257 -ZWVu 15258 -Tkk= 15259 -JyI= 15260 -LldpZHRo 15261 -IGxpa2Vk 15262 -IHsuLi4= 15263 -IFN5c3RlbXM= 15264 -IHZvdHJl 15265 -IG1hbnVmYWN0dXJpbmc= 15266 -Q29udmVydGVy 15267 -IEluZg== 15268 -7Jo= 15269 -RFRP 15270 -IGluY2hlcw== 15271 -IOCk 15272 -w7k= 15273 -IENoYXJsZXM= 15274 -QlU= 15275 -IikpOwoK 15276 -IExhYm9y 15277 -dW5u 15278 -IGVzdGlt 15279 -bW9iaWxl 15280 -IExlYXJu 15281 -Mjgx 15282 -X0NBTEw= 15283 -4oQ= 15284 -IGluZGljZXM= 15285 -IHR1Yg== 15286 -Mjg4 15287 -aWtpcGVkaWE= 15288 -Q29zdA== 15289 -cm93YWJsZQ== 15290 -66E= 15291 -Z2FnZQ== 15292 -IGZ1bmN0aW9uYWxpdHk= 15293 -dXp6bGU= 15294 -ZW1vcw== 15295 -LmxpYg== 15296 -IGRhc3M= 15297 -0LXQug== 15298 -ZW5uYQ== 15299 -IHNob3Rz 15300 -IHJlc3RvcmU= 15301 -L0Q= 15302 -Rm9yS2V5 15303 -XSxb 15304 -YWxpYXM= 15305 -bGludA== 15306 -LnN0cmVhbQ== 15307 -5qA= 15308 -X0ZPUk1BVA== 15309 -IHNpbHZlcg== 15310 -LnJlcG9zaXRvcnk= 15311 -IGxlZ2lzbA== 15312 -LkJvcmRlcg== 15313 -X2ZlYXR1cmVz 15314 -UGVybWlzc2lvbg== 15315 -IGhvdXNlcw== 15316 -IFdhcnM= 15317 -X0NPTVA= 15318 -IGluanVyaWVz 15319 -IGNvbnN0YW50bHk= 15320 -Zmx1dHRlcg== 15321 -RU5V 15322 -IENvbmY= 15323 -IHJlY29nbml6ZWQ= 15324 -IHByYWN0aWNhbA== 15325 -IGRlY2VudA== 15326 -Qko= 15327 -XSk7 15328 -YXN0eQ== 15329 -IEFjdGl2aXR5 15330 -LW1vZGU= 15331 -IHNsaWRl 15332 -LklzTnVsbE9yRW1wdHk= 15333 -IFlPVQ== 15334 -UG93ZXI= 15335 -aW5kaWNlcw== 15336 -IHF1YWxpZmllZA== 15337 -IHRocm93bg== 15338 -aGVsbG8= 15339 -MzE2 15340 -IE5pY2s= 15341 -bGFo 15342 -YXNzZW1ibHk= 15343 -IFNtYWxs 15344 -b2xkaW5n 15345 -U2hvdWxk 15346 -IFNpbHZlcg== 15347 -KHNhdmVkSW5zdGFuY2VTdGF0ZQ== 15348 -IHRvZ2dsZQ== 15349 -Lk5vdA== 15350 -Q3RybA== 15351 -Om5pbA== 15352 -IENvbnRpbnVl 15353 -IEJvb3Q= 15354 -5ok= 15355 -IE11cg== 15356 -ZG9u 15357 -IEZB 15358 -U25hcHNob3Q= 15359 -IGFzc29jaWF0aW9u 15360 -Zm94 15361 -LGE= 15362 -YXppb25l 15363 -XSkNCg== 15364 -Q1RZUEU= 15365 -IGZhZGU= 15366 -IERhcg== 15367 -Lm5hdmlnYXRpb24= 15368 -IGx1Y2s= 15369 -U0NSSQ== 15370 -IERlYWQ= 15371 -IHRlcm1pbmFs 15372 -X0xFTkdUSA== 15373 -IGVmZmljaWVuY3k= 15374 -IHVudw== 15375 -IG5hcnJvdw== 15376 -aW1lbnRv 15377 -KENvbG9y 15378 -IFNlYQ== 15379 -X2FyZWE= 15380 -LEE= 15381 -X29wdA== 15382 -IEhpbGxhcnk= 15383 -LnRhc2s= 15384 -IEphYw== 15385 -YXN0ZWQ= 15386 -IEFkYW0= 15387 -IElsbGVnYWw= 15388 -IHNlYXJjaGluZw== 15389 -SW5zdGFuY2VPZg== 15390 -SmF2YQ== 15391 -IEZvcm1hdA== 15392 -IHJlYWxpemVk 15393 -IENoaWxkcmVu 15394 -IGtpbA== 15395 -KGZyYW1l 15396 -4oCdLgoK 15397 -IHNjZW5hcmlv 15398 -Il0pOwo= 15399 -IGluY3JlZGlibGU= 15400 -bGl4 15401 -SU9FeGNlcHRpb24= 15402 -IFF1ZXN0 15403 -aWx0eQ== 15404 -IHVubG9jaw== 15405 -4oKs 15406 -IHJlZmVyZW5jZXM= 15407 -IFZlcnQ= 15408 -QmluZGluZw== 15409 -ZWdhdGl2ZQ== 15410 -IHdyYXA= 15411 -LmRhdGFiYXNl 15412 -KGNvbnRlbnQ= 15413 -QnVm 15414 -IFRyYWQ= 15415 -IEF1ZA== 15416 -dHJhY2U= 15417 -Lm1vY2s= 15418 -IHRoZXJhcHk= 15419 -CUw= 15420 -LlRvSW50 15421 -IEtpbmdkb20= 15422 -QnVz 15423 -aGF1c3Q= 15424 -IiIiCgo= 15425 -KGVuZA== 15426 -LmRyYXdhYmxl 15427 -W107Cg== 15428 -IEhvc3BpdGFs 15429 -IHBoYXJt 15430 -LS0tLS0= 15431 -IEFH 15432 -w6lk 15433 -PiIpOwo= 15434 -IHdhbGxldA== 15435 -YXRhYmxl 15436 -KSQ= 15437 -IG1vbnRobHk= 15438 -IGRpYWdub3N0aWM= 15439 -U3ltYm9s 15440 -IGl0ZXJhdG9y 15441 -dW5maW5pc2hlZA== 15442 -IGltbWlncmF0aW9u 15443 -c3I= 15444 -Uk9X 15445 -KGdhbWU= 15446 -IGNsb3RoZXM= 15447 -IFVudA== 15448 -IGFjdGl2YXRpb24= 15449 -X0Nvbg== 15450 -Mjcz 15451 -Lmhhc2g= 15452 -IGluaXRpYWxseQ== 15453 -Lkhhc2g= 15454 -IGN1dHM= 15455 -Zm91bmQ= 15456 -IFN0b3J5 15457 -0YbQuA== 15458 -YWNhbw== 15459 -X1RZUA== 15460 -cHJvdG8= 15461 -ZXN0cg== 15462 -LXBhZ2U= 15463 -YWhy 15464 -IGluY29ycmVjdA== 15465 -IEpvc2VwaA== 15466 -VGV4dEJveENvbHVtbg== 15467 -X3N0eWxl 15468 -IERhbmllbA== 15469 -c2hlZXQ= 15470 -IGxpdg== 15471 -bGluZWQ= 15472 -IHJh 15473 -UnVudGltZQ== 15474 -X2VtcHR5 15475 -c2x1Zw== 15476 -X3N0cnVjdA== 15477 -64o= 15478 -bXU= 15479 -IHBlcm1pdHRlZA== 15480 -IHJlZ2lvbmFs 15481 -IHNvYnJl 15482 -IFN1Y2g= 15483 -IFtf 15484 -IHJvb2Y= 15485 -LkFsaWdubWVudA== 15486 -dGltZXM= 15487 -Lm1zZw== 15488 -IGNoZXN0 15489 -IFRhYg== 15490 -IGVzdGE= 15491 -w6Ru 15492 -IHN1YnNjcmlwdGlvbg== 15493 -KGNvbW1hbmQ= 15494 -c3BlY2lhbA== 15495 -IG1lYWw= 15496 -Iik6Cg== 15497 -X2N0eA== 15498 -IGNsb3NlbHk= 15499 -MzA5 15500 -ZXRyeQ== 15501 -LWJl 15502 -YWRlbA== 15503 -IFJhbQ== 15504 -aWdlc3Q= 15505 -IFNwYW5pc2g= 15506 -IGNvbW1pdG1lbnQ= 15507 -IHdha2U= 15508 -Kj4o 15509 -UEhQ 15510 -X3s= 15511 -Y2tlcg== 15512 -PExpc3Q= 15513 -X251bGw= 15514 -Mzkw 15515 -IFJlc2VydmVk 15516 -IGluaGVy 15517 -LkNvbHVtbnM= 15518 -LkFzcE5ldA== 15519 -X0lOVkFMSUQ= 15520 -IFBhcmFtZXRlcg== 15521 -IGV4cHI= 15522 -fXs= 15523 -Q2VsbFN0eWxl 15524 -IHZhbHVhYmxl 15525 -IGZ1bm55 15526 -SW52 15527 -IHN0YWJsZQ== 15528 -KnQ= 15529 -IHBpbGw= 15530 -Mjk5 15531 -cGxpZXJz 15532 -IENTUw== 15533 -IENvbmRpdGlvbg== 15534 -IFNwZWVk 15535 -dWJsaXNoZXI= 15536 -MjU5 15537 -IG9mZmVuc2l2ZQ== 15538 -Y2VzdA== 15539 -aWNhcw== 15540 -IHNwYXJr 15541 -IFByb3Rl 15542 -c2V0dXA= 15543 -SUZZ 15544 -IFRheA== 15545 -V2hv 15546 -RmFtaWx5 15547 -LWZvcg== 15548 -LnVr 15549 -IGZhc2M= 15550 -c3Zn 15551 -IikpLg== 15552 -IGJpcnRoZGF5 15553 -4paI 15554 -dmVo 15555 -ZWxsZWQ= 15556 -IGltcG9ydHM= 15557 -IElzbGFtaWM= 15558 -VEE= 15559 -IFN0YW4= 15560 -d2VhdGhlcg== 15561 -IHN1c3BlY3Q= 15562 -ZWF0dXJl 15563 -ZW5uZXM= 15564 -V00= 15565 -Lm1pbmVjcmFmdA== 15566 -YXZpZA== 15567 -6L0= 15568 -LnNlY3VyaXR5 15569 -aW5vcw== 15570 -R29vZA== 15571 -IG1hcmNo 15572 -NjU1 15573 -MjU3 15574 -IHBvc3Nlc3M= 15575 -dXN1YXJpbw== 15576 -Q29ucw== 15577 -YW1iZXI= 15578 -Y2hlZHVsZXI= 15579 -IGhvcnNl 15580 -570= 15581 -KGJvZHk= 15582 -IFRyYW5zZm9ybQ== 15583 -X2RlY29kZQ== 15584 -LnN2Zw== 15585 -IGZvbw== 15586 -IGRlbGxh 15587 -ZXh0ZW5kcw== 15588 -YW1lcg== 15589 -IHByb2Nlc3NlZA== 15590 -IEhhcnI= 15591 -IEFJ 15592 -IGtv 15593 -Q0hBUg== 15594 -KCU= 15595 -IHRhcA== 15596 -KHsn 15597 -Y3JvbGw= 15598 -RE9N 15599 -IHRlYQ== 15600 -IHJlaW4= 15601 -MjYx 15602 -IHdvcmxkd2lkZQ== 15603 -X2Zu 15604 -c2hh 15605 -IGJpcg== 15606 -w6fDtWVz 15607 -PSIjIj4= 15608 -IHJlcHJlc2VudGVk 15609 -aWxsZXI= 15610 -KGV4cGVjdGVk 15611 -IGRhbmNl 15612 -IHZpc2l0b3Jz 15613 -LmNvbmNhdA== 15614 -LWJpdA== 15615 -VVJSRQ== 15616 -IFJvZw== 15617 -dnA= 15618 -aXBo 15619 -IExMQw== 15620 -aXRsZWQ= 15621 -aWFtaQ== 15622 -Q29sbA== 15623 -X3JlYWw= 15624 -X3Nob3c= 15625 -X2ZvbGRlcg== 15626 -IGRhcg== 15627 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 15628 -IGxhdHRlcg== 15629 -YXJjaHk= 15630 -IGJvdw== 15631 -IG91dGNvbWU= 15632 -NTEw 15633 -IFBvc3RlZA== 15634 -IHJpc2tz 15635 -IFRoZXJlZm9yZQ== 15636 -IG93bmVyc2hpcA== 15637 -IHBhcmFsbGVs 15638 -IHBlbmRpbmc= 15639 -Z2VvbWV0cnk= 15640 -IHJlY29nbml6ZQ== 15641 -U1RFTQ== 15642 -IENQ 15643 -IGltbWlncg== 15644 -SVRMRQ== 15645 -ICAgIAkJ 15646 -Y29ubmVjdGVk 15647 -IHNtaWxl 15648 -KGRvY3VtZW50 15649 -XENvbXBvbmVudA== 15650 -dmVydGljYWw= 15651 -IGNvbnN1bXB0aW9u 15652 -IHNob2Vz 15653 -LmltcGw= 15654 -dW5rcw== 15655 -LiI7Cg== 15656 -IGZvb2Rz 15657 -Xyk7Cg== 15658 -LmFzc2VydFRydWU= 15659 -IHBpcGVsaW5l 15660 -IGNvbGxlY3Rpb25z 15661 -IGVhcm5lZA== 15662 -IENlcnQ= 15663 -IHBhcnRuZXJzaGlw 15664 -KGFjdGlvbg== 15665 -MjYz 15666 -IGNk 15667 -IFZlcnk= 15668 -T3B0aW9uYWw= 15669 -IHNjcmVlbnM= 15670 -IHRpdGxlcw== 15671 -ZW5lcmF0b3I= 15672 -IGFiYW5kb24= 15673 -a2luZA== 15674 -SUxURVI= 15675 -IGNsb3Npbmc= 15676 -bGljYQ== 15677 -X2ludGVy 15678 -IGNhbXB1cw== 15679 -c2V0dGluZw== 15680 -U3ByaXRl 15681 -44Gv 15682 -X3JlcGx5 15683 -VG9MaXN0 15684 -OlwvXC8= 15685 -ZWRl 15686 -IGZvbGtz 15687 -IGJvYXQ= 15688 -KGFyZ3Y= 15689 -IHBlcm1hbmVudA== 15690 -IGNhcnJ5aW5n 15691 -IGNvbnNlcnZhdGl2ZQ== 15692 -aW1wb3J0YW50 15693 -LmltZw== 15694 -IEltbQ== 15695 -IGRpbWVuc2lvbnM= 15696 -YWxhbmQ= 15697 -c2luZ2xl 15698 -RXhpdA== 15699 -LS0tLS0tLS0tLQ== 15700 -YXJpYW50 15701 -dGVybmFs 15702 -U2Vjb25kcw== 15703 -IEl0YWx5 15704 -b3RsaW4= 15705 -LlJlc3VtZQ== 15706 -PSci 15707 -KT09 15708 -Y2VwdG9y 15709 -IHNjYQ== 15710 -L21haW4= 15711 -U2VjdXJpdHk= 15712 -X2RhdA== 15713 -IGxldHM= 15714 -IGFxdQ== 15715 -IHdoZW5ldmVy 15716 -YmVycnk= 15717 -IGFjdGluZw== 15718 -YW50aQ== 15719 -cGQ= 15720 -Jmd0 15721 -5q0= 15722 -Wm9uZQ== 15723 -VG9kYXk= 15724 -IS4= 15725 -MzIz 15726 -VG9Qcm9wcw== 15727 -YWJpcw== 15728 -aXRhYmxl 15729 -IGdhbA== 15730 -XXs= 15731 -aXpvbmE= 15732 -IGluY29udHJp 15733 -TkVU 15734 -Ly8vCg== 15735 -W2lu 15736 -X3NhdmU= 15737 -IGV4ZW0= 15738 -IEtlbm4= 15739 -IGV2b2x1dGlvbg== 15740 -Mjcy 15741 -dmFycw== 15742 -X3N0YXRz 15743 -LW9ubHk= 15744 -IENvbG9yYWRv 15745 -IHdhdGNoZWQ= 15746 -Ym91cg== 15747 -IHNldmVyZQ== 15748 -IHByb2Zlc3Npb25hbHM= 15749 -cG9ydGlvbg== 15750 -IGd1YXJhbnRl 15751 -0LM= 15752 -IHB1c2hlZA== 15753 -IEdp 15754 -770= 15755 -IHR1bQ== 15756 -IEF6 15757 -IEVkZ2VJbnNldHM= 15758 -IikpOw0K 15759 -aXNzZQ== 15760 -LmFj 15761 -U2V0dGluZw== 15762 -IGFwcHJlY2lhdGU= 15763 -IFZhbHVlRXJyb3I= 15764 -IHN1cnZl 15765 -IFJvbGU= 15766 -LkludGVy 15767 -cGxvdGxpYg== 15768 -amV0 15769 -ZGFt 15770 -IHBsYXRmb3Jtcw== 15771 -dGVsZQ== 15772 -VVRP 15773 -IEludGVybmFs 15774 -Kzo= 15775 -fTsNCg== 15776 -R2VuZXJhbA== 15777 -XEVudGl0eQ== 15778 -IGxhd3llcg== 15779 -cXVpdg== 15780 -IFBvc3Rz 15781 -aXNv 15782 -IGFjY3Vt 15783 -b2Jl 15784 -IG1hcmtz 15785 -IF07Cgo= 15786 -CXRleHQ= 15787 -LnN1Y2Nlc3M= 15788 -Y3Vycg== 15789 -YXNh 15790 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 15791 -IHRoaW4= 15792 -X292ZXI= 15793 -MDE2 15794 -YXJlc3Q= 15795 -IE9z 15796 -KGFkZHJlc3M= 15797 -IHZlbG9jaXR5 15798 -IFtdOwoK 15799 -PSIuLi8uLi8= 15800 -IFByaXY= 15801 -Ym93 15802 -IGd1YXJhbnRlZQ== 15803 -JQoK 15804 -MzIy 15805 -IGV2YWx1YXRl 15806 -LkxFTkdUSA== 15807 -IGludmVudG9yeQ== 15808 -cWE= 15809 -X2RlYnVn 15810 -Lk9uQ2xpY2tMaXN0ZW5lcg== 15811 -IGxpZXM= 15812 -IGFzc2Vzc21lbnQ= 15813 -ZGF0ZXRpbWU= 15814 -LmJhY2tncm91bmRDb2xvcg== 15815 -ICovDQoNCg== 15816 -cmFm 15817 -dW53cmFw 15818 -IEZvb3Q= 15819 -IG5vdGlmeQ== 15820 -IGxvd2VzdA== 15821 -RE9DVFlQRQ== 15822 -IGxhbmd1YWdlcw== 15823 -ZXh0cmE= 15824 -LWJhY2s= 15825 -IGVpbmVu 15826 -dGVtcGxhdGVz 15827 -Mjcx 15828 -X3Bhc3M= 15829 -NTIw 15830 -Nzc3 15831 -IE11c3Q= 15832 -IGVzdMOh 15833 -X2NvcmU= 15834 -IFNjb3Q= 15835 -QUk= 15836 -IGJpYXM= 15837 -YXRpb25zaGlw 15838 -Q29uc3RhbnQ= 15839 -IHByb2dyYW1taW5n 15840 -SW5z 15841 -dXNwZW5kTGF5b3V0 15842 -IFBST1ZJRA== 15843 -YW50ZXM= 15844 -IHNoaXJ0 15845 -aW5hdGVk 15846 -Lk9L 15847 -W2E= 15848 -IHRoaW5rcw== 15849 -PwoKCgo= 15850 -IHJlZ2FyZGxlc3M= 15851 -IE1hZ2lj 15852 -dWxhdGluZw== 15853 -CWNsYXNz 15854 -YWRkR3JvdXA= 15855 -UkVBVEU= 15856 -IFNV 15857 -IHNpbXBs 15858 -Y29weXJpZ2h0 15859 -IGJ1bmNo 15860 -IHVuaXZlcnNl 15861 -OTUw 15862 -IEVycg== 15863 -IHByZXNlbnRhdGlvbg== 15864 -Y2F0ZWdvcmllcw== 15865 -IGF0dGFjaA== 15866 -LnNpZ24= 15867 -X0FD 15868 -IGRpc2NpcGw= 15869 -IHJlZ3VsYXJseQ== 15870 -IHByaW1hcmlseQ== 15871 -aW5rcw== 15872 -W1s= 15873 -LnJhbmQ= 15874 -LnNob3VsZA== 15875 -b3dudG93bg== 15876 -PSIn 15877 -IHNhbnM= 15878 -IHN1cHBvcnRlcnM= 15879 -c2VxdWVuY2U= 15880 -R08= 15881 -Li4KCg== 15882 -IFNwcg== 15883 -IGNhcmVmdWxseQ== 15884 -VUlDb2xvcg== 15885 -ZGVzdHJveQ== 15886 -IHRvZG9z 15887 -IE9SREVS 15888 -b3R0ZWQ= 15889 -IGRvbnQ= 15890 -YXVkaQ== 15891 -X3BsYXllcg== 15892 -Z3Jl 15893 -NjI1 15894 -IE9pbA== 15895 -PGJvZHk= 15896 -X3N0YWNr 15897 -LlBhZGRpbmc= 15898 -IFByb2R1Y3Rz 15899 -IHByaXZpbGU= 15900 -MDE0 15901 -IGluanVyZWQ= 15902 -IEZ1cnRoZXI= 15903 -IGFsaWFz 15904 -LlJlc3VtZUxheW91dA== 15905 -X0xFTg== 15906 -IHNlcw== 15907 -J107Cgo= 15908 -Y3JlZW5z 15909 -IGRpcmVjdGVk 15910 -LlN1c3BlbmRMYXlvdXQ= 15911 -b2RnZQ== 15912 -LkF0 15913 -bWFya3M= 15914 -IFVuaXZlcnM= 15915 -ZXJ0cw== 15916 -IEVzYw== 15917 -IG5hdmJhcg== 15918 -IHV0aWxpdHk= 15919 -YWdub3N0aWNz 15920 -IGluamVjdA== 15921 -IEROQQ== 15922 -ICIsIg== 15923 -YW1hcg== 15924 -IGV1 15925 -IHJlc3RhdXJhbnRz 15926 -X3B1dA== 15927 -dXRlcnM= 15928 -VG9vbFN0cmlw 15929 -dHc= 15930 -aXN0cm8= 15931 -IHpvb20= 15932 -IGxlZ2l0 15933 -cGVjaWZpYw== 15934 -Mjg1 15935 -IENvbWU= 15936 -IGxvY2FsU3RvcmFnZQ== 15937 -IGFic29y 15938 -LlBhbmVs 15939 -IERlc2lnbmVy 15940 -IG93 15941 -SUNBTA== 15942 -X3VyaQ== 15943 -KGZpZWxk 15944 -IHN1cGVydg== 15945 -RXhpc3Rz 15946 -IHJlc3BlY3RpdmVseQ== 15947 -IFN0YW5k 15948 -Q29uZg== 15949 -dXNzaWFu 15950 -MzY0 15951 -IGFyYw== 15952 -IG5k 15953 -dWNrcw== 15954 -IHJlc3Ry 15955 -IHNlYXNvbnM= 15956 -IENoYXB0ZXI= 15957 -IFN3aXRjaA== 15958 -cGlj 15959 -IGhp 15960 -bG9hZGVk 15961 -IGZsdWlk 15962 -LWJ0bg== 15963 -IHJ1bnRpbWU= 15964 -Lml0 15965 -MjU4 15966 -Qk4= 15967 -T3BhY2l0eQ== 15968 -YXNhbnQ= 15969 -cnlwdGlvbg== 15970 -LW5hdGl2ZQ== 15971 -IHRhdWdodA== 15972 -5a8= 15973 -YWdtZW50 15974 -IG11bA== 15975 -UmVnaXN0cnk= 15976 -X2dyaWQ= 15977 -IEJyb29r 15978 -OlNldA== 15979 -IG1vbmdvb3Nl 15980 -QU1FUw== 15981 -aW5uZXJIVE1M 15982 -IHNvY2k= 15983 -IEludGVs 15984 -Z2V0SWQ= 15985 -Q21k 15986 -IGFjY2Vzc2libGU= 15987 -cmFtZXM= 15988 -bGV0b24= 15989 -IF9fKA== 15990 -CWRlbGV0ZQ== 15991 -IFNxdWFyZQ== 15992 -IgoKCg== 15993 -IGJ1Y2tldA== 15994 -YXZvcml0ZQ== 15995 -IEJyZWFr 15996 -Kytd 15997 -IGJydXNo 15998 -MjY2 15999 -IHRlbnNvcg== 16000 -L2h0dHA= 16001 -VGlsZQ== 16002 -IGZ1bmN0aW9uYWw= 16003 -ICIq 16004 -d2hlbA== 16005 -IHRlbnQ= 16006 -IENoYXJhY3Rlcg== 16007 -IHNlZXM= 16008 -LlNU 16009 -Qmln 16010 -IGV4dGVybg== 16011 -VXJscw== 16012 -KSkpKSw= 16013 -IEpy 16014 -LkJ1aWxkZXI= 16015 -Ljs= 16016 -bmw= 16017 -X0luaXQ= 16018 -IEhFUg== 16019 -xbxl 16020 -bXlzcWxp 16021 -X2ljb24= 16022 -dmFu 16023 -IGZlZWxpbmdz 16024 -IGxlYW4= 16025 -IGhvcGluZw== 16026 -VFY= 16027 -PSI8Pz0= 16028 -IGN1cnZl 16029 -X3N0ZA== 16030 -X0xJTkU= 16031 -ZHN0 16032 -IG1vcmFs 16033 -ZW1lcw== 16034 -b2d5 16035 -IHVyYmFu 16036 -MDE1 16037 -IGFzaWRl 16038 -IGVkaXRpbmc= 16039 -QURE 16040 -U2Vjb25k 16041 -VHJhY2s= 16042 -IHZvdGluZw== 16043 -IGhvbm9y 16044 -Lics 16045 -ZWxsZW4= 16046 -Q2hhdA== 16047 -IGltcHJvdmVtZW50 16048 -J10KCg== 16049 -oIE= 16050 -IHBhcnNlZA== 16051 -ICAgICAgICAgCg== 16052 -IGxhenk= 16053 -IGZhbGxpbmc= 16054 -U2VyaWFsaXpl 16055 -IFBh 16056 -X2dy 16057 -IGZvcmV2ZXI= 16058 -LndoaXRl 16059 -LlF1ZXJ5 16060 -QmVk 16061 -IER1 16062 -IHJlc3VtZQ== 16063 -IHBhcGVycw== 16064 -IEluaXQ= 16065 -IHN1ZmZlcmluZw== 16066 -4oCL 16067 -IGRlY2xhcmF0aW9ucw== 16068 -KCkt 16069 -IGV4ZWN1dGVk 16070 -IEhvbA== 16071 -LmJsb2Nr 16072 -44Oz 16073 -U0s= 16074 -IHN0dWNr 16075 -IExvY2s= 16076 -aW5jaXBhbA== 16077 -TnVsbGFibGU= 16078 -IHNlc3Npb25z 16079 -dW5p 16080 -IGNvdXA= 16081 -YXBwcm8= 16082 -Z2hhbg== 16083 -X3Bvb2w= 16084 -Mjgz 16085 -CWlk 16086 -IHNsb3Rz 16087 -IG1lZGljaW5l 16088 -IGdsYWQ= 16089 -IE1vbm9CZWhhdmlvdXI= 16090 -YXRyZQ== 16091 -ICQoJw== 16092 -bWVyaWNhbg== 16093 -YWdn 16094 -IGthbm4= 16095 -X2Nvbm5lY3Q= 16096 -IGJyYW5kcw== 16097 -IHNrZQ== 16098 -IGRpZ2l0 16099 -PG4= 16100 -IGJhY2t1cA== 16101 -IHBlcnNvbmFsbHk= 16102 -LlByb3BlcnR5 16103 -MzE0 16104 -LmNvbW1pdA== 16105 -IGNyeQ== 16106 -X2NvdW50ZXI= 16107 -IG1hbGxvYw== 16108 -IGdyYW4= 16109 -IERyb3A= 16110 -cGxhdGZvcm0= 16111 -cmVkZW50aWFscw== 16112 -aW5raW5n 16113 -IFVJTA== 16114 -dWJz 16115 -IG1s 16116 -bGVzc2x5 16117 -R2VuZXJhdGVk 16118 -ZXJlb3R5cGU= 16119 -IGJhdA== 16120 -TGF5b3V0UGFuZWw= 16121 -TE9U 16122 -Iik7DQoNCg== 16123 -IG11c2NsZQ== 16124 -IGNlcnRpZmljYXRl 16125 -QU5ETEU= 16126 -IGhhcmRlcg== 16127 -IHBpeGVscw== 16128 -KSIsCg== 16129 -LkhlYWRlcg== 16130 -IGRldmVsb3Blcg== 16131 -IExhcw== 16132 -ZWdhbg== 16133 -Ljw= 16134 -IGV4cGxvZGU= 16135 -IHBhcnRpY2lwYXRl 16136 -UGF0dGVybg== 16137 -KHRhYmxl 16138 -IFRFWFQ= 16139 -Y29uc3RhbnRz 16140 -eEQ= 16141 -dGhldw== 16142 -fSwKCg== 16143 -44Gu 16144 -X2Rlcw== 16145 -IHN1YnN0cg== 16146 -IFNtYXJ0 16147 -IHNjYWxh 16148 -Z2VudA== 16149 -LWJhcg== 16150 -ZXNzaW9uYWw= 16151 -dW1icw== 16152 -LmV4ZWM= 16153 -J1w= 16154 -VEs= 16155 -dW5pc3Q= 16156 -cHJvb2Y= 16157 -Y2lhbA== 16158 -cHJvYw== 16159 -PXsi 16160 -LmhyZWY= 16161 -PSQo 16162 -IGx1bmNo 16163 -aXNjYWw= 16164 -IEVudHJ5 16165 -IG91dGRvb3I= 16166 -c2VtYmxl 16167 -IGVzc2VudGlhbGx5 16168 -L0c= 16169 -W10p 16170 -JSI= 16171 -c3Rlbg== 16172 -VVNFRA== 16173 -IGR1c3Q= 16174 -5bA= 16175 -CQoK 16176 -IHJldGlyZQ== 16177 -IGZpYg== 16178 -QWx0aG91Z2g= 16179 -IGxvdmVz 16180 -IHJlYWRz 16181 -eWNsZXM= 16182 -IEhlbA== 16183 -X3VpbnQ= 16184 -ICcuJA== 16185 -X2luaXRpYWw= 16186 -TmFtZWQ= 16187 -IGZ1bmRhbWVudGFs 16188 -QURJTkc= 16189 -IHRvdw== 16190 -IEFERA== 16191 -IEFjYWRlbXk= 16192 -MDUw 16193 -OlN0cmluZw== 16194 -IGNvbXByZWhlbnNpdmU= 16195 -LnNjYWw= 16196 -IE1ldGE= 16197 -TWVzc2FnZXM= 16198 -LmFubm90YXRpb25z 16199 -XFJlc3BvbnNl 16200 -IGFja25vd2xlZA== 16201 -IEFSRQ== 16202 -XT09 16203 -IGNsZWFuaW5n 16204 -6L4= 16205 -RW50aXRpZXM= 16206 -IFNhbGVz 16207 -IFdpcw== 16208 -LmV4dGVuZA== 16209 -YWxsZW5nZQ== 16210 -IGdhbWluZw== 16211 -JHF1ZXJ5 16212 -SUNFUw== 16213 -RVRDSA== 16214 -SG9yaXpvbnRhbA== 16215 -cXVlbnRpYWw= 16216 -ODUw 16217 -QkFDSw== 16218 -ZGV2ZWxvcA== 16219 -aXNvcg== 16220 -KGNvZGU= 16221 -LUs= 16222 -X1BJTg== 16223 -cmVxdWVuY3k= 16224 -IFF1ZXN0aW9u 16225 -X2NvbnRhaW5lcg== 16226 -X21vZHVsZXM= 16227 -IEplcnNleQ== 16228 -X2RpZmY= 16229 -LmVs 16230 -ICooKA== 16231 -Y250 16232 -IFNh 16233 -Q1BQ 16234 -aW5pdGU= 16235 -IHVudXM= 16236 -LXdoaXRl 16237 -ZXRhcnk= 16238 -IGludm9sdmluZw== 16239 -ID8+DQo= 16240 -YmVzdA== 16241 -YWxsYXM= 16242 -ZW50ZWQ= 16243 -ICAgICAgICAgICAgICAgICAgICAgICAgCg== 16244 -X2Nvbm5lY3Rpb24= 16245 -IHJlcG8= 16246 -ZW5hYmxlZA== 16247 -0LDQug== 16248 -IHNoYQ== 16249 -IG1lbWJlcnNoaXA= 16250 -U3RhdHVzQ29kZQ== 16251 -aW5hdGluZw== 16252 -X3Nt 16253 -X2N1c3RvbQ== 16254 -X3dlaWdodA== 16255 -IGNzcw== 16256 -U3RhdA== 16257 -X2Vudg== 16258 -bGlua3M= 16259 -VFJM 16260 -IEhpdA== 16261 -LHI= 16262 -dXBpZA== 16263 -IG9wZW5z 16264 -IGdlbnQ= 16265 -X3Zpcw== 16266 -IGpveQ== 16267 -PHc= 16268 -X2Nvc3Q= 16269 -IFB5T2JqZWN0 16270 -cmVuY2U= 16271 -IEdlb3JnaWE= 16272 -IEJyb2Fk 16273 -bW1h 16274 -4oI= 16275 -cGY= 16276 -ICJcIg== 16277 -ICgm 16278 -b21v 16279 -IGxpdGVyYWxseQ== 16280 -iJg= 16281 -bWV0cmlj 16282 -IGJhcnM= 16283 -emVk 16284 -KHdpbmRvdw== 16285 -IElzcmFlbGk= 16286 -IGZvcm1hbA== 16287 -aWRlbnRpZmllcg== 16288 -LmRhbw== 16289 -IERlYXRo 16290 -JTsK 16291 -IGRlY2xhcmU= 16292 -YXJtcw== 16293 -UkVBTQ== 16294 -UEVSVFk= 16295 -IGNvbnNlcXVlbmNlcw== 16296 -dG9vbHM= 16297 -UGVvcGxl 16298 -IFdoaWNo 16299 -PigpOw0K 16300 -LmRlY29kZQ== 16301 -X0FDVA== 16302 -QnV0dG9ucw== 16303 -LmZsb2F0 16304 -LkZpcnN0 16305 -66U= 16306 -IFBvbGl0 16307 -IFhDVA== 16308 -VGFncw== 16309 -IENHRmxvYXQ= 16310 -PXN0cg== 16311 -IGxlYWY= 16312 -LWNoZWNr 16313 -IElzcw== 16314 -LnN5c3RlbQ== 16315 -bG9nb3V0 16316 -YWNodA== 16317 -QW5nbGU= 16318 -c2lu 16319 -Y2hhcnQ= 16320 -SU5URVI= 16321 -IE5VTQ== 16322 -QmFzaWM= 16323 -LlByb3BlcnRpZXM= 16324 -5Lit 16325 -X2NoYW5nZQ== 16326 -IEJyYXppbA== 16327 -QWJzdHJhY3Q= 16328 -IDorOg== 16329 -X3VzZQ== 16330 -0LDQuw== 16331 -MjY4 16332 -IEx5 16333 -SUJVVA== 16334 -IG91dGVy 16335 -IC0tPg0K 16336 -IHJlbGllZg== 16337 -bGFw 16338 -cXVlcg== 16339 -X3BhcmVudA== 16340 -aGVhcA== 16341 -TE9TRQ== 16342 -IGNvbWJpbmU= 16343 -IFJvc2U= 16344 -b3dlcnM= 16345 -IHByb2NlZHVyZXM= 16346 -IFNvcnQ= 16347 -YW5pbQ== 16348 -dmFyaWFudA== 16349 -ZWhpY2xl 16350 -IHNpZ25pbmc= 16351 -UHJpbWFyeQ== 16352 -Y3VycmVuY3k= 16353 -IHNleGU= 16354 -b2Vu 16355 -dGhldGE= 16356 -ZW1hbg== 16357 -IGltcHJlc3NpdmU= 16358 -KCdf 16359 -CVU= 16360 -IFRleHRTdHlsZQ== 16361 -X2NudA== 16362 -IHNsaWNl 16363 -KCc6 16364 -IHVuZGVyc3Rvb2Q= 16365 -SGlz 16366 -Mjc3 16367 -MDEz 16368 -IGluZm9ybWVk 16369 -IG5pY2s= 16370 -NDI5 16371 -KFRBRw== 16372 -aGQ= 16373 -IGVsZWN0aW9ucw== 16374 -ZXN0dXJl 16375 -IFNhbnRh 16376 -IENvYXN0 16377 -LnBkZg== 16378 -aW5jaXBsZQ== 16379 -LmNsb25l 16380 -Ym9ybg== 16381 -dXRh 16382 -IGxpY2Vuc2Vk 16383 -Q3I= 16384 -IGJyZWFk 16385 -IEhvdXN0b24= 16386 -IG5vZA== 16387 -IGhvcGVz 16388 -IENHUmVjdA== 16389 -IGd1aWx0eQ== 16390 -LmdpZg== 16391 -IHJvc2U= 16392 -LkNvbW1vbg== 16393 -VGlw 16394 -QU5L 16395 -IEZD 16396 -RHVyaW5n 16397 -IFN5bWZvbnk= 16398 -IGRlZmVuc2l2ZQ== 16399 -a20= 16400 -KT4= 16401 -YXJjaGl2ZQ== 16402 -IFVSSQ== 16403 -eWNsaW5n 16404 -LW8= 16405 -IFdlYnNpdGU= 16406 -QU1Q 16407 -NDA1 16408 -aXNobWVudA== 16409 -IGRvY3RvcnM= 16410 -RGlyZWN0 16411 -QVJJ 16412 -IFJlZGlyZWN0 16413 -aWVyZW4= 16414 -OTYw 16415 -X2Rpc3Q= 16416 -eW8= 16417 -IFByb2dyZXNz 16418 -IHp1bQ== 16419 -IG1lbW9y 16420 -IEVE 16421 -IGp1cg== 16422 -5o2u 16423 -X1RBQkxF 16424 -IHV1aWQ= 16425 -RXhwcg== 16426 -LmhlYWQ= 16427 -KCcl 16428 -cG9pbnRlcg== 16429 -IGVzdGltYXRl 16430 -IEdyZWc= 16431 -IGxvYWRlcg== 16432 -IGlPUw== 16433 -IG1lbnM= 16434 -W3k= 16435 -IHJlZnVzZWQ= 16436 -IHByZWNpc2lvbg== 16437 -aXNjaA== 16438 -IEFDVElPTg== 16439 -Q2xvdWQ= 16440 -c1dpdGg= 16441 -KHJldA== 16442 -Mjky 16443 -X0FERFI= 16444 -X2NvbmY= 16445 -KGRm 16446 -IGxvY2tlZA== 16447 -IHJpc2luZw== 16448 -44O744O7 16449 -IE1z 16450 -IHNjZW5lcw== 16451 -X0VYVA== 16452 -X3Jhdw== 16453 -X3RoZQ== 16454 -cGVvcGxl 16455 -IHJlY29u 16456 -IEZ1bg== 16457 -IGJsZXNz 16458 -IFVwZGF0ZWQ= 16459 -NDIy 16460 -w7xu 16461 -ICAgICAgICAgICAgDQo= 16462 -cGVjdGlvbg== 16463 -UmVsZWFzZQ== 16464 -LmxvZ2dlcg== 16465 -IFNZ 16466 -IGNvdW5zZWw= 16467 -dXJk 16468 -X3RydWU= 16469 -IGV2ZXJ5Ym9keQ== 16470 -aXZvdA== 16471 -IGhlbmNl 16472 -IE5BUw== 16473 -Nzg5 16474 -IG9wcG9zZWQ= 16475 -dW5rbm93bg== 16476 -IERFU0M= 16477 -IENoYWly 16478 -ZmFpbGVk 16479 -IElOQ0xVRElORw== 16480 -Mzg2 16481 -MzUy 16482 -IHdyaXRlcnM= 16483 -e30K 16484 -w610 16485 -X2NvcHk= 16486 -fTo= 16487 -IEJhdA== 16488 -IGNvbnZlcnRlZA== 16489 -ZWRpbmc= 16490 -cGxhY2VtZW50 16491 -IEhvc3Q= 16492 -U291bmQ= 16493 -0LjQvA== 16494 -IHNvdWdodA== 16495 -NDAy 16496 -bWlk 16497 -IHNhbGFyeQ== 16498 -b2dn 16499 -4oSi 16500 -YnVs 16501 -IHdpcg== 16502 -dmFsaWRhdG9y 16503 -X1NUQVQ= 16504 -LnN0b3Jl 16505 -IEJhdHRsZQ== 16506 -xLFu 16507 -IC0tPgoK 16508 -VHJ1bXA= 16509 -ZG90 16510 -IENPTlQ= 16511 -LmZldGNo 16512 -IGNvbnRpbnU= 16513 -d2Fz 16514 -IGZyYXVk 16515 -X3RtcA== 16516 -bWl0dGVy 16517 -LnBpY3R1cmVCb3g= 16518 -R0E= 16519 -IHRvdXJuYW1lbnQ= 16520 -LklucHV0 16521 -MzQz 16522 -W3I= 16523 -ZXhpb24= 16524 -Y2VudGFnZQ== 16525 -IEtvcmVhbg== 16526 -dW5kZWY= 16527 -IEF2YWlsYWJsZQ== 16528 -cmVzaGFwZQ== 16529 -IGtpdA== 16530 -IFN0cnVjdA== 16531 -IFNVQg== 16532 -QW5zd2Vy 16533 -X2xpYg== 16534 -LnR3aXR0ZXI= 16535 -IG9yZQ== 16536 -IERyYWdvbg== 16537 -LkV4dA== 16538 -LGs= 16539 -IGV4cGxhbmF0aW9u 16540 -cmVmcw== 16541 -IERyaXZl 16542 -IFRyYWluaW5n 16543 -Mjgy 16544 -Lkhhcw== 16545 -MzQx 16546 -aW50YWdl 16547 -Ymln 16548 -b2xvZ2lzdA== 16549 -ZW5uaXM= 16550 -NDYw 16551 -2Yc= 16552 -IGNoaWNrZW4= 16553 -ICAgICAgICAgIAo= 16554 -55s= 16555 -44Gn 16556 -IHBlYWs= 16557 -IGRyaW5raW5n 16558 -IGVuY29kZQ== 16559 -IE5FVw== 16560 -bWFsbG9j 16561 -CWZwcmludGY= 16562 -ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 16563 -aW5jbHVkaW5n 16564 -IHByaW5jaXBsZXM= 16565 -IE1haA== 16566 -MjY3 16567 -c3RvcmFnZQ== 16568 -LWtleQ== 16569 -IGtleXdvcmQ= 16570 -JTs= 16571 -IHRyYWluZWQ= 16572 -LmNvbnRyaWI= 16573 -IGt2 16574 -X18nOgo= 16575 -IEJveQ== 16576 -cGFyYW1ldGVy 16577 -IHN1aXRl 16578 -IHRob3VzYW5k 16579 -IGNvb3JkaW5hdGU= 16580 -LWdlbmVyYXRlZA== 16581 -7ZWY 16582 -Z2VuZXJhdGVk 16583 -IGFkbWl0dGVk 16584 -IHB1c3N5 16585 -I3c= 16586 -IHN3aW0= 16587 -dW5pb24= 16588 -TmE= 16589 -Mjc0 16590 -IFJveWFs 16591 -LmNoYW5uZWw= 16592 -VXBkYXRlZA== 16593 -X1JPT1Q= 16594 -IHZpdGFs 16595 -MzM1 16596 -cmFjdGlvbg== 16597 -IENydXNoZXI= 16598 -IHByZWNlZA== 16599 -IGhvcml6b250YWw= 16600 -Qmx1ZXByaW50 16601 -IGF0dHJz 16602 -IHNtb2tl 16603 -0JI= 16604 -LkVxdWFscw== 16605 -RkI= 16606 -IFJlc291cmNlcw== 16607 -cm9sbGluZw== 16608 -IHBhc3Nlcw== 16609 -IE51bQ== 16610 -cm90YXRl 16611 -ZXR5cGU= 16612 -XCIs 16613 -IHNlbnNpdGl2ZQ== 16614 -IHRhbGw= 16615 -P+KAnQoK 16616 -UHJveHk= 16617 -aXk= 16618 -X3NlY3Rpb24= 16619 -4oCU4oCU4oCU4oCU 16620 -YnJpZA== 16621 -IGNpcmN1aXQ= 16622 -YXRhbg== 16623 -RU5D 16624 -IGRyaXZlbg== 16625 -IHZvdGVk 16626 -IGVkdWNhdGlvbmFs 16627 -IGludGVyYWN0aW9u 16628 -YWJldGVz 16629 -IHRvbmU= 16630 -IEluaXRpYWxpemVDb21wb25lbnQ= 16631 -IG1lcmVseQ== 16632 -IOye 16633 -Y29va2ll 16634 -X2Rpdg== 16635 -IFVJTGFiZWw= 16636 -dmVseQ== 16637 -fSk7DQo= 16638 -X0VOVA== 16639 -IysjKw== 16640 -YXJ0aWNsZXM= 16641 -IFNvdXRoZXJu 16642 -IHN0cm9uZ2Vy 16643 -IEdpdmVu 16644 -IEVyaWM= 16645 -IElS 16646 -YWJzdHJhY3Q= 16647 -VW5kZXI= 16648 -bmFibGU= 16649 -IGluY3JlbWVudA== 16650 -b3Zlbg== 16651 -IGNvaW4= 16652 -X3RpbWVy 16653 -IHN1ZmZlcmVk 16654 -IEZSRUU= 16655 -J10uIg== 16656 -IFF1ZWVu 16657 -c3RhdHM= 16658 -IG1lZXRpbmdz 16659 -Mjc2 16660 -IGVudGVyaW5n 16661 -IGFsb25nc2lkZQ== 16662 -KHNlc3Npb24= 16663 -aXRhbHM= 16664 -IGZvdW5kYXRpb24= 16665 -IENyZWRpdA== 16666 -LmRpdg== 16667 -X0FMTA== 16668 -cGNpb24= 16669 -X3N0YXQ= 16670 -aWNraW5n 16671 -RGVmYXVsdHM= 16672 -X3NyYw== 16673 -IG91dHB1dHM= 16674 -L0I= 16675 -IGVudGh1cw== 16676 -LWJs 16677 -LkZvcmVDb2xvcg== 16678 -CXRlbXA= 16679 -RmFjZQ== 16680 -IGludGVyYWN0 16681 -IHdlaXJk 16682 -TW91bnQ= 16683 -cmVsbA== 16684 -dWRlbnRz 16685 -IHJlcXVpcmVtZW50 16686 -IFN1cw== 16687 -SUVS 16688 -IGVsZWN0ZWQ= 16689 -cmVmZXJlbmNl 16690 -IE1F 16691 -IHNlcnZlcnM= 16692 -LndhaXQ= 16693 -IHNuYXBzaG90 16694 -aWx0b24= 16695 -IHRyaWVz 16696 -IHRpcG8= 16697 -LlRpbWU= 16698 -Pnc= 16699 -IG1vdW50YWlu 16700 -IHBvdW5kcw== 16701 -IFsuLi4= 16702 -ZXhpc3Rz 16703 -IG5nT24= 16704 -X01BUA== 16705 -IGZseWluZw== 16706 -MzMx 16707 -eGlldHk= 16708 -CXZhbHVl 16709 -X0RC 16710 -dW5v 16711 -IHNlYXRz 16712 -VFVSTg== 16713 -LmF1dGhvcg== 16714 -ISk= 16715 -b3JjZQ== 16716 -IGluZGljYXRlZA== 16717 -MzE3 16718 -LnNpbg== 16719 -IGFzc2lnbm1lbnQ= 16720 -aW1pZW50bw== 16721 -IEZyYW1l 16722 -MzI0 16723 -X2dlbg== 16724 -aW5lcnk= 16725 -Xyk= 16726 -bWVzc2FnZXM= 16727 -LnNldHRpbmdz 16728 -IE1lYW4= 16729 -IE11c2V1bQ== 16730 -aXJx 16731 -YXR0YWNo 16732 -IFBhbGVzdGlu 16733 -X1FV 16734 -X3RhZ3M= 16735 -IGNhc3VhbA== 16736 -ZW1lbg== 16737 -QVNTV09SRA== 16738 -NDMy 16739 -JHM= 16740 -IENpcmM= 16741 -0L7QuQ== 16742 -ZXRyaWM= 16743 -L1A= 16744 -MDE4 16745 -IGVwb2No 16746 -PGhlYWQ= 16747 -X0NNRA== 16748 -IGdpdA== 16749 -IHBlbmFsdHk= 16750 -b3JwaA== 16751 -X3VzZXJz 16752 -b3Vyc2Vz 16753 -LkRhdGVUaW1l 16754 -YXRlcm5pb24= 16755 -X3Byb2plY3Q= 16756 -IHN1cGVyaW9y 16757 -IERhbQ== 16758 -IFNlYXR0bGU= 16759 -WFk= 16760 -PlRoZQ== 16761 -IEFr 16762 -IGdyYXNz 16763 -LyoNCg== 16764 -KGRpcw== 16765 -IGd1bnM= 16766 -IHRi 16767 -IEtldmlu 16768 -LmFyZ3M= 16769 -IEFo 16770 -b3BlZA== 16771 -KEo= 16772 -Y29sdW1ucw== 16773 -YXJndW1lbnRz 16774 -IFdpdGhFdmVudHM= 16775 -X2Z1bGw= 16776 -IERlZmVuc2U= 16777 -U2ltcGxl 16778 -IGRlYXRocw== 16779 -Mjk1 16780 -IGV4dGVuc2l2ZQ== 16781 -IFN0aWxs 16782 -IEV4cHJlc3Npb24= 16783 -IEFnZW5jeQ== 16784 -IHBlcmZvcm1pbmc= 16785 -Rlg= 16786 -IHVzdWFyaW8= 16787 -VUFM 16788 -U2lkZQ== 16789 -b2Rvcw== 16790 -YXB0b3A= 16791 -IGNyZWRlbnRpYWxz 16792 -X2NhcA== 16793 -YXRpZW50 16794 -IERpc25leQ== 16795 -IGFp 16796 -IGNoaXA= 16797 -IHZvbHQ= 16798 -Lm1ha2VUZXh0 16799 -JSUlJSUlJSUlJSUlJSUlJQ== 16800 -IGJlbGllZg== 16801 -X0xPQw== 16802 -IENpdmls 16803 -TmF2aWdhdGlvbg== 16804 -IHJldmVhbA== 16805 -IHZpb2xlbnQ= 16806 -IEZpbA== 16807 -IGNhdGFsb2c= 16808 -ZW1lZA== 16809 -c2Nhbg== 16810 -LmNvbnRyb2w= 16811 -IGNvbnN0aXR1dGlvbg== 16812 -Q291bnRyeQ== 16813 -U2VwYXJhdG9y 16814 -X0FQUA== 16815 -dG9waWM= 16816 -dWV0b290aA== 16817 -TUlO 16818 -IGRlc2NyaXB0b3I= 16819 -eXQ= 16820 -RVRIRVI= 16821 -IGRpc3RyaWJ1dGU= 16822 -J30K 16823 -LnRyaW0= 16824 -LkxpbmU= 16825 -IGxibA== 16826 -YXNzZXJ0RXF1YWxz 16827 -IERldA== 16828 -b21ib2s= 16829 -KHdpZHRo 16830 -IHRvcnQ= 16831 -IEVYUFJFU1M= 16832 -YWNv 16833 -VXNpbmc= 16834 -IEJyYW5k 16835 -d2FsbA== 16836 -RU1FTlQ= 16837 -IENvbW11bmlj 16838 -PHVpbnQ= 16839 -IEdVSQ== 16840 -RUdJTg== 16841 -IFJhbmdl 16842 -L2k= 16843 -IFRheWxvcg== 16844 -Y29zdA== 16845 -IHJlc3BvbmRlZA== 16846 -IFRoZW1l 16847 -bmNl 16848 -SVNI 16849 -IGZlYXR1cmluZw== 16850 -UmV0dXJucw== 16851 -IEty 16852 -IC4K 16853 -IG5hbQ== 16854 -X2Ni 16855 -VGVzdGluZw== 16856 -IHt9LA== 16857 -eWFs 16858 -LmZpZWxk 16859 -IC89 16860 -X1NIT1JU 16861 -bWF0ZXM= 16862 -VGVzdENhc2U= 16863 -YWlubGVzcw== 16864 -IGV2YWx1YXRpb24= 16865 -X0lURU0= 16866 -IFBhY2lmaWM= 16867 -CWs= 16868 -IGNhbnQ= 16869 -IFJvcw== 16870 -KXM= 16871 -IGZldA== 16872 -U1RSSU5H 16873 -MzE5 16874 -IERpc3Bvc2U= 16875 -Z2Fs 16876 -IEpvaW4= 16877 -IFBvcm4= 16878 -IENhdGhvbGlj 16879 -QVJHRVQ= 16880 -Y3B1 16881 -56CB 16882 -LnNjcm9sbA== 16883 -MzI4 16884 -SVNJTkc= 16885 -aWZlc3R5bGU= 16886 -YW5jZW1lbnQ= 16887 -IG1lcmM= 16888 -IEJyb3dzZXI= 16889 -ZXRlcm1pbg== 16890 -IG92ZXJmbG93 16891 -QXZhaWxhYmxl 16892 -IGJvdHRsZQ== 16893 -OlVJ 16894 -aWZpY2lhbA== 16895 -IGNvb3Jk 16896 -Y2xhcmF0aW9u 16897 -IGNvbmo= 16898 -R0xPQkFM 16899 -b2t1 16900 -IGt3YXJncw== 16901 -Y29uZGl0aW9ucw== 16902 -dWx1bQ== 16903 -IGdlbnU= 16904 -IEhlcm8= 16905 -5Y4= 16906 -IHVuZXhwZWN0ZWQ= 16907 -IERBTUFHRVM= 16908 -IGth 16909 -IENvdWxk 16910 -VVBQT1JU 16911 -IFBob3Rvcw== 16912 -IGNvbmZpZGVudA== 16913 -IGRldGVjdGVk 16914 -ZGVn 16915 -cmdi 16916 -IHN0cm9uZ2x5 16917 -IH07DQo= 16918 -ICk6 16919 -IGxlY3Q= 16920 -dXJzaXZl 16921 -Uk9M 16922 -IFdlaWdodA== 16923 -IGVudGVydGFpbm1lbnQ= 16924 -ICkpOwo= 16925 -IGdvbm5h 16926 -IGJi 16927 -LmRv 16928 -R1M= 16929 -IG1pc3Rha2U= 16930 -REw= 16931 -IFBST1ZJREVE 16932 -ZWFybmluZw== 16933 -TGltaXQ= 16934 -aXNzaW9ucw== 16935 -W3Y= 16936 -5LiN 16937 -aXJ0eQ== 16938 -RGVs 16939 -IHVuZGVybHlpbmc= 16940 -cHJlbmU= 16941 -IGphdw== 16942 -IERJ 16943 -cGVlcg== 16944 -IG9iamVjdGl2ZQ== 16945 -IGRlcG9zaXQ= 16946 -IGtvbg== 16947 -IGVzcA== 16948 -Mjc4 16949 -LnNldFZpc2liaWxpdHk= 16950 -L2xvZ2lu 16951 -PHR5cGVuYW1l 16952 -IGZyYW5jaA== 16953 -L2U= 16954 -MjY5 16955 -UGFyYWxsZWw= 16956 -IHNjb3JlZA== 16957 -IEhvbg== 16958 -IFZpbGw= 16959 -aWdh 16960 -IGFudGljaXA= 16961 -X2Fzc2VydA== 16962 -IE9wdA== 16963 -IGRlc2NyaWJlcw== 16964 -d2Fu 16965 -bW91bnQ= 16966 -IG1vbml0b3Jpbmc= 16967 -IHRvdXQ= 16968 -64qU 16969 -fSx7 16970 -Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= 16971 -PWludA== 16972 -IGN1c3Q= 16973 -LS0tLS0t 16974 -IGF0bW9zcGhlcmU= 16975 -UEFS 16976 -b3J0ZQ== 16977 -SVNJQkxF 16978 -IElyb24= 16979 -IE5vdGlmaWNhdGlvbg== 16980 -LmxvZ2dpbmc= 16981 -IEJPT0w= 16982 -LXBvaW50 16983 -IGFmcmFpZA== 16984 -ZW50YQ== 16985 -IHRvbW9ycm93 16986 -QGltcGxlbWVudGF0aW9u 16987 -IGVuZ2FnZQ== 16988 -IEFudGg= 16989 -IEZsb29y 16990 -IFVs 16991 -VG9vbHM= 16992 -IGJhYg== 16993 -IGNhcmVmdWw= 16994 -44GE 16995 -IGNydWNpYWw= 16996 -IGNhbGN1bGF0ZWQ= 16997 -IFNB 16998 -IHd5 16999 -OTEx 17000 -RFg= 17001 -X1RBRw== 17002 -aW5kZWQ= 17003 -IGpldA== 17004 -IEVuZ2luZWVyaW5n 17005 -Lk1BWA== 17006 -ZW56 17007 -dmQ= 17008 -IHB1YmxpY2F0aW9u 17009 -ICMjIw== 17010 -IGZhY2Vk 17011 -cmFoYW0= 17012 -IENhcHQ= 17013 -MzM2 17014 -QXNzZXQ= 17015 -IENvbnN0YW50cw== 17016 -IGxvYW5z 17017 -X0lQ 17018 -IEZpc2g= 17019 -UmVkdWM= 17020 -X21hdA== 17021 -RGF0ZUZvcm1hdA== 17022 -X21l 17023 -W11bXQ== 17024 -IGludGVncml0eQ== 17025 -IENvdXJzZQ== 17026 -bG9iYWxz 17027 -IGZhY2lsaXQ= 17028 -IGVtYnI= 17029 -IE5n 17030 -LlN5c3RlbQ== 17031 -IG1hbnVmYWN0dXJlcnM= 17032 -IHByb3Zlbg== 17033 -Lm9uQ3JlYXRl 17034 -IGFsYXJt 17035 -IMKn 17036 -IGNvbW1vbmx5 17037 -aWNvcw== 17038 -5paw 17039 -IFN0YXRpb24= 17040 -fSku 17041 -IEZpbG0= 17042 -d2k= 17043 -54k= 17044 -IGVuZ2FnZWQ= 17045 -U3RhdHM= 17046 -IGdvdmVybm1lbnRz 17047 -NTQw 17048 -IGFmZm9yZGFibGU= 17049 -X3Byb3BlcnR5 17050 -IGFnZXM= 17051 -KCctLQ== 17052 -IGbDtnI= 17053 -IFByb2Zlc3Nvcg== 17054 -IGh5ZHJv 17055 -UHVzaA== 17056 -IG9yZ2FuaXplZA== 17057 -Mjg0 17058 -QWNjZXB0 17059 -w6lt 17060 -X2NlbGw= 17061 -IG5i 17062 -cGI= 17063 -QXJ0aWNsZQ== 17064 -IHJlbW92YWw= 17065 -IGF1dGhlbnRpY2F0aW9u 17066 -IEZS 17067 -bGlkZQ== 17068 -IHBsZWFzdXJl 17069 -YXBvbA== 17070 -IHBhcnRpdGlvbg== 17071 -IFNpZGU= 17072 -IGNyaW1lcw== 17073 -IGRlbW8= 17074 -aG9sZGVycw== 17075 -IFBha2lzdGFu 17076 -SW5zdHJ1Y3Rpb24= 17077 -IGV4cGVjdGF0aW9ucw== 17078 -MzMy 17079 -LnNjZW5l 17080 -ICcp 17081 -aGVz 17082 -aW5vaXM= 17083 -X1Bybw== 17084 -IG1vbGVj 17085 -YW5kYWw= 17086 -X3Nob3J0 17087 -IGRlZmF1bHRz 17088 -IG5hdGlvbnM= 17089 -aW5lbg== 17090 -IHJ0 17091 -T0NL 17092 -UGFja2V0 17093 -U0I= 17094 -IFNIQUxM 17095 -X2NvbnRlbnRz 17096 -aXNlY29uZHM= 17097 -dmVydHk= 17098 -w6F0 17099 -R3VpZA== 17100 -bm9t 17101 -IGNvbmNsdXNpb24= 17102 -LlVwZGF0ZQ== 17103 -IGxvdmVseQ== 17104 -IGVtaXQ= 17105 -YmVj 17106 -CQkJCSA= 17107 -IGludGVsbGVjdA== 17108 -IGJyZXc= 17109 -ZWN5Y2xl 17110 -RmlyZQ== 17111 -MzU4 17112 -IGFkbWl0 17113 -IGFyYml0 17114 -IGFycmFuZw== 17115 -IE1JTg== 17116 -TWFpbA== 17117 -IE5hdGl2ZQ== 17118 -Q3Vy 17119 -IGNvbnZlbnQ= 17120 -LlJ1bnRpbWU= 17121 -In0K 17122 -LlJ1bg== 17123 -IHByaW50ZWQ= 17124 -IGNvbnZlbmllbnQ= 17125 -LmFy 17126 -bW9jaw== 17127 -IEFkbWluaXN0cmF0aW9u 17128 -44G+ 17129 -IGVsZWN0cm9u 17130 -ZmxhdGU= 17131 -IGxvbWJvaw== 17132 -IGphdmFmeA== 17133 -bmg= 17134 -IHN1cHBsaWVz 17135 -IHZpc2l0aW5n 17136 -YWhs 17137 -IHBvd2Rlcg== 17138 -IHVsdGltYXRl 17139 -IG9yaWVudGF0aW9u 17140 -dXRhcw== 17141 -X3NjYWxl 17142 -Q29uZmlybQ== 17143 -cGhvbmVz 17144 -IE9wZXJhdGlvbg== 17145 -L1Q= 17146 -NDQz 17147 -X0lOVEVS 17148 -IGFpcnBvcnQ= 17149 -IG1ldHJpY3M= 17150 -IHBoZW5vbWVu 17151 -YXVkaW8= 17152 -MzM0 17153 -IG1haQ== 17154 -KEs= 17155 -aHU= 17156 -YWxsaW5n 17157 -cm9kdWN0aW9u 17158 -IFRyYW5zcG9ydA== 17159 -IE5PVEU= 17160 -5paH 17161 -IGZld2Vy 17162 -X1RJTQ== 17163 -7Kc= 17164 -0LrQuA== 17165 -QWdl 17166 -RklO 17167 -Mjk0 17168 -IOyd 17169 -IEF0dHJpYnV0ZQ== 17170 -Z3JvdXBz 17171 -ZXJr 17172 -YXR0bw== 17173 -LmRlZmluZQ== 17174 -LkFzcE5ldENvcmU= 17175 -YXRlZ29yaWE= 17176 -IFNpcg== 17177 -KGZvcm0= 17178 -PFVzZXI= 17179 -LnJvdW5k 17180 -X2RheQ== 17181 -LkFsbA== 17182 -U2VydmxldFJlc3BvbnNl 17183 -Lk5v 17184 -bGFyZ2U= 17185 -SUdI 17186 -cXVlbnQ= 17187 -IHZpcnVz 17188 -IHJldHJv 17189 -IGltcGVy 17190 -Qml0bWFw 17191 -IHZpY2U= 17192 -IG9mZmVuc2U= 17193 -aXN0ZQ== 17194 -IEFVVEg= 17195 -IOqw 17196 -VG9vbFN0cmlwTWVudUl0ZW0= 17197 -R3U= 17198 -IHJhcGU= 17199 -IERhdmlz 17200 -IG92ZXJ3aGVs 17201 -OmZsdXR0ZXI= 17202 -LXRhYmxl 17203 -IENvbnN0cnVjdG9y 17204 -UHJpdmF0ZQ== 17205 -ZXZlbg== 17206 -Y2hy 17207 -IGFwcGxpZXM= 17208 -X2F0dHJpYnV0ZQ== 17209 -IGNvbnRyaWJ1dGU= 17210 -RVZFUg== 17211 -Mjg5 17212 -TGluZXM= 17213 -IEFmZ2hhbg== 17214 -VmlzaXRvcg== 17215 -IFNM 17216 -c2Vhc29u 17217 -Q1U= 17218 -IGludHJvZHVjdGlvbg== 17219 -IG1hdHBsb3RsaWI= 17220 -xZE= 17221 -IG5ld3NwYXBlcg== 17222 -4oCUYW5k 17223 -PHRhZw== 17224 -IGluaQ== 17225 -IGRpdmVyc2U= 17226 -SWdub3JlQ2FzZQ== 17227 -MzUz 17228 -IFVy 17229 -QWdlbnQ= 17230 -IGJ1bGw= 17231 -LmVtaXQ= 17232 -KEV4Y2VwdGlvbg== 17233 -YXJMYXlvdXQ= 17234 -IGluY3JlZGlibHk= 17235 -IFRydXN0 17236 -PXso 17237 -LW5hdg== 17238 -IGVxdWFscw== 17239 -IGxhZHk= 17240 -IFBvZA== 17241 -ZGlzYw== 17242 -YWxhbQ== 17243 -IElW 17244 -4pk= 17245 -aXZpZHVhbA== 17246 -cGhp 17247 -MDE3 17248 -YWRkZWQ= 17249 -IGRpZmZpY3VsdHk= 17250 -IGNvbXBhY3Q= 17251 -NTMw 17252 -IEFjdGlvblJlc3VsdA== 17253 -Y2Vycw== 17254 -X2NsYXNzZXM= 17255 -Tm9uTnVsbA== 17256 -IHF1aXQ= 17257 -IHBvdQ== 17258 -U3dpdGNo 17259 -aXJz 17260 -LXRlc3Q= 17261 -IEtpbmQ= 17262 -IENhbGVuZGFy 17263 -NDA2 17264 -IHN0cmVhbWluZw== 17265 -fScs 17266 -Mjc5 17267 -U1c= 17268 -IHN0ZWFk 17269 -b2Nh 17270 -IHByb3ZpbmNl 17271 -OTc4 17272 -IGNvbHNwYW4= 17273 -IHBlcnNvbm5lbA== 17274 -IEVtcGxveWVl 17275 -IHByb2R1Y2Vy 17276 -IGV2ZXJ5d2hlcmU= 17277 -b2Ri 17278 -0J8= 17279 -YnNvbHV0ZQ== 17280 -YWN0aXZhdGU= 17281 -IGdyaW5kaW5n 17282 -IEJ1aWxkaW5n 17283 -IFNhbmRlcnM= 17284 -KHNj 17285 -IE9mZnNldA== 17286 -Ly8vLy8vLy8vLy8v 17287 -fTsNCg0K 17288 -KHsi 17289 -IHNjYW5m 17290 -IFlZ 17291 -CWRlZmVy 17292 -IGpldw== 17293 -IHJlc3RyaWN0aW9ucw== 17294 -Lm1w 17295 -W2w= 17296 -5LiL 17297 -bGFiZWxz 17298 -cmVkaWNhdGU= 17299 -YXdlc29tZQ== 17300 -IHdhdmVz 17301 -IGNvbmZyb250 17302 -IG1lYXN1cmVk 17303 -IGRhdGFz 17304 -X2V4aXQ= 17305 -MzU1 17306 -b3R0b24= 17307 -IHNob3VsZGVy 17308 -YXNrYQ== 17309 -KyM= 17310 -ICAgICAgICAKICAgICAgICAK 17311 -IHRyb29wcw== 17312 -Mjkz 17313 -IFVuZA== 17314 -X2NhcmQ= 17315 -d2ljaA== 17316 -IG5vdXM= 17317 -ICIvIg== 17318 -c2I= 17319 -IGNvbW11bmljYXRpb25z 17320 -RXhwb3J0 17321 -IGRlY29kZQ== 17322 -dGhz 17323 -aW50ZXJwcmV0 17324 -QnlOYW1l 17325 -IFNwaXJpdA== 17326 -ZWRnZXM= 17327 -T0xF 17328 -IEVN 17329 -dGl0 17330 -IFRocm91Z2g= 17331 -IGJpbw== 17332 -IFBhY2thZ2U= 17333 -b3JuZQ== 17334 -Mjkx 17335 -IH0u 17336 -NDEx 17337 -YDsK 17338 -IG9rYXk= 17339 -IFplYWxhbmQ= 17340 -aWRlbnRpdHk= 17341 -KG5leHQ= 17342 -IEJhbmc= 17343 -TGlicmFyeQ== 17344 -IGhlYXZpbHk= 17345 -aWxvbg== 17346 -IGRpcGw= 17347 -IHJvdGF0ZQ== 17348 -cHV0cw== 17349 -KScsCg== 17350 -IERhdGFUYWJsZQ== 17351 -IG1heW9y 17352 -LnRvTG93ZXJDYXNl 17353 -IHNvbWVob3c= 17354 -IE5vcnRoZXJu 17355 -YWxj 17356 -IGNhcGFiaWxpdGllcw== 17357 -IHZpYnI= 17358 -Kwo= 17359 -IFN1 17360 -Mjg2 17361 -IFJlc2V0 17362 -X21lYW4= 17363 -IGNpZw== 17364 -LmNsb3Vk 17365 -IEJhbmQ= 17366 -IEZhY3Rvcnk= 17367 -IEFyaXpvbmE= 17368 -X2lv 17369 -b3BoZXI= 17370 -IGNvbnNjaW91cw== 17371 -IMO2 17372 -XENvbnRyb2xsZXJz 17373 -X3NwZWVk 17374 -IEZhYw== 17375 -X0NvbQ== 17376 -IEJpYmxl 17377 -d2Vu 17378 -RURJVA== 17379 -IHVubg== 17380 -IFN0YWZm 17381 -IElubg== 17382 -IG1lY2hhbmlzbQ== 17383 -IE1lbWJlcnM= 17384 -IG1pZ3JhdGlvbkJ1aWxkZXI= 17385 -J10uJw== 17386 -LmdldEludA== 17387 -PHZvaWQ= 17388 -CWZyZWU= 17389 -b2lkcw== 17390 -XFN1cHBvcnQ= 17391 -IGF1dG9tYXRpYw== 17392 -IGNoYW5jZXM= 17393 -0LY= 17394 -IGNvbXBsaWNhdGVk 17395 -W3Jvdw== 17396 -YWhvbw== 17397 -IH0KCgoK 17398 -TW9kZWxz 17399 -V2lu 17400 -IHRhcGU= 17401 -aXJ1cw== 17402 -aXpvbg== 17403 -b25vbXk= 17404 -KCJf 17405 -Oi4= 17406 -LnN0ZXJlb3R5cGU= 17407 -Mjk2 17408 -KGVudg== 17409 -X3JlY3Q= 17410 -KHdpdGg= 17411 -IGFzc2VydFRoYXQ= 17412 -IGNvbnN0cmFpbnRz 17413 -cHV0eQ== 17414 -RW1wbG95ZWU= 17415 -NjIw 17416 -VEQ= 17417 -IGd1aXRhcg== 17418 -ODc1 17419 -IEpld3M= 17420 -LnByb2Nlc3M= 17421 -IGZpY3Rpb24= 17422 -IFNoYXJlZA== 17423 -4pSA4pSA 17424 -IHByb3BhZw== 17425 -Lk5ldA== 17426 -IGFjaGlldmVk 17427 -CVE= 17428 -IG51cnM= 17429 -U2hhcmVk 17430 -X0ZBSUxVUkU= 17431 -IGJlaGF2aW91cg== 17432 -IGNvbHM= 17433 -aXNtbw== 17434 -IGZlbWlu 17435 -IGNoYWxsZW5naW5n 17436 -IHBvc3Rpbmc= 17437 -ZW5jaWw= 17438 -IGNhcHR1cmVk 17439 -IERvdQ== 17440 -KHdvcmQ= 17441 -IFR1cmtleQ== 17442 -cGFuaWVz 17443 -IHJlcHV0YXRpb24= 17444 -T1JNQUw= 17445 -IGVsaWdpYmxl 17446 -cHJvdG9jb2w= 17447 -NDE0 17448 -aWRhcw== 17449 -KGZyb20= 17450 -MzQ0 17451 -IGZpbmFuY2U= 17452 -LXBlcg== 17453 -IGdvdHRlbg== 17454 -SEE= 17455 -ZHVyYXRpb24= 17456 -IFBhcmVudA== 17457 -Njc4 17458 -IGludmVudA== 17459 -IHJlc3RhcnQ= 17460 -0L7Qu9GM 17461 -cml0aW9u 17462 -KHJz 17463 -PGJvb2w= 17464 -aWVydA== 17465 -IG1vZGlmaWNhdGlvbg== 17466 -IFRY 17467 -cmVhZGNydW1i 17468 -YmFuaw== 17469 -MzI2 17470 -JC8= 17471 -IE1pbGxlcg== 17472 -XSksCg== 17473 -LkNoZWNrZWQ= 17474 -IHNhY3I= 17475 -c2VjdXJpdHk= 17476 -IHBvc2U= 17477 -IEJyYWQ= 17478 -IGZpdG5lc3M= 17479 -IGFubm91bmNlbWVudA== 17480 -YXRpb25Ub2tlbg== 17481 -IHNlcnZlcw== 17482 -bmVlZA== 17483 -IGdlb21ldHJ5 17484 -QVJT 17485 -5oA= 17486 -YW5kaWRhdGU= 17487 -IHNwcml0ZQ== 17488 -X3NwbGl0 17489 -V2Vlaw== 17490 -YWRpZXM= 17491 -PigK 17492 -Pz4i 17493 -IC8vLwo= 17494 -IGVpbmVy 17495 -IHdlZWtseQ== 17496 -CWxvZ2dlcg== 17497 -X3BvcA== 17498 -X21hbg== 17499 -IG1pZ3JhdGlvbnM= 17500 -IGFza3M= 17501 -IGJz 17502 -IGZhbGxz 17503 -LldoZXJl 17504 -LWhlaWdodA== 17505 -X2ZlYXR1cmU= 17506 -Lk1pbg== 17507 -IGh5cGVy 17508 -IHZvbGF0aWxl 17509 -IHR3ZW50eQ== 17510 -VHlwb2dyYXBoeQ== 17511 -VW5hYmxl 17512 -RGV0 17513 -LGY= 17514 -LW1vZA== 17515 -IHNldHRsZW1lbnQ= 17516 -IGNvbnRyYWN0cw== 17517 -bm9tZQ== 17518 -QmFk 17519 -IEJyaWFu 17520 -NzY4 17521 -KHVzZXJuYW1l 17522 -ISEhIQ== 17523 -IGhhY2s= 17524 -LkZpZWxk 17525 -SFI= 17526 -IEpvcmRhbg== 17527 -aXph 17528 -IMKg 17529 -IFNoZXI= 17530 -LmhlYWRlcg== 17531 -KG90aGVy 17532 -IER1Yg== 17533 -KG9w 17534 -IFJvdW5k 17535 -IHZpZQ== 17536 -IGFwcGw= 17537 -CUo= 17538 -IEluc2VydA== 17539 -IExQ 17540 -cmVnb24= 17541 -IE1QSQ== 17542 -IGFuY2hvcg== 17543 -YWNh 17544 -w7hy 17545 -IGFkZQ== 17546 -YW5jaG9y 17547 -cXVlZQ== 17548 -IFRyZWVOb2Rl 17549 -IHRhcmdldGVk 17550 -IGxhaWQ= 17551 -QUJFTA== 17552 -dmV0 17553 -IE9yaWdpbg== 17554 -QW50 17555 -LicpOwo= 17556 -ZXhwZWN0 17557 -ZWRSZWFkZXI= 17558 -IE1ham9y 17559 -IGluY2g= 17560 -Q29tcGFy 17561 -IHByZXZpZXc= 17562 -IGlsbG5lc3M= 17563 -IENPTlRSQUNU 17564 -IEluZGVwZW5k 17565 -dXVpZA== 17566 -IG5vbWU= 17567 -IHRj 17568 -IEF2ZW51ZQ== 17569 -aXNhbg== 17570 -IHBocmFzZQ== 17571 -X21vdmU= 17572 -Iilb 17573 -NDEy 17574 -IHByb3Zpc2lvbg== 17575 -IGNvbmNlbnRy 17576 -X0lS 17577 -IFV0 17578 -KCkr 17579 -IG5hcw== 17580 -ISw= 17581 -IFJvYmlu 17582 -aWF0aW9ucw== 17583 -YXRpdHVkZQ== 17584 -IHB4 17585 -IFdpdGhvdXQ= 17586 -L2Jhc2g= 17587 -ZWt0 17588 -cmVlbWVudA== 17589 -MzQy 17590 -T2JzZXJ2ZXI= 17591 -MzE4 17592 -IFJlZ2lvbg== 17593 -VUJMSUM= 17594 -IHsvLw== 17595 -S04= 17596 -5bc= 17597 -R2FtZU9iamVjdA== 17598 -5b4= 17599 -ZW5jb2Rpbmc= 17600 -ICoqKg== 17601 -cHJvamVjdHM= 17602 -IHRr 17603 -IGNoZWVzZQ== 17604 -RU1QTA== 17605 -YXJv 17606 -INin2YQ= 17607 -NjEw 17608 -MzM3 17609 -IGNvbnNpc3Rz 17610 -cmVmcmVzaA== 17611 -dXJlYXU= 17612 -IFNjYW5uZXI= 17613 -IHNvaWw= 17614 -IGZsYXZvcg== 17615 -RGF0YVNvdXJjZQ== 17616 -RXhlY3V0ZQ== 17617 -0LXQvdC40LU= 17618 -IHNoaXQ= 17619 -5YiG 17620 -PGFueQ== 17621 -IHJldHJpZXZl 17622 -IGJlbG9uZ3M= 17623 -LnN0cmlw 17624 -YWJzb2x1dGU= 17625 -IGV4cGFuZGVk 17626 -Ym95 17627 -KTot 17628 -IHJlc2N1ZQ== 17629 -LkpMYWJlbA== 17630 -IHJlbHk= 17631 -IGFsaWdubWVudA== 17632 -LWZhbWlseQ== 17633 -IHJlbmQ= 17634 -T0xVTU4= 17635 -IGJvcnJvdw== 17636 -IHF1b3Rlcw== 17637 -IExldw== 17638 -IHNob3dlcg== 17639 -IERFTEVURQ== 17640 -X2xvb3A= 17641 -ISIKCg== 17642 -CXJl 17643 -IGF0dGVtcHRlZA== 17644 -YXZlcmFnZQ== 17645 -IFBhaW50 17646 -cXVpc2l0aW9u 17647 -b2xlbg== 17648 -IGxpdGVyYXR1cmU= 17649 -IFJlZmVyZW5jZQ== 17650 -X1RFWFRVUkU= 17651 -IFNlZw== 17652 -IEluZHVzdA== 17653 -Y3R5cGU= 17654 -RFVDVA== 17655 -X0hPU1Q= 17656 -IFRyYWRl 17657 -IHBsdWdpbnM= 17658 -IGJyZWFzdA== 17659 -dWxzZQ== 17660 -IGNyZWF0dXJl 17661 -Mzcy 17662 -44GZ 17663 -IFdp 17664 -IHN1cHBsaWVk 17665 -Y29sbA== 17666 -ISgi 17667 -IGZ1Y2tpbmc= 17668 -IENocm9tZQ== 17669 -IFVyaQ== 17670 -IE5hdGlvbg== 17671 -IHZlcnRpY2Vz 17672 -VEhF 17673 -IE9yaWdpbmFs 17674 -b25kZQ== 17675 -IHNoYXJw 17676 -IGNvb2tpbmc= 17677 -MzQ3 17678 -IHsvKg== 17679 -IFBzeWNo 17680 -IEhvbGx5d29vZA== 17681 -PSRf 17682 -LkRvY2s= 17683 -IGdlcg== 17684 -IGJvbmU= 17685 -X2Nvbm4= 17686 -X3NlYw== 17687 -eXNpY3M= 17688 -ID0i 17689 -Mjk4 17690 -U2Fs 17691 -c2Y= 17692 -IGRlZXBseQ== 17693 -YW5nbGVz 17694 -VGVybQ== 17695 -YmVsbA== 17696 -IFF1aWNr 17697 -NTYw 17698 -ZW5lcmF0aW9u 17699 -YWRpb0J1dHRvbg== 17700 -5YWl 17701 -fQ0KDQoNCg== 17702 -IGNhcHRpb24= 17703 -bGM= 17704 -IEVM 17705 -LFs= 17706 -ICAgICAgDQo= 17707 -cmV0dA== 17708 -KG1ldGhvZA== 17709 -IEZsYXNo 17710 -NDcw 17711 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 17712 -V0lTRQ== 17713 -LnNjYWxl 17714 -IHJvdWdobHk= 17715 -X2NoaWxk 17716 -bWVtb3J5 17717 -YXlpbmc= 17718 -IGluaXRpYWxpemVk 17719 -aW5hdG9y 17720 -0LDRgA== 17721 -IHNjYWxhcg== 17722 -IEhv 17723 -YWlyZXM= 17724 -KGNvbHVtbg== 17725 -LmRlc3Ryb3k= 17726 -UEFDSw== 17727 -IGhlbQ== 17728 -YW5nZWw= 17729 -X1NVQg== 17730 -LnF1 17731 -INc= 17732 -REVGQVVMVA== 17733 -cG9zaXRvcmllcw== 17734 -NTAz 17735 -IExlbmd0aA== 17736 -IEZhc3Q= 17737 -IHNpZ25hbHM= 17738 -IC8vJA== 17739 -cmllcnM= 17740 -IGR1bW15 17741 -QU5Z 17742 -IHBlcnNvbmFsaXR5 17743 -IGFncmljdWx0 17744 -UGxhdGZvcm0= 17745 -RVJP 17746 -IFRyYQ== 17747 -IGVub3Jt 17748 -CVc= 17749 -QWN0aW9uUmVzdWx0 17750 -IGF2ZXI= 17751 -W3N0cg== 17752 -ICctLQ== 17753 -LlNwcmludGY= 17754 -IGRlYnV0 17755 -INGH 17756 -aGV4 17757 -X3V0aWxz 17758 -IHBi 17759 -VUlUYWJsZVZpZXc= 17760 -IHp1cg== 17761 -LmVuY29kZQ== 17762 -NDE2 17763 -IHZhZw== 17764 -LmVycm9ycw== 17765 -0L7QvQ== 17766 -IG1y 17767 -IEF3YXJk 17768 -IGNwdQ== 17769 -IHByZXNzZWQ= 17770 -J2VzdA== 17771 -IEZlc3RpdmFs 17772 -J1Q= 17773 -IGFr 17774 -cmVzb2x2ZQ== 17775 -MDQz 17776 -Lm1l 17777 -IG5pYw== 17778 -IGdlbnJl 17779 -IGF0dHJpYg== 17780 -IE1vb24= 17781 -IGFycml2ZQ== 17782 -IERhdGluZw== 17783 -IHRt 17784 -LkNvbmZpZ3VyYXRpb24= 17785 -NTA1 17786 -LnJlZA== 17787 -IGdsbQ== 17788 -IHN0YXRpb25z 17789 -c3dpdGNo 17790 -IHRpZWQ= 17791 -5Lq6 17792 -IC8+PC8= 17793 -UXVhbnRpdHk= 17794 -cXVpcnk= 17795 -X3RhYg== 17796 -IGFsZw== 17797 -VG9hc3Q= 17798 -cmVzaXpl 17799 -cXVlc3Rpb25z 17800 -c2NoZW1h 17801 -TGl0ZXJhbA== 17802 -KGVudGl0eQ== 17803 -TkVDVElPTg== 17804 -Y2hhbmdlZA== 17805 -X0ZJRUxE 17806 -X0hFSUdIVA== 17807 -IG9yZ2FuaWM= 17808 -UFJF 17809 -IENhdA== 17810 -LkRyYXc= 17811 -RXM= 17812 -IGxvdWQ= 17813 -Njgw 17814 -ICAgICAgICAJ 17815 -IEthdA== 17816 -IGhlYXA= 17817 -4oCcSXQ= 17818 -MDcw 17819 -ZXRy 17820 -IHVubGlrZWx5 17821 -ZXJhbHM= 17822 -L2F1dGg= 17823 -NTAy 17824 -dG9kbw== 17825 -UGxhY2U= 17826 -UG9zdGVk 17827 -Q29tbWVudHM= 17828 -IFRlY2g= 17829 -IEZpbmFsbHk= 17830 -ZWdyYXRpb24= 17831 -IG1pbmltYWw= 17832 -IEZpbGVz 17833 -IHRhbWI= 17834 -66Gc 17835 -IFJlbGVhc2U= 17836 -NDI1 17837 -LnJlc2l6ZQ== 17838 -IM8= 17839 -Y29sbGVjdA== 17840 -PXA= 17841 -IExJQUJMRQ== 17842 -IHByb2R1Y2luZw== 17843 -LXdyYXBwZXI= 17844 -IHNpbmdsZXM= 17845 -IE5CQQ== 17846 -b3Jy 17847 -ZXJlbg== 17848 -LmFkZEFjdGlvbg== 17849 -IHRoZXNpcw== 17850 -ZG4= 17851 -UFRZ 17852 -LmRlcw== 17853 -IGJhY3Rlcg== 17854 -IEV4cHJlc3M= 17855 -ICopCg== 17856 -5ZE= 17857 -L2FkbWlu 17858 -c2Vjb25kcw== 17859 -5Yqf 17860 -dXNzaW9u 17861 -YWJldGg= 17862 -IENvbXB1dGVy 17863 -IHJ1bGluZw== 17864 -KCIuLi8= 17865 -LkdFVA== 17866 -IE1lZGFs 17867 -aXRpb25hbGx5 17868 -Y29tbWl0 17869 -Zm9jdXM= 17870 -X0xFVkVM 17871 -aW5kYQ== 17872 -RmFjdA== 17873 -PW5w 17874 -PSIiPgo= 17875 -IHN1YnNlcXVlbnQ= 17876 -cG9zYWJsZQ== 17877 -LWZsdWlk 17878 -IHRob3JvdWdo 17879 -IHB1YmxpY2x5 17880 -YXB0ZXJz 17881 -IFdpbHNvbg== 17882 -X1BSRQ== 17883 -eWFyZA== 17884 -5Lw= 17885 -CWlu 17886 -MzM5 17887 -IHJldmVycw== 17888 -IGJ1bGxldA== 17889 -Y3JpYmVk 17890 -bmVzb3Rh 17891 -ICgkXw== 17892 -YW5ub24= 17893 -Y3Vyc29y 17894 -IGNsb3RoaW5n 17895 -IE11bHRp 17896 -Mjg3 17897 -Oics 17898 -IHZlc3M= 17899 -b3JkaW5hdG9y 17900 -IGVpbmVt 17901 -Q2Fubm90 17902 -IGFybWVk 17903 -CVY= 17904 -5LiK 17905 -LkZsYXQ= 17906 -IFNlcA== 17907 -IFN1YmplY3Q= 17908 -X2ZvbnQ= 17909 -IGNoYXJhY3RlcmlzdGljcw== 17910 -RG9uZQ== 17911 -ZWxu 17912 -IyMjIyMjIyMjIyMj 17913 -UE9T 17914 -IGRlbnNpdHk= 17915 -IFBsYXRmb3Jt 17916 -LWl0ZW1z 17917 -IG92ZXJz 17918 -IHB1c2hpbmc= 17919 -56Q= 17920 -LkNvbm5lY3Rpb24= 17921 -X3Rlcm0= 17922 -IGluaXRpYWxpemF0aW9u 17923 -X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= 17924 -56w= 17925 -LmRvY3VtZW50 17926 -bGVzaA== 17927 -CWRvY3VtZW50 17928 -IFBpbg== 17929 -w6dh 17930 -IGRlZmluaXRpb25z 17931 -LlBhdGg= 17932 -X1dSSVRF 17933 -IAkK 17934 -Pz4KCg== 17935 -IHRlcnJpYmxl 17936 -YmVhbg== 17937 -aWNrZXRz 17938 -IFNW 17939 -QnV5 17940 -KHRhc2s= 17941 -IHJlZ2ltZQ== 17942 -Z29vZ2xl 17943 -IGNyYWNr 17944 -LnZpc2l0 17945 -TlVN 17946 -ZW5lcmd5 17947 -IHN0cnVjaw== 17948 -X3NhbXBsZQ== 17949 -LnBheWxvYWQ= 17950 -IHJldmlz 17951 -IFNjZW5l 17952 -IHBn 17953 -IGJyZWFrZmFzdA== 17954 -VVJSRU5U 17955 -LmNoYXJBdA== 17956 -X2V4Y2VwdGlvbg== 17957 -IEFudG9u 17958 -IGd1aWRlbGluZXM= 17959 -IGV4aGF1c3Q= 17960 -IEZpbmFuY2lhbA== 17961 -IGluZGVudA== 17962 -IGRlc2t0b3A= 17963 -SGlkZGVu 17964 -RmFpbHVyZQ== 17965 -IHByaW5jaXBsZQ== 17966 -IGl2 17967 -IHNla3M= 17968 -bmV0d29yaw== 17969 -IG51bWJlck9m 17970 -IEFsYmVydA== 17971 -CWxvbmc= 17972 -ODAx 17973 -LC4= 17974 -IHplcm9z 17975 -ZmFkZQ== 17976 -IFR5cA== 17977 -IFRlcm0= 17978 -IEFydHM= 17979 -LkFwcGxpY2F0aW9u 17980 -IGJlaGFsZg== 17981 -5oi3 17982 -IG1lcmU= 17983 -KGAkew== 17984 -IGF3YXJlbmVzcw== 17985 -ZWxwZXJz 17986 -ZmxpeA== 17987 -IHdlaWdo 17988 -IGVzdGltYXRlcw== 17989 -LmNoaWxk 17990 -L08= 17991 -IEJpdG1hcA== 17992 -LmJvdHRvbQ== 17993 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 17994 -RXhwZWN0 17995 -ZW50bw== 17996 -IEZvcnVt 17997 -dmVyYWw= 17998 -IGphaWw= 17999 -IGFiaWxpdGllcw== 18000 -IEhPTEQ= 18001 -IENpdA== 18002 -IGR5bmFt 18003 -IGdyYXk= 18004 -CQkJCQkJCQkJCQkJCQ== 18005 -Lm5leHRJbnQ= 18006 -YW50bHk= 18007 -IEFSSVNJTkc= 18008 -KHByaXZhdGU= 18009 -IHJlamVjdGVk 18010 -IE5pYw== 18011 -IGxlYXRoZXI= 18012 -PXsK 18013 -YWx5dGljcw== 18014 -dGhldGlj 18015 -LlRvcA== 18016 -Mzcz 18017 -LlBhZ2U= 18018 -PXtg 18019 -IDsNCg== 18020 -ZGVwdGg= 18021 -bWFubg== 18022 -V0Q= 18023 -IFNvbQ== 18024 -LlJpZ2h0 18025 -ICl9Cg== 18026 -IHRyYWl0 18027 -w5c= 18028 -aWFj 18029 -IHJ2 18030 -U2FtcGxl 18031 -LlhtbA== 18032 -b3BwZWQ= 18033 -INGE 18034 -bGlzdHM= 18035 -IHRlYXI= 18036 -aXZlcnNhcnk= 18037 -LmNvbGxlY3Rpb24= 18038 -IENvbnN0aXR1dGlvbg== 18039 -IEh0dHBSZXNwb25zZQ== 18040 -IGJyaWxs 18041 -IFByb20= 18042 -aG92ZXI= 18043 -MzY2 18044 -IE1pYW1p 18045 -IGFyZ3Vl 18046 -X2Zsb2F0 18047 -NTA0 18048 -IOOC 18049 -IG5hdA== 18050 -IFRhbA== 18051 -IGludGVncmF0aW9u 18052 -KGN1cg== 18053 -IHJlbW92aW5n 18054 -IGNvZWZm 18055 -IFRob3VnaA== 18056 -IGZvcmVjYXN0 18057 -NDA4 18058 -IFZlZ2Fz 18059 -U2l0ZQ== 18060 -MzQ2 18061 -IHRyYWI= 18062 -IEhlbnJ5 18063 -LWk= 18064 -IGludm9sdmVz 18065 -QlQ= 18066 -IHNsbw== 18067 -SW52b2tl 18068 -IGx1Y2t5 18069 -MDI1 18070 -cmF0 18071 -ID8K 18072 -IGhhbmRsZWQ= 18073 -KGZk 18074 -Y29udGVudHM= 18075 -IE9GRg== 18076 -UkY= 18077 -IHN0eQ== 18078 -IE1vdG9y 18079 -dGVyeQ== 18080 -dGF4 18081 -TUFQ 18082 -IE1ycw== 18083 -IHBob25lcw== 18084 -IFVJVmlldw== 18085 -IikpKTsK 18086 -KGRldg== 18087 -IElyaXNo 18088 -MDE5 18089 -IHdz 18090 -REk= 18091 -X09GRlNFVA== 18092 -IEV2ZW50cw== 18093 -IHN0YWdlcw== 18094 -IH0vLw== 18095 -IGhhYmVu 18096 -U1RBTkNF 18097 -IFNpbg== 18098 -IE1vbmV5 18099 -KHRvcA== 18100 -IGFwcG9pbnRtZW50 18101 -VkVSU0lPTg== 18102 -bWV0YWRhdGE= 18103 -X2NvbW1lbnQ= 18104 -IGNvbGxlYWd1ZXM= 18105 -bWFwcw== 18106 -4pg= 18107 -CgkK 18108 -KGFs 18109 -X3JlcQ== 18110 -IGZ1dA== 18111 -IGFyY2hpdGVjdHVyZQ== 18112 -MzUx 18113 -IFdIRVRIRVI= 18114 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 18115 -X3NjcmVlbg== 18116 -IHN0eWxlVXJscw== 18117 -IG1vbnN0ZXI= 18118 -LnVw 18119 -cGhpYQ== 18120 -IHByb2Nlc3Nvcg== 18121 -IFRlcnI= 18122 -PScs 18123 -IE1hbnVmYWN0 18124 -IE5U 18125 -a2Vs 18126 -aWJlcm4= 18127 -CWZpbGU= 18128 -QWxp 18129 -cmllbnRhdGlvbg== 18130 -IC8vIQ== 18131 -YXBvcmU= 18132 -YW5lb3Vz 18133 -IENyZWF0 18134 -Zm9sZGVy 18135 -NDE1 18136 -IGhheQ== 18137 -U3VwcHJlc3M= 18138 -KGxlZnQ= 18139 -IGV1cm8= 18140 -IGRpc2NsYWltZXI= 18141 -dXN0cnk= 18142 -c2hpcHM= 18143 -X2Zk 18144 -IEZh 18145 -X2luc2VydA== 18146 -IHJvbA== 18147 -aWZ0aW5n 18148 -IENvbW1lbnRz 18149 -X2Jy 18150 -IGxvc3Nlcw== 18151 -IEFkZGVk 18152 -Y2hhcmc= 18153 -INC/0L4= 18154 -X3N5c3RlbQ== 18155 -IFNvbWV0aW1lcw== 18156 -IFNwYWlu 18157 -KGdyb3Vw 18158 -aWFsaXM= 18159 -IGRvbGxhcg== 18160 -IEFyZ3M= 18161 -NDk5 18162 -Mjk3 18163 -cXVpcmVz 18164 -IFRlbg== 18165 -LnNjc3M= 18166 -IHN1cnZpdmU= 18167 -dXNhZ2U= 18168 -IGp1bg== 18169 -aW1pdGVy 18170 -77yBCgo= 18171 -IGZpZnRo 18172 -dG9nZ2xl 18173 -IGRlY2xpbmU= 18174 -KCQi 18175 -KExvbmc= 18176 -aW5nZQ== 18177 -IHBpbG90 18178 -LWxpZ2h0 18179 -LXJhZGl1cw== 18180 -IHBvZGNhc3Q= 18181 -IG5hdHVyYWxseQ== 18182 -UGFnZXM= 18183 -5Li6 18184 -IERlc3BpdGU= 18185 -IGxpZ2h0aW5n 18186 -IGNyYXRl 18187 -IEJpbmFyeQ== 18188 -IHJlZHVjaW5n 18189 -IGVsZWc= 18190 -IE1vdXNl 18191 -IFRlc3RCZWQ= 18192 -IGJlZm9yZUVhY2g= 18193 -X0FSUkFZ 18194 -UmVkaXJlY3Q= 18195 -MzI5 18196 -IGZsb29k 18197 -IHNoaXBz 18198 -MzYz 18199 -IGVsZWN0cmljaXR5 18200 -KSoo 18201 -6rg= 18202 -IFZpZXQ= 18203 -aGVybw== 18204 -IGRpYQ== 18205 -IEtlbnQ= 18206 -aGVhcnQ= 18207 -IHRocmVhdHM= 18208 -X2FjYw== 18209 -IHN5bWJvbHM= 18210 -aXNjaGVu 18211 -X2luc3Q= 18212 -Q3JpdGVyaW9u 18213 -IFRJTQ== 18214 -LkhlaWdodA== 18215 -NTgw 18216 -IOKAmQ== 18217 -KCk7CgoK 18218 -UHJvZHVjdHM= 18219 -X1NQ 18220 -IEN5 18221 -IGRlcGVuZGVudA== 18222 -ZXN0ZQ== 18223 -IGRhdG9z 18224 -ZGl0 18225 -0LDQsg== 18226 -SUdOQUw= 18227 -IGxlc3Nvbg== 18228 -Ij4n 18229 -IENvdmVy 18230 -IEhvcGU= 18231 -IFRpbWVy 18232 -IGRhZA== 18233 -dmlkZXJz 18234 -IFBob3Q= 18235 -Lz8= 18236 -cm9weQ== 18237 -b21pbmc= 18238 -YXNpb24= 18239 -IFwo 18240 -IEVU 18241 -IFJlYWRpbmc= 18242 -IGVwaXNvZGVz 18243 -bG0= 18244 -NDIx 18245 -ZWNoYQ== 18246 -IG5ldXJv 18247 -ODIw 18248 -IGhhcm1vbg== 18249 -IGxpYmVyYWw= 18250 -LWluZA== 18251 -Mzkz 18252 -REFUQQ== 18253 -IGV2ZXJ5ZGF5 18254 -IGRpdmlkZWQ= 18255 -IEFjdGl2ZVJlY29yZA== 18256 -ZmlndXJl 18257 -VUE= 18258 -5Lk= 18259 -cmllbmRseQ== 18260 -dGVjaA== 18261 -NjAx 18262 -LmdhbWVPYmplY3Q= 18263 -0LjRgtGM 18264 -Mzc0 18265 -IG1vb24= 18266 -ZnRpbWU= 18267 -IG5vY2g= 18268 -IFRPUlQ= 18269 -IFZN 18270 -LmluaXRpYWw= 18271 -KGNoaWxk 18272 -IG11c2ljYWw= 18273 -IG9j 18274 -YmFz 18275 -IEhheQ== 18276 -MzYx 18277 -X2xvbmc= 18278 -IG1lbXNldA== 18279 -aWxleQ== 18280 -YWRlbHBoaWE= 18281 -U1Y= 18282 -cm9hdA== 18283 -X3R4 18284 -IGxvbg== 18285 -IG5nT25Jbml0 18286 -YnA= 18287 -IEdvbGRlbg== 18288 -QUNIRQ== 18289 -IHdvcnJpZWQ= 18290 -YXpp 18291 -RWFy 18292 -VGFrZQ== 18293 -KGZw 18294 -YnVyZ2g= 18295 -X0RhdGE= 18296 -Z3Jlcw== 18297 -IE9udA== 18298 -cHVz 18299 -IHRyYW5zcGFyZW50 18300 -IHBvY2tldA== 18301 -IHJhbQ== 18302 -aWdyYXRpb25z 18303 -Lg0KDQo= 18304 -IFso 18305 -IGFkb3B0ZWQ= 18306 -IHJlcG9ydGVkbHk= 18307 -IERyZWFt 18308 -IH0pKTsK 18309 -bG9zaW5n 18310 -IHRlZXRo 18311 -IEJvb2tz 18312 -Iiwm 18313 -ZW5ueQ== 18314 -TEVNRU5U 18315 -IGdlbA== 18316 -IFBsYW50 18317 -NDM3 18318 -IeKAnQ== 18319 -Lmhvc3Q= 18320 -IFJlcGx5 18321 -Mzc2 18322 -cmVuZ3Ro 18323 -IHJlY29nbml0aW9u 18324 -IH19Pgo= 18325 -TEE= 18326 -IG1pcnJvcg== 18327 -IGFzc2lzdGFudA== 18328 -KGRldmljZQ== 18329 -IHNwaXJpdHVhbA== 18330 -YnVpbGRlcg== 18331 -wqc= 18332 -IG91dHI= 18333 -IHR0 18334 -IFBFUg== 18335 -IHJhZGljYWw= 18336 -TWV0aG9kcw== 18337 -IHBhY2U= 18338 -dWR5 18339 -IGd1dA== 18340 -IEdyZWVr 18341 -IG5vbmF0b21pYw== 18342 -IFBhcGVy 18343 -X0dQSU8= 18344 -IG9ic3Q= 18345 -LkFk 18346 -dmlyb25tZW50cw== 18347 -IFNvdg== 18348 -MzU2 18349 -KGNvbg== 18350 -IFRyYW5zYWN0aW9u 18351 -LmFzc2lnbg== 18352 -CWNhdGNo 18353 -ZWx0ZXI= 18354 -IGJpdGNvaW4= 18355 -X0dS 18356 -IDw/PQ== 18357 -X2xhbmc= 18358 -7J2E 18359 -QnJvd3Nlcg== 18360 -IGNvbnNpZGVyYXRpb24= 18361 -IEV4ZWN1dGl2ZQ== 18362 -6Ze0 18363 -O1w= 18364 -IEpTT05PYmplY3Q= 18365 -IEJlbGw= 18366 -IHNwb2tlc21hbg== 18367 -fn5+fn5+fn4= 18368 -b2NrZXk= 18369 -IEdybw== 18370 -IEF3 18371 -Q29uc3RyYWludA== 18372 -IFByYWN0 18373 -IEV2ZXI= 18374 -cHJpbQ== 18375 -OnsK 18376 -X2lt 18377 -UE4= 18378 -TWlsbGlz 18379 -VU1FTlQ= 18380 -IGJhZ3M= 18381 -w6Vy 18382 -QU5ORUw= 18383 -MzU0 18384 -IGlj 18385 -IHRyYW5zcG9ydGF0aW9u 18386 -IFNhdWRp 18387 -aGFuZGxlcg== 18388 -RHJhZw== 18389 -IGhk 18390 -Y29sbGFwc2U= 18391 -X1BI 18392 -IHVi 18393 -QVJN 18394 -IEFQUA== 18395 -IHRvbmlnaHQ= 18396 -IGRpbmluZw== 18397 -UmVjb2du 18398 -IGJj 18399 -aWd0 18400 -KG51bWJlcg== 18401 -Qm9vdA== 18402 -IGVsc2V3aGVyZQ== 18403 -IGFycm93 18404 -YXJnYQ== 18405 -IGRlbGljaW91cw== 18406 -IFNO 18407 -V1I= 18408 -VmFsaWRhdGU= 18409 -IFF1YWxpdHk= 18410 -KGVtYWls 18411 -IGludGVycHJl 18412 -aWdhdGlvbg== 18413 -IGNob2NvbGF0ZQ== 18414 -NTI1 18415 -X2VkZ2U= 18416 -IHN0b3Bz 18417 -OmZ1bmN0aW9u 18418 -KXw= 18419 -IHRoYWk= 18420 -IExvYWRpbmc= 18421 -U3Rvcnk= 18422 -VHJpZ2dlcg== 18423 -YnJhbmNo 18424 -IHRk 18425 -ZW50aWNhdGVk 18426 -IGFkdmVudHVyZQ== 18427 -IGJsb2NrY2hhaW4= 18428 -RXZlbnRIYW5kbGVy 18429 -IHNxcnQ= 18430 -LlBy 18431 -TG5n 18432 -QmVjYXVzZQ== 18433 -IHZpdg== 18434 -IG9jZWFu 18435 -eWx2YW5pYQ== 18436 -0LDRgQ== 18437 -IFV0aWxz 18438 -IGRlc3Blcg== 18439 -IGRlZmVy 18440 -CXJlcXVpcmU= 18441 -aGw= 18442 -UmVxdWlyZQ== 18443 -XVw= 18444 -IGRpcmVjdGlvbnM= 18445 -X3Jlc291cmNl 18446 -IHN1YnNjcmliZQ== 18447 -IMO6 18448 -IEhlYXJ0 18449 -ZXN0cw== 18450 -LXN1Yg== 18451 -IFJo 18452 -Zm9yRWFjaA== 18453 -IGRlbGlnaHQ= 18454 -IHRlcnJpdG9yeQ== 18455 -LmNvbmN1cnJlbnQ= 18456 -ICgr 18457 -anBn 18458 -IHByZXBhcmF0aW9u 18459 -IHJvdW5kZWQ= 18460 -Q29tbQ== 18461 -LkxlZnQ= 18462 -IG9waW5pb25z 18463 -IE5hdmlnYXRpb24= 18464 -KGZpcnN0 18465 -Iiwk 18466 -IGhpcmU= 18467 -IGRldGVjdGlvbg== 18468 -LmdldEVsZW1lbnRz 18469 -IGVwcw== 18470 -IHNrbGVhcm4= 18471 -IGN6 18472 -IC8+DQo= 18473 -bWV0aWM= 18474 -IHRyYW5zZm9ybWF0aW9u 18475 -5Y+3 18476 -IHJnYg== 18477 -aXN0cmlidXRpb25z 18478 -IGltcGxpY2l0 18479 -L2lu 18480 -ZGVzdGluYXRpb24= 18481 -0LDRgtGM 18482 -WmVybw== 18483 -IHVuc2V0 18484 -OTIw 18485 -LndoZXJl 18486 -Lmdv 18487 -IGZvcm1hdGlvbg== 18488 -IGRlY2xhcmF0aW9u 18489 -KCkNCg0K 18490 -IEV4cGw= 18491 -CQkJICA= 18492 -L3Bybw== 18493 -LkpTT04= 18494 -NDQx 18495 -IGRlc2s= 18496 -LnN1YnN0cg== 18497 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 18498 -bHlu 18499 -cHNvbg== 18500 -NDA3 18501 -ZGlzYWJsZQ== 18502 -IEZ1bmM= 18503 -CUFzc2VydA== 18504 -IE1BUks= 18505 -IGRlZmVhdA== 18506 -IGJsaW5k 18507 -IGNvbnN0YW50cw== 18508 -MzYy 18509 -LmhlYWRlcnM= 18510 -VUlMRA== 18511 -IGV4cGVuc2Vz 18512 -UGl4ZWw= 18513 -IGhy 18514 -IGZlbA== 18515 -IEVhc3Rlcm4= 18516 -NDI0 18517 -NDkw 18518 -X2RlbA== 18519 -MzU3 18520 -IEN1Yg== 18521 -IHNx 18522 -CWNvdW50 18523 -IERpcmVjdG9yeQ== 18524 -IGV4Y2x1cw== 18525 -IGhpc3Rvcmlj 18526 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 18527 -IGNvbXBvc2l0aW9u 18528 -IGRhdGFHcmlkVmlldw== 18529 -IEJ1cm4= 18530 -IEJD 18531 -TWFzdGVy 18532 -IHNwYXdu 18533 -IGJlYXJpbmc= 18534 -LlNldEFjdGl2ZQ== 18535 -aWxv 18536 -IGdhbGxlcnk= 18537 -IGZvdW5kZWQ= 18538 -IGF2YWlsYWJpbGl0eQ== 18539 -LnNxcnQ= 18540 -IHBlcw== 18541 -IERPTQ== 18542 -bWF0ZQ== 18543 -T2N0 18544 -IG1hdGNoZWQ= 18545 -aXRpdml0eQ== 18546 -IGFueGlldHk= 18547 -LnByaWNl 18548 -IEluc3RhbnQ= 18549 -7Io= 18550 -IHR1dA== 18551 -SUNvbGxlY3Rpb24= 18552 -LnNoYXJlZA== 18553 -X3NxbA== 18554 -dGJs 18555 -bGlicmFyeQ== 18556 -X2Rlc3Ryb3k= 18557 -ZXJtYWw= 18558 -IE5vdGVz 18559 -IEVpbg== 18560 -IHNvdXRoZXJu 18561 -IE9USEVSV0lTRQ== 18562 -IG1hY3Jv 18563 -Lmxvd2Vy 18564 -Y2xz 18565 -Q29udGVudFZpZXc= 18566 -Lmxpbms= 18567 -Y29uc3RhbnQ= 18568 -IEJlcw== 18569 -IHNvbWVib2R5 18570 -bmI= 18571 -Mzk5 18572 -Ij57 18573 -KGxvY2Fs 18574 -Li4uLi4= 18575 -IE51bGw= 18576 -bXg= 18577 -IMOn 18578 -IHBhdXNl 18579 -LS0tLS0tLS0tLS0= 18580 -X01P 18581 -IENN 18582 -IGZvcktleQ== 18583 -IERWRA== 18584 -IGNsb3Nlc3Q= 18585 -X0RFVklDRQ== 18586 -IFN0ZXBoZW4= 18587 -IEJCQw== 18588 -IFRyYXZlbA== 18589 -UGFpbnQ= 18590 -IFJlc3VsdHM= 18591 -IFJ1bGU= 18592 -IHRw 18593 -IHJhdGluZ3M= 18594 -Y2lu 18595 -Y3N2 18596 -Pi8= 18597 -IEdPUA== 18598 -bGFk 18599 -INGA 18600 -IGluZGV4UGF0aA== 18601 -bWF0cml4 18602 -PWY= 18603 -YXJzZWQ= 18604 -IH0pOw== 18605 -IENvcw== 18606 -IFNjb3Jl 18607 -IHRhaw== 18608 -IEVTUA== 18609 -IElOQw== 18610 -X05VTEw= 18611 -LWZsZXg= 18612 -Il1b 18613 -aW50bw== 18614 -ZWxhbmQ= 18615 -QXV0aG9yaXphdGlvbg== 18616 -X0ZBTFNF 18617 -IGdhdGU= 18618 -IHZpZA== 18619 -aXN0ZW50 18620 -VElNRQ== 18621 -IHJld3JpdGU= 18622 -IHRpZQ== 18623 -IGFyY2hpdmU= 18624 -NTEx 18625 -LmV2ZW50cw== 18626 -LmdldFBhcmFtZXRlcg== 18627 -IFBlcm1pc3Npb24= 18628 -IHByb2dyYW1tZQ== 18629 -IOk= 18630 -anVk 18631 -IGNhbWVyYXM= 18632 -MzM4 18633 -MzQ5 18634 -KHN5cw== 18635 -IFN5cmlhbg== 18636 -IGltcHJvdmVtZW50cw== 18637 -IGhpcA== 18638 -IHN1aWNpZGU= 18639 -IHNjaG9sYXI= 18640 -IGNvbXBhdGlibGU= 18641 -MDIy 18642 -cmVtb3Rl 18643 -LmRvd24= 18644 -RlVOQ1RJT04= 18645 -IG1hbmFnaW5n 18646 -IFVJS2l0 18647 -LnJhdw== 18648 -Pj4+Pg== 18649 -Mzcx 18650 -IGRlbWFuZHM= 18651 -ZWxsaXRl 18652 -IGRlbnQ= 18653 -IE1pY3Jv 18654 -5Y+W 18655 -J11bJA== 18656 -IElF 18657 -aW1lbnNpb24= 18658 -IHRyZW0= 18659 -NjMw 18660 -IGdhaW5lZA== 18661 -LndpdGg= 18662 -Lm9r 18663 -aG91 18664 -IGJvbQ== 18665 -YW1wYWlnbg== 18666 -IGpvaW5pbmc= 18667 -ZmlzaA== 18668 -IGFkZFN1YnZpZXc= 18669 -ODYw 18670 -IG5vcnRoZXJu 18671 -LmNvcg== 18672 -b3JldA== 18673 -RGll 18674 -aW5pc2g= 18675 -X2NvbXA= 18676 -IGF0dGVuZGVk 18677 -IGNvbGxhcHNl 18678 -IFNT 18679 -YWNlbnQ= 18680 -X0VRVUFM 18681 -IERlZXA= 18682 -UkdC 18683 -CXRlc3Q= 18684 -b2x2ZXM= 18685 -dXNldA== 18686 -VW5pdHlFbmdpbmU= 18687 -d3JpdGVy 18688 -UmVzb2x2ZXI= 18689 -LCU= 18690 -aWZmZXJlbmNl 18691 -X3JlbW92ZQ== 18692 -b25kYQ== 18693 -IGZlbW1l 18694 -Mzg1 18695 -ZGVjb2Rl 18696 -QnJhbmNo 18697 -IGZsdXNo 18698 -IGlubm92YXRpdmU= 18699 -VGVzdHM= 18700 -IFsnLi8= 18701 -IGNvdmVyaW5n 18702 -LmFkbWlu 18703 -dWx0aXBhcnQ= 18704 -KGxhbWJkYQ== 18705 -77u/bmFtZXNwYWNl 18706 -IFNwb3J0 18707 -ICEo 18708 -YWNsZXM= 18709 -IGRlcHJlc3Npb24= 18710 -IEtvbmc= 18711 -NTcw 18712 -IHBlcnQ= 18713 -IENvbm4= 18714 -IE90aGVyd2lzZQ== 18715 -L2hvbWU= 18716 -c3VwcG9ydGVk 18717 -IHBpbms= 18718 -IGludml0ZWQ= 18719 -w7Fvcw== 18720 -X2VuYWJsZWQ= 18721 -IC0K 18722 -Rlc= 18723 -ZW5lcnM= 18724 -IE1Z 18725 -IHN1Z2dlc3Rpb25z 18726 -Q2FudmFz 18727 -IGZlcg== 18728 -IE1hcmtldGluZw== 18729 -QFRlc3Q= 18730 -dW50dQ== 18731 -IFZlbg== 18732 -IENvdQ== 18733 -aXZhbHM= 18734 -RG9uYWxk 18735 -bGltaXRlZA== 18736 -CQkJCQkJCg== 18737 -IGFuYWx5c3Q= 18738 -KGVudHJ5 18739 -IHJlcHJlc2VudGF0aXZl 18740 -X2F0dHJpYnV0ZXM= 18741 -IGZ1cg== 18742 -LmhpZGU= 18743 -cmVzcA== 18744 -YWRvcmVz 18745 -cmlkZXM= 18746 -IEpvc2g= 18747 -cm9ib3Q= 18748 -IE5BVA== 18749 -IHNlc3Nv 18750 -IGludGVncmF0ZWQ= 18751 -OnRydWU= 18752 -cGFydHM= 18753 -IHN0dXBpZA== 18754 -OmV2ZW50 18755 -QGVuZHNlY3Rpb24= 18756 -IHB1 18757 -LlRhYmxl 18758 -IFlpaQ== 18759 -YDsKCg== 18760 -IGNsYW5n 18761 -PSIiPg== 18762 -ZW5nYW4= 18763 -X3BhcmFtZXRlcnM= 18764 -LmludGVybmFs 18765 -IE1vZGVybg== 18766 -IG1ldHJpYw== 18767 -IHNlbWk= 18768 -PXt7Cg== 18769 -NzA3 18770 -LmFtYXpvbg== 18771 -IEJC 18772 -YWludHk= 18773 -dmlld3BvcnQ= 18774 -MzY3 18775 -IHN0YXJ0QWN0aXZpdHk= 18776 -ZGlzcGF0Y2g= 18777 -KioqKio= 18778 -IGZsYXY= 18779 -aWZmZXJlbnQ= 18780 -Mzgy 18781 -W3RoaXM= 18782 -IHN0YWtl 18783 -IGFyZ3VlZA== 18784 -dmlvdXNseQ== 18785 -Lndvcms= 18786 -IE9haw== 18787 -T2xk 18788 -KGFzeW5j 18789 -bm90ZXM= 18790 -IGZsaXA= 18791 -IGRpc2Fn 18792 -IFRF 18793 -CWVycm9y 18794 -PCc= 18795 -IMK7Cgo= 18796 -IGZpbHRlcmVk 18797 -IE1hY2g= 18798 -IGh1bmc= 18799 -X2R1bXA= 18800 -X3NhbXBsZXM= 18801 -LWRpc21pc3M= 18802 -IHJheQ== 18803 -SW1wbGVtZW50ZWQ= 18804 -REs= 18805 -IGplZA== 18806 -MDkw 18807 -IGJyZWFrcw== 18808 -IGZpdHM= 18809 -Lmdy 18810 -IFplcm8= 18811 -b3Jv 18812 -IGVxdWFsbHk= 18813 -ICdb 18814 -IGNvbmNlcm5pbmc= 18815 -PG1ldGE= 18816 -cGxheWVycw== 18817 -X1BPUw== 18818 -X3NpbQ== 18819 -SmFu 18820 -IHlvdXJz 18821 -CU4= 18822 -IHNwaXI= 18823 -IGNoYW1waW9u 18824 -IEFuYWx5c2lz 18825 -YXBh 18826 -IE5TTG9n 18827 -X2xpbmVz 18828 -w7Fh 18829 -CQkgICAgICAg 18830 -ODE5 18831 -LlNj 18832 -UmVw 18833 -ZXRyb2l0 18834 -dXJhYmxl 18835 -TUlU 18836 -Y29tcGF0 18837 -b3duZWQ= 18838 -X2luZGljZXM= 18839 -XSwNCg== 18840 -IGRpc2NvdmVyeQ== 18841 -IERpZWdv 18842 -b2Jp 18843 -LkluZGV4 18844 -IHRyZW5kcw== 18845 -UExBWQ== 18846 -Lm5v 18847 -IGxlbnM= 18848 -X2NmZw== 18849 -IGFubm8= 18850 -YWdhbg== 18851 -IHBlcmlvZHM= 18852 -dGVybXM= 18853 -eXo= 18854 -IGF0dGFja2Vk 18855 -aWJyYXRpb24= 18856 -UEVDSUFM 18857 -X2dyYWQ= 18858 -IGFjY29yZGFuY2U= 18859 -LlJlYWRMaW5l 18860 -LmRldmljZQ== 18861 -cml4 18862 -LmNvbnRhaW5lcg== 18863 -bWF5 18864 -ZXJjaXNl 18865 -IEx1 18866 -IHJn 18867 -INGB0YI= 18868 -CQkKCQkK 18869 -KHVu 18870 -VEVSTkFM 18871 -IGxlc3NvbnM= 18872 -IGFsbGVnYXRpb25z 18873 -IHRyYW5zbWlzc2lvbg== 18874 -LlJlZg== 18875 -TW9iaWxl 18876 -IFRvdXJuYW1lbnQ= 18877 -IE51dA== 18878 -IEdh 18879 -IENhcGl0YWw= 18880 -ZGVmaW5pdGlvbg== 18881 -LWV4cA== 18882 -Y2xlYW4= 18883 -IGZhbnRhc3k= 18884 -IGVuaGFuY2U= 18885 -ZW50ZW5jZQ== 18886 -MDMx 18887 -J106Cg== 18888 -YWNrZXRz 18889 -IGNlbGVicmF0ZQ== 18890 -QCIs 18891 -U2VyaWFsaXplRmllbGQ= 18892 -IGFycmF5cw== 18893 -dGI= 18894 -CXN0 18895 -W2Fzc2VtYmx5 18896 -KHJlZw== 18897 -LmNhdGVnb3J5 18898 -IGltcHJvdmluZw== 18899 -IHNhbG9wZQ== 18900 -Qnl0ZUFycmF5 18901 -T3JpZ2luYWw= 18902 -IFt7Cg== 18903 -5Zue 18904 -IENsaW4= 18905 -b2VuaXg= 18906 -IFNhbXN1bmc= 18907 -IG1haW50YWluZWQ= 18908 -IGFnZW5kYQ== 18909 -ZmFpbA== 18910 -IHByZXNlbnRz 18911 -IHRpbWluZw== 18912 -Lm1hcms= 18913 -Jz48 18914 -IHByb21vdA== 18915 -IGluY2w= 18916 -X29ubHk= 18917 -66W8 18918 -IEF0dG9ybmV5 18919 -LWRhdGU= 18920 -IGxhbmRzY2FwZQ== 18921 -IGZ1 18922 -U1k= 18923 -LnByb3A= 18924 -IEFycg== 18925 -cGFn 18926 -UGFyYWxsZWxHcm91cA== 18927 -JzoNCg== 18928 -IGxvZ3M= 18929 -YXVuY2g= 18930 -dW5jaQ== 18931 -bmFtYQ== 18932 -VGFibGVDZWxs 18933 -aXNzdWVz 18934 -Lns= 18935 -ZWN1cml0eQ== 18936 -X2V4ZWM= 18937 -b2xkcw== 18938 -IGhvc3Rz 18939 -IHByb3Rv 18940 -X2ltcG9ydA== 18941 -X3NvcnQ= 18942 -IEJvdw== 18943 -IE5vcm1hbA== 18944 -IEZhcm0= 18945 -LmNyZWF0ZVBhcmFsbGVsR3JvdXA= 18946 -Um90YXRpb24= 18947 -LmVycg== 18948 -IHBsZWFzZWQ= 18949 -aXRhZ2U= 18950 -Lldo 18951 -CQkgICAg 18952 -TVI= 18953 -IE1PUkU= 18954 -IE5hdHVyYWw= 18955 -X3RyYW5zZm9ybQ== 18956 -QkFTRQ== 18957 -ZW5lcmFs 18958 -dXRkb3du 18959 -LmNvbW1vbnM= 18960 -V1Q= 18961 -IGFhbg== 18962 -LlJlc3VsdA== 18963 -ZG9n 18964 -IGNsaWNraW5n 18965 -KSwKCg== 18966 -I2xpbmU= 18967 -T3BlcmF0b3I= 18968 -IGNpdg== 18969 -IG1lcmc= 18970 -b2J1Zg== 18971 -bmd0aGVu 18972 -IFt7 18973 -IGNhbmNlbGw= 18974 -dHJpZ2dlcg== 18975 -Ljo= 18976 -V09SSw== 18977 -ZGVjbGFyZQ== 18978 -IGRlY3JlYXNl 18979 -xZtjaQ== 18980 -bG9vbQ== 18981 -Lk5vbmU= 18982 -IE1J 18983 -IEphc29u 18984 -IGhlYWx0aGNhcmU= 18985 -aWFtb25k 18986 -c3lsdmFuaWE= 18987 -Kng= 18988 -IFJh 18989 -W2I= 18990 -IHByaW50aW5n 18991 -cGhhYmV0 18992 -IExhYm91cg== 18993 -b3BwZXI= 18994 -IHppam4= 18995 -LXRhcmdldA== 18996 -X0ZVTkNUSU9O 18997 -IG9jdA== 18998 -0LXQvdC40Y8= 18999 -5Zyo 19000 -IHdlc3Rlcm4= 19001 -IGNvbXB1dGVycw== 19002 -IFJFVA== 19003 -SGFzaE1hcA== 19004 -W1N0cmluZw== 19005 -Z2V0VmFsdWU= 19006 -X0RBVEU= 19007 -Lk5leHQ= 19008 -IEZpZg== 19009 -w6ls 19010 -aWNrZWQ= 19011 -5o4= 19012 -LU1N 19013 -IHsKCgo= 19014 -IGNvbnRhY3Rz 19015 -IGRpZ2l0cw== 19016 -UHJvZHU= 19017 -IHVudXN1YWw= 19018 -IHJhcGlkbHk= 19019 -dHVyZXM= 19020 -IGFuZ3J5 19021 -Y2FuY2Vs 19022 -eHh4eA== 19023 -X3BhcnNlcg== 19024 -aWRpdHk= 19025 -X1BSRUZJWA== 19026 -NzEw 19027 -IG1laHI= 19028 -IHJhcmVseQ== 19029 -ZXRoZQ== 19030 -b3Blcw== 19031 -ICUu 19032 -d29ya3M= 19033 -IHRoZXRh 19034 -IGNvbnRyaWJ1dGlvbg== 19035 -IFRvbnk= 19036 -IHNxdWFk 19037 -NTM3 19038 -0LDQuQ== 19039 -IMOubg== 19040 -dGhlcmU= 19041 -b3V0ZWQ= 19042 -CXE= 19043 -mYI= 19044 -Z29vZA== 19045 -TEk= 19046 -6aG1 19047 -IExpdmluZw== 19048 -aXphYmV0aA== 19049 -IGt0 19050 -IERhbGxhcw== 19051 -XV0sCg== 19052 -IC8+Cgo= 19053 -IHJhaXNpbmc= 19054 -L3JvdXRlcg== 19055 -X2dhbWU= 19056 -MzY4 19057 -IENVUg== 19058 -emVucw== 19059 -LmVz 19060 -IGZvbnRXZWlnaHQ= 19061 -KGZ1bmM= 19062 -bm90aWZpY2F0aW9u 19063 -ICcuLi8uLi8uLi8= 19064 -IGJsYW1l 19065 -44CCCgoKCg== 19066 -YW5jbw== 19067 -OTgw 19068 -SWRlbnRpdHk= 19069 -Zm9sbG93 19070 -IGFydHM= 19071 -eHM= 19072 -IG9mZmljaWFsbHk= 19073 -IFN0dWRpbw== 19074 -IHJlY29tbWVuZGF0aW9ucw== 19075 -IGxvY2FsZQ== 19076 -IGFtYXRldXI= 19077 -IEVuYWJsZQ== 19078 -IGNhcHM= 19079 -LkVuZA== 19080 -Mzg4 19081 -LWFkZA== 19082 -X2dzaGFyZWQ= 19083 -IENU 19084 -Rm9yY2U= 19085 -CiAgICAgICAgICAgIAo= 19086 -IG9yYW5nZQ== 19087 -IGxw 19088 -IGFuc3dlcmVk 19089 -LkdyaWQ= 19090 -IGR1YWw= 19091 -IHN0cmF0ZWdpYw== 19092 -IG5vYm9keQ== 19093 -IGZhdGFs 19094 -X2VzdA== 19095 -KGVs 19096 -IOyg 19097 -IEJ1ZGQ= 19098 -QUlU 19099 -X2ZhY3Rvcg== 19100 -LW9uZQ== 19101 -IEhBVkU= 19102 -Ig0KDQo= 19103 -NzYw 19104 -UHJvZg== 19105 -IMOkcg== 19106 -c3RyaW5ncw== 19107 -IGRpcnR5 19108 -IEZhY2U= 19109 -IEJlZ2lu 19110 -IEJ1cw== 19111 -IHdpcw== 19112 -5a2X 19113 -IHNwZWFrZXI= 19114 -IGNhcnJpZXI= 19115 -IE9t 19116 -IGhhZG4= 19117 -QWxsb3c= 19118 -OjpfXw== 19119 -IHZlcmI= 19120 -IENvbXBsZXRl 19121 -IEVhc3k= 19122 -IGJpbGxz 19123 -ICAKCg== 19124 -VmVydGljYWw= 19125 -IHByb24= 19126 -IERlZmluZQ== 19127 -IGxvb2t1cA== 19128 -dmFyaWFibGVz 19129 -IHBhbmRhcw== 19130 -dW1lcw== 19131 -IGlubm9j 19132 -IHNldFVw 19133 -IENoYW1waW9uc2hpcA== 19134 -YXJ0aXN0 19135 -IENUeXBl 19136 -Rm91bmRhdGlvbg== 19137 -4LmI 19138 -IFNldHVw 19139 -NDI4 19140 -IHJlY2lwZXM= 19141 -IFVJQ29sb3I= 19142 -IEZpZ2h0 19143 -IGF1dGhvcml6ZWQ= 19144 -X2NsaWNr 19145 -OTkw 19146 -X3N1Y2Nlc3M= 19147 -YW5nYW4= 19148 -IE1vdW50YWlu 19149 -IERvY3Rvcg== 19150 -IGVnZw== 19151 -IE1lZGljaW5l 19152 -Y2xlcw== 19153 -YC4K 19154 -W2ludA== 19155 -ZGFzaGJvYXJk 19156 -IEFwcHJv 19157 -LWRy 19158 -IHByb2R1Y2Vz 19159 -IHJlbnRhbA== 19160 -IHJlbG9hZA== 19161 -Mzgx 19162 -IGFycml2YWw= 19163 -c3BvdA== 19164 -IHVuZGVydA== 19165 -Mzc4 19166 -IGVxdWlwcGVk 19167 -IHByb3ZlZA== 19168 -IGNlbnRlcnM= 19169 -IGRlZmluZXM= 19170 -YWxzbw== 19171 -IG9wYWNpdHk= 19172 -IFVuZm9ydHVuYXRlbHk= 19173 -IElsbGlub2lz 19174 -INC90LU= 19175 -IFRlbXBsZQ== 19176 -IFRyYWls 19177 -IEtlbGx5 19178 -IG1lYXN1cmVtZW50 19179 -IHNlcGFyYXRlZA== 19180 -LWNpcmNsZQ== 19181 -SGV5 19182 -IFJFQUQ= 19183 -aWdpdHM= 19184 -IGli 19185 -IE1PRA== 19186 -YXR0ZXJ5 19187 -0LDQtw== 19188 -IHZlbmQ= 19189 -0LXQvdGC 19190 -IEh0dHBDbGllbnQ= 19191 -MzU5 19192 -c2FmZQ== 19193 -X0FTUw== 19194 -aWNpdA== 19195 -IENvbnN0cnVjdA== 19196 -IENsbw== 19197 -IFNpeA== 19198 -X1RPS0VO 19199 -KGJsb2Nr 19200 -IHdhcm5lZA== 19201 -Lyoh 19202 -ITwv 19203 -YWNhZGVz 19204 -IG1hcmc= 19205 -ZXJhc2U= 19206 -IGRpc3BsYXlz 19207 -aXN0cmF0b3I= 19208 -Z2V0cw== 19209 -IGd0aw== 19210 -X0dFTkVS 19211 -bmVk 19212 -XyU= 19213 -IGZhdm91cml0ZQ== 19214 -IEJydQ== 19215 -IMOh 19216 -c2Vjb25kYXJ5 19217 -IG1hc3Q= 19218 -IHNvcGg= 19219 -IFNhZmV0eQ== 19220 -aGFyZA== 19221 -MDYy 19222 -cmFpc2U= 19223 -IEV4Y2hhbmdl 19224 -IGNvbnRlbXBvcmFyeQ== 19225 -IGRyZWFtcw== 19226 -IHRlbA== 19227 -IG5laWdoYm9ycw== 19228 -IEhvbHk= 19229 -Mzgz 19230 -Lm1lYW4= 19231 -ODEw 19232 -ZW1pdA== 19233 -IE1lc3M= 19234 -Q2FzdA== 19235 -TkVDVA== 19236 -cGx1Z2lucw== 19237 -IHJi 19238 -d3I= 19239 -IGh1Yg== 19240 -IFN0dWRpZXM= 19241 -NTYy 19242 -IHBvc3Nlc3Npb24= 19243 -JCgnLg== 19244 -ZW5zaXRpdmU= 19245 -IGFkZENyaXRlcmlvbg== 19246 -X18u 19247 -IGV4cGVydGlzZQ== 19248 -QXJjaA== 19249 -IGN1Yg== 19250 -ZXJ2ZXJz 19251 -IHBhcnRpY2xlcw== 19252 -dWFy 19253 -IGJvdW5kYXJ5 19254 -KScs 19255 -YWpv 19256 -IHByZWY= 19257 -OmA= 19258 -IGhhcmFzcw== 19259 -aXU= 19260 -IHJlYWNoaW5n 19261 -IG1lZw== 19262 -IHpv 19263 -KElE 19264 -X3JlcXVpcmVk 19265 -IHPDqQ== 19266 -IFF1ZXVl 19267 -QU8= 19268 -IGdlbQ== 19269 -ODEy 19270 -cHRvbg== 19271 -ODgw 19272 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 19273 -NjYw 19274 -aWpr 19275 -KHsNCg== 19276 -IGNvbGxpc2lvbg== 19277 -IFVrcmFpbmU= 19278 -IC0qLQo= 19279 -TlNJbnRlZ2Vy 19280 -X0JMT0NL 19281 -NTY3 19282 -IFRleHR1cmU= 19283 -IGRlY2xpbmVk 19284 -bmFu 19285 -X3dhaXQ= 19286 -IHBvbGl0aWNpYW5z 19287 -NDEz 19288 -IGNvaW5z 19289 -IGRlcml2 19290 -aGVscGVy 19291 -IFBlcmhhcHM= 19292 -LnJlY3Q= 19293 -IFBvbHk= 19294 -YWJsaW5n 19295 -fS8+Cg== 19296 -IGlubm92YXRpb24= 19297 -XyI= 19298 -ICk7DQoNCg== 19299 -IHNwb3Rz 19300 -IGNob29zaW5n 19301 -LmNz 19302 -IGZsZXhpYmxl 19303 -VUludA== 19304 -NDM1 19305 -OTMw 19306 -IHNjcmF0Y2g= 19307 -LWFs 19308 -IGZlc3RpdmFs 19309 -IG91dHN0YW5kaW5n 19310 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 19311 -TWVhbg== 19312 -IE9yZWdvbg== 19313 -c3ltYm9s 19314 -LmFjY291bnQ= 19315 -ZG5leQ== 19316 -Jycn 19317 -ISIs 19318 -OTAx 19319 -IHBhcnRpY2xl 19320 -w4M= 19321 -W01BWA== 19322 -SVZFUg== 19323 -RVJFTkNF 19324 -TlNNdXRhYmxl 19325 -IENvbHVtYmlh 19326 -XwoK 19327 -LmZy 19328 -IGNvZ24= 19329 -VlI= 19330 -IE1ldGhvZHM= 19331 -IE1hZGU= 19332 -IEJS 19333 -IEVsc2U= 19334 -IGVnZ3M= 19335 -IHN3aW5n 19336 -IEludg== 19337 -IGRpc2Vhc2Vz 19338 -IGZpcm1z 19339 -IGxlbW1h 19340 -fWApOwo= 19341 -bGluZ3M= 19342 -IGd5bQ== 19343 -dW1pbnVt 19344 -LlRyaW0= 19345 -TWVt 19346 -IGNyaXRpY2lzbQ== 19347 -aWJlcm5hdGU= 19348 -X1RY 19349 -aW9uaQ== 19350 -IGd1aWRhbmNl 19351 -IHJlcGVhdGVkbHk= 19352 -IHN1cHBsaWVy 19353 -IHBhaW50aW5n 19354 -ODY0 19355 -LkZyYWdtZW50 19356 -ZWRFeGNlcHRpb24= 19357 -IHdpcmluZw== 19358 -IGNvdXJ0cw== 19359 -V0VC 19360 -5pyJ 19361 -XC4= 19362 -aWxsYW5jZQ== 19363 -IGJyb3dz 19364 -IFBhdHRlcm4= 19365 -UExJQ0FUSU9O 19366 -IFN1bW1lcg== 19367 -Q2hhaW4= 19368 -IGN1dGU= 19369 -bWVyY2lhbA== 19370 -IGRpbA== 19371 -IEZyYW5rbGlu 19372 -CWdsb2JhbA== 19373 -SU5DTFVESU5H 19374 -aGlzdG9yeQ== 19375 -IGxzdA== 19376 -UXQ= 19377 -U0RM 19378 -YWxpYQ== 19379 -aWVyZQ== 19380 -KC4uLg== 19381 -CWNpbg== 19382 -aWZmcw== 19383 -dmVsb3Bl 19384 -IFJvb3Q= 19385 -Y2x1c3Rlcg== 19386 -VXNlck5hbWU= 19387 -aWduZQ== 19388 -PFM= 19389 -IGZlc3Q= 19390 -NDE5 19391 -IGluZGljYXRpbmc= 19392 -a2VlcGVy 19393 -IGNhZGE= 19394 -w6ln 19395 -Y29uc2lu 19396 -IEdC 19397 -IGxi 19398 -ZW1vbnk= 19399 -LWljb25z 19400 -X2RvYw== 19401 -QWN0b3I= 19402 -ZWxlbQ== 19403 -LkRlbGV0ZQ== 19404 -IGluZmVjdGlvbg== 19405 -IFByaXZhY3k= 19406 -IGdyZWF0bHk= 19407 -IFBvcw== 19408 -IFRyZWF0 19409 -Rmxvdw== 19410 -IGF0dHJhY3RpdmU= 19411 -IE1hcmM= 19412 -c3Vkbw== 19413 -dGVzeQ== 19414 -LWFu 19415 -OTk4 19416 -YWJhbWE= 19417 -IFdvdWxk 19418 -IHN1Y2s= 19419 -aW5kZXhQYXRo 19420 -IEV0 19421 -VGltZXM= 19422 -Nzgw 19423 -IGNsdWJz 19424 -X2Fzc29j 19425 -IGFjcXVpcmVk 19426 -KCI6 19427 -IGludGVuc2U= 19428 -Lm1hcHM= 19429 -RXhwZWN0ZWQ= 19430 -VG9nZ2xl 19431 -IGF5 19432 -IGxpZmVzdHlsZQ== 19433 -LWNhbGxlZA== 19434 -IFNub3c= 19435 -Vm9sdW1l 19436 -IGNhbm5hYmlz 19437 -IERpcmVjdGlvbg== 19438 -IExpbWl0ZWQ= 19439 -LXNwZWNpZmlj 19440 -IGRvd250b3du 19441 -L2ljb25z 19442 -IHJldmVu 19443 -TGVn 19444 -ODg1 19445 -PW51bGw= 19446 -NDk2 19447 -S2V5Ym9hcmQ= 19448 -JykpLg== 19449 -ICIiOw0K 19450 -IGF0dGl0dWRl 19451 -Lm5hdmlnYXRl 19452 -LWVycm9y 19453 -QU1QTEU= 19454 -IEpheQ== 19455 -dnI= 19456 -Y293 19457 -LmNvbXBpbGU= 19458 -IG1lbW9yaWVz 19459 -X21hcms= 19460 -IE1pbm5lc290YQ== 19461 -IGtvc3Rlbg== 19462 -IHByb2JhYmlsaXR5 19463 -d2FybmluZw== 19464 -IGdlbmV0aWM= 19465 -Rml4dHVyZQ== 19466 -IEhhc2hTZXQ= 19467 -Tm9tYnJl 19468 -X21vbnRo 19469 -xrA= 19470 -LXN0YXJ0 19471 -eHlnZW4= 19472 -CWZ0 19473 -aWFnbm9zdGljcw== 19474 -IE1hdHRoZXc= 19475 -IGNvbmNlcHRz 19476 -IGNvbnN0cg== 19477 -LlN0YXRl 19478 -0LjQvQ== 19479 -Tm92 19480 -zrE= 19481 -IFBhbmVs 19482 -5Liq 19483 -Y29tcGFyZQ== 19484 -PigpCg== 19485 -IGFwcGx5aW5n 19486 -IHByb21pc2Vk 19487 -IG94 19488 -bmNpYQ== 19489 -IFZhbGlkYXRpb24= 19490 -b3J0cw== 19491 -X2N1cg== 19492 -ZWxlY3Q= 19493 -ZXll 19494 -KERhdGE= 19495 -IHJlcG9ydGVy 19496 -IEJ1ZmY= 19497 -Mzk1 19498 -IHNy 19499 -ICI7 19500 -aWNreQ== 19501 -IHRlbXBvcg== 19502 -U04= 19503 -IHJlc2lkZW50 19504 -cGlyZXM= 19505 -eXNpY2Fs 19506 -IGVuZG9yc2U= 19507 -IFNvbmc= 19508 -aXNFbXB0eQ== 19509 -bGVldA== 19510 -X3V0aWw= 19511 -IGRpc3Rpbmd1 19512 -IFRhbGs= 19513 -IE1vdA== 19514 -KGRlZmF1bHQ= 19515 -LkFyZw== 19516 -Z29yaXRobXM= 19517 -X3dvcmRz 19518 -aW1tZXI= 19519 -X3Jlc2V0 19520 -ZmFtaWx5 19521 -V1c= 19522 -IHNhdmluZ3M= 19523 -IOKAnQ== 19524 -X2VuYWJsZQ== 19525 -c2lkZWJhcg== 19526 -UnVubmluZw== 19527 -IGFsaQ== 19528 -IHRlc3RpbQ== 19529 -IHdhcm5pbmdz 19530 -IENoZW0= 19531 -IEV4aXQ= 19532 -IGZvdW5kZXI= 19533 -cGVjdG9y 19534 -IHJt 19535 -X2RhdGFzZXQ= 19536 -IERhcw== 19537 -IGhhbg== 19538 -R2V0dHk= 19539 -w6Fs 19540 -IG55 19541 -IHBvdmVydHk= 19542 -IHJlc3VsdGVk 19543 -LmJ5 19544 -IFZpc2l0 19545 -IG9idGFpbmluZw== 19546 -LycuJA== 19547 -ICAgICAgICAgICAK 19548 -c2hhbGw= 19549 -X0xFRlQ= 19550 -VUlJbWFnZQ== 19551 -X05hbWU= 19552 -aGF2ZQ== 19553 -IE5vYg== 19554 -bHI= 19555 -LWZvb3Rlcg== 19556 -IG5ha2Vk 19557 -IEdhcmRlbg== 19558 -XEZhY2FkZXM= 19559 -IGdyYWR1YXRl 19560 -NDE3 19561 -IGZyYW5jaGlzZQ== 19562 -cGxhbmU= 19563 -IGNvbnRyaWJ1dGlvbnM= 19564 -IHN0cmluZ1dpdGg= 19565 -IGNyeXB0bw== 19566 -IG1vdmVtZW50cw== 19567 -YXRoZXJz 19568 -IGxpZmV0aW1l 19569 -IGNvbW11bmljYXRl 19570 -amFy 19571 -IEZyYWdtZW50 19572 -X0lG 19573 -IE5hdnk= 19574 -IEZpZ3VyZQ== 19575 -IHNpbXVsYXRpb24= 19576 -X3N0b3A= 19577 -IHJlcG9ydGVycw== 19578 -IHZlcnN1cw== 19579 -YWph 19580 -IM6x 19581 -IGdvdmVybm9y 19582 -TGlzdEl0ZW0= 19583 -IHNlYWxlZA== 19584 -LkJhY2tncm91bmQ= 19585 -ZWRp 19586 -YXNoaW5n 19587 -IGxpcA== 19588 -IElo 19589 -bWVyZ2U= 19590 -IG5lYw== 19591 -MDI0 19592 -ZWxvY2l0eQ== 19593 -QVRFRw== 19594 -IHNlZWRz 19595 -IGZsb2F0aW5n 19596 -NzAx 19597 -X0ZB 19598 -d2Fsaw== 19599 -CXVzZXI= 19600 -X2RlcHRo 19601 -IHdhZ2U= 19602 -QGFwcA== 19603 -Tmls 19604 -KFsi 19605 -KHZlY3Rvcg== 19606 -IHNlY3JldGFyeQ== 19607 -NDYx 19608 -IGpQYW5lbA== 19609 -dmV6 19610 -wqDCoMKgwqA= 19611 -ZGlyZWN0aW9u 19612 -IEVQ 19613 -IGh1bnQ= 19614 -Mzk2 19615 -SnNvblByb3BlcnR5 19616 -IFBPUlQ= 19617 -XSIs 19618 -0LDQvw== 19619 -IEZvcmVpZ24= 19620 -cGFuaWM= 19621 -IHRyaWFscw== 19622 -IEFsZQ== 19623 -IHJ1cmFs 19624 -LXZhbHVl 19625 -YXV0aG9yaXplZA== 19626 -IFNjb3RsYW5k 19627 -LmRyb3A= 19628 -IE1U 19629 -57E= 19630 -Mzkx 19631 -cm93dGg= 19632 -NTE1 19633 -RmlsZVBhdGg= 19634 -IHJlY2FsbA== 19635 -aWZsZQ== 19636 -IGNlbA== 19637 -IFNFTEVDVA== 19638 -a24= 19639 -X2Nhc2U= 19640 -IGNyb3A= 19641 -NTQz 19642 -c3VyZQ== 19643 -cG90 19644 -SUNT 19645 -IHN0ZW0= 19646 -IGluZHVzdHJpZXM= 19647 -UHV0 19648 -IGFiZXI= 19649 -cm9hZGNhc3Q= 19650 -SWNvbnM= 19651 -KSIpCg== 19652 -5oiQ5Yqf 19653 -Z3Vp 19654 -IGFzc3VtZWQ= 19655 -IHJ4 19656 -RUE= 19657 -6Kc= 19658 -RUxM 19659 -IGRvc2U= 19660 -IGluZQ== 19661 -IGRlZXBlcg== 19662 -bGlkZXI= 19663 -IG9yZGluYXJ5 19664 -IGdvbGY= 19665 -NjA1 19666 -X0lNQUdF 19667 -IE5BTUU= 19668 -KG1vZHVsZQ== 19669 -IGF0b20= 19670 -IGJlbHQ= 19671 -IG9mZmljZXM= 19672 -NTA2 19673 -YmV0YQ== 19674 -IHBoaWxvc29waHk= 19675 -KEpTT04= 19676 -LWZpZWxk 19677 -IGludHJvZHVjZQ== 19678 -IGNvbnZlbmllbmNl 19679 -b3B0aW0= 19680 -PiIK 19681 -YXRoeQ== 19682 -IGVtcGxveWVy 19683 -cXVhdGU= 19684 -IGVkaXRlZA== 19685 -QXJndW1lbnRz 19686 -IE5hdGlvbnM= 19687 -X18p 19688 -IG5vc2U= 19689 -IFNhbXBsZQ== 19690 -JykKCgo= 19691 -IGNha2U= 19692 -LmdldEF0dHJpYnV0ZQ== 19693 -SEQ= 19694 -Mzky 19695 -TW9kaWZpZWQ= 19696 -NDQ1 19697 -IHByZWRpY3RlZA== 19698 -xYQ= 19699 -YW5pZQ== 19700 -U29ycnk= 19701 -KGRvYw== 19702 -d2luZA== 19703 -aWV2ZQ== 19704 -IHByb3Zpc2lvbnM= 19705 -QVRFUg== 19706 -T1RF 19707 -TVk= 19708 -LkF1dG93aXJlZA== 19709 -IEJhdGg= 19710 -NDIz 19711 -LkJvb2xlYW4= 19712 -IGJhY2tlbmQ= 19713 -Lk1vdXNl 19714 -YXRlcmFs 19715 -cGFwZXI= 19716 -Q29uc3Q= 19717 -IFZS 19718 -X2VudGl0eQ== 19719 -X0NUUkw= 19720 -IFByb3RlY3Rpb24= 19721 -IEdN 19722 -IFN0dWR5 19723 -IHNvdXA= 19724 -b3RpbWU= 19725 -J3VzZQ== 19726 -XSI= 19727 -L3VzZXJz 19728 -YXVn 19729 -IEhvbmc= 19730 -X25vcm0= 19731 -44Go 19732 -IHNlY3Jl 19733 -KEJ1aWxk 19734 -IENvbnRyYWN0 19735 -b2xhcw== 19736 -IHNhdWNl 19737 -IGFnZ3Jlc3NpdmU= 19738 -IHJhY2lhbA== 19739 -Y2hhcmFjdGVy 19740 -QEA= 19741 -IGNvbXBpbGU= 19742 -IFZvaWQ= 19743 -X3JlbQ== 19744 -X21lbW9yeQ== 19745 -MzQ4 19746 -a2s= 19747 -IG1pYw== 19748 -U2FtZQ== 19749 -VXRpbGl0eQ== 19750 -IEh0bWw= 19751 -IFhtbA== 19752 -UmVhZHk= 19753 -IGdhbGw= 19754 -IGFsbGVnZWRseQ== 19755 -CQkJCSAgIA== 19756 -IE1ldGFs 19757 -IFBlcnNvbmFs 19758 -IGJvcmRlclJhZGl1cw== 19759 -cnhqcw== 19760 -b2JqZWN0cw== 19761 -IHdhbnRpbmc= 19762 -IGJvd2w= 19763 -dmVuZG9y 19764 -b2Zmc2V0b2Y= 19765 -IFJz 19766 -IFJhdGluZw== 19767 -IHJhbGx5 19768 -X05PREU= 19769 -NDE4 19770 -IE1peA== 19771 -IGFkdmVydGlz 19772 -NDg1 19773 -NjY3 19774 -IG5hcnJhdGl2ZQ== 19775 -c2Fs 19776 -IG1j 19777 -U0Vycm9y 19778 -IGZpbmdlcnM= 19779 -IGFjY29tcGFueQ== 19780 -IHRpcmVk 19781 -IHN0cmlkZQ== 19782 -IGd1aQ== 19783 -ZWxpc3Q= 19784 -TG9jYWxl 19785 -IHJlbGVhc2Vz 19786 -aWtpbmc= 19787 -IGFuZ2Vy 19788 -KSkpCgo= 19789 -YWxsZXN0 19790 -U3VtbWFyeQ== 19791 -KE8= 19792 -KGZvcg== 19793 -IGJhc2tldGJhbGw= 19794 -IHJvYWRz 19795 -IEluc3RhbGw= 19796 -IEZhYg== 19797 -aXRtYXA= 19798 -NDc1 19799 -ICkpCg== 19800 -IGludGVyc2VjdGlvbg== 19801 -aWdoYm9y 19802 -IEJyeQ== 19803 -IEhFUkU= 19804 -U29mdHdhcmU= 19805 -ZWxmYXJl 19806 -YWNz 19807 -NjIy 19808 -IHRyYWlsZXI= 19809 -LmdldENsYXNz 19810 -Y2hhcnM= 19811 -IHJlZ3VsYXRpb24= 19812 -IHJlZmVycw== 19813 -IGRlc3RydWN0aW9u 19814 -IGNvbnRpbnVvdXM= 19815 -IEF1c3Rpbg== 19816 -6aI= 19817 -YWthbg== 19818 -LndpbmRvdw== 19819 -IFRlbXBsYXRlcw== 19820 -IGFic2VuY2U= 19821 -Om4= 19822 -IGRpc29yZGVy 19823 -Zmxhc2g= 19824 -IGRlbGV0 19825 -Ym9hcmRz 19826 -ICAJ 19827 -Uk9Q 19828 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 19829 -IGFjcXU= 19830 -IGxhd3N1aXQ= 19831 -IFJldmlld3M= 19832 -IGdhcmFnZQ== 19833 -dGltZXI= 19834 -IGVq 19835 -IFJlY3RhbmdsZQ== 19836 -IGZsb3dlcnM= 19837 -Mzk4 19838 -aWxzdA== 19839 -IEluc3RhbmNl 19840 -U3VwZXI= 19841 -ZGV0 19842 -ZGlzcG9zaW5n 19843 -IEVT 19844 -IElD 19845 -dmVyZQ== 19846 -U2s= 19847 -X2NoYW5uZWxz 19848 -cHV0ZWQ= 19849 -L251bGw= 19850 -bm5lbg== 19851 -NDMx 19852 -IEdhbGxlcnk= 19853 -X2dsb2JhbA== 19854 -QXV0aGVudGljYXRpb24= 19855 -IFJhbms= 19856 -IGJsb2NrZWQ= 19857 -IGNhbG0= 19858 -bWFya2V0 19859 -CXZhbA== 19860 -IGF1Zw== 19861 -cGVyaW9k 19862 -IENvbnN0YW50 19863 -ID8+Ij4K 19864 -IGxvYmJ5 19865 -cGFs 19866 -Mzc5 19867 -IHNpbms= 19868 -NTA4 19869 -aWFo 19870 -0KE= 19871 -dXJuYW1l 19872 -IGNvbnZlcg== 19873 -IGludmVzdGlnYXRl 19874 -Q2hyaXN0 19875 -SHVi 19876 -IElORA== 19877 -IFBlZA== 19878 -dXJhcw== 19879 -CXVybA== 19880 -IFRybw== 19881 -IHByZWZlcmVuY2Vz 19882 -IGd1YXJhbnRlZWQ= 19883 -YAoK 19884 -IHBvcnRpb25z 19885 -IGV2YWx1 19886 -Jz48Lw== 19887 -KCl7Cgo= 19888 -ZW5jb2RlZA== 19889 -emlsbGE= 19890 -LkNsYXNz 19891 -ICpf 19892 -Xyc= 19893 -IHZpZXdlZA== 19894 -IFBoaWxhZGVscGhpYQ== 19895 -LnJvd3M= 19896 -QWRkZWQ= 19897 -IFRvdWNo 19898 -ODQw 19899 -LmRlbGVnYXRl 19900 -cXVlZXpl 19901 -c2xpZGU= 19902 -IFNlbmlvcg== 19903 -KHRhZw== 19904 -IGludGVydmlld3M= 19905 -IHN1YQ== 19906 -YXRhcw== 19907 -QAoK 19908 -ZGlzdGFuY2U= 19909 -IHNlaW4= 19910 -bGF0ZXN0 19911 -IFByaW5jZQ== 19912 -IGx1eHVyeQ== 19913 -IHJlZnI= 19914 -IEtpdGNoZW4= 19915 -0YQ= 19916 -KGF0 19917 -RmluYWw= 19918 -w7xjaw== 19919 -X3plcm8= 19920 -IEFCQw== 19921 -IE1hbmNoZXN0ZXI= 19922 -IGNvdw== 19923 -Q09M 19924 -X05VTUJFUg== 19925 -Y2hhbmdlcw== 19926 -Z2VuZXJhdGU= 19927 -LlByaW50Zg== 19928 -MzY5 19929 -c2hhcmU= 19930 -U3RvY2s= 19931 -IFBU 19932 -QW5pbQ== 19933 -YW5nYQ== 19934 -IGln 19935 -dXBsb2Fkcw== 19936 -IHBhY2tlZA== 19937 -IH1dOwo= 19938 -KHNlbmRlcg== 19939 -IFdpcmU= 19940 -aXNvbnM= 19941 -IHBsYXlvZmY= 19942 -XEU= 19943 -NjA4 19944 -L1I= 19945 -IGhlYWRlZA== 19946 -QWxwaGE= 19947 -KG9yZGVy 19948 -IG9wcG9uZW50cw== 19949 -YWNrc29u 19950 -X21lbWJlcg== 19951 -VHVybg== 19952 -IFNvdmlldA== 19953 -7JeQ 19954 -YXVnZQ== 19955 -NDQ4 19956 -IGluY29taW5n 19957 -IGphaw== 19958 -LWdhbWU= 19959 -IE1hbGU= 19960 -IE1vbnRo 19961 -U3RhZ2U= 19962 -LmV4ZQ== 19963 -T3duUHJvcGVydHk= 19964 -LnNldEl0ZW0= 19965 -IGRj 19966 -5L2c 19967 -IGJydXQ= 19968 -IGF0dGVtcHRpbmc= 19969 -Lmxlbg== 19970 -IGp1ZGdtZW50 19971 -IHNhYg== 19972 -IGNhZA== 19973 -IEl0ZW1z 19974 -Y29tZm9ydA== 19975 -ZWxpemU= 19976 -L2xvZw== 19977 -IGVudHJlcHJlbmU= 19978 -IGNvbXBpbGVy 19979 -X3ZhbGlkYXRpb24= 19980 -cmV2aWV3 19981 -IHRleHRCb3g= 19982 -IGZyYWN0aW9u 19983 -IEJhbA== 19984 -PjsKCg== 19985 -LkF1dG9TY2FsZU1vZGU= 19986 -IGNhdHM= 19987 -NDY1 19988 -IHJlZ2lzdHJ5 19989 -dWx1cw== 19990 -Rkk= 19991 -cGF5bG9hZA== 19992 -LXNlYXJjaA== 19993 -IHN0YXlpbmc= 19994 -YWNpb3Vz 19995 -RGVjb3JhdGlvbg== 19996 -UmV2aWV3 19997 -SW5m 19998 -S2VlcA== 19999 -aXRpcw== 20000 -LFN0cmluZw== 20001 -Q29vcmQ= 20002 -IHBlcm8= 20003 -U2V4 20004 -IEF0bGFudGE= 20005 -dWVzdGE= 20006 -QXJnYg== 20007 -Pio= 20008 -fV8= 20009 -Rm9vdGVy 20010 -IGVtcGxveWVk 20011 -X2JvdW5k 20012 -dmlkZQ== 20013 -LmZ1bmM= 20014 -JHNjb3Bl 20015 -IHNwbw== 20016 -IEFuYWw= 20017 -b3VuY2Vk 20018 -YXJvdW5k 20019 -IHJlc3RyaWN0aW9u 20020 -IHNob3Bz 20021 -5YA= 20022 -IExhdGlu 20023 -LWNvbA== 20024 -IGJhcmVseQ== 20025 -IEV1cm8= 20026 -RXI= 20027 -IGZhaXJl 20028 -X2Rpc3RhbmNl 20029 -X3VubG9jaw== 20030 -UXVvdGU= 20031 -SVZBVEU= 20032 -IOWI 20033 -IGFpbWVk 20034 -IFJldHJpZQ== 20035 -Lml0ZXI= 20036 -IHdyYXBwZWQ= 20037 -IGFncmVlbWVudHM= 20038 -c3RydW1lbnQ= 20039 -KHByb2R1Y3Q= 20040 -IHN0dWRpZWQ= 20041 -LnNldFZhbHVl 20042 -IHll 20043 -IENhY2hl 20044 -TUJPTA== 20045 -IHF1YXJ0ZXJiYWNr 20046 -IHN5bnRheA== 20047 -LmdldEVsZW1lbnRzQnk= 20048 -LnZlcnNpb24= 20049 -d2Vic2l0ZQ== 20050 -UnVubmVy 20051 -X3NpbmdsZQ== 20052 -YXRpdg== 20053 -IEFsdGVybg== 20054 -IEJlYXV0aWZ1bA== 20055 -cmlnaHRhcnJvdw== 20056 -IGRpdmVyc2l0eQ== 20057 -cGxhc2g= 20058 -KGNv 20059 -LkZpbGw= 20060 -IHR5cGluZw== 20061 -Mzg3 20062 -MDIz 20063 -IGNsYXI= 20064 -SGl0 20065 -T08= 20066 -YWNjbw== 20067 -NTA3 20068 -d29ydGg= 20069 -IHNjcmlwdHM= 20070 -IE11c2xpbXM= 20071 -IExM 20072 -ZXJ2aW5n 20073 -KGJvb2xlYW4= 20074 -IGJhc2ViYWxs 20075 -IENBTg== 20076 -Mzk0 20077 -MDQ0 20078 -TUFJTA== 20079 -ZGVwZW5k 20080 -IHJlc3BlY3RpdmU= 20081 -IGNvbnN0ZXhwcg== 20082 -Lio7Cgo= 20083 -J10pKQo= 20084 -IHlhcmQ= 20085 -IGlkZW50aWNhbA== 20086 -aWZlY3ljbGU= 20087 -VVNI 20088 -dXBpdGVy 20089 -LnZhbGlkYXRl 20090 -Y2xp 20091 -SVNURVI= 20092 -SW5kaWNhdG9y 20093 -RmFpbA== 20094 -IGRlbW9jcmFjeQ== 20095 -LnZhcg== 20096 -IHNhdGlzZmllZA== 20097 -LS0tLS0tLS0tLS0tLQ== 20098 -ZW5jZXI= 20099 -aG9y 20100 -IHJvdW5kcw== 20101 -REFP 20102 -b2E= 20103 -IGZsYXNr 20104 -PWM= 20105 -W10K 20106 -L2Rpc3Q= 20107 -IHBhcnRl 20108 -IGNvbmZpcm1hdGlvbg== 20109 -ZXJvbg== 20110 -YXdhcmU= 20111 -PD8+ 20112 -IGRlcGVuZGVuY2llcw== 20113 -IFZpZGVvcw== 20114 -LXJvdw== 20115 -ICoqLwo= 20116 -IG5vdQ== 20117 -IGhvdmVy 20118 -5p4= 20119 -IG5pbg== 20120 -IFVTRA== 20121 -TWFj 20122 -X0xvYWQ= 20123 -IG91dGNvbWVz 20124 -X3NvY2tldA== 20125 -IHF1ZXJpZXM= 20126 -d20= 20127 -NTky 20128 -IGhpdHRpbmc= 20129 -aW51eA== 20130 -TWljaA== 20131 -dWRnZQ== 20132 -QVRBQg== 20133 -IHZ1bG5lcmFibGU= 20134 -5L4= 20135 -IHBvcnRmb2xpbw== 20136 -OllFUw== 20137 -CW1hcA== 20138 -Qm91bmQ= 20139 -IGl0ZXJhdGlvbg== 20140 -aW5jZXNz 20141 -IGFjdG9ycw== 20142 -IFF1YWw= 20143 -X2NsZWFu 20144 -44CR44CQ 20145 -TVNH 20146 -R3JlZW4= 20147 -IE9mZmljZXI= 20148 -IHNtb2tpbmc= 20149 -Pics 20150 -IEZsbw== 20151 -Kys7 20152 -NDMz 20153 -b2x5Z29u 20154 -IGJ1bGs= 20155 -IGRyYW1h 20156 -IGV4Y2VwdGlvbnM= 20157 -b3NlZA== 20158 -ICsNCg== 20159 -IGxlZ2FjeQ== 20160 -Q1Y= 20161 -IGNvbnRyaWJ1dGVk 20162 -IFRlcm1z 20163 -IGJ0 20164 -NDM0 20165 -IHVudHVr 20166 -IGFsaWVu 20167 -PT09Cg== 20168 -CVZlY3Rvcg== 20169 -IGxz 20170 -T25saW5l 20171 -LmZhY2Vib29r 20172 -bnVtZXJpYw== 20173 -b2NrZXRz 20174 -QXV0 20175 -YnVyeQ== 20176 -LXJlZHV4 20177 -IFJlZGlzdHJpYnV0aW9ucw== 20178 -R0xPQkFMUw== 20179 -dXJyZW5jaWVz 20180 -IHRvbnM= 20181 -4oCZLA== 20182 -IMOq 20183 -KGNvbA== 20184 -IFN5bWJvbA== 20185 -IHN0YXllZA== 20186 -IE1M 20187 -IG11bmljaXA= 20188 -IHNleG8= 20189 -U2Vu 20190 -bnI= 20191 -IGdhaW5z 20192 -IHNob3J0bHk= 20193 -Lk1lbnU= 20194 -w70= 20195 -S05PV04= 20196 -IG9wZXJhdG9ycw== 20197 -LVY= 20198 -IFBhdHJpY2s= 20199 -L2FkZA== 20200 -X0NP 20201 -aXJhdGlvbg== 20202 -KHBvc3Q= 20203 -UG9zdHM= 20204 -L18= 20205 -IHBsdWc= 20206 -IGludGVsbGVjdHVhbA== 20207 -IG1ldGFi 20208 -IHByZWduYW5jeQ== 20209 -IFByZW1pZXI= 20210 -bm0= 20211 -IHByZWRpY3Rpb24= 20212 -NjA2 20213 -IE1pbmlzdHJ5 20214 -VGhyZWU= 20215 -dmFsdWF0ZQ== 20216 -IE1pbmk= 20217 -YnU= 20218 -0L7Qtw== 20219 -PHVs 20220 -IGRk 20221 -b2x2aW5n 20222 -IEN1dA== 20223 -NjAy 20224 -IHNjaGVt 20225 -LnRyYWlu 20226 -aXRhdGU= 20227 -IHJpY2U= 20228 -IGJpcmRz 20229 -44Gr 20230 -bWlkZGxl 20231 -c3RydWN0aW9ucw== 20232 -IG5lcnY= 20233 -YXF1ZQ== 20234 -NDUz 20235 -IGZsdQ== 20236 -IHN1cnZpdmFs 20237 -IEdhbGF4eQ== 20238 -IEZhbnQ= 20239 -Lk9yZGVy 20240 -QXR0cmli 20241 -aXJ0cw== 20242 -w6lj 20243 -TW92aWU= 20244 -IGNvbmNl 20245 -cXVhcnRlcnM= 20246 -IG1vb2Q= 20247 -LkFkZFJhbmdl 20248 -OTQy 20249 -IHJlc29sdmVk 20250 -44OI 20251 -IGJ1cm5pbmc= 20252 -NzAy 20253 -CQkJCQ0K 20254 -IFdF 20255 -IGhvc3Rpbmc= 20256 -TEFC 20257 -IG1hbmFnZXJz 20258 -IHN0cmVuZ3RoZW4= 20259 -PGNvbnN0 20260 -IEZpcmViYXNl 20261 -b25lZA== 20262 -IEplYW4= 20263 -Jzwv 20264 -IDo9Cg== 20265 -YWxnb3JpdGht 20266 -IEFyYw== 20267 -IGZyb3plbg== 20268 -X2V2ZW50cw== 20269 -IG92ZXJzZQ== 20270 -Z29vZHM= 20271 -IGZhaXQ= 20272 -IHZpYWdyYQ== 20273 -b3Nlcw== 20274 -OTIy 20275 -IGNvbXBpbGVk 20276 -IEF0aA== 20277 -IHN1YnN0YW5jZQ== 20278 -YW5pbWF0ZWQ= 20279 -UEY= 20280 -cHJldmlvdXM= 20281 -IHJvb3Rz 20282 -KGZpbHRlcg== 20283 -b2x1bWVz 20284 -IGludHJv 20285 -KGV2dA== 20286 -IEJhZw== 20287 -IERlZmluaXRpb24= 20288 -IEZlYXR1cmVz 20289 -QW5ub3RhdGlvbg== 20290 -IGF2Zw== 20291 -KHN1bQ== 20292 -UVVJUkU= 20293 -IHJlbmRlcmVy 20294 -IEZpeA== 20295 -LmRhdGV0aW1l 20296 -PWRldmljZQ== 20297 -U3Bl 20298 -Z2V0SW5zdGFuY2U= 20299 -IGV4dGVuc2lvbnM= 20300 -X25ldA== 20301 -IFBhcmxpYW1lbnQ= 20302 -IGNvbWlj 20303 -NDY4 20304 -IFBpY2s= 20305 -YXJtYQ== 20306 -CW1vZGVs 20307 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 20308 -IG1lbmc= 20309 -bWFudWFs 20310 -YWRhcHRlcg== 20311 -fS0= 20312 -ZWRiYWNr 20313 -IGVsZWN0cmljYWw= 20314 -IENvdW50ZXI= 20315 -QXBwbGljYXRpb25Db250ZXh0 20316 -X2J5dGU= 20317 -KGJ5dGU= 20318 -IEF1dG9t 20319 -IHRlcnJvcmlzdA== 20320 -55A= 20321 -dGhyb3VnaA== 20322 -IGZpc2NhbA== 20323 -b25pbmc= 20324 -NDU1 20325 -IHNwZWN0cnVt 20326 -IGJpdG1hcA== 20327 -IHNsZQ== 20328 -cHJvZA== 20329 -IGFnZWQ= 20330 -IGJlbmU= 20331 -IFNwaQ== 20332 -IGJyaWxsaWFudA== 20333 -IHN0YWJpbGl0eQ== 20334 -IGRpYWJldGVz 20335 -IGNvbmZpZ3VyZWQ= 20336 -Ym9uZQ== 20337 -NzQ4 20338 -NDg0 20339 -b3VzZXM= 20340 -Lmdvb2dsZWFwaXM= 20341 -RkFDRQ== 20342 -IGluc3BpcmF0aW9u 20343 -IERldHJvaXQ= 20344 -ZW5jaA== 20345 -0YDRgw== 20346 -dmVoaWNsZQ== 20347 -U3RhdGlvbg== 20348 -IGhvbGVz 20349 -IGR1cmNo 20350 -Lk1lZGlh 20351 -IENOTg== 20352 -aW5uaW5n 20353 -NjA0 20354 -IFBlbm5zeWx2YW5pYQ== 20355 -IGVtb3Rpb24= 20356 -U2VjcmV0 20357 -w6FyaW8= 20358 -IFJhdGU= 20359 -NDUx 20360 -RGVwdGg= 20361 -IG1vZGVz 20362 -NDI2 20363 -KGlkeA== 20364 -IGhlcw== 20365 -IGdyZXk= 20366 -U3RhbmRhcmQ= 20367 -UXVlc3Q= 20368 -YnV5 20369 -c3Vy 20370 -IFRyYWNr 20371 -b21t 20372 -Lmds 20373 -IChc 20374 -dHdv 20375 -X0lP 20376 -b3NleA== 20377 -X3JvbGU= 20378 -56S6 20379 -cm91dGVz 20380 -U2hvcA== 20381 -IEFTQw== 20382 -IG1lbWNweQ== 20383 -ZGlyZWN0 20384 -NDQ2 20385 -ICoKCg== 20386 -IEJN 20387 -IFBvcg== 20388 -X2hpc3Rvcnk= 20389 -IFJlc3BvbnNlRW50aXR5 20390 -LnNldEZvbnQ= 20391 -IGVuZ2FnZW1lbnQ= 20392 -LGg= 20393 -IFdvcmRQcmVzcw== 20394 -ZmVjaGE= 20395 -IGVudHJhbmNl 20396 -RGVzcGl0ZQ== 20397 -SURFTlQ= 20398 -IHNhbml0 20399 -IEdlbmVyYXRl 20400 -KCIiLA== 20401 -X3ZpZGVv 20402 -U3RyYXRlZ3k= 20403 -X29r 20404 -IHRpZXM= 20405 -IGxvZ2ljYWw= 20406 -IEJyb24= 20407 -KEZpbGU= 20408 -IE1vaA== 20409 -LlNwbGl0 20410 -LlRyeQ== 20411 -IEhpbmQ= 20412 -IHNjb3Jpbmc= 20413 -IGFwcHJvYWNoZXM= 20414 -IGZsb3Vy 20415 -VlJU 20416 -ODA0 20417 -VVNUT00= 20418 -NDY3 20419 -c2NyaXB0cw== 20420 -IEVwaXNvZGU= 20421 -Mzg5 20422 -IEFtYg== 20423 -X09S 20424 -IGZyYXVlbg== 20425 -IHVubGlrZQ== 20426 -IHJpZGluZw== 20427 -IHBpdA== 20428 -IHRyYW5zZg== 20429 -YXJ0ZQ== 20430 -4LmJ 20431 -cmFwZQ== 20432 -cmV0dmFs 20433 -X2FmdGVy 20434 -Ijw8 20435 -NzAz 20436 -IEJlcmxpbg== 20437 -IHRpc3N1ZQ== 20438 -LkludGVudA== 20439 -INC00LvRjw== 20440 -IHN0dW5uaW5n 20441 -IEhhbA== 20442 -LkludGVnZXI= 20443 -IHdoZXJlYXM= 20444 -IGRlbGVn 20445 -IHVzZXJOYW1l 20446 -IGZvcm1hdHM= 20447 -IGNvbXBlbnNhdGlvbg== 20448 -IEh1bQ== 20449 -YXJyaW5n 20450 -IHVuc2FmZQ== 20451 -UGlu 20452 -Y2x1Yg== 20453 -a2V5d29yZA== 20454 -X3RoZW1l 20455 -IGNhbGxlcg== 20456 -IGdob3N0 20457 -IGVudGl0bGVk 20458 -IE1hcw== 20459 -NTYx 20460 -IGRlbW9uc3RyYXRl 20461 -IEhvd2FyZA== 20462 -RHJvcA== 20463 -I3VuZGVm 20464 -NDI3 20465 -IGludm9rZQ== 20466 -IEJyaWRnZQ== 20467 -ZW5kZW4= 20468 -aWJsaW5n 20469 -U2xvdA== 20470 -QVRBQkFTRQ== 20471 -IHRlbXBlcmF0dXJlcw== 20472 -c2VyaWVz 20473 -IFJlbWVtYmVy 20474 -Q2FsZW5kYXI= 20475 -QkY= 20476 -PT8= 20477 -MDY0 20478 -IEFG 20479 -KGh0dHA= 20480 -bWFrZXJz 20481 -ZmluaXR5 20482 -cHJlY2F0ZWQ= 20483 -V0g= 20484 -b2xpZGF5cw== 20485 -LXVu 20486 -aWFsZQ== 20487 -XFVzZXI= 20488 -cmVhc29u 20489 -JywKCg== 20490 -T1dFUg== 20491 -IHByZWRpY3Rpb25z 20492 -cHJvYg== 20493 -Lm5u 20494 -ICc7Cg== 20495 -LkZyb21Bcmdi 20496 -X0xPTkc= 20497 -IHRyb3Vi 20498 -IHVuaXR0ZXN0 20499 -ZWxpaG9vZA== 20500 -CWlz 20501 -NDQy 20502 -IGNvbnNlYw== 20503 -TEVBU0U= 20504 -IGNsaWNrZWQ= 20505 -IHRlbXBsYXRlcw== 20506 -Qlk= 20507 -cGVybQ== 20508 -bWF0Y2hlcw== 20509 -bGF3 20510 -KHRm 20511 -X3JhdGlv 20512 -aXRlbXB0eQ== 20513 -IGNyZWF0b3I= 20514 -Qml0cw== 20515 -RW5jb2Rlcg== 20516 -Ki4= 20517 -IFVJVA== 20518 -IE1hc2s= 20519 -Y3VybA== 20520 -LWdv 20521 -IE9jYw== 20522 -Y29ycmVjdA== 20523 -IEdlcg== 20524 -KGxheW91dA== 20525 -dW5jdA== 20526 -LmRpc3BhdGNo 20527 -O2FtcA== 20528 -LmlzUmVxdWlyZWQ= 20529 -CWRv 20530 -bWly 20531 -IHB0aHJlYWQ= 20532 -LWF1dG8= 20533 -IEljZQ== 20534 -IHZpb2xhdGlvbg== 20535 -IGNvbmNsdWRlZA== 20536 -IHZhcnM= 20537 -Y2FudmFz 20538 -IFRlbXA= 20539 -IFBoaWxpcHA= 20540 -iOuLpA== 20541 -Y3JlYXNl 20542 -IGZpc2hpbmc= 20543 -YWJiaXQ= 20544 -IGNvbmNlbnRyYXRpb24= 20545 -aXJ0aGRheQ== 20546 -IGdyb3Nz 20547 -IGtp 20548 -IEhhbmRsZXI= 20549 -IGltbWlncmFudHM= 20550 -6IA= 20551 -VW5k 20552 -cG4= 20553 -cmFj 20554 -NDU0 20555 -IENvbnN1bHQ= 20556 -Zm9sZA== 20557 -IHN0cnVnZ2xpbmc= 20558 -aGVhdA== 20559 -R2VuZXJpYw== 20560 -IHJpZGlj 20561 -IENPVklE 20562 -b21pdGVtcHR5 20563 -X09QVElPTg== 20564 -6rCA 20565 -IGNyZWF0dXJlcw== 20566 -X1BBR0U= 20567 -ZWk= 20568 -KGhvc3Q= 20569 -X0hQUA== 20570 -NTE2 20571 -IFhYWA== 20572 -IGF3aw== 20573 -YXNjYWRl 20574 -IHByZWc= 20575 -cHJvdmlkZXI= 20576 -UGFs 20577 -ZWdlbg== 20578 -Y2xvbmU= 20579 -LlJlZ2lzdGVy 20580 -IGF0dGFjaG1lbnQ= 20581 -YmVpdA== 20582 -dGhlbGVzcw== 20583 -KERhdGU= 20584 -IEZvcmVzdA== 20585 -Q0dSZWN0 20586 -IGNoaWxkaG9vZA== 20587 -YW1pbmU= 20588 -YXhlcw== 20589 -J109 20590 -TmF2aWdhdG9y 20591 -IHJlcGxpZWQ= 20592 -X2ludg== 20593 -LFQ= 20594 -IEZlYXR1cmU= 20595 -NDM4 20596 -ey0= 20597 -TEFORw== 20598 -IGNvbnZleQ== 20599 -55So5oi3 20600 -IFNlcmlm 20601 -IEF1cw== 20602 -bGljaGU= 20603 -IHVudXNlZA== 20604 -IG1vbnQ= 20605 -bm9kZXM= 20606 -IHNldQ== 20607 -LmNsYXNzTmFtZQ== 20608 -bm9ybQ== 20609 -X1NFUlZFUg== 20610 -IHdpbmc= 20611 -aW54 20612 -UmF3 20613 -IEphbQ== 20614 -NTkw 20615 -IGluc2lnaHQ= 20616 -NDcx 20617 -NTM1 20618 -IE5H 20619 -IEludGVyZmFjZQ== 20620 -IHN0bXQ= 20621 -IG5hbg== 20622 -Y3VsYXRvcg== 20623 -LWFwcA== 20624 -KEJ1bmRsZQ== 20625 -TWVzc2FnZUJveA== 20626 -4K4= 20627 -IG1lZXRz 20628 -dWJ5 20629 -T3B0aW9uUGFuZQ== 20630 -aXRhcmlhbg== 20631 -IGNvbGxhYm9yYXRpb24= 20632 -bW92aWU= 20633 -IGFybW9y 20634 -X2JpdHM= 20635 -IEhhdmluZw== 20636 -IG51ZGU= 20637 -IFNldHRpbmc= 20638 -IHN1Y2M= 20639 -RGVsYXk= 20640 -LmNvbXBvbmVudHM= 20641 -YWNodXNldA== 20642 -IEFsZXhhbmRlcg== 20643 -wqk= 20644 -IG1ldGVycw== 20645 -IHByZXBhcmluZw== 20646 -IGluY2VudA== 20647 -5ZM= 20648 -IGvDtm5uZW4= 20649 -IENvbnNlcnY= 20650 -IG51bWVybw== 20651 -YWNodXNldHRz 20652 -LWludA== 20653 -IGVtcGhhcw== 20654 -bGF5b3V0cw== 20655 -RXhjZWw= 20656 -SUJBY3Rpb24= 20657 -IHJlc2lkZW50aWFs 20658 -ZWxpbmc= 20659 -IE5D 20660 -IEFsbGVu 20661 -IGNldHRl 20662 -IG1pbmRz 20663 -LnJlcXVpcmVk 20664 -2LM= 20665 -IEdpcmxz 20666 -IH07 20667 -IHN0cmluZ1dpdGhGb3JtYXQ= 20668 -IGFkZHJlc3NlZA== 20669 -dGhleQ== 20670 -IEJsb29k 20671 -cG9zZXI= 20672 -IGphbQ== 20673 -yJk= 20674 -5pWw5o2u 20675 -IHN0ZG91dA== 20676 -IFVURg== 20677 -Q2xhc3Nlcw== 20678 -PiI7DQo= 20679 -IFNhdg== 20680 -LkJvbGQ= 20681 -IGVuYWJsZXM= 20682 -CXRtcA== 20683 -IG1hbnVhbGx5 20684 -IFNxdQ== 20685 -dXNlcmlk 20686 -LmZ1bmN0aW9u 20687 -LmNhY2hl 20688 -TE9QVA== 20689 -LlNlcnZpY2Vz 20690 -NTg4 20691 -ZGRpdA== 20692 -dGlt 20693 -PGltZw== 20694 -IFRoaW5ncw== 20695 -IEV2ZXJ5dGhpbmc= 20696 -IGFwdA== 20697 -Mzk3 20698 -ZW1hbmQ= 20699 -IHJvbGxpbmc= 20700 -66Y= 20701 -LmxldmVs 20702 -IHN0b20= 20703 -IFdpbnRlcg== 20704 -IHZpZXdpbmc= 20705 -KHZhbHVlcw== 20706 -b2NvbXBsZXRl 20707 -dmlh 20708 -dXBv 20709 -IGFib3J0aW9u 20710 -NTMy 20711 -acOocmU= 20712 -77yR 20713 -X0JVVFRPTg== 20714 -X2RvbWFpbg== 20715 -IGJyYQ== 20716 -IEFzdA== 20717 -aW5hcw== 20718 -IHN0YXRpc3Q= 20719 -Y29k 20720 -TFI= 20721 -IGRyaXZlcw== 20722 -IGZvbGxvd2Vycw== 20723 -IGFsbGllcw== 20724 -CWN1cnJlbnQ= 20725 -ZWNlc3Nhcnk= 20726 -IGRhbWFnZWQ= 20727 -X3B0 20728 -YW5kbGVz 20729 -b3VudHJpZXM= 20730 -IHNpbXVsdA== 20731 -ZXU= 20732 -IGNvbnRyb3ZlcnNpYWw= 20733 -X0dST1VQ 20734 -IHJpYg== 20735 -LkluZm8= 20736 -Om1t 20737 -Lm5vcm1hbA== 20738 -X0FERFJFU1M= 20739 -IO2V 20740 -YWRkbGU= 20741 -IER1cg== 20742 -LkVsZW1lbnQ= 20743 -NjU2 20744 -V2FybmluZ3M= 20745 -IGNyZWRpdHM= 20746 -IGluaGli 20747 -IGVtaXNzaW9ucw== 20748 -NTQ1 20749 -IGhheg== 20750 -LnlvdXR1YmU= 20751 -dWdnZWQ= 20752 -IGJvdGhlcg== 20753 -IEthbnNhcw== 20754 -IEZpeGVk 20755 -IFRlc3Rz 20756 -IEZJWA== 20757 -NTc2 20758 -VW5pZm9ybQ== 20759 -IGtvbnQ= 20760 -Pj4+ 20761 -c3RhdGlvbg== 20762 -bG9yZQ== 20763 -YXR5cGU= 20764 -aXNob3A= 20765 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 20766 -NTIx 20767 -Q29tYm9Cb3g= 20768 -IHZhY2F0aW9u 20769 -IGluaXRpYXRpdmU= 20770 -IGRlZmF1bHRWYWx1ZQ== 20771 -Nzcw 20772 -Y29uY2F0 20773 -IEto 20774 -NjMy 20775 -IFdlbGNvbWU= 20776 -aXplZE5hbWU= 20777 -TWlncmF0aW9u 20778 -IGdyYWRpZW50 20779 -SG90 20780 -IGhhcmRseQ== 20781 -ZWxv 20782 -IFN0dWRlbnRz 20783 -IGxvb3Nl 20784 -NzMw 20785 -YXR6 20786 -LlNlbmQ= 20787 -Jy8= 20788 -IHVuaXZlcnNhbA== 20789 -IGVudGVycHJpc2U= 20790 -IHJlZ2V4 20791 -IHZpc2l0b3I= 20792 -IEZseQ== 20793 -U2Vx 20794 -4LiZ 20795 -IFZpc3VhbA== 20796 -IGxpYnJhcmllcw== 20797 -YXRvZXM= 20798 -UGF5bWVudA== 20799 -NDQ3 20800 -IHBlbnQ= 20801 -IGdhdGhlcmVk 20802 -VlJUWA== 20803 -IERN 20804 -U3BsaXQ= 20805 -IGxldHRpbmc= 20806 -0J0= 20807 -X2Vycm9ycw== 20808 -ZXBvY2g= 20809 -UEFSQU0= 20810 -Y3U= 20811 -0YHRgtCy 20812 -b2x1dGlvbnM= 20813 -RWRpdGluZw== 20814 -Zm9udHM= 20815 -IGFsbG9jYXRlZA== 20816 -IEJhc2Vk 20817 -KFk= 20818 -IEp1ZGdl 20819 -IGJyb3RoZXJz 20820 -RklMRVM= 20821 -w6dv 20822 -NTMx 20823 -d2I= 20824 -X1BJ 20825 -J14= 20826 -IHN3b3Jk 20827 -LnNlcnZpY2Vz 20828 -IG5s 20829 -VGlt 20830 -aWdn 20831 -IE1vb3Jl 20832 -IGNyeXB0b2M= 20833 -5Ye6 20834 -X3Bvc3Rz 20835 -b3RhdGU= 20836 -Pyc= 20837 -Li4uLgoK 20838 -IGts 20839 -PSIk 20840 -IGRlY29yYXRpb24= 20841 -4bqh 20842 -IERJUkVDVA== 20843 -R1VJ 20844 -KT0+ewo= 20845 -IG5ld3NsZXR0ZXI= 20846 -IHByZWNpcw== 20847 -KHBvaW50 20848 -IEVxdWlwbWVudA== 20849 -dXR5 20850 -IERhdmU= 20851 -IHBhcnRpY2lwYXRpb24= 20852 -dWFyaW9z 20853 -eGl0 20854 -LkFz 20855 -RVRFUg== 20856 -b3JvdXM= 20857 -IHNoaWVsZA== 20858 -W10+ 20859 -aWxpdGFyeQ== 20860 -Lm9yaWdpbg== 20861 -IHByb21vdGlvbg== 20862 -VW50 20863 -IGN0 20864 -VFJB 20865 -NTU2 20866 -Vmlld0hvbGRlcg== 20867 -IHNpZ21h 20868 -ZGVsdGE= 20869 -YXJlaG91c2U= 20870 -Y29udHJhY3Q= 20871 -KFZlY3Rvcg== 20872 -NzIx 20873 -IGNvbXBldGU= 20874 -L2Zvcm0= 20875 -L2NvbXBvbmVudHM= 20876 -IG5y 20877 -IEluZG9uZXM= 20878 -INC+0YI= 20879 -IFZvbHVtZQ== 20880 -LmZpbGVz 20881 -KHJlc3A= 20882 -L21vZGVscw== 20883 -IHN1cmY= 20884 -c3RhbmRhcmQ= 20885 -L28= 20886 -IFhDVEFzc2VydA== 20887 -VklDRVM= 20888 -LkNvZGU= 20889 -U0VE 20890 -IGFjdGl2YXRl 20891 -RGVsdGE= 20892 -IGxpbWl0YXRpb24= 20893 -cmlq 20894 -IHByZWduYW50 20895 -Ol4o 20896 -IHNvdXI= 20897 -cGll 20898 -ODAz 20899 -IGV4cGVuc2U= 20900 -aWNhdGlvbg== 20901 -IExhcmdl 20902 -IMKx 20903 -IEJvd2w= 20904 -KG1vZGVscw== 20905 -L04= 20906 -ODU3 20907 -UGE= 20908 -LnJlbG9hZA== 20909 -IHdvbmRlcmluZw== 20910 -NDYy 20911 -RXhlY3V0aW9u 20912 -CSAgICAgIA== 20913 -IEdyYXBoaWNz 20914 -IENvbnRpbg== 20915 -X2pvYg== 20916 -IGdldE5hbWU= 20917 -IE1hZ24= 20918 -IERXT1JE 20919 -bWFk 20920 -IG5o 20921 -ZmVhdHVyZXM= 20922 -fSIpOwo= 20923 -aGVldHM= 20924 -KHRyYWlu 20925 -em4= 20926 -IHJlY3J1aXQ= 20927 -LmNvbm5lY3Rpb24= 20928 -IGJhcnJlbA== 20929 -IHN0ZWFt 20930 -X3NldHRpbmc= 20931 -IGFuZ3VsYXI= 20932 -YW5lb3VzbHk= 20933 -IGJpbA== 20934 -IE5vcm0= 20935 -NTIy 20936 -KCEk 20937 -aWJ0 20938 -JSg= 20939 -IHBvc2l0 20940 -IEZhdGhlcg== 20941 -aW50ZW5kbw== 20942 -NTY1 20943 -TGl2ZQ== 20944 -MDQx 20945 -IHBvcnRz 20946 -IG1lag== 20947 -IGxhbmRpbmc= 20948 -cG9uZGVy 20949 -IGNvZA== 20950 -X0hFQURFUg== 20951 -Lk1hcmdpbg== 20952 -IGJhbGxz 20953 -IGRpc2N1c3Npb25z 20954 -IGJsZW5k 20955 -SGV4 20956 -IGZhcm1lcnM= 20957 -IG1haW50YWluaW5n 20958 -ICAgDQo= 20959 -c3lu 20960 -W1Q= 20961 -cnVz 20962 -NDM5 20963 -dWZmZXJz 20964 -IGNvbnRyaWJ1dG9ycw== 20965 -X3N5cw== 20966 -LkRlYnVn 20967 -IGNvbnN0cnVjdGVk 20968 -b21lcw== 20969 -P2lk 20970 -c2xpZGVy 20971 -IHN1cHBsaWVycw== 20972 -NjEx 20973 -c2NyaWJlcg== 20974 -cGVz 20975 -0J4= 20976 -IjoNCg== 20977 -XENvbnRyb2xsZXI= 20978 -KSkKCgo= 20979 -IGx1YQ== 20980 -TXVsdGk= 20981 -RU5T 20982 -U3Jj 20983 -IHBldGl0aW9u 20984 -IHNsYXZl 20985 -bG9va2luZw== 20986 -VkVSVA== 20987 -CXZlY3Rvcg== 20988 -U3BlY2lhbA== 20989 -aGg= 20990 -YW5uZQ== 20991 -IE5pZ2Vy 20992 -L3ZpZXdz 20993 -emluZw== 20994 -ZW5kYW50 20995 -PEM= 20996 -c3BlZWQ= 20997 -NTE0 20998 -IHt9OwoK 20999 -QmVnaW5Jbml0 21000 -IGZvcGVu 21001 -QFJlcXVlc3RNYXBwaW5n 21002 -RW5kSW5pdA== 21003 -IHB1bmNo 21004 -U2VuZGVy 21005 -NjAz 21006 -6ZQ= 21007 -Z2V0TWVzc2FnZQ== 21008 -L3R5cGVz 21009 -LlBJ 21010 -KCcnKTsK 21011 -b2N1c2Vk 21012 -KGFsbA== 21013 -IGRyb3Bkb3du 21014 -KS5fXw== 21015 -IFZpbg== 21016 -LkZvcmVpZ25LZXk= 21017 -NjEy 21018 -Y2FuZg== 21019 -b3VyZWQ= 21020 -IE9yZ2FuaXphdGlvbg== 21021 -INCw 21022 -IEN1bHR1cmU= 21023 -KGNscw== 21024 -LF8= 21025 -OTAy 21026 -cmdiYQ== 21027 -7J2Y 21028 -LmRhdGFHcmlkVmlldw== 21029 -IGRvemVu 21030 -IEdlcw== 21031 -ODA1 21032 -NDY0 21033 -X3NoYXJlZA== 21034 -bmljaw== 21035 -IGhvc3A= 21036 -b21ldGVy 21037 -NDk1 21038 -IGNsYWltaW5n 21039 -MDMy 21040 -aWJsZXM= 21041 -cmlr 21042 -5piv 21043 -ZW5hcmlv 21044 -IGRlbmdhbg== 21045 -b2Ji 21046 -bW9udA== 21047 -X3Jhbms= 21048 -KCcvJyw= 21049 -IGFwb2xvZw== 21050 -UHM= 21051 -X3Bvd2Vy 21052 -IEdyZWU= 21053 -IGZ1bGZpbGw= 21054 -IGZpcmViYXNl 21055 -OTEw 21056 -IGZhcmU= 21057 -IEhpbQ== 21058 -IGJlYW4= 21059 -4oCmLg== 21060 -IFNQSQ== 21061 -X1JY 21062 -IHBlcmNlcHRpb24= 21063 -cmVsYXRpdmU= 21064 -Y29tcGlsZQ== 21065 -dXVt 21066 -dXRvcw== 21067 -YXVj 21068 -IEFzaw== 21069 -IGluZGljYXRvcg== 21070 -L3Ro 21071 -LnNldFN0cmluZw== 21072 -IFdpc2NvbnNpbg== 21073 -LkRvbWFpbg== 21074 -IGFydGlmaWNpYWw= 21075 -RGV2ZWxvcA== 21076 -IFNhcmFo 21077 -IGx5aW5n 21078 -KHNlYXJjaA== 21079 -IEVtcGlyZQ== 21080 -dXJyaW5n 21081 -5pe26Ze0 21082 -PSIkew== 21083 -IGdldElk 21084 -IFBheW1lbnQ= 21085 -dHJhbnNpdGlvbg== 21086 -IF0u 21087 -aXhpbg== 21088 -VlQ= 21089 -LXNlbGVjdA== 21090 -IGRlbW9uc3RyYXRlZA== 21091 -IGxhc3ROYW1l 21092 -ZW1wbG95bWVudA== 21093 -LmdldFByb3BlcnR5 21094 -IGZvdWdodA== 21095 -ZmlsZU5hbWU= 21096 -IFBlcnM= 21097 -NDUy 21098 -LWNhcmQ= 21099 -YXN0cg== 21100 -YXR0cnM= 21101 -IHByb21pbmVudA== 21102 -RGVzaWdu 21103 -YW5jb3V2ZXI= 21104 -44GX44E= 21105 -YXJkbw== 21106 -c2VjcmV0 21107 -IHJhZw== 21108 -IHBvaXNvbg== 21109 -LW1hbg== 21110 -LG9taXRlbXB0eQ== 21111 -NzQw 21112 -CXVu 21113 -aXR6ZXI= 21114 -IENhc2lubw== 21115 -IFJvc3M= 21116 -LWZvb3Q= 21117 -KHJlc3VsdHM= 21118 -UGxhbg== 21119 -IGxhc2Vy 21120 -6riw 21121 -X0RS 21122 -NTIz 21123 -RmFjZWJvb2s= 21124 -NDQ5 21125 -IGJvYXJkcw== 21126 -c3Rh 21127 -XV0s 21128 -Njc1 21129 -IHRpbGVz 21130 -U0laRQ== 21131 -ID1+ 21132 -OTcw 21133 -IHByZW1pZXI= 21134 -b2NhYg== 21135 -IGVuY29kZWQ= 21136 -IHJlc2VydmU= 21137 -NjA5 21138 -IEFmZ2hhbmlzdGFu 21139 -IExpc3ROb2Rl 21140 -dXJscw== 21141 -IHN1Ym1pc3Npb24= 21142 -IG5ldQ== 21143 -NDc3 21144 -ICMrIw== 21145 -X1BPU1Q= 21146 -IG1vaXN0 21147 -ZWxsaQ== 21148 -ZWxsaWdlbnQ= 21149 -LmFsZXJ0 21150 -w7Nk 21151 -YnJl 21152 -IENvbGxlY3Q= 21153 -IGdyYXBoaWM= 21154 -IGxvbmdpdHVkZQ== 21155 -IFByb3ZpZA== 21156 -IENhbGN1bGF0ZQ== 21157 -eGZmZmY= 21158 -Y3JpdGVyaWE= 21159 -IHdhdGVycw== 21160 -cm9jaw== 21161 -bG9xdWVudA== 21162 -IFRyaWI= 21163 -NTEz 21164 -IGJ1cnN0 21165 -IHN1ZmZpeA== 21166 -LkV4dGVuc2lvbnM= 21167 -aXNoZXM= 21168 -aXZlbA== 21169 -IExJS0U= 21170 -IEdldHR5 21171 -LkFjdGlvbkV2ZW50 21172 -LnNsZg== 21173 -IEhBTA== 21174 -dXBhbA== 21175 -RUFS 21176 -NTI0 21177 -dWRp 21178 -X3RpbWVvdXQ= 21179 -VUY= 21180 -IFNpbmdhcG9yZQ== 21181 -IEFkdmVudA== 21182 -X2ludGVydmFs 21183 -Y2hhZnQ= 21184 -IEVtZXI= 21185 -IHRlbGVwaG9uZQ== 21186 -IFR1cms= 21187 -X2ludGVyZmFjZQ== 21188 -IE93bg== 21189 -IGVuY291cmFnZWQ= 21190 -PE9iamVjdA== 21191 -X1RleHQ= 21192 -IE9udGFyaW8= 21193 -IEFwcGx5 21194 -LmZpcmViYXNl 21195 -IGFudGli 21196 -UHJpb3JpdHk= 21197 -ZW5leg== 21198 -RGF5cw== 21199 -Y2lk 21200 -dXJyZW5jZQ== 21201 -Oy8= 21202 -aW5uZWQ= 21203 -0YHRjw== 21204 -IHZleg== 21205 -Znc= 21206 -Ly8k 21207 -YXR0YWNr 21208 -NDU4 21209 -IHN0YXJ0dXA= 21210 -YWluZXJz 21211 -LmZyYWdtZW50 21212 -b3BhY2l0eQ== 21213 -KGNvbm4= 21214 -aGVpbQ== 21215 -Lm5ldHdvcms= 21216 -KHN0cmVhbQ== 21217 -Njcw 21218 -IE5PTg== 21219 -dG9s 21220 -ODMw 21221 -IFhib3g= 21222 -IERT 21223 -IGNhY2hlZA== 21224 -IHByb3N0aXR1dGFz 21225 -IEJhbHQ= 21226 -KCdb 21227 -NTc1 21228 -IG5vZXhjZXB0 21229 -Iic= 21230 -IHNk 21231 -LnZhbGlk 21232 -X2Fn 21233 -IHJhY2Vz 21234 -NDgx 21235 -IHJvZA== 21236 -aXR1ZGVz 21237 -PD4o 21238 -NTQ0 21239 -LlByb2R1Y3Q= 21240 -Rm9ybXM= 21241 -TkVX 21242 -UGF5 21243 -CWJvb2xlYW4= 21244 -X2NvbnRhY3Q= 21245 -IEVsZWN0cmlj 21246 -c2tpcA== 21247 -IHd1cg== 21248 -IGNocm9uaWM= 21249 -X2RyaXZlcg== 21250 -OTQw 21251 -IFNhYg== 21252 -IFVsdA== 21253 -IFJhZA== 21254 -U1RBVFVT 21255 -IExld2lz 21256 -T0I= 21257 -IGdpZnRz 21258 -LlJlYw== 21259 -VFJVRQ== 21260 -IGludGVuc2l0eQ== 21261 -TWFya2Vy 21262 -LmNvbXBhcmU= 21263 -ZmZpYw== 21264 -Q29va2ll 21265 -IEJhYnk= 21266 -IEJpZ0RlY2ltYWw= 21267 -aWxldA== 21268 -IEhPTERFUlM= 21269 -IExhZHk= 21270 -IGx1bmc= 21271 -IEFsYWJhbWE= 21272 -IGRlc3M= 21273 -YCk7Cg== 21274 -IEJ1aWxkZXI= 21275 -X3JlZ2lvbg== 21276 -IG5ldXRyYWw= 21277 -OTA5 21278 -Qm90aA== 21279 -IGhw 21280 -IGhvcm4= 21281 -IHNlZ21lbnRz 21282 -IEVD 21283 -Ij0+Ig== 21284 -KHJlYw== 21285 -IFBp 21286 -R00= 21287 -IGxhcHRvcA== 21288 -U2NhbGFy 21289 -NDYz 21290 -aXNk 21291 -LWRpYWxvZw== 21292 -IEFuZGVyc29u 21293 -IG1pc3Rha2Vz 21294 -NzA4 21295 -IEhhbg== 21296 -amVz 21297 -ZXN0aW5hdGlvbg== 21298 -NDM2 21299 -IHByb21pc2Vz 21300 -Ymlk 21301 -IFNjaWVudA== 21302 -R0lO 21303 -IFBlcmZvcm1hbmNl 21304 -YmFnZQ== 21305 -LnVzZXJz 21306 -bGVhZGluZw== 21307 -IG9yYWw= 21308 -R3JhcGhpY3M= 21309 -NDg4 21310 -X1BUUg== 21311 -NTE4 21312 -aGFuZw== 21313 -IGluZXY= 21314 -cHJvY2Vzc2luZw== 21315 -RmFjdG9y 21316 -IE5B 21317 -JHN0cmluZw== 21318 -IGdyb3VuZHM= 21319 -LlNhdmVDaGFuZ2Vz 21320 -Y2xvY2s= 21321 -OTQx 21322 -Y3JpcGNpb24= 21323 -IE5ld3Rvbg== 21324 -Z2M= 21325 -LmluY2x1ZGVz 21326 -IGJsYXN0 21327 -ICctJw== 21328 -IHB1ZWRl 21329 -NDY5 21330 -LlNlc3Npb24= 21331 -IGdyZXA= 21332 -X2ZpbmFs 21333 -IEdheQ== 21334 -IEdpdmU= 21335 -aXJp 21336 -LXN0YXI= 21337 -IFVJSW1hZ2U= 21338 -X2Vwb2No 21339 -dWJi 21340 -ZW50aA== 21341 -IGVsaXRl 21342 -IGNhbXBhaWducw== 21343 -IFBvcm5v 21344 -X2Fzc2lnbg== 21345 -UHJvdG9jb2w= 21346 -IEJlaW5n 21347 -IEFpcnBvcnQ= 21348 -IGNvbnZlbnRpb25hbA== 21349 -IFdhdA== 21350 -IENJ 21351 -RVRB 21352 -IEFudGhvbnk= 21353 -IHRhYmxldA== 21354 -KGZvcm1hdA== 21355 -IGNvbnNpc3RlbnRseQ== 21356 -IElvd2E= 21357 -NDc0 21358 -IGF2YXRhcg== 21359 -MDI3 21360 -LmN1cnNvcg== 21361 -IVs= 21362 -IGhhbmdpbmc= 21363 -SGVy 21364 -U3VjaA== 21365 -JzsKCgo= 21366 -b3JnZW91cw== 21367 -KCk9PQ== 21368 -IHZpZXdNb2RlbA== 21369 -IOOD 21370 -IGVscw== 21371 -IEFnZW50 21372 -RmV0Y2g= 21373 -YXBvcg== 21374 -IGN4 21375 -cHJlYWQ= 21376 -IFBpZXI= 21377 -b2VmZg== 21378 -NjE2 21379 -U24= 21380 -ODkw 21381 -IFZpcnR1YWw= 21382 -QXBy 21383 -LldoaXRl 21384 -NjE1 21385 -X01PRA== 21386 -IFBvaW50cw== 21387 -5aSx 21388 -IGdlbmVz 21389 -IHZlbmRvcg== 21390 -IG1haW5zdHJlYW0= 21391 -PHNyYw== 21392 -IEVsaXphYmV0aA== 21393 -RGVjb2Rlcg== 21394 -LXN0YXRl 21395 -IEdsYXNz 21396 -bmN5 21397 -YWRpYW5z 21398 -X21vbg== 21399 -IFJlbW90ZQ== 21400 -IHdpcmVsZXNz 21401 -IE1p 21402 -5Yk= 21403 -NDY2 21404 -6KGo 21405 -c3RhZ2U= 21406 -IFRpbGU= 21407 -bGxpYg== 21408 -VmFyaWFudA== 21409 -PT0K 21410 -IGdvbGRlbg== 21411 -KFFTdHJpbmc= 21412 -LnB1dEV4dHJh 21413 -IERvbQ== 21414 -IEFuaW1hdGlvbg== 21415 -IGludGVyYWN0aXZl 21416 -aWZhY3Q= 21417 -6Zmk 21418 -TEVU 21419 -IGZyZXF1ZW50 21420 -IDw+Cg== 21421 -RmlsZW5hbWU= 21422 -IHNuZQ== 21423 -IEZvb3RiYWxs 21424 -IHJpdmFs 21425 -IGRpc2FzdGVy 21426 -aW9uaWM= 21427 -IERhbWFnZQ== 21428 -LlJlc291cmNl 21429 -LWVu 21430 -IFR5cGVz 21431 -Z2V0U3RyaW5n 21432 -KGJvYXJk 21433 -IGJvbA== 21434 -cGxhaW4= 21435 -enlt 21436 -4Liy 21437 -IHNjYW5uZXI= 21438 -aWxkZXI= 21439 -X21zZ3M= 21440 -5o8= 21441 -KGludGVudA== 21442 -IGRlc3RydWN0 21443 -IGJ1c3Q= 21444 -IEVtcGxveQ== 21445 -b25p 21446 -IFVJVmlld0NvbnRyb2xsZXI= 21447 -IG9kZHM= 21448 -ZWFyZXI= 21449 -R2VvbWV0cnk= 21450 -IHlpaQ== 21451 -X0VYUE9SVA== 21452 -IEF0dGFjaw== 21453 -IG5pZXQ= 21454 -IGltcHJlc3Npb24= 21455 -IEdpbA== 21456 -X3Byb2I= 21457 -NTI4 21458 -IENG 21459 -IEV4cGVyaWVuY2U= 21460 -L3BsdWdpbnM= 21461 -Lk1ldGhvZA== 21462 -IGJlbGllZnM= 21463 -TmF0aXZl 21464 -X2J1aWxk 21465 -IHZpZw== 21466 -IHJhbmtz 21467 -Y292ZXJlZA== 21468 -NzA1 21469 -c3VjaA== 21470 -R3VhcmQ= 21471 -LnBhY2s= 21472 -YWRkZXI= 21473 -ODA5 21474 -aXZpYQ== 21475 -bG5n 21476 -INCy0Ys= 21477 -NTUy 21478 -VGltZXN0YW1w 21479 -X25vdw== 21480 -IHBva2Vy 21481 -IHVuYw== 21482 -IHNoYXBlcw== 21483 -LXR5cGVz 21484 -X3BlcmlvZA== 21485 -cGs= 21486 -IHZldGVyYW4= 21487 -IHNvbm8= 21488 -IGFwcG9pbnRlZA== 21489 -b3ZlcmZsb3c= 21490 -LmRyaXZlcg== 21491 -X2NhdA== 21492 -dXR0 21493 -cGxhbnQ= 21494 -aW1i 21495 -IEFjY2VwdA== 21496 -IGNvbmNlcnQ= 21497 -CW5vZGU= 21498 -CXo= 21499 -Pz4NCg== 21500 -IGJhbm5lZA== 21501 -CSAgICAgICAgICAgICAgIA== 21502 -IHRveGlj 21503 -IGRpc2FwcGU= 21504 -NDcz 21505 -yJs= 21506 -IGdyYWNl 21507 -YXRlZnVs 21508 -UmVwbHk= 21509 -IENydXo= 21510 -NDg2 21511 -IHNjcmFw 21512 -IGtleXdvcmRz 21513 -c2ltcA== 21514 -IG1vcnRnYWdl 21515 -IGN5YmVy 21516 -IEV4ZWN1dGU= 21517 -IGxhdGl0dWRl 21518 -aWZ1 21519 -LkNPTQ== 21520 -ZGJv 21521 -IHNvcnRz 21522 -IEdhcw== 21523 -b21pYWw= 21524 -LkxvY2Fs 21525 -Q2VsbHM= 21526 -LlJlcGxhY2U= 21527 -U3RyaW5ncw== 21528 -LmZpdA== 21529 -IFRoaXJk 21530 -JSIsCg== 21531 -IHt9Ii4= 21532 -IFNvbnk= 21533 -IFs6 21534 -NTg1 21535 -IGZhbGxlbg== 21536 -LicpCg== 21537 -aW5o 21538 -IE1D 21539 -IHJlZGlz 21540 -Q29kZXM= 21541 -IHByb2ZpbGVz 21542 -aG9vaw== 21543 -UmVkdWNlcg== 21544 -X0ZVTkM= 21545 -IG5hdmlnYXRl 21546 -c3RybGVu 21547 -IGhvcm0= 21548 -4Z4= 21549 -IFNS 21550 -LmJvb3Q= 21551 -IGRpZ2VzdA== 21552 -CWhlYWRlcg== 21553 -LmZpbmRPbmU= 21554 -5oE= 21555 -RGJUeXBl 21556 -bmlh 21557 -X21lcmdl 21558 -IGRvbm5l 21559 -L0dldHR5 21560 -X0NIQVI= 21561 -IGJhbmRz 21562 -LlVSTA== 21563 -YXJ0aWFs 21564 -IGZyZXE= 21565 -IHNpc3Q= 21566 -Tmc= 21567 -IHJlbmRlcmluZw== 21568 -XENvcmU= 21569 -V2lkZ2V0cw== 21570 -IFZB 21571 -IGFjdGl2aXN0cw== 21572 -U3Rl 21573 -PV8= 21574 -YWxsYQ== 21575 -U3RhbXA= 21576 -IGxvYWRz 21577 -IHh4 21578 -IExlYXJuaW5n 21579 -Lk12Yw== 21580 -dWly 21581 -KCIk 21582 -IGNvbm5lY3Rpbmc= 21583 -UmVhZE9ubHk= 21584 -dXJ1 21585 -IEVhZw== 21586 -QklU 21587 -X0RFTA== 21588 -5ac= 21589 -YXJyYXNz 21590 -ZXh0ZXJuYWw= 21591 -IFlPVVI= 21592 -IEJyZXc= 21593 -IEZpdmU= 21594 -IHJlc2l6ZQ== 21595 -aWdpZA== 21596 -ZXJhdGlvbg== 21597 -NjUz 21598 -INGN 21599 -NTM2 21600 -5Yqg 21601 -MDM5 21602 -IENhdGNo 21603 -2YE= 21604 -IExlb24= 21605 -YW1pbA== 21606 -LkJvZHk= 21607 -Q2xpcA== 21608 -L2xpc3Q= 21609 -LmJy 21610 -RWRpdFRleHQ= 21611 -CWRi 21612 -LkdhbWU= 21613 -KEJ1aWxkQ29udGV4dA== 21614 -YmFja2VuZA== 21615 -LlJlZA== 21616 -ZmFjZWJvb2s= 21617 -NTI5 21618 -LnVybHM= 21619 -bXI= 21620 -cm9sbGVk 21621 -LS0tLS0tLQ== 21622 -IGludGVydmVudGlvbg== 21623 -IHJldGlyZW1lbnQ= 21624 -IEtpdA== 21625 -IFBSRQ== 21626 -VXBwZXJDYXNl 21627 -IFNvY2tldA== 21628 -IDot 21629 -IHN0dWR5aW5n 21630 -IE1ldHJv 21631 -YXJkZWQ= 21632 -IGNvbnZlcnNhdGlvbnM= 21633 -Q2FsbGVk 21634 -IGV4YW1pbmU= 21635 -ZXJ0aWZpY2F0ZQ== 21636 -Lmd6 21637 -LXJlc3BvbnNpdmU= 21638 -IHJlZnVuZA== 21639 -X25ldHdvcms= 21640 -MDI2 21641 -YWxsb3dlZA== 21642 -ZW1wdA== 21643 -IG1lYWxz 21644 -Q2F0ZWdvcmllcw== 21645 -IHRyYXZlbGluZw== 21646 -IGtn 21647 -IHNoYW1l 21648 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 21649 -IGV4cGxpY2l0bHk= 21650 -IG1hdGhlbWF0aWM= 21651 -IFN1aXRl 21652 -IFJHQg== 21653 -KioqKioqLw== 21654 -IG1peHR1cmU= 21655 -bGVhcm5pbmc= 21656 -LnRlbXBsYXRl 21657 -YXR0cw== 21658 -d3g= 21659 -CWN0eA== 21660 -LnByb3BlcnRpZXM= 21661 -IGRyaW5rcw== 21662 -IEVpdGhlcg== 21663 -c2V0VGV4dA== 21664 -LmdldERhdGE= 21665 -LnppcA== 21666 -IHJldmVhbHM= 21667 -PHRhYmxl 21668 -Lkhhc2hNYXA= 21669 -IEh1cg== 21670 -KSIpOwo= 21671 -LmZyYW1ld29yaw== 21672 -IFNUQVJU 21673 -ZmVlZGJhY2s= 21674 -NDU3 21675 -IHNhZmVseQ== 21676 -Lmljb24= 21677 -Y29uZmlndXJl 21678 -LmxvY2s= 21679 -LmxheWVycw== 21680 -Lz4uCg== 21681 -IHJhbmtlZA== 21682 -X2ltcGw= 21683 -IEhhbmRsZXM= 21684 -IGhvc3RlZA== 21685 -IHVwZGF0aW5n 21686 -YWxidW0= 21687 -6Z0= 21688 -IHNoYWRlcg== 21689 -RWRpdG9ycw== 21690 -LXJvdW5k 21691 -W117 21692 -IHNlcA== 21693 -IEhp 21694 -VEVN 21695 -bG9va3Vw 21696 -Lm1hbg== 21697 -X0lOUFVU 21698 -IHRocmVhdGVuZWQ= 21699 -X0lNUE9SVA== 21700 -IGRyb3Bz 21701 -cnVpdA== 21702 -c2lk 21703 -Ym90aA== 21704 -IEV4Y2Vs 21705 -IGplcg== 21706 -b3JkaW5hcnk= 21707 -0LXQuQ== 21708 -VklFVw== 21709 -cmVwbHk= 21710 -ICk6Cg== 21711 -Y29sb3Jz 21712 -dmVyaWZpZWQ= 21713 -X1Ry 21714 -X3BhcnNl 21715 -IGNvbmdyZXNz 21716 -NjE3 21717 -UHJvbWlzZQ== 21718 -aW50cw== 21719 -IE1vdGhlcg== 21720 -LkFwaQ== 21721 -IER1cmF0aW9u 21722 -IGZpcnN0TmFtZQ== 21723 -aW5oZXJpdGRvYw== 21724 -IE1hcnM= 21725 -IGFwcg== 21726 -T0RZ 21727 -IHZpc2l0cw== 21728 -NjMx 21729 -IGhlYWxpbmc= 21730 -bGV0dGVycw== 21731 -KSkpOw0K 21732 -ZnV0dXJl 21733 -LkZyYW1ld29yaw== 21734 -IGtpc3M= 21735 -IGludm9sdmU= 21736 -IHNpbGVudA== 21737 -YWRvd3M= 21738 -IGFueWJvZHk= 21739 -c2No 21740 -Njkw 21741 -IHNvbGVseQ== 21742 -LWltZw== 21743 -IHByb3ByaQ== 21744 -IGluc3RydWN0 21745 -IGxpY2Vuc2Vz 21746 -IG1ldGg= 21747 -IGNvbmRlbQ== 21748 -IERvbWFpbg== 21749 -IEhhcnJpcw== 21750 -IHPDpQ== 21751 -Q0VQVA== 21752 -QmF0Y2g= 21753 -QGV4dGVuZHM= 21754 -IENPTlRSSUJVVA== 21755 -LkRhdGFGcmFtZQ== 21756 -NDcy 21757 -X3BhY2tldA== 21758 -cmVjaXNpb24= 21759 -IGZvY3VzaW5n 21760 -Lmh0 21761 -X18iOgo= 21762 -OkdldA== 21763 -IEtD 21764 -IHBhc3NhZ2U= 21765 -U2VnbWVudA== 21766 -X2NlbnRlcg== 21767 -LXpB 21768 -X0JM 21769 -IGNvbnZpbg== 21770 -IGNsYXNzaWZpZWQ= 21771 -IE5TTXV0YWJsZQ== 21772 -X2Fw 21773 -dGlsZQ== 21774 -UmVjdGFuZ2xl 21775 -NDky 21776 -KG51bXM= 21777 -dmVucw== 21778 -IFVJQnV0dG9u 21779 -IEZlZGVy 21780 -YW1v 21781 -IG91dGxpbmU= 21782 -IFBhcnNlcg== 21783 -IOKJ 21784 -IFdvcmtz 21785 -LlNjaGVtYQ== 21786 -IGVuZ2luZXM= 21787 -NjM3 21788 -NTYz 21789 -X2NvbW1vbg== 21790 -NTQy 21791 -X29sZA== 21792 -IHNldENvbnRlbnRWaWV3 21793 -IC8vLzw= 21794 -IEJU 21795 -Zm0= 21796 -IGRpdmVycw== 21797 -X3dlaWdodHM= 21798 -ZW1hcms= 21799 -IEFDVA== 21800 -IHByb3BvcnRpb24= 21801 -b3ZlcmxheQ== 21802 -LmRpcm5hbWU= 21803 -IEdpdA== 21804 -X1JFRkVSRU5DRQ== 21805 -PD4= 21806 -bGI= 21807 -X3J1bGU= 21808 -6LSl 21809 -IFB1dGlu 21810 -IHNsZWVwaW5n 21811 -KCk6DQo= 21812 -IHByZXNlcnZl 21813 -IHBhcmxpYW1lbnQ= 21814 -IExvb2tpbmc= 21815 -IHBpY2tpbmc= 21816 -IERpc3BhdGNo 21817 -IHNsaXA= 21818 -65M= 21819 -IEx5bg== 21820 -X3NpZ25hbA== 21821 -Y29uZmlndXJhdGlvbg== 21822 -IFBpdHQ= 21823 -NDkx 21824 -YWRlbg== 21825 -cHJvY2VkdXJl 21826 -IGVudGh1c2k= 21827 -ZmlnaHQ= 21828 -IENvbnNpZGVy 21829 -IHRvcm4= 21830 -Q29ubmVjdGVk 21831 -LmNvcw== 21832 -X2dyb3Vwcw== 21833 -IFRoaW5r 21834 -IGRlbGliZXI= 21835 -IHJlc2lk 21836 -d29ya2luZw== 21837 -LmNvbHVtbnM= 21838 -IENhbGxlZA== 21839 -IGVzbGludA== 21840 -PiIs 21841 -X0RPV04= 21842 -aGlzdA== 21843 -IEFkdmFuY2Vk 21844 -IHJld2FyZHM= 21845 -YWN0b3Jz 21846 -IHNpbGVuY2U= 21847 -NDc5 21848 -IG15dGg= 21849 -IG5ldXI= 21850 -NTE5 21851 -IGF1Y3Rpb24= 21852 -LkdldFN0cmluZw== 21853 -ZWtz 21854 -KHByb2plY3Q= 21855 -NTk4 21856 -CW1zZw== 21857 -CW91dHB1dA== 21858 -IGNvbXBsYWludHM= 21859 -NTUx 21860 -LFM= 21861 -IHRibA== 21862 -ICwKCg== 21863 -cmlvcnM= 21864 -YWhyZW4= 21865 -IGxhd3llcnM= 21866 -cmVkdXg= 21867 -X3N5bWJvbA== 21868 -b2ZmZWU= 21869 -X1JFU1VMVA== 21870 -KE5hbWU= 21871 -VVRD 21872 -LmN1cnJlbnRUaW1l 21873 -IG9yZ2FuaXM= 21874 -LmFyZw== 21875 -NTMz 21876 -IG1pbmlt 21877 -d2ljaw== 21878 -IHJlY2VpdmVz 21879 -QmFsYW5jZQ== 21880 -IHNwZWFrcw== 21881 -IERheXM= 21882 -IEJlbG93 21883 -NDgz 21884 -dGlwbw== 21885 -UHJlc2VudA== 21886 -IHJlc2Vydg== 21887 -aHA= 21888 -IHJpdA== 21889 -X1JJR0hU 21890 -LS0p 21891 -IGNoYWlybWFu 21892 -Nzgx 21893 -RElT 21894 -IEJPT1NU 21895 -IGV4cGVyaW1lbnRz 21896 -Njg3 21897 -X18pOwo= 21898 -IHN0YW1w 21899 -IGZlcnQ= 21900 -IGZvbmQ= 21901 -VGVy 21902 -ZWx2ZQ== 21903 -dXJlbg== 21904 -K2k= 21905 -ZW5kZW5jeQ== 21906 -IHZpcnR1YWxseQ== 21907 -Li4uIg== 21908 -772e 21909 -OTI1 21910 -LWNlbnQ= 21911 -X3VuaXF1ZQ== 21912 -IHByaWNpbmc= 21913 -bWlj 21914 -UkVTSA== 21915 -IDo6Og== 21916 -IGFubm90YXRpb24= 21917 -IENpcmNsZQ== 21918 -b25nb2Ri 21919 -aXRhcw== 21920 -ICUo 21921 -KGNvbXBvbmVudA== 21922 -INC+0LE= 21923 -KHBvcnQ= 21924 -LWhvdXI= 21925 -Lm9iag== 21926 -TEJM 21927 -IGp1cnk= 21928 -R0JU 21929 -IHNweQ== 21930 -IFByb2Zlc3Npb25hbA== 21931 -ICIiOwoK 21932 -IHN0cmlraW5n 21933 -IGRpc2NyaW1pbmF0aW9u 21934 -IHBheXM= 21935 -OTM3 21936 -bGljdA== 21937 -ZW50ZXM= 21938 -IHRocm93aW5n 21939 -IFBsdWdpbg== 21940 -KGRlZg== 21941 -IFJ1bnRpbWVFeGNlcHRpb24= 21942 -IE1pZ3JhdGlvbg== 21943 -NTk5 21944 -IGRpYw== 21945 -YmFn 21946 -b25pYQ== 21947 -IGNvcnJ1cHRpb24= 21948 -NzA0 21949 -KE1hcA== 21950 -IHByeg== 21951 -LmR0bw== 21952 -IGFjcXVpcmU= 21953 -U3RhdGVUb1Byb3Bz 21954 -IGxvdmluZw== 21955 -0L7Qtg== 21956 -X3BhdHRlcm4= 21957 -IGVtb3Rpb25z 21958 -IHB1Ymxpc2hlcg== 21959 -X2Jl 21960 -IGNvdXBsZXM= 21961 -NDk4 21962 -b2o= 21963 -IENoYXJ0 21964 -IHRyb3A= 21965 -LnRvb2w= 21966 -IGVzdGFibGlzaG1lbnQ= 21967 -IGRvbA== 21968 -NjU0 21969 -IHRvd2Vy 21970 -IGxhbmU= 21971 -IFN5ZG5leQ== 21972 -IGZpbGxpbmc= 21973 -Y2xhaW1lZA== 21974 -NjQ0 21975 -IGRpYWxvZ3Vl 21976 -IGNvbnZlbnRpb24= 21977 -Ym9va2luZw== 21978 -cGFyZW5jeQ== 21979 -5rE= 21980 -IEdlbmVyaWM= 21981 -NzE4 21982 -XFNjaGVtYQ== 21983 -NDgy 21984 -NjE4 21985 -IHJhbmdlcw== 21986 -L2No 21987 -IHBhbmVscw== 21988 -IHJ1bGVk 21989 -55Sf 21990 -LnRz 21991 -X3NldHM= 21992 -IGNsZWFudXA= 21993 -UHJldmlvdXM= 21994 -IEFuaW1hbA== 21995 -NjA3 21996 -KCQo 21997 -IEF2ZQ== 21998 -b2xsYXI= 21999 -MDI4 22000 -X2V2YWw= 22001 -CU5hbWU= 22002 -KHRyZWU= 22003 -ICJd 22004 -NTcx 22005 -IGR1dGllcw== 22006 -PScv 22007 -Q2xpY2tlZA== 22008 -IGRpZmZlcmVudGx5 22009 -IENsYXJr 22010 -IGRpdA== 22011 -b2xvZ2lzdHM= 22012 -IHN5bmQ= 22013 -IHNlbmRz 22014 -LWtub3du 22015 -a2I= 22016 -IE1vZGFs 22017 -aXRhdGl2ZQ== 22018 -IHJhY2luZw== 22019 -IGhpZ2hsaWdodHM= 22020 -IFNpbW9u 22021 -IENhcHRhaW4= 22022 -5L+h 22023 -IENC 22024 -Y29udGlu 22025 -YXJhbg== 22026 -IHBoeXNpY3M= 22027 -cmV0dHk= 22028 -ZXRhbA== 22029 -Lm1k 22030 -YXhpb3M= 22031 -IHNwZWFrZXJz 22032 -IHByZXA= 22033 -IGF3YXJkZWQ= 22034 -7KeA 22035 -IENvcm4= 22036 -IE5hdHVyZQ== 22037 -VURJTw== 22038 -NzM3 22039 -IHByb2o= 22040 -LXByZQ== 22041 -W3U= 22042 -RmVhdHVyZXM= 22043 -IGlzRXF1YWw= 22044 -QmluYXJ5 22045 -c2ln 22046 -IGNvbmZ1c2lvbg== 22047 -NTQ2 22048 -NTY4 22049 -IEhhdA== 22050 -IGt0w7M= 22051 -LmNvbmZpZ3VyZQ== 22052 -TU9O 22053 -NDk0 22054 -L2VkaXQ= 22055 -X0FkZA== 22056 -LHRydWU= 22057 -NTQx 22058 -IGNsaQ== 22059 -RXJyb3JNZXNzYWdl 22060 -LWxvYWRlcg== 22061 -RGltZW5zaW9ucw== 22062 -dWx0aXBseQ== 22063 -IHshIQ== 22064 -IFNxbENvbW1hbmQ= 22065 -IHNwb2tlbg== 22066 -IHBpY3M= 22067 -IHRveQ== 22068 -KEtleQ== 22069 -IExvb3A= 22070 -2Kg= 22071 -RUFUVVJF 22072 -aW5jdGlvbg== 22073 -X3NldHVw 22074 -d3JhcHBlcg== 22075 -IHRvbmc= 22076 -Y3VsYXI= 22077 -T3B0 22078 -LlBs 22079 -PSIs 22080 -KGxlbmd0aA== 22081 -dW1u 22082 -IGNocm9t 22083 -IHNldmVudA== 22084 -IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbg== 22085 -NDc4 22086 -CXN0YXJ0 22087 -IGJlZ3Vu 22088 -Q0VQVElPTg== 22089 -ZGF0YXNldA== 22090 -ODI1 22091 -IEZhaWxlZA== 22092 -Y29scw== 22093 -NDU5 22094 -IGtuZWU= 22095 -aW1vcmU= 22096 -LnNwbGljZQ== 22097 -c2hlbGw= 22098 -aWdnZXJz 22099 -IHRoZW1lcw== 22100 -OTk1 22101 -IERK 22102 -IEFzc2lzdGFudA== 22103 -LSQ= 22104 -TWF5YmU= 22105 -IG9yZGVyaW5n 22106 -IEludGVsbGlnZW5jZQ== 22107 -IE1hc3NhY2h1c2V0dHM= 22108 -IGZhaWxpbmc= 22109 -ZWxzb24= 22110 -R3JlYXQ= 22111 -PWk= 22112 -LnJlc3Q= 22113 -IGludml0ZQ== 22114 -LWRpc2FibGU= 22115 -Lkdyb3VwQm94 22116 -4oCZZXN0 22117 -IHRhY2tsZQ== 22118 -Z3Y= 22119 -ZXR0ZXI= 22120 -ICksDQo= 22121 -X3J1bGVz 22122 -Lndhcm4= 22123 -ZnVuY3Rpb25z 22124 -IENocmlzdGlhbnM= 22125 -IGJhY2tlZA== 22126 -IHNsaWRlcg== 22127 -IGVuam95aW5n 22128 -bmVzdA== 22129 -IGhpag== 22130 -X21z 22131 -Ly8q 22132 -QW5ub3RhdGlvbnM= 22133 -IFZhcmlhYmxlcw== 22134 -PFY= 22135 -KHNlcnZlcg== 22136 -IE9yYWNsZQ== 22137 -ZWxlbWVudHM= 22138 -IG9yZ2FuaXNhdGlvbg== 22139 -X3BvaW50ZXI= 22140 -IEhlYWRlcnM= 22141 -W2Q= 22142 -IGRlYWRsaW5l 22143 -aXNzYQ== 22144 -IGtuaWZl 22145 -IE5BU0E= 22146 -IEhlaWdodA== 22147 -Nzg0 22148 -IEFzeW5j 22149 -IHZlbnVl 22150 -LmRvbQ== 22151 -Ym91cm5l 22152 -IEhhd2Fp 22153 -IG1lbW8= 22154 -aWN0aW9ucw== 22155 -IHN1cnZlaWxsYW5jZQ== 22156 -b21p 22157 -L2Fzc2V0cw== 22158 -NTg3 22159 -IGVkdQ== 22160 -xJs= 22161 -IHJvc3Rlcg== 22162 -IGhpcmVk 22163 -IFRvaw== 22164 -IHBsYWNlbWVudA== 22165 -dXJhdGlvbnM= 22166 -IHNldFN0YXRl 22167 -IE1hZ2F6aW5l 22168 -IGhvcnJvcg== 22169 -VHJ5 22170 -IGxhZw== 22171 -IEV2ZXJ5b25l 22172 -dGh1cg== 22173 -KSk7DQoNCg== 22174 -LnJldHVybg== 22175 -IHN5bXA= 22176 -4paI4paI 22177 -IG5pZ2h0cw== 22178 -d29ya2Vy 22179 -IGFsZQ== 22180 -ZW5uZXNzZWU= 22181 -LnN0ZXA= 22182 -IHN5bmNocm9uaXplZA== 22183 -NDg3 22184 -b3VyaQ== 22185 -RG9lcw== 22186 -LmNoYW5nZQ== 22187 -Zm9u 22188 -LnNldEJhY2tncm91bmQ= 22189 -aXJjdWxhcg== 22190 -NDc2 22191 -Ky0= 22192 -IENJQQ== 22193 -NzI5 22194 -IEphbmU= 22195 -IFNpbWlsYXI= 22196 -LUk= 22197 -bGV2ZWxhbmQ= 22198 -IHByb3NwZWN0 22199 -X2ZvdW5k 22200 -CWNvbG9y 22201 -LkRpYWdub3N0aWNz 22202 -IGFubm91bmNl 22203 -IGFzc3VtZXM= 22204 -L3Ry 22205 -IGJk 22206 -OTg3 22207 -IENhcmJvbg== 22208 -IGFuYWx5cw== 22209 -NTY0 22210 -LmRlc3Q= 22211 -bmlr 22212 -IExpZQ== 22213 -LWluZGV4 22214 -RHJhd2FibGU= 22215 -IFRBRw== 22216 -IHRyaWFuZ2xl 22217 -X0ZMT0FU 22218 -CQkgICAgIA== 22219 -LmJsYWNr 22220 -dnVl 22221 -Y3VyYWN5 22222 -IGFmZmVjdHM= 22223 -OTA2 22224 -IHN1cmVseQ== 22225 -U2xpZGVy 22226 -dWtp 22227 -Y2VyeQ== 22228 -IHVudGVy 22229 -LnByb2ZpbGU= 22230 -b3Jkb24= 22231 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 22232 -bGVhdmU= 22233 -IHNtYXJ0cGhvbmU= 22234 -Z2ll 22235 -IGNvbnNwaXI= 22236 -IHR1dG9yaWFs 22237 -57G7 22238 -IGNhYg== 22239 -NzY1 22240 -IFN1bW1hcnk= 22241 -KgoK 22242 -w6Ro 22243 -IlRoaXM= 22244 -IHNsaWRlcw== 22245 -Ijwv 22246 -LmRldg== 22247 -Jzw= 22248 -IFJpbmc= 22249 -xYJh 22250 -IGtvdGxpbg== 22251 -LmR1bXBz 22252 -IGJhc3M= 22253 -7Is= 22254 -UE9JTlQ= 22255 -IHV0dGVy 22256 -IMOpcw== 22257 -LmZ1bGw= 22258 -T0xM 22259 -IGNlcmVtb255 22260 -c2xvdA== 22261 -IGFpbXM= 22262 -dG9vbHRpcA== 22263 -LnNjb3Jl 22264 -LWRk 22265 -NjQy 22266 -IHByb3g= 22267 -UmVjb2duaXplcg== 22268 -ZHluYW1pYw== 22269 -w6RuZA== 22270 -L3N0ZA== 22271 -RFU= 22272 -IE5vdEltcGxlbWVudGVk 22273 -KCItLQ== 22274 -UkFX 22275 -NjM1 22276 -IGV0aG5pYw== 22277 -YW5ubw== 22278 -IGNoYW1waW9uc2hpcA== 22279 -LHNlbGY= 22280 -IGFjY2VwdGFibGU= 22281 -IFNwcml0ZQ== 22282 -W3R5cGU= 22283 -w7xo 22284 -IFZL 22285 -KGpQYW5lbA== 22286 -NTQ4 22287 -aXRy 22288 -66A= 22289 -YXVyYQ== 22290 -IGZhY3VsdHk= 22291 -YXZlcnM= 22292 -IFJlY29yZHM= 22293 -LlNlY3VyaXR5 22294 -IGNvbnN0cmFpbnQ= 22295 -LkJs 22296 -VWludA== 22297 -YmFsYW5jZQ== 22298 -IGNvbW1l 22299 -IE5paw== 22300 -U3VwcHJlc3NXYXJuaW5ncw== 22301 -IE9jZWFu 22302 -NTU0 22303 -X0lk 22304 -RGF0YVNldA== 22305 -IGluc2VydGVk 22306 -IjsNCg0K 22307 -4oCz 22308 -aXBwZXQ= 22309 -IGFubml2ZXJzYXJ5 22310 -IHJldGlyZWQ= 22311 -b3JjaA== 22312 -IHBlcnBldA== 22313 -XEZvcm0= 22314 -IGludm9sdmVtZW50 22315 -X3VzZXJuYW1l 22316 -YWxlbQ== 22317 -X1NFUlZJQ0U= 22318 -IEluZGlhbmE= 22319 -IGNpZ2FyZXQ= 22320 -YXJ0eg== 22321 -IFJD 22322 -IG1lYXN1cmVtZW50cw== 22323 -572u 22324 -IGFmZmlsaWF0ZQ== 22325 -YWNpb25hbA== 22326 -LXNlY3Rpb24= 22327 -X2NvbnRyb2xsZXI= 22328 -dmFyZA== 22329 -X2Vs 22330 -IFRveQ== 22331 -PFA= 22332 -TWFjaGluZQ== 22333 -w7ptZXI= 22334 -IFllYWg= 22335 -IllvdQ== 22336 -IG1vbA== 22337 -LkNs 22338 -Y29udHJvbGxlcnM= 22339 -IHN1c3BlbmRlZA== 22340 -Kys7Cgo= 22341 -QVRU 22342 -IHByb2plY3Rpb24= 22343 -UGFkZGluZw== 22344 -NTg2 22345 -Lm1hdGg= 22346 -Njg2 22347 -ZmFjdG9yeQ== 22348 -MDQy 22349 -IGdhbW1h 22350 -KCk+ 22351 -Y3ljbGU= 22352 -IEJ1bGw= 22353 -cGF0aHM= 22354 -IHVucA== 22355 -IHZpZXdEaWRMb2Fk 22356 -X01vZGVs 22357 -IGFzc2VydFRydWU= 22358 -IHJhdGVk 22359 -RGVjbA== 22360 -dmVydGVk 22361 -IERhdA== 22362 -YnJldw== 22363 -IHBvaW50aW5n 22364 -TXM= 22365 -IFBvaW50ZXI= 22366 -KSc= 22367 -X25vbg== 22368 -NTI3 22369 -IFNFQw== 22370 -IHllYWg= 22371 -Z2VuY3k= 22372 -aW5pdGlhbGl6ZQ== 22373 -Zmx5 22374 -NzEx 22375 -W3Bvcw== 22376 -LGc= 22377 -VGVsZQ== 22378 -MDM0 22379 -IGpva2U= 22380 -IGNsYXVzZQ== 22381 -LmZpbmRCeUlk 22382 -ZW5lcw== 22383 -KGluc3RhbmNl 22384 -NjI2 22385 -wqM= 22386 -OTE1 22387 -IHNsaWM= 22388 -X2hvbWU= 22389 -ICovfQo= 22390 -X3BhZ2Vz 22391 -KHNlcnZpY2U= 22392 -OTA1 22393 -UlA= 22394 -IEFtb25n 22395 -LmdldEN1cnJlbnQ= 22396 -ODA2 22397 -44K5 22398 -IHNsZWU= 22399 -PTw/ 22400 -X3Byb3A= 22401 -Zmx1c2g= 22402 -IE1N 22403 -QmVs 22404 -Tm90ZXM= 22405 -ICovCgoK 22406 -MDM1 22407 -IHJo 22408 -VGFibGVz 22409 -IEp1 22410 -IFwNCg== 22411 -bGljaGVu 22412 -IEluc3VyYW5jZQ== 22413 -XQoKCg== 22414 -IGNvb3Blcg== 22415 -4oCUdGhl 22416 -Lm1hdA== 22417 -NDg5 22418 -IGZvaQ== 22419 -KGF1dG8= 22420 -TWFyZ2lu 22421 -NjM2 22422 -IHJlc2lkZW5jZQ== 22423 -NTU5 22424 -IEhpc3Rvcg== 22425 -IH49 22426 -RGk= 22427 -ICcpCg== 22428 -IGV4Y2x1ZGU= 22429 -LkRyb3A= 22430 -JyI7Cg== 22431 -IGNvYw== 22432 -X3VwbG9hZA== 22433 -SGlkZQ== 22434 -IFVua25vd24= 22435 -IG5vcm1hbGl6ZQ== 22436 -X3JldA== 22437 -LicKCg== 22438 -Lm5vZGVz 22439 -ODcw 22440 -LkRhdGFTb3VyY2U= 22441 -YmxlbXM= 22442 -IGdlbnRsZQ== 22443 -OiQ= 22444 -JykpOwoK 22445 -LlJlc291cmNlcw== 22446 -4og= 22447 -IFRhaQ== 22448 -VkVE 22449 -IEd1bg== 22450 -bGVhbnM= 22451 -IERvYw== 22452 -LlZvaWQ= 22453 -IEFtZW5kbWVudA== 22454 -ODY2 22455 -ZXNzZWQ= 22456 -NzA2 22457 -IHJlY2lwaWVudA== 22458 -Lk5vZGU= 22459 -b3Zv 22460 -IGFsaWduSXRlbXM= 22461 -IFVuaXR5 22462 -IFJvbWU= 22463 -YnVybg== 22464 -IHZvbHRhZ2U= 22465 -IFNIQQ== 22466 -NTM0 22467 -NTcy 22468 -IEdPT0Q= 22469 -aGVscGVycw== 22470 -LyoqKi8= 22471 -IGVsaW1pbmF0ZQ== 22472 -d2Fw 22473 -X2FuZ2xl 22474 -IHJlZnVnZWVz 22475 -CWFzc2VydEVxdWFscw== 22476 -IHByb2Jl 22477 -KCcuLi8uLi8= 22478 -eW91cg== 22479 -IG1lcmNo 22480 -VUJMRQ== 22481 -CXJlc3BvbnNl 22482 -X0RFRg== 22483 -IGVudmlyb25tZW50cw== 22484 -b3VzaW5n 22485 -IHJlc3RyaWN0ZWQ= 22486 -IENPTlRSSUJVVE9SUw== 22487 -NjIx 22488 -IGNvbXBhbmlvbg== 22489 -4bqj 22490 -cG93 22491 -dXJ0bGU= 22492 -Ymll 22493 -LlBlcmZvcm0= 22494 -PW4= 22495 -cmVkaXM= 22496 -IGRpdmlkZQ== 22497 -IGNvbGxlY3RpdmU= 22498 -RGlmZg== 22499 -RHluYW1pYw== 22500 -aXNTZWxlY3RlZA== 22501 -YXN0eXBl 22502 -IExvdA== 22503 -IFN0YXRlbWVudA== 22504 -aWNpcGFudA== 22505 -YWto 22506 -NTE3 22507 -IHNlcmlhbGl6ZXI= 22508 -X0NGRw== 22509 -YXZhbA== 22510 -IHZpZXdlcnM= 22511 -IEZP 22512 -T2Nj 22513 -IHJvYnVzdA== 22514 -IE1pdA== 22515 -X0FORA== 22516 -VHJhbnNpdGlvbg== 22517 -dW5hdGU= 22518 -IHByaWRl 22519 -IGRyYW1hdGlj 22520 -IFBhZ2Vz 22521 -X3R1cGxl 22522 -IGNvcGllZA== 22523 -bW4= 22524 -IG91Z2h0 22525 -IGVxdWFsaXR5 22526 -X2hhcw== 22527 -X1dS 22528 -NTcz 22529 -ZW1p 22530 -IHN1cmdl 22531 -aWxsbw== 22532 -KCl9 22533 -MDgx 22534 -IHBlcmY= 22535 -OTIx 22536 -dWxr 22537 -IGludmVzdG1lbnRz 22538 -Nzg1 22539 -IGdlbmVyYXRpb25z 22540 -IHJlc29ydA== 22541 -IHRydXN0ZWQ= 22542 -X2ZyZXE= 22543 -IGZvcm1h 22544 -QVRJT05T 22545 -IEh1 22546 -IEdyYWQ= 22547 -X2NwdQ== 22548 -ICIsCg== 22549 -cmVzc2U= 22550 -KCoq 22551 -IGhlcmVieQ== 22552 -IGxha2U= 22553 -X1NUQUNL 22554 -IEJ1cmVhdQ== 22555 -IHN1c3RhaW5hYmxl 22556 -IFBF 22557 -IGRlaQ== 22558 -IEFuc3dlcg== 22559 -UGx1cw== 22560 -L3dlYg== 22561 -IHN0ZXI= 22562 -IG1vdW50ZWQ= 22563 -X2NsZWFy 22564 -Zm9ubw== 22565 -aWFuY2Vz 22566 -X2ZpbmQ= 22567 -IGNvbmZ1c2Vk 22568 -X2Jpbg== 22569 -REVDTA== 22570 -IGluc3RhbnRseQ== 22571 -VUlU 22572 -X0RP 22573 -U2V0dXA= 22574 -a2Vl 22575 -X3ByaW50Zg== 22576 -X3N0bXQ= 22577 -IFN0ZWFt 22578 -cHJvZg== 22579 -bHY= 22580 -IHNvbHZpbmc= 22581 -bGF0b3I= 22582 -b3R5cGVz 22583 -QW5kcm9pZA== 22584 -X2VzY2FwZQ== 22585 -TGVhdmU= 22586 -LmdldFRpbWU= 22587 -ODEx 22588 -aWZz 22589 -IGNvdg== 22590 -IENsYXNzaWM= 22591 -LWRhcms= 22592 -NTI2 22593 -RGlzcGF0Y2hlcg== 22594 -LWdyYXk= 22595 -IFBhbGVzdGluaWFu 22596 -LmRlZXA= 22597 -IEluamVjdA== 22598 -IHJlZmxlY3Rpb24= 22599 -NTM4 22600 -IGh5cG8= 22601 -Y29uc3RydWN0b3I= 22602 -LmFwcGxpY2F0aW9u 22603 -eXN0ZXI= 22604 -4pU= 22605 -c2Nob29s 22606 -IENvdw== 22607 -NTkz 22608 -IGZvb3RhZ2U= 22609 -LWlucw== 22610 -IC8qKjw= 22611 -YXRvbQ== 22612 -IHByb2ZpdHM= 22613 -OTIz 22614 -IGJvb2tpbmc= 22615 -X3RocmVzaG9sZA== 22616 -IExpdmVy 22617 -IGNpdGl6ZW4= 22618 -Yng= 22619 -IFN0b3Jt 22620 -IENvcnA= 22621 -IHdpZGVy 22622 -Iikpewo= 22623 -X0FDVElPTg== 22624 -aW9ycw== 22625 -YWlzZXM= 22626 -Om5vbmU= 22627 -IGNpdGVk 22628 -ImZtdA== 22629 -QXVn 22630 -Y29tYg== 22631 -IHdoaXRlcw== 22632 -IHNlc3M= 22633 -Xl4= 22634 -aWdodGg= 22635 -IHRhbmc= 22636 -X0NBUA== 22637 -NjE0 22638 -IGludGVyYWN0aW9ucw== 22639 -NDk3 22640 -IGdhcmQ= 22641 -NjQ2 22642 -IHByaXpl 22643 -NjQ3 22644 -YWZrYQ== 22645 -VHJp 22646 -XEVsb3F1ZW50 22647 -IER5bmFtaWM= 22648 -55CG 22649 -Z3A= 22650 -IHJlYWxt 22651 -IE5p 22652 -IEVkd2FyZA== 22653 -IGlkZW50aWZpY2F0aW9u 22654 -IHBoeXNpY2FsbHk= 22655 -5pys 22656 -IHBpY2tz 22657 -LWZyaWVuZGx5 22658 -PGk= 22659 -aWZpY2U= 22660 -X0FQ 22661 -TG9nZ2Vk 22662 -NTUz 22663 -fSIu 22664 -L3V0aWxz 22665 -IC4uLi4= 22666 -RU5USUFM 22667 -KEFjdGlvbg== 22668 -J10pOwoK 22669 -IHByb3Rlc3Rz 22670 -b2xpbmU= 22671 -X1JFVFVSTg== 22672 -IHBvcHVsYXRpb25z 22673 -IFJhaW4= 22674 -ZHVw 22675 -b3JpYWw= 22676 -IEF1dGhvcml0eQ== 22677 -X2V4cHI= 22678 -MDc1 22679 -LnVz 22680 -IGNvcnJ1cHQ= 22681 -CWltcG9ydA== 22682 -PGNoYXI= 22683 -IExFRlQ= 22684 -IGNhYmluZXQ= 22685 -IG5laWdoYm91cg== 22686 -IFNxbFBhcmFtZXRlcg== 22687 -YXR0ZXJlZA== 22688 -ZW1pYQ== 22689 -IHJldmlld2Vk 22690 -IEhlbGxv 22691 -YmxvY2tz 22692 -KHByb2Nlc3M= 22693 -OTk3 22694 -IG9ic2VydmF0aW9u 22695 -cmF0aW5n 22696 -Lmdsb2JhbA== 22697 -IHByZWZlcmVuY2U= 22698 -LnByZXBhcmU= 22699 -IGRvemVucw== 22700 -V29ya2Vy 22701 -IGNhbGN1bGF0aW9u 22702 -IFRvd2Vy 22703 -YWlyeQ== 22704 -IElTTw== 22705 -IGh1bWFuaXR5 22706 -LmFzSW5zdGFuY2VPZg== 22707 -NzEy 22708 -IGR5cw== 22709 -IHBpZXI= 22710 -aWd1ZQ== 22711 -IGFzc29jaWF0ZQ== 22712 -IGludGlt 22713 -bm90aWZ5 22714 -KHt9LA== 22715 -ODI4 22716 -IFJlcHJlc2VudA== 22717 -cGhldA== 22718 -c2V1ZG8= 22719 -64uI64uk 22720 -LlBvc2l0aW9u 22721 -IGNsb3N1cmU= 22722 -KGNsYXNz 22723 -CXRpbWU= 22724 -IE9yYW5nZQ== 22725 -X29wcw== 22726 -IHBvcHVw 22727 -IEltcHJv 22728 -X3NlY3JldA== 22729 -IEV1 22730 -LnNldExheW91dA== 22731 -dWxseQ== 22732 -IHNjcmV3 22733 -IFNpemVk 22734 -IENPTVA= 22735 -IG5vdGlmaWNhdGlvbnM= 22736 -VHJhbnNmZXI= 22737 -RW1pdHRlcg== 22738 -KG9sZA== 22739 -bGV0aWM= 22740 -NDkz 22741 -IC0KCg== 22742 -IHBhbmlj 22743 -NzE1 22744 -IExDRA== 22745 -cnVsZXM= 22746 -IGFmZmFpcnM= 22747 -IEZpbGw= 22748 -X0lSUQ== 22749 -OTEy 22750 -YXR0YWNobWVudA== 22751 -IHZvbQ== 22752 -PGJ1dHRvbg== 22753 -NTk1 22754 -IHRleHRz 22755 -IGFjdGl2YXRlZA== 22756 -LmFjY2Vzcw== 22757 -KHJlYWRlcg== 22758 -VGVt 22759 -IGNvcm9u 22760 -cm9waA== 22761 -RE1JTg== 22762 -IGVtZXJnZWQ= 22763 -IGluZmxhdGVy 22764 -IEluZGVwZW5kZW50 22765 -b3Jpb3Vz 22766 -IERlbGhp 22767 -Njcy 22768 -IGdseXBoaWNvbg== 22769 -IENhcmw= 22770 -U2k= 22771 -IGV4cGVyaW1lbnRhbA== 22772 -LmJhcg== 22773 -SUFO 22774 -IHNxbGl0ZQ== 22775 -Y2Npw7Nu 22776 -OTA0 22777 -X0JBQ0s= 22778 -LG5hbWU= 22779 -aG9ydA== 22780 -IHRlbnM= 22781 -NTQ5 22782 -6rM= 22783 -dXNpdmU= 22784 -IGdlbnVpbmU= 22785 -IGJ1Y2s= 22786 -L2Rpdg== 22787 -LnJvb20= 22788 -X05FVw== 22789 -ZXN0YWRv 22790 -IEFyaw== 22791 -b2NvbHM= 22792 -LmdlbmVyYXRl 22793 -dG91Y2g= 22794 -Zml4ZWQ= 22795 -ICco 22796 -IHJlZmVycmluZw== 22797 -IG92ZXJ3aGVsbWluZw== 22798 -KGxldA== 22799 -IGZ1ZQ== 22800 -NjIz 22801 -X0VOVg== 22802 -d29tYW4= 22803 -RmlndXJl 22804 -YW5pbWF0ZQ== 22805 -IE1vcnQ= 22806 -IGxvbmdlc3Q= 22807 -Y29sbg== 22808 -VE0= 22809 -Ol8= 22810 -cmllbA== 22811 -LE4= 22812 -IFJBTQ== 22813 -IGp1c3RpZnlDb250ZW50 22814 -IGFjdGl2ZWx5 22815 -L3B1YmxpYw== 22816 -IOuw 22817 -R2l2ZW4= 22818 -T1RBTA== 22819 -5aSx6LSl 22820 -U2VxdWVudGlhbA== 22821 -IHN1cHBsZW1lbnQ= 22822 -LmFi 22823 -IGNhdGVnb3I= 22824 -fX0sCg== 22825 -YWhhbg== 22826 -J3Vu 22827 -b3NpdHk= 22828 -IGFjY29tcGxpc2g= 22829 -VXRpbGl0aWVz 22830 -LnZpZXdz 22831 -LmNu 22832 -Y2VpbA== 22833 -IENCRA== 22834 -IFJG 22835 -UEVH 22836 -IEdpZnQ= 22837 -QVlT 22838 -IFdJTg== 22839 -cGFuaWVk 22840 -IMWf 22841 -IG9ic2VydmVy 22842 -IHNtZWxs 22843 -IHs6 22844 -TGlua2Vk 22845 -PlsK 22846 -b2xlcg== 22847 -IGxpYmVydA== 22848 -IGAK 22849 -IHdlbm4= 22850 -bGF0ZWQ= 22851 -IGltbXVuZQ== 22852 -KE5vZGU= 22853 -IFByb2JsZW0= 22854 -IEFicw== 22855 -bG9ncw== 22856 -IC4uLw== 22857 -IEFEQw== 22858 -IH19Ij4K 22859 -PicpOwo= 22860 -PWI= 22861 -IFdpbmQ= 22862 -bGFob21h 22863 -IGFsbG9jYXRl 22864 -b3JpYW4= 22865 -IHByZXNjcmlwdGlvbg== 22866 -LXF1YWxpdHk= 22867 -IE1heW9y 22868 -ODU1 22869 -aW5lbHk= 22870 -ZW5kZm9yZWFjaA== 22871 -IENvbXBsZXg= 22872 -a29t 22873 -NzA5 22874 -VFk= 22875 -Nzkw 22876 -XV0u 22877 -LlN0eWxl 22878 -X21hbnk= 22879 -JywnJA== 22880 -IGJhcnJpZXI= 22881 -IEZldGNo 22882 -IE1hcnZlbA== 22883 -IHJlc2lzdA== 22884 -0L7Qs9C+ 22885 -YmlkZGVu 22886 -IFJ1bm5hYmxl 22887 -OmZhbHNl 22888 -ODk5 22889 -IGJ1aWxkcw== 22890 -IFN0YWdl 22891 -IGR1Yg== 22892 -ZW1wbw== 22893 -LnNpdGU= 22894 -NTU4 22895 -OwoKCgo= 22896 -OTk0 22897 -IERlbnZlcg== 22898 -IHJldmVs 22899 -IHRyaWdnZXJlZA== 22900 -IGRpY2U= 22901 -X2ZhaWw= 22902 -IGdj 22903 -ODMz 22904 -NTg5 22905 -CVg= 22906 -IFRocm93YWJsZQ== 22907 -Nzc1 22908 -LnJvdXRlcg== 22909 -IFJldm9sdXRpb24= 22910 -0YDQsA== 22911 -X05PTg== 22912 -MDU1 22913 -n6U= 22914 -NTc4 22915 -IGVsZGVy 22916 -IGFicm9hZA== 22917 -INC1 22918 -IEFkdWx0 22919 -Ymxy 22920 -Z2x5cGhpY29u 22921 -NjEz 22922 -IHByb21vdGluZw== 22923 -IGl6 22924 -IFNvbGlk 22925 -NjQ1 22926 -X2xvYWRlcg== 22927 -ZWFybHk= 22928 -LmVuYWJsZWQ= 22929 -LWVkaXQ= 22930 -IFVM 22931 -X3BsYXk= 22932 -IEludGVycnVwdA== 22933 -IGFkdmFudGFnZXM= 22934 -dWNsZQ== 22935 -IG1lY2hhbmljYWw= 22936 -LnRhYmxlTGF5b3V0UGFuZWw= 22937 -IFdvcmtpbmc= 22938 -IGFub255bW91cw== 22939 -UmF0aW5n 22940 -aWdpb3Vz 22941 -X3Bob25l 22942 -LmFkZEFjdGlvbkxpc3RlbmVy 22943 -IGZyYW4= 22944 -dW5kZW4= 22945 -ICopJg== 22946 -X2Jvb2w= 22947 -dWxhdGl2ZQ== 22948 -IGNvbmU= 22949 -IE11bHQ= 22950 -IG3Dtg== 22951 -IEZvcndhcmQ= 22952 -XSk6Cg== 22953 -IGNvbnZpbmNlZA== 22954 -YWN0ZWQ= 22955 -NjQz 22956 -44GT 22957 -IENvbmZpZ3VyZQ== 22958 -IGNlaWxpbmc= 22959 -RGVy 22960 -IHBhc3NlbmdlcnM= 22961 -R3JvdXBz 22962 -IHNvY2Nlcg== 22963 -L1c= 22964 -YXZpb3Jz 22965 -c3dpdGg= 22966 -IFpvbmU= 22967 -Lk9wdGlvbnM= 22968 -IE1vbQ== 22969 -aWVkZXI= 22970 -QXJyYXlz 22971 -IHRyZWF0bWVudHM= 22972 -IHByb3RlY3Rpbmc= 22973 -ZmFj 22974 -IHBpY2tsZQ== 22975 -QnV0dG9uSXRlbQ== 22976 -NzEz 22977 -IGJsb2NraW5n 22978 -c3RyYXI= 22979 -w7I= 22980 -IEV4cG9ydA== 22981 -IHRocmV3 22982 -b3R0YQ== 22983 -IEJBU0U= 22984 -Lndz 22985 -LkxFQURJTkc= 22986 -b3JkZXJCeQ== 22987 -X2RlbGF5 22988 -IFB1 22989 -LmRsbA== 22990 -IENob29zZQ== 22991 -OTky 22992 -UG9saWNl 22993 -IEJFR0lO 22994 -Ym94ZXM= 22995 -IGRpYW1vbmQ= 22996 -LGw= 22997 -IAkJCQ== 22998 -IGN1cmlvdXM= 22999 -NjI0 23000 -dHY= 23001 -IGVyb3Rpc2NoZQ== 23002 -YWNrYWdlcw== 23003 -CVNldA== 23004 -VGljaw== 23005 -LmJvcmRlcg== 23006 -c3RhdGljbWV0aG9k 23007 -IGNoZXI= 23008 -aW52b2ljZQ== 23009 -IGNydQ== 23010 -IGRlZmVjdA== 23011 -X21ldGFkYXRh 23012 -cmVsYXRpb24= 23013 -aWthbg== 23014 -W04= 23015 -KFF0 23016 -KEJhc2U= 23017 -5oGv 23018 -YmVhdA== 23019 -IEVtcHR5 23020 -CW8= 23021 -X3NoaWZ0 23022 -IHJlZ3JldA== 23023 -NzIy 23024 -VGhvc2U= 23025 -Q2VudA== 23026 -IFBvcnR1Zw== 23027 -IElzbGFuZHM= 23028 -IFRJTUU= 23029 -TWFuYWdlbWVudA== 23030 -OTk2 23031 -LXNw 23032 -NTM5 23033 -w6ptZQ== 23034 -IG5vdGlvbg== 23035 -dW5pZnU= 23036 -UEs= 23037 -ODI2 23038 -6KGM 23039 -IENVUkxPUFQ= 23040 -XCJc 23041 -VVY= 23042 -57o= 23043 -ZHJh 23044 -Y291 23045 -PWA= 23046 -IERlc3Ryb3k= 23047 -cnA= 23048 -LmNhbmNlbA== 23049 -R0c= 23050 -cnVudGltZQ== 23051 -IFZ1ZQ== 23052 -IHByb2dyZXNzaXZl 23053 -L3NlcnZpY2Vz 23054 -IHJ1bm5lcg== 23055 -X0ZSQU1F 23056 -LlRvb2xTdHJpcE1lbnVJdGVt 23057 -ICcsJw== 23058 -ZGVsYXk= 23059 -PXV0Zg== 23060 -IHNjcmVlbmluZw== 23061 -IHB1bGxpbmc= 23062 -b21hcw== 23063 -IGFudGg= 23064 -LW5ldw== 23065 -L2xvY2Fs 23066 -IGlQYWQ= 23067 -IHR3aXR0ZXI= 23068 -IGR5aW5n 23069 -IGhlYXZlbg== 23070 -IFVJbnQ= 23071 -IFNlbmF0b3I= 23072 -IHByZXN1bQ== 23073 -IFdhbGtlcg== 23074 -IG92ZXJjb21l 23075 -ZXRlY3Rpb24= 23076 -IGVtYmFycmFzcw== 23077 -Q2hpbmE= 23078 -NjM5 23079 -SW5jbHVkZQ== 23080 -Uk9MTA== 23081 -IGRhdGFUeXBl 23082 -RGF2aWQ= 23083 -4Lij 23084 -bG9w 23085 -LW1vbnRo 23086 -IHNjYXI= 23087 -IFNhZmU= 23088 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 23089 -IGFjY2Vzc29yaWVz 23090 -IHJhbXA= 23091 -X1VTRQ== 23092 -IGNvbnRyYWQ= 23093 -KSldCg== 23094 -IHByZXN0 23095 -IEhS 23096 -IFJhcA== 23097 -IHVzaXpl 23098 -IGNhcGFiaWxpdHk= 23099 -IGNvcnQ= 23100 -LW5leHQ= 23101 -MDc3 23102 -NjI3 23103 -IGJ1cmRlbg== 23104 -ODIy 23105 -X3JlYWRlcg== 23106 -IEBA 23107 -cmVndWxhcg== 23108 -IEth 23109 -MDM2 23110 -TUFO 23111 -IGFzdHI= 23112 -ICcnKQo= 23113 -IGZlZA== 23114 -IHBhcnNpbmc= 23115 -IFllYXJz 23116 -IGJyb2tlcg== 23117 -Ijp7Ig== 23118 -IGFrdA== 23119 -SW52ZW50b3J5 23120 -YWJlbGVk 23121 -IGFyZ3BhcnNl 23122 -KioqKioqKgo= 23123 -dmVyc2F0aW9u 23124 -IGNvcmQ= 23125 -IFRp 23126 -IGhvcGVmdWxseQ== 23127 -IGFo 23128 -dmVyYg== 23129 -IHN0b2xlbg== 23130 -LkVudHJ5 23131 -IGV4cGVjdGluZw== 23132 -T3JpZW50YXRpb24= 23133 -IHBvd2VyZWQ= 23134 -IHBlcnNpc3Q= 23135 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 23136 -J10pOw== 23137 -JykpLAo= 23138 -IENhc2g= 23139 -CWl0ZW0= 23140 -ODE4 23141 -Z3JhZGVz 23142 -cm9wb2w= 23143 -YmFzaWM= 23144 -ICIpOw0K 23145 -IGF3YXJkcw== 23146 -KHJhbmdl 23147 -LWFsbA== 23148 -IElCT3V0bGV0 23149 -IEluZGVlZA== 23150 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 23151 -IHN0b21hY2g= 23152 -IGZsb3dlcg== 23153 -IHNldw== 23154 -X3RpbWVz 23155 -YXZpcw== 23156 -UVN0cmluZw== 23157 -IFJvdXRlcw== 23158 -X3Byb3Q= 23159 -IGNvbWVkeQ== 23160 -IGxvZ291dA== 23161 -IHdvb2Rlbg== 23162 -IHBvc3Rlcg== 23163 -cGllY2U= 23164 -LkpvaW4= 23165 -IFBvaw== 23166 -Y2Vsb25h 23167 -bXV0ZXg= 23168 -Ow0KDQoNCg== 23169 -IHN0cmlrZXM= 23170 -Nzg3 23171 -TG9hZGVk 23172 -KWFyZw== 23173 -ZXNh 23174 -VW5pdGVk 23175 -RXA= 23176 -UEVMTA== 23177 -ODA3 23178 -IEF0bGFudGlj 23179 -dWxsZXQ= 23180 -NjUy 23181 -YXBwbGU= 23182 -IHNldHRsZWQ= 23183 -YWNvbg== 23184 -IHByaW50ZXI= 23185 -IEdD 23186 -5a6a 23187 -IHJlbmRlcmVk 23188 -LOKAmQ== 23189 -aGVpdA== 23190 -c29jaWFs 23191 -Lmdl 23192 -NzE0 23193 -IFJpY2s= 23194 -IFV0YWg= 23195 -Z290 23196 -b25pY2Fs 23197 -IFNjcm9sbA== 23198 -IFNjaWVuY2Vz 23199 -IGp1Zw== 23200 -IGFtcGw= 23201 -ZW50aQ== 23202 -TEVGVA== 23203 -IHRhYnM= 23204 -IGVub3Jtb3Vz 23205 -LmdldEtleQ== 23206 -bG9jYXRl 23207 -LkVY 23208 -LnN0b3JhZ2U= 23209 -Lldl 23210 -IHRvYXN0 23211 -IEFkZGl0aW9uYWxseQ== 23212 -ODgy 23213 -IE5PVw== 23214 -NTQ3 23215 -X1VQREFURQ== 23216 -IHRyYW5zZmVycmVk 23217 -dGhh 23218 -LkRpc3BsYXk= 23219 -X3Vp 23220 -SURFTw== 23221 -IG1lYW5pbmdmdWw= 23222 -IE1vc2Nvdw== 23223 -LHRoaXM= 23224 -IFZpY3Rvcmlh 23225 -5pS5 23226 -INCf 23227 -LnN0YWNr 23228 -IEJhcm4= 23229 -cGFyZWRTdGF0ZW1lbnQ= 23230 -OnN0cmluZw== 23231 -IGJpag== 23232 -IFNUQVRF 23233 -IGVtcGxveWVycw== 23234 -CWlucHV0 23235 -KHw= 23236 -IGxleA== 23237 -aW52b2tl 23238 -CW51bQ== 23239 -Kyss 23240 -YXRpYWw= 23241 -b3JzZXM= 23242 -IGZvcms= 23243 -X3R4dA== 23244 -IEFudG9uaW8= 23245 -ICg8 23246 -YXZlcnNl 23247 -IGRldmFzdA== 23248 -44CA 23249 -LkRlYw== 23250 -IEdhcmQ= 23251 -L3Vp 23252 -LiU= 23253 -dHJp 23254 -IHJvbGxlZA== 23255 -VmFsdWVQYWly 23256 -aXR0ZW4= 23257 -IFRoZXI= 23258 -IHZyb3U= 23259 -IEZsb3c= 23260 -IEZpbmFuY2U= 23261 -IENvbWI= 23262 -SEM= 23263 -LnNldFZpc2libGU= 23264 -aXNs 23265 -IHBr 23266 -Nzcz 23267 -IHVwc2V0 23268 -KHJhdw== 23269 -IFZpY2U= 23270 -ZWF0dXJlcw== 23271 -IExhbmc= 23272 -MDI5 23273 -TG9va2luZw== 23274 -NzY3 23275 -IEFTVA== 23276 -IHRyaXBz 23277 -IEp1c3Rpbg== 23278 -YnJvd3Nlcg== 23279 -PSInLiQ= 23280 -LnZlcnRpY2Vz 23281 -ODIx 23282 -LWNv 23283 -fS97 23284 -ID8s 23285 -IERvbWlu 23286 -IEJlbGc= 23287 -Ijw= 23288 -IHN1cHBvc2U= 23289 -YWRkeQ== 23290 -IHdhbGtz 23291 -Njg4 23292 -RVJSVQ== 23293 -X2ZpbHRlcnM= 23294 -UHJlZmVycmVk 23295 -c2NlbmU= 23296 -0LXRgQ== 23297 -IEFmZmFpcnM= 23298 -ICIjew== 23299 -IG9uU3VibWl0 23300 -IHN0b2Nrcw== 23301 -L3ZpZXc= 23302 -Z3JlZQ== 23303 -LWdldA== 23304 -OTAz 23305 -aGl0 23306 -Sm8= 23307 -LmdldEM= 23308 -NzI1 23309 -SW5pdGlhbGl6ZWQ= 23310 -0YLQuA== 23311 -Y3V0cw== 23312 -KFR5cGU= 23313 -IEFncmVlbWVudA== 23314 -IFZpZXRuYW0= 23315 -IC8qIQ== 23316 -IHBpenph 23317 -LXZpZXc= 23318 -X2Vt 23319 -IGxocw== 23320 -IG11eQ== 23321 -IElkZW50 23322 -IEZyaWVuZHM= 23323 -MDYx 23324 -IGFidW5k 23325 -X0FE 23326 -LnRpbWVzdGFtcA== 23327 -LSc= 23328 -IGR1cGxpY2F0ZQ== 23329 -IGh1bnRpbmc= 23330 -IHJlZ3VsYXRvcnk= 23331 -aWFv 23332 -YW1vdXM= 23333 -IEVudGVydGFpbm1lbnQ= 23334 -W0E= 23335 -aWF0cmlj 23336 -X0NMSUVOVA== 23337 -IEtpZHM= 23338 -L3BrZw== 23339 -QnJlYWs= 23340 -KSkpOwoK 23341 -IFNoYXBl 23342 -IHJlbGF0aW5n 23343 -SW50ZXJydXB0 23344 -YWJsZU9wYWNpdHk= 23345 -ZW1icmU= 23346 -IG15c3Rlcnk= 23347 -IGpvdXJuYWxpc3Rz 23348 -cml0YWJsZQ== 23349 -Lkxpbms= 23350 -IHN0b3BwaW5n 23351 -Q1JFVA== 23352 -LkRC 23353 -IHBvcHVsYXJpdHk= 23354 -IGdldw== 23355 -IGltcHI= 23356 -c2V0VmFsdWU= 23357 -RkxBRw== 23358 -CW1heA== 23359 -IGJha2U= 23360 -d3k= 23361 -IEVjb25vbWlj 23362 -IGVuY29udHI= 23363 -IGZuYW1l 23364 -L2Rl 23365 -UmFuaw== 23366 -IGJ1Z3M= 23367 -LnNt 23368 -IG1lZGlhbg== 23369 -RE9XTg== 23370 -IFN1cmU= 23371 -QXRJbmRleA== 23372 -IERpY2s= 23373 -IChfXw== 23374 -LmRlbHRh 23375 -RnI= 23376 -IHN1Z2dlc3Rpbmc= 23377 -IFJlY3ljbGVyVmlldw== 23378 -LGU= 23379 -U1RBUlQ= 23380 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 23381 -eGZvcmQ= 23382 -IHJlY2VpcHQ= 23383 -Q0xBSU0= 23384 -cmVhZG9ubHk= 23385 -OTY4 23386 -IGVuZ2FnaW5n 23387 -NjE5 23388 -Q2E= 23389 -YXNtYQ== 23390 -IGVuc3VyaW5n 23391 -RW5nbGlzaA== 23392 -IFZhbmNvdXZlcg== 23393 -aHl0aA== 23394 -IHB1cmNoYXNpbmc= 23395 -IFBJ 23396 -LndvcmQ= 23397 -KHNw 23398 -LmhvbWU= 23399 -OmRlZg== 23400 -IGdpZw== 23401 -NTc0 23402 -Njcx 23403 -IFZl 23404 -Zm9ydW0= 23405 -IE1pdGNo 23406 -QmF5 23407 -X0ZM 23408 -NjUx 23409 -IHNvbGw= 23410 -NTc3 23411 -X2NvbHVtbnM= 23412 -IG1pbm9yaXR5 23413 -YmlyZA== 23414 -IGhhbmRlZA== 23415 -U1NM 23416 -U1RBVA== 23417 -IG5lcnZvdXM= 23418 -g70= 23419 -IGZpbGVQYXRo 23420 -Q1JFQVRF 23421 -QXc= 23422 -IHBlbnM= 23423 -ODM1 23424 -c2VlZA== 23425 -IENvbXB1dGU= 23426 -b2xr 23427 -NTk0 23428 -IEFzc2V0 23429 -cmVhY2g= 23430 -JyksDQo= 23431 -bmF2aWdhdGlvbg== 23432 -TEY= 23433 -L3V0aWw= 23434 -IFB1Yg== 23435 -IOKU 23436 -Y2lvbg== 23437 -IyMK 23438 -MDcy 23439 -SUlJ 23440 -VGFnTmFtZQ== 23441 -IGFtaWQ= 23442 -cGVybWlzc2lvbg== 23443 -aWZpYWJsZQ== 23444 -eEZGRkZGRkZG 23445 -0L3QuA== 23446 -LkJ1ZmZlcg== 23447 -X2lycQ== 23448 -ZGFyaw== 23449 -IHJldHZhbA== 23450 -LmZpcmU= 23451 -cHJvZHVjdGlvbg== 23452 -Lmxpc3Rlbg== 23453 -IFdlYXRoZXI= 23454 -IGJ1eWVycw== 23455 -Lm5l 23456 -ZXJw 23457 -IFBlbnQ= 23458 -Njk5 23459 -IHdlbGZhcmU= 23460 -IHBhZ2VTaXpl 23461 -IFN0YWRpdW0= 23462 -ZXJ0YQ== 23463 -IGxldg== 23464 -YW1wYQ== 23465 -UGFnZXI= 23466 -NjY1 23467 -IGNoYXJnaW5n 23468 -IE5ldGZsaXg= 23469 -fG51bGw= 23470 -X3JhbmRvbQ== 23471 -LnhwYXRo 23472 -IHN0ZXJl 23473 -IElTSVM= 23474 -cG9uc2Vz 23475 -KGxvYw== 23476 -NTY2 23477 -ZXlvbmQ= 23478 -IE9mZmljaWFs 23479 -NjU3 23480 -IE1hcnlsYW5k 23481 -RGF0YVR5cGU= 23482 -X3Bhcg== 23483 -e30s 23484 -IEVuam95 23485 -NzI3 23486 -X1NISUZU 23487 -IEF3YXJkcw== 23488 -X0VOVFJZ 23489 -IHNlZW1pbmdseQ== 23490 -ZW50aWNhdGU= 23491 -IGhlYXJ0cw== 23492 -NTgz 23493 -XzsKCg== 23494 -IEhJVg== 23495 -IGluZGl2aWQ= 23496 -IEZsYWc= 23497 -X2N0cmw= 23498 -IENhbGxiYWNr 23499 -LHo= 23500 -IEdQVQ== 23501 -CW9iag== 23502 -IFBob2VuaXg= 23503 -IEJVUw== 23504 -OTA3 23505 -IHJ1YmJlcg== 23506 -X0FVVEg= 23507 -IFNvbHV0aW9ucw== 23508 -KGxvY2F0aW9u 23509 -VmFyaWFibGVz 23510 -LnNldEVuYWJsZWQ= 23511 -X2hpZ2g= 23512 -V08= 23513 -R2VzdHVyZQ== 23514 -IHJldHJ5 23515 -IG9iamVjdEZvcktleQ== 23516 -YWxsb3dlZW4= 23517 -IG1vcw== 23518 -IENlbGU= 23519 -IGlra2U= 23520 -KGNlbGw= 23521 -IE1PREU= 23522 -cmVuYQ== 23523 -IGRlc2NyaWJpbmc= 23524 -NjQx 23525 -IHBoaQ== 23526 -IHJk 23527 -IGRlc2VydmU= 23528 -IHdoZWVscw== 23529 -5biC 23530 -IGNyaXRpY3M= 23531 -NzU1 23532 -TmFtZXNwYWNl 23533 -IEZyYQ== 23534 -IAoKCgo= 23535 -IGFsbGE= 23536 -IHJlcXVpcmluZw== 23537 -5pyf 23538 -dXRhdGlvbg== 23539 -IGRlbGF5ZWQ= 23540 -IGFkbWluaXN0cmF0aXZl 23541 -IGJheQ== 23542 -LmhpZGRlbg== 23543 -VGV4 23544 -MDUx 23545 -IGJvdW5kYXJpZXM= 23546 -IF0pOwoK 23547 -IEZvbGxvd2luZw== 23548 -fi8= 23549 -Rmk= 23550 -X2NvbnY= 23551 -X1RJVExF 23552 -IGRlc2Rl 23553 -SUNvbGxlY3Rpb25WaWV3 23554 -QWxpYXM= 23555 -IGJpdGU= 23556 -cGF0aWVudA== 23557 -X0NPTU1BTkQ= 23558 -Q29tcGxldGVk 23559 -CWVsaWY= 23560 -KDw= 23561 -QnVzaW5lc3M= 23562 -IFBvb2w= 23563 -IHB1cnN1ZQ== 23564 -IEJhbg== 23565 -X3N0ZXBz 23566 -X0RFQ0w= 23567 -dW1ibGU= 23568 -IGNvbWJv 23569 -IExheWVy 23570 -Lnhy 23571 -IGR1cA== 23572 -LS0tLS0tLS0t 23573 -NjI4 23574 -IG1vZGlmaWVy 23575 -cm9i 23576 -cmV6 23577 -Njk2 23578 -IGF0aGxldGVz 23579 -VXNlZA== 23580 -d2Vhcg== 23581 -ODE1 23582 -IGxlZ2l0aW1hdGU= 23583 -ICIKCg== 23584 -IGh2 23585 -U3Rk 23586 -MDM3 23587 -IEhvbGQ= 23588 -IHN1cnZpdg== 23589 -IEFsbGlhbmNl 23590 -IEVhcmx5 23591 -Nzc4 23592 -QmVoYXZpb3I= 23593 -KGZvbnQ= 23594 -L2xpYnM= 23595 -IHJlY3RhbmdsZQ== 23596 -IHNpbmdlcg== 23597 -IGFtcA== 23598 -RXF1YWxUbw== 23599 -ICIuIg== 23600 -IGdpcmxmcmllbmQ= 23601 -5bE= 23602 -bGluZWFy 23603 -b2JzZXJ2 23604 -IHBpw7k= 23605 -IGNvbXBsZW1lbnQ= 23606 -V2l0aFZhbHVl 23607 -KHBhc3N3b3Jk 23608 -dGFrZQ== 23609 -Qmxhbms= 23610 -IENvbXBhcg== 23611 -JyIs 23612 -X3BvbGljeQ== 23613 -bW9uZ29vc2U= 23614 -X0ZBSUxFRA== 23615 -LnJlcG9ydA== 23616 -UmF0aW8= 23617 -LlBlcmZvcm1MYXlvdXQ= 23618 -NzQ3 23619 -dXNhYmxl 23620 -bWVycw== 23621 -X3JlbmRlcg== 23622 -UEVFRA== 23623 -Nzcy 23624 -IGxlc2I= 23625 -CUU= 23626 -X3Rvb2w= 23627 -IGxhZGllcw== 23628 -OTA4 23629 -0L7RgQ== 23630 -KSkpKQo= 23631 -Ozs7Ow== 23632 -LmRvdA== 23633 -IG5lc3Q= 23634 -cGVhaw== 23635 -dWtraXQ= 23636 -ZWNh 23637 -X1NX 23638 -ICYo 23639 -IE9rbGFob21h 23640 -IGJhbmtpbmc= 23641 -NTY5 23642 -IE5pbnRlbmRv 23643 -NzUy 23644 -IHJlcHJvZHVjZQ== 23645 -X2VsZW1lbnRz 23646 -X21hYw== 23647 -cHJveHk= 23648 -IHJlbWFya2FibGU= 23649 -fS8kew== 23650 -IG91dHM= 23651 -Lmhhc05leHQ= 23652 -TU9ERQ== 23653 -NjU4 23654 -IGFuaW1l 23655 -LmNvbm4= 23656 -VW5pcXVl 23657 -RG9t 23658 -IGltcG9ydGFudGx5 23659 -aXR0eQ== 23660 -IGp1aWNl 23661 -VHc= 23662 -IFBhcnRuZXJz 23663 -IGF0dGFja2luZw== 23664 -IHBvcnRhYmxl 23665 -YW1pZW50bw== 23666 -LlBpY3R1cmVCb3g= 23667 -Lmdlbg== 23668 -IG9wdGltYWw= 23669 -NTgy 23670 -IHJlY3Jl 23671 -IGpvdXJuYWxpc3Q= 23672 -IEV4dHJhY3Q= 23673 -IE1vcmVvdmVy 23674 -IG1hcmdpblRvcA== 23675 -LkFw 23676 -IGZpcmluZw== 23677 -TmFO 23678 -CXRlbXBsYXRl 23679 -0LDQtA== 23680 -LkVu 23681 -IGRlZmVuY2U= 23682 -IFRlbA== 23683 -aWxlbg== 23684 -amFu 23685 -PWRhdGE= 23686 -IFVybA== 23687 -IFJldXRlcnM= 23688 -KHRvdGFs 23689 -IEZpZnRo 23690 -IGVzc2F5cw== 23691 -IGludGVycHJldGF0aW9u 23692 -IGNoYXJpdHk= 23693 -IFJ1bGVz 23694 -IHN1YnNlY3Rpb24= 23695 -c3R5bGVk 23696 -YXplcg== 23697 -bGFncw== 23698 -TElTVA== 23699 -IHVwbG9hZGVk 23700 -IHRyYXNo 23701 -IHJlZ2lzdHI= 23702 -IHNlbGxlcg== 23703 -Pic7DQo= 23704 -IHN0YXJ0VGltZQ== 23705 -55k= 23706 -c3k= 23707 -KEh0dHBTZXJ2bGV0UmVxdWVzdA== 23708 -IHRyYXA= 23709 -R0M= 23710 -IGVtYmVkZGVk 23711 -IHN1cnJvdW5kZWQ= 23712 -ODE2 23713 -aW1pdHM= 23714 -VFg= 23715 -eWxpbmRlcg== 23716 -Njg1 23717 -IEZhbA== 23718 -IHNlbnRlbmNlcw== 23719 -IEph 23720 -SUZJQ0FUSU9O 23721 -d2VhcG9u 23722 -b3ZhdGlvbg== 23723 -IGNvYXQ= 23724 -IGludGVycG9s 23725 -IGxpcHM= 23726 -IEt5 23727 -IHZlY3RvcnM= 23728 -X2Ft 23729 -IGludGFrZQ== 23730 -Lndvcmxk 23731 -IGluYm94 23732 -IE1BQw== 23733 -X2Fi 23734 -KG5hbWVvZg== 23735 -NjMz 23736 -IGVudGVydA== 23737 -IGdhdGhlcmluZw== 23738 -IFNJTQ== 23739 -Kysu 23740 -bnlh 23741 -J319 23742 -IFVQREFURQ== 23743 -IHBhYw== 23744 -KGh0bWw= 23745 -IFNhbnQ= 23746 -aWF0aW5n 23747 -IElkZWFz 23748 -IHNwcmF5 23749 -IEhhcnQ= 23750 -IHZlcmlmaWNhdGlvbg== 23751 -YWRlc2g= 23752 -L21vZHVsZXM= 23753 -IE1pbmQ= 23754 -IFNpemVkQm94 23755 -IHNoZWx0ZXI= 23756 -IGhlcm9lcw== 23757 -YXR0eQ== 23758 -IGNlcnRpZmllZA== 23759 -c2o= 23760 -IMOqdHJl 23761 -xYJv 23762 -IHB1Ymxpc2hpbmc= 23763 -IE1hbGF5cw== 23764 -LmdldFVzZXI= 23765 -IFByb3ZpZGVy 23766 -IExpbmtlZExpc3Q= 23767 -IEJvcg== 23768 -Uk9VTkQ= 23769 -ZGlk 23770 -dGFpbg== 23771 -cGlyZQ== 23772 -IEplbm4= 23773 -dGVs 23774 -YW5kZQ== 23775 -NzU3 23776 -X2Zyb250 23777 -IE1jRw== 23778 -VGVzdE1ldGhvZA== 23779 -4Lit 23780 -IG9jY2FzaW9uYWxseQ== 23781 -IFdhbGVz 23782 -IGV4ZXJjaXNlcw== 23783 -INCS 23784 -MDQ1 23785 -LXBsdXM= 23786 -IHZhbGlkYXRvcg== 23787 -IHByYXllcg== 23788 -TEFURUQ= 23789 -X2F1dGhvcg== 23790 -IGxhYm91cg== 23791 -KysK 23792 -LWVxdWl2 23793 -IEdQTA== 23794 -IGZhY2Vib29r 23795 -c2ltcGxl 23796 -Z2x5 23797 -UHJvY2Vzc29y 23798 -aXB5 23799 -NzQ0 23800 -ICo+ 23801 -NjQ4 23802 -IGNsZWFyZWQ= 23803 -IFB1c2g= 23804 -ODU4 23805 -IHBlbmlz 23806 -U3RydWN0dXJl 23807 -bGlq 23808 -IE1vcmdhbg== 23809 -IGhhbmRmdWw= 23810 -Ii4K 23811 -OTg0 23812 -fFw= 23813 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 23814 -IEFxdQ== 23815 -NTg0 23816 -X0lD 23817 -LmxvYWRz 23818 -IG1ldGVy 23819 -IE1hcmluZQ== 23820 -Ojp7 23821 -IFRT 23822 -Nzc2 23823 -IEFycmF5cw== 23824 -LlRpdGxl 23825 -R1JBTQ== 23826 -dGVybWlu 23827 -IGNvaW5j 23828 -RWxzZQ== 23829 -X3N0YXRlcw== 23830 -LXJ1bg== 23831 -bWVtYmVycw== 23832 -Nzgy 23833 -YXN0cm8= 23834 -MDY2 23835 -IG9uUHJlc3M= 23836 -IGJlaW5ncw== 23837 -IGFiYW5kb25lZA== 23838 -IHRheHA= 23839 -b3duZXJz 23840 -Lm1vZGU= 23841 -IGRpYWdub3Npcw== 23842 -IF8K 23843 -IEtuaWdodA== 23844 -CUE= 23845 -IG9ic2VydmU= 23846 -KSwn 23847 -ODIz 23848 -ISIpCg== 23849 -IFBhcmE= 23850 -IHZhcmlhdGlvbg== 23851 -KEZhbHNl 23852 -IEFudGk= 23853 -IGdyaQ== 23854 -IGhvbWVsZXNz 23855 -P3Y= 23856 -IGJleg== 23857 -LlNlcnZlcg== 23858 -cmVsZWFzZQ== 23859 -IFBhdHJp 23860 -IGNoYXJz 23861 -IHJhbmtpbmc= 23862 -YWN0aXZhdGlvbg== 23863 -NTgx 23864 -IHdpZGVz 23865 -cXI= 23866 -LlNxbA== 23867 -YWN1bGFy 23868 -IEJvdA== 23869 -X3N5bmM= 23870 -IGhhcHBpbmVzcw== 23871 -IHZvbHVudGVlcnM= 23872 -ODc3 23873 -IHNpdHM= 23874 -Lzw= 23875 -W2U= 23876 -KGZpbGVOYW1l 23877 -IGNhcGFj 23878 -ODMy 23879 -IE1hcmlh 23880 -ZmF0aGVy 23881 -IGdyYW0= 23882 -Kmk= 23883 -IGNhc28= 23884 -X2RyYXc= 23885 -IFJhdw== 23886 -IEl0ZXJhdG9y 23887 -NjY0 23888 -IFBhZGRpbmc= 23889 -OTI0 23890 -UEQ= 23891 -Qk9Y 23892 -IFNQRUNJQUw= 23893 -IGZlY2hh 23894 -IHZpZGU= 23895 -IExlYWRlcg== 23896 -5Lul 23897 -JCgiLg== 23898 -IGRpYW1ldGVy 23899 -IG1pbGQ= 23900 -NzQ1 23901 -IHJvY2tz 23902 -YXBwaW5ncw== 23903 -MDQ4 23904 -ZGlyZWN0b3J5 23905 -NTU3 23906 -LmZsdXNo 23907 -IEplc3M= 23908 -VU5JVA== 23909 -IFBlYXI= 23910 -IG1hbmRhdG9yeQ== 23911 -U3Vy 23912 -cXQ= 23913 -IHN0cmVhbXM= 23914 -IGNvb3BlcmF0aW9u 23915 -IFNhYw== 23916 -IGNoZWFwZXI= 23917 -CWNo 23918 -YW5pbWF0aW9u 23919 -ZmFyZQ== 23920 -KGhlaWdodA== 23921 -KFRydWU= 23922 -Tlk= 23923 -IHdyZXN0 23924 -IHBvbGxz 23925 -IGVuY291bnRlcmVk 23926 -IE1hcmtldGFibGU= 23927 -X1BBU1NXT1JE 23928 -NzE2 23929 -X1NFTEVDVA== 23930 -IEFyYWJpYQ== 23931 -X2Nsb2Nr 23932 -IHZveQ== 23933 -INC40Lc= 23934 -IHN0aXI= 23935 -aXNpYmxl 23936 -LWVmZmVjdA== 23937 -LmNyZWF0ZWQ= 23938 -IHRveXM= 23939 -IFRyYWRhYmxl 23940 -IHJ1c3Q= 23941 -IHN0cmNweQ== 23942 -X3RpbWVzdGFtcA== 23943 -IHRhbGVudGVk 23944 -LG51bGw= 23945 -IEpvYnM= 23946 -IFBvcnRsYW5k 23947 -IHdlYWtuZXNz 23948 -VGhyb3c= 23949 -IEFuZ2Vs 23950 -5L+u 23951 -NzU0 23952 -IHVuY2VydA== 23953 -77yJCg== 23954 -IOydtA== 23955 -V2hpY2g= 23956 -IFstXTo= 23957 -U29tZXRoaW5n 23958 -IGNvbnZpY3RlZA== 23959 -a2xl 23960 -ZWRpdW0= 23961 -IGJyYW5jaGVz 23962 -IGJhc2Vz 23963 -564= 23964 -IGNvbXBsZXhpdHk= 23965 -IEZpZw== 23966 -LnJlc2hhcGU= 23967 -JGRi 23968 -NzM2 23969 -X0NPTlNU 23970 -IFRlcw== 23971 -LnJ1bnRpbWU= 23972 -IGRlbnk= 23973 -IEJTRA== 23974 -IGty 23975 -aGF0dA== 23976 -IFN0YXRpYw== 23977 -IHVuaXZlcnNpdGllcw== 23978 -UmVwbGFjZQ== 23979 -IGRyb3Zl 23980 -IGFkb2xlcw== 23981 -X3BsdWdpbg== 23982 -IExHQlQ= 23983 -IHRleA== 23984 -ZHVjdGlvbg== 23985 -NzUx 23986 -Nzk5 23987 -RURJ 23988 -IFRlZA== 23989 -X1VSSQ== 23990 -IHJlY2VwdGlvbg== 23991 -YXJ0ZW4= 23992 -LlNpbmdsZQ== 23993 -cmljZQ== 23994 -c2Npb3Vz 23995 -ODQz 23996 -X2Jn 23997 -IHdhZ2Vz 23998 -IFNlcnZsZXQ= 23999 -VUlMYXlvdXQ= 24000 -IGZvcm1hdHRlZA== 24001 -Lk1vZA== 24002 -PGNsYXNz 24003 -aXNlbg== 24004 -IHJlcHJlc2VudGF0aXZlcw== 24005 -Il09 24006 -IHBvcnRhbA== 24007 -IEh1bnRlcg== 24008 -IGhpcmluZw== 24009 -X18pCg== 24010 -cmljdWx1bQ== 24011 -dW8= 24012 -bGllc3Q= 24013 -IHRlYXJz 24014 -TGF0 24015 -IGxpdGVyYWw= 24016 -Lkluc2VydA== 24017 -IGN1cnM= 24018 -IENvbXB1dA== 24019 -IHRlcnJvcmlzbQ== 24020 -IHN3ZWVw 24021 -IFtdDQo= 24022 -IHBhc3Nlbmdlcg== 24023 -IGVhc3Rlcm4= 24024 -IHR3ZWV0cw== 24025 -IG9wZXJhdGVk 24026 -d25k 24027 -IFN5bg== 24028 -LnRvb2xz 24029 -IFdN 24030 -dWxhdGVz 24031 -IGJhY3Rlcmlh 24032 -KGJ5dGVz 24033 -LnNldERhdGE= 24034 -IHZpc2liaWxpdHk= 24035 -Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 24036 -ZWxt 24037 -IGdlbmVyYXRpbmc= 24038 -IG12 24039 -IGto 24040 -amVu 24041 -L3NlYXJjaA== 24042 -IGFjY291bnRpbmc= 24043 -c2VnbWVudA== 24044 -YWN0aWM= 24045 -Lmlw 24046 -IGRlcGxveW1lbnQ= 24047 -IGZvb3Rlcg== 24048 -PicsCg== 24049 -IGV4cGFuZGluZw== 24050 -IEhhbWlsdG9u 24051 -IENvbnRyaWI= 24052 -LlRhYmxlcw== 24053 -NzI4 24054 -QWN0aXY= 24055 -SEg= 24056 -b2NvbW1lcmNl 24057 -Xzs= 24058 -IGFtb25nc3Q= 24059 -b3dpbmc= 24060 -ODU5 24061 -IENvbGQ= 24062 -QVBI 24063 -IHBzeWNob2xvZ2ljYWw= 24064 -X3RlbnNvcg== 24065 -IHBhY2thZ2luZw== 24066 -IFN3ZWRlbg== 24067 -IHBhcmU= 24068 -IGFnZ3JlZ2F0ZQ== 24069 -IG1vZGVyYXRl 24070 -ODYy 24071 -X2hhbmQ= 24072 -IGRlc2lnbmF0ZWQ= 24073 -IGRydW0= 24074 -IGdldFVzZXI= 24075 -IENyZWVr 24076 -X3Njb3Bl 24077 -IFRyYW5zZmVy 24078 -IE1hcmc= 24079 -IGZpZ2h0ZXJz 24080 -V25k 24081 -IFNlbA== 24082 -IExhdW5jaA== 24083 -IGVtZXJnaW5n 24084 -aWZyYW1l 24085 -IEFkZGl0aW9uYWw= 24086 -IGZlYXJz 24087 -IHNhdGVsbGl0ZQ== 24088 -Xzo= 24089 -IGRpc3Bvc2luZw== 24090 -R2V0VmFsdWU= 24091 -SHR0cFBvc3Q= 24092 -QVRJVkU= 24093 -dWxhcnk= 24094 -Vmlld3M= 24095 -IGF0dGVuZGluZw== 24096 -IFRlbm5lc3NlZQ== 24097 -IE1pc3Npb24= 24098 -IG1lZGljYXRpb24= 24099 -IFd5 24100 -IEFubmE= 24101 -2Lk= 24102 -IFZlcnRleA== 24103 -LnR5cGVz 24104 -T3JnYW4= 24105 -LkRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 24106 -IFJT 24107 -IHRlbXBv 24108 -KEFwcA== 24109 -ODky 24110 -VmVyc2lvblVJRA== 24111 -LnBvaW50 24112 -IER1dGNo 24113 -SG91cnM= 24114 -TFU= 24115 -IHF1b3RlZA== 24116 -LmJ1aWxkZXI= 24117 -IFBlcmZlY3Q= 24118 -IEFsd2F5cw== 24119 -X3R3bw== 24120 -IGV4Y2x1c2l2ZWx5 24121 -IENyYQ== 24122 -aWZpY2Fy 24123 -IEFXUw== 24124 -aW5naGFt 24125 -Y29tcGxleA== 24126 -a2VybmVs 24127 -IGdyYXZpdHk= 24128 -IHdp 24129 -MDUy 24130 -IG92ZXJ2aWV3 24131 -NjYx 24132 -IFdhbnQ= 24133 -IFdQ 24134 -KHNo 24135 -LnJvdGF0aW9u 24136 -U3RhdGVz 24137 -IFRlZW4= 24138 -X2NvbXBvbmVudHM= 24139 -7IiY 24140 -UmVjZWl2ZWQ= 24141 -IGx5cmljcw== 24142 -cml0ZXM= 24143 -CQkJCQkg 24144 -LUFtZXJpY2Fu 24145 -W251bQ== 24146 -L3B5dGhvbg== 24147 -IFVBUlQ= 24148 -IGFwcGxl 24149 -IEpvbmF0aGFu 24150 -IG1vbWVudHVt 24151 -4Lix 24152 -grk= 24153 -IG1pY2g= 24154 -YW5kcmE= 24155 -IGJpb2xvZ2ljYWw= 24156 -IE1lbnM= 24157 -ICUl 24158 -ZWxzZWE= 24159 -IE1leGljYW4= 24160 -LnJhbmRpbnQ= 24161 -IHRhbGU= 24162 -IFZhbGlkYXRl 24163 -IGRlZmVhdGVk 24164 -Lmh0bQ== 24165 -IGNvcHBlcg== 24166 -PS8= 24167 -Y29zeXN0ZW0= 24168 -IHJpcA== 24169 -ZGVjaW1hbA== 24170 -LlZJU0lCTEU= 24171 -IFRh 24172 -CQkJCQkJCQkJCQkJCQk= 24173 -IGRvd25sb2FkZWQ= 24174 -ZW52aXJvbm1lbnQ= 24175 -IG5vbWluZQ== 24176 -YnVpbGRpbmc= 24177 -IFNwb3Q= 24178 -aXBoZXJhbA== 24179 -IGFsdG8= 24180 -cXVldA== 24181 -IEZU 24182 -L2dldA== 24183 -L21hc3Rlcg== 24184 -V0lO 24185 -5YWD 24186 -Njc2 24187 -V2VzdA== 24188 -YXJnYw== 24189 -IHByb2R1Y2Vycw== 24190 -IE11Y2g= 24191 -X3N0b3JhZ2U= 24192 -Y3JlZGl0 24193 -Q09OVA== 24194 -IHZldA== 24195 -IHZvaWNlcw== 24196 -KCcnLA== 24197 -IGluc3RydW1lbnRz 24198 -NjYy 24199 -IE1TRw== 24200 -ZXNzZQ== 24201 -cmVwb3NpdG9yeQ== 24202 -b21pY3M= 24203 -IGRlYWxlcg== 24204 -U3RpbGw= 24205 -IGJhbm5lcg== 24206 -YXNjaWk= 24207 -IHJlbWFya3M= 24208 -W2pz 24209 -IHNob3J0ZXI= 24210 -Z3VscA== 24211 -IG15c3Rlcg== 24212 -IGt1bg== 24213 -IEJpcmQ= 24214 -IHRpZW5l 24215 -Nzg4 24216 -bnV0 24217 -IFVt 24218 -IHdpc2U= 24219 -WWVhaA== 24220 -SU5FU1M= 24221 -MDQ2 24222 -X2JlZ2lu 24223 -LWhlYWRpbmc= 24224 -Q291cnNl 24225 -IA0KDQo= 24226 -b21iaWU= 24227 -Z3JhZGVk 24228 -IEdQUw== 24229 -IMW8ZQ== 24230 -Rml0 24231 -Y2FwdGlvbg== 24232 -w7Zu 24233 -L2ltYWdl 24234 -bGlh 24235 -KG1vZA== 24236 -IGxlYWs= 24237 -ZW56YQ== 24238 -NjI5 24239 -L0g= 24240 -IEhhcHB5 24241 -OTkz 24242 -RGlzdA== 24243 -bng= 24244 -IEdvdmVybm9y 24245 -KGxhc3Q= 24246 -dGVhY2hlcg== 24247 -IFNlbnQ= 24248 -c3VwcG9ydA== 24249 -ODM4 24250 -amVjdG9yeQ== 24251 -INmF 24252 -UmVnaXN0cmF0aW9u 24253 -MDYz 24254 -IEdyYXk= 24255 -LGZhbHNl 24256 -IGFkanVzdGVk 24257 -KHNldHRpbmdz 24258 -PFI= 24259 -IE1hZ2U= 24260 -IHBsYWludA== 24261 -XykK 24262 -CWl0 24263 -b21ldHJpYw== 24264 -LmJvb3RzdHJhcA== 24265 -IGNhcnJpZXM= 24266 -SXA= 24267 -ICEk 24268 -IHN3aW1taW5n 24269 -IE1hcmlv 24270 -IFF1ZXN0aW9ucw== 24271 -UEFDRQ== 24272 -5pa5 24273 -ZW9y 24274 -fX0i 24275 -IG92ZW4= 24276 -IEtvbg== 24277 -IHdpc2RvbQ== 24278 -IGFjcXVpc2l0aW9u 24279 -ZXNzbWVudA== 24280 -YWdpbmU= 24281 -IGV4cHJlc3Npb25z 24282 -U2VxdWVudGlhbEdyb3Vw 24283 -RnJvbnQ= 24284 -dWxwdA== 24285 -YXdr 24286 -J10pCgo= 24287 -ODEz 24288 -NzMy 24289 -X0FS 24290 -IGFuYWxvZw== 24291 -dWxpbg== 24292 -X1BSSU5U 24293 -IExH 24294 -IGJsb2I= 24295 -IEZ1cnRoZXJtb3Jl 24296 -X2NvbXBvbmVudA== 24297 -IENvbGU= 24298 -TEFO 24299 -U0NSSVBUSU9O 24300 -IGxhcA== 24301 -aWNlbnNpbmc= 24302 -X1RJTUVPVVQ= 24303 -IEZybw== 24304 -IGxpYWJpbGl0eQ== 24305 -IGNvbXBvc2Vk 24306 -NjM0 24307 -LmNyZWF0ZVNlcXVlbnRpYWxHcm91cA== 24308 -X3BlcnNvbg== 24309 -IGJlYW0= 24310 -CSAgICAgICAg 24311 -IE5vdEZvdW5k 24312 -Njg0 24313 -LicK 24314 -w61z 24315 -LlRleHRWaWV3 24316 -UERG 24317 -IGthcg== 24318 -X18oJw== 24319 -ICI6Ig== 24320 -X21lc3NhZ2Vz 24321 -IGhhcnZlc3Q= 24322 -Lmhpc3Rvcnk= 24323 -PicK 24324 -LWZvbGQ= 24325 -5oo= 24326 -IEJldHRlcg== 24327 -ICJcPA== 24328 -c3BhY2luZw== 24329 -IGZ1cm5pc2hlZA== 24330 -OTEz 24331 -b3Nlcg== 24332 -XX0K 24333 -ICQi 24334 -cHVsbA== 24335 -LlBvc3Q= 24336 -OTE5 24337 -KGlw 24338 -l48= 24339 -LmZyb250 24340 -bnRl 24341 -IEZN 24342 -Z3VpZA== 24343 -ODQ0 24344 -IG5lZ290aWF0aW9ucw== 24345 -YWdvbmFs 24346 -OTM0 24347 -IHRyZW1lbmQ= 24348 -dW5nZW9u 24349 -QWR2 24350 -Y2Fyb3VzZWw= 24351 -w59l 24352 -X0RFU0M= 24353 -IGhhbW1lcg== 24354 -4bqt 24355 -ICAgICAgICAKCg== 24356 -LWNvcmU= 24357 -LXNlcnZpY2U= 24358 -IGNvcm5lcnM= 24359 -IFNG 24360 -cHJlZA== 24361 -PkE= 24362 -IEpMYWJlbA== 24363 -IHJvbWFudGlj 24364 -IHRlc3RpbW9ueQ== 24365 -b3Nj 24366 -IEdlbmVyYXRpb24= 24367 -YXN1cmVz 24368 -X2ludGVybmFs 24369 -IHByaW50cw== 24370 -IF0pCg== 24371 -IENsZXZlbGFuZA== 24372 -cmVwbw== 24373 -RGlzYw== 24374 -Njc3 24375 -NzYy 24376 -ICI+Cg== 24377 -77+977+977+977+9 24378 -IG5lYXJlc3Q= 24379 -NTkx 24380 -X3Ri 24381 -KHJlcXVpcmU= 24382 -RU9G 24383 -LWNoaWxk 24384 -IGJ1ZGQ= 24385 -Llh0cmFFZGl0b3Jz 24386 -YWx0aWVz 24387 -NzIz 24388 -XCI6XCI= 24389 -V29yZHM= 24390 -OTE3 24391 -IGxvY2FsbHk= 24392 -IHB1cmNoYXNlcw== 24393 -Njk1 24394 -RHJhd2Vy 24395 -ZXh0cmFjdA== 24396 -IGV4ZWN1dA== 24397 -fScu 24398 -dXNlcmRhdGE= 24399 -IGZvY3VzZXM= 24400 -LW1pbnV0ZQ== 24401 -NzY0 24402 -IFB1Ymxpc2g= 24403 -b2dv 24404 -IG1vdW50YWlucw== 24405 -Qm90 24406 -fT57 24407 -IHRlbnNpb24= 24408 -cm9k 24409 -bWVzaA== 24410 -IHRyYW5zZm9ybWVk 24411 -LFI= 24412 -KCl9Cg== 24413 -Lmxvbmc= 24414 -IGdvcmdlb3Vz 24415 -IFNjaGVkdWxl 24416 -IG9sZGVzdA== 24417 -IHN1YnByb2Nlc3M= 24418 -KElO 24419 -eWVjdA== 24420 -IENvb3Blcg== 24421 -YXJuZXNz 24422 -IE1vbml0b3I= 24423 -LnBhcnQ= 24424 -OTcy 24425 -IE5CQw== 24426 -NjY4 24427 -IGNvdHRvbg== 24428 -IGhvbA== 24429 -NzI2 24430 -IHJnYmE= 24431 -IEJpbw== 24432 -Q29udGludWU= 24433 -UG9k 24434 -IHBhcnRpY2lwYXRpbmc= 24435 -Y2x1c2lvbnM= 24436 -KEJ5VmFs 24437 -NzM0 24438 -w6w= 24439 -IEhPVw== 24440 -X3NldG9wdA== 24441 -IGFjY29tcGFueWluZw== 24442 -MDkx 24443 -YXRvbg== 24444 -IC9c 24445 -IEF1dGhlbnRpY2F0aW9u 24446 -acOpbg== 24447 -IEJhcmFjaw== 24448 -Lyou 24449 -IGVhZ2Vy 24450 -IENhbmNlbA== 24451 -PGxlbW1h 24452 -ZXBo 24453 -CXdpbmRvdw== 24454 -IGluY2lkZW50cw== 24455 -NzU2 24456 -KSwo 24457 -LkRlcw== 24458 -aWJl 24459 -IEZ1bmN0aW9ucw== 24460 -IGhvc3BpdGFscw== 24461 -MDM4 24462 -IG94eWdlbg== 24463 -cm9vdFNjb3Bl 24464 -IGRyZXc= 24465 -CXJlcXVlc3Q= 24466 -bm90aWNl 24467 -YWt1 24468 -YW1lbnRz 24469 -ZmFy 24470 -OTcz 24471 -Nzc0 24472 -IHByZWNpc2U= 24473 -X3dyYXBwZXI= 24474 -IGxpc3RlbmVycw== 24475 -QVo= 24476 -LmJvdW5kcw== 24477 -IEF2ZXJhZ2U= 24478 -ZmllbGRzZXQ= 24479 -X2F4aXM= 24480 -IGV4YW1pbmF0aW9u 24481 -Jy4K 24482 -bW9ucw== 24483 -Kyspew0K 24484 -IEZvcm1z 24485 -7ZWc 24486 -OTE2 24487 -Q3BwTWV0aG9k 24488 -X3RyYWNl 24489 -IGVuZ2luZWVy 24490 -NjYz 24491 -IEZsYXQ= 24492 -IHJldmlzaW9u 24493 -IGhlYXRpbmc= 24494 -NjM4 24495 -L3Byb2ZpbGU= 24496 -LnJ1 24497 -cHJpb3JpdHk= 24498 -IGluZmVy 24499 -X1NUUkVBTQ== 24500 -ICopKA== 24501 -PiQ= 24502 -T0xFQU4= 24503 -T0tJRQ== 24504 -SUJJTElUWQ== 24505 -VUFHRQ== 24506 -IFN1cnZleQ== 24507 -MDcx 24508 -IHJlc2lnbg== 24509 -d2luZw== 24510 -IHNlY3JldHM= 24511 -IGNoaXBz 24512 -SlNPTk9iamVjdA== 24513 -RGVza3RvcA== 24514 -NTk2 24515 -X1NZTUJPTA== 24516 -KHJlc291cmNl 24517 -IDwvPgo= 24518 -IG5ld2VzdA== 24519 -dWxp 24520 -IGRlc2VydA== 24521 -IGRpcA== 24522 -IFBvdw== 24523 -IGVxdWF0aW9u 24524 -IHBvc3NpYmlsaXRpZXM= 24525 -IEZlZA== 24526 -b3NwaA== 24527 -IFsl 24528 -IGJ1YmJsZQ== 24529 -ZXRoZXJsYW5kcw== 24530 -Nzkz 24531 -IGNlbWVudA== 24532 -LmF1dG8= 24533 -X0FO 24534 -4oCZLg== 24535 -c2VsZWN0aW9u 24536 -IEJvbmQ= 24537 -OTg4 24538 -RGVu 24539 -LU8= 24540 -LmdldFR5cGU= 24541 -ODk2 24542 -LldpbmRvdw== 24543 -cHJlcw== 24544 -IHN3aW5nZXI= 24545 -In0pCg== 24546 -IHBpcA== 24547 -IG1pY2U= 24548 -IGNvbXBvdW5k 24549 -LXBsdWdpbg== 24550 -aWtv 24551 -IGNlbnR1cmllcw== 24552 -aWN1bGFy 24553 -LWlubGluZQ== 24554 -CWtleQ== 24555 -Plw8 24556 -RU5TSU9O 24557 -IFsNCg== 24558 -IHByZWNpc2VseQ== 24559 -IMOpdMOp 24560 -IFBhc3Q= 24561 -IENhbWJyaWRnZQ== 24562 -LWZ1bGw= 24563 -IGFuYWx5emU= 24564 -IFN0ZXZlbg== 24565 -IG5lbQ== 24566 -ZHVl 24567 -b3Jlbg== 24568 -IG11c2NsZXM= 24569 -aWppbmc= 24570 -ODUy 24571 -Ly0= 24572 -IEtlbm5lZHk= 24573 -NTk3 24574 -Uk0= 24575 -b3NzaWJsZQ== 24576 -IGFjdHJlc3M= 24577 -IGRvbG9y 24578 -OTE0 24579 -5b2V 24580 -TmVlZA== 24581 -LnRvZ2dsZQ== 24582 -IFJhY2U= 24583 -d2Vycw== 24584 -Lm1hdGVyaWFs 24585 -IER1ZQ== 24586 -IFBlbA== 24587 -I3ByaW50 24588 -IGluZGVwZW5kZW5jZQ== 24589 -ZXh1cw== 24590 -U2hhZG93 24591 -IGVuY29kZXI= 24592 -KGxldmVs 24593 -IFN3aWZ0 24594 -LmRvYw== 24595 -X3NlbGVjdGlvbg== 24596 -OTUy 24597 -IHNlcmlhbFZlcnNpb25VSUQ= 24598 -OTQ1 24599 -TGFiZWxz 24600 -IHBlcmZvcm1hbmNlcw== 24601 -LlRhZw== 24602 -IE5ITA== 24603 -aXplbg== 24604 -L1VJS2l0 24605 -OTkx 24606 -X0NPTlRST0w= 24607 -IGVhcm5pbmdz 24608 -OTc1 24609 -IEFsdA== 24610 -X0hBTkRMRQ== 24611 -Q3R4 24612 -IHBlcnN1 24613 -IHRyYW4= 24614 -56g= 24615 -X0NIQU5ORUw= 24616 -IHNhdGlzZmFjdGlvbg== 24617 -IEdQ 24618 -NzY5 24619 -aW94 24620 -bWl0dA== 24621 -bGFuZG8= 24622 -IHBpZw== 24623 -aW5hbHM= 24624 -w6puY2lh 24625 -NzMx 24626 -U3VyZmFjZQ== 24627 -IFVVSUQ= 24628 -IGJlbmVmaWNpYWw= 24629 -IHNlcXVlbmNlcw== 24630 -CW1lbXNldA== 24631 -IG1hZ2ljYWw= 24632 -wqs= 24633 -IHdvcm4= 24634 -QVND 24635 -cG9wdXA= 24636 -Q09NUA== 24637 -X2JlZm9yZQ== 24638 -ZW5lc3M= 24639 -VWk= 24640 -TGVz 24641 -LnJlcXVpcmU= 24642 -LlNlcmlhbGl6YWJsZQ== 24643 -YWRkR2Fw 24644 -IGF1dGhvcml6YXRpb24= 24645 -MDg1 24646 -LnB5cGxvdA== 24647 -dXJyYXk= 24648 -bGF0aXR1ZGU= 24649 -ODQ1 24650 -ZnJhbWVz 24651 -YWpz 24652 -IGNvbXBhc3M= 24653 -IG9ic2VydmF0aW9ucw== 24654 -X3N1cA== 24655 -LmVudmlyb24= 24656 -IHRyaXBsZQ== 24657 -IFJ1Ynk= 24658 -IGRyYWlu 24659 -X0ZJTFRFUg== 24660 -U2Fu 24661 -VU1Q 24662 -TnVsbEV4Y2VwdGlvbg== 24663 -IEdhYg== 24664 -b3dl 24665 -IFR1cmtpc2g= 24666 -X3NlcXVlbmNl 24667 -IEdyYW50 24668 -dWVsYQ== 24669 -IHdv 24670 -IGN1YmU= 24671 -aXE= 24672 -IGRpc29yZGVycw== 24673 -IGV4dHJhb3JkaW5hcnk= 24674 -IGN0cmw= 24675 -IFNlcQ== 24676 -ZW50cg== 24677 -ODY1 24678 -IHNhbmN0aW9ucw== 24679 -OTQ5 24680 -dXRzY2g= 24681 -UmVwb3J0cw== 24682 -IGluaGVyaXQ= 24683 -UGVyaW9k 24684 -IHBob3RvZ3JhcGh5 24685 -IEZyYW1ld29yaw== 24686 -IHNwZWNpYWxpc3Q= 24687 -ID8KCg== 24688 -X3NlbGVjdGVk 24689 -LlBsYXllcg== 24690 -IGFsbG9jYXRpb24= 24691 -KGFjY291bnQ= 24692 -IHN0cnVjdHVyYWw= 24693 -dmFibGU= 24694 -LW9mZnNldA== 24695 -LkFwcENvbXBhdEFjdGl2aXR5 24696 -0LDQvA== 24697 -LkFkZFdpdGhWYWx1ZQ== 24698 -IGljb25z 24699 -IHNodXRkb3du 24700 -X2xvdw== 24701 -IENvbXBhcmU= 24702 -IENl 24703 -PWhlYWQ= 24704 -bGFt 24705 -LnByZWRpY3Q= 24706 -X0RFQw== 24707 -IFNsZWVw 24708 -IEdyYXRpcw== 24709 -IHN1Z2dlc3Rpb24= 24710 -IERFTA== 24711 -Y2FmZg== 24712 -YXZpcnVz 24713 -Tm90aGluZw== 24714 -nos= 24715 -IHdpZGVzcHJlYWQ= 24716 -IG1lY2hhbmlzbXM= 24717 -IHRleHRBbGlnbg== 24718 -b2NjdXA= 24719 -IFJhaWw= 24720 -Ok5T 24721 -IGZpYmVy 24722 -IG1r 24723 -IHZpbnRhZ2U= 24724 -LWxvbmc= 24725 -LnJlZHVjZQ== 24726 -LkVudGl0aWVz 24727 -KHJlY29yZA== 24728 -IHBsZWFzYW50 24729 -RlJJTkc= 24730 -LkNlbGxz 24731 -T1RU 24732 -CWVsc2VpZg== 24733 -NjQ5 24734 -NzI0 24735 -X2NvbmZpcm0= 24736 -IFZpZXdHcm91cA== 24737 -c3lt 24738 -IHByYXk= 24739 -IHN1c3BlY3RlZA== 24740 -Q29udGFpbnM= 24741 -OTgz 24742 -IGJvcmRlcnM= 24743 -IGNvbXBvbmVudERpZA== 24744 -QVNTRVJU 24745 -IGluZmluaXRl 24746 -LW9yZGVy 24747 -IGhlbGxv 24748 -IEdyYWRl 24749 -LmN1cnJlbnRUaW1lTWlsbGlz 24750 -YXBvbGlz 24751 -emg= 24752 -CU9iamVjdA== 24753 -Olxc 24754 -SE8= 24755 -dmFsdWF0aW9u 24756 -IHZvY2Fi 24757 -NzE5 24758 -IGNvdXBvbg== 24759 -YXRhYmFzZXM= 24760 -LkdldFR5cGU= 24761 -TGVhcm4= 24762 -Nzky 24763 -XT0i 24764 -IEdhcnk= 24765 -b3RpdmU= 24766 -IGFzaA== 24767 -IGJpYg== 24768 -WFhYWA== 24769 -IGJhbGFuY2Vk 24770 -VkFMVUU= 24771 -IE5hdA== 24772 -X0Fk 24773 -PEU= 24774 -5Yy6 24775 -IE1ldGhvZEluZm8= 24776 -ODk3 24777 -TElC 24778 -IGNvbnNpZGVyYWJsZQ== 24779 -IEluZHVzdHJ5 24780 -dGVzdHM= 24781 -LnNldFRpdGxl 24782 -IEJsdWV0b290aA== 24783 -IG1hcHBlZA== 24784 -IEJydWNl 24785 -IE1haW5XaW5kb3c= 24786 -CXN0YXR1cw== 24787 -IHJheg== 24788 -IE1hbmQ= 24789 -IGNsYXNzaWZpY2F0aW9u 24790 -UGVybWlzc2lvbnM= 24791 -OTY5 24792 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 24793 -IGNvbnRhaW5lcnM= 24794 -OnNldA== 24795 -X3htbA== 24796 -IHdoaWxzdA== 24797 -VGhyb3VnaA== 24798 -IHZhbGlnbg== 24799 -IHdvcmxkcw== 24800 -Q09SRA== 24801 -RURJQQ== 24802 -0YDQvtCy 24803 -IHNwYXJl 24804 -IEhhZA== 24805 -IERFRg== 24806 -KHB0cg== 24807 -IHdhcm1pbmc= 24808 -ODk4 24809 -4KS+ 24810 -IGNvbnNlbnN1cw== 24811 -YWduZQ== 24812 -Q1RM 24813 -IOyV 24814 -Lk1haW4= 24815 -d2ViRWxlbWVudA== 24816 -IHBpc3Q= 24817 -Rmxhc2g= 24818 -QXBwZW5k 24819 -LnR3aW1n 24820 -VGFw 24821 -IHZlZ2V0YWJsZXM= 24822 -YWxn 24823 -MDU4 24824 -LnNhbXBsZQ== 24825 -IGNvYWNoaW5n 24826 -KGluZA== 24827 -Q2VsbFZhbHVl 24828 -Q2hlY2tCb3g= 24829 -IEhlbGw= 24830 -Uk9PVA== 24831 -Nzk2 24832 -IHN0YWRpdW0= 24833 -IGludmVzdGlnYXRpbmc= 24834 -KSU= 24835 -c3RlZA== 24836 -OTY1 24837 -IFdyaXRpbmc= 24838 -IOqy 24839 -IHVubw== 24840 -IHt7LS0= 24841 -IGNvb3Jkcw== 24842 -IHVuc2Vy 24843 -b3JnYW5pemF0aW9u 24844 -IENyaW1l 24845 -IERlbW9jcmF0 24846 -NTc5 24847 -IHZpbg== 24848 -L2ZpbGU= 24849 -MDc4 24850 -LWFwaQ== 24851 -IEF5 24852 -IGZ1bmRlZA== 24853 -IEJyZXhpdA== 24854 -IEdo 24855 -ZW50aW5h 24856 -Y2FzZXM= 24857 -IGRhc2g= 24858 -ICEhfQo= 24859 -SEk= 24860 -T2ZmaWNl 24861 -IGNhcHRhaW4= 24862 -IHdvcnNoaXA= 24863 -XEM= 24864 -NzMz 24865 -ODUx 24866 -IGdsb2Jl 24867 -X2JvYXJk 24868 -IGJhYmllcw== 24869 -ODc2 24870 -IGNvbnNlY3V0aXZl 24871 -IGVuaGFuY2Vk 24872 -ZXJldW0= 24873 -IEFkdmlz 24874 -IGdyYWlu 24875 -Nzcx 24876 -IGNyYXc= 24877 -YW5jZWxsYXRpb25Ub2tlbg== 24878 -LmFscGhh 24879 -X1dJVEg= 24880 -IE90dA== 24881 -IENvb2w= 24882 -LmJhdGNo 24883 -IHZlcmlmaWVk 24884 -KGNhbGxiYWNr 24885 -IHJlZ2FyZHM= 24886 -Njgz 24887 -IEludFB0cg== 24888 -b3VjaGVy 24889 -IGtpbg== 24890 -IHRvdWNoZWQ= 24891 -aXTDoA== 24892 -YXRob24= 24893 -IGFkamFjZW50 24894 -IGFjY29tcGFuaWVk 24895 -TEVBUg== 24896 -IGltcGxpZXM= 24897 -IGhpbGw= 24898 -IEJhbHRpbW9yZQ== 24899 -PSIt 24900 -RmluYWxseQ== 24901 -ODgz 24902 -U2Ft 24903 -aWNvcHQ= 24904 -IHNvZA== 24905 -IG1hag== 24906 -IFNoaXBwaW5n 24907 -IGdldEFsbA== 24908 -IGNvYWNoZXM= 24909 -IGRvbmF0aW9ucw== 24910 -aWxvdA== 24911 -IFRhcg== 24912 -Y2Vycg== 24913 -IGJhZGdl 24914 -IG1hcmtlcnM= 24915 -IFJhbmQ= 24916 -YWlzZWQ= 24917 -aXNzYW5jZQ== 24918 -IGV4cGxvcmluZw== 24919 -ODI3 24920 -dWNlZA== 24921 -IEluZG9uZXNpYQ== 24922 -IGJlbmVhdGg= 24923 -IG1hZ25ldGlj 24924 -IG11c2V1bQ== 24925 -bWF0Y2hDb25kaXRpb24= 24926 -IGRpc3J1cHQ= 24927 -IHJlbWluZA== 24928 -IFRN 24929 -IC8+PA== 24930 -IGZvb2w= 24931 -IGVzaw== 24932 -Lk51bGw= 24933 -IERpZXM= 24934 -X09VVFBVVA== 24935 -X1RZUEVE 24936 -IHBhaW50ZWQ= 24937 -Njcz 24938 -NzM1 24939 -IHNvcGhpc3RpYw== 24940 -IEJlYXI= 24941 -Km4= 24942 -X1BBQ0s= 24943 -IGRlbGl2ZXJpbmc= 24944 -IENPVU5U 24945 -5Y2V 24946 -IGplZw== 24947 -LWNhcg== 24948 -Zm5hbWU= 24949 -IHJhbmdpbmc= 24950 -ODQ4 24951 -IE5lZw== 24952 -LyoqKioqKi8= 24953 -IENIQVI= 24954 -IHVsdHJh 24955 -R3JhZA== 24956 -PXQ= 24957 -IGp1ZGdlcw== 24958 -IERpc2U= 24959 -YW5uZXJz 24960 -OTg1 24961 -ODkx 24962 -ODYx 24963 -IHNjYWw= 24964 -X2NhbA== 24965 -IENPTk5FQ1RJT04= 24966 -X2VtYmVk 24967 -KGZu 24968 -IENyYWZ0 24969 -MDQ3 24970 -IFBhcw== 24971 -IiktPg== 24972 -LmNvbnZlcnQ= 24973 -LnJlc291cmNl 24974 -IFNUQVRVUw== 24975 -w7RuZw== 24976 -IFRpdA== 24977 -IGNsYXNzcm9vbQ== 24978 -IEFyY2hpdGVjdA== 24979 -IEtpbmdz 24980 -IHN0ZWFkeQ== 24981 -LyohCg== 24982 -IEdlbmU= 24983 -KSI7Cg== 24984 -aWNpYQ== 24985 -c3Rhbg== 24986 -IENvbnN0cnVjdGlvbg== 24987 -dW1wZXI= 24988 -OTUx 24989 -d2M= 24990 -IENCUw== 24991 -aW5naW5n 24992 -LXBhcnR5 24993 -KGRyaXZlcg== 24994 -TUFSSw== 24995 -MDgy 24996 -IG5lc3RlZA== 24997 -ZXdhcmQ= 24998 -IGRlcGVuZGVuY3k= 24999 -IG1hbGVz 25000 -OTI4 25001 -IE9ORQ== 25002 -IFByb2R1Y3Rpb24= 25003 -XVsk 25004 -44O844M= 25005 -X0xPQUQ= 25006 -IEJvbA== 25007 -ZWxyeQ== 25008 -ODMx 25009 -oOmZpA== 25010 -IFJlcXVpcmU= 25011 -IHBsYWNpbmc= 25012 -eHh4 25013 -Q0FMRQ== 25014 -IHRodW1i 25015 -ODI0 25016 -Q2hvb3Nl 25017 -IHByb3RvdHlwZQ== 25018 -Vk9JRA== 25019 -IGxlc2JpYW4= 25020 -NzQx 25021 -IHRyYWl0cw== 25022 -U2hhcnA= 25023 -IGNvbnN1bWU= 25024 -VHJ1dGg= 25025 -IGFjdGlvblBlcmZvcm1lZA== 25026 -IEVudmlyb25tZW50YWw= 25027 -IERlYW4= 25028 -IGVzdGFkbw== 25029 -c2FtZQ== 25030 -IG51bWVyaWM= 25031 -IHRyYW5zaXQ= 25032 -LkVtYWls 25033 -LXNpZGU= 25034 -X1JVTg== 25035 -IFZpbGxhZ2U= 25036 -X09QRU4= 25037 -6KY= 25038 -LnJlbQ== 25039 -LXdhcm5pbmc= 25040 -YW55YQ== 25041 -UHJvcGVydHlDaGFuZ2Vk 25042 -ICghXw== 25043 -KGNoZWNr 25044 -aWxpYQ== 25045 -IFNvZnQ= 25046 -c3RlcHM= 25047 -IE1hZHJpZA== 25048 -TWVtb3J5V2FybmluZw== 25049 -IGhhbmRsZXJz 25050 -IGV4cGVyaWVuY2luZw== 25051 -IGluc3BlY3Q= 25052 -YnV0dG9ucw== 25053 -UmVjZWl2ZU1lbW9yeVdhcm5pbmc= 25054 -Y2hlbXk= 25055 -TGlua3M= 25056 -IHVybGxpYg== 25057 -LlN5c3RlbUNvbG9ycw== 25058 -IEVpZ2Vu 25059 -IHB1bmlzaG1lbnQ= 25060 -OlVJQ29udHJvbA== 25061 -YmFyYQ== 25062 -LXNldA== 25063 -IH0NCg0KDQo= 25064 -IHRvbGVyYW5jZQ== 25065 -IGludGVyZmFjZXM= 25066 -LnJlZGlyZWN0 25067 -aWdoYm9ycw== 25068 -Y3NyZg== 25069 -X2JhY2tncm91bmQ= 25070 -LlV0aWxz 25071 -X0hU 25072 -Njky 25073 -IEludGVyZXN0 25074 -aW1vcw== 25075 -IGdyYW50cw== 25076 -MDgz 25077 -IGV4YW1pbmVk 25078 -0JQ= 25079 -IGNm 25080 -Zm9yZ2U= 25081 -YmFja3M= 25082 -IE9iamVjdHM= 25083 -X3NlbnQ= 25084 -LmVudHJ5 25085 -IFRIRU4= 25086 -ZWxsaWRv 25087 -Y2lh 25088 -LHJlcw== 25089 -NjU5 25090 -Njgx 25091 -L3N0ZGM= 25092 -Lm5k 25093 -KEludA== 25094 -IEF1dGhvcnM= 25095 -IEFwcENvbXBhdEFjdGl2aXR5 25096 -J3s= 25097 -IG1lZGk= 25098 -TXVzaWM= 25099 -aWdt 25100 -Y2VpcHQ= 25101 -IGF1c3M= 25102 -IHRhcmdldGluZw== 25103 -IEtleXM= 25104 -aG4= 25105 -Ol0K 25106 -IG1pbmVyYWw= 25107 -w64= 25108 -LmNh 25109 -NzYx 25110 -b21lZA== 25111 -IHNoZWV0cw== 25112 -IGNhbWI= 25113 -IGRlYWRseQ== 25114 -LmluamVjdA== 25115 -KHVuaXQ= 25116 -IFNlbGVjdGlvbg== 25117 -Lmdtcw== 25118 -KGNvbm5lY3Rpb24= 25119 -ICQoIg== 25120 -w6ltb24= 25121 -IEN1cnJlbnRseQ== 25122 -cHRl 25123 -X3BhdGhz 25124 -ODQ3 25125 -bGVhZg== 25126 -IGltcGxpY2F0aW9ucw== 25127 -cG9zYWw= 25128 -5L2N 25129 -Wy8= 25130 -YW5jaWE= 25131 -6Zs= 25132 -bXVs 25133 -Y2ll 25134 -IGdlaWxl 25135 -Njc5 25136 -aW1hbHM= 25137 -VUlWaWV3 25138 -IHN1cnJl 25139 -c2VyaWFsaXpl 25140 -SVNP 25141 -IGFyYml0cmFyeQ== 25142 -IHNvY2thZGRy 25143 -LmZu 25144 -IE1lcmM= 25145 -IGNhc3Rpbmc= 25146 -S2V5RG93bg== 25147 -IG5ld1ZhbHVl 25148 -b3BlbnM= 25149 -NzE3 25150 -VG9kbw== 25151 -IGZsZXhpYmlsaXR5 25152 -CQkJCSAg 25153 -VmVsb2NpdHk= 25154 -w7pu 25155 -cm93aW5n 25156 -IGNvbXB1dGVk 25157 -YCkK 25158 -c3RhdGVtZW50 25159 -IHJp 25160 -X2NhcnQ= 25161 -TG93 25162 -dHJhbnNmZXI= 25163 -Lm5hdg== 25164 -IGdyYXZl 25165 -IERvb3I= 25166 -CWFsZXJ0 25167 -Njkx 25168 -Njk4 25169 -LnN1YnNjcmliZQ== 25170 -LXByb2ZpbGU= 25171 -CWJhc2U= 25172 -IOKIkg== 25173 -X18KCg== 25174 -IGVuZ2luZWVycw== 25175 -IGV4cGxvc2lvbg== 25176 -IGRhcmk= 25177 -Njgy 25178 -CUxvZw== 25179 -b25hbA== 25180 -IGlzb2xhdGVk 25181 -e2k= 25182 -IE1zZw== 25183 -RnV0dXJl 25184 -IHJhY2lzdA== 25185 -LXdyYXA= 25186 -IFZlcnM= 25187 -Ym9yZw== 25188 -SVNJT04= 25189 -INGA0LDQ 25190 -IFlhbg== 25191 -ODM2 25192 -aW5pdFdpdGg= 25193 -IG5vbWlu 25194 -KGVtcHR5 25195 -w61u 25196 -44Kk 25197 -CXdpZHRo 25198 -IGNoYW1iZXI= 25199 -L2FqYXg= 25200 -RU1Q 25201 -MDkz 25202 -IG5lY2Vz 25203 -aXZvcw== 25204 -bG9naWM= 25205 -Kikm 25206 -Y3JpcHRz 25207 -OTc2 25208 -Um93QXQ= 25209 -MDUz 25210 -aWJsaW5ncw== 25211 -IGVhcnM= 25212 -IGNvbXB1dGluZw== 25213 -IG1ha2Vy 25214 -IE5laXRoZXI= 25215 -YnJlYWRjcnVtYg== 25216 -IHNlcmlhbGl6ZQ== 25217 -IFdpdGhpbg== 25218 -IGRlbGw= 25219 -X1RSQUNF 25220 -MDky 25221 -PWE= 25222 -IHdpc2hlcw== 25223 -LWluY2g= 25224 -IERvcg== 25225 -IGlubm9jZW50 25226 -IERvbA== 25227 -IGludGVucw== 25228 -Zm9yY2Vk 25229 -MDU0 25230 -IEJJVA== 25231 -IHBob3RvZ3JhcGhz 25232 -IGNhc2E= 25233 -IExlbg== 25234 -XEZyYW1ld29yaw== 25235 -LlNpbXBsZQ== 25236 -IGRlYXI= 25237 -ODk1 25238 -KS8o 25239 -aXBwaQ== 25240 -IG93bnM= 25241 -UGxheWVycw== 25242 -IHByb3Bvc2Fscw== 25243 -LnBp 25244 -dXNhbGVt 25245 -RGFtYWdl 25246 -IGNhbG9yaWVz 25247 -IENyZWF0aXZl 25248 -IFsk 25249 -IC8vDQo= 25250 -Nzg2 25251 -QW5kVmlldw== 25252 -w6htZQ== 25253 -LmN1c3RvbQ== 25254 -X2ZhY3Rvcnk= 25255 -Y29tbWFuZHM= 25256 -X2xvb2s= 25257 -IHN0cmNtcA== 25258 -WU4= 25259 -YWlyZWQ= 25260 -IGF1ZGl0 25261 -0L7RgdGC 25262 -IFJldmVyc2U= 25263 -cm9wcmlhdGU= 25264 -ZXRpY3M= 25265 -PHZlY3Rvcg== 25266 -LnNlbGVuaXVt 25267 -Lm9y 25268 -IHByZWRpY2F0ZQ== 25269 -IGZpbmlzaGluZw== 25270 -IGtsZQ== 25271 -IFJlcG9z 25272 -IEtoYW4= 25273 -IE1ha2luZw== 25274 -IEZT 25275 -IHB1dGU= 25276 -CXN0YXRl 25277 -X1NVUFBPUlQ= 25278 -Jy0= 25279 -b3JpZW50YXRpb24= 25280 -IGV4aXN0ZWQ= 25281 -YXR1cmE= 25282 -IGV4cGVjdHM= 25283 -IFNoYWRvdw== 25284 -OTY2 25285 -IG9yZ2FuaXo= 25286 -5Z6L 25287 -IHN1c3BlbnNpb24= 25288 -NjY5 25289 -IHVpdA== 25290 -IHNpbXVsdGFuZW91c2x5 25291 -IEFmZmVybw== 25292 -OiIpOwo= 25293 -IHJvY2tldA== 25294 -Y2Fz 25295 -ZXRlcm1pbmU= 25296 -YWNldXQ= 25297 -Njkz 25298 -eGw= 25299 -IEFNRA== 25300 -KGdyYXBo 25301 -NzU4 25302 -ODcy 25303 -YXNzb2Np 25304 -X0NS 25305 -LmFyYW5nZQ== 25306 -MDQ5 25307 -KGpMYWJlbA== 25308 -IGJlZWY= 25309 -UXVpY2s= 25310 -LmNhcmQ= 25311 -XSk6 25312 -LWdy 25313 -Nzk3 25314 -LkdPTkU= 25315 -X0NMT1NF 25316 -IE5ldg== 25317 -w61hcw== 25318 -IHN0ZXBwZWQ= 25319 -IEZyZWVkb20= 25320 -IFdS 25321 -TlNBcnJheQ== 25322 -X3J4 25323 -X2RpYWxvZw== 25324 -IGhvdGVscw== 25325 -OTUz 25326 -IChcPA== 25327 -IERpYW1vbmQ= 25328 -IGFzc3VtcHRpb24= 25329 -dW1p 25330 -KGl0ZW1z 25331 -DQ0NCg== 25332 -5rOV 25333 -IG5lbA== 25334 -Qm9va3M= 25335 -5Y6/ 25336 -dXNi 25337 -IEZJTg== 25338 -ODgx 25339 -5qw= 25340 -IGNvcnBvcmF0aW9ucw== 25341 -VVNB 25342 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 25343 -OTI5 25344 -LnByb3BlcnR5 25345 -ZXdpc2U= 25346 -X3Bsb3Q= 25347 -Ij4nOwo= 25348 -IHBlcHBlcg== 25349 -OTg5 25350 -IHNoZWQ= 25351 -IE1lZGl1bQ== 25352 -IENvb2tpZQ== 25353 -ODg5 25354 -IG92ZXJzZWFz 25355 -ZWRvcg== 25356 -YXN1cmVtZW50 25357 -NzY2 25358 -5a2Y 25359 -ICcuJw== 25360 -IHBocA== 25361 -IFBST0M= 25362 -IGV4Y2VwdGlvbmFs 25363 -KHRo 25364 -IEpldA== 25365 -IG9jY3VwaWVk 25366 -LnNldEltYWdl 25367 -IFJlbGF0ZWQ= 25368 -dWNrZXI= 25369 -TWVtYmVycw== 25370 -UFJJTlQ= 25371 -IEdsbw== 25372 -X1ZJRVc= 25373 -fSIsCg== 25374 -IGFkb3B0aW9u 25375 -W10pCg== 25376 -ODQy 25377 -IE1pc3NvdXJp 25378 -IExpbmNvbG4= 25379 -ZXJhbGQ= 25380 -UG9wdXA= 25381 -IGZhdGU= 25382 -LWJvb3RzdHJhcA== 25383 -ZmVjdGlvbnM= 25384 -IFBvbGw= 25385 -X0FSR1M= 25386 -aW5hbmNl 25387 -Njk3 25388 -LWhvbWU= 25389 -Liks 25390 -X2RvbmU= 25391 -Njk0 25392 -OgoKCg== 25393 -IGRpc2N1c3Npbmc= 25394 -IFNRTEV4Y2VwdGlvbg== 25395 -IGVsZWN0cm8= 25396 -CXJlcQ== 25397 -IHp3 25398 -ODg2 25399 -IGx1aQ== 25400 -OTMy 25401 -IG92ZXJuaWdodA== 25402 -JHVzZXI= 25403 -IFdBWQ== 25404 -IGFsbGVyZw== 25405 -IGRpc2FwcG9pbnRlZA== 25406 -IHJhZGlhdGlvbg== 25407 -IGltcHJlc3NlZA== 25408 -aWZpY2F0ZXM= 25409 -IHRvYg== 25410 -Q0xBU1M= 25411 -IGN1ZGE= 25412 -X2RldA== 25413 -LXBvc3Q= 25414 -dWx1 25415 -VHJhbnNsYXRpb24= 25416 -LWhhbmQ= 25417 -LnllYXI= 25418 -IE1vbmdv 25419 -IHVuY2xlYXI= 25420 -LmVuZ2luZQ== 25421 -V0VCUEFDSw== 25422 -cmljZXM= 25423 -X0FDQ0VTUw== 25424 -IGhvbGlkYXlz 25425 -cGVyY2VudA== 25426 -LklkZW50aXR5 25427 -IEdvdg== 25428 -IHBhc3Npb25hdGU= 25429 -ISEu 25430 -IEdyZWVjZQ== 25431 -cGx1c3BsdXM= 25432 -JykpOw== 25433 -R1A= 25434 -IGV4Y2l0 25435 -LnRhYlBhZ2U= 25436 -X2NvbmQ= 25437 -IHNwb25zb3I= 25438 -TU9EVUxF 25439 -X3Byb2M= 25440 -ICQK 25441 -IHJhdGlvbmFs 25442 -LlRvb2w= 25443 -IGlocg== 25444 -Y2Nh 25445 -5ZOB 25446 -IEVzdGF0ZQ== 25447 -SUJVVEU= 25448 -QWN0aW9uUGVyZm9ybWVk 25449 -IFNvbGFy 25450 -poI= 25451 -IGVxdWl0eQ== 25452 -dGlk 25453 -OTM4 25454 -IHJlY2lw 25455 -LnNpbXBsZQ== 25456 -bWs= 25457 -Njg5 25458 -IEx1a2U= 25459 -IEd1YXJkaWFu 25460 -IGVuY3J5cHRlZA== 25461 -IGRvbWluYW50 25462 -LnBsYWNl 25463 -IE5W 25464 -ODM5 25465 -IHRvbmd1ZQ== 25466 -KEdldA== 25467 -IHN0YWlubGVzcw== 25468 -LlBsYXk= 25469 -IGVi 25470 -YWNp 25471 -LmJ1ZmZlcg== 25472 -cmVhZGNydW1icw== 25473 -IHZhY2NpbmU= 25474 -cHJvbQ== 25475 -OTc5 25476 -IHVzZXJJbmZv 25477 -IHNsdWc= 25478 -U2VyaWFsaXplZE5hbWU= 25479 -LXdpZGU= 25480 -IHJlYWN0aW9ucw== 25481 -IFlhbmc= 25482 -IEFkZHM= 25483 -KHVzZXJJZA== 25484 -IHBsYXRlcw== 25485 -IE1FTQ== 25486 -IGJhaWw= 25487 -SW5zaWRl 25488 -ZXRlZA== 25489 -IGVsc2lm 25490 -IHNha2U= 25491 -IGN5Y2xlcw== 25492 -IOyX 25493 -CUk= 25494 -LWNvbGxhcHNl 25495 -ODQx 25496 -IEdNVA== 25497 -ODE0 25498 -RGVjbGFyYXRpb24= 25499 -IGdyb3M= 25500 -IHJlYWNoZXM= 25501 -IGN1c3RvZHk= 25502 -VW50aWw= 25503 -NzUz 25504 -ODU2 25505 -dHU= 25506 -IENoZW4= 25507 -IG54 25508 -KGFkZHI= 25509 -IE9mZmVy 25510 -IGNvbGxlZw== 25511 -YXNzYWRvcg== 25512 -Njc0 25513 -IG1hcHBlcg== 25514 -ODU0 25515 -IFNJR05BTA== 25516 -IEJsb29t 25517 -IEhvbGw= 25518 -IEltcGVy 25519 -LWRlcw== 25520 -X3NpdGU= 25521 -UHJvYw== 25522 -RXF1 25523 -IGF0b21pYw== 25524 -IFdvbWFu 25525 -c2VudA== 25526 -NzM4 25527 -ODE3 25528 -c2Nhcg== 25529 -IGludGVsbGlnZW50 25530 -IEdldHRpbmc= 25531 -IFJlZ2lzdHJhdGlvbg== 25532 -IFBoaWxs 25533 -IGtpbGxlcg== 25534 -dW5pY29kZQ== 25535 -CgkJCg== 25536 -IEphY29i 25537 -IENvbnN0 25538 -IGxvY2F0ZQ== 25539 -IGNhdXM= 25540 -NzQ5 25541 -IFNjaG9sYXI= 25542 -IGNvbnN0aXR1dGlvbmFs 25543 -IGluZmxhdGlvbg== 25544 -IEdvdA== 25545 -PWFycmF5 25546 -ZW5kdW0= 25547 -IHRyYW5zbGF0ZWQ= 25548 -IGRpdm9yY2U= 25549 -RW50cmllcw== 25550 -IHNvcg== 25551 -IFF1b3Rl 25552 -aXJsaW5lcw== 25553 -VUs= 25554 -IGV4Y2Vs 25555 -KG9wdA== 25556 -IEFEVg== 25557 -LDos 25558 -IGNvbnRhY3RlZA== 25559 -NzQy 25560 -IERB 25561 -IHJpbmdz 25562 -IEluZHVzdHJpYWw= 25563 -LmdldENvbnRleHQ= 25564 -IGZvcmdvdHRlbg== 25565 -IFRhbg== 25566 -IHBhbnRz 25567 -IG92 25568 -IGRlY29kZXI= 25569 -IFBhcnRpYWw= 25570 -IHZj 25571 -IGJhdHRsZXM= 25572 -QXJpYWw= 25573 -RlJJTkdFTUVOVA== 25574 -aXJhdGVz 25575 -LHc= 25576 -YWludGVuYW5jZQ== 25577 -IE9k 25578 -IFRlY2hub2xvZ2llcw== 25579 -5YmN 25580 -IENhcnRlcg== 25581 -LmZpbmRBbGw= 25582 -Tm9tZQ== 25583 -QmVu 25584 -IFVzYWdl 25585 -IFBpY3R1cmU= 25586 -IGJhZGx5 25587 -X3BhbmVs 25588 -IHBhdGVudA== 25589 -IFByb3RvY29s 25590 -bG90dGU= 25591 -CXBsYXllcg== 25592 -amVjdGlvbnM= 25593 -NzQ2 25594 -IGRvdQ== 25595 -X3JlbGVhc2U= 25596 -dXJuaXR1cmU= 25597 -X3RheA== 25598 -IEZpZWxkcw== 25599 -LmRhdGFzZXQ= 25600 -X21hc3Rlcg== 25601 -Q0xVREU= 25602 -IFBoYXJt 25603 -YnN0 25604 -IG9wZXJhdGlvbmFs 25605 -LmNlbGw= 25606 -IGlkZW50aWZ5aW5n 25607 -IGp3dA== 25608 -dHVwbGU= 25609 -IFRD 25610 -IENybw== 25611 -OTM2 25612 -aXhtYXA= 25613 -LWNvbXBvbmVudHM= 25614 -Z2VuZXJhbA== 25615 -IG96 25616 -X0Rl 25617 -X2RvdWJsZQ== 25618 -IFRvbw== 25619 -MDg4 25620 -LlZpZXdHcm91cA== 25621 -ODc5 25622 -Z2F0ZQ== 25623 -ZGluZ3M= 25624 -cGhvdG9z 25625 -IGdyYW5kZQ== 25626 -b2xsZWN0 25627 -X2xpbg== 25628 -IGF3ZnVs 25629 -ZmlsdGVycw== 25630 -IGFsdGVybmF0ZQ== 25631 -ZXNw 25632 -IGNvbXByZXNz 25633 -ZW8= 25634 -IFNjYWxl 25635 -IGluZGlyZWN0 25636 -IGludm9pY2U= 25637 -CgoKCgoKCgoKCgoKCgoKCg== 25638 -U3RhcnRpbmc= 25639 -IFBsYXllcnM= 25640 -aWVsZQ== 25641 -LnRoZW4= 25642 -OTgx 25643 -T3Jk 25644 -IFR1cGxl 25645 -IGJvdXQ= 25646 -IFN0YXRpc3RpY3M= 25647 -UHJldmlldw== 25648 -IHB1enpsZQ== 25649 -IFdpZHRo 25650 -U1RBVEU= 25651 -IG92ZXJsYXk= 25652 -CW9u 25653 -IGluZnI= 25654 -IHNtYWxsZXN0 25655 -bG9ja2Vk 25656 -0YLQvg== 25657 -c3Ns 25658 -Nzc5 25659 -IGRlZW1lZA== 25660 -IHNjbw== 25661 -cmVjaw== 25662 -IGpCdXR0b24= 25663 -IG1pc3Npb25z 25664 -ODcx 25665 -56ew 25666 -LlNlbGVjdGVkSW5kZXg= 25667 -VEFCTEU= 25668 -U2VwdA== 25669 -IGFja25vd2xlZGdl 25670 -IHN0cnRvdGltZQ== 25671 -IFRlbGw= 25672 -IERhaw== 25673 -IGFsdW1pbnVt 25674 -IGZlbmNl 25675 -IFN0YXJz 25676 -Q09ORklH 25677 -IHJldHJvZml0 25678 -IGVtcGhhc2lz 25679 -L2hlYWRlcg== 25680 -IFNvbWV0aGluZw== 25681 -aW5pc2hlZA== 25682 -PSciLiQ= 25683 -IFZhbGlkYXRvcnM= 25684 -IHBvbGFy 25685 -c2VjdGlvbnM= 25686 -OTQ0 25687 -LmFzcHg= 25688 -IGFzcGly 25689 -Lk1vY2s= 25690 -Q29kZUdlbg== 25691 -IHBldXQ= 25692 -OTcx 25693 -IGFjY2VwdGluZw== 25694 -IGJhY2tpbmc= 25695 -UGljdHVyZQ== 25696 -L2Fw 25697 -0LXQsw== 25698 -X1NFQw== 25699 -LXVzZQ== 25700 -YW5ub3RhdGlvbg== 25701 -IGNvZ25pdGl2ZQ== 25702 -IGdyaXA= 25703 -aG91cg== 25704 -IExlZ2Fs 25705 -IGVwaWM= 25706 -LnRvb2xTdHJpcA== 25707 -Lm5vdGlmeQ== 25708 -Lkxhc3Q= 25709 -T1JJWg== 25710 -TWlkZGxld2FyZQ== 25711 -Y3JpcHRpb25z 25712 -bGFzaA== 25713 -X0ZPVU5E 25714 -IExpdmVycG9vbA== 25715 -IHt9Iiw= 25716 -OTMx 25717 -SW5zdGFsbA== 25718 -IG5pdA== 25719 -IGZpZ3VyZWQ= 25720 -W2xlbg== 25721 -Lldpbg== 25722 -LnBsYXRmb3Jt 25723 -ODUz 25724 -IGdhbWJsaW5n 25725 -KGR0 25726 -YXZlcnk= 25727 -CWluY2x1ZGU= 25728 -V2hldGhlcg== 25729 -Um91dGluZw== 25730 -IHRoZXJhcA== 25731 -UmVtb3Rl 25732 -IExvc3M= 25733 -eWxs 25734 -IGFwcHJvYWNoZWQ= 25735 -IFZlaGljbGU= 25736 -IEFscGhh 25737 -IHZvY8Oq 25738 -YW5zd2Vycw== 25739 -TlNEaWN0aW9uYXJ5 25740 -OTU0 25741 -Y29uc2lkZXI= 25742 -dW51c2Vk 25743 -IEZhbg== 25744 -b3JhYmxl 25745 -ZnJl 25746 -ODcz 25747 -IERJU0NMQUlN 25748 -IEFjdG9y 25749 -Ll0= 25750 -dG9IYXZl 25751 -LnVzZXJJZA== 25752 -IHNwZWVkcw== 25753 -ZXdheQ== 25754 -IHJlY3Vycw== 25755 -INCz 25756 -X3ByaXY= 25757 -IeKAnQoK 25758 -Q2hvaWNl 25759 -IHNldHRsZQ== 25760 -IHBsYW5lcw== 25761 -J30s 25762 -VG9t 25763 -SVRFUg== 25764 -ISIK 25765 -5bs= 25766 -YWNoZWxvcg== 25767 -IHNlcGFyYXRpb24= 25768 -IGRhbA== 25769 -YWRq 25770 -IHJlZ2lzdGVycw== 25771 -cml6 25772 -IE5vdGljZQ== 25773 -IGx1 25774 -IGNvdXJhZ2U= 25775 -IGF4ZXM= 25776 -Y2VsbGVudA== 25777 -LmFzeW5j 25778 -MDcz 25779 -IGNvbXBhdGliaWxpdHk= 25780 -56s= 25781 -ICEKCg== 25782 -CXRpdGxl 25783 -WUxF 25784 -CW1lc3NhZ2U= 25785 -VVVJRA== 25786 -T0xERVI= 25787 -IEhI 25788 -IFN0eWxlU2hlZXQ= 25789 -IGFjY2Vzc2Vk 25790 -LnZhbGlkYXRpb24= 25791 -dGFza3M= 25792 -IHBvbGx1dGlvbg== 25793 -LmNhbnZhcw== 25794 -IGluZ3JlZGllbnQ= 25795 -IENhYmlu 25796 -QWg= 25797 -b2xkb3du 25798 -IE5PSQ== 25799 -IMOX 25800 -W2Y= 25801 -ZWR1Yw== 25802 -eWFsdHk= 25803 -KG5vdA== 25804 -X1N0YXRl 25805 -OTMz 25806 -YW1lbg== 25807 -Nzk1 25808 -NzM5 25809 -IGRhbw== 25810 -dWRhZA== 25811 -ZWxsZXJz 25812 -fSY= 25813 -bGljaXR5 25814 -X1dJTkRPVw== 25815 -IHRhdHRv 25816 -dmFsb3I= 25817 -LlJhbmdl 25818 -IHJlZmVyZW5jZWQ= 25819 -IFJlc2VydmU= 25820 -TW9uZXk= 25821 -ODc0 25822 -U0NSSVBU 25823 -L3Byb2R1Y3Q= 25824 -Y2hvaWNlcw== 25825 -IHRpbg== 25826 -44KT 25827 -OTE4 25828 -IHNlcGFyYXRvcg== 25829 -IHBrZw== 25830 -YW1tZWQ= 25831 -IE1BVA== 25832 -ISEKCg== 25833 -IHJhaWQ= 25834 -IG1vdGl2YXRpb24= 25835 -IFhQ 25836 -IEJhY2tncm91bmQ= 25837 -IFF1YXRlcm5pb24= 25838 -LmRlZmluZVByb3BlcnR5 25839 -aWtlcg== 25840 -CXBhcmVudA== 25841 -IE9yaWdpbmFsbHk= 25842 -YW50YWdl 25843 -IEhhbnM= 25844 -IHRpbWVsaW5l 25845 -LmN1cg== 25846 -b3BpYw== 25847 -IFNlcXU= 25848 -bXVzdA== 25849 -IENvYWw= 25850 -IGZvcm1hdHRlcg== 25851 -X1JHQg== 25852 -IF8oIg== 25853 -J30pLAo= 25854 -ID09PT09PT09PT09PT09PT09 25855 -IEZVTkNUSU9O 25856 -IGxuZw== 25857 -aWNhdGVz 25858 -bGl2ZQ== 25859 -X2VuZ2luZQ== 25860 -IHRvd25z 25861 -ODY4 25862 -JykpCgo= 25863 -IFBL 25864 -KGFwaQ== 25865 -CXNjYW5m 25866 -MDg5 25867 -cGFja2V0 25868 -LnBob25l 25869 -4YA= 25870 -IEFuZHk= 25871 -X05BTUVT 25872 -OTgy 25873 -UExZ 25874 -OTU1 25875 -IG1pbnM= 25876 -aW1p 25877 -IGJyaWNr 25878 -IGJsYWRl 25879 -LnN0ZG91dA== 25880 -fWA7Cg== 25881 -U2hpZnQ= 25882 -CXNi 25883 -IENoZWNrcw== 25884 -IHBoZW5vbWVub24= 25885 -QXZhdGFy 25886 -IG1pbmlzdHJ5 25887 -cm9zZQ== 25888 -CUZpbGU= 25889 -ODc4 25890 -IHRpdGxlZA== 25891 -KExPRw== 25892 -IGdhbg== 25893 -ZGVzaWdu 25894 -KCksDQo= 25895 -IGJvbmVz 25896 -c3Rt 25897 -xZvEhw== 25898 -IElucHV0U3RyZWFt 25899 -IHZvbHVudA== 25900 -IFNlcmlhbGl6YWJsZQ== 25901 -IGZpZ2h0ZXI= 25902 -IERyYWc= 25903 -VHdpdHRlcg== 25904 -IHN1YnNpZA== 25905 -57w= 25906 -IGZvcnVtcw== 25907 -LmxvYWRpbmc= 25908 -bG9nZ2Vk 25909 -X3RoaXM= 25910 -IHRlcnJhaW4= 25911 -IGlycmU= 25912 -IEluZw== 25913 -IENO 25914 -X29iamVjdHM= 25915 -LnVpZA== 25916 -IGNvbnNjaW91c25lc3M= 25917 -VElOR1M= 25918 -IEdhbGw= 25919 -IHBvcnRyYXk= 25920 -MDU2 25921 -IERldmVsb3Blcg== 25922 -IHBhcnRpY2lwYW50 25923 -ICI7DQo= 25924 -L21vZGVs 25925 -Nzk0 25926 -IE9wZXJhdGlvbnM= 25927 -Xlw= 25928 -IExhdGVy 25929 -IHJhaXNlcw== 25930 -LW5vbmU= 25931 -Lm1ldGE= 25932 -PScuJA== 25933 -RmluaXNoZWQ= 25934 -IHJlcGxhY2luZw== 25935 -IHNhbXBsaW5n 25936 -IEplbg== 25937 -IlRoZXJl 25938 -UkVBTA== 25939 -QUxF 25940 -7Iqk 25941 -T3JkZXJz 25942 -X3BhcmFtZXRlcg== 25943 -IE9seW1waWM= 25944 -IHRyw6hz 25945 -IGFyZW5h 25946 -aW9s 25947 -Oz8+ 25948 -IGltcGFjdHM= 25949 -IFdT 25950 -OmdldA== 25951 -IGZsaWdodHM= 25952 -IFJ1c3NlbGw= 25953 -Y2FtZXJh 25954 -Rm4= 25955 -c2lnbWE= 25956 -IGZvcmNpbmc= 25957 -IGxvY2Fscw== 25958 -IGRlcGFydHVyZQ== 25959 -IGNlbGVicmF0aW9u 25960 -IFNheQ== 25961 -ODg0 25962 -77yS 25963 -IEhpbGxz 25964 -Lmhhc093blByb3BlcnR5 25965 -IHR5cGluZ3M= 25966 -LkFQSQ== 25967 -IGRvbmF0aW9u 25968 -T3BlcmF0aW9uRXhjZXB0aW9u 25969 -LkFjdGl2aXR5 25970 -Y3BsdXNwbHVz 25971 -IENoYXJsaWU= 25972 -IGltcG9ydGVk 25973 -IGRhbm4= 25974 -IG9jY2FzaW9ucw== 25975 -IGltcGxlbWVudGluZw== 25976 -IHB1cnBsZQ== 25977 -LmRpYWxvZw== 25978 -U1FMRXhjZXB0aW9u 25979 -ZXJubw== 25980 -IHdhcnM= 25981 -IHBhc3Rl 25982 -IGRlY3JlYXNlZA== 25983 -IGhhcnNo 25984 -IGVsYWJvcg== 25985 -aW5wdXRz 25986 -IFZpZXdz 25987 -IGVycm9yTWVzc2FnZQ== 25988 -X211bA== 25989 -CXdyaXRl 25990 -IENvcA== 25991 -IEFubnVhbA== 25992 -KGJ1dHRvbg== 25993 -IHZpZGE= 25994 -YmFycw== 25995 -IEhhcnZhcmQ= 25996 -CWV4cGVjdA== 25997 -IGluZGV4ZXM= 25998 -IGRvY3VtZW50YXJ5 25999 -IGZsZXNo 26000 -T1JMRA== 26001 -IERlbHRh 26002 -TUFORA== 26003 -QnJ1c2g= 26004 -LWNvbHVtbg== 26005 -IGRldmVsb3BtZW50cw== 26006 -OTc0 26007 -Nzgz 26008 -bWV0aG9kVmlzaXRvcg== 26009 -c2xpY2U= 26010 -IFBETw== 26011 -IGludmVzdGluZw== 26012 -ODY3 26013 -aXJhYmxl 26014 -IHhtbG5z 26015 -77yb 26016 -YXJ0YQ== 26017 -IHRoZW9yaWVz 26018 -X2NpdHk= 26019 -ICRfXw== 26020 -Q3JlYXRpbmc= 26021 -KHBy 26022 -RHJvcGRvd24= 26023 -aXNtYXRjaA== 26024 -IE5FVA== 26025 -OTI2 26026 -J10pKXsK 26027 -IFZhbHVlcw== 26028 -IFNFTw== 26029 -IFNUQVQ= 26030 -IGVjb3N5c3RlbQ== 26031 -IHRlbXB0 26032 -IFxc 26033 -IC8vewo= 26034 -IENocmlzdG9waGVy 26035 -IEtlbnR1Y2t5 26036 -IEh0dHBTZXJ2bGV0UmVzcG9uc2U= 26037 -IGh5YnJpZA== 26038 -eW9u 26039 -IGZlZWRpbmc= 26040 -IEV4dHJh 26041 -Tm9ybQ== 26042 -SVRDSA== 26043 -IFNlYW4= 26044 -IFVwbG9hZA== 26045 -bXVu 26046 -cHVy 26047 -IHBlcnNpc3RlbnQ= 26048 -IElEQw== 26049 -IFBlcmZvcm0= 26050 -ODYz 26051 -Lm1lcmdl 26052 -X3Jvb20= 26053 -TWVhbndoaWxl 26054 -IT0n 26055 -IFdlbA== 26056 -QXJnc0NvbnN0cnVjdG9y 26057 -ODg3 26058 -LkRhdGFiYXNl 26059 -IGNvdW50aW5n 26060 -KCkq 26061 -lOWbng== 26062 -IFRPUA== 26063 -bWlsbA== 26064 -IERU 26065 -SUdORUQ= 26066 -OTU2 26067 -IEtC 26068 -IGNvbXBseQ== 26069 -U291dGg= 26070 -X2NvbGxlY3Rpb24= 26071 -Q2hhcHRlcg== 26072 -IGV4cGxhaW5pbmc= 26073 -X0FN 26074 -X3Rz 26075 -Y2FyZHM= 26076 -IHF1ZWw= 26077 -IHBvbGU= 26078 -IHRvdWNoZG93bg== 26079 -IE90aGVycw== 26080 -IHBlZXJz 26081 -IFR5cGVFcnJvcg== 26082 -NzYz 26083 -IHNpeHRo 26084 -IGNoZWVy 26085 -IGRpc3B1dGU= 26086 -OTYz 26087 -ODkz 26088 -dXNj 26089 -KV0s 26090 -dGh1bWI= 26091 -IGhpZGluZw== 26092 -IFNJRw== 26093 -bGlrZXM= 26094 -IFBBR0U= 26095 -LlJlZmxlY3Rpb24= 26096 -IGhlYWRxdWFydGVycw== 26097 -VElORw== 26098 -IEdob3N0 26099 -TUxF 26100 -JAo= 26101 -IGNvbnRyYXJ5 26102 -ZXh0ZW5k 26103 -J10pLg== 26104 -RkZFQ1Q= 26105 -IFBpbnRlcmVzdA== 26106 -w7ptZXJv 26107 -cmljYW5l 26108 -CXNlc3Npb24= 26109 -IGNyeXN0YWw= 26110 -LUNvbnRyb2w= 26111 -b3Zlcm5tZW50 26112 -b2dyYWY= 26113 -OTYx 26114 -LWFjdGlvbg== 26115 -dm9sdW1l 26116 -ZnRlbg== 26117 -IHVuY29u 26118 -IGFuaW1hdGU= 26119 -IGxlYXNl 26120 -c2Ny 26121 -IHJlZnVzZQ== 26122 -44CL 26123 -ZnRw 26124 -aW5mb3JtYXRpb24= 26125 -IGV2YWx1YXRlZA== 26126 -IGluamVjdGlvbg== 26127 -IGphY2s= 26128 -IHdvcmtzaG9w 26129 -5rOo 26130 -UFRI 26131 -IFRz 26132 -b2ZmZXI= 26133 -CW9z 26134 -IGtpbmdkb20= 26135 -TWlzc2luZw== 26136 -IGxhd21ha2Vycw== 26137 -ZXh0RmllbGQ= 26138 -IHNpbmdpbmc= 26139 -YWJp 26140 -L2NsaWVudA== 26141 -Lm1lZGlh 26142 -QVRFR09SWQ== 26143 -U2lnbmF0dXJl 26144 -JScsCg== 26145 -IEZ1Y2s= 26146 -XVs6 26147 -IHNlbnNvcnM= 26148 -L2NvbQ== 26149 -IFByaW1hcnk= 26150 -LlNRTA== 26151 -X3Byb2dyYW0= 26152 -IHBpbGxz 26153 -IGludGVncmFs 26154 -IGZsZWV0 26155 -IGRyb3BwaW5n 26156 -LnNs 26157 -QmVlbg== 26158 -IHBldHM= 26159 -IGFkdmlzZWQ= 26160 -IGRyYWdvbg== 26161 -X0VESVQ= 26162 -KGlt 26163 -OTM5 26164 -RkVS 26165 -IERydWc= 26166 -KHJhbmRvbQ== 26167 -IGNvbXByZXNzaW9u 26168 -b3VzdA== 26169 -WyU= 26170 -IGJ1eWVy 26171 -aG9w 26172 -Um9sZXM= 26173 -bWFuYWdl 26174 -IHBhaW5mdWw= 26175 -IEJyYW5jaA== 26176 -LW1vZGFs 26177 -ZW5hbnQ= 26178 -IE1lc2g= 26179 -L2ZvbnQ= 26180 -IEdyYWhhbQ== 26181 -IOKY 26182 -IG5j 26183 -IEZyYW5jaXM= 26184 -IHNwZWNpZmljYXRpb24= 26185 -IGRhbWFnZXM= 26186 -LWNvbmZpZw== 26187 -IHRoZW9yZXQ= 26188 -c2VjdXJl 26189 -X211bHRp 26190 -YWNldXRpY2Fs 26191 -IGRlbWFuZGluZw== 26192 -ZW5uZQ== 26193 -SVNUUw== 26194 -MDk0 26195 -KCkpKTsKCg== 26196 -UmVhc29u 26197 -UmVjZW50 26198 -cGhhc2U= 26199 -IHBzeQ== 26200 -X01BTg== 26201 -IHZvbHVudGVlcg== 26202 -5b8= 26203 -aXN0cmlidXRlZA== 26204 -bGlv 26205 -IHByb2R1Y3Rpdml0eQ== 26206 -X2NvbW0= 26207 -U3ByaW5n 26208 -bmlz 26209 -LndlaWdodA== 26210 -IENhbmNlcg== 26211 -QWxsb2M= 26212 -IFR3ZWV0 26213 -IHNlcGFyYXRlbHk= 26214 -CWNoZWNr 26215 -X3Byb3BlcnRpZXM= 26216 -LlVuaXQ= 26217 -ODI5 26218 -X0NMSw== 26219 -IGd0 26220 -ICgpOwoK 26221 -IGhhbmR5 26222 -ODM0 26223 -IFRob21wc29u 26224 -IHVubmVjZXNzYXJ5 26225 -IFJlYWRlcg== 26226 -ODk0 26227 -R04= 26228 -PXJlcXVlc3Q= 26229 -IFV0aWxpdHk= 26230 -LlJlcG9zaXRvcnk= 26231 -IEF4 26232 -aHlkcg== 26233 -Nzkx 26234 -aWV1 26235 -IHRoeQ== 26236 -IGx0 26237 -X21haWw= 26238 -5L+u5pS5 26239 -YWlsYW5k 26240 -IFBoaWxpcA== 26241 -IGJpdHRlcg== 26242 -IGJldHRpbmc= 26243 -ODM3 26244 -IHRpbWVk 26245 -b2Nrcw== 26246 -MDc2 26247 -J2E= 26248 -IGFsZ29yaXRobXM= 26249 -IHJlaW50ZXJwcmV0 26250 -IHRvc3M= 26251 -cm9nZW4= 26252 -IGhvcGVk 26253 -KHNlbGVjdGVk 26254 -IHZlbnR1cmU= 26255 -VEVY 26256 -IExlYXZl 26257 -LlN1YnN0cmluZw== 26258 -IGdyYXRlZnVs 26259 -NzQz 26260 -dWth 26261 -IENvbnN1bWVy 26262 -IGFnZ3JlZw== 26263 -Q2lyY2xl 26264 -4LiB 26265 -X2Jsb2Nrcw== 26266 -IGxlZ2FsbHk= 26267 -ICJ8 26268 -44OD 26269 -LmJvYXJk 26270 -LkFi 26271 -RnVuY3Rpb25z 26272 -cmVjaXBl 26273 -6Ic= 26274 -IE94Zm9yZA== 26275 -IHdob2xlcw== 26276 -LkJ1aWxk 26277 -X2NoYW5nZWQ= 26278 -aGFp 26279 -IGRlcGFydG1lbnRz 26280 -OTY0 26281 -SW1w 26282 -IGNvYWxpdGlvbg== 26283 -SU5GUklOR0VNRU5U 26284 -IGVtcG93ZXI= 26285 -aXRjaGVz 26286 -Tm9ydGg= 26287 -IGluZmxhbW0= 26288 -T05TRQ== 26289 -IG1pc3NpbGU= 26290 -IFJhag== 26291 -IElzc3Vl 26292 -IGF0b2k= 26293 -Y2FsZWQ= 26294 -LkNvbnRyb2xsZXJz 26295 -IFdvbGY= 26296 -IGNydXNoZXJz 26297 -4buH 26298 -LkF1dGg= 26299 -LmFkZEF0dHJpYnV0ZQ== 26300 -aGlz 26301 -IGJvb3Rz 26302 -LmNsZWFu 26303 -Y2FtcA== 26304 -IHRlbmFudA== 26305 -IHR1bmU= 26306 -IHt9Jy4= 26307 -IHdvcmtvdXQ= 26308 -UmVwbw== 26309 -IHBhcnRpYWxseQ== 26310 -TUlTU0lPTg== 26311 -amFtaW4= 26312 -IFNC 26313 -IGRldGVybWluYXRpb24= 26314 -ICcnKTsK 26315 -IEJlbmc= 26316 -IHZvcw== 26317 -IGluaGFi 26318 -L2xhbmc= 26319 -c2J1cmdo 26320 -RXhlY3V0b3I= 26321 -aG9uZQ== 26322 -IENoYWxsZW5nZQ== 26323 -X2xpbmtz 26324 -LkxldmVs 26325 -IHVuZGVyZ3JvdW5k 26326 -LWNvZGU= 26327 -OTU5 26328 -IG9wdGltaXphdGlvbg== 26329 -bG9nZ2luZw== 26330 -X2Rlc3Q= 26331 -IHNuYWtl 26332 -IGNoZW1pY2Fscw== 26333 -X0lNUE9SVEVE 26334 -YWRvb3A= 26335 -IFRIQVQ= 26336 -bWFuYWdlZA== 26337 -IHJlZHVjZXM= 26338 -IFJFQUw= 26339 -IEd1eQ== 26340 -X0dFTkVSSUM= 26341 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 26342 -LmFtb3VudA== 26343 -IGRlcmU= 26344 -Z2V0VGltZQ== 26345 -IHBhbnQ= 26346 -YW5vbnltb3Vz 26347 -IGhhcm1vbnk= 26348 -IEFsYW4= 26349 -IHNjZW5hcmlvcw== 26350 -IGRpcnQ= 26351 -aHRhZ3M= 26352 -TWM= 26353 -U2hlbGw= 26354 -cmlu 26355 -ew0KDQo= 26356 -LnBvdw== 26357 -CWNsaWVudA== 26358 -IGNvbnNwaXJhY3k= 26359 -IGFkbWlzc2lvbg== 26360 -IFJlZ2lvbmFs 26361 -IFZpZXdDb250cm9sbGVy 26362 -IFBoaWxpcHBpbmVz 26363 -IGRlcG9z 26364 -IHBhcA== 26365 -OTYy 26366 -IFBhZA== 26367 -UGF1bA== 26368 -LkNvbWJvQm94 26369 -IHR1dG9y 26370 -IFJlY2lwZQ== 26371 -d3JpdGluZw== 26372 -IGNvbnRyaWJ1dG9y 26373 -T1RI 26374 -U21hbGw= 26375 -Vkk= 26376 -IGhhY2Vy 26377 -ZXF1 26378 -IEV4YW1wbGVz 26379 -aHVtYW4= 26380 -Lm1lc3NhZ2Vz 26381 -CXR5cA== 26382 -ICgNCg== 26383 -IFNTTA== 26384 -TEVO 26385 -IFJvbW5leQ== 26386 -KGdyaWQ= 26387 -CW1pbg== 26388 -ID4KCg== 26389 -IGZydWl0cw== 26390 -IHZvdGVy 26391 -SW5saW5l 26392 -cGFuZQ== 26393 -IENvbGxlY3Rpb25z 26394 -Y2hhcnNldA== 26395 -IHNwYW0= 26396 -emI= 26397 -aXRlbWFw 26398 -IHN1Y2NlZWRlZA== 26399 -X0NPTA== 26400 -IGVsYXBzZWQ= 26401 -aW1ldGVy 26402 -IHJlY292ZXJlZA== 26403 -VGVuc29y 26404 -aGF0dGFu 26405 -LnNldHVw 26406 -aXN0bw== 26407 -KGhlYWQ= 26408 -OTc3 26409 -IFNJWkU= 26410 -IHRhY3RpY3M= 26411 -IGRpc3R1cg== 26412 -IHByZXZhbA== 26413 -aWNpb3M= 26414 -KFZhbHVl 26415 -X2NvbHM= 26416 -IEZhdA== 26417 -IHNlYWw= 26418 -IHNvbnM= 26419 -IGVuc3VyZXM= 26420 -MDk1 26421 -IHByZXNzaW5n 26422 -PSY= 26423 -aWdlbm91cw== 26424 -IGhhcmFzc21lbnQ= 26425 -X0pTT04= 26426 -IGlnbm9y 26427 -eW5vbWlhbA== 26428 -b21lcg== 26429 -X3N0YXRpYw== 26430 -IHNpZ25pZmljYW5jZQ== 26431 -IGNpcmNsZXM= 26432 -X1N5c3RlbQ== 26433 -IGRpc2NpcGxpbmU= 26434 -IGRyZXNzZWQ= 26435 -IHNwaGVyZQ== 26436 -OTI3 26437 -IGNsaW1i 26438 -NzU5 26439 -X2FjdGlvbnM= 26440 -IEJhYg== 26441 -ICc9Jyw= 26442 -X3NjaGVtYQ== 26443 -InVzZQ== 26444 -IHVuZGVycw== 26445 -IGN1cHM= 26446 -LnNjcmVlbg== 26447 -L25ldw== 26448 -IGFwcGVhcmluZw== 26449 -VE9Q 26450 -dmlzZWQ= 26451 -Y2xhbmc= 26452 -IGludmVzdGlnYXRvcnM= 26453 -IG15c3RlcmlvdXM= 26454 -IHByb21pc2luZw== 26455 -IHF1YWxpZnk= 26456 -IGNhdmU= 26457 -IGVxdWlw 26458 -PXg= 26459 -R1Q= 26460 -KGxpbms= 26461 -LnZlbG9jaXR5 26462 -LmVyYXNl 26463 -b3Rlcg== 26464 -KysrKysrKys= 26465 -cHJvZml0 26466 -IHpvbmVz 26467 -X3VpZA== 26468 -LXNlcg== 26469 -IG9iamVjdGl2ZXM= 26470 -IG1pbGY= 26471 -d2Via2l0 26472 -KG1hdGNo 26473 -bmVo 26474 -IEFzc29jaWF0ZWQ= 26475 -IFRvZG8= 26476 -PWQ= 26477 -MDY1 26478 -Q2Ft 26479 -IHZvY2Fs 26480 -IHN1ZG8= 26481 -KEVY 26482 -IHRyb3U= 26483 -QUJD 26484 -LmJlYW4= 26485 -IEdyb3VuZA== 26486 -IFJFU1Q= 26487 -d2VldHM= 26488 -SW5n 26489 -aW1vbg== 26490 -OTQ2 26491 -X2J1cw== 26492 -IENPTE9S 26493 -dW50bw== 26494 -IGZvc3M= 26495 -IExpbmtz 26496 -ODY5 26497 -w6RuZw== 26498 -L2Zvcm1z 26499 -cHJpc2Vz 26500 -IGFjaGlldmVtZW50 26501 -Q0FMTA== 26502 -0LXQu9GM 26503 -IFZlcmlmeQ== 26504 -X1NPVVJDRQ== 26505 -YXB0Y2hh 26506 -SURE 26507 -X3JlZmVyZW5jZQ== 26508 -R29sZA== 26509 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 26510 -OTQ3 26511 -UmVjZWl2ZXI= 26512 -MDk5 26513 -IGFq 26514 -X2RpcmVjdGlvbg== 26515 -fV0= 26516 -IENvbXBldA== 26517 -IGJhbmc= 26518 -Nzk4 26519 -IENhc3M= 26520 -LXVybA== 26521 -dGVjaG4= 26522 -IEplcnVzYWxlbQ== 26523 -bG9uZ2l0dWRl 26524 -Jyk7DQoNCg== 26525 -IHdpbm5lcnM= 26526 -VGFza3M= 26527 -IERNQQ== 26528 -IHRvb2x0aXA= 26529 -jrc= 26530 -IEJyYQ== 26531 -X2R1cmF0aW9u 26532 -Y3VyeQ== 26533 -cGFyZW50cw== 26534 -LS0tLTwv 26535 -IHBhc3Nwb3J0 26536 -ODQ5 26537 -V0M= 26538 -INC7 26539 -Y2Vzc2lvbg== 26540 -IFllbGxvdw== 26541 -IGVuY3J5cHRpb24= 26542 -JwoKCg== 26543 -IGxpc3Rpbmdz 26544 -IENvbW11bmljYXRpb25z 26545 -Ll8K 26546 -ICIiIg0K 26547 -IGZi 26548 -IHN0cmljdGx5 26549 -IExpdGVy 26550 -IEVudGVycHJpc2U= 26551 -X2JvdHRvbQ== 26552 -QUtF 26553 -a2V0 26554 -IHRhbQ== 26555 -QmV0d2Vlbg== 26556 -X1RPUA== 26557 -RGlzYWJsZQ== 26558 -IGZpbGluZw== 26559 -IENocm9u 26560 -U0VRVQ== 26561 -ICZfX18= 26562 -ODQ2 26563 -IGZhbA== 26564 -IFNMT1Q= 26565 -RW1iZWQ= 26566 -dXRoZXI= 26567 -IFJlc3RhdXJhbnQ= 26568 -IHJlYWxpc3RpYw== 26569 -IScpOwo= 26570 -IERFQUw= 26571 -IFBlcmlvZA== 26572 -LmdldFg= 26573 -IHNlaHI= 26574 -Il0nKS4= 26575 -OTQz 26576 -ZXNzYQ== 26577 -CW1lbWNweQ== 26578 -IGFja25vd2xlZGdlZA== 26579 -c2VuYWw= 26580 -IFVuaXZlcnNhbA== 26581 -ICcnOwoK 26582 -L3dpa2k= 26583 -aWVubmU= 26584 -IE5TQXJyYXk= 26585 -IGFjY2VwdGFuY2U= 26586 -IGxpdmVy 26587 -IHRvb3Ro 26588 -IGFjY3Vz 26589 -CUxPRw== 26590 -dmFsdQ== 26591 -5YC8 26592 -IHNlY3RvcnM= 26593 -cGVyaW1lbnRhbA== 26594 -L2NsYXNz 26595 -X2dv 26596 -TWljaGFlbA== 26597 -b2xhdGlsZQ== 26598 -IFBST0Y= 26599 -IGNvbXByb20= 26600 -c3BlY2lhbGNoYXJz 26601 -IOKc 26602 -IGlzRXF1YWxUb1N0cmluZw== 26603 -IEh1bmc= 26604 -LmFzTGlzdA== 26605 -L2dv 26606 -Pj4o 26607 -IEtpcg== 26608 -IGludHJvcw== 26609 -IHNrZXRjaA== 26610 -IHNraWxsZWQ= 26611 -IGltbWVy 26612 -IGFkZXF1YXRl 26613 -X3JlcA== 26614 -KGhlYWRlcg== 26615 -X2xpa2U= 26616 -IHBlcmNlaXZlZA== 26617 -c3No 26618 -IGFzc3VtaW5n 26619 -IGZm 26620 -X3V1aWQ= 26621 -dWxhcw== 26622 -IGRlbW9jcmF0aWM= 26623 -LmVudGl0aWVz 26624 -U2VyaWVz 26625 -YXBob3Jl 26626 -IG5ld2Vy 26627 -fSg= 26628 -U0VD 26629 -YWlybw== 26630 -IGNvbW1vZA== 26631 -IHByaXZpbGVnZQ== 26632 -IGRldXg= 26633 -IEhvcA== 26634 -Licv 26635 -Y3RpYw== 26636 -Lic7Cg== 26637 -PD89 26638 -IFVU 26639 -ZXRpZXM= 26640 -X0NPTlRFTlQ= 26641 -LnJlbGVhc2U= 26642 -LmRpc21pc3M= 26643 -IGZj 26644 -b3VuZ2U= 26645 -cHdk 26646 -X3ByZXY= 26647 -TWdy 26648 -IEJ1ZmZlcmVkUmVhZGVy 26649 -d3JpdHRlbg== 26650 -IEVi 26651 -ICkKCgo= 26652 -dWl0bw== 26653 -IGNvbnRyb3ZlcnN5 26654 -IGRpc3Bvc2Vk 26655 -IGZvdG8= 26656 -TGlzdFZpZXc= 26657 -L2NyZWF0ZQ== 26658 -IENPTA== 26659 -Y29tbXVuaWM= 26660 -MDY4 26661 -IGZyZWVseQ== 26662 -dW5hbA== 26663 -b3ZpZA== 26664 -CXRy 26665 -cGFnaW5hdGlvbg== 26666 -IENvbW1vbnM= 26667 -RWxlbQ== 26668 -IFJFTQ== 26669 -IGNvcnJlbGF0aW9u 26670 -KCkrIg== 26671 -IEhpZGU= 26672 -YW5kaW5n 26673 -KHZlYw== 26674 -aXRvcw== 26675 -IEN1bHQ= 26676 -IG51dHJpdGlvbg== 26677 -dmFscw== 26678 -IGRldGVybWluaW5n 26679 -bG9yZA== 26680 -IHNjYW5kYWw= 26681 -IHNoYWxsb3c= 26682 -b2Rhc2g= 26683 -X3NlcmlhbA== 26684 -IFNsbw== 26685 -IGRpc3Bvbg== 26686 -UGxvdA== 26687 -aWNrbGU= 26688 -IGVsbA== 26689 -IHVuZW1wbG95bWVudA== 26690 -Rk0= 26691 -cm9ucw== 26692 -bMSx 26693 -TW8= 26694 -RXhpc3Q= 26695 -SURT 26696 -Q2hv 26697 -IEtleWJvYXJk 26698 -LnBhcnNlcg== 26699 -LkdldE9iamVjdA== 26700 -IHNwZWxscw== 26701 -IGdlc2No 26702 -IG1hZ25pdHVkZQ== 26703 -X1NM 26704 -aXNkaWN0aW9u 26705 -ICcpOwo= 26706 -aWxpYW5z 26707 -IHNoYXI= 26708 -IFByb2I= 26709 -dWlsdGlu 26710 -IHR1bm5lbA== 26711 -PkM= 26712 -IFdhcnJlbg== 26713 -IG9wdGltaXplcg== 26714 -IFNFUlZJQ0VT 26715 -X29wZXI= 26716 -Z2V0QXR0cmlidXRl 26717 -IE1jSw== 26718 -X3NlbGY= 26719 -MDg0 26720 -LnJz 26721 -IikKCgo= 26722 -R2V0Q29tcG9uZW50 26723 -ZXJjZQ== 26724 -IHRvdXM= 26725 -dW5pdHM= 26726 -J10pOw0K 26727 -Wm9vbQ== 26728 -L0U= 26729 -IG9ic2M= 26730 -IGZhc3Rlc3Q= 26731 -b25saW5l 26732 -IHBlYWNlZnVs 26733 -ZmZlbg== 26734 -IGNhcmdv 26735 -CXBy 26736 -IHNlZWtz 26737 -enU= 26738 -MDc0 26739 -VHJpbQ== 26740 -IHdhcmQ= 26741 -IHZlcmQ= 26742 -IGJsb2dz 26743 -LmV4Y2VwdGlvbnM= 26744 -IFByZW1pdW0= 26745 -IE5ldGhlcmxhbmRz 26746 -U2FmZQ== 26747 -RmluaXNo 26748 -IEFsYnVt 26749 -X0FDQw== 26750 -PXRoaXM= 26751 -dmlydHVhbA== 26752 -XT4= 26753 -X0xBQkVM 26754 -IE5pY2g= 26755 -X3dpbg== 26756 -IEFhcm9u 26757 -V1A= 26758 -OyQ= 26759 -YWltcw== 26760 -IEltYWdlVmlldw== 26761 -IGVuZGxlc3M= 26762 -RVJB 26763 -X0RJU0FCTEU= 26764 -IGNhbmNlbGxlZA== 26765 -LXVz 26766 -IGluc3BlY3Rpb24= 26767 -ZW1pbg== 26768 -IEdyZXk= 26769 -LW9wZW4= 26770 -IGl0ZXJhdGlvbnM= 26771 -Lm93bmVy 26772 -IGtlcmFz 26773 -LlBhc3N3b3Jk 26774 -IFJ5 26775 -IElOUw== 26776 -QWly 26777 -IFNldmVyYWw= 26778 -LlRhYlN0b3A= 26779 -SU5HTEU= 26780 -IEhhaXI= 26781 -IENhbnZhcw== 26782 -QUFBQQ== 26783 -IGZsYXc= 26784 -Y2VkZXM= 26785 -LlJlcG9ydA== 26786 -7Yo= 26787 -IFRpcHM= 26788 -Y3JpcHRvcnM= 26789 -LnRyYW5zYWN0aW9u 26790 -LlNwcmluZw== 26791 -IHZpZXdlcg== 26792 -IGluc2lnaHRz 26793 -6L6T 26794 -b3JkaW9u 26795 -VUlOVA== 26796 -c2Vlaw== 26797 -IEF1Zg== 26798 -7J6Q 26799 -IHN0cmFpbg== 26800 -VG9vbHRpcA== 26801 -IGR6 26802 -aWduYWw= 26803 -YWR0 26804 -IHVj 26805 -ZmluaXRl 26806 -IG5t 26807 -LmNtZA== 26808 -IE15U3Fs 26809 -W2RhdGE= 26810 -LmphY2tzb24= 26811 -LnRyZWU= 26812 -UmVxdWVzdFBhcmFt 26813 -X2FnZW50 26814 -IildDQo= 26815 -IGFzc2Fzcw== 26816 -KENvbnN0YW50cw== 26817 -OnNz 26818 -IE1BTg== 26819 -Ky0rLQ== 26820 -IEJvdHRvbQ== 26821 -cHJpbnRz 26822 -IFNhbWU= 26823 -QEF1dG93aXJlZA== 26824 -c3dhcA== 26825 -aWNpw7Nu 26826 -IHByb3Rlc3RlcnM= 26827 -IGhvbmV5 26828 -IFZldGVy 26829 -KENhbGVuZGFy 26830 -LWFk 26831 -IEJyb29rbHlu 26832 -TGlmZQ== 26833 -X1ZBUg== 26834 -emVjaA== 26835 -IENBTEw= 26836 -X0NBU1Q= 26837 -IEVsZWN0aW9u 26838 -IHRoaWNrbmVzcw== 26839 -VmVyeQ== 26840 -X0lOVEVHRVI= 26841 -LWRldg== 26842 -KSkpKQ== 26843 -YXBhdA== 26844 -b29vbw== 26845 -ZGVtbw== 26846 -IHBhcnNlRmxvYXQ= 26847 -IFJhdGhlcg== 26848 -U1RJVA== 26849 -bWFrZXI= 26850 -W2N1cnJlbnQ= 26851 -Y2hyb25v 26852 -IGNocmlzdA== 26853 -44Gq 26854 -IERldGFpbA== 26855 -xrDhuw== 26856 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 26857 -IHN1bA== 26858 -aWRlbmN5 26859 -UXVl 26860 -IGVsZWdhbnQ= 26861 -YXBvbnM= 26862 -IGRpc2hlcw== 26863 -IGludGVnZXJz 26864 -KHJlYWQ= 26865 -MDU3 26866 -ZmluZFZpZXdCeUlk 26867 -IEFtb3VudA== 26868 -IFNraXA= 26869 -IGhhYml0cw== 26870 -Kiko 26871 -IG1vbnN0ZXJz 26872 -TUFD 26873 -OmVuZA== 26874 -IGZyYW5r 26875 -QXNzZW1ibHk= 26876 -IGRmcw== 26877 -IG5ldXQ= 26878 -X1RZUEVT 26879 -ZXF1YWw= 26880 -bG95ZA== 26881 -KHVyaQ== 26882 -IGNoaQ== 26883 -IGRlZmVuZGFudA== 26884 -IGNvbmZsaWN0cw== 26885 -IHZpbA== 26886 -LWpz 26887 -IFBlYWNl 26888 -IG11dGFibGU= 26889 -KXNlbmRlcg== 26890 -IEZvY3Vz 26891 -5bu6 26892 -IGFwcHJlY2lhdGVk 26893 -c2xlZXA= 26894 -IFJFRA== 26895 -Q3VsdHVyZQ== 26896 -IGRlc2lnbmVycw== 26897 -X2dlbmVyYXRvcg== 26898 -Y29kZXM= 26899 -L2V4 26900 -LkdldFZhbHVl 26901 -dW1ibGVk 26902 -LnNjYWxhanM= 26903 -cGVyb3I= 26904 -IHZldGVyYW5z 26905 -IH0pDQo= 26906 -IHVuZm9ydHVuYXRlbHk= 26907 -X0NSRUFURQ== 26908 -TWFzcw== 26909 -IENMQUlN 26910 -IE1lZXQ= 26911 -X3N1cHBvcnQ= 26912 -QmFuaw== 26913 -KCkuCg== 26914 -RGFyaw== 26915 -X0xPVw== 26916 -IE1pbmluZw== 26917 -IE93bmVy 26918 -aWVyYQ== 26919 -Q2xpZW50ZQ== 26920 -IGVuY291cmFnaW5n 26921 -PlM= 26922 -IGJveWZyaWVuZA== 26923 -IEhhbGY= 26924 -IEFDQw== 26925 -QWZm 26926 -X2Fy 26927 -LWxpZmU= 26928 -Y3g= 26929 -LkpCdXR0b24= 26930 -aXphZG8= 26931 -Lnplcm8= 26932 -Lm9wZW5xYQ== 26933 -b3Rvbg== 26934 -LnRleHRDb250ZW50 26935 -IHRvbGw= 26936 -YXRpZQ== 26937 -IGJhbGxvdA== 26938 -LW51bWJlcg== 26939 -LkV4Y2VwdGlvbg== 26940 -CXBhcmFtcw== 26941 -Y2lyY2xl 26942 -LW1hcA== 26943 -IG5hcA== 26944 -IFJvYm90 26945 -IEljaA== 26946 -cmVnaXN0cmF0aW9u 26947 -QW1hem9u 26948 -cm9sbG1lbnQ= 26949 -KGV4cA== 26950 -IHRhbmtz 26951 -IEdvcmRvbg== 26952 -IG1hY2hpbmVyeQ== 26953 -IGJhc2VsaW5l 26954 -5os= 26955 -MDg2 26956 -2Kk= 26957 -IENvbnZlbnRpb24= 26958 -CWNvbmZpZw== 26959 -b29raWVz 26960 -bXVsdA== 26961 -UmVjb3Jkcw== 26962 -IEVTVA== 26963 -IGdhcmJhZ2U= 26964 -IGNvbmZvcm0= 26965 -aWRhbA== 26966 -IGJhcmc= 26967 -IHN1cnZpdmVk 26968 -IGludmVzdGlnYXRpb25z 26969 -OTM1 26970 -LmNvbnRhaW5zS2V5 26971 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 26972 -b3J0aW9u 26973 -IGhvcnI= 26974 -X2h0dHA= 26975 -IG1hbnQ= 26976 -XTsNCg0K 26977 -YmluYXJ5 26978 -OTQ4 26979 -ZW1wbA== 26980 -IGlucXVpcnk= 26981 -IE1lYW53aGlsZQ== 26982 -MDk4 26983 -IGNvbGxlY3Rpbmc= 26984 -LkVudGl0eUZyYW1ld29yaw== 26985 -IiwKCg== 26986 -IFBpYw== 26987 -QEluamVjdA== 26988 -aWNrbmVzcw== 26989 -IEJpbmRpbmc= 26990 -IGNvbnRyb2xsaW5n 26991 -cmV2ZXJzZQ== 26992 -IGNoYWlycw== 26993 -c2VtYmxlZA== 26994 -KGFkZA== 26995 -RGlzYWJsZWQ= 26996 -YW5hcw== 26997 -LnRyYW5zbGF0ZQ== 26998 -LS0tLS0tLS0tLS0K 26999 -IHJlZmxlY3RlZA== 27000 -Il0KCg== 27001 -RXh0ZXJuYWw= 27002 -QXJyb3c= 27003 -U2luZ2xldG9u 27004 -JXg= 27005 -IMU= 27006 -IGFuY2VzdA== 27007 -IE9ybGVhbnM= 27008 -CWNtZA== 27009 -IHByb2hpYml0ZWQ= 27010 -aXRobWV0aWM= 27011 -KGNoYW5uZWw= 27012 -X2Nzcw== 27013 -Rm9yd2FyZA== 27014 -LnNvY2tldA== 27015 -IGx1Yw== 27016 -4oY= 27017 -IEZpcmVmb3g= 27018 -IE1vdmllcw== 27019 -KV8= 27020 -LmVuZHM= 27021 -KHNoYXBl 27022 -IGRlYWx0 27023 -IHNhdmVz 27024 -IGdsb3J5 27025 -IG1lam9y 27026 -IGJyZWF0aGluZw== 27027 -IGVsbGVy 27028 -Z2V0RGF0YQ== 27029 -IGFuZ2xlcw== 27030 -IHRvb2xiYXI= 27031 -IHNwYWNpbmc= 27032 -MDU5 27033 -SVBT 27034 -IGZsb29ycw== 27035 -X0FDVElWRQ== 27036 -IHNodWZmbGU= 27037 -L3NoYXJlZA== 27038 -IEVsZQ== 27039 -ZWRpc2g= 27040 -IHdlYmNhbQ== 27041 -LmV4cGVjdA== 27042 -aWxvYw== 27043 -IEluY2x1ZGVz 27044 -IHR3ZWV0ZWQ= 27045 -IDop 27046 -IEVzc2F5 27047 -Rml4 27048 -LWJldHdlZW4= 27049 -X3dlYg== 27050 -LmNvbnY= 27051 -IHJhY2lzbQ== 27052 -IHJlZmxlY3Rz 27053 -dW1t 27054 -0LjRgtC1 27055 -X2Zvb3Rlcg== 27056 -L2RvY3M= 27057 -IFBvdXI= 27058 -TmdNb2R1bGU= 27059 -LmluaXRpYWxpemU= 27060 -cGF0dGVybnM= 27061 -X0lu 27062 -IEFiYg== 27063 -Kg0K 27064 -IHNlbnRpbWVudA== 27065 -YnVmZg== 27066 -X2NvdW50cw== 27067 -IHJldXNl 27068 -Y2h1bms= 27069 -IGltcG9zZWQ= 27070 -UHJpbWFyeUtleQ== 27071 -Rm9yZWdyb3VuZA== 27072 -IGNvbnN1bWVk 27073 -PyE= 27074 -IGRpY2s= 27075 -IGNocm9u 27076 -IEZlcm4= 27077 -IHJlc3BvbnNpdmU= 27078 -OTU4 27079 -IGluc2VjdA== 27080 -aWN1bHR5 27081 -IHJ3 27082 -IGFsaWtl 27083 -IHN1YnNldA== 27084 -IENvb2tpZXM= 27085 -IFBhaXI= 27086 -IHRpZXI= 27087 -SUZP 27088 -YXZvdXI= 27089 -IFFV 27090 -LHNpemVvZg== 27091 -IG1lcmdlZA== 27092 -bXY= 27093 -aXRvbA== 27094 -eWxvbg== 27095 -IGp1bXBlZA== 27096 -LnJvbGU= 27097 -ZW5zYWpl 27098 -UnVsZXM= 27099 -IGJyb3dzZQ== 27100 -QW5pbWF0b3I= 27101 -IHlvZ2E= 27102 -IHZhcmlhbnRz 27103 -IGNvdXJ0ZXN5 27104 -dXJhbg== 27105 -cGJz 27106 -ZWxzZWlm 27107 -QWx0 27108 -IExhbmU= 27109 -Q0xL 27110 -SU1BUlk= 27111 -X1BST1BFUlRZ 27112 -77yQ 27113 -IGNoYW4= 27114 -IGdyYWR1YWxseQ== 27115 -IHNoYWtl 27116 -IGJsb25kZQ== 27117 -Li4uIik7Cg== 27118 -LXNleA== 27119 -IGdhbWVwbGF5 27120 -YWNpZXM= 27121 -LnJlZnJlc2g= 27122 -VVNC 27123 -IFBsb3Q= 27124 -V2Fz 27125 -aXNzaXBwaQ== 27126 -IFRlbnNvcg== 27127 -IGNyeXB0b2N1cnJlbmN5 27128 -IGRpZmZpY3VsdGllcw== 27129 -RGVsZXRlZA== 27130 -V2l0aG91dA== 27131 -X2FwcGVuZA== 27132 -X3Zlcg== 27133 -OTY3 27134 -IikpDQo= 27135 -IGhvbmVzdGx5 27136 -IHBpdm90 27137 -IHRlbXBz 27138 -X3Bz 27139 -IFVubGlrZQ== 27140 -Wzot 27141 -VlM= 27142 -X2luZg== 27143 -IGp1bmlvcg== 27144 -IGFuaW1hdGlvbnM= 27145 -IGZpbGVwYXRo 27146 -Pzwv 27147 -W1w= 27148 -IG9wZXJhdGVz 27149 -X3JlZA== 27150 -IEJvb3RzdHJhcA== 27151 -bGVhZA== 27152 -ZWZmZWN0 27153 -wr0= 27154 -IFN0ZXI= 27155 -IEJ1Y2s= 27156 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 27157 -IGRlcHV0eQ== 27158 -VGhhbg== 27159 -4bq/ 27160 -T05FTlQ= 27161 -IEhlYXQ= 27162 -ZXRoZWxlc3M= 27163 -XSl7Cg== 27164 -IGtvc3Rlbmxvcw== 27165 -KCk7Ly8= 27166 -IGRlcGxveWVk 27167 -Pnt7JA== 27168 -IHVuaWNvZGU= 27169 -cGxhY2Vz 27170 -IENvZmZlZQ== 27171 -LlNF 27172 -IFBBUg== 27173 -KHR4dA== 27174 -Z2VicmE= 27175 -IGZpcmVz 27176 -TWFpbldpbmRvdw== 27177 -bWVkaXVt 27178 -ICjigJw= 27179 -IGxn 27180 -IGNtcA== 27181 -L2Jhc2U= 27182 -X2xheWVycw== 27183 -X2VudHJpZXM= 27184 -IGFkbWluaXN0ZXI= 27185 -IFNVQ0g= 27186 -QlA= 27187 -IFNjb3R0aXNo 27188 -CQ0KCQ0K 27189 -Z3VhcmQ= 27190 -IFN0cm9uZw== 27191 -SW5zbg== 27192 -IENBUA== 27193 -YXN1cnk= 27194 -IFNFRQ== 27195 -Q2xvY2s= 27196 -ZXJpZQ== 27197 -XG1vZGVscw== 27198 -ICQk 27199 -IENhYg== 27200 -IHd1cmRl 27201 -IHNvbGRpZXI= 27202 -IGNsaXBz 27203 -IGFycmFuZ2VtZW50 27204 -IFdvbmRlcg== 27205 -IEhvcm4= 27206 -IHNjYXJlZA== 27207 -IGN1cmU= 27208 -bWtkaXI= 27209 -IGFsaWduZWQ= 27210 -IFBpbms= 27211 -IGxhbmRlZA== 27212 -RGltZW5zaW9u 27213 -U2Nyb2xsUGFuZQ== 27214 -LmNoYXQ= 27215 -LldpdGg= 27216 -IFRyYWlu 27217 -XS4K 27218 -IHRoaXJ0eQ== 27219 -IGR1cmFibGU= 27220 -IGxk 27221 -IGxhdGVpbml0 27222 -IGNoYXJ0cw== 27223 -IGluc3VsdA== 27224 -LkZhdGFs 27225 -X2N0 27226 -IG1hc2tz 27227 -Q0xVREVE 27228 -UHJlc2lkZW50 27229 -IGNvbG91cnM= 27230 -Z21lbnRz 27231 -LmF0dHJpYnV0ZXM= 27232 -IEZsZXg= 27233 -IENsb2Nr 27234 -w61jdWw= 27235 -aW1lbg== 27236 -Sk8= 27237 -IFJlZ2V4 27238 -X0xJTks= 27239 -IGNvdWNo 27240 -IElOUFVU 27241 -IGJlYXRpbmc= 27242 -YnVzaW5lc3M= 27243 -cHJlY2Vk 27244 -LnVuaXQ= 27245 -IEZlbA== 27246 -TmV2ZXI= 27247 -b3NwZWw= 27248 -LnN0YXJ0c3dpdGg= 27249 -IEVQQQ== 27250 -Lm9ubHk= 27251 -IHByZXZlbnRpbmc= 27252 -eWVy 27253 -Q29sdW1uTmFtZQ== 27254 -IGVsZXZhdGlvbg== 27255 -Zmx1 27256 -aWN5Y2xl 27257 -IG9mZmxpbmU= 27258 -VG9vbGJhcg== 27259 -IGNvbXBldGluZw== 27260 -KV0u 27261 -IG1vZw== 27262 -IGlzVmFsaWQ= 27263 -QXNr 27264 -X2F2 27265 -X2xhdA== 27266 -QU5D 27267 -IEpvaA== 27268 -a2Vycw== 27269 -IGd1YXJkcw== 27270 -IGNoYWlucw== 27271 -IFNpbXBsZURhdGVGb3JtYXQ= 27272 -LnN0YXRpYw== 27273 -IHZlc3NlbA== 27274 -IG11ZA== 27275 -IHN0YWJpbA== 27276 -IHN0cmV0 27277 -Z20= 27278 -YW1hdGlvbg== 27279 -55w= 27280 -LXdpdGg= 27281 -IHJvcw== 27282 -X1BB 27283 -IHJlc3VsdGFkbw== 27284 -IGNvbmZpZGVudGlhbA== 27285 -IFRva3lv 27286 -CXVzaW5n 27287 -IE1hdGhm 27288 -b21iaW5l 27289 -IEVTUE4= 27290 -IGRlYWxlcnM= 27291 -IGRpc21pc3NlZA== 27292 -VFJZ 27293 -IHRlZW5z 27294 -cmVjb3Jkcw== 27295 -IHdpbmdz 27296 -Z2FsbGVyeQ== 27297 -YWNjb3VudHM= 27298 -X0xJQg== 27299 -IGphY2tldA== 27300 -IE5TT2JqZWN0 27301 -IHN0b25lcw== 27302 -IERlbGl2ZXJ5 27303 -IERpZXQ= 27304 -L3dhdGNo 27305 -IHRvaWxldA== 27306 -IEd1ZXN0 27307 -LmRheQ== 27308 -MDY3 27309 -IGludHZhbA== 27310 -MDg3 27311 -VmlzaXQ= 27312 -IGludmVzdGlnYXRlZA== 27313 -IHBlbnRydQ== 27314 -IFRoZWF0cmU= 27315 -YW5kaWRhdGVz 27316 -TGFuZw== 27317 -IFNlcnY= 27318 -IGNvbnRyb2xsZXJz 27319 -IHNldFRpdGxl 27320 -TlA= 27321 -YW15 27322 -ZmxhdA== 27323 -KHVp 27324 -MDY5 27325 -X2RvY3VtZW50 27326 -6IO9 27327 -IENvaW4= 27328 -IEFkYW1z 27329 -cHRpYw== 27330 -IHByb2R1Y3RpdmU= 27331 -IGFjY29tcGxpc2hlZA== 27332 -DQoNCg0KDQo= 27333 -IGRlZmVycmVk 27334 -aWVudGVz 27335 -IHNpbmM= 27336 -b2xhcnM= 27337 -UmlnaHRhcnJvdw== 27338 -IHZhcmlhdGlvbnM= 27339 -KG9mZnNldA== 27340 -OTU3 27341 -LkxheW91dEluZmxhdGVy 27342 -IHN1c3BlbmQ= 27343 -IHByZXZlbnRpb24= 27344 -X3ByaXZhdGU= 27345 -X2pz 27346 -4piF 27347 -IHdpZWRlcg== 27348 -YXR1bQ== 27349 -kow= 27350 -IGFwcGVhcmFuY2Vz 27351 -LkRvY3VtZW50 27352 -IHZhbGlkYXRlcw== 27353 -Y2FsZW5kYXI= 27354 -fSI7Cg== 27355 -LmRlbW8= 27356 -Y29udXQ= 27357 -IGNvcnJlY3Rpb24= 27358 -IERlYWw= 27359 -IGJhdHRlcmllcw== 27360 -LmR1cmF0aW9u 27361 -LFw= 27362 -X21hcmtlcg== 27363 -bXVsdGk= 27364 -IGhhbHQ= 27365 -IGNtcw== 27366 -IHNoYXBlZA== 27367 -QnJv 27368 -cmVkdWNl 27369 -ICMjIyM= 27370 -Q1RPUg== 27371 -IEJlbmVm 27372 -IGljb25pYw== 27373 -IHBpYW5v 27374 -IGVmZmVjdGl2ZW5lc3M= 27375 -fC4K 27376 -IGFqYXg= 27377 -IHZvbHVtZXM= 27378 -4Lih 27379 -IGNsanM= 27380 -ICAgICAgICAgICAgICAK 27381 -YXRocw== 27382 -cmFpdHM= 27383 -5aSn 27384 -0ZY= 27385 -X211bHQ= 27386 -IGZhc2NpbmF0aW5n 27387 -QXZlcmFnZQ== 27388 -IHByw6k= 27389 -IENoYWlybWFu 27390 -LmZpbmRFbGVtZW50 27391 -X3Bpbg== 27392 -IGNvbXBhcmluZw== 27393 -IGRhcmtuZXNz 27394 -LUZp 27395 -LXNlcnZlcg== 27396 -IHNlbGVjdGluZw== 27397 -c3RlcmRhbQ== 27398 -IFBhcnRz 27399 -Rk9STUFUSU9O 27400 -IG5vdGluZw== 27401 -IHBpbGU= 27402 -b2dz 27403 -IHBhbGV0dGU= 27404 -X2Rv 27405 -aXRpemU= 27406 -MDc5 27407 -KCko 27408 -IGRlZmluaW5n 27409 -IHJlbWFpbmRlcg== 27410 -VW5pdHM= 27411 -X1RBU0s= 27412 -SHR0cENsaWVudA== 27413 -U29jaWFs 27414 -IGZ1bmRyYQ== 27415 -TlI= 27416 -Y2hlc3Q= 27417 -Q3VycmVuY3k= 27418 -LmFkYXB0ZXI= 27419 -IGRvcA== 27420 -dW50aW5n 27421 -QU5HVUFHRQ== 27422 -Ikhl 27423 -CWluZGV4 27424 -X3BhY2thZ2U= 27425 -Lkljb24= 27426 -IHJlcGV0 27427 -bWFzcw== 27428 -PSIuJA== 27429 -IFN1ZA== 27430 -IGxpZA== 27431 -cHJvdmluY2U= 27432 -7Jw= 27433 -R1BJTw== 27434 -0Jo= 27435 -IE15U1FM 27436 -IGRvY3M= 27437 -IEdB 27438 -IGlwc3Vt 27439 -S2VybmVs 27440 -IGFjY2VwdHM= 27441 -IGZpdHRpbmc= 27442 -IGN1YW5kbw== 27443 -IGR1cGxpYw== 27444 -IEJyb3RoZXI= 27445 -IEtsZQ== 27446 -bnVtcw== 27447 -IG1vcnBo 27448 -ICMjIyMjIyMj 27449 -IENHUG9pbnQ= 27450 -PHVuc2lnbmVk 27451 -5L6L 27452 -IER1a2U= 27453 -LnNldEJvdW5kcw== 27454 -cXM= 27455 -b3JpYw== 27456 -amVy 27457 -IHJlZ2FyZGVk 27458 -SHR0cFJlcXVlc3Q= 27459 -IGJvbmRz 27460 -IHRob3JvdWdobHk= 27461 -ZW5jZW50 27462 -IGhpZ2hsaWdodGVk 27463 -IGFjcmVz 27464 -IHdvcmtwbGFjZQ== 27465 -IEx1eA== 27466 -IHF1b3Q= 27467 -OTg2 27468 -LmluZmxhdGU= 27469 -IGRvY3VtZW50ZWQ= 27470 -IGFkZGljdGlvbg== 27471 -IG11dGF0aW9u 27472 -LmNpdHk= 27473 -IGJvdHRsZXM= 27474 -IFJlcG9zaXRvcnk= 27475 -b25u 27476 -ZXJybm8= 27477 -QVJJQUJMRQ== 27478 -5bqm 27479 -X0JFR0lO 27480 -Z2xhcw== 27481 -J30pCg== 27482 -IE1hc3NhZ2U= 27483 -IFdoaXQ= 27484 -cmVnZXg= 27485 -V0E= 27486 -IG91dGxldA== 27487 -LWhlYWQ= 27488 -IGV4cGlyZWQ= 27489 -IFRoYWk= 27490 -L2luY2x1ZGU= 27491 -Z3JhZGllbnQ= 27492 -c2NhbmY= 27493 -IHNlYW0= 27494 -d2Fs 27495 -CWJ1Zg== 27496 -QmVhcmVy 27497 -IHByZWNpb3Vz 27498 -aWZhY3Rz 27499 -Y29vcmQ= 27500 -IGV4cGxvcmF0aW9u 27501 -LmdldFk= 27502 -KGhhbmRsZQ== 27503 -VG9waWM= 27504 -IFZlbnQ= 27505 -cmhz 27506 -LS0tLS0tCg== 27507 -IEJyaWdodA== 27508 -IGd1aWxk 27509 -bW90aGVy 27510 -c3Rvcm0= 27511 -IG11bmljaXBhbA== 27512 -IGluaw== 27513 -LlRZUEU= 27514 -d2w= 27515 -Li4uPC8= 27516 -X0RFVg== 27517 -PSIuLw== 27518 -X2Jvb2s= 27519 -dGh5 27520 -aXR6ZXJsYW5k 27521 -b3BsZXM= 27522 -dHJhY3Rpb24= 27523 -IENhbWVyb24= 27524 -IEFuZHJl 27525 -LnJlc3VsdHM= 27526 -IGNocm9tZQ== 27527 -IHNlY3VyZWQ= 27528 -IHN1cmZhY2Vz 27529 -KTw= 27530 -IHRvYmFjY28= 27531 -CXNwcmludGY= 27532 -IGVzY2Fs 27533 -IHN0ZGVycg== 27534 -IE1lbGJvdXJuZQ== 27535 -IGRpc3RyaWN0cw== 27536 -IG1hdHQ= 27537 -b2hlbg== 27538 -IGRhdGFHcmlkVmlld0NlbGxTdHlsZQ== 27539 -KE1vZGVs 27540 -IHNlbnNpdGl2aXR5 27541 -S0E= 27542 -dHJhbnNwb3J0 27543 -LmdldERhdGU= 27544 -IHN1YnRsZQ== 27545 -VUdJTg== 27546 -Lm1vdXNl 27547 -IGFsdGVybmF0aXZlcw== 27548 -IGVsbGU= 27549 -Y29yYXRpb24= 27550 -cmVhdGlvbg== 27551 -5ps= 27552 -X05PUk1BTA== 27553 -RGlzcGxheU5hbWU= 27554 -IGZhbmN5 27555 -SVNFRA== 27556 -TU9E 27557 -LlJlYWRPbmx5 27558 -IFVi 27559 -IEN1 27560 -aWNvbA== 27561 -IE5lbHNvbg== 27562 -IENPUg== 27563 -YW56YQ== 27564 -IFNwYXJr 27565 -ICJcXA== 27566 -LS0KCg== 27567 -d29vY29tbWVyY2U= 27568 -IHJlbWVtYmVyZWQ= 27569 -dmVyaXR5 27570 -IEV4dGVuc2lvbg== 27571 -IFBE 27572 -IHNlYXJjaGVz 27573 -LnNv 27574 -IEZvb3Rlcg== 27575 -ID0n 27576 -IFdBUk5JTkc= 27577 -LWxv 27578 -CXRhYmxl 27579 -IGRyYXdlcg== 27580 -cGljdHVyZQ== 27581 -IEZhbnRhc3k= 27582 -c3Rvcnk= 27583 -IG3Dqm1l 27584 -IwoK 27585 -X3NsaWNl 27586 -b2x0YWdl 27587 -SGFy 27588 -L3k= 27589 -IEVS 27590 -ZGll 27591 -IFBPUw== 27592 -LmFjdGlvbnM= 27593 -KE1haW4= 27594 -ZXdhcnQ= 27595 -YXBldXQ= 27596 -IFNURQ== 27597 -aWRkaW5n 27598 -LnJlYWRMaW5l 27599 -IHNlYXJjaGVk 27600 -V2Vk 27601 -LmZpZ3VyZQ== 27602 -dWdodGVycw== 27603 -KCkuX18= 27604 -IG9yYml0 27605 -c2hpcHBpbmc= 27606 -IGZyaWVuZHNoaXA= 27607 -IFNoaWZ0 27608 -LW9y 27609 -cXVv 27610 -V0hFUkU= 27611 -IEVzcA== 27612 -LmZvcndhcmQ= 27613 -b2ZmaWNl 27614 -IGnDpw== 27615 -IENoZWxzZWE= 27616 -SXRlbVNlbGVjdGVk 27617 -YWNoZXJz 27618 -ZGVsZXRlZA== 27619 -cm91cw== 27620 -ICItIg== 27621 -IEdyYW4= 27622 -IPCfmA== 27623 -LXBvd2Vy 27624 -ZXR0YQ== 27625 -IHJlbWluZGVy 27626 -ZW5zb3Jz 27627 -IEFsbG93 27628 -xJlk 27629 -X3RlYW0= 27630 -IGNyb3du 27631 -dGlja2V0 27632 -IGNvbGxlY3Rpb25WaWV3 27633 -bGFjZQ== 27634 -IGZpeGVz 27635 -IEh1Yg== 27636 -Y2F0YWxvZw== 27637 -IElkZW50aXR5 27638 -IGV4Y2Vzc2l2ZQ== 27639 -IE5hdmlnYXRvcg== 27640 -X0JS 27641 -LXBsYXk= 27642 -IENhbXBhaWdu 27643 -ICAgICAgICAgICAgICAgCg== 27644 -YXNpdmU= 27645 -IHdj 27646 -IEJlaWppbmc= 27647 -L3d3dw== 27648 -IG1ha2V1cA== 27649 -IGRpc3RhbmNlcw== 27650 -IHNhdGlzZnk= 27651 -Q09ORA== 27652 -IHdvdW5k 27653 -KCld 27654 -IHZpb2xhdGlvbnM= 27655 -IHN0YXlz 27656 -LyM= 27657 -aWxpbmU= 27658 -XEV4Y2VwdGlvbg== 27659 -IE1vdGlvbg== 27660 -IGhlYWw= 27661 -X3BsYW4= 27662 -cmFzZXM= 27663 -KG1haW4= 27664 -QXBwbGU= 27665 -IGNvbXBsZXRpbmc= 27666 -IGRldGVybWluZXM= 27667 -U2Nhbg== 27668 -IHN0ZWFs 27669 -IFNvYw== 27670 -QW5hbHlzaXM= 27671 -IGZhdm9yaXRlcw== 27672 -IGNhbXBv 27673 -b25lcg== 27674 -IEZsaWdodA== 27675 -Li4uCgoKCg== 27676 -KSkpKSk7Cg== 27677 -LWNvdW50 27678 -IHB3 27679 -QXNTdHJpbmc= 27680 -IHNleHVhbGx5 27681 -Rmlyc3ROYW1l 27682 -IEVzY29ydA== 27683 -Y2FsYw== 27684 -IFdpa2lwZWRpYQ== 27685 -IGRvY2tlcg== 27686 -IFN3ZWV0 27687 -J2lk 27688 -SW50bw== 27689 -IEh1bnQ= 27690 -LmVxdWFsVG8= 27691 -IGxhYm9yYXRvcnk= 27692 -IEJVU0lORVNT 27693 -RmlsZURpYWxvZw== 27694 -VHJlZU5vZGU= 27695 -LkVuYw== 27696 -IE1heGltdW0= 27697 -IG1vdGhlcnM= 27698 -5rU= 27699 -IGZyYWN0 27700 -LnN0YXJ0c1dpdGg= 27701 -IGhhcmRjb3Jl 27702 -Lm9i 27703 -5aeL 27704 -ID48Lw== 27705 -X3Jv 27706 -KCgq 27707 -Pz8/Pw== 27708 -X3ZlcnRleA== 27709 -a2VpdA== 27710 -IEhhbGxvd2Vlbg== 27711 -VEk= 27712 -IFZh 27713 -X2Nhcg== 27714 -PSJ7eyQ= 27715 -IHJhbmRvbWx5 27716 -0LDQvdC40LU= 27717 -IHNob2NrZWQ= 27718 -IFBva8OpbW9u 27719 -c2lnbmFs 27720 -IFNESw== 27721 -bWlkZGxld2FyZQ== 27722 -IHRyZWF0aW5n 27723 -IGJ1cm5lZA== 27724 -RGVwYXJ0bWVudA== 27725 -IFNwZWN0 27726 -IGNsaWVudGU= 27727 -IFJlZGRpdA== 27728 -X2F2Zw== 27729 -IGluc3RhbGxpbmc= 27730 -X2FscGhh 27731 -LGRhdGE= 27732 -IHNldElk 27733 -IExpc3RWaWV3 27734 -KHByb3BlcnR5 27735 -IGNyb3NzaW5n 27736 -IE9iag== 27737 -IFdhcmQ= 27738 -IFJlZGlyZWN0VG8= 27739 -IFByZXNlbnQ= 27740 -IGRyYXdz 27741 -Y2hlZHVsZWQ= 27742 -IGxlZ2lzbGF0aXZl 27743 -IHR3aXN0 27744 -IFN0cmE= 27745 -IEFGUA== 27746 -IENoYXA= 27747 -LXBy 27748 -OkNHUmVjdA== 27749 -IGNlcw== 27750 -Um91dGVz 27751 -bm9m 27752 -IHZpc2E= 27753 -IFRDUA== 27754 -IEVWRU4= 27755 -aXZpYWw= 27756 -IExldHRlcg== 27757 -UkFZ 27758 -IGltcGxvZGU= 27759 -LmVx 27760 -PScr 27761 -IG1vdGl2YXRlZA== 27762 -LnZpc2libGU= 27763 -LnNob3J0 27764 -Pm1hbnVhbA== 27765 -IFRlY2huaWNhbA== 27766 -IGNvcnBvcmF0aW9u 27767 -IEhX 27768 -YW5rYQ== 27769 -VEFJTA== 27770 -aXN0YXM= 27771 -IHBlcmZvcm1z 27772 -IEJlaGF2aW9y 27773 -LkZvcg== 27774 -X09SREVS 27775 -IEtpY2s= 27776 -IGNhbGxiYWNrcw== 27777 -X2Ry 27778 -dWVnbw== 27779 -aHVi 27780 -dWZmaWNpZW50 27781 -c2t5 27782 -IGJw 27783 -aHRhYmxl 27784 -IE9OTFk= 27785 -IEFVVEhPUlM= 27786 -LkFyZ3VtZW50 27787 -In07Cg== 27788 -IFRodW5kZXI= 27789 -IEtvbQ== 27790 -LlNob3VsZA== 27791 -QVVUSA== 27792 -YWh1 27793 -X3BheW1lbnQ= 27794 -IHN0YXJ0ZXI= 27795 -7ISc 27796 -7Jqp 27797 -QmxvZw== 27798 -LnBhdGNo 27799 -IGdvdmVybmVk 27800 -YXNzeQ== 27801 -LWZvdW5k 27802 -IHRoZWF0ZXI= 27803 -IEZvbnRXZWlnaHQ= 27804 -IEJhdG1hbg== 27805 -Iklm 27806 -LlJhbmRvbQ== 27807 -X2RlbHRh 27808 -IENF 27809 -QXV0aGVudGljYXRlZA== 27810 -IGRyb25l 27811 -IGNvdXM= 27812 -cmFkaXVz 27813 -TWVy 27814 -KE5vbmU= 27815 -IE5K 27816 -X2hlYWRlcnM= 27817 -IGFtZXI= 27818 -cHl0ZXN0 27819 -IEFjdGlvbnM= 27820 -CQkJICAgIA== 27821 -IGV0dA== 27822 -IGhvbHk= 27823 -IHVuY29tZm9ydA== 27824 -IE5pbg== 27825 -IERlY2ltYWw= 27826 -IE1lc3NhZ2Vz 27827 -LnNlbmRlcg== 27828 -XV0pCg== 27829 -IGVtYnJhY2U= 27830 -VGhvdWdo 27831 -L3Nw 27832 -IGN1bHR1cmVz 27833 -IGhpZ2h3YXk= 27834 -dGFy 27835 -LmZhaWw= 27836 -X2hpZGRlbg== 27837 -IGNvbXBvbmVudERpZE1vdW50 27838 -IFdyaWdodA== 27839 -IGphZw== 27840 -X2ls 27841 -Li4vLi4vLi4v 27842 -aWd1 27843 -Rm9vZA== 27844 -IGFjZQ== 27845 -IGHDsW9z 27846 -VVNE 27847 -IG11dHVhbA== 27848 -TG9naWM= 27849 -IHRlbXBsZQ== 27850 -IGJyaWVmbHk= 27851 -IFRyaXA= 27852 -Y2xhc3NtZXRob2Q= 27853 -ZGVmYXVsdHM= 27854 -IGNodW5rcw== 27855 -LCwsLA== 27856 -IFJlYXNvbg== 27857 -JGlk 27858 -LXVwcw== 27859 -IGRhbW4= 27860 -IHRydWNrcw== 27861 -IHVubGltaXRlZA== 27862 -IHNjdWxwdA== 27863 -IENhcmRz 27864 -IGF1dG9y 27865 -IFRlc3Rpbmc= 27866 -IGRpZXNl 27867 -c2hvcHM= 27868 -57Q= 27869 -KHBheWxvYWQ= 27870 -IFBBVEg= 27871 -IE1lbW9yaWFs 27872 -IHJpZGljdWxvdXM= 27873 -ZWdyZWU= 27874 -LXdpbm5pbmc= 27875 -IHJlaGFi 27876 -IHNvcGhpc3RpY2F0ZWQ= 27877 -d3BkYg== 27878 -CXBhdGg= 27879 -ISI7Cg== 27880 -X1NZUw== 27881 -LnNwZWVk 27882 -IHNvYXA= 27883 -c3VmZml4 27884 -V3JhcA== 27885 -IGVuaGFuY2VtZW50 27886 -w4k= 27887 -w7pi 27888 -IHBsYXlsaXN0 27889 -IG1peGluZw== 27890 -YW50aWRhZA== 27891 -PSIiOwo= 27892 -IFJldmlzaW9u 27893 -IEJlYXQ= 27894 -LmluYw== 27895 -LXdheQ== 27896 -ZW5jaWFz 27897 -dWxlcnM= 27898 -Q2F0 27899 -aWRlbA== 27900 -IFNoaXA= 27901 -LnNldENvbG9y 27902 -IHRocmVhdGVuaW5n 27903 -Lm1vZHVsZXM= 27904 -IGFmdGVyd2FyZHM= 27905 -IERhc2hib2FyZA== 27906 -CiAK 27907 -U2lnbmFs 27908 -IHByaW1lcg== 27909 -b3JuZXlz 27910 -aWNpYXJ5 27911 -IGxpZ25l 27912 -X3ByZWRpY3Q= 27913 -IGFlc3Q= 27914 -X2h0dHBz 27915 -Pjo= 27916 -IExleA== 27917 -IHJlbmNvbnRyZXM= 27918 -ZWdyYWw= 27919 -c2NhbGE= 27920 -X2ZhbWlseQ== 27921 -w59lbg== 27922 -X3N5bQ== 27923 -IHVuY2VydGFpbnR5 27924 -IFZBTFVF 27925 -IH07DQoNCg== 27926 -IGJyb2FkZXI= 27927 -IGhvcnNlcw== 27928 -44Gd 27929 -IEthbA== 27930 -b2Jh 27931 -X0lORVQ= 27932 -IEtpbGw= 27933 -anF1ZXJ5 27934 -YW1pbmF0aW9u 27935 -W0Ai 27936 -IG11ag== 27937 -IyMjCg== 27938 -Rmlyc3RPckRlZmF1bHQ= 27939 -dGhlblJldHVybg== 27940 -Q2hl 27941 -L2Zvb3Rlcg== 27942 -IHBhcmtz 27943 -YXNqZQ== 27944 -IEd1bGY= 27945 -IG1vZGVzdA== 27946 -LkluaXQ= 27947 -77yfCgo= 27948 -IHByb3NwZWN0cw== 27949 -IHN2Zw== 27950 -IOWP 27951 -LkRpYWxvZw== 27952 -X05FVA== 27953 -ICgoJA== 27954 -IGVr 27955 -IFdhcm5pbmc= 27956 -IE1L 27957 -PExN 27958 -ICcNCg== 27959 -aWVt 27960 -aGV0aWM= 27961 -IGl4 27962 -dGhpbms= 27963 -LXNoYWRvdw== 27964 -IEVsZA== 27965 -IE5ldmFkYQ== 27966 -IExlYWY= 27967 -IEdST1VQ 27968 -IHByb21v 27969 -ZW50aW5l 27970 -CU1hcA== 27971 -IE1vZGVscw== 27972 -IEtyaXN0 27973 -X2tlcm5lbA== 27974 -LW1hZGU= 27975 -IGNlcnI= 27976 -QXNzZXRz 27977 -ZWxsYXI= 27978 -IGludm9rZWQ= 27979 -LnZ1ZQ== 27980 -IGN1bHRpdg== 27981 -Q2xvc2Vk 27982 -IGdlbmVyYXRlcw== 27983 -ZmZmZmZm 27984 -dGhlc2l6ZQ== 27985 -c3FydA== 27986 -IENhc3RsZQ== 27987 -LmNhcg== 27988 -IGtlZW4= 27989 -dW5kYQ== 27990 -IENyb3c= 27991 -IFNpbmdo 27992 -eXRob24= 27993 -IGJlYW5z 27994 -bGFyZw== 27995 -5paH5Lu2 27996 -QXdlc29tZQ== 27997 -dW5jYXRl 27998 -UGF0aHM= 27999 -b2pp 28000 -KGN1cnI= 28001 -Q09ORFM= 28002 -IG1pbQ== 28003 -IHNob3VsZGVycw== 28004 -SGFyZA== 28005 -YXN0ZXM= 28006 -0LDQtdGC 28007 -IGNvbnZpbmNl 28008 -ZGVjZXNz 28009 -bWFkZQ== 28010 -IENNRA== 28011 -Lklt 28012 -IGNoYW9z 28013 -ZW5zaXZlbHk= 28014 -IGNvb2xpbmc= 28015 -IGJ1cmllZA== 28016 -KCdA 28017 -X1Nl 28018 -CQkJCQkJCQkJCQkJCQkJCQ== 28019 -LmNvbXBhbnk= 28020 -LnN1Ym1pdA== 28021 -cGhhbnQ= 28022 -IGJvb3RzdHJhcA== 28023 -X2hlbHA= 28024 -4Kc= 28025 -LmR1bXA= 28026 -IGRpZmVy 28027 -X21hcHBpbmc= 28028 -IGNpcmN1bGFy 28029 -IGVzY29ydHM= 28030 -IGJlcmU= 28031 -IGdyYWR1 28032 -IExlZ2VuZA== 28033 -aW1lZGlh 28034 -IEJhcmNlbG9uYQ== 28035 -IGJlZHM= 28036 -5Yiw 28037 -44CK 28038 -X3ZvbHVtZQ== 28039 -IHRyZW1lbmRvdXM= 28040 -IHNjYWxpbmc= 28041 -IHBpbnM= 28042 -ZW5hcw== 28043 -dHlwZXBhcmFt 28044 -RGFzaGJvYXJk 28045 -cmVuZGVyZXI= 28046 -IHNwaQ== 28047 -ICYk 28048 -IFNraW4= 28049 -YWxtYXJ0 28050 -IGhvY2tleQ== 28051 -ICciLiQ= 28052 -IGVycm5v 28053 -IGJldw== 28054 -Rm9sbG93aW5n 28055 -Lk1vZHVsZQ== 28056 -ZXJhYmxl 28057 -IE1pbGl0YXJ5 28058 -IFJpbw== 28059 -X2F2YWlsYWJsZQ== 28060 -IFN1cmZhY2U= 28061 -IHN0YWI= 28062 -SUZJRVI= 28063 -IExJU1Q= 28064 -IGRhc2hib2FyZA== 28065 -IGNsdXN0ZXJz 28066 -LnBsdWdpbg== 28067 -IGpvdQ== 28068 -IERlY29y 28069 -Rm91cg== 28070 -IGRlbGxl 28071 -KioqKioqLwo= 28072 -aWF6 28073 -aW5kZQ== 28074 -Y2hpbmc= 28075 -IGdldEl0ZW0= 28076 -LkFkZHJlc3M= 28077 -bWVudGVk 28078 -QW1lcmlj 28079 -UGxhaW4= 28080 -IHVzYg== 28081 -IFByYWN0aWNl 28082 -X21lbnQ= 28083 -LmJsdWU= 28084 -SGludA== 28085 -0YDQsNCy 28086 -IGNvbm5lY3Rvcg== 28087 -IGluaGVyaXRlZA== 28088 -0LjQsg== 28089 -IGludGVydmFscw== 28090 -IGNlcmU= 28091 -IHVk 28092 -IGluY29u 28093 -LkV4aXN0cw== 28094 -IE1pYw== 28095 -Rks= 28096 -KGNhcmQ= 28097 -LlNldHRpbmdz 28098 -IGV4aGliaXRpb24= 28099 -IG9uUHJlc3NlZA== 28100 -IHJlc3RvcmVk 28101 -ZW5ndQ== 28102 -LmRlZg== 28103 -IHJlY3Y= 28104 -LiIpOw0K 28105 -ZW5jb2Rlcg== 28106 -YXRoZXJpbmU= 28107 -KGRlc3Q= 28108 -YXplZA== 28109 -I2VuZHJlZ2lvbg== 28110 -c2VtYmw= 28111 -LE0= 28112 -b2J5 28113 -INC/0LXRgA== 28114 -LkNhbGw= 28115 -IGF0dGVuZGFuY2U= 28116 -LWJvcmRlcg== 28117 -IGFkZHJlc3Npbmc= 28118 -w6pu 28119 -IExldg== 28120 -IGJhc2g= 28121 -YmVuY2g= 28122 -Q3JlZGVudGlhbHM= 28123 -U3BhY2luZw== 28124 -KG9m 28125 -X1JFU0VU 28126 -aWd1b3Vz 28127 -IGNydWVs 28128 -IGNyb3NzZWQ= 28129 -IGxldXI= 28130 -IEdvbGY= 28131 -b3JyZWN0 28132 -IHBhY2tldHM= 28133 -IERhdGFTZXQ= 28134 -IHBhcnRseQ== 28135 -U0VRVUVOVElBTA== 28136 -IGluZGljYXRpb24= 28137 -IFNhbHQ= 28138 -YWNpYQ== 28139 -ICopOwo= 28140 -CWluZm8= 28141 -IFZpZXdCYWc= 28142 -b256 28143 -IGVkaXRvcmlhbA== 28144 -IEFyZW5h 28145 -IHNpcg== 28146 -X1N0YXRpYw== 28147 -KHNvY2tldA== 28148 -c3U= 28149 -Y2hvb3Nl 28150 -Lm1vbnRo 28151 -Lk15 28152 -MDk2 28153 -w6lyaQ== 28154 -O2ZvbnQ= 28155 -ZG9lcw== 28156 -IGNvbnZlcnRlcg== 28157 -IHNhbHY= 28158 -IGxy 28159 -IGluZmx1ZW5jZWQ= 28160 -KGZlYXR1cmU= 28161 -IFF1ZWVucw== 28162 -bGV0dA== 28163 -X01PTg== 28164 -JmFtcA== 28165 -VG91Y2hhYmxlT3BhY2l0eQ== 28166 -T0ZG 28167 -IG1ldGFib2w= 28168 -KGl0ZXI= 28169 -IHZpdGFtaW4= 28170 -IElORElSRUNU 28171 -YXV0b20= 28172 -X3B1YmxpYw== 28173 -IGFkanVzdG1lbnQ= 28174 -IHNwZWNpYWxpemVk 28175 -d2luZG93cw== 28176 -LmFkZEFsbA== 28177 -IGFjY29yZGluZ2x5 28178 -IEpPcHRpb25QYW5l 28179 -IGNlbGxzcGFjaW5n 28180 -IHF1YWQ= 28181 -IGNyZWVw 28182 -IG91dGxldHM= 28183 -fWApCg== 28184 -IHByaWVzdA== 28185 -X1RIUkVBRA== 28186 -IE1hcng= 28187 -IEJ5VmFs 28188 -IGN1YWw= 28189 -6Z2i 28190 -IHRlbXBvcmFyaWx5 28191 -QW5u 28192 -a2VsZXRvbg== 28193 -5aU= 28194 -IExPQw== 28195 -YXVlcg== 28196 -ZGVyaXZl 28197 -IGJlaGF2aW9ycw== 28198 -YXNlbmFtZQ== 28199 -IENlbnR1cnk= 28200 -IGhvcnJpYmxl 28201 -TUVTUw== 28202 -X0xpc3Q= 28203 -d2Vp 28204 -UGF0 28205 -IENob2ljZQ== 28206 -X0ZST00= 28207 -CWxpbmU= 28208 -Lmludm9rZQ== 28209 -LkJvdHRvbQ== 28210 -IG5vd2hlcmU= 28211 -LiIKCgoK 28212 -X2V4cG9ydA== 28213 -IHN0cnVnZ2xlZA== 28214 -LkFwcGVhcmFuY2U= 28215 -IEpCdXR0b24= 28216 -IEplcmVteQ== 28217 -KFtb 28218 -IGtpY2tlZA== 28219 -bWFyc2hhbA== 28220 -c3RhZmY= 28221 -ZXNpdHk= 28222 -IHF1aXo= 28223 -X2VmZmVjdA== 28224 -IH0pKTsKCg== 28225 -bWVs 28226 -YmFubmVy 28227 -IFBJTg== 28228 -IGludmVudGlvbg== 28229 -IGNvbnNvbGlk 28230 -IG9wcw== 28231 -IEJldHdlZW4= 28232 -amFjaw== 28233 -ZXJuYXRpb25hbA== 28234 -IHNhY3JpZmljZQ== 28235 -YWdhdGlvbg== 28236 -IEpveQ== 28237 -IGFtZW5kbWVudA== 28238 -IFNvbGQ= 28239 -IHByaXNvbmVycw== 28240 -0LDQvdC90Ys= 28241 -RG9jdW1lbnRz 28242 -KV0pCg== 28243 -dXN0ZWQ= 28244 -IExpbmVhckxheW91dA== 28245 -b3Nv 28246 -X0VN 28247 -LnNlbGY= 28248 -Lk1pZGRsZQ== 28249 -KS8v 28250 -IFwn 28251 -IGZ1Y2tlZA== 28252 -IE11cnJheQ== 28253 -IHByb2ZvdW5k 28254 -X0VMRU1FTlQ= 28255 -dWx0YQ== 28256 -aWxlcnM= 28257 -cG9ydGZvbGlv 28258 -SnVuZQ== 28259 -dGNw 28260 -bW9kaWZpZWQ= 28261 -IFRyYWNl 28262 -IEtlbA== 28263 -YWx5emVy 28264 -KT0+ 28265 -IFJlcGFpcg== 28266 -X0JF 28267 -QnJhbmQ= 28268 -dWFydA== 28269 -cHJldmlldw== 28270 -IGluaXRpYXRpdmVz 28271 -cnVubmluZw== 28272 -YmFuZw== 28273 -CXVwZGF0ZQ== 28274 -IENvYWNo 28275 -UmljaA== 28276 -IHlvdXR1YmU= 28277 -IHJpdHVhbA== 28278 -YXBwYQ== 28279 -IFJvYmluc29u 28280 -cHJlY2lzaW9u 28281 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 28282 -PVtdCg== 28283 -IGNlbGVicmF0ZWQ= 28284 -T1RP 28285 -IGluY2x1c2lvbg== 28286 -SlA= 28287 -JzsNCg0K 28288 -IG5vdGFibGU= 28289 -KF8u 28290 -TWFuYWdlZA== 28291 -IGd1aWRlcw== 28292 -Jm5ic3A= 28293 -YXRlZFJvdXRl 28294 -IEFkanVzdA== 28295 -IGNvbG9yZWQ= 28296 -X3Njb3Jlcw== 28297 -IFRlc2xh 28298 -X3Byb2dyZXNz 28299 -Lmluc3Q= 28300 -Wydf 28301 -LmZsYWdz 28302 -IGZjbG9zZQ== 28303 -X09QRVI= 28304 -xbx5 28305 -X25vdGU= 28306 -IHRyYW5zZ2VuZGVy 28307 -5ZU= 28308 -UklQVA== 28309 -IGFic2VudA== 28310 -IGFtZXQ= 28311 -IG9wZXJhbmQ= 28312 -66k= 28313 -IGhvb2Q= 28314 -dG9Mb3dlckNhc2U= 28315 -YXZv 28316 -IENpcmN1aXQ= 28317 -IExpbmQ= 28318 -LS19fQo= 28319 -PW0= 28320 -IHN1cHByZXNz 28321 -IE1BUA== 28322 -aWFuZw== 28323 -LWFkbWlu 28324 -IHNpZGViYXI= 28325 -IEJ1 28326 -IEhleA== 28327 -LEY= 28328 -IFNpZ25hbA== 28329 -IHRyYW5zcGFyZW5jeQ== 28330 -IEZlZGVyYXRpb24= 28331 -L1Y= 28332 -UmVx 28333 -IHB1bHNl 28334 -IHRlbmRz 28335 -TnVtYmVycw== 28336 -JSc= 28337 -IGRlcG9ydA== 28338 -ZGF0YXM= 28339 -X1VJTlQ= 28340 -X3RyYQ== 28341 -b2tv 28342 -ICI/ 28343 -Y29tcGV0 28344 -c29sZXRl 28345 -dW5kcnk= 28346 -IG92ZXJsYXA= 28347 -fWAsCg== 28348 -Lmx5 28349 -X3N1bW1hcnk= 28350 -IExvc3Q= 28351 -LkNlbnRlcg== 28352 -IGRpc2FiaWxpdHk= 28353 -LlNlcmlhbGl6YXRpb24= 28354 -IGdlb20= 28355 -ID86 28356 -IFdv 28357 -IHNoaXBwZWQ= 28358 -guaVsA== 28359 -IHVnbHk= 28360 -IGV4Y2l0ZW1lbnQ= 28361 -IGV4dGVyaW9y 28362 -IGNoZWNrb3V0 28363 -IGt1cg== 28364 -LEQ= 28365 -IEFsYXNrYQ== 28366 -IHN5bnRoZXRpYw== 28367 -IEJ1ZGdldA== 28368 -IFN1YnNjcmliZQ== 28369 -ICYK 28370 -yJlp 28371 -IFl1 28372 -CXF1ZXJ5 28373 -fS4K 28374 -IHRyYWdlZA== 28375 -YXNzZW4= 28376 -IGFjY29tbW9kYXRpb24= 28377 -IHBoeXNpY2lhbg== 28378 -IHJlbmFtZWQ= 28379 -IHRpZGFr 28380 -esSF 28381 -IG1pbnVz 28382 -bnljaA== 28383 -MDk3 28384 -X0VYQ0VQVElPTg== 28385 -dGhyZWFkcw== 28386 -IHRpcmU= 28387 -X2NyZWF0ZWQ= 28388 -ZW5zdXJl 28389 -IHdvcnRoeQ== 28390 -IGV4Y3VzZQ== 28391 -IGNsb3Ro 28392 -LnBhcmVudE5vZGU= 28393 -L3BsYXRmb3Jt 28394 -IFVGQw== 28395 -IEd0aw== 28396 -dW5ueQ== 28397 -IGdpYnQ= 28398 -a2VsZXk= 28399 -aHVt 28400 -KHR4 28401 -CWRldg== 28402 -IG91dGZpdA== 28403 -ZG9vcnM= 28404 -IGZvbg== 28405 -aWN1dA== 28406 -dm9sYXRpbGU= 28407 -IGhvbW9zZXg= 28408 -TWF4aW11bQ== 28409 -IGV4cGVuZA== 28410 -IH0pOwoKCg== 28411 -RXE= 28412 -b25kZXJz 28413 -ZGVwYXJ0bWVudA== 28414 -IFBoeXNpY3M= 28415 -In0pOwo= 28416 -IHBhcmFk 28417 -LlN0cg== 28418 -IHNlbGU= 28419 -SUZJRUQ= 28420 -IGRlbGl2ZXJz 28421 -aXZhbg== 28422 -IHJlc3BvbnNpYmlsaXRpZXM= 28423 -IGFkdm9jYXRlcw== 28424 -6LU= 28425 -IFJJRA== 28426 -LnBhcmFtZXRlcnM= 28427 -TWV0cmljcw== 28428 -cm9uaWNz 28429 -IFVJVGFibGVWaWV3Q2VsbA== 28430 -QWJzb2x1dGU= 28431 -aXBzZQ== 28432 -eWx1bQ== 28433 -TUxFbGVtZW50 28434 -X1ZBTElE 28435 -PHRpdGxl 28436 -RGxn 28437 -cGFjZXM= 28438 -IHN5bmRyb21l 28439 -YmVhbnM= 28440 -X2RhdGFiYXNl 28441 -b3ppbGxh 28442 -IE1lZw== 28443 -REJH 28444 -IGx1Yg== 28445 -QmFnQ29uc3RyYWludHM= 28446 -YWJhZA== 28447 -IHByb2plY3RlZA== 28448 -X0JZVEU= 28449 -LlNpemVG 28450 -c3RyZWV0 28451 -CgoKCgoKCgoKCg== 28452 -IExPU1M= 28453 -IGRpcmVjdG9ycw== 28454 -L25ld3M= 28455 -IG51cnNpbmc= 28456 -IERvbmU= 28457 -LkhUVFA= 28458 -ZGlzY291bnQ= 28459 -IFJvdA== 28460 -VG9NYW55 28461 -IGVuYWJsaW5n 28462 -IGF1c3Np 28463 -b3N0YQ== 28464 -ICAgICAgICAgICAgICAgIA0K 28465 -6L29 28466 -IGhlbGljb3B0 28467 -IEluc2lkZQ== 28468 -5L+h5oGv 28469 -aXNwZXI= 28470 -IEFsbGFo 28471 -QVJDSEFS 28472 -IHJvbGxz 28473 -Q29tcGFyZQ== 28474 -WFA= 28475 -SW5kZXhPZg== 28476 -U1VN 28477 -IGFzc3VyZWQ= 28478 -IFBoeXNpY2Fs 28479 -RW5kcG9pbnQ= 28480 -Lkdsb2JhbA== 28481 -LmRldGFpbA== 28482 -IHRoZWZ0 28483 -Lmp1cGl0ZXI= 28484 -IGh1bW9y 28485 -LlJlbmRlcg== 28486 -QWxleA== 28487 -LmNhcA== 28488 -IGJ1ZmZlcnM= 28489 -IGRpc3Bvc2U= 28490 -dGlvbg== 28491 -LnByZXNlbnQ= 28492 -emVs 28493 -LFA= 28494 -IGRlc3BlcmF0ZQ== 28495 -LmdldENvbHVtbg== 28496 -IHR3aW4= 28497 -7JY= 28498 -LmNhbg== 28499 -IGZsZWU= 28500 -IElyYW5pYW4= 28501 -IHN0aWNreQ== 28502 -IFVUQw== 28503 -TFQ= 28504 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 28505 -IGxpY2Vuc2luZw== 28506 -X1BPSU5U 28507 -IE1hcHM= 28508 -IGxvbA== 28509 -PW1vZGVscw== 28510 -LXRhYg== 28511 -IE5hc2g= 28512 -X2xvZ2dlcg== 28513 -dG9yY2g= 28514 -IENPTlNFUVVFTlRJQUw= 28515 -Tm90RW1wdHk= 28516 -L3JlYWN0 28517 -IHBm 28518 -IGFzc2VydGlvbg== 28519 -IHN1YnNlcXVlbnRseQ== 28520 -X2Nhbg== 28521 -IHBhbmRlbWlj 28522 -b2d1ZQ== 28523 -IisK 28524 -X2VudA== 28525 -X1BhcmFt 28526 -LgoKCgoKCgoK 28527 -UmVzZWFyY2g= 28528 -Q2FwdHVyZQ== 28529 -IGJlbG92ZWQ= 28530 -ZGVt 28531 -IGV4dHJhY3RlZA== 28532 -IGZpZ2h0cw== 28533 -RVJD 28534 -KGF1dGg= 28535 -cG9zaXRpb25z 28536 -IHJldmVyc2Vk 28537 -KHN0YWNr 28538 -IF8p 28539 -dXRvZmY= 28540 -X2Zsb3c= 28541 -54K5 28542 -KEdhbWU= 28543 -IGV4Y2x1ZGVk 28544 -IENTVg== 28545 -Y2c= 28546 -IFRpdGFu 28547 -cGF1c2U= 28548 -IGNlcmNh 28549 -IGR1bXBzdGVy 28550 -TGVzcw== 28551 -IGtvdGxpbng= 28552 -YXN0ZXJ4bWw= 28553 -IHBvaW50ZXJz 28554 -IGZsb3dz 28555 -IFR1bg== 28556 -IE1haW5BY3Rpdml0eQ== 28557 -IGRpc2NyZXQ= 28558 -IGNvbWJpbmF0aW9ucw== 28559 -dmlzaXQ= 28560 -X2JpbmQ= 28561 -b290aW5n 28562 -ZGF0ZXI= 28563 -X2xvb2t1cA== 28564 -Lm5pbw== 28565 -IHN3ZWF0 28566 -IFJk 28567 -IHNjaWVudGlzdA== 28568 -IFBpeGVs 28569 -QE5nTW9kdWxl 28570 -UGxheWluZw== 28571 -IHVuZm9sZA== 28572 -VHJhbnNsYXRl 28573 -IExhd3JlbmNl 28574 -IEZJWE1F 28575 -QmlsbA== 28576 -IFJJR0hU 28577 -IHdoZXJldmVy 28578 -IG9vaw== 28579 -dmlkZW5jZQ== 28580 -IF1dOw== 28581 -IFNraWxs 28582 -dW5pc3Rk 28583 -IPCfmYI= 28584 -IGZlbWFsZXM= 28585 -LS0pCg== 28586 -jrflj5Y= 28587 -IEZyZWQ= 28588 -T3ZlcmFsbA== 28589 -2YI= 28590 -IGVzc2VuY2U= 28591 -IHRoZXJlYnk= 28592 -IHdvdW5kZWQ= 28593 -IERPV04= 28594 -bGVzc29u 28595 -dGV4dHVyZQ== 28596 -Um91bmQ= 28597 -IGF1dG9tYXRlZA== 28598 -INCh 28599 -IFVwZGF0ZXM= 28600 -IHNoYWRl 28601 -cHVibGlzaA== 28602 -IEdlYXI= 28603 -PWxhbWJkYQ== 28604 -IGxldmVy 28605 -KSsi 28606 -aGlsbA== 28607 -IHJhZGFy 28608 -cnlpbmc= 28609 -ICIpLg== 28610 -ZmlsbGVk 28611 -IGxpbmV1cA== 28612 -IGRs 28613 -IHdvcmtzcGFjZQ== 28614 -Vm8= 28615 -X2R0 28616 -67I= 28617 -X0l0ZW0= 28618 -TlNVUkw= 28619 -LnZlcmlmeQ== 28620 -IEhhd2FpaQ== 28621 -R29k 28622 -TWFyY2g= 28623 -IFvigKZd 28624 -IHBlbG8= 28625 -dXJpb3Vz 28626 -IFBpdHRzYnVyZ2g= 28627 -Lkl0 28628 -Q2xlYW4= 28629 -Plw8Xg== 28630 -IGlvcw== 28631 -c291bmQ= 28632 -Il07 28633 -IGZyZWVk 28634 -cm90dGxl 28635 -IExvd2Vy 28636 -W2NvdW50 28637 -5Z0= 28638 -IHBhbGU= 28639 -IFdheW5l 28640 -ZWFydGg= 28641 -X2NhdGVnb3JpZXM= 28642 -VUNL 28643 -Lm1ldGFkYXRh 28644 -IHN1bW1vbg== 28645 -SE9NRQ== 28646 -0L7Qu9GM0Lc= 28647 -IG1hbnVmYWN0dXJlZA== 28648 -IGRvY2s= 28649 -IGNvbXBldGl0b3Jz 28650 -X01PREVM 28651 -b2tpYQ== 28652 -IEhleQ== 28653 -zr8= 28654 -IGJhY2t3YXJk 28655 -IFBPU1M= 28656 -cm9wYQ== 28657 -IGNyaQ== 28658 -X09CSg== 28659 -VHJhbnNwb3J0 28660 -LWhpZ2g= 28661 -IGVyb3Rpaw== 28662 -X3Nsb3Q= 28663 -IGFydGlj 28664 -X2ZyYW1ld29yaw== 28665 -LXNlcmlm 28666 -IFNxbERiVHlwZQ== 28667 -Jyko 28668 -KyIv 28669 -IHdvcmU= 28670 -U2ls 28671 -IHN0b3Jpbmc= 28672 -IFBoYXNl 28673 -dWFudA== 28674 -IGJ1bXA= 28675 -aW5obw== 28676 -IGRpZ24= 28677 -IGJhY2tz 28678 -cXE= 28679 -KGhhc2g= 28680 -IGdlbw== 28681 -IHRlbmRlcg== 28682 -TG9nbw== 28683 -ISkK 28684 -IE1Y 28685 -IEFydGh1cg== 28686 -ZXNzb2E= 28687 -X0No 28688 -IGJlZHJvb21z 28689 -PSIjIj48 28690 -IHRocm9hdA== 28691 -aW5zaWM= 28692 -LmludGVnZXI= 28693 -IHByaW1pdGl2ZQ== 28694 -VHJ1dGh5 28695 -IGZhY2lsaXRhdGU= 28696 -IGNyZWF0aXZpdHk= 28697 -IEROUw== 28698 -IGdyYQ== 28699 -dWV6 28700 -IGNvdW50bGVzcw== 28701 -IFBvbGFuZA== 28702 -J00= 28703 -IERpc3Q= 28704 -IHZlc3Q= 28705 -IGNlcnRpZmljYXRpb24= 28706 -4buR 28707 -aGVsZA== 28708 -ZXh0ZW5zaW9ucw== 28709 -KHN0YXRpYw== 28710 -IGdyYWRlcw== 28711 -IFViZXI= 28712 -44Gf 28713 -IFtdKQo= 28714 -ZGF0b3M= 28715 -IGdldERhdGE= 28716 -IENoYXJn 28717 -IEJT 28718 -Lm1pY3Jvc29mdA== 28719 -LnZpZGVv 28720 -LmRpcmVjdGlvbg== 28721 -LT57Jw== 28722 -bHVh 28723 -YXBlc3Q= 28724 -IGJvaWxlcg== 28725 -ZXJlaw== 28726 -IGRlY2lkZXM= 28727 -Lmphcg== 28728 -SVND 28729 -IFdvcmRz 28730 -KENPTg== 28731 -RU1QTEFURQ== 28732 -cmVlemU= 28733 -c2hvdHM= 28734 -YXBwcw== 28735 -dW50ZWQ= 28736 -LnNldE5hbWU= 28737 -Ojo8 28738 -LWJvbGQ= 28739 -6rI= 28740 -5a+G 28741 -TG9uZ3JpZ2h0YXJyb3c= 28742 -IHVuZmFpcg== 28743 -IGVhcm5pbmc= 28744 -IHNoZWxm 28745 -VVJFTUVOVA== 28746 -IGlkbGU= 28747 -X01FTlU= 28748 -LkN1c3RvbQ== 28749 -QUdFUg== 28750 -LSI= 28751 -X3N3aXRjaA== 28752 -YmVjYXVzZQ== 28753 -KXZpZXc= 28754 -bWFyZQ== 28755 -X2NvbmRpdGlvbg== 28756 -IFN0YXJ0aW5n 28757 -TXZj 28758 -KHByZQ== 28759 -ZHVtcA== 28760 -X0xPQ0s= 28761 -YXRldGltZQ== 28762 -LmNhbGxiYWNr 28763 -IENlcg== 28764 -b3BvbA== 28765 -aWJyYXJ5 28766 -IHJlc2VydmF0aW9u 28767 -CQkJCQkJCQo= 28768 -bGVjdG9y 28769 -Z3JhZHVhdGU= 28770 -IGdlbmVyb3Vz 28771 -IGlvbg== 28772 -cmljYW8= 28773 -bXE= 28774 -X2NvbXBsZXRl 28775 -KGN1cnNvcg== 28776 -IEZvcm1Db250cm9s 28777 -OmNlbnRlcg== 28778 -IHN1YnN0aXR1dGU= 28779 -IFBsYW5uaW5n 28780 -IHBlbnNpb24= 28781 -IHJlY29tbWVuZGF0aW9u 28782 -IFRhZ3M= 28783 -IGdlZg== 28784 -IGFsYnVtcw== 28785 -IHdhc2hpbmc= 28786 -cm9j 28787 -IHRyYWlucw== 28788 -YXRpbmdz 28789 -IGV4cG9uZW50 28790 -YWNrYmFy 28791 -LWxu 28792 -w6Fn 28793 -LkRhdGFBbm5vdGF0aW9ucw== 28794 -IEVJRg== 28795 -IE1hbGF5c2lh 28796 -CVBPUlQ= 28797 -b251cw== 28798 -IGNsZXZlcg== 28799 -IHBldQ== 28800 -PgoKCgo= 28801 -IEFyZ3VtZW50cw== 28802 -IGRlYnVnZ2luZw== 28803 -KHJpZ2h0 28804 -J0Q= 28805 -Y29tcHV0ZQ== 28806 -IGZpbmVzdA== 28807 -T1JBR0U= 28808 -IHNwZWN0YWN1bGFy 28809 -cGhyYXNl 28810 -IGluZGlh 28811 -IGxlZ2VuZGFyeQ== 28812 -YmlydGg= 28813 -IGNvbXBvc2l0ZQ== 28814 -IGdyb3dz 28815 -IFRE 28816 -IGVwaWQ= 28817 -IGxhdW5jaGluZw== 28818 -XV1b 28819 -TWludXRlcw== 28820 -IENoYQ== 28821 -IGNsZWFuZWQ= 28822 -IHdpdG5lc3Nlcw== 28823 -dWthbg== 28824 -CVR5cGU= 28825 -IGhhYmU= 28826 -cGFyYWdyYXBo 28827 -IEpQYW5lbA== 28828 -IEhhbm4= 28829 -IHZhcmllZA== 28830 -IFBva2Vtb24= 28831 -IE1VU1Q= 28832 -5Yqo 28833 -LnZpc2liaWxpdHk= 28834 -b3B1cA== 28835 -Xls= 28836 -LmV4cGFuZA== 28837 -ICInLA== 28838 -LmZhc3RlcnhtbA== 28839 -X2F1dG8= 28840 -IFNoZWV0 28841 -bWFya2Vy 28842 -UGFyY2Vs 28843 -ZXdz 28844 -IFN0cmF0ZWd5 28845 -LW1ha2luZw== 28846 -IHVudmU= 28847 -IHRyYWlsaW5n 28848 -IGNsaWNrcw== 28849 -IEdldENvbXBvbmVudA== 28850 -CWNvbnRlbnQ= 28851 -SUdFTkNF 28852 -RVJORUw= 28853 -TlNNdXRhYmxlQXJyYXk= 28854 -IGJyZWF0 28855 -IGhhcm1mdWw= 28856 -tog= 28857 -IGJlc2lkZXM= 28858 -IGJvcmluZw== 28859 -IGJydXRhbA== 28860 -dmFuZw== 28861 -KHBhcnNl 28862 -cXVpY2s= 28863 -IHB5dGVzdA== 28864 -IHN3aXRjaGluZw== 28865 -KCldCg== 28866 -IOyE 28867 -TEVS 28868 -CWZvbnQ= 28869 -IG5ldHQ= 28870 -KV0KCg== 28871 -KC9c 28872 -5p6c 28873 -dG9BcnJheQ== 28874 -IGJyZWVk 28875 -IENBUg== 28876 -IFdlYXBvbg== 28877 -QWJz 28878 -dG90 28879 -IHNldE5hbWU= 28880 -YXB0aXZl 28881 -IDos 28882 -IGVzY2FwZWQ= 28883 -b3JkZW4= 28884 -IFByaQ== 28885 -dGh1bWJuYWls 28886 -IGRlc2NyaXB0aW9ucw== 28887 -L3N0eWxlcw== 28888 -IFBDSQ== 28889 -IGFscGhhYmV0 28890 -YXN0aWNzZWFyY2g= 28891 -Tk9URQ== 28892 -IGNpYWxpcw== 28893 -IEdyaWZm 28894 -IHBvcnF1ZQ== 28895 -IHByb3RlaW5z 28896 -cGxheXM= 28897 -IHN0YXRpbmc= 28898 -IGltYWdpbmF0aW9u 28899 -IGZhY2lhbA== 28900 -IE1lY2hhbg== 28901 -IGFycmFuZ2Vk 28902 -X3VzZWQ= 28903 -IGFycmFuZ2VtZW50cw== 28904 -IFBpcGU= 28905 -aG9zdG5hbWU= 28906 -IHByb3ZpbmM= 28907 -VGl0 28908 -LkZsYXRTdHlsZQ== 28909 -IFNwbGl0 28910 -IExvYWRlcg== 28911 -LmNj 28912 -IGNsaW5pYw== 28913 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 28914 -IGJha2luZw== 28915 -IEVOVA== 28916 -bmVhdGg= 28917 -44CBCgo= 28918 -QU5F 28919 -LkVudGl0eUZyYW1ld29ya0NvcmU= 28920 -YXBwZXJz 28921 -Lmlj 28922 -IE5nTW9kdWxl 28923 -IEZPUk0= 28924 -ICc7 28925 -LXByb2ZpdA== 28926 -aHc= 28927 -ZW5lbXk= 28928 -IEV5ZQ== 28929 -IGNhdXRpb24= 28930 -dG93bg== 28931 -IHVyZ2Vk 28932 -IEppbW15 28933 -eW5jaHJvbm91cw== 28934 -LXNpemVk 28935 -bWFraW5n 28936 -LHs= 28937 -XScs 28938 -X09iamVjdA== 28939 -YWhvbWE= 28940 -IGFjdGl2aXN0 28941 -SU5WQUw= 28942 -IENvbW1lcmNpYWw= 28943 -IE9ybGFuZG8= 28944 -KHRhYg== 28945 -INio 28946 -QWxnb3JpdGht 28947 -IGhlcml0YWdl 28948 -R2V0TWFwcGluZw== 28949 -IGZhaWx1cmVz 28950 -cmlvcw== 28951 -YXRpdmE= 28952 -IHRldA== 28953 -IGNhcnBldA== 28954 -KFo= 28955 -dGhyZWU= 28956 -IGRpc2Nsb3N1cmU= 28957 -LkVSUk9S 28958 -X2NhbGxlZA== 28959 -IGRpYWw= 28960 -IG9jY2FzaW9uYWw= 28961 -LkVycg== 28962 -IGZ1bmNpb24= 28963 -Y2FmZm9sZA== 28964 -IHJlbGVhc2luZw== 28965 -77yJCgo= 28966 -X1ZhbHVl 28967 -IFZhcmk= 28968 -eWVsbG93 28969 -IHN0cnVnZ2xlcw== 28970 -LmNhbA== 28971 -IERha290YQ== 28972 -CWNsb3Nl 28973 -IHNhbmR3aWNo 28974 -IGFuYWx5dGljcw== 28975 -ICoqKQ== 28976 -JiM= 28977 -IEpvcw== 28978 -IHBhc3NpdmU= 28979 -QVRUUg== 28980 -VGhyb3dhYmxl 28981 -IE11bg== 28982 -IFVpbnQ= 28983 -KGRpc3Bvc2luZw== 28984 -YXJhaw== 28985 -IExlYWRlcnM= 28986 -IGFmZmVjdGluZw== 28987 -IGl0ZW1WaWV3 28988 -IGVjb25vbWljcw== 28989 -ZnY= 28990 -4LmA 28991 -LnJi 28992 -IE92ZXJhbGw= 28993 -IHdlYWx0aHk= 28994 -IGV2b2x2ZWQ= 28995 -bmRh 28996 -IEh1cw== 28997 -cmVzdHJpY3Q= 28998 -dW1lbg== 28999 -IEFncmljdWx0 29000 -IQoKCg== 29001 -IGV4cGlyZXM= 29002 -IHNwb2tlc3BlcnNvbg== 29003 -aW50ZXJ2YWw= 29004 -IMOi 29005 -IHF1ZWVu 29006 -KG5pbA== 29007 -aW5nbw== 29008 -SGVhcA== 29009 -2Y4= 29010 -IGNvbXBsYWlu 29011 -U3lt 29012 -IENsb25l 29013 -IFJ1 29014 -IFdJTEw= 29015 -IENyeXN0YWw= 29016 -L2NvbnRlbnQ= 29017 -aW5nZW4= 29018 -b2ludG1lbnQ= 29019 -TGFzdE5hbWU= 29020 -YXZpY29u 29021 -IElCTQ== 29022 -IERpbWVuc2lvbg== 29023 -YW5o 29024 -aWNpcGFudHM= 29025 -IEFubmU= 29026 -LnByb2dyZXNz 29027 -IGFsZ28= 29028 -b2JpbA== 29029 -IFZvaWNl 29030 -IEZF 29031 -IGdsaQ== 29032 -IHZlZA== 29033 -IHByZXZlbnRz 29034 -XENvbHVtbg== 29035 -IGZvbGs= 29036 -ZXR0aQ== 29037 -IG1u 29038 -IENMQVNT 29039 -IGRpc3BsYXlpbmc= 29040 -IEts 29041 -IEZlcnI= 29042 -ZHV0bw== 29043 -Lmli 29044 -IGRhZG9z 29045 -J25hbWU= 29046 -LXNwYWNl 29047 -IGl0YWxpYW4= 29048 -IGludmVyc2U= 29049 -IGRlbnNl 29050 -dXRlcg== 29051 -IElFbnVtZXJhdG9y 29052 -LXNpZ24= 29053 -IG5hdGlvbndpZGU= 29054 -IHBlcnNvbmE= 29055 -IHNvbHZlZA== 29056 -IGRyYW1hdGljYWxseQ== 29057 -TG9nb3V0 29058 -IGdyYXY= 29059 -IGFuYWx5c2Vz 29060 -b2xsbw== 29061 -IGxhbXA= 29062 -LnRlYW0= 29063 -IEVyb3Q= 29064 -PVsi 29065 -IGRhbmNpbmc= 29066 -ID8+Lw== 29067 -IGNhdGVy 29068 -ZmZl 29069 -IFNoYQ== 29070 -IEJvcw== 29071 -IFJFUVVJUkU= 29072 -IE1vbnN0ZXI= 29073 -IFJC 29074 -IElERQ== 29075 -IHN1aXRz 29076 -IGZvcm1EYXRh 29077 -KHRoZXRh 29078 -IHNwYXRpYWw= 29079 -PU5VTEw= 29080 -IFNxbENvbm5lY3Rpb24= 29081 -IOA= 29082 -IFZlbmV6 29083 -IE1vcm5pbmc= 29084 -IHB1YmxpY2F0aW9ucw== 29085 -IE5PTklORlJJTkdFTUVOVA== 29086 -Zmlyc3ROYW1l 29087 -dWRz 29088 -V291bGQ= 29089 -X0hFQUQ= 29090 -IGludmVzdGVk 29091 -c3RhYmxl 29092 -ZnJlZA== 29093 -IGNvbW1hbmRlcg== 29094 -U0VT 29095 -4oCUYQ== 29096 -YW5jaGU= 29097 -IE1vdmVtZW50 29098 -67M= 29099 -U3VpdGU= 29100 -IGp1cmlzZGljdGlvbg== 29101 -66as 29102 -IEJldGg= 29103 -alF1ZXJ5 29104 -IElzYQ== 29105 -IGRlbnRhbA== 29106 -LCo= 29107 -IExpbWl0 29108 -aWxpYXRpb24= 29109 -PSJ7 29110 -YmFzdA== 29111 -IHR1cmI= 29112 -aXN5 29113 -T09L 29114 -IGFkdm9jYXRl 29115 -aW1hZw== 29116 -TEVDVElPTg== 29117 -0LvRjA== 29118 -KGNhdGVnb3J5 29119 -LmRlYw== 29120 -IHVuaXF1 29121 -X3Nu 29122 -IGF0dHJhY3RlZA== 29123 -IMOJ 29124 -IFJ1bm5pbmc= 29125 -X2VkZ2Vz 29126 -IERpc2FibGU= 29127 -X0FT 29128 -5Zu+ 29129 -IG5ldHdvcmtpbmc= 29130 -X2JyYW5jaA== 29131 -SGF2aW5n 29132 -dG9CZVRydXRoeQ== 29133 -R0k= 29134 -IGNhbXBz 29135 -c2Vw 29136 -LXBhcnQ= 29137 -ICkKCgoKCgoKCg== 29138 -dXN0cmFsaWE= 29139 -IFJlcG9ydHM= 29140 -cml0bw== 29141 -IHdhaXN0 29142 -X3BsdXM= 29143 -IFdX 29144 -LXBlcnNvbg== 29145 -QXByaWw= 29146 -IHNhcg== 29147 -LnRhcg== 29148 -IGFncmljdWx0dXJhbA== 29149 -dGlj 29150 -IHRjcA== 29151 -IHNldFZhbHVl 29152 -YWdlbnRv 29153 -IEFwcGU= 29154 -cGlsZXI= 29155 -Q0FERQ== 29156 -IGFuY2hl 29157 -YXRjaGVy 29158 -IGNvbWljcw== 29159 -IGxicw== 29160 -X3NlZ21lbnQ= 29161 -J109JA== 29162 -aXR0ZXJz 29163 -aWNoZXI= 29164 -R0lORQ== 29165 -IHV0aWxpemU= 29166 -IEN1cnNvcg== 29167 -X2V4cHJlc3Npb24= 29168 -IGRhZw== 29169 -PGxvbmc= 29170 -IHJoeXRo 29171 -5o+Q 29172 -IGNvbnN1bHRhdGlvbg== 29173 -WWV0 29174 -IikpCgo= 29175 -X01BQw== 29176 -Y291bGQ= 29177 -ICdcXA== 29178 -IFZv 29179 -CWh0dHA= 29180 -IGdz 29181 -cGhlcg== 29182 -LWdyaWQ= 29183 -SmFtZXM= 29184 -SnVs 29185 -IHNjaG9u 29186 -IHRlbnNvcmZsb3c= 29187 -IExPR0dFUg== 29188 -YW1hcw== 29189 -IHNjaXB5 29190 -IGNvbnZpY3Rpb24= 29191 -LmFn 29192 -IGFkbWluaXN0cmF0b3I= 29193 -KSl7DQo= 29194 -IG51bg== 29195 -Imdyb3Vw 29196 -UG9y 29197 -IG51cnNl 29198 -ZXhwcmVzc2lvbg== 29199 -YWt5 29200 -IEhlYXZ5 29201 -Lm9wdA== 29202 -LmdldEFsbA== 29203 -IG92ZXJs 29204 -LyIs 29205 -X2NvdW50cnk= 29206 -544= 29207 -IEdFTkVS 29208 -X3JvdXRl 29209 -IERhbA== 29210 -wrQ= 29211 -b2xvYWQ= 29212 -IHVuY29tZm9ydGFibGU= 29213 -KG1lbnU= 29214 -IGhvc3RuYW1l 29215 -JyIpOwo= 29216 -IGNhbGN1bGF0aW9ucw== 29217 -LWNsaWNr 29218 -IHByb3RlY3RpdmU= 29219 -44Kv 29220 -X0Zvcm0= 29221 -dW5ncw== 29222 -QWN0dWFs 29223 -bWY= 29224 -IFByb2Nlc3Npbmc= 29225 -IEludmVudG9yeQ== 29226 -KG1hdHJpeA== 29227 -YXBwcm9wcmlhdGU= 29228 -d2Vn 29229 -aWph 29230 -IGNocg== 29231 -IHJpZmxl 29232 -LXdzag== 29233 -a2Fy 29234 -IGluZGVwZW5kZW50bHk= 29235 -SU9T 29236 -IGNvbnNpc3RlbmN5 29237 -dm4= 29238 -L3N5c3RlbQ== 29239 -IENoYW5nZXM= 29240 -IGV4cG9zZQ== 29241 -aWNpZW50cw== 29242 -IHJlbGF0ZQ== 29243 -CW5leHQ= 29244 -6Kg= 29245 -dWRlcw== 29246 -IGdsYXNzZXM= 29247 -RlhNTA== 29248 -Li4uLi4u 29249 -IFBkZg== 29250 -IGFwcHJvdmU= 29251 -IHtc 29252 -IGV4aXN0ZQ== 29253 -KSko 29254 -QVJFTlQ= 29255 -0L7Qvw== 29256 -IExhdGVzdA== 29257 -IE5pZ2VyaWE= 29258 -LkludGVyZmFjZXM= 29259 -IHJlbW92ZXM= 29260 -RW5lbXk= 29261 -IGVuZm9yY2U= 29262 -dmVydHM= 29263 -CXBvcw== 29264 -X3RleHR1cmU= 29265 -V0FSRA== 29266 -IElOQ0lERU5U 29267 -KGNvbnRhaW5lcg== 29268 -IGRlZmVuZGluZw== 29269 -IFJY 29270 -IEhvb2s= 29271 -YnJpcw== 29272 -IEZsYXNr 29273 -R3JheQ== 29274 -LikK 29275 -dmlzaWJpbGl0eQ== 29276 -IFJlZGlyZWN0VG9BY3Rpb24= 29277 -ZXJyYWw= 29278 -X2VsZW0= 29279 -IHJlc29u 29280 -ZnJvbnRlbmQ= 29281 -X3ZhcmlhYmxlcw== 29282 -YXRlcmlh 29283 -ICsi 29284 -YXZlbGVk 29285 -UklY 29286 -IGRlZmljaXQ= 29287 -X0NoZWNr 29288 -WVlZWQ== 29289 -VG9PbmU= 29290 -c3B5 29291 -IHVuaXRlZA== 29292 -ZW5kZW50 29293 -IHBvZGU= 29294 -44GM 29295 -Q0FU 29296 -KGZtdA== 29297 -IEJvbnVz 29298 -IHJlY2s= 29299 -wro= 29300 -TW9kdWxlcw== 29301 -IHZhY3V1bQ== 29302 -UmFkaW8= 29303 -IERBTUFHRQ== 29304 -UGVu 29305 -IFBhcmtlcg== 29306 -OzsK 29307 -IFJlYWxseQ== 29308 -X25lZw== 29309 -cGVuZGluZw== 29310 -IG5vbWluZWU= 29311 -IENhdGVnb3JpZXM= 29312 -IFVsdHJh 29313 -V2VhcG9u 29314 -IGRlZmVuZGVy 29315 -SXNz 29316 -IEdlbmRlcg== 29317 -IERyZXNz 29318 -IGltcHJpc29u 29319 -IGJhbmtydXB0 29320 -aW1lbnNpb25hbA== 29321 -UEhB 29322 -IFN0cmF0ZWc= 29323 -IFBST0ZJVFM= 29324 -IHBhdHJp 29325 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 29326 -ZGVsZWdhdGU= 29327 -IGZvclN0YXRl 29328 -IGRldm90ZWQ= 29329 -X21ha2U= 29330 -IHRlcnJvcmlzdHM= 29331 -IFNuYXA= 29332 -X25hdg== 29333 -IEFB 29334 -IElhbg== 29335 -CWFwcA== 29336 -UGxhY2VtZW50 29337 -X2hkcg== 29338 -PEs= 29339 -IHNhbmc= 29340 -c3Ryb2tl 29341 -LVE= 29342 -Pjw/PQ== 29343 -LW1vZGVs 29344 -YXZhbmE= 29345 -IFdhbmc= 29346 -ICAgICAgICAgICAgIAo= 29347 -CWluaXQ= 29348 -IGVudHJlcHJlbmV1cg== 29349 -YXRpdm8= 29350 -TG92ZQ== 29351 -LW92ZXI= 29352 -V2F0ZXI= 29353 -IG1vZHM= 29354 -Z2VuY2U= 29355 -VGVjaG4= 29356 -Png= 29357 -LlRhc2s= 29358 -bW9uZXk= 29359 -aWJhYmE= 29360 -J30pOwo= 29361 -IFNwZWNpZmlj 29362 -IExpbmVhcg== 29363 -X09QVA== 29364 -SGFzaENvZGU= 29365 -KFBsYXllcg== 29366 -LkNvbnRhaW5zS2V5 29367 -IGNvbGxhcHNlZA== 29368 -dHJhbnNwYXJlbnQ= 29369 -X1JBTkdF 29370 -Vmlld2Vy 29371 -KGNmZw== 29372 -IHNvcnRpbmc= 29373 -IGluZmVjdGVk 29374 -IE5hY2g= 29375 -IGFjY29tbW9kYXRl 29376 -LmVsZW1lbnRz 29377 -X1BBUlQ= 29378 -IFNleHk= 29379 -PWdldA== 29380 -KHllYXI= 29381 -IHhocg== 29382 -Ol0= 29383 -b3dza2k= 29384 -IHN1bW1hcg== 29385 -IMK/ 29386 -IGludGU= 29387 -IHdvcmtmbG93 29388 -IFRhaXdhbg== 29389 -dmVyc2lvbnM= 29390 -5Y+R 29391 -IHN1cnByaXNpbmdseQ== 29392 -IG9wdGljYWw= 29393 -IHByb2Nlcw== 29394 -IGRpc2FncmVl 29395 -IG51ZXZv 29396 -IENBTQ== 29397 -c29ydGVk 29398 -bGVhc2Vz 29399 -aXN0bGU= 29400 -SWRlbnQ= 29401 -CWV2ZW50 29402 -amVjdGVk 29403 -Q2h1bms= 29404 -VmFycw== 29405 -LnByb3ZpZGVy 29406 -IHByb2NlZWRpbmdz 29407 -IGluY2x1c2l2ZQ== 29408 -IGFydHdvcms= 29409 -ZW5kYW50cw== 29410 -77yaCg== 29411 -c2Vlbg== 29412 -IGxpZw== 29413 -IG1ha2Vycw== 29414 -X2Z1bg== 29415 -IGxlbmd0aHM= 29416 -UGF0aFZhcmlhYmxl 29417 -W2l0ZW0= 29418 -4Li1 29419 -RGVhZA== 29420 -RkZGRkZG 29421 -IFVyYmFu 29422 -dXBsZXM= 29423 -aWNoZW4= 29424 -KG51bGxwdHI= 29425 -LnNwZWM= 29426 -LFN5c3RlbQ== 29427 -VVJBVElPTg== 29428 -KGpvYg== 29429 -5byP 29430 -IHRyYWNrZXI= 29431 -xZk= 29432 -IE1S 29433 -IFNRTGl0ZQ== 29434 -IGR0bw== 29435 -IDs7Cg== 29436 -IG1pbnQ= 29437 -IEludHJvZHVjdGlvbg== 29438 -Y2Fv 29439 -IHF1ZXN0aW9uZWQ= 29440 -IGZpdHRlZA== 29441 -cmV2aXNpb24= 29442 -c3E= 29443 -IG1pZw== 29444 -X3VuaXRz 29445 -X2FzeW5j 29446 -IGZsaWNr 29447 -fSk7CgoK 29448 -IG5vdHJl 29449 -fWAs 29450 -RmlsdGVycw== 29451 -IG11bmRv 29452 -X2RheXM= 29453 -IGZybQ== 29454 -dXRj 29455 -IHZhbHM= 29456 -ZXdpZHRo 29457 -IEdlbmVyYXRvcg== 29458 -IEFydGlzdA== 29459 -IElEcw== 29460 -IEFydGljbGVz 29461 -cmVhdGVy 29462 -IENvbXBvbmVudEZpeHR1cmU= 29463 -Lj0= 29464 -IHJvdQ== 29465 -LW5v 29466 -LmJ1a2tpdA== 29467 -ZWdn 29468 -IERpZmY= 29469 -YXRpY3M= 29470 -0YPRhw== 29471 -4oCUCgo= 29472 -IENoYXJsb3R0ZQ== 29473 -Ynll 29474 -IH0pOw0KDQo= 29475 -IFZpaw== 29476 -IEJyb3c= 29477 -IGx2 29478 -IEdpYg== 29479 -LXdpbmc= 29480 -R0xJR0VOQ0U= 29481 -KEls 29482 -IEVuZ2luZWVy 29483 -LldhaXQ= 29484 -IFBpY3R1cmVz 29485 -IHJoZXQ= 29486 -IHRoZXJtYWw= 29487 -IHByYWlzZQ== 29488 -PD4oKTsKCg== 29489 -IFNwaWRlcg== 29490 -UGF1c2U= 29491 -IEJha2Vy 29492 -IHNsb3dlcg== 29493 -IH1dCg== 29494 -X2VucXVldWU= 29495 -IGRpc2FwcGVhcmVk 29496 -IFRpY2tldA== 29497 -SU5VWA== 29498 -X0xPQ0FM 29499 -0LDRgdGB 29500 -QEluamVjdGFibGU= 29501 -Y29tbXVuaXR5 29502 -R2VzdHVyZVJlY29nbml6ZXI= 29503 -5Zu9 29504 -IHNjYWxlcw== 29505 -IC0o 29506 -Lycr 29507 -IFNpdA== 29508 -IGV4ZWN1dGl2ZXM= 29509 -YXJkaW5n 29510 -IGFkdmVycw== 29511 -IGJhY2t3YXJkcw== 29512 -CWNvbnRleHQ= 29513 -IEhhbXA= 29514 -IFBG 29515 -IERlY2s= 29516 -IENyYWln 29517 -QW1lcmljYW4= 29518 -IGJlbGw= 29519 -IHByb2w= 29520 -dWZlbg== 29521 -IHJuZw== 29522 -YXJzaGFs 29523 -IFNpbXBseQ== 29524 -Zmlyc3RuYW1l 29525 -c2hvcmU= 29526 -SnVseQ== 29527 -IG1vcnRhbGl0eQ== 29528 -IOKGkgoK 29529 -SGVscGVycw== 29530 -IGJlbmNobWFyaw== 29531 -ZW1hZGU= 29532 -IG9yZ2FuaXNhdGlvbnM= 29533 -Lmdzb24= 29534 -IFRleHRGaWVsZA== 29535 -IGNpdmlsaWFucw== 29536 -LkFycmF5cw== 29537 -IE1pc3Npc3NpcHBp 29538 -IGludGVybWVkaWF0ZQ== 29539 -Z2V0VXNlcg== 29540 -X2NsdXN0ZXI= 29541 -UmVsYXRpdmU= 29542 -Zm9yZWlnbg== 29543 -LnF1ZXJ5U2VsZWN0b3JBbGw= 29544 -Rm9yZWlnbktleQ== 29545 -IHJlYXNvbmFibHk= 29546 -LS0tLS0tLS0tCg== 29547 -Q2FyZHM= 29548 -IEthbQ== 29549 -IFRob3I= 29550 -IHJvbGxlcg== 29551 -LWVsZW1lbnQ= 29552 -IEN1cnJlbmN5 29553 -ZGRpZQ== 29554 -QUxMWQ== 29555 -IFJB 29556 -IHBlcm1ldA== 29557 -YWFhYQ== 29558 -IGhvbWV3b3Jr 29559 -IFZpdA== 29560 -IG1vbGQ= 29561 -IEZlcg== 29562 -W3N0YXJ0 29563 -IHN0YXRpc3RpY2Fs 29564 -IHNjYXJ5 29565 -X0hPTUU= 29566 -LkJlZ2lu 29567 -Q29uc3RydWN0 29568 -b2dlbmlj 29569 -IERFQUxJTkdT 29570 -IHRhbWJpw6lu 29571 -aXhvbg== 29572 -LmluZA== 29573 -YWNyZQ== 29574 -IHRyYW5zZm9ybXM= 29575 -IE5hcA== 29576 -LkJsb2Nr 29577 -dXNzaWE= 29578 -cGlyYXRpb24= 29579 -dWxlbnQ= 29580 -IGNlaWw= 29581 -Q2xhdXNl 29582 -bmFpcmU= 29583 -VEVT 29584 -IG5lYXQ= 29585 -U1RE 29586 -IFJlZ0V4cA== 29587 -cGVyZm9ybQ== 29588 -Oik= 29589 -IHVuaW9ucw== 29590 -IHN1YmxpYw== 29591 -IHdpbmRz 29592 -bG9hdGluZw== 29593 -Z2xpY2g= 29594 -IHBhZ2luYXRpb24= 29595 -U2tpbGw= 29596 -QXBwbHk= 29597 -IE9wZXJhdG9y 29598 -aXN0b2dyYW0= 29599 -IHF1YWxpdGllcw== 29600 -Q3Jvc3M= 29601 -IGRlY29t 29602 -XSwi 29603 -IEp1YW4= 29604 -Lm1vZGFs 29605 -LkNoaWxk 29606 -IFJvZ2Vy 29607 -U1RJVFVURQ== 29608 -OkNHUmVjdE1ha2U= 29609 -YWxldHRl 29610 -IHN0YQ== 29611 -YXNpZGU= 29612 -IGJsdXI= 29613 -IFdh 29614 -aWZldGltZQ== 29615 -cmVlZA== 29616 -Y29udHJvbHM= 29617 -IGJpbnM= 29618 -INC/0L7Quw== 29619 -Ki8sCg== 29620 -VUlT 29621 -IFJvdQ== 29622 -IERlbW8= 29623 -LWF3ZXNvbWU= 29624 -IENoYWlu 29625 -IGhhc3Rh 29626 -IEJhcnQ= 29627 -LktFWQ== 29628 -IHZlbmRvcnM= 29629 -bm9mb2xsb3c= 29630 -IERlc3Q= 29631 -X2J1aWxkZXI= 29632 -IGFyZ3Vlcw== 29633 -X2Fuc3dlcg== 29634 -Z290bw== 29635 -IFJFU1VMVA== 29636 -IE1PTg== 29637 -IHBvZGVy 29638 -b29ucw== 29639 -X0NBU0U= 29640 -IHJlcGxpYw== 29641 -IGZpbmFuY2luZw== 29642 -IERBVEU= 29643 -Y2Vybg== 29644 -X3RyYWNr 29645 -dGllcw== 29646 -L2xvZ28= 29647 -IE5FR0xJR0VOQ0U= 29648 -Z2V0VHlwZQ== 29649 -PlQ= 29650 -YmV0 29651 -Z2lybA== 29652 -IElOQ0lERU5UQUw= 29653 -LXNpdGU= 29654 -LnRyaWdnZXI= 29655 -IExpc2E= 29656 -X2lucHV0cw== 29657 -IHJlbGF0aXZlcw== 29658 -TG9nZ2VkSW4= 29659 -Q29uZmlndXJl 29660 -SUs= 29661 -LmFjY2VwdA== 29662 -UmVzdW1l 29663 -IERyYWZ0 29664 -ICo+KA== 29665 -IFdB 29666 -ZWRpYW4= 29667 -ZXJuZXNz 29668 -IExheW91dEluZmxhdGVy 29669 -Ki8NCg0K 29670 -b3RoeQ== 29671 -IG9ibGlnYXRpb24= 29672 -U3Vic2NyaWJl 29673 -IHRodW1ibmFpbA== 29674 -ZXhpc3Q= 29675 -IGluc2lzdGVk 29676 -IFVJQ29sbGVjdGlvblZpZXc= 29677 -IEFuZ3VsYXI= 29678 -IHRhYmxldHM= 29679 -IEltcGFjdA== 29680 -44CNCgo= 29681 -YWhv 29682 -IGNoYXJhY3RlcmlzdGlj 29683 -Z2Q= 29684 -ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 29685 -b3VydA== 29686 -YC4= 29687 -QXBwcm8= 29688 -Q29vcmRpbmF0ZQ== 29689 -UmVtZW1iZXI= 29690 -IG1hcmluZQ== 29691 -XT09Jw== 29692 -IEFkbWluaXN0cmF0b3I= 29693 -LmdldERlZmF1bHQ= 29694 -IGZvcmdvdA== 29695 -IFN0cnVjdHVyZQ== 29696 -VnVl 29697 -YXJzaW5n 29698 -bW9tZW50 29699 -a3c= 29700 -X2N1cnNvcg== 29701 -QXR0YWNr 29702 -IGF0aGxldGlj 29703 -IGRpYWdub3NlZA== 29704 -IGVuZGU= 29705 -5Yig6Zmk 29706 -SG91c2U= 29707 -IFBBUkFN 29708 -IHdpa2k= 29709 -IE9wcA== 29710 -IGNvbnNlcnZhdGlvbg== 29711 -IHNuZA== 29712 -X3RlbQ== 29713 -c3Vic3Ry 29714 -IENhcGU= 29715 -LnNpbQ== 29716 -VVRJT04= 29717 -YW5hbg== 29718 -4oCZdW4= 29719 -IGd5 29720 -LXdvcms= 29721 -IGNvbXBlbGxpbmc= 29722 -PScj 29723 -CXN1Yg== 29724 -IGRpcmVjdG9yaWVz 29725 -7Yq4 29726 -IHRvdWNoZXM= 29727 -b3V0aW5lcw== 29728 -LkNvbGxlY3Rpb24= 29729 -c2NoZWR1bGU= 29730 -LmxhdA== 29731 -IERvY3RyaW5l 29732 -Q0FB 29733 -IFJlZmVy 29734 -IHNoaWZ0cw== 29735 -IGxpa2VsaWhvb2Q= 29736 -cHJldGVy 29737 -IEZlbWFsZQ== 29738 -IGludGVyY2VwdA== 29739 -IGxvdQ== 29740 -55m7 29741 -IHJ1Zw== 29742 -IENyb3du 29743 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 29744 -LXByb2R1Y3Q= 29745 -IHByb21wdGVk 29746 -dW5nbGU= 29747 -ZG9ja2Vy 29748 -IFR1 29749 -IFVuaXF1ZQ== 29750 -X0Vycm9y 29751 -dWxvcw== 29752 -IOKE 29753 -IChg 29754 -R2V0dGluZw== 29755 -X3NjYWw= 29756 -IEVuaA== 29757 -w7x0 29758 -IHN1c3RhaW5lZA== 29759 -IHBhdGNoZXM= 29760 -IHByb3NwZXI= 29761 -IEdhemE= 29762 -X2xpZ2h0 29763 -IGluY29ucw== 29764 -LS0tLS0tLS0K 29765 -CQkgICAgICA= 29766 -U0Y= 29767 -Q04= 29768 -OiI7Cg== 29769 -IENvbGxpbnM= 29770 -KCop 29771 -IGNvbXBpbGF0aW9u 29772 -J10NCg== 29773 -IGNvbnNlcXVlbmNl 29774 -LC4uLg== 29775 -IGRt 29776 -IEJMT0NL 29777 -Q2x1c3Rlcg== 29778 -IHNraQ== 29779 -KGFyZ2M= 29780 -VHVwbGU= 29781 -IGpvaW5z 29782 -IFNoZXJpZmY= 29783 -V2Fy 29784 -aW5kaQ== 29785 -IGNvbW1lbnRlZA== 29786 -SE9TVA== 29787 -IGludml0YXRpb24= 29788 -YXBhbmVzZQ== 29789 -IHBlcm1pdHM= 29790 -cHJlY2VkZW50ZWQ= 29791 -X3pvbmU= 29792 -IEFteQ== 29793 -X1JE 29794 -TWluaW11bQ== 29795 -IGludm9jYXRpb24= 29796 -LmVuYWJsZQ== 29797 -aWNodGVu 29798 -LW93bmVk 29799 -Imlk 29800 -X1BPSU5URVI= 29801 -RmFj 29802 -IHNwZWNpZmljYXRpb25z 29803 -IG5vbWluYXRpb24= 29804 -IGdw 29805 -PCg= 29806 -IHJvYm90cw== 29807 -IEplcnJ5 29808 -IGhvbGRlcnM= 29809 -IHdhbmQ= 29810 -Y21z 29811 -IH0pKQo= 29812 -LlRvYXN0 29813 -IElMaXN0 29814 -QmFzZWQ= 29815 -em9vbQ== 29816 -L3N0eWxl 29817 -IEJlY2s= 29818 -TWVu 29819 -IGNvbnRyaWJ1dGluZw== 29820 -IHVuZG8= 29821 -IE9I 29822 -IGFkZE9iamVjdA== 29823 -IGVpZ2Vu 29824 -c2lnbnVw 29825 -6ZSZ 29826 -IGRpc3RhbnQ= 29827 -UEFSQVRPUg== 29828 -IE1hcmk= 29829 -IG3DoQ== 29830 -RW1w 29831 -w7Nz 29832 -IOyImA== 29833 -ZXZ0 29834 -K2o= 29835 -cGFyaw== 29836 -IFN0YXk= 29837 -IER1bg== 29838 -IHNveQ== 29839 -PiU= 29840 -YXppbmVz 29841 -IHRpZW1wbw== 29842 -KG1l 29843 -cHJlc2VudA== 29844 -LlRoaXM= 29845 -IGVkaXRvcnM= 29846 -RklFTEQ= 29847 -Lldvcms= 29848 -IFVuaXZlcnNl 29849 -IGRydW5r 29850 -LnRpbWVy 29851 -IGFsdGVyZWQ= 29852 -IE5hcg== 29853 -66Cl 29854 -LkFjdGl2ZQ== 29855 -aWRvcg== 29856 -560= 29857 -LmRlbHRhVGltZQ== 29858 -IGF3a3dhcmQ= 29859 -JnF1b3Q= 29860 -IFNhZmFyaQ== 29861 -IHRyaWNrcw== 29862 -TUVOVFM= 29863 -ZGl2aXNpb24= 29864 -IHZhcnlpbmc= 29865 -IEhpZ2h3YXk= 29866 -IHBob3RvZ3JhcGhlcg== 29867 -IFN0ZXdhcnQ= 29868 -IGxhc3Rpbmc= 29869 -LlByZQ== 29870 -LmFtYXpvbmF3cw== 29871 -IEx1Y2s= 29872 -LkRlc2NyaXB0aW9u 29873 -IE5heg== 29874 -bmVn 29875 -IGPDsw== 29876 -PDwiXA== 29877 -IFN1cnY= 29878 -IFVuYw== 29879 -UmVjaXBl 29880 -LkJvcmRlclN0eWxl 29881 -IG1vZGlmaWNhdGlvbnM= 29882 -LWF0 29883 -QVRGT1JN 29884 -aGRy 29885 -YWtv 29886 -IHN1YmxpY2Vuc2U= 29887 -IEp1bXA= 29888 -IGJlaW0= 29889 -IE1hbmhhdHRhbg== 29890 -LmJvb2w= 29891 -X2h3 29892 -0YLRjA== 29893 -Qmlu 29894 -IGdhdGV3YXk= 29895 -IiI6 29896 -IFVJUw== 29897 -OiIr 29898 -LWRlZg== 29899 -IFJlZ3VsYXI= 29900 -L3Rlc3Rpbmc= 29901 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 29902 -c3RyaW5nc3RyZWFt 29903 -IGRpc3Bhcg== 29904 -IG1vYmls 29905 -LXJlYWQ= 29906 -IEFkYXB0ZXI= 29907 -IENoYW1waW9ucw== 29908 -IHNjaGVkdWxlcg== 29909 -IGtpbGxz 29910 -IE11bHRpcGxl 29911 -aXJyb3I= 29912 -IGdvZHM= 29913 -QURP 29914 -YWt0ZQ== 29915 -IFVzdWFyaW8= 29916 -LmNpcmN1bGFy 29917 -IHJlY2VwdA== 29918 -IEV4cHI= 29919 -IGVsZGVybHk= 29920 -IG5pY2VseQ== 29921 -IGJlc3Rl 29922 -V2FudA== 29923 -IGNsYXNzaWNhbA== 29924 -LnNwcml0ZQ== 29925 -b2JqYw== 29926 -IE1hc29u 29927 -IHNpc3RlbWE= 29928 -LkJsYWNr 29929 -ZXNv 29930 -IFplaXQ= 29931 -IGRpdmlk 29932 -IGVudGVycw== 29933 -X3N1YmplY3Q= 29934 -IFBsYW5ldA== 29935 -Lndhcm5pbmc= 29936 -IEdyYW0= 29937 -X3Rva2Vucw== 29938 -IGhvdXNlaG9sZHM= 29939 -X2N1c3RvbWVy 29940 -dXNlck5hbWU= 29941 -Y3Jvc3M= 29942 -IHBpb25l 29943 -IGFzc2lzdHM= 29944 -X1NN 29945 -aWJv 29946 -IGxveWFs 29947 -IHVzZWxlc3M= 29948 -I2VsaWY= 29949 -IFVsdGltYXRl 29950 -Q29tZQ== 29951 -Z2Vs 29952 -IGRpY2g= 29953 -eHl6 29954 -aWtlbA== 29955 -b2JyYQ== 29956 -X3NjYW4= 29957 -IEludGVyaW9y 29958 -IE5pY2U= 29959 -IHBsYWM= 29960 -CXRhcmdldA== 29961 -IHZpcmFs 29962 -YXNzbw== 29963 -KCkv 29964 -dW5kZQ== 29965 -IEFkb2Jl 29966 -T3M= 29967 -dmlzaXRlZA== 29968 -IE9X 29969 -IEZlZWQ= 29970 -IFNlcXVlbmNl 29971 -IG1hbmFnZXM= 29972 -aW5zb24= 29973 -IExvdWlzaWFuYQ== 29974 -e30p 29975 -IEhhYg== 29976 -IExE 29977 -IGJpcA== 29978 -cHJpdGVz 29979 -KGVsZW0= 29980 -LmhpYmVybmF0ZQ== 29981 -w6lsw6k= 29982 -IG9obmU= 29983 -X3RyYW5zYWN0aW9u 29984 -IGFubnVuY2k= 29985 -UHVibGlzaGVk 29986 -IEhvbmRh 29987 -IFRhbQ== 29988 -IFBhY2tldA== 29989 -X3NlbGVjdG9y 29990 -IGNoYWxsZW5nZWQ= 29991 -UHJvY2Vzc2luZw== 29992 -LWhvdmVy 29993 -IHRyYWluZXI= 29994 -X2NhbmNlbA== 29995 -IE5TRGljdGlvbmFyeQ== 29996 -YWJyaWM= 29997 -IE1MUw== 29998 -X3NlbnNvcg== 29999 -IHNocmluaw== 30000 -IEZY 30001 -dGhyZXNob2xk 30002 -CUhY 30003 -LW1hcms= 30004 -YC5g 30005 -U2NoZW1l 30006 -KGZ1bGw= 30007 -X3dyaXRlcg== 30008 -IFN5cw== 30009 -IGZsZWQ= 30010 -IENpbg== 30011 -LXdpZGdldA== 30012 -IFByZXZpb3Vz 30013 -R2VuZGVy 30014 -X3F1ZXN0aW9u 30015 -RmVlZA== 30016 -IHNjcnV0 30017 -KHByZWZpeA== 30018 -44CC44CC 30019 -IGluZmVjdGlvbnM= 30020 -UGFydHM= 30021 -IGhpZXJhcmNoeQ== 30022 -X0RFTEVURQ== 30023 -IFBhdGllbnQ= 30024 -X3BheQ== 30025 -IHByb21vdGVk 30026 -IOyL 30027 -IGNpdmlsaWFu 30028 -IGFncmljdWx0dXJl 30029 -IFBpZWNl 30030 -IHN0YW5jZQ== 30031 -dXRzY2hl 30032 -QXNzaWdu 30033 -LkFDVElPTg== 30034 -Rmln 30035 -X3JhZGl1cw== 30036 -IFN5bmM= 30037 -ZHVjZXI= 30038 -ZmFpbHVyZQ== 30039 -ZW5zZWQ= 30040 -cHRpbWU= 30041 -Qk0= 30042 -X2RhdGV0aW1l 30043 -cXVpdm8= 30044 -UVVFVUU= 30045 -6ICF 30046 -QXBwZWFy 30047 -IHN1bW1pdA== 30048 -OnZvaWQ= 30049 -IHZpbmU= 30050 -6K6k 30051 -b25uZQ== 30052 -X1RSQU5T 30053 -LmdyZWVu 30054 -X2Nj 30055 -IGh1bmdyeQ== 30056 -ICI+ 30057 -KCkpOw0KDQo= 30058 -RXh0cmFjdA== 30059 -aXplbnM= 30060 -IHNvbHZlcg== 30061 -Tm90aWZ5 30062 -IGVuZ2xpc2g= 30063 -IFNob3BwaW5n 30064 -aW50ZXJmYWNlcw== 30065 -UkVR 30066 -IGlsbGVn 30067 -IFVJSW1hZ2VWaWV3 30068 -IGRpc2Nvbm5lY3Q= 30069 -IFVudGls 30070 -IENvbnNlcnZhdGl2ZQ== 30071 -QENvbHVtbg== 30072 -IHNoaWZ0ZWQ= 30073 -IDoNCg== 30074 -IGZpY2g= 30075 -IGRsYQ== 30076 -IHNob2U= 30077 -IiksDQo= 30078 -dWxhcml0eQ== 30079 -X1JFU1A= 30080 -V2VhdGhlcg== 30081 -VUlBcHBsaWNhdGlvbg== 30082 -Lml0ZXJhdG9y 30083 -IGFnaW5n 30084 -LlBhcmVudA== 30085 -b3dpZQ== 30086 -KGVxdWFs 30087 -IENvbnY= 30088 -L2RlZmF1bHQ= 30089 -IG1lYXN1cmluZw== 30090 -LnByZXY= 30091 -LklzVmFsaWQ= 30092 -LkZhdA== 30093 -IHPEgw== 30094 -a2V5d29yZHM= 30095 -d2l0aG91dA== 30096 -IHNvdmVyZQ== 30097 -IGV4Y2hhbmdlcw== 30098 -IG1lbHQ= 30099 -IGlzbGFuZHM= 30100 -IEludGVncg== 30101 -IGp1bXBpbmc= 30102 -IGdsZQ== 30103 -IGpvdXJuYWxpc20= 30104 -IGRhdGVk 30105 -TG9jYWxpemVk 30106 -IFJlZnJlc2g= 30107 -UGFydGljbGU= 30108 -IGFh 30109 -IFNUUklDVA== 30110 -IGJvZA== 30111 -LlByb2Nlc3M= 30112 -X0FVVE8= 30113 -IFB1Ymxpc2hlZA== 30114 -ZXZlcnk= 30115 -IHRlY2hub2xvZ2ljYWw= 30116 -bHN4 30117 -IGlycml0 30118 -QWRkaXRpb25hbA== 30119 -IGRlbGltaXRlcg== 30120 -X2xhbmd1YWdl 30121 -LWFyZWE= 30122 -Ym95cw== 30123 -IFR1YmU= 30124 -IHdhdA== 30125 -IG1lY2hhbmljcw== 30126 -X293bmVy 30127 -U3BlbGw= 30128 -IFN0b3JpZXM= 30129 -LkFwcGVuZExpbmU= 30130 -VGFibGVWaWV3 30131 -aGVt 30132 -c3RpY2s= 30133 -b2xsb3dlcg== 30134 -SUZG 30135 -IFVW 30136 -b2xsaXNpb24= 30137 -U1VC 30138 -IGNvbXBhcmFibGU= 30139 -IGRvbmRl 30140 -c2FsZXM= 30141 -bGx2bQ== 30142 -IH1dLAo= 30143 -T1RUT00= 30144 -IFB1cnBvc2U= 30145 -TGFi 30146 -IGludGVydmlld2Vk 30147 -b2lz 30148 -YXNpbA== 30149 -LnNldElk 30150 -IEluc3RydWN0aW9u 30151 -LS0+ 30152 -IE1vZGlmaWVk 30153 -YXRpb25hbGx5 30154 -IE1lZXRpbmc= 30155 -6K+v 30156 -I3JlZ2lvbg== 30157 -IHJvdXRpbmc= 30158 -LmZvY3Vz 30159 -IFlvdXRo 30160 -PEQ= 30161 -IE5hZw== 30162 -Y29udGFjdHM= 30163 -IGZvcm1pbmc= 30164 -IG1pZQ== 30165 -JyxbJy4uLw== 30166 -IEJQ 30167 -IGFwcGV0 30168 -IFRlYWNoZXI= 30169 -IFRQ 30170 -IGFubnVhbGx5 30171 -b3V0ZWRFdmVudEFyZ3M= 30172 -IFNwZWFrZXI= 30173 -IHJlbmFtZQ== 30174 -Q0ZH 30175 -KCIvLw== 30176 -5o6l 30177 -L3BhZ2Vz 30178 -IHByw6lz 30179 -IFNwZWxs 30180 -LkFsbG93 30181 -IElOVEVSUlU= 30182 -ICgj 30183 -4oCZCgo= 30184 -X0dlbmVyaWM= 30185 -Lmltc2hvdw== 30186 -X3RpbQ== 30187 -LWZhY2U= 30188 -KCYo 30189 -YXRpbnVt 30190 -IHJldm9sdXRpb25hcnk= 30191 -IEhvdXJz 30192 -cmFpbg== 30193 -IGFueXRpbWU= 30194 -IGFiYg== 30195 -LmpzcA== 30196 -U2Nyb2xsVmlldw== 30197 -IFRydXRo 30198 -IGFudGljaXBhdGVk 30199 -IGFjY2VudA== 30200 -LmNoZWNrZWQ= 30201 -IHNwZWNpZmllcw== 30202 -IGNhZg== 30203 -IGNlbGxwYWRkaW5n 30204 -IGNvb2tlZA== 30205 -IEh1Z2g= 30206 -cGVlaw== 30207 -X1JBVEU= 30208 -IGRvcm0= 30209 -Lw0K 30210 -SVZJVFk= 30211 -LkNvbnRyb2xsZXI= 30212 -KHBhcnQ= 30213 -LmNvbnN0cmFpbnQ= 30214 -IGludmFzaW9u 30215 -TU9WRQ== 30216 -IGdsdWM= 30217 -bGVuYW1l 30218 -IGFtZW4= 30219 -ZW5nbGlzaA== 30220 -IFN3aXR6ZXJsYW5k 30221 -IjsKCgo= 30222 -cGVzdA== 30223 -LmNvbGxlY3Q= 30224 -Tmli 30225 -IERpY3Q= 30226 -IEVtYg== 30227 -KHN1YmplY3Q= 30228 -IG91dHJhZ2U= 30229 -IGRlY2lkaW5n 30230 -IHNlbnRlbmNlZA== 30231 -RmVjaGE= 30232 -IkE= 30233 -IHF1ZXI= 30234 -IGZvbnRGYW1pbHk= 30235 -IHF1YWRy 30236 -LVk= 30237 -X0NBQ0hF 30238 -IGFuYWx5emVk 30239 -IGdhaW5pbmc= 30240 -IEFnYWluc3Q= 30241 -IFNvdWw= 30242 -dGF1 30243 -IGxpZ2h0d2VpZ2h0 30244 -IFRG 30245 -IEVmZmVjdHM= 30246 -LlR5cGVz 30247 -LmFkZENsYXNz 30248 -IHZlZ2Fu 30249 -6YE= 30250 -Lici 30251 -IEV4cGxvcmVy 30252 -LmRldGVjdA== 30253 -LnNoaWZ0 30254 -IG9ibGlnYXRpb25z 30255 -bGFzdE5hbWU= 30256 -IGFzc29jaWF0aW9ucw== 30257 -IFRpbWVTcGFu 30258 -dW50ZXI= 30259 -IEZyZXNo 30260 -Q29tcGF0aWJsZQ== 30261 -UHVi 30262 -aWRnZXM= 30263 -Lm9wdGlvbg== 30264 -dmFyaQ== 30265 -Lmhhc2hDb2Rl 30266 -IGdlYg== 30267 -LnNlY3Rpb24= 30268 -LW5vdA== 30269 -IFN1Ym1pdA== 30270 -VE4= 30271 -cmVnaXN0cnk= 30272 -X21lZGlh 30273 -IG5hag== 30274 -ZmZ0 30275 -IG1hdGU= 30276 -LXRoaXJk 30277 -IHBvY2tldHM= 30278 -ZXN0YQ== 30279 -IGJlbnQ= 30280 -IE5vcmQ= 30281 -IHJldGFpbGVycw== 30282 -IE1vcnJpcw== 30283 -LiIiIgoK 30284 -V3Jvbmc= 30285 -IMWb 30286 -UmF5 30287 -LmVj 30288 -IEJpbmQ= 30289 -X0hBTkQ= 30290 -KG5vbg== 30291 -aXNWYWxpZA== 30292 -IHNpbWlsYXJseQ== 30293 -X0xJTUlU 30294 -IGR5bmFtaWNz 30295 -IGRpc3RpbmN0aW9u 30296 -44GG 30297 -PE4= 30298 -IG9ydGg= 30299 -IFRveW90YQ== 30300 -IEthdGU= 30301 -IExT 30302 -b3JpZQ== 30303 -IFNwcmluZ3M= 30304 -IGZyZWFr 30305 -bGFzdG5hbWU= 30306 -X01VTFQ= 30307 -LXN0ZXA= 30308 -Iig= 30309 -QUREUg== 30310 -IGVudGVydGFpbmluZw== 30311 -X0NPTkY= 30312 -IGRlY29kZWQ= 30313 -IHN0cmVhaw== 30314 -IHdhaXRlZA== 30315 -IG5vdGlmaWVk 30316 -cm9kdWNlZA== 30317 -dmlzdWFs 30318 -LkxheW91dFBhcmFtcw== 30319 -5rA= 30320 -ZXNpYW4= 30321 -Zml0cw== 30322 -c3ByaW5n 30323 -IEJlcm5pZQ== 30324 -VXNlckRlZmF1bHRz 30325 -IHBlZGVzdA== 30326 -QXBwZWFyYW5jZQ== 30327 -IFdpa2k= 30328 -IE5PVElDRQ== 30329 -IHNzaA== 30330 -IGR1cmFudGU= 30331 -IFppcA== 30332 -xLFy 30333 -IE5BVE8= 30334 -IHR3ZWx2ZQ== 30335 -IHJveWFs 30336 -77g= 30337 -IG1lcmNoYW50 30338 -IEZ1cm5pdHVyZQ== 30339 -J10pLAo= 30340 -LFg= 30341 -IGZvbGRlcnM= 30342 -IEdhdGU= 30343 -CWZ1bmM= 30344 -cGljaw== 30345 -X3VzdWFyaW8= 30346 -IFZlcm0= 30347 -bWVudGlvbg== 30348 -dXJwb3Nl 30349 -IGFsZXJ0cw== 30350 -eGlvdXM= 30351 -X3NpZw== 30352 -IEZ1 30353 -ICg6 30354 -IGR1bWI= 30355 -5YWz 30356 -IGFjY3VyYXRlbHk= 30357 -6YeN 30358 -UkI= 30359 -LXNjcmVlbg== 30360 -IFZFUg== 30361 -am91cg== 30362 -IHJvbWFuY2U= 30363 -dWNjZWVk 30364 -LmNob2ljZQ== 30365 -IGFkaXA= 30366 -X2RpbXM= 30367 -U2VyaWFsaXphYmxl 30368 -44KL 30369 -LmpvYg== 30370 -IHByb2c= 30371 -dWNoYXI= 30372 -IGdlbnRseQ== 30373 -IFJTUw== 30374 -aWN0dXJlZA== 30375 -X0VOQUJMRUQ= 30376 -CWxhYmVs 30377 -YXdrcw== 30378 -IEVuc3VyZQ== 30379 -cmVtZW1iZXI= 30380 -7KCV 30381 -IHRyYW5zbWl0 30382 -e3sk 30383 -LlRyYW5zYWN0aW9u 30384 -dXJzZQ== 30385 -X3JlbGF0aXZl 30386 -IHNpemVk 30387 -IFhY 30388 -IFByaW5jZXNz 30389 -IExhcnJ5 30390 -IHByw7M= 30391 -INGB0YLRgA== 30392 -IHNpc3RlcnM= 30393 -ZXN0cnVjdA== 30394 -IGNoZWNrcG9pbnQ= 30395 -Omxlbmd0aA== 30396 -IENhcmxvcw== 30397 -L2ljb24= 30398 -X1RBUkdFVA== 30399 -VG9rZW5z 30400 -IHBhdGllbmNl 30401 -IFNlbGVjdGVk 30402 -cXR5 30403 -LnNob3dNZXNzYWdl 30404 -IHdpbGRsaWZl 30405 -IFByb3Bz 30406 -Ym0= 30407 -LWFycm93 30408 -IHBhcmNlbA== 30409 -ZmlyZWJhc2U= 30410 -IEJlbmphbWlu 30411 -Y2Vzc28= 30412 -LnRpbQ== 30413 -IEdhcmM= 30414 -LmFueQ== 30415 -IEhPV0VWRVI= 30416 -IEtv 30417 -IGdyYWJiZWQ= 30418 -X2ZyYW1lcw== 30419 -IG9iamVjdEF0SW5kZXg= 30420 -IEFEVklTRUQ= 30421 -IHN1YnVy 30422 -CUdM 30423 -IH0pfQo= 30424 -LWxlbmd0aA== 30425 -7Iuc 30426 -IFBvdHRlcg== 30427 -X2J1ZmY= 30428 -Lmd1aQ== 30429 -IEVuY29kaW5n 30430 -RWxlY3Q= 30431 -LW1lc3NhZ2U= 30432 -IO+/vQ== 30433 -IMiZaQ== 30434 -IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbg== 30435 -0LDRhtC4 30436 -IG1pbmltaXpl 30437 -IHJlc3BvbmRpbmc= 30438 -JF9bJw== 30439 -IEluZGl2aWR1YWw= 30440 -w6Fj 30441 -IElOVEVS 30442 -IG1hc3R1cmI= 30443 -IEJpbg== 30444 -KCck 30445 -65Oc 30446 -IG9wZW5seQ== 30447 -ID48 30448 -IHVudG8= 30449 -b2xvZ2ljYWxseQ== 30450 -IE11bA== 30451 -VklESUE= 30452 -IHNsaW0= 30453 -IENvbW1pc3Npb25lcg== 30454 -KG9u 30455 -IHVuZGVybmVhdGg= 30456 -L2Ri 30457 -dm90ZQ== 30458 -KE1lc3NhZ2U= 30459 -IFBvcGU= 30460 -RGVmaW5lZA== 30461 -IHN3aWZ0 30462 -dXJm 30463 -IGFkYXB0ZWQ= 30464 -U0VM 30465 -IHJldmVudWVz 30466 -IGRpdmluZQ== 30467 -PXk= 30468 -R3JhZGllbnQ= 30469 -X2FjdA== 30470 -IC8qITw= 30471 -IHBvbHlnb24= 30472 -IEZEQQ== 30473 -IENhcnI= 30474 -YXRhYmxlcw== 30475 -KHN0ZG91dA== 30476 -IHJlZnJpZ2Vy 30477 -IGNvb3JkaW4= 30478 -YXZvcml0ZXM= 30479 -0YjQuA== 30480 -IGNvbXBhc3Npb24= 30481 -IFBPU1NJQklMSVRZ 30482 -LXNlY29uZGFyeQ== 30483 -dXJhY3k= 30484 -IGNvbXByb21pc2U= 30485 -X0FW 30486 -X29z 30487 -IGJlc2lkZQ== 30488 -g50= 30489 -IGxu 30490 -LnBsdWdpbnM= 30491 -Q2FwYWNpdHk= 30492 -YWxhaA== 30493 -LmJpbg== 30494 -IENSQw== 30495 -X2JhbGFuY2U= 30496 -IGZsZXhEaXJlY3Rpb24= 30497 -IGFtYml0 30498 -IG5pY2tuYW1l 30499 -IEZvcmNlcw== 30500 -Q0xF 30501 -IFNoZWxs 30502 -IHNhaWw= 30503 -IFdyaXRlcg== 30504 -IEFsaWNl 30505 -ZHc= 30506 -IEluZGlhbnM= 30507 -IE1hcnNoYWxs 30508 -X1NSQw== 30509 -IG5vcm1hbGl6ZWQ= 30510 -IEphZw== 30511 -44KS 30512 -emVpdA== 30513 -cnBj 30514 -w61j 30515 -LmlubGluZQ== 30516 -IHRyYXZlcnM= 30517 -X251bWVyaWM= 30518 -IHV0aWxpdGllcw== 30519 -IGV2YWM= 30520 -SU5QVVQ= 30521 -CXJlZ2lzdGVy 30522 -TVg= 30523 -IENhbXBiZWxs 30524 -IGRhdGFzZXRz 30525 -IGRlbWFuZGVk 30526 -IGluaXRpYWxTdGF0ZQ== 30527 -Z2Fu 30528 -IGVp 30529 -VW5leHBlY3RlZA== 30530 -LXdlYg== 30531 -dHJhaXQ= 30532 -LFk= 30533 -IFRvZGQ= 30534 -IHNrZWxldG9u 30535 -IG9wdGltaXpl 30536 -56ys 30537 -IFVwb24= 30538 -IFN0T2JqZWN0 30539 -IGFwbGlj 30540 -Lic8Lw== 30541 -QUND 30542 -YWxvdXM= 30543 -IGhhc2hDb2Rl 30544 -IEJpYg== 30545 -SU5BTA== 30546 -IGludmlzaWJsZQ== 30547 -IGhldGVy 30548 -IHNhZmVy 30549 -fS8v 30550 -LnRoZW1l 30551 -Lm5hdmlnYXRpb25Db250cm9sbGVy 30552 -X21lc2g= 30553 -c2tpbGw= 30554 -IFZpb2w= 30555 -wrI= 30556 -IEVPRg== 30557 -IEtp 30558 -eW1tZXRyaWM= 30559 -IG1heGxlbmd0aA== 30560 -xaM= 30561 -ZnJpZW5kcw== 30562 -IEV2YW5z 30563 -IGxlbW9u 30564 -ICgu 30565 -U2xpZGU= 30566 -IFRoYWlsYW5k 30567 -IENhbm4= 30568 -IGFtZW5k 30569 -IGNpcg== 30570 -IHNpbGx5 30571 -ZXNpbWFs 30572 -X3BpYw== 30573 -cHJvY2Vzc29y 30574 -SmF2YVNjcmlwdA== 30575 -IGV2aWRlbnQ= 30576 -X2Rp 30577 -PlA= 30578 -dnJvbg== 30579 -LlVO 30580 -IHBhaW50ZXI= 30581 -aXphcnJl 30582 -IGxhdg== 30583 -IHBvbQ== 30584 -cHJlZw== 30585 -PWZ1bmN0aW9u 30586 -KHNlcmlhbA== 30587 -aWZpY2E= 30588 -dW1pbmc= 30589 -5Zyw 30590 -44GC 30591 -LW9w 30592 -VUNI 30593 -IEhlbmQ= 30594 -LnByb3BUeXBlcw== 30595 -IHlv 30596 -IHJvdXRpbmVz 30597 -IGNhcmluZw== 30598 -U2Vt 30599 -IHJlc2VydmVz 30600 -IHByaW9yaXRpZXM= 30601 -cmVkaXRz 30602 -SVNUUg== 30603 -Q29udGVudFR5cGU= 30604 -IFNjaHc= 30605 -L21lZGlh 30606 -IGVzdHI= 30607 -IGNsaW1iaW5n 30608 -LXdlZWs= 30609 -Y2hlcmNoZQ== 30610 -c2Vuc29y 30611 -VG9BcnJheQ== 30612 -IE1vbnRyZWFs 30613 -IGNsb3Vkcw== 30614 -IEluamVjdGFibGU= 30615 -IFJpY2U= 30616 -IHByb3BhZ2FuZGE= 30617 -X3Byb3ZpZGVy 30618 -IGluZG9vcg== 30619 -IGluYXVn 30620 -IGRpcGxvbQ== 30621 -IG1lc3NhZ2luZw== 30622 -X211dA== 30623 -5aaC 30624 -IGt3 30625 -T05T 30626 -YXJpYW5z 30627 -UlBD 30628 -KV0NCg== 30629 -LXJheQ== 30630 -IFNvcg== 30631 -bWFsbA== 30632 -IG1hcmtldHBsYWNl 30633 -IHZ0aw== 30634 -TWE= 30635 -b2dhbg== 30636 -aWdp 30637 -IHNwb25zb3JlZA== 30638 -IERhbmk= 30639 -LlNFVkVS 30640 -PicuJA== 30641 -bXVsdGlwYXJ0 30642 -IFdvbA== 30643 -IHRhYmxlTmFtZQ== 30644 -IFVzZXJuYW1l 30645 -QmFja2dyb3VuZENvbG9y 30646 -IGZyaWdodA== 30647 -X0VNQUlM 30648 -U2VwdGVtYmVy 30649 -X3ZhbHM= 30650 -b3BpYQ== 30651 -IHNwb3R0ZWQ= 30652 -LUNo 30653 -IGRhdGFTb3VyY2U= 30654 -LyIK 30655 -0LXQutGC 30656 -IFJlcXVlc3RNZXRob2Q= 30657 -IFJlcGxhY2U= 30658 -LWRv 30659 -YWhu 30660 -IFBoRA== 30661 -XS4KCg== 30662 -Tk9O 30663 -Z2VtZW50 30664 -IFRocg== 30665 -IHF1aWV0bHk= 30666 -IHRvcnR1cmU= 30667 -IHRlYXM= 30668 -IENZ 30669 -IGF0cg== 30670 -ZGV2ZWxvcG1lbnQ= 30671 -LWRldGFpbA== 30672 -IGxpZ2h0ZXI= 30673 -IGFyZ3Vpbmc= 30674 -IGRlc2VydmVz 30675 -IGN1cnJpY3VsdW0= 30676 -X0NPTlRFWFQ= 30677 -xYJ5 30678 -SElURQ== 30679 -CUlE 30680 -L3VwbG9hZHM= 30681 -IHRpdHM= 30682 -cmVv 30683 -X2Ryb3A= 30684 -LlVURg== 30685 -IHBpY2t1cA== 30686 -IGdyb2Nlcnk= 30687 -IFB1cmU= 30688 -IGVhc2llc3Q= 30689 -UGhpbA== 30690 -LmZlYXR1cmU= 30691 -KCIq 30692 -IGludmVzdG9y 30693 -dG9r 30694 -IGphcg== 30695 -TG9z 30696 -4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 30697 -LnF1ZXVl 30698 -LXNwZWVk 30699 -TWFs 30700 -dW1ibHI= 30701 -IENPTlNU 30702 -IEhSRVNVTFQ= 30703 -IERhbmNl 30704 -KGZpbGVQYXRo 30705 -IGF0dHJpYnV0ZWQ= 30706 -4KWN 30707 -IEJ1bmQ= 30708 -Y29pbnM= 30709 -IHPDo28= 30710 -IHBpcg== 30711 -cGVyc29uYWw= 30712 -IHByZWxpbQ== 30713 -IHByb3Bvc2U= 30714 -IFRM 30715 -XV0p 30716 -IFN1YnNjcmlwdGlvbg== 30717 -IEtyZQ== 30718 -LGxlbg== 30719 -LkZpcnN0T3JEZWZhdWx0 30720 -KS0t 30721 -X3Byb2R1Y3Rz 30722 -LkdldEJ5dGVz 30723 -U2hpcA== 30724 -IGVuY3J5cHQ= 30725 -IFNH 30726 -IE15c3Q= 30727 -aGly 30728 -IGl0ZXJhdGU= 30729 -IGludGVuZA== 30730 -Lm1vY2tpdG8= 30731 -IGNoYXB0ZXJz 30732 -KGFuZ2xl 30733 -IFZsYWQ= 30734 -6K6+ 30735 -Jy4KCg== 30736 -UmVzcG9uc2VCb2R5 30737 -IEFiZA== 30738 -ZGVhbA== 30739 -IGJhcnJpZXJz 30740 -LW91dGxpbmU= 30741 -YmlsbA== 30742 -IEZhbGxz 30743 -X3NlY29uZA== 30744 -LmluY2x1ZGU= 30745 -LmNlaWw= 30746 -IG9jY3VwYXRpb24= 30747 -cGhvbnk= 30748 -Lm1vdmVUbw== 30749 -IEplbm5pZmVy 30750 -QVNURVI= 30751 -OyI+PA== 30752 -IEVuYWJsZWQ= 30753 -IHRlcm1pbmF0ZQ== 30754 -IElv 30755 -bGF0aW9ucw== 30756 -IFRIRU9SWQ== 30757 -IGVhcmxpZXN0 30758 -IHJhY2s= 30759 -IFNjYXI= 30760 -c2hha2U= 30761 -Y2hpcA== 30762 -IHV2 30763 -IGFsbGlhbmNl 30764 -0L/QuNGB 30765 -IEdPT0RT 30766 -emlvbmU= 30767 -IFZJ 30768 -IHst 30769 -IGZpbHRlcmluZw== 30770 -IG1pc2Nvbg== 30771 -LkRvY2tTdHlsZQ== 30772 -IGJ1c2g= 30773 -IGp1bms= 30774 -5ow= 30775 -IFFVRQ== 30776 -IGhvb2tz 30777 -IGZpcm13YXJl 30778 -IG1pZGRsZXdhcmU= 30779 -ZGlj 30780 -IE9ha2xhbmQ= 30781 -IGFycml2ZXM= 30782 -UGF5bG9hZA== 30783 -cGl4ZWw= 30784 -XXw= 30785 -IHN0YXJ0RGF0ZQ== 30786 -LlBSTw== 30787 -X2F1ZGlv 30788 -IG1pZGZpZWxk 30789 -aWdpZGJvZHk= 30790 -IFN3aXNz 30791 -IENsaXA= 30792 -IER1bXA= 30793 -IFRleHRCb3g= 30794 -IGdlaA== 30795 -eWllbGQ= 30796 -b2Rz 30797 -IHJlZmVyZW5kdW0= 30798 -QmFja2VuZA== 30799 -IENyZWFt 30800 -IGRvbWluYXRlZA== 30801 -IEFyY2hpdmU= 30802 -IHJpZGVycw== 30803 -LnByZXBhcmVTdGF0ZW1lbnQ= 30804 -IHF1YW5kbw== 30805 -IGNoZWY= 30806 -d2lraQ== 30807 -aW5lbA== 30808 -YW1wbGluZw== 30809 -KCJcXA== 30810 -IHNhZw== 30811 -X3Byb3h5 30812 -44GV 30813 -cGRv 30814 -LmdldEVsZW1lbnRzQnlUYWdOYW1l 30815 -IGRlbW9uc3RyYXRpb24= 30816 -IE5QQw== 30817 -IGFyY2hpdm8= 30818 -ZW5kYW5jZQ== 30819 -IGVmZmljaWVudGx5 30820 -KGFjdHVhbA== 30821 -LnRhYmxlVmlldw== 30822 -IG11c2g= 30823 -IGJlYXJz 30824 -X3RocmVhZHM= 30825 -amFz 30826 -YWh1bg== 30827 -IG5ldXJhbA== 30828 -IGRlc2lnbmluZw== 30829 -IEdEUA== 30830 -IGxpZnRlZA== 30831 -55uu 30832 -IEpvaW50 30833 -IEluY2x1ZGU= 30834 -IEdpYW50cw== 30835 -IHdpdGhkcmF3YWw= 30836 -IFJlbnQ= 30837 -bmF0aXZl 30838 -IFNlZWs= 30839 -Z3Jlc3Npb24= 30840 -X0NQVQ== 30841 -XFM= 30842 -IFNoaWVsZA== 30843 -IHNvbGlj 30844 -IGJvb20= 30845 -eWVjdG8= 30846 -IG1hbnVmYWN0dXJl 30847 -IOKAiw== 30848 -IGJib3g= 30849 -IGVhcnRocXU= 30850 -b2xsZWN0b3Jz 30851 -OkAiJQ== 30852 -IGxvb3Bz 30853 -SmU= 30854 -YWxraW5n 30855 -IFdoYXRz 30856 -IEJveXM= 30857 -LmJvb2s= 30858 -QVJHRQ== 30859 -X3BpeGVs 30860 -IHN1c3BlY3Rz 30861 -zrk= 30862 -dXNw 30863 -IEJNVw== 30864 -aWVjZXM= 30865 -KHBlcnNvbg== 30866 -5byA 30867 -6bs= 30868 -IFBvZGNhc3Q= 30869 -IGJvdQ== 30870 -KEl0ZW0= 30871 -w7s= 30872 -KElucHV0 30873 -SHR0cEdldA== 30874 -IGJ1cmc= 30875 -KV4= 30876 -Qk9BUkQ= 30877 -Ki8s 30878 -IGd1bHA= 30879 -IEJlbm4= 30880 -IGRlY2tz 30881 -LnN0YXR1c0NvZGU= 30882 -IGFjdXRl 30883 -IGh1Zw== 30884 -dWd1 30885 -IHBsZWQ= 30886 -LCIl 30887 -aGFwZQ== 30888 -INC30LDQvw== 30889 -IE1haW5l 30890 -LnJlYWw= 30891 -IGRhbGFt 30892 -IE1pbm9y 30893 -LkZsb2F0 30894 -ZGlzcA== 30895 -IHRs 30896 -IGVuY291bnQ= 30897 -PT4k 30898 -IGZn 30899 -dGVlcw== 30900 -IFJlY29tbQ== 30901 -w6Rs 30902 -IGNoZW1pc3RyeQ== 30903 -QmxvY2tz 30904 -T0lE 30905 -IGZvcmV4 30906 -IEFwcGVuZA== 30907 -IHsq 30908 -IFN1cHBseQ== 30909 -Q0dGbG9hdA== 30910 -KGJs 30911 -IGF0ZQ== 30912 -YWRvcmE= 30913 -IGd1c3Q= 30914 -QXNzb2Np 30915 -Pi4K 30916 -RkVUQ0g= 30917 -LnNlcmlhbA== 30918 -d2lkZ2V0cw== 30919 -YXJkbGVzcw== 30920 -aWVmcw== 30921 -X0ZVTEw= 30922 -ZXJuZXRlcw== 30923 -IFByZWQ= 30924 -2K0= 30925 -5LqL 30926 -dWJlcm5ldGVz 30927 -IExhdXJh 30928 -IGxhYmVsZWQ= 30929 -SGlnaGxpZ2h0 30930 -IGFubm95aW5n 30931 -L3VwZGF0ZQ== 30932 -KGRlc2NyaXB0aW9u 30933 -IGludGltaWQ= 30934 -JGM= 30935 -IikpKQo= 30936 -LkFQ 30937 -IFtdKg== 30938 -IEVYSVQ= 30939 -Lkhvc3Q= 30940 -IE9QRU4= 30941 -LnNlbmRNZXNzYWdl 30942 -X2NhbWVyYQ== 30943 -X3RpbGU= 30944 -IHRoZXJt 30945 -b25vbW91cw== 30946 -IGRpc2Fkdg== 30947 -IG5hYXI= 30948 -aW5kZXhPZg== 30949 -IFBQ 30950 -LnByb3RvY29s 30951 -QUZF 30952 -IHRleHR1cmVz 30953 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 30954 -dW1iYWk= 30955 -LnN0YXRz 30956 -IEdF 30957 -IGll 30958 -IFNURA== 30959 -IE1hbm4= 30960 -LnJlZmxlY3Q= 30961 -S0I= 30962 -IGRpdmU= 30963 -Lndhdg== 30964 -LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 30965 -L3NldHRpbmdz 30966 -LmxpZmVjeWNsZQ== 30967 -IGRhdWdodGVycw== 30968 -b3J1cw== 30969 -dWJlcg== 30970 -TklORw== 30971 -c3RyaQ== 30972 -IFRpcA== 30973 -IHpu 30974 -IHN3aXRjaGVk 30975 -aW5ldA== 30976 -dWZmeQ== 30977 -IFRyYW5zcG9ydGF0aW9u 30978 -KGNvbmY= 30979 -ZnJpY2E= 30980 -IFhM 30981 -IExlYWQ= 30982 -X3BlcmNlbnQ= 30983 -PE1hcA== 30984 -IHRocnVzdA== 30985 -b3Ji 30986 -aWtr 30987 -IHRyYXVtYQ== 30988 -QWNjZXNzb3I= 30989 -IEZpdA== 30990 -IFN0cmluZ0J1ZmZlcg== 30991 -ZXhwbA== 30992 -KHNjcmVlbg== 30993 -IGF1ZGllbmNlcw== 30994 -IE9QVElPTg== 30995 -X3JvdW5k 30996 -W25vZGU= 30997 -YmVo 30998 -LT5fXw== 30999 -cGVybWlzc2lvbnM= 31000 -IERldGVybWluZQ== 31001 -Lk1hbg== 31002 -IGFkdmFuY2Vz 31003 -LklucHV0U3RyZWFt 31004 -IHN0cm9uZ2VzdA== 31005 -IGVCYXk= 31006 -ICMt 31007 -IGRpcm5hbWU= 31008 -IFNNUw== 31009 -IG1lZGljYXRpb25z 31010 -IGFtZW5kZWQ= 31011 -IGNodXJjaGVz 31012 -IEltcGVyaWFs 31013 -JHJvdw== 31014 -IE1hZGlzb24= 31015 -IEluc3A= 31016 -IGFmZmFpcg== 31017 -IHBzeWNob2xvZ3k= 31018 -dmg= 31019 -IHNldmVyaXR5 31020 -4oCQ 31021 -IHN0cmlwcw== 31022 -QUg= 31023 -dmVydGlzaW5n 31024 -IGNvbnNl 31025 -SU1BR0U= 31026 -IFN0YXRz 31027 -CXNj 31028 -LkN1cnNvcg== 31029 -IGZyZWV6ZQ== 31030 -c3Nvbg== 31031 -KHhtbA== 31032 -IFN1c2Fu 31033 -LnRpbGU= 31034 -ZWRlZA== 31035 -ICAgIAkJCQ== 31036 -dWVsbGU= 31037 -IE1pdGNoZWxs 31038 -YmFzZWQ= 31039 -T3BlcmFuZA== 31040 -veaVsA== 31041 -IEZG 31042 -CXN0cmNweQ== 31043 -b3VuY2Vz 31044 -aWxkbw== 31045 -LmV4ZWN1dGVRdWVyeQ== 31046 -IGFwcHJvYWNoaW5n 31047 -IFNldmVu 31048 -IG51dHM= 31049 -IHJpYw== 31050 -YXNzaWdubWVudA== 31051 -IGNhbGN1bGF0b3I= 31052 -IE11cnBoeQ== 31053 -IEJvdQ== 31054 -7YQ= 31055 -IGJ1dHQ= 31056 -IHRpY2tz 31057 -UHJvamVjdHM= 31058 -aWxpYg== 31059 -LnRleHRDb2xvcg== 31060 -bW92 31061 -X2xvZ28= 31062 -KHRlbXBsYXRl 31063 -IElOSVQ= 31064 -IGltYWdlVmlldw== 31065 -c2NyaXB0aW9ucw== 31066 -T1JJVFk= 31067 -Q29uc3VtZXI= 31068 -IHVucHJlY2VkZW50ZWQ= 31069 -IHRvdXJpc3Q= 31070 -IGJyb24= 31071 -IGNvbnRyYWN0b3I= 31072 -IGxpY2VuY2U= 31073 -IE5hbQ== 31074 -5q8= 31075 -KHRyYW5zZm9ybQ== 31076 -X0FUVA== 31077 -UHJlZg== 31078 -IEdhbQ== 31079 -IHZlc3NlbHM= 31080 -IGhhdg== 31081 -TGF0ZXI= 31082 -LlRvTG93ZXI= 31083 -IHVybHM= 31084 -IGJyZWFrZG93bg== 31085 -IHBlbmFsdGllcw== 31086 -IGZvc3Rlcg== 31087 -IFVF 31088 -IGNsdWU= 31089 -Y29tZWQ= 31090 -5ZCN56ew 31091 -LW1haW4= 31092 -IHB0cw== 31093 -IGNvdW50ZWQ= 31094 -aWN0cw== 31095 -L3Bvc3Q= 31096 -IGdldGF0dHI= 31097 -IHBpbmc= 31098 -QU5DRUw= 31099 -IHBlYw== 31100 -0YXQvtC0 31101 -YW50b20= 31102 -IEJsdWVwcmludA== 31103 -IEV2ZW50RW1pdHRlcg== 31104 -IGzDpA== 31105 -5rI= 31106 -IHN0cmF3 31107 -KGNvbXA= 31108 -J3VuZQ== 31109 -Pk4= 31110 -LWNsaWVudA== 31111 -ZXNNb2R1bGU= 31112 -LWJhc2U= 31113 -IHJldHJlYXQ= 31114 -X3NpbXBsZQ== 31115 -CQkJCQkJIA== 31116 -ZmVl 31117 -JykNCg0K 31118 -Q29udHJvbEl0ZW0= 31119 -IHN1YnNjcmliZXJz 31120 -cGxlYXNl 31121 -IEVmZg== 31122 -IHBvdW5k 31123 -IEJ5dGVz 31124 -IFRlYQ== 31125 -X2FjdGl2aXR5 31126 -IG1heGlt 31127 -IG9wY29kZQ== 31128 -QlNE 31129 -LmNvbnN0YW50 31130 -O30= 31131 -b21icmVz 31132 -IGNhcmVlcnM= 31133 -KS4KCgoK 31134 -IHNwcmVhZGluZw== 31135 -LWV4cGFuZGVk 31136 -IE9yZA== 31137 -YW1hcmlu 31138 -IG1vYmlsaXR5 31139 -VW5mb3J0dW5hdGVseQ== 31140 -YWtr 31141 -Tkw= 31142 -X3JlZGlyZWN0 31143 -IFBH 31144 -IFNlbnNvcg== 31145 -Ym9s 31146 -dGFw 31147 -X01FTU9SWQ== 31148 -IFVJQWxlcnQ= 31149 -cGxpdHVkZQ== 31150 -V2Vic2l0ZQ== 31151 -IExvZ28= 31152 -bG92ZQ== 31153 -W2luZA== 31154 -IGFsdG9nZXRoZXI= 31155 -IHdvbmRlcmVk 31156 -IGVzcGVy 31157 -IExpYmVyYWw= 31158 -IG9zcw== 31159 -IGVsaXQ= 31160 -IHN0aWZm 31161 -b2RveA== 31162 -X21lbnRpb25z 31163 -IERvdWdsYXM= 31164 -X3BpZA== 31165 -IENL 31166 -IGluaXRXaXRoRnJhbWU= 31167 -LmJsb2c= 31168 -cGtn 31169 -YW5naGFp 31170 -UVVJUkVE 31171 -dXU= 31172 -IG1rZGly 31173 -QVRBTA== 31174 -IHVuaA== 31175 -aW5jZXM= 31176 -c3Ro 31177 -IGh5cG90aGVzaXM= 31178 -IGNhdGE= 31179 -IFRC 31180 -IENsYXI= 31181 -IHByZWRlY2Vzcw== 31182 -IHNpdHVhdGVk 31183 -LXdvcmxk 31184 -KSkv 31185 -IGhlYWRsaW5lcw== 31186 -LnN0YXQ= 31187 -IG91dGJyZWFr 31188 -c3BhdGg= 31189 -X0ZMQUdT 31190 -IFNlcnZsZXRFeGNlcHRpb24= 31191 -U3Vu 31192 -RlJPTQ== 31193 -IERpcg== 31194 -44O744O744O7 31195 -X2Nvb3Jk 31196 -IE9wdGlt 31197 -TW9uaXRvcg== 31198 -LmJpdA== 31199 -WFhY 31200 -IHRvZGFz 31201 -ZmVsZA== 31202 -0YDQuA== 31203 -aW1pcg== 31204 -IHBvbGl0aWNhbGx5 31205 -IG1vbGVjdWxhcg== 31206 -IHRyYWRlZA== 31207 -IHt7JA== 31208 -IFN3ZWRpc2g= 31209 -ICdALw== 31210 -X1JFQUw= 31211 -IHdhcmVob3VzZQ== 31212 -dG9kYXk= 31213 -LEw= 31214 -b3Jw 31215 -PHNlY3Rpb24= 31216 -LWJy 31217 -eW1l 31218 -IFVzZXJTZXJ2aWNl 31219 -IGxpYmVydHk= 31220 -IG1vbWVudG8= 31221 -KEltYWdl 31222 -PHNpemU= 31223 -U2No 31224 -IGpvZw== 31225 -aW9sb2d5 31226 -YXJlbnRseQ== 31227 -IHF1YW50dW0= 31228 -IEFidQ== 31229 -IHJpbQ== 31230 -IG1hbmE= 31231 -Rm9udFNpemU= 31232 -QnVpbGRpbmc= 31233 -c3RhaXJz 31234 -QUlMQUJMRQ== 31235 -ICYn 31236 -IHNlY3Q= 31237 -IHNpZ2g= 31238 -KGJhdGNo 31239 -LklDb250YWluZXI= 31240 -cG9sbA== 31241 -IENvcnBz 31242 -zrU= 31243 -YXJ1 31244 -IEtheQ== 31245 -LnJhbmdl 31246 -X2NsaWNrZWQ= 31247 -IFJvYmVydHM= 31248 -Lk5ldHdvcms= 31249 -ZmluaXNo 31250 -LU1hbg== 31251 -IGNvbGxlZ2Vz 31252 -IEZpbmU= 31253 -IikpLAo= 31254 -ZmlsbQ== 31255 -IHJlbWluZGVk 31256 -IGdlc3R1cmU= 31257 -b3V0aWw= 31258 -IHRocmVhZGluZw== 31259 -IG9iamV0 31260 -IHRvdXJz 31261 -YWN0aXZhdGVk 31262 -Lm1rZGly 31263 -PXVzZXI= 31264 -IHJlZGU= 31265 -ZsO8 31266 -X1NZU1RFTQ== 31267 -cHY= 31268 -IGNvbmdy 31269 -IG1hc3Nhc2pl 31270 -IHByYWN0aXRpb24= 31271 -VW5pdmVyc2l0eQ== 31272 -IHRhYmluZGV4 31273 -0Jg= 31274 -U2V0cw== 31275 -IGNvdW50aWVz 31276 -Z3Vlc3Q= 31277 -ZmFu 31278 -IHdvcmRlbg== 31279 -LmRp 31280 -0L3QsNGH 31281 -wr8= 31282 -aWdEZWNpbWFs 31283 -IHNob3Jl 31284 -IGfDtg== 31285 -IHJlcGFpcnM= 31286 -IGhlbHBlcnM= 31287 -IGNlbnRlcmVk 31288 -T0xMT1c= 31289 -IG1hcFN0YXRlVG9Qcm9wcw== 31290 -IGNlbnRz 31291 -PEE= 31292 -IGV4cGVjdGF0aW9u 31293 -T2N0b2Jlcg== 31294 -IGJnY29sb3I= 31295 -Y2FsZXM= 31296 -LkNPTg== 31297 -IFZlbA== 31298 -IGNyeWluZw== 31299 -LXNlYXNvbg== 31300 -IGZ1bmN0aW9uaW5n 31301 -X0xPQ0FUSU9O 31302 -w7xzcw== 31303 -YmVyeQ== 31304 -UGFyYQ== 31305 -b21pbmF0b3I= 31306 -LWxl 31307 -IGV0aGljYWw= 31308 -aGFzaHRhZ3M= 31309 -ZW1wbG8= 31310 -IG7Dum1lcm8= 31311 -KGFjdGl2aXR5 31312 -LlN0b3A= 31313 -LnN0cmZ0aW1l 31314 -SUxE 31315 -IHRvZQ== 31316 -CU5vZGU= 31317 -IikNCg0K 31318 -IFB1ZXJ0bw== 31319 -IGV4ZWN1dGluZw== 31320 -IEdVSUQ= 31321 -IG9wcG9zaW5n 31322 -YWxwaA== 31323 -IGV4aGliaXQ= 31324 -X2ZsYXNo 31325 -IG1laWxsZQ== 31326 -IGpzb25PYmplY3Q= 31327 -SGVybw== 31328 -YWludGVk 31329 -X0RPTQ== 31330 -IHdpbA== 31331 -IHNsb3Bl 31332 -IG3DpQ== 31333 -IElyYXFp 31334 -IG9yZ2FuaXpl 31335 -CWpRdWVyeQ== 31336 -SFVE 31337 -c2hpbmU= 31338 -Lndl 31339 -IFNraWxscw== 31340 -cG9uc29y 31341 -IGNvbmNsdXNpb25z 31342 -IHJlZm9ybXM= 31343 -IHJlbHVjdA== 31344 -bmFtZWQ= 31345 -IE9saXZlcg== 31346 -IC8vfQo= 31347 -LWxvb2tpbmc= 31348 -IGZvZw== 31349 -IEhP 31350 -IEZyaWVk 31351 -IGluZXZpdGFibGU= 31352 -IERhdGFHcmlkVmlldw== 31353 -SG91cg== 31354 -aWxsZXM= 31355 -bG9naWNhbA== 31356 -IGNvbm5lY3Rpdml0eQ== 31357 -LnR3aWc= 31358 -IEt5bGU= 31359 -KGRzdA== 31360 -LVNo 31361 -IFN0dWRpb3M= 31362 -KExldmVs 31363 -LmpldA== 31364 -X1BST1RP 31365 -LWRlY29yYXRpb24= 31366 -T1RIRVI= 31367 -IHJlYWRpbHk= 31368 -LlBhcmFtZXRlcg== 31369 -IG11bHRpcGx5 31370 -IExJQg== 31371 -YXJtZWQ= 31372 -IHNvb25lcg== 31373 -5oQ= 31374 -X0VT 31375 -IGZvc3NpbA== 31376 -IEFuYw== 31377 -4oCcVGhpcw== 31378 -bG9kYXNo 31379 -UHl0aG9u 31380 -IGhpc3RvZ3JhbQ== 31381 -d2VzdGVybg== 31382 -IGluZmFudA== 31383 -IGNvb3JkaW5hdG9y 31384 -IG5pYg== 31385 -Om0= 31386 -IHJlc3BlY3RlZA== 31387 -IGRlZmluaXQ= 31388 -JlQ= 31389 -X3BhZA== 31390 -IFRyaWdnZXI= 31391 -dGhhbA== 31392 -IGltYWdlTmFtZWQ= 31393 -IGJlYXRlbg== 31394 -CXJj 31395 -IFBhbGFjZQ== 31396 -IGhhemFyZA== 31397 -IGlzb2xhdGlvbg== 31398 -X3Jj 31399 -Y29udHJl 31400 -T1VUUFVU 31401 -IHJlaWdu 31402 -IFBsYXRl 31403 -QVRFUw== 31404 -IGZsdXg= 31405 -IHBhY2tz 31406 -LmdldFNlbGVjdGVk 31407 -IHBhcnRpY2lwYXRlZA== 31408 -IG5lZWRsZQ== 31409 -LWRlcHRo 31410 -Ojo6Ojo6 31411 -LWxhdw== 31412 -aW5zcGFjZQ== 31413 -b25pdG9y 31414 -PW5v 31415 -IEF0b21pYw== 31416 -IEJyYWlu 31417 -RWRpdGFibGU= 31418 -LXNj 31419 -cmVkZW50aWFs 31420 -IFBlcnJ5 31421 -a2ll 31422 -IC0tLS0tLS0tLS0K 31423 -LnN0cm9rZQ== 31424 -KEludGVudA== 31425 -IHVuaXR5 31426 -dW1sYWg= 31427 -RnVydGhlcg== 31428 -IHByemU= 31429 -IHPDuA== 31430 -44KK 31431 -IFBST0NVUkVNRU5U 31432 -IEhvdXNpbmc= 31433 -IGF0dG9ybmV5cw== 31434 -IGNvbXBvc2U= 31435 -YXR0ZXJpbmc= 31436 -IldoYXQ= 31437 -ZHJhdWw= 31438 -IHN0cmFpZ2h0Zm9yd2FyZA== 31439 -SW5zdGFudA== 31440 -LkpUZXh0RmllbGQ= 31441 -IHRyYWRlcw== 31442 -0LvQsA== 31443 -IHsh 31444 -IGxhdGVseQ== 31445 -SU1H 31446 -IEFsZA== 31447 -IElOTkVS 31448 -IGNhcnRvb24= 31449 -LlNvdXJjZQ== 31450 -RkFMU0U= 31451 -IGRvdWdo 31452 -ZmVu 31453 -KHJlY3Q= 31454 -RGF0YVRhYmxl 31455 -Tmljaw== 31456 -IEJ1dHRlcg== 31457 -cmVhZHM= 31458 -X2NvbW1lbnRz 31459 -RU5W 31460 -IENvbm5lY3RpY3V0 31461 -LUZJUlNU 31462 -CQkJICAgICA= 31463 -YWNoaQ== 31464 -Lk1zZw== 31465 -cmVjdGlvbg== 31466 -IHJlbGF4ZWQ= 31467 -IHNoYWZ0 31468 -IGVm 31469 -IEFkZGluZw== 31470 -IGJyZWFjaA== 31471 -IO+8mg== 31472 -cmFtYQ== 31473 -IGNvbmR1Y3Rpbmc= 31474 -ICg7 31475 -KGds 31476 -IENBVVNFRA== 31477 -YXNoaQ== 31478 -IEZMQUc= 31479 -IENvbW1lcmNl 31480 -IElOVEVHRVI= 31481 -aG91cnM= 31482 -IFNjaG9vbHM= 31483 -IG51Y2xl 31484 -QWdhaW4= 31485 -cHJvag== 31486 -IHNldmVudGg= 31487 -RU1QTEFSWQ== 31488 -KG1vY2s= 31489 -J10sDQo= 31490 -X1NQRUVE 31491 -PmZhbHNl 31492 -IHNwYQ== 31493 -IE5lYXI= 31494 -7JU= 31495 -IGludHJpZw== 31496 -X21lbWJlcnM= 31497 -d2F2ZQ== 31498 -IGFuYWx5c3Rz 31499 -X09T 31500 -ZWRpbg== 31501 -IEZyaQ== 31502 -IHJldHJpZXZlZA== 31503 -UmVndWxhcg== 31504 -X29icw== 31505 -RVhQT1JU 31506 -Jyl9fSI= 31507 -ImNsYXNz 31508 -X18oKA== 31509 -YnVja2V0 31510 -IHN0cm8= 31511 -IFBhdGNo 31512 -eXN0aWNr 31513 -ZnVsbmVzcw== 31514 -YXBvcw== 31515 -RGE= 31516 -CQkJCQkgICA= 31517 -IGVucmljaA== 31518 -dW5vcmRlcmVk 31519 -aG9sZQ== 31520 -Q29uZw== 31521 -PFByb2R1Y3Q= 31522 -IEN1cnQ= 31523 -KHRoZQ== 31524 -X2xvd2Vy 31525 -IGF2b2lkaW5n 31526 -IGJ1eno= 31527 -IHZpYWJsZQ== 31528 -dWJh 31529 -LWlz 31530 -YXJlbA== 31531 -IGFjdGVk 31532 -LWRldGFpbHM= 31533 -4LiH 31534 -IFRoZW9yeQ== 31535 -IFB1bg== 31536 -IEFub255bW91cw== 31537 -Li4uIgo= 31538 -w6hyZXM= 31539 -5Y+v 31540 -IFZpc2lvbg== 31541 -X3NlbQ== 31542 -YXNoYQ== 31543 -IGNlbGVicml0eQ== 31544 -IGVuZERhdGU= 31545 -IHBvcHVsYXRl 31546 -IGN1aXM= 31547 -cXVhbnQ= 31548 -Zmxvb3I= 31549 -IGdsb2JhbGx5 31550 -IGNydWlzZQ== 31551 -IFN0YW5sZXk= 31552 -IGJpa2Vz 31553 -LmdldENvbm5lY3Rpb24= 31554 -IHBvb3JseQ== 31555 -X290aGVy 31556 -YW1waW5n 31557 -LiIpOwoK 31558 -b2Rp 31559 -X0FETUlO 31560 -LmNvbG9ycw== 31561 -IEdhbWluZw== 31562 -Pic7Cgo= 31563 -U1RSVUNU 31564 -UVI= 31565 -SURz 31566 -KGFyZ3VtZW50cw== 31567 -X2F1eA== 31568 -KEV2ZW50 31569 -X1BSSVZBVEU= 31570 -IFRyZWs= 31571 -IGRvd25sb2Fkcw== 31572 -bXV0YWJsZQ== 31573 -X1NUUlVDVA== 31574 -KHd4 31575 -IGRvbWFpbnM= 31576 -anNweA== 31577 -IFZpYWdyYQ== 31578 -Q29tbWFuZHM= 31579 -SnM= 31580 -LmNmZw== 31581 -Q29udGVudFBhbmU= 31582 -IEVkaXRUZXh0 31583 -4KWN4KQ= 31584 -QXR0YWNo 31585 -IEFSTQ== 31586 -cG9zaXRpdmU= 31587 -IEdlbmVyYXRlZA== 31588 -IHNlaXplZA== 31589 -PTo= 31590 -IGVsZWN0cm9uaWNz 31591 -IEFwcENvbXBvbmVudA== 31592 -LycsCg== 31593 -LmVxdWFsc0lnbm9yZUNhc2U= 31594 -RG9jdHJpbmU= 31595 -ZGlzaw== 31596 -IFBvbGl0aWNhbA== 31597 -Q0hP 31598 -PEY= 31599 -CWhlaWdodA== 31600 -IEJ1Zw== 31601 -Lmxl 31602 -aWto 31603 -IG1pbGxpc2Vjb25kcw== 31604 -IGNvbnN0aXR1 31605 -bWFn 31606 -Lm5s 31607 -LXJhbmdl 31608 -YW5nZ2Fs 31609 -Jyxb 31610 -cm9wb2xpdGFu 31611 -IMOc 31612 -IFVD 31613 -LmRlc2M= 31614 -LUxBU1Q= 31615 -ZnN0cmVhbQ== 31616 -aWJpbA== 31617 -IGZpZXI= 31618 -VkVSWQ== 31619 -IOuz 31620 -SVJU 31621 -X1VJ 31622 -KGFicw== 31623 -IGtuZWVz 31624 -IHJvb2tpZQ== 31625 -IFZhYw== 31626 -YXJlbmE= 31627 -Y29tbWVuZA== 31628 -LVw= 31629 -IFNVQlNUSVRVVEU= 31630 -U29mdA== 31631 -IHBhcnRpcg== 31632 -d2VhbHRo 31633 -6KaB 31634 -KGRhdGFzZXQ= 31635 -IENsaW1hdGU= 31636 -LXNob3c= 31637 -IHJlbGlhYmlsaXR5 31638 -X2NodW5r 31639 -5Luj 31640 -X3N0b2Nr 31641 -IEVYRU1QTEFSWQ== 31642 -77iP 31643 -IHbDrQ== 31644 -IHNtaWxlZA== 31645 -IGRyaWxs 31646 -LkZ1bmN0aW9u 31647 -IFNJ 31648 -IHJlZ3Jlc3Npb24= 31649 -LVg= 31650 -IEphcg== 31651 -cHJlZg== 31652 -CXN1Y2Nlc3M= 31653 -IEhpdGxlcg== 31654 -IGluc3RpbmN0 31655 -IGZlbW1lcw== 31656 -IGxvdmVy 31657 -PAo= 31658 -IG11bHRpcGxpZXI= 31659 -cmls 31660 -UmVzaXpl 31661 -IEF1dGhvcml6YXRpb24= 31662 -IEthbg== 31663 -RGlzcGF0Y2hUb1Byb3Bz 31664 -IGNyb3Bz 31665 -dG9rZW5z 31666 -ZWNu 31667 -ZW50aWFsbHk= 31668 -IElOVEVSUlVQVElPTg== 31669 -ZmFrZQ== 31670 -VW5kZWZpbmVk 31671 -IEFL 31672 -IFRlc3RDYXNl 31673 -IHJhYg== 31674 -IHRvcnJlbnQ= 31675 -IE90 31676 -QmFycw== 31677 -IGxlY3R1cmU= 31678 -IGVuam8= 31679 -IHJlc3BvbmRz 31680 -IGluZGV4ZWQ= 31681 -T2ZXb3Jr 31682 -X2NoYWlu 31683 -KSktPg== 31684 -IEJlYXV0eQ== 31685 -IGA8 31686 -IHRvdWNoaW5n 31687 -IHwtLQ== 31688 -CWZsYWc= 31689 -bm9ybWFsaXpl 31690 -IHRyYXBwZWQ= 31691 -IGVzdGFibGlzaGluZw== 31692 -L2J1aWxk 31693 -QUo= 31694 -Znk= 31695 -LXJlYWN0 31696 -YXZu 31697 -UklQVElPTg== 31698 -IGt1dA== 31699 -IEZhc2hpb24= 31700 -IEluZm9ybQ== 31701 -Y3VyaXRpZXM= 31702 -PGJ5dGU= 31703 -IFVrcmFpbg== 31704 -IHN1Zw== 31705 -IGNvbnNpc3Rpbmc= 31706 -b29kbGU= 31707 -LmN0eA== 31708 -LlRvTGlzdA== 31709 -IGNvbW1lbnRhcnk= 31710 -IHRyYW5zZmVycw== 31711 -IG5vc3Q= 31712 -aWhhZA== 31713 -IFVwcGVy 31714 -IGNvbmZ1c2luZw== 31715 -bWlzc2luZw== 31716 -LWNs 31717 -IGJvdW5kaW5n 31718 -IGNvbmdyZXNzaW9uYWw= 31719 -IHJldmVhbGluZw== 31720 -ZGg= 31721 -cnVw 31722 -IHRyZXM= 31723 -cmVwZWF0 31724 -LAoKCgo= 31725 -X3RhYw== 31726 -IGV4cGVk 31727 -R2lybA== 31728 -aG9yaXpvbnRhbA== 31729 -ICIuLi8uLi8uLi8= 31730 -KG9wdGlvbg== 31731 -IHdlaXRlcg== 31732 -CXNxbA== 31733 -ID0+ewo= 31734 -IGdhcmxpYw== 31735 -IHJlcHI= 31736 -IHJlcGxpZXM= 31737 -KHByb3A= 31738 -IHNwaXJpdHM= 31739 -IGluc3BpcmU= 31740 -IGJhc2VtZW50 31741 -LnJlamVjdA== 31742 -IGhpbnRz 31743 -IHBvbGxpbmc= 31744 -CSAK 31745 -X3JhdGluZw== 31746 -IGNhdGg= 31747 -YXZpZXI= 31748 -IGNvbXByZXNzZWQ= 31749 -IFZT 31750 -XSc= 31751 -IGp1ZGljaWFs 31752 -IFRyZW5k 31753 -dHJhaW5pbmc= 31754 -RVNUQU1Q 31755 -b2duaXRpb24= 31756 -xIE= 31757 -U0VOVA== 31758 -dmVudGlvbnM= 31759 -IGNvbnN1bHRhbnQ= 31760 -dW1waA== 31761 -IHVzZXJTZXJ2aWNl 31762 -LE5VTEw= 31763 -a2g= 31764 -RGVhcg== 31765 -X0JBRA== 31766 -aXRhdGlvbnM= 31767 -IG1ldGFwaA== 31768 -J8Op 31769 -YW5kaXNl 31770 -LWZvbnQ= 31771 -LmNoYXJ0 31772 -IHNn 31773 -X0NvbnRyb2xsZXI= 31774 -LmpwZWc= 31775 -IFVMT05H 31776 -CWdhbWU= 31777 -KHNz 31778 -IE1hag== 31779 -CWdv 31780 -IFNhZA== 31781 -IEJlcmc= 31782 -IE1pbmU= 31783 -UGFjaw== 31784 -IHJlc2lzdGFudA== 31785 -IFJPTQ== 31786 -IHBlZw== 31787 -IFN0YW5mb3Jk 31788 -IFlhaG9v 31789 -IHNjYWxlZA== 31790 -IGxhbg== 31791 -PVtd 31792 -Ii8+PC8= 31793 -IHBsb3Rz 31794 -LioK 31795 -IHRyYXZlbGVk 31796 -IE9zY2Fy 31797 -Vkw= 31798 -IGxpbmtpbmc= 31799 -IHRpcmVz 31800 -ICcqJw== 31801 -IEJ1ZmZlcmVk 31802 -ZXJp 31803 -ICoqKio= 31804 -IG92ZXJsb29r 31805 -Lk5vbg== 31806 -IHLDqXM= 31807 -IGVneQ== 31808 -5bCP 31809 -IGF0dGFja2Vy 31810 -CQkJCQkJCQkJCQkJCQkJ 31811 -LnN5bmM= 31812 -QVNDQURF 31813 -R3JvdW5k 31814 -IGRlY2F5 31815 -IFRvbg== 31816 -IGpld2Vscnk= 31817 -IGJ5cGFzcw== 31818 -IG1lbWJy 31819 -Uk5B 31820 -PFN5c3RlbQ== 31821 -IE1lZGljYXJl 31822 -KG5ldA== 31823 -b3Np 31824 -SEI= 31825 -REVD 31826 -e0VJRg== 31827 -X2ZpbGw= 31828 -IHRyYXZlbGxpbmc= 31829 -b2JzZXJ2ZXI= 31830 -IGNvbnN1bHRpbmc= 31831 -UkVBVA== 31832 -UGhhc2U= 31833 -KGlp 31834 -IFNVTQ== 31835 -Pg0NCg== 31836 -IHN1ZA== 31837 -CWJhY2tncm91bmQ= 31838 -IHNjaG9sYXJz 31839 -LW11dGVk 31840 -YXLDoQ== 31841 -ID09PT09 31842 -IF9fX18= 31843 -Q3JlYXQ= 31844 -ZW5ldmVy 31845 -L3dw 31846 -IFZQTg== 31847 -RXJyb3JDb2Rl 31848 -KV0sCg== 31849 -KGJ1aWxkZXI= 31850 -IEVuZW15 31851 -U2Vuc29y 31852 -dXNh 31853 -IHRyaWdnZXJz 31854 -IHBsYXlvZmZz 31855 -X1JFUQ== 31856 -ICh+ 31857 -IEJhcnJ5 31858 -IHBlcm1hbmVudGx5 31859 -IFJVTg== 31860 -IGJ1cmU= 31861 -LkZhdGFsZg== 31862 -IGNoaWNr 31863 -CXBhbmlj 31864 -cHNp 31865 -b2th 31866 -6YCJ 31867 -Pls= 31868 -IHVuZGVyc3RhbmRz 31869 -IEp1bmlvcg== 31870 -IElORk8= 31871 -PW15c3FsaQ== 31872 -dXN0YWlu 31873 -LXNvdXJjZQ== 31874 -c2Vydg== 31875 -IENSRUFURQ== 31876 -LmF1 31877 -IHNlbGxz 31878 -ICAKICAK 31879 -RXVyb3Bl 31880 -enc= 31881 -cHJlaA== 31882 -IE5TQQ== 31883 -IHh5 31884 -4Li0 31885 -IEJleW9uZA== 31886 -SW5zdGVhZA== 31887 -Tm9uUXVlcnk= 31888 -IGFyaXNl 31889 -IGF2b2lkZWQ= 31890 -LmVtcGxhY2U= 31891 -X21vZGVscw== 31892 -fSksCg== 31893 -IGhpZA== 31894 -ICZf 31895 -LnBvaW50cw== 31896 -LmdldFdpZHRo 31897 -LkV4ZWM= 31898 -IC8vLy8= 31899 -IFNlc3Npb25z 31900 -Li4uXA== 31901 -IENvbG9tYg== 31902 -IGFjY2VsZXJhdGlvbg== 31903 -cmVzdG9yZQ== 31904 -IGlsZQ== 31905 -b2JpYw== 31906 -PE5vZGU= 31907 -IERY 31908 -IEJlc2lkZXM= 31909 -LmFnZQ== 31910 -IENvbnRhaW5z 31911 -TmF0aW9uYWw= 31912 -IEltcGxlbWVudGF0aW9u 31913 -IGVmZmlj 31914 -IFJN 31915 -SHk= 31916 -IFdlZGRpbmc= 31917 -b2tpZXM= 31918 -IHJlY3Vyc2l2ZQ== 31919 -IHByb3NlY3V0b3Jz 31920 -LlNlbGVjdGlvbg== 31921 -IEZvcm11bGE= 31922 -QmVlbkNhbGxlZA== 31923 -W2lp 31924 -IEZyYW4= 31925 -IHRyYWdlZHk= 31926 -X0ZFQVRVUkU= 31927 -mag= 31928 -Y29tcGFzcw== 31929 -IEJo 31930 -PwoKCg== 31931 -LndyaXRlcg== 31932 -IEhvdXI= 31933 -RGJDb250ZXh0 31934 -aW92 31935 -YW1vbg== 31936 -cmVwcg== 31937 -6YM= 31938 -CWZp 31939 -J11d 31940 -IERyeQ== 31941 -LnJv 31942 -IE9ic2Vydg== 31943 -5qCH 31944 -Rm9ybWVy 31945 -IEJhbGFuY2U= 31946 -CWpzb24= 31947 -IHByenk= 31948 -SVNT 31949 -KHNvY2s= 31950 -IExJTkU= 31951 -IGRlY2U= 31952 -IGFsbHk= 31953 -IHRlbmRlbmN5 31954 -RnVu 31955 -IHNjaGVtZXM= 31956 -IGludGVydmVu 31957 -5piO 31958 -IGFkdmVyc2U= 31959 -cXVvdGVsZXY= 31960 -IHNhY3JpZmlj 31961 -X3NpZGU= 31962 -IG11dGV4 31963 -QUdJQw== 31964 -IG9jY3VycmluZw== 31965 -IENvbW11bmljYXRpb24= 31966 -dW1hcg== 31967 -57yW 31968 -IFRyZWF0bWVudA== 31969 -LnBlcnNvbg== 31970 -IExD 31971 -IGVjaA== 31972 -KCgi 31973 -IERpc2Vhc2U= 31974 -w6Rk 31975 -IEFa 31976 -LkFjY291bnQ= 31977 -IGNvbnRpbnVvdXNseQ== 31978 -RU5ESU5H 31979 -IFJFVFVSTg== 31980 -LXN0cmluZw== 31981 -LmZpbGVuYW1l 31982 -c3ludGhlc2l6ZQ== 31983 -UmVzcG9uZGVy 31984 -KG9wdHM= 31985 -cmVncw== 31986 -IG51ZXN0 31987 -UGVlcg== 31988 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 31989 -IGdhdWdl 31990 -IEtpbg== 31991 -LnNjaGVtYQ== 31992 -IGFycmFuZ2U= 31993 -IEJsYWtl 31994 -X1R5cGVJbmZv 31995 -Q292ZXI= 31996 -IEhhbXBzaGlyZQ== 31997 -UGFwZXI= 31998 -LWlubmVy 31999 -dXRpbGl0eQ== 32000 -IGNyb3Nzb3JpZ2lu 32001 -Rk9S 32002 -IGlnbm9yaW5n 32003 -IERE 32004 -YXZhbg== 32005 -IHRyYWRpdGlvbnM= 32006 -IGdldFN0cmluZw== 32007 -IGV0aGljcw== 32008 -IE1hdGVyaWFscw== 32009 -REVTQw== 32010 -IGVuenlt 32011 -aW9sZXQ= 32012 -IENoaXA= 32013 -IE1jRG9uYWxk 32014 -IG5lcnZl 32015 -54Q= 32016 -Iild 32017 -5rGC 32018 -IFN1Z2Fy 32019 -X1NJTQ== 32020 -anBlZw== 32021 -IGRpc2NyZXRpb24= 32022 -IFRO 32023 -Ym92ZQ== 32024 -IE1pbmltdW0= 32025 -IEZvcm1Hcm91cA== 32026 -IHdvcmtmb3JjZQ== 32027 -IEV4ZWN1dGlvbg== 32028 -ZXJyZXI= 32029 -CSAgICAJ 32030 -IHByZXNjcmliZWQ= 32031 -LlRleHRBbGlnbg== 32032 -T1BFTg== 32033 -IFBC 32034 -aW1pdHk= 32035 -IEV4dGVybmFs 32036 -wrBD 32037 -IEFwcGxpY2F0aW9uQ29udHJvbGxlcg== 32038 -IGJhcnI= 32039 -aW1wbGljaXQ= 32040 -X2RvdA== 32041 -IENvbG9u 32042 -Q09MT1I= 32043 -LlByb2plY3Q= 32044 -Kjwv 32045 -LXhs 32046 -IG9zYw== 32047 -KHBhdHRlcm4= 32048 -Jyl9Cg== 32049 -c3VjY2Vzc2Z1bA== 32050 -YWxvZw== 32051 -U3R1ZGVudHM= 32052 -XXN0cmluZw== 32053 -YW50b24= 32054 -YXR0aQ== 32055 -Y2hlbWljYWw= 32056 -LmluZg== 32057 -KGRy 32058 -OlVJQ29udHJvbFN0YXRl 32059 -dG9JbnQ= 32060 -XTwv 32061 -0LDQtdC8 32062 -IMW+ 32063 -LkFjdGlvbkxpc3RlbmVy 32064 -LlNFVkVSRQ== 32065 -IFNhbHY= 32066 -X1RSQU4= 32067 -L2ludGVybmFs 32068 -IHdlbGNvbWVk 32069 -LmNvbW1lbnQ= 32070 -bXV0YXRpb24= 32071 -IEZBUQ== 32072 -Lm9uZQ== 32073 -IExBQg== 32074 -In19 32075 -IFJvbA== 32076 -aWV2ZWQ= 32077 -IGFkdmVudHVyZXM= 32078 -IGZ1bmVyYWw= 32079 -IHNwb3VzZQ== 32080 -KG9wZW4= 32081 -IFJlYWR5 32082 -IHRvdXJpc20= 32083 -YWRpbg== 32084 -X2ZhY2U= 32085 -4oKB 32086 -IG1pZ3JhbnRz 32087 -IFB1cmNoYXNl 32088 -Y29yZA== 32089 -IE9VVFBVVA== 32090 -KSkNCg0K 32091 -U2VndWU= 32092 -dGFicw== 32093 -IGRvdHM= 32094 -IG5haWw= 32095 -Ym9ybmU= 32096 -IGRlc2lyZXM= 32097 -IHByZXZlbnRlZA== 32098 -J109PQ== 32099 -IHRpbWVseQ== 32100 -SUNB 32101 -U2Nhbm5lcg== 32102 -IEx1Y2Fz 32103 -IGdpdGh1Yg== 32104 -J11bXQ== 32105 -ZGlh 32106 -Y29ub21pYw== 32107 -IGRpZXNlcg== 32108 -dW5kZXJz 32109 -LkhhbmRsZXI= 32110 -PyIs 32111 -LmRhdGFi 32112 -IGFkdmlzZQ== 32113 -LmFuaW1hdGlvbg== 32114 -IG92ZXJoZWFk 32115 -IG9ic3RhY2xlcw== 32116 -X2pvaW4= 32117 -IG3DqQ== 32118 -RmxhdA== 32119 -LmRpc3Bvc2U= 32120 -IEV4cGVjdGVk 32121 -IGZsZXc= 32122 -IGVtYm9k 32123 -X3NsdWc= 32124 -IG5hbWVseQ== 32125 -IHdpdG5lc3NlZA== 32126 -c29saWQ= 32127 -LmxlZ2VuZA== 32128 -UXVhbA== 32129 -X3N1cmZhY2U= 32130 -44Op 32131 -QW1lcmljYQ== 32132 -IGFmZmlsaWF0ZXM= 32133 -IFByb3M= 32134 -X2V4dGVuc2lvbg== 32135 -YmluZGluZw== 32136 -U1RBTEw= 32137 -LnJlYWR5 32138 -IGNvcHlpbmc= 32139 -IEhlbmNl 32140 -IGRpc2NvcmQ= 32141 -X3NoaXA= 32142 -UHJvcGVydHlOYW1l 32143 -CQkgICAgICAgICAgIA== 32144 -IGFjaGlldmluZw== 32145 -IEJlYw== 32146 -Wmlw 32147 -U29tZXRpbWVz 32148 -44GL 32149 -IGNvbnRyYQ== 32150 -IHB1bmlzaA== 32151 -IGluc3VsaW4= 32152 -IGRpc2FwcGVhcg== 32153 -X2VudW0= 32154 -LmF1dA== 32155 -IGhhc2F0dHI= 32156 -YWZmZWN0ZWQ= 32157 -c2hl 32158 -JHRhYmxl 32159 -a3Np 32160 -IGxhY2tpbmc= 32161 -IGRpc2NvdW50cw== 32162 -U3RtdA== 32163 -IEFyZ2VudGluYQ== 32164 -IHVucGFjaw== 32165 -IFJvdXRlZEV2ZW50QXJncw== 32166 -ICc/ 32167 -aW50ZXJvcA== 32168 -IHNvZmE= 32169 -IGR5bg== 32170 -IEdyYWNl 32171 -IGludGVncmF0ZQ== 32172 -2YM= 32173 -IGRlbGF5cw== 32174 -IEltcGxlbWVudA== 32175 -UHJvb2Y= 32176 -IGFwcGxpY2FudHM= 32177 -IExlYXRoZXI= 32178 -7Ja0 32179 -IGVuam95YWJsZQ== 32180 -U3Bpbm5lcg== 32181 -L3o= 32182 -IGZvYW0= 32183 -IExhYm9yYXRvcnk= 32184 -IHJlc2VhcmNoZXI= 32185 -IENocmlzdGlhbml0eQ== 32186 -IGN1c3RvbWl6ZQ== 32187 -IGNpcGhlcg== 32188 -IGRvZA== 32189 -IHPDsw== 32190 -QEVudGl0eQ== 32191 -T05MWQ== 32192 -aW52ZW50b3J5 32193 -IGNvbmNsdWRl 32194 -IGN1ZW50YQ== 32195 -IENvaGVu 32196 -LWluY29tZQ== 32197 -bWJI 32198 -bWVudGF0aW9u 32199 -IHZlcnc= 32200 -dWRw 32201 -QU1M 32202 -LmNvbWJvQm94 32203 -Zmg= 32204 -am9icw== 32205 -RmlsZVN5bmM= 32206 -IEJhcmJhcmE= 32207 -IFNjYW4= 32208 -Y3JlZW5zaG90 32209 -IE9ydGg= 32210 -LnZpZXdEaWRMb2Fk 32211 -IEFSUkFZ 32212 -LEA= 32213 -L2ludA== 32214 -R2VuZXJhdGU= 32215 -IGRlbW9uc3RyYXRlcw== 32216 -IFplbmQ= 32217 -5YiX 32218 -CXZvbGF0aWxl 32219 -PXI= 32220 -IGZt 32221 -CWJ1ZmZlcg== 32222 -ZW5hdGU= 32223 -LkNvbWJpbmU= 32224 -IG1pc2M= 32225 -Y2hlbWFz 32226 -IHB1cmVseQ== 32227 -IGdsVmVydGV4 32228 -LlJlc3Q= 32229 -IHJlY2FsbGVk 32230 -IGZyZWVs 32231 -IHNxdWU= 32232 -VHJhY2tlcg== 32233 -IFBocA== 32234 -IERpc3RhbmNl 32235 -IGJlYXN0 32236 -Q29tcGxleA== 32237 -IGNvbnNpZGVycw== 32238 -572R 32239 -dHJpYnV0aW9u 32240 -IGNvbXBsaW1lbnQ= 32241 -X2xpbmVubw== 32242 -IE11dGFibGU= 32243 -IHVuZGVm 32244 -IEdlbQ== 32245 -IGNvbXBvdW5kcw== 32246 -LnV1aWQ= 32247 -IGFub255bQ== 32248 -IHN0YWlycw== 32249 -IERiU2V0 32250 -d29ydA== 32251 -IFNlbnM= 32252 -LkJlZm9yZQ== 32253 -IGVuZGZvcmVhY2g= 32254 -IFRvZ2V0aGVy 32255 -YXRpbGl0eQ== 32256 -IG1vaXN0dXJl 32257 -LSR7 32258 -KFRlc3Q= 32259 -VEI= 32260 -bXVzaWM= 32261 -IGluc2lzdA== 32262 -IGhlYWRsaW5l 32263 -LkFuZA== 32264 -UEFUQ0g= 32265 -IFByZXBhcmU= 32266 -IHN3aXRjaGVz 32267 -KnA= 32268 -IFll 32269 -X2Ficw== 32270 -LmhhbmRsZXI= 32271 -IGFzc2lnbm1lbnRz 32272 -UHJlZmVyZW5jZQ== 32273 -RU5USVRZ 32274 -IHBpcGVz 32275 -IEFsZXJ0RGlhbG9n 32276 -b2dyYXBoaWNhbA== 32277 -IHBhdGlv 32278 -IHdlYnBhY2s= 32279 -YnBz 32280 -TmF2TGluaw== 32281 -Lk51bWJlcg== 32282 -IEFybW9y 32283 -IFBldGVycw== 32284 -IERlc2M= 32285 -ZHVpbm8= 32286 -IEljb25z 32287 -LmdldEhlaWdodA== 32288 -IHRleHRWaWV3 32289 -CU5VTEw= 32290 -YWxsb2NhdGU= 32291 -fSR7 32292 -IFByaXpl 32293 -LW51bQ== 32294 -Lk1vdmU= 32295 -6L6T5YWl 32296 -LmNhbWVyYQ== 32297 -UHJvYmxlbQ== 32298 -CXR5cGVkZWY= 32299 -KHN0b3Jl 32300 -IERJU0NMQUlNRUQ= 32301 -IHN1YnN0YW50aWFsbHk= 32302 -RkZG 32303 -IGVwc2lsb24= 32304 -IGluZXF1YWxpdHk= 32305 -X2NoaWxkcmVu 32306 -5LiH 32307 -cmVsdQ== 32308 -UGllY2U= 32309 -YW50cnk= 32310 -YmFiZWw= 32311 -dmV0aWNh 32312 -IHN1cnZleXM= 32313 -IGRldGVjdG9y 32314 -CWFyZ3M= 32315 -LlNlbGVjdGVkVmFsdWU= 32316 -IGludGVyZmVyZW5jZQ== 32317 -Li4uKQo= 32318 -LlNUUklORw== 32319 -IFR5bGVy 32320 -IENhdGFsb2c= 32321 -VmVydGljZXM= 32322 -IFByb2plY3Rz 32323 -IExlYmFu 32324 -LiIpCgo= 32325 -Lmtlcm5lbA== 32326 -IHJpZGVz 32327 -IE11dA== 32328 -YW50aA== 32329 -0L7RgNC8 32330 -ZW5uaWFs 32331 -LnRhc2tz 32332 -LnNldFByb3BlcnR5 32333 -YXRlZ29yaQ== 32334 -5pyA 32335 -L2Nvbg== 32336 -YnJhY2U= 32337 -IE5TRXJyb3I= 32338 -J10pKTsK 32339 -bGlzdGVk 32340 -IFByZXZpZXc= 32341 -QWN0aXZhdGU= 32342 -IGN5Y2w= 32343 -LWFjdGl2ZQ== 32344 -aGFk 32345 -VG9v 32346 -IHJlZ2lzdA== 32347 -bGljYWw= 32348 -IHBvZXRyeQ== 32349 -SW1wb3J0cw== 32350 -77yB77yB 32351 -Ojw= 32352 -IGNoYXJt 32353 -IENvdW4= 32354 -b2xsaWRlcg== 32355 -IGh3 32356 -fWAK 32357 -PWFyZ3M= 32358 -IE5ldXJv 32359 -aXRpY2Fs 32360 -aWVuZW4= 32361 -IERvdA== 32362 -X09OTFk= 32363 -RE4= 32364 -IFBsYXlTdGF0aW9u 32365 -IHN0ZWVw 32366 -IHByYWN0aWNhbGx5 32367 -IGFwcGxpY2FudA== 32368 -IGFyb20= 32369 -YW5pYw== 32370 -CWRpc3BsYXk= 32371 -IHRlcm1pbmF0ZWQ= 32372 -IGNsYXJpdHk= 32373 -IE1lbnVJdGVt 32374 -IEt1cg== 32375 -aWpl 32376 -X3dlZWs= 32377 -KGRpY3Q= 32378 -X3JlY29yZHM= 32379 -IENvc3Rh 32380 -IGtldA== 32381 -RXh0ZW5zaW9ucw== 32382 -IG5ldWtlbg== 32383 -aW5zaQ== 32384 -X2luYw== 32385 -IOaW 32386 -IGVpbmY= 32387 -IFJpc2s= 32388 -IGVsZXZhdGVk 32389 -cGVycw== 32390 -VURB 32391 -IEtO 32392 -IGxpbmVk 32393 -IE1vcm0= 32394 -KTsKCgoK 32395 -Pn0K 32396 -cGxhaW50 32397 -Z2V0VGV4dA== 32398 -IGluZGl2aWR1YWxseQ== 32399 -IGNoZWNrYm94 32400 -VVk= 32401 -IExhbWI= 32402 -IGR5c2Z1bmN0aW9u 32403 -IExhcg== 32404 -4LA= 32405 -IENyZWF0aW5n 32406 -Jyk7CgoK 32407 -IlRoZXk= 32408 -bG9jYXRpb25z 32409 -X0NPUkU= 32410 -SW50ZXJhY3Rpb24= 32411 -dW1ibmFpbHM= 32412 -IFBhcnRuZXI= 32413 -YnJpdA== 32414 -IGxlc3Nlcg== 32415 -IFNsb3Q= 32416 -c2V0QXR0cmlidXRl 32417 -IFdhdmU= 32418 -LnBv 32419 -L3N0b3Jl 32420 -IGJyb3dzaW5n 32421 -X3Bk 32422 -c3VtZQ== 32423 -c2Vk 32424 -Q3VydmU= 32425 -IHBsYXNtYQ== 32426 -IHN1c3BpY2lvdXM= 32427 -7J24 32428 -IEJhaA== 32429 -IEV4cGxpY2l0 32430 -X0ND 32431 -LkNsaWVudFNpemU= 32432 -XFZpZXc= 32433 -IHN1YnN0aXQ= 32434 -bG9vbg== 32435 -IEdBTUU= 32436 -IEJyaWQ= 32437 -m+W7ug== 32438 -X1VzZXI= 32439 -IHNxdWFyZXM= 32440 -Zm9uZQ== 32441 -IHNhY3JlZA== 32442 -dWdocw== 32443 -XWludGVyZmFjZQ== 32444 -IFRocm93 32445 -IEtpcms= 32446 -IGVtcGlyZQ== 32447 -IGFzc2Vzc2Vk 32448 -VGF4 32449 -IEhlYXZlbg== 32450 -LWJ1ZmZlcg== 32451 -X1NUQVRJQw== 32452 -w6luw6k= 32453 -LWJvcmRlcmVk 32454 -IHB1bmN0 32455 -KG1vZGU= 32456 -IGtlaW5l 32457 -U2VudA== 32458 -IENhbGN1bA== 32459 -IEV2ZQ== 32460 -IHN0eWxpc2g= 32461 -IG9pbHM= 32462 -LlRlc3RDYXNl 32463 -IHRyYWRlbWFyaw== 32464 -IGxpdGVyYXJ5 32465 -IGNvbmNlbnRyYXRpb25z 32466 -IFJlbGF0aW9ucw== 32467 -KENsYXNz 32468 -IHN0ZGlu 32469 -IHbDpg== 32470 -YmFja3Vw 32471 -LlZFUlNJT04= 32472 -LkF1dG9TY2FsZURpbWVuc2lvbnM= 32473 -c3RhcnRlcg== 32474 -VHJhbnNhY3Rpb25hbA== 32475 -LXBhbmVs 32476 -U3R1ZGlv 32477 -a2M= 32478 -IENoYW1iZXI= 32479 -IFNwaWVs 32480 -IHJobw== 32481 -2KfZhA== 32482 -ISc= 32483 -LkF0dHJpYnV0ZXM= 32484 -IG11cmRlcmVk 32485 -YXBldXRpYw== 32486 -IGludGltYXRl 32487 -IHRleHRGaWVsZA== 32488 -IEJ1ZmZhbG8= 32489 -ZHVtbXk= 32490 -IiU= 32491 -IExpYmVydHk= 32492 -b2Jhcg== 32493 -IFRhbms= 32494 -IFBvcHVsYXI= 32495 -ZXJ2aXNvcg== 32496 -IEluaXRp 32497 -IE1hbGw= 32498 -IFByaW9y 32499 -Q0FQ 32500 -IENsYXk= 32501 -IENlcnRpZmljYXRl 32502 -LkxvY2s= 32503 -LXN0cmlw 32504 -LWRyaXZlbg== 32505 -L2FsbA== 32506 -IE1lc3NhZ2VCb3hCdXR0b25z 32507 -X1NFQ1JFVA== 32508 -X3Bi 32509 -IHJhdHM= 32510 -4KS+4KQ= 32511 -IG50 32512 -LlJvdXRlcg== 32513 -X3RvcGlj 32514 -IHRlbm5pcw== 32515 -IFBVQkxJQw== 32516 -IEFjdGl2YXRlZFJvdXRl 32517 -ICcsCg== 32518 -IGNvc3R1bWU= 32519 -IGpva2Vz 32520 -LkhhbmRsZQ== 32521 -CWJ5dGU= 32522 -IGZsYXZvcnM= 32523 -KGNj 32524 -IHBlcnNvbmFz 32525 -CWltYWdl 32526 -IE5hemk= 32527 -IGdyYW1tYXI= 32528 -IMO6bHQ= 32529 -IHZhbHZl 32530 -IHZpYw== 32531 -IFJhY2hlbA== 32532 -X2ludmFsaWQ= 32533 -UHJlZnM= 32534 -c3RkaW50 32535 -KHJvdXRl 32536 -IGh0bWxzcGVjaWFsY2hhcnM= 32537 -IHBlb3BsZXM= 32538 -cGxpbmU= 32539 -IG52 32540 -IFF1YW50 32541 -b3BwZXJz 32542 -IGN1cnJlbnRVc2Vy 32543 -IENhdGFs 32544 -IHJlY29uYw== 32545 -IGNvbmp1bmN0aW9u 32546 -bHg= 32547 -YW1idXJn 32548 -IGluZmx1ZW50aWFs 32549 -ZGFuZ2Vy 32550 -aW5kZXJz 32551 -ICVAIiw= 32552 -LmNvbmZpZ3VyYXRpb24= 32553 -b3NvbWU= 32554 -LmlkZW50aXR5 32555 -IHBpY2tlcg== 32556 -bm9zdA== 32557 -IERJWQ== 32558 -QXVndXN0 32559 -YWJsbw== 32560 -TGVhZg== 32561 -IFJlY28= 32562 -Y2tv 32563 -RE9D 32564 -IEhlcm0= 32565 -OmFueQ== 32566 -IEludGVydmlldw== 32567 -IFRleA== 32568 -eGZl 32569 -KHdvcms= 32570 -IGxlYXA= 32571 -SGVhZGluZw== 32572 -IHF1YXJ0ZXJz 32573 -XEJ1bmRsZQ== 32574 -cmVi 32575 -UGVyaGFwcw== 32576 -IEdtYkg= 32577 -QmlydGg= 32578 -CXN1bQ== 32579 -IFdhdHNvbg== 32580 -Lm5pbA== 32581 -56E= 32582 -e30KCg== 32583 -aWNhaWQ= 32584 -R2V0dGVy 32585 -Im5hbWU= 32586 -ICINCg== 32587 -X25vbmU= 32588 -em0= 32589 -YWN1dGU= 32590 -dWVzdG8= 32591 -IHNvdXM= 32592 -IHJlYnVpbGQ= 32593 -IG5ld3NwYXBlcnM= 32594 -IEhheg== 32595 -IGtpdHM= 32596 -aWZv 32597 -Qmx1cg== 32598 -IHN1aXRlZA== 32599 -LUlu 32600 -4K8= 32601 -IEtlaXRo 32602 -IE5vcndheQ== 32603 -SU5JVA== 32604 -aXJlY2Npb24= 32605 -aWV0aWVz 32606 -X3VzYWdl 32607 -IERvdWc= 32608 -cmlzZQ== 32609 -IHRyaWxsaW9u 32610 -aW1pdGVk 32611 -IFJFTA== 32612 -YWxpYw== 32613 -IGNyaXRpY2l6ZWQ= 32614 -dGhlb3JlbQ== 32615 -IGNlYXNl 32616 -IHNpZGV3 32617 -IFRlcnJ5 32618 -IHN1YnNpZGk= 32619 -IGZpcm1seQ== 32620 -IGF3cw== 32621 -IGhvdHQ= 32622 -IGRyZXNzaW5n 32623 -YmFkZ2U= 32624 -IEFwcGxpY2F0aW9ucw== 32625 -6L+U5Zue 32626 -IGxhdWdoZWQ= 32627 -IGhvYmJ5 32628 -IG11c2ljaWFucw== 32629 -ICou 32630 -LnBsYWNlaG9sZGVy 32631 -IGNvdW50ZXJz 32632 -IENhcGl0b2w= 32633 -U0RL 32634 -IGhlbG1ldA== 32635 -YW5kYm94 32636 -cXVpdA== 32637 -IGNyaW1pbmFscw== 32638 -IHRlZW5hZ2Vy 32639 -KHVwZGF0ZQ== 32640 -R2w= 32641 -LnNlbGVjdGlvbg== 32642 -IGRpc2NoYXJnZQ== 32643 -IHByZXNlbnRpbmc= 32644 -dWZhY3R1cmVy 32645 -X1VOS05PV04= 32646 -IHN0cmVzc2Vk 32647 -5Zmo 32648 -UHJvdG8= 32649 -X2NvcnJlY3Q= 32650 -aGF1cw== 32651 -IHJlbm92 32652 -IGZpcmVhcm1z 32653 -IHRlY2huaWNhbGx5 32654 -LWJyb3dzZXI= 32655 -IGNhbmR5 32656 -U3Ryb2tl 32657 -IGV4ZWN1dG9y 32658 -IG9jY3VycmVuY2U= 32659 -IElQdg== 32660 -X0lOVEVSRkFDRQ== 32661 -IFJldHJpZXZl 32662 -LmJhZA== 32663 -RXhjaGFuZ2U= 32664 -TmF2YmFy 32665 -IEtpZA== 32666 -KGdldEFwcGxpY2F0aW9uQ29udGV4dA== 32667 -X1NUT1A= 32668 -IEJvc3M= 32669 -TGlzdGVuZXJz 32670 -IHNob290ZXI= 32671 -IEFsYg== 32672 -w6RjaA== 32673 -IHBpeA== 32674 -LmtleUNvZGU= 32675 -YWxvbmU= 32676 -IGFic3VyZA== 32677 -IEN1bQ== 32678 -IE5ld3RvbnNvZnQ= 32679 -aWt0 32680 -IGxhdWdoaW5n 32681 -IGNhcGl0YWxpc20= 32682 -cmVlTm9kZQ== 32683 -VHg= 32684 -X1FVRVJZ 32685 -LlNsZWVw 32686 -KGxvZ2lu 32687 -V2ViRWxlbWVudA== 32688 -IGNlbGVicmF0aW5n 32689 -IGRlcHJlY2F0ZWQ= 32690 -IG1hYXI= 32691 -IGFydGlzdGlj 32692 -X0FTU09D 32693 -IEJvcmRlclJhZGl1cw== 32694 -CXdw 32695 -IHN1cnZpdm9ycw== 32696 -SW5uZXI= 32697 -LXJlZA== 32698 -IHByb3NlY3V0aW9u 32699 -X3Bw 32700 -KCI8Lw== 32701 -IF49 32702 -IGxhbQ== 32703 -IFRyYWRpbmc= 32704 -ZmxhcmU= 32705 -RGV0ZWN0b3I= 32706 -TUY= 32707 -IEVtZXJnZW5jeQ== 32708 -IEVhZ2xlcw== 32709 -cXVhZA== 32710 -IEluY3Jl 32711 -cGxpYW5jZQ== 32712 -XE1pZ3JhdGlvbg== 32713 -IHVwZ3JhZGVz 32714 -Q1BV 32715 -YWdnaQ== 32716 -ZnByaW50Zg== 32717 -aWdpb24= 32718 -IGJlYXV0aWZ1bGx5 32719 -IGRyaWVk 32720 -X0hJR0g= 32721 -IGdwaW8= 32722 -TVND 32723 -IERlcHV0eQ== 32724 -IERlY2w= 32725 -IHRyZWFzdXJl 32726 -c2dpdmluZw== 32727 -X3NpZGViYXI= 32728 -IGFwYXJ0bWVudHM= 32729 -IFdy 32730 -IGJvYXRz 32731 -IGJvcg== 32732 -Lmxhbmd1YWdl 32733 -IFVp 32734 -bGl0 32735 -ZnJt 32736 -YW5jaWVz 32737 -IG1hc3Nlcw== 32738 -IEFzc2lnbg== 32739 -IFBPTA== 32740 -IG1hcERpc3BhdGNoVG9Qcm9wcw== 32741 -IGJyYWNrZXQ= 32742 -IFBhcA== 32743 -IENp 32744 -IEludG8= 32745 -IHRlYW1tYXRlcw== 32746 -IGZvcmFsbA== 32747 -dWx1aQ== 32748 -IENhcm4= 32749 -X0lOUw== 32750 -YXppb25p 32751 -Y2Vw 32752 -IHRvdXJpc3Rz 32753 -LWJsdWU= 32754 -IExlZA== 32755 -IHBlbmV0 32756 -IEZv 32757 -IGltYWdpbmc= 32758 -cHJh 32759 -IHNsYXZlcw== 32760 -b2xlcmFuY2U= 32761 -IGluY29ycG9yYXRlZA== 32762 -Jiw= 32763 -dWFibHk= 32764 -IEthcA== 32765 -WG1sRWxlbWVudA== 32766 -IE11ZWxsZXI= 32767 -Q2hhbmdlTGlzdGVuZXI= 32768 -IEhvbGlkYXk= 32769 -CSAgICAgICAgIA== 32770 -RmxleA== 32771 -CVVzZXI= 32772 -Il0pKQ== 32773 -X3N1Ym1pdA== 32774 -LmJvbGQ= 32775 -IGxvY2tz 32776 -IEN1YmE= 32777 -dWRzb24= 32778 -SG9vaw== 32779 -IFdhcm5lcg== 32780 -X3N0YXI= 32781 -Ij0+JA== 32782 -IGNvbW1h 32783 -dW5jaGVja2Vk 32784 -Z3JhcGhpY3M= 32785 -cm9ycw== 32786 -R1JPVU5E 32787 -KHB1YmxpYw== 32788 -IGN1c3RvbWl6ZWQ= 32789 -IEFya2Fuc2Fz 32790 -IFJldw== 32791 -IGV4cGlyYXRpb24= 32792 -15U= 32793 -IEN1bA== 32794 -IG5vbnM= 32795 -LkZpbHRlcg== 32796 -IHNlbmF0b3I= 32797 -X2RlZmluaXRpb24= 32798 -YXNoaW5ndG9u 32799 -eW1waA== 32800 -L0o= 32801 -IGZ1c2U= 32802 -cmFtaWQ= 32803 -IFN1cHBsaWVy 32804 -IGF1dG9jb21wbGV0ZQ== 32805 -IH0pLA== 32806 -LiIKCgo= 32807 -X2Z1bmN0aW9ucw== 32808 -CXRv 32809 -LmV2YWw= 32810 -IFRPYmplY3Q= 32811 -UmVmZXJlbmNlcw== 32812 -IGhlYXRlZA== 32813 -SEFM 32814 -ICkpfQo= 32815 -fSQ= 32816 -IEJhcnI= 32817 -X1VOSVQ= 32818 -KyQ= 32819 -IGdldFZhbHVl 32820 -aXBlZA== 32821 -Y2hpZWQ= 32822 -KHZt 32823 -Y3Vl 32824 -X2ludGVnZXI= 32825 -X2NvdXJzZQ== 32826 -dGhpcmQ= 32827 -IHJldmlzZWQ= 32828 -KiovCg== 32829 -X0RJUkVDVA== 32830 -T3V0T2Y= 32831 -KCIo 32832 -IEZlZWw= 32833 -IHJlYXNz 32834 -IHN1YnRpdGxl 32835 -cGVyaQ== 32836 -bmY= 32837 -IGVuam95cw== 32838 -IHRyZWF0cw== 32839 -KXRoaXM= 32840 -LXRhYnM= 32841 -YW5jZXJz 32842 -IGNvbnRpbmVudA== 32843 -IGNhcmRpbw== 32844 -U2Vy 32845 -LnF1ZXN0aW9u 32846 -IHBocmFzZXM= 32847 -VmFsaWRhdG9ycw== 32848 -IHBvcHVs 32849 -IGzDrQ== 32850 -c29uZw== 32851 -X0lOVEVSTkFM 32852 -IGFkdmlzZXI= 32853 -IHB1eno= 32854 -IGFtYml0aW91cw== 32855 -IFRvYg== 32856 -IERQ 32857 -IHByZXNpZGVuY3k= 32858 -IHN1cnJlbmRlcg== 32859 -IHdhdGNoZXM= 32860 -X2JpbmFyeQ== 32861 -IFNvb24= 32862 -IGNhbmFkYQ== 32863 -KCIiKQo= 32864 -XT0n 32865 -IEJyYW5kb24= 32866 -ZXBzaWxvbg== 32867 -cnc= 32868 -LmFkZENoaWxk 32869 -LkNvcHk= 32870 -UHJpbmNpcGFs 32871 -UGhvdG9z 32872 -IG1hcmdpbmFs 32873 -IGJhc2ljcw== 32874 -ZWluZw== 32875 -TXVzdA== 32876 -X1N0cmluZw== 32877 -IG9sZQ== 32878 -TWFnZW50bw== 32879 -LmN1c3RvbWVy 32880 -KHByZXY= 32881 -4Lil 32882 -IGxveWFsdHk= 32883 -Q29n 32884 -IHByb3RvY29scw== 32885 -IENvbXBhbmllcw== 32886 -IHRoZW9yZXRpY2Fs 32887 -IGFjY2Vzc2luZw== 32888 -IFplbg== 32889 -Lm9uZXM= 32890 -YXR0aWNl 32891 -X3dvcmxk 32892 -emVz 32893 -IHRhdHRvbw== 32894 -IG1lbm9z 32895 -IGludGVyc2VjdA== 32896 -Il07Cgo= 32897 -YmVsaWU= 32898 -IGluYWN0aXZl 32899 -LnJlYWRsaW5l 32900 -LWxhYmVsbGVk 32901 -LmRvbmU= 32902 -bGlja3I= 32903 -IFdPUks= 32904 -IGRlcml2YXRpdmU= 32905 -IGRhdGFiYXNlcw== 32906 -4oKC 32907 -IHN4 32908 -LmlzQXJyYXk= 32909 -IHlz 32910 -IHBhZGE= 32911 -IEJ1bGxldA== 32912 -KGAv 32913 -aXNBY3RpdmU= 32914 -IENHU2l6ZQ== 32915 -KGVxdWFsVG8= 32916 -IENvbHVtYnVz 32917 -IG1hcnJ5 32918 -REVW 32919 -X2xpbWl0cw== 32920 -cm9uZXM= 32921 -SUFT 32922 -IHRhdQ== 32923 -bWlubw== 32924 -X1dyaXRl 32925 -IFdpbmU= 32926 -IFtbJw== 32927 -IFB1bGw= 32928 -cml0ZXJz 32929 -cmllbnRz 32930 -IHNoaWZ0aW5n 32931 -dXBw 32932 -X1RJTUVS 32933 -IENvbmRpdGlvbnM= 32934 -4bql 32935 -IE9yZGVycw== 32936 -IFN0cmVuZ3Ro 32937 -5omA 32938 -IHZhbGlkaXR5 32939 -IGZvdA== 32940 -ZXR1cg== 32941 -IGJvbHQ= 32942 -5YaF 32943 -IEFsb25n 32944 -b3NoaQ== 32945 -IGFzc3VtcHRpb25z 32946 -IG1hZ2F6aW5lcw== 32947 -X1NQSQ== 32948 -IHB1bnQ= 32949 -X1BST0RVQ1Q= 32950 -IHJlbGF5 32951 -IEphdmFzY3JpcHQ= 32952 -LnRl 32953 -LWVz 32954 -IHdpZGdldHM= 32955 -KGZz 32956 -PEl0ZW0= 32957 -X2V4dHJh 32958 -IHJlY3J1aXRpbmc= 32959 -RXQ= 32960 -IG5lY2Vzc2l0eQ== 32961 -cHc= 32962 -IG5vdmVscw== 32963 -dXNzZWxz 32964 -Q3JlYXRvcg== 32965 -IE1WUA== 32966 -IE9D 32967 -dGhvb2Q= 32968 -Y2xpZW50cw== 32969 -KSkq 32970 -IGNoYXJhY3Rlcml6ZWQ= 32971 -X1NFTkQ= 32972 -dXRp 32973 -VHk= 32974 -LmZyb21Kc29u 32975 -QFNlcnZpY2U= 32976 -44KC 32977 -Q2hyaXM= 32978 -X0lz 32979 -IEpvaG5ueQ== 32980 -IGNsZWFuZXI= 32981 -IEluaXRpYWxpemVz 32982 -VU5L 32983 -KGF4aXM= 32984 -0LXQtw== 32985 -aWV2YWw= 32986 -IFdhcnJpb3Jz 32987 -fSko 32988 -RE1J 32989 -4pmA 32990 -IFRyZWFzdXJ5 32991 -IGZlYXM= 32992 -IHNsYQ== 32993 -X0VOVU0= 32994 -bGhz 32995 -IEluc3RpdA== 32996 -aXBwZXJz 32997 -TGluZWFy 32998 -UmVhZGluZw== 32999 -cXVpcmllcw== 33000 -LWNlbGw= 33001 -Y2hyb21l 33002 -LlNlYXJjaA== 33003 -SU5B 33004 -57G75Z6L 33005 -IAogCg== 33006 -IFNhbXVlbA== 33007 -IG1pbGxz 33008 -IGRvbmF0ZQ== 33009 -IEdlbw== 33010 -KHJvd3M= 33011 -IHNoZWVw 33012 -IMOpbA== 33013 -5L2T 33014 -IGJlbQ== 33015 -X1VOVVNFRA== 33016 -IFJDQw== 33017 -IGludHJvZHVjaW5n 33018 -YXR0YQ== 33019 -IFByaW9yaXR5 33020 -IEZC 33021 -IFNlcmdl 33022 -PiI7 33023 -YXRjaGluZw== 33024 -IEtub3dsZWRnZQ== 33025 -CVRoZQ== 33026 -O21hcmdpbg== 33027 -bGVzc25lc3M= 33028 -b3BhcmQ= 33029 -dW1hdGlj 33030 -KCkpKTsNCg== 33031 -IGZhbHM= 33032 -KGNhY2hl 33033 -VHlwZUlk 33034 -6YCa 33035 -X2Nob2ljZQ== 33036 -IEdvdGg= 33037 -IFNpdGVz 33038 -TUc= 33039 -X2JvcmRlcg== 33040 -SW5kaWNlcw== 33041 -Q29tcGFyZXI= 33042 -IFJlZGlzdHJpYnV0aW9u 33043 -IGNsb3NldA== 33044 -IHZlcnNhdGlsZQ== 33045 -SW5wdXRz 33046 -KioqKioqKioqKioqKioqKioqKio= 33047 -IG9iZXNpdHk= 33048 -cXVpeg== 33049 -Z3Jh 33050 -KGdsb2JhbA== 33051 -5Yqh 33052 -IGNvbGxlY3Rvcg== 33053 -IGtvcg== 33054 -b3ZhYmxl 33055 -QURD 33056 -IEV2ZW50SGFuZGxlcg== 33057 -Lm5j 33058 -IHBsYXliYWNr 33059 -aWVudG9z 33060 -X3Blcm0= 33061 -X1dBUk5JTkc= 33062 -IE9seW1waWNz 33063 -Lm5vcm0= 33064 -IEJyb2FkY2FzdA== 33065 -X3NtYWxs 33066 -ZHJpdmU= 33067 -Lmlsb2M= 33068 -IHR5cGVk 33069 -TUVN 33070 -X2NvbnM= 33071 -RE1FVEhPRA== 33072 -IGx1bg== 33073 -LmRpc3RhbmNl 33074 -KHBhcg== 33075 -cG9vbg== 33076 -IGJhc3Q= 33077 -YWN0aXZpdGllcw== 33078 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 33079 -Og0KDQo= 33080 -U0VS 33081 -KSYm 33082 -X2xzdA== 33083 -IFBvbGlzaA== 33084 -IGtub2NrZWQ= 33085 -IGZydXN0cmF0aW9u 33086 -YXVrZWU= 33087 -IHBob3NwaA== 33088 -aXF1aWQ= 33089 -X2NvZWZm 33090 -5q2k 33091 -TGF0ZXN0 33092 -IER1c3Q= 33093 -VGlwbw== 33094 -IG1haW50YWlucw== 33095 -IG1hcnNo 33096 -aW5jaW5u 33097 -bGJs 33098 -Q2FyZQ== 33099 -IG5laWdoYm9yaG9vZHM= 33100 -X2dwaW8= 33101 -IEFyc2VuYWw= 33102 -RGVt 33103 -IFdoZQ== 33104 -X2hvb2s= 33105 -IGxkYw== 33106 -IEhhcnBlcg== 33107 -IEJlcmtlbGV5 33108 -IGdyYWR1YXRlZA== 33109 -UGVyY2VudA== 33110 -IGFycml2aW5n 33111 -IEFkdmVudHVyZQ== 33112 -KHNjb3Bl 33113 -KCcq 33114 -cXVhcnRlcg== 33115 -IE1hcmll 33116 -U3BlYWtpbmc= 33117 -X2NvZGVnZW4= 33118 -IGltbXVu 33119 -Y2FzdGVy 33120 -44KM 33121 -5ZWG 33122 -IERpbWVuc2lvbnM= 33123 -LnJlY29yZA== 33124 -IHRleHRv 33125 -IE1pY2hlbGxl 33126 -UGVuZGluZw== 33127 -KGJ5 33128 -X1BBUg== 33129 -dWNodA== 33130 -YmVl 33131 -LlRocmVhZA== 33132 -YW1waXJl 33133 -a25vdw== 33134 -IENsaW5pY2Fs 33135 -IG1hcmdpbkJvdHRvbQ== 33136 -IGRpc3Rpbmd1aXNo 33137 -LkZ1bGw= 33138 -LnVuZGVmaW5lZA== 33139 -IFNlcXVlbGl6ZQ== 33140 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 33141 -IGVkdWNhdGVk 33142 -X09WRVI= 33143 -5bqP 33144 -IMKgIMKg 33145 -X2VhY2g= 33146 -IHVyZ2U= 33147 -ZGVwYXJ0 33148 -IGRvbm9ycw== 33149 -IEF1 33150 -IGJpbGxpb25z 33151 -IGJlbG9uZ2luZw== 33152 -X2FnZQ== 33153 -X0ludA== 33154 -IHN1YnN0YW5jZXM= 33155 -bWFjaGluZQ== 33156 -ISEhCgo= 33157 -IGpzb25pZnk= 33158 -aWJiZWFu 33159 -IENhZA== 33160 -IGVuZFRpbWU= 33161 -IGN5Y2xpbmc= 33162 -IFVJVGV4dEZpZWxk 33163 -IGxldmVyYWdl 33164 -IHZhbmlsbGE= 33165 -ZWF0 33166 -TGF1bmNo 33167 -KHB0 33168 -c3RhdGVz 33169 -IENvbnRyb2xz 33170 -IFJlc3BvbnM= 33171 -IEpha2U= 33172 -IGFzbGVlcA== 33173 -Zm9ydHVuYXRl 33174 -Lm5leHRMaW5l 33175 -U2l6ZU1vZGU= 33176 -7J28 33177 -VGVzdGluZ01vZHVsZQ== 33178 -R2VybWFu 33179 -IEludmVzdGln 33180 -LnJldmVyc2U= 33181 -IEJBQ0s= 33182 -KERhdGVUaW1l 33183 -IG5vbnByb2ZpdA== 33184 -IEV4cGVjdA== 33185 -IHRhbnRv 33186 -J10pLA== 33187 -CXRoZQ== 33188 -TXVsdGlwbGU= 33189 -KGdldEFjdGl2aXR5 33190 -X1dBSVQ= 33191 -IGrDoQ== 33192 -ZGVjb3I= 33193 -bGV2YW5jZQ== 33194 -IEdpdEh1Yg== 33195 -bWluYXRpb24= 33196 -X3F1YW50aXR5 33197 -LlNjYW5uZXI= 33198 -IExpb24= 33199 -6ZSZ6K+v 33200 -IGRyZQ== 33201 -IHRhbnRyYQ== 33202 -IGNvbnRlbnRUeXBl 33203 -IGZpZA== 33204 -X2FsdA== 33205 -TlNJbmRleFBhdGg= 33206 -LXBs 33207 -5YyW 33208 -IGFudGliaW90 33209 -dGFibGVz 33210 -YWNpYWw= 33211 -IFJlZ2lzdHJ5 33212 -IG9saXZl 33213 -aWdlcnM= 33214 -IHN1YnNjcmliZXI= 33215 -X3ByZXM= 33216 -IFN5bnRheA== 33217 -IGxvdmVycw== 33218 -LkJ5dGU= 33219 -b2xkZXJz 33220 -X2ZvcndhcmQ= 33221 -YWx3YXlz 33222 -Q2FwdGlvbg== 33223 -UHJpdg== 33224 -IFRhbXBh 33225 -aXNhdGV1cg== 33226 -LWxhYmVsbGVkYnk= 33227 -IFRvU3RyaW5n 33228 -IOyCrA== 33229 -IGluaXRpYXRlZA== 33230 -V0Y= 33231 -IGluc3RpdHV0aW9uYWw= 33232 -aW5qZWN0 33233 -IFNjcg== 33234 -IGRvY3RyaW5l 33235 -IHNwYWNpb3Vz 33236 -aXN1cmU= 33237 -IEFuYQ== 33238 -InRpbWU= 33239 -ZXNzYWdpbmc= 33240 -IGNpZA== 33241 -IE5hbg== 33242 -IGluY29tcGxldGU= 33243 -VEFH 33244 -LWJ1aWxk 33245 -RGVjZW1iZXI= 33246 -IHJlc2lkdWFs 33247 -KFBETw== 33248 -IExpc3Rlbg== 33249 -IGdseXBo 33250 -IGdhcHM= 33251 -bmVh 33252 -LlJlY3Q= 33253 -IHNhdQ== 33254 -IFBob3RvZ3JhcGg= 33255 -IGV4ZWN1dGFibGU= 33256 -IEV4cGVydA== 33257 -Q29yb3V0aW5l 33258 -X3NpemVz 33259 -IE5M 33260 -LmlzVmFsaWQ= 33261 -KTt9Cg== 33262 -LXJlZw== 33263 -IGNpdGluZw== 33264 -Y3dk 33265 -IE90dGF3YQ== 33266 -IEJhdHQ= 33267 -IHJlbmV3YWJsZQ== 33268 -IHByZWxpbWluYXJ5 33269 -IGFzeWx1bQ== 33270 -IHdyaXN0 33271 -IHV0aWxpeg== 33272 -IGRldGVudGlvbg== 33273 -RmFzdA== 33274 -IGFuZ2U= 33275 -aW5jaW5uYXRp 33276 -IHN0ZWVyaW5n 33277 -IE5hTg== 33278 -aW9zaXR5 33279 -L3BhZ2U= 33280 -IOi/ 33281 -c3Rlcm9s 33282 -IGRpc2c= 33283 -KERC 33284 -IERFU0NSSVBUSU9O 33285 -IF8k 33286 -IG9ic3RhY2xl 33287 -IGJpemFycmU= 33288 -IGV4dHJhY3Rpb24= 33289 -X2V4cGVjdGVk 33290 -IGxvc2Vz 33291 -IENlbGVicg== 33292 -IGh0bWxGb3I= 33293 -IGV4cGxvaXQ= 33294 -0L7Qu9GM0LfQvtCy 33295 -WFla 33296 -IG1hZ25ldA== 33297 -YW1wZWQ= 33298 -IGF0b21z 33299 -U291cmNlcw== 33300 -cGVjdGl2ZXM= 33301 -0YHQu9C4 33302 -ID0NCg== 33303 -IGRhcmU= 33304 -IFdhbHRlcg== 33305 -IGJyaWdodG5lc3M= 33306 -IGFubm90YXRpb25z 33307 -648= 33308 -aXNrZQ== 33309 -U2NoZWR1bGU= 33310 -LmltYWdlcw== 33311 -cm9zc28= 33312 -ICIuLg== 33313 -Z2FtbWE= 33314 -IGluc3RydWN0b3I= 33315 -IG92ZXJ3cml0ZQ== 33316 -LWFt 33317 -IGRldmFzdGF0aW5n 33318 -IFNhaW50cw== 33319 -IGhz 33320 -IGJvbnVzZXM= 33321 -JG91dHB1dA== 33322 -aWpk 33323 -KEFjdGlvbkV2ZW50 33324 -bW9uaXRvcg== 33325 -IG1hdHRyZXNz 33326 -SmFudWFyeQ== 33327 -Lmpw 33328 -IGNhcmFjdGVy 33329 -IGltcG9zZQ== 33330 -X3Jlc3Q= 33331 -IFNpZ25hdHVyZQ== 33332 -IGNvcm9uYXZpcnVz 33333 -44GK 33334 -X2NvbXBhcmU= 33335 -TWVhc3VyZQ== 33336 -aXRhdGVk 33337 -ZWxpams= 33338 -aWdvcw== 33339 -ZXNhcg== 33340 -IHJ1c2hlZA== 33341 -bWV0cnk= 33342 -X1NFUEFSQVRPUg== 33343 -X1dF 33344 -X0FUVFJJQlVURQ== 33345 -IHlhbWw= 33346 -IHNwZWNz 33347 -IFJhaA== 33348 -cGhlcmlj 33349 -IEludmVzdG1lbnQ= 33350 -w6RsbA== 33351 -IGFwcGVhbGluZw== 33352 -IHZpZXdwb3J0 33353 -56k= 33354 -IG1hcmdpbkxlZnQ= 33355 -IHN1YnRyYWN0 33356 -IEVESVQ= 33357 -CUFycmF5TGlzdA== 33358 -Z3JhZGluZw== 33359 -IEZhaWx1cmU= 33360 -YXNwZXI= 33361 -RUVL 33362 -KG5vdw== 33363 -PG9iamVjdA== 33364 -IEFsaWdubWVudA== 33365 -cGxlYWRv 33366 -cXR0 33367 -KEVSUk9S 33368 -IElOVkFMSUQ= 33369 -IHVzZXJpZA== 33370 -cmFpc2Vz 33371 -SURJ 33372 -IHZhcmlhbmNl 33373 -IE5pbA== 33374 -L2RlbGV0ZQ== 33375 -X01BSU4= 33376 -LlRva2Vu 33377 -LkNhdGVnb3J5 33378 -PikK 33379 -Q29sbGlzaW9u 33380 -IEdyZWF0ZXI= 33381 -IFJhY2luZw== 33382 -YWxhbg== 33383 -IG1vbmV0YXJ5 33384 -LG5ldw== 33385 -IFNvcnJ5 33386 -LkVuYWJsZQ== 33387 -IEluc3RhbnRpYXRl 33388 -b2xsZW4= 33389 -66m0 33390 -IENhbGxpbmc= 33391 -X2hvdXI= 33392 -QURB 33393 -IHNoeQ== 33394 -KSoq 33395 -ID09Pg== 33396 -IGVzcGVjaWFs 33397 -IGludGVycHJldGVk 33398 -IT0i 33399 -IHBoYXJtYWN5 33400 -LnNpbmdsZQ== 33401 -IENpYWxpcw== 33402 -IHBhcmFz 33403 -LnRvVXBwZXJDYXNl 33404 -IERlbW9u 33405 -UHJpbWU= 33406 -IHJhbmtpbmdz 33407 -QWRkaW5n 33408 -X0hBU0g= 33409 -IEV4YW0= 33410 -2qk= 33411 -IFZpY3Rvcg== 33412 -T2theQ== 33413 -Il07DQo= 33414 -IGZvcnR1bmU= 33415 -IEZFVENI 33416 -ZXhwYW5k 33417 -LkludGVyb3A= 33418 -IGJhcm4= 33419 -5raI 33420 -dWV2bw== 33421 -IHNwZWN1bGF0aW9u 33422 -4pSA4pSA4pSA4pSA 33423 -IE51 33424 -IEJsdWVz 33425 -KGZuYW1l 33426 -IGluaGFiaXQ= 33427 -IFwiJQ== 33428 -Q0VT 33429 -dWxhcmlv 33430 -X2Ny 33431 -IHZhbGlkYXRlZA== 33432 -IG1pZG5pZ2h0 33433 -YW5raW5n 33434 -IGluY29ycG9yYXRl 33435 -IHB1cnN1aXQ= 33436 -RVhQ 33437 -cHJpbWU= 33438 -UGlk 33439 -LVVT 33440 -IE51cnM= 33441 -IFdoZWVs 33442 -6Zg= 33443 -IGlucA== 33444 -IHN1cHBvcnRpdmU= 33445 -Lm1lbWJlcg== 33446 -IFNob3Q= 33447 -LkNoZWNrQm94 33448 -IGFmZmlybQ== 33449 -VG9y 33450 -RnVsbFllYXI= 33451 -IGNvbnNpZGVyYWJseQ== 33452 -Y3JlZGVudGlhbHM= 33453 -X29wdHM= 33454 -Um9sbA== 33455 -KHJvdW5k 33456 -IGNvbWVudA== 33457 -X1VBUlQ= 33458 -IGV4dGVuZGluZw== 33459 -Ukc= 33460 -cmVzdWx0YWRv 33461 -aXR1 33462 -LmdldFNlc3Npb24= 33463 -IGF0dHJhY3Rpb24= 33464 -JkQ= 33465 -JGh0bWw= 33466 -IEplc3NpY2E= 33467 -IEFzc29jaWF0ZQ== 33468 -YcOx 33469 -X2Vk 33470 -IExhZw== 33471 -IG9yaWdpbnM= 33472 -KCkpLT4= 33473 -YWRkRXZlbnRMaXN0ZW5lcg== 33474 -SUFMT0c= 33475 -5ZCm 33476 -LkNvbXBhcmU= 33477 -QWxidW0= 33478 -IEt1 33479 -PFE= 33480 -YXJnZXN0 33481 -IHByb2xvbmc= 33482 -IGNvbmZpZ3VyYXRpb25z 33483 -IGFjY2lkZW50YWxseQ== 33484 -X3Bob3Rv 33485 -ICcnOw0K 33486 -IHZlcnNl 33487 -Qm9i 33488 -IGZhcm1pbmc= 33489 -ZGVsaXZlcnk= 33490 -IE1hY2s= 33491 -IHVzZVNlbGVjdG9y 33492 -LmJvb3RzdHJhcGNkbg== 33493 -a2VlcGluZw== 33494 -ZW55 33495 -LnVwbG9hZA== 33496 -IE1FVEhPRA== 33497 -Y3JlYXRvcg== 33498 -PF8= 33499 -IEVhc3Rlcg== 33500 -Li0t 33501 -VUlCdXR0b24= 33502 -44KJ 33503 -b21ldGVycw== 33504 -IHNoaW5l 33505 -IGhvZ3k= 33506 -XHM= 33507 -IGhhcm5lc3M= 33508 -LkNlbGw= 33509 -IGxpZnRpbmc= 33510 -IGNvbWJpbmVz 33511 -IE9jY3Vw 33512 -ZXhjbHVkZQ== 33513 -cGF0aWFs 33514 -IHJlc3Bpcg== 33515 -X2ZpdA== 33516 -IGZpZnR5 33517 -IE1vbA== 33518 -IHR1bmVk 33519 -LWRpbWVuc2lvbmFs 33520 -IHFz 33521 -IHRvcHM= 33522 -PiI7Cgo= 33523 -cXVpc2l0ZQ== 33524 -Y2hhbm5lbHM= 33525 -L3Jlcw== 33526 -IEFuYWx5dGljcw== 33527 -LmFwcGNvbXBhdA== 33528 -L3Rv 33529 -IG9uRXJyb3I= 33530 -KGF0dHI= 33531 -SVJN 33532 -IHJhZ2F6 33533 -LWFz 33534 -LlNlY29uZA== 33535 -b3JpZW50ZWQ= 33536 -IGRvbm4= 33537 -IGxpZ2h0bmluZw== 33538 -Zmlk 33539 -IFBsZQ== 33540 -44G+44GZ 33541 -dHJv 33542 -LlRydWU= 33543 -T2JzZXJ2YWJsZQ== 33544 -15k= 33545 -dW1iaW5n 33546 -IHByb3NwZWN0aXZl 33547 -LWZpbHRlcg== 33548 -IHB1cnN1YW50 33549 -KHBvaW50cw== 33550 -LkJpbmQ= 33551 -IHBhbG0= 33552 -Y2xlYXJmaXg= 33553 -w7Zz 33554 -IEdvbno= 33555 -IHdlYWtlbg== 33556 -RHJpdmU= 33557 -ZW5pZG8= 33558 -bGxk 33559 -b2JveA== 33560 -YW5lYW4= 33561 -R290 33562 -5L+d 33563 -UmVnZXg= 33564 -5oM= 33565 -IHNhbGFk 33566 -YXNzaXM= 33567 -Im5ldA== 33568 -aW5oZXJpdERvYw== 33569 -IFJW 33570 -cXVpZXI= 33571 -IGNsYXp6 33572 -xLHFnw== 33573 -b3N0ZXJvbmU= 33574 -IGFpcmxpbmU= 33575 -Lmxpc3RkaXI= 33576 -IGRvd25sb2FkaW5n 33577 -IFBhbG0= 33578 -d2F1a2Vl 33579 -Jmx0 33580 -LkJM 33581 -X0lOTElORQ== 33582 -b2Zmcw== 33583 -PDwo 33584 -X25ld3M= 33585 -IGNoYXNl 33586 -Lz48 33587 -IGV1cm9z 33588 -IEVneXB0aWFu 33589 -IFN0YWlubGVzcw== 33590 -X0JPT0w= 33591 -IEd1aWxk 33592 -IER5bmFt 33593 -W2luZGV4UGF0aA== 33594 -IO8= 33595 -IG1lbW9yYWJsZQ== 33596 -IENoYW1waW9u 33597 -UmVzb3VyY2VNYW5hZ2Vy 33598 -LkxvZ2lu 33599 -IEZvcm1lcg== 33600 -eXBlZA== 33601 -IGxsZWc= 33602 -OyIs 33603 -RFdPUkQ= 33604 -IHRheGk= 33605 -IGJvbWJz 33606 -cmFo 33607 -LnRhZ3M= 33608 -X3Rlc3Rz 33609 -c3RvbmVz 33610 -4oCdKQ== 33611 -W2c= 33612 -cnR5cGU= 33613 -IHZ1 33614 -IGhvc3RpbGU= 33615 -Q2hhcnM= 33616 -IFBhdHJpb3Rz 33617 -L3N0YXR1cw== 33618 -PEI= 33619 -IEluY29tZQ== 33620 -IERhZA== 33621 -IHBhdHJvbA== 33622 -X0NIQU5HRQ== 33623 -IHVwZ3JhZGVk 33624 -IGNoaW5h 33625 -c2V0cQ== 33626 -U3RhcnRlZA== 33627 -LlVuZGVm 33628 -IGNoZWNrc3Vt 33629 -IGZydXN0cmF0ZWQ= 33630 -e28= 33631 -IGVuZg== 33632 -IHdvb2Rz 33633 -IEFueW9uZQ== 33634 -RW5jb2Rl 33635 -IFF0V2lkZ2V0cw== 33636 -YXJlYXM= 33637 -IHNoZWVy 33638 -c2tp 33639 -ZW5kcG9pbnQ= 33640 -X1Rlc3Q= 33641 -U291cA== 33642 -fn5+fn5+fn5+fn5+fn5+fg== 33643 -KGZpbGVz 33644 -CQkJCQkNCg== 33645 -LnNwYXJr 33646 -IHZhbHVlZA== 33647 -ICUK 33648 -LmNvbnRyb2xz 33649 -IFhDVEFzc2VydEVxdWFs 33650 -IGZhbWU= 33651 -IFJpYw== 33652 -RE9U 33653 -IEFsYmVydGE= 33654 -5L2/ 33655 -b3NhbA== 33656 -LldlYkNvbnRyb2xz 33657 -IC0tLS0tLS0tLS0tLQ== 33658 -IE1pcw== 33659 -IFNZUw== 33660 -Tm9ubnVsbA== 33661 -PWl0ZW0= 33662 -IGV4cGlyZQ== 33663 -RGVjb2Rl 33664 -X29wZXJhdGlvbg== 33665 -IFZhbGlkYXRvcg== 33666 -LkNFTlRFUg== 33667 -dWZmcw== 33668 -Km0= 33669 -IGF2YW50 33670 -5qyh 33671 -4oCcWW91 33672 -LnBlcm1pc3Npb24= 33673 -Li4uKQ== 33674 -IExpYw== 33675 -X2Nvb3Jkcw== 33676 -Lm5vbWJyZQ== 33677 -Y2xv 33678 -LkludGVybmFs 33679 -IENobw== 33680 -X3N3 33681 -CUls 33682 -Y2xr 33683 -IGNhc3RsZQ== 33684 -KGxheWVy 33685 -cGl0 33686 -IGd1aWRlZA== 33687 -IOKWiA== 33688 -IHN1cGVyYg== 33689 -IHN1cHBsZW1lbnRz 33690 -X2NlbnQ= 33691 -IHBlZWs= 33692 -SU5BUlk= 33693 -LkNvbnRlbnRBbGlnbm1lbnQ= 33694 -ZmFsbHM= 33695 -IikpOw== 33696 -V2FsbA== 33697 -KS4NCg== 33698 -IERhbm55 33699 -aXJtaW5naGFt 33700 -SUFMSVo= 33701 -KGNyZWF0ZQ== 33702 -Iklu 33703 -U2VydmljZVByb3ZpZGVy 33704 -IHByaWNlZA== 33705 -bWFjcm8= 33706 -YW1hYw== 33707 -LmJveA== 33708 -LS0tLQo= 33709 -44Or 33710 -IFN1aXQ= 33711 -dXJzdA== 33712 -YnJ1 33713 -b3VybmFscw== 33714 -bnVtZXJv 33715 -X18oKQo= 33716 -RGFz 33717 -IE1pdHQ= 33718 -dWRlcg== 33719 -P1w= 33720 -ZnU= 33721 -W0I= 33722 -IDopCgo= 33723 -KGludGVy 33724 -YnJhaW5z 33725 -IGF0dGl0dWRlcw== 33726 -VmVyaWZ5 33727 -IHNpZ25hdHVyZXM= 33728 -YWNrQmFy 33729 -IGdk 33730 -SmFjaw== 33731 -LmNhdA== 33732 -IHp6 33733 -d2FyZg== 33734 -RlRFUg== 33735 -Iik7CgoK 33736 -QWxpdmU= 33737 -SUNMRQ== 33738 -IFdoYXRldmVy 33739 -IG91dGxpbmVk 33740 -c3ByaXRl 33741 -0LXQsg== 33742 -X0FC 33743 -X0RFUFRI 33744 -IGNydXNoZWQ= 33745 -YWFh 33746 -KGV2 33747 -5py6 33748 -QW50aQ== 33749 -SUNP 33750 -aXNFcXVhbFRv 33751 -LnN1bg== 33752 -aWN1bG8= 33753 -c2FsZQ== 33754 -X2hleA== 33755 -IFZr 33756 -YXB0b3I= 33757 -VW5pb24= 33758 -IERpc2NvdW50 33759 -bGlzdGE= 33760 -LlVuZGVmT3I= 33761 -IGF1dG9tYXRpb24= 33762 -Tm9y 33763 -5a+5 33764 -5Y+C5pWw 33765 -IHJlZmxleA== 33766 -IExhdXJl 33767 -LnNob3dNZXNzYWdlRGlhbG9n 33768 -LnRlbXA= 33769 -IGFrYW4= 33770 -IF9fX19fXw== 33771 -LklzVHJ1ZQ== 33772 -QVJFRA== 33773 -YWdsZQ== 33774 -RW5lcmd5 33775 -IHF1YW50aXRpZXM= 33776 -4oCZw6k= 33777 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 33778 -IGNpdGl6ZW5zaGlw 33779 -bW91dGg= 33780 -IGluYXBwcm9wcmlhdGU= 33781 -IE91dGRvb3I= 33782 -V2hpdGVTcGFjZQ== 33783 -QW5vbnltb3Vz 33784 -bG9hZHM= 33785 -d2ViRWxlbWVudFByb3BlcnRpZXM= 33786 -VGVu 33787 -IGFjY2lkZW50cw== 33788 -IGFkdmVydGlzZW1lbnQ= 33789 -IFllbWVu 33790 -KGNhbGw= 33791 -IHNsYXZlcnk= 33792 -0YHQvw== 33793 -IExhbQ== 33794 -X0JJVFM= 33795 -b21lZ2E= 33796 -IE9sZQ== 33797 -IGtpZG4= 33798 -X0Fu 33799 -IFJhaWQ= 33800 -Q3JlYXRpb24= 33801 -c2F2ZWQ= 33802 -IHByb3BvcnQ= 33803 -V0FSTklORw== 33804 -XFA= 33805 -IHB3ZA== 33806 -RGF0YVJlYWRlcg== 33807 -aXNjaGVy 33808 -YWRlb24= 33809 -IFByZWRpY3Q= 33810 -IHJlYXNvbmluZw== 33811 -IGRlc3Ryb3lpbmc= 33812 -SGVs 33813 -KmQ= 33814 -IExlZ2lzbA== 33815 -X1By 33816 -CQkJICAgICAgIA== 33817 -IHN5bXBhdGg= 33818 -IGNoZXNz 33819 -IG1hbQ== 33820 -OmhvdmVy 33821 -IGNvbnZlcnRz 33822 -IHBlbGE= 33823 -IHByb2dyZXNzaW9u 33824 -ICJfIg== 33825 -IEdpbGw= 33826 -CXNob3c= 33827 -IHN1cHBvc2VkbHk= 33828 -YWNjdXJhY3k= 33829 -ZWxpbg== 33830 -IHVuZm9sZGluZw== 33831 -IEh5cGVy 33832 -IHdhbm5h 33833 -IHVwcw== 33834 -KCM= 33835 -IENyaW1pbmFs 33836 -KFBvaW50 33837 -YXRMbmc= 33838 -YWN0bHk= 33839 -IGNvbnRyYWN0b3Jz 33840 -J119 33841 -ZHJhdWxpYw== 33842 -w7NkaWdv 33843 -IFRU 33844 -IFdpZGU= 33845 -IEFSRw== 33846 -X2lj 33847 -RkxBR1M= 33848 -U2Nob29s 33849 -IGNsZWFyaW5n 33850 -LWJlaW5n 33851 -PXtb 33852 -LGNvbnN0 33853 -bWFuZW50 33854 -T3ZlcmxheQ== 33855 -KCci 33856 -6YeP 33857 -IFRpbWVzdGFtcA== 33858 -IG1haWxpbmc= 33859 -IENha2U= 33860 -LlRoYXQ= 33861 -IG1lZGl0YXRpb24= 33862 -cXA= 33863 -IGVtcHJlc2E= 33864 -IExpb25z 33865 -IHdlbGQ= 33866 -IExpbmtlZElu 33867 -IGN1c2g= 33868 -IGdlbm9tZQ== 33869 -LkluZGV4T2Y= 33870 -YWdhaW4= 33871 -IGZhbGxiYWNr 33872 -IGNhbXBpbmc= 33873 -cmVkZA== 33874 -LXN0cmlwZWQ= 33875 -IGR2 33876 -RmVicnVhcnk= 33877 -IFByb3h5 33878 -dXNr 33879 -IGRpZXNlbA== 33880 -V1JJVEU= 33881 -UkVBSw== 33882 -TG9yZW0= 33883 -Lkludm9rZQ== 33884 -LWRpdg== 33885 -SW50ZXJjZXB0b3I= 33886 -IERI 33887 -aWFsZXM= 33888 -IHZpbGxhZ2Vz 33889 -2LQ= 33890 -IEVOVg== 33891 -U3lz 33892 -LlhS 33893 -IHBvZW0= 33894 -w4I= 33895 -Y2FkZQ== 33896 -cGxvdHM= 33897 -IHso 33898 -LmdpdA== 33899 -L3N2Zw== 33900 -bmNtcA== 33901 -IMSN 33902 -YWluZXM= 33903 -5Ye95pWw 33904 -ICgpCgo= 33905 -b3BzaXM= 33906 -IFJlbGF0aW9uc2hpcA== 33907 -X2F1dA== 33908 -IEJvbWI= 33909 -CWNvbQ== 33910 -KnNpemVvZg== 33911 -b2ZmaWNpYWw= 33912 -X3BheWxvYWQ= 33913 -CQkJCQkgIA== 33914 -Lm1hbmFnZXI= 33915 -IEFyb3VuZA== 33916 -CXNlbmQ= 33917 -IEV4ZXJjaXNl 33918 -IEJpbGx5 33919 -aXZp 33920 -IG5lZWRpbmc= 33921 -X3VybHM= 33922 -X3Rhc2tz 33923 -IEhlbQ== 33924 -IHRlYXJEb3du 33925 -ZW5jcnlwdA== 33926 -LnRpZQ== 33927 -IGFzbQ== 33928 -SUNI 33929 -IENHUmVjdE1ha2U= 33930 -7ISx 33931 -dWxvbmc= 33932 -IGl0cg== 33933 -IEdTVA== 33934 -IG9mZmVyaW5ncw== 33935 -cm9iZQ== 33936 -RUVF 33937 -b3BlcmF0b3Jz 33938 -X1BST1A= 33939 -aW5kZW50 33940 -QURF 33941 -b3Jm 33942 -65A= 33943 -IGJsZXNzZWQ= 33944 -dmFzY3VsYXI= 33945 -IGNvbm9j 33946 -SGFwcHk= 33947 -QnJpZGdl 33948 -aWxpdGF0aW9u 33949 -am9pbnQ= 33950 -IEFkbWluaXN0cg== 33951 -LXRyYW5zZm9ybQ== 33952 -IG1lYW50aW1l 33953 -L0s= 33954 -IEJlZHJvb20= 33955 -IHJpZ2lk 33956 -IGJyb3dzZXJz 33957 -RU1QVFk= 33958 -LlNlcmlhbGl6ZQ== 33959 -X0VE 33960 -IHN0aXRjaA== 33961 -IGphbg== 33962 -ZWxsdA== 33963 -IGJyYWNl 33964 -IHRyYWlscw== 33965 -cHVibGlzaGVk 33966 -5a+G56CB 33967 -fScpCg== 33968 -IGFjaWRz 33969 -ICEhIQ== 33970 -X2RpcmVjdA== 33971 -PigpKTsK 33972 -YWrEhQ== 33973 -X09DQw== 33974 -IHBsYW5ldHM= 33975 -5p+l 33976 -IER1Ymxpbg== 33977 -IHNlcmll 33978 -LnByaW50Zg== 33979 -ZGVlcA== 33980 -YCk= 33981 -IFwk 33982 -IM68 33983 -X1ZJREVP 33984 -ZW5kb3Jz 33985 -IENyeXB0bw== 33986 -RmFy 33987 -LlRyYW5zcGFyZW50 33988 -LlRS 33989 -aWFzbQ== 33990 -X3RyYWluaW5n 33991 -IHRlYWNoZXM= 33992 -IEJlbHQ= 33993 -IGxpbWl0aW5n 33994 -IEthdGg= 33995 -IEluZGV4UGF0aA== 33996 -IGFjaGlldmVtZW50cw== 33997 -IHNlcsOh 33998 -aW50ZXJvcFJlcXVpcmU= 33999 -IGRpc3Nl 34000 -Lklm 34001 -YXJtaW5n 34002 -dWxzaW9u 34003 -UG8= 34004 -X0RFVEFJTA== 34005 -UHJvdG90eXBl 34006 -IENBTA== 34007 -IGFncmVlcw== 34008 -LnZv 34009 -LkV4ZWN1dGVOb25RdWVyeQ== 34010 -IFRvcGlj 34011 -ICd7fQ== 34012 -QXJt 34013 -IGVjYw== 34014 -TWFn 34015 -IHNlcmlhbGl6ZWQ= 34016 -CWNvbm4= 34017 -Y2FjaGVk 34018 -PXRm 34019 -IEJ5dGVBcnJheQ== 34020 -cHJvdG9idWY= 34021 -dmFyY2hhcg== 34022 -CUFTU0VSVA== 34023 -IGxpc3Rl 34024 -X3RyaWdnZXI= 34025 -t7g= 34026 -RmVlbA== 34027 -VGFob21h 34028 -IExpaw== 34029 -IHN0cnVjdHVyZWQ= 34030 -ZXJndXM= 34031 -LkluaXRpYWw= 34032 -X2dl 34033 -Y2xqcw== 34034 -LmNvbnRhY3Q= 34035 -IGFuZGVyZQ== 34036 -JHN0bXQ= 34037 -X0NVUlJFTlQ= 34038 -IERpc2NvdmVy 34039 -JHJlcw== 34040 -Zm9ybWF0dGVy 34041 -SGE= 34042 -dmFuZ3N0 34043 -IGVtZXJnZQ== 34044 -44CC4oCd 34045 -IENhYmluZXQ= 34046 -LXNxdWFyZQ== 34047 -6YOo 34048 -IHJhZ2U= 34049 -IEFK 34050 -IFZU 34051 -c2hhZG93 34052 -IEZhaXRo 34053 -ZW5hbWVz 34054 -cHJldHR5 34055 -aGFzaWw= 34056 -cGFydHk= 34057 -IHZhcmNoYXI= 34058 -IGZvdG9z 34059 -IGFsdW0= 34060 -IEJlbGdpdW0= 34061 -LnlsYWJlbA== 34062 -IGRlag== 34063 -X251bWJlcnM= 34064 -IGh1 34065 -LnNldEFkYXB0ZXI= 34066 -IFVzdWFsbHk= 34067 -KHNhbXBsZQ== 34068 -LlNoYXJlZA== 34069 -IGJvb2tlZA== 34070 -ID4+PQ== 34071 -IG1pbmVyYWxz 34072 -Ij48Pz0= 34073 -IGFkanVzdG1lbnRz 34074 -IERM 34075 -IHZpYnJhbnQ= 34076 -IERlcGVuZGVuY3k= 34077 -IHphcA== 34078 -L1g= 34079 -IGZvbnRz 34080 -dHJpcA== 34081 -0LjRhw== 34082 -IHR1YmVz 34083 -Y2xhbWF0aW9u 34084 -IOun 34085 -IHByb3RhZ29u 34086 -b3Vwb24= 34087 -IEJydXNo 34088 -KHByZWQ= 34089 -b3VybmV5 34090 -J10pLT4= 34091 -cHJvZw== 34092 -Ym9v 34093 -X21k 34094 -X3BhY2s= 34095 -KGV4cHJlc3M= 34096 -dXR6 34097 -XEF1dGg= 34098 -LGlk 34099 -IENoaWxl 34100 -YWN0aWNl 34101 -IHJlY3J1aXRtZW50 34102 -IHBvc2Vz 34103 -IHZ1bG5lcmFiaWxpdHk= 34104 -aW5zdGFuYw== 34105 -b3J1bQ== 34106 -ZGVzcw== 34107 -IHhs 34108 -JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSU= 34109 -KGZpZw== 34110 -IGRlbGV0aW5n 34111 -LmRlbA== 34112 -KScpCg== 34113 -IFdlZWtseQ== 34114 -Pz8/ 34115 -KHN0cmNtcA== 34116 -c21pdGg= 34117 -IHB1cnN1aW5n 34118 -LXNv 34119 -IEFwcHM= 34120 -LycK 34121 -IGRlY2lz 34122 -Rk9SRQ== 34123 -RXZlcnlvbmU= 34124 -IGxhbmVz 34125 -VmlydHVhbA== 34126 -LmF0dGFjaA== 34127 -KExvZw== 34128 -IE1lZGljYWlk 34129 -KFBhdGg= 34130 -IFR1cm5lcg== 34131 -L2FwcGxpY2F0aW9u 34132 -IHBvcnRyYWl0 34133 -IG9wcG9zZQ== 34134 -Y2hlY2tvdXQ= 34135 -IGZpbmlzaGVz 34136 -X01F 34137 -QmFycmllcg== 34138 -U29uZw== 34139 -VkFS 34140 -RWFybGllcg== 34141 -cmVsbGE= 34142 -IGhhc3Q= 34143 -YXphcg== 34144 -IHB1bGxz 34145 -bmd4 34146 -IGluc3BpcmluZw== 34147 -0YPRjg== 34148 -LWRpcmVjdGlvbg== 34149 -IGV4cGxvc2l2ZQ== 34150 -IGNyZWF0ZWRBdA== 34151 -c3Rv 34152 -IHdoZWF0 34153 -IEJ1aWx0 34154 -J2Fp 34155 -IHRyYWNrZWQ= 34156 -aGFtbWFk 34157 -Um93QXRJbmRleFBhdGg= 34158 -X2hlYXA= 34159 -RHVl 34160 -IGNvbm5lY3Rz 34161 -LnB1Ymxpc2g= 34162 -ZW11 34163 -IGJ1bGxldHM= 34164 -QkFS 34165 -b2xhdGU= 34166 -IGludGVybmFsbHk= 34167 -IGNhdGNoaW5n 34168 -LXBhc3N3b3Jk 34169 -b3VjaGVk 34170 -5oCn 34171 -ZW91cw== 34172 -IHhyYW5nZQ== 34173 -UXVhbGl0eQ== 34174 -dnY= 34175 -TWFuYWdl 34176 -KCgk 34177 -YWNlbWVudHM= 34178 -IEJyb3RoZXJz 34179 -IEhFQUQ= 34180 -IFVuc3VwcG9ydGVk 34181 -c2Fu 34182 -ZXNp 34183 -KioqCg== 34184 -IGFkYXB0YXRpb24= 34185 -IFdvcmtlcg== 34186 -J10v 34187 -LnNhdmVmaWc= 34188 -KHRyYW5z 34189 -2Kw= 34190 -bmVl 34191 -Q29ycmVjdA== 34192 -Li4uIikK 34193 -IHN1Ym1pdHRpbmc= 34194 -LXBhdGg= 34195 -CWxhc3Q= 34196 -aXNzYW4= 34197 -LnhsYWJlbA== 34198 -IFNlcGFy 34199 -L25v 34200 -X2Jlc3Q= 34201 -IE1pbGxz 34202 -X3NvY2s= 34203 -KGZsYWc= 34204 -IGRlc3RpbmF0aW9ucw== 34205 -ZW1wdGlvbg== 34206 -IEZBSUw= 34207 -5ZKM 34208 -IHJw 34209 -ZmFjdA== 34210 -CWxlbg== 34211 -REFZ 34212 -IHNlaXo= 34213 -X2RzdA== 34214 -bGlw 34215 -LkxpbmVhcg== 34216 -IEJhc2tldA== 34217 -JHQ= 34218 -JGk= 34219 -LWJyYW5k 34220 -IE5laWw= 34221 -IEVx 34222 -IHRob3U= 34223 -b2dlbmU= 34224 -IHNjaG9sYXJzaGlw 34225 -5pu0 34226 -IHN3bw== 34227 -YWdpbmF0b3I= 34228 -ZW5p 34229 -KGJvb2s= 34230 -IGJsaW5r 34231 -dGh1cw== 34232 -IGNhbmNlbGxhdGlvblRva2Vu 34233 -IFBhbGVzdGluaWFucw== 34234 -IHByb2ZpdGFibGU= 34235 -IGJhY2twYWNr 34236 -ZW5zb24= 34237 -PExvbmc= 34238 -IHBvb2xz 34239 -IHN0aWNrcw== 34240 -IHNwb2tlc3dvbWFu 34241 -QmVpbmc= 34242 -IEhlcml0YWdl 34243 -IE5pa2U= 34244 -U0hB 34245 -IE5vdEltcGxlbWVudGVkRXhjZXB0aW9u 34246 -JGNvcmU= 34247 -IFJpY28= 34248 -L2xhdGVzdA== 34249 -IEN6ZWNo 34250 -bmVyUmFkaXVz 34251 -KGxpbmVz 34252 -IHNlbWVzdGVy 34253 -IHdvdW5kcw== 34254 -UHJvY2VkdXJl 34255 -Lm1haWw= 34256 -KCkpOgo= 34257 -IGNvcnJpZA== 34258 -dGVyZWQ= 34259 -IE5DQUE= 34260 -IGdhbGF4eQ== 34261 -X2tpbmQ= 34262 -aWxr 34263 -IHRyYXM= 34264 -X1BPTA== 34265 -IEhldA== 34266 -IHJlZnVnZWU= 34267 -IHRlZW5hZ2U= 34268 -LmJpbmRpbmc= 34269 -cG9zdGFs 34270 -IGnDp2lu 34271 -IERhdGFUeXBl 34272 -6ZY= 34273 -eWNsZXJ2aWV3 34274 -LHZhbHVl 34275 -X2lkZW50aWZpZXI= 34276 -PGI= 34277 -IG91dGZpbGU= 34278 -DQogICAgDQo= 34279 -IGNyw6k= 34280 -IHJlc3BvbmRlbnRz 34281 -IEJlYXN0 34282 -Y2VsZWQ= 34283 -IGludGVyZg== 34284 -LXRoZW1l 34285 -Z2lm 34286 -IFJhbmdlcnM= 34287 -SVRBTA== 34288 -IGF1dGhlbnRpY2F0ZQ== 34289 -Q29tcGxldGlvbg== 34290 -dXJzb3Jz 34291 -IGNpbmVtYQ== 34292 -IGRpc2NvdXI= 34293 -IEphdw== 34294 -T0NLRVQ= 34295 -IHByYXllcnM= 34296 -IEx1aXM= 34297 -ZnJhZw== 34298 -PVsK 34299 -IGJyYXZl 34300 -X3Bvc2U= 34301 -Q2VydGlmaWNhdGU= 34302 -LWZl 34303 -aWZlcmF5 34304 -IEZsYWdz 34305 -Q29udGFpbmVyR2Fw 34306 -IENyaXQ= 34307 -UmVzdWx0U2V0 34308 -CWN1cg== 34309 -IGNvcnJlc3BvbmRz 34310 -U3RhZmY= 34311 -Lkh0dHBTZXJ2bGV0UmVxdWVzdA== 34312 -IG5ldXJvbnM= 34313 -IE1haW5BeGlzQWxpZ25tZW50 34314 -ZWRhcg== 34315 -IGdhZA== 34316 -X3BhcnRz 34317 -IM6y 34318 -IGZ4 34319 -L2ZpbGVz 34320 -IEJyb3M= 34321 -aGlwcw== 34322 -IGdsdWNvc2U= 34323 -IGZhcm1z 34324 -IG1lbnRhbGx5 34325 -cmVzdGF1cmFudA== 34326 -VGFibGVOYW1l 34327 -IE1lcmNlZGVz 34328 -LlZpc3VhbA== 34329 -IGFuY2g= 34330 -aW5hbGc= 34331 -X3J1bnRpbWU= 34332 -IHByb3ByaWV0YXJ5 34333 -IGludGVudGlvbnM= 34334 -aXpp 34335 -U2xpY2U= 34336 -OyI+PC8= 34337 -X1dPUkQ= 34338 -XE1pZ3JhdGlvbnM= 34339 -IEVOQUJMRQ== 34340 -X1BBUkFNRVRFUg== 34341 -IEJpc2hvcA== 34342 -LnN1YmplY3Q= 34343 -aWxsYXM= 34344 -Lm1hdHJpeA== 34345 -dXJyZW5jZXM= 34346 -Knk= 34347 -IGNvc3RseQ== 34348 -IENodWNr 34349 -IGNsb3Nlcw== 34350 -IE1pZ2h0 34351 -LXN0b3Jl 34352 -IG1hbGw= 34353 -aWV0ZW4= 34354 -LkFicw== 34355 -IGNvdXBsZWQ= 34356 -LmJhc2lj 34357 -IDo6Ojo6Ojo6 34358 -TWFrZXI= 34359 -Y2Fubm90 34360 -IGFjaA== 34361 -IEVsaQ== 34362 -4oiS 34363 -b3JuYQ== 34364 -IGNwcw== 34365 -IHRoZXJlb2Y= 34366 -IEB7 34367 -IE5TTXV0YWJsZUFycmF5 34368 -zr0= 34369 -cHJvZHVjdGl2ZQ== 34370 -U3F1YXJl 34371 -dGVtcHRz 34372 -IGVsaW1pbmF0ZWQ= 34373 -PE0= 34374 -IGNvbnNlcnZhdGl2ZXM= 34375 -IFN1cmc= 34376 -LnBhcg== 34377 -IEJ1Y2g= 34378 -KmI= 34379 -Rm9ydA== 34380 -Q29sb3Vy 34381 -IENoaQ== 34382 -ZWRpYw== 34383 -PnRydWU= 34384 -IE5ZQw== 34385 -IGJvcmVk 34386 -IERldGVjdA== 34387 -IGFwcGFy 34388 -IGplYW5z 34389 -IFRhaw== 34390 -SU9E 34391 -IEhvcnNl 34392 -KEZJTEU= 34393 -KD8= 34394 -cmlxdWU= 34395 -b3B0aW1pemVy 34396 -bmF0 34397 -bG95cw== 34398 -CVRva2Vu 34399 -b3VidGVk 34400 -dWVzcw== 34401 -b2NvYQ== 34402 -RGF0YU1lbWJlcg== 34403 -X1BPV0VS 34404 -Y2xhc3NMaXN0 34405 -UHVzaEJ1dHRvbg== 34406 -IFdpRmk= 34407 -LlN0cmVhbQ== 34408 -Lmd1aWxk 34409 -IG5vZw== 34410 -IFBvcnR1Z2Fs 34411 -IFVudGVy 34412 -UHJpbWl0aXZl 34413 -Ym9zcw== 34414 -IERldXRzY2g= 34415 -IGVyb3RpYw== 34416 -IHN0cmNvbnY= 34417 -LlRyeVBhcnNl 34418 -IGdyYW1z 34419 -LlN1Y2Nlc3M= 34420 -X3Br 34421 -IEhhcnZleQ== 34422 -LW1pbmRlZA== 34423 -LmNvdW50cnk= 34424 -W10i 34425 -IGFuZ2Vs 34426 -IGJlYXRz 34427 -IFZvcg== 34428 -aWxpbw== 34429 -Lm1hc3Rlcg== 34430 -c29tZXRoaW5n 34431 -IFBBQ0s= 34432 -KGlm 34433 -UmVxdWVzdEJvZHk= 34434 -IGFudGVz 34435 -L3dpZGdldA== 34436 -IG1vZG8= 34437 -IEFX 34438 -ZmluZGVy 34439 -IG9wdGltaXplZA== 34440 -IG1pc3NpbGVz 34441 -TkI= 34442 -CWludGVybmFs 34443 -dGV4 34444 -IFNyaQ== 34445 -IGRhbWFnaW5n 34446 -IE1haXM= 34447 -LUFsbG93 34448 -IFpo 34449 -LWFsdA== 34450 -ICkpOwoK 34451 -6Ik= 34452 -IGluZmx1ZW5jZXM= 34453 -IGNhdGFs 34454 -X1JFR0lTVEVS 34455 -IEFQSXM= 34456 -LWNlbnR1cnk= 34457 -IGJpb2xvZ3k= 34458 -IEFjdHVhbA== 34459 -IGhlZWxz 34460 -VFJBQ0U= 34461 -X0RJRw== 34462 -RGF0YXNldA== 34463 -IE1hdHRlcg== 34464 -IGNsYXNzaWZpZXI= 34465 -Lndpa2lwZWRpYQ== 34466 -IFJvZ2Vycw== 34467 -IGRvbmF0ZWQ= 34468 -cmF3bGVy 34469 -ZW5lbg== 34470 -IGNhc2lub3M= 34471 -b3J0YWw= 34472 -IHByaXZl 34473 -c3Bl 34474 -ZHVjZXJz 34475 -LmVw 34476 -IGdyYXNw 34477 -YWNqaQ== 34478 -IGRhaXJ5 34479 -IGJ1c2Vz 34480 -LmNvbW0= 34481 -Lmlucw== 34482 -IElSUw== 34483 -IEJlZXI= 34484 -YWRj 34485 -b2FyZA== 34486 -X01FVA== 34487 -ICcrJw== 34488 -cmFucw== 34489 -IGtpbmRh 34490 -IOKUgg== 34491 -IE1hdXI= 34492 -0LDQsw== 34493 -IGJhbmR3aWR0aA== 34494 -aWJ1cw== 34495 -IERpZmZlcmVudA== 34496 -KG1hdA== 34497 -IFJlc3VtZQ== 34498 -X1VOUw== 34499 -ZXN0YWJsaXNo 34500 -IGZvbmN0aW9u 34501 -U3Vic2NyaXB0aW9u 34502 -X2NvbXBhbnk= 34503 -IGxpZ2h0bHk= 34504 -LmNvbmZpcm0= 34505 -LnlhbWw= 34506 -IEJvb3N0 34507 -Q29tbWVyY2U= 34508 -LXRlbXBsYXRl 34509 -X0RFTEFZ 34510 -IEhJ 34511 -IG5hdmln 34512 -KFNlbmRlcg== 34513 -IEhT 34514 -XyIr 34515 -IFJFUVVFU1Q= 34516 -IHdpZmk= 34517 -PSIiCg== 34518 -XSktPg== 34519 -IHJvcGU= 34520 -IHZpb2xhdGVk 34521 -IGdsYW5jZQ== 34522 -IEt1cmQ= 34523 -IOiu 34524 -ZGVjaw== 34525 -IElTQk4= 34526 -IGluZmVjdA== 34527 -IEZvbw== 34528 -IGdldHRlcg== 34529 -IHRlbmVy 34530 -YXBwZQ== 34531 -Lmho 34532 -X2hvdA== 34533 -PEFN 34534 -cG9seQ== 34535 -ISIsCg== 34536 -IGNvbnZlcnRpbmc= 34537 -IFdXRQ== 34538 -Uk9T 34539 -KCd7 34540 -Q29tbWl0 34541 -KUw= 34542 -IE9yZQ== 34543 -IHNwYXJzZQ== 34544 -IGRpc3Bvc2Fs 34545 -IGNhbmNlbGVk 34546 -5ZCO 34547 -IGFlcg== 34548 -IHZpbnls 34549 -4buD 34550 -cmVjb2du 34551 -YXJraW5n 34552 -IHRyaWNreQ== 34553 -KnM= 34554 -IHByb2NlZWRz 34555 -IGlzbw== 34556 -IGNvY29udXQ= 34557 -IGNyYWZ0ZWQ= 34558 -SUVMRFM= 34559 -IHF1ZXN0bw== 34560 -IGNvbW11bg== 34561 -X0NPTk5FQ1Q= 34562 -IHRyYWZmaWNraW5n 34563 -RGVlcA== 34564 -YcOnw7Vlcw== 34565 -Y29kaWdv 34566 -dmVhdQ== 34567 -IGJldHJheQ== 34568 -aW50YQ== 34569 -VEVE 34570 -w6Zy 34571 -bWFydA== 34572 -X0JVUw== 34573 -L3Nj 34574 -aWFsbHk= 34575 -IGNpZ2FyZXR0ZXM= 34576 -6K+B 34577 -KG5u 34578 -IG1vZGVsaW5n 34579 -L3Byb2R1Y3Rz 34580 -d2Fybg== 34581 -IG1ldHJv 34582 -IEl2 34583 -Jik= 34584 -IENhYmxl 34585 -zrs= 34586 -Q29tcGFyaXNvbg== 34587 -Z2FyeQ== 34588 -IEJB 34589 -UEFSVA== 34590 -IHB2 34591 -X3VwZGF0ZWQ= 34592 -Q3JlZGl0 34593 -b3J0aHk= 34594 -b2JzZXJ2YWJsZQ== 34595 -IHRoZWF0cmU= 34596 -QkxF 34597 -O30KCg== 34598 -bGF1bmNo 34599 -X3N0cmluZ3M= 34600 -dWdv 34601 -IFJQRw== 34602 -LWF1dGg= 34603 -0KA= 34604 -aG9sbQ== 34605 -IFBhbmQ= 34606 -VWlk 34607 -IGltcGx5 34608 -7Jy8 34609 -J109Jw== 34610 -L1VzZXI= 34611 -IHN0cmNhdA== 34612 -0L3Ri9C5 34613 -RGF0YUFkYXB0ZXI= 34614 -IGxhbmRzYw== 34615 -IGRpcGxvbWF0aWM= 34616 -77yT 34617 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 34618 -IENoaWNrZW4= 34619 -IGJjcnlwdA== 34620 -LkluZg== 34621 -W2NvbA== 34622 -IFF1YW50aXR5 34623 -LXBvc2l0aW9u 34624 -IGRpZXRhcnk= 34625 -IGZpbG1t 34626 -SXNyYWVs 34627 -UHJldg== 34628 -IE1pbGxpb24= 34629 -IHJlbWVk 34630 -IGJpbGxpbmc= 34631 -IG91dGRvb3Jz 34632 -LnRt 34633 -IG5hZA== 34634 -Rm9yZw== 34635 -Wlo= 34636 -IHNzbA== 34637 -XSwn 34638 -S1Q= 34639 -ZnJlcQ== 34640 -PWRvY3VtZW50 34641 -Ymx1cg== 34642 -rLg= 34643 -IEplZmZlcnNvbg== 34644 -Q3M= 34645 -KHNhdmU= 34646 -IHN0cmFw 34647 -SW5kaWE= 34648 -IGlkZW9sb2d5 34649 -Qk9TRQ== 34650 -IEZQ 34651 -KGFucw== 34652 -IGZldmVy 34653 -IFlhbQ== 34654 -S2luZw== 34655 -4LI= 34656 -QVRJTkc= 34657 -Ym9oeWRy 34658 -cm9sbGJhY2s= 34659 -IG5ld05vZGU= 34660 -IE5WSURJQQ== 34661 -IGhvbm91cg== 34662 -IENvbmZpcm0= 34663 -eGJk 34664 -IHN1Y2Nlc3Nvcg== 34665 -L3U= 34666 -bGl2 34667 -b3VybmFtZW50cw== 34668 -QXR0YWNobWVudA== 34669 -IGdydXA= 34670 -IHRyaWJl 34671 -IGNhcmVz 34672 -ZWZ0 34673 -X3NhbWU= 34674 -J2xhYmVs 34675 -IOOAkA== 34676 -TW90b3I= 34677 -IGluZXhw 34678 -ICIoIg== 34679 -X1BPU0lUSU9O 34680 -IHZhbGxleQ== 34681 -IFJlc3VsdFNldA== 34682 -IHByZXNlcnZlZA== 34683 -IG11dGF0aW9ucw== 34684 -IHF1ZXN0aW9uaW5n 34685 -bXVuaXRpb24= 34686 -cGFyc2VJbnQ= 34687 -IFNy 34688 -IE1ldGFkYXRh 34689 -4oCd77yM 34690 -dGltZXN0YW1wcw== 34691 -IHRyYW5zaXRpb25z 34692 -7Zk= 34693 -0Yo= 34694 -aW9t 34695 -LkRv 34696 -IHBpbmU= 34697 -IGZ1bmc= 34698 -IHRyYW5zbWl0dGVk 34699 -Y3RpbWU= 34700 -IEZhbQ== 34701 -UmV2aXNpb24= 34702 -QmFz 34703 -VVBFUg== 34704 -RGVzdGluYXRpb24= 34705 -dG9IYXZlQmVlbkNhbGxlZA== 34706 -IHVuZm9ydHVuYXRl 34707 -SU5FUw== 34708 -X3Byb2Y= 34709 -QW1vbmc= 34710 -IEN5YmVy 34711 -IEJhdHRlcnk= 34712 -Z2VucmU= 34713 -IFZpZXdNb2RlbA== 34714 -LT0= 34715 -IHV0aWxpemVk 34716 -cGFpbnQ= 34717 -LkludGVnZXJGaWVsZA== 34718 -ZXJuaXR5 34719 -Y29tcGlsZXI= 34720 -4oCLCgo= 34721 -IE1hc3RlcnM= 34722 -LlRvQXJyYXk= 34723 -IHN0cnRvbA== 34724 -IFVrcmFpbmlhbg== 34725 -fSkpOwo= 34726 -IHNoZW1hbGU= 34727 -IlRoYXQ= 34728 -Zm9yYWxs 34729 -L2Rvd25sb2Fk 34730 -IHJoZXRvcmlj 34731 -LmxhdGl0dWRl 34732 -IFdIRU4= 34733 -IHNob2NraW5n 34734 -SUZJQw== 34735 -Lk5vcm1hbA== 34736 -X0ZPTERFUg== 34737 -IGRyaWZ0 34738 -IG1vdW50aW5n 34739 -LWJvb2s= 34740 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 34741 -IFdpcmVsZXNz 34742 -PiIuJA== 34743 -IHJlbGllcw== 34744 -KENvbnNvbGU= 34745 -SW50ZXJuYXRpb25hbA== 34746 -LT57JA== 34747 -TWlk 34748 -IGRpc3NlcnQ= 34749 -ZGRz 34750 -IGRlcG9zaXRz 34751 -CWRyaXZlcg== 34752 -I2dh 34753 -cHJpc2luZw== 34754 -cHJpbnRsbg== 34755 -IHByZXNlbnRlcg== 34756 -IG1pbmVz 34757 -Q1NT 34758 -IER1YWw= 34759 -KCEo 34760 -IGthbQ== 34761 -IGlzTG9hZGluZw== 34762 -IFByb3RlY3Q= 34763 -LnVwcGVy 34764 -YXJpdW0= 34765 -XToKCgo= 34766 -WWlp 34767 -LXNoaXJ0 34768 -IElNQUdF 34769 -X2NvbG9ycw== 34770 -IHVyZ2VudA== 34771 -LkNvbnRhaW5lcg== 34772 -ISgK 34773 -U2F0dXJkYXk= 34774 -IHNvY2lldGllcw== 34775 -IFRoYW4= 34776 -IENvZA== 34777 -PUA= 34778 -IGF0dGFjaG1lbnRz 34779 -Lm1vYmlsZQ== 34780 -IHNwaXRl 34781 -IGJvdW5jZQ== 34782 -cmF3bA== 34783 -aW5zdGFuY2V0eXBl 34784 -IFRydWNr 34785 -IG1hbmlwdWxhdGlvbg== 34786 -KENvbmZpZw== 34787 -LWluc3Q= 34788 -IHN0b3I= 34789 -aXR1dGlvbg== 34790 -UHJlZmVycmVkR2Fw 34791 -IG1haW5BeGlzQWxpZ25tZW50 34792 -IGxpc3RlbmVk 34793 -JycnCgo= 34794 -b3R0YWdl 34795 -LXByb2plY3Q= 34796 -LkFQUExJQ0FUSU9O 34797 -CXJvb3Q= 34798 -IHdoaXQ= 34799 -IGJpbGRlcg== 34800 -IGtlcg== 34801 -IGFwcGxpYW5jZXM= 34802 -cm93YXZl 34803 -7J2A 34804 -ZW1hdGljcw== 34805 -IE9yZw== 34806 -b3Bpbmc= 34807 -X1NFQVJDSA== 34808 -IGNoYW0= 34809 -YWRkQ29udGFpbmVyR2Fw 34810 -ICgpLg== 34811 -IEFycm93 34812 -SWxsZWdhbA== 34813 -Q3VycmVudGx5 34814 -IHVzYQ== 34815 -IHBhc3N3b3Jkcw== 34816 -IHJlbm93bg== 34817 -YXZlcm4= 34818 -IEV2aWw= 34819 -IGNvbmNhdA== 34820 -IGR1bw== 34821 -IHZhbGU= 34822 -IEJlYW4= 34823 -IGluZGljYXRvcnM= 34824 -Y21hdGg= 34825 -IFB1bXA= 34826 -Tm92ZW1iZXI= 34827 -aWZpY2FudA== 34828 -X0RPTUFJTg== 34829 -cmVnYXI= 34830 -IFBvcnRhbA== 34831 -IiQ= 34832 -IGZvcm1lcmx5 34833 -Il06Cg== 34834 -IFZpc2liaWxpdHk= 34835 -LmdldEVsZW1lbnRzQnlDbGFzc05hbWU= 34836 -X1JFRA== 34837 -IGNoYW1waW9ucw== 34838 -4LQ= 34839 -VmFsb3I= 34840 -X2Vz 34841 -KmE= 34842 -LXJlcGVhdA== 34843 -QmFuZA== 34844 -LnN0YWdl 34845 -IGJ1cmVhdWM= 34846 -Q250 34847 -ZXRlbg== 34848 -LWZ1bmN0aW9u 34849 -IG11aXRv 34850 -UElE 34851 -X2VkaXRvcg== 34852 -IGNyYXNoZWQ= 34853 -ZGVhZA== 34854 -a2F0 34855 -YWdo 34856 -IEVYVA== 34857 -YXNzZXI= 34858 -LXNtYWxs 34859 -IHJlYWxpeg== 34860 -KEVudGl0eQ== 34861 -w7pz 34862 -IEFjdHVhbGx5 34863 -IEVsaXRl 34864 -IGhlbG0= 34865 -KG5vbmF0b21pYw== 34866 -YXNoZXI= 34867 -Q29tbXVuaXR5 34868 -YWxsZW5n 34869 -aXJ5 34870 -IEdyb3d0aA== 34871 -IHN1ZQ== 34872 -IGZyZXF1ZW5jaWVz 34873 -X2Rlc2NyaXB0b3I= 34874 -LkF0dHJpYnV0ZQ== 34875 -IHJlY2lwaWVudHM= 34876 -X05T 34877 -LyIr 34878 -aWJhbg== 34879 -IGF0aGxldGU= 34880 -IElnbg== 34881 -X0RNQQ== 34882 -KGRz 34883 -IFJlcXVpcmVtZW50cw== 34884 -QURJ 34885 -ZXJleg== 34886 -XEFkbWlu 34887 -YnJhc2th 34888 -IFJ1c3Q= 34889 -UmVsYXRpb24= 34890 -Q09E 34891 -IFZFUlNJT04= 34892 -ZW1tYQ== 34893 -KSl7 34894 -LkR1cmF0aW9u 34895 -IENhbWI= 34896 -LWxvZ28= 34897 -IHJlYWRhYmxl 34898 -IGNyZWF0b3Jz 34899 -KCldOwo= 34900 -VXBEb3du 34901 -LWhhbGY= 34902 -LmdldE1vbnRo 34903 -KHNm 34904 -UGlj 34905 -IGh1bmdlcg== 34906 -LnR4 34907 -IGV4Y2VlZGVk 34908 -X3NlZWQ= 34909 -KF4= 34910 -X3Nr 34911 -LnBlcmZvcm0= 34912 -ID46Og== 34913 -IG1vbmdv 34914 -PWZsb2F0 34915 -YmluZFBhcmFt 34916 -U21hcnQ= 34917 -aWZh 34918 -IHNlY3VyaXRpZXM= 34919 -IHByZWp1ZA== 34920 -ICwi 34921 -IGNvcnBz 34922 -IHZyYQ== 34923 -YW1hY2FyZQ== 34924 -aXRlcnI= 34925 -KE1lZGlh 34926 -dWNoZQ== 34927 -IGNvYg== 34928 -IGxpYmVy 34929 -Lmdlb21ldHJ5 34930 -TG9jYXRvcg== 34931 -IHNsaWRpbmc= 34932 -IHN1cmdpY2Fs 34933 -X0NVUg== 34934 -IGNvbnNlY3Q= 34935 -Wyo= 34936 -IFJlc29ydA== 34937 -U3R1Yg== 34938 -X0RPVUJMRQ== 34939 -IFNvcGg= 34940 -IGVsZWN0b3JhbA== 34941 -X2Rpc2FibGU= 34942 -INGB0L4= 34943 -IExpZ2h0bmluZw== 34944 -IG1lbnRpb25z 34945 -b2N5 34946 -IGxlYWtlZA== 34947 -IHJlbGF4aW5n 34948 -UHJlc2VudGVy 34949 -dnNw 34950 -IGd1aWx0 34951 -PS09LQ== 34952 -LnJlcGx5 34953 -IE1pcnJvcg== 34954 -Q2FtcA== 34955 -ICsjKyMrIys= 34956 -ICsjKyMrIysjKyMr 34957 -LkF1dGhvcg== 34958 -IGRpcmVjdGl2ZQ== 34959 -LWhvb2s= 34960 -7YSw 34961 -fQoKCgoK 34962 -QHB5dGVzdA== 34963 -X3JhbmQ= 34964 -bWlz 34965 -IGNvbG9yZnVs 34966 -dWpl 34967 -bGFzc2Vz 34968 -IENsYXNzZXM= 34969 -LmhhdmU= 34970 -JSks 34971 -6aKY 34972 -IGRpc3R1cmJpbmc= 34973 -c3Vic3RyaW5n 34974 -IEtvaA== 34975 -SW52ZXN0 34976 -cHVyY2hhc2U= 34977 -IHJlY3ljbGluZw== 34978 -IEFSVA== 34979 -aWVyYXJjaHk= 34980 -IGZwcw== 34981 -LmNoZWNrQm94 34982 -7ZW0 34983 -X21hdGVyaWFs 34984 -ZHVjYXRpb24= 34985 -IGZ3 34986 -dWRpdA== 34987 -IHJldmlld2luZw== 34988 -IFNpZA== 34989 -U3ludGF4 34990 -IFdyaXR0ZW4= 34991 -YXJnYXI= 34992 -VU1F 34993 -L3E= 34994 -Q2xhc3NpZmllcg== 34995 -T2ZmaWNpYWw= 34996 -IGpheno= 34997 -IG9tZWdh 34998 -UGh5c2ljcw== 34999 -IGx1Z2Fy 35000 -X2FjY2Vzc29y 35001 -LmNvbW1hbmRz 35002 -QWJpbGl0eQ== 35003 -IEJhdGNo 35004 -UkFN 35005 -IGVuY291bnRlcnM= 35006 -LlF1 35007 -QllURQ== 35008 -IERpc3RyaWJ1dGlvbg== 35009 -IHVzbw== 35010 -IFJlY292ZXJ5 35011 -YXBwcm92ZWQ= 35012 -IGRlbmlhbA== 35013 -L3NoYXJl 35014 -TGlua2VkTGlzdA== 35015 -KQ0KDQoNCg== 35016 -dWRkeQ== 35017 -IGZpbmVz 35018 -IHJ5 35019 -VW5pY29kZQ== 35020 -CXJlbmRlcg== 35021 -IHByZW1pc2Vz 35022 -IHBvbg== 35023 -YWxpYXNlcw== 35024 -L0ZvdW5kYXRpb24= 35025 -Y3VkYQ== 35026 -IENvY2s= 35027 -LDop 35028 -KGZvbGRlcg== 35029 -IG3DqWQ= 35030 -ZHJhZw== 35031 -IHRhbGVudHM= 35032 -ICAgCgo= 35033 -0LXRgdGC0LI= 35034 -bW9i 35035 -LnltbA== 35036 -IGFzdGVy 35037 -IGRpc2NyZQ== 35038 -Z29hbA== 35039 -IEdUWA== 35040 -IFNVQ0NFU1M= 35041 -IExPTkc= 35042 -KGZpbmQ= 35043 -IHNpbmd1bGFy 35044 -X3N6 35045 -IEV0aGVyZXVt 35046 -Li4K 35047 -IGlycmVz 35048 -Jykpewo= 35049 -IG1pbmlzdGVycw== 35050 -U3RlcHM= 35051 -aXZlcnNhbA== 35052 -IE5ldmVydGhlbGVzcw== 35053 -LWxlZA== 35054 -ICglKQ== 35055 -56Gu 35056 -IHRpbWV6b25l 35057 -IHN0cmFuZ2Vy 35058 -KHJlbmRlcg== 35059 -IHNodXRpbA== 35060 -IG1waA== 35061 -IHRyaW8= 35062 -cHB5 35063 -IHByZWRvbWlu 35064 -IGVuZG9ycw== 35065 -IFJ1c3NpYW5z 35066 -CXJvdw== 35067 -IHdpemFyZA== 35068 -LnNlcmlhbGl6ZQ== 35069 -IGNvbXBsYWluZWQ= 35070 -IHNpZG8= 35071 -IGRlbGlnaHRlZA== 35072 -LW1l 35073 -IFJhdg== 35074 -SHVtYW4= 35075 -YWRheXM= 35076 -cmVjdg== 35077 -V29ya2luZw== 35078 -SnVtcA== 35079 -IMOlcg== 35080 -IEF1dG9tYXRpYw== 35081 -X0Jhc2U= 35082 -5qC8 35083 -YXVyYW50cw== 35084 -wq8= 35085 -5rg= 35086 -KENUeXBl 35087 -SUZJ 35088 -KGFtb3VudA== 35089 -IGJlbGlldmluZw== 35090 -PW15c3Fs 35091 -IGZpcg== 35092 -IHJlc3RvcmF0aW9u 35093 -ZXJlY28= 35094 -0KI= 35095 -Xycr 35096 -IGVib29r 35097 -IGRlYnJpcw== 35098 -KGlucHV0cw== 35099 -QVlPVVQ= 35100 -IHNjcmVhbWluZw== 35101 -YXZpYQ== 35102 -bGFuZGVy 35103 -IGRpc3RyZXNz 35104 -IGFzc2VtYmxlZA== 35105 -IEF2b2lk 35106 -KHRocmVhZA== 35107 -IFJQQw== 35108 -X0VYSVQ= 35109 -KHF1ZXVl 35110 -0LjRgdGC 35111 -RGxs 35112 -IHNrdWxs 35113 -X3B1Yg== 35114 -Y2hleg== 35115 -bWluYXRl 35116 -ZW5zZW4= 35117 -IGluc2FuZQ== 35118 -Ym91bmRz 35119 -IFJvc2Vu 35120 -IGNvbmRpdGlvbmluZw== 35121 -cHJvY2Vzc2Vk 35122 -dmlkZW9z 35123 -Zm91cg== 35124 -LkNvbnY= 35125 -fDsK 35126 -UGVyc29uYWw= 35127 -Y2VycHQ= 35128 -OlVJQ29udHJvbFN0YXRlTm9ybWFs 35129 -IGRvc2Vz 35130 -IEthcmw= 35131 -IEZyZXF1 35132 -LkJBU0U= 35133 -IFZvdGU= 35134 -IGNvbmN1cnJlbnQ= 35135 -IE1lc3NhZ2VCb3hJY29u 35136 -IMOW 35137 -IER1YmFp 35138 -IFJldGFpbA== 35139 -Om51bWJlcg== 35140 -IE9ic2VydmVy 35141 -IEJpZ0ludGVnZXI= 35142 -X29yaWdpbg== 35143 -X1dPUks= 35144 -RnJhbWVz 35145 -IG5vdGFibHk= 35146 -LuKAnA== 35147 -IHRyb3BpY2Fs 35148 -IG5pY2hl 35149 -YW1pbmE= 35150 -LnN5cw== 35151 -KHRva2Vucw== 35152 -bW9kaWZ5 35153 -b3NpdA== 35154 -c3Ryb20= 35155 -IENvbWljcw== 35156 -T1BUSU9O 35157 -VGlja2V0 35158 -IGZhY3Rvcmllcw== 35159 -IGRpc3B1dA== 35160 -X0ZpbGU= 35161 -IEZpbm4= 35162 -ZWVl 35163 -IERpc2NvcmQ= 35164 -X21vbmV5 35165 -LnRwbA== 35166 -X3NhZmU= 35167 -TEI= 35168 -IGdsdXQ= 35169 -Sks= 35170 -LmZsb3c= 35171 -LWNvbnQ= 35172 -Z29z 35173 -IGhvcml6b24= 35174 -IFJ1c2g= 35175 -Ojoq 35176 -UGlwZQ== 35177 -dWxsYQ== 35178 -Ym9yb3VnaA== 35179 -aGVpbWVy 35180 -KG1vdmU= 35181 -KFRleHQ= 35182 -fSk7DQoNCg== 35183 -d2VsY29tZQ== 35184 -IENvbXBvbmVudHM= 35185 -IGdvdmVybmFuY2U= 35186 -Y2xvc2Vk 35187 -CW1hcmdpbg== 35188 -IGxhdW5kcnk= 35189 -IFRlcm1pbmFs 35190 -aXphcmRz 35191 -LuKAlA== 35192 -LnJlbW90ZQ== 35193 -LnJhZGl1cw== 35194 -IFF1ZWJlYw== 35195 -IGRo 35196 -VGVjaA== 35197 -IE1pc3Q= 35198 -c2VsbGVy 35199 -X2xpdGVyYWw= 35200 -IGdlbml1cw== 35201 -IGJyYWlucw== 35202 -Z2Vt 35203 -IE1lYXN1cmU= 35204 -IGNhdGFzdA== 35205 -cmFuY2U= 35206 -LlRleHRGaWVsZA== 35207 -IGNvbnN1bWluZw== 35208 -ICdcJyc= 35209 -b3VidGVkbHk= 35210 -IENlcnRhaW4= 35211 -RXY= 35212 -ZXJ0aQ== 35213 -YmVpbmc= 35214 -RXhwZXJpZW5jZQ== 35215 -IC8vWw== 35216 -IEFyYWJpYw== 35217 -IENyaXN0 35218 -IEF6dXJl 35219 -IGhvcmE= 35220 -bGFkZXNo 35221 -XEJsdWVwcmludA== 35222 -ZGFy 35223 -LnJlbA== 35224 -IHN1cHJlbQ== 35225 -IFJlYWdhbg== 35226 -IEF0dHJpYnV0ZXM= 35227 -LXNpZGViYXI= 35228 -IHVzZVN0eWxlcw== 35229 -IEFpcmxpbmVz 35230 -IGhpbGxz 35231 -L3hodG1s 35232 -dmluYw== 35233 -X21vY2s= 35234 -CiAgICAgICAgICAgICAgICAK 35235 -IFBpbGw= 35236 -LkxheW91dFN0eWxl 35237 -IENvbW1hbmRlcg== 35238 -XTw= 35239 -c2lnbmF0dXJl 35240 -IHt9DQo= 35241 -IGhhdHJlZA== 35242 -IOuL 35243 -b2xlc3Rlcm9s 35244 -ICoqKioqKioq 35245 -YW5jZWxsb3I= 35246 -Y3JvcA== 35247 -VElN 35248 -CQkKCg== 35249 -eXNxbGk= 35250 -dWl0aXZl 35251 -CXVuc2V0 35252 -X3NlbA== 35253 -IG1lbnVz 35254 -dGljaw== 35255 -IGNvbnN0aXR1dGU= 35256 -IEVsZW1lbnRz 35257 -IFJlZGlz 35258 -YWdnaW8= 35259 -X2Zw 35260 -X2RlcGVuZA== 35261 -ZW1hcw== 35262 -Q0FTVA== 35263 -b3Jhbmdl 35264 -am9u 35265 -IEVtaWx5 35266 -IHBvdGF0b2Vz 35267 -IHJlY2VwdG9y 35268 -IEVsZWN0cm9uaWM= 35269 -IExpZ2h0cw== 35270 -IGNvbWJpbmluZw== 35271 -IFNvbWVvbmU= 35272 -ICMjIyMjIyMjLg== 35273 -IFRPRA== 35274 -L3Nob3c= 35275 -WGQ= 35276 -LiIn 35277 -YWZ4 35278 -IHRyYWdpYw== 35279 -U3R5bGVk 35280 -IE1hcmNv 35281 -R2FsbGVyeQ== 35282 -ZGFsZQ== 35283 -LuKAnQoKCgo= 35284 -w6lyaWU= 35285 -L3NlcnZpY2U= 35286 -5LqG 35287 -IGFtYmllbnQ= 35288 -X1NFVFRJTkdT 35289 -LkFkYXB0ZXI= 35290 -bGVuZQ== 35291 -IHRyYXZlbHM= 35292 -Tm90aWNl 35293 -IGNsZWFucw== 35294 -IEZlbQ== 35295 -Y2hhaXI= 35296 -0YPQvQ== 35297 -L215 35298 -X2JhZA== 35299 -IEVjb25vbWljcw== 35300 -SVNB 35301 -X0NOVA== 35302 -KE1lbnU= 35303 -5LqO 35304 -IFJpZGdl 35305 -IGxlbmd0aHk= 35306 -RG90 35307 -IGp1bXBz 35308 -IGhleQ== 35309 -JHBkZg== 35310 -IHdvcm0= 35311 -IHN1dA== 35312 -IHNoZXI= 35313 -aWFtbw== 35314 -IENhbGM= 35315 -dHJpZXZl 35316 -IGNvcHM= 35317 -IENocm9t 35318 -IHJlZ3VsYXRlZA== 35319 -cmVhdG1lbnQ= 35320 -IEhpZ2hlcg== 35321 -b2tz 35322 -IGRlemU= 35323 -TE9DQVRJT04= 35324 -b25nc1Rv 35325 -IGZpbml0ZQ== 35326 -IHZhcmllcw== 35327 -IHBvc2l0aW9uZWQ= 35328 -J2ls 35329 -6YeR 35330 -IGhpa2U= 35331 -KGRvbmU= 35332 -cGxheWxpc3Q= 35333 -IGFkYQ== 35334 -IGNvYXN0YWw= 35335 -IE5hbmN5 35336 -LkRhdGVUaW1lRmllbGQ= 35337 -Q3BwQ29kZUdlbg== 35338 -IFNpbWlsYXJseQ== 35339 -cmV1cg== 35340 -IENvbnRy 35341 -IEhpZGRlbg== 35342 -IEJldGE= 35343 -YXRjaGVk 35344 -X2luc3RhbGw= 35345 -Lk91dHB1dA== 35346 -TG9va3Vw 35347 -IFJpY2htb25k 35348 -cXVhcmVk 35349 -IG1hbmdh 35350 -LWNvbnRyb2xz 35351 -IEJlcm5hcmQ= 35352 -TGFyZ2U= 35353 -IHNsaWNlcw== 35354 -IG9mZmVuY2U= 35355 -IE1lZ2E= 35356 -IGVzdGFy 35357 -IGpvaW50cw== 35358 -IHN1bW0= 35359 -X3BsYXRmb3Jt 35360 -QnVmZg== 35361 -LmFkZFN1YnZpZXc= 35362 -IHJldGFpbmVk 35363 -TGV0dGVy 35364 -LmRpbQ== 35365 -IGVzc2VyZQ== 35366 -IFNjYWZmb2xk 35367 -RVhQRUNU 35368 -CVJF 35369 -LmxvbmdpdHVkZQ== 35370 -w7xuZA== 35371 -IHN0YXR1ZQ== 35372 -LmFkZFdpZGdldA== 35373 -IENhcmliYmVhbg== 35374 -YWRkUHJlZmVycmVkR2Fw 35375 -aWxkZQ== 35376 -VUlMYWJlbA== 35377 -IE9wcG9ydA== 35378 -IGltcGVyaWFs 35379 -dXJzaW9u 35380 -IG1hbmRhdGU= 35381 -IHByb21vdGlvbmFs 35382 -IHZr 35383 -aWHFgg== 35384 -IHB5bA== 35385 -IENyZWF0aW9u 35386 -0L7Qt9C0 35387 -IHNpbXBsZXI= 35388 -LndoYXQ= 35389 -IFJlY2VudA== 35390 -U3Rvcm0= 35391 -LnF1YW50aXR5 35392 -IExvdg== 35393 -Ii0= 35394 -dWJibGVz 35395 -X25vdGlmaWNhdGlvbg== 35396 -KHdvcmxk 35397 -dXJnZXI= 35398 -Kigt 35399 -OiIK 35400 -aG0= 35401 -YW5zaGlw 35402 -IEFsbW9zdA== 35403 -IG1vdG9yY3ljbGU= 35404 -X2ZlZQ== 35405 -IGFic29yYg== 35406 -IFZpbmNlbnQ= 35407 -IHNvdW5kZWQ= 35408 -w61zdA== 35409 -IHBoYXJtYWNldXRpY2Fs 35410 -aHRhZw== 35411 -IEtpbmRsZQ== 35412 -aXRhbGl6ZQ== 35413 -IEVtcGVyb3I= 35414 -b3VzdGlj 35415 -IHNwZWNpYWxpc3Rz 35416 -5YWs 35417 -Qm9yZGVyU3R5bGU= 35418 -L1w= 35419 -UkVMQVRFRA== 35420 -KCcsJyw= 35421 -KGV4cHI= 35422 -IGh0 35423 -5Y2I 35424 -X0NyZWF0ZQ== 35425 -IHNwZWNpYWxseQ== 35426 -IFtdOw0K 35427 -IGhlZWw= 35428 -IHNlcHQ= 35429 -X2FyY2g= 35430 -KGluaXRpYWw= 35431 -JS4KCg== 35432 -XCIsXCI= 35433 -IGRpc2N1c3Nlcw== 35434 -IHVwdA== 35435 -IFsm 35436 -IG1hbnVz 35437 -LmhhbmQ= 35438 -IE1BSU4= 35439 -IERlbm1hcms= 35440 -IF0sDQo= 35441 -IGNyeXN0 35442 -IG5hY2s= 35443 -Q29vcmRz 35444 -X2lubmVy 35445 -IG1pZHN0 35446 -IGF3YWtl 35447 -INCe 35448 -LWJyZWFr 35449 -w612ZWw= 35450 -X1BBU1M= 35451 -IFBhcmFtcw== 35452 -IGRldHI= 35453 -IHNwaWRlcg== 35454 -IENvbmNlcHQ= 35455 -IHByZW5k 35456 -Q0hFRA== 35457 -LkV4aXQ= 35458 -IHBvcHVsYXRlZA== 35459 -IHZpcnR1ZQ== 35460 -X1NFU1NJT04= 35461 -IG5vdXZlbA== 35462 -b2F1dGg= 35463 -INC00LDQvdC90Ys= 35464 -cmluaw== 35465 -LkhlYWRlclRleHQ= 35466 -YXR1cmF0ZWQ= 35467 -IGVyc3Q= 35468 -IOWF 35469 -4KWH 35470 -X3Zpc2libGU= 35471 -ZXllcg== 35472 -IGxpYWJsZQ== 35473 -IGRlYmU= 35474 -IGJ3 35475 -ey0j 35476 -X1dJTg== 35477 -ZGZz 35478 -SG92ZXI= 35479 -IFBVVA== 35480 -LWFuZ2xl 35481 -IG5vYmxl 35482 -IHRyYWNlcw== 35483 -ZW5jdg== 35484 -IHVzZXJEYXRh 35485 -X2lucw== 35486 -IFN1eg== 35487 -IG5ld3NsZXR0ZXJz 35488 -IE1vZGk= 35489 -IGVudHJlcHJlbmV1cnM= 35490 -IHRyaWJ1dGU= 35491 -IHJ1bW9ycw== 35492 -IHJy 35493 -IFF1YXJ0ZXI= 35494 -6rOg 35495 -IGZlZWRz 35496 -w7Nn 35497 -IGVudmVsb3Bl 35498 -IGxlYXI= 35499 -IGvDuA== 35500 -ZGV2ZWxvcGVy 35501 -U2ltaWxhcg== 35502 -OiIpCg== 35503 -c3Vic2NyaXB0aW9u 35504 -TW9kaWZpZXI= 35505 -aXRhbGlj 35506 -IG5hc3R5 35507 -IHRlcm1pbmF0aW9u 35508 -IGNoYXJtaW5n 35509 -IOKf 35510 -dG9ucw== 35511 -LnRyYWNl 35512 -aG90cw== 35513 -IFVS 35514 -TW9udA== 35515 -IGp1c3RpZmllZA== 35516 -IEdhbmc= 35517 -aW5lYQ== 35518 -IGJvZw== 35519 -KGFw 35520 -XyQ= 35521 -IGNvbnRhbWlu 35522 -LkRvdA== 35523 -CURlYnVn 35524 -KGV4cG9ydHM= 35525 -IHBhaXJlZA== 35526 -IEFzc2lnbm1lbnQ= 35527 -IGF1dG9tb2JpbGU= 35528 -k40= 35529 -IHBoYXNlcw== 35530 -dnc= 35531 -QFN1cHByZXNzV2FybmluZ3M= 35532 -PVw= 35533 -cmFudA== 35534 -LWVk 35535 -CWF3YWl0 35536 -IGNlcnRpZmljYXRlcw== 35537 -Jz4i 35538 -IGludGFjdA== 35539 -Q1RSTA== 35540 -TWlrZQ== 35541 -Z3JlZ2F0aW9u 35542 -QVRURVJO 35543 -IHJlcHVibGlj 35544 -X3VwcGVy 35545 -aWxpYXJ5 35546 -IGNvbXB1dGF0aW9u 35547 -aGlyZQ== 35548 -IFNoaW4= 35549 -X0FOWQ== 35550 -IE1hbnVmYWN0dXJlcg== 35551 -IENhcm0= 35552 -IGJlYXJpbmdz 35553 -X2NvbWI= 35554 -Y2Fk 35555 -dXJpc3RpYw== 35556 -IHdob2xlc2FsZQ== 35557 -IGRvbm9y 35558 -LmludGVyZmFjZXM= 35559 -cHJlc3Nv 35560 -IEJydW4= 35561 -LWNsb3Nl 35562 -cHJvdmU= 35563 -X1NL 35564 -CWZyYW1l 35565 -ZXRyb3M= 35566 -IFBhaW4= 35567 -X0VYUA== 35568 -IExU 35569 -X2Zz 35570 -LmRhdGFz 35571 -CXNz 35572 -dm9pcg== 35573 -IEF4aXM= 35574 -TWFqb3I= 35575 -PSI8 35576 -W2g= 35577 -IHByb2Zlc3M= 35578 -aWdyYXRl 35579 -KHNjb3Jl 35580 -S2V5d29yZA== 35581 -Im9z 35582 -ICAgIAkK 35583 -YW5hbHlzaXM= 35584 -IHJlcGxheQ== 35585 -LnBhc3M= 35586 -XGQ= 35587 -dGxz 35588 -IHNhbmN0 35589 -LmxpZ2h0 35590 -X21vYmlsZQ== 35591 -0YHRgtGM 35592 -CXRvdGFs 35593 -dWl0eQ== 35594 -IHBhdXNlZA== 35595 -TkFT 35596 -IGVuY29yZQ== 35597 -bG9l 35598 -IC0qLQoK 35599 -LmhpZ2g= 35600 -YW1wbGVy 35601 -IFNlY3VyZQ== 35602 -IGZyYWdtZW50cw== 35603 -X3ZlbA== 35604 -aWxsYXJ5 35605 -IFN0ZWlu 35606 -IERhd24= 35607 -IG1heGltaXpl 35608 -4Lii 35609 -IC9e 35610 -IGNvbnRpbnVhbGx5 35611 -IHNoYWRvd3M= 35612 -CSAgICAgICAgICAgICAgICAgICA= 35613 -IElBY3Rpb25SZXN1bHQ= 35614 -IGluZm9ybWFjacOzbg== 35615 -Q0hFQ0s= 35616 -LlNlbGVjdGVkSXRlbQ== 35617 -YnVuZGxl 35618 -b2xsZXk= 35619 -PEludA== 35620 -QUlORVI= 35621 -IFdpbmc= 35622 -dGl0bGVz 35623 -b3VudGFpbg== 35624 -Q1k= 35625 -IExvY2FsZQ== 35626 -Zm9ybWVy 35627 -PGNvbnRleHQ= 35628 -UmFkaW9CdXR0b24= 35629 -X3NjaGVkdWxl 35630 -IGZhYnVsb3Vz 35631 -Um9iZXJ0 35632 -X1BST0ZJTEU= 35633 -IGdhdGVz 35634 -SU1Q 35635 -IFBlbnRhZ29u 35636 -Z29sZA== 35637 -YmFjaA== 35638 -ZW1wbG95ZWVz 35639 -Um90YXRl 35640 -IGNoYW1w 35641 -IHNlbGJzdA== 35642 -QWx0ZXJu 35643 -IGNvbnZlcnRWaWV3 35644 -Lyw= 35645 -IH4o 35646 -U3RyZWV0 35647 -X3BsYWNl 35648 -IHBlcnNvbmFsaXplZA== 35649 -UHVibGlzaGVy 35650 -IFNPQ0s= 35651 -X05BTUVTUEFDRQ== 35652 -IFN0YW5kYXJkcw== 35653 -c29ldmVy 35654 -X0NFTlRFUg== 35655 -SW50ZXJlc3Q= 35656 -w7R0 35657 -dGVtcGVyYXR1cmU= 35658 -Vmlld3BvcnQ= 35659 -Z2V0UmVzb3VyY2U= 35660 -IGVhdGVu 35661 -IHNlbXByZQ== 35662 -IGFibm9ybWFs 35663 -IGN5bGluZGVy 35664 -IHRyb3VibGVz 35665 -bm9k 35666 -0YvQsg== 35667 -Z2FtZXM= 35668 -X2ds 35669 -UGxhbmU= 35670 -Z3JleQ== 35671 -X3RibA== 35672 -LkNvbXBvbmVudFBsYWNlbWVudA== 35673 -IENoYXNl 35674 -TG9nZ2luZw== 35675 -bWFueQ== 35676 -7IY= 35677 -IGZsYW1l 35678 -PSI8Pz0k 35679 -IEdyb3Vwcw== 35680 -LVU= 35681 -0YDQsNC9 35682 -CgoKCgoKCg== 35683 -IHZhdWx0 35684 -b21vbg== 35685 -cHJvYmxlbQ== 35686 -IHRyYWRlcnM= 35687 -IHBlcmlwaGVyYWw= 35688 -IGhvbWVwYWdl 35689 -KGRlcw== 35690 -IFN1Y2Nlc3NmdWxseQ== 35691 -IHJlYm9vdA== 35692 -IGNlbGx1bGFy 35693 -aWlp 35694 -IFBsYW5z 35695 -bGlzdGluZw== 35696 -CWRpcw== 35697 -IFJlZmxlY3Q= 35698 -CWV4Y2VwdA== 35699 -Iiko 35700 -IHRhbWLDqW0= 35701 -VmVoaWNsZQ== 35702 -YWNjaQ== 35703 -bHVzaA== 35704 -T3JkZXJCeQ== 35705 -IGltYWdpbmVk 35706 -Y29kZWM= 35707 -IGRhdGVUaW1l 35708 -TWljcm8= 35709 -IHJlbWluZHM= 35710 -IGZydXN0cmF0aW5n 35711 -IFZpc3Rh 35712 -VHJhaW4= 35713 -INCy0YE= 35714 -IG1vbGVjdWxlcw== 35715 -YXZpbg== 35716 -IGRvdWJsZWQ= 35717 -IGJyYWtl 35718 -IGNhbGNpdW0= 35719 -RnJpZGF5 35720 -IElkZW50aWZpZXI= 35721 -5Z8= 35722 -0YvQuQ== 35723 -IEphaA== 35724 -UmVu 35725 -IHNjYW0= 35726 -IERlbm5pcw== 35727 -LnNldEludA== 35728 -4p8= 35729 -IGFwcGVhbHM= 35730 -IEF1cg== 35731 -IHNwbGFzaA== 35732 -ZXF1YWxzSWdub3JlQ2FzZQ== 35733 -d2h5 35734 -IHNhcA== 35735 -U3VwcG9ydGVk 35736 -IHNlcmE= 35737 -IDoi 35738 -IFZlcm1vbnQ= 35739 -IHJldW4= 35740 -IE5vdmE= 35741 -ICAgICAgICAgICAgCiAgICAgICAgICAgIAo= 35742 -UmF0ZWQ= 35743 -IGxheWluZw== 35744 -IEthcmVu 35745 -LkRlc2VyaWFsaXpl 35746 -IGNvZGVj 35747 -IHRheHBheWVycw== 35748 -OyIpOwo= 35749 -IGNydWRl 35750 -IG1vbGU= 35751 -IHVzZUNvbnRleHQ= 35752 -CXJlc3A= 35753 -IHBrdA== 35754 -IENhbm5vdA== 35755 -UGlwZWxpbmU= 35756 -5YaG 35757 -dGljYWw= 35758 -QWN0aW9uQmFy 35759 -YWVkYQ== 35760 -IENyaXRpY2Fs 35761 -IE5hZA== 35762 -IGJsZWVkaW5n 35763 -IGxsdm0= 35764 -L2N1c3RvbQ== 35765 -IFNpbXBzb24= 35766 -U3k= 35767 -aXRhYmx5 35768 -IFN1bW1pdA== 35769 -KCkpKS4= 35770 -RUxMT1c= 35771 -JCcs 35772 -TWV0 35773 -SW52b2ljZQ== 35774 -b2xpc3Q= 35775 -IHNwaW5l 35776 -YXV0aWZ1bA== 35777 -cGFpZA== 35778 -IGxvY2tlcg== 35779 -X2FybQ== 35780 -XCI+PA== 35781 -IHRyYWplY3Rvcnk= 35782 -X3Jpbmc= 35783 -IGh5ZHJvZ2Vu 35784 -dHJvbg== 35785 -IHN0YXR1dGU= 35786 -IGNvbmRpdGlvbmFs 35787 -IHRyYXk= 35788 -LXNjaG9vbA== 35789 -KHdpZGdldA== 35790 -JGNvbmZpZw== 35791 -IHJlcXVlc3Rpbmc= 35792 -LnVpbnQ= 35793 -ZXRvbg== 35794 -YnJpdGllcw== 35795 -T2ZUeXBl 35796 -QURNSU4= 35797 -cHJlZGljdA== 35798 -IGdlZ2Vu 35799 -IEhhcHA= 35800 -T0NVTUVOVA== 35801 -IEFwYXJ0 35802 -IC0tLS0t 35803 -cm9l 35804 -dWlkZQ== 35805 -anVzdGlmeQ== 35806 -IFNxdWFk 35807 -IHByb2Zlcw== 35808 -LmJvdA== 35809 -X2N1cnJlbmN5 35810 -aW5uZW4= 35811 -IE11bWJhaQ== 35812 -IE51bWJlcnM= 35813 -YXZhbmF1Z2g= 35814 -YWduaXR1ZGU= 35815 -4oCcVGhlcmU= 35816 -PWh0dHA= 35817 -54mH 35818 -IHZi 35819 -Kyc8Lw== 35820 -IG9yZ2FuaXppbmc= 35821 -YW5pdW0= 35822 -SW5TZWN0aW9u 35823 -LmFuZA== 35824 -IGV0ZXJuYWw= 35825 -IHNvdWxz 35826 -X09ORQ== 35827 -X25z 35828 -X2Jhc2lj 35829 -IHJldFZhbA== 35830 -LXNoYXBlZA== 35831 -aWZkZWY= 35832 -IE1vemlsbGE= 35833 -IGVpZw== 35834 -Y29tcGxldGVk 35835 -Tm90aWZpY2F0aW9ucw== 35836 -VEVDVA== 35837 -cmllbg== 35838 -Y29vcmRpbmF0ZXM= 35839 -IHByZXRlbmQ= 35840 -cG9uc29yZWQ= 35841 -LnN0ZGVycg== 35842 -IGdhbWVycw== 35843 -IGRlZmVuZGVk 35844 -VG9vbFRpcA== 35845 -dWl0YXI= 35846 -IGZyYW5jYQ== 35847 -IFdvb2Rz 35848 -IGlocmU= 35849 -IHBzZXVkbw== 35850 -IGNyb3dkcw== 35851 -IFNZU1RFTQ== 35852 -bGVj 35853 -LmtlcmFz 35854 -IGNpcmN1bGF0aW9u 35855 -ZWVy 35856 -LmNi 35857 -dXp6eQ== 35858 -7Zg= 35859 -LnJlYWRlcg== 35860 -IHNlcXVlbA== 35861 -U2V2ZXJhbA== 35862 -LnBvcnRhbA== 35863 -LS0tLS0K 35864 -aXN0cmFy 35865 -77u/Ly8= 35866 -UGk= 35867 -IFwiIg== 35868 -IGN1c3RvbXM= 35869 -IGRpc3BsYXlOYW1l 35870 -IG5vdGljZXM= 35871 -IGNhcmI= 35872 -Ll8KCg== 35873 -IHByb2R1Y3Rv 35874 -INGB0Ls= 35875 -IG51bWVyaWNhbA== 35876 -IHVuaW50 35877 -IGNvZGlnbw== 35878 -T3JkaW5hbA== 35879 -U3RyaW5nVXRpbHM= 35880 -IGTDqWM= 35881 -IExhbg== 35882 -IHNob3djYXNl 35883 -IGFyaXRobWV0aWM= 35884 -LXNjcm9sbA== 35885 -X1RFTVBMQVRF 35886 -IFJvdXRlck1vZHVsZQ== 35887 -IFNoYWRlcg== 35888 -INCd 35889 -cG9saWN5 35890 -UGVyZm9ybWFuY2U= 35891 -CWJvcmRlcg== 35892 -KGZpbGVwYXRo 35893 -56m6 35894 -X2VuZXJneQ== 35895 -X0NT 35896 -VGhlaXI= 35897 -LnNwYWNpbmc= 35898 -KGRw 35899 -IExBTkdVQUdF 35900 -IGhpc3RvcmljYWxseQ== 35901 -Ij57eyQ= 35902 -IGlub2Rl 35903 -c2ls 35904 -IGhhY2U= 35905 -IHNldmVyZWx5 35906 -IE92ZXJ2aWV3 35907 -IHNwcmF3 35908 -IGJlYWNoZXM= 35909 -OmxlZnQ= 35910 -t7s= 35911 -KCR7 35912 -IEZJUlNU 35913 -IFNwYQ== 35914 -LWFzcw== 35915 -IGJhaXNl 35916 -IE5PREU= 35917 -IFBpenph 35918 -UGV0 35919 -KHNlcQ== 35920 -XCI+Cg== 35921 -Q3BwTWV0aG9kUG9pbnRlcg== 35922 -IHZw 35923 -IGlh 35924 -X3NlY29uZHM= 35925 -ZW1ldA== 35926 -L2Jsb2I= 35927 -X1RIUkVTSA== 35928 -Li4uDQo= 35929 -RGVzdA== 35930 -IE5I 35931 -LmRhdGFTb3VyY2U= 35932 -aXTDqXM= 35933 -IEphaw== 35934 -c2VsbA== 35935 -IHdvcmtzaG9wcw== 35936 -PHU= 35937 -IHJpdmFscw== 35938 -IEVYSVNUUw== 35939 -aG9t 35940 -LXRva2Vu 35941 -Y29tcGF0aWJsZQ== 35942 -LkpQYW5lbA== 35943 -IHBoeXNpY2lhbnM= 35944 -YXJ0aW4= 35945 -IGRlc2lyYWJsZQ== 35946 -IGRpc3RpbmN0aXZl 35947 -LkRlcA== 35948 -Z2lk 35949 -aWxpYXRl 35950 -LG1heA== 35951 -IHByZW1pZXJl 35952 -IHFEZWJ1Zw== 35953 -IGFkdm9jYWN5 35954 -IHdoaXNwZXI= 35955 -UHQ= 35956 -IHVuY2hhbmdlZA== 35957 -X3F0eQ== 35958 -6K+35rGC 35959 -U2Vhc29u 35960 -YXZlbGVuZ3Ro 35961 -IFB1bA== 35962 -IGTDrWE= 35963 -J11dXSwK 35964 -YWxpcw== 35965 -KCIm 35966 -Ym9ybw== 35967 -IGJt 35968 -IFJhZGk= 35969 -d3Jvbmc= 35970 -IEdvaW5n 35971 -aW1lVHlwZQ== 35972 -aWpp 35973 -LWZlZWRiYWNr 35974 -IE5hbWVz 35975 -IEJhcHQ= 35976 -IHByb2JhYmxl 35977 -IEV0aGVy 35978 -IFBvbGl0aWNz 35979 -X3Byb3RvY29s 35980 -bGluaW5n 35981 -U2F0 35982 -IGNvcnJlbA== 35983 -LlByaW1hcnk= 35984 -KG51bGxhYmxl 35985 -UklPUklUWQ== 35986 -IGNvbG9yaW5n 35987 -IHV0aWxpemluZw== 35988 -ZGFz 35989 -IGV4cG9ydGVk 35990 -IGNhcnJpZXJz 35991 -Q29udg== 35992 -LmVkaXRvcg== 35993 -acOz 35994 -KGhhbmRsZXM= 35995 -IGFwcHJlY2lhdGlvbg== 35996 -LmltcG9ydA== 35997 -IEF1c3RyaWE= 35998 -IFN0cmlw 35999 -aWxpZ2h0 36000 -IGFwcHJvcHJpYXRlbHk= 36001 -IFByZXN0 36002 -IFdpcg== 36003 -IFVJQXBwbGljYXRpb24= 36004 -YWxjaGVteQ== 36005 -IE1vYg== 36006 -IERldGVybWlu 36007 -ZXJndXNvbg== 36008 -cmVnaXN0ZXJlZA== 36009 -X2NvbnZlcnQ= 36010 -IFZsYWRpbWly 36011 -LlNob3dEaWFsb2c= 36012 -cmVmbGVjdA== 36013 -IHNob29r 36014 -IGFzc3VyZQ== 36015 -IE9mdGVu 36016 -IGNpdmlsaXphdGlvbg== 36017 -IHZvY2FidWxhcnk= 36018 -Zm9yZWdyb3VuZA== 36019 -IFNjb3Bl 36020 -IHVud2FudGVk 36021 -YWN0aW5n 36022 -IChbXQ== 36023 -IG1hcmtpbmc= 36024 -Lm9yaWdpbmFs 36025 -IE1PVkU= 36026 -IHNwb3J0aW5n 36027 -Y2VwdGlvbnM= 36028 -TlNOdW1iZXI= 36029 -U2l6ZXM= 36030 -IHByb3ZpbmNpYWw= 36031 -X1RyYW5z 36032 -IHByb2JsZW1hdGlj 36033 -ZGlnaXQ= 36034 -IEVtbWE= 36035 -bG9ja3M= 36036 -IENyZXc= 36037 -aWJh 36038 -Jyk6 36039 -aXNoYQ== 36040 -IG1hbW0= 36041 -IG9jY3VyZWQ= 36042 -d2Nz 36043 -KHJ1bGU= 36044 -IG1lcmNoYW5kaXNl 36045 -ZXNwZWNpYWxseQ== 36046 -IFR3aW4= 36047 -IG5hbWluZw== 36048 -IHNsb2c= 36049 -IGltcHJvdmVz 36050 -IGFkaGVy 36051 -OnRleHQ= 36052 -LmhhZG9vcA== 36053 -X0hUVFA= 36054 -LnRvTGlzdA== 36055 -LmRpc2FibGVk 36056 -IGxlbnNlcw== 36057 -LmluaQ== 36058 -IFJhcmU= 36059 -IFVidW50dQ== 36060 -IHNjcmFt 36061 -b2xhdGlvbg== 36062 -dGl0dWxv 36063 -RXZlcnl0aGluZw== 36064 -IG5vZGRlZA== 36065 -aWNodGln 36066 -X2NvbnN0YW50 36067 -emM= 36068 -bGlmdA== 36069 -IE5vdGlmeQ== 36070 -b25kbw== 36071 -IElORg== 36072 -KCIr 36073 -IEtheg== 36074 -IGRyZWFk 36075 -Lm1hcHBlcg== 36076 -bGV1cg== 36077 -IENvbWV5 36078 -IE5C 36079 -aWNlcnM= 36080 -LlB1c2g= 36081 -IEhhY2s= 36082 -IEJyYXppbGlhbg== 36083 -X3Byb2Q= 36084 -IC8vCgo= 36085 -IGJpY3ljbGU= 36086 -IHVuYXZhaWxhYmxl 36087 -IGFkb2xlc2NlbnQ= 36088 -Ymxr 36089 -IG1pdGln 36090 -X2JsdWU= 36091 -7Jg= 36092 -ZmFkZUlu 36093 -IFV0aWxpdGllcw== 36094 -IE1O 36095 -O2s= 36096 -PHN0eWxl 36097 -LXN0YXR1cw== 36098 -aW5kbw== 36099 -IGlubmluZ3M= 36100 -IGdq 36101 -IHx8PQ== 36102 -LmV1 36103 -Ok51bWJlcg== 36104 -IGN1aXNpbmU= 36105 -IFVSTHM= 36106 -aWVr 36107 -IHdpcmVz 36108 -CXBz 36109 -aWVn 36110 -Lm1r 36111 -c29hcA== 36112 -IHNvbWV0aW1l 36113 -IHN0YXA= 36114 -X3Nlcmllcw== 36115 -LlRhcmdldA== 36116 -5ro= 36117 -LmRlc3RpbmF0aW9u 36118 -T1VOVEVS 36119 -UmFpc2Vz 36120 -JkE= 36121 -IHNtYXJ0cGhvbmVz 36122 -TklFbnY= 36123 -LnNkaw== 36124 -IGhlbGljb3B0ZXI= 36125 -IGltcGU= 36126 -IEJpcnRo 36127 -QVU= 36128 -YnJlYWRjcnVtYnM= 36129 -Y29vcmRz 36130 -IGV4cGxvcmVk 36131 -IGxvZA== 36132 -IElw 36133 -Z2FibGU= 36134 -aWFuZQ== 36135 -IGFydGlmYWN0cw== 36136 -Qm94TGF5b3V0 36137 -2KfYsQ== 36138 -bGlzdGVuZXI= 36139 -LmNhcnQ= 36140 -IEh1ZmY= 36141 -IEhpbmR1 36142 -IERhdGFUeXBlcw== 36143 -IERydXBhbA== 36144 -SUdOT1JF 36145 -IG9mZnNldHM= 36146 -IFJUQw== 36147 -LWxvZ2lu 36148 -5q4= 36149 -IFFPYmplY3Q= 36150 -IHByb3NlY3V0b3I= 36151 -Um9jaw== 36152 -X2NoYXQ= 36153 -V2F5 36154 -7LI= 36155 -IG5lZ2xpZw== 36156 -IGR1ZGU= 36157 -Ozw= 36158 -IGRlbGVnYXRlcw== 36159 -X2ZhaWxlZA== 36160 -L2Rldg== 36161 -L3dvcms= 36162 -KE5ldw== 36163 -ZXRhYmxl 36164 -KCki 36165 -KEljb25z 36166 -IHBvcms= 36167 -IE1vZGVsQW5kVmlldw== 36168 -IFZJUA== 36169 -IEtvcg== 36170 -bWl4 36171 -IG94aWQ= 36172 -IFNDUkVFTg== 36173 -IEZvdXJ0aA== 36174 -LyIsCg== 36175 -IHRlZQ== 36176 -IFN0ZXZlbnM= 36177 -dGlja3M= 36178 -IHBsZWRnZQ== 36179 -aWJib24= 36180 -IExvYW4= 36181 -IG5lbw== 36182 -bnVtcHk= 36183 -IFNoYXJlZFByZWZlcmVuY2Vz 36184 -LW9yaWVudGVk 36185 -IExvZ2dlckZhY3Rvcnk= 36186 -IEdyYXBoUUw= 36187 -emVuaWE= 36188 -Il8= 36189 -V29tZW4= 36190 -LmNhc3Q= 36191 -IGRlbGliZXJhdGVseQ== 36192 -K2I= 36193 -IEFybg== 36194 -Zm9udFNpemU= 36195 -IG1hemU= 36196 -IGJsYW1lZA== 36197 -Lm1hcw== 36198 -fSkNCg== 36199 -ZWxlcmlr 36200 -IHNjYW5uaW5n 36201 -IFdvcmtzaG9w 36202 -IGZpbmRlbg== 36203 -IGNhdXQ= 36204 -VUlGb250 36205 -KHJldHVybg== 36206 -YWxpbg== 36207 -Y2FzdGxl 36208 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 36209 -IGluY2VudGl2ZQ== 36210 -b3BhdGg= 36211 -YmxvYg== 36212 -IGNpZ2FyZXR0ZQ== 36213 -IGZlcnRpbA== 36214 -Ki8KCgo= 36215 -IFNoYXI= 36216 -CiAgICAgIAo= 36217 -IHVuY2VydGFpbg== 36218 -IFN0b24= 36219 -T3BlcmF0aW9ucw== 36220 -IFNwZW5jZXI= 36221 -IGRlZmlu 36222 -IFNvbG8= 36223 -b25lc3Q= 36224 -t7vliqA= 36225 -IHVvbW8= 36226 -R2l2ZQ== 36227 -IGRlbnRybw== 36228 -O3BhZGRpbmc= 36229 -ZW50YWk= 36230 -IENhcnM= 36231 -IGVudGh1c2lhc20= 36232 -IE9wZXJhdGluZw== 36233 -U2tpcA== 36234 -cGFyYXRpb24= 36235 -IHByb3RlY3Rz 36236 -IHJldmVy 36237 -ZGc= 36238 -IENpbmNpbm5hdGk= 36239 -IGNvbnNlY3RldHVy 36240 -IG11c3M= 36241 -ZW1wbG95ZWQ= 36242 -YXVzZXM= 36243 -aW5rbGU= 36244 -LlZhbHVlcw== 36245 -o7w= 36246 -bG92 36247 -X1dBUk4= 36248 -IGJvb2ttYXJr 36249 -IEFwb2xsbw== 36250 -LmF4aXM= 36251 -IG3DqXQ= 36252 -IG9wZW5lcg== 36253 -IHR1bW9y 36254 -ZGFu 36255 -IGVsZW1lbnRhcnk= 36256 -IHNraXBwZWQ= 36257 -IEtlcg== 36258 -YXNpYQ== 36259 -X3Jlc3A= 36260 -IGRlbW9s 36261 -IENhbmFkaWFucw== 36262 -IHRhc3Rlcw== 36263 -VUludGVnZXI= 36264 -ICckew== 36265 -LmF3cw== 36266 -Uk9JRA== 36267 -cmlhbnM= 36268 -TVE= 36269 -b3JkYWJsZQ== 36270 -IGNvdXNpbg== 36271 -UHJvcGFnYXRpb24= 36272 -KFNlc3Npb24= 36273 -cGhhbHQ= 36274 -VUxE 36275 -IFNjYWxhcg== 36276 -IGJsb29keQ== 36277 -IOCm 36278 -Lm1hc2s= 36279 -LHE= 36280 -IFVuaXRz 36281 -IGNlbnRyZXM= 36282 -IFByaW0= 36283 -Ll0KCg== 36284 -IFNoYXc= 36285 -UHJvbQ== 36286 -IFRob3VnaHQ= 36287 -Q2hlY2tlcg== 36288 -X291dHB1dHM= 36289 -KGNoYW4= 36290 -RUlOVkFM 36291 -IGJvYg== 36292 -X2NtcA== 36293 -UGVk 36294 -IG1hdHJpY2Vz 36295 -IHZyb3V3ZW4= 36296 -IGdlbnVpbmVseQ== 36297 -aGlnaGxpZ2h0 36298 -KGRpc3BsYXk= 36299 -KSE9 36300 -IGRlbGljYXRl 36301 -IEx1dGhlcg== 36302 -IE1pbGVz 36303 -IHVzZXJJRA== 36304 -JT0= 36305 -YXRldXJz 36306 -X0JVRg== 36307 -LS0tLS0tLQo= 36308 -aW1pdGl2ZXM= 36309 -IHNoZWx2ZXM= 36310 -c2xvdw== 36311 -X2luZm9ybWF0aW9u 36312 -TEVH 36313 -V3I= 36314 -LmZvcm1z 36315 -Y2VsYW5k 36316 -L3Vu 36317 -OiY= 36318 -LuKAmQoK 36319 -PSIl 36320 -IHByb3N0 36321 -IGZvbnRzaXpl 36322 -dWNpw7Nu 36323 -Z2V0aWM= 36324 -YW10 36325 -PSIu 36326 -RGVjb3I= 36327 -QnJpdA== 36328 -ICIiKS4= 36329 -IGZvdW5kaW5n 36330 -LkZpbGVOYW1l 36331 -IFRpZXI= 36332 -IGRpc2Nsb3Nl 36333 -w6Ft 36334 -LnN5bg== 36335 -LlZpZXdIb2xkZXI= 36336 -bGljYW50 36337 -X3N0YWdl 36338 -TW9uZGF5 36339 -IGRlc2VyaWFsaXpl 36340 -dGFsaw== 36341 -IHRyYWRpdGlvbmFsbHk= 36342 -5oCB 36343 -2K4= 36344 -TEVY 36345 -IGVo 36346 -CVJPTQ== 36347 -IHt9KQo= 36348 -UXVlc3Rpb25z 36349 -bmNweQ== 36350 -IGZpeGluZw== 36351 -0LrRgw== 36352 -X0tleQ== 36353 -Ong= 36354 -IFNUUklORw== 36355 -INGE0LDQuQ== 36356 -CWxlZnQ= 36357 -IEJlbmNo 36358 -ZWxsaWo= 36359 -VVJSRUQ= 36360 -IERpYWdyYW0= 36361 -fWNhdGNo 36362 -L3RpbWU= 36363 -IE1pc3Npbmc= 36364 -ZGJuYW1l 36365 -IHNvcmU= 36366 -IFdhbHQ= 36367 -dWdnaW5n 36368 -cmVwcmVzZW50 36369 -IEdT 36370 -bmV5cw== 36371 -CXBhZ2U= 36372 -IHZvbGNhbg== 36373 -KGJ0bg== 36374 -IGV4Y2VlZHM= 36375 -IGVyZw== 36376 -IHBpbG90cw== 36377 -IFNlZA== 36378 -ZXJzaW9ucw== 36379 -IHBhdHJvbg== 36380 -UlY= 36381 -L3RvcA== 36382 -LmFzc2V0 36383 -X2Nyb3Nz 36384 -LkVkaXRvcg== 36385 -LnRi 36386 -IHdlbGNvbWluZw== 36387 -U0NSRUVO 36388 -KWZpbmRWaWV3QnlJZA== 36389 -Q29kZXI= 36390 -PElBY3Rpb25SZXN1bHQ= 36391 -X1FVRVVF 36392 -4YM= 36393 -IGhlaWdodHM= 36394 -UmVxdWVzdHM= 36395 -IHN5bWJvbGlj 36396 -DQ0KDQ0K 36397 -IGNvdXBvbnM= 36398 -LWZpdmU= 36399 -IERlc2t0b3A= 36400 -IG1pc21hdGNo 36401 -ICdfJw== 36402 -X0RJVg== 36403 -QVNPTg== 36404 -LnRyYW5zcG9zZQ== 36405 -KG1hc2s= 36406 -IENlbHQ= 36407 -LkhhbmQ= 36408 -YXR1 36409 -asSZ 36410 -IHt9KTsK 36411 -TWlzcw== 36412 -IHByaW1h 36413 -bXVuZA== 36414 -b2x2 36415 -IFByZXR0eQ== 36416 -IHJlYmVs 36417 -IEZE 36418 -YXN0aWNhbGx5 36419 -T0xU 36420 -LWF4aXM= 36421 -dXhl 36422 -IGVpbmZhY2g= 36423 -IENoZW1pY2Fs 36424 -X3NlZw== 36425 -bGVldGNvZGU= 36426 -bG9wZQ== 36427 -X29yaWc= 36428 -ICAJCQ== 36429 -KERvdWJsZQ== 36430 -IFBheVBhbA== 36431 -LkJhY2tncm91bmRJbWFnZQ== 36432 -IGhvbWVtYWRl 36433 -Liku 36434 -KHBhcnNlcg== 36435 -YXRybw== 36436 -YWNjb3JkaW9u 36437 -RGVmaW5l 36438 -IOyeiA== 36439 -IEFVVE8= 36440 -LnN1bW1hcnk= 36441 -c2NhbGFy 36442 -IEhvb2Q= 36443 -cXVpbg== 36444 -X2Rlcg== 36445 -IEdlc2No 36446 -LmNvbXB1dGU= 36447 -RmVlZGJhY2s= 36448 -IHBoYXJtYWM= 36449 -IMWfaQ== 36450 -IGdsb3Nz 36451 -IEZJTFRFUg== 36452 -SU5TVEFOQ0U= 36453 -IGthbA== 36454 -LlBM 36455 -X0ZSRUU= 36456 -R3JhZGU= 36457 -IOKZ 36458 -Lm1ldHJpY3M= 36459 -IGNhZ2U= 36460 -Llh0cmFHcmlk 36461 -X2Rz 36462 -emln 36463 -aW50ZXJvcFJlcXVpcmVEZWZhdWx0 36464 -LnJlbW92ZUNsYXNz 36465 -PT09PT09PT09PT09PQ== 36466 -IG1hc3RlcnM= 36467 -U3RhdGVFeGNlcHRpb24= 36468 -aWxsZXJ5 36469 -IEJyYWR5 36470 -IGxpbmluZw== 36471 -X2Nz 36472 -aW5zdWxh 36473 -IH06 36474 -W3Bvc2l0aW9u 36475 -IFJ4 36476 -IEJZVEU= 36477 -IFN0cmlrZQ== 36478 -INCa 36479 -IENsdXN0ZXI= 36480 -LmRvd25sb2Fk 36481 -QWxsb3dlZA== 36482 -IGFtZW5pdGllcw== 36483 -IG9uVGFw 36484 -ZnVsV2lkZ2V0 36485 -IHN0cmVuZ3Rocw== 36486 -dHdlZXQ= 36487 -IGFzY2VuZGluZw== 36488 -IGRpc2Nsb3NlZA== 36489 -Z3Jhdg== 36490 -ZGlzdHJpY3Q= 36491 -KTw8 36492 -KSwi 36493 -KGRlZnVu 36494 -X3w= 36495 -IGdhemU= 36496 -0LDRjw== 36497 -IGZvcnR5 36498 -PT09PT09PT09PT0= 36499 -U2NpZW5jZQ== 36500 -c2VtYmxlcg== 36501 -CWJvZHk= 36502 -X3RyYW5zZmVy 36503 -IGxvbmd0aW1l 36504 -IGNvbXBsaWNhdGlvbnM= 36505 -IGJvb3Ro 36506 -VkVSUg== 36507 -IHlpZWxkcw== 36508 -IG5hdmlnYXRvcg== 36509 -OjpfKCc= 36510 -RUNUT1I= 36511 -X0NvbmZpZw== 36512 -IGxhc3RlZA== 36513 -dXNhbA== 36514 -55m75b2V 36515 -IGdsb3Zlcw== 36516 -IGJlbGx5 36517 -U2FsZXM= 36518 -KE1ldGhvZA== 36519 -KG1lbWJlcg== 36520 -IFJlZWQ= 36521 -cGFzc2Vk 36522 -U2lnbklu 36523 -LG51bQ== 36524 -VUxPTkc= 36525 -IExFRw== 36526 -bmVscw== 36527 -IG1lbnRvcg== 36528 -KHJj 36529 -IE9idmlvdXNseQ== 36530 -Lmlm 36531 -IEZyZWRlcg== 36532 -SEVBRA== 36533 -QGF1dGhvcg== 36534 -Q29uZGl0aW9ucw== 36535 -IGdhcmRlbnM= 36536 -IFJpcA== 36537 -KHVzZXJz 36538 -IE9rYXk= 36539 -IHdyZXN0bGluZw== 36540 -aW1lc3RvbmU= 36541 -IENlcnRpZmllZA== 36542 -IHZlcmRpY3Q= 36543 -YWlkYQ== 36544 -LmlubmVyVGV4dA== 36545 -aWNhc3Q= 36546 -CWF0 36547 -IHByZXN1bWFibHk= 36548 -IEZVTg== 36549 -YWplcw== 36550 -0Jc= 36551 -PiIsCg== 36552 -X1Bpbg== 36553 -dWVzZQ== 36554 -IG92ZXJyaWRlcw== 36555 -X3JlYWR5 36556 -QWR2YW5jZWQ= 36557 -IG9waQ== 36558 -LWNhcnQ= 36559 -KCIvIiw= 36560 -IERlYg== 36561 -Q1JZ 36562 -IFZlcnRpY2Fs 36563 -IE9WRVI= 36564 -IENvcnBvcmF0ZQ== 36565 -ICIiOw== 36566 -IHN0ZXBwaW5n 36567 -ZWo= 36568 -IGFjY3VzYXRpb25z 36569 -IG9yYXo= 36570 -X3RhaWw= 36571 -IGluZHVjZWQ= 36572 -IGVsYXN0aWM= 36573 -IGJsb3du 36574 -LC8v 36575 -IGJhY2tncm91bmRz 36576 -4oCZdW5l 36577 -LXNkaw== 36578 -IHNldEludGVydmFs 36579 -IGluY2VudGl2ZXM= 36580 -IHZlZ2V0YWJsZQ== 36581 -X09u 36582 -ZXhwYW5kZWQ= 36583 -cGl4 36584 -X3NoYWRlcg== 36585 -IFNQRFg= 36586 -QGV4YW1wbGU= 36587 -IFdyYXBwZXI= 36588 -Llplcm8= 36589 -UG9zaXRpdmU= 36590 -IHNwaW5uZXI= 36591 -IGludmVudGVk 36592 -IEdhdGVz 36593 -0L7RgtC+0YA= 36594 -IGNvbXBhcmlzb25z 36595 -6Lc= 36596 -LnByaW1hcnk= 36597 -ZGF0YVByb3ZpZGVy 36598 -YWRkaXRpb25hbA== 36599 -CW9wdGlvbnM= 36600 -c25hcHNob3Q= 36601 -LnNldEhvcml6b250YWw= 36602 -ICJ7fQ== 36603 -IEZpc2hlcg== 36604 -aGFsdGVu 36605 -PFR5cGU= 36606 -IG1heExlbmd0aA== 36607 -IE10 36608 -IOqwgA== 36609 -LmpldGJyYWlucw== 36610 -IGlkZW50aWZpZXM= 36611 -IGZsb3dpbmc= 36612 -IERpc2N1c3Npb24= 36613 -YXRzYnk= 36614 -IHNjaHc= 36615 -dWdodHk= 36616 -IHJpdmVycw== 36617 -LnVuaXF1ZQ== 36618 -X1BIWQ== 36619 -ZWRyYWw= 36620 -KGxs 36621 -IGNzcmY= 36622 -cHBlcnM= 36623 -w7xs 36624 -IEVzcGVjaWFsbHk= 36625 -cG9ydGVk 36626 -IEhhcnJpc29u 36627 -KioqKioqKi8K 36628 -VGV4dENvbG9y 36629 -7Iq1 36630 -d2lyZQ== 36631 -IHN0YXR1c0NvZGU= 36632 -IEZpbmlzaA== 36633 -Y2VuY2U= 36634 -IE1jQ2Fpbg== 36635 -IFdvcg== 36636 -KGF3YWl0 36637 -ICktPg== 36638 -IFJlZ2lzdGVyZWQ= 36639 -SU5FRA== 36640 -a2Fs 36641 -cGFyaXNvbg== 36642 -IG9iamV0bw== 36643 -Vmk= 36644 -bWFuZGE= 36645 -IHJlbmV3ZWQ= 36646 -IFNvZg== 36647 -ZXNzZWw= 36648 -Lm5kYXJyYXk= 36649 -IGNyYXA= 36650 -566h 36651 -LmFic3BhdGg= 36652 -KHVw 36653 -IGNsZWFyYW5jZQ== 36654 -IFRX 36655 -X0NPUFk= 36656 -ICAgICAgICAgICAgCQ== 36657 -IGZvcmVzdHM= 36658 -IGFyZ3VhYmx5 36659 -IEFTUw== 36660 -aGV5 36661 -YW1lbA== 36662 -X2ZvcmU= 36663 -IFNvdXRoZWFzdA== 36664 -IGFidXNlZA== 36665 -IHByYWN0aWNpbmc= 36666 -YWtlZGlycw== 36667 -5Li7 36668 -X3Jlc291cmNlcw== 36669 -IHBvbmQ= 36670 -LkZpeGVk 36671 -TGFzdEVycm9y 36672 -IFBzeWNob2xvZ3k= 36673 -ICIvLw== 36674 -ITo= 36675 -UmV1c2FibGU= 36676 -IG1lbnNhamU= 36677 -IHJvc3B5 36678 -IGJvdXI= 36679 -IHZhcmlldGllcw== 36680 -IGVtcGF0aA== 36681 -KCh7 36682 -X29yZw== 36683 -IE1lcw== 36684 -IE1hZ2VudG8= 36685 -SVNUT1JZ 36686 -VW5sZXNz 36687 -IGhq 36688 -IER1dHk= 36689 -SnVu 36690 -LHNpemU= 36691 -IHBhaW50aW5ncw== 36692 -IGRpc3BlbnM= 36693 -ZGFydA== 36694 -IGJlaGF2aW9yYWw= 36695 -IHJwYw== 36696 -Y2FsY3VsYXRl 36697 -ZnJ1aXQ= 36698 -X21t 36699 -CXB0aHJlYWQ= 36700 -TWF4TGVuZ3Ro 36701 -IGN1cnJlbmNpZXM= 36702 -X2NhcGFjaXR5 36703 -IE96 36704 -IGZpcmVhcm0= 36705 -IGNvZWZmaWNpZW50 36706 -IGJhbmtydXB0Y3k= 36707 -d2FydA== 36708 -IGZhdGlndWU= 36709 -QVZB 36710 -IGVzcGE= 36711 -X3Bj 36712 -IFF1b3Rlcw== 36713 -X0xJR0hU 36714 -IFRpY2tldHM= 36715 -IHJlbGF0ZXM= 36716 -IHB1Ymxpc2hlcnM= 36717 -IHVubG9ja2Vk 36718 -IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 36719 -IEludGVycnVwdGVkRXhjZXB0aW9u 36720 -IG91dGxvb2s= 36721 -cm4= 36722 -IHJlYmVscw== 36723 -V3JpdHRlbg== 36724 -IGFzaWFu 36725 -b3R0bw== 36726 -IAkJCQk= 36727 -X2dwdQ== 36728 -VHh0 36729 -LkltYWdlVmlldw== 36730 -IHN1aXM= 36731 -X3RhYmxlcw== 36732 -LlJlY3ljbGVyVmlldw== 36733 -IHdoYXRzb2V2ZXI= 36734 -6IE= 36735 -XSsrOwo= 36736 -YXNzZXJ0VHJ1ZQ== 36737 -X3ZlcmlmeQ== 36738 -IFJpdmVycw== 36739 -IF1b 36740 -SmV0 36741 -aWRpYW4= 36742 -U2libGluZw== 36743 -IGdlbnJlcw== 36744 -LkFjY2Vzcw== 36745 -T1BT 36746 -IHRyaXZpYWw= 36747 -4Liq 36748 -YWxlbg== 36749 -0LLQtdC0 36750 -IFN3b3Jk 36751 -IHNjcnV0aW55 36752 -KGNi 36753 -IGNvbW1lcmNl 36754 -IGd1YXJhbnRlZXM= 36755 -X2Fkdg== 36756 -IExFVA== 36757 -cmVjaW8= 36758 -IGhpbGFy 36759 -IGJhY2t5YXJk 36760 -44CP 36761 -IGlsbHVzdHJhdGVk 36762 -L3ZlbmRvcg== 36763 -LlV0aWw= 36764 -IHdvdw== 36765 -TE9Z 36766 -IE1hcnNoYWw= 36767 -Ij4nLiQ= 36768 -IEJhaw== 36769 -IG1vZGlmaWVycw== 36770 -ZGljdGlvbmFyeQ== 36771 -IFN0cmU= 36772 -bXVsdGlwbGU= 36773 -IikpLA== 36774 -IENvcnQ= 36775 -J10iKS4= 36776 -KGFkbWlu 36777 -IENyZWF0b3I= 36778 -SW50ZXJuZXQ= 36779 -KG1z 36780 -bG9neQ== 36781 -REVDTEFSRQ== 36782 -IE1hcmN1cw== 36783 -PDw8PA== 36784 -44Gg 36785 -X215 36786 -KGluc3Q= 36787 -IHNjaWVuY2Vz 36788 -TkRFUg== 36789 -LmVudGVy 36790 -IGl0dQ== 36791 -IGJlaGF2ZQ== 36792 -UGFu 36793 -b21iaWVz 36794 -PSc8 36795 -JykpOw0K 36796 -IE1FTlU= 36797 -IFdvcmtlcnM= 36798 -Lk5vRXJyb3I= 36799 -IGJpbmRpbmdz 36800 -IGRpc2FiaWxpdGllcw== 36801 -e1w= 36802 -IE11bmljaXA= 36803 -IGNvcmVz 36804 -dXJwbGU= 36805 -IE5va2lh 36806 -dXNpb25z 36807 -IEZpdG5lc3M= 36808 -LmhhbmRsZUNoYW5nZQ== 36809 -IGphdmFzY3JpcHQ= 36810 -7JqU 36811 -KGRlYw== 36812 -IHBhY2tpbmc= 36813 -LWRlcGVuZA== 36814 -IHRyYW5zY3JpcHQ= 36815 -emVyb3M= 36816 -X2FsZXJ0 36817 -PyIsCg== 36818 -bGlicw== 36819 -sdC+0YI= 36820 -IHwKCg== 36821 -dHJhaW5lZA== 36822 -IEdlbnQ= 36823 -IFJhYg== 36824 -eHA= 36825 -X2NvbmZpZ3VyYXRpb24= 36826 -5aSp 36827 -X2FjY2VwdA== 36828 -LnJlY3ljbGVydmlldw== 36829 -OnVybA== 36830 -IE11aGFtbWFk 36831 -IHByaXZpbGVnZXM= 36832 -X2Jhbms= 36833 -dWt1 36834 -d2FsbGV0 36835 -IFJPT1Q= 36836 -IGVuY3VlbnQ= 36837 -P2ZhbWlseQ== 36838 -CXBvc2l0aW9u 36839 -IGNn 36840 -IHByZWNpcA== 36841 -bWV0aG9kcw== 36842 -X2Zhc3Q= 36843 -aW5jcmVtZW50 36844 -IFRpZ2Vy 36845 -X09DQ1VSUkVE 36846 -cXVpcA== 36847 -IEhBUw== 36848 -X2RvbQ== 36849 -IHdyZWNr 36850 -Ymo= 36851 -IGRlcm4= 36852 -IG9yZ2Fucw== 36853 -LmVudHJpZXM= 36854 -IF8oJw== 36855 -cmFtZW50bw== 36856 -IEphbWll 36857 -IHB1bms= 36858 -SVBQ 36859 -IHByb2dyYW1h 36860 -IGF0dGFpbg== 36861 -IHByb3Zlcw== 36862 -L3NpZ24= 36863 -IGFuc3dlcmluZw== 36864 -IGxhZGRlcg== 36865 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 36866 -IFdhbG1hcnQ= 36867 -IENPTlRFTlQ= 36868 -ZHVjdG9y 36869 -IHZlcmJhbA== 36870 -IFBJRA== 36871 -Y3J5cHRv 36872 -X0NBTExCQUNL 36873 -ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 36874 -IHBvdGVudA== 36875 -IHNob3J0cw== 36876 -LlVyaQ== 36877 -LnVuaWZvcm0= 36878 -O2JvcmRlcg== 36879 -IFdlcg== 36880 -IGhlcmVpbg== 36881 -bGxh 36882 -IElocg== 36883 -UGl4bWFw 36884 -bGl0ZXJhbA== 36885 -ISkKCg== 36886 -Z2VuZXJpYw== 36887 -cnVzdA== 36888 -X3NjcmlwdHM= 36889 -b3N0bw== 36890 -aXR1cw== 36891 -IENvYWxpdGlvbg== 36892 -IHJlbW90 36893 -ZGVwbG95 36894 -IEVhZ2xl 36895 -44CB44CM 36896 -IGltcG9ydGFudGU= 36897 -CW9iamVjdA== 36898 -IHNlYXNvbmFs 36899 -bmVq 36900 -YWlkdQ== 36901 -QmluZFZpZXc= 36902 -IFNpZXJyYQ== 36903 -LWJn 36904 -IG1ha2VTdHlsZXM= 36905 -W29mZnNldA== 36906 -R2FtZXM= 36907 -IGhvcm1vbmU= 36908 -QVJJTw== 36909 -aGVhZHM= 36910 -KHNlbGVjdA== 36911 -IFN0YXJ0ZWQ= 36912 -QHBhcmFt 36913 -X2RlY2w= 36914 -X2Jsb2c= 36915 -IGHDsW8= 36916 -XEFwaQ== 36917 -IE1pbHdhdWtlZQ== 36918 -UHJvdmlk 36919 -QW5pbWF0ZWQ= 36920 -IGNvb2xlcg== 36921 -IFNlZWQ= 36922 -LkVkaXQ= 36923 -z4Q= 36924 -IFRha2luZw== 36925 -IGJvcmRlckNvbG9y 36926 -LWZvdW5kZXI= 36927 -LkxvZ2dlckZhY3Rvcnk= 36928 -ICIiCgo= 36929 -QUxU 36930 -IExhdGU= 36931 -RURJQVRF 36932 -ICk7CgoK 36933 -YWZh 36934 -IGNhbmNlbGxhdGlvbg== 36935 -QXRvbQ== 36936 -IEJpcm1pbmdoYW0= 36937 -ZW1wcmVzYQ== 36938 -SEVNQQ== 36939 -YXNjYWw= 36940 -IHVwc2lkZQ== 36941 -LlZlcnNpb24= 36942 -IEZvbGRlcg== 36943 -IEVpZ2h0 36944 -IFZpbnRhZ2U= 36945 -IEFwcERlbGVnYXRl 36946 -IFByZXZlbnRpb24= 36947 -LnNlcGFyYXRvcg== 36948 -U1RN 36949 -KHJvb20= 36950 -Z2VuZXJhdG9y 36951 -IGNhdHRsZQ== 36952 -CVo= 36953 -IFBhcnRpY2xl 36954 -J307Cg== 36955 -IG5laWdoYm91cnM= 36956 -IFN0YXRlbGVzcw== 36957 -IGFsdGl0dWRl 36958 -IHNhaW50 36959 -0L7QsdCw0LI= 36960 -IGNvbnZpbmM= 36961 -IENvbnRlbnRz 36962 -IGpldW5l 36963 -KHRz 36964 -U2VyaWFsaXphdGlvbg== 36965 -KGNvbGxlY3Rpb24= 36966 -IEpheno= 36967 -IERvZA== 36968 -IFJvY2g= 36969 -YWNpbw== 36970 -Y29tbWVuZGVk 36971 -REVGSU5F 36972 -Lm9ubG9hZA== 36973 -IHNwZWNpYWx0eQ== 36974 -UExBQ0U= 36975 -X01PVkU= 36976 -IGFjY291bnRhYmxl 36977 -UmV1dGVycw== 36978 -IGZpY2tlbg== 36979 -IGRlcHI= 36980 -V293 36981 -Vm9pZA== 36982 -LnNwYWNl 36983 -4LiX 36984 -IHRx 36985 -IFBldHM= 36986 -PCQ= 36987 -KEN1cnJlbnQ= 36988 -YmVycmllcw== 36989 -cGxhbmF0aW9u 36990 -IGxpc3RPZg== 36991 -IFRodQ== 36992 -IFBSSU5U 36993 -IG1pc21v 36994 -IGRvaQ== 36995 -Y2hr 36996 -IFVuaWNvZGU= 36997 -KHJvbGU= 36998 -IHZpcmdpbg== 36999 -PFBvaW50 37000 -X1JFU1BPTlNF 37001 -LWhvdXNl 37002 -IFZlbmV6dWVsYQ== 37003 -RU1BSUw= 37004 -IHDDumI= 37005 -X2V4aXN0 37006 -QmFsbA== 37007 -LkNM 37008 -cmVmZXJlbmNlcw== 37009 -IEJlYXV0aWZ1bFNvdXA= 37010 -CUV4cGVjdA== 37011 -VEhJUw== 37012 -0YPQtA== 37013 -YmFuZQ== 37014 -IHRlbXBvcmFs 37015 -RVJJQw== 37016 -ZXRhcw== 37017 -IHJlZnJlc2hpbmc= 37018 -IHNlY3VsYXI= 37019 -QHN5bnRoZXNpemU= 37020 -YWNjdXI= 37021 -IG5lbGxh 37022 -IFNPTA== 37023 -LnBpcGU= 37024 -Q2hhbm5lbHM= 37025 -6Ieq 37026 -IGluc2VydGlvbg== 37027 -4buL 37028 -ZWxpYQ== 37029 -IGFkanVzdGFibGU= 37030 -Q2FuYWRh 37031 -IElURU0= 37032 -IGN1cnZlcw== 37033 -IENoZWFw 37034 -bGV0aW5n 37035 -IG9wdGltaXN0aWM= 37036 -YWxsbw== 37037 -IHBvbGl0aWNpYW4= 37038 -X2Rvd25sb2Fk 37039 -PWVkZ2U= 37040 -T1JUSA== 37041 -IG1vZGVsbw== 37042 -YXJ0bw== 37043 -LnJvdGF0ZQ== 37044 -IHNlbGVuaXVt 37045 -5oiR 37046 -X2FsaWFz 37047 -IHJlbm93bmVk 37048 -Licu 37049 -IGN6eQ== 37050 -IGFsbGVz 37051 -LkNvbXBpbGVy 37052 -IEJhc3M= 37053 -Q29ubmVjdG9y 37054 -LlJvbGU= 37055 -TElOSw== 37056 -IGNyaXRlcmlvbg== 37057 -bGVtZXRyeQ== 37058 -U3VjY2Vzc2Z1bGx5 37059 -L3BuZw== 37060 -IGV5ZWI= 37061 -YXNwYmVycnk= 37062 -KGdy 37063 -IGRhbmdlcnM= 37064 -IGNvcnJlY3RlZA== 37065 -IGdsb3c= 37066 -IGVsYWJvcmF0ZQ== 37067 -IEJlYXJz 37068 -YXdhaQ== 37069 -PSInKw== 37070 -IHByb21vdGlvbnM= 37071 -IG1hdGhlbWF0aWNhbA== 37072 -ICJg 37073 -X0dlbmVyaWNDbGFzcw== 37074 -IENoZWY= 37075 -LlNvcnQ= 37076 -dGFibGVOYW1l 37077 -UklD 37078 -IHZvbHVudGFyeQ== 37079 -IEJsYWRl 37080 -LWVsZWN0 37081 -IENvbWJhdA== 37082 -IEFiaWxpdHk= 37083 -IGFiZG9t 37084 -IGR1Y2s= 37085 -VG1w 37086 -5YWo 37087 -IGVyYXNl 37088 -LlBo 37089 -IERlZmF1bHRz 37090 -cGFydG1lbnQ= 37091 -X1VTQg== 37092 -w6p0ZQ== 37093 -Oyc= 37094 -IHBhZHM= 37095 -IE9iYW1hY2FyZQ== 37096 -LlRvdGFs 37097 -IGRpdmVydA== 37098 -IGNyaWNrZXQ= 37099 -IHJlY3JlYXRpb25hbA== 37100 -KHJlZA== 37101 -IENsZQ== 37102 -UlU= 37103 -IG1pc3Rha2Vu 37104 -IE1vbnRhbmE= 37105 -IHN0cml2ZQ== 37106 -X3NsaWRlcg== 37107 -IFBsYXN0aWM= 37108 -IGRlY29yYXRlZA== 37109 -IFZQ 37110 -bGljbw== 37111 -CWZhbHNl 37112 -IHByZWZz 37113 -KFwi 37114 -X2ZhbHNl 37115 -aWVuZG8= 37116 -IEAk 37117 -QnVja2V0 37118 -YWN0aWNhbA== 37119 -IFpoYW5n 37120 -LmNvbHM= 37121 -LkJpbmRpbmc= 37122 -IHdheA== 37123 -X1NUT1JBR0U= 37124 -IGxhd24= 37125 -IHJm 37126 -LlNjZW5l 37127 -IENhbGN1bGF0b3I= 37128 -LmRlc2lnbg== 37129 -IHJlc2ls 37130 -0LvQtdC8 37131 -RW1wbG95 37132 -IFByaWNlcw== 37133 -IFBXTQ== 37134 -YWdp 37135 -LmV2YWx1YXRl 37136 -CXBhcmFt 37137 -IGJyYXNz 37138 -YmJlbg== 37139 -IGluZmxhbW1hdGlvbg== 37140 -dWxsaXZhbg== 37141 -IGFubm90 37142 -IHBI 37143 -aWFtZXRlcg== 37144 -IEJUQw== 37145 -KGJveA== 37146 -U3Rvcnlib2FyZA== 37147 -IGNsYXk= 37148 -LmFzc2VydFJhaXNlcw== 37149 -fHN0cmluZw== 37150 -LkFwcGx5 37151 -IG1hdGNoZXI= 37152 -dW5kZWQ= 37153 -IHNhdGlzZnlpbmc= 37154 -IOyglQ== 37155 -UmVuZGVyaW5n 37156 -X2FwcHJv 37157 -aW5kcm9tZQ== 37158 -QU5FTA== 37159 -X2ZpeA== 37160 -YnJ1c2g= 37161 -Lk1hdGNo 37162 -IHNtaWxpbmc= 37163 -b25hdXQ= 37164 -U3VuZGF5 37165 -IGRlbGV0aW9u 37166 -IGVuY291cmFnZXM= 37167 -UHVsbA== 37168 -IHJldmVuZ2U= 37169 -IHF1YXJyeQ== 37170 -dHJhZGU= 37171 -IGNhYmxlcw== 37172 -KGRlbHRh 37173 -aXRlc3BhY2U= 37174 -IGZo 37175 -LmJ1bmlmdQ== 37176 -IHZpZWw= 37177 -X0lOQ0xVREVE 37178 -IFRhaWw= 37179 -YWRhcg== 37180 -b2Zz 37181 -IG1ldGFscw== 37182 -Z29t 37183 -X21ldGhvZHM= 37184 -IG5q 37185 -LlN0ZA== 37186 -KHdpbg== 37187 -JCgn 37188 -IHR1cnRsZQ== 37189 -dXJvbg== 37190 -IGVucm9sbGVk 37191 -IEh6 37192 -IEJveERlY29yYXRpb24= 37193 -IHBvbnQ= 37194 -cmVsYXRpb25zaGlw 37195 -Qmk= 37196 -s7s= 37197 -IG1hc2N1bA== 37198 -IHNoYWRlcw== 37199 -IHZy 37200 -IExvZ2lj 37201 -IGFpbg== 37202 -IERJU1Q= 37203 -IGNvbGxhcg== 37204 -InByb2ZpbGU= 37205 -R2VuZXJhdGVkVmFsdWU= 37206 -IFBvc3NpYmxl 37207 -IGVpbmVz 37208 -g4E= 37209 -LnRpbWVvdXQ= 37210 -IEVj 37211 -IGplcnNleQ== 37212 -LkRvdWJsZQ== 37213 -IHF1YWxpZnlpbmc= 37214 -dm9y 37215 -Q1JFRU4= 37216 -X0FwcA== 37217 -X3JlY3Y= 37218 -IGFsaWVucw== 37219 -SXRz 37220 -RXNj 37221 -aWF0b3I= 37222 -IEVjbGlwc2U= 37223 -IGdo 37224 -VmljdA== 37225 -CWh0bWw= 37226 -dG9v 37227 -LmNvbnN0 37228 -IGFudGVyaW9y 37229 -IFd1 37230 -KGtleXM= 37231 -IHVsdHI= 37232 -X3BvbHk= 37233 -IFRhcA== 37234 -IEJ1ZA== 37235 -QVdT 37236 -IGNyYXNoZXM= 37237 -X3RvdA== 37238 -Q29udGlu 37239 -LWhhbmRlZA== 37240 -YWx0aG91Z2g= 37241 -4Lia 37242 -aWZpY2VudA== 37243 -IGRldmU= 37244 -dXRvcnk= 37245 -IFdvcnRo 37246 -X01T 37247 -IGZsb29yaW5n 37248 -IHNlbGxlcnM= 37249 -IFRoYW5rc2dpdmluZw== 37250 -IHBuZw== 37251 -IHZhbG9yZXM= 37252 -IHNsZWV2ZQ== 37253 -IGZpbGxl 37254 -0JA= 37255 -IGFwcG9pbnRtZW50cw== 37256 -IHZpbQ== 37257 -VXNlckluZm8= 37258 -Qk9PU1Q= 37259 -IHBvc2Vk 37260 -aW5pdGlhbGl6ZWQ= 37261 -LnByb2R1Y3Rz 37262 -IExlYWRlcnNoaXA= 37263 -bWFudWVs 37264 -JyU= 37265 -ZW1hcmtz 37266 -UGVyY2VudGFnZQ== 37267 -KGRpc3Q= 37268 -LmF2YXRhcg== 37269 -KGhPYmplY3Q= 37270 -5LuK 37271 -X2lmZg== 37272 -aWNvbmU= 37273 -Oyk= 37274 -X25pbA== 37275 -IGFib2w= 37276 -0LXRgdGC 37277 -IHZlbnVlcw== 37278 -LkNvbnZlcnQ= 37279 -IScpCg== 37280 -LkJpdG1hcA== 37281 -c2tpbg== 37282 -X0NPTFVNTg== 37283 -UmV2 37284 -R1JFU1M= 37285 -Z293 37286 -IHdpc2hlZA== 37287 -dHJhY3Rz 37288 -LmFzc2VydEZhbHNl 37289 -IHNjcmVlbnNob3Q= 37290 -IGZvaXM= 37291 -Q29tYg== 37292 -TGluZVdpZHRo 37293 -IEdyYWI= 37294 -IGludGVuc2l2ZQ== 37295 -CXNo 37296 -Kyk= 37297 -LmZpcnN0TmFtZQ== 37298 -X1BST0NFU1M= 37299 -IHRpbHQ= 37300 -aXRvcmVk 37301 -LkxPRw== 37302 -IGJhaw== 37303 -IGludGVudGlvbmFsbHk= 37304 -LnBsYXllcnM= 37305 -KGNhbnZhcw== 37306 -KSkpDQo= 37307 -LlByb3ZpZGVy 37308 -X1BVQkxJQw== 37309 -VGFsaw== 37310 -IExpdg== 37311 -Y2hlZHVsZXJz 37312 -IGxj 37313 -YWRpYw== 37314 -ZmVhdHVyZWQ= 37315 -LnJlc291cmNlcw== 37316 -RnVsbE5hbWU= 37317 -IG1lYW53aGlsZQ== 37318 -QnVmZmVycw== 37319 -IHJlc29sdmVy 37320 -IFNBUA== 37321 -X1RF 37322 -R05V 37323 -IEZvcm1zTW9kdWxl 37324 -X3do 37325 -IFN3ZQ== 37326 -LndpZGdldHM= 37327 -IGNhYmluZXRz 37328 -IHN1c2NlcHQ= 37329 -IEJvdHQ= 37330 -YWN0aXZleA== 37331 -YXZhcg== 37332 -YW50aWNz 37333 -ICI9Ig== 37334 -X2t3YXJncw== 37335 -IGdhbWVPYmplY3Q= 37336 -IEFuZ2xl 37337 -Lkl0ZXI= 37338 -bWFyc2g= 37339 -IEJpcnRoZGF5 37340 -IENNUw== 37341 -cmVxdWVzdHM= 37342 -IFBlYXJs 37343 -X0VPTA== 37344 -IGxpbnV4 37345 -KG9yZw== 37346 -X01vdXNl 37347 -LmNvbnN0cnVjdG9y 37348 -IHpk 37349 -IGtpY2tz 37350 -YXJ0aXNhbg== 37351 -IGVheA== 37352 -S24= 37353 -cG9uZ2U= 37354 -IEZpbmxhbmQ= 37355 -IG1ldHJlcw== 37356 -IEFzc2Vzc21lbnQ= 37357 -cGFydG5lcg== 37358 -L3ByZQ== 37359 -IScsCg== 37360 -W0ludA== 37361 -IG9zbG8= 37362 -ZGF0ZXBpY2tlcg== 37363 -L1N0cmluZw== 37364 -b3BsYXk= 37365 -IEhlYnJldw== 37366 -LGRvdWJsZQ== 37367 -IHRyYWJhbA== 37368 -KyJc 37369 -CUVJRg== 37370 -L3RleHQ= 37371 -X0ZJUlNU 37372 -IFBldGU= 37373 -IGVnbw== 37374 -IGV4dHJhcw== 37375 -UERP 37376 -IHJlZ3VsYXRl 37377 -IFFXaWRnZXQ= 37378 -c3Rz 37379 -IFNob3dz 37380 -IE5IUw== 37381 -LmNvdXJzZQ== 37382 -cHRocmVhZA== 37383 -IEZ1ZWw= 37384 -LnRpbWVz 37385 -IMKw 37386 -IHN0cmlkZXM= 37387 -KCQoJyM= 37388 -KHdvcmRz 37389 -IHJoeXRobQ== 37390 -IHNwb250 37391 -IHNlbnNhdGlvbg== 37392 -IHNwaWtl 37393 -Q2xvc2luZw== 37394 -6aG16Z2i 37395 -TnVtZXJpYw== 37396 -IGJyZWF0aGU= 37397 -IGZpbmFsZQ== 37398 -X0ZBQ1Q= 37399 -aW5pb24= 37400 -IGNoaWxs 37401 -IGZvcm1hbGx5 37402 -QU5HRUQ= 37403 -ICc6Jw== 37404 -INC/0YDQuA== 37405 -YXE= 37406 -IEZhYnJpYw== 37407 -KGxhdA== 37408 -IFByaW5jaXBhbA== 37409 -IGVycm8= 37410 -b2NhbGU= 37411 -Tm9t 37412 -IGZvc3Q= 37413 -X0NVU1RPTQ== 37414 -LmludGVsbGlq 37415 -ZXJ0b29scw== 37416 -IGNsYXNzZQ== 37417 -YWRpZW50cw== 37418 -IGZ1bmRyYWlzaW5n 37419 -RU5F 37420 -X09QVElPTlM= 37421 -X29i 37422 -Ly99Cg== 37423 -IHByb3RlY3Rpb25z 37424 -LnNlZWQ= 37425 -TlY= 37426 -dGVybWluYWw= 37427 -Ozs7 37428 -UHJlZGljYXRl 37429 -IOy2 37430 -IGJvbWJpbmc= 37431 -R0Y= 37432 -IGNoZXc= 37433 -KSkpLg== 37434 -cXVhbGlmaWVk 37435 -XT17 37436 -bGlzdGVu 37437 -Q0VOVA== 37438 -ZGlnZXN0 37439 -RWFzdA== 37440 -IGRpdmVy 37441 -IGVuZHBvaW50cw== 37442 -IGVl 37443 -IGNvbGxlYWd1ZQ== 37444 -IGRpc3NlcnRhdGlvbg== 37445 -X2NvbW1pdA== 37446 -X0RBVA== 37447 -LnJj 37448 -IGJyZWFzdHM= 37449 -IFJ1Zw== 37450 -IFBpbA== 37451 -Q29udHJhY3Rz 37452 -IEJyeWFu 37453 -V2ViVmlldw== 37454 -IGNvbmNlbnRyYXRl 37455 -IElubmVy 37456 -ICd8 37457 -c3Rkb3V0 37458 -X1N1Yg== 37459 -Pi0tPgo= 37460 -Vm9s 37461 -IFNTRA== 37462 -KSkpLA== 37463 -Lk9wdGlvbmFs 37464 -IG51cnNlcw== 37465 -IG9yYg== 37466 -X3Bl 37467 -KTsNCg0KDQo= 37468 -cGxhY2Vk 37469 -ZXNzZXI= 37470 -IHRoZXJhcGV1dGlj 37471 -IHdoaXRlc3BhY2U= 37472 -IGFzdG9u 37473 -U3VjY2Vzc2Z1bA== 37474 -IHByYWlzZWQ= 37475 -IFdlcw== 37476 -IGVpZ2h0aA== 37477 -aXJhbA== 37478 -IHZyb3V3 37479 -IGZhY3Rpb24= 37480 -X2JpYXM= 37481 -IHdpdGNo 37482 -IG5wYw== 37483 -KHNi 37484 -IFJvZHJpZw== 37485 -X2JpZw== 37486 -RGVwZW5kZW5jeQ== 37487 -IEFicmFoYW0= 37488 -YXJkaQ== 37489 -Q0FS 37490 -bm9z 37491 -IGFidW5kYW5jZQ== 37492 -IG51dHJpZW50cw== 37493 -aW5zdGVpbg== 37494 -LlZlcnQ= 37495 -IElTUw== 37496 -PFU= 37497 -IHN1bXM= 37498 -X2hpc3Q= 37499 -IGZhcm1lcg== 37500 -IEFicg== 37501 -U2hvdA== 37502 -IEJhZFJlcXVlc3Q= 37503 -IGhhc3M= 37504 -IFJhaWxz 37505 -IGFmZmlsaWF0ZWQ= 37506 -5p2l 37507 -IGVyZg== 37508 -SU5G 37509 -IFZpZXdIb2xkZXI= 37510 -bWluaQ== 37511 -IFJvdGg= 37512 -IGZhaXRoZnVs 37513 -IFBoaWxsaXBz 37514 -QU5ET00= 37515 -XS5b 37516 -X1BBWQ== 37517 -IEFyY3RpYw== 37518 -ZmFrZXI= 37519 -RGlnaXQ= 37520 -TWFsZQ== 37521 -c3RkZXJy 37522 -c2V5cw== 37523 -IMWh 37524 -X3JlbW90ZQ== 37525 -bGlxdWU= 37526 -IGluZGVm 37527 -IEluZHVzdHJpZXM= 37528 -aXRyYQ== 37529 -X3BhaXJz 37530 -PGlvc3RyZWFt 37531 -IHNhbGFyaWVz 37532 -aWtlbg== 37533 -LkZyYW1l 37534 -UExJQw== 37535 -X1NQRUM= 37536 -IE1lZGl0ZXJy 37537 -IHN5c3RlbWF0aWM= 37538 -IGludGVycm9n 37539 -SWNvbkJ1dHRvbg== 37540 -c2Vh 37541 -aW50cm8= 37542 -IElzc3Vlcw== 37543 -ZW5jcnlwdGVk 37544 -IGludGVybmF0aW9uYWxseQ== 37545 -IHNucHJpbnRm 37546 -IHBhc3Rh 37547 -IEJyYWRsZXk= 37548 -X1N0YXR1cw== 37549 -QUxL 37550 -X1BBRA== 37551 -LmxhdW5jaA== 37552 -PHNlbGVjdA== 37553 -IGhhcmRlc3Q= 37554 -IHBoeQ== 37555 -ICgoKg== 37556 -LXNsaWRl 37557 -IE5vYm9keQ== 37558 -U3U= 37559 -IGFzw60= 37560 -Y2xvc2VzdA== 37561 -X2luaXRpYWxpemVy 37562 -IHN1cHBvcnRlcg== 37563 -LWdlbg== 37564 -IHRhbGVz 37565 -IGNvcnA= 37566 -X2Z1 37567 -c2F0 37568 -bmVpZ2hib3I= 37569 -Lk1pZ3JhdGlvbnM= 37570 -IGFsZ3Vu 37571 -IHNpbm9u 37572 -LlNwZWM= 37573 -PywK 37574 -LkdM 37575 -bWFsZQ== 37576 -IG1vbml0b3Jz 37577 -eWxhbg== 37578 -LUxpY2Vuc2U= 37579 -Lm1hdGNoZXM= 37580 -IEFCUw== 37581 -IE1hc3Q= 37582 -IFdhbGxldA== 37583 -KCQoIiM= 37584 -RGlydHk= 37585 -IGNvcGU= 37586 -IGludGVycG9sYXRpb24= 37587 -b3VzZWQ= 37588 -IEpldHM= 37589 -LkZMQUc= 37590 -LkNhbmNlbA== 37591 -LkV2ZW50cw== 37592 -bmV2ZXI= 37593 -IE1Ieg== 37594 -PkQ= 37595 -IHNlcnZsZXQ= 37596 -YmFzdGlhbg== 37597 -ID4m 37598 -U0lE 37599 -X2Nsaw== 37600 -IGRpdmlzaW9ucw== 37601 -fScsCg== 37602 -IGRpbGRv 37603 -IHBhcmFkZQ== 37604 -bWFqb3I= 37605 -IGFib2FyZA== 37606 -Oysr 37607 -IGZ1c2lvbg== 37608 -In0seyI= 37609 -IERpYWxvZ1Jlc3VsdA== 37610 -CWFycg== 37611 -LWVt 37612 -X25y 37613 -KGhhbmRsZXI= 37614 -Lk5FVA== 37615 -Llh0cmFSZXBvcnRz 37616 -IFNoYWg= 37617 -IEJyaWVm 37618 -LSw= 37619 -IHByZWNpbw== 37620 -CQkJICAgICAg 37621 -IHRhbnQ= 37622 -IEdyYW5kZQ== 37623 -L3htbA== 37624 -X0lDT04= 37625 -IFJldHJv 37626 -dW5xdWU= 37627 -IG5hZw== 37628 -dG9GaXhlZA== 37629 -WEw= 37630 -IGRlY2xhcmluZw== 37631 -IENvbmNyZXRl 37632 -IEFtYXppbmc= 37633 -CXByaW50aw== 37634 -IGRlYmF0ZXM= 37635 -REFURUQ= 37636 -IGFlc3RoZXRpYw== 37637 -ZW1ldGVyeQ== 37638 -Um91dGluZ01vZHVsZQ== 37639 -IE5hc2h2aWxsZQ== 37640 -V0FZUw== 37641 -IHdvbGY= 37642 -IG9ic2VydmVycw== 37643 -T1RB 37644 -YW5zb24= 37645 -IGVh 37646 -IGdyZWVuaG91c2U= 37647 -k43kvZw= 37648 -IHN0YWly 37649 -IGltbWlncmFudA== 37650 -X2FwcGx5 37651 -cGVhcmU= 37652 -IEJsb29tYmVyZw== 37653 -X1BMQVlFUg== 37654 -UmVzcA== 37655 -5q2j 37656 -Q2hvb3Nlcg== 37657 -IElDb2xsZWN0aW9u 37658 -UGV0ZXI= 37659 -RXJybw== 37660 -LmRldGVjdENoYW5nZXM= 37661 -TWFwcw== 37662 -IHNxdWVlemU= 37663 -IEhvbWVz 37664 -d2VnaWFu 37665 -IGZvcm1hdHRpbmc= 37666 -IG5lZ290aWF0ZQ== 37667 -dWxk 37668 -IE5lcA== 37669 -IFFC 37670 -IGVjb25vbWllcw== 37671 -ICovLA== 37672 -IHJlZHVuZA== 37673 -IEFiZXI= 37674 -LklzTnVsbE9yV2hpdGVTcGFjZQ== 37675 -eWNsZWQ= 37676 -ICAgICAgICAgICAgICAgICAgCg== 37677 -X1No 37678 -IHNrZXB0 37679 -IHJlY3JlYXRlZA== 37680 -IGdldFR5cGU= 37681 -IG1hcmdpbnM= 37682 -IGNvbG9uaWFs 37683 -Y2hhcnRz 37684 -Ly9A 37685 -IHByb2Nlc3NvcnM= 37686 -6K+0 37687 -YmF0aXM= 37688 -5oSP 37689 -YXRvcmlv 37690 -bWVudGlvbmVk 37691 -UGF0aWVudA== 37692 -IHByZXk= 37693 -Q2hlY2tib3g= 37694 -X3hwYXRo 37695 -LnNraXA= 37696 -IE1vcm1vbg== 37697 -IE1lbW9yeVN0cmVhbQ== 37698 -Q1JFTUVOVA== 37699 -IGt1 37700 -bWVsZA== 37701 -XERhdGE= 37702 -IEtlcm5lbA== 37703 -aWx0cg== 37704 -6YCB 37705 -KHByb2ZpbGU= 37706 -Q2FyYm9u 37707 -Uk9MRQ== 37708 -KHBs 37709 -XSoo 37710 -Lm1lbW9yeQ== 37711 -IG1lZGFs 37712 -IGFkdmlzb3I= 37713 -aXTDpHQ= 37714 -IGhkcg== 37715 -aWVydW5n 37716 -IFByb3ZpZGVz 37717 -KGFscGhh 37718 -IHRlZW5hZ2Vycw== 37719 -LXBhcnNlcg== 37720 -LkxhdExuZw== 37721 -XSgpCg== 37722 -IGZlbG9ueQ== 37723 -CQkJCgkJCQo= 37724 -Qk9PSw== 37725 -IHNsYXNo 37726 -IGNsZWFyZml4 37727 -IFByb3BoZXQ= 37728 -5a65 37729 -cmlnaHRuZXNz 37730 -LWZp 37731 -LmtpbmQ= 37732 -ZXJ0b24= 37733 -Smlt 37734 -IG1hbmlwdWxhdGU= 37735 -IHdvcmtzaGVldA== 37736 -b2xpbg== 37737 -c3RhcnM= 37738 -IGFydGlmYWN0 37739 -X0VNUFRZ 37740 -CW1haW4= 37741 -LS0tLS0tLS0tLS0tLTwv 37742 -L3N0YXRpYw== 37743 -SVRJRVM= 37744 -IENvdW5zZWw= 37745 -IFdD 37746 -IEJMQUNL 37747 -LXN5c3RlbQ== 37748 -IFRyaXBsZQ== 37749 -LmJ0 37750 -c29mdHdhcmU= 37751 -XScpLg== 37752 -SW5qZWN0aW9u 37753 -X25vdGlmeQ== 37754 -IGZpZnRlZW4= 37755 -IGFtYmFzc2Fkb3I= 37756 -YnJlYWtpbmc= 37757 -VVJJQ29tcG9uZW50 37758 -IFByb3Rlc3Q= 37759 -LlJlc2V0 37760 -IE1Qcw== 37761 -dnJv 37762 -LmdldFN0YXR1cw== 37763 -X21vcmU= 37764 -Y3Vw 37765 -IEtlbnlh 37766 -5bey 37767 -IGFtbXVuaXRpb24= 37768 -15XX 37769 -IERhc2g= 37770 -IHVuZGVyZ28= 37771 -IGJ1ZGR5 37772 -0YLQvtGA 37773 -ZXRpY2FsbHk= 37774 -X091dA== 37775 -IEJyb2Fkd2F5 37776 -qow= 37777 -IEZpdHo= 37778 -IHN0cmlwcGVk 37779 -LWNhY2hl 37780 -IHVtYg== 37781 -IGFub20= 37782 -IHNpYmxpbmdz 37783 -b2N1bWVudGVk 37784 -SW50ZXJydXB0ZWRFeGNlcHRpb24= 37785 -IHBlbmc= 37786 -bHN0 37787 -X0FMSUdO 37788 -LWNhcA== 37789 -UkQ= 37790 -Y2VsbHM= 37791 -IE1vdG9ycw== 37792 -IHRyYW5zbGF0aW9ucw== 37793 -dXN0ZXJpbmc= 37794 -6Zo= 37795 -IGxlYWtz 37796 -ZmlsZVBhdGg= 37797 -IG91dGdvaW5n 37798 -X2VuZHBvaW50 37799 -X0dM 37800 -LmxpZmVyYXk= 37801 -cmljaHQ= 37802 -IE9wZW5HTA== 37803 -LmpwYQ== 37804 -IGFmZmVjdGlvbg== 37805 -Zmx1eA== 37806 -IGdseQ== 37807 -IGJ1ZA== 37808 -Pic7 37809 -IGV4cHJlc3Npbmc= 37810 -IElR 37811 -IEZhY3Q= 37812 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK 37813 -X21hc3M= 37814 -KSk6 37815 -IGNvbmRvbQ== 37816 -IGNyZWF0ZVN0YXRl 37817 -b21ldG93bg== 37818 -IGlycg== 37819 -ID4o 37820 -PkI= 37821 -aXRlcmF0aW9u 37822 -44Oq 37823 -IHNoaXJ0cw== 37824 -b3VudHk= 37825 -LT4k 37826 -X1NJR04= 37827 -IERhbGU= 37828 -IGpq 37829 -RWFzeQ== 37830 -RnJl 37831 -IE55 37832 -IGNobG9y 37833 -bWF0Y2hlZA== 37834 -IEdlcm0= 37835 -LVVB 37836 -IE5hdGhhbg== 37837 -ZWR1Y2F0aW9u 37838 -LXlhcmQ= 37839 -LWNoZQ== 37840 -aG91c2Vz 37841 -cml0aW9uYWw= 37842 -IHByb3hpbWl0eQ== 37843 -IGRpZXNlbQ== 37844 -4bqtcA== 37845 -IGRyb3VnaHQ= 37846 -LmF1ZGlv 37847 -IExlbw== 37848 -IGZhdm9yYWJsZQ== 37849 -aW5jaA== 37850 -IERhdw== 37851 -cmlibHk= 37852 -X3N0dWRlbnQ= 37853 -aWRhYmxl 37854 -T1ZF 37855 -IGxhY2tz 37856 -b3VuY2luZw== 37857 -LmJ1c2luZXNz 37858 -IHJlb3Blbg== 37859 -bWF5YmU= 37860 -X0dMT0JBTA== 37861 -IGRyZXNzZXM= 37862 -IEVkd2FyZHM= 37863 -ZW5zaWJsZQ== 37864 -IEhhcmR3YXJl 37865 -IEV4Y2VsbGVudA== 37866 -IFRpbWVVbml0 37867 -Q1RJT05T 37868 -IHNjaGVkdWxlcw== 37869 -IHNlZ3Vl 37870 -T3BlbnM= 37871 -YW1tZW4= 37872 -LUlkZW50aWZpZXI= 37873 -IHN0YXJpbmc= 37874 -IGhhcHBpbHk= 37875 -IEhvYg== 37876 -J18= 37877 -ICIpOw== 37878 -YW1lbnRvcw== 37879 -ZXRjaGVk 37880 -IC8+fQo= 37881 -LlVzZXJz 37882 -IGludGVycnVwdGVk 37883 -Q29udGFjdHM= 37884 -IHJlZ2lzdHJv 37885 -aW5idXJnaA== 37886 -Q0hB 37887 -X2ltcA== 37888 -cGhpcw== 37889 -c2F5 37890 -IHJldGFpbGVy 37891 -Lk5PREU= 37892 -L21hcHM= 37893 -X0xBU1Q= 37894 -IENoYXJnZQ== 37895 -X2d1YXJk 37896 -Q29sbGlkZXI= 37897 -IFN0YXRlbGVzc1dpZGdldA== 37898 -IjpbIg== 37899 -KCIuLi8uLi8= 37900 -aW94aWRl 37901 -IFN1bmQ= 37902 -ICcnOw== 37903 -dW5zZXQ= 37904 -YWRkV2lkZ2V0 37905 -0LvRjg== 37906 -ZWxsZXM= 37907 -YWxrZXI= 37908 -QXJj 37909 -IGRlZHVjdA== 37910 -R1VJTGF5b3V0 37911 -IFZpbGxh 37912 -IGZvcmJpZGRlbg== 37913 -X3doZXJl 37914 -IFwv 37915 -IFRpYg== 37916 -X0FY 37917 -XQ0KDQo= 37918 -IEJpcg== 37919 -IGJlbmQ= 37920 -IE1BS0U= 37921 -IE1FVA== 37922 -IGZ1dHVyZXM= 37923 -IHdlaWdodGVk 37924 -IiIiDQo= 37925 -IGF1dGhvcml6ZQ== 37926 -KHByb2dyYW0= 37927 -fSx7Ig== 37928 -IGNvZWZmaWNpZW50cw== 37929 -w6pz 37930 -UGVyUGFnZQ== 37931 -IEJhdGhyb29t 37932 -IFB1Ymxpc2hpbmc= 37933 -R1BM 37934 -IHN1Ym1pc3Npb25z 37935 -IE5VTUJFUg== 37936 -asSF 37937 -IGFkZGl0aW9uYWxseQ== 37938 -ZW1wcmU= 37939 -IFNoZWw= 37940 -b3R5cA== 37941 -U29sdXRpb24= 37942 -IHRodW5kZXI= 37943 -X2Vj 37944 -IAogICAgCg== 37945 -IEZlbGxvdw== 37946 -IGtheQ== 37947 -IG5ld1N0YXRl 37948 -T05UQUw= 37949 -SW1wbGVtZW50YXRpb24= 37950 -Lkxvb2s= 37951 -IGVudHM= 37952 -IGxvcnM= 37953 -IEJJRw== 37954 -ZmFi 37955 -IGF2ZXJhZ2Vk 37956 -IEZlZWRiYWNr 37957 -IFdlbGxz 37958 -IG1hcnRpYWw= 37959 -IGluZHVs 37960 -IENvbW11bmlzdA== 37961 -IEZvcmV4 37962 -IEFncmljdWx0dXJl 37963 -Ils= 37964 -IHF1YXI= 37965 -IEtvbnQ= 37966 -CXZpZXc= 37967 -LkJ5dGVz 37968 -ZGVza3RvcA== 37969 -IE1ha2Vz 37970 -YWtlc3BlYXJl 37971 -Lk51bGxhYmxl 37972 -IHNwb3RsaWdodA== 37973 -VkI= 37974 -b3d5 37975 -KHRvcmNo 37976 -dHJpZGdl 37977 -X2JvdW5kcw== 37978 -IGFwb2xvZ2l6ZQ== 37979 -LmFkZEl0ZW0= 37980 -YW50ZA== 37981 -Kik7Cg== 37982 -LHU= 37983 -KGdlbg== 37984 -57uT 37985 -cmVhdG9y 37986 -IENvcmQ= 37987 -b3VwcGVy 37988 -Lm1ldHJv 37989 -IGV3 37990 -IFdPUkQ= 37991 -LkFmdGVy 37992 -IGRldGFpbmVk 37993 -IEhhbW1lcg== 37994 -ZXhpc3Rpbmc= 37995 -IG9zdA== 37996 -IG1vbnVtZW50 37997 -LWN1c3RvbQ== 37998 -VXNlcklE 37999 -IE5vbQ== 38000 -IHJlamVjdGlvbg== 38001 -KGRpbQ== 38002 -IHNpbmdsZXRvbg== 38003 -CWRpZQ== 38004 -YXJpYW5jZQ== 38005 -cmVwb3J0cw== 38006 -XSE9 38007 -ZWxkYQ== 38008 -IHByZXZhbGVuY2U= 38009 -X3JlZ3M= 38010 -LiIu 38011 -IGZlbWluaXN0 38012 -Q29kZWM= 38013 -ICoqCg== 38014 -KGxhYmVscw== 38015 -X01BUks= 38016 -RkFJTEVE 38017 -IGFkbWluaXN0ZXJlZA== 38018 -V04= 38019 -ICAgICAgICAJCQ== 38020 -IG5vdW4= 38021 -d2ln 38022 -IGdvdHRh 38023 -IHJpZg== 38024 -LWlt 38025 -IFBhdWxv 38026 -IENvbW1hbmRUeXBl 38027 -XSkpCgo= 38028 -LXplcm8= 38029 -VHJhaW5pbmc= 38030 -IGxvcmQ= 38031 -X2FydA== 38032 -cmVkZGl0 38033 -Q2VydA== 38034 -IHBlc28= 38035 -Um90 38036 -IGVuZGFuZ2Vy 38037 -LmRy 38038 -dXNlckluZm8= 38039 -dW50cw== 38040 -bnY= 38041 -IFRyYWlsZXI= 38042 -LWZpcnN0 38043 -KG1ha2U= 38044 -IGJlbmVmaWNp 38045 -LWJsYWNr 38046 -acOf 38047 -IHVuZG91YnRlZGx5 38048 -IG1leA== 38049 -IEFuY2llbnQ= 38050 -KGFz 38051 -IGRlc2NlbnQ= 38052 -UGljaw== 38053 -IHJlcGxpY2E= 38054 -JG9iag== 38055 -w6Rocg== 38056 -IGFycm93cw== 38057 -ZnR5 38058 -IExpYnlh 38059 -dWdh 38060 -Y2hhcmdlZA== 38061 -VHVy 38062 -IGhvbWlj 38063 -aXNzZW4= 38064 -IEZha2U= 38065 -IGJlZXJz 38066 -IHNjYXR0ZXJlZA== 38067 -KFRpbWU= 38068 -VVRJTA== 38069 -IGJ1cmVhdWNy 38070 -L3BsYWlu 38071 -IHN0aWNraW5n 38072 -RkFJTA== 38073 -IENvdmlk 38074 -VGhpcmQ= 38075 -X3ByZXNlbnQ= 38076 -IFBpZXJyZQ== 38077 -IOuq 38078 -IFsuLi5dCgo= 38079 -UHJvYg== 38080 -IFRyYWZmaWM= 38081 -aWNhbw== 38082 -ZG9jdG9y 38083 -ICksCgo= 38084 -VGFicw== 38085 -YWx1 38086 -77ya4oCc 38087 -IGluaGVyZW50 38088 -X05v 38089 -cml0aXM= 38090 -IFByb29m 38091 -LmJhc2VuYW1l 38092 -5Lya 38093 -IGNoaW0= 38094 -IFByb3RlY3RlZA== 38095 -Y3JpdA== 38096 -IHByb25l 38097 -INC60L7QvQ== 38098 -IEhlcm9lcw== 38099 -IGFueGlvdXM= 38100 -IGFub3M= 38101 -IHdlZWtlbmRz 38102 -IHNleHQ= 38103 -IHJlZHVjZXI= 38104 -PVVURg== 38105 -aGFsZg== 38106 -IFNhdw== 38107 -Lm1t 38108 -IG51ZXZh 38109 -LmN1cnJlbnRUYXJnZXQ= 38110 -Lmx1YQ== 38111 -X0VYVEVOU0lPTg== 38112 -CXJlZw== 38113 -IEN0cmw= 38114 -X2FsaWdu 38115 -YWNjZXB0YWJsZQ== 38116 -IHJ1c2hpbmc= 38117 -ZnJhYw== 38118 -IGJvYXN0cw== 38119 -Rml2ZQ== 38120 -wrE= 38121 -IFRlbXBlcmF0dXJl 38122 -Pik6 38123 -IGNoYXJ0ZXI= 38124 -UkVBVEVE 38125 -IHN1YmplY3RlZA== 38126 -IG9wYw== 38127 -aGVhbHRoeQ== 38128 -5L2/55So 38129 -IFNjaWVudGlmaWM= 38130 -IGZyYXU= 38131 -cmlhZ2Vz 38132 -4LiU 38133 -LmludmVudG9yeQ== 38134 -YXRpb25hbGU= 38135 -TWFk 38136 -bWludXRlcw== 38137 -Pj4oKTsK 38138 -IEVudg== 38139 -IHJlY29yZGluZ3M= 38140 -IHN1c3BpY2lvbg== 38141 -c3FsaXRl 38142 -CXJlYWQ= 38143 -44Gm 38144 -IHdvcnJpZXM= 38145 -LnB1dFN0cmluZw== 38146 -IFNoYW5naGFp 38147 -KHVpZA== 38148 -cmVy 38149 -IHbDrWRl 38150 -Iik6 38151 -IG1ldGhvZG9sb2d5 38152 -INC60L7RgtC+0YA= 38153 -Y2Nj 38154 -YXZhZA== 38155 -IGluZHVjdGlvbg== 38156 -CVRocmVhZA== 38157 -LHN0cmluZw== 38158 -4bqhaQ== 38159 -bmVobWVu 38160 -dWl0aW9u 38161 -ICpfXw== 38162 -LmVtZg== 38163 -IOyc 38164 -L3RoZW1lcw== 38165 -IE5pbmU= 38166 -Lk9uZQ== 38167 -IEVtYmVk 38168 -IGZheg== 38169 -dWF0aW9ucw== 38170 -IHByaXZhdGVseQ== 38171 -IGxpbmc= 38172 -W0Y= 38173 -dXNoaQ== 38174 -IGxhdW5jaGVz 38175 -KEtFWQ== 38176 -R01U 38177 -IGFpbWluZw== 38178 -cGF0aWJsZQ== 38179 -IEJpZGVu 38180 -aXc= 38181 -IERlZ3JlZQ== 38182 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 38183 -ICQoJzw= 38184 -w6FyaW9z 38185 -dG9VcHBlckNhc2U= 38186 -7KCc 38187 -IEVVUg== 38188 -IG92ZXJzaWdodA== 38189 -IHRhYmxlc3A= 38190 -VXBkYXRlcw== 38191 -Lm1ha2VkaXJz 38192 -IGh1bWlkaXR5 38193 -L3RlbXBsYXRl 38194 -QWx3YXlz 38195 -KElT 38196 -X2NlcnQ= 38197 -RGln 38198 -IHVuZGVyd2F5 38199 -b3J0b24= 38200 -IEh1cnJpY2FuZQ== 38201 -IHNwZW5kcw== 38202 -IFNlZ21lbnQ= 38203 -IGZsaWVz 38204 -IFRvZ2dsZQ== 38205 -IEx5bmNo 38206 -IHNlbnNlcw== 38207 -IEtvcw== 38208 -c2V0RW5hYmxlZA== 38209 -aXN0aWNhbGx5 38210 -IHRlc3Rlcg== 38211 -IGFkbWluaXN0cmF0b3Jz 38212 -IHRhZ2dlZA== 38213 -0JM= 38214 -IHNob3J0Y3V0 38215 -IFJlc29sdXRpb24= 38216 -IHN1cGVydmlzaW9u 38217 -IEFzaGxleQ== 38218 -VHJhY2tpbmc= 38219 -dWxhdG9yeQ== 38220 -YW5kZWw= 38221 -aXN0ZW4= 38222 -IHVucmU= 38223 -KGRpZmY= 38224 -QU5UUw== 38225 -IHJpZGVy 38226 -IHPEhQ== 38227 -LlNlcmllcw== 38228 -X29yZGVycw== 38229 -T1JJWk9OVEFM 38230 -IHJldGVudGlvbg== 38231 -44CCPC8= 38232 -LlRlc3Rz 38233 -U3lu 38234 -LnBhcnNlRG91Ymxl 38235 -a29kZQ== 38236 -emVudA== 38237 -R2VuZXJhdGlvbg== 38238 -IGFkbWl0cw== 38239 -IExlYWs= 38240 -IGFrYQ== 38241 -Uk9XUw== 38242 -IEFuZ2VsYQ== 38243 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 38244 -IG5vb24= 38245 -IHN0YXJr 38246 -IGRyYWdnZWQ= 38247 -44O844I= 38248 -IHJlY3ljbGVyVmlldw== 38249 -IFNpbGljb24= 38250 -X3N1ZmZpeA== 38251 -Sm9u 38252 -Y29jaw== 38253 -IFByb2JhYmx5 38254 -SW50cm9kdWN0aW9u 38255 -IFRlcnJvcg== 38256 -KFRoaXM= 38257 -IEJhc2ViYWxs 38258 -IGplbnRlcg== 38259 -Y2hlc3RyYQ== 38260 -Lm5hbg== 38261 -PWc= 38262 -IGNsYXJpZnk= 38263 -eWlp 38264 -cm9vdHM= 38265 -IG5vdGVib29r 38266 -IEV4Y2VwdA== 38267 -IHJpc2Vz 38268 -IEJydXNzZWxz 38269 -YXRvcmllcw== 38270 -LlVTRVI= 38271 -cm9zc292ZXI= 38272 -L3VwbG9hZA== 38273 -IEV2ZW50dWFsbHk= 38274 -Q29uc2lkZXI= 38275 -IEJvdW5k 38276 -LmlkZW50aWZpZXI= 38277 -KHVuaXR0ZXN0 38278 -IGluZmVyaW9y 38279 -IGNyYw== 38280 -IGF1dGlzbQ== 38281 -VUlBbGVydA== 38282 -IEthdmFuYXVnaA== 38283 -aW5lbWVudA== 38284 -cXVldWVSZXVzYWJsZQ== 38285 -U2tpbg== 38286 -LmJhY2tlbmQ= 38287 -LmdldFN0YXRl 38288 -dW5kaW5n 38289 -IHN1YmNsYXNz 38290 -IHJlZmluZWQ= 38291 -IGFubm95 38292 -IHJuZA== 38293 -RGlyZWN0b3I= 38294 -IOuC 38295 -YmVjY2E= 38296 -bW9uZ29kYg== 38297 -IENvbW1vbndlYWx0aA== 38298 -QXo= 38299 -IFRoaW5n 38300 -IHJlY29t 38301 -dW5pbmc= 38302 -CWNvbg== 38303 -CSAgICAK 38304 -ZW1pY3M= 38305 -ZWNk 38306 -IGhvcm55 38307 -QVRSSVg= 38308 -IG1pc2xlYWRpbmc= 38309 -IEJldw== 38310 -L25vZGU= 38311 -Y3N0ZGlv 38312 -4Lin 38313 -IGFkZGl0aW9ucw== 38314 -cmly 38315 -X3JlcXVlc3Rz 38316 -IHJlY2hlcmNoZQ== 38317 -c3R1ZGVudHM= 38318 -X3Bvc2l0aW9ucw== 38319 -ZXJ0ZXh0 38320 -IEV2b2x1dGlvbg== 38321 -YW5kZXo= 38322 -IGRpc3R1cmI= 38323 -a2V5dXA= 38324 -IEJ1dGxlcg== 38325 -LnJlYWRsaW5lcw== 38326 -X3N0ZGlv 38327 -IGJlZQ== 38328 -IEFyY2hpdmVz 38329 -IG5ldmVydGhlbGVzcw== 38330 -VVJJVFk= 38331 -IGRyb25lcw== 38332 -dXJpdGllcw== 38333 -IOKYhQ== 38334 -Ij4NCg0K 38335 -IGRpYWdvbmFs 38336 -IENhbmNlbGxhdGlvblRva2Vu 38337 -X0ludGVybmFs 38338 -IHJ1aW4= 38339 -LlF0 38340 -b2NyYXRpYw== 38341 -VGVs 38342 -IEFuc3dlcnM= 38343 -bWF0aWM= 38344 -IHhw 38345 -YXRlbQ== 38346 -X2pvYnM= 38347 -X2FueQ== 38348 -IHNlbmlvcnM= 38349 -IGxhbmRtYXJr 38350 -IFFMaXN0 38351 -IG1hbmV1 38352 -b3RpZnk= 38353 -LyI7Cg== 38354 -L3NlcnZlcg== 38355 -IFBoaWxvc29waA== 38356 -dXRlbmFudA== 38357 -KGlv 38358 -aHo= 38359 -IGF1dGhlbnRpY2F0ZWQ= 38360 -ZHY= 38361 -LUNvbXBhdGlibGU= 38362 -T3JpZ2luYWxseQ== 38363 -LGZ1bmN0aW9u 38364 -44CCDQo= 38365 -IFJlcHJlc2VudGF0aXZl 38366 -YXNpbHk= 38367 -aXJjdWl0 38368 -LmR0 38369 -KG1hdGg= 38370 -Lk1hcnNoYWw= 38371 -Wyw= 38372 -IENpdGllcw== 38373 -X3R1cm4= 38374 -fCkK 38375 -IGNhbnRpZGFk 38376 -YWx0ZXI= 38377 -CXVp 38378 -IE5lYnJhc2th 38379 -IHNraXJ0 38380 -LmJn 38381 -U2hhcmVkUHJlZmVyZW5jZXM= 38382 -KHN0eWxl 38383 -IGdyaWVm 38384 -Z2V3 38385 -IHNhZmVn 38386 -b2xhbmc= 38387 -X2xpc3Rz 38388 -7Js= 38389 -IGdyYW5pdGU= 38390 -IGhvdHRlc3Q= 38391 -LmpkYmM= 38392 -LkN1c3RvbWVy 38393 -IOKJpA== 38394 -IHdhYXI= 38395 -X3NjZW5l 38396 -Kycv 38397 -IEpUZXh0RmllbGQ= 38398 -IHNlYXRpbmc= 38399 -IHdlYXJz 38400 -IGAv 38401 -Q2FzZXM= 38402 -IFlvdXR1YmU= 38403 -xLFt 38404 -IGJhbGNvbg== 38405 -LEc= 38406 -TWV0YURhdGE= 38407 -LXByaWNl 38408 -U0NS 38409 -VW5pdHk= 38410 -IHRydW5r 38411 -PXtgJHs= 38412 -IGVhcnRocXVha2U= 38413 -UGFydGlhbA== 38414 -IHN1YnN0 38415 -IGVsaW1pbg== 38416 -PSInLg== 38417 -Ly8qW0A= 38418 -IHN1cGVydmlzb3I= 38419 -dnJvbGV0 38420 -X2FydGljbGU= 38421 -IHBhbmU= 38422 -Ymlv 38423 -IG1vdG9ycw== 38424 -Tk0= 38425 -RnJhbms= 38426 -IG9uaW9u 38427 -LXdvcmQ= 38428 -SXRlbUNsaWNrTGlzdGVuZXI= 38429 -IGJyaXQ= 38430 -ZW5kZW5jaWVz 38431 -Q29tcHV0ZXI= 38432 -X3J1bm5pbmc= 38433 -KGRheQ== 38434 -LWhl 38435 -KG5hbWVk 38436 -IFNhY2g= 38437 -0L7Rhw== 38438 -Y2FtcGFpZ24= 38439 -LkFic3RyYWN0 38440 -KHdyYXBwZXI= 38441 -LnBheQ== 38442 -IHV3 38443 -R2Vv 38444 -cmFpbHM= 38445 -L3NlbGVjdA== 38446 -aWNodGU= 38447 -c29ucw== 38448 -RVZFTlQ= 38449 -IGFsaW1lbnQ= 38450 -UHJvdmlkZXJz 38451 -QXdhaXQ= 38452 -X0lOVEVSVkFM 38453 -Lm9mZg== 38454 -IGdsdXRlbg== 38455 -X2Nsb3Vk 38456 -IHdlbg== 38457 -LmV4dHJhY3Q= 38458 -CWJ1dHRvbg== 38459 -L01N 38460 -UGFydHk= 38461 -IGRlbW9ncmFwaGlj 38462 -X2Vycm5v 38463 -IGhpa2luZw== 38464 -KCcnKQo= 38465 -IixAIg== 38466 -IHdpdA== 38467 -csOh 38468 -b2xvZ2ll 38469 -IFN0eWxlcw== 38470 -IEJyb3dzZXJNb2R1bGU= 38471 -LlJlcXVlc3RNYXBwaW5n 38472 -aWNhbnM= 38473 -UEFHRQ== 38474 -Y3JlYXRpb24= 38475 -IEZlcmd1c29u 38476 -dWRlZA== 38477 -bnVtYmVycw== 38478 -IEdUSw== 38479 -IHByZXNlbnRhdGlvbnM= 38480 -IEJvYmJ5 38481 -X3NwYW4= 38482 -ZXN0eWxl 38483 -IGlsbGVnYWxseQ== 38484 -YWJlbGE= 38485 -IGJhdHRsZWZpZWxk 38486 -Y2FwYWNpdHk= 38487 -dGVycm9y 38488 -XSIpOwo= 38489 -IHdhcnJpb3I= 38490 -bGVhZGVy 38491 -IERCRw== 38492 -IFJldmVudWU= 38493 -IHZpZ2ls 38494 -IGNvdW50ZXJwYXJ0cw== 38495 -KEVycm9y 38496 -QUNURVI= 38497 -IGhlZWZ0 38498 -IHNlbGVjdGlvbnM= 38499 -emV1Zw== 38500 -dG9t 38501 -LXR3bw== 38502 -LjsK 38503 -X3N0YXRlbWVudA== 38504 -IEFpZA== 38505 -IFZ1bA== 38506 -X3JnYg== 38507 -IHByaXplcw== 38508 -IGVkaXRhYmxl 38509 -CWZvcm0= 38510 -xLFuxLE= 38511 -LmRlY29y 38512 -RGVtbw== 38513 -bGljZXM= 38514 -IGVuY3R5cGU= 38515 -cmF0dWxhdGlvbnM= 38516 -IFJPUw== 38517 -X2NoYXJz 38518 -IEphaHI= 38519 -cGFydGlhbA== 38520 -0YPRgg== 38521 -IFJlY2VpdmU= 38522 -IExhbmRz 38523 -QVBURVI= 38524 -IGNob3BwZWQ= 38525 -Li4i 38526 -IEFuYWx5 38527 -IFVJRA== 38528 -IFJhZGVvbg== 38529 -IEJlZQ== 38530 -IHVubQ== 38531 -Pk0= 38532 -LmZpbmRhbGw= 38533 -VG9rZW5pemVy 38534 -IFdIQVQ= 38535 -IHNq 38536 -RHJhd2luZw== 38537 -RXNz 38538 -T05E 38539 -irY= 38540 -KHBhY2tldA== 38541 -4oCUYnV0 38542 -SW52b2NhdGlvbg== 38543 -IE51Y2xlYXI= 38544 -PzsK 38545 -IGdyYW5kZXM= 38546 -IENyeXB0 38547 -cmVtYXJr 38548 -ICcuLi8uLi8uLi8uLi8= 38549 -IGluYWJpbGl0eQ== 38550 -bWFnaWM= 38551 -Y2F0cw== 38552 -IHNpbXVsYXRl 38553 -OiR7 38554 -aW5mbGF0ZQ== 38555 -IGVuZXI= 38556 -Ok5P 38557 -aXBsZXM= 38558 -IG1lcml0 38559 -IFJhdGVk 38560 -IGdsdWU= 38561 -L2Jsb2c= 38562 -IGdyZW4= 38563 -IHRocmlsbGVk 38564 -LkNI 38565 -dW5jYW4= 38566 -IFBSSU1BUlk= 38567 -IHBlcnNlYw== 38568 -IGZlYXJlZA== 38569 -Lk1JTg== 38570 -IFRoZWF0ZXI= 38571 -6ZI= 38572 -YXRlZ29yaWU= 38573 -5q61 38574 -IGFwcGV0aXRl 38575 -c3F1YXJl 38576 -IEFsZXhhbmQ= 38577 -LlVzZXJJZA== 38578 -X2d0 38579 -X2VudGVy 38580 -IGdyYWR1YXRlcw== 38581 -RnJhZ21lbnRNYW5hZ2Vy 38582 -QXV0aG9yaXpl 38583 -LU5MUw== 38584 -KE15 38585 -IHRyaXVtcGg= 38586 -dXN0aW5n 38587 -X1BBUkFNUw== 38588 -Q2hhcmFjdGVycw== 38589 -KDosOiw= 38590 -X0JVSUxE 38591 -TUh6 38592 -IHdhc2hlZA== 38593 -IHVuY2xl 38594 -U3RldmU= 38595 -YXJkb3du 38596 -PHN0ZGlv 38597 -X3Rlcm1z 38598 -IE1BUg== 38599 -IGhvc2U= 38600 -dWN1cw== 38601 -IENsYWlt 38602 -IFJhbXM= 38603 -IG1vZGVsQnVpbGRlcg== 38604 -IG7DqQ== 38605 -dXNlcklE 38606 -PWpzb24= 38607 -LlJlc3BvbnNlV3JpdGVy 38608 -mOiupA== 38609 -IGdydXBv 38610 -LWl0 38611 -IEtP 38612 -LU1haWw= 38613 -IGNvbmZlcmVuY2Vz 38614 -SUZB 38615 -IEFzc2Fk 38616 -IHByb25vdW5jZWQ= 38617 -IGFuY2VzdG9ycw== 38618 -IFRSQUNF 38619 -IEdlRm9yY2U= 38620 -IHByaXZhdA== 38621 -cGVsbA== 38622 -ZW1vamk= 38623 -INmI 38624 -R2VucmU= 38625 -IGNvbmNlbnRyYXRlZA== 38626 -amFuZw== 38627 -TU9URQ== 38628 -IFpvb20= 38629 -dG9vbGJhcg== 38630 -IHV0dGVybHk= 38631 -IGVuY29tcGFzcw== 38632 -IFNvY2Nlcg== 38633 -IGV1cm9wZQ== 38634 -LWFpcg== 38635 -LmFuaW0= 38636 -X0NUTA== 38637 -aGVyZW50 38638 -cmV4 38639 -aW50ZXJhY3RpdmU= 38640 -44Gn44GZ 38641 -IEthcw== 38642 -IGRlc3BlcmF0ZWx5 38643 -KGFy 38644 -IGJpaw== 38645 -IHRyYXZlcnNl 38646 -ZXVycw== 38647 -UmVjeWNsZXJWaWV3 38648 -IE1hcmdhcmV0 38649 -IGhvcGVmdWw= 38650 -IE1pZw== 38651 -X01FTUJFUg== 38652 -cmVjZWl2ZXI= 38653 -TWF0Y2hlcg== 38654 -ZGVwZW5kZW50 38655 -IGV4Y2VsbGVuY2U= 38656 -0LDQtg== 38657 -TE9T 38658 -QXNwZWN0 38659 -IGFkYWxhaA== 38660 -IEVjb25vbXk= 38661 -dWxvdXNseQ== 38662 -IGV2YWx1YXRpbmc= 38663 -IGRldmlhdGlvbg== 38664 -ZXh0ZXI= 38665 -L2RhdA== 38666 -Q29scw== 38667 -IFBva2Vy 38668 -Ym9hcmRpbmc= 38669 -LkNoaWxkcmVu 38670 -QU5HTEU= 38671 -w68= 38672 -IFlvZ2E= 38673 -IGhhdGVk 38674 -QWRhbQ== 38675 -IEZDQw== 38676 -SU1BTA== 38677 -IGZhaW50 38678 -X0RJU1BMQVk= 38679 -IGV2b2x2ZQ== 38680 -IGZyaWRnZQ== 38681 -IHLDqWc= 38682 -IGVtb3Rpb25hbGx5 38683 -4oCcSWY= 38684 -YXdlaQ== 38685 -ZXJlc2E= 38686 -Jywi 38687 -QkVHSU4= 38688 -IFZBUkNIQVI= 38689 -IHhp 38690 -ZmFjdG9y 38691 -dHo= 38692 -X3BoYXNl 38693 -U0VR 38694 -KHJhbmQ= 38695 -IG1hdGhlbWF0aWNz 38696 -IGNvbnRleHRz 38697 -LWFj 38698 -IEZJRw== 38699 -IENhcHRpb24= 38700 -IFdhaXRGb3I= 38701 -LXdlc3Q= 38702 -IGZpcmVmaWdodA== 38703 -X0xFRA== 38704 -ZWN0aW9ucw== 38705 -CXRocm93cw== 38706 -IFRha2Vz 38707 -b2JyZQ== 38708 -IEF2YXRhcg== 38709 -IElubm92YXRpb24= 38710 -IGNhbGlicmF0aW9u 38711 -OnRoaXM= 38712 -X2VuY29kaW5n 38713 -IGNhbGN1bGF0aW5n 38714 -ICMjIyMjIyMjIyMjIyMjIyM= 38715 -IFByb2dyYW1z 38716 -IEhJR0g= 38717 -LmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGU= 38718 -UG9seWdvbg== 38719 -X0RCRw== 38720 -Il0sDQo= 38721 -0LDQsQ== 38722 -IHNpbWlsYXJpdHk= 38723 -IHByemV6 38724 -IEZpcm0= 38725 -IG1pc3VuZGVy 38726 -IE1vdmluZw== 38727 -IE1PVg== 38728 -IHJlYWN0b3I= 38729 -UmVxdWVzdGVk 38730 -ZXhwZWN0cw== 38731 -IGVyZWN0 38732 -bGljaHQ= 38733 -b3VsZGVy 38734 -SURHRVQ= 38735 -IGRldmls 38736 -IHByb2dyYW1tZXM= 38737 -IENvbW1vbk1vZHVsZQ== 38738 -ICInIg== 38739 -KEF1dGg= 38740 -44CC77yM 38741 -IFN0YXRlZnVsV2lkZ2V0 38742 -6K6h 38743 -L29wZW4= 38744 -aW5hbGx5 38745 -LlJvdW5k 38746 -IFdpc2g= 38747 -IGh1bWFuaXRhcmlhbg== 38748 -QWNjZXNzVG9rZW4= 38749 -IFNPQw== 38750 -IHBva2Vtb24= 38751 -IHZhcG9y 38752 -X2FkZGVk 38753 -CUdldA== 38754 -c3BlbGw= 38755 -IEluaXRpYXRpdmU= 38756 -IEhFTA== 38757 -YWlycm8= 38758 -YmxlZA== 38759 -INCx0Ys= 38760 -IHNlbnNpYmxl 38761 -IEx1YQ== 38762 -fCgK 38763 -IGZpeHR1cmVz 38764 -IG9yZ2FzbQ== 38765 -Q3V0 38766 -dWt0 38767 -Z3Vl 38768 -IGNyZWRpYmlsaXR5 38769 -OmltYWdl 38770 -IENQUA== 38771 -LnNu 38772 -KGRlc2M= 38773 -IFJlaWQ= 38774 -LWRlZ3JlZQ== 38775 -X3NvdW5k 38776 -Q2xvbmU= 38777 -4buZ 38778 -YWtzaQ== 38779 -PiR7 38780 -X2NvbmZpcm1hdGlvbg== 38781 -IHRyb3BoeQ== 38782 -V29ya3M= 38783 -IEVsZWN0cm9uaWNz 38784 -IE1lZGl0ZXJyYW5lYW4= 38785 -X21ldHJpY3M= 38786 -IGFubm91bmNpbmc= 38787 -IERBWQ== 38788 -X3Byb3Rv 38789 -IHBlYXI= 38790 -YmFzZVVybA== 38791 -CQkJCQkJCQkK 38792 -IGNvb3JkaW5hdGlvbg== 38793 -Ok4= 38794 -LmFuaW1hdGU= 38795 -IENvdHRvbg== 38796 -X2hpdA== 38797 -4pw= 38798 -IGpldHp0 38799 -aWZ0ZXI= 38800 -KGZpZWxkcw== 38801 -b3dubG9hZA== 38802 -aWZpY2FjaW9u 38803 -LmN1ZGE= 38804 -IExpdQ== 38805 -PmVxdWFscw== 38806 -IEFjZQ== 38807 -0YDQsNC8 38808 -IFN1cGVybWFu 38809 -IEdhcmNpYQ== 38810 -IGFycmVzdHM= 38811 -YWdhcg== 38812 -IHt9KQ== 38813 -IG1hY3Jvcw== 38814 -cm91cGU= 38815 -w6p0cmU= 38816 -IHR3aXN0ZWQ= 38817 -c3RydW1lbnRz 38818 -Xygi 38819 -X3ZlcnRpY2Vz 38820 -IFRyYW5zaXRpb24= 38821 -0LjQug== 38822 -W21heA== 38823 -bWluZA== 38824 -IGFjY2Vzc1Rva2Vu 38825 -IHVubGU= 38826 -bXVz 38827 -Y29w 38828 -IEZhY3Rvcg== 38829 -IGNvbmNlZA== 38830 -IHJldHI= 38831 -LmxpbmFsZw== 38832 -LXNsaWRlcg== 38833 -b2Js 38834 -X1N0YXRpY0ZpZWxkcw== 38835 -IHpvbWJpZQ== 38836 -c2VsbGluZw== 38837 -IGNoYXA= 38838 -IHNoYWtpbmc= 38839 -IFRyYW5zbGF0ZQ== 38840 -IEFtc3RlcmRhbQ== 38841 -IEVUSA== 38842 -X0VYVEVSTg== 38843 -a2Q= 38844 -X2Rpc2M= 38845 -IHByZWNlZGluZw== 38846 -IHByaXg= 38847 -T2JqZWN0TmFtZQ== 38848 -X21vZGlmaWVk 38849 -YXJkd2FyZQ== 38850 -ID8+Ij4= 38851 -IERX 38852 -YCR7 38853 -ID8+Ij48Pw== 38854 -dXllbg== 38855 -IGRvbm5h 38856 -IHhzaQ== 38857 -ICQiew== 38858 -IERyYXdpbmc= 38859 -LG5pbA== 38860 -IG9uZGVy 38861 -Qkc= 38862 -T2JzZXJ2 38863 -IGNvbnNpZGVyYXRpb25z 38864 -Ym9hdA== 38865 -IEJhbmtz 38866 -IGluZGljdA== 38867 -LEk= 38868 -IEJsdQ== 38869 -KHZlcnNpb24= 38870 -Y2xpZW50ZQ== 38871 -b2xhbg== 38872 -TEVTUw== 38873 -YXNzZXJ0U2FtZQ== 38874 -X3ZvaWQ= 38875 -IFdBUw== 38876 -CWVudW0= 38877 -IG1peGVy 38878 -RVc= 38879 -YWZmZQ== 38880 -IGJsb3dqb2I= 38881 -dGV4dEZpZWxk 38882 -IGltbWVuc2U= 38883 -X3JlcG8= 38884 -IGdsb2JhbHM= 38885 -YW50YWdlcw== 38886 -LnRvZGF5 38887 -VGh1cnNkYXk= 38888 -IEJyaWc= 38889 -e30pCg== 38890 -IEltYWdpbmU= 38891 -KEdQSU8= 38892 -IGVzdG8= 38893 -IFByb3ZpbmNl 38894 -IE1lbnRhbA== 38895 -X2NlbGxz 38896 -IEp1bGlhbg== 38897 -LlNjcmVlbg== 38898 -IGNhbmRsZQ== 38899 -IG1vbmRl 38900 -IHZlcmc= 38901 -aXRlcmFscw== 38902 -LWxheW91dA== 38903 -R3Vlc3Q= 38904 -IHZpbmQ= 38905 -IEVjaG8= 38906 -Jyl9 38907 -IG1hbm4= 38908 -X0JPT0xFQU4= 38909 -aGFw 38910 -IG5pZ2h0bWFyZQ== 38911 -VUdI 38912 -IG5vbmV0aGVsZXNz 38913 -IGF0aGU= 38914 -IEhvbGxhbmQ= 38915 -IEJvcm4= 38916 -XE9STQ== 38917 -YW51dA== 38918 -X2xldmVscw== 38919 -IHBldGl0ZQ== 38920 -LWFydA== 38921 -X1NIT1c= 38922 -bnVtYmVyT2Y= 38923 -X3RodW1ibmFpbA== 38924 -YW1pbnM= 38925 -IERlZmluZXM= 38926 -ICI9 38927 -LlN0YXR1c0NvZGU= 38928 -IGRpZ25pdHk= 38929 -IEJpa2U= 38930 -Lk5ld0xpbmU= 38931 -IEdsYXM= 38932 -KGxvZ2dlcg== 38933 -IGNhdGNoZXM= 38934 -dm90ZXM= 38935 -IGV4YW1pbmluZw== 38936 -L3JlZ2lzdGVy 38937 -IHNwZWNpZnlpbmc= 38938 -X2ZpeGVk 38939 -IGRyYXdpbmdz 38940 -VGhyZXNob2xk 38941 -QXg= 38942 -IEFyY2hpdGVjdHVyZQ== 38943 -KHBpZA== 38944 -V2lyZQ== 38945 -KGNvbnQ= 38946 -bGFuZQ== 38947 -TGlzdHM= 38948 -IHNwcmludA== 38949 -IGdyYW5kZmF0aGVy 38950 -X0FH 38951 -IHNjaGVkdWxpbmc= 38952 -Q0xVUw== 38953 -YXR1cml0eQ== 38954 -IGxvY2tpbmc= 38955 -W3NpemU= 38956 -X3N0eWxlcw== 38957 -IHdi 38958 -LS0+Cgo= 38959 -IHNwaW5uaW5n 38960 -X3BlbmRpbmc= 38961 -TWF0Y2hlcnM= 38962 -LktleXM= 38963 -IFBW 38964 -ZW51cw== 38965 -YW50aXM= 38966 -IGRpc2NhcmQ= 38967 -IGhhdWw= 38968 -IGVtcGly 38969 -IHBhdGh3YXk= 38970 -IG9haw== 38971 -0LzQtdC9 38972 -LWluZHVjZWQ= 38973 -IGltcGFpcg== 38974 -IENhbGdhcnk= 38975 -LmlzSGlkZGVu 38976 -ZHo= 38977 -X2luY2x1ZGU= 38978 -IGdt 38979 -ICcoJw== 38980 -UFk= 38981 -dWdnZXN0aW9ucw== 38982 -IGNvbW1vZGl0eQ== 38983 -Y3Jv 38984 -L3N1Yg== 38985 -IGdldEluc3RhbmNl 38986 -IExlZ2FjeQ== 38987 -IEtpbA== 38988 -QmFs 38989 -KHNob3J0 38990 -SW5mb3Jt 38991 -K3g= 38992 -KnI= 38993 -IEhvcGVmdWxseQ== 38994 -b3JhdGU= 38995 -IG1hY2hlbg== 38996 -IHRyZWF0eQ== 38997 -IE9yaQ== 38998 -LnB1YmxpYw== 38999 -LWhvcml6b250YWw= 39000 -IHRhY3RpYw== 39001 -IGJvcmQ= 39002 -d2FyZXM= 39003 -IGFtbW8= 39004 -IExpc3Rz 39005 -IGVxdWF0aW9ucw== 39006 -L2hlcg== 39007 -IE5TVw== 39008 -Qm91bmRpbmc= 39009 -X0NvbGxlY3Rpb25z 39010 -IGF2YWls 39011 -LkRyb3BEb3du 39012 -6LA= 39013 -IGho 39014 -IGzDoA== 39015 -LnBi 39016 -IG1lbW9yaWFs 39017 -IEFUVFI= 39018 -IGV4aGF1c3RlZA== 39019 -IHRzcA== 39020 -CXJlZGlyZWN0 39021 -IGxpa2V3aXNl 39022 -U1RFUg== 39023 -TGphdmE= 39024 -IGNvbmRlbW5lZA== 39025 -b2NhdXN0 39026 -KHN0cmljdA== 39027 -IGV4ZW1wdA== 39028 -IHNtcw== 39029 -IGV4YWdnZXI= 39030 -U1lT 39031 -IGxvdW5nZQ== 39032 -Ol4= 39033 -IHRvZGQ= 39034 -ZGVi 39035 -YXRvcmlhbA== 39036 -IFBvcnRlcg== 39037 -IHR1aXRpb24= 39038 -IGV4ZW1wbA== 39039 -IHBhcmVu 39040 -LmxpbmVUbw== 39041 -IGtpZG5leQ== 39042 -IMOnYQ== 39043 -IGN1aQ== 39044 -77yM6K+3 39045 -WEM= 39046 -IG1vxbw= 39047 -IG5vbWluYXRlZA== 39048 -bHVuZw== 39049 -SW1HdWk= 39050 -IEJ1eno= 39051 -IHN0ZXJlbw== 39052 -cG9ydGFs 39053 -cmVzYXM= 39054 -IGtsYXNz 39055 -IGRyYWZ0ZWQ= 39056 -IHByb2plY3RpbGU= 39057 -L2dwbA== 39058 -KHBhcmFtZXRlcnM= 39059 -KikK 39060 -IGFzc2lzdGVk 39061 -IE5TSW50ZWdlcg== 39062 -c2l0ZW1hcA== 39063 -Om50aA== 39064 -LlZpZXdz 39065 -LkFyZ3VtZW50UGFyc2Vy 39066 -IG1lZXI= 39067 -emllcg== 39068 -IERpZw== 39069 -PD89JA== 39070 -X3Blcm1pc3Npb24= 39071 -CUFkZA== 39072 -b2xvZ2lh 39073 -IHNjaQ== 39074 -IGZpbmFuY2lhbGx5 39075 -IHNjcm9sbGluZw== 39076 -LmRpc3Q= 39077 -X0hBUw== 39078 -dWJ1bnR1 39079 -LnBhZ2Vz 39080 -SW5jcmU= 39081 -YnVyc2U= 39082 -IEFtYXRldXI= 39083 -5rqQ 39084 -QmxvYg== 39085 -IGNob2xlc3Rlcm9s 39086 -REVT 39087 -bWluaW11bQ== 39088 -IHJlZnVzaW5n 39089 -dW5uZWQ= 39090 -0Jw= 39091 -IFJE 39092 -LlNlcnZsZXQ= 39093 -ICovOwo= 39094 -dWRkZW4= 39095 -IHZpZXdCb3g= 39096 -IG1ldGFib2xpc20= 39097 -IHN0ZWFsaW5n 39098 -IEJldmVy 39099 -YWduZXRpYw== 39100 -VkVSUklERQ== 39101 -X0FVRElP 39102 -0YDRiw== 39103 -IGFyY2hpdmVz 39104 -LmxpbmVhcg== 39105 -PXs8 39106 -dW5jYXRlZA== 39107 -QWNjZXNzRXhjZXB0aW9u 39108 -IHBpY3R1cmVCb3g= 39109 -CXNlbGVjdA== 39110 -TGF0aXR1ZGU= 39111 -dmlzb3I= 39112 -cmVpYg== 39113 -IHBhaw== 39114 -SG9wZQ== 39115 -IEl0ZXJhYmxl 39116 -LnJlc3BvbnNlVGV4dA== 39117 -IFF1YWQ= 39118 -IEJyb29rcw== 39119 -IFRvdA== 39120 -T1BU 39121 -ZWxvbmc= 39122 -IGNvY2FpbmU= 39123 -IGFubw== 39124 -RGFu 39125 -IHBzaQ== 39126 -0LDQu9GM 39127 -LmdldENoaWxk 39128 -IFJFRg== 39129 -LWFi 39130 -IFRyaWFuZ2xl 39131 -PFRleHQ= 39132 -IENvbG9tYmlh 39133 -aW5reQ== 39134 -6Imy 39135 -KX0+Cg== 39136 -IHBsYWc= 39137 -cGluZQ== 39138 -IGJsYW5rZXQ= 39139 -IDo8Lw== 39140 -IFRyYW5zbGF0aW9u 39141 -bm92 39142 -IHBlcmZlY3Rpb24= 39143 -IENvbmZlZGVy 39144 -LnN0dWI= 39145 -LkludGVyb3BTZXJ2aWNlcw== 39146 -LlN0b3Jl 39147 -IGVucm9sbG1lbnQ= 39148 -IGRlZXI= 39149 -TW92ZW1lbnQ= 39150 -LWZyb20= 39151 -aGM= 39152 -IGV2YW5nZWw= 39153 -IElsbHVzdHI= 39154 -IHRydW1w 39155 -X1N0YXJ0 39156 -cGxhbmVz 39157 -IEJpbA== 39158 -SW5mb3M= 39159 -LXRyYW5z 39160 -IHJhbmNo 39161 -IExpbmRh 39162 -X21hcg== 39163 -UkVU 39164 -L25ldA== 39165 -TGF3 39166 -TkY= 39167 -IFByZXZlbnQ= 39168 -IGNyaWVk 39169 -IGVkdWNhdGU= 39170 -YXN0aWNz 39171 -eWk= 39172 -LkxpbmVhckxheW91dA== 39173 -TUVUSE9E 39174 -IEVn 39175 -bWFwcGVy 39176 -5pmC 39177 -LmFzYXJyYXk= 39178 -z4E= 39179 -acOnw6Nv 39180 -UmV1c2U= 39181 -X3Jldg== 39182 -IFBST0RVQ1Q= 39183 -X0NvZGU= 39184 -ICAgICANCg== 39185 -IFNFUlZJQ0U= 39186 -X2NvdmVy 39187 -LiwK 39188 -LkV4ZWN1dGVSZWFkZXI= 39189 -IERpbmluZw== 39190 -LmFyY2g= 39191 -IG90cm8= 39192 -IERpc2NvdmVyeQ== 39193 -IEtleUVycm9y 39194 -IEJlbmVmaXRz 39195 -X1NIQQ== 39196 -LlVubWFyc2hhbA== 39197 -SEVBREVS 39198 -TXV0ZXg= 39199 -QU1B 39200 -IGluaXRpYXRl 39201 -U3RheQ== 39202 -TGl0dGxl 39203 -ICgpLA== 39204 -IGRlY2VudHJhbA== 39205 -UmVzb2x1dGlvbg== 39206 -LmhlYWx0aA== 39207 -CWZjbG9zZQ== 39208 -5Lqk 39209 -IHN0YWtlaG9sZGVycw== 39210 -IGFyY2hhZQ== 39211 -RGlnaXRhbA== 39212 -bGVzY29wZQ== 39213 -X3Blbg== 39214 -IEl0ZW1TdGFjaw== 39215 -IENhbm9u 39216 -IEtlbmQ= 39217 -IMO4 39218 -X2FqYXg= 39219 -aW5ncmVkaWVudHM= 39220 -RGVsaXZlcnk= 39221 -U2VjdGlvbnM= 39222 -IGRpc2FwcG9pbnRpbmc= 39223 -IEdyZW4= 39224 -LHJl 39225 -IGRlY3J5cHQ= 39226 -b2xvZ2lj 39227 -X2ZtdA== 39228 -IFNsaWRlcg== 39229 -bmFo 39230 -V2FzaGluZ3Rvbg== 39231 -enVuZw== 39232 -INGG 39233 -eWN6 39234 -aWV2ZXM= 39235 -LkRFQlVH 39236 -IFRJ 39237 -IGhhY2tpbmc= 39238 -IGNlbnRy 39239 -Zmxvd3M= 39240 -IGRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 39241 -IGFjY291bnRhYmlsaXR5 39242 -Q09VTlQ= 39243 -0LvQtdC80LXQvdGC 39244 -Ymxv 39245 -L2lk 39246 -IFNsb3c= 39247 -aXp6YXJk 39248 -LnJlbW92ZUV2ZW50TGlzdGVuZXI= 39249 -IOyehQ== 39250 -L0k= 39251 -aXNtYQ== 39252 -IEh1ZHNvbg== 39253 -fX0s 39254 -dW1lZA== 39255 -IHJlYWxpc2U= 39256 -dW5zYWZl 39257 -IHp1cw== 39258 -IHNob3J0YWdl 39259 -b2xpYQ== 39260 -X3ByaW9yaXR5 39261 -IGZsb29kaW5n 39262 -b3BlcmF0aW9ucw== 39263 -UG9seQ== 39264 -YWJhbg== 39265 -W2N1cg== 39266 -IGVza29ydGU= 39267 -X0RFU0NSSVBUSU9O 39268 -X25hdA== 39269 -IG1hbGljaW91cw== 39270 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 39271 -IFBhcmtz 39272 -IHRheHBheWVy 39273 -IEZvc3Rlcg== 39274 -IHNleHVhbGl0eQ== 39275 -57O7 39276 -67A= 39277 -XA0K 39278 -LnNlZWs= 39279 -0LDQvdC40Y8= 39280 -L2FydGljbGU= 39281 -6L+H 39282 -IFVocg== 39283 -IGdyYW5kbW90aGVy 39284 -IEJsZQ== 39285 -ZnVydA== 39286 -YW1iYWg= 39287 -bm90aWZpY2F0aW9ucw== 39288 -ZGVwcmVjYXRlZA== 39289 -IHVpbnRwdHI= 39290 -b2tp 39291 -KEFycmF5 39292 -IGF1dG9ub21vdXM= 39293 -IG9icg== 39294 -wq/Crw== 39295 -IGJhc2VuYW1l 39296 -IHVudmVpbGVk 39297 -c29s 39298 -IE5vdEltcGxlbWVudGVkRXJyb3I= 39299 -IGRlcHJlc3M= 39300 -XycuJA== 39301 -IFVOSVQ= 39302 -JScs 39303 -LXRhZw== 39304 -Z3JlcA== 39305 -IE1haW50ZW5hbmNl 39306 -IHdhcmZhcmU= 39307 -X1JFU09VUkNF 39308 -KHNwZWM= 39309 -KGN2 39310 -IG5hZGE= 39311 -55S1 39312 -IGNyb3dkZWQ= 39313 -QmVsb3c= 39314 -IFphY2g= 39315 -RXN0YWRv 39316 -X3ByaW1l 39317 -IHRyYWJham8= 39318 -IGluZm9ybWF0aXZl 39319 -U2NvdHQ= 39320 -IHNlcmlhbGl6ZXJz 39321 -IE5hcw== 39322 -VGh1bms= 39323 -IG1lcmN5 39324 -LC4uLgoK 39325 -IGFkZGljdA== 39326 -LmNvbnN0YW50cw== 39327 -IGRhdGFmcmFtZQ== 39328 -X3JlYXNvbg== 39329 -Z29tZXJ5 39330 -7Iq164uI64uk 39331 -IG5lZ2xlY3Q= 39332 -IExpbmVz 39333 -IG1lbWI= 39334 -X0VYRUM= 39335 -YXNzYWdl 39336 -IFlhcmQ= 39337 -e30nLg== 39338 -IGxvdHRlcnk= 39339 -dGVpbg== 39340 -X2NhbGM= 39341 -aWt1 39342 -X1JFQ09SRA== 39343 -V2Fybg== 39344 -IGhlYWx0aGllcg== 39345 -dXJlbWVudA== 39346 -IHlhcm4= 39347 -IENvcm5lcg== 39348 -KHppcA== 39349 -KGluaXQ= 39350 -IExpdA== 39351 -SFc= 39352 -c3Vic2V0 39353 -IE1G 39354 -RVRFUlM= 39355 -X3JvdA== 39356 -IGVyZQ== 39357 -IE92ZXJyaWRl 39358 -V2FsbGV0 39359 -X3Jld2FyZA== 39360 -IHNhZ2U= 39361 -c2V0VmlzaWJsZQ== 39362 -IEpzb25SZXNwb25zZQ== 39363 -SUNZ 39364 -6K+i 39365 -VmFyQ2hhcg== 39366 -YWF0 39367 -LWdyZWVu 39368 -IGlycQ== 39369 -YW5pdHk= 39370 -IHdob2V2ZXI= 39371 -X3NoYXJl 39372 -IGZvdXQ= 39373 -cm9sbHM= 39374 -IHdpbGxpbmduZXNz 39375 -LmNvbXBvbmVudEluc3RhbmNl 39376 -IGhvbm9yZWQ= 39377 -dXJ2ZXk= 39378 -QmVy 39379 -IHJ1bm5lcnM= 39380 -IGxpZXU= 39381 -b3Jwb3I= 39382 -X3N0cnVjdHVyZQ== 39383 -QmFyQnV0dG9uSXRlbQ== 39384 -YWR4 39385 -IEJlbm5ldHQ= 39386 -IGRpbGln 39387 -IGZsdWN0 39388 -SURERU4= 39389 -X1NlbGVjdGVk 39390 -KGRpdg== 39391 -IHF1aWNrZXI= 39392 -YWxvbmc= 39393 -Z3JhcGhxbA== 39394 -aW5leg== 39395 -IGNpdGU= 39396 -IEluc3RydWN0aW9ucw== 39397 -IGluc2VydGluZw== 39398 -LmNsb3VkZmxhcmU= 39399 -Y291cG9u 39400 -ZWRMaXN0 39401 -IFN0b3Jlcw== 39402 -X21hbGxvYw== 39403 -56ym 39404 -IEF3ZXNvbWU= 39405 -IGxhbWI= 39406 -UkVTVA== 39407 -IGludGVzdA== 39408 -IE5hdmJhcg== 39409 -LmZlYXR1cmVz 39410 -SW5jcmVtZW50 39411 -IFBvbQ== 39412 -IGluc3VmZmljaWVudA== 39413 -X0xPR0lO 39414 -UExFTUVOVA== 39415 -IE9BdXRo 39416 -LklORk8= 39417 -IGV4b3RpYw== 39418 -IENBU0U= 39419 -CSAgCg== 39420 -IEdhbmQ= 39421 -dGhlc2Vz 39422 -IG5vdm8= 39423 -IERlbGw= 39424 -4oCm4oCm4oCm4oCm 39425 -X3NvZnQ= 39426 -IGFncmVlaW5n 39427 -Y2VudHM= 39428 -bG9hbg== 39429 -JyIsCg== 39430 -IFJhbg== 39431 -REVM 39432 -IG9yZ2FuaXNlZA== 39433 -K24= 39434 -IEhlYWx0aGNhcmU= 39435 -IGRldGVyaW9y 39436 -IGltcGxlbWVudGF0aW9ucw== 39437 -IGNhcm4= 39438 -ICwn 39439 -IExPQUQ= 39440 -IHBsYW50ZWQ= 39441 -5pyq 39442 -Rm9ybUNvbnRyb2w= 39443 -X21hdGNoZXM= 39444 -IHBlcmlvZGlj 39445 -X1Rv 39446 -IEpvZWw= 39447 -IGFua2xl 39448 -IG1pbGl0YW50cw== 39449 -IFdpdGNo 39450 -dW5pZm9ybQ== 39451 -dWVudGE= 39452 -T2ZXZWVr 39453 -IHBlcnBldHI= 39454 -IGludGVydmVudGlvbnM= 39455 -KHdyaXRlcg== 39456 -YW50aW5l 39457 -UHJvZ3Jlc3NCYXI= 39458 -IGxlYWd1ZXM= 39459 -Y29tcHJlc3M= 39460 -aXppb25l 39461 -IEVB 39462 -Il09Ig== 39463 -IFN0ZXBoYW4= 39464 -bWludXM= 39465 -c3N0cmVhbQ== 39466 -X2xlZA== 39467 -ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 39468 -IldoZW4= 39469 -QWxyZWFkeQ== 39470 -IGNvbnRlbXBs 39471 -IGF0YXU= 39472 -IENvbmdyZXNzaW9uYWw= 39473 -IHJhcHBvcnQ= 39474 -IEJvdXI= 39475 -aXNoaQ== 39476 -IHR5bQ== 39477 -IEFybWVu 39478 -INGA0LDQtw== 39479 -LWZvcm1hdA== 39480 -X1JlYWQ= 39481 -KGNvbHVtbnM= 39482 -IG5ldWU= 39483 -X2JveGVz 39484 -IFNhbmR5 39485 -XywK 39486 -IFdpemFyZA== 39487 -IG9yZGVu 39488 -IGZpbGVzeXN0ZW0= 39489 -ZmxpZ2h0 39490 -IHdzeg== 39491 -YW5jZWxlZA== 39492 -IGRhd24= 39493 -IEdzb24= 39494 -X3dhcm5pbmc= 39495 -IEljZWxhbmQ= 39496 -IHNsdXQ= 39497 -IHNldElz 39498 -X2lkZW50 39499 -IG9mZnNob3Jl 39500 -IFNrZXRjaA== 39501 -OyU= 39502 -IHRyaWJlcw== 39503 -X1NQQUNF 39504 -IG90cm9z 39505 -Q29tcGlsZXI= 39506 -CUVuZA== 39507 -IF0pLAo= 39508 -R3Jhdml0eQ== 39509 -IHRlbnNpb25z 39510 -IHNtb290aGx5 39511 -S25vdw== 39512 -b290aGluZw== 39513 -IFN0YXJ0dXA= 39514 -IEh5cA== 39515 -IGFtYXpvbg== 39516 -IFJlY2VpdmVk 39517 -emVuaWU= 39518 -654= 39519 -IENob2NvbGF0ZQ== 39520 -IMSw 39521 -Ik5v 39522 -IEFMUw== 39523 -IFByb2dyYW1taW5n 39524 -IERvZ3M= 39525 -IGdvb2RuZXNz 39526 -KGVycm5v 39527 -L2Vz 39528 -IHJlbW90ZWx5 39529 -IEhvb2tz 39530 -VXVpZA== 39531 -IG92ZXJseQ== 39532 -IOWQ 39533 -IGdwdQ== 39534 -IHN0aW11bHVz 39535 -KHN0ZXA= 39536 -LllvdQ== 39537 -IGJpb20= 39538 -SU5D 39539 -LmJpdHM= 39540 -KG1Db250ZXh0 39541 -IGFtZXJpY2Fu 39542 -IHRlcnJpdG9yaWVz 39543 -IE5E 39544 -XSIK 39545 -IE1hcHBpbmc= 39546 -IHByb2NlZWRpbmc= 39547 -LmF4 39548 -IHN1YnN0cmluZw== 39549 -QlVUVE9O 39550 -IEln 39551 -LXBhbmU= 39552 -IEFucw== 39553 -IGdyYWR1YXRpb24= 39554 -IHBlcnNwZWN0aXZlcw== 39555 -TWl4aW4= 39556 -X21pbnVz 39557 -CQkJCSAgICA= 39558 -IikpKQ== 39559 -bm9ybWFsaXplZA== 39560 -Lmxhc3ROYW1l 39561 -IGNsYW4= 39562 -QXNpYQ== 39563 -KE1vdXNl 39564 -cGFnaW5hdGU= 39565 -IGdpZg== 39566 -ZWxpZw== 39567 -IHBvc3RlcnM= 39568 -bmluZ3M= 39569 -IM+E 39570 -IGFwb3N0 39571 -IElocmU= 39572 -RGxsSW1wb3J0 39573 -IEVxdWFs 39574 -IGRpc3Rpbmd1aXNoZWQ= 39575 -bmVhcG9saXM= 39576 -IGJhY2tkcm9w 39577 -IEFsdGVybmF0aXZlbHk= 39578 -L21vZA== 39579 -IGxlbmQ= 39580 -IFNIT1c= 39581 -X2NvZGVz 39582 -IGF0w6k= 39583 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 39584 -LWNhc2U= 39585 -Y2h0ZQ== 39586 -IGRvbmM= 39587 -OmFkZA== 39588 -TmVnYXRpdmU= 39589 -ZmF2b3JpdGU= 39590 -IGF0dHJhY3Rpb25z 39591 -aW50Q29sb3I= 39592 -IFBpcg== 39593 -Q29ubmVsbA== 39594 -TWFuaWZlc3Q= 39595 -dGVhbXM= 39596 -IH07CgoK 39597 -IHBsdXJhbA== 39598 -IG92ZXJ0aW1l 39599 -IEV1cm9wYQ== 39600 -IEJhbmdsYWRlc2g= 39601 -KGFu 39602 -IGxpbmd1 39603 -aXRpbWU= 39604 -aW5zdG9u 39605 -LnNoYWRvdw== 39606 -56iL 39607 -IFVTUw== 39608 -U2VydmVyRXJyb3I= 39609 -SVZFUlM= 39610 -IEppbg== 39611 -IGh1bWJsZQ== 39612 -YXV0b2xvYWQ= 39613 -YXJleg== 39614 -4oCy 39615 -IEFzdHI= 39616 -aWNvbG9u 39617 -LlZpZXdNb2RlbHM= 39618 -b2Jv 39619 -IHN3aXBl 39620 -IHJlY2Vzc2lvbg== 39621 -6ZU= 39622 -IOyY 39623 -bmVyZw== 39624 -aW5ncmVkaWVudA== 39625 -bWFpbHRv 39626 -IEZhbWU= 39627 -UHJpbnRpbmc= 39628 -UGl4ZWxz 39629 -IEJhc2g= 39630 -cG9zdGE= 39631 -X0pP 39632 -IGluZmFtb3Vz 39633 -IExhbmM= 39634 -KGxvY2FsU3RvcmFnZQ== 39635 -LmJsaXQ= 39636 -IHlvdW5nZXN0 39637 -IGZpZWxkTmFtZQ== 39638 -IGNvbnRpbmc= 39639 -IHdvb2w= 39640 -IEltR3Vp 39641 -IE5TVA== 39642 -LnByZWZpeA== 39643 -VG9JbnQ= 39644 -IFNveA== 39645 -IGhhYml0YXQ= 39646 -KCJ8 39647 -PSciKw== 39648 -SU5HVE9O 39649 -X3dyYXA= 39650 -dWNrZXRz 39651 -IFdSSVRF 39652 -IG1lZGljaW5lcw== 39653 -IG1lbWJyYW5l 39654 -IEpUZXh0 39655 -IHJlcHJvZHVjdGlvbg== 39656 -X3JlY2VpdmU= 39657 -VGFibGVSb3c= 39658 -cXVldWVSZXVzYWJsZUNlbGw= 39659 -aG9va3M= 39660 -IHJlbHlpbmc= 39661 -IGRyaWxsaW5n 39662 -X0ls 39663 -KGV4Y2VwdGlvbg== 39664 -IGR1cmFiaWxpdHk= 39665 -IGhlc2l0YXRl 39666 -IGNvbXBhcnQ= 39667 -SUxJTkc= 39668 -IEVsZGVy 39669 -IGNhZmZl 39670 -IGRldmVsb3Bz 39671 -aXNoZXI= 39672 -IHBseQ== 39673 -IHRvbA== 39674 -X1BMQVk= 39675 -IGZyaWN0aW9u 39676 -KGFsd2F5cw== 39677 -IGluZGlnZW5vdXM= 39678 -IE9wZXJh 39679 -IENhbXB1cw== 39680 -YW5jZW1lbnRz 39681 -IGxpdHRlcg== 39682 -LmxpbWl0 39683 -KFRva2Vu 39684 -ZW5pcw== 39685 -IGhpZ2hsaWdodGluZw== 39686 -IEF1Yg== 39687 -IHZhbGlkYXRvcnM= 39688 -LWhvc3Q= 39689 -d2hlZWw= 39690 -PHs= 39691 -KSkr 39692 -IE5ld3NsZXR0ZXI= 39693 -X2F2ZXJhZ2U= 39694 -IHNvZGl1bQ== 39695 -IEhpbA== 39696 -IE1pbGU= 39697 -IEF1dGhTZXJ2aWNl 39698 -U3RhdGlzdGljcw== 39699 -IE51dHJpdGlvbg== 39700 -IHNwb25zb3Jz 39701 -b3ZlbmFudA== 39702 -PT09PT09PT09PT09PT0= 39703 -LkFic29sdXRl 39704 -IGbDpQ== 39705 -SGFuZGxpbmc= 39706 -IC0tLS0tLS0K 39707 -KGRpcmVjdG9yeQ== 39708 -IikuCg== 39709 -YW5vbA== 39710 -LmJyb3dzZXI= 39711 -IEdyaW5kaW5n 39712 -IGNr 39713 -RnJlcXVlbmN5 39714 -KClbJw== 39715 -QWRqdXN0 39716 -Y3Jldw== 39717 -YWZldHk= 39718 -IGdu 39719 -IHdpdmVz 39720 -b29v 39721 -IHByb3N0aXR1 39722 -IG/DuQ== 39723 -aWZ0eQ== 39724 -IGxpdGlnYXRpb24= 39725 -IEV6 39726 -SmVmZg== 39727 -LnBr 39728 -IFNob2Vz 39729 -Y29ybg== 39730 -eXl2c3A= 39731 -IGFkYXA= 39732 -PXU= 39733 -Q09ORg== 39734 -QU5EQVJE 39735 -IGVsZXZhdG9y 39736 -YmlsbGluZw== 39737 -IGNhbmQ= 39738 -IGNhcnA= 39739 -W2ZpZWxk 39740 -LWxpYg== 39741 -c2VxdWVudGx5 39742 -Pi0= 39743 -IGxjZA== 39744 -LS0tLS0tLS0tLS0tLS0t 39745 -KCIi 39746 -IHRhY3RpY2Fs 39747 -IFJvbmFsZA== 39748 -ZXh0cg== 39749 -IEZlc3Q= 39750 -IGZ1ZXI= 39751 -LW5hdmlnYXRpb24= 39752 -IGti 39753 -Z2hvc3Q= 39754 -IGhhbmRsZUNoYW5nZQ== 39755 -X2Nscw== 39756 -KCkhPQ== 39757 -Q29tcGFyYXRvcg== 39758 -LnZt 39759 -IENveA== 39760 -X3Jldmlldw== 39761 -L0A= 39762 -X2Nvb2tpZQ== 39763 -IHJlY29nbmlzZWQ= 39764 -bGRhcA== 39765 -VGhyZWFkcw== 39766 -IFNleHVhbA== 39767 -IEJlYXJpbmc= 39768 -KFNRTA== 39769 -IHhy 39770 -IHRoaWdo 39771 -VVJMQ29ubmVjdGlvbg== 39772 -IFNVVg== 39773 -IG1Db250ZXh0 39774 -IGluY2lkZW5jZQ== 39775 -IEVzdGU= 39776 -LnN1cA== 39777 -X3Rl 39778 -KEVYSVQ= 39779 -Q01E 39780 -LyI+ 39781 -QWxtb3N0 39782 -IFVuZQ== 39783 -IGFuZGVyZW4= 39784 -IFNpbmdsZXRvbg== 39785 -IGJvcmU= 39786 -VGhpbms= 39787 -IG5hcmM= 39788 -XWluaXRXaXRo 39789 -X3Nob3A= 39790 -KHN0cmF0ZWd5 39791 -IScs 39792 -aGVyaXRz 39793 -IERlc2s= 39794 -X21hY2hpbmU= 39795 -Lm5ldHR5 39796 -xLFuZGE= 39797 -PTw= 39798 -IFFS 39799 -IFNpZGViYXI= 39800 -LnNwbGl0Q29udGFpbmVy 39801 -IG9uU3VjY2Vzcw== 39802 -IG1vbmtleQ== 39803 -RW5qb3k= 39804 -KG5vZGVz 39805 -cGVjdHJ1bQ== 39806 -ICgqKA== 39807 -CVVJTlQ= 39808 -LGhlaWdodA== 39809 -IE5ldHdvcmtz 39810 -LnRhaWw= 39811 -LmxpbnNwYWNl 39812 -ICIuLi4= 39813 -TGlzdGVu 39814 -xqE= 39815 -LkNoYW5uZWw= 39816 -LWRlZmluZWQ= 39817 -UmVwZWF0 39818 -YWRqdXN0 39819 -RVJN 39820 -X2FwcGxpY2F0aW9u 39821 -LmFzc2VydE5vdE51bGw= 39822 -LXN0cmVhbQ== 39823 -IHJhYmJpdA== 39824 -IHBvc2l0aW9uaW5n 39825 -IHdva2U= 39826 -IGZpbmc= 39827 -IG11bHRpcGxheWVy 39828 -IHJlZ2lzdGVyaW5n 39829 -dW50aWw= 39830 -w6Vu 39831 -KDo6 39832 -dXNzaW9ucw== 39833 -IHBvdGF0bw== 39834 -IEVxdWFscw== 39835 -LlN1cA== 39836 -L2FwYWNoZQ== 39837 -ICg9 39838 -LiIp 39839 -LnB0cg== 39840 -IFNwZWVjaA== 39841 -LmNsaXA= 39842 -IEdhYnJpZWw= 39843 -IG11c2ljaWFu 39844 -L2lzc3Vlcw== 39845 -LnNob3A= 39846 -IEhpZXI= 39847 -X1JFVA== 39848 -X2J1Y2tldA== 39849 -44Oh 39850 -YXZz 39851 -IHJveg== 39852 -Zmxvd2Vy 39853 -V3JpdGVCYXJyaWVy 39854 -IE1pbGFu 39855 -IGxlZ2lzbGF0dXJl 39856 -IERvbGw= 39857 -IHByb3Zpbmc= 39858 -LmNvbmNhdGVuYXRl 39859 -4pWQ 39860 -IGdjaGFy 39861 -Y2RuanM= 39862 -Ymxlcw== 39863 -IExpc3Rpbmc= 39864 -0LvQvg== 39865 -LnhyTGFiZWw= 39866 -IFNhaw== 39867 -anVzdGljZQ== 39868 -IFZhbGVudGluZQ== 39869 -dW5sZXNz 39870 -IHBpZ2Vy 39871 -KHJ1bg== 39872 -IHRlc3RpZmllZA== 39873 -QU5B 39874 -IFJlbW92ZXM= 39875 -KSkpKTsK 39876 -cmVjYXRlZA== 39877 -IFJ1bnRpbWVNZXRob2Q= 39878 -IGNvbnF1 39879 -44Ki 39880 -IHRpc3N1ZXM= 39881 -YWlsZXI= 39882 -w6l0w6k= 39883 -LVN0YXI= 39884 -IGZsYW1lcw== 39885 -LnNldEljb24= 39886 -IHN1cGVybg== 39887 -IHZhZ2luYQ== 39888 -LXZhcmlhYmxl 39889 -IHdlbGxuZXNz 39890 -Q1VS 39891 -IGJlbGxl 39892 -LmdldFJlcXVlc3Q= 39893 -IHBvY28= 39894 -YmVuaA== 39895 -YWdlbnM= 39896 -IHNwaWxs 39897 -IEp1cg== 39898 -IGRpc3BhdGNoZXI= 39899 -0L3QvtCz0L4= 39900 -ZW1vbmlj 39901 -KGRpcm5hbWU= 39902 -INCU 39903 -IHBhc3Nl 39904 -IGdhbno= 39905 -cmljaW5n 39906 -RVU= 39907 -IG11amVyZXM= 39908 -ZXNzZW4= 39909 -LmF0dHJpYnV0ZQ== 39910 -amo= 39911 -CQkgCg== 39912 -W14= 39913 -IHN0cnRvbG93ZXI= 39914 -bGV4ZXI= 39915 -ZWN0YXI= 39916 -aG90ZWw= 39917 -LnNxdWFyZQ== 39918 -IHJhbGw= 39919 -IGxvd2VyZWQ= 39920 -aGFuZGxlZA== 39921 -TWFya2V0 39922 -IFVzZXM= 39923 -aXZhcw== 39924 -LkJ1c2luZXNz 39925 -44GX44Gm 39926 -RElW 39927 -IHdhc3RlZA== 39928 -IGF2b2ly 39929 -w6pt 39930 -X0FDQ09VTlQ= 39931 -LmV0 39932 -CVNETA== 39933 -a2Fw 39934 -IGZveA== 39935 -dXBwZXQ= 39936 -e30sCg== 39937 -Iiwn 39938 -RmF2b3JpdGU= 39939 -UEVORA== 39940 -IEFFUw== 39941 -fSks 39942 -IGRlZHVjdGlvbg== 39943 -IHBvbMOtdA== 39944 -IGNvbXBvbmVudFdpbGw= 39945 -IFRlbGVyaWs= 39946 -X1NFTEY= 39947 -IG11c2U= 39948 -Q3JhZnQ= 39949 -IGRlbnM= 39950 -4KS/ 39951 -KHRw 39952 -IHRhc3R5 39953 -IGJhbGFuY2Vz 39954 -IGRlZGljYXRpb24= 39955 -IFdhbGxhY2U= 39956 -IHVubGF3 39957 -XCI+XA== 39958 -IG11bQ== 39959 -LXVwZGF0ZQ== 39960 -ZW1lbnRl 39961 -IHNvZGE= 39962 -UmVwdWJsaWM= 39963 -YXNtaW5l 39964 -w6lyaWM= 39965 -KFN0YXR1cw== 39966 -IEpzb25Db252ZXJ0 39967 -IERpc2s= 39968 -LlJlZGlyZWN0 39969 -IGZpbG1pbmc= 39970 -L21vbA== 39971 -Um8= 39972 -IHZpbGxl 39973 -IHRyYWJhag== 39974 -IHN5bnRoZXNpcw== 39975 -cmVnYQ== 39976 -IHJs 39977 -U2NoZWR1bGVy 39978 -SVNIRUQ= 39979 -Y3VycmVudFVzZXI= 39980 -KGVycm9ycw== 39981 -J2g= 39982 -X2JvdA== 39983 -eGltbw== 39984 -IFVTQVJU 39985 -X3N1cGVy 39986 -X0RFQ1JFRg== 39987 -0L3QvtC5 39988 -X1JPVw== 39989 -IHByb21vdGVz 39990 -IFRB 39991 -IGhvcmFz 39992 -IFJlcHJlc2VudHM= 39993 -IG5hbWVvZg== 39994 -IEV4Yw== 39995 -IEdhcmFnZQ== 39996 -IHNlaW5l 39997 -LCM= 39998 -IGhlcmI= 39999 -L3Jlc291cmNlcw== 40000 -IHBsZWFkZWQ= 40001 -LnJhZGlvQnV0dG9u 40002 -IOaY 40003 -T3Bz 40004 -IE5lc3Q= 40005 -Y3N0cmluZw== 40006 -IERlZmVuY2U= 40007 -IHJlZmVyZQ== 40008 -X2xlYWY= 40009 -IHJldmVsYXRpb24= 40010 -66c= 40011 -LmV4ZWN1dGVVcGRhdGU= 40012 -X1dPUkxE 40013 -IGV4cGFucw== 40014 -KCJcIg== 40015 -amFi 40016 -IGRvdWJ0cw== 40017 -IEdlb21ldHJ5 40018 -IGludHJvZHVjZXM= 40019 -IHNlbmF0b3Jz 40020 -IGNhbmFs 40021 -LmhlbHBlcg== 40022 -IEJpb2xvZ3k= 40023 -X1NFTlM= 40024 -LnByZXZpb3Vz 40025 -LXRvdWNo 40026 -YWJpdA== 40027 -IGltcGFjdGVk 40028 -IGJyYWNrZXRz 40029 -LmRpcmVjdA== 40030 -YWNjdW0= 40031 -IHRlc3Rvc3Rlcm9uZQ== 40032 -CWFjdGlvbg== 40033 -IENoYW5jZQ== 40034 -IHBlYWtz 40035 -Q3BwQ29kZUdlbldyaXRlQmFycmllcg== 40036 -IHVuYmVsaWU= 40037 -X3ByZXNz 40038 -LlJlbA== 40039 -YW5nbGVk 40040 -L3RlbXBsYXRlcw== 40041 -LS0+DQo= 40042 -bGltZQ== 40043 -IHN1ZmZpY2llbnRseQ== 40044 -X250 40045 -RXhwYW5k 40046 -LmlzZmlsZQ== 40047 -IGlzRW1wdHk= 40048 -IHF0 40049 -IG11bGhlcg== 40050 -YWNvYg== 40051 -R2Vvcmdl 40052 -5bi4 40053 -IGFzc2lt 40054 -YXNv 40055 -IGNvbXByaXNlZA== 40056 -T1Y= 40057 -KENPTkZJRw== 40058 -CXdyaXRlcg== 40059 -IGRlc3A= 40060 -IHRlbnVyZQ== 40061 -KGNy 40062 -LnBvb2w= 40063 -IEJyZW5k 40064 -IGNlbnNvcg== 40065 -KHRpbWVvdXQ= 40066 -IHBsZWE= 40067 -LldyYXA= 40068 -IHRpZ2h0bHk= 40069 -IFdlcmU= 40070 -IElnbm9yZQ== 40071 -YWJlaQ== 40072 -IGJyaWRnZXM= 40073 -IGNvbmRlbW4= 40074 -IHNpbXBsaWNpdHk= 40075 -IHJvdXRpbmVseQ== 40076 -IGJsYWNrcw== 40077 -amI= 40078 -IFBpdA== 40079 -VXRm 40080 -IC8K 40081 -cmVsb2Fk 40082 -IHNldE9iamVjdA== 40083 -L2dsb2JhbA== 40084 -IGZhdHR5 40085 -IHNvY2tz 40086 -Q291bGRu 40087 -IGVyb3Rpc2s= 40088 -5p2h 40089 -IFByZXNzdXJl 40090 -IE1heg== 40091 -bnBvcw== 40092 -dG9sb3dlcg== 40093 -IEVR 40094 -dXRldXI= 40095 -IE1vbWVudA== 40096 -IGV0YQ== 40097 -e3stLQ== 40098 -IGdyYXBocw== 40099 -IEd1YXI= 40100 -cmluZQ== 40101 -KC0t 40102 -IEh0dHBTdGF0dXM= 40103 -KHN0dWRlbnQ= 40104 -Km5w 40105 -IHJhaWx3YXk= 40106 -IGFzeW5jaHJvbm91cw== 40107 -X3Zt 40108 -J10sJw== 40109 -LHRleHQ= 40110 -bWVyY2hhbnQ= 40111 -KEd1aWQ= 40112 -IEdyYQ== 40113 -aXhlcg== 40114 -ZmV0Y2hBbGw= 40115 -LmFkZExpc3RlbmVy 40116 -ZmxpcA== 40117 -KiQ= 40118 -PigpLA== 40119 -IHN1bmxpZ2h0 40120 -YXNzaWduZWQ= 40121 -IGFiYw== 40122 -IENPTFVNTg== 40123 -IPCfmYIKCg== 40124 -KS4uLg== 40125 -IGVuc2VtYmxl 40126 -IG5ld2xpbmU= 40127 -X1NJTkdMRQ== 40128 -aWVkYWQ= 40129 -IGRhcmtlcg== 40130 -b3JtYXA= 40131 -IGxpb24= 40132 -cGxpdHM= 40133 -IGlsbHVzdHJhdGlvbg== 40134 -IElFRUU= 40135 -IHZpc3Rh 40136 -b3VzYW5kcw== 40137 -KioqKioqKg== 40138 -IFRvbW15 40139 -IGh1ZQ== 40140 -U2Vs 40141 -IGF1cmE= 40142 -IFRoZXJhcHk= 40143 -IGFuaW1hdG9y 40144 -LmNvbnN0cmFpbnRz 40145 -IHZhZ3Vl 40146 -KCIiKQ== 40147 -IHZpbGxhaW4= 40148 -IGJsZXNzaW5n 40149 -IHN0cmluZ0J1aWxkZXI= 40150 -IE1pc2M= 40151 -IERJUg== 40152 -ZmF4 40153 -LW5vZGU= 40154 -IFdhbGtpbmc= 40155 -IEFV 40156 -c2Vzcw== 40157 -IGdyaWxs 40158 -VkVSVElTRQ== 40159 -IEZvb2Rz 40160 -IHRvdXJuYW1lbnRz 40161 -w5M= 40162 -IE1hcnNo 40163 -IHdvbmRlcnM= 40164 -TG9uZ2l0dWRl 40165 -LkNvbW1hbmRUZXh0 40166 -PWlucHV0 40167 -X2VuY29kZXI= 40168 -cGFnZVNpemU= 40169 -IGdldFN0YXRl 40170 -Pj4K 40171 -LmdyZXk= 40172 -cG9k 40173 -IHJlYWRpbmdz 40174 -IHJlY29uc2lkZXI= 40175 -U3RhcnR1cA== 40176 -IGV4Y2Vy 40177 -LmJhbGFuY2U= 40178 -X2N5Y2xl 40179 -X1RpbWU= 40180 -TE9DQUw= 40181 -IEVGSQ== 40182 -IFJleW4= 40183 -LnNldEZvcmVncm91bmQ= 40184 -Ynlu 40185 -IGRpc2Nvbm5lY3RlZA== 40186 -QUNUSVZF 40187 -IGVtYmVkZGluZw== 40188 -aWNrZXJz 40189 -IHN1cnJvdW5kaW5ncw== 40190 -KmM= 40191 -IGdhcmFudA== 40192 -IGJm 40193 -IHdpcGU= 40194 -IOS4iw== 40195 -X1RSQQ== 40196 -YWRveA== 40197 -55U= 40198 -IHN1Y2tz 40199 -IFNvbmdz 40200 -IEFzc29jaWF0ZXM= 40201 -IEJhbGQ= 40202 -IEJyZXR0 40203 -dmVuaWxl 40204 -IHZ0 40205 -IGluYWRl 40206 -IHJlc2lnbmVk 40207 -IEdsZW5u 40208 -LnBhdHRlcm4= 40209 -LkRhdGFCaW5k 40210 -0YPQvA== 40211 -TGF5b3V0SW5mbGF0ZXI= 40212 -Y2hldA== 40213 -IFRlc3RhbWVudA== 40214 -Lm1z 40215 -IHBhdg== 40216 -IFJlYWN0RE9N 40217 -dXJkeQ== 40218 -QURBVEE= 40219 -TXU= 40220 -L2FjdGlvbnM= 40221 -IEpz 40222 -X2V4dHJhY3Q= 40223 -IEJyaW5n 40224 -Omlk 40225 -c3RydA== 40226 -aXZhdGlvbg== 40227 -IG91dHJpZ2h0 40228 -YXp1 40229 -bG95bWVudA== 40230 -0LjRjw== 40231 -YWxkbw== 40232 -IFB1Ymxpc2hlcg== 40233 -RWR1Y2F0aW9u 40234 -UGFsZXR0ZQ== 40235 -X2Rydg== 40236 -ICgkKA== 40237 -IEFuZGE= 40238 -IHJlbWVkeQ== 40239 -IGluY29uc2lzdGVudA== 40240 -dGVjdGlvbg== 40241 -IHJlZ3VsYXRvcnM= 40242 -IHNob3J0ZXN0 40243 -KHBhaXI= 40244 -IEluc3RhbGxhdGlvbg== 40245 -IGRlZmVuZGFudHM= 40246 -ICgpOw== 40247 -LWxhcmdl 40248 -TWVs 40249 -IHRocmVhdGVu 40250 -0L3Rjw== 40251 -IGZldGlzaA== 40252 -b3RpbmU= 40253 -X2RpYw== 40254 -IDwk 40255 -IHN0YWdnZXI= 40256 -c3Bp 40257 -JHJlc3BvbnNl 40258 -U2Vydg== 40259 -LWJvcm4= 40260 -am9z 40261 -CWltZw== 40262 -CVdIRVJF 40263 -X2x0 40264 -5b2T 40265 -LmNvc3Q= 40266 -IFR1ZQ== 40267 -LmxhYmVscw== 40268 -IExW 40269 -d2Nzc3RvcmU= 40270 -IEplc3Nl 40271 -4Lir 40272 -VHJhZGU= 40273 -IHByZWRlY2Vzc29y 40274 -64I= 40275 -ZmluYWxseQ== 40276 -X2dlbmVyYWw= 40277 -b2dnbGVy 40278 -X1JFR0lPTg== 40279 -bmVtZW50 40280 -IGJsb2dnZXI= 40281 -IEhhcmJvcg== 40282 -IERhdGFzZXQ= 40283 -W3c= 40284 -IGF0dGVuZGVlcw== 40285 -Lmljbw== 40286 -bWF4aW11bQ== 40287 -LlVubG9jaw== 40288 -X1NZTkM= 40289 -w6FnaW5h 40290 -IGRvd25z 40291 -IFdpaQ== 40292 -XSkv 40293 -IGtpY2tpbmc= 40294 -dW5pY2F0aW9u 40295 -IERBQw== 40296 -IElEUw== 40297 -IFJlbnRhbA== 40298 -IGN1cnJlbnRUaW1l 40299 -IHZhY2NpbmVz 40300 -IERldmls 40301 -IG5vcnM= 40302 -X21vdXNl 40303 -dXJyZWN0aW9u 40304 -KG5v 40305 -ID4NCg== 40306 -IGFnZ3Jlc3Npb24= 40307 -IGJyZWVkaW5n 40308 -LnN5bWJvbA== 40309 -aW1hbg== 40310 -QWJzb2x1dGVQYXRo 40311 -IFdITw== 40312 -X2ZsdXNo 40313 -LXJvb3Q= 40314 -YXJuYQ== 40315 -Jk0= 40316 -IGZhdGhlcnM= 40317 -IFJvY2tldA== 40318 -aXZlYXU= 40319 -IHdhbmRlcg== 40320 -IGNvbXBvcw== 40321 -IFdhcnJpb3I= 40322 -IFNlYXQ= 40323 -IENsaW5pYw== 40324 -X2ludm9pY2U= 40325 -KGRpc3BhdGNo 40326 -UHJvZHVjdG8= 40327 -YXR1cmluZw== 40328 -b3NzaWVy 40329 -IE1BWQ== 40330 -IGRhZ2dlcg== 40331 -IHNhbml0aXplZA== 40332 -IFJGQw== 40333 -IHByb3Bo 40334 -IHVyaW5l 40335 -IGdyaW5k 40336 -IEV4cGFuZGVk 40337 -ZGVzY3JpcGNpb24= 40338 -LWZ3 40339 -IEtlcnJ5 40340 -PW5hbWU= 40341 -IGNoaw== 40342 -IG5hdGlvbmFsbHk= 40343 -IHRoZWU= 40344 -SW5j 40345 -ID8+Pg== 40346 -LlJhZGlvQnV0dG9u 40347 -Lkh0dHBTZXJ2bGV0UmVzcG9uc2U= 40348 -L1k= 40349 -CWZpZWxk 40350 -IGhvbW1l 40351 -eXBlcg== 40352 -UGh5c2ljYWw= 40353 -PXY= 40354 -IGRyaXY= 40355 -IEVycm9ycw== 40356 -IGPEgw== 40357 -RGVhdGg= 40358 -IFdJTkRPVw== 40359 -IHBvZXQ= 40360 -IFNoYXJw 40361 -IEltbXV0YWJsZQ== 40362 -CWNyZWF0ZQ== 40363 -IGdlaHQ= 40364 -IFJlZm9ybQ== 40365 -YWlzZXI= 40366 -IEluaXRpYWxpemF0aW9u 40367 -IGltbXVuaXR5 40368 -LmNvbXBvc2U= 40369 -IGxhdGVuY3k= 40370 -IExlYmFub24= 40371 -IFBhcmFk 40372 -IGZ1ZWxz 40373 -IEV4aGli 40374 -Y29o 40375 -JSI+Cg== 40376 -IENMSQ== 40377 -KWluaXRXaXRo 40378 -LVph 40379 -X0NMRUFS 40380 -cmVnbg== 40381 -IGZpbmFuY2Vz 40382 -LnN0YW5kYXJk 40383 -X0NBVEVHT1JZ 40384 -LmxpYnJhcnk= 40385 -IHRyYXZlbGVycw== 40386 -X3dw 40387 -IEV2YWx1YXRpb24= 40388 -c3RhcnRpbmc= 40389 -ICkpLAo= 40390 -ZXBpc29kZQ== 40391 -IFZhcmlhbnQ= 40392 -IGRhZW1vbg== 40393 -IEp1bGlh 40394 -IE5S 40395 -IGRvdWJsZXM= 40396 -PHY= 40397 -L3J1bnRpbWU= 40398 -IGludGVycHJldGVy 40399 -IElOREVY 40400 -IEhvbG1lcw== 40401 -X0RJTQ== 40402 -IHBhZGRsZQ== 40403 -X2V4YW1wbGU= 40404 -IGZvcmVncm91bmQ= 40405 -LnJvdXRlcw== 40406 -IHNvd2ll 40407 -U1VDQ0VTUw== 40408 -IENEQw== 40409 -IEJE 40410 -Xy0= 40411 -YXN1cmVk 40412 -V3JpdGluZw== 40413 -IGN1cnJlbnRQYWdl 40414 -KGFuc3dlcg== 40415 -IEFTQ0lJ 40416 -4Kg= 40417 -IHNvY2lhbGx5 40418 -eXl5 40419 -IFNwZWNpYWxpc3Q= 40420 -KGN1c3RvbWVy 40421 -aXN0YW5p 40422 -a2VzdA== 40423 -IE1haw== 40424 -IHRobw== 40425 -LnB0 40426 -KGNvbW1lbnQ= 40427 -IENvbnZlcnRlcg== 40428 -Z2Ft 40429 -Ymlucw== 40430 -LnRlbGU= 40431 -IFZldGVyYW5z 40432 -X0FMTE9D 40433 -0L7Qu9GM0LfQvtCy0LDRgg== 40434 -aW5uYW1vbg== 40435 -O3dpZHRo 40436 -b2hs 40437 -IGZhbnRhcw== 40438 -IHN1bmc= 40439 -CUs= 40440 -KEpzb24= 40441 -IG5laWdoYm91cmhvb2Q= 40442 -IHZvdw== 40443 -IHNpbnM= 40444 -b25hY2Np 40445 -IGVwb2Nocw== 40446 -aW1hZ2Vu 40447 -LkNoYW5nZQ== 40448 -Lm15YmF0aXM= 40449 -U2Vlaw== 40450 -V0VS 40451 -566h55CG 40452 -IGludGVyZXNz 40453 -X0V2ZW50 40454 -ZWRlcmxhbmQ= 40455 -IHRlcnJpdG9y 40456 -IGNpdWRhZA== 40457 -dWNrZWQ= 40458 -IHNuYWNr 40459 -IHRyYW5zcG9ydGVk 40460 -IE1hbmlmZXN0 40461 -IERBVA== 40462 -X3RoZXRh 40463 -IHdvbnQ= 40464 -LgoKCgoKCgoKCgo= 40465 -irbmgIE= 40466 -IEVwaWM= 40467 -RGVjaw== 40468 -bHRyYQ== 40469 -X1pFUk8= 40470 -IFtdOw== 40471 -L3NjcmlwdHM= 40472 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 40473 -5oOF 40474 -IHdlZWQ= 40475 -TkJD 40476 -IHJhcGVk 40477 -IEdhdGV3YXk= 40478 -W00= 40479 -IFRpbWVvdXQ= 40480 -ZW5jaG1hcms= 40481 -LlZpZXdNb2RlbA== 40482 -IHBvcm5vcw== 40483 -IFlh 40484 -dGhyaXRpcw== 40485 -IEZseW5u 40486 -IG1lZ2E= 40487 -YWNpbg== 40488 -IHRyaWJhbA== 40489 -LmFwcGxl 40490 -IEJsbw== 40491 -w6Ju 40492 -aWJp 40493 -cm92 40494 -IExpdmVz 40495 -Xi4= 40496 -Z2V0UmVxdWVzdA== 40497 -IEVzdGFibGlzaA== 40498 -Y29udGFpbmVycw== 40499 -IHN0YXJyaW5n 40500 -IGNlbGVicml0aWVz 40501 -IFJlbGF0aXZl 40502 -IEhlaWdodHM= 40503 -IHRxZG0= 40504 -IE5vcnRod2VzdA== 40505 -aXZpYw== 40506 -CWNs 40507 -IGF1dG9tb3RpdmU= 40508 -ZW50cmlj 40509 -IGZvcnR1bmF0ZQ== 40510 -IGZpcmVwbGFjZQ== 40511 -c2V1ZA== 40512 -bmlja25hbWU= 40513 -O3M= 40514 -X0NBTA== 40515 -aGFsdA== 40516 -KG5z 40517 -X2RlbGV0ZWQ= 40518 -RGV2ZWxvcG1lbnQ= 40519 -bW92aWVz 40520 -IGlkZW50aXRpZXM= 40521 -IHByb21wdGx5 40522 -2KfZhg== 40523 -IGFudGU= 40524 -ICInLCc= 40525 -5Y+j 40526 -aW1wc2U= 40527 -IHlhcA== 40528 -VHlwZU5hbWU= 40529 -IGJpdGNo 40530 -IGFzc29jaWF0ZXM= 40531 -SEVNRQ== 40532 -LWVtcHR5 40533 -INiq 40534 -b2x2ZXJz 40535 -IHBpc3RvbA== 40536 -U2NvcGVk 40537 -YWduZXI= 40538 -J109PSc= 40539 -IElNUA== 40540 -ZXhj 40541 -IG9taXR0ZWQ= 40542 -IG1pbmRzZXQ= 40543 -IFtdKA== 40544 -IG9ybg== 40545 -X0NBTQ== 40546 -QXZn 40547 -TG9jYWxpemVkU3RyaW5n 40548 -IE5hdHVy 40549 -IGNvbXBvc2Vy 40550 -IFBsYXlpbmc= 40551 -IG92ZXJk 40552 -X3V0Zg== 40553 -LnNr 40554 -IEZvbA== 40555 -JHBhZ2U= 40556 -LE9iamVjdA== 40557 -IGJlZXM= 40558 -YWxhcnk= 40559 -YnVsbGV0 40560 -X2xpYnJhcnk= 40561 -T2ZmZXI= 40562 -bG9jYXRlZA== 40563 -IChfLA== 40564 -4oCcSGU= 40565 -IE93bmVycw== 40566 -KSkuCg== 40567 -IGJyaQ== 40568 -LkFkbWlu 40569 -a3Rpb24= 40570 -0LvRjtGH 40571 -IGVyb3RpY2k= 40572 -Q2FuY2VsbGVk 40573 -IGFncg== 40574 -cmV2aWV3cw== 40575 -X2RtYQ== 40576 -UklDVA== 40577 -IGdmeA== 40578 -bXBp 40579 -cHBv 40580 -IC8vQA== 40581 -IHVwcGVyY2FzZQ== 40582 -IGNvbW1pdHRpbmc= 40583 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 40584 -VXNlckRhdGE= 40585 -IHZhaQ== 40586 -CXNvcnQ= 40587 -IGNvbmdyYXQ= 40588 -IGRpb3hpZGU= 40589 -0LTQsA== 40590 -LmFyZWE= 40591 -IEpvc2h1YQ== 40592 -IEtvY2g= 40593 -X2JyZWFr 40594 -YXp1cmU= 40595 -aXN0aWNhbA== 40596 -X0FMUEhB 40597 -X3ZpZXdz 40598 -IGVsaW1pbmF0aW5n 40599 -T01C 40600 -ZW51bWVy 40601 -IEh5ZHJv 40602 -KCoo 40603 -RVJUSUNBTA== 40604 -IGluZXZpdGFibHk= 40605 -IHN0b2xl 40606 -LWVhc3Q= 40607 -aWVyb24= 40608 -IGxpbmdlcg== 40609 -L2RvYw== 40610 -xbo= 40611 -IEFscmVhZHk= 40612 -YXNpbw== 40613 -IC0tCg== 40614 -IGFiYnJldg== 40615 -IEF0b20= 40616 -aGlt 40617 -IElOU0VSVA== 40618 -c3Vu 40619 -4pmq 40620 -Q09OTkVDVA== 40621 -ZXJhdG9y 40622 -IE1hbm5pbmc= 40623 -IDoo 40624 -Z2Fz 40625 -PT4n 40626 -IHF1ZXJ5c2V0 40627 -O30NCg== 40628 -IFBvcHVsYXRpb24= 40629 -dXRlZFN0cmluZw== 40630 -cmVzaWRlbnQ= 40631 -X0ZPTlQ= 40632 -IFJlc3BvbmQ= 40633 -IG9ic2N1cmU= 40634 -IG9ic2VydmFibGU= 40635 -IENvbnRyaWJ1dG9ycw== 40636 -a29u 40637 -IE11c2s= 40638 -ZXhhbw== 40639 -IFR1Yg== 40640 -Qm9vdEFwcGxpY2F0aW9u 40641 -U09S 40642 -Lkhvcml6b250YWw= 40643 -LmZpbmRCeQ== 40644 -LnBvd2Vy 40645 -IHBvc2l0aXZlbHk= 40646 -dmVuaWVuY2U= 40647 -IEpvbmc= 40648 -IHdoaXN0bGU= 40649 -INC30L3QsNGH 40650 -IGxlbmRpbmc= 40651 -IGRlc3RydWN0aXZl 40652 -IG9uRGVsZXRl 40653 -YXV0aG9yaXphdGlvbg== 40654 -KCk7Pz4= 40655 -X29yaWdpbmFs 40656 -c2NpZW5jZQ== 40657 -YXRyYQ== 40658 -Pyw/LA== 40659 -IEFzYw== 40660 -IGNvbnZpbmNpbmc= 40661 -JGE= 40662 -b3JnZW4= 40663 -X0RhdGU= 40664 -IFByb3ZpZGU= 40665 -IGxvbmVseQ== 40666 -KScK 40667 -ZXhjaGFuZ2U= 40668 -Oz8+Cg== 40669 -LmZhc3Q= 40670 -U2FtcGxlcw== 40671 -TG9uZG9u 40672 -J10pDQo= 40673 -IElvbmlj 40674 -IHBlc3Nv 40675 -IEtuaWdodHM= 40676 -IFJhZg== 40677 -X2F0dHJz 40678 -IHJlcGVhbA== 40679 -Pk1haW4= 40680 -IE9yZGVyZWQ= 40681 -X05ldw== 40682 -PSIiPjwv 40683 -dXJscGF0dGVybnM= 40684 -QVRJT05BTA== 40685 -cGVlY2g= 40686 -IElkYWhv 40687 -IHByaW5jZXNz 40688 -IEN1c3RvbWVycw== 40689 -YXdheXM= 40690 -YWRi 40691 -IEJyeWFudA== 40692 -bm9uY2U= 40693 -IGFkdWw= 40694 -IGBgKA== 40695 -IGFmdGVybWF0aA== 40696 -PWRpY3Q= 40697 -dGV4dEJveA== 40698 -IHNwZXJt 40699 -IGNvdWdo 40700 -SG9y 40701 -4oCZUw== 40702 -LkNvbXBvbmVudFJlc291cmNlTWFuYWdlcg== 40703 -IHJlZ3VsYXRvcg== 40704 -IHBhcnRuZXJzaGlwcw== 40705 -L3Byb2plY3Rz 40706 -dHJ5cw== 40707 -IExhc2Vy 40708 -4p+p 40709 -IEZ1bms= 40710 -IHVuY29uc2Npb3Vz 40711 -IGNydXN0 40712 -IFRlYW1z 40713 -IEJhbm5lcg== 40714 -IEhvbmV5 40715 -bGVtcw== 40716 -IG1heFdpZHRo 40717 -UG9pbnRlckV4Y2VwdGlvbg== 40718 -ZmFkZU91dA== 40719 -LVN0 40720 -IHN0cmFuZ2Vycw== 40721 -X0dP 40722 -V3JpdGFibGU= 40723 -X0luZm8= 40724 -Lk5vbk51bGw= 40725 -YW5ub3RhdGlvbnM= 40726 -IEdE 40727 -IGVuZG9yc2Vk 40728 -CVRva2VuTmFtZQ== 40729 -IERlcGVuZGluZw== 40730 -WU5BTQ== 40731 -IE1ldGVvcg== 40732 -IEluY3JlYXNl 40733 -Lk1hbnk= 40734 -PT0o 40735 -LlVVSUQ= 40736 -X0tFUk5FTA== 40737 -IHZpZMOp 40738 -IHBx 40739 -IFF0R3Vp 40740 -IFZhcmlvdXM= 40741 -IGpvaG4= 40742 -X3BhdGNo 40743 -IHRvdXRlcw== 40744 -IEZhaWw= 40745 -IHN1cnZpdmluZw== 40746 -KCIkew== 40747 -ICAgICAgIA0K 40748 -IGltYWdlVXJs 40749 -LndvcmRwcmVzcw== 40750 -c291cmNlcw== 40751 -CWdsVmVydGV4 40752 -4oCZYQ== 40753 -IGVzY29s 40754 -UkFSWQ== 40755 -IFNuYWtl 40756 -IHF1aW50 40757 -IGxhc3Rz 40758 -IEhhcm1vbg== 40759 -IGNvaWw= 40760 -IGV4cGxvaXRhdGlvbg== 40761 -bGVlbg== 40762 -Jz4iOwo= 40763 -IFNFUlZFUg== 40764 -IEhFQURFUg== 40765 -X3ZlbG9jaXR5 40766 -IEludm9rZQ== 40767 -LnRpbWVzdGFtcHM= 40768 -IHN1bGY= 40769 -SVFVRQ== 40770 -IGluaGFiaXRhbnRz 40771 -cGhpbnM= 40772 -YXp6bw== 40773 -IG1vbm8= 40774 -TGVnZW5k 40775 -IG5vbmNl 40776 -SUZF 40777 -OyI7Cg== 40778 -LWNyZWF0ZQ== 40779 -IiIsCg== 40780 -cGVybWl0 40781 -IEltbWlncmF0aW9u 40782 -IHBhdGhuYW1l 40783 -ZmZlY3RpdmU= 40784 -4pmA4pmA 40785 -IGV4YW1z 40786 -LWV2ZW50 40787 -IFRpbGw= 40788 -W21pZA== 40789 -RklY 40790 -O2NvbG9y 40791 -KE9yZGVy 40792 -X3RyYWl0cw== 40793 -IG9yZGVyQnk= 40794 -IHN1bnQ= 40795 -IE5pY2hvbGFz 40796 -2LI= 40797 -IHN1bm55 40798 -aW5lcnM= 40799 -IGFjY2Vzc2liaWxpdHk= 40800 -IEhC 40801 -LmNvbXA= 40802 -CW9w 40803 -IG1pbm9yaXRpZXM= 40804 -ZXRoZXVz 40805 -IGNvbGxhYm9yYXRpdmU= 40806 -cHJpdA== 40807 -SElS 40808 -IHdyYXBz 40809 -CWRyYXc= 40810 -Z29k 40811 -IElY 40812 -LmFwcHM= 40813 -IE5N 40814 -IGlycmVsZXZhbnQ= 40815 -IFRpZ2Vycw== 40816 -IGRpYWc= 40817 -R1Y= 40818 -IEFjY2Vzc29yaWVz 40819 -a29udA== 40820 -IHNpbXBsaWZ5 40821 -IEZhdm9yaXRl 40822 -X3Rvb2xz 40823 -KFtdKTsK 40824 -IHRvd2Vycw== 40825 -QmVz 40826 -IGh1bnRlcg== 40827 -IHNhbG9u 40828 -KGJ1ZmY= 40829 -CWRlYnVn 40830 -IG1hbHdhcmU= 40831 -TW92aW5n 40832 -LW9wdGlvbnM= 40833 -KSsn 40834 -IExPVkU= 40835 -X1NPQ0tFVA== 40836 -X2Zpbg== 40837 -IERlbGF3YXJl 40838 -IHNoZXJpZmY= 40839 -LWludmFsaWQ= 40840 -IEZVTEw= 40841 -INC/0L7QtA== 40842 -ZWxhcw== 40843 -InN0cmluZ3M= 40844 -IFJlcHJlc2VudGF0aXZlcw== 40845 -c3VyZmFjZQ== 40846 -cmVzb2x2ZWQ= 40847 -aHRkb2Nz 40848 -KSk6DQo= 40849 -IHByZXNzdXJlcw== 40850 -IG5vcm1z 40851 -IHBsYQ== 40852 -IHN1cm5hbWU= 40853 -IHBvc3RhbA== 40854 -IERlcGFydA== 40855 -IHNsYXVnaHRlcg== 40856 -b3JpZGE= 40857 -IGhlYmJlbg== 40858 -IGRlc2Fy 40859 -Y29tcGFjdA== 40860 -X0xBTkc= 40861 -5ZCI 40862 -b3BvbHk= 40863 -X3JhZA== 40864 -IFNURE1FVEhPRA== 40865 -TGF6eQ== 40866 -ICAgCQ== 40867 -Li4uLA== 40868 -KHdlYg== 40869 -IFBvbnQ= 40870 -IGV0d2Fz 40871 -IHVwd2FyZA== 40872 -X2hhdA== 40873 -IF0sCgo= 40874 -IGJhc2VVcmw= 40875 -IHdvcnJ5aW5n 40876 -LWFkZG9u 40877 -KGdldENsYXNz 40878 -U1BJ 40879 -IGNhcHR1cmluZw== 40880 -KX0sCg== 40881 -RWZmZWN0cw== 40882 -IGNvbXBldGVudA== 40883 -IGZvdWw= 40884 -IHN1YnNjcmliaW5n 40885 -IE9CSkVDVA== 40886 -SVhFTA== 40887 -YnVja3M= 40888 -KGVkZ2U= 40889 -KHBhc3M= 40890 -IFBldGVyc29u 40891 -IGJvb2Jz 40892 -IERlbGF5 40893 -X3NxdWFyZQ== 40894 -ZWxpbQ== 40895 -b3RlcnM= 40896 -X1BD 40897 -JUU= 40898 -b25jbGljaw== 40899 -IFNWRw== 40900 -IHRvcHBlZA== 40901 -IGZpc3Q= 40902 -c21hcnQ= 40903 -IFJhbHBo 40904 -KG93bmVy 40905 -am91cnM= 40906 -IGJyb256ZQ== 40907 -IEFyZ3VtZW50RXhjZXB0aW9u 40908 -KG9yaWdpbmFs 40909 -X1NDQUxF 40910 -X2Nw 40911 -IHJlY29tbWVuZHM= 40912 -LnNldFN0eWxl 40913 -U3VyZQ== 40914 -TEFORA== 40915 -IHJlcGVhdGluZw== 40916 -TWF0dA== 40917 -LlZpc2liaWxpdHk= 40918 -IGVudGVycHJpc2Vz 40919 -LlNldHVw 40920 -KHNjZW5l 40921 -IFJlYWN0aXZl 40922 -dXJnZQ== 40923 -Ync= 40924 -LlB1dA== 40925 -cGVyc2lzdA== 40926 -LmNvb2tpZQ== 40927 -IEF1ZGk= 40928 -YHM= 40929 -c3VwcGxpZXI= 40930 -KEZvcm0= 40931 -wqE= 40932 -X3Nv 40933 -jIA= 40934 -IExlZ2lvbg== 40935 -dHRl 40936 -TmQ= 40937 -TG9zcw== 40938 -KGF0dHJz 40939 -LnNjYXR0ZXI= 40940 -IGdyb29t 40941 -IGdsaW1wc2U= 40942 -IG5haWxz 40943 -IGN1bXVsYXRpdmU= 40944 -IGZhemVy 40945 -X3NlcnZpY2Vz 40946 -Lk51bQ== 40947 -aWJpbGl0 40948 -X3Jlc29sdXRpb24= 40949 -IFR4 40950 -dW1pbml1bQ== 40951 -b3Bh 40952 -LnNjaGVkdWxl 40953 -c210cA== 40954 -4LiV 40955 -dXJyeQ== 40956 -w7xr 40957 -Z29vZw== 40958 -X3NpZ25hdHVyZQ== 40959 -LmludG8= 40960 -IFN0ZXBz 40961 -IGhvbWVvd25lcnM= 40962 -IE5TVVJM 40963 -IFBBQw== 40964 -ICAgICAgICAgICAgCgo= 40965 -PicpCg== 40966 -ZW5o 40967 -IGluY2Fw 40968 -JE1FU1M= 40969 -IG1vaW5z 40970 -IEZp 40971 -IG9mZnNlYXNvbg== 40972 -cHJlc3Npb25z 40973 -Pi48Lw== 40974 -IE1hcmtlcg== 40975 -IG9uQ2xvc2U= 40976 -TEVWRUw= 40977 -IGludGVyZmVyZQ== 40978 -IENvbGlu 40979 -IFJlc2lzdGFuY2U= 40980 -RGlzY291bnQ= 40981 -IFdlYkVsZW1lbnQ= 40982 -IGJhdGhyb29tcw== 40983 -bGVnYWN5 40984 -IENhcHR1cmU= 40985 -IGFyaXNpbmc= 40986 -ICIpOwoK 40987 -0YjQuNCx 40988 -IEluZmluaXR5 40989 -QWR2ZXJ0aXNlbWVudHM= 40990 -IENvbWluZw== 40991 -IFBST0pFQ1Q= 40992 -X1BST1RPQ09M 40993 -IHVzZURpc3BhdGNo 40994 -LmNoYW5uZWxz 40995 -IENpdGl6ZW5z 40996 -ZW50cmU= 40997 -X21w 40998 -LkNvbnN0YW50cw== 40999 -IFNlcmlhbGl6ZQ== 41000 -X0lOQw== 41001 -KGx1YQ== 41002 -IGNsYXNo 41003 -X3dpdGhvdXQ= 41004 -LmtleVNldA== 41005 -IHJlY2VpdmVycw== 41006 -5pa55rOV 41007 -KG1lbQ== 41008 -IEhvcml6b250YWw= 41009 -IGNvY2t0YWls 41010 -IGNob29zZXM= 41011 -LklubmVy 41012 -IHJlbGllZA== 41013 -b3VudGVy 41014 -ICJe 41015 -IHRlbmFudHM= 41016 -ImA= 41017 -X1BN 41018 -ZXJzZWQ= 41019 -IH19Ij48Lw== 41020 -IHByb3ZpbmNlcw== 41021 -X1JBVw== 41022 -XEFwcA== 41023 -IHByb3N0aXR1ZXI= 41024 -X2dhaW4= 41025 -LnRlbmNlbnQ= 41026 -ZmZlY3Rz 41027 -KHBr 41028 -c2t1 41029 -IHVzYWJsZQ== 41030 -RVJWRUQ= 41031 -IGFudGVubmE= 41032 -aGVh 41033 -cGxpc3Q= 41034 -X1BMVUdJTg== 41035 -0YHQuw== 41036 -Lmxvb2t1cA== 41037 -4buB 41038 -IGVubGFyZw== 41039 -IHBpc3M= 41040 -SGFt 41041 -aW1hcA== 41042 -IGludmFsaWRhdGU= 41043 -IHNpbGs= 41044 -PSIjIj4K 41045 -IEdyYXNz 41046 -IEdvYWw= 41047 -X3BkZg== 41048 -SGFuZGxlcnM= 41049 -IHN0YWNrcw== 41050 -LmdldEZ1bGxZZWFy 41051 -PVtdOwo= 41052 -6L2m 41053 -LFY= 41054 -KHNwbGl0 41055 -0YPQvdC6 41056 -IGJha2VjYQ== 41057 -IH4vLg== 41058 -cGV6 41059 -dGFpbHM= 41060 -IEdsZW4= 41061 -IHNldEltYWdl 41062 -IENvbWlj 41063 -QkxPQ0s= 41064 -CVRoaXM= 41065 -b2FkZXI= 41066 -IGNhcGl0YWxpc3Q= 41067 -X1NURVA= 41068 -KEJvb2xlYW4= 41069 -IENvcnJlY3Q= 41070 -cmluYQ== 41071 -IGNvbmNhdGVu 41072 -5a6e 41073 -KCk6Cgo= 41074 -IHVuYW5pbQ== 41075 -bGxp 41076 -YWxhcnM= 41077 -LW5l 41078 -IGRpdm9y 41079 -IEtpY2tzdGFydGVy 41080 -XS5f 41081 -PG51bWJlcg== 41082 -L21lbnU= 41083 -R1JBUEg= 41084 -dmlzaXRvcg== 41085 -IGltcHJvcGVy 41086 -X05FWFQ= 41087 -IGJpc2E= 41088 -YmFja2dyb3VuZENvbG9y 41089 -L2lucHV0 41090 -IG1vaQ== 41091 -R29hbA== 41092 -bGlxdQ== 41093 -IG1pc2NvbmR1Y3Q= 41094 -IGNvbXByaXNlcw== 41095 -YXducw== 41096 -IFBpZQ== 41097 -cmFpcw== 41098 -cm9sZXVt 41099 -IGN1cnNl 41100 -eXU= 41101 -X3BvbGw= 41102 -LmN1cnJlbnRVc2Vy 41103 -RVNI 41104 -XSlb 41105 -IHN0b3J5dA== 41106 -KT87Cg== 41107 -Kj0= 41108 -IEJ1cmc= 41109 -L2xheW91dA== 41110 -X2JhY2tlbmQ= 41111 -Oz8+PC8= 41112 -IFdoYXRzQXBw 41113 -IE1vdW50YWlucw== 41114 -dmlzaW9ucw== 41115 -Zmx1ZW5jZQ== 41116 -LmNyZWF0ZUNvbXBvbmVudA== 41117 -IFBzeQ== 41118 -Zm9yZ2V0 41119 -c3J2 41120 -X0NPTVBPTkVOVA== 41121 -IE5leHVz 41122 -ICl7 41123 -ZW5kaQ== 41124 -SU1VTQ== 41125 -IEdG 41126 -57uE 41127 -4oCUdGhhdA== 41128 -Yms= 41129 -TW96aWxsYQ== 41130 -IGRlZmVuZGVycw== 41131 -LXNldHRpbmdz 41132 -aW1taW5n 41133 -IE9QVA== 41134 -IENX 41135 -IHRoYXRz 41136 -IE9wZW5pbmc= 41137 -UmVsZWFzZWQ= 41138 -bnBt 41139 -IGhycw== 41140 -IGdyb3VwZWQ= 41141 -LyIuJA== 41142 -IEhpc3RvcmljYWw= 41143 -KCQiew== 41144 -b3ZpYw== 41145 -KHNpZ24= 41146 -IFBob3RvZ3JhcGh5 41147 -IHNpZ251cA== 41148 -X0FSQ0g= 41149 -LnRlc3RuZw== 41150 -L2FuZ3VsYXI= 41151 -UmVzdENvbnRyb2xsZXI= 41152 -c2hpdA== 41153 -dWxsZQ== 41154 -LnBhdXNl 41155 -KFtdLA== 41156 -KHF1ZXN0aW9u 41157 -aWxvZ3k= 41158 -IEV1Zw== 41159 -LWxvY2Fs 41160 -IGt2aW4= 41161 -IHJlc2VydmF0aW9ucw== 41162 -b2JpYQ== 41163 -IHN1YnNpZGlhcnk= 41164 -IGFjY3VtdWxhdGVk 41165 -IFFWYXJpYW50 41166 -IEJKUA== 41167 -IE5vcm1hbg== 41168 -IEludGVncmF0aW9u 41169 -LlZhcmlhYmxl 41170 -KFJlc291cmNl 41171 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 41172 -RXhwb3Nl 41173 -ICd9 41174 -LkNPTE9S 41175 -INGH0LjRgQ== 41176 -QWpheA== 41177 -IHRocnU= 41178 -TW92aWVz 41179 -IHByb3Bvc2l0aW9u 41180 -L3RoZW1l 41181 -TW9kZWxQcm9wZXJ0eQ== 41182 -IEF3cw== 41183 -IEFuZHJlYQ== 41184 -IE1lcmdl 41185 -LmZpbmlzaA== 41186 -KHJlcXVpcmVk 41187 -IFByZWw= 41188 -ZWxlZA== 41189 -5pON5L2c 41190 -LlRSQQ== 41191 -TUFT 41192 -IHJlYWxpc2Vk 41193 -cm9pZHM= 41194 -CWZu 41195 -cmg= 41196 -LiI8Lw== 41197 -dmlkaWE= 41198 -IGRlcHVpcw== 41199 -IEJW 41200 -TG4= 41201 -IGx1c3Q= 41202 -QXNj 41203 -CQkJCQkJCSA= 41204 -aXNsZQ== 41205 -LWNhcmU= 41206 -X0lOVg== 41207 -IERyZXc= 41208 -IHdoYXRz 41209 -IENhcGFjaXR5 41210 -UGFybQ== 41211 -X21vbml0b3I= 41212 -LnN0dWRlbnQ= 41213 -IFJOQQ== 41214 -LmVuZHN3aXRo 41215 -Ymlo 41216 -IE1MQg== 41217 -L3Byb2plY3Q= 41218 -IHJlc3Rpbmc= 41219 -c2VwYXJhdG9y 41220 -eWQ= 41221 -ZXJ0aWE= 41222 -IG1vbml0b3JlZA== 41223 -Ij4qPC8= 41224 -LkZD 41225 -IE5FV1M= 41226 -IENhbGxz 41227 -IGFkZXF1 41228 -Q2hlY2tpbmc= 41229 -ZXN0aW1hdGU= 41230 -IHJlY2FsbHM= 41231 -X2ZyZXF1ZW5jeQ== 41232 -IHVzZVJlZg== 41233 -IEdyb3Zl 41234 -IFhpYQ== 41235 -IMOt 41236 -ZXNzZW5nZXI= 41237 -LWNvc3Q= 41238 -LmZj 41239 -IEt1bWFy 41240 -LkZvY3Vz 41241 -ZWxsYW5lb3Vz 41242 -LkFsZXJ0 41243 -ZWF4 41244 -IG9yY2g= 41245 -LnBt 41246 -IGxhbmRsb3Jk 41247 -KHBvcA== 41248 -X2FjdHVhbA== 41249 -IExC 41250 -R3JhbmQ= 41251 -LnJlbmRlcmVy 41252 -IGxvYg== 41253 -Y3VzdG9tZXJz 41254 -IGNhcHR1cmVz 41255 -V0lORE9X 41256 -IGRvY2g= 41257 -IGFwb2xvZ3k= 41258 -IEphbWE= 41259 -QFs= 41260 -LnRha2U= 41261 -bm9vcA== 41262 -IGx1bQ== 41263 -IGRpZmZlcmVudGlhbA== 41264 -IGVmZmljYWN5 41265 -CUlO 41266 -X0JPWA== 41267 -X3Nk 41268 -X3J0 41269 -Y29kZXI= 41270 -b3VuY2VtZW50 41271 -aGFzQ2xhc3M= 41272 -IHJpc2t5 41273 -IEVzdGFkbw== 41274 -LURE 41275 -IENhcnNvbg== 41276 -U3VmZml4 41277 -IHRvZGE= 41278 -IFRyYWNrZXI= 41279 -IERlbGVnYXRl 41280 -YCxg 41281 -IFBhcmtpbmc= 41282 -IG5lcg== 41283 -YXpv 41284 -IEZpbGVJbnB1dFN0cmVhbQ== 41285 -IHJlY291bnQ= 41286 -cWk= 41287 -Y2tlbg== 41288 -IHNvY2lhbGlzdA== 41289 -IEludm9pY2U= 41290 -INC/0YDQvg== 41291 -JSIs 41292 -ZW5uZW4= 41293 -IHZpdm8= 41294 -IG9yZ2FuaXphdGlvbmFs 41295 -IHVuY29tbW9u 41296 -dXRhcg== 41297 -IGh1bGw= 41298 -VHVlc2RheQ== 41299 -IGFzc2Vzc21lbnRz 41300 -KGFwcGxpY2F0aW9u 41301 -IHByZW1pc2U= 41302 -U3RhcnRUaW1l 41303 -IGRr 41304 -IGludGVyZmVy 41305 -IFF1ZWVuc2xhbmQ= 41306 -IGNyZWRlbnRpYWw= 41307 -IGxlaXN1cmU= 41308 -WVo= 41309 -IENtZA== 41310 -QlVT 41311 -dXNhbg== 41312 -CXZlYw== 41313 -aW9sb2dpY2Fs 41314 -IExvdHM= 41315 -IGVubGlnaHQ= 41316 -IGZyZXNobWFu 41317 -IENPTU1BTkQ= 41318 -IEFjdGlvbkxpc3RlbmVy 41319 -dXRt 41320 -YXJpdXM= 41321 -VHdpZw== 41322 -IHN3ZXB0 41323 -LXRvb2w= 41324 -xJA= 41325 -Y2hhcHRlcg== 41326 -LWdyYWRl 41327 -IGN1cmlvc2l0eQ== 41328 -IHN1c3RhaW5hYmlsaXR5 41329 -IE1pbmVjcmFmdA== 41330 -d2VuZA== 41331 -SWZFeGlzdHM= 41332 -IEN1bHR1cmFs 41333 -IFNhY3JhbWVudG8= 41334 -TGF5ZXJz 41335 -U3Vic2NyaWJlcg== 41336 -LkdyYXBo 41337 -IGxt 41338 -ZXN0eQ== 41339 -YWR2ZXJ0 41340 -JHA= 41341 -IEhvY2tleQ== 41342 -IERFVA== 41343 -c2V0VGl0bGU= 41344 -eWFuZw== 41345 -IGJhYmU= 41346 -ZWxzaXVz 41347 -VHJhdmVs 41348 -IG1lc21v 41349 -KG1hcFN0YXRlVG9Qcm9wcw== 41350 -X1NFTA== 41351 -LXBvcA== 41352 -IGVtaXNzaW9u 41353 -4oCZLgoK 41354 -LnN3aXRjaA== 41355 -b3Rpb25z 41356 -LnBob3Rv 41357 -TFY= 41358 -YW1vZGVs 41359 -IHdvcmR0 41360 -SUdHRVI= 41361 -IFRPREFZ 41362 -T0xT 41363 -X0lERU5U 41364 -IGNvbW1lbnRpbmc= 41365 -RGF0b3M= 41366 -IGhpbGFyaW91cw== 41367 -KGFueQ== 41368 -IGRhbXA= 41369 -LWNvbnRyb2xsZWQ= 41370 -ICI8Pw== 41371 -X2JsYWNr 41372 -TmV0QmFy 41373 -LnNldFNlbGVjdGVk 41374 -Q3Nz 41375 -IHF1YXJ0 41376 -IG93bmluZw== 41377 -IEZJRUxE 41378 -LnJlbHU= 41379 -IGxpcw== 41380 -7Jqw 41381 -LlJFTEFURUQ= 41382 -IGxvaw== 41383 -IEZsaXA= 41384 -IHByZXN0aWdpb3Vz 41385 -IGRn 41386 -IElucHV0U3RyZWFtUmVhZGVy 41387 -IHVzdQ== 41388 -IGdpcg== 41389 -IGFuYQ== 41390 -X3B5 41391 -dW5uZWw= 41392 -CXN5c3RlbQ== 41393 -IGNvYXRpbmc= 41394 -IEdlbnJl 41395 -ZXJybw== 41396 -IENMSUVOVA== 41397 -IHN0cmV0Y2hlZA== 41398 -Lkhhc1ZhbHVl 41399 -Ozs7Ozs7Ozs= 41400 -54mI 41401 -IGZpbmFscw== 41402 -LmdldENoaWxkcmVu 41403 -IC0tfX0K 41404 -IENvd2JveXM= 41405 -IEVkaW5idXJnaA== 41406 -IFBsYXph 41407 -YWJlbg== 41408 -QXJ0aXN0 41409 -VVJB 41410 -IEh1Z2hlcw== 41411 -b2JiaWVz 41412 -X25vaXNl 41413 -Lk9iamVjdHM= 41414 -RXhwcmVzc2lvbnM= 41415 -IGFudGhyb3A= 41416 -JykpDQo= 41417 -KS4i 41418 -Y3JpcHRpdmU= 41419 -IHNhbG1vbg== 41420 -IHdhc3Q= 41421 -cmhv 41422 -LnRpY2s= 41423 -IGV4cGxvcmVz 41424 -IEFsZ29yaXRobQ== 41425 -Q2hhckFycmF5 41426 -4LiE 41427 -X1BBQ0tFVA== 41428 -SkU= 41429 -Il1dOwo= 41430 -Lm5vdGU= 41431 -QmFja2luZw== 41432 -IEhvbGRlcg== 41433 -cmVpY2g= 41434 -IFppb24= 41435 -L2dy 41436 -ICAgICAgICAgICAgICAgICAgIAo= 41437 -TW90aW9u 41438 -IFRyaWJ1bmU= 41439 -IGNyaXRpY2FsbHk= 41440 -IENSTQ== 41441 -IGJsb3dpbmc= 41442 -IGNvbW1pc3Npb25lcg== 41443 -Sm9l 41444 -IFRlbGV2aXNpb24= 41445 -CXByZQ== 41446 -IFRSQU4= 41447 -IFZpa2luZ3M= 41448 -IEJFVA== 41449 -d291bGQ= 41450 -LkNhcHRpb24= 41451 -IGJhY29u 41452 -aG1h 41453 -bWVyZ2Vk 41454 -IHN1YnNjcmlwdGlvbnM= 41455 -b2NjdXBpZWQ= 41456 -TGl2ZURhdGE= 41457 -IGFsbG93YW5jZQ== 41458 -cmlnZXNpbWFs 41459 -ZGRk 41460 -LmxvZ291dA== 41461 -IFRhbmc= 41462 -IHdhcm10aA== 41463 -TW9kZWxJbmRleA== 41464 -IFByYQ== 41465 -IHNjZW50 41466 -IGhhY2tlcnM= 41467 -IGlsbHVzdHJhdGU= 41468 -SWNo 41469 -IGRpYXM= 41470 -Q0FTRQ== 41471 -IFNjaQ== 41472 -JHVybA== 41473 -IE1PRFVMRQ== 41474 -dXNob3J0 41475 -bGllcnM= 41476 -IERldmljZXM= 41477 -bWluc3Rlcg== 41478 -dW5hbWU= 41479 -IHVucg== 41480 -RXhhbXBsZXM= 41481 -IHJpc2Vu 41482 -LmFp 41483 -Y2hyb20= 41484 -X3dvcmtlcg== 41485 -IGFsaWFzZXM= 41486 -TW91c2VFdmVudA== 41487 -IHNldHRlcg== 41488 -IFB1cnBsZQ== 41489 -Sm9pbkNvbHVtbg== 41490 -PWU= 41491 -VEhPT0s= 41492 -IFRvdw== 41493 -IENydXNoaW5n 41494 -IEplZGk= 41495 -IEdyaWZmaW4= 41496 -IGtvcw== 41497 -X0ZT 41498 -aW5nZXM= 41499 -c29sZXM= 41500 -KG5hbWVz 41501 -IEJpZA== 41502 -LXBvd2VyZWQ= 41503 -TXVsdA== 41504 -YW1pbGlhcg== 41505 -LmNsZWFuZWQ= 41506 -IFppbW1lcg== 41507 -CWNsZWFy 41508 -IHVuc3VwcG9ydGVk 41509 -Q2FsbGFibGU= 41510 -IHJlcHM= 41511 -YWx0ZXJu 41512 -X1JFUE9SVA== 41513 -LmdldENvbHVtbkluZGV4 41514 -X1NUT1JF 41515 -IHN1Y2h0 41516 -c3VidGl0bGU= 41517 -IHBlcmQ= 41518 -q5g= 41519 -Lk5PVA== 41520 -fT48Lw== 41521 -OmQ= 41522 -bWRp 41523 -YmluZFZhbHVl 41524 -IERlY2lzaW9u 41525 -UmV0dXJuVmFsdWU= 41526 -LGluZGV4 41527 -eGZj 41528 -IHNlcnVt 41529 -Z2V0RmllbGQ= 41530 -Q29ubmVjdGlvblN0cmluZw== 41531 -LW9iamVjdA== 41532 -LnJlY3Y= 41533 -IHVuZGVyZ3JhZHVhdGU= 41534 -LkluZnJhc3RydWN0dXJl 41535 -IEthYg== 41536 -IGFkdmlzb3J5 41537 -LXRyZWU= 41538 -IG11ZQ== 41539 -aW5mb3Jt 41540 -LmVtYmVk 41541 -IGVycm9yQ29kZQ== 41542 -bWljcm8= 41543 -IHNwYXJrZWQ= 41544 -IGltYWdlcnk= 41545 -Y29uYw== 41546 -X21pc3Npbmc= 41547 -IHN1cnBsdXM= 41548 -S1M= 41549 -CVJUSE9PSw== 41550 -VGVsbA== 41551 -cml1bQ== 41552 -IFJhZGl1cw== 41553 -cmlrYQ== 41554 -bG9zaW9u 41555 -IEhlcm4= 41556 -R2FtbWE= 41557 -IEZlZQ== 41558 -IE5hbWVk 41559 -IENhbnlvbg== 41560 -IEpTT05BcnJheQ== 41561 -IHp3ZWk= 41562 -IFNTSA== 41563 -IHNlcnZhbnQ= 41564 -Y29hbA== 41565 -IGRlbnlpbmc= 41566 -IHNwbGl0cw== 41567 -SW5jb3JyZWN0 41568 -IHRveA== 41569 -IEFuYWx5c3Q= 41570 -IGFjY3JlZA== 41571 -dWJsZQ== 41572 -IHd0 41573 -IFRyaWFs 41574 -LmV4dGVuc2lvbg== 41575 -IENhcmVlcg== 41576 -IHNlY3VyaW5n 41577 -IExpbA== 41578 -IHByb2plY3Rpb25z 41579 -IHllYXN0 41580 -TWFkZQ== 41581 -IGZvdW5kYXRpb25z 41582 -YWNpZmlj 41583 -LnZvbHVtZQ== 41584 -IG1pcnJvcnM= 41585 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 41586 -IHZpb2xhdGU= 41587 -YXJzZXJz 41588 -IHNvY2lv 41589 -IHRraW50ZXI= 41590 -IExJTks= 41591 -LmdldFNpemU= 41592 -IFdob2xl 41593 -KXZpZXdEaWRMb2Fk 41594 -CWRvbmU= 41595 -dWRlYXU= 41596 -XCI+PC8= 41597 -QW5kcmV3 41598 -ZXJi 41599 -IGbDtg== 41600 -LmNsdXN0ZXI= 41601 -IGRpc2NvdXJzZQ== 41602 -X0RFRklO 41603 -IHB1ZWRlbg== 41604 -IExPVw== 41605 -LmF2 41606 -IHByZWNh 41607 -IHF1bw== 41608 -IHZlbG9j 41609 -LCcn 41610 -IHh5eg== 41611 -CXBhZGRpbmc= 41612 -IHRvbWF0b2Vz 41613 -IEJlbnQ= 41614 -X2N1cnI= 41615 -TlNEYXRl 41616 -IGdldEN1cnJlbnQ= 41617 -IFtg 41618 -V2VkbmVzZGF5 41619 -LkJhcg== 41620 -IFZvdXM= 41621 -aW56 41622 -IFF1aW5u 41623 -ZXhjZWw= 41624 -ZG9z 41625 -IG91dGRhdGVk 41626 -T1VUSA== 41627 -IE1ha2Vy 41628 -ZXBlbmRlbmN5 41629 -IGR1bGw= 41630 -IFdpbm4= 41631 -b2dl 41632 -Y2xhdmU= 41633 -IG5vdmE= 41634 -IGF2YWw= 41635 -Q2FwdA== 41636 -IFNwb3RpZnk= 41637 -IGp1bA== 41638 -KXRhYmxlVmlldw== 41639 -IGZpbGVuYW1lcw== 41640 -IGVza29ydA== 41641 -5ZGo 41642 -IHNrZXc= 41643 -dGVyaW9y 41644 -IGZpbmFuYw== 41645 -IHRhYmxh 41646 -IFVJQg== 41647 -ICgpOg== 41648 -IERvY2tlcg== 41649 -cGVyY2VudGFnZQ== 41650 -TWVldA== 41651 -aWNoaQ== 41652 -IGludGVyaW0= 41653 -ICc9Jw== 41654 -LkpTT05PYmplY3Q= 41655 -KGZpZA== 41656 -IGRvd250 41657 -IHRyYW5zaWVudA== 41658 -IFN0ZXBo 41659 -IGlnbm9yYW5jZQ== 41660 -IENvZGVz 41661 -PScnLA== 41662 -IElDRQ== 41663 -IHRyYW5xdQ== 41664 -IEV4dGVuZGVk 41665 -IG11bmQ= 41666 -IEhPTUU= 41667 -IGtpbG9tZXRlcnM= 41668 -IGltYWdlbg== 41669 -b3V4 41670 -KHN6 41671 -WW91bmc= 41672 -dWZmZWQ= 41673 -IFdha2U= 41674 -IGFpZGU= 41675 -UFJPQw== 41676 -IFJhdA== 41677 -IExpdGg= 41678 -YmFydA== 41679 -IEFycmFuZ2U= 41680 -cHJvbXB0 41681 -0KM= 41682 -KGN0 41683 -IEludGVydmFs 41684 -ZGVwdA== 41685 -RGFuaWVs 41686 -IGZpbGxz 41687 -LnRlbnNvcg== 41688 -KHRyaW0= 41689 -IGplYWxvdXM= 41690 -RmVi 41691 -XENvbW1vbg== 41692 -IGFtZW5kbWVudHM= 41693 -X29wZXJhdG9y 41694 -X2N1c3RvbWl6ZQ== 41695 -IF1d 41696 -IGJu 41697 -IGRpc2FwcG9pbnRtZW50 41698 -IG1pbGxlbm4= 41699 -LndoZW4= 41700 -IG9iZXk= 41701 -IG9mZmVuZGVycw== 41702 -V2lsZA== 41703 -IGNlbGxGb3I= 41704 -IGFwcGFyYXR1cw== 41705 -LmFmdGVy 41706 -IEVQUw== 41707 -IGFkb3JhYmxl 41708 -b3BlcmFuZA== 41709 -KGxpc3RlbmVy 41710 -dmVhbA== 41711 -ICko 41712 -IGNhcmRpb3Zhc2N1bGFy 41713 -dXBsaWNhdGVz 41714 -cmlzdG9s 41715 -IHJlZnVzZXM= 41716 -KFFXaWRnZXQ= 41717 -IGVsZW1lbnRv 41718 -TnVtYmVyT2Y= 41719 -LmRlbGF5 41720 -Lmdyb3Vwcw== 41721 -Ij4nKw== 41722 -5Z2A 41723 -YWNlbmN5 41724 -KFVSTA== 41725 -X2hhbGY= 41726 -PWw= 41727 -IGxpc3RWaWV3 41728 -KHNlY3Rpb24= 41729 -LnRvQXJyYXk= 41730 -Ky8= 41731 -IFJvZHJpZ3Vleg== 41732 -aXN0cmVhbQ== 41733 -IGVsaWdpYmlsaXR5 41734 -Ojot 41735 -Lm5ld0luc3RhbmNl 41736 -UEI= 41737 -IEFzc2V0cw== 41738 -IENvbXBvc2l0ZQ== 41739 -IExhYnM= 41740 -IEhhbWFz 41741 -KyspOwo= 41742 -IGJsaw== 41743 -IE5lbw== 41744 -THVj 41745 -QGxvZ2lu 41746 -IHVuYXdhcmU= 41747 -Lm1ldA== 41748 -X1JFTEVBU0U= 41749 -KFNU 41750 -QU1JTA== 41751 -cmlrZQ== 41752 -ICgpewo= 41753 -KHNwcmludGY= 41754 -IEFjY291bnRz 41755 -IFZJRVc= 41756 -IEFq 41757 -44Kw 41758 -IHdoaXNr 41759 -IGlkaQ== 41760 -IHJvZGU= 41761 -IGlobg== 41762 -IEVsZW1lbnRhcnk= 41763 -UXR5 41764 -IGludHJpZ3Vpbmc= 41765 -IOWk 41766 -Sm9icw== 41767 -CW9mZnNldA== 41768 -IEFobWVk 41769 -IFRhbGliYW4= 41770 -IOiOt+WPlg== 41771 -IGluamVjdGVk 41772 -LkF1dGhlbnRpY2F0aW9u 41773 -X2xpbmVhcg== 41774 -LkRlY2ltYWw= 41775 -IGFwcGxlcw== 41776 -IHNoYXJlaG9sZGVycw== 41777 -IGJha2Vk 41778 -LmRpZmY= 41779 -IEVkZGll 41780 -b2tlcnM= 41781 -IGNvbmZyb250ZWQ= 41782 -dm9pY2Vz 41783 -IHR1cw== 41784 -IFNwaW4= 41785 -Tk9ERQ== 41786 -X1Vu 41787 -Q1RY 41788 -L2dvb2dsZQ== 41789 -VGVtcGVyYXR1cmU= 41790 -ICcnKS4= 41791 -IG1hZ25pZmljZW50 41792 -IHN0YXJ0SW5kZXg= 41793 -c2VtYmxlcw== 41794 -QW55b25l 41795 -ems= 41796 -ZWhlbg== 41797 -IERhbWU= 41798 -LnN0cmljdA== 41799 -IHJlcGxhY2Vz 41800 -IGxpbmViYWNr 41801 -IHB1c2hlcw== 41802 -IGNoZWVr 41803 -IFNoaQ== 41804 -X0JZVEVT 41805 -UkVB 41806 -4bqjbg== 41807 -X0NPTk5FQ1RJT04= 41808 -R2F0ZXdheQ== 41809 -IFRyYXZpcw== 41810 -IEFY 41811 -IEJhc2ljYWxseQ== 41812 -IFVwZ3JhZGU= 41813 -4Ko= 41814 -dGhlbWVz 41815 -ZXJtbw== 41816 -a29y 41817 -RmVtYWxl 41818 -X2F0dGFjaA== 41819 -IOyCrOyaqQ== 41820 -IHBveg== 41821 -PT09PT09PT09PT09PT0K 41822 -KHN5bWJvbA== 41823 -IFNlY3Rvcg== 41824 -X18pCgo= 41825 -X3BhZGRpbmc= 41826 -77yaIg== 41827 -IGZhYnM= 41828 -IHJhbmdlZA== 41829 -c2V0TmFtZQ== 41830 -IHBlcnJvcg== 41831 -4pc= 41832 -IEZpbGVSZWFkZXI= 41833 -IGZ1bGZpbGxlZA== 41834 -X0N1cnJlbnQ= 41835 -IGRvbWluYXRl 41836 -IHNtdWdn 41837 -UG9zdE1hcHBpbmc= 41838 -X2ZvcmNl 41839 -IGJsb2M= 41840 -IEdpYW50 41841 -KHZpZGVv 41842 -IENV 41843 -U3lzdGVtU2VydmljZQ== 41844 -IGVsZg== 41845 -IGtvbnRha3Q= 41846 -66o= 41847 -a2Vlcw== 41848 -Z3Rr 41849 -IHBhcmFtSW50 41850 -IG1hcmt1cA== 41851 -dWFsZXM= 41852 -IGFjY291bnRlZA== 41853 -IGdhbmdiYW5n 41854 -UllQVA== 41855 -IFdyb25n 41856 -IGNyZWRpdGVk 41857 -IE1FU1NBR0U= 41858 -IGZsYXdz 41859 -IGJidw== 41860 -IG1ldGFib2xpYw== 41861 -IE9FTQ== 41862 -L2V2ZW50 41863 -KENvbGxlY3RvcnM= 41864 -bW9udG9u 41865 -YXBwZWFy 41866 -IG9wdGVk 41867 -IGNoZWF0 41868 -IGRhdg== 41869 -IFByb2NlZWQ= 41870 -IOq4 41871 -YW5rZWQ= 41872 -0LjQtw== 41873 -YW5zaw== 41874 -IEhhbmc= 41875 -IENsZXI= 41876 -IGRpc2d1 41877 -IGNtYXA= 41878 -LmNsanM= 41879 -IGF1bWVudA== 41880 -bGV6 41881 -IEpvaW5lZA== 41882 -X3JlY2VpdmVk 41883 -IGFlcmlhbA== 41884 -b3RlbA== 41885 -IGdyZWV0 41886 -InM= 41887 -IEdlbmVzaXM= 41888 -IENhbGlm 41889 -cGFuaW9u 41890 -IHRhaWxvcmVk 41891 -bWFwcGluZw== 41892 -YW5kRXhwZWN0 41893 -LnRyYWNr 41894 -YXRvbXk= 41895 -IE93 41896 -dWxsYWg= 41897 -Llllcw== 41898 -IFNpbXBsZU5hbWU= 41899 -ZGJo 41900 -J2Vu 41901 -IG5vbnNlbnNl 41902 -IHBoaWxvc29waGljYWw= 41903 -KGdldENvbnRleHQ= 41904 -IGlzc28= 41905 -IEFDRQ== 41906 -c3RhcnREYXRl 41907 -IGLEmWQ= 41908 -IEFVVEhPUg== 41909 -IEdsb2Jl 41910 -IGluc2VjdHM= 41911 -X0Fs 41912 -dXNoaW5n 41913 -6K6w 41914 -L0hvbWU= 41915 -IExvY2FsRGF0ZQ== 41916 -bmVlZGVk 41917 -aGVzaXZl 41918 -IGlsbHVzaW9u 41919 -5LqM 41920 -IHRyYXQ= 41921 -eG8= 41922 -L2RldGFpbA== 41923 -X01BVENI 41924 -IGJyb2FkYmFuZA== 41925 -IHdhbA== 41926 -IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbg== 41927 -SVJFQ1RJT04= 41928 -IG5vcnRoZWFzdA== 41929 -ZXNpdW0= 41930 -IENsaWVudGU= 41931 -dWxhbmNl 41932 -bnR5 41933 -IHRlY24= 41934 -RGV2aWNlcw== 41935 -IGdyYWlucw== 41936 -IE9n 41937 -IFNFTA== 41938 -dWRpYW50 41939 -ICsrOwo= 41940 -IGV4cGxhbmF0aW9ucw== 41941 -b2Njbw== 41942 -IGRpZXRz 41943 -IGNvaG9ydA== 41944 -KGNvbnRyb2xsZXI= 41945 -Lkl0ZXJhdG9y 41946 -LXJpY2g= 41947 -cm9jZXNz 41948 -R0Q= 41949 -IGNhcmJvaHlkcg== 41950 -IGZyaWVk 41951 -IEVtcGxveW1lbnQ= 41952 -7J6l 41953 -IExlb25hcmQ= 41954 -XyR7 41955 -cXVhcmVz 41956 -IGNvbXBhbmlvbnM= 41957 -IHBhcmlz 41958 -IHN0aW11bGF0aW9u 41959 -IFpvbw== 41960 -IHJlbGV2YW5jZQ== 41961 -IENvbG91cg== 41962 -IHNwZWFy 41963 -b3Rpb25hbA== 41964 -IExpdGU= 41965 -IEtvc3Rlbg== 41966 -IMOz 41967 -X2F0dGFjaG1lbnQ= 41968 -b3JwaGlj 41969 -IGRhbWl0 41970 -IGRsZw== 41971 -IHRocml2ZQ== 41972 -Q0hBTkdF 41973 -IEFwcGFyZW50bHk= 41974 -IGF0dWFs 41975 -IHJvb3RlZA== 41976 -KGltYWdlcw== 41977 -YXdp 41978 -YXJpYXQ= 41979 -IGNoZXJyeQ== 41980 -U1RBVElD 41981 -bW50 41982 -IFVzZXJJZA== 41983 -aWxsZXQ= 41984 -IEhpc3Bhbmlj 41985 -IG5haw== 41986 -IGNlbnRybw== 41987 -IGRpbXM= 41988 -X2luaXRpYWxpemU= 41989 -xLFr 41990 -IENlbnRlcnM= 41991 -UkVO 41992 -IGV2b2x1dGlvbmFyeQ== 41993 -IFRvcGljcw== 41994 -X2RhbWFnZQ== 41995 -ZW1lcg== 41996 -IHJ1bmQ= 41997 -IHB1bmlzaGVk 41998 -IGN1Ymlj 41999 -ZmFpcg== 42000 -W107Cgo= 42001 -IGluc3RhbnRpYXRl 42002 -IG92ZXJzZWU= 42003 -LWRlbGV0ZQ== 42004 -dW50ZWVy 42005 -c3RhcnRUaW1l 42006 -IFBpcGVsaW5l 42007 -X0dBTUU= 42008 -IENpcg== 42009 -CU51bGw= 42010 -LkZvcm1hdHRpbmc= 42011 -dWN1bWJlcg== 42012 -IFJpZGU= 42013 -IHpvbw== 42014 -IGNoZWNrZXI= 42015 -5ZCM 42016 -PUM= 42017 -IGdyaXQ= 42018 -Iik7Ly8= 42019 -X3h5 42020 -IERlY2xhcmF0aW9u 42021 -IGNhbGxhYmxl 42022 -Rm9v 42023 -IExpc3RJdGVt 42024 -IGluYWNjdXI= 42025 -bWxpbg== 42026 -CURhdGE= 42027 -IGV2b2x2aW5n 42028 -YXdhbg== 42029 -IGNhZmU= 42030 -Zm9saw== 42031 -X0lEWA== 42032 -IEFueXRoaW5n 42033 -IFBhbGVzdGluZQ== 42034 -IEdyaWRWaWV3 42035 -IGNvbG9ueQ== 42036 -IEdlcm1hbnM= 42037 -KCs= 42038 -LnBpZA== 42039 -LmpzeA== 42040 -IFN1cGVyaW9y 42041 -Q2hyaXN0aWFu 42042 -IExlY3Q= 42043 -CUdhbWU= 42044 -IGluc3RydW1lbnRhbA== 42045 -QW5pbWF0aW9ucw== 42046 -0LTQsNC7 42047 -IE1vc2Vz 42048 -CQkNCgkJDQo= 42049 -enM= 42050 -a3Rl 42051 -5Lia 42052 -X0RJU1Q= 42053 -Yml0bWFw 42054 -ZEI= 42055 -IHBlcnNpc3RlbmNl 42056 -0YDQvtGB 42057 -JGw= 42058 -QnJvbg== 42059 -IHt8 42060 -X2NoYXJ0 42061 -IENvbnN1bQ== 42062 -IGhlbXA= 42063 -ICIpKQo= 42064 -IGF0dGFja2Vycw== 42065 -IGtub3dsZWRnZWFibGU= 42066 -IGNldA== 42067 -IHZpcnVzZXM= 42068 -J0k= 42069 -IHBpdGNoZXI= 42070 -IHN3ZWVwaW5n 42071 -PWxpc3Q= 42072 -YXB0b3Bz 42073 -LmRlcHRo 42074 -IGluc3RydWN0ZWQ= 42075 -IFJ1cw== 42076 -YmVuaGF2bg== 42077 -INC40L0= 42078 -U3BvcnRz 42079 -IG9uc2V0 42080 -5p2D 42081 -LlJFRA== 42082 -X3Np 42083 -IFBTVA== 42084 -Lm9uQ2hhbmdl 42085 -PnRhZw== 42086 -IFJvaA== 42087 -X2NoYXJhY3Rlcg== 42088 -IExhd3M= 42089 -IEJhY2hlbG9y 42090 -X3N3YXA= 42091 -LnJlYWN0aXZleA== 42092 -IHJld2FyZGluZw== 42093 -TWVkaXVt 42094 -LVs= 42095 -IFJlY2VudGx5 42096 -Sm9pbnQ= 42097 -cGFydGl0aW9u 42098 -IE1pbnV0ZXM= 42099 -IGluZG8= 42100 -IGFic29yYmVk 42101 -IEdO 42102 -X0lORA== 42103 -IHNhYmVy 42104 -U3Bhd24= 42105 -b3V0cHV0cw== 42106 -IEplZmZyZXk= 42107 -IG1lZGlldmFs 42108 -aGVk 42109 -R3VpZGU= 42110 -IHBzeWNobw== 42111 -IGdsYW0= 42112 -RWxpbQ== 42113 -w6RkY2hlbg== 42114 -X3BsYWlu 42115 -IFNhdQ== 42116 -LWZvdXI= 42117 -IGFuYWx5emluZw== 42118 -UVVFUlk= 42119 -IHRvbWF0bw== 42120 -X2J1dHRvbnM= 42121 -VkVO 42122 -LnNldFN0YXR1cw== 42123 -LlVybA== 42124 -KwoK 42125 -IGNvbXBsYWluaW5n 42126 -ZGVncmVl 42127 -Y29uZmlybWVk 42128 -IHN1YnQ= 42129 -cGFyc2Vk 42130 -IHRvcnF1ZQ== 42131 -IHRyb3VibGVk 42132 -IFRBUkdFVA== 42133 -IHRyYWRlbWFya3M= 42134 -IENvb3JkaW5hdGU= 42135 -IFZpdg== 42136 -IC8vfQoK 42137 -IGFwcsOocw== 42138 -LmdldFBvc2l0aW9u 42139 -KEtleUNvZGU= 42140 -IFNpbHZh 42141 -IG1ldGVvcg== 42142 -IGVuZG9yc2VtZW50 42143 -T3ZlcnZpZXc= 42144 -IFBvc3M= 42145 -LkluamVjdA== 42146 -IGV2ZW5seQ== 42147 -IHZpc3VhbGl6YXRpb24= 42148 -IHdjaGFy 42149 -IEhETUk= 42150 -IGZ1bmN0 42151 -aWNrbmFtZQ== 42152 -JywnJywn 42153 -IGZvcndhcmRz 42154 -TWFuYWdlZE9iamVjdA== 42155 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 42156 -CXNlcnZlcg== 42157 -IE91dGxvb2s= 42158 -IENocm9uaWNsZQ== 42159 -IGR1YmJlZA== 42160 -IGRvaw== 42161 -IFdlYXI= 42162 -LkFM 42163 -cGFyZW4= 42164 -LkludGVyZmFjZQ== 42165 -SW50ZXJmYWNlcw== 42166 -LmNvZA== 42167 -IGRpYg== 42168 -Lkdsb2JhbGl6YXRpb24= 42169 -IEFjYWRlbWlj 42170 -IGFzc21z 42171 -QXV0b20= 42172 -IGx3 42173 -IE5X 42174 -ICYmDQo= 42175 -IHByb2JsZW1h 42176 -IE1hbnVmYWN0dXJpbmc= 42177 -bGltaXRz 42178 -LW1vYmlsZQ== 42179 -IGZpbG1l 42180 -L21hcA== 42181 -IGRvaXQ= 42182 -IEluaw== 42183 -IHN1ZWQ= 42184 -LmFycg== 42185 -IHVuZGVybWlu 42186 -IFByb2M= 42187 -Y3JvbGxWaWV3 42188 -X18k 42189 -IHNpZGV3YWxr 42190 -KHRoYXQ= 42191 -4Li3 42192 -W3E= 42193 -Z3JhbW1hcg== 42194 -IHTDqw== 42195 -cXVpdG8= 42196 -IHNwaXJhbA== 42197 -ZXh0ZW5kZWQ= 42198 -IGZvY2Fs 42199 -IGRpZ2dpbmc= 42200 -cGFz 42201 -IFRhbGw= 42202 -LnByb3h5 42203 -aXR1cmVz 42204 -VFJBQ1Q= 42205 -IFJlYWxt 42206 -IGZlZGVy 42207 -IG9yaWVudGVk 42208 -IEFsdGVybmF0aXZl 42209 -IG93ZQ== 42210 -IHNvdXJjZWQ= 42211 -aW5rZXI= 42212 -LmRldA== 42213 -U2Vw 42214 -IFF1aQ== 42215 -IFBhbG1lcg== 42216 -KF8s 42217 -c2FtcGxlcw== 42218 -b3llcg== 42219 -dWxsYW4= 42220 -cXVleg== 42221 -RWRnZXM= 42222 -IHNob3V0 42223 -IEFjaGll 42224 -IGhhYXI= 42225 -X0NvbnN0cnVjdA== 42226 -IHByZW1hdHVyZQ== 42227 -IHJldmVydA== 42228 -JykuCg== 42229 -IHNjaG4= 42230 -ZmlsdGVyZWQ= 42231 -bnVsbHB0cg== 42232 -U2F2ZWQ= 42233 -aXRlY3R1cmU= 42234 -Q0xB 42235 -IHZs 42236 -c3RlbGw= 42237 -CU1l 42238 -IExpcA== 42239 -bmF0aW9uYWw= 42240 -IHdob2xseQ== 42241 -IHNwcmluZ3M= 42242 -LlRpbWVy 42243 -CXNyYw== 42244 -ZWxzZW4= 42245 -5YW2 42246 -IGNvbW11bmljYXRpbmc= 42247 -IFF1aXo= 42248 -IHRlbmc= 42249 -IGdleg== 42250 -IE91dHNpZGU= 42251 -LlNpZ24= 42252 -KGNz 42253 -IGRpc3B1dGVz 42254 -IFdlaXNz 42255 -YW5uZXM= 42256 -Pk5v 42257 -IEJhY2g= 42258 -LnJlbW92ZUFsbA== 42259 -cmVmZXI= 42260 -L2Rhc2hib2FyZA== 42261 -IEFqYXg= 42262 -SW5kZXhDaGFuZ2Vk 42263 -IFdlYWs= 42264 -JyIK 42265 -IHNpZ2h0cw== 42266 -YWNjZXNzVG9rZW4= 42267 -IEpvaQ== 42268 -KGRvbWFpbg== 42269 -CWN2 42270 -IGNvbnRpbnVhdGlvbg== 42271 -IHBsdW0= 42272 -YWRpcg== 42273 -LnNldE1lc3NhZ2U= 42274 -IO+8jA== 42275 -IHN3YWxsb3c= 42276 -IExhbXA= 42277 -IHF3 42278 -IHV1 42279 -Q29pbg== 42280 -dWJpYw== 42281 -IERlYWxz 42282 -cmFjZQ== 42283 -IGRpY3RhdG9y 42284 -IG1lbWU= 42285 -dHVybmVk 42286 -IEp1bGll 42287 -LmdyaWRDb2x1bW4= 42288 -IHB1cHB5 42289 -IHBhbQ== 42290 -ICl7DQo= 42291 -IGludml0aW5n 42292 -IGZyZW5jaA== 42293 -dmlt 42294 -IHdyYXBwaW5n 42295 -ICMtfQo= 42296 -KFst 42297 -RWFybHk= 42298 -IHNoaW55 42299 -LmZhY2Vz 42300 -IHJlYmVsbA== 42301 -YWJjZGVm 42302 -w6RsdA== 42303 -IGVzdGltYXRpb24= 42304 -cGh5cw== 42305 -bG9zdXJlcw== 42306 -X1JFTA== 42307 -IGV4Y2x1c2lvbg== 42308 -IFNreXBl 42309 -d2Vpc2U= 42310 -LXN0b3A= 42311 -bm90aGluZw== 42312 -IEVnZw== 42313 -aXNvcnM= 42314 -UmljaGFyZA== 42315 -IGNvdW5zZWxpbmc= 42316 -IGNvbW1lbQ== 42317 -IFFNZXNzYWdlQm94 42318 -IFN5bmQ= 42319 -IEZyb3N0 42320 -IENvbXBldGl0aW9u 42321 -IEF3YWtl 42322 -IHRlZA== 42323 -aWNpb25lcw== 42324 -IERldkNvbXBvbmVudHM= 42325 -VkVSVElTRU1FTlQ= 42326 -b3R0aQ== 42327 -LnJ1bm5lcg== 42328 -IHVuaXF1ZWx5 42329 -LmZsYWc= 42330 -CXJz 42331 -X2dlbmVyaWM= 42332 -IGBgYAo= 42333 -QUNISU5F 42334 -IG1laW4= 42335 -KEFwcGxpY2F0aW9u 42336 -KGJy 42337 -IHJhdGlvcw== 42338 -Oiw= 42339 -IFhDVGVzdA== 42340 -dXN0YWluYWJsZQ== 42341 -LXd3dw== 42342 -aXRsZXM= 42343 -X1RFTVA= 42344 -IHN5c3Q= 42345 -dW1lcmljVXBEb3du 42346 -CWFzc2VydFRydWU= 42347 -IHdm 42348 -LnBlZWs= 42349 -IEJ1bGc= 42350 -IHRlcnJpZnlpbmc= 42351 -Lk1PREU= 42352 -IEdX 42353 -w6Fy 42354 -IGZpYw== 42355 -IGNvbW1pdG1lbnRz 42356 -LXRlY2g= 42357 -IExpcXVpZA== 42358 -b3Bleg== 42359 -emhlaW1lcg== 42360 -YcOxYQ== 42361 -LW1lZGlh 42362 -KGFuaW1hdGVk 42363 -X2dvYWw= 42364 -IGd1bQ== 42365 -eXN0b25l 42366 -LlNFVA== 42367 -IFdlbmQ= 42368 -c2V0Q2VsbFZhbHVl 42369 -IG1zZ3M= 42370 -Y2FzaA== 42371 -QUxMT0M= 42372 -L2F3cw== 42373 -IG1pY3Jvd2F2ZQ== 42374 -LlBvaW50ZXI= 42375 -CUNvbnNvbGU= 42376 -X3NvcnRlZA== 42377 -IEZpbGlw 42378 -UHJvZA== 42379 -IC8vITw= 42380 -aW5ncm91cA== 42381 -IGtz 42382 -X1RSSQ== 42383 -IHRlYXNwb29u 42384 -IEFUVA== 42385 -IHJlY292ZXJpbmc= 42386 -IEdMT0JBTA== 42387 -LlBhcg== 42388 -IC8+Owo= 42389 -IG1hcmJsZQ== 42390 -dWxhdG9ycw== 42391 -IEN5Y2xl 42392 -IGhlcmJz 42393 -X21ldHJpYw== 42394 -KSE= 42395 -X0NMT0NL 42396 -X0J1dHRvbg== 42397 -SGFycnk= 42398 -6L+b 42399 -IHN0cmFpbnM= 42400 -IEFwcEJhcg== 42401 -IENoYW4= 42402 -L3ZpZGVv 42403 -IGJhbQ== 42404 -LlByb2dyZXNz 42405 -JGY= 42406 -bGVtZW4= 42407 -IGlycmVndWxhcg== 42408 -IER1bmNhbg== 42409 -IE1pbnQ= 42410 -LXZpZGVv 42411 -4Ka+ 42412 -w7N3bg== 42413 -IEVNUFRZ 42414 -IHN0YWNrZWQ= 42415 -IEhB 42416 -X2N1dA== 42417 -IHdoZXJlaW4= 42418 -IFdheXM= 42419 -KGNvdW50ZXI= 42420 -6K+V 42421 -Rm9ybUdyb3Vw 42422 -IGJsZXc= 42423 -Y291cnNlcw== 42424 -IHByb2R1Y3Rvcw== 42425 -cnlz 42426 -IFJlc3Ry 42427 -IHN0eWxpbmc= 42428 -PnM= 42429 -IHBpdg== 42430 -IGl0ZXJ0b29scw== 42431 -Z2V0UmVwb3NpdG9yeQ== 42432 -IElr 42433 -X2RldmljZXM= 42434 -bGF5dWk= 42435 -IGhhbGZ3YXk= 42436 -IGZyYW7Dpw== 42437 -IHR1bmluZw== 42438 -T0E= 42439 -X05vZGU= 42440 -YXJkZQ== 42441 -IGZpZXJjZQ== 42442 -bGljdGVk 42443 -Iw0K 42444 -IGJyZWFrdGhyb3VnaA== 42445 -IEVyaWs= 42446 -IGJyaWRl 42447 -IC4i 42448 -Y3VsdXM= 42449 -aW5zaWRl 42450 -IEluZGlhbmFwb2xpcw== 42451 -IEVF 42452 -IHlvZw== 42453 -dXJyZXQ= 42454 -LmZz 42455 -LmdyYWQ= 42456 -X2NhcmRz 42457 -X2FjY3VyYWN5 42458 -X2VwaQ== 42459 -cXVlZGE= 42460 -L29yZw== 42461 -6aqM 42462 -IGNvbXB0ZQ== 42463 -KSlb 42464 -T3V0c2lkZQ== 42465 -R3JlYXRlcg== 42466 -IFJlbmRlcmVy 42467 -LmFjdG9y 42468 -QWNjb3VudHM= 42469 -SWRsZQ== 42470 -X2hvdXJz 42471 -ZXJuZXI= 42472 -Sm9pbmVk 42473 -IG1lbmo= 42474 -cmVxdWlyZXM= 42475 -IE9QRVI= 42476 -LnJlbW92ZUNoaWxk 42477 -CXNw 42478 -IGVzc2U= 42479 -cmlmdA== 42480 -eEZF 42481 -IFNoYWtlc3BlYXJl 42482 -X19fX19fX19fX19f 42483 -IGJ1ZGdldHM= 42484 -TW9kZWxTdGF0ZQ== 42485 -ZmlsbGFibGU= 42486 -LWNvbXBvbmVudA== 42487 -b2Nvcw== 42488 -IEJVVFRPTg== 42489 -L2lv 42490 -LG91dA== 42491 -c21z 42492 -VGhvbWFz 42493 -IEFybWVk 42494 -cmVzdW1l 42495 -IHJvdGF0aW5n 42496 -IFZhdWx0 42497 -IHNldXM= 42498 -Ligq 42499 -IGFtaW5v 42500 -IFtdKTsKCg== 42501 -IHByb3ZvYw== 42502 -bm94 42503 -LkdldEVudW1lcmF0b3I= 42504 -PT09PT09PQo= 42505 -5paZ 42506 -X3Njcm9sbA== 42507 -IGZpbG1lZA== 42508 -IFNvY2k= 42509 -Z2Fw 42510 -Z3Jv 42511 -Vm90ZQ== 42512 -IkJ1dA== 42513 -X1JD 42514 -QW5pbWFs 42515 -woA= 42516 -aWJpbGU= 42517 -IGF3YWtlbg== 42518 -b3Jlc3Q= 42519 -aW5qYQ== 42520 -IEl2YW4= 42521 -KENvbW1hbmQ= 42522 -ICoqKioq 42523 -zrc= 42524 -IGt2aW5kZXI= 42525 -L2hlbHBlcnM= 42526 -X2Nhc2Vz 42527 -dGc= 42528 -7IS4 42529 -UmVnaXN0ZXJlZA== 42530 -CXBhc3M= 42531 -X2RpZ2l0cw== 42532 -IGNvbnRvdXI= 42533 -IGluZmFudHM= 42534 -IGp1c3RpZmljYXRpb24= 42535 -IEZvcnR1bmF0ZWx5 42536 -Q29udHI= 42537 -IG9uQ3JlYXRlVmlldw== 42538 -X1NBTVBMRQ== 42539 -IGFsbG93TnVsbA== 42540 -IG51ZA== 42541 -IGZldGNoZWQ= 42542 -X2VxdQ== 42543 -IFVuYWJsZQ== 42544 -PVwiIg== 42545 -PnsK 42546 -IGNvbW1pdHRlZXM= 42547 -aXN0ZW1h 42548 -KyIu 42549 -w61hbg== 42550 -bWFudA== 42551 -IHNvdXRoZWFzdA== 42552 -77yMCg== 42553 -ZGlhbG9ncw== 42554 -UFJPSkVDVA== 42555 -Y2hhcmdlcg== 42556 -LXBvcnQ= 42557 -KHV1aWQ= 42558 -LmV4cG9ydA== 42559 -U2l4 42560 -IFJQ 42561 -UHJlbQ== 42562 -IGNvbnNjaWVuY2U= 42563 -IG1hcmdpblJpZ2h0 42564 -X2Rpc3RyaWJ1dGlvbg== 42565 -eWFtbA== 42566 -cmVzaXppbmc= 42567 -RG9jaw== 42568 -IExvY2F0aW9ucw== 42569 -R1k= 42570 -U2VlZA== 42571 -QlVGRkVS 42572 -b3NzaXA= 42573 -dWxsZW4= 42574 -VGhpbmdz 42575 -LXNlbGY= 42576 -LnBvbGw= 42577 -UExBWUVS 42578 -IOWu 42579 -R1JPVVA= 42580 -IEF3YXk= 42581 -IGdvc3BlbA== 42582 -eGZk 42583 -TWFyeQ== 42584 -IFBvcnRhYmxl 42585 -VFVSRQ== 42586 -IHV0aWxpcw== 42587 -IHNlaXQ= 42588 -IHN0cmFuZA== 42589 -IHRyYW5zYw== 42590 -IChe 42591 -IEFsZnJlZA== 42592 -Lm1lbQ== 42593 -LmNpcmNsZQ== 42594 -IH4v 42595 -Zm9yY2luZw== 42596 -IHJpb3Q= 42597 -cHJveA== 42598 -VEhPTg== 42599 -aXphY2nDs24= 42600 -IE5J 42601 -cm9zdA== 42602 -IGRpc3Bybw== 42603 -X2luc3RhbmNlcw== 42604 -77yM4oCc 42605 -b2dyYXBoZXI= 42606 -ZW5kYXM= 42607 -IElzYWFj 42608 -IFBpbmU= 42609 -L2Rpcw== 42610 -IGNvbG9yV2l0aA== 42611 -aXRlcmF0ZQ== 42612 -X3N0cmlkZQ== 42613 -IHB1bnRv 42614 -LkV2ZW50QXJncw== 42615 -KGNlbnRlcg== 42616 -IG5laWdoYm9yaW5n 42617 -IFByaXNvbg== 42618 -IE1lc3Nlbmdlcg== 42619 -IGVwaWRlbWlj 42620 -ZGFv 42621 -X2NvbXBsZXg= 42622 -IGdyYXZlbA== 42623 -X0RJUA== 42624 -w6ltZW50 42625 -IEFyaQ== 42626 -X2JpdG1hcA== 42627 -LnF1aXQ= 42628 -KHZhbGlk 42629 -IHBlbmQ= 42630 -IHJlc3BpcmF0b3J5 42631 -IHJlYm91bmQ= 42632 -RGVmYXVsdFZhbHVl 42633 -44Ot 42634 -IGNvbW1pdHM= 42635 -LnRlc3Rz 42636 -X2Zy 42637 -aXRldA== 42638 -LnNm 42639 -IHNwYWNlY3JhZnQ= 42640 -Y3JpdGljYWw= 42641 -IGRlcHJlc3NlZA== 42642 -IEFueU9iamVjdA== 42643 -IHVuYg== 42644 -IGRpc2Nlcm4= 42645 -KG15c3Fs 42646 -TGF0aW4= 42647 -IEJvZw== 42648 -IFdpbGRsaWZl 42649 -VG9GaWxl 42650 -aW94aWQ= 42651 -QFJlc3RDb250cm9sbGVy 42652 -ICIkKA== 42653 -IDw8Ig== 42654 -IGRlZmVjdHM= 42655 -IGRhdHVt 42656 -aGlu 42657 -IHJlYWxpemFy 42658 -YW55YWh1 42659 -IFNpZw== 42660 -QERhdGE= 42661 -YWRhcHRpdmU= 42662 -IENhdGhlcmluZQ== 42663 -LmNy 42664 -IENPT0tJRQ== 42665 -IHBpY3R1cmVk 42666 -IEZpZ2h0ZXI= 42667 -UXVlcnlhYmxl 42668 -IEFueXdheQ== 42669 -IEdMRlc= 42670 -X25hbWVzcGFjZQ== 42671 -X2Z0 42672 -IF0p 42673 -T3JnYW5pemF0aW9u 42674 -IGNvbnN0aXR1dGVz 42675 -IHF1YW5k 42676 -KGNodW5r 42677 -Ii8+DQo= 42678 -IExha2Vz 42679 -bWFpbndpbmRvdw== 42680 -Q2FydGh5 42681 -c3Bpbg== 42682 -KGNzdg== 42683 -OnJlZA== 42684 -LWNvbW1lcmNl 42685 -4Li5 42686 -IGRpc2NvdmVyaW5n 42687 -IGVjbw== 42688 -X2ZhYw== 42689 -aW5jZXRvbg== 42690 -IEdyZWVucw== 42691 -and0 42692 -2LU= 42693 -IEJyb25jb3M= 42694 -IEdvb2Rz 42695 -KEdUSw== 42696 -IHJldHVyblZhbHVl 42697 -IHNpZW1wcmU= 42698 -IG5ldXRy 42699 -d2VudA== 42700 -IE5hdGFs 42701 -IGVudGh1c2lhc3RpYw== 42702 -4buN 42703 -Rk4= 42704 -L2RhdGFiYXNl 42705 -Q2F0YWxvZw== 42706 -IGJydW4= 42707 -IEthc2g= 42708 -X1Bs 42709 -aXNjcmlt 42710 -LHdpZHRo 42711 -IGlubWF0ZXM= 42712 -QXNzaWdubWVudA== 42713 -IEhhdmVu 42714 -IHBsYXlncm91bmQ= 42715 -ZXhhbQ== 42716 -QENvbnRyb2xsZXI= 42717 -dWxpYXI= 42718 -LmdldFBhcmVudA== 42719 -ICI7Cgo= 42720 -OnNpemU= 42721 -aXNzb3Jz 42722 -IGZpcw== 42723 -IGFsYw== 42724 -ZW5zYXRpb24= 42725 -IE5peG9u 42726 -IG1pZ2h0eQ== 42727 -LXN0cg== 42728 -X3NwZWNpYWw= 42729 -X0FEQw== 42730 -IFR3aWc= 42731 -dW1ibGluZw== 42732 -LWFkZHJlc3M= 42733 -IGhlcm9pbg== 42734 -WVRF 42735 -ICAgICAgICAgICAgICAgICAK 42736 -RnJpZW5k 42737 -IGF2ZQ== 42738 -IFBORw== 42739 -IEt1cmRpc2g= 42740 -RGF0YVNldENoYW5nZWQ= 42741 -IGJsYWRlcw== 42742 -YnJhbA== 42743 -U3RlYW0= 42744 -IHNpZ3U= 42745 -SVJUVUFM 42746 -YWNvcw== 42747 -VURQ 42748 -KGRhdGFiYXNl 42749 -aGVj 42750 -IFN0cmluZ3M= 42751 -X3NjYWxhcg== 42752 -CWRlc2M= 42753 -IFRMUw== 42754 -OyIK 42755 -IENvcmJ5bg== 42756 -U2ltcGxlTmFtZQ== 42757 -dWVsbA== 42758 -IEVudHJl 42759 -ZWxsaXRlcw== 42760 -LXBsYWNl 42761 -IGZyYW5rbHk= 42762 -IEVyZg== 42763 -Q0VM 42764 -IHBhw61z 42765 -IGhlZGdl 42766 -IGxhdGVudA== 42767 -IElSUQ== 42768 -IEhlcmFsZA== 42769 -IFByZWM= 42770 -67O0 42771 -LlRFWFQ= 42772 -U2FsYXJ5 42773 -IGF1dHVtbg== 42774 -IHRyYXZhaWw= 42775 -LlN1bQ== 42776 -IGNhcmVk 42777 -TW9y 42778 -IGludHVpdGl2ZQ== 42779 -IGpvdXJuYWxz 42780 -X0lU 42781 -IFRyb3U= 42782 -5Lyg 42783 -SGFzQ29sdW1uTmFtZQ== 42784 -Q29tcG9zaXRl 42785 -IHNwaWNl 42786 -X2Rpc2s= 42787 -X0NPREVT 42788 -IEludHJvZHVjZWQ= 42789 -aW9uYQ== 42790 -IG51ZXN0cmE= 42791 -b2N0 42792 -ICAgIAogICAgCiAgICAK 42793 -KHBhcmFtZXRlcg== 42794 -IHN0dWRpb3M= 42795 -IHByb2plY3RJZA== 42796 -IGJkc20= 42797 -LlNxbENsaWVudA== 42798 -aW1pemVy 42799 -IENBUkQ= 42800 -K3Q= 42801 -YWFu 42802 -LnNvbA== 42803 -X0FkanVzdA== 42804 -IHJpZ2h0ZW91cw== 42805 -IExvZ2dpbmc= 42806 -LmZpbHRlcnM= 42807 -X1RBQg== 42808 -CXN5cw== 42809 -cm9waGlj 42810 -b3RoZXJhcHk= 42811 -IEJyb3dzZQ== 42812 -a2V5Ym9hcmQ= 42813 -Uk9O 42814 -K1w= 42815 -cm9wcGVk 42816 -IGV4dGVuc2l2ZWx5 42817 -Zms= 42818 -IGxpbWU= 42819 -eWVhcnM= 42820 -RXhj 42821 -IHNwaA== 42822 -IGNoZWF0aW5n 42823 -YW5kcm8= 42824 -w61v 42825 -IHByaW5jZQ== 42826 -b2lyZQ== 42827 -IERlc3RpbmF0aW9u 42828 -IENvbnZlcnRz 42829 -IHVwc3RyZWFt 42830 -b2xlZA== 42831 -IHNlcnZhbnRz 42832 -IHNlbWFudGlj 42833 -IGNydW5jaA== 42834 -IGV2ZW50dWFs 42835 -cnVubmVy 42836 -L2Vycm9y 42837 -U3Bpbg== 42838 -IHNlY3JldGx5 42839 -IGFzc2VtYmxl 42840 -LlBlcnNvbg== 42841 -ZW5kZXJyb3I= 42842 -Xzw= 42843 -IHBlbmRhbnQ= 42844 -U2xlZXA= 42845 -IENoZW1pc3RyeQ== 42846 -IGJvc3Nlcw== 42847 -bGs= 42848 -KSkpLAo= 42849 -QmxvY2tseQ== 42850 -REVWSUNF 42851 -IHJlZmxlY3Rpbmc= 42852 -IGFtcGxl 42853 -TWlsbGlzZWNvbmRz 42854 -IFByZXNpZGVudGlhbA== 42855 -IHVzdWFyaW9z 42856 -IE5a 42857 -IFNhbGFyeQ== 42858 -IEFtYW5kYQ== 42859 -X25w 42860 -anVyeQ== 42861 -IGvDtm4= 42862 -IHRoZXJhcGlzdA== 42863 -IGhvbW9zZXh1YWw= 42864 -IERyYWtl 42865 -LXdpbmRvdw== 42866 -IExvY2F0ZWQ= 42867 -LkRyaXZlcg== 42868 -IFZJREVP 42869 -IG1lcmNoYW50cw== 42870 -IENoZXN0 42871 -LWxvY2s= 42872 -L3BocA== 42873 -IG1pbGFubw== 42874 -X1NUWUxF 42875 -YXJnZXI= 42876 -aWRlYQ== 42877 -R1VJRA== 42878 -YWR2YW5jZWQ= 42879 -bWVhbA== 42880 -T3B0aW9uc0l0ZW1TZWxlY3RlZA== 42881 -PScl 42882 -IENoYW0= 42883 -OmRhdGE= 42884 -KHN0YXQ= 42885 -V2lsbEFwcGVhcg== 42886 -IGluZm9ybWFs 42887 -YWpp 42888 -IHJlcHJvZHVjdGl2ZQ== 42889 -IENBUw== 42890 -44Gj 42891 -RlVOQw== 42892 -IFJ1dGg= 42893 -KSso 42894 -Q09OU1Q= 42895 -IEZhbnM= 42896 -IGdyb3VwSWQ= 42897 -eGZmZmZmZmZm 42898 -IHNhbXBsZXI= 42899 -IH19Ij4= 42900 -LnRoZQ== 42901 -IGhvbGxvdw== 42902 -V0FZ 42903 -IEZhY3VsdHk= 42904 -QXR0cmlidXRlZFN0cmluZw== 42905 -IExvb2tz 42906 -IFJleA== 42907 -ams= 42908 -IE1JTA== 42909 -IGJhcmQ= 42910 -Lkxvbmc= 42911 -IGxpdmVzdA== 42912 -IHNrYWw= 42913 -aWNpc20= 42914 -TUFJTg== 42915 -IG11Y2hv 42916 -Qk9EWQ== 42917 -IGVzZQ== 42918 -CXVzZQ== 42919 -Rm9vdA== 42920 -LlNRTEV4Y2VwdGlvbg== 42921 -IGluaGVyaXRhbmNl 42922 -cmVjZWl2ZWQ= 42923 -IHB1dGFz 42924 -ZWRpcw== 42925 -YWxzYQ== 42926 -IEVycm9yTWVzc2FnZQ== 42927 -Qm9va2luZw== 42928 -IHRyYWN0 42929 -YWN6 42930 -IENhbnQ= 42931 -X3JlZ2V4 42932 -IGlkZW9sb2dpY2Fs 42933 -IGppaGFk 42934 -aG9z 42935 -L3N5cw== 42936 -Y29sbQ== 42937 -KHBvb2w= 42938 -IGVzdMOhbg== 42939 -IFBlbmRpbmc= 42940 -ZW3DoXM= 42941 -IGt0w7NyeQ== 42942 -KSk7CgoK 42943 -dHJhbnNhY3Rpb25z 42944 -IHdpZWxk 42945 -aXRlcmU= 42946 -ZXJ0dXJl 42947 -X3Nz 42948 -IHN0cmV0Y2hpbmc= 42949 -IHByaXNvbmVy 42950 -LlJlYWRBbGw= 42951 -IGJlc2No 42952 -LS07DQo= 42953 -IGNyaXNw 42954 -X1NDQU4= 42955 -IGFl 42956 -U3RyaWN0 42957 -IE1pbm5lYXBvbGlz 42958 -IEJvZWluZw== 42959 -YXJpcw== 42960 -cmVr 42961 -X3BpcGU= 42962 -IHByaWVzdHM= 42963 -KEVJRg== 42964 -ZWhpY2xlcw== 42965 -IEludGVyYWN0aXZl 42966 -YmV0d2Vlbg== 42967 -CU51bGxDaGVjaw== 42968 -IEJsYWly 42969 -IEx0 42970 -X2lubGluZQ== 42971 -ZXRoeWw= 42972 -wrw= 42973 -X3BhY2thZ2Vz 42974 -IGJhcnJlbHM= 42975 -X2hl 42976 -IHJlZ2V4cA== 42977 -X3B0cw== 42978 -X0hhbmRsZXI= 42979 -aW5ndWxhcg== 42980 -IE5pc3Nhbg== 42981 -IFJhbmNo 42982 -IHBlcmNo 42983 -VW5zdXBwb3J0ZWQ= 42984 -U21pdGg= 42985 -IExlZ2VuZHM= 42986 -TWk= 42987 -IGdm 42988 -c3RlZGVy 42989 -IGFjcXVpcmluZw== 42990 -IHNpbXVsYXRvcg== 42991 -KCksIg== 42992 -cmVjZWl2ZQ== 42993 -IGlucGxhY2U= 42994 -QUNUSU9O 42995 -IFdlYkRyaXZlcg== 42996 -ZmlsZXN5c3RlbQ== 42997 -PE9yZGVy 42998 -bG9wZW4= 42999 -IEhFSUdIVA== 43000 -LnNldEJvcmRlcg== 43001 -jbA= 43002 -X19bIg== 43003 -IGNsYW1w 43004 -U2Vnb2U= 43005 -YmFuZHM= 43006 -dG9MaXN0 43007 -YW1iYQ== 43008 -PicrCg== 43009 -IGNyZWRpYmxl 43010 -YW1hdA== 43011 -cGxheWluZw== 43012 -LnNldEltYWdlUmVzb3VyY2U= 43013 -cXVlbA== 43014 -IHBvZHI= 43015 -Z2VvbQ== 43016 -RWs= 43017 -IFFhdGFy 43018 -IGdlbGQ= 43019 -PycsCg== 43020 -IGN5bA== 43021 -KGF4 43022 -IFdJ 43023 -dXJhbGx5 43024 -IEJyYXNpbA== 43025 -IHNlbnph 43026 -YWxleQ== 43027 -b25lbg== 43028 -IGJhaA== 43029 -IG1vbGVjdWxl 43030 -UmFk 43031 -6L+w 43032 -QU5DSA== 43033 -LWJhY2tncm91bmQ= 43034 -LWFnZW50 43035 -IHByb2xpZmVy 43036 -OmJvb2xlYW4= 43037 -IHRpZGU= 43038 -ZXJpYWxpemVy 43039 -XzsNCg== 43040 -RmVl 43041 -Kiop 43042 -ZXJneQ== 43043 -IEhvbm9y 43044 -LkxvZ2dpbmc= 43045 -aXJpcw== 43046 -IHVuZGVybWluZQ== 43047 -IER5 43048 -IHR5cg== 43049 -IGRlcXVl 43050 -IGRhbWVy 43051 -KFtdKQo= 43052 -LmxheW91dENvbnRyb2xJdGVt 43053 -cGVhdGVk 43054 -Q0FO 43055 -cmFnbWVudHM= 43056 -TGFuZA== 43057 -KV0pOwo= 43058 -IFNhaA== 43059 -IERFQ0w= 43060 -V2l0aGlu 43061 -IE5hbWVzcGFjZQ== 43062 -YW5vdGhlcg== 43063 -c2VtYmxpbmc= 43064 -LmRlc2NyaWJl 43065 -Q29uc3Vt 43066 -IEZlYXI= 43067 -Z2l2ZW4= 43068 -T3Jhbmdl 43069 -PGJvb2xlYW4= 43070 -IHN0ZWFkaWx5 43071 -cGFSZXBvc2l0b3J5 43072 -IHJlc3VsdFNldA== 43073 -X0VOVEVS 43074 -X3JlcGVhdA== 43075 -IHRvbmVz 43076 -IFBST1A= 43077 -bmFs 43078 -cGFydGljbGU= 43079 -IHNpZ25hbGluZw== 43080 -IGFjY2Vzc29yeQ== 43081 -CQkJCQkJICA= 43082 -IHZpZWxl 43083 -IE5vYWg= 43084 -LWFn 43085 -IG11cmRlcnM= 43086 -IGFpcmVk 43087 -IFBMQVk= 43088 -IFN1bGxpdmFu 43089 -X0NvcmU= 43090 -IHVsb25n 43091 -IGJsb2dnaW5n 43092 -PlRoaXM= 43093 -IGRhdGFJbmRleA== 43094 -IHByaW50YWJsZQ== 43095 -IEV5ZXM= 43096 -X3RhcmdldHM= 43097 -KFB5 43098 -Lm92ZXI= 43099 -IGJydQ== 43100 -YW1wdG9u 43101 -IHBsYWludGlmZg== 43102 -PEtleQ== 43103 -YnVsbA== 43104 -IOKfqA== 43105 -SXNzdWU= 43106 -LmNvcm5lclJhZGl1cw== 43107 -Q3JpdGljYWw= 43108 -X3BoaQ== 43109 -LmFuZ2xl 43110 -IGR5bmFtaWNhbGx5 43111 -ISIpOw0K 43112 -Pik7Cg== 43113 -aW52ZXN0 43114 -LioKCg== 43115 -IHTDqWzDqQ== 43116 -IHN1cGVyZg== 43117 -IGNhc2NhZGU= 43118 -RFRE 43119 -IHZpdmlk 43120 -IHN1YnNpZGllcw== 43121 -IEhhc3M= 43122 -IGNvbGxhcHM= 43123 -IGNlcmFtaWM= 43124 -e30iLg== 43125 -IExlYWthZ2U= 43126 -LXRyYXNo 43127 -Y29sbGFwc2Vk 43128 -LXNvY2lhbA== 43129 -IENoYWQ= 43130 -IGluY2xpbmVk 43131 -IHN0bw== 43132 -IHN0b3J5Ym9hcmQ= 43133 -LnBheW1lbnQ= 43134 -c3RhY2tvdmVyZmxvdw== 43135 -IFJhaWRlcnM= 43136 -ICMn 43137 -b2xpY2llcw== 43138 -7Jy866Gc 43139 -ZW1hcA== 43140 -IGtq 43141 -IHF1b3Rh 43142 -IEdhcmRlbnM= 43143 -67KI 43144 -IEFuZ2Vscw== 43145 -IG9mdA== 43146 -IGxvd2VyY2FzZQ== 43147 -IGlQYXJhbQ== 43148 -IGNoZWFwZXN0 43149 -dW50YQ== 43150 -X3BrdA== 43151 -aWNhdG9ycw== 43152 -IGxldXJz 43153 -IGRlY3JlYXNlcw== 43154 -CWRlZmluZQ== 43155 -UFJFQw== 43156 -YW1tZXJz 43157 -IFByZXBhcmVkU3RhdGVtZW50 43158 -KGRpcmVjdGlvbg== 43159 -IGNyZXdz 43160 -YXJrZWQ= 43161 -IE1lbXBoaXM= 43162 -IFNlbGw= 43163 -R1RL 43164 -IG1haWQ= 43165 -OmRpc2FibGU= 43166 -6ZuG 43167 -IFBm 43168 -IGFsYmVpdA== 43169 -b3Blbmg= 43170 -Pz4iPgo= 43171 -LmdldFNvdXJjZQ== 43172 -KHNjYWxl 43173 -RHU= 43174 -IFBJTA== 43175 -X3JlZnJlc2g= 43176 -IGJldHM= 43177 -KGNhcg== 43178 -IFZvbg== 43179 -fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 43180 -IEdyYXQ= 43181 -TXVjaA== 43182 -KERpYWxvZw== 43183 -LnN0b3BQcm9wYWdhdGlvbg== 43184 -IHRlaw== 43185 -IGV4aXRz 43186 -J10sJA== 43187 -IHBob25lTnVtYmVy 43188 -dWNz 43189 -ZWNpbWFs 43190 -LS0tLS0tLS0tLS0tLS0= 43191 -aW5w 43192 -LnBvam8= 43193 -IGNvcnB1cw== 43194 -IHByYWN0aXRpb25lcnM= 43195 -LnBpYw== 43196 -InRlc3Rpbmc= 43197 -IHN0cmluZ0J5 43198 -Lk5vdE51bGw= 43199 -IHJhbmc= 43200 -LkR5bmFtaWM= 43201 -X1JlbmRlcg== 43202 -0LDRgtCw 43203 -V2FpdGluZw== 43204 -IFdpaw== 43205 -IG92ZXJ3aGVsbWVk 43206 -JSI+ 43207 -IEFF 43208 -fX0+Cg== 43209 -dXc= 43210 -X3R5cA== 43211 -IGJ1Y2tldHM= 43212 -IGdyZWV0aW5n 43213 -IGxhdWdodGVy 43214 -IGFudGFnb24= 43215 -dWdnZXN0aW9u 43216 -LWVtYWls 43217 -CXRvcA== 43218 -IGVyb3M= 43219 -X3RyaQ== 43220 -IGlzc3Vpbmc= 43221 -IGjDoQ== 43222 -IGlzb2xhdGU= 43223 -T3ZlcmZsb3c= 43224 -LEU= 43225 -IG51dHJpdGlvbmFs 43226 -IEFiYm90dA== 43227 -IG5m 43228 -LnRvdWNo 43229 -LmZldGNoYWxs 43230 -X3ppcA== 43231 -Iil9Cg== 43232 -IGFtYXQ= 43233 -IENpc2Nv 43234 -IG7DpQ== 43235 -UExFWA== 43236 -IHNlaQ== 43237 -Zm90bw== 43238 -LnRvSnNvbg== 43239 -5aSa 43240 -IEtsZWlu 43241 -IGxpYmM= 43242 -IG1pbmVycw== 43243 -5aI= 43244 -LXByaW50 43245 -IFByaWRl 43246 -VG9kb3M= 43247 -IG1hc2tlZA== 43248 -IHNldERhdGE= 43249 -IHRlbGVmb24= 43250 -IHVuaGFwcHk= 43251 -IFRhYmxlcw== 43252 -Z2Vi 43253 -KGRlYnVn 43254 -X2FsbG93ZWQ= 43255 -LWFjY2Vzcw== 43256 -IGxvZ2lzdGljcw== 43257 -IGdlbXM= 43258 -IE1hdHVyZQ== 43259 -IHJzcA== 43260 -IEFsbGU= 43261 -LmdldEJ5dGVz 43262 -XHdlYg== 43263 -eW5jaHJvbml6ZWQ= 43264 -UGFyYWdyYXBo 43265 -IHRocm90dGxl 43266 -LnNxbGl0ZQ== 43267 -Y29uc3VsdGE= 43268 -IFNlYWg= 43269 -Q2U= 43270 -IHN1Ym1hcg== 43271 -RVJF 43272 -Vm91cw== 43273 -IHJlZGRpdA== 43274 -IHNxbGFsY2hlbXk= 43275 -LW1pbGU= 43276 -b2NpZGU= 43277 -UG91cg== 43278 -fX0iPgo= 43279 -c3RlYWQ= 43280 -IEAo 43281 -IFtdKQ== 43282 -IEFkcw== 43283 -IG92ZXJsb2Fk 43284 -cmlkZGVu 43285 -IERlc2VydA== 43286 -IFdyYXA= 43287 -IFBvcnR1Z3Vlc2U= 43288 -ZXR6 43289 -CWZpcnN0 43290 -IG1pbGVzdG9uZQ== 43291 -5peg 43292 -0YPRiQ== 43293 -KHN1Y2Nlc3M= 43294 -PFZlY3Rvcg== 43295 -Y29vbA== 43296 -IFtdKTsK 43297 -ZXJ2YWxz 43298 -IGludmVydA== 43299 -Imlv 43300 -Y3Vyc28= 43301 -ZnJhZ21lbnQ= 43302 -IGZlYXNpYmxl 43303 -LnNldFBvc2l0aW9u 43304 -IGVsbQ== 43305 -IGltYWdpbg== 43306 -QFNwcmluZw== 43307 -IGJhdHM= 43308 -cHXDqXM= 43309 -Z2FsZW1lbnQ= 43310 -bnNpYw== 43311 -Z2llbmU= 43312 -ZWxsYXRpb24= 43313 -IEJhaWxleQ== 43314 -U2hhcg== 43315 -IFR1bA== 43316 -IEhL 43317 -IGZyZWV6aW5n 43318 -Z2xt 43319 -Y2VhbnM= 43320 -LWN1dA== 43321 -X2NpcmNsZQ== 43322 -5ZGY 43323 -bmVnYXRpdmU= 43324 -IGluZGlhbg== 43325 -c2FsdA== 43326 -IHRpbmc= 43327 -CW1vZA== 43328 -IHNpbnQ= 43329 -YWtpbg== 43330 -dW1s 43331 -IFRleHRJbnB1dA== 43332 -IHBvcHBlZA== 43333 -VE1Q 43334 -IHBhcmtlZA== 43335 -15nX 43336 -IEZ1c2lvbg== 43337 -IGhlYXRlcg== 43338 -RVRG 43339 -cm96ZW4= 43340 -aGFsbA== 43341 -IE1paw== 43342 -bGV2YXJk 43343 -LWhlYXJ0 43344 -CW9yZGVy 43345 -TWFraW5n 43346 -IHBsZWRnZWQ= 43347 -IGRpcnM= 43348 -JHBvc3Q= 43349 -IEhlcnI= 43350 -c3RhbnRpYXRl 43351 -LCIK 43352 -LmdldENvbG9y 43353 -IFNBVA== 43354 -IHRpbWVkZWx0YQ== 43355 -IE1haQ== 43356 -CW1ldGhvZA== 43357 -IGlkaW90 43358 -IFRyYXY= 43359 -aWRlbnRpZmllZA== 43360 -IERpdmluZQ== 43361 -LmdldFBhdGg= 43362 -RGFzaA== 43363 -IGluZmlsdHI= 43364 -IGhhbmRsZVN1Ym1pdA== 43365 -YnJvb2s= 43366 -LmdlbmVyaWM= 43367 -LnNob3J0Y3V0cw== 43368 -Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg== 43369 -IGRhdGluZ3M= 43370 -IE1W 43371 -77u/Iw== 43372 -fSIKCg== 43373 -IGltcHJpc29ubWVudA== 43374 -YXNvbmlj 43375 -cm91ZA== 43376 -dWNpb24= 43377 -5oql 43378 -IGRpYWxlY3Q= 43379 -IG9uTW91c2U= 43380 -Y29uc3RleHBy 43381 -LmxhYmVsQ29udHJvbA== 43382 -IHdlYWtlcg== 43383 -IG1hbmtpbmQ= 43384 -IFJFQ0U= 43385 -IGRpeg== 43386 -IGFwcEJhcg== 43387 -IHF1w6k= 43388 -ZnJh 43389 -X2RlZmF1bHRz 43390 -IGFsaXF1 43391 -X2F0b20= 43392 -OmluZGV4UGF0aA== 43393 -IG1pc3Nlcw== 43394 -IHZpc3VhbGx5 43395 -IEhhbmRz 43396 -U1RSVQ== 43397 -aWF0ZXM= 43398 -X2Fzc2V0 43399 -RmluZGVy 43400 -bWlkdA== 43401 -IHNuYWNrcw== 43402 -KF9fKCc= 43403 -LnVyaQ== 43404 -IEluc3RydW1lbnQ= 43405 -dmVuaXI= 43406 -KCRfXw== 43407 -LkRvdE5ldEJhcg== 43408 -IGNvbmZpZ3M= 43409 -IGd1ZXNzZWQ= 43410 -4KS/4KQ= 43411 -IGluaXRpYWxpemVy 43412 -ID8iLA== 43413 -IFZlcml6b24= 43414 -bWFuaWZlc3Q= 43415 -Z2ViZW4= 43416 -LmRldGFpbHM= 43417 -R2F0ZQ== 43418 -cG9uc2libGU= 43419 -IEVsaW0= 43420 -LHN0cg== 43421 -IHdyaXRpbmdz 43422 -IERlcmVr 43423 -IENvb3JkaW5hdG9y 43424 -IHBpbGxvdw== 43425 -IG5vdGljZWFibGU= 43426 -UnM= 43427 -IGR1cGxpY2F0ZXM= 43428 -ZXJuZWxz 43429 -a0o= 43430 -Lnp6 43431 -b2xsYW5k 43432 -IFNFQ1RJT04= 43433 -X2ZuYW1l 43434 -dWZmbGVk 43435 -J10uJzwv 43436 -X0NN 43437 -IHly 43438 -cGxhdA== 43439 -b2JvZHk= 43440 -bmRl 43441 -KEVsZW1lbnQ= 43442 -IEF0bGFz 43443 -IO+8iA== 43444 -IG5pdmVs 43445 -IGluc2lzdHM= 43446 -W1A= 43447 -IGVudGh1c2lhc3Rz 43448 -IOyeheugpQ== 43449 -IGJldmVyYWdl 43450 -e30iLA== 43451 -OnJpZ2h0 43452 -IG5vdXZlYXU= 43453 -IENvbXBsZQ== 43454 -IFBhZw== 43455 -b3ducw== 43456 -IHJlbWVtYmVycw== 43457 -IFByYWRlc2g= 43458 -IGNoYWxr 43459 -IExhdXJlbg== 43460 -XFNlcnZpY2U= 43461 -X0dFTg== 43462 -PiIpCg== 43463 -IERvbGxhcg== 43464 -IGVtb2pp 43465 -Q2Fyb3VzZWw= 43466 -LXBsYXllcg== 43467 -IGFkanVzdGluZw== 43468 -IGp1Z2E= 43469 -YWxsZW5nZXM= 43470 -Z2VuZQ== 43471 -KGJvZHlQYXJzZXI= 43472 -bG9wZWRpYQ== 43473 -IEJlaGluZA== 43474 -IHNsZWV2ZXM= 43475 -IGRyYWdnaW5n 43476 -IENoZXZyb2xldA== 43477 -IGJpeg== 43478 -aXZpdGllcw== 43479 -IEZyZXF1ZW5jeQ== 43480 -LGNoYXI= 43481 -LldISVRF 43482 -X3ByZXZpZXc= 43483 -KSc7Cg== 43484 -X2F4 43485 -SU9OUw== 43486 -LmNwdQ== 43487 -LmlucHV0cw== 43488 -VUJF 43489 -X2ZlZWQ= 43490 -IFN1cHBsZW1lbnQ= 43491 -ISku 43492 -ZXN1cw== 43493 -IFVEUA== 43494 -IG1pY3JvcGhvbmU= 43495 -IGNvbmZpcm1z 43496 -LmlzTm90RW1wdHk= 43497 -IjoiIiwK 43498 -X1NDUkVFTg== 43499 -CWV4cGVjdGVk 43500 -Ky0rLSstKy0= 43501 -IEhhaXQ= 43502 -ZmFzdGNhbGw= 43503 -IGRlcGljdA== 43504 -dmI= 43505 -X3BpY3R1cmU= 43506 -CWRlc2NyaXB0aW9u 43507 -IFdpZmU= 43508 -dWNp 43509 -IHZpY2lvdXM= 43510 -5LuW 43511 -dWViYQ== 43512 -IHNldFVzZXI= 43513 -44Gh 43514 -IGRpdmluZw== 43515 -IG9wZXJh 43516 -dXNlcmNvbnRlbnQ= 43517 -YXJhaA== 43518 -KX0s 43519 -eXVu 43520 -dmVsdA== 43521 -IHVuY292ZXJlZA== 43522 -IGhpcHM= 43523 -IG9zY2lsbA== 43524 -IGFzc2VydGluZw== 43525 -IFhp 43526 -LnJlc3RvcmU= 43527 -a2Vh 43528 -IHNwZWxsaW5n 43529 -IGRlcml2ZQ== 43530 -YWJ3ZQ== 43531 -IERvdw== 43532 -LnNldFR5cGU= 43533 -X3Zz 43534 -IGNvenk= 43535 -LmNhdGVnb3JpZXM= 43536 -T3Jn 43537 -X21ncg== 43538 -IGR1bmdlb24= 43539 -Y29sbGVjdGlvblZpZXc= 43540 -IEJsYW5r 43541 -YWNpYXM= 43542 -w6TDpA== 43543 -X2NsZWFudXA= 43544 -X0FDVElWSVRZ 43545 -IHRyaWFuZ2xlcw== 43546 -Lk1lbnVJdGVt 43547 -IGlwaG9uZQ== 43548 -IFdvbg== 43549 -XV0KCg== 43550 -IENvbXBhcmlzb24= 43551 -LkRvYw== 43552 -IGNhbm9uaWNhbA== 43553 -IFN1ZGFu 43554 -Jyl7 43555 -VXBJbnNpZGU= 43556 -YnVpbHRpbg== 43557 -RU5DWQ== 43558 -eGJl 43559 -IGNodWNr 43560 -IGNvbnRyYWRpY3Q= 43561 -IG51ZXN0cm8= 43562 -IGFyY2hpdGVjdHVyYWw= 43563 -IEZpYg== 43564 -IGNvbXBhcmVz 43565 -Kms= 43566 -Q2Zn 43567 -54Sh 43568 -bnRlbg== 43569 -TWF0Y2hlcw== 43570 -IERPV05MT0FE 43571 -X0hBTkRMRVI= 43572 -bWFuYWdlbWVudA== 43573 -W1M= 43574 -RU5H 43575 -woDC 43576 -ZmFuZw== 43577 -IHNsaXBwZWQ= 43578 -IExhbmth 43579 -ZXNjYXBpbmc= 43580 -IHRhY2tsZXM= 43581 -IFBlZHJv 43582 -LlByb3A= 43583 -Licn 43584 -LkdlbmVyYXRlZA== 43585 -Lk5ld0d1aWQ= 43586 -YXRyaWdlc2ltYWw= 43587 -aWxsb24= 43588 -IHN0YXRpc3RpYw== 43589 -c3BlY2llcw== 43590 -aG9sZGluZw== 43591 -RHJ1cGFs 43592 -IGZ1bmRhbWVudGFsbHk= 43593 -IGJvbmRhZ2U= 43594 -IHJlc29sdXRpb25z 43595 -SW5saW5lRGF0YQ== 43596 -XFR5cGU= 43597 -ZXN0aW9u 43598 -LndyYXA= 43599 -IHdhcnJpb3Jz 43600 -IExPQ0FM 43601 -QXJjaGl2ZQ== 43602 -IGVtYnJhY2Vk 43603 -4bun 43604 -LlZlcg== 43605 -IEFmZm9yZGFibGU= 43606 -b2xlc2FsZQ== 43607 -IEFwcGxpZWQ= 43608 -IENvbnZlcnNpb24= 43609 -bWVnYQ== 43610 -X2NhbQ== 43611 -IGNlcmVtb24= 43612 -YXVydXM= 43613 -IFZvbGs= 43614 -Lm9wZW5z 43615 -L2Fib3V0 43616 -IFN0ZA== 43617 -am91cm5hbA== 43618 -KCkpew0K 43619 -LCJc 43620 -KEFycmF5cw== 43621 -IERlbnNl 43622 -YXNlw7Fh 43623 -w6RubmVy 43624 -L3N0YXQ= 43625 -dXNlckRhdGE= 43626 -IGdlcm1hbg== 43627 -IHR6 43628 -d29ydGh5 43629 -Rm9ybWF0RXhjZXB0aW9u 43630 -cGhlcmQ= 43631 -IHNtaWxlcw== 43632 -IFdoZW5ldmVy 43633 -KGFkYXB0ZXI= 43634 -LmJhZGxvZ2lj 43635 -IGJyaWVmaW5n 43636 -LkdyaWRDb2x1bW4= 43637 -LWNoYXI= 43638 -ZGltZW5zaW9u 43639 -IENvcHBlcg== 43640 -IG5pbnRo 43641 -ICd7ew== 43642 -IHJhdg== 43643 -X1RhYmxl 43644 -IGRlcml2YXRpdmVz 43645 -IFJhaXNl 43646 -IEZ1dA== 43647 -YXJtb3I= 43648 -LXBhZGRpbmc= 43649 -IHJlbWlu 43650 -CXN0eWxl 43651 -IE1lbWJlcnNoaXA= 43652 -IHNwcmVhZHM= 43653 -IGdhbGxlcmllcw== 43654 -IENsYXJrZQ== 43655 -IGNvbmNlcHRpb24= 43656 -bWludXRl 43657 -IGFidXNpdmU= 43658 -X2Fkag== 43659 -IHRlcnJpZmlj 43660 -IG92ZXJ0 43661 -b3VyY2luZw== 43662 -IGVudHJhZGE= 43663 -bGV2ZWxz 43664 -IGNyaXRpcXVl 43665 -IHJlc3BlY3Rz 43666 -IE1NQQ== 43667 -aWVuZQ== 43668 -IGVuY2Fwcw== 43669 -IFJheW1vbmQ= 43670 -RGl2aWRlcg== 43671 -aXZhYmxl 43672 -YmF6 43673 -IEBfOwo= 43674 -IENsYWlyZQ== 43675 -IHVyZ2luZw== 43676 -Q0VF 43677 -IHRyYW5zZm9ybWVy 43678 -ZGlzY29yZA== 43679 -IEpvdXJuZXk= 43680 -dG9z 43681 -IGNvbXBldGl0aW9ucw== 43682 -IE9CSg== 43683 -IEJpcw== 43684 -IHJlbGF4YXRpb24= 43685 -aWR5 43686 -X0lOU1RBTkNF 43687 -IFByZWY= 43688 -ZGFkb3M= 43689 -aWNpZW5jaWVz 43690 -IE1lZGlhUXVlcnk= 43691 -IEN1YmU= 43692 -IFN0cmFuZ2U= 43693 -Z3B1 43694 -KGRheXM= 43695 -X0luaXRTdHJ1Y3Q= 43696 -IGZpbmdlcnByaW50 43697 -ZW1hdA== 43698 -IEdlY2tv 43699 -IHJhaWxz 43700 -IEx1bQ== 43701 -c3RyYWN0aW9u 43702 -aWd1bmc= 43703 -KG1vdmll 43704 -X2RpY3Rpb25hcnk= 43705 -X2ludGVycnVwdA== 43706 -IFFD 43707 -aWtlZA== 43708 -YXBwZW5kQ2hpbGQ= 43709 -cmVjaXBpZW50 43710 -csOp 43711 -VmU= 43712 -IHRvd2Vs 43713 -Lmxhc3RJbmRleE9m 43714 -IHBsYWNlYm8= 43715 -IFdpZQ== 43716 -LmVzcA== 43717 -KERlYnVn 43718 -b3BlcmF0aXZl 43719 -IGRlY2Vhc2Vk 43720 -Jmlk 43721 -CW11dGV4 43722 -ZWxpYw== 43723 -IGJhcHQ= 43724 -CQ0KDQo= 43725 -IGZhcnRoZXI= 43726 -SGFsZg== 43727 -LmRpc2FibGU= 43728 -Lm1lbnVTdHJpcA== 43729 -bGVjY2lvbg== 43730 -IHJlc3VsdENvZGU= 43731 -IGNhbnM= 43732 -LWVsZWN0aW9u 43733 -ZmVtYWxl 43734 -X0ZJWA== 43735 -YXVzaWJsZQ== 43736 -IFBPV0VS 43737 -IHJlY29uc3RydWN0aW9u 43738 -IHNjYW5z 43739 -Llh0cmFCYXJz 43740 -4oCYcw== 43741 -UmVtb3ZlZA== 43742 -IHBhcmFncmFwaHM= 43743 -X21hcmdpbg== 43744 -IGx5bXBo 43745 -IGJvcw== 43746 -bGluZ3Rvbg== 43747 -IEJhcHRpc3Q= 43748 -IGFkdmVydGlzZW1lbnRz 43749 -IE1hbmFnZQ== 43750 -L3l5eXk= 43751 -SU9VUw== 43752 -RU5DRVM= 43753 -IEZpY3Rpb24= 43754 -CW1lbnU= 43755 -IEZpbGVPdXRwdXRTdHJlYW0= 43756 -b3Zhbg== 43757 -IEZlbmc= 43758 -IHNraXBwaW5n 43759 -Z2V0Q2xhc3M= 43760 -YW5uaQ== 43761 -IHJlYm91bmRz 43762 -IHB1YmxpY2l0eQ== 43763 -IGluZ3Jlcw== 43764 -dXNlbWVudA== 43765 -IHRob3VnaHRmdWw= 43766 -LkNoYXJ0 43767 -IGhhdHRl 43768 -cGFzc3BvcnQ= 43769 -IGhvb2tlZA== 43770 -IExlbnM= 43771 -IGZsYWdzaGlw 43772 -IHN0aXA= 43773 -IEdFTg== 43774 -IGNsdWVz 43775 -aXB2 43776 -IFJpc2U= 43777 -IEdldw== 43778 -dGFibGVuYW1l 43779 -IGZvcmVtb3N0 43780 -X3ZhbGlkYXRl 43781 -X2FuYWx5c2lz 43782 -b2xsYQ== 43783 -IHF1YWxpZmljYXRpb25z 43784 -IGRpc3RyaWJ1dGlvbnM= 43785 -IEZsb3dlcg== 43786 -IHRlbnNl 43787 -IHRoYW5rZnVs 43788 -IGNsdXRjaA== 43789 -IHVuaWZpZWQ= 43790 -cm9hZHM= 43791 -IHNpdGk= 43792 -IHN0YWxs 43793 -X1BSSU9SSVRZ 43794 -Y3N0ZGxpYg== 43795 -X1VTRVJOQU1F 43796 -LmJ5dGVz 43797 -P3BhZ2U= 43798 -ZXJtYWxpbms= 43799 -IFZlZ2V0 43800 -L3ZuZA== 43801 -LWF1dGhvcg== 43802 -Lk5PTkU= 43803 -IENvbmN1cnJlbnQ= 43804 -IENyeQ== 43805 -IHN0YXJ0ZXJz 43806 -IEludGVyYWN0aW9u 43807 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 43808 -IExFVkVM 43809 -RWxs 43810 -IGNvbWJvQm94 43811 -IFRoZXJlc2E= 43812 -dGVr 43813 -X0hhbmRsZQ== 43814 -IGFieQ== 43815 -LmdkeA== 43816 -LGVuZA== 43817 -KExvY2Fs 43818 -T2w= 43819 -a25pZmU= 43820 -YXJpYWw= 43821 -IEhvZmY= 43822 -IHByb3N0aXR1ZXJhZGU= 43823 -RG9jdG9y 43824 -SW5zdGFuY2Vz 43825 -LlNldFZhbHVl 43826 -CWZyb20= 43827 -IGx1eHVyaW91cw== 43828 -SW5kZW50 43829 -QWxsb2NhdG9y 43830 -X0RSQVc= 43831 -KCIsIiw= 43832 -IEZyYW5jZXM= 43833 -IGdyb3VwQm94 43834 -KHNjaGVtYQ== 43835 -UHJpbnRm 43836 -T1JJRVM= 43837 -LWdyYWRpZW50 43838 -IHJlcHV0 43839 -YXJpbg== 43840 -X0RPTkU= 43841 -aW5jcmU= 43842 -aWdudHk= 43843 -IGV4ZXJ0 43844 -IC0u 43845 -L0FwcA== 43846 -LXRocm91Z2g= 43847 -IGRlY2xpbmluZw== 43848 -IGRlc3NlcnQ= 43849 -IGluY3VtYg== 43850 -IGRlc2lnbmF0aW9u 43851 -LlBPUlQ= 43852 -LHN0cm9uZw== 43853 -IHNhbmRib3g= 43854 -IHdpbmVz 43855 -IFBhdg== 43856 -JHN0cg== 43857 -YXNrZWxs 43858 -IGjDtg== 43859 -IFBZ 43860 -R2V0SW5zdGFuY2U= 43861 -VGV4dElucHV0 43862 -Z2FtZU9iamVjdA== 43863 -L2V2ZW50cw== 43864 -Y3JlYXRlZEF0 43865 -IGxvY2FsVmFy 43866 -IFdISVRF 43867 -cGVyZWQ= 43868 -aWxlZ2U= 43869 -ZWZmaWNpZW50 43870 -LGNvbG9y 43871 -Y2F0ZQ== 43872 -IENhZmU= 43873 -IHNpbWlsYXJpdGllcw== 43874 -IHB1bXBz 43875 -IEh1bmdhcnk= 43876 -LlVzZXJuYW1l 43877 -IHNrYXRl 43878 -IHRvdWNoZG93bnM= 43879 -IGFjY2VsZXJhdGU= 43880 -IEhlbGVu 43881 -T01FTQ== 43882 -IEt1bg== 43883 -X3ZvbA== 43884 -IGZpbmRBbGw= 43885 -IE1lbnNjaGVu 43886 -YWhlYWQ= 43887 -KTsi 43888 -a29tbWVu 43889 -IHBvc3Nlc3NlZA== 43890 -LmFyZ21heA== 43891 -LnRyYW5zaXRpb24= 43892 -QVJQ 43893 -T0xVTUU= 43894 -KHNjcmlwdA== 43895 -INCY 43896 -IEZpbmRpbmc= 43897 -b25jZXM= 43898 -SW8= 43899 -Qm9sZA== 43900 -IHJlbmV3YWw= 43901 -X0RJQUxPRw== 43902 -IGRpc3JlZw== 43903 -SU5URVJO 43904 -IHRvdXRl 43905 -IGVsZWN0cg== 43906 -IEdyb3Nz 43907 -CXRydWU= 43908 -LkZpZWxkcw== 43909 -IFdJRFRI 43910 -IERlbnQ= 43911 -IMOB 43912 -TlNOb3RpZmljYXRpb24= 43913 -IGFvcw== 43914 -IG1lbGVl 43915 -LlZhbGlkYXRpb24= 43916 -IERFQw== 43917 -LWRlcGVuZGVudA== 43918 -IHN1aWM= 43919 -VHJhaXRz 43920 -JG1lc3NhZ2U= 43921 -IERlYXI= 43922 -CUZJTEU= 43923 -bGFuZ3VhZ2Vz 43924 -LlByb3Q= 43925 -LmFkZHI= 43926 -LWdlbmVyYXRpb24= 43927 -SUNPTg== 43928 -IHRyYW5zcGxhbnQ= 43929 -LWRlc2NyaXB0aW9u 43930 -IGNoYXNpbmc= 43931 -IGNoZWVz 43932 -IH0qLwo= 43933 -VHJhZA== 43934 -cXVlcmllcw== 43935 -L3dpZGdldHM= 43936 -c3VicGFja2FnZQ== 43937 -IGVzcGVj 43938 -IGNyYWNrZWQ= 43939 -IGNvbXBldGl0b3I= 43940 -UHVyY2hhc2U= 43941 -LXRlYW0= 43942 -b2xlY3VsYXI= 43943 -b3JUaHVuaw== 43944 -JlA= 43945 -IHJlbGVudA== 43946 -LyN7 43947 -IHByb2R1Y3RJZA== 43948 -IOi+ 43949 -IExhdg== 43950 -IEFsdGVy 43951 -Lk1vZGU= 43952 -QURJTw== 43953 -Z3Jw 43954 -5re75Yqg 43955 -UXVpdA== 43956 -IGRlcHRocw== 43957 -LWNhdGVnb3J5 43958 -IERBVEFCQVNF 43959 -U1BFTEw= 43960 -IEZhbGNvbg== 43961 -IFFTdHJpbmdMaXN0 43962 -ICcnLg== 43963 -IEluc3RpdHV0aW9u 43964 -ZGFtYWdl 43965 -YXpvcg== 43966 -YmVsb25nc1Rv 43967 -dmVyYWdlcw== 43968 -IE5PTkU= 43969 -aXBwZXRz 43970 -LFwK 43971 -IGZvb3RwcmludA== 43972 -X2FyY2hpdmU= 43973 -bmFr 43974 -LmdldEZpZWxk 43975 -IFJlZmxlY3Rpb24= 43976 -ICdd 43977 -IEhCTw== 43978 -X2Rpc2NvdW50 43979 -IGluY2VzdA== 43980 -IERvZGdl 43981 -IFdhZGU= 43982 -Lk5P 43983 -ImVuY29kaW5n 43984 -IEJsb2NrY2hhaW4= 43985 -IGxhd3N1aXRz 43986 -IE1haW50 43987 -Y2h0ZW4= 43988 -IMOpdGFpdA== 43989 -IGt0w7NyZQ== 43990 -X2N0bA== 43991 -KHRpbWVy 43992 -QmF0dGxl 43993 -aXpv 43994 -YXllZA== 43995 -SU9S 43996 -IEdsYXNnb3c= 43997 -IHN5bnRo 43998 -X2xvZ3M= 43999 -LnBvc2U= 44000 -X0FkanVzdG9yVGh1bms= 44001 -KCgm 44002 -IHVuc3VyZQ== 44003 -eXN0YXRl 44004 -7ZWY64qU 44005 -T1VMRA== 44006 -Lm5n 44007 -IGRlZmF1bHRkaWN0 44008 -d29ya3NwYWNl 44009 -IHNlbGVjdGl2ZQ== 44010 -UGlja2VyQ29udHJvbGxlcg== 44011 -WU5BTUlD 44012 -Lm1ldGhvZHM= 44013 -IHBhdGh3YXlz 44014 -IEZldw== 44015 -S0c= 44016 -Q1JZUFQ= 44017 -Zm9sbG93aW5n 44018 -IERMQw== 44019 -IFNhcmE= 44020 -IHByZXNldA== 44021 -ZXN0cnVjdG9y 44022 -IEt1cnQ= 44023 -IGFpcnBsYW5l 44024 -IG9tcA== 44025 -IFBhcmVudHM= 44026 -IE1hcnRpbmV6 44027 -LmNvbXBsZXRl 44028 -IGJyb2FkbHk= 44029 -IHNjYXJl 44030 -IE3DqQ== 44031 -IGVsaW1pbmF0aW9u 44032 -IHBvdXJlZA== 44033 -L3N3 44034 -IGNvbXVu 44035 -IG1hc2M= 44036 -IE9yZ2FuaWM= 44037 -IFN0cmluZ1V0aWxz 44038 -aWxhdGVyYWw= 44039 -IHJlbHVjdGFudA== 44040 -LWFnZQ== 44041 -IG56 44042 -LiJc 44043 -IHBhc3Rvcg== 44044 -YWxleg== 44045 -IGVmZWN0 44046 -cHJvdg== 44047 -L2luaXQ= 44048 -IHBlbm4= 44049 -dW5kcw== 44050 -IHNzaXpl 44051 -IFByb2o= 44052 -YmFzZW5hbWU= 44053 -IHNoZWxscw== 44054 -IE5lY2s= 44055 -IEVuZm9yY2VtZW50 44056 -dmlkZWQ= 44057 -c3Rvd24= 44058 -U3BoZXJl 44059 -JHI= 44060 -dXNzZW4= 44061 -YWZpbA== 44062 -IFRlbGVncmFt 44063 -IGFuYWx5dGljYWw= 44064 -0L3Ri9C1 44065 -dXN1YWxseQ== 44066 -eG4= 44067 -IGhpc3Rvcmlhbg== 44068 -IEdyZWdvcnk= 44069 -b2xwaA== 44070 -IFVuYQ== 44071 -IGNvbnRyaWJ1dGVz 44072 -JS0= 44073 -YW50aWFnbw== 44074 -0YDQtdC0 44075 -LnJlZ2lvbg== 44076 -IGFicnVwdA== 44077 -IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9u 44078 -IFRBU0s= 44079 -X2ZpbmlzaA== 44080 -IG5vdG9yaW91cw== 44081 -IFZz 44082 -IE1R 44083 -IHN1bnNldA== 44084 -IHVuYWNjZXB0YWJsZQ== 44085 -YXJjZXI= 44086 -IGlsbHVtaW4= 44087 -IE9yYg== 44088 -IGJo 44089 -RXN0ZQ== 44090 -X2Rpc3BhdGNo 44091 -IHJpcHBlZA== 44092 -IHRvdWpvdXJz 44093 -IFBhcmNlbA== 44094 -X2xs 44095 -LnVzZXJOYW1l 44096 -LmNsYXNzZXM= 44097 -U09VUkNF 44098 -KE51bWJlcg== 44099 -0LXQu9GP 44100 -IGhlYWRwaG9uZXM= 44101 -KHNpZGU= 44102 -Y29uc3RpdHV0aW9u 44103 -YW5uYWg= 44104 -DQogICAgICAgIA0K 44105 -IGNsaWZm 44106 -LXJlZg== 44107 -IG1vc3RyYXI= 44108 -IFBvd2VsbA== 44109 -K3k= 44110 -IEJH 44111 -X2ZyYWdtZW50 44112 -LlBvcnQ= 44113 -IHJlYWxpemluZw== 44114 -cGFyYW1yZWY= 44115 -IGhvbWV0b3du 44116 -QFRhYmxl 44117 -KyI8Lw== 44118 -b21pZA== 44119 -IGR1Zw== 44120 -CWJ0bg== 44121 -IHN1YmplY3RpdmU= 44122 -L2Jyb3dzZXI= 44123 -IHVzaG9ydA== 44124 -IE1vbnRnb21lcnk= 44125 -LXJhdGU= 44126 -CXB1dHM= 44127 -bGV0aWNz 44128 -b3Jucw== 44129 -4oCcV2hhdA== 44130 -ZWVwZXI= 44131 -LkludmFyaWFudA== 44132 -IGNvbmNlYWxlZA== 44133 -X251bXB5 44134 -PT09PT09PT09 44135 -KHBz 44136 -TG9jYXRpb25z 44137 -LmFzdHlwZQ== 44138 -IENIQU5HRQ== 44139 -Lk9yZGVyQnk= 44140 -O2hlaWdodA== 44141 -IGdlbnRl 44142 -IGdydW50 44143 -IFBsYW5l 44144 -IHNhZGx5 44145 -IExvZ2Fu 44146 -X3VzZWM= 44147 -LmRndg== 44148 -IHNpbmNlcg== 44149 -IHBu 44150 -CWd0aw== 44151 -IGluc3RhbGxlcg== 44152 -IGRpc3BsYWNlbWVudA== 44153 -IGJ1cm5z 44154 -0YPRgQ== 44155 -aXZlcmVk 44156 -Ol0pCg== 44157 -c2VhdA== 44158 -YW5pbmc= 44159 -fSkKCgo= 44160 -X3JvbGVz 44161 -YXRpY2Fu 44162 -IGdlbmVyYXRvcnM= 44163 -IGh1cnRz 44164 -IHNuaXBwZXQ= 44165 -IGdzb24= 44166 -IHNlZ3JlZw== 44167 -IGRpc3RyaWJ1dG9y 44168 -IGFkdmFuY2luZw== 44169 -cG9zdGdyZXM= 44170 -IHVzcg== 44171 -IExpcw== 44172 -LmFzc2VydElz 44173 -X2Nk 44174 -IGh5ZHJhdWxpYw== 44175 -LmNvdW50ZXI= 44176 -IEluZGVwZW5kZW5jZQ== 44177 -IGRpZmbDqQ== 44178 -VW5saWtl 44179 -IHRvbWI= 44180 -dmlr 44181 -cG9zdGVk 44182 -d2Y= 44183 -IGRlc2NlbmRpbmc= 44184 -ZHlu 44185 -YW1lbnRhbA== 44186 -IEZydWl0 44187 -IFlv 44188 -LmRvdWJsZQ== 44189 -IElB 44190 -aWV2 44191 -aWJyYXRl 44192 -IFJlbGlnaW9u 44193 -TWFueVRvT25l 44194 -LVRh 44195 -IGJhbmFuYQ== 44196 -IEF2ZW5nZXJz 44197 -IEhvbG9jYXVzdA== 44198 -IGdldEM= 44199 -IGNvbmRv 44200 -IEdvdGhpYw== 44201 -IHByb3NwZXJpdHk= 44202 -VFJBTlM= 44203 -IGRvZXNudA== 44204 -IENoYW9z 44205 -SVRU 44206 -IENVUlJFTlQ= 44207 -XGhlbHBlcnM= 44208 -X1NBVkU= 44209 -YXZpdA== 44210 -Y29tcHV0ZXI= 44211 -X3NoZWV0 44212 -IEJyZXdpbmc= 44213 -IHJvYmJlcnk= 44214 -IOqyvQ== 44215 -INC60L7QvA== 44216 -IG7DpA== 44217 -LnJlZ2V4 44218 -IGRpc3J1cHRpb24= 44219 -IFNpbXVsYXRpb24= 44220 -YXBpZA== 44221 -IHN1cHJlbWU= 44222 -zrw= 44223 -IGNvbW1pc3Npb25lZA== 44224 -IGFic29ycHRpb24= 44225 -IE5ld2Nhc3RsZQ== 44226 -CWNvbnN0cnVjdG9y 44227 -VGVybXM= 44228 -IHJpdg== 44229 -IHJlbGlnaW9ucw== 44230 -V2l0aFRhZw== 44231 -Lkh0bWw= 44232 -bGlua2Vk 44233 -Q29tcG91bmQ= 44234 -IE1hbnM= 44235 -IGxha2Vz 44236 -aXp6bGU= 44237 -LnNldFNpemU= 44238 -YWJlcg== 44239 -IE5lZWRz 44240 -cGFja2FnZXM= 44241 -LlRhYlBhZ2U= 44242 -IHJlZnM= 44243 -IGlvdXRpbA== 44244 -IERvaW5n 44245 -ICJcKA== 44246 -IHBoZW5vbWVuYQ== 44247 -LkdldEludA== 44248 -QUxUSA== 44249 -IHBhcmxpYW1lbnRhcnk= 44250 -IHJlZnVzYWw= 44251 -IGluZXhwZW5zaXZl 44252 -IH0KCgoKCg== 44253 -IHNvbGlkYXJpdHk= 44254 -CXB1c2g= 44255 -aGF1bA== 44256 -IEJlcmU= 44257 -U2l6ZXI= 44258 -SW5kaXZpZHVhbA== 44259 -IGFuY2U= 44260 -IGRpbGU= 44261 -IFBlYWs= 44262 -KGhy 44263 -RWRpdGluZ0NvbnRyb2xsZXI= 44264 -SE4= 44265 -X1BFUklPRA== 44266 -RVRT 44267 -QmFubmVy 44268 -ZXJyb3JNZXNzYWdl 44269 -LkNBU0NBREU= 44270 -LWlnbm9yZQ== 44271 -IFNJR04= 44272 -IE9C 44273 -X2Rk 44274 -KERFRkFVTFQ= 44275 -IHNvbw== 44276 -IFZpY3Rvcmlhbg== 44277 -IGN1cnQ= 44278 -IGRpc2NyZXRl 44279 -cnlsaWM= 44280 -aW1iYWJ3ZQ== 44281 -LnRvRml4ZWQ= 44282 -bMOk 44283 -LnN0ZGlu 44284 -IHF0eQ== 44285 -Uk9MTEVS 44286 -bWVkaWF0ZWx5 44287 -IHBsdW1iaW5n 44288 -IFByb3BlcnR5Q2hhbmdlZA== 44289 -YXJyYW50eQ== 44290 -IEJyZWFrZmFzdA== 44291 -LnNldEhlYWRlcg== 44292 -LnB5dGhvbg== 44293 -Y29tbWVyY2U= 44294 -b3BlbmN2 44295 -Pi0tfX0K 44296 -RnJlbmNo 44297 -RW50aXR5TWFuYWdlcg== 44298 -IFBsYWlu 44299 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 44300 -wrM= 44301 -KFJF 44302 -Y2FwdA== 44303 -IG9yZ2FuaXNtcw== 44304 -IGpldHM= 44305 -b2xvY2F0aW9u 44306 -IEFwcFJvdXRpbmdNb2R1bGU= 44307 -IGdsb3Jpb3Vz 44308 -5pyN 44309 -IGRpc2NhcmRlZA== 44310 -CQkJCSAgICAg 44311 -IEFybm9sZA== 44312 -bHVn 44313 -IHBhcmw= 44314 -IGhvcm1vbmVz 44315 -IG1haA== 44316 -IFNvbmlj 44317 -IG9yZ2FuaXplcnM= 44318 -X1BMQVRGT1JN 44319 -Lmludg== 44320 -IGNob3Jk 44321 -dmVudGlvbmFs 44322 -CW9m 44323 -RXBpc29kZQ== 44324 -LkVudW0= 44325 -dW5rdA== 44326 -IERo 44327 -IEphcmVk 44328 -IE5haw== 44329 -IGludGVuZHM= 44330 -RW5kaWFu 44331 -IGF1c3RyYWxpYQ== 44332 -X2N2 44333 -KHJlc29sdmU= 44334 -IGNsaW5pY3M= 44335 -bGlrZWQ= 44336 -QVNISU5HVE9O 44337 -aW5oYQ== 44338 -Jyo= 44339 -IE5Q 44340 -X2JlaA== 44341 -IGhm 44342 -IHfDvHI= 44343 -Y2F0ZWdvcmlh 44344 -JGZvcm0= 44345 -IHN1YndheQ== 44346 -IGlzQWN0aXZl 44347 -cG9wdWxhcg== 44348 -Q291cg== 44349 -IGNvb2xkb3du 44350 -IGFpbnNp 44351 -IEdMdWludA== 44352 -ZXJlYWw= 44353 -IGFycmF5T2Y= 44354 -IGhhdGNo 44355 -PT09PT09PT09PQ== 44356 -cmVzc2Vz 44357 -X1BQ 44358 -Ll4= 44359 -X2RlY2F5 44360 -IEJsZXNz 44361 -bWV0cmljcw== 44362 -IENPUFlJTkc= 44363 -IER1bXBzdGVy 44364 -IEpvc8Op 44365 -IERlc2lnbnM= 44366 -PFZvaWQ= 44367 -57q/ 44368 -ID8+PA== 44369 -ICJ9Cg== 44370 -dGltZXpvbmU= 44371 -IGVlcg== 44372 -bWF4Y2Ru 44373 -IEVTQw== 44374 -aWdhcmV0 44375 -X2Nvbm5lY3RlZA== 44376 -X3JldmVyc2U= 44377 -IHF1ZXN0aW9uYWJsZQ== 44378 -IFVTQw== 44379 -IHR1dHRp 44380 -IGRyb3BvdXQ= 44381 -IEFjdGl2aXRpZXM= 44382 -IFdpbmRz 44383 -JykpKTsK 44384 -IGNvbmdlc3Q= 44385 -xJ/EsQ== 44386 -IHByb2xvbmdlZA== 44387 -6L+Z 44388 -IENyb3NzQXhpc0FsaWdubWVudA== 44389 -TEVFUA== 44390 -IFZBTElE 44391 -IEdheg== 44392 -IGRlcGVuZGVuY2U= 44393 -IFByaXg= 44394 -LkNvbXBpbGVyU2VydmljZXM= 44395 -anVtcA== 44396 -IHN0cmF0 44397 -Y2lyYw== 44398 -IENVU1RPTQ== 44399 -eGFh 44400 -IGJtcA== 44401 -IGJ1cmVhdQ== 44402 -IHdhcmVu 44403 -Tlg= 44404 -KFdpbmRvdw== 44405 -IENocmlzdGll 44406 -X0ZF 44407 -IHRu 44408 -IE9tZWdh 44409 -Y29tbXVuaWNhdGlvbnM= 44410 -SG9tZVBhZ2U= 44411 -Y29tcGxldGlvbg== 44412 -IHN1cHBseWluZw== 44413 -WVBFUw== 44414 -w6F2ZWw= 44415 -5Yi2 44416 -KGNsaWNr 44417 -XENvbnRyYWN0cw== 44418 -L3F1ZXN0aW9ucw== 44419 -IGV6 44420 -QU1T 44421 -Lm1lc2g= 44422 -ICc8Pw== 44423 -asOg 44424 -SW5p 44425 -LiM= 44426 -IENhcmRpbmFscw== 44427 -cGNpw7Nu 44428 -Q3ViZQ== 44429 -IFBhdGllbnRz 44430 -X3ByZWY= 44431 -QWN0aW9uQnV0dG9u 44432 -KGJ1aWxk 44433 -IFZpc2E= 44434 -b3ZlbA== 44435 -KEFycmF5TGlzdA== 44436 -SWdu 44437 -IHJlaGFiaWxpdGF0aW9u 44438 -IHBhbGFjZQ== 44439 -IHNwZWVjaGVz 44440 -fScK 44441 -SHR0cFJlc3BvbnNl 44442 -CWNvZGU= 44443 -RHVtbXk= 44444 -IGFjYWRlbXk= 44445 -Lm1vdmll 44446 -IGluY29ycmVjdGx5 44447 -IGN5Yw== 44448 -KFVuaXR5RW5naW5l 44449 -CWNhbGxiYWNr 44450 -IFNhdGFu 44451 -IEZVTkM= 44452 -IGNoYW50 44453 -IEhlYWx0aHk= 44454 -OicsCg== 44455 -U2hpcHBpbmc= 44456 -X21j 44457 -IER5bGFu 44458 -IFByb2R1Y2Vy 44459 -IHJlc3B1ZXN0YQ== 44460 -IHBvbGlzaGVk 44461 -QnJvYWRjYXN0 44462 -IGJhbGFuY2luZw== 44463 -IFNsaWRl 44464 -IENhcHM= 44465 -c3RpbGw= 44466 -IGhhcHBpZXI= 44467 -IEdvc3BlbA== 44468 -dHJhbg== 44469 -LnBhdGhuYW1l 44470 -QWN0aXZlU2hlZXQ= 44471 -IENoYW5n 44472 -PlwK 44473 -Um9ib3Q= 44474 -SnNvbk9iamVjdA== 44475 -IERG 44476 -IFByb2Nlc3Nvcg== 44477 -X3Nob3VsZA== 44478 -LnByb3RvYnVm 44479 -LXVzZXJz 44480 -IGVtYnJ5 44481 -Rk9OVA== 44482 -IHN0YXJ0dXBz 44483 -IERhdGFTb3VyY2U= 44484 -KSM= 44485 -dXJvcw== 44486 -X0NvbG9y 44487 -IHN0YW5kYWxvbmU= 44488 -fVs= 44489 -amQ= 44490 -IGZvcmdpdmU= 44491 -IG5neA== 44492 -IEdlbmVyYWxseQ== 44493 -IGNvbmZpZ3VyYWJsZQ== 44494 -L29yZGVy 44495 -IHZhcw== 44496 -JykiOwo= 44497 -IFJS 44498 -IFRyb3k= 44499 -IGNvbXByb21pc2Vk 44500 -IFN3YW4= 44501 -aW50ZW5kZW50 44502 -Q2VudHJhbA== 44503 -X2tlZXBlcg== 44504 -IGFycXVpdm8= 44505 -IFJlYWRPbmx5 44506 -X2N1cnZl 44507 -a3Y= 44508 -ZW50aW4= 44509 -6LE= 44510 -IEV5 44511 -LmltcmVhZA== 44512 -IFBhbQ== 44513 -aWZmZQ== 44514 -YXRpdml0eQ== 44515 -eGJj 44516 -IGdyaW0= 44517 -LWZpbGxlZA== 44518 -bmFtZXNl 44519 -J106 44520 -IGF1cg== 44521 -IEdpYnNvbg== 44522 -Lk1vdXNlRXZlbnQ= 44523 -IGxhZG8= 44524 -YXZhZG9j 44525 -IGZhbWls 44526 -IE1vZGVy 44527 -ZnBz 44528 -44CA44CA 44529 -LWV4YW1wbGU= 44530 -IEFsemhlaW1lcg== 44531 -IFV0Zg== 44532 -X2FyZ3VtZW50cw== 44533 -Q29uY2x1c2lvbg== 44534 -dGV4dENvbnRlbnQ= 44535 -cmVtYWluaW5n 44536 -IGludGVycnVwdHM= 44537 -IEJhY2t1cA== 44538 -IE1vbmc= 44539 -IHJlY2VwdG9ycw== 44540 -aGlzdG9y 44541 -LmNvcm91dGluZXM= 44542 -IHNob3V0ZWQ= 44543 -QWxhcm0= 44544 -IGNvbWJ1c3Q= 44545 -IGdyb3Rl 44546 -dWx0dXJhbA== 44547 -KGlkcw== 44548 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 44549 -aXBsaW5hcnk= 44550 -T3B0cw== 44551 -IFlhbGU= 44552 -bG9jYWxTdG9yYWdl 44553 -IGVxdWl2YWw= 44554 -IEZsZWV0 44555 -XGI= 44556 -KnBp 44557 -IFFMYWJlbA== 44558 -5qE= 44559 -IHZ4 44560 -IEFDTA== 44561 -IHN1Y2Vzc28= 44562 -IHBlcmM= 44563 -IE5vdHJl 44564 -IGFuYXJjaA== 44565 -UmluZw== 44566 -c3Bi 44567 -IHN0cnBvcw== 44568 -c3RvcmVz 44569 -IE1hcGxl 44570 -KE1haW5BY3Rpdml0eQ== 44571 -KCIiKSk= 44572 -IHZpZXdIb2xkZXI= 44573 -UXVhZA== 44574 -IGlndWFs 44575 -b3JzY2hl 44576 -Lm1hcmdpbg== 44577 -IGluZGll 44578 -IGZyYW5j 44579 -IEZvcm1CdWlsZGVy 44580 -IFBhcnRpY2lw 44581 -LmZsYXNo 44582 -IHN0b3Jtcw== 44583 -VWx0 44584 -IGZlbg== 44585 -W25ldw== 44586 -RXZlcg== 44587 -PSIK 44588 -IGxvY2FsaXplZA== 44589 -X2ZvbGxvdw== 44590 -IG5hdmU= 44591 -IGRvbWluYW5jZQ== 44592 -KHRpbGU= 44593 -Sm91cm5hbA== 44594 -IFZD 44595 -IHBlbmV0cmF0aW9u 44596 -77yV 44597 -IGNvbXBhcnRtZW50 44598 -IGJpZHM= 44599 -Rm9ybWF0dGVk 44600 -KioqKioqLwoK 44601 -KGNpdHk= 44602 -4oCUaXQ= 44603 -W0M= 44604 -IHVzZUNhbGxiYWNr 44605 -YXVi 44606 -KT8u 44607 -IFZBUg== 44608 -IFNlYmFzdGlhbg== 44609 -IE1vc3M= 44610 -IGFidW5kYW50 44611 -R3JlZw== 44612 -0YLQsA== 44613 -X2Np 44614 -IGJpYmxp 44615 -Q1JN 44616 -IEF0dGVtcHQ= 44617 -aXNtZQ== 44618 -ZGFzaA== 44619 -44CO 44620 -X211 44621 -LkZvcm1hdHRpbmdFbmFibGVk 44622 -SW5kZWVk 44623 -LWRpcmVjdA== 44624 -IHN1Y2tpbmc= 44625 -IHBuZQ== 44626 -b2NhYnVsYXJ5 44627 -IFBhY2tlcnM= 44628 -Lk5hdmlnYXRpb24= 44629 -IHBpZWQ= 44630 -Y3JpYmluZw== 44631 -IFN0dWFydA== 44632 -LlRvRG91Ymxl 44633 -IFNlY29uZGFyeQ== 44634 -U2F2aW5n 44635 -IER1dA== 44636 -IE1hZGQ= 44637 -TWFnaWM= 44638 -LEg= 44639 -LmRvY3VtZW50RWxlbWVudA== 44640 -IEJTVA== 44641 -IGRpZmZlcnM= 44642 -IG1vcmVvdmVy 44643 -X25k 44644 -U0VBUkNI 44645 -0L/RgNCw0LI= 44646 -5rQ= 44647 -dG9NYXRjaA== 44648 -IGRlY3JlYXNpbmc= 44649 -LW1lbWJlcg== 44650 -YW1wdXM= 44651 -KGJvb3N0 44652 -RGFpbHk= 44653 -RGF0YUdyaWRWaWV3 44654 -IEh0dHBDb250ZXh0 44655 -IGhpcHA= 44656 -X3dvcmtlcnM= 44657 -LWxhbmd1YWdl 44658 -6ZM= 44659 -IGNvbnNpc3RlZA== 44660 -YXRoaW5n 44661 -IE1lcmN1cnk= 44662 -JGNvbnRlbnQ= 44663 -IHByYWN0aWNlZA== 44664 -IE1vZHVsZXM= 44665 -X0RBWQ== 44666 -IHdlYWtuZXNzZXM= 44667 -IExvZGdl 44668 -IG5hcg== 44669 -IE1hdGU= 44670 -IGpw 44671 -IEh0dHBIZWFkZXJz 44672 -IHNtbw== 44673 -IFRPS0VO 44674 -XSko 44675 -IGFxdWk= 44676 -c3dhZ2Vu 44677 -IHNydg== 44678 -CWFucw== 44679 -QXJvdW5k 44680 -IE1hbnVlbA== 44681 -IGZpY3Rpb25hbA== 44682 -IElNRw== 44683 -IC4n 44684 -IEJlcnJ5 44685 -IHdhbGxwYXBlcg== 44686 -c2V4dWFs 44687 -aWVybw== 44688 -IOeahA== 44689 -7IaM 44690 -QmFja2luZ0ZpZWxk 44691 -IEFkcmlhbg== 44692 -QkFTRVBBVEg= 44693 -IHJlcGVhdHM= 44694 -IGJsdWVz 44695 -IHVucHJlZGljdA== 44696 -X2NvbGw= 44697 -c3RhY2xl 44698 -IFR1bWJscg== 44699 -IEVsZg== 44700 -IGFzc3VyYW5jZQ== 44701 -IGNlbnN1cw== 44702 -IElNUE9SVA== 44703 -RU5ERVI= 44704 -YW5vcw== 44705 -ID0o 44706 -IEVsbGlz 44707 -IgoKCgo= 44708 -Lndpbg== 44709 -IEFib3Zl 44710 -YWxvbg== 44711 -X3RpY2s= 44712 -IHJlcHJlc2VudGF0aW9ucw== 44713 -IOaV 44714 -d2lk 44715 -IEFybXM= 44716 -TGlzdGE= 44717 -X2ZhaWx1cmU= 44718 -X2Nt 44719 -LkZsYXRBcHBlYXJhbmNl 44720 -IHRocm9uZQ== 44721 -UGF0Y2g= 44722 -IFZveQ== 44723 -ZW5nbA== 44724 -IG5lZ290aWF0aW5n 44725 -PmA= 44726 -IHNob290cw== 44727 -IEZQUw== 44728 -LlllYXI= 44729 -IEtpc3M= 44730 -ZW5jacOzbg== 44731 -cmVldGluZw== 44732 -RnJvbUZpbGU= 44733 -IHJlc2lnbmF0aW9u 44734 -2Lc= 44735 -IHR3aW5z 44736 -xrDhu6M= 44737 -IGdlYnJ1 44738 -LmdldENvbnRlbnQ= 44739 -LlRyZWU= 44740 -IEVtcGxveWVlcw== 44741 -IEZJRkE= 44742 -IGNlcnRhaW50eQ== 44743 -KENs 44744 -IHRvdGFscw== 44745 -ZWRpdGFibGU= 44746 -4KWA 44747 -LlJlcG9ydGluZw== 44748 -TWFz 44749 -cXVpZXQ= 44750 -LnJ1bGVz 44751 -IFZP 44752 -Y29uZXhpb24= 44753 -LEs= 44754 -IGFsbG9jYXRvcg== 44755 -IFBvd2Rlcg== 44756 -XFJlcG9zaXRvcnk= 44757 -QmVhdA== 44758 -X3RpcG8= 44759 -IFsnJyw= 44760 -X0lOVFI= 44761 -IDw8PA== 44762 -PGhy 44763 -Iik9PQ== 44764 -dWdnYWdl 44765 -IENyYXc= 44766 -IMOpZ2FsZW1lbnQ= 44767 -IGdpbmdlcg== 44768 -IHByaW1lcmE= 44769 -IHByb2R1dG8= 44770 -bHRr 44771 -LlVzZXJOYW1l 44772 -IHN0cmVycm9y 44773 -bWl0aA== 44774 -X25i 44775 -IGRpc2NvbWZvcnQ= 44776 -J107Pz48Lw== 44777 -UVQ= 44778 -IGVydXB0 44779 -IERhbmlzaA== 44780 -XEFjdGl2ZQ== 44781 -X2FkYXB0ZXI= 44782 -IGJ1YmJsZXM= 44783 -cm9sbG8= 44784 -b3Jnb3Q= 44785 -0L3Ri9GF 44786 -VkVDVE9S 44787 -b2NvZGU= 44788 -IEJ1bGxz 44789 -IGJvaWw= 44790 -PiIpOw0K 44791 -ZHJvcElmRXhpc3Rz 44792 -IEJlZw== 44793 -X0hBTA== 44794 -IGNyb3NzQXhpc0FsaWdubWVudA== 44795 -IEV2aWRlbmNl 44796 -IHBlY3VsaWFy 44797 -IGluc3RpdHV0ZQ== 44798 -dmVpcw== 44799 -IGZmdA== 44800 -w4E= 44801 -IHpvZWt0 44802 -YW5hbHk= 44803 -IEhvbWVsYW5k 44804 -IHBlbmV0cg== 44805 -dWRkZW5seQ== 44806 -CWVsZW1lbnQ= 44807 -IEJyZW4= 44808 -IFRydWRlYXU= 44809 -IEN1YmFu 44810 -amFt 44811 -dXNsaW0= 44812 -X2V2 44813 -IHN0ZW1z 44814 -fSU= 44815 -neWniw== 44816 -IGJyYW5kaW5n 44817 -IGNvcnJlc3BvbmRlbmNl 44818 -LmpxdWVyeQ== 44819 -ouWNlQ== 44820 -IFJlYWRz 44821 -KEh0dHBTdGF0dXNDb2Rl 44822 -YXNzaW4= 44823 -KHNsb3Q= 44824 -IEdyYWR1YXRl 44825 -Ly8vPA== 44826 -IGluZm9ybWF0aW9ucw== 44827 -RU5BQkxF 44828 -IHB1aXM= 44829 -IGZpbmRlcg== 44830 -IEJyaXM= 44831 -IG5ldHRzdGVkZXI= 44832 -X21pZA== 44833 -IG9ncw== 44834 -IFN0ZXJsaW5n 44835 -IGFycm9n 44836 -c3RyZnRpbWU= 44837 -fAoK 44838 -IHZveA== 44839 -IFJlZ2FyZGxlc3M= 44840 -IGVzbw== 44841 -IENvbWZvcnQ= 44842 -LkJvb2xlYW5GaWVsZA== 44843 -IHVo 44844 -QUNZ 44845 -IHNxdWVleg== 44846 -IFZpYw== 44847 -Y29udHJv 44848 -Lmxv 44849 -IGlyZQ== 44850 -IENvbWVkeQ== 44851 -67Y= 44852 -IG9yaWdpbmF0ZWQ= 44853 -IHNoaXBtZW50 44854 -fG1heA== 44855 -X2d1aWQ= 44856 -bGV2YXRpb24= 44857 -0L3QsNGP 44858 -KHVuZGVmaW5lZA== 44859 -IEREUg== 44860 -IHNob290aW5ncw== 44861 -IExhdGlubw== 44862 -RU5ET1I= 44863 -IGF2ZXJhZ2luZw== 44864 -IGdyZWV0ZWQ= 44865 -IHRoZWF0ZXJz 44866 -0L7QtQ== 44867 -IGRC 44868 -IGdzdA== 44869 -IGRlZmluaXRl 44870 -LlN0b3JhZ2U= 44871 -Lmhlcg== 44872 -IGFmb3Jl 44873 -IFJlYWxpdHk= 44874 -IEdvZHM= 44875 -dmVyc2Vk 44876 -IGhhbmRzb21l 44877 -IGV4Y2x1ZGluZw== 44878 -KGFk 44879 -UXVvdGVz 44880 -IFNjaGVtZQ== 44881 -P3E= 44882 -IFRhbWls 44883 -VGlja3M= 44884 -IHBlc3Q= 44885 -J24= 44886 -IHBvcm5vZ3JhcGh5 44887 -X21vZGFs 44888 -IC0tLS0tLS0tLS0= 44889 -IGRpc3Bvc2FibGU= 44890 -RlJFRQ== 44891 -IHNoYXJr 44892 -Q0hF 44893 -IGRlcGljdGVk 44894 -IGRlbW9uc3RyYXRpb25z 44895 -IEtpbGxlZA== 44896 -IFJVTEU= 44897 -IG9ic2Vzc2Vk 44898 -IHNpbXBsaWZpZWQ= 44899 -UG9zdGFs 44900 -IGNvbmNlcHR1YWw= 44901 -IHBzdA== 44902 -TGFz 44903 -X1BST0pFQ1Q= 44904 -dWNjZWVkZWQ= 44905 -b2x1 44906 -xJ9p 44907 -IHBlcnNvbmFsaXRpZXM= 44908 -IHJlc2hhcGU= 44909 -IGVuY2xvc2Vk 44910 -CXB0cg== 44911 -IHR1dG9yaWFscw== 44912 -IGV4cGxvZGVk 44913 -X0RJUkVDVE9SWQ== 44914 -5YaF5a65 44915 -IGNhbm9u 44916 -IHJlY29nbmlzZQ== 44917 -UEFE 44918 -IEFwcHJveA== 44919 -IFJlc3RvcmU= 44920 -IEltcG9ydGFudA== 44921 -IGhlYXZpZXI= 44922 -LlNlcXVlbnRpYWw= 44923 -RWFydGg= 44924 -IE1pbGs= 44925 -LnNldFJlcXVlc3Q= 44926 -LnRlbQ== 44927 -IHJlY29uc3RydWN0 44928 -IHNrZXB0aWNhbA== 44929 -X1ByaXZhdGU= 44930 -QlVG 44931 -cXVh 44932 -OmE= 44933 -IHNlaw== 44934 -IGR3ZWxs 44935 -b3NzYQ== 44936 -IHJld2FyZGVk 44937 -0LjQuQ== 44938 -KHRvcGlj 44939 -X3BhcnRpdGlvbg== 44940 -IF9fX19fX19fX19fX19fX19fXw== 44941 -S2V5d29yZHM= 44942 -IEZyYW5jbw== 44943 -TGl0ZQ== 44944 -IG5ha2Vu 44945 -INC30LA= 44946 -T0JKRUNU 44947 -IGNyYWZ0cw== 44948 -IFN3YXA= 44949 -LlhuYQ== 44950 -LkNvbm5lY3Q= 44951 -IGJhbGNvbnk= 44952 -KHJlYWw= 44953 -IEJhcm5lcw== 44954 -Ymly 44955 -IFR3ZW50eQ== 44956 -YXlhbg== 44957 -YXRhcnM= 44958 -IFByb3BlbA== 44959 -IElobmVu 44960 -VXBncmFkZQ== 44961 -IGN1cmI= 44962 -LXNlY29uZA== 44963 -IG5lcGg= 44964 -LnByZXM= 44965 -7J6F 44966 -LnNlcQ== 44967 -IHBhZGRlZA== 44968 -Ij8= 44969 -amw= 44970 -44Os 44971 -Jyk8Lw== 44972 -IGNpdmlj 44973 -Z29ucw== 44974 -PmE= 44975 -Q29vcmRpbmF0ZXM= 44976 -IGVuYWN0ZWQ= 44977 -RU5UUw== 44978 -IGxhYw== 44979 -LmZpbmFs 44980 -IFBocFN0b3Jt 44981 -Y2FsbGVk 44982 -IGlucXVpcmllcw== 44983 -Lm1pZGRsZXdhcmU= 44984 -IERvd250b3du 44985 -Lyc7Cg== 44986 -IGtpbG9tZXQ= 44987 -YWNjZWw= 44988 -IHF1aWVu 44989 -d3N0cmluZw== 44990 -c2V0RGF0YQ== 44991 -IG1hbmVyYQ== 44992 -IG1vZHVsYXI= 44993 -cmltcA== 44994 -IHRhcmlmZnM= 44995 -4oCZaWw= 44996 -X1RIUk9X 44997 -L2NvbG9y 44998 -IEhUTUxFbGVtZW50 44999 -IGNhcnJv 45000 -IHByZXJl 45001 -IHBsb3R0aW5n 45002 -IFBvc2l0aXZl 45003 -IE1hY2hpbmVz 45004 -T1RFUw== 45005 -4bub 45006 -cGxlYXNhbnQ= 45007 -IGFsdGU= 45008 -IGFpbmRh 45009 -dGhlc2U= 45010 -IGNvcnM= 45011 -aXBheQ== 45012 -IEFkdmlzb3J5 45013 -IFJ1Ymlv 45014 -anE= 45015 -IGxpbWVzdG9uZQ== 45016 -IGRldGFjaGVk 45017 -6K6+572u 45018 -dGVuYW50 45019 -IERlcHRo 45020 -YWxvcmU= 45021 -INGB0YLRgNC+0Lo= 45022 -IEZPUkU= 45023 -IExheQ== 45024 -cHJlc2VudGF0aW9u 45025 -KScpOwo= 45026 -LnN1YnBsb3Rz 45027 -z4M= 45028 -Tk9X 45029 -R2Fy 45030 -aGFuZGxlcw== 45031 -YWJyYQ== 45032 -cHV0aWVz 45033 -IEVsZWN0cmljYWw= 45034 -TWlkZGxl 45035 -cm9waWM= 45036 -IEpE 45037 -IER5bg== 45038 -IEJyaXN0b2w= 45039 -IE1jQ2FydGh5 45040 -IHN0cmlrZXI= 45041 -IGVudW1lcmFibGU= 45042 -IEV2YW4= 45043 -LmRlZmF1bHRz 45044 -cXVlbmNlcw== 45045 -KXx8 45046 -CXRva2Vu 45047 -4peP 45048 -LWRyb3Bkb3du 45049 -U1RPUkU= 45050 -IEdyYXBoaWM= 45051 -KHBw 45052 -RXhwbA== 45053 -IHVwd2FyZHM= 45054 -IERpc3RyaWJ1dGVk 45055 -IFdFQg== 45056 -SmVy 45057 -aXNOYU4= 45058 -55Sf5oiQ 45059 -PlI= 45060 -w7xzc2Vu 45061 -ZWZz 45062 -IHVuY292ZXI= 45063 -IGx1ZA== 45064 -LmNhbGN1bGF0ZQ== 45065 -IGludHB0cg== 45066 -IG1pZGZpZWxkZXI= 45067 -LkhlYWRlcnM= 45068 -IG1m 45069 -ZXJlZg== 45070 -Lk1ldHJv 45071 -IFNwZWFraW5n 45072 -OmI= 45073 -IGNyeXB0b2N1cnJlbmNpZXM= 45074 -IGRlbW9ucw== 45075 -CUVYUEVDVA== 45076 -IHdpY2tlZA== 45077 -eW91dHViZQ== 45078 -OkludA== 45079 -IEhpbmRp 45080 -IENBVA== 45081 -INi5 45082 -cmFy 45083 -b21vcmU= 45084 -L3Blcg== 45085 -L2xpY2Vuc2U= 45086 -IHJlaW0= 45087 -IGF3YWl0aW5n 45088 -IGxldGhhbA== 45089 -IEVG 45090 -cm91bmRlZA== 45091 -IFBsYXRpbnVt 45092 -INCy0YHQtQ== 45093 -LmNvb3Jkcw== 45094 -LkRldmljZQ== 45095 -L2l0ZW0= 45096 -IFdlbm4= 45097 -Y29tcGlsZUNvbXBvbmVudHM= 45098 -IEtpbmRlcg== 45099 -LnJlbW92ZUl0ZW0= 45100 -IGFuZGE= 45101 -Ym5i 45102 -IHByYQ== 45103 -KHRyYW5zYWN0aW9u 45104 -IGVtYmFycmFzc2luZw== 45105 -CUJPT0w= 45106 -LmNvbnRlbnRWaWV3 45107 -IGV2ZW50ZGF0YQ== 45108 -YXRvcmU= 45109 -IHByb3ZpZGVkSW4= 45110 -aXJtYQ== 45111 -IHpvbmE= 45112 -X0hX 45113 -5pk= 45114 -IHN0b3Zl 45115 -IGNvdW50ZXJwYXJ0 45116 -X1Byb2R1Y3Q= 45117 -X01BTkFHRVI= 45118 -IGluZnJpbmc= 45119 -IEVSQQ== 45120 -X3BhcnR5 45121 -0ZE= 45122 -IGluaWNp 45123 -X1JlcXVlc3Q= 45124 -IG1pcmFjbGU= 45125 -IGNhbmNlbEJ1dHRvbg== 45126 -U3B5 45127 -YXTDsw== 45128 -IHBvbGlzaA== 45129 -IE5pY29sZQ== 45130 -LmRpc3BsYXlOYW1l 45131 -XFJlcXVlc3Rz 45132 -IHVzZUhpc3Rvcnk= 45133 -Um91dGVyTW9kdWxl 45134 -IHN0YXJlZA== 45135 -SURFUg== 45136 -0YPQvdC60YbQuA== 45137 -IG5vdGE= 45138 -JGFycg== 45139 -cGVjaWZpZWQ= 45140 -IHRvcHA= 45141 -X0RSSVZFUg== 45142 -L25n 45143 -5aA= 45144 -X3Rt 45145 -JXRpbWVvdXQ= 45146 -PHM= 45147 -ICgqKQ== 45148 -IEh0dHBSZXF1ZXN0 45149 -X1RSQUNL 45150 -KG5vdGU= 45151 -IEV4cGxvcmU= 45152 -X3NlcnY= 45153 -IOe7 45154 -QmluZGVy 45155 -KyIs 45156 -LmF0dA== 45157 -IEV0aGk= 45158 -IGPDs2RpZ28= 45159 -PSdc 45160 -LmxpbmVz 45161 -KE9m 45162 -5bCG 45163 -bWlzc2libGU= 45164 -IHbDqQ== 45165 -IGFjb3VzdGlj 45166 -IGNyYWZ0aW5n 45167 -bml0 45168 -LmJh 45169 -IEx1Y3k= 45170 -IGlQb2Q= 45171 -IHB1cGlscw== 45172 -LW1heA== 45173 -X3dy 45174 -KGNw 45175 -IFJFUE9SVA== 45176 -IGRucw== 45177 -IFJlZmVyZW5jZXM= 45178 -IHVuZGVydGFrZW4= 45179 -IGvDuGJlbmhhdm4= 45180 -IGNoYWk= 45181 -IENyb2F0 45182 -X0xvZw== 45183 -cm93bmVk 45184 -X21lZA== 45185 -CWRhdGU= 45186 -I19f 45187 -IGNvc3R1bWVz 45188 -IFJlcXVpcmVz 45189 -YWZmbGU= 45190 -54q25oCB 45191 -LVNlbWl0 45192 -ZWxhaWRl 45193 -0LXRgtC+0LQ= 45194 -IHBlc3RpYw== 45195 -IGRyYQ== 45196 -RE9DVU1FTlQ= 45197 -IC4uLg0K 45198 -fWB9Cg== 45199 -IEF1Y3Rpb24= 45200 -IERvY2s= 45201 -eHh4eHh4eHg= 45202 -KGdldFN0cmluZw== 45203 -hY0= 45204 -IGJvcmRlcldpZHRo 45205 -IE1hY2hpbmVyeQ== 45206 -IHByZWRpY3RhYmxl 45207 -LlNI 45208 -IGFtcGxpdHVkZQ== 45209 -LmZvclJvb3Q= 45210 -SU5hdmlnYXRpb24= 45211 -VGFibGVNb2RlbA== 45212 -YXR0cmli 45213 -IG1hbmV1dmVy 45214 -IGV4Y2F2 45215 -QkVSUw== 45216 -IGRhcGF0 45217 -IGluc3RhbGxhdGlvbnM= 45218 -LkFzeW5j 45219 -IHJheXM= 45220 -PeKAnQ== 45221 -Ow0NCg== 45222 -LmNyeXB0bw== 45223 -X2RiZw== 45224 -IEVudW1lcmFibGU= 45225 -T2ZTaXpl 45226 -X2Vwb2Nocw== 45227 -bXc= 45228 -TUVOVQ== 45229 -b3V0bGluZQ== 45230 -IFBhcGVycw== 45231 -PT09PT09PT09PT09Cg== 45232 -IHVuaWZvcm1z 45233 -IEdpZw== 45234 -LXBhY2thZ2U= 45235 -IEplbmtpbnM= 45236 -IEhvbWVQYWdl 45237 -LmlzU2VsZWN0ZWQ= 45238 -IG1lY2hhbmlj 45239 -TUs= 45240 -IFNvdW5kcw== 45241 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 45242 -IHJlc2VhcmNoaW5n 45243 -IGluZm9z 45244 -b2dyYXBoaWNz 45245 -ZXJzZXQ= 45246 -KFsnLw== 45247 -IFRpbWJlcg== 45248 -LmFnZW50 45249 -LnRvSlNPTg== 45250 -X2NvbW1hbmRz 45251 -cGFyaW5n 45252 -X2FkanVzdA== 45253 -Lm5vbWU= 45254 -KGdsbQ== 45255 -U3RhdHVzQmFy 45256 -ZmlsZXBhdGg= 45257 -P+KAmQ== 45258 -IGRldGVjdGl2ZQ== 45259 -IHVuc2VyZXI= 45260 -IFRpYmV0 45261 -RU5ERUQ= 45262 -KHNlZWQ= 45263 -IHNuZWFr 45264 -IGFtb3I= 45265 -PSIvLw== 45266 -IFBhbnRoZXJz 45267 -YWxsYXg= 45268 -IExJVkU= 45269 -CURXT1JE 45270 -XT0t 45271 -IHRvcm5hZG8= 45272 -L21pbg== 45273 -IGx1bmdz 45274 -LWN1cnJlbnQ= 45275 -IEJvb2tpbmc= 45276 -5YiX6KGo 45277 -IGVuam95bWVudA== 45278 -4KSw 45279 -SkE= 45280 -dHlwZWQ= 45281 -LkJ0bg== 45282 -ZmF0 45283 -dWdhbA== 45284 -IFNoYXJlcw== 45285 -IGRpc2dy 45286 -IEJBUg== 45287 -IEZPWA== 45288 -T3Bjb2Rl 45289 -IFN6 45290 -a2V5ZG93bg== 45291 -aWN0aW9uYXJpZXM= 45292 -IGRldGFpbGluZw== 45293 -fSkpCg== 45294 -IHBvaw== 45295 -IGRlbW9uc3RyYXRpbmc= 45296 -IG5vdGF0aW9u 45297 -bGF5ZXJz 45298 -QGlm 45299 -IE5QUg== 45300 -LnN0cmljdEVxdWFs 45301 -IFJlY2lwZXM= 45302 -LlRlbnNvcg== 45303 -IGxpcXVvcg== 45304 -IGRlYnRz 45305 -LmVuZHNXaXRo 45306 -V2hlZWw= 45307 -LlBvcw== 45308 -Q1NW 45309 -JGFyaXR5 45310 -IHVuc3RhYmxl 45311 -KGxvc3M= 45312 -RU5TT1I= 45313 -IGVsZXZlbg== 45314 -IExvcGV6 45315 -IEhvcGtpbnM= 45316 -Y29ub20= 45317 -IFNldGg= 45318 -IHBvZW1z 45319 -UXVhbnQ= 45320 -IGdzbA== 45321 -IHN5cnVw 45322 -IHNpYmxpbmc= 45323 -IGNhc3M= 45324 -LXZvdXM= 45325 -w7Z0 45326 -X1BBVFRFUk4= 45327 -X1NFQ1RJT04= 45328 -ZXN0aW1hdGVk 45329 -dXBncmFkZQ== 45330 -Lm1vbmdvZGI= 45331 -IEJvYXQ= 45332 -X0NUWA== 45333 -IGZldGNoaW5n 45334 -dXN0aW4= 45335 -cGllbA== 45336 -TWFyZw== 45337 -UmVmbGVjdGlvbg== 45338 -IGR1Y3Q= 45339 -IE11bmljaXBhbA== 45340 -IGJ4 45341 -LkdldEN1cnJlbnQ= 45342 -bWxpbms= 45343 -IEFjY291bnRpbmc= 45344 -IEdlbmV2YQ== 45345 -X1Bvcw== 45346 -IHBhc3Nlcg== 45347 -IGhlYXJpbmdz 45348 -Y29tcGFu 45349 -IGZyYWdpbGU= 45350 -SW5pdGlhbGl6ZXI= 45351 -d2Fsa2Vy 45352 -Lk1hdGVyaWFs 45353 -IEh1bnRpbmc= 45354 -dHJ5c2lkZQ== 45355 -IGthdA== 45356 -IGNsZXJr 45357 -4Z8= 45358 -ZG9pbmc= 45359 -CWdyb3Vw 45360 -IHNhbmN0aW9u 45361 -Lmxi 45362 -IExhenk= 45363 -IENvbnN0cmFpbnQ= 45364 -UGFnaW5hdGlvbg== 45365 -IHBvdXZleg== 45366 -IEluZGljYXRlcw== 45367 -TUVS 45368 -IGNvdXJz 45369 -IHllYXJseQ== 45370 -IGdyb3NzZQ== 45371 -YWJicmV2 45372 -IERPTg== 45373 -IHByb2NlZWRlZA== 45374 -ZW50bGljaA== 45375 -IHByb3BlcnR5TmFtZQ== 45376 -IFRlYWNoaW5n 45377 -c3RhZHQ= 45378 -IGN1dG9mZg== 45379 -b3JuZXJz 45380 -IGFmcmljYQ== 45381 -IHJlbmRlcnM= 45382 -IFlhbmtlZXM= 45383 -IFRvb2xiYXI= 45384 -c3BhY2Vz 45385 -LmZpbGxTdHlsZQ== 45386 -IHNlZ3VuZG8= 45387 -X3N0cmxlbg== 45388 -LkZpcmViYXNl 45389 -5aSE 45390 -IG1lbnRpb25pbmc= 45391 -XCg= 45392 -IFZhbHZl 45393 -U2V0dGVy 45394 -IHNwYW5z 45395 -IEFsY29ob2w= 45396 -IExldHRlcnM= 45397 -XHhl 45398 -IFRL 45399 -X0JMRQ== 45400 -LmdldFJlc3VsdA== 45401 -PFBsYXllcg== 45402 -IFBhdHQ= 45403 -IGVhc2luZw== 45404 -IHR1cmtleQ== 45405 -IEZlbg== 45406 -Jyki 45407 -IGNvbmZpbmVk 45408 -IGluY2x1cw== 45409 -U3VwZXJ2aWV3 45410 -KHdpdGhJZGVudGlmaWVy 45411 -ZW5jaWFs 45412 -IHN0dWZmZWQ= 45413 -VGhldGE= 45414 -IGVjb25vbWlzdHM= 45415 -fSkpOwoK 45416 -Y29va2llcw== 45417 -IFJvb3Nl 45418 -IENoZWVzZQ== 45419 -IGZpY2hpZXI= 45420 -IGVuZm9yY2Vk 45421 -QUJC 45422 -bm/Fm2Np 45423 -X0FMTE9X 45424 -IHJlY3J1aXRlZA== 45425 -IGV4cGVuZGl0dXJl 45426 -LW5pZ2h0 45427 -IGFzc2VydE5vdE51bGw= 45428 -X2V4ZWN1dGU= 45429 -INiv 45430 -SU5ERVg= 45431 -X0ZNVA== 45432 -IHJlc2N1ZWQ= 45433 -IE1vbnRobHk= 45434 -IENvbnNlcnZhdGlvbg== 45435 -IEdlYg== 45436 -T2JhbWE= 45437 -RXBvY2g= 45438 -aWNpZXM= 45439 -IE9ydA== 45440 -IHNvaXQ= 45441 -KGljb24= 45442 -RnJpZW5kcw== 45443 -bW9s 45444 -IGdyb3VuZGVk 45445 -IENhdXNl 45446 -YWRlbmE= 45447 -V0VFTg== 45448 -IEx1bg== 45449 -SVRJVkU= 45450 -Lmxvb3A= 45451 -X3VudGls 45452 -IGNvcnI= 45453 -LmVkZ2Vz 45454 -IGh5cG90aA== 45455 -Y2hlZHVsaW5n 45456 -dHJhbnNsYXRvcg== 45457 -INCc 45458 -Um9t 45459 -44CRCgo= 45460 -IFhhbWFyaW4= 45461 -IHZpb2xhdGluZw== 45462 -LmFuY2hvcg== 45463 -LS0tCgo= 45464 -IHRyYWRlcg== 45465 -QURWRVJUSVNFTUVOVA== 45466 -IHVuc2VyZQ== 45467 -IERBTw== 45468 -IGJsb25k 45469 -IFBBVA== 45470 -Lmdsb2I= 45471 -IOi+kw== 45472 -IHNwbGl0dGluZw== 45473 -IHVuc3Vic2NyaWJl 45474 -IGF0bW9zcGhlcmlj 45475 -IFRyaW0= 45476 -IGNpdGF0aW9u 45477 -IGluZmVyZW5jZQ== 45478 -IEZ0 45479 -IERhcndpbg== 45480 -ZmluZE9uZQ== 45481 -IEdlbA== 45482 -KENvbnZlcnQ= 45483 -IGFjY2Vzc29y 45484 -O3RleHQ= 45485 -KHNvcnRlZA== 45486 -IGp1ZGdlZA== 45487 -KTtc 45488 -OnA= 45489 -IG1laW5l 45490 -IFNsaW0= 45491 -LkNvbW1hbmRz 45492 -IHBlcmNlaXZl 45493 -Y29ob2xpYw== 45494 -PERhdGE= 45495 -LmVudHJ5U2V0 45496 -IGFzc2VydEZhbHNl 45497 -IFBhdHJvbA== 45498 -ZW5zZW0= 45499 -xYLEhQ== 45500 -qKE= 45501 -V0lEVEg= 45502 -IFJlc2N1ZQ== 45503 -IFVJRg== 45504 -X1RIUkVTSE9MRA== 45505 -IE1pY2hlbA== 45506 -QVRFUklBTA== 45507 -b3BlbnNvdXJjZQ== 45508 -IERpYW5h 45509 -IGludml0ZXM= 45510 -X0JPRFk= 45511 -IHJlc2Vydm9pcg== 45512 -IHJvaQ== 45513 -Y3VzdA== 45514 -KHRj 45515 -77yBIik7Cg== 45516 -IGZlc3RpdmFscw== 45517 -IHBlcmZvcm1lcnM= 45518 -IGNsaW1iZWQ= 45519 -IGp1bmdsZQ== 45520 -U3RyaW5nTGVuZ3Ro 45521 -IHVubGF3ZnVs 45522 -aWVycmU= 45523 -dmVydGlzZW1lbnQ= 45524 -IHN0YWtlcw== 45525 -IGhhdHM= 45526 -TW9kaWZ5 45527 -IExFVFRFUg== 45528 -LkhpZGU= 45529 -IHN0YXR1dG9yeQ== 45530 -X3doaXRl 45531 -IFBlcmw= 45532 -dXRlbmJlcmc= 45533 -ZW1wbGU= 45534 -Lldvcmxk 45535 -IG92ZXJsb29rZWQ= 45536 -IGNvbmNsdWRlcw== 45537 -Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 45538 -LXdpc2U= 45539 -CXN0cmVhbQ== 45540 -cG9wdWxhdGlvbg== 45541 -IGV2ZW50bw== 45542 -IGlsbHVzdHJhdGlvbnM= 45543 -ZnRz 45544 -IGF1dG9m 45545 -IFByb2NlZHVyZQ== 45546 -IGRlc2VydmVk 45547 -LXRpbWVz 45548 -IGdvbA== 45549 -TlNFcnJvcg== 45550 -Y3Jlc3Q= 45551 -IFBha2lzdGFuaQ== 45552 -YW55Y2g= 45553 -Z2V0Q3VycmVudA== 45554 -IGxhcg== 45555 -bnRs 45556 -IFJlYmVjY2E= 45557 -IG1hdGVyaWE= 45558 -IGZpbmRCeQ== 45559 -L2Fk 45560 -Q2FsbGJhY2tz 45561 -IEFscw== 45562 -IEthdGll 45563 -IE9ic2VydmFibGVDb2xsZWN0aW9u 45564 -IERvY3VtZW50YXRpb24= 45565 -VHlwZWQ= 45566 -IEN1bHR1cmVJbmZv 45567 -IFRpbW90aHk= 45568 -IGxhdGVyYWw= 45569 -InR5cGU= 45570 -IHVuYXV0aG9yaXplZA== 45571 -IHRlYWNoaW5ncw== 45572 -IGRlYnVnZ2Vy 45573 -W3ZhbHVl 45574 -IGFsb3Jz 45575 -IHV6 45576 -IHNjYXR0ZXI= 45577 -IGRvd253YXJk 45578 -IG1pZ2xp 45579 -c3RhdHVzQ29kZQ== 45580 -ICgpKQ== 45581 -IE1X 45582 -INC80L7Qtg== 45583 -Uk9TUw== 45584 -LmJ1Zg== 45585 -IGZhaXJ5 45586 -IEluZnJhc3RydWN0dXJl 45587 -PT4i 45588 -dGxlbWVudA== 45589 -JCgi 45590 -RnJvbVN0cmluZw== 45591 -IEJpbGQ= 45592 -IGNvbnZlbnRpb25z 45593 -X25hdGl2ZQ== 45594 -IEluc3BlY3Rvcg== 45595 -IFBpc3Q= 45596 -dWJhcg== 45597 -IHJlZ3M= 45598 -IFBpbG90 45599 -VGh1cw== 45600 -Picr 45601 -IGNlbGE= 45602 -Lm5ld3M= 45603 -KFByb2R1Y3Q= 45604 -TGl2aW5n 45605 -UnVzc2lh 45606 -IGZhY2V0 45607 -ZXRpY2Fs 45608 -IFsnJA== 45609 -L1s= 45610 -IERpcmU= 45611 -IGdhc2Vz 45612 -IElORk9STUFUSU9O 45613 -IEVhdA== 45614 -IEZvcnVtcw== 45615 -IENoYXJhY3RlcnM= 45616 -X21ldA== 45617 -IOyLnA== 45618 -IGtpbmdz 45619 -YWNoaWU= 45620 -IExhbWJkYQ== 45621 -IHRpbWVycw== 45622 -IExpZ2h0aW5n 45623 -IENhc2V5 45624 -YWRkaXI= 45625 -YW5kZXg= 45626 -LmFuc3dlcg== 45627 -IEhpcA== 45628 -IFByaW5jaXA= 45629 -U3RhcnREYXRl 45630 -IOOAjA== 45631 -dHJlcw== 45632 -ICYj 45633 -Lk1heFZhbHVl 45634 -IFByb2JsZW1z 45635 -IGxhdGV4 45636 -T2ZDbGFzcw== 45637 -IEx5bm4= 45638 -Ly8n 45639 -IHZveWFnZQ== 45640 -IHNodXR0bGU= 45641 -IFJvbGxlcg== 45642 -IFJ1bnRpbWVFcnJvcg== 45643 -dXlh 45644 -RGlj 45645 -CWJ1aWxkZXI= 45646 -IGJ1bGx5aW5n 45647 -IHNpbXBsZXN0 45648 -LmNhbGxlZA== 45649 -IExS 45650 -IG1vcmFsaXR5 45651 -IHN0dXJkeQ== 45652 -dHJhY2tpbmc= 45653 -LnN3YWdnZXI= 45654 -X0JJTkQ= 45655 -SVRPUg== 45656 -LXVybGVuY29kZWQ= 45657 -INGF 45658 -IFRyaW5pdHk= 45659 -IHRyYXBz 45660 -IHwt 45661 -IHNldFRleHQ= 45662 -IGJhcmdhaW4= 45663 -IGJyYWtlcw== 45664 -LmdldENvZGU= 45665 -IG1pZ3JhdGU= 45666 -IHJpYmJvbg== 45667 -KXJldHVybg== 45668 -IGNoYXJnZXI= 45669 -YWNvbQ== 45670 -QURJVVM= 45671 -IEFtYmFzc2Fkb3I= 45672 -LWFmdGVy 45673 -IGFubmk= 45674 -CXNwaW4= 45675 -Q29uY2VwdA== 45676 -IEhlbmRlcnNvbg== 45677 -IEhPU1Q= 45678 -LnJhbms= 45679 -IE5vcnRoZWFzdA== 45680 -IGJlcmxpbg== 45681 -IHJlcXVpcw== 45682 -LmZlZWQ= 45683 -IHNvdXJjZU1hcHBpbmc= 45684 -IFJlbmNvbnRyZQ== 45685 -LmFqYXg= 45686 -bmVzdGpz 45687 -IHRyZWs= 45688 -IE5hY2lvbmFs 45689 -ICZb 45690 -IHBheWFibGU= 45691 -b3J0ZXg= 45692 -IGRlcHQ= 45693 -ZmllbGROYW1l 45694 -IGNvbXBsZXRlcw== 45695 -IFJWQQ== 45696 -IG9uaW9ucw== 45697 -YWxpZ25tZW50 45698 -Rm9ybWF0cw== 45699 -ICd7JA== 45700 -SGFzaFNldA== 45701 -IEJvZA== 45702 -LkludmFyaWFudEN1bHR1cmU= 45703 -IHNldHRsZW1lbnRz 45704 -IGh5ZHI= 45705 -LnVwZGF0ZWQ= 45706 -dmVudGg= 45707 -KHNlY29uZHM= 45708 -PSIvIg== 45709 -IHdlYnBhZ2U= 45710 -KAoK 45711 -IHRpcg== 45712 -IHRvZXM= 45713 -IEJyaWNr 45714 -IGFtYml0aW9u 45715 -UG90 45716 -PW1heA== 45717 -RVRJTUU= 45718 -IGRlcG90 45719 -Y2FsbHM= 45720 -IE5vcndlZ2lhbg== 45721 -YDo= 45722 -IGJ1cmdlcg== 45723 -IHByb2Zlc3NvcnM= 45724 -IEFsbG9jYXRl 45725 -LXRoaXJkcw== 45726 -LWNoYXJ0 45727 -IGZvcmQ= 45728 -Kk4= 45729 -LmtvdGxpbg== 45730 -IHBhcGVyd29yaw== 45731 -IERFVklDRQ== 45732 -JUAiLA== 45733 -cmVzcGVjdA== 45734 -KG1w 45735 -6auY 45736 -LWlm 45737 -IGN1c2hpb24= 45738 -b2JvdA== 45739 -IHBhcmM= 45740 -U1BBQ0U= 45741 -IE5ldGFueWFodQ== 45742 -IHNlbGZpc2g= 45743 -ZmVhdA== 45744 -IGNsaWVudGVz 45745 -LXRvb2xz 45746 -IHBvcmNo 45747 -IGpx 45748 -LnZlcmJvc2U= 45749 -IGxpYmVyYWxz 45750 -XSkKCgo= 45751 -cGllcw== 45752 -Tm90Qmxhbms= 45753 -KHRlcm0= 45754 -yJtp 45755 -X1BhcmFtcw== 45756 -Lm5vcm1hbGl6ZQ== 45757 -QnVsbGV0 45758 -QVNJQw== 45759 -KGhleA== 45760 -X2NsaWVudGU= 45761 -Kyw= 45762 -X0RJ 45763 -IGZvcnRoY29taW5n 45764 -fSIpXQo= 45765 -c2Vv 45766 -VW0= 45767 -Pk5hbWU= 45768 -IGNvbWZvcnRhYmx5 45769 -aXJlY3Rpb25hbA== 45770 -V0lUSA== 45771 -L3By 45772 -IFBvb3I= 45773 -IFZpdGFtaW4= 45774 -dmlj 45775 -R0g= 45776 -IHByaW9yaXQ= 45777 -IE5O 45778 -IENsb3NlZA== 45779 -pO0= 45780 -IGlzT3Blbg== 45781 -XENvbnNvbGU= 45782 -QW5kRmVlbA== 45783 -LlNVQ0NFU1M= 45784 -X09QRVJBVElPTg== 45785 -cG9sYXRpb24= 45786 -IFRhcw== 45787 -cHN6 45788 -Picu 45789 -Q1VSUkVOVA== 45790 -VmVuZG9y 45791 -aG9zdHM= 45792 -IEVyZA== 45793 -PnRhZ2dlcg== 45794 -IHNvdXJjZU1hcHBpbmdVUkw= 45795 -IG1hcmF0aG9u 45796 -X2Nsb3NlZA== 45797 -IGV4ZW1wdGlvbg== 45798 -IHJlY29nbml6ZXM= 45799 -aWRlc2hvdw== 45800 -JyQ= 45801 -KCcvJyk7Cg== 45802 -bWl0cw== 45803 -d2Fyeg== 45804 -IENoZXJyeQ== 45805 -taw= 45806 -bm9y 45807 -cG9ydGU= 45808 -IHds 45809 -X2JhY2t1cA== 45810 -LmdldEJvb2xlYW4= 45811 -LmdldFJlc291cmNl 45812 -IGRlZmluaXRpdmU= 45813 -LkVkaXRUZXh0 45814 -IHPDrQ== 45815 -LkNPTlQ= 45816 -IFBMQVlFUg== 45817 -LmNhcmRz 45818 -IFNob3Jl 45819 -KCcvJykK 45820 -Y2x1aXI= 45821 -V2ViRHJpdmVy 45822 -KG1vbnRo 45823 -LXJlbGVhc2U= 45824 -IGluc3BlY3Rvcg== 45825 -5aM= 45826 -IE5G 45827 -X2NsaXA= 45828 -5a2Q 45829 -IGludGVyYWN0aW5n 45830 -LnRtcA== 45831 -ICcnJwoK 45832 -IGRlZQ== 45833 -IGZyb3N0 45834 -Il0pKQo= 45835 -IFBsYWNlcw== 45836 -VGhyb3dz 45837 -Zm9yaw== 45838 -L2RheQ== 45839 -aVBob25l 45840 -IE1JQw== 45841 -IGZvbGRpbmc= 45842 -IGNyb3Jl 45843 -IENoaWVmcw== 45844 -cGhlcmljYWw= 45845 -KHByaWNl 45846 -LldyaXRlU3RyaW5n 45847 -IGV4aXRpbmc= 45848 -XScsCg== 45849 -aWdodGluZw== 45850 -SW5ncmVkaWVudA== 45851 -KHZlcnRleA== 45852 -IHNjcm9sbFZpZXc= 45853 -aGY= 45854 -Om5ldw== 45855 -U0VO 45856 -c2VjdG9y 45857 -IHNwaW5z 45858 -IFNjaGVkdWxlcg== 45859 -b3RlY2hu 45860 -c2VtaWNvbG9u 45861 -Rm9udE9mU2l6ZQ== 45862 -IFNwZWNpZmljYWxseQ== 45863 -ZmxhbW0= 45864 -Lk9iamVjdElk 45865 -IGNvbnRh 45866 -X3Blcm1pc3Npb25z 45867 -CUZST00= 45868 -SUNPREU= 45869 -L2tn 45870 -IEhvdGVscw== 45871 -LW1lZA== 45872 -IERpbg== 45873 -IG5hdnk= 45874 -Z2V0UGFyYW0= 45875 -IG1lbmQ= 45876 -IHBvcnRyYXllZA== 45877 -IE1ldHJvcG9saXRhbg== 45878 -UGFpbnRlcg== 45879 -IHJlZmVycmFs 45880 -X2dvb2Q= 45881 -IG1hcnZlbA== 45882 -b3NhaWM= 45883 -Pigm 45884 -LnVy 45885 -IGVzdG9z 45886 -V2lsbGlhbQ== 45887 -IHRpbWJlcg== 45888 -IHF1ZWxxdWVz 45889 -IERvY3VtZW50cw== 45890 -LlhhbWw= 45891 -IGJhdGNoZXM= 45892 -6YGT 45893 -IFJlbGVhc2Vk 45894 -VGFpbA== 45895 -Q09PS0lF 45896 -aGVpZA== 45897 -X3N0YXRpb24= 45898 -IFZpYQ== 45899 -U2FsZQ== 45900 -IFJlcGVhdA== 45901 -IHByb21pbg== 45902 -IFpv 45903 -LWZvcndhcmQ= 45904 -IElvbg== 45905 -aXRhcnk= 45906 -IGp1cw== 45907 -LXJlcXVlc3Q= 45908 -IHByb3VkbHk= 45909 -IFN0cmVhbWluZw== 45910 -KE1vdXNlRXZlbnQ= 45911 -IFNwcmludA== 45912 -X3JvdGF0aW9u 45913 -UmVwb3NpdG9yaWVz 45914 -IHRhcnQ= 45915 -INGB0LI= 45916 -IG1hcHBpbmdz 45917 -6Ko= 45918 -Q3U= 45919 -Q3ljbGU= 45920 -IGJ1bg== 45921 -CWx1YQ== 45922 -44OJ 45923 -ICgoIQ== 45924 -IGNvbGxlY3RpdmVseQ== 45925 -IENvbmQ= 45926 -IHdzenlzdA== 45927 -KGxpYg== 45928 -b3BlbmhhZ2Vu 45929 -X3NraXA= 45930 -LkNvbHVtbkhlYWRlcg== 45931 -6YI= 45932 -cGVyaWVuY2Vk 45933 -j+i/sA== 45934 -X3Byb3Bz 45935 -IGNvbnRyYWNl 45936 -IG1hdGNodXA= 45937 -YWJldGlj 45938 -Lm1lbWJlcnM= 45939 -UkVDVA== 45940 -KGRhdA== 45941 -IHNvZw== 45942 -cmVub20= 45943 -X01ldGhvZA== 45944 -Q3VzdG9tZXJz 45945 -ZnVsbG5hbWU= 45946 -Wk4= 45947 -cmV0cnk= 45948 -IGthcA== 45949 -IE5ldQ== 45950 -6Io= 45951 -YWRkQ2hpbGQ= 45952 -d2lsbFJldHVybg== 45953 -X3Blcm1hbGluaw== 45954 -IGVuZXJnZXRpYw== 45955 -IFdldA== 45956 -IE1vcnI= 45957 -IGdjZA== 45958 -Y291bnRz 45959 -LHR5cGU= 45960 -ZGln 45961 -KExvZ2lu 45962 -IGNyYWNrcw== 45963 -IGJhY3RlcmlhbA== 45964 -IE1lYXQ= 45965 -IEFybXN0cm9uZw== 45966 -IEJyb256ZQ== 45967 -IGFwcHJveGltYXRl 45968 -X2RpcnM= 45969 -bGlnYQ== 45970 -xYJhZA== 45971 -IGtpbmRuZXNz 45972 -IGNvbnRyZQ== 45973 -IEVWRVJZ 45974 -TUVU 45975 -IGFubm91bmNlbWVudHM= 45976 -Z3Bpbw== 45977 -IFdhaXRGb3JTZWNvbmRz 45978 -IFBob3Rvc2hvcA== 45979 -IGRpc2NvbnRpbg== 45980 -L2Rk 45981 -IHRvcG9sb2d5 45982 -YW5pY2Fs 45983 -LmludGVyZmFjZQ== 45984 -YXVjb3Vw 45985 -Lkhhc2hTZXQ= 45986 -QVJJQU5U 45987 -KHJvdXRlcw== 45988 -IFRlaA== 45989 -IGh5cGU= 45990 -XSIpLg== 45991 -IHNsYW0= 45992 -IGJyb3Ro 45993 -LWludGVy 45994 -IFJpZA== 45995 -LW1hbmFnZXI= 45996 -Q2FuY2VsYXI= 45997 -IFBhZ2luYXRpb24= 45998 -IHNvdW5kdHJhY2s= 45999 -IHBvc3Rlcmlvcg== 46000 -IHNjcnVi 46001 -Y3JlYXRpbmc= 46002 -LSo= 46003 -aXJ0ZWVu 46004 -LmR5 46005 -LnN5bW1ldHJpYw== 46006 -ICIiLg== 46007 -PT09PT09PT09PT09PT09 46008 -IGNoYXNzaXM= 46009 -IG51bWJlck9mUm93cw== 46010 -RGV2ZWxvcGVy 46011 -X2JpbnM= 46012 -IE9VUg== 46013 -cmllYg== 46014 -UHJvcw== 46015 -IHdpxJk= 46016 -ImQ= 46017 -IGFzeW5jaW8= 46018 -emVpZ2Vu 46019 -X3NwaQ== 46020 -LkFMTA== 46021 -IHNjcmV3cw== 46022 -Q2hpbmVzZQ== 46023 -IGFwaUtleQ== 46024 -IHVuc3VjY2Vzc2Z1bA== 46025 -IFNlYWhhd2tz 46026 -T1JH 46027 -56ug 46028 -IHByb2Zlc3Npb25hbGx5 46029 -IENvdXBvbg== 46030 -5a2X5q61 46031 -Q29udmVudGlvbg== 46032 -IHBvbHlt 46033 -5omL 46034 -IHNhbHZhdGlvbg== 46035 -IGVuZ2luZWVyZWQ= 46036 -IFdyZXN0 46037 -IEdDQw== 46038 -IHdhcm1lcg== 46039 -TGF5b3V0Q29uc3RyYWludA== 46040 -IGFnZ3Jhdg== 46041 -U2NyaXB0cw== 46042 -dmVudHVyZQ== 46043 -IHJlZnJpZ2VyYXRvcg== 46044 -IGlubm92YXRpb25z 46045 -IFJ1bm5lcg== 46046 -TklD 46047 -IFJvbGxpbmc= 46048 -Q29udHJvbEV2ZW50cw== 46049 -IGxvb3M= 46050 -cGFj 46051 -CXBhbmVs 46052 -ZWZl 46053 -IEJ1ZGRoYQ== 46054 -LS0tLS0tLS0tLS0tLS0K 46055 -5bqT 46056 -KGZvcktleQ== 46057 -IGx1bWlu 46058 -ICg/ 46059 -IEFJRFM= 46060 -LHVzZXI= 46061 -aW1pZW50b3M= 46062 -Y29udGVudFR5cGU= 46063 -YW50bHI= 46064 -6aY= 46065 -IFdlbHQ= 46066 -UHJvZHVjdGlvbg== 46067 -bWlnaHQ= 46068 -IFZJSQ== 46069 -Iiwo 46070 -IG9ic2VydmluZw== 46071 -IGRlbGliZXJhdGU= 46072 -KGNvbnRyb2w= 46073 -IHdpdGhk 46074 -IHNlbWFuYQ== 46075 -U1RBQ0s= 46076 -dWNoZW4= 46077 -TmljZQ== 46078 -IERldXRzY2hsYW5k 46079 -IFNwZWNpZmllcw== 46080 -ZG1h 46081 -aXppbw== 46082 -IEZhY3Rz 46083 -X3BvcHVw 46084 -IERpcmVjdG9ycw== 46085 -ezo= 46086 -W1I= 46087 -INGN0LvQtdC80LXQvdGC 46088 -IHBsYXQ= 46089 -IGRpcmVjdGluZw== 46090 -5LiJ 46091 -IEdpbGJlcnQ= 46092 -4oCmLgoK 46093 -LnFtbA== 46094 -IHRoZXJlYWZ0ZXI= 46095 -IGRpc3Bvc2l0aW9u 46096 -ZHJhZnQ= 46097 -IHN1cmdlb24= 46098 -IEluc2lkZXI= 46099 -QmxlbmQ= 46100 -IFRyZXY= 46101 -dHJpbnNpYw== 46102 -VG9waWNz 46103 -cmlldmU= 46104 -X0ZJTEVOQU1F 46105 -IGF1dHJlcw== 46106 -Sm9zZQ== 46107 -UHJvZHVjZXI= 46108 -ZXJ1cw== 46109 -IHBldGl0 46110 -IE5FWFQ= 46111 -IEZpbHRlcnM= 46112 -IHJlcGxpY2F0ZQ== 46113 -Il0pLg== 46114 -IGxlbmRlcnM= 46115 -XSIsCg== 46116 -O2NoYXJzZXQ= 46117 -Q3BwT2JqZWN0 46118 -IGZsb3JhbA== 46119 -IFRpcG8= 46120 -IGNpcmN1aXRz 46121 -ZWFzeQ== 46122 -KCYk 46123 -aXR0YQ== 46124 -ZXJ5bA== 46125 -X0NPTU1PTg== 46126 -J319Pgo= 46127 -LWJhY2tlZA== 46128 -KHZhcmlhYmxl 46129 -KEluZGV4 46130 -IHZvaXI= 46131 -X2xvY2F0aW9ucw== 46132 -Kyspew== 46133 -IExvdWlzdmlsbGU= 46134 -IGdyYXRpdHVkZQ== 46135 -Lk1vY2tpdG8= 46136 -IFBvd2Vycw== 46137 -aWV1cnM= 46138 -IGdlb2dyYXBoaWM= 46139 -cmFsZQ== 46140 -IGNyYQ== 46141 -IFNwdXJz 46142 -aXBoZXJ0ZXh0 46143 -QUNJT04= 46144 -LWNvbW1vbg== 46145 -IHZpY3Rvcmllcw== 46146 -IEZpbmFscw== 46147 -LnNodWZmbGU= 46148 -LW1pbGxpb24= 46149 -X1BST0M= 46150 -YXNzdW1l 46151 -IGlscw== 46152 -REJD 46153 -Qm9vdFRlc3Q= 46154 -IGxhdm9y 46155 -LnRlc3Rpbmc= 46156 -LmFzdA== 46157 -Il0v 46158 -bW9pZA== 46159 -IHF1YWxpZmljYXRpb24= 46160 -Z2VzY2g= 46161 -CXB1dA== 46162 -IGFpcnBvcnRz 46163 -Skk= 46164 -VGVhY2hlcg== 46165 -X3VuaWZvcm0= 46166 -IG5hbWE= 46167 -IEJhc3Q= 46168 -ZXJ0eXBl 46169 -Y2FwdHVyZQ== 46170 -Z2V0QWxs 46171 -IFJleW5vbGRz 46172 -b29sZWQ= 46173 -LmNvbW1lbnRz 46174 -IGNoaW4= 46175 -KS4q 46176 -INC40LvQuA== 46177 -dGds 46178 -dWRvcw== 46179 -IGTDrWFz 46180 -Y2hhaQ== 46181 -LnByb2dyYW0= 46182 -IHBzeg== 46183 -CWljb24= 46184 -cGhpbA== 46185 -ZW50cmFs 46186 -X1dSQVA= 46187 -b3Zp 46188 -IG5vc3RhbGc= 46189 -SW5maW5pdHk= 46190 -CXlpZWxk 46191 -IHZpdGFtaW5z 46192 -UXVhdGVybmlvbg== 46193 -U2luaw== 46194 -X2dvb2Rz 46195 -IC4uLi4uLi4u 46196 -IFdpbmdz 46197 -dXJpZGFk 46198 -LXN0b3J5 46199 -Il0pCgo= 46200 -aWRlbGl0eQ== 46201 -VHlwZURlZg== 46202 -R3Rr 46203 -IO2M 46204 -X01haW4= 46205 -IGNoZXo= 46206 -IFJhdmVu 46207 -IHBheXJvbGw= 46208 -IGZyZWVsYW5jZQ== 46209 -TExV 46210 -IE1lbmQ= 46211 -ZWRheQ== 46212 -QXBpTW9kZWxQcm9wZXJ0eQ== 46213 -LkZvcm1Cb3JkZXJTdHlsZQ== 46214 -IGVjb25vbWlzdA== 46215 -c3RhbmJ1bA== 46216 -IGZyZWlnaHQ= 46217 -LUFnZW50 46218 -KG1ldGE= 46219 -IHN5bW1ldHJ5 46220 -ICcuLg== 46221 -LkNhbGVuZGFy 46222 -LWF1dA== 46223 -Z2Y= 46224 -cGVudA== 46225 -eWNsb3BlZGlh 46226 -IHdpc2hpbmc= 46227 -CgoKCgoKCgoKCgoK 46228 -IGdlbnRsZW1hbg== 46229 -IOqz 46230 -PSM= 46231 -IGxlY3R1cmVz 46232 -4oCcSW4= 46233 -ICFf 46234 -IGhi 46235 -IFZlbmRvcg== 46236 -UmVjZW50bHk= 46237 -X25vdGVz 46238 -5o+Q56S6 46239 -Ik15 46240 -SGVhZGVyc0hlaWdodA== 46241 -X1NP 46242 -IHVud2lsbGluZw== 46243 -IHN1cGVyaGVybw== 46244 -Z2lv 46245 -cHN5 46246 -IFBlZXI= 46247 -amF2YXg= 46248 -JmFwb3M= 46249 -IENyaXNpcw== 46250 -b3JkaW5hbA== 46251 -TWVtY3B5 46252 -KysrKysrKysrKysrKysrKw== 46253 -LXZhbA== 46254 -IHdvcmtib29r 46255 -LWFw 46256 -PWs= 46257 -IG1ldGFsbGlj 46258 -X3BlZXI= 46259 -QnlQcmltYXJ5S2V5 46260 -X1NE 46261 -dWF0b3I= 46262 -X1NIQURFUg== 46263 -KU1hdGg= 46264 -LlRyYW5zZm9ybQ== 46265 -IGNvd3M= 46266 -UGhp 46267 -IENsZW0= 46268 -KF8oIg== 46269 -IEx1ZA== 46270 -LWRlbGF5 46271 -IFNlY3VyaXRpZXM= 46272 -IE9ydGhvZG94 46273 -U3ltZm9ueQ== 46274 -KHJlcG9ydA== 46275 -IGVudGVydGFpbg== 46276 -RVBT 46277 -aXpvcGg= 46278 -ZXh1YWw= 46279 -SVJE 46280 -5LuO 46281 -IGxpdGg= 46282 -IHNhbml0aXpl 46283 -IGZlbWluaW5l 46284 -SVNCTg== 46285 -LmF1dGhlbnRpY2F0aW9u 46286 -X3BpcGVsaW5l 46287 -L2NvbnN0YW50cw== 46288 -IENPTkY= 46289 -IGx1Y3I= 46290 -cmljaWE= 46291 -LnR0Zg== 46292 -LnNldENvbnRlbnQ= 46293 -IHN0YW4= 46294 -b3JlYW4= 46295 -IExsb3lk 46296 -LnJhd1ZhbHVl 46297 -IGdvcg== 46298 -IEJyb3ducw== 46299 -UmVncmVzc2lvbg== 46300 -IGxvd2VyaW5n 46301 -bmFpc3NhbmNl 46302 -IGJsb3dz 46303 -IGFtYXplZA== 46304 -IHVucmVsYXRlZA== 46305 -UmV2aWV3cw== 46306 -IHJ1Ynk= 46307 -IE1vZGlmaWVy 46308 -IGdpYW50cw== 46309 -LnRocmVhZA== 46310 -IGNvbnRhaW5tZW50 46311 -IFN0YXJ0Q29yb3V0aW5l 46312 -dW1hdA== 46313 -b3JlbGVhc2U= 46314 -IFJhbmR5 46315 -QGVuZGlm 46316 -RGlnZXN0 46317 -IHN1YnVyYmFu 46318 -PSIpOwo= 46319 -IGFubm9uY2U= 46320 -LnZhcmlhYmxl 46321 -XEZvdW5kYXRpb24= 46322 -IGFjcmU= 46323 -VmFu 46324 -IHR1cGxlcw== 46325 -ZG5z 46326 -IFN0YW5kaW5n 46327 -X2xhcmdl 46328 -IGJveGluZw== 46329 -U3VwcG9ydEFjdGlvbkJhcg== 46330 -IEZvcnR1bmU= 46331 -IFJ1bQ== 46332 -X211bHRpcGxl 46333 -YXJjaGljYWw= 46334 -IGZ3cml0ZQ== 46335 -X3F1b3Rl 46336 -IGZvb2xpc2g= 46337 -IGNvbXByaXNpbmc= 46338 -INC+0L8= 46339 -LXNlbGVjdGVk 46340 -dmY= 46341 -bWFpZA== 46342 -TmFtYQ== 46343 -KGRhdGV0aW1l 46344 -IGluZGlyZWN0bHk= 46345 -Z2FydA== 46346 -Zml4dHVyZXM= 46347 -Y2hvcw== 46348 -IEhhbG8= 46349 -IHJlY3VycmluZw== 46350 -LW5ld3M= 46351 -dmls 46352 -IE51cnNpbmc= 46353 -LXByb2R1 46354 -IEhR 46355 -XEh0dHBGb3VuZGF0aW9u 46356 -ZW5jaQ== 46357 -YXVlbg== 46358 -IHZ5 46359 -b2NyYWN5 46360 -IGRlbGVnYXRpb24= 46361 -IGFzcGhhbHQ= 46362 -IHNldFNlbGVjdGVk 46363 -a29r 46364 -L3Jlc3Q= 46365 -bWV0aWNz 46366 -IE5TRGF0ZQ== 46367 -IHRyYXZlbGxlZA== 46368 -IHJlY2li 46369 -IG1pbWU= 46370 -Q0xJRU5U 46371 -IEdV 46372 -IEhBTkRMRQ== 46373 -L1E= 46374 -W3o= 46375 -IGJvdGhlcmVk 46376 -IEJCUQ== 46377 -w6dhcw== 46378 -X2V4YW1wbGVz 46379 -X0ZJTg== 46380 -IHdoaXRlQ29sb3I= 46381 -IGFzdHJvbm9t 46382 -LWRpcg== 46383 -IHNvdmVyZWlnbg== 46384 -IGJyZWV6ZQ== 46385 -IGlubmluZw== 46386 -IEVkbW9udG9u 46387 -Z2xp 46388 -LmJsb2dzcG90 46389 -anN4 46390 -IHZlcnNh 46391 -IE1vaGFtbWVk 46392 -LkpvYg== 46393 -LXRvZ2dsZXI= 46394 -INC/0L7Qu9GM0LfQvtCy0LDRgg== 46395 -YXJkb24= 46396 -IG5ld2Jvcm4= 46397 -IG5hdmFs 46398 -bm90ZXE= 46399 -IHR1bWJscg== 46400 -IGhlbnRhaQ== 46401 -IFR5cGljYWxseQ== 46402 -IGxvb3Q= 46403 -LlNwcml0ZQ== 46404 -RmxpZ2h0 46405 -IHdhdmVsZW5ndGg= 46406 -LXNr 46407 -IEVsbGU= 46408 -X2V4cG9ydHM= 46409 -INGP 46410 -IElI 46411 -aXpvcGhyZW4= 46412 -IO2B 46413 -X3ByaW1hcnk= 46414 -IG1vaXM= 46415 -IEJO 46416 -IHN5c3RlbWlj 46417 -IGRpZmVyZW50ZXM= 46418 -SU5DVA== 46419 -ICcnCgo= 46420 -JHE= 46421 -V2lkZ2V0SXRlbQ== 46422 -Y2xpZGU= 46423 -JGZpbGU= 46424 -TGVtbWE= 46425 -L3RhYmxl 46426 -YWdyaWQ= 46427 -IE1vbmdvREI= 46428 -aW50ZQ== 46429 -IGFwcHJlbnQ= 46430 -wq1pbmc= 46431 -LkRi 46432 -IMOC 46433 -aGFtbWVy 46434 -PScnOwo= 46435 -IGJyb2tlcnM= 46436 -aXRsZW1lbnQ= 46437 -c2VtYmxpZXM= 46438 -RWxl 46439 -e3g= 46440 -IGxhc3RuYW1l 46441 -PC0= 46442 -IGZsYXR0ZW4= 46443 -X2JhbmQ= 46444 -LlJvb3Q= 46445 -LnJlYWRGaWxlU3luYw== 46446 -PT09PT09 46447 -LnJ4 46448 -Pw0K 46449 -IG1ldGFwaG9y 46450 -VGk= 46451 -Y29udGU= 46452 -IGRlYml0 46453 -IGNvbnRlbXB0 46454 -Q3BwVHlwZQ== 46455 -5pSv 46456 -Rm9ybUZpZWxk 46457 -cmF0aW8= 46458 -b3NvcGhlcg== 46459 -IGltcGxhbnQ= 46460 -UFVSRQ== 46461 -IGFsdGE= 46462 -X21hbmFnZW1lbnQ= 46463 -IHJlZmluZQ== 46464 -IENoZWNrQm94 46465 -IENoYXJs 46466 -LXZlcnNpb24= 46467 -Y29uZGl0aW9uYWw= 46468 -dmVudWVz 46469 -IHJpZmxlcw== 46470 -IG9mZnNwcmluZw== 46471 -IG1pbGxpbmc= 46472 -IHNoYXJwbHk= 46473 -IHVuZGVyd2F0ZXI= 46474 -KG9yaWdpbg== 46475 -X0NvbnRyb2w= 46476 -IC4k 46477 -UGx1Z2lucw== 46478 -IGRyeWluZw== 46479 -IGlsbHVzdHJhdGVz 46480 -LXU= 46481 -IHZlZ2V0YXJpYW4= 46482 -bnBj 46483 -SGVhcnQ= 46484 -OycsCg== 46485 -Y29tbWE= 46486 -dGVlbnRo 46487 -YXNhbg== 46488 -L3NwZWM= 46489 -X21vdmVz 46490 -LW1hcmdpbg== 46491 -IGluZ2Vu 46492 -wqDCoMKg 46493 -IHByb2pldA== 46494 -IG90cmE= 46495 -IGJyYXM= 46496 -LnV0Yw== 46497 -IHNsZXB0 46498 -PXN1Yg== 46499 -YWJpbGl0 46500 -cG9zdGVy 46501 -IHNkaw== 46502 -b3VuY2lsbA== 46503 -IHdk 46504 -UHJlcGFyZWRTdGF0ZW1lbnQ= 46505 -IERydW0= 46506 -KGF0dHJpYnV0ZQ== 46507 -IEV0aGVybmV0 46508 -CURC 46509 -Q2FsaWZvcm5pYQ== 46510 -Y3ViZQ== 46511 -W0k= 46512 -LkNyZWF0ZWQ= 46513 -IEhN 46514 -IHRyYWNpbmc= 46515 -Rm9ybXNNb2R1bGU= 46516 -LXlvdQ== 46517 -LmN1cnJlbmN5 46518 -ZmVlZGluZw== 46519 -IHRib2R5 46520 -TGk= 46521 -YWNjaW9u 46522 -bmFz 46523 -IHRyb3V2ZXI= 46524 -Tk9ORQ== 46525 -In0sDQo= 46526 -IGZ0cA== 46527 -V2l0aElkZW50aWZpZXI= 46528 -cG9sYXRl 46529 -RmlsZUluZm8= 46530 -IHB1cnN1ZWQ= 46531 -ICAgIA0KICAgIA0K 46532 -REVTQ1JJUFRJT04= 46533 -fSovCg== 46534 -RnJvbU5pYg== 46535 -IGRlY29yYXRpdmU= 46536 -X1NTTA== 46537 -KGNoYXQ= 46538 -VExT 46539 -IHN1cnByaXNlcw== 46540 -YWxjdWxhdGU= 46541 -IFNwbGFzaA== 46542 -KENvbmZpZ3VyYXRpb24= 46543 -IFNFTQ== 46544 -aW1zb24= 46545 -L2xpYnJhcnk= 46546 -PERvdWJsZQ== 46547 -LnJvYm90 46548 -wqDCoMKgwqDCoMKgwqDCoA== 46549 -IENQRg== 46550 -IFVuZGVyc3RhbmRpbmc= 46551 -IGNvc21ldGlj 46552 -IFh0 46553 -dGlwcw== 46554 -K2s= 46555 -KCIn 46556 -IFBEVA== 46557 -V0FS 46558 -LmdldE9iamVjdA== 46559 -IFRyYWRpdGlvbmFs 46560 -LnNsdWc= 46561 -IERpcGw= 46562 -PSIiLA== 46563 -IEZpbG1z 46564 -IEFuaW0= 46565 -LmhlbHA= 46566 -IGVtYmFzc3k= 46567 -IEJvb3Rz 46568 -IGJ1bms= 46569 -LXJpc2s= 46570 -IHBjaQ== 46571 -IC9cLg== 46572 -IElQVA== 46573 -IGNyYXNoaW5n 46574 -IGlwdg== 46575 -X2tl 46576 -IFJFU1A= 46577 -LkxvZ0Vycm9y 46578 -IGluYWRlcXVhdGU= 46579 -SW9u 46580 -IEbDvHI= 46581 -cmljdWxh 46582 -IHNob3VsZEJl 46583 -YWxyZWFkeQ== 46584 -J10uIjwv 46585 -IFN0dWZm 46586 -RGlnaXRl 46587 -IHRyYW5zbGF0b3I= 46588 -X3Nwcml0ZQ== 46589 -bGV0YWw= 46590 -IG1haW9y 46591 -IFNleGU= 46592 -dGhhbmtz 46593 -IENvbXBsZXRlZA== 46594 -IGdhc29saW5l 46595 -LmF0dHJz 46596 -YmFnYWk= 46597 -IE9yaWc= 46598 -Ol0s 46599 -LmxvY2FsZQ== 46600 -IFJvbWE= 46601 -w61m 46602 -IGZhdm9yZWQ= 46603 -IHZhaW4= 46604 -IHNwb29u 46605 -IEphaHJlbg== 46606 -IG5pbmc= 46607 -V1dX 46608 -LGZsb2F0 46609 -X0RBVEFCQVNF 46610 -Qm9vdHN0cmFw 46611 -IENCQw== 46612 -IENodW5r 46613 -X2ludG8= 46614 -IEtvbA== 46615 -IGRlZmVuc2Vz 46616 -b3JlZFByb2NlZHVyZQ== 46617 -YmFsbHM= 46618 -VGV4dENoYW5nZWQ= 46619 -IHNoYXBpbmc= 46620 -IH19Pg== 46621 -R0VE 46622 -ZmFx 46623 -IG9wdGlvbmFsbHk= 46624 -X0Rpcw== 46625 -IFN1Y2Nlc3NmdWw= 46626 -IENlbnN1cw== 46627 -IGluY2FyY2Vy 46628 -X0NBUkQ= 46629 -IGF2aWF0aW9u 46630 -IEd5bQ== 46631 -QXV0aG9yaXR5 46632 -LkJlYW4= 46633 -c2hhZGVy 46634 -Tm90RXhpc3Q= 46635 -X1RleHRDaGFuZ2Vk 46636 -IFNUT1A= 46637 -KHRlYW0= 46638 -Ikg= 46639 -d2c= 46640 -IGdyaW5kZXI= 46641 -IHN0cmlwZQ== 46642 -IHByZXNlcnZhdGlvbg== 46643 -Q2xhaW0= 46644 -YXZlcnNhbA== 46645 -d2FyZWhvdXNl 46646 -dGFyZ2V0cw== 46647 -VHJ1c3Q= 46648 -IGFsbGV2 46649 -LHd3dw== 46650 -b3Vzc2U= 46651 -X2NoYW4= 46652 -X1NpemU= 46653 -c3lzdGVtcw== 46654 -IG9iamVjdGlvbg== 46655 -IEthbmU= 46656 -IGNvcnJvcw== 46657 -IERTTA== 46658 -IHVh 46659 -IE1I 46660 -IFN0cmF0ZWdpYw== 46661 -X3RjcA== 46662 -IOqwkg== 46663 -IGJvcnJvd2Vk 46664 -IEFjaA== 46665 -CWNvbW1hbmQ= 46666 -IGdwcw== 46667 -bGVzdG9u 46668 -aWNoZXZlcg== 46669 -IFVB 46670 -IGFzc2F1bHRlZA== 46671 -IHNwZWNpYWxpemVz 46672 -CXNlYXJjaA== 46673 -SG90ZWw= 46674 -ICAgICAgICAgICAgICAgICAgICANCg== 46675 -IFBpdGNo 46676 -INmB 46677 -UkVBRFk= 46678 -IHBhcmVudGFs 46679 -IGfDqW7DqQ== 46680 -IGRvbm7DqWVz 46681 -IGRldGFpbg== 46682 -VEFSR0VU 46683 -IHByb3RhZ29uaXN0 46684 -IGNsZWFySW50ZXJ2YWw= 46685 -IEljb25CdXR0b24= 46686 -IEdldEFsbA== 46687 -VHlwZUluZm8= 46688 -RUg= 46689 -4oCcVGhleQ== 46690 -IHtb 46691 -IGdhZw== 46692 -INqp 46693 -IERyb3Bkb3du 46694 -LmZyZWU= 46695 -Z29uZQ== 46696 -aW1lbnM= 46697 -IGluc3RhbA== 46698 -CWN1cmw= 46699 -X0NBTg== 46700 -IEJvbmU= 46701 -77yU 46702 -b255bXM= 46703 -LWdvdmVybm1lbnQ= 46704 -LmJpbmRpbmdOYXZpZ2F0b3I= 46705 -IERhbnM= 46706 -IE1jTA== 46707 -KGVu 46708 -Pihf 46709 -0JLRiw== 46710 -Lio7DQo= 46711 -PWo= 46712 -LWNvcg== 46713 -U29u 46714 -LlRvb2xTdHJpcEl0ZW0= 46715 -LWFyb3VuZA== 46716 -X1hNTA== 46717 -ZW5kRGF0ZQ== 46718 -IHNsYWNr 46719 -IHJvdGF0ZWQ= 46720 -IG5vcWE= 46721 -IGNvdHRhZ2U= 46722 -IGVuY29udHJhcg== 46723 -X3NraWxs 46724 -aG91ZXR0ZQ== 46725 -IQ0K 46726 -LndlYXRoZXI= 46727 -IGVtcGhhc2l6ZWQ= 46728 -5a62 46729 -INGB0L/QuNGB 46730 -IENvbXBpbGVy 46731 -KGFuZHJvaWQ= 46732 -IOKAug== 46733 -LnR1cm4= 46734 -IHN1cHByZXNzaW9u 46735 -X2NhbGxz 46736 -ICpA 46737 -KHN0cmxlbg== 46738 -LmhleA== 46739 -IEJpbGxz 46740 -IFJTQQ== 46741 -z4I= 46742 -IEVzY2FwZQ== 46743 -ZW1lbnRpYQ== 46744 -IGZyb250ZW5k 46745 -IHBpbnQ= 46746 -X2V4Yw== 46747 -enpv 46748 -W10sCg== 46749 -ICInLCci 46750 -LkVudmlyb25tZW50 46751 -IGFmb3JlbWVudGlvbmVk 46752 -IGVuZHVyZQ== 46753 -cHJvdG90eXBl 46754 -dGhlcmFweQ== 46755 -c3Np 46756 -RGVn 46757 -X3BsdWdpbnM= 46758 -LnVzZXJJbmZv 46759 -UHJpbnRlcg== 46760 -IFBST0dSQU0= 46761 -IHJ1aW5z 46762 -IGVtcGlyaWNhbA== 46763 -IGNyYXds 46764 -IEJvaWxlcg== 46765 -LWNvbW1lbnQ= 46766 -LnN1YnBsb3Q= 46767 -X2V0 46768 -ICcuJyw= 46769 -bWlub3I= 46770 -IEN1c3RvbXM= 46771 -IHlhdw== 46772 -dW5kZXJsaW5l 46773 -IENvbW8= 46774 -KCgn 46775 -KG1lYW4= 46776 -IGNoYXF1ZQ== 46777 -IEJsb2Nrcw== 46778 -LnJhZA== 46779 -aWxpYnJpdW0= 46780 -IHdlYmRyaXZlcg== 46781 -IG1lbGhvcg== 46782 -ZGFuYQ== 46783 -IEFidXNl 46784 -IFNvdXRod2VzdA== 46785 -IFBhcmVu 46786 -UEVSVElFUw== 46787 -CUlM 46788 -IHNjcmVhbQ== 46789 -dnU= 46790 -IGluY29tZXM= 46791 -IG5pbQ== 46792 -IGxhY2U= 46793 -IGNvbXBlbnNhdGU= 46794 -UmV2ZXJzZQ== 46795 -RGF0 46796 -X2F0dGFjaw== 46797 -IG5vdXI= 46798 -YWNoZW4= 46799 -Y2Vr 46800 -PEZ1bmM= 46801 -d2ll 46802 -Y29tcHJlc3NlZA== 46803 -LW1hdGNo 46804 -KCIiKV0K 46805 -aW1pemVk 46806 -Lm9yaWVudGF0aW9u 46807 -LmNvbXBhcmVUbw== 46808 -IG1hc3NhZ2dp 46809 -IOychA== 46810 -IGVsYm93 46811 -IGFudGlveGlk 46812 -dW5kcmVkcw== 46813 -L3Rvb2xz 46814 -IFJPVw== 46815 -YW5tYXI= 46816 -IFdvdw== 46817 -X3RpY2tldA== 46818 -UHJvZ3JhbW1pbmc= 46819 -IHRoZW9y 46820 -LXJldmlldw== 46821 -KCkpKSk7Cg== 46822 -IFJpY2hhcmRzb24= 46823 -IFBvY2tldA== 46824 -XVtd 46825 -YW1wcA== 46826 -X2hlYWx0aA== 46827 -IFBPUA== 46828 -IE5hdmFs 46829 -R3Vlc3M= 46830 -IGFuY2VzdG9y 46831 -LkdldEFsbA== 46832 -LmxvY2FsU2NhbGU= 46833 -IE1hcHBlcg== 46834 -IGFjY3VtdWxhdGlvbg== 46835 -IHNpbXVsYXRlZA== 46836 -IERyaXZlcnM= 46837 -IGTDqXM= 46838 -Y3VycmluZw== 46839 -IGVsZXBoYW50 46840 -IGFkdmVydGlzZWQ= 46841 -IG1haWxib3g= 46842 -U0hJRlQ= 46843 -IE1vbmljYQ== 46844 -IGFuYw== 46845 -IHdhcmRyb2Jl 46846 -SW5ncmVkaWVudHM= 46847 -IHx8DQo= 46848 -aXBweQ== 46849 -IGFudGliaW90aWNz 46850 -YXZpbmdz 46851 -KGN4 46852 -IEZlcnJhcmk= 46853 -IEFuaW1hdG9y 46854 -LmR0eXBl 46855 -cmVtb3ZlZA== 46856 -b3JkZXJieQ== 46857 -IGNyZXM= 46858 -b2PDqg== 46859 -IHB5bQ== 46860 -IENpcmN1bGFy 46861 -QGluZGV4 46862 -IFdhcm0= 46863 -U2F5 46864 -IEFzc2lzdGFuY2U= 46865 -IGN1cnRhaW4= 46866 -IE1vbnRl 46867 -SUxFUg== 46868 -IENWRQ== 46869 -IER1Y2s= 46870 -IEFsbG93cw== 46871 -X2ZpcmU= 46872 -IERlcmJ5 46873 -IHJlcG9z 46874 -IGh0dHBDbGllbnQ= 46875 -IHBzeWNoaWF0 46876 -IG5vd2FkYXlz 46877 -IGNhdXRpb3Vz 46878 -IENvbXB1dGluZw== 46879 -IGNvbXBsZXRpb25IYW5kbGVy 46880 -IFdlbHNo 46881 -IEJFU1Q= 46882 -IHN0cmVzc2Z1bA== 46883 -X1BF 46884 -5pel5pyf 46885 -IERhdGFGcmFtZQ== 46886 -CUludGVnZXI= 46887 -X1ByaW50 46888 -TW92ZXM= 46889 -IHRyYW5zZm9ybWluZw== 46890 -LkJhdGNo 46891 -eWFob28= 46892 -UG9zaXRpb25z 46893 -emVq 46894 -IG5vb2Q= 46895 -aW9yZXM= 46896 -Xyo= 46897 -IGNsaw== 46898 -IEZsb3lk 46899 -IGhhcA== 46900 -Zm9udHNpemU= 46901 -IG5heg== 46902 -Lm5vdGlmaWNhdGlvbg== 46903 -IERlcHJlc3Npb24= 46904 -IGFjbmU= 46905 -KioqCgo= 46906 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 46907 -LmNvbnRlbnRz 46908 -eW50aA== 46909 -IFN0cmFpZ2h0 46910 -Jyl9fSI+PC8= 46911 -IGJ1bGI= 46912 -Ulg= 46913 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 46914 -IGNvbXVuaWM= 46915 -IFJO 46916 -LW1lZGl1bQ== 46917 -TEVBTg== 46918 -PWxlbg== 46919 -UGhvbmVOdW1iZXI= 46920 -ZXJ2YXRpb25z 46921 -QWNjdXJhY3k= 46922 -IEFubm90YXRpb24= 46923 -X2tleXdvcmQ= 46924 -X2hpbnQ= 46925 -IEF0aGVucw== 46926 -IGFzc2lzdGluZw== 46927 -IEhD 46928 -LkluaXRpYWxpemU= 46929 -JykpKQo= 46930 -dXBh 46931 -IHN1aXY= 46932 -IElQQw== 46933 -PFRFbnRpdHk= 46934 -IGJyYW5kZWQ= 46935 -b29tbGE= 46936 -bGFyxLE= 46937 -IFhNTEh0dHBSZXF1ZXN0 46938 -IGTDqWrDoA== 46939 -IHRyYW5zY3JpcHRpb24= 46940 -IHByZXZhbGVudA== 46941 -LnBsYW4= 46942 -IHN0YXJl 46943 -IHdvcmtvdXRz 46944 -IEVkdWNhdGlvbmFs 46945 -IG1lc3N5 46946 -IE1PVA== 46947 -LkNvbW1hbmRUeXBl 46948 -UWVk 46949 -KGdjYQ== 46950 -IExpbmVhckxheW91dE1hbmFnZXI= 46951 -IEJsb3c= 46952 -IEFsdW1pbnVt 46953 -IHN3aW5nZXJjbHVi 46954 -IFRyYW5zaXQ= 46955 -IGV4cG9z 46956 -dmly 46957 -KHNlY29uZA== 46958 -IGJlbG9uZ2Vk 46959 -U3RvbmU= 46960 -6ZW/ 46961 -IFN1bA== 46962 -IGdpZA== 46963 -IGFsbG95 46964 -ZXJ2YQ== 46965 -aXNlY29uZA== 46966 -X1JFTkRFUg== 46967 -IGFuZ2Vscw== 46968 -IFBoaWxvc29waHk= 46969 -b3B1cw== 46970 -IG1vbw== 46971 -ZW5ndWlu 46972 -X1ZBUklBQkxF 46973 -X0RFU1Q= 46974 -KGF1eA== 46975 -IGhvZQ== 46976 -IGRvYg== 46977 -YXR0YWNobWVudHM= 46978 -IGNvcnJpZG9y 46979 -IGRpdmlkZW5k 46980 -nbw= 46981 -IFRocm91Z2hvdXQ= 46982 -Lm9wdGlt 46983 -JG5ldw== 46984 -IGJlcmc= 46985 -IHNwcmVhZHNoZWV0 46986 -LlRyeUdldFZhbHVl 46987 -IHBheW91dA== 46988 -IE9uRGVzdHJveQ== 46989 -YXV0aGVudGljYXRpb24= 46990 -IE1pZ3VlbA== 46991 -cnRj 46992 -IENocmlzdGluZQ== 46993 -IEFJUg== 46994 -IGp1cmlz 46995 -IGRlc3BhaXI= 46996 -IHBhdGVudHM= 46997 -LWhhcw== 46998 -JV4= 46999 -5LuY 47000 -X3N0cmR1cA== 47001 -IFJlYXI= 47002 -ZXR0ZXM= 47003 -KHByb3BlcnRpZXM= 47004 -IHdyaXRhYmxl 47005 -LmlzTnVsbA== 47006 -b2xpY3M= 47007 -X2Jsb2I= 47008 -IGN1YWxxdWllcg== 47009 -YWZp 47010 -b3d5Y2g= 47011 -6I635Y+W 47012 -w4c= 47013 -IENhcmRpbmFs 47014 -IHRlbWE= 47015 -IkFuZA== 47016 -UGFnZVNpemU= 47017 -56eS 47018 -LlNpbXBsZURhdGVGb3JtYXQ= 47019 -IFdpbm5lcg== 47020 -IGNvcnJlbw== 47021 -X3dl 47022 -LmFkZE9iamVjdA== 47023 -KGNvdXJzZQ== 47024 -IGhvZw== 47025 -b3Bybw== 47026 -IHByb2JhdGlvbg== 47027 -dW5hYmxl 47028 -KGFjdGl2ZQ== 47029 -5Zu+54mH 47030 -IHBlcnRhaW5pbmc= 47031 -IGVtcGhhc2l6ZQ== 47032 -IFByaW50ZXI= 47033 -PS4= 47034 -IHVwZ3JhZGluZw== 47035 -L2NvbnRhY3Q= 47036 -PVtb 47037 -LXNhbg== 47038 -CXZhbHVlcw== 47039 -IGRvc2FnZQ== 47040 -U29saWQ= 47041 -IFJvb3NldmVsdA== 47042 -5ZWG5ZOB 47043 -IHJlY3JlYXRpb24= 47044 -IFRlcm1pbg== 47045 -LkJhZA== 47046 -IEJvbHQ= 47047 -U2t5 47048 -X0ltYWdl 47049 -IHNxdWly 47050 -IENvYg== 47051 -T1JO 47052 -IGF1Yw== 47053 -LkxFRlQ= 47054 -J0I= 47055 -LXJlc2lzdGFudA== 47056 -PiIr 47057 -IHRva2VuaXplcg== 47058 -IHNvdmVyZWlnbnR5 47059 -IFBlbmNl 47060 -KCkiKTsK 47061 -IHBlc3NvYXM= 47062 -Lkdl 47063 -IEluY2x1ZGVk 47064 -IHBhZ2luYQ== 47065 -IGV4cG9zaW5n 47066 -0LXRiA== 47067 -X1NDUklQVA== 47068 -LyQnLA== 47069 -VGh1bWJuYWls 47070 -15Q= 47071 -d2ViRWxlbWVudFg= 47072 -d2ViRWxlbWVudFhwYXRocw== 47073 -cHJlc3N1cmU= 47074 -IEN1cnJ5 47075 -X0NQ 47076 -T0xVVElPTg== 47077 -SUxFUw== 47078 -cHJvdGVjdA== 47079 -b29sYQ== 47080 -V29ya3NwYWNl 47081 -e307Cg== 47082 -IFVOUw== 47083 -IHN5bXBhdGh5 47084 -cm9rZXI= 47085 -IHJlbW9kZWw= 47086 -CWNlbGw= 47087 -IGF0b3A= 47088 -LkZ1bGxOYW1l 47089 -IGZhdXQ= 47090 -IEVhc2lseQ== 47091 -X2R5bmFtaWM= 47092 -IGZyYW1lZA== 47093 -IG1vdGl2ZQ== 47094 -6Lev 47095 -c2Ft 47096 -IG1hcmNh 47097 -IFRleHRFZGl0aW5nQ29udHJvbGxlcg== 47098 -IGRlc3RydWN0b3I= 47099 -Y3JlYW0= 47100 -IHJ1ZGU= 47101 -IEJvbGQ= 47102 -IEluZGlnZW5vdXM= 47103 -IGdlbnM= 47104 -IHJlbGFjaW9u 47105 -KHN5c3RlbQ== 47106 -IFVJRm9udA== 47107 -X2NoYXJnZQ== 47108 -VVNURVI= 47109 -RVY= 47110 -Lk5hbWVzcGFjZQ== 47111 -IG1lcmdlcg== 47112 -IGNhbGxvYw== 47113 -Z2FuZw== 47114 -QmFkUmVxdWVzdA== 47115 -IHNwZXI= 47116 -LWRlc2lnbg== 47117 -IOKH 47118 -Q2hhbg== 47119 -IG9yZ2FuaXNt 47120 -LCk= 47121 -PWlk 47122 -X3BsYW5l 47123 -IENhc2Vz 47124 -ZWxmYXN0 47125 -IExlZ2lzbGF0dXJl 47126 -IEZha2Vy 47127 -IGludm9raW5n 47128 -LXV0aWxz 47129 -KCkuJw== 47130 -LmZhY2U= 47131 -IGd1YXJkaWFu 47132 -bXlNb2RhbA== 47133 -IGNsaXBib2FyZA== 47134 -IEFUTQ== 47135 -IHBlYXM= 47136 -IFN5bHY= 47137 -LmNhbGM= 47138 -IENvbnRhY3Rz 47139 -aW50VmFsdWU= 47140 -IG1vZGlmeWluZw== 47141 -IEJhcmI= 47142 -Lmxvc3M= 47143 -X3BlcmNlbnRhZ2U= 47144 -QXNrZWQ= 47145 -KGxzdA== 47146 -YXRlZ29yaWNhbA== 47147 -LWZpbGVz 47148 -IFJvbWFuaWE= 47149 -LkFj 47150 -IGhhaQ== 47151 -IEZseWluZw== 47152 -IMW8 47153 -anA= 47154 -IFRyYWluZXI= 47155 -LmFyYw== 47156 -X2RlZw== 47157 -IHRyYWNlYmFjaw== 47158 -T3JGYWls 47159 -RkxPVw== 47160 -Lm9sZA== 47161 -b3lh 47162 -Z210 47163 -aXNlbXB0eQ== 47164 -IHZhY2NpbmF0aW9u 47165 -IG9ic29sZXRl 47166 -cmVjb2duaXplZA== 47167 -IHJ1aW5lZA== 47168 -IFJlaW4= 47169 -IFRyYWNraW5n 47170 -eGZi 47171 -2KfbjA== 47172 -IHbDpnJl 47173 -IGJyeXN0ZXI= 47174 -IElUUw== 47175 -IGRlc3Rpbnk= 47176 -IHN3ZWFy 47177 -IHJlZGVz 47178 -IGNsZg== 47179 -IGZsaXBwZWQ= 47180 -CWhlYWQ= 47181 -Qmx1ZXRvb3Ro 47182 -IE92ZXJyaWRlcw== 47183 -OkJvb2xlYW4= 47184 -Xz0= 47185 -X2xy 47186 -c3Bhd24= 47187 -OmluZGV4 47188 -VkFMVUVT 47189 -aXNrZXk= 47190 -PyIpOwo= 47191 -LnN5bnRoZXRpYw== 47192 -IENoZWNraW5n 47193 -c3RydWN0dXJlcw== 47194 -aXBpbmc= 47195 -IHZvY2Fscw== 47196 -LVVw 47197 -IE1hbnVmYWN0dXJlcnM= 47198 -IE1hcnJpYWdl 47199 -5Luj56CB 47200 -IGdhcm5lcg== 47201 -X0NsaWVudA== 47202 -cGFyYWxsZWw= 47203 -UklFTkQ= 47204 -IHZpbmVnYXI= 47205 -c2VndWU= 47206 -SkI= 47207 -IGNvbnRhY3Rpbmc= 47208 -IENhcnJvbGw= 47209 -IG91dHJlYWNo 47210 -dGVuc29y 47211 -X3ZhcmlhbnQ= 47212 -IHRoZWF0 47213 -bGljYWJsZQ== 47214 -e3w= 47215 -dGlueQ== 47216 -X2xldHRlcg== 47217 -IHBlbmNpbA== 47218 -SGVhZGVyc0hlaWdodFNpemVNb2Rl 47219 -aWx0cm8= 47220 -LmF1dG9jb25maWd1cmU= 47221 -LmRyYWc= 47222 -LnVzZVN0YXRl 47223 -IEJNSQ== 47224 -aGludA== 47225 -Q29tcGlsZQ== 47226 -Klw= 47227 -ZW5hcnk= 47228 -IGx2bA== 47229 -LkNhY2hl 47230 -Kz0i 47231 -X3R2 47232 -cnVpdG1lbnQ= 47233 -IGZyZWFk 47234 -QXJ0aWNsZXM= 47235 -ZmlsYQ== 47236 -IHBhY2thZ2Vk 47237 -4piG 47238 -QVRIRVI= 47239 -IFBsYW5uZWQ= 47240 -c2NoZW1l 47241 -IGRpYXJ5 47242 -IG9mZmVuc2Vz 47243 -Lzw/ 47244 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 47245 -UHJvZ3Jlc3NIVUQ= 47246 -IEdvcg== 47247 -LmdldFRpdGxl 47248 -IG1vY2tlZA== 47249 -IFRvcnk= 47250 -ICIpIjsK 47251 -I2c= 47252 -IGxpZWQ= 47253 -IHN2Yw== 47254 -X2d1aQ== 47255 -RU5UUlk= 47256 -IHNlcnZpY2lv 47257 -bW91c2VvdmVy 47258 -U0FDVElPTg== 47259 -44Kz 47260 -IHJlaWZl 47261 -bGVjdHJpYw== 47262 -X2NyZWF0aW9u 47263 -UmVhbGl0eQ== 47264 -KCcr 47265 -cHJvZHVjdElk 47266 -U3VwcGxpZXI= 47267 -LUxl 47268 -LnJlcG8= 47269 -dWNraW5n 47270 -X1N0cg== 47271 -IFJlbGF5 47272 -0LjQuA== 47273 -IHBlcnY= 47274 -Q2hpY2Fnbw== 47275 -IG1haXNvbg== 47276 -IHN0aWNrZXI= 47277 -X3ByZXNzZWQ= 47278 -U3dhcA== 47279 -IElH 47280 -IHN1c2NlcHRpYmxl 47281 -b2NhZG8= 47282 -IGdpbg== 47283 -ZXhl 47284 -aWdoYm9yaG9vZA== 47285 -KWA= 47286 -IGRpYWdyYW1z 47287 -IGluZmxhbW1hdG9yeQ== 47288 -IHTDqQ== 47289 -IFBvcHVw 47290 -IGFwcHJlaA== 47291 -IFBvcnRmb2xpbw== 47292 -IHdvcnM= 47293 -LmVudW1z 47294 -0LXQs9C+ 47295 -L0J1dHRvbg== 47296 -IFBoYW50b20= 47297 -ICM6 47298 -IGRpaw== 47299 -cGFnZXI= 47300 -ZnRhcg== 47301 -IG9yZ2FuaXplcg== 47302 -KGNoaWxkcmVu 47303 -IE11bmljaA== 47304 -IHN0cmFuZw== 47305 -IFJX 47306 -44K/ 47307 -TWFo 47308 -cHRpZGU= 47309 -IGxlYXJucw== 47310 -IHJlZHVjdGlvbnM= 47311 -IFJlcGxhY2VtZW50 47312 -T1RT 47313 -YWxjb24= 47314 -KHBhcnRz 47315 -YmFzaA== 47316 -IENpdGl6ZW4= 47317 -jbDsnbQ= 47318 -IEh0dHBTZXJ2bGV0 47319 -X1NDSEVNQQ== 47320 -bWVhbnM= 47321 -IGhvcnJpZmlj 47322 -VkVSSUZZ 47323 -IERDSEVDSw== 47324 -ICgv 47325 -LmJlZm9yZQ== 47326 -LnRleHR1cmU= 47327 -Z2V0TW9jaw== 47328 -IFNlbnNl 47329 -SW5zcGVjdG9y 47330 -VGV4dE5vZGU= 47331 -KEFM 47332 -LmdldE5vZGU= 47333 -IGJveWM= 47334 -IEJyaXNiYW5l 47335 -IGJhdHRsaW5n 47336 -CXR4 47337 -IGxvYmJ5aW5n 47338 -YnVpbHQ= 47339 -IFNFRUs= 47340 -IHJhbmRvbWl6ZWQ= 47341 -Z25p 47342 -X2NsdXN0ZXJz 47343 -X2lkZW50aXR5 47344 -IGNhcmRpYWM= 47345 -IG5ld1VzZXI= 47346 -LlZpZGVv 47347 -ZHVpdA== 47348 -XWluaXQ= 47349 -QXRs 47350 -KXZhbHVl 47351 -VGV4dFV0aWxz 47352 -INC10YHQu9C4 47353 -Q29tcHV0ZQ== 47354 -PSgn 47355 -CQkgICAgICAgICAgICAgICA= 47356 -IGFydGVy 47357 -IFRXTw== 47358 -JykpLA== 47359 -IERJVg== 47360 -IHByaXZpbGVnZWQ= 47361 -IFBhcnRuZXJzaGlw 47362 -IEhlYXRoZXI= 47363 -YmF5 47364 -YXRpc2ZpZWQ= 47365 -aW5zdGFncmFt 47366 -X1NlbmQ= 47367 -IEFTRg== 47368 -JG5hbWU= 47369 -IGJvbw== 47370 -IGTDqWY= 47371 -X0ZpZWxk 47372 -IEVkdQ== 47373 -Y2FuZGlkYXRl 47374 -cnVieQ== 47375 -IGFjY3VtdWxhdGU= 47376 -KEludFB0cg== 47377 -IGJ1c2luZXNzbWFu 47378 -IGVjb25vbWljYWxseQ== 47379 -IFJpbmdz 47380 -IElucHV0cw== 47381 -uYQ= 47382 -YWNpZQ== 47383 -IEFsYXJt 47384 -IExvZ291dA== 47385 -LnNlcXVlbmNl 47386 -IFZpZW5uYQ== 47387 -b3By 47388 -IGRydW1z 47389 -PWNvbmZpZw== 47390 -cXVp 47391 -IGRhdG8= 47392 -IHBvbHltZXI= 47393 -IENoYW5nZWQ= 47394 -V2ViUmVxdWVzdA== 47395 -IEFkdmFuY2U= 47396 -IHVuZGVyZ29pbmc= 47397 -LkNvbnNvbGU= 47398 -IGN1cnJlbnROb2Rl 47399 -IFdvb2w= 47400 -IHDDoWdpbmE= 47401 -UkVHSVNURVI= 47402 -IHNhZ2E= 47403 -IFlPUks= 47404 -YW1hbmhv 47405 -5a6M 47406 -IEJ1bmRlcw== 47407 -IERpYWxvZ0ludGVyZmFjZQ== 47408 -Z2VvaXM= 47409 -dW5jaWF0aW9u 47410 -PyQ= 47411 -LkFzc2VydGlvbnM= 47412 -IHNlYXRlZA== 47413 -IFNweQ== 47414 -UG9zZQ== 47415 -IkM= 47416 -IGFob3Jh 47417 -INGE0LDQudC7 47418 -IOuzgA== 47419 -IHdhcnA= 47420 -UHJvamVjdGlvbg== 47421 -IFNpbmdsZXM= 47422 -IEFkdmVydGlzaW5n 47423 -TGludXg= 47424 -dXN0eQ== 47425 -IHBlbmFs 47426 -VVNJQw== 47427 -b2RpYQ== 47428 -Lm5ldGJlYW5z 47429 -IFVn 47430 -IEJyZW50 47431 -LWxvZw== 47432 -L2NhdGVnb3J5 47433 -IEN1c3RvbWl6ZQ== 47434 -aXJlbg== 47435 -77yaPC8= 47436 -aW5hcnM= 47437 -ICgrKw== 47438 -R29pbmc= 47439 -RVhFQw== 47440 -KG1lc2g= 47441 -IHBlcmltZXRlcg== 47442 -Q2xz 47443 -Y2VpdmluZw== 47444 -bWVuc2FqZQ== 47445 -KCkpKXsK 47446 -IHByb3N0YXRl 47447 -X2J1eQ== 47448 -IFJvb2Y= 47449 -LlJldHVybg== 47450 -IG1hcnJpYWdlcw== 47451 -X3RodW1i 47452 -574= 47453 -4K+N 47454 -VGV4dHVyZXM= 47455 -KFRFWFQ= 47456 -c2hvcnRjdXQ= 47457 -VHJhbnNmb3JtZXI= 47458 -QVRJQw== 47459 -IFNub3dkZW4= 47460 -c2NyaWJlcnM= 47461 -bWFya2Vk 47462 -IOKGkQ== 47463 -aG9yYQ== 47464 -T1BFUg== 47465 -IEZZ 47466 -IEF1dGhlbnRpYw== 47467 -IGF1ZGk= 47468 -cmFtZXI= 47469 -IExpdGVyYXR1cmU= 47470 -IGl0ZW1JZA== 47471 -LkF0dA== 47472 -KGNudA== 47473 -IEtT 47474 -LWxpbnV4 47475 -IFBhcnRpY2lwYW50 47476 -IENydWlzZQ== 47477 -aXR1bG8= 47478 -dXN0cmlhbA== 47479 -IGNsYXNl 47480 -ID0k 47481 -X2RhdGVz 47482 -Y3VycmVudFBhZ2U= 47483 -aXhh 47484 -ZXhhY3Q= 47485 -IHRzbA== 47486 -LlNv 47487 -L2RvY3VtZW50 47488 -aGFydA== 47489 -X0lETEU= 47490 -e30u 47491 -eWV0 47492 -SXJvbg== 47493 -IFRocm9uZXM= 47494 -c25k 47495 -XHhh 47496 -IGJldmVyYWdlcw== 47497 -X3RyYW5zcG9ydA== 47498 -IGZvaWw= 47499 -IHRhc3Rpbmc= 47500 -IGdvZWQ= 47501 -TWVtbw== 47502 -IG5pdHJvZ2Vu 47503 -Lk1lbWJlcg== 47504 -LmZsYXQ= 47505 -IGlsbHVt 47506 -bWluZW50 47507 -Lnpvb20= 47508 -IFB0cg== 47509 -b2Npbw== 47510 -IENvbnN1bHRpbmc= 47511 -IENvbmU= 47512 -CWl0ZW1z 47513 -IExN 47514 -IG9hdXRo 47515 -IFByb2dyYW1tZQ== 47516 -b2Nob25k 47517 -KHNlbGVjdG9y 47518 -IHdhdGVycHJvb2Y= 47519 -IE1lcmtlbA== 47520 -IHN1ZmZlcnM= 47521 -IG5wbQ== 47522 -6LGh 47523 -IExhbmRpbmc= 47524 -IExBTg== 47525 -CQkJCQkJDQo= 47526 -L2lz 47527 -IHPDqXJpZQ== 47528 -IEdVSUxheW91dA== 47529 -Z2l2ZQ== 47530 -X0NZ 47531 -QnJvd3Nl 47532 -Lm11bHRpcGx5 47533 -PSIkKA== 47534 -dXNv 47535 -LXBhcmVudA== 47536 -Lk1hdGg= 47537 -Lm51bWJlck9m 47538 -IHRpZW5lbg== 47539 -IHJlc2VudA== 47540 -IHBpdGNoaW5n 47541 -Il0pLAo= 47542 -LlV0aWxpdGllcw== 47543 -IG11bHRpcGxpY2F0aW9u 47544 -OnR5cGU= 47545 -IHBwcmludA== 47546 -aWFuaQ== 47547 -5YiZ 47548 -IGxhdW5jaGVy 47549 -IHJ1Z2J5 47550 -546w 47551 -CgkJCQo= 47552 -aGlk 47553 -QW5nbGVz 47554 -IGdvb2RieWU= 47555 -IGlucHV0U3RyZWFt 47556 -LndhdGNo 47557 -R29vZHM= 47558 -IFNheXM= 47559 -PkY= 47560 -IFN0aWNr 47561 -IGNlcmM= 47562 -IFNsZWU= 47563 -CQkgICAgICAgIA== 47564 -PEltYWdl 47565 -IOiuvg== 47566 -LWVkaXRvcg== 47567 -cGllY2Vz 47568 -IERyYW1h 47569 -IC8vLy8vLy8vLy8vLy8vLy8vLw== 47570 -IFRhc2tz 47571 -QVJD 47572 -Z2F0ZXdheQ== 47573 -LmdldGN3ZA== 47574 -Lk1ldGFkYXRh 47575 -IGd1ZXNzaW5n 47576 -5Zyw5Z2A 47577 -IHNtYXJ0ZXI= 47578 -IEdldEVudW1lcmF0b3I= 47579 -IGVmdGVy 47580 -L29wZXJhdG9ycw== 47581 -IEdMZmxvYXQ= 47582 -IGbDuHI= 47583 -IG9wYXF1ZQ== 47584 -5L+d5a2Y 47585 -U3ByZWFk 47586 -U1lTVEVN 47587 -IGludmVyc2lvbg== 47588 -IEJhc2tldGJhbGw= 47589 -IHNpbXVsYXRpb25z 47590 -IGRlbmllcw== 47591 -IGF2ZXo= 47592 -X2xpc3RlbmVy 47593 -IGVuaGFuY2luZw== 47594 -IE15dGg= 47595 -IExha2Vycw== 47596 -X01E 47597 -TmRFeA== 47598 -REFUQUJBU0U= 47599 -IHThuw== 47600 -YXJ0aA== 47601 -W2xlZnQ= 47602 -IGNvbnRlc3Rz 47603 -c3RpbGU= 47604 -KEtFUk4= 47605 -X2Zj 47606 -X3Bt 47607 -IHByZXNpZGVudHM= 47608 -IGhvc3BpdGFsaXR5 47609 -IGZhZGVJbg== 47610 -Uk9QRVJUWQ== 47611 -X21hcHM= 47612 -IERlZmluaXRpb25z 47613 -IGFzc2Vzc2luZw== 47614 -IHVzYXI= 47615 -IHF1YW50aXRhdGl2ZQ== 47616 -bW96 47617 -QmVhdXRpZnVs 47618 -Wygo 47619 -Ym9ucw== 47620 -ZnJlcXVlbmN5 47621 -Q29udGFpbg== 47622 -IHB1enpsZXM= 47623 -IENhc3Rybw== 47624 -IHZpbGxh 47625 -IGtpbmRseQ== 47626 -Rm9udEF3ZXNvbWU= 47627 -ZXJuYQ== 47628 -ZXBvY2hz 47629 -X2RhdGFz 47630 -CWlw 47631 -LnBhZGRpbmc= 47632 -IENvbnRlc3Q= 47633 -IGVkaXRpb25z 47634 -IGRpc3Byb3BvcnRpb24= 47635 -IElDTw== 47636 -IGNvbWViYWNr 47637 -PXZhbHVl 47638 -cmlhZA== 47639 -LXNvcnQ= 47640 -U3VibWl0dGVk 47641 -KG5ldHdvcms= 47642 -IENlbA== 47643 -IGluc3RhbGxtZW50 47644 -bGFzaGVz 47645 -Lkxpc3RWaWV3 47646 -IFZhdGljYW4= 47647 -KE1lZGlhVHlwZQ== 47648 -SVZFRA== 47649 -cmVhY2hhYmxl 47650 -Oklz 47651 -IENJVFk= 47652 -5Lqs 47653 -IEhlbHBmdWw= 47654 -IGJhxZ8= 47655 -JQ0K 47656 -IHBzeWNoaWF0cmlj 47657 -IHJlY3ljbGVk 47658 -Rk9STUFU 47659 -IEdyb3c= 47660 -YmluZQ== 47661 -R2l0 47662 -LnNz 47663 -IFdlYXBvbnM= 47664 -IFN0eQ== 47665 -X2Fycm93 47666 -KnNlbGY= 47667 -aXJlbWVudA== 47668 -IGRlZ2xp 47669 -QXBwRGVsZWdhdGU= 47670 -X2Jhbm5lcg== 47671 -IGNvb3JkaW5hdGVk 47672 -IFdlYmNhbQ== 47673 -IGNlbGVicmF0aW9ucw== 47674 -LmFjdA== 47675 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 47676 -KHNob3c= 47677 -IHdlZWtkYXk= 47678 -IGNvbmNlcnRz 47679 -0L7Qu9C9 47680 -Y2xpbg== 47681 -IGNyb24= 47682 -IE5pbQ== 47683 -LnNldFZlcnRpY2Fs 47684 -IEVsbGVu 47685 -2LPYqg== 47686 -IFNBTQ== 47687 -RWZm 47688 -Z3o= 47689 -c3RlYW0= 47690 -IGFudGlxdWU= 47691 -cGh5c2ljYWw= 47692 -IEZvcm1EYXRh 47693 -LnNldHRlcg== 47694 -IFBPSU5U 47695 -Qm9u 47696 -IGZsYXZvdXI= 47697 -ZXJ2ZW50aW9u 47698 -X0VOVElUWQ== 47699 -CSAgICAgICAgICAgIA== 47700 -IGludHJpbnNpYw== 47701 -IOaO 47702 -YXBwZW5kVG8= 47703 -YXJhbWVs 47704 -KV0p 47705 -IFJlY29tbWVuZA== 47706 -KW0= 47707 -T3V0T2ZSYW5nZQ== 47708 -IGtuaWdodA== 47709 -IHNhdGVsbGl0ZXM= 47710 -IFRpdGFucw== 47711 -IHdlaWdoZWQ= 47712 -IERhbmE= 47713 -ZWFzZQ== 47714 -IHNpcA== 47715 -U0lN 47716 -IERldmVsb3BlcnM= 47717 -bWFsaW5r 47718 -L2NoZWNr 47719 -X1BMTA== 47720 -bnVuZw== 47721 -IGRyeWVy 47722 -PUE= 47723 -LmR3 47724 -X1NRTA== 47725 -IHN1YnBsb3Q= 47726 -RFJPUA== 47727 -IHByb3RvdHlwZXM= 47728 -IGhvdXJseQ== 47729 -ZGlzcGxheU5hbWU= 47730 -IGFzaQ== 47731 -IFZpb2xlbmNl 47732 -IGFzdHJvbmF1dA== 47733 -IGRhdGF0eXBl 47734 -IGluZm9ybWF0aW9uYWw= 47735 -IGludmVzdGlnYXRpdmU= 47736 -ZXRlcm1pbmVk 47737 -cmVuYWw= 47738 -Oyc+ 47739 -CWNvbA== 47740 -Vkc= 47741 -X2Jvb2xlYW4= 47742 -cmVjZW50 47743 -ICopCgo= 47744 -IFJhaW5ib3c= 47745 -b21tZW4= 47746 -IGx1cg== 47747 -IG9wcHJlc3Npb24= 47748 -KCIsIik7Cg== 47749 -IEZhY2lsaXR5 47750 -REVGSU5FRA== 47751 -IG5lb24= 47752 -IG9mZmVuZGVy 47753 -QUZQ 47754 -IENsZWFuaW5n 47755 -W10pOg== 47756 -IHVuZG9jdW1lbnRlZA== 47757 -LlJlcG9zaXRvcmllcw== 47758 -IEd1aXRhcg== 47759 -0LDRgdGB0LjQsg== 47760 -U2tpbGxz 47761 -IHRlc3RpbW9u 47762 -cnlwdG9ncmFwaHk= 47763 -IEFtYmVy 47764 -IFN0YWxpbg== 47765 -IGxvbmU= 47766 -IGFwZW5hcw== 47767 -IGRpZXNlcw== 47768 -IEFyZHVpbm8= 47769 -6L2s 47770 -PT0t 47771 -X0FjdA== 47772 -IGNvZGVk 47773 -4pag 47774 -YW1idXJnZXI= 47775 -LWxpbmtz 47776 -IGFybW91cg== 47777 -LkhpZ2g= 47778 -Z2V0Q29udGVudA== 47779 -c3RhZw== 47780 -IGhlY2s= 47781 -IOyXhg== 47782 -IE1jQ29ubmVsbA== 47783 -IENvbmNlcnQ= 47784 -IEFsbG9j 47785 -w6RyZQ== 47786 -LnJlcGxhY2VBbGw= 47787 -IHBhcnRpdGlvbnM= 47788 -cm90dA== 47789 -IEZsZQ== 47790 -X1RSRUU= 47791 -cmVhc29uYWJsZQ== 47792 -IFJlcG9ydGluZw== 47793 -IGJpbGxpb25haXJl 47794 -c2NvcmVz 47795 -bWlucw== 47796 -LWV5ZQ== 47797 -TU9SRQ== 47798 -YWJvcnQ= 47799 -IFNXVA== 47800 -IGludmVydGVk 47801 -IFRlYWNoZXJz 47802 -O24= 47803 -IGFzdHJv 47804 -0L3QvtCy 47805 -0LDQvdC40YY= 47806 -cHJvZHVjdG8= 47807 -Y291bnRyaWVz 47808 -IE93ZW4= 47809 -IGNvbnRhbWluYXRpb24= 47810 -IHZpYmU= 47811 -IEVsbGk= 47812 -LnNjcmlwdA== 47813 -IE9saXZl 47814 -RE1B 47815 -dmllcg== 47816 -OnNlbWljb2xvbg== 47817 -LW1vZHVsZQ== 47818 -Z3Jlc3NpdmU= 47819 -YWd1 47820 -X3BsYXllcnM= 47821 -IHJlc3VsdGFkb3M= 47822 -c3RhcnRlZA== 47823 -c2Nyb2xsVG9w 47824 -PT09PT0= 47825 -IHdlaWdoaW5n 47826 -IFtbWw== 47827 -emFobA== 47828 -KE5T 47829 -IEFzc2VydGlvbg== 47830 -bGVhZ3Vl 47831 -LnNldFRleHRDb2xvcg== 47832 -CU1lc3NhZ2U= 47833 -IG1vbXM= 47834 -X0FG 47835 -Lndo 47836 -QUxT 47837 -IGF1dHJl 47838 -XQoKCgo= 47839 -Lm9wYWNpdHk= 47840 -IEJ1ZGRoaXN0 47841 -IGRlYWY= 47842 -IE9yZ2FuaXNhdGlvbg== 47843 -KEdsb2JhbA== 47844 -ZW5zY2g= 47845 -IGhlYWRhY2hl 47846 -IEFsaWVu 47847 -X2lub2Rl 47848 -IFN0YXJr 47849 -IOaJ 47850 -LWxuZA== 47851 -b3JlZg== 47852 -X2ZlYXQ= 47853 -IHBlZGVzdHJpYW4= 47854 -IG5vbWluYWw= 47855 -IGJhbGxvb24= 47856 -IHNwcml0ZXM= 47857 -UHJvdG90eXBlT2Y= 47858 -IEFwb3N0 47859 -IEZFQVRVUkU= 47860 -T0g= 47861 -IHJlY2Vzcw== 47862 -IERvbm5h 47863 -Y29uc3VtZXI= 47864 -JEdMT0JBTFM= 47865 -IEdJRg== 47866 -LWZyYW1l 47867 -SW5pY2lv 47868 -IHBhc3NhZ2Vz 47869 -RGF0ZVN0cmluZw== 47870 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 47871 -LmJ5dGU= 47872 -QnVn 47873 -aW5pdGlhbGl6ZXI= 47874 -cGt0 47875 -b2RpdW0= 47876 -IERFUg== 47877 -Lm9wcw== 47878 -bGVyaQ== 47879 -IGdpZnRlZA== 47880 -IGRldGFjaA== 47881 -dGVycmFpbg== 47882 -ZWx0ZXJz 47883 -44GP 47884 -LmxvYWRlcg== 47885 -IE5HTw== 47886 -c3RybmNtcA== 47887 -S2g= 47888 -KGZvbnRTaXpl 47889 -cm9ja2V0 47890 -IHByZWNlZGVudA== 47891 -IEF1cm9yYQ== 47892 -IEV4cGVyaW1lbnQ= 47893 -aXNwaGVyZQ== 47894 -RW5jb2RlZA== 47895 -IOKAkwoK 47896 -IHB5cmFtaWQ= 47897 -IEFubml2ZXJzYXJ5 47898 -b2ZpbA== 47899 -658= 47900 -KHBsdWdpbg== 47901 -Q29lZmY= 47902 -IGNvb3BlcmF0ZQ== 47903 -IHByZWRvbWluYW50bHk= 47904 -SVNN 47905 -UGhyYXNl 47906 -X0RFRklORQ== 47907 -RmxpcA== 47908 -QU1JTFk= 47909 -IE1hcmtldHM= 47910 -IFN0cmVhbVJlYWRlcg== 47911 -IENvbWJpbmU= 47912 -IG1hbnVzY3JpcHQ= 47913 -enph 47914 -LHRw 47915 -V2hhdGV2ZXI= 47916 -SVRJQ0FM 47917 -aWdoYm91cg== 47918 -RGF0YVByb3ZpZGVy 47919 -LlRleHR1cmU= 47920 -cHJpdmFjeQ== 47921 -LlNESw== 47922 -IHJlY2hhcmdl 47923 -IGNwcA== 47924 -IENGRw== 47925 -KGhvbGRlcg== 47926 -KHB5 47927 -bW90 47928 -IHNhdm9pcg== 47929 -IFJvc2E= 47930 -IFBDcw== 47931 -IO2Z 47932 -Lmhlcm9rdQ== 47933 -IGZyZW4= 47934 -IFJpbGV5 47935 -YWdhdGU= 47936 -IHNvbmQ= 47937 -Lnhsc3g= 47938 -IGhhY2tlZA== 47939 -c3RhZA== 47940 -R2k= 47941 -IHNhbml0eQ== 47942 -IFNxbERhdGFBZGFwdGVy 47943 -Li4uIiw= 47944 -IFB1c3N5 47945 -ICoqKioqKioqKioqKioqKio= 47946 -IGhhc3NsZQ== 47947 -X1BBUkVOVA== 47948 -IFVBRQ== 47949 -IGJlZ2lubmVycw== 47950 -KENsaWVudA== 47951 -IHN0YXRpc3RpY2FsbHk= 47952 -LmhvdXI= 47953 -ZWRlbHRh 47954 -IHRyYWN0aW9u 47955 -dWVsdmU= 47956 -YXJhdA== 47957 -IHNhdW5h 47958 -SU5WQUxJRA== 47959 -IGluZGljdG1lbnQ= 47960 -QUxMRQ== 47961 -IGRpc3NlbnQ= 47962 -IFR5cG9ncmFwaHk= 47963 -IGludGVudGlvbmFs 47964 -c2l0 47965 -IEFuaW1hbHM= 47966 -IGNvdW50cnlzaWRl 47967 -IHVhcnQ= 47968 -fVwi 47969 -IHNlYW1sZXNz 47970 -vuekug== 47971 -IGF1dG9z 47972 -ICInIjsK 47973 -Rmx1c2g= 47974 -QU5OT1Q= 47975 -IGFsZ2VicmE= 47976 -YXNzb2M= 47977 -IFdhdGVycw== 47978 -IHByZXBhcmF0aW9ucw== 47979 -cm9ueW0= 47980 -Wyxd 47981 -U2Fucw== 47982 -IGFybWllcw== 47983 -aXBlZw== 47984 -IGNyZWFteQ== 47985 -LmFydA== 47986 -ZXRyZQ== 47987 -IEFuaW1hdGVk 47988 -IHVucGxlYXNhbnQ= 47989 -ZW1lYW4= 47990 -Z3JlYXQ= 47991 -acSF 47992 -IEVhcmxpZXI= 47993 -IGNoaWM= 47994 -IHByZXNlcnZpbmc= 47995 -KGV4ZWM= 47996 -IEludmVzdGlnYXRpb24= 47997 -CUdQSU8= 47998 -IHJpZ29yb3Vz 47999 -aWpv 48000 -PW51bQ== 48001 -IHRvb2xTdHJpcA== 48002 -KXNldA== 48003 -KyIm 48004 -IEFjY2VsZXI= 48005 -IGRldmVsb3BtZW50YWw= 48006 -aXNwb3NhYmxl 48007 -IGZsYXdlZA== 48008 -cmVuZQ== 48009 -VXBkYXRpbmc= 48010 -IHdhdGNoZG9n 48011 -IGRlbm9taW5hdG9y 48012 -IHN1YnVyYnM= 48013 -IC4uLik= 48014 -IGNvbnZpY3Rpb25z 48015 -Y2xvc3VyZQ== 48016 -LklQ 48017 -IHRyYW5zbGF0ZXM= 48018 -LnN3dA== 48019 -LlRyYWNl 48020 -IG1ldHRyZQ== 48021 -LmlzRW5hYmxlZA== 48022 -IEVmZmVjdGl2ZQ== 48023 -LnRvSW50 48024 -IGVuY2hhbnQ= 48025 -IHN0dW5uZWQ= 48026 -IHBvaQ== 48027 -L2NvZGU= 48028 -YWRt 48029 -LmRhdGFiaW5kaW5n 48030 -IExvcmVt 48031 -X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw== 48032 -IGxlZGdlcg== 48033 -IGNhcmE= 48034 -IEdpcg== 48035 -IHdhaXRz 48036 -VW5v 48037 -IGN3ZA== 48038 -6L6R 48039 -IFRSZXN1bHQ= 48040 -IHJlam8= 48041 -IGVtaXR0ZWQ= 48042 -IFdlc3RtaW5zdGVy 48043 -5LiA5Liq 48044 -bmVr 48045 -X1Rpcw== 48046 -IGVuYWN0 48047 -CXdpdGg= 48048 -b3JnaWE= 48049 -IGp1ZQ== 48050 -UGVyZm9ybQ== 48051 -U1BBVEg= 48052 -LnRvcGlj 48053 -IERhdGVu 48054 -4bqn 48055 -IHNpdGlv 48056 -X01N 48057 -IlNv 48058 -YmlhbA== 48059 -IHNjb3BlZA== 48060 -UmVxdWlyZXM= 48061 -IFRPVEFM 48062 -IENoYW5jZWxsb3I= 48063 -KGNvbnRlbnRz 48064 -IHN0ZWFsdGg= 48065 -ZGV2aWNlcw== 48066 -LXBhc3M= 48067 -aWxpaA== 48068 -IE1hbGNvbG0= 48069 -IERlcG90 48070 -IGNvbmZpZ3Vy 48071 -YXVzc2lhbg== 48072 -X2NvbnN0cmFpbnQ= 48073 -0LLQtdGC 48074 -R1JB 48075 -IFJhdGVz 48076 -LmRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 48077 -IE5vYmVs 48078 -aXRpY3M= 48079 -IGlnbm9yYW50 48080 -IFJlcG9ydGVy 48081 -IEVib2xh 48082 -IFNob2Nr 48083 -X3JlbGF0aW9u 48084 -IE5pbmph 48085 -KWM= 48086 -IHRpY2tlcg== 48087 -LmlzQ2hlY2tlZA== 48088 -IFN1cHBsaWVycw== 48089 -IFJhcGlk 48090 -TGV2ZWxz 48091 -4oKs4oSi 48092 -CXF1ZXVl 48093 -IGNob3A= 48094 -IFVuaXg= 48095 -cmVqZWN0 48096 -LWNhbGVuZGFy 48097 -KHNvcnQ= 48098 -w6huZQ== 48099 -ZXJjaWNpbw== 48100 -IGhlY3Q= 48101 -Q0FMTFRZUEU= 48102 -cm91cG9u 48103 -IHJlbnRhbHM= 48104 -YXV0aG9ycw== 48105 -e25hbWU= 48106 -IEZJRk8= 48107 -IGxhc3Nlbg== 48108 -IE5vdXM= 48109 -IHNuYXBwZWQ= 48110 -IGZlcnRpbGl0eQ== 48111 -ImxvZw== 48112 -Y2xpY2tlZA== 48113 -IHBsYW50aW5n 48114 -IGdi 48115 -L291dHB1dA== 48116 -UEVBVA== 48117 -IGNhdGVnb3JpYQ== 48118 -IGJhY2g= 48119 -UHJvZmVzc29y 48120 -aW50aA== 48121 -Il0NCg== 48122 -UmVjb3JkZXI= 48123 -c2VyZGU= 48124 -IFRyYW5zbWlzc2lvbg== 48125 -dHJhZA== 48126 -IHR1cmJv 48127 -X1ZFUlRFWA== 48128 -XEV2ZW50 48129 -aWx2ZXI= 48130 -IGJvZGlseQ== 48131 -IFNvdXJjZXM= 48132 -IGtpbGxpbmdz 48133 -LnhyVGFibGVDZWxs 48134 -IGZvbGRlZA== 48135 -L2xlZ2Fs 48136 -dW5lcg== 48137 -IFJpZmxl 48138 -IE1JREk= 48139 -X1NlbGVjdGVkSW5kZXhDaGFuZ2Vk 48140 -LlNpemVUeXBl 48141 -IFdlYlNvY2tldA== 48142 -IHNlbGVjY2lvbg== 48143 -U2FuZA== 48144 -b3Ryb3M= 48145 -IGVudmlzaW9u 48146 -L2V0Yw== 48147 -IE1lbGlzc2E= 48148 -U3BvdA== 48149 -0L3QvtC1 48150 -X0FSTQ== 48151 -QXR0ZW1wdA== 48152 -IEJJ 48153 -44GU 48154 -IERV 48155 -IGJhY2tsYXNo 48156 -c3RyaWRl 48157 -L2NsYXNzZXM= 48158 -IHRleHRDb2xvcg== 48159 -X3N0YWZm 48160 -b2JsaW4= 48161 -YWdlbnRh 48162 -LmNvbGxlY3Rpb25z 48163 -aWxsYWdl 48164 -Jw0KDQo= 48165 -ZmxhdHRlbg== 48166 -X3NhbGVz 48167 -X01BU1RFUg== 48168 -VFc= 48169 -X2Rh 48170 -UGl0Y2g= 48171 -cGhpZXM= 48172 -IHpvbWJpZXM= 48173 -IFZFUlk= 48174 -IFBoYXJtYWN5 48175 -IHByb2dyZXNzQmFy 48176 -IGhhc2h0YWc= 48177 -U2lkZWJhcg== 48178 -QHN0b3A= 48179 -KHBj 48180 -0L7Qu9C2 48181 -TUFLRQ== 48182 -IENvcm9u 48183 -IGt2aW5uZXI= 48184 -IE1haWQ= 48185 -Ym9i 48186 -LnRpdGxlTGFiZWw= 48187 -IHN1Y2Nlc3Nlcw== 48188 -IERlbW9jcmFjeQ== 48189 -IFN1cmdlcnk= 48190 -IGNvdWdhcg== 48191 -IGN1cnNv 48192 -IGxvcm8= 48193 -aXN0ZW5jeQ== 48194 -U2VuaW9y 48195 -w6Zr 48196 -IEFBQQ== 48197 -IEJPT0s= 48198 -0LrQvg== 48199 -V1NUUg== 48200 -ICovLAo= 48201 -b3lhbA== 48202 -LnZlY3Rvcg== 48203 -IFNQRUM= 48204 -U1NG 48205 -IGNvbXB1bHM= 48206 -IEFwcGVhbHM= 48207 -IFdpbnN0b24= 48208 -IE1vY2tpdG8= 48209 -Y29udHJpYg== 48210 -LmF2YWlsYWJsZQ== 48211 -ZW50aXR5TWFuYWdlcg== 48212 -YXJpYXM= 48213 -X3NhbGU= 48214 -X3Jz 48215 -IGRlY29kaW5n 48216 -IGxvY2F0b3I= 48217 -b2xpdGg= 48218 -IGtvbA== 48219 -IGFzY2lp 48220 -IFJ1dA== 48221 -L2ludGVyZmFjZQ== 48222 -CQkJCQkJICAg 48223 -IE51bWVy 48224 -LmZsaXA= 48225 -LWRlbA== 48226 -IGJvbHN0ZXI= 48227 -b25vbWlj 48228 -IHpt 48229 -TEc= 48230 -RmluZEJ5 48231 -IGFkYXB0aXZl 48232 -bG9v 48233 -IHZ1ZQ== 48234 -KHJldmVyc2U= 48235 -X2NhbnZhcw== 48236 -LnJvbGVz 48237 -aWZpY2Fkbw== 48238 -dmVuaWVudA== 48239 -IkFz 48240 -IEVudHI= 48241 -YWxpZ25lZA== 48242 -IGJlcmVpdHM= 48243 -Ly8vCgo= 48244 -Lmd3dA== 48245 -LmVtcGxveWVl 48246 -X2NsaQ== 48247 -IGFudGljaXBhdGU= 48248 -6ZmQ 48249 -IHBpaw== 48250 -IG11c2hyb29tcw== 48251 -KHR0 48252 -IG9tYQ== 48253 -IFNhbmNoZXo= 48254 -X2dvb2dsZQ== 48255 -LlZhbGlk 48256 -IEZpbGVOYW1l 48257 -aXZhdGl2ZQ== 48258 -a2Vk 48259 -LXdhcg== 48260 -IG1hdHVyaXR5 48261 -0LjQtA== 48262 -IG1pbmVy 48263 -UmVkdWNlcnM= 48264 -IExhdExuZw== 48265 -X1NURA== 48266 -RGlnaXRz 48267 -Q2FsYw== 48268 -LXVwbG9hZA== 48269 -IGhhbmRpYw== 48270 -4Li14LmI 48271 -ZWdyYXRlZA== 48272 -IFNUTQ== 48273 -Q2xpZW50cw== 48274 -IFR1cmJv 48275 -U1lOQw== 48276 -IHBob3RvZ3JhcGhlcnM= 48277 -Lk91dA== 48278 -LmNoYXJhY3Rlcg== 48279 -QlVJTEQ= 48280 -LnVubG9jaw== 48281 -IGFyaXNlcw== 48282 -IENvbW1hbmRz 48283 -KCIiKTsNCg== 48284 -X0ZPUkU= 48285 -Oycs 48286 -KyIn 48287 -LkltYWdlcw== 48288 -Iil7 48289 -IE1leWVy 48290 -IG5lZ2F0aXZlbHk= 48291 -IERMTA== 48292 -IGV4ZQ== 48293 -IGRlZmljaWVuY3k= 48294 -IHdpbGRseQ== 48295 -LXN3aXRjaA== 48296 -Y29uc3RydWN0aW9u 48297 -IGV4Y2VwdGlvbmFsbHk= 48298 -IExpeg== 48299 -L2phdmE= 48300 -IHRoZWlycw== 48301 -IENvbnRlbXBvcmFyeQ== 48302 -bGlz 48303 -LmZpbGxSZWN0 48304 -IE5GQw== 48305 -IHJlaGU= 48306 -KG51bWJlcnM= 48307 -IHJhc3Rlcg== 48308 -IGZpZ3VyaW5n 48309 -IHNob3dj 48310 -IEppbGw= 48311 -IGFyY2FkZQ== 48312 -IENvbnN0cnVjdHM= 48313 -bWRs 48314 -KCd8 48315 -IGlkZW50aWZpZXJz 48316 -IHN0ZWxsYXI= 48317 -KENvbm5lY3Rpb24= 48318 -ICJ7ew== 48319 -eW9y 48320 -KG15c3FsaQ== 48321 -IGRvdmU= 48322 -T2ZCaXJ0aA== 48323 -LmRpc2Nvbm5lY3Q= 48324 -X2hp 48325 -IHp3aXNjaGVu 48326 -IEdydW5k 48327 -aXJvcw== 48328 -X0FycmF5 48329 -Lm9uY2xpY2s= 48330 -YW5zb20= 48331 -QW5zd2Vycw== 48332 -CXJlbW92ZQ== 48333 -RmE= 48334 -IGh1cnJ5 48335 -LWluZg== 48336 -IGdldENsYXNz 48337 -IFJlZ3VsYXRpb24= 48338 -IEZMQUdT 48339 -bWlzYw== 48340 -S2Vu 48341 -X2hlYWRpbmc= 48342 -R0h6 48343 -LWVudHJ5 48344 -IGJpb2dyYXBoeQ== 48345 -U2ln 48346 -LW1m 48347 -V2F0Y2hlcg== 48348 -4oCcQQ== 48349 -fXB4 48350 -IHNwaWN5 48351 -X3Nx 48352 -TG9zdA== 48353 -KHRyYWNr 48354 -0LDQu9C4 48355 -RGVzY2VuZGluZw== 48356 -PGJpdHM= 48357 -cXVpbmU= 48358 -IEFkdm9j 48359 -X1NO 48360 -IEhhbm5haA== 48361 -UE9Q 48362 -IGVtaXR0ZXI= 48363 -IGN5bg== 48364 -IENBRA== 48365 -Pyku 48366 -L3NldA== 48367 -IFNpc3Rlcg== 48368 -IEVuZHBvaW50 48369 -IG1lbm9y 48370 -IGludGVycA== 48371 -cms= 48372 -aWRsZQ== 48373 -IG91dGZpdHM= 48374 -LnZlcnRleA== 48375 -IGNsaWM= 48376 -QVJFTg== 48377 -IHBvc3R1cmU= 48378 -IE9wcG9ydHVuaXR5 48379 -dng= 48380 -IEZvcmJlcw== 48381 -LkRpcmVjdGlvbg== 48382 -IHJlc2lkZQ== 48383 -IHJlbWVtYmVyaW5n 48384 -bmVzdHk= 48385 -QXV0b3Jlc2l6aW5n 48386 -cHJvdmlkZXJz 48387 -IEFI 48388 -IGh1cnRpbmc= 48389 -IExpbHk= 48390 -ZXZhbHVhdGU= 48391 -bGlqaw== 48392 -cGFwZXJz 48393 -IFNtYXNo 48394 -IExBU1Q= 48395 -IHdlbGxz 48396 -d2FzaGVy 48397 -X1JPTEU= 48398 -IERhbmdlcg== 48399 -Kigo 48400 -X3JlcG9zaXRvcnk= 48401 -IFJlc29sdmU= 48402 -IFJvb21z 48403 -X1JH 48404 -IFFU 48405 -b29w 48406 -IEhlYXA= 48407 -IHNsb3dpbmc= 48408 -IGdyYXR1aXRl 48409 -X2NhdGFsb2c= 48410 -IHBvbHlub21pYWw= 48411 -THk= 48412 -cGNz 48413 -Rm94 48414 -IEN5cg== 48415 -IGRpbWlu 48416 -L21vbnRo 48417 -U2FsdA== 48418 -IGhpbmQ= 48419 -LlBFUg== 48420 -Rm9ydW0= 48421 -Y2Vu 48422 -X3BvbA== 48423 -7Zi4 48424 -IGluc2Vy 48425 -KH4= 48426 -QHRlc3Q= 48427 -IEdvbGRtYW4= 48428 -IHVwbG9hZGluZw== 48429 -RmM= 48430 -IGtvbW1lcg== 48431 -IG1pdHQ= 48432 -X2xvZ2dlZA== 48433 -IGJ1Y2tz 48434 -LWxheWVy 48435 -KX07Cg== 48436 -IE9N 48437 -IHZlZw== 48438 -Y29sb3Vy 48439 -INC+0LHRig== 48440 -U3RkU3RyaW5n 48441 -X3F1ZQ== 48442 -IFRpYW4= 48443 -IHNwZWNpYWxpemU= 48444 -0LjQvw== 48445 -INC60Ls= 48446 -dHJpYWw= 48447 -LWVkZ2U= 48448 -IG1hcnM= 48449 -T0dMRQ== 48450 -IGVtcGF0aHk= 48451 -IEJvbQ== 48452 -IGNvbGxpc2lvbnM= 48453 -IGNhcnRl 48454 -IFRlaWw= 48455 -IE1QTA== 48456 -IHBvcm7DtA== 48457 -IGFpcmxpbmVz 48458 -QXdz 48459 -TnM= 48460 -IFNwYXdu 48461 -KHVzZQ== 48462 -6buY6K6k 48463 -IHlhY2M= 48464 -c3Rvcg== 48465 -IGNvbmZlc3M= 48466 -IHBlcXVl 48467 -cmFnZQ== 48468 -PyIK 48469 -L2RhdGF0YWJsZXM= 48470 -IFNob3dlcg== 48471 -X18v 48472 -IGNyeXN0YWxz 48473 -IGJ1c2Nhcg== 48474 -IEhhdXM= 48475 -aXphw6fDo28= 48476 -X2VudGl0aWVz 48477 -lYw= 48478 -mow= 48479 -eGNj 48480 -dmlydA== 48481 -LWNoZXZyb24= 48482 -KFJlc3VsdA== 48483 -Y2FrZQ== 48484 -Q09NRQ== 48485 -IHByb2hpYml0 48486 -IENoZXNz 48487 -IGJlYXVjb3Vw 48488 -INGH0YLQvg== 48489 -UlVO 48490 -IElL 48491 -w7PFgg== 48492 -X1VwZGF0ZQ== 48493 -IHNsZWVr 48494 -IFNwZWNpZnk= 48495 -X2NyZWRlbnRpYWxz 48496 -xZ90 48497 -IFVzZXJOYW1l 48498 -CVZhbHVl 48499 -IGFycmF5TGlzdA== 48500 -IGV4Y2hhbmdlZA== 48501 -aXBzaXM= 48502 -LnJlbGF0ZWQ= 48503 -IFNlaXRl 48504 -X0JBUg== 48505 -IExlbQ== 48506 -IFdBVENI 48507 -IENsaWVudHM= 48508 -IC4q 48509 -IEVhcmw= 48510 -LXJlcG9ydA== 48511 -IGZvcmVpZ25lcnM= 48512 -IHN0cmVuZ3RoZW5pbmc= 48513 -CURlc2NyaXB0aW9u 48514 -KGdv 48515 -LnRvb2xiYXI= 48516 -IGNhbGN1bGF0ZXM= 48517 -CXNvdXJjZQ== 48518 -IGN6YXM= 48519 -IHJlY2w= 48520 -YWJv 48521 -IGxvY2FsaG9zdA== 48522 -IF57Cg== 48523 -LlBvcA== 48524 -IERlc2lnbmVk 48525 -XEFic3RyYWN0 48526 -SG9sZA== 48527 -IEd1aWRlbGluZXM= 48528 -aXBsaW5l 48529 -IGNhY2hpbmc= 48530 -LlJlYWRlcg== 48531 -X2V4dGVybmFs 48532 -LnN0cnB0aW1l 48533 -IFdlZWtlbmQ= 48534 -LU1hcg== 48535 -IEJlaQ== 48536 -IHsqfQ== 48537 -IFJ1ZA== 48538 -IGV4cGxvcg== 48539 -IEJvdWxldmFyZA== 48540 -Q2FzaA== 48541 -IHByZXBhcmVz 48542 -IHNlcmlhbGl6YXRpb24= 48543 -ZXdhdGVy 48544 -IGFkYw== 48545 -OgoKCgoKCg== 48546 -UmVmZXI= 48547 -IHNjYW5uZWQ= 48548 -fX0KCg== 48549 -IEZ1bA== 48550 -IHRvdXJpbmc= 48551 -44OD44Kv 48552 -Pigo 48553 -c3VydmV5 48554 -IO2Y 48555 -Li4uJykK 48556 -IERpdmlkZXI= 48557 -b3Ns 48558 -X0NBTkNFTA== 48559 -X3ByZXBhcmU= 48560 -c3Rpbg== 48561 -IEhlYXRo 48562 -LlByaW1hcnlLZXk= 48563 -IOKGkA== 48564 -IExvY2FsRGF0ZVRpbWU= 48565 -IGNvb3BlcmF0aXZl 48566 -TGVhcm5pbmc= 48567 -LmVucXVldWU= 48568 -IGdvb2c= 48569 -IFJlZ3Jlc3Npb24= 48570 -aW1hdGVz 48571 -IHZveWV1cg== 48572 -IERyaW5r 48573 -cGx1Zw== 48574 -IGxlbmRlcg== 48575 -bWFuYQ== 48576 -IHBlcnNvbm5lcw== 48577 -eXBzZQ== 48578 -IHVubGluaw== 48579 -IFJhdmVucw== 48580 -IGh1cmQ= 48581 -IHBlcmlvZGljYWxseQ== 48582 -QVJHUw== 48583 -IEdI 48584 -Y2hhcmFjdGVycw== 48585 -Li4uIgoK 48586 -LWVzdGFibGlzaA== 48587 -IGRu 48588 -KGNvbmRpdGlvbg== 48589 -IEdyYXZpdHk= 48590 -IGVzdGFz 48591 -X2ZvY3Vz 48592 -Q3JlYXR1cmU= 48593 -KHNpdGU= 48594 -IGNhcnI= 48595 -IFJM 48596 -IFJJ 48597 -IE1vdG8= 48598 -QVNG 48599 -IEx1Y2tpbHk= 48600 -CVJvdXRl 48601 -IGVudHJvcHk= 48602 -KCIsIg== 48603 -Q29sbGVjdA== 48604 -KGNvbnRhY3Q= 48605 -IEZsb3JlbmNl 48606 -IHByZW1pdW1z 48607 -IGxpZmVjeWNsZQ== 48608 -IGJhbnM= 48609 -eGVm 48610 -V2ViS2l0 48611 -IEZsb2F0aW5n 48612 -IGNvc2E= 48613 -U3BlY2lmaWM= 48614 -IExvYW5z 48615 -YnJlYWQ= 48616 -IGRlc2NyaXB0b3Jz 48617 -IHs6Lg== 48618 -VEhSRUFE 48619 -IFRyZW50 48620 -IHNjb3A= 48621 -UUE= 48622 -IEFudGFy 48623 -cGVs 48624 -X2RpZmZlcmVuY2U= 48625 -X2NoYW5nZXM= 48626 -KC4uLik= 48627 -IFJvdGF0aW9u 48628 -IExHUEw= 48629 -IEpVU1Q= 48630 -KFRhc2s= 48631 -X3N1YnNldA== 48632 -IFRSQU5T 48633 -5Yqb 48634 -IFNjb3V0 48635 -LXBvcHVw 48636 -IHNtb2tlZA== 48637 -X0NsYXNz 48638 -IHR1cm5vdmVy 48639 -YnJha2s= 48640 -IFJvY2t5 48641 -dGFz 48642 -LlJlZ3VsYXJFeHByZXNzaW9ucw== 48643 -IEVsbGlvdHQ= 48644 -IFNwaW5uZXI= 48645 -RFVDVElPTg== 48646 -IGxpYnJl 48647 -IG1vbHRv 48648 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 48649 -IEZUUA== 48650 -bXBlZw== 48651 -KGZlYXR1cmVz 48652 -IGJhbGQ= 48653 -IFZpZA== 48654 -IHNob3V0aW5n 48655 -TGludA== 48656 -IHNvY2tldHM= 48657 -IHByb3c= 48658 -IG5vdXZlbGxl 48659 -aXNjYXJk 48660 -IFNwb25zb3I= 48661 -IGNvbnN1bHRh 48662 -KSkpOw== 48663 -SW5kaWFu 48664 -IFJhc3BiZXJyeQ== 48665 -IHRlYW1tYXRl 48666 -IEpXVA== 48667 -IEdoYW5h 48668 -IGNha2Vz 48669 -cHJpbWVy 48670 -Zm9ybWE= 48671 -ZXJnYXJ0ZW4= 48672 -X01hbmFnZXI= 48673 -IHByZXNlYXNvbg== 48674 -R0FNRQ== 48675 -fCI= 48676 -IEJyb2Nr 48677 -IG9jY3VweQ== 48678 -IGRlY29yYXRpb25z 48679 -w6FuZA== 48680 -IGNvdA== 48681 -IHBhcmFu 48682 -RGlzaw== 48683 -cmVtYWlu 48684 -Pj8= 48685 -U3Ryb25n 48686 -IGZyYW5jZQ== 48687 -IEVyYQ== 48688 -LWNy 48689 -LkJ1ZmZlcmVkUmVhZGVy 48690 -IFBhcmFkaXNl 48691 -IFZBVA== 48692 -IEFuZGVycw== 48693 -IGxpbWI= 48694 -YW1wb28= 48695 -IGltcGVyYXRpdmU= 48696 -VVRJTElUWQ== 48697 -IFJlY29nbml0aW9u 48698 -IHJhZ2F6emU= 48699 -IHBvcHM= 48700 -eXByZXNz 48701 -IGVtYmFyZ28= 48702 -Ly97Cg== 48703 -IHN5bGw= 48704 -UFRS 48705 -5a2Y5Zyo 48706 -IGRpZG50 48707 -TWFpbGVy 48708 -IGFjYWRlbWljcw== 48709 -IEZyYXVlbg== 48710 -bmVpZGVy 48711 -LXJlbA== 48712 -IHJhaW5ib3c= 48713 -KElu 48714 -IHNsaWNlZA== 48715 -PT09PT09PT09PT09PQo= 48716 -KHNlbmQ= 48717 -TlNNdXRhYmxlRGljdGlvbmFyeQ== 48718 -dm9z 48719 -KHBhY2thZ2U= 48720 -IG9yZGluYW5jZQ== 48721 -dmlld2Vy 48722 -IFNhbnRvcw== 48723 -LXNlbGxpbmc= 48724 -IGdvdg== 48725 -ZXR0bGU= 48726 -IGZvdW5kZXJz 48727 -IHdha2luZw== 48728 -c2xhc2hlcw== 48729 -LXBvdW5k 48730 -cmVjaHQ= 48731 -2KfYqg== 48732 -Lm9uQ2xpY2s= 48733 -IG5vcmQ= 48734 -c3TDpG5k 48735 -X3doZW4= 48736 -VVRFUlM= 48737 -aWNj 48738 -IGNhcHN1bGU= 48739 -IFdpZA== 48740 -TWFyYw== 48741 -4Li4 48742 -cm9yZWQ= 48743 -VUdF 48744 -TE9VRA== 48745 -IEF1ZGl0 48746 -aXBpZW50cw== 48747 -b3BpYW4= 48748 -IFN1ZQ== 48749 -IHd1cmRlbg== 48750 -LkhlbHBlcnM= 48751 -IGZhY3Rpb25z 48752 -W25w 48753 -LXRoYW4= 48754 -IHJlY28= 48755 -IGthcw== 48756 -IGNtZHM= 48757 -L25ldHdvcms= 48758 -eGJm 48759 -Z2V0Q29sb3I= 48760 -IGJpYXNlZA== 48761 -IExhaw== 48762 -RGF0YXM= 48763 -dmVudHM= 48764 -IOuy 48765 -X1BT 48766 -LlZhbGlkYXRl 48767 -SW52b2tlcg== 48768 -IG5ldWVu 48769 -IGp1dmVuaWxl 48770 -VklTSU9O 48771 -IGRldm90ZQ== 48772 -IGxpbmhh 48773 -IGRpc2NvdW50ZWQ= 48774 -XENvbmZpZw== 48775 -IHdvcnRod2hpbGU= 48776 -IHNraW5ueQ== 48777 -IENvdXJzZXM= 48778 -bGV5cw== 48779 -IE1vcnRnYWdl 48780 -S2V2aW4= 48781 -IGFubm91bmNlcw== 48782 -XSkq 48783 -cmVzZXJ2YXRpb24= 48784 -IOaVsA== 48785 -IHByZWp1ZGljZQ== 48786 -IFN0cmluZ0NvbXBhcmlzb24= 48787 -IGJlYXJk 48788 -LXdpbg== 48789 -IFPDo28= 48790 -CW1z 48791 -amFs 48792 -IEVhcm4= 48793 -X3BvcnRz 48794 -IE5vbWJyZQ== 48795 -X0NPUg== 48796 -IEJVSUxE 48797 -LnNvdW5k 48798 -WWVsbG93 48799 -IGxpbmViYWNrZXI= 48800 -IGNoYXJpdGFibGU= 48801 -anVn 48802 -X05PTk5VTEw= 48803 -IERlbnRhbA== 48804 -Ij4kew== 48805 -CW1hdGNo 48806 -UnVzc2lhbg== 48807 -IHZlcnNjaA== 48808 -IHBpbm5lZA== 48809 -IGFkb3B0aW5n 48810 -T3B0aW9uc01lbnU= 48811 -UGFn 48812 -IHBhaXJpbmc= 48813 -IHRyZWFk 48814 -ZXJjaXNlcw== 48815 -IFNwcmVhZA== 48816 -KWk= 48817 -IEJBRA== 48818 -X3Rm 48819 -VUlJbWFnZVZpZXc= 48820 -cG9wdWxhdGU= 48821 -YmFi 48822 -IM+D 48823 -Wysr 48824 -IG9waW9pZA== 48825 -ICMjCg== 48826 -ZHR5cGU= 48827 -IFN0YXJ0cw== 48828 -KCcvJyk= 48829 -IHBlcnNvbmFscw== 48830 -LW1hcmtldA== 48831 -IHJlZHVuZGFudA== 48832 -IEVzc2VudGlhbA== 48833 -IHNjcmFweQ== 48834 -INC40Lw= 48835 -YWNs 48836 -IGNyZWFy 48837 -IEJlbmQ= 48838 -IHJlbGlldmU= 48839 -LXJvb20= 48840 -d2lmZQ== 48841 -IHbDoA== 48842 -IFFQb2ludA== 48843 -IHF1YXNp 48844 -IG1ldGhvZE5hbWU= 48845 -XHhj 48846 -IFBlcnU= 48847 -L1RoZQ== 48848 -Lm9ybQ== 48849 -IHZpeg== 48850 -L3BkZg== 48851 -TG9jYXRlZA== 48852 -IGNvbmZyb250YXRpb24= 48853 -IENoYW1waW9uc2hpcHM= 48854 -IGh5cGVydA== 48855 -IGRq 48856 -IFVzZXJJbmZv 48857 -IOWIm+W7ug== 48858 -XHhi 48859 -KHNpbQ== 48860 -ID09Cg== 48861 -IHN0YWdpbmc= 48862 -IGRyYXN0aWNhbGx5 48863 -5a2m 48864 -bG9yZHM= 48865 -Lmxlc3M= 48866 -0LLQtdC00LjRgtC1 48867 -IEJ1Y2tldA== 48868 -IE1hbQ== 48869 -LnRlcm0= 48870 -X3Bp 48871 -Y3p5 48872 -LnB1Yg== 48873 -cHJlY2lv 48874 -IFZpcnQ= 48875 -IHJvbWFu 48876 -aXRhdA== 48877 -TGV4 48878 -X2luZm9z 48879 -xLA= 48880 -Lm90aGVy 48881 -VkVMTw== 48882 -IHBvbmRlcg== 48883 -IGhhbm5v 48884 -KFBhZ2U= 48885 -ZG9p 48886 -IHBvbGl0ZQ== 48887 -IHByb2dyYW1tZXI= 48888 -RGllcw== 48889 -JGQ= 48890 -IHJlcGxpY2F0aW9u 48891 -YWRkQ29sdW1u 48892 -ZnJpY2Fu 48893 -IGxlbmc= 48894 -YmVlcg== 48895 -b2l0 48896 -IHdhc3Rpbmc= 48897 -eWxpbQ== 48898 -bWVhc3VyZQ== 48899 -TmVn 48900 -IHBhcnRpZQ== 48901 -LmNvbnNvbGU= 48902 -IEd1aW5lYQ== 48903 -VEVM 48904 -X2ZhY3Q= 48905 -LmNodW5r 48906 -IGxlbnQ= 48907 -IGFsbGVy 48908 -IOCklQ== 48909 -X2lkbGU= 48910 -IGFkbWlzc2lvbnM= 48911 -SlNPTkFycmF5 48912 -IHZpYnJhdGlvbg== 48913 -LmhlbHBlcnM= 48914 -5aSW 48915 -IGhlbg== 48916 -am9obg== 48917 -IOyDnQ== 48918 -IGp1ZGdlbWVudA== 48919 -IGdlZW4= 48920 -dGVycmE= 48921 -Xns= 48922 -IEl6 48923 -IGPDog== 48924 -aW5zdGFuY2Vz 48925 -IHRocmVhdGVucw== 48926 -IG3DvHNzZW4= 48927 -S2luZE9mQ2xhc3M= 48928 -IHN0b3J5dGVsbGluZw== 48929 -X2RlbW8= 48930 -cmlhcw== 48931 -UHJpdmFjeQ== 48932 -aGlmdA== 48933 -IFlp 48934 -ZXNvcg== 48935 -7ZWg 48936 -ZW5zaXRpdml0eQ== 48937 -LldyaXRlcg== 48938 -4LiC 48939 -RGlzdHJpY3Q= 48940 -LmdldEpTT05PYmplY3Q= 48941 -SW1wcm8= 48942 -KGdldFJlc291cmNlcw== 48943 -IFNQRUxM 48944 -cm9kdWNl 48945 -IHNsb3dlZA== 48946 -IGxpbmV3aWR0aA== 48947 -IGhvbmVzdHk= 48948 -IENvb3Jk 48949 -IEZvcms= 48950 -IERpc3BhdGNoUXVldWU= 48951 -IENsaWZm 48952 -IFdpcmluZw== 48953 -X1RJTUVTVEFNUA== 48954 -b2xsYWg= 48955 -YXZvaWQ= 48956 -KytdOwo= 48957 -c2VtYW50aWM= 48958 -LWNzcw== 48959 -IHZldG8= 48960 -IE1lcnI= 48961 -IGxlZ2lzbGF0b3Jz 48962 -Q0VFREVE 48963 -IHF1ZXN0aW9ubmFpcmU= 48964 -IFBpbGxz 48965 -Q2FsY3VsYXRl 48966 -KGNvcmU= 48967 -J2U= 48968 -IGRpc2xpa2U= 48969 -IFByZWZlcmVuY2Vz 48970 -X0VYVEVSTkFM 48971 -6LCD 48972 -IGRvZGdl 48973 -5pyN5Yqh 48974 -Lm5hbWVz 48975 -LmRyYXdJbWFnZQ== 48976 -X3Byb20= 48977 -dWNrbGFuZA== 48978 -IDwkPg== 48979 -xLF6 48980 -L3NpdGU= 48981 -6aG5 48982 -cm9waGU= 48983 -IGNvbXBlbGxlZA== 48984 -IGxhcHRvcHM= 48985 -IHVuaQ== 48986 -Q0xPU0U= 48987 -IGNhc3VhbHRpZXM= 48988 -IFVuaWZvcm0= 48989 -VGVybWluYWw= 48990 -LiIsIg== 48991 -REFU 48992 -KFRyZWVOb2Rl 48993 -IEdhbmRoaQ== 48994 -KHN0bXQ= 48995 -QVhC 48996 -Kk0= 48997 -IHVtYnJlbGxh 48998 -YW5pbWFs 48999 -IGdycGM= 49000 -IHdoZXJlYnk= 49001 -IGZsb2F0cw== 49002 -CWFyZw== 49003 -IGRiZw== 49004 -IGV4Y2VlZGluZw== 49005 -RXZlbnRUeXBl 49006 -LlNhdmVDaGFuZ2VzQXN5bmM= 49007 -IHt7ew== 49008 -IG93ZWQ= 49009 -YWhyZW5oZWl0 49010 -IOyn 49011 -IGVxdWlwbw== 49012 -dXJhaQ== 49013 -IGlkb2w= 49014 -XSIpCg== 49015 -X21ham9y 49016 -IGVudGlyZXR5 49017 -aW5nZXJwcmludA== 49018 -w6dvcw== 49019 -L2FjY291bnQ= 49020 -CXJpZ2h0 49021 -dXJzb3M= 49022 -IEVEVA== 49023 -X0lOU0VSVA== 49024 -IHNoaW5pbmc= 49025 -IDw6 49026 -RWRnZUluc2V0cw== 49027 -IGNvbG9uaWVz 49028 -LklN 49029 -CSAJ 49030 -Uk9BRA== 49031 -Q0NDQw== 49032 -cGxhY2luZw== 49033 -IGdldEFjdGl2aXR5 49034 -ZW1hY3M= 49035 -JyUo 49036 -LmNsaWNrZWQ= 49037 -IFRoZW0= 49038 -aXNpYQ== 49039 -QnVzY2Fy 49040 -LnJlbmFtZQ== 49041 -IG9hdGg= 49042 -IGFmdGVyd2FyZA== 49043 -IFVGTw== 49044 -QVBT 49045 -IEphY2tzb252aWxsZQ== 49046 -LnNvbWU= 49047 -Q29uZmlybWVk 49048 -LnNjYW4= 49049 -aWdJbnRlZ2Vy 49050 -RGVjb3JhdG9y 49051 -c2hpZWxk 49052 -cmVzc2l2ZQ== 49053 -LmRpZA== 49054 -6K+36L6T5YWl 49055 -IHNodXR0ZXI= 49056 -RGFt 49057 -IHBhcmVudGluZw== 49058 -ZXllZA== 49059 -JGl0ZW0= 49060 -LWRldmVsb3A= 49061 -IGV4dHJhY3Rz 49062 -IGRlY2VudHJhbGl6ZWQ= 49063 -IEVsc2E= 49064 -X3NwaW4= 49065 -XSkr 49066 -LWluaXRpYWw= 49067 -IG11bHRpdHVkZQ== 49068 -IHNlbnNvcnk= 49069 -IE1PREVM 49070 -IHNhZmVndWFyZA== 49071 -7Lk= 49072 -IGh1bnRlcnM= 49073 -IFRpbnk= 49074 -SU5P 49075 -ZGVjb3JhdGU= 49076 -IE5vU3VjaA== 49077 -SG8= 49078 -KFJlc3BvbnNl 49079 -IHJ1bGVy 49080 -CXNob3J0 49081 -IGNhc3Rlcg== 49082 -IGNsaWVudElk 49083 -IHBkYg== 49084 -64+E 49085 -aXRpYw== 49086 -IEdhbWVTdGF0ZQ== 49087 -IG5ld0l0ZW0= 49088 -KQoKCgoKCg== 49089 -b3Vpcw== 49090 -bm9j 49091 -LkJMQUNL 49092 -X1ZFQ1RPUg== 49093 -LS0tLS0tLS0tLTwv 49094 -IGV4YW1pbmVz 49095 -CWJsb2Nr 49096 -IGFkZG9u 49097 -IHN1cnZleWVk 49098 -IExpc3RlbmVy 49099 -IGZyb250aWVy 49100 -IGxhY2tlZA== 49101 -SlVTVA== 49102 -INGN0YI= 49103 -IHRpbnQ= 49104 -IE15c3Rlcnk= 49105 -ZGF0ZVRpbWU= 49106 -IFR1dG9yaWFs 49107 -IGZ1bGxOYW1l 49108 -IERyYWdvbnM= 49109 -X0ZJTEVT 49110 -IFByaW50V3JpdGVy 49111 -IGJlZXQ= 49112 -IExhZGllcw== 49113 -X3RpcA== 49114 -IEphaHJl 49115 -b3JhbWE= 49116 -IGluc3VsYXRpb24= 49117 -KEVudmlyb25tZW50 49118 -X2FzdA== 49119 -YmVyZ2Vy 49120 -bGVuYQ== 49121 -b2dlbmVvdXM= 49122 -X01PTlRI 49123 -LXByZXNlbnQ= 49124 -IGZyYW1ld29ya3M= 49125 -UVE= 49126 -UEhQRXhjZWw= 49127 -IGNvdW50ZG93bg== 49128 -IEZX 49129 -KGNsdXN0ZXI= 49130 -OmM= 49131 -IG9raHR0cA== 49132 -b2JzZXJ2ZQ== 49133 -W3BsYXllcg== 49134 -Lmhl 49135 -IFBhbmFtYQ== 49136 -QXVzdHJhbGlh 49137 -IG91bmNlcw== 49138 -IGFnZ3Jlc3NpdmVseQ== 49139 -IHdhcm5z 49140 -IGN1c3RvbWl6YXRpb24= 49141 -X1F1ZXJ5 49142 -d2lz 49143 -IGludmFs 49144 -QUZG 49145 -KGNhbWVyYQ== 49146 -V2ly 49147 -IG5lZ290aWF0aW9u 49148 -CU8= 49149 -IHJlc3BlY3RmdWw= 49150 -IGRpYW1vbmRz 49151 -J2F2 49152 -YXBwcm94 49153 -L2Ry 49154 -IGdyYWJz 49155 -IGFjY29tcGFuaWVz 49156 -Y29uc3RyYWludA== 49157 -IHJleg== 49158 -KHJlZ2lvbg== 49159 -IGJhaXQ= 49160 -dGVybWluYXRl 49161 -IEJlbGdpYW4= 49162 -YXNzaXVt 49163 -IF0NCg== 49164 -U3lzdGVtcw== 49165 -b3VzZWRvd24= 49166 -LmJ1cw== 49167 -U2V0VmFsdWU= 49168 -IFByZXA= 49169 -IGNvbnZlbmllbnRseQ== 49170 -Lm1pZA== 49171 -Y2FzZWNtcA== 49172 -TnVtZXJv 49173 -ZGFpbHk= 49174 -IENvZGluZw== 49175 -KGRlc3RpbmF0aW9u 49176 -IyQ= 49177 -dWrEhQ== 49178 -IGVtZXJnZW5jZQ== 49179 -X3BhcmE= 49180 -X0lOQ0xVREU= 49181 -Izo= 49182 -IHJlY29nbml6aW5n 49183 -IGZ1Zw== 49184 -In19LAo= 49185 -IGJ1aWxkZXJz 49186 -IFRlcnJpdG9yeQ== 49187 -IGluaGVyZW50bHk= 49188 -IGRlcml2aW5n 49189 -LmV0aA== 49190 -IERpbm5lcg== 49191 -LnNldE9iamVjdE5hbWU= 49192 -IGNlbGVicmF0ZXM= 49193 -IHF1ZXVlcw== 49194 -IE1hcmtz 49195 -QUxURVI= 49196 -IERhcnQ= 49197 -cG9rZQ== 49198 -X0NIQU5HRUQ= 49199 -IHBhYXI= 49200 -bGllcw== 49201 -LnZvbGxleQ== 49202 -IE1lYW5pbmc= 49203 -IE9GRlNFVA== 49204 -ZW5zaW5n 49205 -IGZyw6Vu 49206 -LmxvY2FsU3RvcmFnZQ== 49207 -IOup 49208 -KHt9KTsK 49209 -ZGVjb2Rlcg== 49210 -IHJvdWxldHRl 49211 -IGRpc21hbnQ= 49212 -SXI= 49213 -IGluc3VyZw== 49214 -ICcnOgo= 49215 -LuKAnQo= 49216 -IGJydW5ldHRl 49217 -LmFzc2V0cw== 49218 -X05FVFdPUks= 49219 -4LiK 49220 -bnlt 49221 -X1NvdXJjZQ== 49222 -XFRlc3Rz 49223 -RXNjYXBl 49224 -Y3J5cHQ= 49225 -LlhNTA== 49226 -IHNvdW5kaW5n 49227 -b3Bjb2Rl 49228 -IGNsYXNzaWZ5 49229 -IGVtYmFycmFzc2Vk 49230 -IExPR0lO 49231 -IHJlc2lkdWU= 49232 -IE5FRUQ= 49233 -LmRlZXBFcXVhbA== 49234 -cGVyYw== 49235 -LWNhbA== 49236 -UmVkaXM= 49237 -VHJh 49238 -KF8p 49239 -YXNrZXRz 49240 -Z3JhZGF0aW9u 49241 -IGVuenltZQ== 49242 -IFN0ZXBoYW5pZQ== 49243 -LkludmFsaWQ= 49244 -J10/Pjwv 49245 -IGRpc3BsYWNlZA== 49246 -IGVsZW1lbnRvcw== 49247 -KGR1cmF0aW9u 49248 -cm93Q291bnQ= 49249 -IEZTdGFy 49250 -bGV0YQ== 49251 -L3BvcHBlcg== 49252 -IHN0YXRv 49253 -IHBlcmZvcm1lcg== 49254 -IGRpc2NpcGxpbmVz 49255 -IEZ1bGx5 49256 -aWN1bGFybHk= 49257 -IGVyc3Rlbg== 49258 -IFBvbHlnb24= 49259 -IGRpc2NpcGxlcw== 49260 -LmlzZGly 49261 -IHRlc3RpZnk= 49262 -X1NS 49263 -cHJpc2luZ2x5 49264 -IEdMaW50 49265 -IHdpcGVk 49266 -IGNhcnZlZA== 49267 -IERpc2g= 49268 -Lmhlcm9rdWFwcA== 49269 -c3RpdGlhbA== 49270 -IE1BVENI 49271 -Y2xhaXI= 49272 -IERheXRvbg== 49273 -LycpCg== 49274 -SURETEU= 49275 -IGluZnJh 49276 -IGxpdmVseQ== 49277 -IGRlcHM= 49278 -IFsuLi5d 49279 -CQkJCQkJCQkJCQkJCQkJCQk= 49280 -IExvbg== 49281 -RXh0cmFz 49282 -VHJhbnNpZW50 49283 -0LLQtdGA 49284 -L21vZHVsZQ== 49285 -IGVuZHVyYW5jZQ== 49286 -X3RleA== 49287 -ICJ+Lw== 49288 -X3lsYWJlbA== 49289 -IG9iZWQ= 49290 -L2dhbWU= 49291 -b3BzeQ== 49292 -IGZpcnN0bmFtZQ== 49293 -LmZvcmNl 49294 -IG1hcnQ= 49295 -XENsaWVudA== 49296 -IGxlZ2l0aW0= 49297 -LmZsYXR0ZW4= 49298 -Iics 49299 -b3NleHVhbA== 49300 -IGpvdXJz 49301 -TUg= 49302 -ZXhwaXJlcw== 49303 -IHN0eWw= 49304 -LmludGVydmFs 49305 -S25vd24= 49306 -IGZvbGxvd2Vy 49307 -IGRhbGxh 49308 -cGlyeQ== 49309 -X3NzbA== 49310 -aXNobGlzdA== 49311 -IFJleQ== 49312 -IHN1cGVybWFya2V0 49313 -T2J2aW91c2x5 49314 -LWVudGVy 49315 -IHByb2JhYmlsaXRpZXM= 49316 -IEhW 49317 -IENpbmVtYQ== 49318 -IGN0eXBlcw== 49319 -IEJDTQ== 49320 -X1RBQw== 49321 -O2E= 49322 -LmJ1dHRvbnM= 49323 -IHJldHJpZXZpbmc= 49324 -aWxhcml0eQ== 49325 -IHVuZGVydGFraW5n 49326 -CXN0YWNr 49327 -IGtlbA== 49328 -IFhlbg== 49329 -KHBoaQ== 49330 -IHRvdWdoZXI= 49331 -IFNlbGxlcg== 49332 -Y2Fwcw== 49333 -IEVtYmVy 49334 -IENoaW4= 49335 -IGxhdWdocw== 49336 -Q29udmVyc2lvbg== 49337 -Lmxpc3RlbmVy 49338 -JkI= 49339 -IHBhcmFkaWdt 49340 -IGp1bmN0aW9u 49341 -JC8sCg== 49342 -W28= 49343 -IENvbnNlcnZhdGl2ZXM= 49344 -z4A= 49345 -bGF0ZXM= 49346 -X0V4Y2VwdGlvbg== 49347 -IG1laWxsZXVy 49348 -IHN0cmFwcw== 49349 -cXVpc2l0ZXM= 49350 -CXNu 49351 -IG1hc3NhY3Jl 49352 -b3R0ZXM= 49353 -X2dyZWVu 49354 -VGl0bGVz 49355 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 49356 -IFJlZ3VsYXRpb25z 49357 -YXJs 49358 -X3Nob3J0Y29kZQ== 49359 -IERyYXdlcg== 49360 -IHBhcm9sZQ== 49361 -IHdpbGRlcm5lc3M= 49362 -aXNzb24= 49363 -IEFGVEVS 49364 -Q3JlZGVudGlhbA== 49365 -QmxvY2tpbmc= 49366 -IEhUQw== 49367 -U2lu 49368 -KGF1dGhvcg== 49369 -IGNvcnRleA== 49370 -Jyl7DQo= 49371 -77yJ77yM 49372 -IGR1bXBlZA== 49373 -IFNodXQ= 49374 -IEtleUV2ZW50 49375 -CVBsYXllcg== 49376 -LmdldFBsYXllcg== 49377 -IGlnbm9yZXM= 49378 -dG9nZ2xlQ2xhc3M= 49379 -IEV4Y2x1c2l2ZQ== 49380 -PigpOw== 49381 -LmdldFA= 49382 -YW55ZQ== 49383 -IG5ldXJvbg== 49384 -aWZvbGQ= 49385 -IEtub3du 49386 -Qml0Y29pbg== 49387 -QW55d2F5 49388 -YXlldHRl 49389 -ICdbJw== 49390 -w6BuaA== 49391 -bWdy 49392 -IGNvcnJlbGF0ZWQ= 49393 -IG5hdXNl 49394 -IG1lbnRhbGl0eQ== 49395 -aGFzTWFueQ== 49396 -IEZH 49397 -YW1waWU= 49398 -SVRV 49399 -RnM= 49400 -LlNw 49401 -X2JldHdlZW4= 49402 -RGVwZW5kZW5jaWVz 49403 -b3Vn 49404 -UGxhY2Vob2xkZXI= 49405 -PXRleHQ= 49406 -IE1hbmFnaW5n 49407 -b2NhbHlwc2U= 49408 -5YyX 49409 -X21hZw== 49410 -Zmxk 49411 -4pE= 49412 -Q0FN 49413 -IEhlbHBlcnM= 49414 -IGRvc3Q= 49415 -L291dA== 49416 -IGFzc2Fzc2luYXRpb24= 49417 -LmdldEltYWdl 49418 -IEtlbm55 49419 -LicpCgo= 49420 -KXsvLw== 49421 -IFJhbmdlcg== 49422 -IGdlaw== 49423 -IHNpbmNlcmU= 49424 -PFZhbHVl 49425 -IERPVA== 49426 -IFZpY3Rvcnk= 49427 -IGxlZ2VuZHM= 49428 -IHByaXNvbnM= 49429 -KGV4cHJlc3Npb24= 49430 -IFJhYmJpdA== 49431 -X3NlbnRlbmNl 49432 -IGJpdGVz 49433 -IG9uRmFpbHVyZQ== 49434 -IOKIiA== 49435 -S2lt 49436 -LmdlbmRlcg== 49437 -IM67 49438 -IFsu 49439 -Il0pOw== 49440 -bGFuZGluZw== 49441 -LWRpZ2l0 49442 -VEVNUA== 49443 -CWVudHJ5 49444 -IHN0cnRvaw== 49445 -IGRlc2NlbmRhbnRz 49446 -dW1ubw== 49447 -IGxlYW5pbmc= 49448 -IHNwZWNpZmljcw== 49449 -cW4= 49450 -IFNwYXJ0 49451 -IHBvcnI= 49452 -RURJQVRFSw== 49453 -IHNlcGVy 49454 -J2F1dA== 49455 -IFNURVA= 49456 -IEJvcmRlckxheW91dA== 49457 -IHJldHJvcw== 49458 -IFNhbHZhZG9y 49459 -IEVOR0lORQ== 49460 -eGRj 49461 -VHdlZXQ= 49462 -dms= 49463 -IOyy 49464 -XTw8 49465 -aGV0aWNz 49466 -Y29kaW5n 49467 -UmVhY2g= 49468 -LnJlcQ== 49469 -Z3VpZGU= 49470 -LnNjb3Bl 49471 -c2hpcnQ= 49472 -cm9nYXRl 49473 -U0VUVElORw== 49474 -IFByb3RlaW4= 49475 -IGVpbmc= 49476 -LkVNUFRZ 49477 -LmRm 49478 -IGNsZWFyZXI= 49479 -IGNyb3Nzb3Zlcg== 49480 -IFRveXM= 49481 -IGNvYXRlZA== 49482 -Lk1vbnRo 49483 -IEF0dGFjaA== 49484 -L3J1bg== 49485 -LnRhYnM= 49486 -IG9nc8Ol 49487 -QnJvd24= 49488 -LkRBVEU= 49489 -IGZvcw== 49490 -5a2X56ym 49491 -V29vZA== 49492 -LXRocmVl 49493 -aGVyaXRlZA== 49494 -IHJvcA== 49495 -KGFj 49496 -IGVtYm9kaW1lbnQ= 49497 -IEtlbm5ldGg= 49498 -IGNhbm5vbg== 49499 -IGJpZGRpbmc= 49500 -PElFbnVtZXJhYmxl 49501 -CXNldFRpbWVvdXQ= 49502 -X2RpZ2l0 49503 -IGVsaW1pbmFy 49504 -KG5l 49505 -YnVkZ2V0 49506 -Q1NJ 49507 -IOyVhA== 49508 -IEFTUA== 49509 -R3JvdXBJZA== 49510 -X0NPVU5URVI= 49511 -Y29uc3VsdA== 49512 -IGlmcmFtZQ== 49513 -bGVnZW4= 49514 -X0RFQ0xBUkU= 49515 -U2hhcnBlcg== 49516 -IEZyaWVuZGx5 49517 -dWxldA== 49518 -LWNvbW1hbmQ= 49519 -INCg 49520 -Y3ljbGVz 49521 -IFdhc3Rl 49522 -IHRhcHBlZA== 49523 -CUJ1ZmZlcg== 49524 -4oCUaW4= 49525 -IAogIAo= 49526 -IElkZWFs 49527 -IENhbmR5 49528 -X1N5bnRheA== 49529 -w6p0 49530 -7J2M 49531 -YWJvdmU= 49532 -IE5hemlz 49533 -IGZzdA== 49534 -c2Vpbg== 49535 -IGt1bm5lbg== 49536 -d2lr 49537 -IFNhdmluZw== 49538 -LmV4dGVuc2lvbnM= 49539 -IERlc2VyaWFsaXpl 49540 -b3VyZw== 49541 -LmF0dHJpYg== 49542 -77yaCgo= 49543 -IFdpbnM= 49544 -LmVxbA== 49545 -Unlhbg== 49546 -X2Fjaw== 49547 -T1VSQ0VT 49548 -IG9ucw== 49549 -Z3Jlc2U= 49550 -YWZpYQ== 49551 -TW9kZXJu 49552 -IGFkaGVyZQ== 49553 -IGJpb3M= 49554 -KGFjYw== 49555 -a2Jk 49556 -VGhyb3du 49557 -qeuLiOuLpA== 49558 -CUh0dHA= 49559 -CXhtbA== 49560 -RW5kRGF0ZQ== 49561 -KHBhcnNlZA== 49562 -LmdldGVudg== 49563 -cmVnaXN0cg== 49564 -bmVsbA== 49565 -aW9uYXJpbw== 49566 -LmlubmVyV2lkdGg= 49567 -cnRs 49568 -UFY= 49569 -X3BpZWNl 49570 -IERlcG9zaXQ= 49571 -eWVycw== 49572 -IE5TTnVtYmVy 49573 -IGdpbnQ= 49574 -ZW5zZW1ibGU= 49575 -IG5ld2NvbQ== 49576 -IFZpZXRuYW1lc2U= 49577 -X2hw 49578 -IGFjY3VzaW5n 49579 -IHF1aXM= 49580 -IGludmVzdGlnYXRvcg== 49581 -ZXNzZW50aWFs 49582 -IENY 49583 -LmZvck5hbWU= 49584 -ZGVmcw== 49585 -IGFuYWx5c2U= 49586 -X2FuaW1hdGlvbg== 49587 -IHRoYQ== 49588 -dGFib29sYQ== 49589 -IFRIQw== 49590 -w61jdWxv 49591 -IGdsb3dpbmc= 49592 -IGhvbm9ycw== 49593 -YnN0cmFjdA== 49594 -a3A= 49595 -SVRFUw== 49596 -ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 49597 -I2dldA== 49598 -L0Rlc2t0b3A= 49599 -CWdsbQ== 49600 -IHppbmM= 49601 -w6F0aWNh 49602 -IDw8Cg== 49603 -Vk1M 49604 -IFVubGltaXRlZA== 49605 -dnJl 49606 -LWJlZA== 49607 -X25vbmNl 49608 -IEdJ 49609 -dHJhdmVs 49610 -IGlzS2luZE9mQ2xhc3M= 49611 -IGFub255bWl0eQ== 49612 -RmlyZXN0b3Jl 49613 -IGVtYWlsZWQ= 49614 -X0ZMQVNI 49615 -IGbDpXI= 49616 -4piF4piF 49617 -IDpd 49618 -SHVt 49619 -LnJlc2VydmU= 49620 -w7xt 49621 -IGtvc3Rlbmxvc2U= 49622 -IFNDUA== 49623 -dXRhbg== 49624 -IEdvcmU= 49625 -IGNoYXRz 49626 -Lz4NCg== 49627 -LmdldFJlc291cmNlcw== 49628 -IGx1bXA= 49629 -X2NvbnN0cw== 49630 -KGV4dA== 49631 -CWRpcg== 49632 -4p0= 49633 -IHBhZGRpbmdUb3A= 49634 -IG9ic2Vzc2lvbg== 49635 -IGJhbm5pbmc= 49636 -IEFwcE1vZHVsZQ== 49637 -IHBhcnRpc2Fu 49638 -IGNhdGFsb2d1ZQ== 49639 -IG1pbm9ycw== 49640 -IHBpdGNoZXM= 49641 -d2VlcA== 49642 -IHVuZGVydGFrZQ== 49643 -IHRoZW1lZA== 49644 -YXVkaXQ= 49645 -LnNjcm9sbFRvcA== 49646 -IHJlcg== 49647 -IHN5bXB0b20= 49648 -IG9wZW5pbmdz 49649 -LmJsb2Nrcw== 49650 -b3Blbmlk 49651 -IGFzc2g= 49652 -LXNhdmU= 49653 -IFBpZw== 49654 -IHJlZ2Fpbg== 49655 -IGluaWNpYWw= 49656 -L2Zhdmljb24= 49657 -CWV4cA== 49658 -IHNwaWNlcw== 49659 -aXNrYQ== 49660 -Y2xhaW1z 49661 -bWFr 49662 -ZGVmaW5pdGlvbnM= 49663 -IGNvcnJlc3BvbmRlbnQ= 49664 -IENhbm5hYmlz 49665 -X18sCg== 49666 -IEx1Y2t5 49667 -IEdhdXNzaWFu 49668 -IE5lYXJseQ== 49669 -Q0FE 49670 -J11dCg== 49671 -IGFkZXF1YXRlbHk= 49672 -IFRJVExF 49673 -Y29uc3RpdHV0aW9uYWw= 49674 -LW1t 49675 -X292ZXJyaWRl 49676 -IGJsYXM= 49677 -LnJlYWR5U3RhdGU= 49678 -IHJlbWluaXM= 49679 -IHJlaW5mb3JjZWQ= 49680 -IENvbGxhYm9y 49681 -IGRlY29yYXRpbmc= 49682 -IGJhY2hlbG9y 49683 -RVJSVVBU 49684 -IHVwcmlnaHQ= 49685 -aXBhdGlvbg== 49686 -IE5vYmxl 49687 -IHZhbHVlRm9yS2V5 49688 -IHNldExvYWRpbmc= 49689 -Lklnbm9yZQ== 49690 -5YE= 49691 -R2xvYmFscw== 49692 -IE1lbnQ= 49693 -QVNTRVM= 49694 -IGxpbWJz 49695 -IEhVRA== 49696 -aW5jaQ== 49697 -Lml2 49698 -IFFNb2RlbEluZGV4 49699 -RnVzZQ== 49700 -IHBlZGFs 49701 -X0ZSRVE= 49702 -KHZlcmJvc2U= 49703 -IGxvbmdpdHVk 49704 -IENoYXJ0ZXI= 49705 -6re4 49706 -IGJ1bmRsZXM= 49707 -Lmlnbm9yZQ== 49708 -dW1ibw== 49709 -RU1B 49710 -Li4uLi4uLg== 49711 -c3g= 49712 -LkNhcmQ= 49713 -IGhldXRl 49714 -IHN0ZWVy 49715 -anVtbGFo 49716 -IHtf 49717 -X0NoZWNrZWQ= 49718 -IGZheA== 49719 -IEd1c3Q= 49720 -aXRjaGVucw== 49721 -ICkpCgo= 49722 -IHJlbWFya2FibHk= 49723 -L1hNTA== 49724 -LXJlbW92ZQ== 49725 -X2J0 49726 -IGluY3Vi 49727 -LnBhY2thZ2U= 49728 -LmN1cnJlbnRUaHJlYWQ= 49729 -IEhpZ2hsYW5kZXI= 49730 -LnNpZGU= 49731 -c3BsYXNo 49732 -IGljaQ== 49733 -PUQ= 49734 -IHB1Y2s= 49735 -IGJhbGxvdHM= 49736 -IGh1Z2VseQ== 49737 -Y29lZmY= 49738 -IHBEYXRh 49739 -LkNPTFVNTg== 49740 -IEhlYWxpbmc= 49741 -IG9yZGlu 49742 -ISks 49743 -ICcnLA0K 49744 -KG1k 49745 -IFNhc2s= 49746 -PHN0cm9uZw== 49747 -IHN1cnZpdm9y 49748 -LnNlcmllcw== 49749 -IGNhZmZlaW5l 49750 -IGAo 49751 -LlRSQUlMSU5H 49752 -X0lucHV0 49753 -KCJe 49754 -emQ= 49755 -Jik7Cg== 49756 -IFBpbmc= 49757 -IHZvdWNoZXI= 49758 -LnJhdGluZw== 49759 -LXNoaXJ0cw== 49760 -IFJldHJpZXZlcw== 49761 -LmFsaWJhYmE= 49762 -T3JhY2xl 49763 -X01PVg== 49764 -T2xkRGF0YQ== 49765 -IC8qDQo= 49766 -IGdib29sZWFu 49767 -ID0+DQo= 49768 -IHLDoQ== 49769 -IGJsdW50 49770 -IEltYWdlSWNvbg== 49771 -aWZpaw== 49772 -UlRD 49773 -IGZpYmVycw== 49774 -IHRvaWxl 49775 -LnNlbnQ= 49776 -IFB5UXQ= 49777 -JGFwcA== 49778 -IG1lZGlv 49779 -IGdyYW50aW5n 49780 -IHRzbGludA== 49781 -IE3Dtg== 49782 -KGZpZ3NpemU= 49783 -IGh1cnJpY2FuZQ== 49784 -IGxpZmVz 49785 -IMOE 49786 -cm9jZXNzaW5n 49787 -X3N0YW5kYXJk 49788 -LW9wdGlvbg== 49789 -JykpKQ== 49790 -IHZhY2FudA== 49791 -5bel 49792 -IEhvbGxvdw== 49793 -aGFuZGxlQ2hhbmdl 49794 -IGRpdmlkZXI= 49795 -IEVuZ2luZWVycw== 49796 -IHN2ZW5z 49797 -IGNvbXBsaWFudA== 49798 -dGFuZ2dhbA== 49799 -IENyZWRpdHM= 49800 -IEVtaXJhdGVz 49801 -UnVsZUNvbnRleHQ= 49802 -IHJlYWxpemF0aW9u 49803 -IGRpc3RyYWN0ZWQ= 49804 -XSs9 49805 -IGF1Z21lbnQ= 49806 -IER3 49807 -b3Rw 49808 -b3JyZW50 49809 -RWRpdGFy 49810 -LnN0b2Nr 49811 -U3R1ZHk= 49812 -cGVjdGlvbnM= 49813 -IEdhbWVNYW5hZ2Vy 49814 -PWN1dA== 49815 -IGZsb2Nr 49816 -IFJvbWFucw== 49817 -dGhlbQ== 49818 -LWhvcA== 49819 -IHNjcmVlbnNob3Rz 49820 -IC8qIQo= 49821 -IGNvbnZlcnNpb25z 49822 -IG5vcm1hbGl6YXRpb24= 49823 -KGNvbmZpZ3VyYXRpb24= 49824 -IGFlcm9z 49825 -X3NlY3VyaXR5 49826 -IScK 49827 -Qm9udXM= 49828 -IERSSVZFUg== 49829 -CURhdGU= 49830 -dGll 49831 -IFd5b21pbmc= 49832 -U3RhbmQ= 49833 -aXRyZQ== 49834 -IHNob3BwZXJz 49835 -IGRpc2FkdmFudGFnZQ== 49836 -IGxpa2luZw== 49837 -56yR 49838 -IHVuZGVyc3RhbmRhYmxl 49839 -U0VF 49840 -IGhveQ== 49841 -IG5pbmV0ZQ== 49842 -IGNvbmZlcg== 49843 -IG5vd3JhcA== 49844 -IFZlcm4= 49845 -LA0KDQo= 49846 -aW1lc3RlcA== 49847 -TGF5b3V0TWFuYWdlcg== 49848 -4Lc= 49849 -CXdhaXQ= 49850 -UExFVEVE 49851 -SmFwYW4= 49852 -IGluZHVjZQ== 49853 -IOWv 49854 -0L7Qt9Cy 49855 -X0VORFBPSU5U 49856 -Lmhvcml6b250YWw= 49857 -IGFjY2VsZXJhdGVk 49858 -cmltb24= 49859 -SVZFUw== 49860 -VHJhbnNhY3Rpb25z 49861 -TGVhbg== 49862 -IFNPVVI= 49863 -d2hldGhlcg== 49864 -eWc= 49865 -IG9pZA== 49866 -IEVudGl0eU1hbmFnZXI= 49867 -T1VOVFJZ 49868 -IGZpbGE= 49869 -T0xVTU5T 49870 -SU5VRQ== 49871 -IEFuY2hvcg== 49872 -VFJBTg== 49873 -d29v 49874 -YmxvY2txdW90ZQ== 49875 -IE51cnNl 49876 -IENhcnA= 49877 -IHJlZGVlbQ== 49878 -LnRyeQ== 49879 -IEpQ 49880 -IHRpbWVzdGFtcHM= 49881 -ID8+Ij48 49882 -IFJFTU9WRQ== 49883 -IFN0YXJidWNrcw== 49884 -UmVhbGx5 49885 -IGZsb29kZWQ= 49886 -LkNhbGxiYWNr 49887 -RHJvcERvd24= 49888 -aXBybw== 49889 -IHRlbmRlZA== 49890 -bHRl 49891 -IHByb3BvcnRpb25z 49892 -LXRl 49893 -IFJlbmE= 49894 -bGljYXRl 49895 -Zm9yY2Vz 49896 -LmV4dHJh 49897 -LmF1dGhlbnRpY2F0ZQ== 49898 -0LLQvtC0 49899 -obA= 49900 -IGZvckNvbnRyb2xFdmVudHM= 49901 -IHNlbmhh 49902 -IGtlaW4= 49903 -IG1pbmlzdA== 49904 -IFByZWZlcmVuY2U= 49905 -IFRlbGVncmFwaA== 49906 -0YPQvw== 49907 -c3RycG9z 49908 -IGlsbG5lc3Nlcw== 49909 -IHBpZ3M= 49910 -IGdldEludGVudA== 49911 -U29s 49912 -IMKh 49913 -KGNwdQ== 49914 -W3Byb3A= 49915 -c2NyZWVucw== 49916 -Jyk7Pz4= 49917 -IEFjdHM= 49918 -IHN0cmR1cA== 49919 -IGF2ZXJhZ2Vz 49920 -YW5hbA== 49921 -IENhc3VhbA== 49922 -R3JvdXBCb3g= 49923 -IEhhbmRib29r 49924 -L2NvbW1lbnRz 49925 -IG51bWJlcmVk 49926 -IGJyb2FkY2FzdGluZw== 49927 -55uR 49928 -Lm5hdGl2ZUVsZW1lbnQ= 49929 -Lm11 49930 -IHVwZGF0ZWRBdA== 49931 -IERvZXNu 49932 -LkFD 49933 -LmNvbGw= 49934 -IHJlY29yZGVy 49935 -X3NoYQ== 49936 -Qmc= 49937 -Ymls 49938 -IGJvbHRz 49939 -IOes 49940 -IGltcG9zaW5n 49941 -IEluZm9ybWF0aW9uZW4= 49942 -X2ZsYXNoZGF0YQ== 49943 -ZWNvbm9taWM= 49944 -UmVtYXJr 49945 -dWNhcw== 49946 -IE9mZmljZXJz 49947 -IFRFUg== 49948 -V2Fsaw== 49949 -IG1lcmNhZG8= 49950 -X2dlbmVyYXRl 49951 -SFk= 49952 -Q2FsbGluZw== 49953 -c25hcA== 49954 -c2NyaXB0SWQ= 49955 -Lm9wZXJhdGlvbg== 49956 -IEZsYW1l 49957 -bGluZXNz 49958 -IHJlbnRlZA== 49959 -X3RvZ2dsZQ== 49960 -LWNoYW5naW5n 49961 -IFRZ 49962 -J3V0aWw= 49963 -RUVQ 49964 -IGdyYXBocWw= 49965 -IFVuaQ== 49966 -IGltcHVsc2U= 49967 -LkJhc2lj 49968 -IGVuZXJnaWVz 49969 -TUFSWQ== 49970 -IE1hcmNlbA== 49971 -IG1vcnRhbA== 49972 -IGZyZXM= 49973 -bWVucw== 49974 -bW90aW9u 49975 -IHNhbXBsZWQ= 49976 -4oCcVGhhdA== 49977 -aWRheQ== 49978 -cXVpcG1lbnQ= 49979 -Z2V0SW50 49980 -IEFic29sdXRl 49981 -LCci 49982 -dW5lZA== 49983 -LnNoYXJl 49984 -IH0pKA== 49985 -bW1t 49986 -IFJpc2luZw== 49987 -5Lu7 49988 -IHVuZW1wbG95ZWQ= 49989 -eGZh 49990 -LmZvbGxvdw== 49991 -CQkJCSAgICAgIA== 49992 -c2x0 49993 -LlBob25l 49994 -IGtuaXZlcw== 49995 -IGV2ZQ== 49996 -b25DbGljaw== 49997 -XSkpDQo= 49998 -IFdpdG5lc3M= 49999 -CU5T 50000 -IEVPUw== 50001 -IFN0ZWZhbg== 50002 -IFByaWVzdA== 50003 -4oCUd2hpY2g= 50004 -R2V0U3RyaW5n 50005 -LkJ5 50006 -IHVwc3RhaXJz 50007 -IGRldHJpbWVudA== 50008 -YnJva2Vu 50009 -ZW1icm8= 50010 -IG5pY290aW5l 50011 -aWxpb24= 50012 -IGFzdG9uaXNoaW5n 50013 -X2FmZg== 50014 -IExlc3Nvbg== 50015 -IGFjY2lkZW50YWw= 50016 -b2Rvcg== 50017 -IGRlY2ly 50018 -IG5ld05hbWU= 50019 -Ky4= 50020 -55u4 50021 -aWdzbGlzdA== 50022 -IEdpdGh1Yg== 50023 -IHN1Y2Nlc3NpdmU= 50024 -cmFjaWFs 50025 -IGVudmlyb24= 50026 -6aqM6K+B 50027 -IHJlZGlyZWN0ZWQ= 50028 -VE9UQUw= 50029 -IGdyYWJiaW5n 50030 -IExhbmNl 50031 -IGZvcmZl 50032 -X0NC 50033 -5b6u 50034 -RWxhcHNlZA== 50035 -X3dheQ== 50036 -KERpYWxvZ0ludGVyZmFjZQ== 50037 -X21lYXN1cmU= 50038 -eGJi 50039 -RG9n 50040 -RGVwYXJ0 50041 -LXNyYw== 50042 -cmVzb2x2ZXI= 50043 -d2l0aHN0YW5kaW5n 50044 -X3NoZWxs 50045 -IExhc3ROYW1l 50046 -IEF2aWF0aW9u 50047 -IGJlZ2lubmVy 50048 -KCIlLg== 50049 -KHRvb2w= 50050 -INC90L7Qsg== 50051 -OmluaXQ= 50052 -KEFQSQ== 50053 -IE1vcnJpc29u 50054 -dnRDb2xvcg== 50055 -IHN0YXBsZQ== 50056 -L0lORk8= 50057 -IHN1cGVybmF0dXJhbA== 50058 -IHN0ZWFr 50059 -dGltZWxpbmU= 50060 -enpsZQ== 50061 -ImAKCg== 50062 -U2Vjb25kYXJ5 50063 -IE5lcGFs 50064 -LlN0cmluZ1V0aWxz 50065 -IGFkYW0= 50066 -ICguLi4= 50067 -IHN1YnN0aXR1dGlvbg== 50068 -IGJvYXJkaW5n 50069 -IEtleXdvcmQ= 50070 -IEFzc2F1bHQ= 50071 -ZGJjVGVtcGxhdGU= 50072 -IG9yZGVySWQ= 50073 -KGVuZ2luZQ== 50074 -LmFzc2VydFRoYXQ= 50075 -IFZlbnVz 50076 -IGhvbWljaWRl 50077 -IEF2YWw= 50078 -IGd1dHRlcg== 50079 -IFN1cHBvcnRlZA== 50080 -L3BhcnQ= 50081 -IGFjY2xhaW1lZA== 50082 -SGlzdG9y 50083 -IG1lc2Vz 50084 -w7xiZXI= 50085 -IFJlbmV3 50086 -IGdyYXM= 50087 -IEVr 50088 -IGluZmlsZQ== 50089 -aW5keQ== 50090 -Lm11c2lj 50091 -LlNjcm9sbA== 50092 -IEFnZXM= 50093 -IE5hcnV0bw== 50094 -IEdhdGhlcg== 50095 -IGNvbmZpcm1pbmc= 50096 -PSgi 50097 -IHBpdGNoZWQ= 50098 -b2xleQ== 50099 -RnJhbmNl 50100 -Kyci 50101 -JHRvdGFs 50102 -IG9uZGU= 50103 -IGRpdGNo 50104 -X3NpZ21h 50105 -IGNvbnRpbnVpdHk= 50106 -cmV3YXJk 50107 -LWxvYWQ= 50108 -IHByb2Nlc28= 50109 -TG9ja2Vk 50110 -c3Rhdw== 50111 -IHNwaW5hbA== 50112 -bGF6eQ== 50113 -IT09 50114 -amVzdA== 50115 -IGR1bg== 50116 -IFJvZGdlcnM= 50117 -CWdyaWQ= 50118 -IGxvZ29z 50119 -IEJlbmdhbA== 50120 -LnN1cGVy 50121 -UHJvdmlkZXM= 50122 -IG51dHJpZW50 50123 -LlRpbWVzdGFtcA== 50124 -SVpBVElPTg== 50125 -5YaM 50126 -IGZhdHM= 50127 -IFh4eA== 50128 -Y3RpY2E= 50129 -VGFyZ2V0cw== 50130 -IGNvbnRvdXJz 50131 -IHJlb3JkZXJlZA== 50132 -OkFycmF5 50133 -IHRvbGVyYXRl 50134 -Vmly 50135 -IHRlcnJpYmx5 50136 -IGJyaWNrcw== 50137 -KCZf 50138 -aGI= 50139 -UG9ydGFs 50140 -IEJyZWFk 50141 -LndoaWNo 50142 -wq10 50143 -YXNJbnN0YW5jZU9m 50144 -IGpvYmplY3Q= 50145 -CWxlbmd0aA== 50146 -X01U 50147 -OyI+DQo= 50148 -X0VYSVNU 50149 -IG1hdGVybmFs 50150 -UkVM 50151 -IOqyveyasA== 50152 -aGVl 50153 -IGxheW91dHM= 50154 -IExhcA== 50155 -YWlzeQ== 50156 -IHN0dW1ibGVk 50157 -IFVJRw== 50158 -IFNjbw== 50159 -IGltcGFpcmVk 50160 -UkVTU0VE 50161 -IGFidXNlcw== 50162 -VkY= 50163 -QVJC 50164 -Lk5BTUU= 50165 -cmNo 50166 -cHJpbWly 50167 -X2NvbXBsZXRlZA== 50168 -IHBlbm55 50169 -Q2hyb21l 50170 -KGJlZ2lu 50171 -ZXJuZW4= 50172 -LWNoZWNrYm94 50173 -UGxhaW5PbGREYXRh 50174 -IExQQw== 50175 -cmFkZQ== 50176 -c3Bpcg== 50177 -IGNvbmNlaXZlZA== 50178 -VGlwcw== 50179 -IElvVA== 50180 -IEdhbg== 50181 -6IGU 50182 -IGJpYXNlcw== 50183 -IGNvbnN1bHRhbnRz 50184 -cGxlZA== 50185 -X2h0 50186 -YXNzb2NpYXRlZA== 50187 -XSwKCg== 50188 -IGRlbGlnaHRmdWw= 50189 -INGC0LXQug== 50190 -SGVsdmV0aWNh 50191 -KGxvYWQ= 50192 -LWV4cGFuZA== 50193 -X1dJREdFVA== 50194 -dG9h 50195 -IEFrdA== 50196 -IG9tbg== 50197 -IGNsYXVzZXM= 50198 -SW50ZWw= 50199 -Ki99Cg== 50200 -X3JlZ2lzdHJhdGlvbg== 50201 -IG9sZFZhbHVl 50202 -IHJlc3RvcmluZw== 50203 -IHVucmVhbA== 50204 -T1ZFUg== 50205 -CQoJCgkK 50206 -QVRT 50207 -X3Byb2Jl 50208 -IGRpdmlzb3I= 50209 -LnVwZGF0ZUR5bmFtaWM= 50210 -5bmz 50211 -UHJvZHVjZXM= 50212 -c3RhbXA= 50213 -Lmpib3Nz 50214 -CXRhc2s= 50215 -ISg6 50216 -IHBzeWNoaWM= 50217 -QGNsYXNz 50218 -TWFydGlu 50219 -IFBhc3NlZA== 50220 -Y2xhcmF0aW9ucw== 50221 -aGVs 50222 -0LDRhw== 50223 -CWNvcHk= 50224 -LWJpbg== 50225 -emFu 50226 -aWdyYW0= 50227 -4Ka+4KY= 50228 -KHNpZw== 50229 -IENhdmFs 50230 -XyMj 50231 -ICU9 50232 -b3V0bGluZWQ= 50233 -IEFjaWQ= 50234 -IHVucHJlZGljdGFibGU= 50235 -LWRhc2hib2FyZA== 50236 -SGV4U3RyaW5n 50237 -K2M= 50238 -LlB1YmxpYw== 50239 -4bqp 50240 -IGNvbnZleW9y 50241 -IEVC 50242 -IHNlbGVjdHM= 50243 -IGtub2NraW5n 50244 -IENlYw== 50245 -SUJVVEVT 50246 -b3dhxIc= 50247 -Z2F0c2J5 50248 -KnY= 50249 -ZW50cm9weQ== 50250 -IGRpc3BhdGNoZWQ= 50251 -IGNhbWVs 50252 -IFNhdHVybg== 50253 -IG92ZXJ3ZWlnaHQ= 50254 -KHBob25l 50255 -cGFyYWJsZQ== 50256 -JUI= 50257 -X3ZlY3RvcnM= 50258 -IGJyZXdpbmc= 50259 -IFRr 50260 -IERvd25sb2Fkcw== 50261 -IFNhdmVk 50262 -LlByaWNl 50263 -IGN1cnZlZA== 50264 -IFBhcmVudGhvb2Q= 50265 -6LY= 50266 -LnBubA== 50267 -cGxldGVseQ== 50268 -LkRheQ== 50269 -IGFkdmVydGlzZXJz 50270 -IGVqZWM= 50271 -IHByemVk 50272 -668= 50273 -ISc7Cg== 50274 -IEt1c2g= 50275 -IFRBQg== 50276 -IHF1ZXN0cw== 50277 -IGNvaW5jaWRlbmNl 50278 -dW1taWVz 50279 -IEthc2htaXI= 50280 -IEV0aGljcw== 50281 -X2dyb3d0aA== 50282 -IGFrdGl2 50283 -IGdyb3VwaW5n 50284 -5aKe 50285 -X3RydXRo 50286 -5ZCs 50287 -dG9kb3M= 50288 -aXNldA== 50289 -VGV4Q29vcmQ= 50290 -w6R0dA== 50291 -IFp1cg== 50292 -cm95cw== 50293 -X01BR0lD 50294 -IGJyZXdlcnk= 50295 -KFN0YXRl 50296 -IFNNQUxM 50297 -IFBsYW50cw== 50298 -aXRiYXJ0 50299 -ZWFjaGVy 50300 -IEFkZWxhaWRl 50301 -THU= 50302 -IGZpY2s= 50303 -dW5kbGVz 50304 -X2xvYWRlZA== 50305 -0LjQtQ== 50306 -UG9sbA== 50307 -cml0aWM= 50308 -RUxZ 50309 -ICsn 50310 -IFByb2Zlc3Npb24= 50311 -IHN0YW1wcw== 50312 -IFNldw== 50313 -c2Nyb2xsVmlldw== 50314 -IGNvbW11bmlzdA== 50315 -L3Byb2JsZW1z 50316 -fQ0KDQoNCg0K 50317 -LG8= 50318 -IHVkcA== 50319 -IG9iZXNl 50320 -YXBwcm92ZQ== 50321 -YW5jZWxsYXRpb24= 50322 -X0dhbWU= 50323 -IEhhc2h0YWJsZQ== 50324 -YWRhcHRpdmVTdHlsZXM= 50325 -IHBvc3Nlc3Nlcw== 50326 -Lm1hdGNoZXI= 50327 -ZnVuY3Rpb25hbA== 50328 -TXJz 50329 -CXNhdmU= 50330 -IERiVHlwZQ== 50331 -IGtlbg== 50332 -Z2V0Q29udGV4dA== 50333 -IG1hbnM= 50334 -KHJlbA== 50335 -IEJyb3RoZXJob29k 50336 -KWAK 50337 -6Kej 50338 -LkluZm9ybWF0aW9u 50339 -T3V0T2ZSYW5nZUV4Y2VwdGlvbg== 50340 -IFNlaw== 50341 -Q2Fz 50342 -IGJsb2dnZXJz 50343 -RWl0aGVy 50344 -KCIiIg== 50345 -IHBpbmNo 50346 -IGNvYXJzZQ== 50347 -KXA= 50348 -IFB1bHNl 50349 -IGxlYXJudA== 50350 -IGRlbnRpc3Q= 50351 -IG9uY2hhbmdl 50352 -IGRpcmVjdGl2ZXM= 50353 -KGFjdGlvbnM= 50354 -bnlkZXI= 50355 -IFNoaXI= 50356 -VHJhaXQ= 50357 -X2RlcA== 50358 -IFBFVA== 50359 -IFJFUA== 50360 -LkFwcFNldHRpbmdz 50361 -Y3VhZG9y 50362 -aWRlbmF2 50363 -IGVudmk= 50364 -IHNsYW1tZWQ= 50365 -IFNob290 50366 -IGRhdGVGb3JtYXQ= 50367 -LmpvZGE= 50368 -dmV5cw== 50369 -ICkuCgo= 50370 -IGNhcmVn 50371 -IFBhcmFsbGVs 50372 -X3RyYW5zbGF0aW9u 50373 -LmZ1bmN0aW9ucw== 50374 -Lm9icw== 50375 -UnVudGltZUV4Y2VwdGlvbg== 50376 -W109 50377 -b3ZlcnZpZXc= 50378 -IFNjaGw= 50379 -IG5vaXN5 50380 -IE9uUHJvcGVydHlDaGFuZ2Vk 50381 -U2VuZGluZw== 50382 -IHVuZmFtaWxpYXI= 50383 -VXBvbg== 50384 -IFByaW50cw== 50385 -LnR5cA== 50386 -IGZsZWVpbmc= 50387 -CW1vdmU= 50388 -KFVu 50389 -IHFy 50390 -15w= 50391 -X2JldGE= 50392 -IHNraWVz 50393 -CW1l 50394 -V05E 50395 -IHN0aWNrZXJz 50396 -Ymxhcw== 50397 -IGluc2VydHM= 50398 -IHZlcnNlcw== 50399 -IERldw== 50400 -IHRhbmdpYmxl 50401 -IGhlY2hv 50402 -UE9M 50403 -IHRlYXJkb3du 50404 -b21uaWE= 50405 -SUJF 50406 -LmNvdmVy 50407 -X3N0cmF0ZWd5 50408 -Xi0= 50409 -c2V0UG9zaXRpb24= 50410 -dWFsZQ== 50411 -U2lnbmVk 50412 -IGlmYWNl 50413 -YXNlbGluZQ== 50414 -LnNldFRpbWU= 50415 -IE1pbmVyYWw= 50416 -IEZpZ2h0aW5n 50417 -c2tpbnM= 50418 -IGRpc2NyaW1pbg== 50419 -IGRhbnNr 50420 -IFByaW5jZXRvbg== 50421 -YWNpc3Q= 50422 -ICgpKTsK 50423 -dHJhY2tz 50424 -aW1vbmlhbA== 50425 -YWRlY2ltYWw= 50426 -RVBST00= 50427 -dWdnbGU= 50428 -Lk5vdGlmaWNhdGlvbg== 50429 -JG1haWw= 50430 -Y2FudGlkYWQ= 50431 -IEp1bmc= 50432 -IHNlZWtlcnM= 50433 -IHBsYXVzaWJsZQ== 50434 -dGllcg== 50435 -0LXQtg== 50436 -IHJhcHBlcg== 50437 -IE1hbmE= 50438 -IEh0dHBTdGF0dXNDb2Rl 50439 -IGJ1cm50 50440 -bG9zZXM= 50441 -IEZvdG8= 50442 -IEpzb25PYmplY3Q= 50443 -SW5zdGFncmFt 50444 -IHN5c2NhbGw= 50445 -IHJlYWxpdGllcw== 50446 -IE1BVExBQg== 50447 -Ol57Cg== 50448 -VEVSTQ== 50449 -IENiZA== 50450 -IFBhcmFncmFwaA== 50451 -IHRyYXbDqXM= 50452 -IGNvbnN0cnVjdGluZw== 50453 -IHN3YWw= 50454 -IHBpZ2U= 50455 -TExMTA== 50456 -LWV4aXN0aW5n 50457 -R2V0cw== 50458 -IG1lbHRlZA== 50459 -IG1pdGlnYXRl 50460 -SGVu 50461 -IGht 50462 -aW1hcw== 50463 -IEFv 50464 -IFBlcmV6 50465 -IERBTA== 50466 -IOuLpA== 50467 -IGRpdmlz 50468 -U3Rvcnlib2FyZFNlZ3Vl 50469 -IE1vZGlmeQ== 50470 -IMOcYmVy 50471 -X09WRVJSSURF 50472 -LnBlbQ== 50473 -dW50b3M= 50474 -IGVzcGHDsQ== 50475 -IHs/ 50476 -IFBBWQ== 50477 -X2lwdg== 50478 -IEZ1cnk= 50479 -X18uX18= 50480 -ZWxvdw== 50481 -LWNlbnRlcmVk 50482 -Y2hlY2tz 50483 -X1JlZw== 50484 -LUphdmFkb2M= 50485 -CWxvYWQ= 50486 -IExpa2V3aXNl 50487 -2KfZhQ== 50488 -VU5F 50489 -LnNlbQ== 50490 -eGNi 50491 -IENhdmU= 50492 -X3NsZWVw 50493 -IHNpbGVudGx5 50494 -IEV4dHJlbWU= 50495 -LlRvVXBwZXI= 50496 -CUNIRUNL 50497 -IGN1ZQ== 50498 -IFFCeXRlQXJyYXk= 50499 -IGNvcnJ1cHRlZA== 50500 -IETDqQ== 50501 -IGltcGVk 50502 -R2V0TmFtZQ== 50503 -IGluYWNjdXJhdGU= 50504 -IHNvYmVy 50505 -0LXQtQ== 50506 -IGJhcmNvZGU= 50507 -LS0pewo= 50508 -aW5raQ== 50509 -IMOpcA== 50510 -IGRyaQ== 50511 -IEFMVA== 50512 -Pj4+Pj4+Pj4= 50513 -b250YQ== 50514 -W0w= 50515 -IGludGVyZXM= 50516 -dmVydGluZw== 50517 -IGRpYWdub3N0aWNz 50518 -cGRldg== 50519 -6Kk= 50520 -IEludGVncmF0ZWQ= 50521 -KS4n 50522 -X2dj 50523 -JHRleHQ= 50524 -LmdhbWVz 50525 -IFRlcnJh 50526 -J1Jl 50527 -LnRyYW5zZmVy 50528 -X0ZJRk8= 50529 -Z2V0TW9kZWw= 50530 -IGJsYW5k 50531 -IENvbGVtYW4= 50532 -IHByaW1lcw== 50533 -IOaI 50534 -IGNyb3NzZXM= 50535 -bms= 50536 -R0lORw== 50537 -ICde 50538 -IEJsb2I= 50539 -IGludGVyY291cnNl 50540 -IEJsdmQ= 50541 -IHdlaWdocw== 50542 -X3JlZ3VsYXI= 50543 -IFBlcnRo 50544 -IHNlcGFyYXRpbmc= 50545 -IGJpbGxlZA== 50546 -LnRhYkNvbnRyb2w= 50547 -IHB1cHBldA== 50548 -IHV0aWxpemF0aW9u 50549 -IOKWoA== 50550 -IHN1Y2Nlcw== 50551 -IGxhbXBz 50552 -X3Byb2o= 50553 -RXJpYw== 50554 -IHJlbm92YXRpb24= 50555 -IEZhbWlsaWVz 50556 -IEJpdHM= 50557 -cGFydGlhbHM= 50558 -LU1lbg== 50559 -c29sdXRpb24= 50560 -IGR3YXJm 50561 -LklOVEVHRVI= 50562 -IExPQ0s= 50563 -LmN0 50564 -IGV4Y2VycHQ= 50565 -IFBpeA== 50566 -IEZpcnN0TmFtZQ== 50567 -QU5URUQ= 50568 -IEFkbWly 50569 -LWhlbHA= 50570 -UHJpb3I= 50571 -IEFsaWdu 50572 -LklOU1RBTkNF 50573 -TGluZUVkaXQ= 50574 -KCcvOg== 50575 -IGluZXQ= 50576 -b2R1cw== 50577 -LnBrbA== 50578 -IEtZ 50579 -dXBlcnQ= 50580 -IG5lcnZlcw== 50581 -X2dyYWRpZW50 50582 -fScsJw== 50583 -X3VucmVm 50584 -IHNhdHVyYXRlZA== 50585 -IENvbm5lY3RlZA== 50586 -IEZO 50587 -RVhJVA== 50588 -IHRlbGVwb3J0 50589 -IGF2YWl0 50590 -UGFnZVJvdXRl 50591 -IGRpdm9yY2Vk 50592 -KGxhbmc= 50593 -ZnN0 50594 -IFR5cg== 50595 -IG1lc3Nlbmdlcg== 50596 -aWZzdHJlYW0= 50597 -WFM= 50598 -IEJhbmtpbmc= 50599 -IGluZmVjdGlvdXM= 50600 -IE1vbnM= 50601 -X0xPT1A= 50602 -IHp1csO8Y2s= 50603 -IG9idGVuZXI= 50604 -L3JlcG9z 50605 -VmVs 50606 -YWNybw== 50607 -IHVzZXJSZXBvc2l0b3J5 50608 -c3R5bGVUeXBl 50609 -IFNSQw== 50610 -Vk1MSU5VWA== 50611 -cmVjdXJzaXZl 50612 -L2Jhcg== 50613 -X2NoaXA= 50614 -b21pbmF0ZWQ= 50615 -IE5pdA== 50616 -4oCUdG8= 50617 -IEJ1ZGRo 50618 -0L7QvNC10YA= 50619 -IE1BRw== 50620 -IENIRQ== 50621 -X2Rlbg== 50622 -LnJhaXNlcw== 50623 -X2RlZ3JlZQ== 50624 -IHB1bXBraW4= 50625 -X3RlbXBsYXRlcw== 50626 -X01FRElB 50627 -IFRpbWVsaW5l 50628 -IGJvdHM= 50629 -T2JqZWN0VHlwZQ== 50630 -IGJ1eXM= 50631 -LnBvc3Rz 50632 -Q0FM 50633 -d2FpdGluZw== 50634 -IERhbmllbHM= 50635 -IGRhYmVp 50636 -IFNpZ21h 50637 -aWxvcg== 50638 -aWdlbA== 50639 -LFc= 50640 -QURT 50641 -KHBhbmVs 50642 -7LK0 50643 -aXRhdGluZw== 50644 -LnBhbGV0dGU= 50645 -IG1vc3F1aXRv 50646 -IHRlZ28= 50647 -KHBhcnNlSW50 50648 -IGRlc3B1w6lz 50649 -cHJvbWlzZQ== 50650 -IHdpag== 50651 -dHlwZXNjcmlwdA== 50652 -IFR2 50653 -X0lERU5USUZJRVI= 50654 -KS4KCgo= 50655 -X2ZsYXQ= 50656 -aXRzdQ== 50657 -VVNS 50658 -ZXhwZXJpZW5jZQ== 50659 -LWZpdA== 50660 -cGhpbng= 50661 -X3RocmVzaA== 50662 -IGlkZWFsbHk= 50663 -IEZyZWVtYW4= 50664 -LERC 50665 -X3J3 50666 -562J 50667 -VWI= 50668 -X3N0YXRpc3RpY3M= 50669 -PSIiPjw= 50670 -IGNob3Jl 50671 -IHlvcms= 50672 -aW5zdGFsbGVk 50673 -QWRkaXRpb25hbGx5 50674 -IHBzdG10 50675 -eWxrbw== 50676 -OjoK 50677 -Rm9yZXN0 50678 -IGhlYWRzZXQ= 50679 -IGdhbGxvbg== 50680 -0YDQtdC8 50681 -IHdpdGhkcmF3bg== 50682 -IENhbmRpZGF0ZQ== 50683 -IG1lbHRpbmc= 50684 -IGZyZWV6ZXI= 50685 -IGhs 50686 -X0hFTFA= 50687 -bWltZQ== 50688 -KC8q 50689 -IHRoaXJzdA== 50690 -JHJldHVybg== 50691 -bWVtYmVyb2Y= 50692 -0LXQsQ== 50693 -IEh0dHBTZXJ2bGV0UmVxdWVzdA== 50694 -KG9i 50695 -X1Jlc3VsdA== 50696 -IGFzc2VydGVk 50697 -IGZ1bGZpbGxpbmc= 50698 -IHN0cmV0Y2hlcw== 50699 -cGFyYXRlZA== 50700 -LWZ1bmRlZA== 50701 -IOWb 50702 -aW5nbGVz 50703 -X2Nh 50704 -LmNvbmRpdGlvbg== 50705 -IERpc3BsYXlz 50706 -IG9yYW5n 50707 -IENSRQ== 50708 -IGdsQmluZA== 50709 -IFNlbGVjdG9y 50710 -L3R5cGU= 50711 -IEFsZXhh 50712 -Y2hlZHVsZXM= 50713 -IFBlbmluc3VsYQ== 50714 -IHBhcml0eQ== 50715 -CWRlc3Q= 50716 -IERvb3Jz 50717 -DQoJDQo= 50718 -X2RpbWVuc2lvbg== 50719 -IGFsb2Fk 50720 -LlN0b3JlZFByb2NlZHVyZQ== 50721 -KHBhcmVu 50722 -IEJ1cmtl 50723 -JyldCg== 50724 -LWVuZ2luZQ== 50725 -IHF1aXI= 50726 -IEh5YnJpZA== 50727 -IERvZQ== 50728 -IG91dGxpbmVz 50729 -IFRyZW5kcw== 50730 -X05W 50731 -cGVyaW1lbnRz 50732 -IEhpbg== 50733 -Pycs 50734 -CVRleHQ= 50735 -RlVM 50736 -IHNtZWxscw== 50737 -IHNsaWNr 50738 -IG1pc2VyYWJsZQ== 50739 -IEFycmF5QWRhcHRlcg== 50740 -IHBhcmFtU3RyaW5n 50741 -SG9t 50742 -X2xpdGVyYWxz 50743 -dXN1YXJpb3M= 50744 -IHByb21wdGluZw== 50745 -X2xhenk= 50746 -IEFjdGl2YXRpb24= 50747 -X29j 50748 -V2Vhaw== 50749 -IGFuZWNk 50750 -IFVDTEE= 50751 -PXJl 50752 -aXNzZW1lbnQ= 50753 -IEVzY29ydHM= 50754 -RXhjZWxsZW50 50755 -IFBhdXNl 50756 -IHJlcG9zaXRvcmllcw== 50757 -VE9S 50758 -YXJpYXRl 50759 -X2lzbw== 50760 -dXBkYXRlcw== 50761 -aGFsYg== 50762 -dWRpYW50ZQ== 50763 -66Gd 50764 -IG5haXZl 50765 -IFBlZw== 50766 -IExvdW5nZQ== 50767 -QVJHSU4= 50768 -KGJpbg== 50769 -T25DbGlja0xpc3RlbmVy 50770 -IEZBSUxFRA== 50771 -IGxpdGU= 50772 -IGR6aWU= 50773 -IExpdGVyYWw= 50774 -aXZvcg== 50775 -ZmNudGw= 50776 -IGVhdHM= 50777 -IHFlZA== 50778 -VW5sb2Nr 50779 -cmlkaW5n 50780 -dW5kYWk= 50781 -PU0= 50782 -QVRURVI= 50783 -Q29uZmlndXJlQXdhaXQ= 50784 -aWNpYXM= 50785 -dXN0b21lZA== 50786 -IHN1Y2Nlc3Npb24= 50787 -ZW5kVGltZQ== 50788 -IEp1cGl0ZXI= 50789 -IGp1ZGdpbmc= 50790 -ZHJhdGlvbg== 50791 -X2RvY3M= 50792 -Lm1v 50793 -IGVkdWNhdG9ycw== 50794 -IFZpbmU= 50795 -Q29uZA== 50796 -W291dA== 50797 -cWI= 50798 -XFZhbGlkYXRvcg== 50799 -IG1lYW5pbmdz 50800 -IHByZXNlbnRseQ== 50801 -IGRpdmlkaW5n 50802 -b3R0ZW5oYW0= 50803 -YXNjdWxhcg== 50804 -IHRyYWlsZXJz 50805 -IENMT1NF 50806 -0LDQvNC4 50807 -4oCZYWk= 50808 -IEdhaW4= 50809 -d29y 50810 -IHBsYW5uZXI= 50811 -IGRpc3RyaWJ1dGluZw== 50812 -dmF0 50813 -bW9udGhz 50814 -eGxhYmVs 50815 -SEY= 50816 -VmlvbA== 50817 -LkJBU0VMSU5F 50818 -0LXRgtGB0Y8= 50819 -IFJvdGF0ZQ== 50820 -IHR4bg== 50821 -OmJvbGQ= 50822 -IGJsb3Nz 50823 -Rm9yZ2VyeQ== 50824 -KGVtYmVk 50825 -IGpha28= 50826 -c3ByaW50Zg== 50827 -dGhlaXI= 50828 -IGV4aGliaXRz 50829 -LXN0YXRpYw== 50830 -aGVjeQ== 50831 -Z2V0QWN0aXZlU2hlZXQ= 50832 -LmNsaWVudHM= 50833 -44GN 50834 -X2hpZGU= 50835 -W3dvcmQ= 50836 -Q2I= 50837 -YWRkSXRlbQ== 50838 -YXhl 50839 -X3JhZGlv 50840 -YWxpb24= 50841 -bW9kaWZpZXI= 50842 -IHNhdHVyYXRpb24= 50843 -IGRlbm9t 50844 -X3BpeGVscw== 50845 -bWVzcw== 50846 -KGZs 50847 -YXRpZg== 50848 -IHNlY3M= 50849 -IHByb3N0aXR1dGlvbg== 50850 -IGdyYW5kY2hpbGRyZW4= 50851 -IHBhcmFkaXNl 50852 -IEZlbGQ= 50853 -X0JJTkFSWQ== 50854 -aXRvdXM= 50855 -4LmE 50856 -IGZsYXNoaW5n 50857 -LXNpZGVk 50858 -IGNvbnRyYWRpY3Rpb24= 50859 -LyoKCg== 50860 -eWxhYmVs 50861 -IFRldA== 50862 -IGFkbWlyZQ== 50863 -cmVzbw== 50864 -IGxldHo= 50865 -IFNFQVJDSA== 50866 -c2xvdHM= 50867 -IFJld2FyZHM= 50868 -IEhvZw== 50869 -IE5TRGF0YQ== 50870 -c3Rhc2g= 50871 -RmFsbA== 50872 -IEFtZXI= 50873 -TGluZWFyTGF5b3V0 50874 -L3Bob3Rvcw== 50875 -IGZlYXRoZXI= 50876 -IHwNCg== 50877 -RG93bmxvYWRz 50878 -LlN0YXJ0c1dpdGg= 50879 -IC8vIw== 50880 -aW5lVHJhbnNmb3Jt 50881 -IGFmZmlk 50882 -VnRibA== 50883 -IFJvZ3Vl 50884 -c2NyaWJlZA== 50885 -IGZhdWM= 50886 -IE1vbnJvZQ== 50887 -IGRlY2xhcmVz 50888 -bW9kZXJu 50889 -cmVvbg== 50890 -YXliZQ== 50891 -UEFTUw== 50892 -ZmVycw== 50893 -X01VTFRJ 50894 -IE1hdGhlbWF0aWNz 50895 -IHN1ZGFo 50896 -X0FUVEFDSA== 50897 -IG51bWJlcldpdGg= 50898 -IFNvbG9tb24= 50899 -amlu 50900 -b2dyYWZpYQ== 50901 -w7Zs 50902 -X2Rlc2lnbg== 50903 -Y3VsYXRlZA== 50904 -IEx1bmE= 50905 -aWVzeg== 50906 -ID0+Jw== 50907 -IHJldmVsYXRpb25z 50908 -QWxvbmc= 50909 -KGVk 50910 -IEZpbGVuYW1l 50911 -IHlsYWJlbA== 50912 -U2VjdXJl 50913 -IGJ1c2Nh 50914 -YWdub3Npcw== 50915 -X1JFQ0U= 50916 -IG92ZXJsYXBwaW5n 50917 -RXh0ZW50 50918 -IGFudGljaXBhdGlvbg== 50919 -Q2hlY2tz 50920 -IEFMU08= 50921 -b3Jj 50922 -aWxpbmd1YWw= 50923 -aXRhdGlvbmFs 50924 -IGFkdmFuY2VtZW50 50925 -b3Vybw== 50926 -IFByZWRpY2F0ZQ== 50927 -5b6X 50928 -ZXJpYQ== 50929 -IFBpZXJjZQ== 50930 -b3Jpbw== 50931 -IG1lcml0cw== 50932 -IHBlYW51dA== 50933 -LlBhY2thZ2U= 50934 -IENvbmR1Y3Q= 50935 -X1NFTlNPUg== 50936 -IGJvaWxpbmc= 50937 -IGludHJh 50938 -IElHTg== 50939 -IEZ1cg== 50940 -LlJlZnJlc2g= 50941 -IFJlYWNo 50942 -X2RlY29kZXI= 50943 -LkV4cA== 50944 -INGC0LDQug== 50945 -cGlsbA== 50946 -LFE= 50947 -IEdyaWxs 50948 -IHBvcHBpbmc= 50949 -LkFn 50950 -IHByb3llY3Rv 50951 -IG1pbGVhZ2U= 50952 -IGVjb2xvZ2ljYWw= 50953 -XV0pOwo= 50954 -IMKt 50955 -c3VicGxvdA== 50956 -YWNhZA== 50957 -IFRyeWluZw== 50958 -cmVjaXBlcw== 50959 -JGNyaXRlcmlh 50960 -IFBlcnNpYW4= 50961 -LWJvdW5k 50962 -TUFTSw== 50963 -IEdlc3R1cmU= 50964 -IGtr 50965 -IFBWQw== 50966 -IHByb2hpYml0aW9u 50967 -IGNvbWFuZG8= 50968 -IExPT0s= 50969 -U2hvcHBpbmc= 50970 -IGRpc3RvcnRpb24= 50971 -PEJvb2xlYW4= 50972 -LkdldExlbmd0aA== 50973 -dW1wdA== 50974 -XFByb2R1Y3Q= 50975 -ZWxsZXJ5 50976 -IGZpcmV3YWxs 50977 -Zm9ybWF0dGVk 50978 -LnJlZGlz 50979 -IGVzYQ== 50980 -IFJob2Rl 50981 -U29t 50982 -Lm5vbg== 50983 -ICcpLg== 50984 -IGdldFZpZXc= 50985 -4bqhbg== 50986 -cHJ1cw== 50987 -TWF0dGhldw== 50988 -IHNpYQ== 50989 -IEZvcnM= 50990 -R1BV 50991 -aWVudHJhcw== 50992 -X0lOU1Q= 50993 -IG9sYXJhaw== 50994 -IGltcG9ydGluZw== 50995 -VENQ 50996 -LyIpOwo= 50997 -ZWl0aGVy 50998 -IGZyZXNobHk= 50999 -Y2FzY2FkZQ== 51000 -KGNoYXJhY3Rlcg== 51001 -IEplZXA= 51002 -b3RpY3M= 51003 -X1VUSUw= 51004 -Llh0cmFQcmludGluZw== 51005 -LmZpcnN0Q2hpbGQ= 51006 -IEV4Y2VsbA== 51007 -IGR2ZA== 51008 -IHRhbGxlcg== 51009 -IHJhcw== 51010 -eXBhc3M= 51011 -IGFzc2lnbnM= 51012 -IGdyaWV2 51013 -LW1vcmU= 51014 -SkQ= 51015 -IEJ1cm5z 51016 -Jz4NCg== 51017 -LkRlcGVuZGVuY3k= 51018 -LlF1ZXJ5U3RyaW5n 51019 -Lk93bmVy 51020 -IGV4cGlyeQ== 51021 -VGh1 51022 -KFZlYw== 51023 -IGhhemFyZG91cw== 51024 -IHJwbQ== 51025 -QVBPTg== 51026 -IGFkZFRhcmdldA== 51027 -c3ZpbGxl 51028 -cE5ldA== 51029 -IEltZw== 51030 -IFRJTUVS 51031 -LkFuaW1hdGlvbg== 51032 -IGJlaw== 51033 -IGFzc29ydA== 51034 -IGxlYmlo 51035 -IGJvZHlQYXJzZXI= 51036 -IHZpYnJhdGluZw== 51037 -SURM 51038 -IGJ1dHRlcmtuaWZl 51039 -aW50ZXJz 51040 -IHBlcnN1YWRl 51041 -IExHQlRR 51042 -6Is= 51043 -LnNvZnQ= 51044 -IGJlYW1z 51045 -X3N1cg== 51046 -LkRlZg== 51047 -IGxhYnM= 51048 -CXBsdA== 51049 -IHNraW5z 51050 -IHRyYW5zZmVycmluZw== 51051 -IGltYWdpbmFyeQ== 51052 -X0VuZA== 51053 -O2JhY2tncm91bmQ= 51054 -IGxhcHM= 51055 -X0NPTU1FTlQ= 51056 -KFNETA== 51057 -b25kcw== 51058 -LlJlY29yZA== 51059 -IEltcGxlbWVudHM= 51060 -X3RpY2tz 51061 -KCkpKQoK 51062 -IGFyb3Nl 51063 -XT8= 51064 -IE1w 51065 -IElDb21tYW5k 51066 -IHNjdWxwdHVyZQ== 51067 -IGNvbnRyYWN0ZWQ= 51068 -PEhUTUw= 51069 -IGNhbGVuZA== 51070 -YXR5 51071 -L1N1Yg== 51072 -IGt2aW5u 51073 -X0lHTk9SRQ== 51074 -IFNoYW5l 51075 -TUxT 51076 -IHN0aW11bGF0ZQ== 51077 -UGFydGl0aW9u 51078 -IG11bg== 51079 -w7Nt 51080 -ZXJhbGE= 51081 -LWFjY291bnQ= 51082 -LkJpbmFyeQ== 51083 -Y8Op 51084 -IHNlaXpl 51085 -Y29ubmVjdGlvbnM= 51086 -IAogICAgICAgIAo= 51087 -IERpYWdub3N0aWM= 51088 -VklTSUJMRQ== 51089 -IFJ1bnM= 51090 -IGltcHJlc3Npb25z 51091 -c3VpdGU= 51092 -b2JsZQ== 51093 -fi0= 51094 -YWt1a2Fu 51095 -PFBlcnNvbg== 51096 -IE5vcw== 51097 -IEd1aQ== 51098 -LndhaXRGb3I= 51099 -UkVTRVQ= 51100 -IHBvc3Rwb24= 51101 -RGlzY292ZXI= 51102 -YXJyaXNvbg== 51103 -c2hhdw== 51104 -Ymxvb2Q= 51105 -QUpPUg== 51106 -5pu05paw 51107 -IE11c2U= 51108 -5pS2 51109 -IHJldGFpbmluZw== 51110 -b3R0ZQ== 51111 -IG1vc3F1ZQ== 51112 -IFNuZQ== 51113 -IHN0YW5kYXJkaXplZA== 51114 -IG1haW5sYW5k 51115 -X3RocmVl 51116 -dW5nZW9ucw== 51117 -Z2V0RG9jdHJpbmU= 51118 -IHdoYWxl 51119 -IGFnZw== 51120 -IFBvcnNjaGU= 51121 -bm93bGVk 51122 -bGF0ZW50 51123 -IFJlbGF0aW9u 51124 -IC8vJw== 51125 -IHNodXR0aW5n 51126 -IFJlbWl4 51127 -X2Nvdg== 51128 -IHNhaWxpbmc= 51129 -IHZvd2Vk 51130 -IHBvdHM= 51131 -b3V0dQ== 51132 -IGhhaXJ5 51133 -Y2FzdHM= 51134 -UmVsb2Fk 51135 -IHJlY29ubmVjdA== 51136 -dGVyYQ== 51137 -LmNoaWxkTm9kZXM= 51138 -IFJhY2s= 51139 -IGN1cnJlbnRJbmRleA== 51140 -IGFsbGVu 51141 -IOeUqOaItw== 51142 -IEN1YnM= 51143 -W1g= 51144 -X1NFUQ== 51145 -X1JFTU9WRQ== 51146 -LmdldEFjdGlvbg== 51147 -KC9e 51148 -ZXJyYXI= 51149 -IGV0aGVy 51150 -Y3VydmU= 51151 -IHNsYXA= 51152 -IHVvbQ== 51153 -T3RoZXJz 51154 -IGVuZ3I= 51155 -RGlzcG9zaXRpb24= 51156 -IHN0YWdlZA== 51157 -RXll 51158 -IEF1eA== 51159 -YXV0aGVudGljYXRl 51160 -ICQ/ 51161 -IEFuZHJlYXM= 51162 -IHNldHc= 51163 -LkFydA== 51164 -IGZvcmVjYXN0cw== 51165 -IGF1bnQ= 51166 -LW1pZGRsZQ== 51167 -IG1pc2Q= 51168 -ZGVzaw== 51169 -IGVzY29ydGU= 51170 -IENhc2E= 51171 -cm9waWNhbA== 51172 -IGV4ZW1wbGU= 51173 -cGxhbmV0 51174 -KFVJTlQ= 51175 -IHdoaXA= 51176 -IFBDQg== 51177 -Y2xpZGVhbg== 51178 -PSJc 51179 -IG94aWRl 51180 -IHN1Y2NlZWRz 51181 -ZGVyaXZlZA== 51182 -IEVjb25vbQ== 51183 -X2Nvb3JkaW5hdGVz 51184 -aXJhcw== 51185 -RHJhZnQ= 51186 -IHZpc3VhbGl6ZQ== 51187 -QnJpYW4= 51188 -X0FTU1VNRQ== 51189 -IE9iamVjdElk 51190 -IHRyYWluZXJz 51191 -X0ZPUkNF 51192 -IGNvbnNvbGVz 51193 -LXByb2Nlc3M= 51194 -bGljaGVy 51195 -IFNpbW1vbnM= 51196 -VGFraW5n 51197 -IENsYWltcw== 51198 -IGRpZmbDqXJlbnQ= 51199 -QWN0aXZpdHlSZXN1bHQ= 51200 -IHNucw== 51201 -6YCJ5os= 51202 -IENydXM= 51203 -IGxsYW0= 51204 -cmFi 51205 -IEpvYW4= 51206 -QUFB 51207 -CWZpbHRlcg== 51208 -aXNob3Bz 51209 -Z2V0dGluZw== 51210 -4LU= 51211 -IHF1YW50bw== 51212 -UGFzdA== 51213 -b3ZpY2g= 51214 -IGluanVzdGljZQ== 51215 -IEZMT0FU 51216 -IGFscmlnaHQ= 51217 -XERC 51218 -KEdhbWVPYmplY3Q= 51219 -dWlzaA== 51220 -KGJvdA== 51221 -IGdhbGxvbnM= 51222 -IFLDqQ== 51223 -IFNhaWQ= 51224 -IFNURE1FVEhPRENBTExUWVBF 51225 -YWlzaW5n 51226 -X3Byb2Nlc3Nvcg== 51227 -ZWxsaWRvcw== 51228 -dGVyZGFt 51229 -IEJlYW0= 51230 -VGV4dEFyZWE= 51231 -IHJldG9ybm8= 51232 -Lk1ha2U= 51233 -ICQoIjw= 51234 -IGxvY2tkb3du 51235 -IHJlbWVkaWVz 51236 -IHZlZWw= 51237 -eGVl 51238 -ZG9jdHlwZQ== 51239 -Rmls 51240 -IEV4cGFuZA== 51241 -IGVtcGxveXM= 51242 -IHNlc3Npb25TdG9yYWdl 51243 -UGhw 51244 -UHVibGlzaA== 51245 -IHJldGFs 51246 -ZmFicw== 51247 -eW5hbWljcw== 51248 -IHRvc3NlZA== 51249 -IG51bWJlck9mUm93c0luU2VjdGlvbg== 51250 -eHBhdGg= 51251 -XG1vZHVsZXM= 51252 -IGRpc2FzdHI= 51253 -IE1VTFQ= 51254 -Lk1lc2g= 51255 -LXN0YWdl 51256 -IHNkZg== 51257 -aXR1bmc= 51258 -dWdlcw== 51259 -ID8+Ij48Lw== 51260 -X2luZGV4ZXM= 51261 -IHZhbHVhdGlvbg== 51262 -IGxpZmVsb25n 51263 -IGV4cGVkaXRpb24= 51264 -KFlpaQ== 51265 -IHBhaW5z 51266 -IFBSSQ== 51267 -IE1peGVk 51268 -IENoYW5naW5n 51269 -R2VybWFueQ== 51270 -Y29tbXVuaWNhdGlvbg== 51271 -Lm9yZ2Fu 51272 -IE1hcmF0aG9u 51273 -Z2V0UGF0aA== 51274 -IEFjY3VyYWN5 51275 -IEdsb2JhbHM= 51276 -Jyl9fTwv 51277 -IE9XTkVS 51278 -4oCm4oCd 51279 -IHN0YWJiZWQ= 51280 -IHNjaGl6b3BocmVu 51281 -IEZu 51282 -IENPUkU= 51283 -IERhdGFSb3c= 51284 -IExURA== 51285 -IG15dGhz 51286 -IGZhbW91c2x5 51287 -fCwK 51288 -IFNlb3Vs 51289 -U2ly 51290 -IEJlcms= 51291 -UmVnRXhw 51292 -LmdldFJvdw== 51293 -IERlY29kZQ== 51294 -Uk4= 51295 -IG1hbmc= 51296 -IGVtcGxveWluZw== 51297 -X25vbWJyZQ== 51298 -PFRhc2s= 51299 -IEd1eXM= 51300 -IEFydGlrZWw= 51301 -QmVycnk= 51302 -enVyZQ== 51303 -IHZhbGV1cg== 51304 -aGl0cw== 51305 -IGx1Y3JhdGl2ZQ== 51306 -IGluZm9ybWF0 51307 -Q2xpbnRvbg== 51308 -IHRlcw== 51309 -IENlcnRpZmljYXRpb24= 51310 -X3dz 51311 -IG9mZmVuY2Vz 51312 -ZWJyYQ== 51313 -IEF4aW9z 51314 -cmVzdGFydA== 51315 -TE4= 51316 -LkVuY29kZQ== 51317 -bWl1bQ== 51318 -IEZlYXR1cmVk 51319 -0YjQuNCx0LrQsA== 51320 -IERlcHQ= 51321 -OyYj 51322 -IE15ZXJz 51323 -CXRyYW5zZm9ybQ== 51324 -VGV4YXM= 51325 -16g= 51326 -IFlvcmtzaGlyZQ== 51327 -bG5hbWU= 51328 -QnJl 51329 -44GT44Gu 51330 -IHNjZW5lcnk= 51331 -IGbDvGg= 51332 -CQkJCSAgICAgICA= 51333 -IERvb20= 51334 -IEFETUlO 51335 -KGVz 51336 -INC80LDRgdGB0LjQsg== 51337 -X2FzY2lp 51338 -L0RhdGE= 51339 -bGVzaG9vdGluZw== 51340 -QmFu 51341 -IG1lbW9pcg== 51342 -INmG 51343 -IEF1c3M= 51344 -KXBhcmVu 51345 -IGd1aWRpbmc= 51346 -IGJheg== 51347 -w7h5 51348 -QURN 51349 -IGRtYQ== 51350 -LlF1ZXVl 51351 -IFN1cHBsaWVz 51352 -IE1jRA== 51353 -IEFnZW50cw== 51354 -X2Ji 51355 -c2xhc2g= 51356 -IGhhc2hlcw== 51357 -IGNyYW5r 51358 -IFJhZw== 51359 -IGF1dG9ub215 51360 -w610dWxv 51361 -IHJlY3Vyc2lvbg== 51362 -IENyYXp5 51363 -X3RyYWNrZXI= 51364 -IE1i 51365 -X3BoeQ== 51366 -Zm9vYmFy 51367 -CXNwZWVk 51368 -IGNhbXBvcw== 51369 -IG1vdWxk 51370 -IGNoYXJpdGllcw== 51371 -SEVJR0hU 51372 -IGVhdXRv 51373 -X3NvbHV0aW9u 51374 -IERH 51375 -bWFydmlu 51376 -WWVzdGVyZGF5 51377 -IEJlY29tZQ== 51378 -PGxs 51379 -b3Jpcw== 51380 -W25leHQ= 51381 -IGluY3VtYmVudA== 51382 -IER1cA== 51383 -CW92ZXJyaWRl 51384 -5a6J 51385 -CWNmZw== 51386 -IHPDtg== 51387 -IGRlc2U= 51388 -LWRp 51389 -IG9udHZhbmdzdA== 51390 -IGRlY2lzaXZl 51391 -5Lu3 51392 -X2tlZXA= 51393 -KERhdGFiYXNl 51394 -Xy8= 51395 -IENMTA== 51396 -LW1ldGhvZA== 51397 -CVBvaW50 51398 -IEJ5dGVCdWZmZXI= 51399 -IHRyYWNlZA== 51400 -YWRkVG8= 51401 -7IS47JqU 51402 -YW55YWs= 51403 -IGVtcHJlc2Fz 51404 -KHJlcG9zaXRvcnk= 51405 -LmNyZWF0ZVN0YXRlbWVudA== 51406 -IGVsYQ== 51407 -Rm9yZ2VyeVRva2Vu 51408 -IGlzZW1wdHk= 51409 -YXNpbg== 51410 -IExvb2t1cA== 51411 -0LXQvdCw 51412 -IHZpb2xhdGVz 51413 -IFNtYXJ0eQ== 51414 -IHphaw== 51415 -KCQu 51416 -U0hPVw== 51417 -INCi 51418 -YXJ1cw== 51419 -KFRFU1Q= 51420 -cGFja2Vk 51421 -IGhpc3Rvcmlh 51422 -IGNhbmNlcnM= 51423 -IEtyZW1saW4= 51424 -UmVkdWNl 51425 -L2hvdw== 51426 -IMSQ 51427 -VElUTEU= 51428 -LmxvY2FsUG9zaXRpb24= 51429 -bGlhYmxl 51430 -IOesrA== 51431 -IGZyYW5jYWlz 51432 -CWhhc2g= 51433 -IGluaWNpbw== 51434 -IENyYXNo 51435 -IHsu 51436 -IGNsb2Nrcw== 51437 -ZHVjdG9yeQ== 51438 -IFB2 51439 -6528 51440 -IGRvaXM= 51441 -XC0= 51442 -IGphYXI= 51443 -IE1heWE= 51444 -bW96aWxsYQ== 51445 -CXJlc291cmNl 51446 -ISEK 51447 -YXlzY2FsZQ== 51448 -ICctJyw= 51449 -5Y+W5raI 51450 -IHN0YWxl 51451 -Q29ybmVy 51452 -w6hsZQ== 51453 -aXRpdmVz 51454 -emFz 51455 -aWNvcm4= 51456 -LkV4cHJlc3Npb24= 51457 -w7N0 51458 -QXBwbGljYXRpb25z 51459 -UmVzdHI= 51460 -X0luZGV4 51461 -jbDsnbTthLA= 51462 -IEpGcmFtZQ== 51463 -c2l4 51464 -X0lNRw== 51465 -6JeP 51466 -IE51bWVyaWM= 51467 -IHdpcms= 51468 -X1NVTQ== 51469 -PERhdGVUaW1l 51470 -IHB5bGludA== 51471 -IGxhbWVudA== 51472 -IFBvc2U= 51473 -X2VudHJvcHk= 51474 -IGVuY291cmFnZW1lbnQ= 51475 -IGxhaW4= 51476 -5Yib5bu6 51477 -LWZy 51478 -IGNvcnJlY3Rpb25z 51479 -cGhhcw== 51480 -dXVy 51481 -YXRlZ29yaWFz 51482 -IGNhdGFseXN0 51483 -LmFsdA== 51484 -IEZlcm5hbmRv 51485 -LkRhdGFHcmlkVmlld0NlbGxTdHlsZQ== 51486 -IGhlcmJhbA== 51487 -IFJH 51488 -U1RFUA== 51489 -SUZu 51490 -IFRvbmc= 51491 -xb5l 51492 -IElOQ0xVREU= 51493 -IGhj 51494 -dHJhY2tlcg== 51495 -CVN0cmluZ0J1aWxkZXI= 51496 -IERlc3Rpbnk= 51497 -IHNvcGhvbW9yZQ== 51498 -IERlZA== 51499 -IFBBUkE= 51500 -aXpvbnRhbGx5 51501 -LWNoYW5nZQ== 51502 -ZW5kaWQ= 51503 -6YCJ5oup 51504 -aWprZQ== 51505 -IEF0aGxldGlj 51506 -YmFp 51507 -Z2V0UG9zaXRpb24= 51508 -Lm5hbWVzcGFjZQ== 51509 -6K6i5Y2V 51510 -UkFDVA== 51511 -IHJlbGlldmVk 51512 -IHBvdXJpbmc= 51513 -IGl5 51514 -cm92ZQ== 51515 -IGFkb2xlc2NlbnRz 51516 -IGF3ZQ== 51517 -cmVhcw== 51518 -QW50aUZvcmdlcnlUb2tlbg== 51519 -cm93bmluZw== 51520 -IFVuY2xl 51521 -LkNvbm4= 51522 -IE1lZGlhVHlwZQ== 51523 -Lm9yYWNsZQ== 51524 -SU5URVJOQUw= 51525 -LGFuZA== 51526 -IGZhdXg= 51527 -aXBtYXA= 51528 -JG1vZGVs 51529 -IEdlb2Zm 51530 -X0FYSVM= 51531 -KCgpKQo= 51532 -IG5lZ2xlY3RlZA== 51533 -IHF1YXJ0ZXJseQ== 51534 -IGRpZXNlbg== 51535 -IGRyYWdvbnM= 51536 -TmlnaHQ= 51537 -L1dlYg== 51538 -PFZlYw== 51539 -CSAgICAgICAgICAgICAgICAgICAgICAg 51540 -IE9icw== 51541 -YmRk 51542 -IGhlaXI= 51543 -LWFuZ3VsYXI= 51544 -TWVudVN0cmlw 51545 -ICciPic= 51546 -a2luc29u 51547 -INC60L7Quw== 51548 -b2duaXRpdmU= 51549 -X2xp 51550 -IGltbWluZW50 51551 -IGFmZmluaXR5 51552 -LnNpZ25hbA== 51553 -IG5vdGNo 51554 -IFN0ZWVsZXJz 51555 -bWF4bGVuZ3Ro 51556 -S0s= 51557 -IEV1Z2VuZQ== 51558 -X1BXTQ== 51559 -cm9p 51560 -IOKXjw== 51561 -IEhhbWJ1cmc= 51562 -Lk11c3Q= 51563 -IGF4ZQ== 51564 -ZW5lZg== 51565 -IGFtYml0aW9ucw== 51566 -IFNwZWNpZXM= 51567 -IFN0cmVzcw== 51568 -IGF3aGlsZQ== 51569 -INCx0YPQtA== 51570 -IHdpdGhzdGFuZA== 51571 -IERlY29kZXI= 51572 -X2ludmVudG9yeQ== 51573 -IHsNDQo= 51574 -IHRndA== 51575 -IHJhaWxyb2Fk 51576 -V0FTSElOR1RPTg== 51577 -IG5lZ290aWF0ZWQ= 51578 -TlNU 51579 -LXBob25l 51580 -LFU= 51581 -IGV4ZXJjaXNpbmc= 51582 -4bul 51583 -X1BJWEVM 51584 -YXZvcnM= 51585 -aXRlcmF0ZWQ= 51586 -IHZhbXBpcmU= 51587 -YWRhbA== 51588 -SW5ncmVzZQ== 51589 -IHVuZw== 51590 -amVjdGl2ZQ== 51591 -LmNlbGxz 51592 -IG5hbm8= 51593 -IG1hcmtkb3du 51594 -X1JVTEU= 51595 -KGV2ZW50cw== 51596 -IGx1Z2dhZ2U= 51597 -TUVTU0FHRQ== 51598 -aWdrZWl0 51599 -JGNvdW50 51600 -QXR0cmlidXRlTmFtZQ== 51601 -SUdJTkFM 51602 -X0VudA== 51603 -IEJG 51604 -IENPTU1FTlQ= 51605 -X2luaQ== 51606 -IEV1cm9wZWFucw== 51607 -IEJlbGxl 51608 -5ZG9 51609 -KVsn 51610 -5bqU 51611 -IFVzZWZ1bA== 51612 -LnJlZmVyZW5jZQ== 51613 -KCkiLA== 51614 -X2dyYWRl 51615 -IEthdw== 51616 -IHNlbnRlbmNpbmc= 51617 -IHNvY2lhbGlzbQ== 51618 -bW9uc3Rlcg== 51619 -X0xBWUVS 51620 -IGRlZXBlc3Q= 51621 -d2s= 51622 -IE5vaXNl 51623 -IyMjCgo= 51624 -IHByw6lj 51625 -b3RsZQ== 51626 -0YLQtQ== 51627 -YXVm 51628 -aWJhbA== 51629 -IGNvbnF1ZXI= 51630 -PkVtYWls 51631 -IGFtYnVsYW5jZQ== 51632 -T0FE 51633 -ICgiJQ== 51634 -IEZJ 51635 -LmZpeHR1cmU= 51636 -IHRlcnNl 51637 -ICAgIAkJCQk= 51638 -IHNhbmN0dWFyeQ== 51639 -dWdp 51640 -IENvbXBhcmF0b3I= 51641 -RGVmaW5pdGlvbnM= 51642 -IGFzdGhtYQ== 51643 -IGxhY3Q= 51644 -IGhhcmR3b29k 51645 -LmNsb2Nr 51646 -IGF0dHJhY3Rpbmc= 51647 -IE1vdXI= 51648 -KGRpc3RhbmNl 51649 -aWNpdHM= 51650 -IGJvbm5l 51651 -IEFDQ0VTUw== 51652 -LkRlc2VyaWFsaXplT2JqZWN0 51653 -IFR5cGVk 51654 -IGpldQ== 51655 -IGFwcElk 51656 -IENsYXJh 51657 -IEhG 51658 -IFJlaWNo 51659 -aXBwbGVz 51660 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 51661 -X2RlbGl2ZXJ5 51662 -ZXJpYWxpemF0aW9u 51663 -IHBsYWludGlmZnM= 51664 -U2NpZW50 51665 -c2hvcHBpbmc= 51666 -IER1bW15 51667 -IFdhbGQ= 51668 -R3JvdXBOYW1l 51669 -IGluc2NyaXB0aW9u 51670 -ZWxvZw== 51671 -Ojo6Ojo6Ojo= 51672 -X2xk 51673 -QmFja1ByZXNzZWQ= 51674 -LlJhdw== 51675 -IE9uVHJpZ2dlcg== 51676 -IG11c2V1bXM= 51677 -IEJlZW4= 51678 -IEFkdmVudHVyZXM= 51679 -IHNsYXRl 51680 -IGxldHQ= 51681 -IHN1bmQ= 51682 -IEdpbg== 51683 -IE1lY2hhbmljYWw= 51684 -LnNoaXA= 51685 -QXBwQ29tcG9uZW50 51686 -IGRlc3RpbmVk 51687 -IGR3ZWxsaW5n 51688 -UHJvZmlsZXI= 51689 -UHJlcGFyZQ== 51690 -emVpY2g= 51691 -IHNpbGljb24= 51692 -KGhhcw== 51693 -ICMl 51694 -VklERU8= 51695 -IGNvbGxhYm9yYXRl 51696 -TGlu 51697 -IHNjb3Blcw== 51698 -KGNsYXNzTmFtZQ== 51699 -KHNk 51700 -YW5kaW4= 51701 -LmhhbQ== 51702 -U2VydmljZUltcGw= 51703 -LWRlc2NyaWJlZA== 51704 -IGlyb255 51705 -c3RpYWw= 51706 -IEh1YXdlaQ== 51707 -KHJlcG8= 51708 -IHVuZXhwZWN0ZWRseQ== 51709 -IEthaQ== 51710 -Lmluc3RhbGw= 51711 -XHhm 51712 -IGV4aGliaXRlZA== 51713 -X1RDUA== 51714 -IE94 51715 -X0NITw== 51716 -IHByb3N0aXR1ZXJ0ZQ== 51717 -IHbDpA== 51718 -IHNpdG8= 51719 -IGNvbnN0aXR1ZW50cw== 51720 -IENvbnRpbnVlZA== 51721 -IFNBVkU= 51722 -cnNz 51723 -L21lc3NhZ2U= 51724 -dWJlcw== 51725 -IG1pc2RlbWVhbg== 51726 -IHRheGF0aW9u 51727 -IHN0b3J5bGluZQ== 51728 -aGFpcg== 51729 -IEZpbmRz 51730 -U0lH 51731 -dmVyaWZpY2F0aW9u 51732 -fj0= 51733 -Lmhw 51734 -SXRlcmFibGU= 51735 -0YvQtQ== 51736 -YXRvcmk= 51737 -IGN0cg== 51738 -Ung= 51739 -Xyk7Cgo= 51740 -ZGFn 51741 -LnBpbg== 51742 -IHBzZXVk 51743 -IGludm8= 51744 -0YHRgtGA 51745 -X3BpeA== 51746 -5Li656m6 51747 -IHN3b3Ju 51748 -4oCUb3I= 51749 -X3JlZ2lzdHJ5 51750 -IGRpc2FzdGVycw== 51751 -IFJPSQ== 51752 -IOKAlQ== 51753 -YWt0dQ== 51754 -Zm9yZXN0 51755 -YmVpdGVu 51756 -4oCUSQ== 51757 -dWV2YQ== 51758 -ZWd0 51759 -IHNwaWtlcw== 51760 -VVJFUw== 51761 -IFJlY29tbWVuZGVk 51762 -IGV4cGxvaXRlZA== 51763 -IEZyZWRlcmljaw== 51764 -X0NPTVBMRVRF 51765 -IERydWdz 51766 -ISEhISEhISE= 51767 -IFJpdg== 51768 -U1RPUA== 51769 -Uk9PTQ== 51770 -IFBBU1NXT1JE 51771 -Q29va2llcw== 51772 -LkVs 51773 -4but 51774 -IEJlcnQ= 51775 -IGhhc2hlZA== 51776 -aWNlc3Rlcg== 51777 -IGRlY29yYXRvcg== 51778 -IHF1ZXJ5U3RyaW5n 51779 -OjsK 51780 -ICJbIg== 51781 -b3RvcGU= 51782 -LUFtZXJpYw== 51783 -IE1hdHRoZXdz 51784 -VVJBTA== 51785 -4oCcLA== 51786 -U3VtbWVy 51787 -Zm9z 51788 -X0NPTlRBSU5FUg== 51789 -X0FDSw== 51790 -IGZpbHRy 51791 -X2Rpc3A= 51792 -X1Jl 51793 -IGZhY2lsZQ== 51794 -0LDRiA== 51795 -IOyVig== 51796 -IGViZW4= 51797 -IHNwcmluaw== 51798 -IFF1aW50 51799 -PlY= 51800 -IGhpc3RvcmlhbnM= 51801 -b3VybWV0 51802 -IE1vbml0b3Jpbmc= 51803 -bGVkZ2Vy 51804 -Y290dA== 51805 -IHdhcmU= 51806 -R0dMRQ== 51807 -Y2Fycw== 51808 -IE1FRElBVEVL 51809 -IHZvbHVwdA== 51810 -X1ZpZXc= 51811 -SEVM 51812 -KGNvcHk= 51813 -KHN0YXRz 51814 -IGNocm9tb3NvbWU= 51815 -IEN1cnRpcw== 51816 -LWNvbmY= 51817 -KGFzc2V0 51818 -IGh2b3I= 51819 -RmlsZVN5c3RlbQ== 51820 -PD4oKTsNCg== 51821 -b2NvZGVy 51822 -IENhbm5vbg== 51823 -KXg= 51824 -IFNtb290aA== 51825 -IFNBUw== 51826 -X2Nl 51827 -CXByZXY= 51828 -X21vdmll 51829 -RWM= 51830 -X3dhbGw= 51831 -PEJ1dHRvbg== 51832 -IEZBU1Q= 51833 -IG9uVmlldw== 51834 -dWxhbg== 51835 -IFNVUFBPUlQ= 51836 -IGdlc2NoaWNodGVu 51837 -IFNvbnM= 51838 -SW1t 51839 -JElGbg== 51840 -IGZhaXJuZXNz 51841 -IGRwaQ== 51842 -YXRzdQ== 51843 -Sm9zaA== 51844 -RXF1YWxpdHk= 51845 -IH0oKQo= 51846 -X2xlc3M= 51847 -IFJhdGlv 51848 -IENhdHM= 51849 -IFN0ZXJu 51850 -TW9uc3Rlcg== 51851 -IG1lcmN1cnk= 51852 -w7xocg== 51853 -IHBsdXNpZXVycw== 51854 -LmRlc2VyaWFsaXpl 51855 -c2NvcHk= 51856 -LkZhbHNl 51857 -KWFuaW1hdGVk 51858 -IEV4cGVydHM= 51859 -ICIiKXsK 51860 -LldoZW4= 51861 -c2VlYWxzbw== 51862 -LnVucGFjaw== 51863 -TEVN 51864 -LnNlbGVjdEFsbA== 51865 -IHBlcmNlcHRpb25z 51866 -dWRpbmc= 51867 -aXJsaW5n 51868 -IFByaW50aW5n 51869 -Z3JhbXM= 51870 -IEZpbGVTdHJlYW0= 51871 -ZXJ2aWxsZQ== 51872 -aWxvZw== 51873 -aWNtcA== 51874 -X0NvdW50 51875 -IGxpdmVzdG9jaw== 51876 -LWNh 51877 -ZG9jdW1lbnRz 51878 -IHBvbGVz 51879 -CXdhbnQ= 51880 -IGZsdW9yZXM= 51881 -IHN0YW5kcG9pbnQ= 51882 -IEh1Z2U= 51883 -IHJhZGlhbnM= 51884 -IFVJQmFy 51885 -RURJVU0= 51886 -IEhpc3Rvcmlj 51887 -X2hvbGRlcg== 51888 -IE1hcmluZXM= 51889 -IHTDpA== 51890 -LkxpZ2h0 51891 -cXVpcmVy 51892 -YXNvbnJ5 51893 -ZGl2aWRlcg== 51894 -IEZsdXR0ZXI= 51895 -X2Zi 51896 -cmVzdHJpY3RlZA== 51897 -IEV2ZXJ5Ym9keQ== 51898 -TsOjbw== 51899 -IGtub3Q= 51900 -IFR3aXRjaA== 51901 -IGhhbGx3YXk= 51902 -KENvbGxpZGVy 51903 -SW5wdXRFbGVtZW50 51904 -PykK 51905 -L29mZg== 51906 -Lyk= 51907 -cGxheWVk 51908 -W09G 51909 -IGJhdHRpbmc= 51910 -X2Rs 51911 -IGNvbWVkaWFu 51912 -IMOpdg== 51913 -IERFTQ== 51914 -IEVkZW4= 51915 -OndoaXRl 51916 -Jycs 51917 -Q29uc3RydWN0aW9u 51918 -YWNlcmI= 51919 -IHRhc2tlZA== 51920 -Lm1hbmFnZQ== 51921 -UmVsYXRpb25zaGlw 51922 -IHBob24= 51923 -bno= 51924 -X0JHUg== 51925 -VmFsaWRhdGVBbnRpRm9yZ2VyeVRva2Vu 51926 -X2Fpcg== 51927 -4oCcV2hlbg== 51928 -IGdsZnc= 51929 -IENvbnZlcnNhdGlvbg== 51930 -X1RPVEFM 51931 -LFo= 51932 -IGdyYXo= 51933 -IGl0ZXJhYmxl 51934 -IFBBU1M= 51935 -IGFkdmVydGlzZQ== 51936 -IG3DtmdsaWNo 51937 -L3RyYWlu 51938 -IFZvbGtzd2FnZW4= 51939 -IGNyZWVweQ== 51940 -ICIpDQo= 51941 -UVVFTkNF 51942 -IGFsdGFy 51943 -IGVkaXRz 51944 -Y29tcGlsZWQ= 51945 -YXduaW5n 51946 -IER1bmdlb24= 51947 -IG9zZw== 51948 -TmF2aWdhdGlvbkJhcg== 51949 -IHRyZW5kaW5n 51950 -IEVjbw== 51951 -b2dnbGVz 51952 -Y2RvdA== 51953 -fC0= 51954 -U2ll 51955 -ZWNyZXQ= 51956 -IE5lZ2F0aXZl 51957 -IExpbmc= 51958 -IERJTQ== 51959 -IENXRQ== 51960 -IENhcnJpZXI= 51961 -IGNhcnRyaWRnZQ== 51962 -X3VzYg== 51963 -PW9z 51964 -IEphY2tpZQ== 51965 -IG90cmFz 51966 -IGNvbW1vZGl0aWVz 51967 -IFByZXNlbnRhdGlvbg== 51968 -KSYmKA== 51969 -IE1hcnRoYQ== 51970 -IENhdGhvbGljcw== 51971 -IE1vbmQ= 51972 -0L7QsdGL 51973 -X2Fic29sdXRl 51974 -IGFzaGFtZWQ= 51975 -cG9uc29ycw== 51976 -dGFs 51977 -IHNhZG5lc3M= 51978 -IHB1w7I= 51979 -RmFkZQ== 51980 -LXByZXZpZXc= 51981 -IFJlcXVlc3Rz 51982 -IENhbHZpbg== 51983 -aG9ybg== 51984 -UmV1c2VJZGVudGlmaWVy 51985 -KHByb3ZpZGVy 51986 -L2FwcHM= 51987 -aW1lbw== 51988 -CUNsYXNz 51989 -U2Ftc3VuZw== 51990 -IFdPUkxE 51991 -IGNpbm5hbW9u 51992 -ZG90ZW52 51993 -IElVc2Vy 51994 -IERFVg== 51995 -X0NoYXI= 51996 -LmliYXRpcw== 51997 -ZXRp 51998 -L21l 51999 -c3N0 52000 -LnN5bQ== 52001 -IFJ1Z2J5 52002 -LW1hc3Rlcg== 52003 -YWphcg== 52004 -IFlFQVI= 52005 -IG9kcA== 52006 -IFJvbGVz 52007 -IGJpcGFydGlzYW4= 52008 -YWlsbGU= 52009 -IGJsb2NrZXI= 52010 -IGdyZWVucw== 52011 -LlNFQ09ORFM= 52012 -IGJlbGlldmVycw== 52013 -IExpa2Vz 52014 -RkxPQVQ= 52015 -IG1haw== 52016 -IGdjYw== 52017 -4pWQ4pWQ 52018 -KCJ+Lw== 52019 -U0NSSVBUT1I= 52020 -IHRvbm5lcw== 52021 -IFNhbmc= 52022 -IHRyYW5zcG9zZQ== 52023 -ZW5uYWk= 52024 -UHJlZA== 52025 -IHNvbGx0ZQ== 52026 -LmdpdGh1YnVzZXJjb250ZW50 52027 -KHByaW50 52028 -IEhvbGU= 52029 -55yL 52030 -YWRnZXQ= 52031 -IHByb21wdHM= 52032 -IGdlbmV0aWNhbGx5 52033 -IEhvZA== 52034 -IHZlcnRpY2FsbHk= 52035 -X2NvbnRyb2xz 52036 -0YHRgtCw0L0= 52037 -Iil7DQo= 52038 -JHRpdGxl 52039 -IH0pLAoK 52040 -IHN0YXRld2lkZQ== 52041 -IENvcnJlc3BvbmQ= 52042 -IEF0dHI= 52043 -aXRhbnQ= 52044 -RWxlbWVudFR5cGU= 52045 -IG91dHdhcmQ= 52046 -IGZhbWlsaWE= 52047 -KGFydGljbGU= 52048 -IGJsYXQ= 52049 -wqAK 52050 -IGdsR2V0 52051 -IFJlY2VpdmVy 52052 -ICUt 52053 -YWRhbQ== 52054 -V2lubmVy 52055 -IHRhaWxvcg== 52056 -X3B3ZA== 52057 -ZXJ0ZW4= 52058 -U3Rhbg== 52059 -CWFsbA== 52060 -YWxpdmU= 52061 -c3RydG90aW1l 52062 -77+9cw== 52063 -c2Vzc2lvbnM= 52064 -JGNvbm4= 52065 -YXNzaXN0 52066 -IGNoYXR0aW5n 52067 -IE1hbnQ= 52068 -ICVA 52069 -ICIiKTsKCg== 52070 -IGRndg== 52071 -IO2VqA== 52072 -LnJlcGVhdA== 52073 -X01lc3NhZ2U= 52074 -IGFkdmlzZXJz 52075 -L3BhdGg= 52076 -IGtlcw== 52077 -KX08Lw== 52078 -TWlzYw== 52079 -IGJzb24= 52080 -IHRyaW1tZWQ= 52081 -IEFjaw== 52082 -VmVydGV4QXR0cmli 52083 -57Si 52084 -dWF0ZXM= 52085 -Lm15c3Fs 52086 -IGRlc3Rpbg== 52087 -IHByb2Js 52088 -KENvbnN0YW50 52089 -YXNzZXM= 52090 -LWltYWdlcw== 52091 -X0FSRUE= 52092 -X18qLw== 52093 -W10o 52094 -IHNpZ25Jbg== 52095 -xJE= 52096 -eHI= 52097 -YWhpcg== 52098 -LmZpcmVzdG9yZQ== 52099 -IHNlcXVlbnRpYWw= 52100 -IElkZWE= 52101 -LWJhc2lj 52102 -X3BhZw== 52103 -IGluc3RhZ3JhbQ== 52104 -b3Ryb24= 52105 -X2FsaWdubWVudA== 52106 -XFxcXA== 52107 -LkZhY3Rvcnk= 52108 -LnJ1bGU= 52109 -LmNoZGly 52110 -IGxpYnJv 52111 -KGdhbWVPYmplY3Q= 52112 -LlRvb2xTdHJpcEJ1dHRvbg== 52113 -IGRpc2NvdmVycw== 52114 -LkFyZ3M= 52115 -ZG9i 52116 -IHZu 52117 -4oaS 52118 -IGTDvA== 52119 -IFhN 52120 -IGFsdW1uaQ== 52121 -IGhvbmU= 52122 -IHNlY3VyZWx5 52123 -X2Ryb3Bkb3du 52124 -RGlzY2xhaW1lcg== 52125 -IGR6aQ== 52126 -KHRpbWVzdGFtcA== 52127 -Jyld 52128 -IGN1bHRpdmF0aW9u 52129 -Li4uCgoK 52130 -IFRyZWF0eQ== 52131 -IERpc3M= 52132 -IGNvbmZsaWN0aW5n 52133 -LmdldFNlbGVjdGlvbg== 52134 -IHBsYXlhYmxl 52135 -IFNpbGs= 52136 -IEVxdWFsaXR5 52137 -IG1veQ== 52138 -IGZsYXR0 52139 -IG1vdGl2ZXM= 52140 -UGVyZmVjdA== 52141 -LmV4aXN0 52142 -IHR3ZWFr 52143 -IG9taXQ= 52144 -IFR3aWxpZ2h0 52145 -IGtpc3Npbmc= 52146 -IGNocmlzdGlhbg== 52147 -KFNF 52148 -X2RlZmluZQ== 52149 -IFBlbmc= 52150 -U29ydGVk 52151 -J2lu 52152 -TG9ncw== 52153 -4buHbg== 52154 -IG55bG9u 52155 -RHVtcA== 52156 -SW1hZ2luZQ== 52157 -cmVuYW1l 52158 -IGJlZm9yZWhhbmQ= 52159 -cHlnYW1l 52160 -IGJweQ== 52161 -IERq 52162 -IHRpdHVsbw== 52163 -IG5sdGs= 52164 -IFNjaG1pZHQ= 52165 -IENhdg== 52166 -KG9uZQ== 52167 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 52168 -LmdldE1vZGVs 52169 -IFB0 52170 -YXRvaQ== 52171 -LmxvY2Fscw== 52172 -YnVyc2VtZW50 52173 -UHJvdmluY2U= 52174 -IEFwcHJvdmVk 52175 -KCk8PA== 52176 -w7NyaWE= 52177 -dXNjaA== 52178 -IEplbm55 52179 -YXJyYW50cw== 52180 -IExpYmVydA== 52181 -TG9yZA== 52182 -IFJlbW92ZWQ= 52183 -X2NvZGVj 52184 -LmJ1bmRsZQ== 52185 -IEdvbnphbGV6 52186 -b3BlcnM= 52187 -neWni+WMlg== 52188 -ZXR0aW5n 52189 -IGdvZGRlc3M= 52190 -cmlwZQ== 52191 -IG11c2N1bGFy 52192 -CQkJCQkJCQkg 52193 -IEh1Z28= 52194 -IG1lam9yZXM= 52195 -bG9pZA== 52196 -cml0ZWxu 52197 -Z2lz 52198 -YWRkb24= 52199 -ICgoKCg= 52200 -YXBwb2ludG1lbnQ= 52201 -cmVzZXJ2ZWQ= 52202 -CWZyaWVuZA== 52203 -X2F2YXRhcg== 52204 -Qk9PTEU= 52205 -YWhp 52206 -LUVORA== 52207 -IGlmZg== 52208 -w7Ni 52209 -IEJydW5v 52210 -cm93c2FibGU= 52211 -IFBvaXNvbg== 52212 -KGZsYWdz 52213 -dXJ0bGVz 52214 -IEFuaW1l 52215 -IG1pZ3JhbnQ= 52216 -CXN0cmNhdA== 52217 -KHJlcGx5 52218 -IFJlZnVnZQ== 52219 -IEJX 52220 -ZWZ1bA== 52221 -JHZhbHVl 52222 -ZmVk 52223 -ICAgICAgICAgICAgICAgICAgICAgICAK 52224 -6LWE 52225 -KGNt 52226 -IHZ1bG5lcmFiaWxpdGllcw== 52227 -IFsoJw== 52228 -IHVuYmVsaWV2YWJsZQ== 52229 -c3RyaWN0aW9u 52230 -ZW50aWV0aA== 52231 -IHByYXlpbmc= 52232 -Q2xhaW1z 52233 -IGthdWZlbg== 52234 -bsOp 52235 -IHBvaXNvbmluZw== 52236 -Y29sbGVjdGlvbnM= 52237 -IGluaXRTdGF0ZQ== 52238 -IFNldmVyaXR5 52239 -IGNvbnRlbnRpb24= 52240 -IAoJCg== 52241 -LmNvbnRyb2xsZXJz 52242 -c3RydWN0dXJlZA== 52243 -aWN0aW0= 52244 -IE9iZXI= 52245 -IC8qI19f 52246 -X09U 52247 -IEFtZXJpY2Fz 52248 -IEFkYQ== 52249 -UHJvZHV0bw== 52250 -Lm11bHRp 52251 -IGdyYXBl 52252 -YmVn 52253 -5p+l6K+i 52254 -IHF1YXJ0eg== 52255 -IFJvbWFuY2U= 52256 -IE1pZHdlc3Q= 52257 -IGhvdXNlZA== 52258 -IGZ1cm5pc2g= 52259 -aWNvbnQ= 52260 -LnVuc2hpZnQ= 52261 -b3RyZQ== 52262 -IMO6bg== 52263 -aXBwbGU= 52264 -IHN1YnVyYg== 52265 -dWFsaQ== 52266 -Vm9pY2U= 52267 -LklzQW55 52268 -LGNvbHVtbg== 52269 -IFByb3NlYw== 52270 -SURB 52271 -CXBvc3Q= 52272 -cHRvbXM= 52273 -dsOp 52274 -IEluZ3JlZGllbnRz 52275 -w7ZmZg== 52276 -Lm9wZXJhdG9y 52277 -IDw8PQ== 52278 -bGFzdGlj 52279 -IHJlc2VtYmxl 52280 -VW5hdXRob3JpemVk 52281 -IHR1dHRv 52282 -X1NXSVRDSA== 52283 -X1JFQURZ 52284 -fT0= 52285 -bm93bGVkZ2U= 52286 -IGFwcGVuZGVk 52287 -dW5nYW4= 52288 -4oCZZW4= 52289 -IExvcmVu 52290 -cHVibGlzaGVy 52291 -IE1H 52292 -fSwi 52293 -IFdhbHNo 52294 -VGVtcGxhdGVz 52295 -X3NvY2lhbA== 52296 -IHBhcmlzaA== 52297 -IFNwbA== 52298 -bWluYXRlZA== 52299 -KEZBTFNF 52300 -IGZvcmVmcm9udA== 52301 -bW9kaXR5 52302 -IGJpbGF0ZXJhbA== 52303 -IGNvbXBldGl0 52304 -IGNhbmRsZXM= 52305 -LmRw 52306 -IGNvbGxlY3Rz 52307 -dGVsZWZvbm8= 52308 -IGF0dGVudA== 52309 -IExlbW9u 52310 -aXphZGE= 52311 -IHRoZXJhcGllcw== 52312 -IHBhcmFkb3g= 52313 -IHRhcw== 52314 -LXN1Ym1pdA== 52315 -ZWtlcg== 52316 -SU5hdmlnYXRpb25Db250cm9sbGVy 52317 -IG1ldGF2YXI= 52318 -IHNld2luZw== 52319 -IFppbWJhYndl 52320 -IGxhd2Z1bA== 52321 -IGxvcmU= 52322 -IExvYWRz 52323 -INGB0L7Qt9C0 52324 -LnByb21pc2U= 52325 -IEZhY2Vz 52326 -LlBsYXRmb3Jt 52327 -LmdldExvY2F0aW9u 52328 -IHRyb3VibGluZw== 52329 -IHbDrWRlbw== 52330 -IEZlYXR1cmluZw== 52331 -5Lqn 52332 -cWVk 52333 -IG9uQmluZA== 52334 -IHRvZGRsZXI= 52335 -Q2xv 52336 -RGl2aXNpb24= 52337 -LWdhbGxlcnk= 52338 -IEdlbGQ= 52339 -c3BlY2lmaWM= 52340 -RmllbGROYW1l 52341 -X2V4Y2Vs 52342 -XGh0ZG9jcw== 52343 -IERW 52344 -ICY6 52345 -IHR3aWc= 52346 -IENvbmNlcm4= 52347 -IHNob3RndW4= 52348 -IG5pY2tlbA== 52349 -IEx1eHVyeQ== 52350 -X0tFWVM= 52351 -Lm5weQ== 52352 -xa8= 52353 -IGZvcmVoZWFk 52354 -zrI= 52355 -IGVuZGFuZ2VyZWQ= 52356 -L3RoZQ== 52357 -cGlwZWxpbmU= 52358 -xbE= 52359 -bmVv 52360 -RXhwbG9yZQ== 52361 -U3BlY1dhcm4= 52362 -IGludGVyY2hhbmdl 52363 -KHBp 52364 -YmlydGhkYXk= 52365 -RGF0YVJvdw== 52366 -IFNQUg== 52367 -IG9zdGU= 52368 -ICJ+ 52369 -YXRpc2ZhY3Rpb24= 52370 -Tkg= 52371 -b3Jkbw== 52372 -LWZvY3VzZWQ= 52373 -J0E= 52374 -lok= 52375 -LmJlc3Q= 52376 -IFNwZWNpZmljYXRpb24= 52377 -Lz4uCgo= 52378 -b2dlbmVzaXM= 52379 -IE9QVElPTlM= 52380 -dXB0b29scw== 52381 -IG1pbGl0YW50 52382 -IGV4aXRlZA== 52383 -aWdhcg== 52384 -IENPTU0= 52385 -IERpc3Bvc2FibGU= 52386 -YXljYXN0 52387 -IHJvd3NwYW4= 52388 -IHN5bnRoZXM= 52389 -IHNvbmRlcm4= 52390 -IDwhLS08 52391 -IEVuZGU= 52392 -LnZhcmlhYmxlcw== 52393 -IGNvbnNlcXVlbnRseQ== 52394 -c2Rr 52395 -U3VwcGx5 52396 -cmVzcG9uc2l2ZQ== 52397 -T3BlbmluZw== 52398 -cGhvdA== 52399 -IH1c 52400 -IGJ1bGxzaGl0 52401 -IGJlYWNvbg== 52402 -X3NhdA== 52403 -IHNuYXBz 52404 -IEdIeg== 52405 -TE9ORw== 52406 -PHBhaXI= 52407 -IFsKCg== 52408 -IFZlcmc= 52409 -IEVpbmU= 52410 -L3Bvc3Rz 52411 -IGFyYWI= 52412 -IHN1bWE= 52413 -44Oz44OI 52414 -IHNjYXJj 52415 -IG9sZWg= 52416 -ID8/Pw== 52417 -IE9mZmVycw== 52418 -eGVk 52419 -IGZ1bGxXaWR0aA== 52420 -LWFjdGlvbnM= 52421 -T3V0ZXI= 52422 -IEV4cG8= 52423 -w6lyZXI= 52424 -Lkhl 52425 -REg= 52426 -IGhpbA== 52427 -IE1pbGxlbm4= 52428 -0LXQvdGM 52429 -SWNl 52430 -X2dyYXk= 52431 -INC/0L7Qu9GD0Yc= 52432 -IFB1bms= 52433 -IHRpbWV2YWw= 52434 -IGlzYQ== 52435 -IENIdG1s 52436 -LkRhdGFQcm9wZXJ0eU5hbWU= 52437 -IGRpeQ== 52438 -dG91cg== 52439 -IGpUZXh0RmllbGQ= 52440 -IGplbGx5 52441 -IGFra2E= 52442 -LWVyYQ== 52443 -RGVwcmVjYXRlZA== 52444 -X0lNUEw= 52445 -IE1vbnRocw== 52446 -X0lURVI= 52447 -IGFydGU= 52448 -IEhlYWRpbmc= 52449 -IEJvaA== 52450 -IHByYWc= 52451 -IGRvd25zdHJlYW0= 52452 -IEJPQVJE 52453 -X2tleXdvcmRz 52454 -IE1ldHJvRnJhbWV3b3Jr 52455 -KS0o 52456 -PEV2ZW50 52457 -4bqldA== 52458 -IFByZWNpc2lvbg== 52459 -IE1SSQ== 52460 -aGVyZW5jZQ== 52461 -aXhv 52462 -KSkpewo= 52463 -KCk/Pg== 52464 -IHNhYXQ= 52465 -IFdhcmVob3VzZQ== 52466 -X2F0b21pYw== 52467 -IHZvaWNlZA== 52468 -SXRlbUNsaWNr 52469 -ICAgICAgCQ== 52470 -LlJlc3VsdFNldA== 52471 -L3BsdWdpbg== 52472 -IGhhbGxz 52473 -PWZvcm0= 52474 -IFdhZ25lcg== 52475 -ZW1haWxz 52476 -JSUK 52477 -VU5LTk9XTg== 52478 -IFJpbQ== 52479 -dWludHB0cg== 52480 -IExpYmVyYWxz 52481 -IHRlcnJpdG9yaWFs 52482 -IE11cmRlcg== 52483 -IExhZGVu 52484 -IHByZXNpZGVudGU= 52485 -KGNhcA== 52486 -IH0sewo= 52487 -YXZvdXJpdGU= 52488 -ZmluZEFsbA== 52489 -IGFwcGxhdWQ= 52490 -IOuplA== 52491 -L3Bob3Rv 52492 -X3N5bg== 52493 -LndhbGs= 52494 -IHN1bnNoaW5l 52495 -IHN0dWJib3Ju 52496 -IGRvd25zaWRl 52497 -IExURQ== 52498 -LWJ1aWxkaW5n 52499 -UXVlcnlCdWlsZGVy 52500 -X2Rpc2FibGVk 52501 -VGVycg== 52502 -YWtyYQ== 52503 -UmVmcmVzaGluZw== 52504 -X3Byb2Jz 52505 -IGZvbGw= 52506 -PmI= 52507 -IGNvbGxhdGVyYWw= 52508 -JGVycm9y 52509 -IGFjb21wYW4= 52510 -X2l2 52511 -K2Q= 52512 -YWp1 52513 -IOKd 52514 -c3VybmFtZQ== 52515 -LmFydGljbGU= 52516 -IGJpY3k= 52517 -IjoKCg== 52518 -Pjw/PSQ= 52519 -0LrQu9GO0Yc= 52520 -ZWNvbWU= 52521 -RmluZGluZw== 52522 -KHBk 52523 -IHJlY3Rhbmd1bGFy 52524 -ZXN0bw== 52525 -aWhpbA== 52526 -PScnKQo= 52527 -IG1hbnNpb24= 52528 -X2ZpbHRlcmVk 52529 -YW5lZA== 52530 -UFJPRFVDVA== 52531 -TE9HWQ== 52532 -X2ly 52533 -LlJlbW90ZQ== 52534 -IGV4ZWN1dGVz 52535 -b3RlY2hub2xvZ3k= 52536 -IFBST0NFU1M= 52537 -IHJvd0luZGV4 52538 -Z2V0WA== 52539 -TXV0 52540 -aW5za3k= 52541 -KHN0cmluZ3M= 52542 -IE1veg== 52543 -Rmxvb3I= 52544 -LlN0cnVjdA== 52545 -X3ByZWRpY3Rpb24= 52546 -IGNhcnJpYWdl 52547 -IGNvbGxlY3RvcnM= 52548 -IFdoZWVscw== 52549 -IGJ1bmRsZWQ= 52550 -YXhlZA== 52551 -a29s 52552 -X2Nyb3A= 52553 -IGJsb29t 52554 -QmVzaWRlcw== 52555 -IG92ZXJyaWRkZW4= 52556 -IHN1Ym5ldA== 52557 -aWVuaWE= 52558 -Kj46Og== 52559 -IFByaW1pdGl2ZQ== 52560 -IOag 52561 -LkNoYXJhY3Rlcg== 52562 -6KGo56S6 52563 -IEFESEQ= 52564 -Uk9Z 52565 -SmFwYW5lc2U= 52566 -T1VT 52567 -OlVJQ29udHJvbEV2ZW50 52568 -IFBBTA== 52569 -aXphY2lvbg== 52570 -IGNoZXJjaGU= 52571 -b3J0aW5n 52572 -IG9yZ2Fz 52573 -LlV0Yw== 52574 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 52575 -XERvbWFpbg== 52576 -T1JB 52577 -IHRlcnJhY2U= 52578 -IHByaXM= 52579 -CQkJCQkJCQkJCg== 52580 -IHJhaWRz 52581 -X2luY3JlbWVudA== 52582 -IHVuanVzdA== 52583 -JG9wdGlvbnM= 52584 -b25DaGFuZ2U= 52585 -Qmxvb2Q= 52586 -RmlsbQ== 52587 -IGhhbmRpbmc= 52588 -IG11Zw== 52589 -U09MRQ== 52590 -44OV 52591 -aWNvbmR1Y3Rvcg== 52592 -IElzbGFtaXN0 52593 -ICIiKTsNCg== 52594 -LW92ZXJsYXk= 52595 -LGNvbA== 52596 -6Zw= 52597 -YXJyaW5ncw== 52598 -X2NvbnRyYWN0 52599 -CWxs 52600 -cGlw 52601 -X2VtYmVkZGluZw== 52602 -IHBlcm1pdGU= 52603 -IG1vZGVt 52604 -IHRyaWdnZXJpbmc= 52605 -KGh3bmQ= 52606 -LiIpXQo= 52607 -IHNhbnQ= 52608 -IGV4dGluY3Rpb24= 52609 -IGNsYXNoZXM= 52610 -LkF1ZGlv 52611 -IHN1bw== 52612 -Lm11bHQ= 52613 -IHNlYXNvbmVk 52614 -LlZhckNoYXI= 52615 -cG93ZXJlZA== 52616 -ImNvbnRleHQ= 52617 -IG1lbmM= 52618 -KEdyYXBoaWNz 52619 -JHdoZXJl 52620 -IHJlY3VwZXI= 52621 -YWNrbGU= 52622 -IG5ld0RhdGE= 52623 -IEJyZWFraW5n 52624 -ZXJnZWQ= 52625 -IENQUFVOSVQ= 52626 -IE11bGw= 52627 -IGtvbW10 52628 -IExlZWRz 52629 -JywnPQ== 52630 -Lm5leHRUb2tlbg== 52631 -IFJpZw== 52632 -UkVUVVJO 52633 -CXRpbWVy 52634 -fV97 52635 -IE1hcmluYQ== 52636 -IHNsb2dhbg== 52637 -SVpFRA== 52638 -T3BlbkdM 52639 -X1BhZ2U= 52640 -YXRpdmFz 52641 -IGhhemFyZHM= 52642 -J3ZhbHVl 52643 -IGNvcnBzZQ== 52644 -IEZsb3dlcnM= 52645 -X29ubGluZQ== 52646 -ZGFs 52647 -IENvbGxpc2lvbg== 52648 -w6BuZw== 52649 -IGZlcnJ5 52650 -IHBva2U= 52651 -IFRvdXJpc20= 52652 -aW5lcmFyeQ== 52653 -L1NldA== 52654 -LkVtcGxveWVl 52655 -PkA= 52656 -LHZhbA== 52657 -IE1pbGY= 52658 -YXZleg== 52659 -UmV0cnk= 52660 -LiIv 52661 -IHJvdW5kaW5n 52662 -LXBsYWNlbWVudA== 52663 -IGNlcnY= 52664 -TWV4 52665 -IE1zZ0JveA== 52666 -X3Npbms= 52667 -bWFuaWE= 52668 -X2NyZWRpdA== 52669 -R3VhcmRhcg== 52670 -IHZhbml0eQ== 52671 -IGltbXV0YWJsZQ== 52672 -IGNvbnRhbWluYXRlZA== 52673 -0LrQsNC3 52674 -5Liy 52675 -YWNoYQ== 52676 -IGhhdGg= 52677 -IGVudW1lcmF0aW9u 52678 -LmdldEJ5 52679 -4bq/dA== 52680 -IERhbw== 52681 -b2JpZXJubw== 52682 -IEd1dA== 52683 -X1BJUEU= 52684 -LmFkdg== 52685 -IEd1dGVuYmVyZw== 52686 -YWRo 52687 -66y4 52688 -ZnVzYw== 52689 -LlZL 52690 -cHRh 52691 -IEVNUA== 52692 -LkZpcnN0TmFtZQ== 52693 -IHJlYWxpemVz 52694 -LmNn 52695 -IHVuaXRl 52696 -UExJVA== 52697 -IEFiZHVs 52698 -IE1FRA== 52699 -UkFJTlQ= 52700 -IHF1ZXN0YQ== 52701 -c3RkaW4= 52702 -IGNhbG9yaWU= 52703 -CWdsQmluZA== 52704 -IGFybWE= 52705 -eWxsYW5k 52706 -T01Q 52707 -LXE= 52708 -IEtoYWw= 52709 -c2FsYXJ5 52710 -CUFORA== 52711 -c2dp 52712 -X3RoYW4= 52713 -LWJ1aWx0 52714 -ICsvLQ== 52715 -IG5hcmdz 52716 -X2xhdW5jaA== 52717 -IFNR 52718 -em9u 52719 -IEJlbmVk 52720 -X3VuaW9u 52721 -PigpOw0KDQo= 52722 -IFNpbXM= 52723 -IERhdGVz 52724 -CUNvbm5lY3Rpb24= 52725 -IFBlcmM= 52726 -Z3JhbnQ= 52727 -YW1waWw= 52728 -IGFnZ3JlZ2F0aW9u 52729 -ZXNlbGVjdA== 52730 -X1NVUA== 52731 -KHsKCg== 52732 -Lm9t 52733 -IHdt 52734 -LmNvbnRyYWN0 52735 -LU9yaWdpbg== 52736 -IGdlbWU= 52737 -ZnJlZXpl 52738 -TlVNQkVS 52739 -LmN1cnI= 52740 -IEdsYWQ= 52741 -c2xh 52742 -IFJlYg== 52743 -0LXRgdGC0LLQvg== 52744 -YXJib24= 52745 -L2NvbnRyb2xsZXJz 52746 -U2xvdHM= 52747 -LmRlZXBjb3B5 52748 -RlVMTA== 52749 -dWlyZQ== 52750 -QHN0dWRlbnQ= 52751 -4LmJ4Lit 52752 -VHJhbnNsYXRvcg== 52753 -IHByZWZlcmFibHk= 52754 -Y2hlbWlzdHJ5 52755 -IEphY29icw== 52756 -bmFy 52757 -ICgiXA== 52758 -bmVhcg== 52759 -aWZpcXVl 52760 -CWNvbHVtbg== 52761 -IG1pbnV0b3M= 52762 -aWdlcw== 52763 -IGVzdGFibGU= 52764 -LWRpc2M= 52765 -KENoYXI= 52766 -a292 52767 -ZXhhbXBsZXM= 52768 -X18oIg== 52769 -INC60LDQug== 52770 -IEJvcmlz 52771 -KGR4 52772 -c3By 52773 -IG92ZXJoYXVs 52774 -YXRvb24= 52775 -IEhhcmxleQ== 52776 -aWNhbWVudGU= 52777 -4paI4paI4paI4paI 52778 -ZXZpdHk= 52779 -dXNoZXI= 52780 -LlZpc3VhbFN0dWRpbw== 52781 -V2F2ZQ== 52782 -IE5vcm1hbGx5 52783 -c3Rvb2Q= 52784 -b3JuaW5ncw== 52785 -IGhhbmRtYWRl 52786 -KGxvZ2dpbmc= 52787 -IGNhcmNpbg== 52788 -YWNqYQ== 52789 -IHN1cGVycw== 52790 -IHNpZWdl 52791 -CUlm 52792 -IElMb2dnZXI= 52793 -VUFSVA== 52794 -QW5pbWF0aW9uRnJhbWU= 52795 -IHRhcGVz 52796 -IGFpZHM= 52797 -IENvbG9uZWw= 52798 -dmVlZG9y 52799 -IG1kbA== 52800 -cGhvbg== 52801 -RGlzbWlzcw== 52802 -QXZhaWxhYmlsaXR5 52803 -VW5pZm9ybUxvY2F0aW9u 52804 -IGlkZWFscw== 52805 -cXVldHRl 52806 -a2VpdGVu 52807 -IEVNQUlM 52808 -IE5lYg== 52809 -IHN1bW1vbmVk 52810 -IGdvdmVybm1lbnRhbA== 52811 -IEhvcnJvcg== 52812 -Y2hhbmdpbmc= 52813 -IEFjdGl2YXRl 52814 -SWxs 52815 -PHRib2R5 52816 -Y3JlYXRpdmU= 52817 -IEJMRQ== 52818 -IG1hZG5lc3M= 52819 -T3JOaWw= 52820 -IGhpbg== 52821 -xZM= 52822 -LkdldEtleQ== 52823 -X2NvbnNvbGU= 52824 -Ik91cg== 52825 -IGd1aW50 52826 -IGFtaQ== 52827 -IHJlZmxlY3RpdmU= 52828 -IGNyYWNraW5n 52829 -IFJp 52830 -UkFM 52831 -dXJzZWQ= 52832 -cHVyZQ== 52833 -IHJlcGFpcmVk 52834 -IHRpZ2Vy 52835 -IE5pY29sYXM= 52836 -VnM= 52837 -bnRo 52838 -LmV4cHJlc3Npb24= 52839 -IHNlYXM= 52840 -X0FDQ0VQVA== 52841 -IGZvcmM= 52842 -IEZyYXU= 52843 -IHRocmVzaA== 52844 -IM+A 52845 -KEJBU0U= 52846 -X09wZW4= 52847 -V3VudXNlZA== 52848 -IERvbWVzdGlj 52849 -KHByaXY= 52850 -Z3Vlc3M= 52851 -Ly8hCg== 52852 -Z2V0SXRlbQ== 52853 -KCkpCgoK 52854 -bXV0YXRpb25z 52855 -IHN0cw== 52856 -IGRlbWVudGlh 52857 -c3Bva2Vu 52858 -JHBhcmFtcw== 52859 -IHBhdHJvbnM= 52860 -IHJ1bndheQ== 52861 -IEJVWQ== 52862 -Lldhcm5pbmc= 52863 -IG5ldXRyYWxpdHk= 52864 -emhvdQ== 52865 -0YDQsNGJ 52866 -YWt0ZXI= 52867 -IENvbnN0cnVjdG9ycw== 52868 -w5NO 52869 -IFByb2dyZXNzaXZl 52870 -IEJ1cmdlcg== 52871 -IGluY3VycmVk 52872 -IGltcGxpY2l0bHk= 52873 -X2Vudmlyb25tZW50 52874 -IGV4YWNlcmI= 52875 -IGVuZHVyaW5n 52876 -c2lj 52877 -IFBhcnRpY2lwYW50cw== 52878 -X0Jsb2Nr 52879 -IGVucm9sbA== 52880 -X2VtcGxveWVl 52881 -IFBlcHBlcg== 52882 -bGF1Z2h0ZXI= 52883 -44OW 52884 -J107Pz4= 52885 -PScu 52886 -KHJlbmFtZQ== 52887 -IHNoZWx0ZXJz 52888 -IEFNQQ== 52889 -X2dhcA== 52890 -IFJFVVRFUlM= 52891 -eGFtcHA= 52892 -T01JQw== 52893 -IHBlZGlkbw== 52894 -IGTDqXZlbG9w 52895 -X18oLyoh 52896 -X29k 52897 -d2VyZQ== 52898 -X051bWJlcg== 52899 -X211bHRpcGxpZXI= 52900 -S0VFUA== 52901 -IHNob3dlcnM= 52902 -IG1hZ2U= 52903 -IHNpbm8= 52904 -Y3Jvdw== 52905 -LmlkeA== 52906 -X25vdGljZQ== 52907 -dWVpbA== 52908 -IG15cmlhZA== 52909 -IEF2YWlsYWJpbGl0eQ== 52910 -Y2VudHJhbA== 52911 -IEFCT1VU 52912 -IGluY29ycG9yYXRpbmc= 52913 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 52914 -X3dpZGdldHM= 52915 -IHN5c3RlbUZvbnRPZlNpemU= 52916 -w7ZydA== 52917 -L2pwZWc= 52918 -IFNNVFA= 52919 -KGJyb3dzZXI= 52920 -Z3Vucw== 52921 -c2V0dw== 52922 -X0FWQUlMQUJMRQ== 52923 -IGluY29ycG9yYXRlcw== 52924 -L2FuZHJvaWQ= 52925 -eXg= 52926 -5biD 52927 -X2xhYg== 52928 -IGxlYWtpbmc= 52929 -IEhpbnQ= 52930 -w7xuY2hlbg== 52931 -LlNjYWxl 52932 -IGZpcmV3b3Jrcw== 52933 -IGxQYXJhbQ== 52934 -YnNk 52935 -YXhvbg== 52936 -KHByZWRpY3Q= 52937 -Q29uZ3JhdHVsYXRpb25z 52938 -IFNwZWN0cnVt 52939 -SVJD 52940 -IEFkbWluaXN0cmF0aXZl 52941 -IGltcHJpc29uZWQ= 52942 -UlNwZWM= 52943 -IHJldGFpbnM= 52944 -IHNldHRsaW5n 52945 -IGNpdGF0aW9ucw== 52946 -IFdvcmxkcw== 52947 -c3RyY29udg== 52948 -b3VzYW5k 52949 -IEJlZ2lubmluZw== 52950 -IEFuZHJld3M= 52951 -IFNoYXJvbg== 52952 -RXhlY3V0aW5n 52953 -Z3JvdXBJZA== 52954 -YWRkRmllbGQ= 52955 -IGV4cGFuZHM= 52956 -IGtpbG9tZXRyZXM= 52957 -bGlua3k= 52958 -IGdycA== 52959 -SU5BVElPTg== 52960 -QnJpdGlzaA== 52961 -IGNvbXBvcnQ= 52962 -LkRhdGFHcmlkVmlld0NvbHVtbg== 52963 -IFByb2R1Y3Rpb25z 52964 -aWxkZW4= 52965 -IHVuaXg= 52966 -X2dhbGxlcnk= 52967 -X1BST1ZJRA== 52968 -b3JkZXJpbmc= 52969 -X2Fubg== 52970 -Ymg= 52971 -LkRlc2lnbg== 52972 -IHRyZWZmZW4= 52973 -IHVuZGVybGluZQ== 52974 -X251bXM= 52975 -7ZWc64uk 52976 -KXY= 52977 -dXNpemU= 52978 -IGRpc2FwcGVhcmFuY2U= 52979 -VG9Cb3VuZHM= 52980 -IHBjbA== 52981 -IFdpbm5pcGVn 52982 -IFNoZXJtYW4= 52983 -X2xhbWJkYQ== 52984 -bmFudA== 52985 -IHJvb3RWaWV3 52986 -LkZsYWdz 52987 -IGNlbnNvcnNoaXA= 52988 -c2VudGVuY2U= 52989 -LnJlYWRJbnQ= 52990 -X2Fzc2lnbm1lbnQ= 52991 -IHZlcnNjaGllZA== 52992 -IEZyYWN0aW9u 52993 -IG5hdGlvbmFsaXN0 52994 -IGp1ZWdv 52995 -IERlYWxlcg== 52996 -IHByZWRpY3Rpbmc= 52997 -YXVwdA== 52998 -aGVsbQ== 52999 -X1BSSUNF 53000 -X0RT 53001 -KCIjew== 53002 -bGlmdGluZw== 53003 -IHBvc2luZw== 53004 -IE5TTXV0YWJsZURpY3Rpb25hcnk= 53005 -IHNtYXNo 53006 -IGFraW4= 53007 -IGNhbXB1c2Vz 53008 -IE91dGxpbmU= 53009 -IEVsYXN0aWM= 53010 -X0NoZWNrZWRDaGFuZ2Vk 53011 -KElFbnVtZXJhYmxl 53012 -c3F1ZWV6ZQ== 53013 -cHR1bmU= 53014 -X0ZST05U 53015 -bWg= 53016 -IOyDneyEsQ== 53017 -UnVuV2l0aA== 53018 -IHR1cm5vdXQ= 53019 -c2libGluZ3M= 53020 -KWU= 53021 -X0FSR1VNRU5U 53022 -IEdyaWRCYWdDb25zdHJhaW50cw== 53023 -X1BPT0w= 53024 -LlJJR0hU 53025 -aWdnaW5z 53026 -dGVsZXBob25l 53027 -XEV4dGVuc2lvbg== 53028 -IEFyaXN0 53029 -aXR1cg== 53030 -IGZyaWVz 53031 -X2R1cA== 53032 -RXhwYW5kZWQ= 53033 -LXJv 53034 -IFdvcmxkd2lkZQ== 53035 -IENvcms= 53036 -w7Ns 53037 -TGlt 53038 -IGRlbm4= 53039 -UHJldHR5 53040 -IGZ5 53041 -VHJpYW5nbGU= 53042 -RmVhdHVyZWQ= 53043 -KENvbW1vbg== 53044 -X2VmZg== 53045 -ICIiDQo= 53046 -4bubaQ== 53047 -X0xJTkVBUg== 53048 -IFJpY2E= 53049 -IGNhZsOp 53050 -IGFwcGVsbA== 53051 -IG5pdmVhdQ== 53052 -ICYs 53053 -IGZhYnJpY3M= 53054 -X1BsYXllcg== 53055 -IGh5Z2llbmU= 53056 -IGRpc2FzdHJvdXM= 53057 -IHNoYXJlZEluc3RhbmNl 53058 -X3BpdGNo 53059 -cno= 53060 -ZW5tZW50 53061 -TmVhcg== 53062 -X1NUQVRT 53063 -IHN0YWlu 53064 -IEROQw== 53065 -IGlzc3U= 53066 -Xks= 53067 -CXRyZWU= 53068 -X2Jsaw== 53069 -c2V6 53070 -bGFpbg== 53071 -YW11 53072 -X293bmVk 53073 -VVNBUlQ= 53074 -Lmhhc0NsYXNz 53075 -SVNPTg== 53076 -IGZvZQ== 53077 -dXNoZWQ= 53078 -X1VOU0lHTkVE 53079 -IGluZGV4aW5n 53080 -IEZpcmViYXNlQXV0aA== 53081 -IGxpdGVyYWN5 53082 -IFNVUg== 53083 -IENvbHRz 53084 -YmVjdWU= 53085 -IEludHJv 53086 -IGNoYW90aWM= 53087 -IGFuaQ== 53088 -IEFubmll 53089 -xrDhu50= 53090 -LmR4 53091 -ZGlzY29ubmVjdA== 53092 -IGFyY2hpdmVk 53093 -W0xpc3Q= 53094 -PU4= 53095 -LnByZXNlbnRhdGlvbg== 53096 -UmVzdGF1cmFudA== 53097 -IHJvY2tldHM= 53098 -PWh0dHBz 53099 -L29w 53100 -IHB1cnNl 53101 -IEtyaXM= 53102 -IGNvcmFs 53103 -c2V0UGFyYW1ldGVy 53104 -IGlycmln 53105 -UXVlZW4= 53106 -TlNEYXRh 53107 -IHZhc3RseQ== 53108 -LkZpbGVz 53109 -IGZlbWluaXNt 53110 -KFN0cmVhbQ== 53111 -IGF0cmli 53112 -IGxpcXVpZGl0eQ== 53113 -PEZpbGU= 53114 -dHJhZw== 53115 -W2NvbnRhaW5z 53116 -IGhpbmRp 53117 -CWNw 53118 -aG9tZXBhZ2U= 53119 -IHN1cnBhc3M= 53120 -IGRheWxpZ2h0 53121 -YXV0aG9yaXpl 53122 -IENvbnNlcXVlbnRseQ== 53123 -QXN5bmNSZXN1bHQ= 53124 -IERpYXJ5 53125 -LlBhdHRlcm4= 53126 -LiovCg== 53127 -ZW5zY2hhZnQ= 53128 -IEp1ZGljaWFyeQ== 53129 -QWR1bHQ= 53130 -KCY6 53131 -IGplb3BhcmQ= 53132 -IEJsaXp6YXJk 53133 -IGdn 53134 -IjsvLw== 53135 -WEhS 53136 -IHBhc3N3ZA== 53137 -Pn0= 53138 -JyksJw== 53139 -IGNvbXBhcmF0b3I= 53140 -LmNoYWlu 53141 -IGluc3VyZWQ= 53142 -X0VER0U= 53143 -IHR5bGtv 53144 -X01BSk9S 53145 -d2F2 53146 -XEZpbGU= 53147 -RW50cg== 53148 -J2FwcA== 53149 -IGZvcmdpdmVuZXNz 53150 -CWRzdA== 53151 -Ijot 53152 -Lm1vbg== 53153 -ICgKCg== 53154 -IGNhcGl0YQ== 53155 -IGluaXRDb21wb25lbnRz 53156 -IHN3b3Jkcw== 53157 -IE91dHB1dFN0cmVhbQ== 53158 -IGhlYXJz 53159 -IFNQQUNF 53160 -LWluc3BpcmVk 53161 -X2Jvb3Q= 53162 -Lm5vbmU= 53163 -LmdldElucHV0U3RyZWFt 53164 -IGRldmlzZQ== 53165 -IHBlZGlhdHJpYw== 53166 -YW5zaQ== 53167 -X3BhcnRpYWw= 53168 -IHNoYXJk 53169 -IGZ1cmlvdXM= 53170 -IGRyYXdhYmxl 53171 -JSku 53172 -KGVt 53173 -IEJha2U= 53174 -CXBlcnJvcg== 53175 -IFJlbGlnaW91cw== 53176 -LSIr 53177 -CQkJICAgICAgICAgICA= 53178 -IFNlY3JldHM= 53179 -KG5vcm1hbA== 53180 -QUNFUw== 53181 -IFN0b2NraG9sbQ== 53182 -LW5vcm1hbA== 53183 -IGFjY3VzdG9tZWQ= 53184 -IGJvdXRpcXVl 53185 -IFN3aW5n 53186 -IGZpbQ== 53187 -IFBV 53188 -LlNvY2tldA== 53189 -ICciJw== 53190 -YW5q 53191 -TWFudWFs 53192 -IG11amVy 53193 -IHBoeXNpb2xvZ2ljYWw= 53194 -Y29udGFpbg== 53195 -TWVyZ2U= 53196 -IHN1YXM= 53197 -ICd7Ig== 53198 -bmVnbw== 53199 -IHN1YnNjcmliZWQ= 53200 -dG9hc3Q= 53201 -X1ZFUkJPU0U= 53202 -IGtuaXQ= 53203 -IEFydGlzdHM= 53204 -IGhlYXJ0YmVhdA== 53205 -IGZpcmVmaWdodGVycw== 53206 -c3Nh 53207 -W3s= 53208 -IHVuZGVyc2NvcmU= 53209 -IGhpc3Rvcmllcw== 53210 -aWdtb2lk 53211 -RmllbGRWYWx1ZQ== 53212 -VG9BZGQ= 53213 -LkNv 53214 -IEhhcm9sZA== 53215 -QXZvaWQ= 53216 -aWdoYm91cnM= 53217 -b3JkZQ== 53218 -IHRydXRocw== 53219 -L2Fs 53220 -IHdpcmVk 53221 -IEl0YWxpYQ== 53222 -IHNlcnZpY2lvcw== 53223 -IEFVRElP 53224 -ICciKw== 53225 -IHB1bXBpbmc= 53226 -IENsZW1lbnQ= 53227 -w4NP 53228 -5Y6f 53229 -Pm4= 53230 -IHN0clNxbA== 53231 -amRiYw== 53232 -4oE= 53233 -CVNFVA== 53234 -IEJVRkZFUg== 53235 -Oi8vIg== 53236 -IGNpcmN1bXN0YW5jZQ== 53237 -VUlUYWJsZVZpZXdDZWxs 53238 -LnZlcnRpY2Fs 53239 -IEpvaG5z 53240 -dG9saXN0 53241 -IGRyaXZld2F5 53242 -IGxlYXJuZXJz 53243 -dG9iZXI= 53244 -d2lubmVy 53245 -LXlvdXI= 53246 -LnN0YXRlcw== 53247 -SE0= 53248 -IGdyYWRpZW50cw== 53249 -IHNlaXp1cmU= 53250 -IG1hdGVy 53251 -IGRldGFs 53252 -IFJlZHVjZQ== 53253 -KG1vdXNl 53254 -IFJlU2hhcnBlcg== 53255 -LXJvdXRpbmc= 53256 -INi0 53257 -IGpvaW50bHk= 53258 -IEZhbWls 53259 -PE1lc3NhZ2U= 53260 -ZXhwaXJl 53261 -X3RyYWRl 53262 -4oCmLi4= 53263 -IEZVTkNUSU9OUw== 53264 -IHhlbg== 53265 -IHt9Ow== 53266 -RmFi 53267 -IGZlYXN0 53268 -KERi 53269 -Rmlyc3RSZXNwb25kZXI= 53270 -xLFsxLE= 53271 -IG1heFZhbHVl 53272 -IC06 53273 -YXB0aWM= 53274 -Lkdzb24= 53275 -IFJvdmVy 53276 -X2Nu 53277 -bG91ZA== 53278 -IGNoYW1iZXJz 53279 -INC30LDQtA== 53280 -LmZvcmVhY2g= 53281 -LmdldEVtYWls 53282 -55+l 53283 -Lk5vZGVz 53284 -IFZX 53285 -IFdhaXRpbmc= 53286 -KFF0Q29yZQ== 53287 -IHPDs2xv 53288 -cnE= 53289 -YW5ndWFyZA== 53290 -IHJlc2VtYmxlcw== 53291 -Oltb 53292 -IGdlZA== 53293 -X0VQ 53294 -KEFjdGl2aXR5 53295 -IElzbg== 53296 -IENydXNoZXJz 53297 -X1JVTlRJTUU= 53298 -CW9wZW4= 53299 -IEhpZ2hsaWdodHM= 53300 -w6lyYXRpb24= 53301 -IHllbGxpbmc= 53302 -IExJR0hU 53303 -UGhvdA== 53304 -dmVuZ2U= 53305 -IFN1c3A= 53306 -IENocg== 53307 -LkRpc3RhbmNl 53308 -YXJzaW1w 53309 -bGljYXM= 53310 -Lk1vbg== 53311 -IHN1Y2tlZA== 53312 -cHJpbnRlZA== 53313 -bXV0ZQ== 53314 -IHNldEVycm9y 53315 -Lk9wdGlvbg== 53316 -IGltcGFpcm1lbnQ= 53317 -bm9pc2U= 53318 -IHBhcnRuZXJlZA== 53319 -w40= 53320 -ZGVucw== 53321 -aWN6 53322 -IHdhaXRGb3I= 53323 -IG92ZXJsb29raW5n 53324 -IEZPUk1BVA== 53325 -IFRTdHJpbmc= 53326 -IHJlbnRpbmc= 53327 -CWNvbXBvbmVudA== 53328 -LkZyZWU= 53329 -IExhdW5jaGVy 53330 -PWRhdGU= 53331 -IFBvZHM= 53332 -QUdNRU5U 53333 -Q29kaWdv 53334 -Qml0RmllbGRz 53335 -IHViaXF1 53336 -LWNhcm91c2Vs 53337 -IFNpbXVsYXRvcg== 53338 -aW5vZGU= 53339 -J10pewo= 53340 -IEJhZ2hk 53341 -IG5vcnRod2VzdA== 53342 -aHRha2luZw== 53343 -PCY= 53344 -IHRyYW0= 53345 -IGZvcndhcmRlZA== 53346 -IGVycm9yTXNn 53347 -X0FTU0lHTg== 53348 -IEVudGl0aWVz 53349 -LlBhcnQ= 53350 -cmVhdHVyZQ== 53351 -KFVyaQ== 53352 -IERyaXZpbmc= 53353 -IGludmFzaXZl 53354 -aWdyYXRpb25CdWlsZGVy 53355 -b3NhdXJz 53356 -CXBvcnQ= 53357 -IGJyYW4= 53358 -aXR0aW5ncw== 53359 -RG9vcg== 53360 -IHsl 53361 -KGxpbWl0 53362 -IHNxdWFyZWQ= 53363 -IERJU1BMQVk= 53364 -LkFjY2VwdA== 53365 -LmJhc2VVcmw= 53366 -LkVudGVy 53367 -IC4uLikK 53368 -IG93bA== 53369 -IHNsYXRlZA== 53370 -LmZlY2hh 53371 -X1NFRw== 53372 -PXsk 53373 -IE9OTElORQ== 53374 -T05Z 53375 -INC00LDQvdC90YvRhQ== 53376 -b250ZQ== 53377 -X0NMSUNL 53378 -U2E= 53379 -SW1wb3J0YW50 53380 -IGNhcm91c2Vs 53381 -IGFwcGVhbGVk 53382 -IE5pZQ== 53383 -L2Jvb2s= 53384 -W10+KA== 53385 -IHhtYXg= 53386 -IGxhbmdl 53387 -LlN1cHByZXNz 53388 -IFRoaW5raW5n 53389 -QWRkcmVzc2Vz 53390 -IFNhbGx5 53391 -LVRW 53392 -IENoYXJsZXN0b24= 53393 -KSIKCg== 53394 -IHRhbGx5 53395 -IHVsbA== 53396 -IGxvY2FsZXM= 53397 -ZXdhbg== 53398 -IGluY3JlbWVudGFs 53399 -65Cc 53400 -IGNhcmV0 53401 -anVyZQ== 53402 -IGRvcg== 53403 -IGxvY2FsaXphdGlvbg== 53404 -IHNlYWZvb2Q= 53405 -IFJ1YmJlcg== 53406 -LlRoZXJl 53407 -IEZpc2hpbmc= 53408 -WVlZ 53409 -bWFnZQ== 53410 -IEZsZXhpYmxl 53411 -IEdFTkVSQUw= 53412 -ZWth 53413 -IHRocml2aW5n 53414 -IHNpcw== 53415 -IGJvdXJnZW9pcw== 53416 -RmFrZQ== 53417 -LFwi 53418 -INC+0LQ= 53419 -Q09S 53420 -LWVmZmVjdGl2ZQ== 53421 -IHNrdQ== 53422 -ZWRseQ== 53423 -IyMKCg== 53424 -IEhvbGx5 53425 -IEZMQVNI 53426 -L1RS 53427 -Lm5z 53428 -cHJvYmU= 53429 -Z2lmdA== 53430 -b3dpdHo= 53431 -LW5hdmJhcg== 53432 -IHNhY2s= 53433 -57qn 53434 -IFRocmVhdA== 53435 -WkE= 53436 -WE0= 53437 -JyksCgo= 53438 -IExMVk0= 53439 -YXN6 53440 -RWRpdGVk 53441 -V2l0aFN0cmluZw== 53442 -U2lsdmVy 53443 -eW5h 53444 -X3JlbmRlcmVy 53445 -CURFQlVH 53446 -KG9wZXJhdGlvbg== 53447 -IFNsb3Rz 53448 -IEF1YnVybg== 53449 -eGVj 53450 -IGhvbW9zZXh1YWxpdHk= 53451 -LlJlc3RDb250cm9sbGVy 53452 -ZXJzaXZl 53453 -IHByb2ZpbA== 53454 -IE15YW5tYXI= 53455 -cm9zc2U= 53456 -X0lSUW4= 53457 -IHNlbmRNZXNzYWdl 53458 -IHRlY2huaWNpYW5z 53459 -IG1hbmU= 53460 -Y29tbW9ucw== 53461 -IHNocmVkZA== 53462 -Qm9vc3Q= 53463 -IHN5bXBhdGhldGlj 53464 -LWVmZg== 53465 -IENlcnRhaW5seQ== 53466 -IHfDpGg= 53467 -IFJvY2hlc3Rlcg== 53468 -dWNjaQ== 53469 -dXJt 53470 -ZW1wb3I= 53471 -ICIiOgo= 53472 -LXNwYWNpbmc= 53473 -IHNpeHR5 53474 -IOKckw== 53475 -X3JlcG9ydGluZw== 53476 -V2ls 53477 -b3lv 53478 -IGRpZFNlbGVjdA== 53479 -LmdldExvbmc= 53480 -LnNldEVycm9y 53481 -X25j 53482 -IERvbmc= 53483 -CWFzeW5j 53484 -IEhpZ2hseQ== 53485 -XToNCg== 53486 -TGVha3M= 53487 -LC4uLgo= 53488 -dmFsdWF0b3I= 53489 -ZGljdGlvbnM= 53490 -b3hlbA== 53491 -IGdlc3R1cmVz 53492 -PSI/ 53493 -YmFncw== 53494 -IFJlbGllZg== 53495 -c3Vic2V0ZXE= 53496 -KG5hbWVzcGFjZQ== 53497 -fXw= 53498 -IG1pY3JvYmk= 53499 -IHB1cml0eQ== 53500 -Y2hpbw== 53501 -fT8= 53502 -X01VVA== 53503 -X2FjdGl2YXRpb24= 53504 -IFBpcmF0ZXM= 53505 -ICUj 53506 -aWZpY2FjacOzbg== 53507 -5Ys= 53508 -IE5SQQ== 53509 -w6dvbg== 53510 -fSkoKTsK 53511 -IENoZXN0ZXI= 53512 -4oCT4oCT 53513 -Z2V0Q29ubmVjdGlvbg== 53514 -LmFyZ3VtZW50cw== 53515 -RmV0Y2hpbmc= 53516 -IEZyeQ== 53517 -IERpdA== 53518 -IHppY2g= 53519 -cGFzdA== 53520 -LWxpYnJhcnk= 53521 -IEhheWVz 53522 -IGJvdW50eQ== 53523 -IFNwcmluZ2ZpZWxk 53524 -UE9S 53525 -IEFQUg== 53526 -IEVtYmFzc3k= 53527 -UVVFU1RJT04= 53528 -IFNvbGRpZXI= 53529 -ZXJ0YXM= 53530 -IE5PUk1BTA== 53531 -IGR1cw== 53532 -Ym9sdA== 53533 -IGRvcnQ= 53534 -IExpZnQ= 53535 -IGdldFJhbmRvbQ== 53536 -LlJ1bldpdGg= 53537 -LCksCg== 53538 -IHZhcmFyZ2lu 53539 -IGhhbmRsZUNsaWNr 53540 -XEh0bWw= 53541 -IGhvbW1lcw== 53542 -Y2lkYWRl 53543 -KGVw 53544 -SmE= 53545 -L2RpYWxvZw== 53546 -LnJhdGU= 53547 -IFdlaQ== 53548 -ZnVsbHNjcmVlbg== 53549 -IE5Vbml0 53550 -Lm1lYXN1cmU= 53551 -VmFscw== 53552 -IFNpZ25lZA== 53553 -IHJ1cw== 53554 -IHJhZnQ= 53555 -IEJsb25kZQ== 53556 -IG5ldHM= 53557 -IE1ldHJpYw== 53558 -aWNoVGV4dEJveA== 53559 -IHVyZQ== 53560 -IGludGVycmFjaWFs 53561 -ICd9Cg== 53562 -KHN0b3JhZ2U= 53563 -SW50ZWdyYXRpb24= 53564 -IGJhbmNv 53565 -QVNZ 53566 -IGppbnQ= 53567 -IGRlZ3JhZGF0aW9u 53568 -IEhBTkQ= 53569 -dWVyZG8= 53570 -PScn 53571 -IHN0cm9rZXM= 53572 -cmV3cml0ZQ== 53573 -KFNldA== 53574 -IE1hdERpYWxvZw== 53575 -IGRvc3NpZXI= 53576 -CWFuZA== 53577 -QURESU5H 53578 -IG11dHVhbGx5 53579 -IHByZWNlZGVk 53580 -fX07Cg== 53581 -IHN1YnR5cGU= 53582 -IHJlc29sdmluZw== 53583 -IGdlb21ldHJpYw== 53584 -W2NvbHVtbg== 53585 -IENUUkw= 53586 -IEhM 53587 -IGRhaA== 53588 -ICg7Ow== 53589 -UmFpbHM= 53590 -w5w= 53591 -IEdlbmVyYXRlcw== 53592 -LUxlbmd0aA== 53593 -cGVkbw== 53594 -b2dlbm91cw== 53595 -IFJvYmVydHNvbg== 53596 -LkJvb2w= 53597 -b2RlcnM= 53598 -X0FHRU5U 53599 -cGFzc3dk 53600 -IE5vZGVz 53601 -LmJp 53602 -IFdC 53603 -IHByb3BoZXQ= 53604 -c2xhdmU= 53605 -IOW8 53606 -IHdlaWw= 53607 -JTwv 53608 -IGNhcmJz 53609 -5rC0 53610 -IGV4cHJlc3NseQ== 53611 -XHhk 53612 -LWV5ZWQ= 53613 -IENyZWF0dXJl 53614 -Y29udGFpbmVk 53615 -KFNJRw== 53616 -IEVuaGFuY2VtZW50 53617 -IENvcnM= 53618 -R2Fs 53619 -X1NJR05BTA== 53620 -cmVpbnRlcnByZXQ= 53621 -IFFQdXNoQnV0dG9u 53622 -X05vbmU= 53623 -IGdlbm9jaWRl 53624 -IFNlYWw= 53625 -5LiK5Lyg 53626 -KHBlcg== 53627 -0LvRjNGC 53628 -IMOgcw== 53629 -LlRlbXBsYXRl 53630 -ICkNCg0K 53631 -LnNpbmdsZXRvbg== 53632 -CXNsZWVw 53633 -IHNwYXduZWQ= 53634 -IHBvc3Nlc3Npb25z 53635 -Z2V0Q29uZmln 53636 -IHRhaQ== 53637 -bHVkZQ== 53638 -IE1ldGVy 53639 -IGJpYmxpY2Fs 53640 -bWFyc2hhbGxlcg== 53641 -LlRvb2xraXQ= 53642 -IExlc2JpYW4= 53643 -LnNtYXJ0 53644 -IGJveWNvdHQ= 53645 -IGZyeQ== 53646 -LWRlc2M= 53647 -X1NlcnZpY2U= 53648 -IG1hY2h0 53649 -IENhaXJv 53650 -w6Bp 53651 -X3ByZXZpb3Vz 53652 -LnRyYW5zcG9ydA== 53653 -TWVkaWNhbA== 53654 -Q0dQb2ludA== 53655 -UVVBUkU= 53656 -IGJyaWdodGVy 53657 -IGNoZWNrQm94 53658 -IEZPVU5E 53659 -LmJyYW5jaA== 53660 -IGJsYWg= 53661 -IFByZWx1ZGU= 53662 -T2ZmbGluZQ== 53663 -TGlzdGluZw== 53664 -LyoqLyou 53665 -IEpS 53666 -cGhhbnRz 53667 -Z2V0WQ== 53668 -LkZpbmRDb250cm9s 53669 -Ii4uLg== 53670 -0LrQtQ== 53671 -SFJFU1VMVA== 53672 -IGNoZWNrbGlzdA== 53673 -KGFzdA== 53674 -IGJvcnJvd2luZw== 53675 -4oCmYW5k 53676 -INCX 53677 -IHByb2N1cmVtZW50 53678 -LXRhc2s= 53679 -X2hhbA== 53680 -UGxheWxpc3Q= 53681 -LnN0YXI= 53682 -X1NVUFBPUlRFRA== 53683 -QVNN 53684 -JUE= 53685 -cmVzdHJpYWw= 53686 -INC40YHQvw== 53687 -IHBhZ2Vy 53688 -IERpYWJldGVz 53689 -IE1haGFy 53690 -dGFu 53691 -QWN0dWFsbHk= 53692 -Pi8v 53693 -IFhW 53694 -4KeN 53695 -IHNlamE= 53696 -LnZpc3VhbA== 53697 -a2tlcg== 53698 -XTsKCgo= 53699 -IHR5cGVOYW1l 53700 -LkJ1dA== 53701 -Q2xpZW50UmVjdA== 53702 -aWNhbHM= 53703 -IERqYW5nbw== 53704 -IFJhcGU= 53705 -IHBheWRheQ== 53706 -KHJlc291cmNlcw== 53707 -LmJpeg== 53708 -dG9p 53709 -KFJ1bnRpbWU= 53710 -IER5bmFtaWNz 53711 -IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24= 53712 -KHR5cGVz 53713 -IFRhYnM= 53714 -Lk1pZGRsZUxlZnQ= 53715 -eGFi 53716 -IF8o 53717 -IERyZWFtcw== 53718 -X0dyb3Vw 53719 -KGNvcg== 53720 -TGVhZGVy 53721 -IGdyYWR1YWw= 53722 -KEJpZ0RlY2ltYWw= 53723 -IHRleHRhcmVh 53724 -bGV0aW9u 53725 -IEZpbmlzaGVk 53726 -IFBvbGU= 53727 -IHRhcHBpbmc= 53728 -Jig= 53729 -IGZsaXJ0 53730 -IHRlcnJpZmllZA== 53731 -IHBhZHk= 53732 -ZXJlZw== 53733 -ZWxkb20= 53734 -IHN0YXRpb25hcnk= 53735 -IHBvbnk= 53736 -IFJFR0lTVEVS 53737 -X2FjY2Vs 53738 -IEhlcno= 53739 -IG1hdHJpeg== 53740 -IENhZg== 53741 -eGFj 53742 -YXNjdXM= 53743 -IGVubGFyZ2U= 53744 -QUNIRUQ= 53745 -eXl2YWw= 53746 -IHNpYw== 53747 -IENhbmFs 53748 -OnY= 53749 -PT8s 53750 -IEltcHJvdmVtZW50 53751 -P30iLA== 53752 -TlNPYmplY3Q= 53753 -IGVzY2FwaW5n 53754 -IE51bGxhYmxl 53755 -IGjDpA== 53756 -d2FudA== 53757 -RWxpbWluYXI= 53758 -IENMTG9jYXRpb24= 53759 -IHJldXNlSWRlbnRpZmllcg== 53760 -QnVmZmVyU2l6ZQ== 53761 -w59lcg== 53762 -IEFza2Vk 53763 -J11dLAo= 53764 -IHNoaWVsZHM= 53765 -Z3JhbmQ= 53766 -IFRvd25zaGlw 53767 -IFB1Yk1lZA== 53768 -ZWN0bA== 53769 -Zml2ZQ== 53770 -IFJlYWN0aXZlRm9ybXNNb2R1bGU= 53771 -IEdMZW51bQ== 53772 -RGFy 53773 -aWZhY2U= 53774 -LWluZGVudA== 53775 -Rm9ybXVsYQ== 53776 -LnNuYXBzaG90 53777 -Q09NUEFSRQ== 53778 -IGJlbHRz 53779 -CWNhY2hl 53780 -bGRhdGE= 53781 -IGVkYWQ= 53782 -IEJPWA== 53783 -KGNhcnQ= 53784 -X0xBWU9VVA== 53785 -IGZmbHVzaA== 53786 -IExPUw== 53787 -IFNvcnRlZA== 53788 -LnNsaWRl 53789 -IHRpamQ= 53790 -IFRleGFucw== 53791 -IFB1cmNo 53792 -IExldmVscw== 53793 -IHNlbWFudGljcw== 53794 -IFRlaHJhbg== 53795 -Ym1w 53796 -LnVybGVuY29kZWQ= 53797 -X3hsYWJlbA== 53798 -KGd1bHA= 53799 -IEJ1dHRvbnM= 53800 -IEJyb2tlcg== 53801 -55uR5ZCs 53802 -JGVtYWls 53803 -2ZA= 53804 -IGNsYXNzaWNz 53805 -Y29tcG9zZQ== 53806 -KGJz 53807 -IHVuaGVhbHRoeQ== 53808 -RXhlcmNpc2U= 53809 -Y3JldHM= 53810 -IFBhcnM= 53811 -IERldGVybWluZXM= 53812 -YWZvcnQ= 53813 -KG9icw== 53814 -IG5hc3Q= 53815 -IGlocmVu 53816 -IHJveWFsdHk= 53817 -c2VyaWFsaXplcg== 53818 -aWV1eA== 53819 -ICAgICAgICAgICAgICAgICAgICAgIAo= 53820 -ZXhlY3V0aW9u 53821 -IHZpZXdDb250cm9sbGVy 53822 -IHJlcHJv 53823 -LnBl 53824 -IGNhcGl0YWxpemU= 53825 -5Ye7 53826 -IHR1bm5lbHM= 53827 -LkRBVEE= 53828 -cGlyaXQ= 53829 -Q29sbGVjdGlvbnM= 53830 -KX19 53831 -IE9E 53832 -IGZ1enp5 53833 -SW1tZWRpYXRl 53834 -bGo= 53835 -Oz8+Ig== 53836 -W3Zhcg== 53837 -IHZvbGF0aWxpdHk= 53838 -cmVnbG8= 53839 -IHByb2xpZmVyYXRpb24= 53840 -IG9yYWNsZQ== 53841 -IEN2 53842 -IG51bmNh 53843 -UFJJTlRG 53844 -IGJyZWFrcG9pbnQ= 53845 -LkVO 53846 -IGJlc3Rlbg== 53847 -IHJlYmVsbGlvbg== 53848 -UGF1c2Vk 53849 -IGZsb3du 53850 -IHZpY2luaXR5 53851 -d3JpZ2h0 53852 -LGNw 53853 -aXNjaW5n 53854 -b3VjaGVycw== 53855 -QXNo 53856 -eWFy 53857 -IEVq 53858 -cmVwcmVzZW50ZWQ= 53859 -b2RpYw== 53860 -LmNyb3Nz 53861 -IGNyZWF0aW9ucw== 53862 -IFBhYmxv 53863 -ZmVzdA== 53864 -IEhpbHRvbg== 53865 -UmVwb3J0ZXI= 53866 -IERpbA== 53867 -aWxlbmFtZXM= 53868 -IGV4cGVuZGl0dXJlcw== 53869 -X0VESVRPUg== 53870 -IEFyaWFs 53871 -IHBsdW5n 53872 -IHVubmFtZWQ= 53873 -T3JFbHNl 53874 -IHJlY3JlYXRl 53875 -IEhlYXJ0cw== 53876 -PmFsZXJ0 53877 -LmdldFBhc3N3b3Jk 53878 -IE11c3Rhbmc= 53879 -Vks= 53880 -IGFjY29tcGxpc2htZW50cw== 53881 -QXBwZW5kaW5n 53882 -IENheQ== 53883 -IFVzZXJNb2RlbA== 53884 -IHN1YnN5c3RlbQ== 53885 -TGVnYWw= 53886 -eW5jaHJvbml6ZQ== 53887 -X1BFUk1JU1NJT04= 53888 -IEFwYXJ0bWVudA== 53889 -bGlnZQ== 53890 -IGFmZmlsaWF0aW9u 53891 -KERFQlVH 53892 -VHM= 53893 -IENvbG9yaW5n 53894 -IFdvaG4= 53895 -bmljZQ== 53896 -KGxpc3Rh 53897 -4LE= 53898 -cGxveW1lbnQ= 53899 -44G+44Gf 53900 -5aW9 53901 -c3Vic3Q= 53902 -J11dWyc= 53903 -YWJvbA== 53904 -PSdf 53905 -4KeN4KY= 53906 -b3JwaGlzbQ== 53907 -LmxpdGVyYWw= 53908 -IFBsdWc= 53909 -IG13 53910 -b21hbA== 53911 -ICInIiw= 53912 -dXNp 53913 -IHNpZ2hlZA== 53914 -aWN1bHR1cmFs 53915 -Lios 53916 -IFByb3N0aXQ= 53917 -KGNvbnNvbGU= 53918 -SVBMRQ== 53919 -IFRyYXA= 53920 -WFI= 53921 -IEVkaXRvckdVSUxheW91dA== 53922 -X3ZvY2Fi 53923 -IGluY29tcGF0aWJsZQ== 53924 -IHVuY29uc3RpdHV0aW9uYWw= 53925 -LWxh 53926 -IGVyb3RpcXVl 53927 -IGRlcHV0aWVz 53928 -cXVpc2l0aW9ucw== 53929 -bmV3VmFsdWU= 53930 -YWRpYQ== 53931 -IGh3bmQ= 53932 -Z2luZ3M= 53933 -IFZhcw== 53934 -IEluY3JlbWVudA== 53935 -IEZsaW50 53936 -YW1iaWE= 53937 -X1BvaW50 53938 -LWRpc3BsYXk= 53939 -IEZ1bm55 53940 -LnRvYXN0 53941 -LmRhcms= 53942 -QmluZGluZ3M= 53943 -IGRlc2NyaXB0aXZl 53944 -YXJlbmQ= 53945 -LlJldA== 53946 -IHJlY3Vyc2l2ZWx5 53947 -IE1r 53948 -IFRJTEU= 53949 -LmNyZWF0ZVRleHROb2Rl 53950 -IFJBVw== 53951 -IGluZmx1eA== 53952 -54mp 53953 -VG9r 53954 -LWJvYXJk 53955 -UmVjb3JkaW5n 53956 -U3RyZW5ndGg= 53957 -IHJhaW5mYWxs 53958 -KGRk 53959 -LmZ4bWw= 53960 -bmV0cw== 53961 -LkltYWdpbmc= 53962 -IEJJT1M= 53963 -XSsi 53964 -T0U= 53965 -IHJlc2lkZW5jeQ== 53966 -WkU= 53967 -V0I= 53968 -LnNwYW4= 53969 -X2RlZmluZWQ= 53970 -Qk9U 53971 -Pm51bGw= 53972 -Zm9ybURhdGE= 53973 -Q3BwTWV0aG9kSW5pdGlhbGl6ZWQ= 53974 -X1VTRVJT 53975 -IE5vdmVs 53976 -aW5za2k= 53977 -PntA 53978 -ZXR0bw== 53979 -bmF0dXJhbA== 53980 -IFN0cmljdA== 53981 -Onc= 53982 -LnNhZmU= 53983 -IHRvd2Vscw== 53984 -4bqtdA== 53985 -LmdzdWI= 53986 -66M= 53987 -aW5xdQ== 53988 -IGFpZGVz 53989 -IGluY29t 53990 -Z2V0dGVy 53991 -IHdhc2hlcg== 53992 -YWN0b3JpZXM= 53993 -IGdldHRlcnM= 53994 -bWl0ZQ== 53995 -X3NvdXJjZXM= 53996 -IGhhcm1sZXNz 53997 -IHVub3M= 53998 -cHJlaGVuc2l2ZQ== 53999 -IG5vZG8= 54000 -IGdlb2dyYXBoaWNhbA== 54001 -IFNlbGVjdExpc3Q= 54002 -LlNjcmlwdA== 54003 -LkVudW1z 54004 -IEVOVEVS 54005 -d2FsZA== 54006 -IEJhcm9u 54007 -IHBhcnRpY3Vs 54008 -LmN1cnJlbnRQYWdl 54009 -QFRyYW5zYWN0aW9uYWw= 54010 -W2xpbmU= 54011 -CWRlcw== 54012 -SmFzb24= 54013 -LmdldENvdW50 54014 -IFBlbm55 54015 -IFBheWxvYWQ= 54016 -c2hhcnA= 54017 -W3JpZ2h0 54018 -dmVudGE= 54019 -IGFwbA== 54020 -IHByb2R1aXRz 54021 -IG90dA== 54022 -VHJhY2tz 54023 -LkFuZHJvaWQ= 54024 -IHNpbGljb25l 54025 -IEVMU0U= 54026 -YW5pbWF0aW9ucw== 54027 -dWx0dXJlSW5mbw== 54028 -IGJsdWVwcmludA== 54029 -b2ZzdHJlYW0= 54030 -IFtdW10= 54031 -IFNlcnZl 54032 -IHRyaWc= 54033 -CXNlcnZpY2U= 54034 -IFN0cmF0 54035 -IFNhdmFnZQ== 54036 -IG9ianM= 54037 -IE5vdGlmaWNhdGlvbnM= 54038 -LHBvcw== 54039 -VGhpbmc= 54040 -IFJCSQ== 54041 -b3BhdGh5 54042 -IG5hdWdodHk= 54043 -bGJz 54044 -ZXByb20= 54045 -PiIu 54046 -IHBpb25lZXI= 54047 -IGphcGFuZXNl 54048 -QXVk 54049 -IGFsbGV5 54050 -IFBldHNj 54051 -J10/Pg== 54052 -IEtpbGxlcg== 54053 -LmdldEFic29sdXRlUGF0aA== 54054 -X2NhcHM= 54055 -xas= 54056 -IHN1YnN0cmF0ZQ== 54057 -LmFzc2VydElu 54058 -7JWE 54059 -IHRoeXJvaWQ= 54060 -IERlbHV4ZQ== 54061 -IGZhY3RvcmlhbA== 54062 -IHByZXNzZXM= 54063 -IEFjY29t 54064 -PW9wZW4= 54065 -LmdldFM= 54066 -IGV4cGxvcmVy 54067 -IHJlc2lkZXM= 54068 -QXNzb2NpYXRlZA== 54069 -IHRyYW5zZm9ybWF0aW9ucw== 54070 -VHU= 54071 -IFJpY2hhcmRz 54072 -X2JpcnRo 54073 -PSN7 54074 -LXNwZQ== 54075 -KG5k 54076 -IHZpc3VhbHM= 54077 -X3N0YW1w 54078 -IHRlcm1pbmFscw== 54079 -cm91dGluZQ== 54080 -KioqLwo= 54081 -IEphYg== 54082 -S0w= 54083 -Q29udHJpYg== 54084 -IHNvdXRod2VzdA== 54085 -IFBlcA== 54086 -CWVudGl0eQ== 54087 -IGxpbmVy 54088 -LlN0YXR1c09L 54089 -IFNjaHVs 54090 -KENM 54091 -IG1pam4= 54092 -YXN0b3M= 54093 -X2RpZ2VzdA== 54094 -IHBlcnNpc3RlZA== 54095 -LWNvbnRhY3Q= 54096 -IG9kb3I= 54097 -IGRpc2NvdmVyaWVz 54098 -X0ZJRUxEUw== 54099 -Rmx5 54100 -IHJ6 54101 -IExpc3Rh 54102 -UmVzZXJ2ZWQ= 54103 -dGF4b25vbXk= 54104 -KXNlY3Rpb24= 54105 -LyIpCg== 54106 -L3JlcXVlc3Q= 54107 -IHNvbWVkYXk= 54108 -Y2l0aWVz 54109 -L2ZpcmU= 54110 -IG9iamVjdGlvbnM= 54111 -CURFQ0xBUkU= 54112 -Lm5hdmlnYXRpb25JdGVt 54113 -LnNldGRlZmF1bHQ= 54114 -cmV0dXJuVmFsdWU= 54115 -VUNDRUVERUQ= 54116 -IG9ibGlnZWQ= 54117 -IFFhZWRh 54118 -IGh5c3Rlcg== 54119 -ZXN0aGVz 54120 -ZGlzdGluY3Q= 54121 -w6B5 54122 -IENvbWJv 54123 -CXNm 54124 -IOKK 54125 -IGRpc2NyZXBhbg== 54126 -IGluc2lnbg== 54127 -IFJFU1VMVFM= 54128 -IFZhbGlkYXRpb25FcnJvcg== 54129 -IEh0dHBSZXNwb25zZVJlZGlyZWN0 54130 -CVFTdHJpbmc= 54131 -IGF1dG9mb2N1cw== 54132 -RHVy 54133 -IFJFTEVBU0U= 54134 -LWRvbGxhcg== 54135 -LkNvbW1pdA== 54136 -IGtow7RuZw== 54137 -IGxhdW5kZXI= 54138 -Lj0i 54139 -IOaWhw== 54140 -IGJ5ZQ== 54141 -LkdldEtleURvd24= 54142 -IGdpbw== 54143 -X3NpZA== 54144 -IGdxbA== 54145 -LmNt 54146 -X1NMT1Q= 54147 -LkdldEluc3RhbmNl 54148 -cmV1c2U= 54149 -LnNodXRkb3du 54150 -IGplcnNleXM= 54151 -X01Q 54152 -cGF0aWJpbGl0eQ== 54153 -IOiuvue9rg== 54154 -IHJlcGxhY2VtZW50cw== 54155 -IHByZWNlZGVuY2U= 54156 -IGJ1ZmZlcmVk 54157 -LmJz 54158 -X0dSRUVO 54159 -YnJhaW4= 54160 -w6FjaA== 54161 -YXZhaWxhYmlsaXR5 54162 -IEVURg== 54163 -IGZyZXQ= 54164 -aXN0aW5l 54165 -IGxpZnRz 54166 -RXhpc3Rpbmc= 54167 -IHN0ZXJlb3R5cGVz 54168 -IGVtcHQ= 54169 -bW9uZ28= 54170 -LnRyYWluaW5n 54171 -YWxpc3Q= 54172 -LklzRW5hYmxlZA== 54173 -ICIh 54174 -PD8K 54175 -dWlkbw== 54176 -IGludFZhbHVl 54177 -LmVsYXN0aWNzZWFyY2g= 54178 -TE9HSU4= 54179 -IHJlbGlhbmNl 54180 -IHZpZXdUeXBl 54181 -IGRpbWluaXNoZWQ= 54182 -U2FyYWg= 54183 -IEFwcHJvYWNo 54184 -X1dFQg== 54185 -IGRybQ== 54186 -IGNvbHVtbmlzdA== 54187 -TWFya3Vw 54188 -IGFxdcOt 54189 -IERpYW5l 54190 -IGN3 54191 -IFRpY2s= 54192 -Lm9ic2VydmU= 54193 -SVJPTg== 54194 -SW5CYWNrZ3JvdW5k 54195 -IGVib255 54196 -IENvdXJ0ZXN5 54197 -Om51bGw= 54198 -KioqKioqKi8KCg== 54199 -L3Jlc291cmNl 54200 -SXRlcmF0aW9u 54201 -ZGVmYXVsdFZhbHVl 54202 -YXR0ZW50aW9u 54203 -INGA0LDQsdC+0YI= 54204 -IHdhaXZlcg== 54205 -IHByb2R1aXQ= 54206 -IEdyYWRpZW50 54207 -IHBlcmNlbnRhZ2Vz 54208 -IFNBTA== 54209 -IE1k 54210 -KHNuYXBzaG90 54211 -CWlv 54212 -aWtlcnM= 54213 -V2VicGFjaw== 54214 -IHNldFBhc3N3b3Jk 54215 -IGRlZmVhdGluZw== 54216 -IEplZw== 54217 -ZWxhcHNlZA== 54218 -aG9sZHM= 54219 -X3NoYWRvdw== 54220 -IG9mZmVuZGVk 54221 -IFBhbnQ= 54222 -IENhbGxhYmxl 54223 -X0lORk9STUFUSU9O 54224 -ZmZlZQ== 54225 -KGVtcGxveWVl 54226 -IFlBTUw= 54227 -cG9zc2libHk= 54228 -IG1heGltYWw= 54229 -ZWxsdWxhcg== 54230 -IFNueWRlcg== 54231 -ZGVzY3JpcHRvcg== 54232 -IFBMRUFTRQ== 54233 -RGxnSXRlbQ== 54234 -IGFydGlsbGVyeQ== 54235 -YH0K 54236 -cG9zaXVt 54237 -IGxlZXI= 54238 -JWM= 54239 -IGRpc3Bvcw== 54240 -Lm11bA== 54241 -IGdlb2dyYXBoeQ== 54242 -IGdyYXBoaWNhbA== 54243 -IGRyYW5r 54244 -IG1vdGlvbnM= 54245 -IHJ1dGg= 54246 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 54247 -IHByb2R1Y3Rpb25z 54248 -IGNyZWF0ZVRpbWU= 54249 -IFNjcmlwdHVyZQ== 54250 -YmJi 54251 -dWNocw== 54252 -5LiN6IO9 54253 -LkJpZ0RlY2ltYWw= 54254 -c2l6ZXM= 54255 -X3NvbHZlcg== 54256 -X0Zyb20= 54257 -X2pvaW50 54258 -IHBhdGhsaWI= 54259 -IGdlYXJz 54260 -INGE0L7RgNC8 54261 -IGNvbmNlYWw= 54262 -IGRpZmZlcmVudGlhdGU= 54263 -PEdhbWVPYmplY3Q= 54264 -IGplZGVu 54265 -IGFsbw== 54266 -Z2xvYmFscw== 54267 -ZXJ2YXRpdmU= 54268 -IHBhZGQ= 54269 -IFBseQ== 54270 -X3R5 54271 -IHByZXNlbnRl 54272 -IHByb3ByaWV0 54273 -X2xz 54274 -IFB1bmNo 54275 -IENyYXdmb3Jk 54276 -YmVsb3c= 54277 -Q3BwR2VuZXJpYw== 54278 -IENPTlRST0w= 54279 -IG9jZWFucw== 54280 -IFJPVVQ= 54281 -IHJhbmRpbnQ= 54282 -CWFkZHI= 54283 -IEhvbmVzdA== 54284 -IGVudmVsb3A= 54285 -IHRyYXVtYXRpYw== 54286 -IExBVA== 54287 -IHRn 54288 -7Iqk7Yq4 54289 -RXh0ZW5kZWQ= 54290 -IHVuY2hlY2tlZA== 54291 -IG9ic3RydWN0 54292 -X3RpbWV6b25l 54293 -UGVyc2lzdGVudA== 54294 -IGxsZXY= 54295 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 54296 -IEZsYQ== 54297 -LnBoeXNpY3M= 54298 -IGZvcmdlZA== 54299 -IExhdXI= 54300 -IG1vbm9wb2x5 54301 -IGNocmlzdG1hcw== 54302 -Z292 54303 -IFNtb2tl 54304 -W2Rm 54305 -IGJpc2hvcA== 54306 -bG9jYWxPYmplY3Q= 54307 -b3JyaA== 54308 -b250dmFuZ3N0 54309 -ZHJ5 54310 -IGVyZm9s 54311 -LWNl 54312 -IE9yZGVyZWREaWN0 54313 -IGh4 54314 -IFJFU0VU 54315 -U3Vj 54316 -IHJlY2tsZXNz 54317 -YWxhbWF0 54318 -QmlnSW50ZWdlcg== 54319 -IGJ1bGJz 54320 -IG11dGU= 54321 -5pS+ 54322 -LlVsdHJh 54323 -TG9u 54324 -IGNsZWFyVGltZW91dA== 54325 -PFJpZ2lkYm9keQ== 54326 -c3dpcGVy 54327 -IENvbWVz 54328 -XGRi 54329 -CW1w 54330 -IHJlc3Rz 54331 -TW92ZWQ= 54332 -IExvcmU= 54333 -LkRpbWVuc2lvbg== 54334 -IE1hbml0 54335 -Lmh4eA== 54336 -PT09PT09PQ== 54337 -cGl0Y2g= 54338 -ZmZpZWxk 54339 -c2tpbGxz 54340 -X2FsYnVt 54341 -dHJhbnNsYXRlZA== 54342 -IFhJ 54343 -IHZlaW4= 54344 -IERhdmlkc29u 54345 -IEF1Y2tsYW5k 54346 -eXNzZXk= 54347 -IGF1dGhlbnRpY2l0eQ== 54348 -IEFzc2lzdA== 54349 -IGNvbXByaXNl 54350 -Q3JlYXRlVGltZQ== 54351 -IHRyZW5jaA== 54352 -LndlZWs= 54353 -LS07 54354 -IFVJQWxlcnRDb250cm9sbGVy 54355 -X3JlbGF0ZWQ= 54356 -Q01T 54357 -cmVtZWx5 54358 -IGxleGVy 54359 -aXJtd2FyZQ== 54360 -RWxlbWVudHNCeQ== 54361 -LXVwcGVy 54362 -IHN0YWdu 54363 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 54364 -X3NuYXBzaG90 54365 -L1hNTFNjaGVtYQ== 54366 -X09yZGVy 54367 -IGFubmV4 54368 -X0VOQ09E 54369 -IEFsdG8= 54370 -YXJpb3Vz 54371 -REo= 54372 -IGFib3J0aW9ucw== 54373 -Q29tYmF0 54374 -IExpY2VuY2U= 54375 -dWdnZXN0ZWQ= 54376 -W0s= 54377 -LCkpCg== 54378 -KCcvLw== 54379 -LkNhbg== 54380 -c2Vjcw== 54381 -cXVvdGVz 54382 -X3RyeQ== 54383 -IFNhZ2U= 54384 -IE1vdg== 54385 -J29u 54386 -cmVnaXN0 54387 -IFdyaXRlcw== 54388 -IERpZ2VzdA== 54389 -CWNvbnRhaW5lcg== 54390 -LXByb2dyZXNz 54391 -IGdvYXQ= 54392 -X3NjaGVtZQ== 54393 -LkdldENoaWxk 54394 -IGFzeW0= 54395 -Lm15YmF0aXNwbHVz 54396 -YXRpY2E= 54397 -cGdzcWw= 54398 -X2Fzc2V0cw== 54399 -Pks= 54400 -IGFmaW4= 54401 -TlNT 54402 -IE5BVg== 54403 -KCcuJyw= 54404 -IGAi 54405 -IGF1ZGl0b3I= 54406 -X01PVVNF 54407 -IHdhbGxldHM= 54408 -IG1vdQ== 54409 -cnVucw== 54410 -ZXRlcmFuZ2Fu 54411 -IFJlc2VydmF0aW9u 54412 -IGV4cGVyaWVuY2lh 54413 -CXByb2Nlc3M= 54414 -LWltcG9ydA== 54415 -X1JldHVybg== 54416 -IE1hY3Jv 54417 -IFBlbmlz 54418 -cGl4ZWxz 54419 -IHNldEVtYWls 54420 -KE1pZ3JhdGlvbkJ1aWxkZXI= 54421 -KHhz 54422 -IEVzdG9u 54423 -IEJ1YmJsZQ== 54424 -QUxMT1c= 54425 -CWhhbmRsZXI= 54426 -JHJldA== 54427 -IGNvbXBsaW1lbnRhcnk= 54428 -LWNpdHk= 54429 -IGVsbG9z 54430 -IFNPVVJDRQ== 54431 -IEFkdmlzb3I= 54432 -b2xvZ8OtYQ== 54433 -IGZhZGVk 54434 -LnBj 54435 -X1JHQkE= 54436 -QUZY 54437 -IHJlcGF5 54438 -IEZhbGNvbnM= 54439 -X2lzc3Vl 54440 -b21pZG91 54441 -LmJhb21pZG91 54442 -IGluZnJpbmdlbWVudA== 54443 -dXJuaW5n 54444 -L3N0b3JhZ2U= 54445 -X3F1YW50 54446 -IFF0Q29yZQ== 54447 -IG1lbGw= 54448 -X2RlbnNpdHk= 54449 -IEtub3g= 54450 -IFN1cnZpdmFs 54451 -LmdldFVzZXJuYW1l 54452 -IGNvbW1lcmNpYWxseQ== 54453 -Z3Jhc3M= 54454 -IG1laXM= 54455 -5Lq/ 54456 -IFBlcm1pc3Npb25z 54457 -X1FVT1RFUw== 54458 -aXBob25l 54459 -IExPVA== 54460 -IHRocmlsbGVy 54461 -IENoYXBlbA== 54462 -IFJpcw== 54463 -Pmk= 54464 -LUlE 54465 -IHJpZ2h0bHk= 54466 -Q3J5cHQ= 54467 -IElzdGFuYnVs 54468 -cmVkcw== 54469 -X3Jlc2l6ZQ== 54470 -UG9wdWxhdGlvbg== 54471 -KGZldGNo 54472 -IEhPVA== 54473 -OmZpcnN0 54474 -IGdhZGdldHM= 54475 -UHlPYmplY3Q= 54476 -IG1lcmdpbmc= 54477 -ZHVjZWQ= 54478 -bGVnYXRlcw== 54479 -dWJlY3Rs 54480 -JS8= 54481 -YWxsZWU= 54482 -IHp1c2FtbWVu 54483 -LlByb3BUeXBlcw== 54484 -YXN0bw== 54485 -Oio= 54486 -cmVjZQ== 54487 -UmVzcG9uc2VUeXBl 54488 -L2dyb3Vw 54489 -IGJhcmJhcg== 54490 -IENhcm9saW5l 54491 -b3VyY2Vk 54492 -57uP 54493 -IGx1YnJpYw== 54494 -aW5zcGVjdGlvbg== 54495 -YW1tYWQ= 54496 -CUltYWdl 54497 -IGllcnI= 54498 -IGN1cnRhaW5z 54499 -X0FSQg== 54500 -IE9yYWw= 54501 -IGFsbGllZA== 54502 -IFN0YXR1c0NvZGU= 54503 -IENsZWFybHk= 54504 -UHJlZmVycmVkU2l6ZQ== 54505 -cXVpbmE= 54506 -IHNwb3M= 54507 -IG9wdGltaXNt 54508 -IGNvbXByYXI= 54509 -IGx1Zw== 54510 -IEJvb20= 54511 -Y29uZmlybWF0aW9u 54512 -X0RVUkFUSU9O 54513 -X2Jyb3dzZXI= 54514 -IHJlcGV0aXRpb24= 54515 -IGtlZXBlcg== 54516 -IGFkZFRv 54517 -KGpz 54518 -LlN0YXQ= 54519 -LkNvbmQ= 54520 -IEhlcm5hbmRleg== 54521 -cGFxdWU= 54522 -IHZvbHVudGFyaWx5 54523 -IGplcms= 54524 -IExleQ== 54525 -IGRvY3VtZW50bw== 54526 -X2RlYWQ= 54527 -IFRFQ0g= 54528 -IGluY2VwdGlvbg== 54529 -KCJ7fQ== 54530 -IG9uTG9hZA== 54531 -eGRk 54532 -IElTUA== 54533 -c3BlY2lmaWVk 54534 -IOusuA== 54535 -UFJPQ0VTUw== 54536 -KGFsZXJ0 54537 -Lk1N 54538 -IGNyZWF0ZVN0b3Jl 54539 -KHVuaXF1ZQ== 54540 -LmdldEJsb2Nr 54541 -656Y 54542 -dW5vcw== 54543 -IHRyb3BoaWVz 54544 -X2hvdmVy 54545 -IERhZGR5 54546 -Lk1l 54547 -IENPVVI= 54548 -T0JK 54549 -YXRlbWFsYQ== 54550 -IFBzaQ== 54551 -IG5vcm1hbHM= 54552 -YWNpZXI= 54553 -IE1CQQ== 54554 -IHBhd24= 54555 -z4U= 54556 -IHNwb250YW5lb3Vz 54557 -IGF1eGlsaWFyeQ== 54558 -IGluYXVndXJhbA== 54559 -IGZhc3Rpbmc= 54560 -IEZpbGVTeXN0ZW0= 54561 -IHplbg== 54562 -X0JMVUU= 54563 -IHN1YnRyZWU= 54564 -IHByZXByb2Nlc3M= 54565 -LXRyYWNr 54566 -Q2hhcmxlcw== 54567 -IGRlcG9zaXRlZA== 54568 -IHF1ZXJ5UGFyYW1z 54569 -0L7Qu9GM0LrQvg== 54570 -aWVtYnJl 54571 -IHByYXc= 54572 -eEZD 54573 -IHBhbmM= 54574 -X25vbQ== 54575 -aGVyb2Vz 54576 -Lmphdg== 54577 -OjokXw== 54578 -INin2YTZhQ== 54579 -U0dsb2JhbA== 54580 -5o+P6L+w 54581 -PXRlbXA= 54582 -ZXN0aQ== 54583 -IGNvbnN0cnVjdGl2ZQ== 54584 -IFNoaW0= 54585 -IERpcmVjdGlvbnM= 54586 -IEJpbmc= 54587 -ZGlydHk= 54588 -LXJ1bm5pbmc= 54589 -X2ZpbGVwYXRo 54590 -b3JkZXJJZA== 54591 -Z2FyZA== 54592 -X29yaWVudA== 54593 -IHNjb3V0 54594 -IHBzeWNob2xvZ2lzdA== 54595 -7LY= 54596 -IOWt 54597 -ZGVxdWU= 54598 -IEhlcm1pb25l 54599 -IFBvd2VyUG9pbnQ= 54600 -IGVsbGE= 54601 -IFVJQmFyQnV0dG9uSXRlbQ== 54602 -U3Vidmlld3M= 54603 -QFJlcG9zaXRvcnk= 54604 -IiIiCgoK 54605 -IHJldG91cg== 54606 -IGNpcmNh 54607 -R3JhcGhpYw== 54608 -IEdyYXR1aXQ= 54609 -ZGR5 54610 -IHRlY2huaWNpYW4= 54611 -IENsZWFudXA= 54612 -IHBlcnNvbm5l 54613 -IHJlc2lu 54614 -Lk11bHQ= 54615 -JG0= 54616 -IE9yY2hlc3RyYQ== 54617 -IHdoZWVsY2hhaXI= 54618 -LlND 54619 -CUdhbWVPYmplY3Q= 54620 -IG1vxbxl 54621 -T3BlbmVk 54622 -IGNoaWNrZW5z 54623 -b3Rhcw== 54624 -X3RlbXBlcmF0dXJl 54625 -IGRldGVjdGluZw== 54626 -IGFjcXVhaW50 54627 -IDw/PSQ= 54628 -Pl0= 54629 -IG1lbnN0cg== 54630 -IGR5ZQ== 54631 -Um9ib3Rv 54632 -LnVuaXRz 54633 -IFZpbnls 54634 -Y3VyYQ== 54635 -cnlwdG9u 54636 -ZWRk 54637 -PXRlc3Q= 54638 -IHRyb3Y= 54639 -Q29uZmlybWF0aW9u 54640 -IHRoZW9sb2d5 54641 -IEhvbGRpbmdz 54642 -dWF0aW5n 54643 -UHJlZGljdA== 54644 -W3VzZXI= 54645 -IDon 54646 -IFNlc3Nv 54647 -cGFyZW50SWQ= 54648 -Q29kZUF0 54649 -YWJibw== 54650 -IFRyZXZvcg== 54651 -IFF1aXQ= 54652 -X3NoaXBwaW5n 54653 -X1JB 54654 -IGtsZWluZQ== 54655 -56Y= 54656 -X0xhYmVs 54657 -IE9tYXI= 54658 -IEdSRUVO 54659 -LykK 54660 -cm9r 54661 -IHJvYXN0ZWQ= 54662 -X1JU 54663 -IOKAjg== 54664 -QFJ1bldpdGg= 54665 -Pk5O 54666 -IHRhbmQ= 54667 -Kycu 54668 -Y3J1ZA== 54669 -LmtleWJvYXJk 54670 -YXN0ZXJ5 54671 -QkFE 54672 -IENvbHVtbnM= 54673 -LkNvbXBhbnk= 54674 -IHNlbWluYXI= 54675 -IGdldENvbnRlbnRQYW5l 54676 -IGNhdGFzdHJvcGhpYw== 54677 -IGVtYnJvaWQ= 54678 -aWF0aXZl 54679 -IGNydWVsdHk= 54680 -Ymlz 54681 -IGluc2U= 54682 -IEJyb2tlbg== 54683 -CWZz 54684 -IG1WaWV3 54685 -0LDRhtC40Lg= 54686 -LWZhY2Vib29r 54687 -IGNhY2hlcw== 54688 -44CC44CCCgo= 54689 -IE9STQ== 54690 -IERpc3RyaWI= 54691 -IFNjZW5lTWFuYWdlcg== 54692 -X3RyYW5zaXRpb24= 54693 -b21leg== 54694 -IFNIRQ== 54695 -IHdvcmtsb2Fk 54696 -U3VwcG9ydGVkRXhjZXB0aW9u 54697 -IHJpZXM= 54698 -IOWc 54699 -KGNhdA== 54700 -SGFzTWF4TGVuZ3Ro 54701 -QXBwcw== 54702 -LlRBQkxF 54703 -IEtleVZhbHVlUGFpcg== 54704 -ZWRpZG8= 54705 -LlJlbmRlcmluZw== 54706 -IGVsZWN0cm9t 54707 -IGFyYml0cmF0aW9u 54708 -IHZhcmlhYmlsaXR5 54709 -YXBvbGxv 54710 -IHV0bW9zdA== 54711 -b3BlbnNzbA== 54712 -IGjDpQ== 54713 -KCcm 54714 -LlN0YW5kYXJk 54715 -IGRpc3RyYWN0aW9u 54716 -aWZheA== 54717 -IOuVjA== 54718 -dGhvc2U= 54719 -aXNwZW5z 54720 -dmFr 54721 -IFNVUA== 54722 -IElzUGxhaW5PbGREYXRh 54723 -LGtleQ== 54724 -ZnJhZ2lzdGljcw== 54725 -IEpveWNl 54726 -IEZpYmVy 54727 -LlNlcnZsZXRFeGNlcHRpb24= 54728 -X0FsbA== 54729 -IGJhY2tlcnM= 54730 -IEF0dHJpYnV0ZUVycm9y 54731 -ewoKCg== 54732 -QHlhaG9v 54733 -LWRpcmVjdG9yeQ== 54734 -IHVuaW5zdGFsbA== 54735 -IGZsdW9y 54736 -bGlxdWlk 54737 -IGzDoQ== 54738 -IGZyaWdodGVuaW5n 54739 -YWRhbg== 54740 -IEFVVA== 54741 -IHRhdHRvb3M= 54742 -IHByb3BhZ2F0aW9u 54743 -LnRyYW5zbGF0aW9u 54744 -0J/RgA== 54745 -X3NjaGVkdWxlcg== 54746 -44CC4oCc 54747 -IGNhaXJv 54748 -IEh0dHBDbGllbnRNb2R1bGU= 54749 -IE5EUA== 54750 -IEhpdHM= 54751 -IFRyYW5zZm9ybWF0aW9u 54752 -IENhZXNhcg== 54753 -c3RpbQ== 54754 -IEJ1cnRvbg== 54755 -d3lu 54756 -IGNvbW1hbmRlZA== 54757 -IENsb3RoaW5n 54758 -IFJ1bnRpbWVPYmplY3Q= 54759 -cmVhbGx5 54760 -Y2xh 54761 -LnNh 54762 -IFNoYW5ub24= 54763 -IGNvbW1pc3Npb25z 54764 -IEphbmV0 54765 -IGRpc2d1c3Rpbmc= 54766 -IG9wdGltdW0= 54767 -X3NvbA== 54768 -dXJvbnM= 54769 -IFNIQVJF 54770 -QXR0cnM= 54771 -IFNjaGU= 54772 -IEJpZ051bWJlcg== 54773 -IGNpZ2Fy 54774 -KGRlcHRo 54775 -IGZyYWM= 54776 -IEN1cnZl 54777 -TEFTVA== 54778 -IFNDUklQVA== 54779 -6rO8 54780 -TWFsbG9j 54781 -Lmdyb3VwYnk= 54782 -IExlc2xpZQ== 54783 -IHdoaWNoZXZlcg== 54784 -U21hcnR5 54785 -L3dl 54786 -IEFtcA== 54787 -LGlu 54788 -bG9wcw== 54789 -ZGVwZW5kZW5jeQ== 54790 -Y2VkdXJlcw== 54791 -IGB7 54792 -eGljbw== 54793 -Q29sbGVjdG9y 54794 -IGhhYw== 54795 -IERhcmtuZXNz 54796 -ZmZmZmZmZmY= 54797 -Jz0+Ig== 54798 -IHBsZWFzaW5n 54799 -Y29ubmVjdG9y 54800 -em9z 54801 -UENJ 54802 -dmFj 54803 -IEluY29ycG9y 54804 -IG5lZA== 54805 -X0ZBQ1RPUg== 54806 -LmZi 54807 -IG91bmNl 54808 -X3NhdmVk 54809 -INix 54810 -IGRlZWRz 54811 -IERvbHBoaW5z 54812 -IGJ1ZW4= 54813 -RVND 54814 -LHRpbWU= 54815 -X0FVVA== 54816 -ZWNz 54817 -IFNlbmF0b3Jz 54818 -Lm91dGVy 54819 -IFNlbGxpbmc= 54820 -IHJpbg== 54821 -PmAK 54822 -Lm9ic2VydmFibGU= 54823 -IGNvc3Rpbmc= 54824 -REc= 54825 -IHdpbmRpbmc= 54826 -IHNrYQ== 54827 -IGNpcmN1bGF0aW5n 54828 -IGZvcm1pZGFibGU= 54829 -YW1wbw== 54830 -IFJhaXNlZA== 54831 -IHZlZ2V0YXRpb24= 54832 -VUZGSVg= 54833 -S2lsbA== 54834 -cHRpdmU= 54835 -KHJ2 54836 -IENvdW50cmllcw== 54837 -IE5ha2Vk 54838 -IEpB 54839 -KSkiCg== 54840 -dWRhcw== 54841 -IGJhcms= 54842 -CWxldmVs 54843 -IGZvZXM= 54844 -PkFkZA== 54845 -WW91VHViZQ== 54846 -O3Q= 54847 -TkNZ 54848 -Q2x1Yg== 54849 -RWlu 54850 -LS0NCg== 54851 -IGNvbnN0cmFpbmVk 54852 -RVR3aXR0ZXI= 54853 -WUc= 54854 -RGVzY3JpcGNpb24= 54855 -VU5DSA== 54856 -IGVucXVldWU= 54857 -IGRpc2tz 54858 -IFdlbnQ= 54859 -IG11aXQ= 54860 -CWxvY2F0aW9u 54861 -IHJldmlzaW9ucw== 54862 -IEFDSw== 54863 -LWZpeGVk 54864 -dHJhc291bmQ= 54865 -XFRlc3Q= 54866 -U3RhcnRQb3NpdGlvbg== 54867 -LWh0bWw= 54868 -IHByb2JsZW1hcw== 54869 -X0lOVEVSUlVQVA== 54870 -IFNUT1JF 54871 -5qih 54872 -aWxpYXRlZA== 54873 -IFJQTQ== 54874 -W3RlbXA= 54875 -YWNodGVu 54876 -IGNpYw== 54877 -IEF1dG9tYXRpb24= 54878 -IGhpZ2hz 54879 -Lyg/ 54880 -OicpCg== 54881 -c3Bhcms= 54882 -cmVscw== 54883 -CW1vdg== 54884 -VVRFUw== 54885 -LkF1dGhvcml6YXRpb24= 54886 -IFNjaG5laWRlcg== 54887 -IGNoZWVrcw== 54888 -YWRkcmVzc2Vz 54889 -YXJkaW4= 54890 -IHJlbW92YWJsZQ== 54891 -LkJhZFJlcXVlc3Q= 54892 -aWNpb25hcg== 54893 -IERpZXNlbA== 54894 -dGhhbg== 54895 -L34= 54896 -IGRhenU= 54897 -UmVnaXN0cm8= 54898 -ZmZp 54899 -X0RMTA== 54900 -IG5pZXU= 54901 -IG1vaXN0dXI= 54902 -LWV2ZW50cw== 54903 -IHRocmlsbA== 54904 -LmdldEVudGl0eQ== 54905 -IHRvZ2c= 54906 -IHdhdg== 54907 -KWRpZA== 54908 -YXRr 54909 -KHN1YnN0cg== 54910 -IEluamVjdGlvbg== 54911 -X21i 54912 -LkRpdg== 54913 -IGVuZGVhdm9y 54914 -ICjCow== 54915 -IGNsdXR0ZXI= 54916 -IHVyZ2VuY3k= 54917 -IGluc3RydWN0b3Jz 54918 -LScs 54919 -LXN0YW5kYXJk 54920 -Y2Vt 54921 -CWhhbmRsZQ== 54922 -LmZ0 54923 -U3RlcGhlbg== 54924 -Um9u 54925 -44GZ44KL 54926 -c2Np 54927 -IEF0bW9z 54928 -IGNhdGVyaW5n 54929 -IGZpYXQ= 54930 -LlBlcmNlbnQ= 54931 -IENvbmdv 54932 -eGRm 54933 -Lm1vemlsbGE= 54934 -IHNlaGVu 54935 -LnNob3dUb2FzdA== 54936 -T09U 54937 -LXJlc3VsdA== 54938 -zIE= 54939 -IGdob3N0cw== 54940 -IEJ1ZW4= 54941 -IFJpZGVy 54942 -IERvY3RvcnM= 54943 -IHVyYW5pdW0= 54944 -IGxvdWRseQ== 54945 -IHBvaXNlZA== 54946 -IGZhdm9ycw== 54947 -KEFQ 54948 -TEVZ 54949 -IHNpY2tuZXNz 54950 -IGNoYXR0ZQ== 54951 -IGludGVncmF0aW5n 54952 -IFl1cA== 54953 -Q2xvc3VyZQ== 54954 -IFRhbGVz 54955 -IGxpbmVh 54956 -IGV5ZWw= 54957 -LkNyeXB0b2dyYXBoeQ== 54958 -dW5leHBlY3RlZA== 54959 -YWxlbWVudA== 54960 -Y2l0 54961 -ZXRBZGRyZXNz 54962 -TGVhZA== 54963 -eGNk 54964 -X25lZ2F0aXZl 54965 -X2NvcnI= 54966 -aWdyYXBo 54967 -LWNoYW5uZWw= 54968 -IGRpc2Nv 54969 -U2VlZGVy 54970 -YmVhbQ== 54971 -X2Rw 54972 -Q0ND 54973 -IFByb3ZpZGVk 54974 -IGpzb25EYXRh 54975 -X1dI 54976 -RklORQ== 54977 -Qlg= 54978 -LkRhdGFBY2Nlc3M= 54979 -IHRlbXB0ZWQ= 54980 -IGZpbmVk 54981 -aXNDaGVja2Vk 54982 -IGZyYXVkdWxlbnQ= 54983 -RnJp 54984 -IGRvbWlj 54985 -UXVpeg== 54986 -IFVuZGVyZ3JvdW5k 54987 -YWJyYXM= 54988 -IElEaXNwb3NhYmxl 54989 -IFBlcnNvbmE= 54990 -IHJvZ3Vl 54991 -IEJleQ== 54992 -Z2V0Q2xpZW50 54993 -ZWtlbg== 54994 -ICcnJw0K 54995 -V2lraQ== 54996 -KEh0dHBTdGF0dXM= 54997 -U3RyZXRjaA== 54998 -IEdlc3Q= 54999 -IO2VmA== 55000 -IGVudGl0bGVtZW50 55001 -IGRvZW4= 55002 -YmxvZ3M= 55003 -IHZpdHJv 55004 -Ik9o 55005 -IFN1bW1vbg== 55006 -IEJhY2tib25l 55007 -IGfDvA== 55008 -Z2V0Q29sdW1u 55009 -IFdJTkFQSQ== 55010 -CXZh 55011 -X1JFUVVJUkVE 55012 -LnRocm93 55013 -IHNldEN1cnJlbnQ= 55014 -ZHVjdGVk 55015 -KEZ1bmN0aW9u 55016 -ZWxzaW5raQ== 55017 -X1Blcg== 55018 -ZmxpZXM= 55019 -IGluY29tcGV0 55020 -IGp1xbw= 55021 -KCkl 55022 -IC0tLQo= 55023 -dW1hcw== 55024 -IE9sZGVy 55025 -IGRpc3B1dGVk 55026 -X1JFUVVJUkU= 55027 -Lm1hdG11bA== 55028 -dW5rZW4= 55029 -5LmL 55030 -44GL44KJ 55031 -IHR0bA== 55032 -dW5kZXJzY29yZQ== 55033 -IFBhdHJpY2lh 55034 -IHRhcGVy 55035 -IHNlaW5lcg== 55036 -IHNheWE= 55037 -5Y+w 55038 -aWVyaQ== 55039 -LnNlY3JldA== 55040 -IHhvcg== 55041 -IG1pdG9jaG9uZA== 55042 -IGNhcmRib2FyZA== 55043 -fWB9 55044 -LUJFR0lO 55045 -IGRhdmlk 55046 -b3Vsb3M= 55047 -IFBldGVyc2J1cmc= 55048 -ICIiLA0K 55049 -c2hlbGY= 55050 -LXdhdGVy 55051 -LWJ5dGU= 55052 -INC+0LHRitC10LrRgg== 55053 -IHN0aXJyaW5n 55054 -7Je0 55055 -IGNvbXB0 55056 -IFBvdGVudGlhbA== 55057 -UkFGVA== 55058 -IGVhcHBseQ== 55059 -IHN3aW5naW5n 55060 -IGZlYw== 55061 -QVJB 55062 -IHdhbmRlcmluZw== 55063 -IHByZWZlcnM= 55064 -SmVzdXM= 55065 -IHBpcmF0ZQ== 55066 -IElzaXM= 55067 -Lk1pbmltdW0= 55068 -IFZhbGU= 55069 -X0JU 55070 -cmVuY2hlZA== 55071 -Y29ycw== 55072 -KGl0ZW1WaWV3 55073 -IGfDpQ== 55074 -LkNvbnRhY3Q= 55075 -Vmlld0NoaWxk 55076 -aW5kc2F5 55077 -Y29uZmlncw== 55078 -RHVwbGljYXRl 55079 -4oCmSQ== 55080 -enlzdA== 55081 -KHRvZG8= 55082 -LlJlbW92ZUF0 55083 -X0RJRkY= 55084 -IEJvdHRsZQ== 55085 -IHZvbHRh 55086 -dHJhZmZpYw== 55087 -TGVl 55088 -IOyk 55089 -IHR1bmVz 55090 -IEVjdWFkb3I= 55091 -IFl1bg== 55092 -IHVuZGVyd2VudA== 55093 -aWNvbQ== 55094 -ICcnKXsK 55095 -LXBvbA== 55096 -ZmxhbW1hdG9yeQ== 55097 -TXV0YXRpb24= 55098 -IHJlY2Fw 55099 -X3ZlcnQ= 55100 -T1RJT04= 55101 -Q0RBVEE= 55102 -aWNpbmU= 55103 -X2JvdW5kYXJ5 55104 -U2NhbGFycw== 55105 -IFVsdGltYXRlbHk= 55106 -RVE= 55107 -bWV0YWw= 55108 -a3Nlcw== 55109 -bXBs 55110 -IGNvbnRlbg== 55111 -U29sZA== 55112 -RVNTQUdFUw== 55113 -IGJpbmRlcg== 55114 -IGxpbmVu 55115 -IE15QXBw 55116 -LW1ldGE= 55117 -CXJhaXNl 55118 -b3VsdHJ5 55119 -CW1vZHVsZQ== 55120 -5pi+56S6 55121 -bsOt 55122 -IHlycw== 55123 -IHBoeXNpYw== 55124 -LXBsYXRmb3Jt 55125 -IHN3aW5nZXJz 55126 -KGhlYWRlcnM= 55127 -Licp 55128 -IEJV 55129 -IEluY29udHJp 55130 -U2NlbmFyaW8= 55131 -QW1i 55132 -IHByZW1pw6hyZQ== 55133 -L2FydGljbGVz 55134 -IE1ham9yaXR5 55135 -Q0xVU0lWRQ== 55136 -b25vcg== 55137 -IGhhYsOtYQ== 55138 -5bee 55139 -IG1pZGk= 55140 -IExhYw== 55141 -LmZpbmRJbmRleA== 55142 -IFBhaW50aW5n 55143 -LmJvcmRlckNvbG9y 55144 -Kmo= 55145 -IGNvbmdlc3Rpb24= 55146 -X0RJQ1Q= 55147 -b2xsZQ== 55148 -YXJuYXRpb24= 55149 -KHRleHR1cmU= 55150 -IHVm 55151 -IEVpbnN0ZWlu 55152 -KFRocmVhZA== 55153 -IGluZG9vcnM= 55154 -c2NyYXRjaA== 55155 -IG1ha2Vu 55156 -LlNUQVJU 55157 -IEp1ZHk= 55158 -Zm9ydW1z 55159 -CgoKCgoKCgoK 55160 -QklMRQ== 55161 -IHZvdQ== 55162 -TVlTUUw= 55163 -IGdlcm5l 55164 -IEltcG9ydEVycm9y 55165 -IFN1cnJl 55166 -PG5hdg== 55167 -IERpZXNl 55168 -ZXdhcmU= 55169 -IOuqqA== 55170 -aW1wbGVtZW50ZWQ= 55171 -U0lHTg== 55172 -ICd7QA== 55173 -cnpl 55174 -Lm1pbmVjcmFmdGZvcmdl 55175 -LmlubmVySGVpZ2h0 55176 -YmVjaw== 55177 -IGN1cnJ5 55178 -IGZvcm11bGFz 55179 -YWdvZw== 55180 -ZW5kZXQ= 55181 -IFBhaWQ= 55182 -IFJvYmVydG8= 55183 -IHVucGFpZA== 55184 -PWhlYWRlcnM= 55185 -LlBvd2Vy 55186 -IGJyZWQ= 55187 -b3JFbHNl 55188 -b3hpZGU= 55189 -IGZpbmFsaXpl 55190 -c2V0Q29sb3I= 55191 -IFN0YWR0 55192 -KCdcXA== 55193 -aXNtaWM= 55194 -IGhlbGU= 55195 -LlByb3RvY29s 55196 -Lkhvc3Rpbmc= 55197 -X01lbnU= 55198 -X2NvbmRpdGlvbnM= 55199 -IHB1cmdl 55200 -LnhhbWw= 55201 -YmFyZQ== 55202 -RlJBTUU= 55203 -IGN1YmVz 55204 -IEpvaGFubmVz 55205 -b2NyYXRz 55206 -LkRpcmVjdG9yeQ== 55207 -KWE= 55208 -Pyk6 55209 -X0xJQlJBUlk= 55210 -IGdldFRva2Vu 55211 -IGVjaG9lZA== 55212 -PWg= 55213 -X3NvYw== 55214 -IEV2YWx1YXRl 55215 -IOq4sA== 55216 -IERlbGV0ZWQ= 55217 -RXU= 55218 -IGNsb25lZA== 55219 -c3RhdGlzdGljcw== 55220 -LkNhbnZhcw== 55221 -IGhhY2tlcg== 55222 -IGdhbmdz 55223 -LnJlc3VtZQ== 55224 -cGVhY2U= 55225 -0JLQstC10LTQuNGC0LU= 55226 -IFByb2NlZWRpbmdz 55227 -56U= 55228 -IGphcGFu 55229 -ID8+Pgo= 55230 -ICR7KHs= 55231 -LnJlY3RhbmdsZQ== 55232 -Z3c= 55233 -IE9yaWVudGF0aW9u 55234 -JW0= 55235 -LiIpKTsK 55236 -IExpZXV0ZW5hbnQ= 55237 -LnRydWU= 55238 -IGVsdA== 55239 -IERJUkVDVE9SWQ== 55240 -zq8= 55241 -LmRheXM= 55242 -dXR0Z2FydA== 55243 -IHVuZGVyd2Vhcg== 55244 -LCkK 55245 -Q0lE 55246 -aW1lbGluZQ== 55247 -IEJsZW5k 55248 -cGhhc2lz 55249 -IHBlcnNl 55250 -IGdsaXR0ZXI= 55251 -IHVuaXE= 55252 -IENvbWJvQm94 55253 -IHNlc3Npb25JZA== 55254 -dXN0ZXJpdHk= 55255 -SURHRQ== 55256 -0L7QsdGJ 55257 -0KQ= 55258 -cmVuZGVycw== 55259 -X3Bvc2l0aXZl 55260 -X3Nsb3Rz 55261 -YnJvYWRjYXN0 55262 -IE1vbGQ= 55263 -L0NvcmU= 55264 -IEJhbm5vbg== 55265 -VG9vbEJhcg== 55266 -YWJlbGxl 55267 -X2F3 55268 -b2xlY3VsZQ== 55269 -IGRlbGV0ZXM= 55270 -IMOhcmVh 55271 -IHByb3BvcnRpb25hbA== 55272 -TVc= 55273 -IHdhcnk= 55274 -IGludGVybWVkaQ== 55275 -ICoqKioqKioqKioqKioqKioqKioqKioqKg== 55276 -LlNUQVRVUw== 55277 -X3R3 55278 -IGFyb21h 55279 -IGFjdGl2aXNt 55280 -LklzTm90TnVsbA== 55281 -dWF0 55282 -IHBvc3REYXRh 55283 -IHBlbQ== 55284 -X2N0b3I= 55285 -IFJhcGlkcw== 55286 -LW9mZnNldG9m 55287 -IGluZWZmZWN0aXZl 55288 -IG9uRGVzdHJveQ== 55289 -IE1ldHJpY3M= 55290 -IHBhZGRpbmdMZWZ0 55291 -LWVuYWJsZWQ= 55292 -IEdvYWxz 55293 -eW5jaHJvbm91c2x5 55294 -IHllcg== 55295 -SXRlbUF0 55296 -IE1ZU1FM 55297 -Y2Vzbw== 55298 -LktpbmQ= 55299 -dGVj 55300 -KGJ1bmRsZQ== 55301 -IHJlZmVyZWU= 55302 -LiI7DQo= 55303 -IGNvbmV4 55304 -IGJpa2luaQ== 55305 -X0FQUExJQ0FUSU9O 55306 -IHN3ZWxsaW5n 55307 -IGJlYWRz 55308 -IGJhcmdhaW5pbmc= 55309 -LS0tLS0tLS0tLS0KCg== 55310 -IGtpdGE= 55311 -KmZ0 55312 -TWluaQ== 55313 -IFRvbmlnaHQ= 55314 -IG1hbmlwdWxhdGVk 55315 -TWlycm9y 55316 -IFBvc3RhbA== 55317 -IG1hcmU= 55318 -RFc= 55319 -IGNvbXBpbGluZw== 55320 -IGZvcmVuc2lj 55321 -LmdldFZpZXc= 55322 -ZXBpbmc= 55323 -Q29z 55324 -IGFjY3JlZGl0ZWQ= 55325 -IG9iamV0aXZv 55326 -Y2FyZXQ= 55327 -UGFpcnM= 55328 -KT4+ 55329 -IHNlw7E= 55330 -IHF1b3RhdGlvbg== 55331 -IEJyYW5kcw== 55332 -dWJp 55333 -eXB5 55334 -IElubGluZQ== 55335 -aW1ldGVycw== 55336 -V2ludmFsaWQ= 55337 -CWxpbms= 55338 -IEJlbGZhc3Q= 55339 -IE1lYXN1cmVtZW50 55340 -X05PVElGSUNBVElPTg== 55341 -IHJveQ== 55342 -IENHQ29udGV4dA== 55343 -IHdlZGRpbmdz 55344 -VVJOUw== 55345 -IHBvZGNhc3Rz 55346 -IFNlcmc= 55347 -IOuNsOydtO2EsA== 55348 -IGVhcm5lc3Q= 55349 -Y292ZXJhZ2U= 55350 -aXRlRGF0YWJhc2U= 55351 -RW1wbG95ZWVz 55352 -IERlbWFuZA== 55353 -IGNvbnRlbmlkbw== 55354 -IFFWZWN0b3I= 55355 -IiwiXA== 55356 -IEdlcmFsZA== 55357 -KClg 55358 -IGdyaWRCYWdDb25zdHJhaW50cw== 55359 -UkVTT1VSQ0U= 55360 -IFNhZw== 55361 -YWJpbGlkYWQ= 55362 -IGNvZXJj 55363 -b3VuY2VtZW50cw== 55364 -IElzbGU= 55365 -LmVkZ2U= 55366 -IGV4dGVy 55367 -KV1b 55368 -IFBsYXlsaXN0 55369 -IEJsaW5k 55370 -IFZpdGFs 55371 -IGxhdHRpY2U= 55372 -cmF0ZWQ= 55373 -ZGVwZW5kZW5jaWVz 55374 -IGBgYA== 55375 -IEthbmc= 55376 -bWFjaA== 55377 -LmZhZGU= 55378 -IEd1ZXNz 55379 -Kls= 55380 -TmF0dXJhbA== 55381 -Lk9r 55382 -IFJlbmFpc3NhbmNl 55383 -IHRodWlz 55384 -IGxpa2Vu 55385 -Kmg= 55386 -XCcs 55387 -LWNsb2Nr 55388 -IE9iamVjdGl2ZQ== 55389 -ZmluZE9yRmFpbA== 55390 -IERpcnR5 55391 -IHNjYW5k 55392 -IFZBUklBQkxF 55393 -IGNvbXBhcmF0aXZl 55394 -eXBhZA== 55395 -KFNvdXJjZQ== 55396 -ZWNv 55397 -IGp1c3F1 55398 -CWFwaQ== 55399 -QnVpbHQ= 55400 -ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 55401 -IGxhYmVsaW5n 55402 -IGhlYWRhY2hlcw== 55403 -IG11ZmY= 55404 -IE9yY2g= 55405 -IGhhdGVz 55406 -LWJyZWFraW5n 55407 -L2J1dHRvbg== 55408 -IEJ1eWluZw== 55409 -TWV0cmlj 55410 -IHVuc3BlY2lmaWVk 55411 -L2hlYWQ= 55412 -IHN0aW5n 55413 -IHJlaW5mb3JjZQ== 55414 -IENvbVZpc2libGU= 55415 -Ymxpbms= 55416 -IEFobWFk 55417 -ZGJn 55418 -X2xibA== 55419 -IGh0dA== 55420 -7JuQ 55421 -cm9wb2xpcw== 55422 -ICgoX18= 55423 -IHBlcm1l 55424 -IGFwcGFyZWw= 55425 -U1RSRUFN 55426 -Y2h0cw== 55427 -IHNlaW5z 55428 -ZmlsbFR5cGU= 55429 -7KO8 55430 -Uk9XU0VS 55431 -dW1waW5n 55432 -IE5pZ2VyaWFu 55433 -4oCUaXM= 55434 -X2xvZ2lj 55435 -Lk9yZGluYWw= 55436 -bG9zdA== 55437 -L3Vzcg== 55438 -QWY= 55439 -IEl0ZXJhdGU= 55440 -aWJz 55441 -YWFs 55442 -IHN5bW1ldHJpYw== 55443 -LGlucHV0 55444 -IFBMTA== 55445 -dXppb25l 55446 -Y2FwdGNoYQ== 55447 -IFRhbGU= 55448 -RXhwaXJlZA== 55449 -IE9iamVjdE1hcHBlcg== 55450 -Y2lkbw== 55451 -LmdldE5leHQ= 55452 -IG1lbmphZGk= 55453 -OnNlbGVjdGVk 55454 -IHJpZW4= 55455 -X3NlbmRlcg== 55456 -UHdk 55457 -IEZsaWNrcg== 55458 -LkphdmE= 55459 -X3ZvdGU= 55460 -X01vZGU= 55461 -LiR7 55462 -IGZ1Y2tz 55463 -IEFsaWJhYmE= 55464 -IGluc2lkZXI= 55465 -YWNpbWllbnRv 55466 -IGZyYW7Dp2Fpcw== 55467 -SlNPTkV4Y2VwdGlvbg== 55468 -IEp3dA== 55469 -TWl0 55470 -bGVpY2g= 55471 -IHByYWN0aXRpb25lcg== 55472 -L3NvdXJjZQ== 55473 -IG9nbmk= 55474 -IHBoaWxvc29waGVy 55475 -U25hY2tCYXI= 55476 -c3RlbGx1bmc= 55477 -KGJpdG1hcA== 55478 -IGFzdGVyb2lk 55479 -IG1hcGxl 55480 -dWNoYQ== 55481 -aXRlbUlk 55482 -IHN0ZWh0 55483 -T3JkZXJlZA== 55484 -ZW5idXJn 55485 -L3Rva2Vu 55486 -6YWN 55487 -IFdlYmI= 55488 -b3dhbmll 55489 -IFdBSVQ= 55490 -IEhEUg== 55491 -IEV2YQ== 55492 -QVRUTEU= 55493 -KG1hc3Rlcg== 55494 -IGVycw== 55495 -YWxvYWQ= 55496 -IHNtdHA= 55497 -dW5pcQ== 55498 -IGd1aXQ= 55499 -IFJhZmFlbA== 55500 -Imlu 55501 -KFVJ 55502 -KExheW91dEluZmxhdGVy 55503 -b3Jhbg== 55504 -IHNlcnZp 55505 -bmV6 55506 -IFRvcnJlcw== 55507 -Lk1pZGRsZUNlbnRlcg== 55508 -IG1vbGw= 55509 -IFRleHRBbGlnbg== 55510 -X3VwbG9hZGVk 55511 -IE1laHI= 55512 -IGhvbW8= 55513 -LWxpbmtlZA== 55514 -dW5uZXI= 55515 -X2xlbmd0aHM= 55516 -IGRpZmZ1c2U= 55517 -IEF1dG9tb3RpdmU= 55518 -WWVhcnM= 55519 -IGxpZW4= 55520 -W2NvdW50ZXI= 55521 -a2xhc3M= 55522 -0YHRgtC4 55523 -LkVuZ2luZQ== 55524 -IG1lbnk= 55525 -dWx0eg== 55526 -IGluZmFudHJ5 55527 -Vmlh 55528 -c2VjdHM= 55529 -LmRhc2hib2FyZA== 55530 -IHNwb25zb3JzaGlw 55531 -Lk1vZGlmaWVk 55532 -Oy0= 55533 -IFZlbG9jaXR5 55534 -dHJhY3RlZA== 55535 -KG1ldGFkYXRh 55536 -IHBsYWd1ZQ== 55537 -TlNVc2VyRGVmYXVsdHM= 55538 -YXBwcm92YWw= 55539 -cHJvYmFibHk= 55540 -LXNpeA== 55541 -X1ZJUw== 55542 -OicnLAo= 55543 -LmVuYw== 55544 -Lk1lc3NhZ2Vz 55545 -X1BST0dSRVNT 55546 -IG5lY2tsYWNl 55547 -IFRlbXBvcmFyeQ== 55548 -X21hcmt1cA== 55549 -IEZ1bmN0aW9uYWw= 55550 -IEpp 55551 -IHRlc3RDYXNl 55552 -ICgpOw0K 55553 -X0NlbGw= 55554 -IFJlc2lkZW50aWFs 55555 -IFJhaWx3YXk= 55556 -KCgmX19f 55557 -IGRlZmF1bHRzdGF0ZQ== 55558 -IGVpbm1hbA== 55559 -LmZhYw== 55560 -KmY= 55561 -IHBpY25pYw== 55562 -KGV2YWw= 55563 -IGZ1cm5hY2U= 55564 -YXNzb2NpYXRpb24= 55565 -eyEh 55566 -IENvbXBpbGU= 55567 -eGVi 55568 -RXZhbA== 55569 -gOyepQ== 55570 -KGNhbA== 55571 -IG1hcmtldGVycw== 55572 -X2hlbHBlcnM= 55573 -bG9jYWxjdHg= 55574 -IHlvZ3VydA== 55575 -IHZpdGE= 55576 -LGxlbmd0aA== 55577 -IElucHV0RGVjb3JhdGlvbg== 55578 -IGludGVydmVuZQ== 55579 -IGNvbXB1dGF0aW9uYWw= 55580 -RGVuaWVk 55581 -L2Vudmlyb25tZW50 55582 -aWlk 55583 -LkJveA== 55584 -LVRpbWU= 55585 -IGV4Y3VzZXM= 55586 -dHJhbnNwb3Nl 55587 -IG91dHJhZ2VvdXM= 55588 -KFNlcnZlcg== 55589 -ZGltcw== 55590 -Il0pOw0K 55591 -kJw= 55592 -IEVpc2Vu 55593 -KE9w 55594 -IGhhc2hsaWI= 55595 -KGxp 55596 -fiw= 55597 -xLFuZA== 55598 -IFNwaGVyZQ== 55599 -IEJlbGxh 55600 -LXRyYW5zaXRpb24= 55601 -LnJlYWRTdHJpbmc= 55602 -aGVhcmQ= 55603 -IFp1Y2tlcg== 55604 -IHdhbm4= 55605 -IGphaWxlZA== 55606 -IFRhbGVudA== 55607 -b3Bob2JpYQ== 55608 -wrY= 55609 -IG9wZXJhbmRz 55610 -U29tZW9uZQ== 55611 -IExpYnJhcmllcw== 55612 -cHJpbWFyeUtleQ== 55613 -16o= 55614 -VXI= 55615 -IG1hdGVz 55616 -INGI 55617 -LWR1dHk= 55618 -cG91cg== 55619 -PEVudGl0eQ== 55620 -PllvdQ== 55621 -Q3JlYXRvcnM= 55622 -V2l0aE5hbWU= 55623 -J2ludA== 55624 -IFJhdGlvbmFs 55625 -PUI= 55626 -LkF1dG9GaWVsZA== 55627 -IEZvdW5kZXI= 55628 -IE1lZ2Fu 55629 -LmltYWdlVmlldw== 55630 -Ym93cw== 55631 -IHdpdGhSb3V0ZXI= 55632 -IGxpYmVyYXRpb24= 55633 -IGZvcmFt 55634 -IGNpdGFz 55635 -b2NoZW4= 55636 -LnN3YXA= 55637 -IC4uCg== 55638 -LmN2dENvbG9y 55639 -IEF3YXJl 55640 -IHF1ZWVy 55641 -5aSE55CG 55642 -IEluZmluaXRl 55643 -L3N0cmluZw== 55644 -IGJsZW5kZWQ= 55645 -LUNvbA== 55646 -IHd5cw== 55647 -IHNpY2hlcg== 55648 -Lkxhc3ROYW1l 55649 -X3dhdGVy 55650 -X1JlbQ== 55651 -IGFydGhyaXRpcw== 55652 -LkFQUA== 55653 -IEV4cGFuc2lvbg== 55654 -eGRi 55655 -ZXN0cm8= 55656 -ZmF2aWNvbg== 55657 -VmVyaWZpZWQ= 55658 -IGRlbGl2ZXJpZXM= 55659 -YXJrZXQ= 55660 -IGdldEltYWdl 55661 -IEpQRUc= 55662 -IFRSSQ== 55663 -IEVsZXY= 55664 -ZnVzaW9u 55665 -IGpwZWc= 55666 -Y29sbGlzaW9u 55667 -IGRlc2NlbmQ= 55668 -LmZvcmU= 55669 -IExvZ3M= 55670 -IHBvbGljaW5n 55671 -dW50YXM= 55672 -Lmhvc3RuYW1l 55673 -YWNjZXB0ZWQ= 55674 -4KWL 55675 -IFdlbmR5 55676 -LnJlYWRGaWxl 55677 -IFNhbnRpYWdv 55678 -IEdvbA== 55679 -cmliYm9u 55680 -c3RyYXRpb24= 55681 -IHB1ZGQ= 55682 -IC8vXw== 55683 -aXNMb2FkaW5n 55684 -X1NFUklBTA== 55685 -IGluc3RhbnRpYXRlZA== 55686 -IHBvZHM= 55687 -IHdhcnJhbnRz 55688 -IGFkbWl0dGluZw== 55689 -CWNvbm5lY3Rpb24= 55690 -X2J1ZmZlcnM= 55691 -IEluY2g= 55692 -IFpFUk8= 55693 -d2VydA== 55694 -IENsYW4= 55695 -CWls 55696 -KHNoYWRlcg== 55697 -IHBpbGdy 55698 -IOWK 55699 -RHN0 55700 -X2JhcmFuZw== 55701 -Oicj 55702 -QnV0dG9uVGV4dA== 55703 -dGVyZQ== 55704 -X2FtdA== 55705 -IEZvcmV2ZXI= 55706 -LkxpbmtlZExpc3Q= 55707 -dWFyZHM= 55708 -dXJvdXM= 55709 -IFNlbmRlcg== 55710 -dmFyaWFudHM= 55711 -X21hZ2lj 55712 -IGFjY29tbW9kYXRpb25z 55713 -YXBHZXN0dXJlUmVjb2duaXplcg== 55714 -UHJvbXB0 55715 -ID8+DQoNCg== 55716 -IHJlcHJvZHVjZWQ= 55717 -X3ByZWNpc2lvbg== 55718 -IHJ1dA== 55719 -bW9uZHM= 55720 -O3g= 55721 -IH0sDQoNCg== 55722 -55S7 55723 -IFZpdGE= 55724 -IHByb3Bvc2Vz 55725 -IFBhcnRpdGlvbg== 55726 -SElORw== 55727 -ICN7QA== 55728 -IGVzc2E= 55729 -KGJhcg== 55730 -IFplbGRh 55731 -LmNhdGNo 55732 -X2V4Y2VwdA== 55733 -IG92ZXJ3aGVsbWluZ2x5 55734 -CVRFU1Q= 55735 -X0NPTlRBQ1Q= 55736 -X187 55737 -IFNlbWk= 55738 -IHRyYWJhbGhv 55739 -cmFkb3Vybw== 55740 -X3NxdWFyZWQ= 55741 -4LY= 55742 -JUQ= 55743 -IHByYXQ= 55744 -aXRleg== 55745 -KGVsZW1lbnRz 55746 -UGxhbnQ= 55747 -YWd1YQ== 55748 -IGlocmVy 55749 -LkNvbA== 55750 -IE1jTg== 55751 -IENvcmV5 55752 -T05FWQ== 55753 -Q2VsZQ== 55754 -cmVtZW50 55755 -IG1hbHQ= 55756 -IEx1aw== 55757 -57uf 55758 -UE1FTlQ= 55759 -IGFuYWx5emVy 55760 -IEhhbms= 55761 -X3VuaWNvZGU= 55762 -IGJ1cmlhbA== 55763 -IENlbHRpYw== 55764 -RUZG 55765 -TG90 55766 -d29u 55767 -IE51ZGU= 55768 -IE5hdGU= 55769 -IFNpbmdlcg== 55770 -IFNJVEU= 55771 -KGJpdA== 55772 -Yml6 55773 -IGRldG9u 55774 -UkVBRE1F 55775 -OkFkZA== 55776 -IEhvbGRpbmc= 55777 -e3JldHVybg== 55778 -bmNpYXM= 55779 -Pg0KDQoNCg== 55780 -cnVwdGlvbnM= 55781 -LnJlYWN0 55782 -dXJzYWw= 55783 -4Lib 55784 -IERPTkU= 55785 -aXZhdGVk 55786 -Lm5vdGVz 55787 -IHN0cmlwZXM= 55788 -cmlwcA== 55789 -aXJhbg== 55790 -IHNsYWI= 55791 -IEJ1cm5pbmc= 55792 -KGVudA== 55793 -LnNlYw== 55794 -R1U= 55795 -X2dvbGQ= 55796 -XSkpLg== 55797 -ZWxpbmVzcw== 55798 -0L7QsdGA0LDQ 55799 -IOKIgA== 55800 -IGNvc21pYw== 55801 -J10pOgo= 55802 -Y2Npb25lcw== 55803 -Y2lzaW9u 55804 -Y29tcGFyaXNvbg== 55805 -IEV2YW5nZWw= 55806 -IFNoaXJ0 55807 -bGFnZW4= 55808 -IGnFnw== 55809 -IGZpbGxlcg== 55810 -LnByb2Q= 55811 -IAkJCQkJ 55812 -INGE0YPQvdC60YbQuA== 55813 -IFplcm9Db25zdHJ1Y3Rvcg== 55814 -QXRB 55815 -XSkNCg0K 55816 -IGNvbnN0cnVjdG9ycw== 55817 -X1NIQVJFRA== 55818 -CWRldmljZQ== 55819 -IEFkdmljZQ== 55820 -OkAiJUA= 55821 -Pn0n 55822 -LklzRW1wdHk= 55823 -IGludHM= 55824 -bW9zdGF0 55825 -IFNpZ251cA== 55826 -Z2Vhcg== 55827 -KHBhdGhz 55828 -LHsi 55829 -L0RvY3VtZW50cw== 55830 -PENhdGVnb3J5 55831 -VUVTVA== 55832 -IGdldERlc2NyaXB0aW9u 55833 -ICJ7XCI= 55834 -IEpvZXk= 55835 -b2Rlbg== 55836 -X2d1ZXNz 55837 -RVVS 55838 -IGhlcnI= 55839 -IHNlZGFu 55840 -IHJlYWN0ZWQ= 55841 -X2Nsb25l 55842 -IFJldmVs 55843 -IGZvcmI= 55844 -UmVtYWluaW5n 55845 -XFNlcnZpY2Vz 55846 -IGF2aXM= 55847 -YmF0aW0= 55848 -emVwdA== 55849 -IERCTnVsbA== 55850 -Q29ubmVjdGlvbnM= 55851 -IGRpc3BvbmlibGU= 55852 -cGhpbg== 55853 -IHN0dQ== 55854 -IHNjaG9sYXJzaGlwcw== 55855 -LXNoYXJpbmc= 55856 -Zm9ybWluZw== 55857 -IEJyaQ== 55858 -VmFySW5zbg== 55859 -L3Nlc3Npb24= 55860 -IGFtYmlndW91cw== 55861 -IGFwcmVzZW50 55862 -X3Jk 55863 -c2l0ZXM= 55864 -L2FjdGlvbg== 55865 -dHJhY3Rvcg== 55866 -IGRpbGVtbWE= 55867 -IFNY 55868 -XS0tPgo= 55869 -IEphY2tldA== 55870 -UkFUSU9O 55871 -LmdldFNlbGVjdGVkSXRlbQ== 55872 -LWluaXQ= 55873 -IFJlZ2lzdGVycw== 55874 -X3NlcA== 55875 -IFRvb2xraXQ= 55876 -LmRpY3Q= 55877 -IHhsYWJlbA== 55878 -XFRhYmxl 55879 -dG9j 55880 -X2NvbWJv 55881 -IENvbXBhY3Q= 55882 -IHJ1Z2dlZA== 55883 -4KWH4KQ= 55884 -LW1hbmFnZW1lbnQ= 55885 -Jyl9fSI+Cg== 55886 -IFN0YW1w 55887 -xLFs 55888 -cm94 55889 -IGxhbmRzY2FwZXM= 55890 -X05PVEU= 55891 -bW9uYXJ5 55892 -Y2Fi 55893 -IG1vZXQ= 55894 -eGFm 55895 -cmNvZGU= 55896 -LWNsaQ== 55897 -X2dhdGU= 55898 -W2V2ZW50 55899 -U1BPUlQ= 55900 -Z2lh 55901 -IFNVUEVS 55902 -L0xvZ2lu 55903 -X3NodXRkb3du 55904 -aW50ZXJydXB0 55905 -IHByZXRlbmRpbmc= 55906 -IGZyaW5nZQ== 55907 -IFJlZHM= 55908 -IENVREE= 55909 -IFVOSVg= 55910 -dml0 55911 -IGJyaWc= 55912 -ZHJ2 55913 -IENvbm5lY3Rvcg== 55914 -VGhlcmVmb3Jl 55915 -IGxpYQ== 55916 -RGV0ZWN0aW9u 55917 -X2FjdG9y 55918 -IHRlbXBmaWxl 55919 -IGVjY2VudHJpYw== 55920 -LXJvbGU= 55921 -IHBhZHg= 55922 -ZGVudA== 55923 -V2VzdGVybg== 55924 -IOq3uA== 55925 -IEFwcGxpY2F0aW9uUmVjb3Jk 55926 -IGNhbXBhaWduaW5n 55927 -X3J1bm5lcg== 55928 -IENpdmlj 55929 -YWxlaWdo 55930 -IGRpcmVrdA== 55931 -LnN1bA== 55932 -ICAJCQk= 55933 -YW50ZW4= 55934 -IGlzc3Vlcg== 55935 -IGFzc2VydGlvbnM= 55936 -KG9yaWc= 55937 -QVRJTw== 55938 -IGxlYW5lZA== 55939 -w6Rz 55940 -LkRUTw== 55941 -ZXhwbG9kZQ== 55942 -Lk9ic2VydmFibGU= 55943 -IHN0YWdnZXJpbmc= 55944 -IGtpZG5hcHBlZA== 55945 -IHByb2dyYW1tZXJz 55946 -IElubm92 55947 -LnBhcmFtZXRlcg== 55948 -IGRvbWluYXRpb24= 55949 -IHNrZXB0aWM= 55950 -IOaYrw== 55951 -IGF2b2lkcw== 55952 -LlZlcmlmeQ== 55953 -dWJieQ== 55954 -IEFTTg== 55955 -IGZvcm1hdG8= 55956 -IEJlYXRsZXM= 55957 -X2JyYW5k 55958 -IGluc2V0 55959 -eW91dHU= 55960 -IHRvYw== 55961 -LWZpbmFs 55962 -U2hvd2luZw== 55963 -IERvdWI= 55964 -IE1lc2E= 55965 -QWRq 55966 -X21lZGl1bQ== 55967 -Q3JlYXRlcw== 55968 -KGVuZHBvaW50 55969 -CVVQ 55970 -YmJpZQ== 55971 -IHN0YWxr 55972 -LmRhdGFiaW5k 55973 -LlNjYW4= 55974 -YWdlbnRz 55975 -JCw= 55976 -aW5kaXZpZHVhbA== 55977 -Kykv 55978 -CXZt 55979 -KG5vdGlmaWNhdGlvbg== 55980 -IGluZXg= 55981 -IENsYXNzaWZpY2F0aW9u 55982 -cmVubw== 55983 -IG9saWc= 55984 -LXJhdGVk 55985 -IGZvcm11bGF0aW9u 55986 -Jyx7 55987 -IGFjZXB0 55988 -X3VucGFjaw== 55989 -X0NB 55990 -LlBvdw== 55991 -CWlt 55992 -IGFsdW1pbml1bQ== 55993 -QU5P 55994 -IHhu 55995 -IGPDs21v 55996 -IEluZ3JlZGllbnQ= 55997 -IHNlaXp1cmVz 55998 -5YWx 55999 -aWZpY2Fkb3I= 56000 -IHNpZ3VpZW50ZQ== 56001 -IEluZnJhZ2lzdGljcw== 56002 -IGR1cGxpY2F0ZWQ= 56003 -IERlZQ== 56004 -IG7DuA== 56005 -IEFDQ0VQVA== 56006 -KGNyYXRl 56007 -0LjRgtC10LvRjA== 56008 -LWxlc3M= 56009 -IGluZmluaXR5 56010 -QW5hbHl6ZXI= 56011 -LURheQ== 56012 -cml0dA== 56013 -KGNpbg== 56014 -IEd5 56015 -IG11bHRpcGxpZWQ= 56016 -dWNoaQ== 56017 -IEJhbGR3aW4= 56018 -L2lw 56019 -IHNob3J0Y3V0cw== 56020 -LkFERA== 56021 -IHZpZ29y 56022 -X2luc3RydWN0aW9u 56023 -KDs= 56024 -X2V0YQ== 56025 -6L+e 56026 -dXRvcmlhbHM= 56027 -IGJvb3N0aW5n 56028 -YnY= 56029 -IGFja25vd2xlZGdlcw== 56030 -TGlzdGVuaW5n 56031 -RkFR 56032 -O2I= 56033 -KCgt 56034 -IGFyY2hpdGVjdHM= 56035 -IHp3ZQ== 56036 -IHB1bHM= 56037 -IGdldENvdW50 56038 -dmVyYnM= 56039 -44Cc 56040 -KENvbGxlY3Rpb24= 56041 -a3Jl 56042 -IGp1cmlzZGljdGlvbnM= 56043 -X2JyaWRnZQ== 56044 -IENyYWNr 56045 -IERpZmZpY3VsdHk= 56046 -S08= 56047 -UmVzZXJ2YXRpb24= 56048 -X3JlcXVpcmVz 56049 -VG91cg== 56050 -44GX44Gf 56051 -LnNldEN1cnJlbnQ= 56052 -IGt5 56053 -IEFsYmFueQ== 56054 -IOin 56055 -bGxlcg== 56056 -YWduYQ== 56057 -d29ya2Vycw== 56058 -LmJsYW5r 56059 -IFByYXllcg== 56060 -TUlD 56061 -IHJlc2lsaWVuY2U= 56062 -VGVY 56063 -IExhbmd1YWdlcw== 56064 -c3R1ZHk= 56065 -CWN1cnI= 56066 -IGVuenltZXM= 56067 -U2x1Zw== 56068 -IO2MjA== 56069 -c3RyYWw= 56070 -IHR1bW9ycw== 56071 -IHNlZ3VuZGE= 56072 -PSd7 56073 -aW5zdHJ1Y3Rpb24= 56074 -IExpc3A= 56075 -L2luZm8= 56076 -ICJ7JA== 56077 -LDopLA== 56078 -IGd2 56079 -KEVycm9yTWVzc2FnZQ== 56080 -ICc9 56081 -fS0kew== 56082 -LkRvY3VtZW50cw== 56083 -IldlbGw= 56084 -IHJlbWluaXNjZW50 56085 -IGdheg== 56086 -aXJvcHI= 56087 -ZWhy 56088 -IHN1cHByZXNzZWQ= 56089 -ZXJzaA== 56090 -LnNjcm9sbFRv 56091 -IGNhZGVuYQ== 56092 -IGdhbWVTdGF0ZQ== 56093 -w61t 56094 -KGNvbnY= 56095 -IFRvbW9ycm93 56096 -IENDVA== 56097 -TW9uZ28= 56098 -dWxn 56099 -LkNhbWVyYQ== 56100 -LmhhbmRsZXJz 56101 -bXBo 56102 -IHN0aw== 56103 -IGdlbmV0aWNz 56104 -QUNJTkc= 56105 -VHJpdmlh 56106 -IEJhbQ== 56107 -KG1hcmtlcg== 56108 -LlN0cmV0Y2g= 56109 -IFN1bm5p 56110 -IEJldHR5 56111 -LnRvbGlzdA== 56112 -dW5saWtlbHk= 56113 -LlJlY3RhbmdsZQ== 56114 -b2Jzb2xldGU= 56115 -SUxPTg== 56116 -aW5uZXJUZXh0 56117 -ZW1ib3VyZw== 56118 -YU4= 56119 -IFZlaGljbGVz 56120 -dW5sb2Nr 56121 -OnV0Zg== 56122 -bm9i 56123 -IFNlZWluZw== 56124 -IE5FVkVS 56125 -IHRscw== 56126 -IGZpbGxlcw== 56127 -IGJlbmVmaXRlZA== 56128 -IENsaW50 56129 -Ki8pLA== 56130 -LmZvbGQ= 56131 -IHBvc2libGU= 56132 -QURFRA== 56133 -dGhvdXNl 56134 -LkRBTA== 56135 -IE9kZA== 56136 -cm9rZXM= 56137 -IFN1bm55 56138 -IFBhcnRpYWxFcQ== 56139 -X0J1ZmZlcg== 56140 -IExldmk= 56141 -bG9uZ3JpZ2h0YXJyb3c= 56142 -ZWxkb24= 56143 -Z2FnZXM= 56144 -X3dhcm4= 56145 -LkNyZWF0ZVRhYmxl 56146 -IERpcA== 56147 -X3F1ZXN0aW9ucw== 56148 -LmxvZ2lj 56149 -ICMi 56150 -PXsoKT0+ 56151 -IHRlcA== 56152 -IGp1aWN5 56153 -7IKs 56154 -ZW5rbw== 56155 -aWFsZWN0 56156 -2Yk= 56157 -IG9uYm9hcmQ= 56158 -IOaP 56159 -CXJ0 56160 -X1VURg== 56161 -IFFBY3Rpb24= 56162 -4oCe 56163 -KENvbXBvbmVudA== 56164 -KGF1ZGlv 56165 -LmhpdA== 56166 -Z3Rl 56167 -IHByb2dyYW1tZWQ= 56168 -c3RhdGVQYXJhbXM= 56169 -IHBvbHllc3Rlcg== 56170 -ZmlyZXM= 56171 -Ynlzcw== 56172 -XT0o 56173 -X3F1YWxpdHk= 56174 -T2ZEYXk= 56175 -IEZhaXJ5 56176 -IHllbGxlZA== 56177 -b3Bs 56178 -KHVzZXJOYW1l 56179 -IERpZmZlcmVuY2U= 56180 -IGV2YWx1YXRpb25z 56181 -aWZmYW55 56182 -IGN5Y2xpc3Rz 56183 -IGNpZGFkZQ== 56184 -IHRleHRib29r 56185 -IHByb2ZpbGluZw== 56186 -X18pLA== 56187 -ZGVh 56188 -LmFjdGl2YXRl 56189 -IGluZGljYXRpb25z 56190 -0JU= 56191 -VG91Y2hVcEluc2lkZQ== 56192 -IGludmFsdWFibGU= 56193 -IE1BU0s= 56194 -IGNvbnRlbmQ= 56195 -RnJlcQ== 56196 -IHJlY3J1aXRz 56197 -KGludGVydmFs 56198 -IFVzZXJQcm9maWxl 56199 -ICcuLy4uLw== 56200 -ZWR1 56201 -X0NhbGxiYWNr 56202 -IGFuYWxvZ3k= 56203 -IFRyb3BoeQ== 56204 -YXBwaGlyZQ== 56205 -VmlkZW9z 56206 -IENoZXI= 56207 -IEhhdg== 56208 -4oCmIg== 56209 -LnZhbGlkYXRvcg== 56210 -Z2Z4 56211 -IFVPYmplY3Q= 56212 -Y2xhc3NuYW1lcw== 56213 -dHJpYW5nbGU= 56214 -IEVuY29kZXI= 56215 -LnNweQ== 56216 -IHByZWRhdG9ycw== 56217 -PXN0YXR1cw== 56218 -LXNhZmU= 56219 -OiIsCg== 56220 -IEluY2x1ZGluZw== 56221 -IHt9Ow0K 56222 -KmNvcw== 56223 -IGVuZHVyZWQ= 56224 -LnN1bGFrZQ== 56225 -IG51cnNlcnk= 56226 -IGZyYWdyYW5jZQ== 56227 -IHJlYnVpbGRpbmc= 56228 -IG50aA== 56229 -IEZyYXNlcg== 56230 -LnNldERhdGU= 56231 -IFZpbmNl 56232 -X1JFU1Q= 56233 -IHZlbnRpbGF0aW9u 56234 -5rW3 56235 -Y3JpYmVz 56236 -LmFzbQ== 56237 -bHBWdGJs 56238 -IEFiZQ== 56239 -dWlzaW5l 56240 -LGFycmF5 56241 -CWNsYXNzTmFtZQ== 56242 -ZXJyYWxz 56243 -ICcKCg== 56244 -Q2hlY2tvdXQ= 56245 -IHNvbGljaXQ= 56246 -QXV4 56247 -X2NhcHR1cmU= 56248 -IHJpYnM= 56249 -cmFnb24= 56250 -dmlvbA== 56251 -dG9waWNz 56252 -RnVuY3Rpb25GbGFncw== 56253 -IE1hcnR5 56254 -YmlrZQ== 56255 -IFR1Y2tlcg== 56256 -KGtlcm5lbA== 56257 -IE9wcw== 56258 -Q2xvc2VPcGVyYXRpb24= 56259 -L2RlbW8= 56260 -aWxkYQ== 56261 -IGzDrW5lYQ== 56262 -QVBQSU5H 56263 -IHN1aXRlcw== 56264 -LnZpc2l0VmFySW5zbg== 56265 -dXJ1cw== 56266 -IE1pbnV0ZQ== 56267 -KG1hbmFnZXI= 56268 -IGJ1dHRlcmZseQ== 56269 -IGFwYXJl 56270 -IHdvbHZlcw== 56271 -SldU 56272 -IFNhbG9u 56273 -CWRlbGF5 56274 -LWVzbGludA== 56275 -aXNhdGlvbnM= 56276 -LnJwYw== 56277 -KXwo 56278 -IFNuYXBjaGF0 56279 -L21t 56280 -TU4= 56281 -Y2VyaWVz 56282 -LnRleHRBbGlnbm1lbnQ= 56283 -IEZyYW5rZnVydA== 56284 -IGFkbw== 56285 -KG5ld1ZhbHVl 56286 -KGFjY2Vzcw== 56287 -KEV4cHJlc3Npb24= 56288 -IFNpZ25Jbg== 56289 -IEhhaXRp 56290 -X3Rw 56291 -LnNldFBhcmFtZXRlcg== 56292 -TWludXRl 56293 -IG1hbnVhbHM= 56294 -cmljYW5lcw== 56295 -IFBUUg== 56296 -IE91dGVy 56297 -IGdldGxpbmU= 56298 -b2NhdGlvbnM= 56299 -X0NE 56300 -IEx5b24= 56301 -L2d1aQ== 56302 -X2xpdmU= 56303 -aWRhbg== 56304 -Lmdlb20= 56305 -IGJvcmRlckJvdHRvbQ== 56306 -aW11dGg= 56307 -X2NoZWNrcG9pbnQ= 56308 -IG1ldQ== 56309 -IElydmluZw== 56310 -IHBldXZlbnQ= 56311 -KE1BWA== 56312 -IEFSQ0g= 56313 -IHBvdg== 56314 -LnNvdXJjZWZvcmdl 56315 -IGphbWFpcw== 56316 -IGFyaw== 56317 -IEJhZ2hkYWQ= 56318 -IENMRUFS 56319 -TWVudUJhcg== 56320 -IHRyb2lz 56321 -Q0hFRFVMRQ== 56322 -ICMNCg== 56323 -KENhbGw= 56324 -JG9yZGVy 56325 -KE1hdGVyaWFs 56326 -IGVuY29udHJhZG8= 56327 -JGxpc3Q= 56328 -IE1FVEhPRFM= 56329 -LmJlZ2luVHJhbnNhY3Rpb24= 56330 -X01BRw== 56331 -U3R5bGVTaGVldA== 56332 -IG1ham9ycw== 56333 -IGluZGVmaW5pdGVseQ== 56334 -Y2xlYW51cA== 56335 -IGhvbWVsYW5k 56336 -KGR0bw== 56337 -RGF0ZXM= 56338 -UHJlc2VudGF0aW9u 56339 -IERL 56340 -PXtgLw== 56341 -CUtleQ== 56342 -KEJsb2Nr 56343 -X2NoZWNrYm94 56344 -bmVlZHM= 56345 -IG9uQ29tcGxldGU= 56346 -cmljbw== 56347 -IGdsZWljaA== 56348 -IHht 56349 -T09E 56350 -QmV0dGVy 56351 -IFNRTElURQ== 56352 -LkJvb2s= 56353 -eGFk 56354 -IEdvbmU= 56355 -CWRw 56356 -IGRldm90aW9u 56357 -IHN0bQ== 56358 -IG9ic2Vzcw== 56359 -IEJhY2tlbmQ= 56360 -UXVlcmllcw== 56361 -SWs= 56362 -Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 56363 -IGRpdmlkZW5kcw== 56364 -LnBhcmVudEVsZW1lbnQ= 56365 -fSIpCgo= 56366 -IE1hdGVyaWFsUGFnZVJvdXRl 56367 -Om51bQ== 56368 -IGV4cGxpYw== 56369 -IE9M 56370 -bGVhc3Q= 56371 -T29wcw== 56372 -aW1lbnRvcw== 56373 -IGluc3VyZXJz 56374 -IGhlcm9pYw== 56375 -CWZpZWxkcw== 56376 -LmltZ3Vy 56377 -LmJ0bkNhbmNlbA== 56378 -IERldGVjdGl2ZQ== 56379 -KHNt 56380 -IE11dGFibGVMaXZlRGF0YQ== 56381 -LmxhYg== 56382 -KChb 56383 -IGhhaXJzdA== 56384 -IFRyYW5zYWN0aW9ucw== 56385 -5byA5aeL 56386 -IHN0ZENsYXNz 56387 -dWVudG8= 56388 -R0lT 56389 -X2NvZA== 56390 -SW5zdHJ1Y3Rpb25z 56391 -Q2FsbHM= 56392 -UG9pbnRlclR5cGU= 56393 -IFJ3 56394 -IGFzc29ydG1lbnQ= 56395 -IERJRw== 56396 -K3I= 56397 -X0NFUlQ= 56398 -IGluc3RhYmlsaXR5 56399 -IHZpYg== 56400 -b25hcw== 56401 -IHJva3U= 56402 -YXBlbGxpZG8= 56403 -IGFuZ2w= 56404 -cHJlbmV1cg== 56405 -IGZsdWlkcw== 56406 -aXNlYXNl 56407 -IGRlZWQ= 56408 -cXVpc3Q= 56409 -X0NPTlNUQU5U 56410 -IGVxdWlsaWJyaXVt 56411 -X2RlbGVnYXRl 56412 -IFF1YW50dW0= 56413 -cmVp 56414 -Q2FwYWJpbGl0aWVz 56415 -cmVjdGFuZ2xl 56416 -Pz48 56417 -YWxpZW4= 56418 -IEp1Zw== 56419 -RE5B 56420 -VGlja2V0cw== 56421 -T2NjdXJz 56422 -IEhhd2s= 56423 -LnNldEhvcml6b250YWxHcm91cA== 56424 -XENvbGxlY3Rpb24= 56425 -ZmZpdGk= 56426 -IHJlYXJy 56427 -LnNldFZlcnRpY2FsR3JvdXA= 56428 -IGNhdml0eQ== 56429 -IGFkdWx0ZQ== 56430 -RmFjYWRl 56431 -LXdo 56432 -IExPTA== 56433 -2LA= 56434 -IGdyYW5kcGFyZW50cw== 56435 -U3dpZnQ= 56436 -CXd4 56437 -5omA5pyJ 56438 -aWZlbg== 56439 -ZmZzZXQ= 56440 -QmV5b25k 56441 -Ly99Cgo= 56442 -IHdhZ2Vy 56443 -IGJ1cnk= 56444 -IGNvbW1lbmNl 56445 -cmVnaXN0cm8= 56446 -c2NpZW50 56447 -IFBlcmNlbnQ= 56448 -INC00L7Qu9C2 56449 -KGlkZW50aWZpZXI= 56450 -LnNldE1vZGVs 56451 -IHNlbGRvbQ== 56452 -bnRvbg== 56453 -IGFwcGxpYW5jZQ== 56454 -YW11cw== 56455 -cnlzbGVy 56456 -IHBhbnRpZXM= 56457 -ZW5ndWlucw== 56458 -IG1pbWlj 56459 -IG9uQ2hhbmdlZA== 56460 -IGFsY29ob2xpYw== 56461 -LnJlbG9hZERhdGE= 56462 -Q2hhcmdl 56463 -IEZheA== 56464 -IGpTY3JvbGxQYW5l 56465 -RW1wcmVzYQ== 56466 -IHNoYXR0ZXJlZA== 56467 -eGJh 56468 -Rm9udHM= 56469 -P3M= 56470 -IHBvc3RzZWFzb24= 56471 -cmV0YWlu 56472 -X3JhdGVz 56473 -IHJlcXVlc3RDb2Rl 56474 -LnRvZG8= 56475 -wrRz 56476 -Q0hL 56477 -IEtlZXBpbmc= 56478 -ZW5nZWFuY2U= 56479 -IHZzY29kZQ== 56480 -SVBQSU5H 56481 -RGVmYXVsdENsb3NlT3BlcmF0aW9u 56482 -X3JhaXNl 56483 -IE9jdWx1cw== 56484 -b2dyYW1z 56485 -cmFq 56486 -cGNp 56487 -IGNvcnJvc2lvbg== 56488 -LmhhbmRsZVN1Ym1pdA== 56489 -QWNjZXNzaWJsZQ== 56490 -IFBpYW5v 56491 -bGl0dGxl 56492 -QUNM 56493 -xIdl 56494 -LnVud3JhcA== 56495 -IENvbnZlcnM= 56496 -IExlYmVu 56497 -aW9uZWVy 56498 -IE1lcmNoYW50 56499 -IEpvcmdl 56500 -IGVtYnJhY2luZw== 56501 -IHZlbnRh 56502 -w6FzdA== 56503 -IHZpZW5l 56504 -PFFTdHJpbmc= 56505 -IGV4cGxvc2lvbnM= 56506 -IGRpc3R1cmJlZA== 56507 -LiI8 56508 -bWVtbw== 56509 -IEFib3JpZ2luYWw= 56510 -IGNvbXBsZXRv 56511 -VGV4UGFyYW1ldGVy 56512 -IHVvbWluaQ== 56513 -KGFnZW50 56514 -0YPRgA== 56515 -IFdob2xlc2FsZQ== 56516 -L2Ft 56517 -IEJvb2ttYXJr 56518 -ZHJhZ29u 56519 -IGdsb3Zl 56520 -ICIiKSk7Cg== 56521 -aXZhcmlhdGU= 56522 -bm93cmFw 56523 -SW5DaGlsZHJlbg== 56524 -LkJy 56525 -IGNvbmV4aW9u 56526 -IGJhY2tib25l 56527 -IGVjbGlwc2U= 56528 -IHBlcnNlY3V0aW9u 56529 -JzoKCg== 56530 -L2xpbms= 56531 -IFBlcm8= 56532 -YW5kYXM= 56533 -IFRlaw== 56534 -LiIpOw== 56535 -LWFuYWx5c2lz 56536 -IGVyYWQ= 56537 -TWFyc2hhbA== 56538 -IGFuY2hvcnM= 56539 -b2dlcg== 56540 -IGNvbnZlcmdlbmNl 56541 -c3RpY2t5 56542 -IG5hdmVn 56543 -aW50ZXJu 56544 -X0RFU0NSSVBUT1I= 56545 -IENvbnN1bHRhbnQ= 56546 -ICAgICAgICAgICAgICAgICAgICAgCg== 56547 -IEF1Y2g= 56548 -IGVycmU= 56549 -xZtsaQ== 56550 -IEhvcml6b24= 56551 -Y29sYQ== 56552 -SW5zdGFsbGF0aW9u 56553 -aG90bWFpbA== 56554 -Q05O 56555 -LkNvbGxlY3RvcnM= 56556 -Y2hz 56557 -KHRyYWNl 56558 -IEVuY3J5cHQ= 56559 -IC0tLS0tLQ== 56560 -IEJhc2VDb250cm9sbGVy 56561 -IGFndWE= 56562 -IHJlYWN0aXZl 56563 -aWRs 56564 -IGNsYXNzTmFtZXM= 56565 -CVNlc3Npb24= 56566 -IERvZGdlcnM= 56567 -SGFk 56568 -X2x2 56569 -SXNWYWxpZA== 56570 -IEhFTFA= 56571 -dXR0bw== 56572 -IFZlcmlmaWNhdGlvbg== 56573 -IGdldGVudg== 56574 -X3Bh 56575 -LmJtcA== 56576 -OmY= 56577 -IExvdWlzZQ== 56578 -KCc7 56579 -L3NvY2tldA== 56580 -R3JhbnRlZA== 56581 -LmNhbGVuZGFy 56582 -KElQ 56583 -IFBY 56584 -LlJvb20= 56585 -IHByb2dyYW1t 56586 -ZW5zaQ== 56587 -IHRhYmxlc3Bvb25z 56588 -IGxldmU= 56589 -IG1vc3Ry 56590 -LnRpcG8= 56591 -L2Fu 56592 -KGRp 56593 -IGJpb2Q= 56594 -IGRiQ29udGV4dA== 56595 -IEpTWA== 56596 -CXJlc3VsdHM= 56597 -LkVORA== 56598 -aHRl 56599 -bGlmeQ== 56600 -UHJlY2lzaW9u 56601 -6IqC 56602 -QVJTRVI= 56603 -KWRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 56604 -YXR0ZW1wdA== 56605 -SVNQ 56606 -JmE= 56607 -X1BPUA== 56608 -IFRhYw== 56609 -IHByZXBhcmVkU3RhdGVtZW50 56610 -INC30LDQv9C40YE= 56611 -IG93aW5n 56612 -LHN0YXJ0 56613 -IHJldmlld2Vy 56614 -IHJzdA== 56615 -IHByb3BUeXBlcw== 56616 -IHJvY2t5 56617 -X2xvY2FsZQ== 56618 -IFN0cmF0ZWdpZXM= 56619 -IFdlYmVy 56620 -LkNhc2NhZGU= 56621 -X2VxdWFsVG8= 56622 -IGNvc2Fz 56623 -IERlbGV0ZXM= 56624 -IE1heGlt 56625 -IHNocmltcA== 56626 -cmV0cmlldmU= 56627 -LkluY2x1ZGU= 56628 -SUdJTg== 56629 -IE9F 56630 -XSk7DQoNCg== 56631 -LmVudW1lcg== 56632 -IGNvZWY= 56633 -X051bGw= 56634 -UmE= 56635 -dHlhcmQ= 56636 -IFNoYXdu 56637 -a2VlcGVycw== 56638 -IHFx 56639 -X3Ni 56640 -b21lbnM= 56641 -IEV4ZWN1dGVz 56642 -IyI= 56643 -VFRZ 56644 -IFZhbHVlVHlwZQ== 56645 -KTsqLwo= 56646 -IEFic29sdXRlbHk= 56647 -IFRvdHRlbmhhbQ== 56648 -L2FydA== 56649 -IGJsZXNzaW5ncw== 56650 -IHN3aWZ0bHk= 56651 -YnVzdGVy 56652 -IGF2aWQ= 56653 -Q09NTQ== 56654 -LHRlbXA= 56655 -IH0/Pgo= 56656 -LWdyb3dpbmc= 56657 -IGRlZXBjb3B5 56658 -QWNr 56659 -ZWdnaWVz 56660 -IF9fKCI= 56661 -IG5vaXI= 56662 -dGVycm9yaXNt 56663 -IGFudGhlbQ== 56664 -YWdlbmN5 56665 -X1BBQ0tBR0U= 56666 -IENsb3N1cmU= 56667 -LnJlZ2lzdHJ5 56668 -IG1hbW1hbHM= 56669 -PEw= 56670 -VUlDb2xsZWN0aW9uVmlldw== 56671 -IExFRHM= 56672 -IHZvbGxleQ== 56673 -KEJ1ZmZlcg== 56674 -X05BVElWRQ== 56675 -bGliYw== 56676 -aW1wbG9kZQ== 56677 -U2Nyb2xsQmFy 56678 -IE1hcmlvbg== 56679 -LkNvbnRyYWN0cw== 56680 -X0F0 56681 -IFdlaW5zdGVpbg== 56682 -Y29tcGFyZVRv 56683 -IEhvc2U= 56684 -ZW5pdHk= 56685 -LmNyZWF0ZVF1ZXJ5 56686 -X3JvdXRlcg== 56687 -IHN0aW11bGk= 56688 -ICsrKQ== 56689 -IENoYW1w 56690 -IEJheWVybg== 56691 -YXNzYQ== 56692 -LnZh 56693 -IGRpc3RyaWJ1dG9ycw== 56694 -IGZpbGVwcml2YXRl 56695 -IGRlcGFydGVk 56696 -Y2NjYw== 56697 -QGNsaWNr 56698 -IEx1bmNo 56699 -Pkw= 56700 -IGJsdWV0b290aA== 56701 -LkRlZXA= 56702 -LXN0YW5kaW5n 56703 -w6FjaWw= 56704 -IHJvb2Z0 56705 -IFBhdGhz 56706 -X2l0ZXJhdGlvbnM= 56707 -SW52YWxpZEFyZ3VtZW50RXhjZXB0aW9u 56708 -LnNwaQ== 56709 -IFVJQWxlcnRBY3Rpb24= 56710 -dXll 56711 -c2lnbmlu 56712 -LnByaW9yaXR5 56713 -IEVzc2F5cw== 56714 -PSd7JA== 56715 -IOi/lOWbng== 56716 -X3NpZ25lZA== 56717 -LnBlcnNpc3Q= 56718 -IHJlZGVzaWdu 56719 -VG9Mb3dlcg== 56720 -IE5ld21hbg== 56721 -PXN0YXJ0 56722 -IElzcmFlbGlz 56723 -YXNpc3dh 56724 -U3BlZWNo 56725 -IG51bWVyb3M= 56726 -aGFuZGxlcnM= 56727 -IFdvbmc= 56728 -INC80LXRgtC+0LQ= 56729 -V2VpZ2h0cw== 56730 -IEd1amFy 56731 -dGVpbA== 56732 -IE5vbmV0aGVsZXNz 56733 -X0VGRkVDVA== 56734 -IHZlY3Q= 56735 -IE9zYw== 56736 -IGNvYXRz 56737 -IFdoZWF0 56738 -IGdlZWs= 56739 -IFBST1BFUlRZ 56740 -d29ybQ== 56741 -X2NvbnN0YW50cw== 56742 -IEJvdWxkZXI= 56743 -IFBhcm0= 56744 -Y29sZQ== 56745 -IGRlZmF1bHRDZW50ZXI= 56746 -IFJvdWdl 56747 -OkE= 56748 -eGNm 56749 -IFZlbmljZQ== 56750 -bWVkaWFu 56751 -IHJlZGVtcHRpb24= 56752 -RnJlc2g= 56753 -IGNvc20= 56754 -IGZpZ3Vy 56755 -IHJlZnVyYg== 56756 -Q09QRQ== 56757 -LmNk 56758 -IGNob3Jkcw== 56759 -IFNndA== 56760 -xY0= 56761 -VlBO 56762 -IFNFTkQ= 56763 -YWluZW4= 56764 -X2FjY291bnRz 56765 -IHRlbnRo 56766 -IGRpc3NvbHZlZA== 56767 -PEFwcA== 56768 -IENvdmVyYWdl 56769 -dXNlU3RhdGU= 56770 -w6lybw== 56771 -Li48 56772 -IOyjvA== 56773 -IGRyZWFtaW5n 56774 -IEZvcmVjYXN0 56775 -LkN1cnNvcnM= 56776 -IHZpc2Fz 56777 -L3NjcmlwdA== 56778 -X3N0YXJ0ZWQ= 56779 -IGdhc3Ry 56780 -KFBSTw== 56781 -XTsvLw== 56782 -LlRpbGU= 56783 -KnNpbg== 56784 -KEFkYXB0ZXI= 56785 -IFNhbmRyYQ== 56786 -X1NJRw== 56787 -YXJkYXNo 56788 -IE92YWw= 56789 -IGRlc2NyaXBjaW9u 56790 -KHNs 56791 -IERlc2NyaXB0b3I= 56792 -IGAk 56793 -L2ZyZWU= 56794 -IEtleXdvcmRz 56795 -IHR1ZG8= 56796 -aW9uYWxl 56797 -KGZvdW5k 56798 -Lnh5eg== 56799 -IEdlbmVyYXRpb25UeXBl 56800 -X0RJU0FCTEVE 56801 -KGFyZWE= 56802 -IGVsaXRlcw== 56803 -IGhvbWJyZQ== 56804 -KG1lc3NhZ2Vz 56805 -IFJhYw== 56806 -IGV4dGluZ3U= 56807 -IEVzdGE= 56808 -b3Bv 56809 -LnZlbA== 56810 -bW91c2VvdXQ= 56811 -IGNvbnZvbHV0aW9u 56812 -IEhhbmRsaW5n 56813 -IGNlaWxpbmdz 56814 -VGVr 56815 -IEFyZWFz 56816 -LndyaXRlcm93 56817 -PFZpZXc= 56818 -IENvcm5lbGw= 56819 -X0JJTg== 56820 -LmludmFsaWQ= 56821 -JycnDQo= 56822 -aWXFvA== 56823 -X1Bvc2l0aW9u 56824 -IGtpZGRpbmc= 56825 -UENPREU= 56826 -IHdhdGNoZXI= 56827 -bG94 56828 -IOKX 56829 -RGF2ZQ== 56830 -X2FsbG93 56831 -IGJpc2V4dWFs 56832 -IHVub3JkZXJlZA== 56833 -IFNjaHdl 56834 -X3NlZ21lbnRz 56835 -IHRlYXJpbmc= 56836 -SU5MSU5F 56837 -IHVuZGVz 56838 -Lmdvb2Rz 56839 -LmNhbQ== 56840 -IExX 56841 -CXdoZXJl 56842 -Q2FsY3VsYXRvcg== 56843 -LXRocmVhdA== 56844 -LWFsZXJ0 56845 -IFN1enVraQ== 56846 -IElQQQ== 56847 -IEF0dGFjaG1lbnQ= 56848 -QUNDRVNT 56849 -KGR0eXBl 56850 -T3Bw 56851 -X3N5bWJvbHM= 56852 -IGRhbnNrZQ== 56853 -bGFnZQ== 56854 -b3JnZXQ= 56855 -cmVzb2x1dGlvbg== 56856 -0LXRhw== 56857 -IFFDb2xvcg== 56858 -IEJhcnJldHQ= 56859 -0LDRhtC40Y8= 56860 -PVwn 56861 -IE5hdkNvbnRyb2xsZXI= 56862 -L3JlZg== 56863 -KGNvdW50cnk= 56864 -X0hEUg== 56865 -IHRlcnNlYnV0 56866 -cGV0aXRpb24= 56867 -IHN1Zg== 56868 -Y3JlZGl0cw== 56869 -4LmM 56870 -eG0= 56871 -IERhdmllcw== 56872 -LnJlZGRpdA== 56873 -IHdvdmVu 56874 -IE9ibA== 56875 -IEtN 56876 -IENvbnNpZGVyaW5n 56877 -ZW5zb3JlZA== 56878 -LnBlcmlvZA== 56879 -IGRkbA== 56880 -JHdw 56881 -IGV4dHJlbWlzdA== 56882 -O1wK 56883 -IGtpbQ== 56884 -YWxlcnM= 56885 -IHNwYW5uaW5n 56886 -IGNvaGVyZW50 56887 -IGNvbnNlZ3U= 56888 -LnRleHRMYWJlbA== 56889 -LmdlbmVyYWw= 56890 -X2Rhc2hib2FyZA== 56891 -0LvQtdC90LjQtQ== 56892 -a2ljaw== 56893 -X1BJRA== 56894 -IEV4dGVuc2lvbnM= 56895 -cmVnZXhw 56896 -IENsYXVzZQ== 56897 -X21vdg== 56898 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 56899 -IFJld2FyZA== 56900 -IExFR08= 56901 -QWs= 56902 -PS09LT0tPS0= 56903 -CXBhcnNlcg== 56904 -IG9uemU= 56905 -6YCA 56906 -4oCd44CC 56907 -X2JhbGw= 56908 -KHJocw== 56909 -IGNob3J1cw== 56910 -PGNvdW50 56911 -YXN1cmFibGU= 56912 -IHdpcmtsaWNo 56913 -IEVyaW4= 56914 -IE1TTkJD 56915 -IGV0dGVy 56916 -IENyb24= 56917 -X0ZMT1c= 56918 -ICwNCg== 56919 -IGNhbGlkYWQ= 56920 -IEZpbGVXcml0ZXI= 56921 -CXN0bXQ= 56922 -KEJ5dGU= 56923 -X3BhdA== 56924 -IHRlbGVzY29wZQ== 56925 -IGdyZWVk 56926 -IFRvcnQ= 56927 -KHdyaXRl 56928 -XGFwcGxpY2F0aW9u 56929 -CVJUTFI= 56930 -IENvbmZpZ3VyYXRpb25NYW5hZ2Vy 56931 -VW5peA== 56932 -RW5kVGltZQ== 56933 -SW5jbHVkZXM= 56934 -IEhhcnZlc3Q= 56935 -ZW5iZXJn 56936 -IEF1c3RyYWxpYW5z 56937 -IOuT 56938 -IHJu 56939 -IHJlcHV0YWJsZQ== 56940 -IGJsZW5kaW5n 56941 -VUxBVElPTg== 56942 -IEJyZW5kYW4= 56943 -ZGFk 56944 -IG3DuA== 56945 -IFdvbw== 56946 -X2Rj 56947 -VW5l 56948 -IHJ1ZQ== 56949 -d2l0aGlu 56950 -YW5nZXA= 56951 -IHBvdWNo 56952 -XCIiLA== 56953 -IFNpYw== 56954 -4oCdKSw= 56955 -YWx5emU= 56956 -IEdlZg== 56957 -Y292ZXJz 56958 -IGRibw== 56959 -cmVwbGFjZUFsbA== 56960 -CUxvZ2dlcg== 56961 -VHJ5aW5n 56962 -W3N0YXRl 56963 -LXBpZWNl 56964 -6ZaT 56965 -YmVoYXZpb3I= 56966 -YWxsb3dz 56967 -bHJ0 56968 -X3B5dGhvbg== 56969 -ZXJ0dXJh 56970 -LWNvdW50cnk= 56971 -IFRH 56972 -LlVJTWFuYWdlcg== 56973 -YmVucw== 56974 -YWxleA== 56975 -IEJyZWl0YmFydA== 56976 -YmFj 56977 -IHByZWRpY3Rz 56978 -IGdhYg== 56979 -IGNhcmRpbmFs 56980 -LlRpbWVVbml0 56981 -IFZpc2l0b3I= 56982 -IE1pbmc= 56983 -IGxpdnJl 56984 -IHBhcmVudElk 56985 -cG9ydHVu 56986 -IGRpbWVuc2lvbmFs 56987 -IFZlc3Q= 56988 -ZW5pYw== 56989 -4LM= 56990 -INmH 56991 -IEJMVUU= 56992 -IGl0ZW1Db3VudA== 56993 -IGZlYXRoZXJz 56994 -CXBzdG10 56995 -IFBvbGFy 56996 -ey8v 56997 -dW5kaQ== 56998 -0YPQtg== 56999 -emFy 57000 -RXJyb3JSZXNwb25zZQ== 57001 -7IOB 57002 -UmVwcmVzZW50YXRpb24= 57003 -Kl8= 57004 -K10= 57005 -cHJlcGVuZA== 57006 -ICc+ 57007 -IGxlZ2l0aW1hY3k= 57008 -IG9v 57009 -U2xpbmt5 57010 -IG5hdGlvbmFscw== 57011 -LndvcmRz 57012 -O3A= 57013 -dHJhcA== 57014 -b21hbmlw 57015 -IGN1ZXM= 57016 -IGdyYWR1YXRpbmc= 57017 -IHNlbWFwaG9yZQ== 57018 -Il0pOwoK 57019 -YWNleQ== 57020 -UkVFVA== 57021 -R3JhYg== 57022 -IEZlbGl4 57023 -KElk 57024 -X25laWdoYm9ycw== 57025 -IG1lYW5pbmdsZXNz 57026 -KGRlbA== 57027 -IGplZGVy 57028 -IENvbnRlbnRWYWx1ZXM= 57029 -LmFic29sdXRl 57030 -L2Ns 57031 -IHhi 57032 -ZGF0dW0= 57033 -IHRvcnR1cmVk 57034 -IHJ1YmJpbmc= 57035 -U2NvcmVz 57036 -IPCfmIk= 57037 -IGF2b25z 57038 -IGFtc3RlcmRhbQ== 57039 -RU9T 57040 -SGFs 57041 -IHRydXN0d29ydGh5 57042 -Iz0= 57043 -LkVYVFJB 57044 -IG1hbm8= 57045 -aXNpY2luZw== 57046 -LXN1cHBvcnQ= 57047 -CWN1cnNvcg== 57048 -IFNwbw== 57049 -YWltYXNzYWdl 57050 -TWlzc2lvbg== 57051 -W117Ig== 57052 -IHByaW50ZXJz 57053 -R1JFRU4= 57054 -IHRlZw== 57055 -IGFiZG9taW5hbA== 57056 -IQoKCgoKCg== 57057 -LlNob3J0 57058 -0LDQt9Cy 57059 -IEdpZnRz 57060 -fSIp 57061 -KGJpbmRpbmc= 57062 -eGNl 57063 -4oCR 57064 -aW5mb3M= 57065 -Rm9ybURhdGE= 57066 -IGRhcnQ= 57067 -IGVsZW1z 57068 -KGludg== 57069 -WUw= 57070 -dGlu 57071 -R0VORVI= 57072 -4buv 57073 -IFRha2Vu 57074 -dWNrbGU= 57075 -OmU= 57076 -IHNwZWN0cmFs 57077 -LmJhaWR1 57078 -LycpOwo= 57079 -IGdyZWVkeQ== 57080 -ZXNpb24= 57081 -LCwsLCwsLCw= 57082 -IC8+LAo= 57083 -SW50ZXJuYWxTZXJ2ZXJFcnJvcg== 57084 -TlNOb3RpZmljYXRpb25DZW50ZXI= 57085 -IEFp 57086 -IHNwaXQ= 57087 -IGF1Z21lbnRlZA== 57088 -IHN0YW5kYXJkVXNlckRlZmF1bHRz 57089 -RklOSVRZ 57090 -UmFjZQ== 57091 -OkM= 57092 -IFJFQ09SRA== 57093 -IEhpZ2hsaWdodA== 57094 -ICdg 57095 -IGRlZmljaXRz 57096 -IG5laQ== 57097 -IHJlc2VhcmNoZWQ= 57098 -VGE= 57099 -IGNvcHA= 57100 -LkdldEhhc2hDb2Rl 57101 -KToNCg0K 57102 -T25DbGljaw== 57103 -IFdlbGxpbmd0b24= 57104 -IHJldml2YWw= 57105 -5q+U 57106 -6Zeu 57107 -IE5TUw== 57108 -IGZvcm4= 57109 -IGludMOp 57110 -IEt1d2FpdA== 57111 -X2ZsaXA= 57112 -X2Jv 57113 -X1w= 57114 -IG9jY3VycmVuY2Vz 57115 -IFNjaWVudGlzdHM= 57116 -U1JD 57117 -b2dlbnM= 57118 -aWdyYW50 57119 -UkVNT1RF 57120 -IFNJRA== 57121 -Lm9wdHM= 57122 -dXZl 57123 -KCldKQo= 57124 -IGxpYmVydGFyaWFu 57125 -IEdsaWRl 57126 -bGVzZW4= 57127 -IGZvcm1l 57128 -b3dhbmlh 57129 -IGFubm95ZWQ= 57130 -RGVmcw== 57131 -IEV4ZWN1dG9y 57132 -IGNhc3Rz 57133 -LnNldENoZWNrZWQ= 57134 -IFNoYXJpbmc= 57135 -LlNlcmlhbGl6ZU9iamVjdA== 57136 -IHNlbGVjdG9ycw== 57137 -X09USEVS 57138 -66+4 57139 -KHN1cGVy 57140 -KE9T 57141 -X1ZFUklGWQ== 57142 -aWR1bnQ= 57143 -PGhlYWRlcg== 57144 -IC8+JzsK 57145 -IHZpZMOpbw== 57146 -IE5lZ3Jv 57147 -IExvcmRz 57148 -IFRvdXJz 57149 -IHNvZnRseQ== 57150 -LnJlY2VpdmU= 57151 -IEVSQw== 57152 -IGRhdGFTZXQ= 57153 -QmFkZ2U= 57154 -CUV2ZW50 57155 -IHBlcmw= 57156 -IHt9XA== 57157 -KHNlbnRlbmNl 57158 -T3JVcGRhdGU= 57159 -IGRpbWluaXNo 57160 -UElO 57161 -KGRyYXc= 57162 -LlRvRGF0ZVRpbWU= 57163 -LkVxdWFsVG8= 57164 -KHBpbg== 57165 -LXBlbmNpbA== 57166 -bHVlbnQ= 57167 -IENhbGxlcg== 57168 -IHBsYXlmdWw= 57169 -LScr 57170 -eGNh 57171 -c3dpY2s= 57172 -KXt9Cg== 57173 -fTokew== 57174 -IE1ldGg= 57175 -LmdldENlbGw= 57176 -LmJyZWFr 57177 -IHltYXg= 57178 -PSc8Pw== 57179 -LWpzb24= 57180 -IHByaW1laXJv 57181 -IGluZGljZQ== 57182 -44Kj 57183 -IFVOSVRZ 57184 -KGFi 57185 -0YbQuNC4 57186 -X0hBVkU= 57187 -LXllYXJz 57188 -IEVyZG9nYW4= 57189 -LXN0YWNr 57190 -IGRpc2NoYXJnZWQ= 57191 -IGJyZWF0aHRha2luZw== 57192 -IGdyYXNzcm9vdHM= 57193 -IEFzaWRl 57194 -aGVsbA== 57195 -IHNuYWtlcw== 57196 -L2xvZ291dA== 57197 -IG1pbldpZHRo 57198 -IEhlYXI= 57199 -IFN0b25lcw== 57200 -IFdpc2RvbQ== 57201 -IEV2ZW5pbmc= 57202 -X2JsYW5r 57203 -IFByb21vdGlvbg== 57204 -IE1NTQ== 57205 -IEJhcnM= 57206 -44K3 57207 -bmo= 57208 -X1RJ 57209 -IFNvY2lhbGlzdA== 57210 -IEVH 57211 -LW9wdA== 57212 -PVwiJA== 57213 -KGRpYWxvZw== 57214 -IGJlaG9sZA== 57215 -IGludHJpY2F0ZQ== 57216 -IGVyZWN0aWxl 57217 -RXh0cmFjdG9y 57218 -IHNjbA== 57219 -IGNsYXM= 57220 -KGhpc3Rvcnk= 57221 -aWRlbnRhbGx5 57222 -IHBuZXVt 57223 -UmFuZA== 57224 -IExhcHRvcA== 57225 -Y2FsbGVy 57226 -IEZsb29k 57227 -b3BlbmVk 57228 -dWRkZXI= 57229 -IEdldHRlcg== 57230 -X3dhbGs= 57231 -KHdlaWdodA== 57232 -IEFsZXhhbmRyaWE= 57233 -IHRhYmxlYXU= 57234 -VmFyaQ== 57235 -IC0tLS0tLS0t 57236 -6Iez 57237 -ZXdvcnRoeQ== 57238 -U3BlY2lmaWNhdGlvbg== 57239 -IHRocmVzaG9sZHM= 57240 -KCIiKTsKCg== 57241 -X2ZvdXI= 57242 -IFNhZGx5 57243 -IChfKQ== 57244 -aXNtYXRpYw== 57245 -IEphaWw= 57246 -dG9IYXZlQmVlbkNhbGxlZFdpdGg= 57247 -Lm1hcg== 57248 -IHByZXZpZXdz 57249 -IHNjYWZm 57250 -aW5kaWNhdG9y 57251 -IGNvZGVjcw== 57252 -IGF1dG9j 57253 -KHJ0 57254 -LmdldEhvdXJz 57255 -IFJI 57256 -IFN1cmdl 57257 -aXZhbWVudGU= 57258 -IGNvbnRlbmRlcg== 57259 -Q3BwR2VuZXJpY0NsYXNz 57260 -IDs7Xg== 57261 -OjoqOwo= 57262 -LXJlY29yZA== 57263 -IG1hbWE= 57264 -IGltZ3M= 57265 -LmlzTG9hZGluZw== 57266 -IG5lZWRsZXM= 57267 -IGVuY3VlbnRyYQ== 57268 -b2RhdGE= 57269 -IEJ1ZmZlcmVkSW1hZ2U= 57270 -CWphdmE= 57271 -IFRvbWI= 57272 -VU5JVFk= 57273 -IGxpbmdlcmll 57274 -IEphbWFpY2E= 57275 -YnVncw== 57276 -KioKCg== 57277 -IE1hbw== 57278 -LmJlZ2luUGF0aA== 57279 -IHByb3N0aXR1dA== 57280 -IFBoaWxpcHBpbmU= 57281 -X3Nm 57282 -X3Bvdw== 57283 -IFNjaG8= 57284 -eGRl 57285 -J8OpdA== 57286 -4oCZYXV0 57287 -YWlzb24= 57288 -IEZpbGVJbmZv 57289 -dHVybnN0aWxl 57290 -ZHJlYW0= 57291 -IGlWYXI= 57292 -c3ludGF4 57293 -aWxsaXNlY29uZHM= 57294 -cHJvZmlsZXM= 57295 -X1JFR0VY 57296 -INC00L4= 57297 -IENvbW11bg== 57298 -QmV0 57299 -aXB6aWc= 57300 -IE1lbW8= 57301 -Lmlkcw== 57302 -IHBob3RvZ3JhcGhlZA== 57303 -IGFwcHJveGltYXRpb24= 57304 -OnZhcmlhYmxlcw== 57305 -IG1vZGlmaWNhcg== 57306 -X1NNQUxM 57307 -IEhlbXA= 57308 -IGRpc3Jlc3BlY3Q= 57309 -IGNvbnRlc3RlZA== 57310 -IGlubm9jZW5jZQ== 57311 -aWxsaXM= 57312 -U3ltYm9scw== 57313 -IGluc3BpcmF0aW9uYWw= 57314 -IGRpc2NpcGxpbmFyeQ== 57315 -IFBlcm1hbmVudA== 57316 -IGRlc2Ny 57317 -IFVOREVS 57318 -0YHRiw== 57319 -cHJlc3Nvcg== 57320 -SU1FUg== 57321 -IG1vdW50cw== 57322 -IG1vcmFsbHk= 57323 -X1NFQ09ORA== 57324 -LmZpbGVOYW1l 57325 -44OX 57326 -IGNvbnN0cnVjdHM= 57327 -IFNVTg== 57328 -RVNQ 57329 -RmluYW5jaWFs 57330 -IE51cg== 57331 -w7RsZQ== 57332 -cmljdWxhcg== 57333 -IFVzZXJNYW5hZ2Vy 57334 -aWJpbGlkYWQ= 57335 -IG9uUmVzcG9uc2U= 57336 -IGZpbG1tYWtlcg== 57337 -IGFsb3Q= 57338 -X1RIUkVBRFM= 57339 -IGVudmlyb25tZW50YWxseQ== 57340 -Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u 57341 -IHJhc2g= 57342 -IEx5cmljcw== 57343 -IGlwYWlycw== 57344 -QmFja3Vw 57345 -U2lnbnVw 57346 -IEB7Cg== 57347 -SlVuaXQ= 57348 -d29ya2Zsb3c= 57349 -IENvbXBsZXRpb24= 57350 -IGludHVpdGlvbg== 57351 -8J0= 57352 -IG1pYQ== 57353 -IFNuYWNrYmFy 57354 -IFRpbg== 57355 -CWluc3RhbmNl 57356 -IE11c2ljYWw= 57357 -IHdlbGNvbWVz 57358 -IHJlZHJhdw== 57359 -X2NvbG91cg== 57360 -X1JFQUxUWVBF 57361 -X3NpbmNl 57362 -IEJ5dGVBcnJheU91dHB1dFN0cmVhbQ== 57363 -LWRlbWFuZA== 57364 -YXJldGg= 57365 -LnBhZA== 57366 -c2Vr 57367 -JywuLi4K 57368 -LWZpcmU= 57369 -Lnw= 57370 -IG51bWI= 57371 -IERPVUJMRQ== 57372 -QU1BR0U= 57373 -Y2htb2Q= 57374 -LWls 57375 -IGFsYXJtaW5n 57376 -Q29w 57377 -5aSH 57378 -aW52aXRl 57379 -X0lURU1T 57380 -IGxldWs= 57381 -IHJlZWw= 57382 -IGZ1bGZpbGxtZW50 57383 -UmVzdG9yZQ== 57384 -X3Jy 57385 -KGNsYXNzZXM= 57386 -IHBhZ2luZw== 57387 -eW1heA== 57388 -cmFwcGVk 57389 -7ZmU 57390 -fWB9Pgo= 57391 -IEhpcm8= 57392 -KFRSVUU= 57393 -YXN1cmVy 57394 -IGN1ZXI= 57395 -VWJlcg== 57396 -Lk9wZXJhdGlvbg== 57397 -IG9sYW4= 57398 -IHRocmlsbGluZw== 57399 -PFJlc3BvbnNl 57400 -IEZlbWlu 57401 -IHRyYXZlcnNhbA== 57402 -IHBvYw== 57403 -IHNldFN0YXR1cw== 57404 -ZGVjbGFy 57405 -c3RkYWZ4 57406 -IGFkZGljdGl2ZQ== 57407 -IEJ0bg== 57408 -IGV4cGxvc2l2ZXM= 57409 -IENvb2tpbmc= 57410 -IFBsYWludA== 57411 -IGFjY3VtdWxhdG9y 57412 -IEFwcG9pbnRtZW50 57413 -LHBhc3N3b3Jk 57414 -IEZBUg== 57415 -bHVldA== 57416 -RnVydGhlcm1vcmU= 57417 -ZGVjbHNwZWM= 57418 -X1N0YXRpY3M= 57419 -LkRpY3Rpb25hcnk= 57420 -Ij4nLg== 57421 -CXZhbGlk 57422 -IiIs 57423 -SW5zdHJ1bWVudA== 57424 -Pko= 57425 -IG5vc3Ry 57426 -IFJpZnQ= 57427 -X1BvcnQ= 57428 -IHZlY2Vz 57429 -W1sn 57430 -IHJhbGxpZXM= 57431 -LXNlcmllcw== 57432 -IHZ2 57433 -LnVj 57434 -IHJ0bg== 57435 -U3RhdGVDaGFuZ2Vk 57436 -KGlucw== 57437 -IENsYQ== 57438 -LS0tLS0tLS0tLS0tCg== 57439 -Y3Vz 57440 -IFJlbG9hZA== 57441 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 57442 -LnNlY29uZHM= 57443 -X2Rlc3RpbmF0aW9u 57444 -IHNjcmV3ZWQ= 57445 -PmM= 57446 -VGhpY2tuZXNz 57447 -RGVzaWduZXI= 57448 -IGdyaWRz 57449 -bsSF 57450 -KGNvb2tpZQ== 57451 -VHJpcA== 57452 -LU1vYmlsZQ== 57453 -IHZvbGw= 57454 -IGdlbml0YWw= 57455 -IGNvbmZpc2M= 57456 -IENvbmZlZGVyYXRl 57457 -IHdlYlZpZXc= 57458 -IG1pc2U= 57459 -IGNsZXI= 57460 -KHNlbGVjdGlvbg== 57461 -JGRhdGU= 57462 -IHNoYXJwZW4= 57463 -cmFnZW4= 57464 -QW5kVXBkYXRl 57465 -IHJlbWl4 57466 -IGh0b25z 57467 -Ulc= 57468 -TVBJ 57469 -IHJldHJpZXZhbA== 57470 -IHJpY2hlc3Q= 57471 -LkRlY29kZQ== 57472 -OmluaXRDb21wb25lbnRz 57473 -IFRWYWx1ZQ== 57474 -U2FpbnQ= 57475 -QGluY2x1ZGU= 57476 -IFBFUlNPTg== 57477 -LnNlcA== 57478 -IExEQVA= 57479 -Z2Jh 57480 -IGdyb8OfZQ== 57481 -IHJlbGlhYmx5 57482 -IERGUw== 57483 -LmdldEl0ZW1JZA== 57484 -IHByw6lzZW50 57485 -LmdldFRva2Vu 57486 -IGNoaW5lc2U= 57487 -IE1lYWw= 57488 -WU9V 57489 -Ij48Pz0k 57490 -KGNob2ljZQ== 57491 -IHBoZW5vbWVuYWw= 57492 -IFN0ZWVsZQ== 57493 -wqI= 57494 -IFBhY2thZ2VNYW5hZ2Vy 57495 -IFN5bmRyb21l 57496 -RGlyZWN0b3JpZXM= 57497 -aXZhcg== 57498 -LnVuc3Vic2NyaWJl 57499 -bGllw58= 57500 -bW9ubw== 57501 -X2Nvbm5lY3Rpb25z 57502 -X3ByZXNlbmNl 57503 -eW55 57504 -S25pZmU= 57505 -IGdyb292ZQ== 57506 -IHNjb29w 57507 -VEVNUEw= 57508 -YXNha2k= 57509 -LmhhbWNyZXN0 57510 -IGhhcmJvcg== 57511 -Y292 57512 -Kno= 57513 -IFh1 57514 -IHByb3Bvc2luZw== 57515 -IEZSQU1F 57516 -Q2hpcA== 57517 -IEVlbg== 57518 -IOyghA== 57519 -IHNtYXNoZWQ= 57520 -VW5zaWduZWQ= 57521 -KC4u 57522 -X2ZpbmlzaGVk 57523 -IGdldFN0YXR1cw== 57524 -IGZpYnJl 57525 -QXhlcw== 57526 -ICcvJyw= 57527 -eWFyZHM= 57528 -TURC 57529 -LWJz 57530 -aW50ZW50 57531 -IGJvb3N0ZXI= 57532 -LmRzdA== 57533 -LkRpYWxvZ1Jlc3VsdA== 57534 -IE1ldHM= 57535 -IGJlYXN0cw== 57536 -aW5jcmVtZW50cw== 57537 -LmthZmth 57538 -VUlBbGVydEFjdGlvbg== 57539 -LWV2ZXI= 57540 -X2JhbA== 57541 -IGhlbHQ= 57542 -IGZyZW9wZW4= 57543 -IFJlY3J1aXRtZW50 57544 -bGljdHM= 57545 -Zm9yZ2V0dGFibGU= 57546 -RGlzcGxheWVk 57547 -X1ZFTkRPUg== 57548 -Q29sbGVnZQ== 57549 -QVNDSUk= 57550 -IFNpbms= 57551 -IE1hY2Vk 57552 -IGN0b3I= 57553 -IGVzdMOjbw== 57554 -IFdpbmRzb3I= 57555 -X2NoZWNrZWQ= 57556 -X2RldGVjdA== 57557 -YXR0ZW5k 57558 -IHhtaW4= 57559 -IGluZGlzcGVucw== 57560 -L3BlcnNvbg== 57561 -X0RFVEFJTFM= 57562 -UkVESVQ= 57563 -SGF5 57564 -YWJvbGlj 57565 -IGZ1bmN0b29scw== 57566 -aWFpcw== 57567 -RlRQ 57568 -X1JlY3Q= 57569 -IEluZHk= 57570 -LXB1YmxpYw== 57571 -b2hhbg== 57572 -X21hbmFnZQ== 57573 -Q29tcHV0ZWQ= 57574 -7JeQ7ISc 57575 -IFNsaWNl 57576 -IGdheXM= 57577 -IGFsZXg= 57578 -YWl0cw== 57579 -IHJlY2VpcHRz 57580 -U1BFQw== 57581 -IEJFRk9SRQ== 57582 -IFByZWZpeA== 57583 -X3Zpc2l0 57584 -IHNwdW4= 57585 -TEVURUQ= 57586 -IGRvdw== 57587 -IGxlZ2FsaXphdGlvbg== 57588 -YWJiYWdl 57589 -IGNsYXc= 57590 -IFRjbA== 57591 -eGltYQ== 57592 -IGNvdmVydA== 57593 -Tmk= 57594 -IHRoYW5rZWQ= 57595 -IGFsbGVyZ2lj 57596 -bG92ZXI= 57597 -IEJyZWFzdA== 57598 -LmlzQWN0aXZl 57599 -IGdlYmVu 57600 -VkVSU0U= 57601 -Wk9ORQ== 57602 -CVJlc3VsdA== 57603 -JykuJw== 57604 -IGdlZQ== 57605 -IFNlcmlvdXNseQ== 57606 -cHVycGxl 57607 -IEVzcGHDsWE= 57608 -aWZpZQ== 57609 -LXBhY2s= 57610 -UGFydGljbGVz 57611 -ICcvLi4v 57612 -IG11bHRpbWVkaWE= 57613 -YXV0b2NvbXBsZXRl 57614 -IFRIUkVBRA== 57615 -IHJlZmVyZW5jaW5n 57616 -cmVldGluZ3M= 57617 -IHF1b3Rpbmc= 57618 -IGFzc2lzdGFudHM= 57619 -amVuaXM= 57620 -aGFwcHk= 57621 -IGxheXM= 57622 -bGliZnQ= 57623 -eGRh 57624 -IGZvdQ== 57625 -cGlhcg== 57626 -UmVjb21tZW5kZWQ= 57627 -IEJpcmRz 57628 -IFdhcnJhbnR5 57629 -w7xybGljaA== 57630 -LklOVklTSUJMRQ== 57631 -X2FuY2hvcg== 57632 -4oCdOg== 57633 -RmFudA== 57634 -X2RlZnM= 57635 -IGRyZWFtZWQ= 57636 -IF9fX19fX18s 57637 -cGxh 57638 -w6RmdA== 57639 -b2RrYQ== 57640 -xLFz 57641 -IGRhZGR5 57642 -c2NoZW1hcw== 57643 -PXplcm9z 57644 -IHJhdHQ= 57645 -CQkgICAgCQ== 57646 -aWVq 57647 -IGRyaWxscw== 57648 -LTw/ 57649 -QUJB 57650 -Lmxpbmtz 57651 -IERlcGVuZGVuY3lQcm9wZXJ0eQ== 57652 -Lmxvdw== 57653 -aGVlZA== 57654 -X0JMQUNL 57655 -L0FkbWlu 57656 -IGFtaWdvcw== 57657 -aW5nZWQ= 57658 -IE1pY2tleQ== 57659 -LkdldEF4aXM= 57660 -IE5lZWRlZA== 57661 -IEVuY29kZQ== 57662 -w6lyaWV1cg== 57663 -IE1hbmlsYQ== 57664 -IENvbGxlZw== 57665 -YWRhc3Rybw== 57666 -IGNoaWNhcw== 57667 -5L2g 57668 -IG9uZXNlbGY= 57669 -eGVh 57670 -ZHVr 57671 -IGd3 57672 -dXJnaWNhbA== 57673 -IENlbnRybw== 57674 -IGFlcw== 57675 -ZmVlbA== 57676 -IHRyb3Q= 57677 -IGVsZWN0cm9ucw== 57678 -IHJpdHVhbHM= 57679 -IEJpbGRlcg== 57680 -IGRlY29yYXRl 57681 -IFRva2VuVHlwZQ== 57682 -IGx1cmU= 57683 -QXBpQ2xpZW50 57684 -Z3JwYw== 57685 -IE9yYw== 57686 -Q29udGV4dE1lbnU= 57687 -UFJFRklY 57688 -LXRoZW1lZA== 57689 -X2ZpZm8= 57690 -LklucHV0U3RyZWFtUmVhZGVy 57691 -X3NwZWNpZmlj 57692 -IERTUA== 57693 -PXN1YnByb2Nlc3M= 57694 -L3NoZQ== 57695 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 57696 -IGRhdW50aW5n 57697 -IGNsZWFycw== 57698 -IE1vdmVz 57699 -IG15c3Rlcmllcw== 57700 -LWJlc3Q= 57701 -IFZ1 57702 -b2xpYg== 57703 -IElzaA== 57704 -IGNhcmFjdA== 57705 -KExhYmVs 57706 -IERlYmlhbg== 57707 -IEV4cGVyaW1lbnRhbA== 57708 -IGNhdg== 57709 -LlRvRGVjaW1hbA== 57710 -IFJob2Rlcw== 57711 -IEhhd2tz 57712 -IGZvdW50YWlu 57713 -X1BFTkRJTkc= 57714 -X1NV 57715 -IHd4U3RyaW5n 57716 -IFBldw== 57717 -LmNsaQ== 57718 -0YTQvtGA0Lw= 57719 -LndlYmtpdA== 57720 -X0NO 57721 -IDs7PQ== 57722 -CW5hbWVzcGFjZQ== 57723 -IHdQYXJhbQ== 57724 -IHB1cHBpZXM= 57725 -IHRlcm1pbm9sb2d5 57726 -IGFkZGljdGVk 57727 -IGZvcmdl 57728 -IEdhcmRuZXI= 57729 -IHBlc3NvYQ== 57730 -CVJlc3VsdFNldA== 57731 -IGF0dGVudQ== 57732 -YW5nZW1lbnQ= 57733 -X2luZHM= 57734 -Q2hp 57735 -YXJpdGg= 57736 -RW5jb2RpbmdFeGNlcHRpb24= 57737 -bW91c2Vkb3du 57738 -IEJFVFdFRU4= 57739 -d2VpZ2g= 57740 -IkZvcg== 57741 -LmRk 57742 -aXRlbA== 57743 -WU8= 57744 -IERpY2U= 57745 -dW5peA== 57746 -IE9idA== 57747 -IENlZGFy 57748 -IHNwZWNpbWVucw== 57749 -cG9ybg== 57750 -IHVub2ZmaWNpYWw= 57751 -6buR 57752 -c29tZXRpbWVz 57753 -IEJ1bGxk 57754 -dHJ1c3Q= 57755 -Z2V0UmVzdWx0 57756 -IHNtb2tlcnM= 57757 -IHNhbmR3aWNoZXM= 57758 -IGV4aA== 57759 -IEZhZGU= 57760 -X0RD 57761 -IG1hc3R1cmJhdGlvbg== 57762 -Zm9ydGF3ZXNvbWU= 57763 -VEhJTkc= 57764 -X2FuZHJvaWQ= 57765 -IGRlZGlj 57766 -LXNlbnNpdGl2ZQ== 57767 -IG5hY2t0 57768 -TElCSU5U 57769 -IGFnb24= 57770 -IERJU0FCTEU= 57771 -b25lc2lh 57772 -Ymllcw== 57773 -IFpJUA== 57774 -IGhhdW50ZWQ= 57775 -IGN1aWQ= 57776 -L2NhcnQ= 57777 -a29z 57778 -CVJUTFU= 57779 -IGhpbmRlcg== 57780 -IGFkaXBpc2ljaW5n 57781 -SUVOQ0U= 57782 -LmJhbms= 57783 -IEN5cHJ1cw== 57784 -bWl4ZWQ= 57785 -LmN5 57786 -LXNpbmdsZQ== 57787 -PGxlbg== 57788 -Q29taW5n 57789 -IGZhdWx0cw== 57790 -IGZvcmVzZWU= 57791 -Z2V0bGluZQ== 57792 -ImE= 57793 -IGJyYWc= 57794 -IGRpc2Nz 57795 -IHJpcGU= 57796 -IG7DpnI= 57797 -IEdH 57798 -U0hPVA== 57799 -ZGVyYWJhZA== 57800 -KGVkaXQ= 57801 -VG9MZWZ0 57802 -W10pOwo= 57803 -IGRvR2V0 57804 -dmF0dXJl 57805 -TmVlZGVk 57806 -IENoZW5n 57807 -Y2Np 57808 -RUZJ 57809 -IGZldWQ= 57810 -IGx1bmFy 57811 -LlNoYXBl 57812 -Tm9ib2R5 57813 -X1RSSUdHRVI= 57814 -Q3k= 57815 -Z3JvdW5kQ29sb3I= 57816 -IFJlbW92YWw= 57817 -KGJvdHRvbQ== 57818 -JG1zZw== 57819 -U0NJSQ== 57820 -cml0eg== 57821 -IGZyZW50ZQ== 57822 -IGNvbXBvc3Q= 57823 -YW5zd2VyZWQ= 57824 -IFJvZHI= 57825 -X0hUTUw= 57826 -IHNpbGhvdWV0dGU= 57827 -IFFVRVNU 57828 -IENhdGhlZHJhbA== 57829 -LkNvbW1lbnQ= 57830 -IE1u 57831 -LW5ldHdvcms= 57832 -LmdldEZpbGU= 57833 -LmdlbmVyYXRvcg== 57834 -IENoZWNrb3V0 57835 -X3pvb20= 57836 -IGVuY29kZVVSSUNvbXBvbmVudA== 57837 -X1RD 57838 -c29t 57839 -IFNlcmll 57840 -IGJhc2VVUkw= 57841 -CXJ1bg== 57842 -IGh1aA== 57843 -LnNlbGVjdGVkSW5kZXg= 57844 -IFNUQVI= 57845 -fi1+LQ== 57846 -YWJjZGVmZ2g= 57847 -Lm1hcHBpbmc= 57848 -PWRhdGV0aW1l 57849 -Q29vbA== 57850 -bmlt 57851 -IERpcmVjdGl2ZQ== 57852 -RmVkZXJhbA== 57853 -IG1lbnVJdGVt 57854 -INCQ 57855 -QW5uYQ== 57856 -IFJlY3JlYXRpb24= 57857 -cnlhbg== 57858 -LWFnZWQ= 57859 -emVyYmFp 57860 -4oCm4oCdCgo= 57861 -Y2FtcG8= 57862 -IG1pbmlhdHVyZQ== 57863 -ZGV0YWNo 57864 -bWVhbmluZw== 57865 -X2VtcA== 57866 -UGVhaw== 57867 -IGJjbQ== 57868 -IEh1bmdhcmlhbg== 57869 -IENhc2NhZGU= 57870 -IHNhY2tz 57871 -IHRydW5jYXRl 57872 -IOKWiOKWiA== 57873 -IHdoYWxlcw== 57874 -IHNvcnRhYmxl 57875 -IGFzc2VydHM= 57876 -IHNlYWxz 57877 -b2N5dGVz 57878 -XSkpKQo= 57879 -YWxhcm0= 57880 -cmVzc2luZw== 57881 -KHNpZ25hbA== 57882 -IGVtcGVyb3I= 57883 -CU9O 57884 -Y29tbWl0dGVl 57885 -IHRyaWxvZ3k= 57886 -LlRyYW5zYWN0aW9uYWw= 57887 -R3Jvdw== 57888 -X3VhcnQ= 57889 -IHN3aW5ncw== 57890 -IHNwZWN0YWNsZQ== 57891 -4oCZYXY= 57892 -IFNlbnRpbmVs 57893 -INmE 57894 -IFRvdQ== 57895 -IHdpZG93 57896 -Z2VyYWxk 57897 -LHVpbnQ= 57898 -IHVudXN1YWxseQ== 57899 -PENhcmQ= 57900 -IFJlc3RhcnQ= 57901 -bW9y 57902 -44GC44KK 57903 -aXhlZFJlYWxpdHk= 57904 -IGhhbmRndW4= 57905 -4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 57906 -IGxpdGhpdW0= 57907 -UmVzb2x2ZQ== 57908 -Z2V0Qnl0ZXM= 57909 -L2Z1bmN0aW9ucw== 57910 -IHRhY2tsaW5n 57911 -T3V0bGluZWQ= 57912 -IH08Lw== 57913 -IFNleG8= 57914 -IEFuaw== 57915 -IHJhdGlvbmFsZQ== 57916 -cmVtb3ZlQXR0cg== 57917 -IG11bmljaXBhbGl0eQ== 57918 -IGFzc2F1bHRz 57919 -Q0hPT0w= 57920 -IFJlZQ== 57921 -IGJhdWQ= 57922 -pqw= 57923 -IGVuaGFuY2Vz 57924 -INC/0YDQtdC0 57925 -IGNvbmNlc3M= 57926 -Lmluc3RhZ3JhbQ== 57927 -LmdldFJlc3BvbnNl 57928 -c2VnbWVudHM= 57929 -IHdlbGxiZWluZw== 57930 -fTsKCgoK 57931 -aHVuZw== 57932 -44OG 57933 -IHJlbm92YXRlZA== 57934 -LmV4cGVjdGVk 57935 -IHJhZGlhbA== 57936 -IGNvbW11bmFs 57937 -dXNlck1hbmFnZXI= 57938 -K2E= 57939 -IGZ1bmRhbWVudGFscw== 57940 -LlRI 57941 -6II= 57942 -IHJhbnQ= 57943 -IFN0cmF3 57944 -IE9sZURi 57945 -YXppbw== 57946 -IGhhbWJ1cmc= 57947 -IHBhaW50cw== 57948 -IHRodW1icw== 57949 -IE51bGxQb2ludGVyRXhjZXB0aW9u 57950 -IGdyb3VwZQ== 57951 -IEhvbWVDb21wb25lbnQ= 57952 -IGJhbGxv 57953 -IElOSVRJQUw= 57954 -X2FyZQ== 57955 -IFBlcw== 57956 -dXJzZXM= 57957 -IGJhcmR6bw== 57958 -LmdldExlbmd0aA== 57959 -YW1vdG8= 57960 -Lm5vdGlmeURhdGFTZXRDaGFuZ2Vk 57961 -aWVuZXM= 57962 -ZW56aWU= 57963 -X2VtYg== 57964 -dW1uaQ== 57965 -c21vb3Ro 57966 -IERybw== 57967 -cGFzdGU= 57968 -IE5hcnI= 57969 -LS0tLQoK 57970 -z4k= 57971 -IEF1dG9y 57972 -IG91dHJvcw== 57973 -IExBQkVM 57974 -LnBh 57975 -LlN0dWRlbnQ= 57976 -KFhtbA== 57977 -IGV0aG5pY2l0eQ== 57978 -IEl2eQ== 57979 -44KI 57980 -X2Zha2U= 57981 -Pyg6 57982 -dXBsb2FkZWQ= 57983 -Z2V0TWFuYWdlcg== 57984 -LVFhZWRh 57985 -b2RpYWM= 57986 -Q29ubm9y 57987 -aWhhbg== 57988 -TUFU 57989 -KG1pZA== 57990 -IEFsYmFu 57991 -IHNvaXI= 57992 -Q29tYm8= 57993 -IFB1YmxpY2F0aW9u 57994 -b3BvdWxvcw== 57995 -cGlz 57996 -IHRlbXBsZXM= 57997 -b25neWFuZw== 57998 -X2NsaWVudHM= 57999 -IHJvZHM= 58000 -IHhj 58001 -aWprZW4= 58002 -IHJlYXA= 58003 -IOS4i+WNiA== 58004 -CWNvbm5lY3Q= 58005 -Rm9jdXNlZA== 58006 -LGNvdW50 58007 -aWV0ZXQ= 58008 -IGhhY2lh 58009 -X2FsbG9jYXRvcg== 58010 -IHRveGljaXR5 58011 -KHNlcXVlbmNl 58012 -IG51ZXN0cm9z 58013 -IFByaW5jaXBsZXM= 58014 -IGxsZQ== 58015 -YWxhcmlh 58016 -LndyaXRlU3RyaW5n 58017 -IEFGTA== 58018 -aWZuZGVm 58019 -IERvcw== 58020 -xZtjaWU= 58021 -IEFnZ3JlZ2F0ZQ== 58022 -IHNhY3JpZmljZXM= 58023 -X29mZnNldHM= 58024 -bGRi 58025 -IGxhdGNo 58026 -IGZ1bGxzY3JlZW4= 58027 -bWlzc2l2ZQ== 58028 -T1BUSU9OUw== 58029 -IFRlbGVwaG9uZQ== 58030 -IGFyc2VuYWw= 58031 -amVqZXI= 58032 -IEhvc3A= 58033 -IGZhdm91cml0ZXM= 58034 -cml2ZQ== 58035 -LmluY3JlbWVudA== 58036 -IGJ2 58037 -IEZhbnRhc3RpYw== 58038 -LnNheQ== 58039 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 58040 -IG1lZGljaW5hbA== 58041 -IERST1A= 58042 -IHBpdHk= 58043 -bWV0aXM= 58044 -IHdvbGxlbg== 58045 -IGJlZg== 58046 -X0Js 58047 -ID4+Cgo= 58048 -Ym93ZXI= 58049 -IHN3YXBwZWQ= 58050 -L2luc3RhbGw= 58051 -IHNpbmtz 58052 -ZXRyaXpl 58053 -IGRlY2xpbmVz 58054 -CW15c3Fs 58055 -IENTdHJpbmc= 58056 -IE1vdGlvbkV2ZW50 58057 -Lkxhbmd1YWdl 58058 -Um9hZA== 58059 -0YLQtdGA 58060 -YXNjaW1lbnRv 58061 -JykpLT4= 58062 -LmFib3V0 58063 -KGVkaXRvcg== 58064 -IFJhdGluZ3M= 58065 -aW5jb21l 58066 -xaFl 58067 -LmRlcXVldWVSZXVzYWJsZUNlbGw= 58068 -IEF1c3RyaWFu 58069 -IHN1bGxh 58070 -IFRyaWJ1bmFs 58071 -IERpZG4= 58072 -0L7QstCw0YA= 58073 -IGluc3BlY3Rpb25z 58074 -Qm9zcw== 58075 -IGNvY2t0YWlscw== 58076 -IGFwb2xvZ2l6ZWQ= 58077 -X3N1YnBsb3Q= 58078 -b3BhbA== 58079 -Kz0o 58080 -IHJlc29uYW5jZQ== 58081 -aWJ1 58082 -IOumrA== 58083 -cm9tYQ== 58084 -cmVzZXJ2ZQ== 58085 -cGxz 58086 -IFRhaA== 58087 -YXhpZXM= 58088 -T1BMRQ== 58089 -IERhcnJlbg== 58090 -IFpvbWJpZQ== 58091 -X01hcA== 58092 -IF0pCgo= 58093 -IFFp 58094 -IFNhaWw= 58095 -IHJlc3RyaWN0aXZl 58096 -IGVyb3Npb24= 58097 -LXBhcg== 58098 -V0hJVEU= 58099 -IG9sZHU= 58100 -IGFwZXJ0dXJl 58101 -IGJpdGNvaW5z 58102 -dGV4dG8= 58103 -IENvbWNhc3Q= 58104 -IHRpbWVsZXNz 58105 -ZW5raW5z 58106 -IGZlZWRlcg== 58107 -L3RtcA== 58108 -cmVzZGVu 58109 -Kydf 58110 -LkRlc3Ryb3k= 58111 -IMOnb2s= 58112 -IERPQ1VNRU5U 58113 -LmxuZw== 58114 -LnRhZ05hbWU= 58115 -IGt1bGxhbg== 58116 -ZWdyYXRl 58117 -ICgqLg== 58118 -57yW6L6R 58119 -IGhhbmRzaGFrZQ== 58120 -c29j 58121 -X2dlb21ldHJ5 58122 -IERhbWFzY3Vz 58123 -TWlub3I= 58124 -IEthZmth 58125 -7Jes 58126 -RmxvcmlkYQ== 58127 -X2NvbXB1dGU= 58128 -LmV4cHI= 58129 -IHBhcmFsbGU= 58130 -IERpYXo= 58131 -Y2ly 58132 -W3RhcmdldA== 58133 -IGpva2luZw== 58134 -IGdsb3I= 58135 -KHNldHE= 58136 -X2hhbmRsZXJz 58137 -SGFuZw== 58138 -IGZlcnI= 58139 -cmltaW5hbA== 58140 -CSAgICAJCQ== 58141 -ZW50aWVz 58142 -ZGVmaW5lcw== 58143 -LXRheA== 58144 -anNvbnA= 58145 -IFVQUw== 58146 -bWV0cm8= 58147 -X187Cg== 58148 -IFVnYW5kYQ== 58149 -XSkpOgo= 58150 -X3Rk 58151 -eGFl 58152 -bHc= 58153 -Lk9T 58154 -IExvZ2dlZA== 58155 -YWNpZA== 58156 -IE1heW8= 58157 -YXNwZWN0 58158 -IHZhZ2luYWw= 58159 -IGluaXRpYWxpemluZw== 58160 -IHN0ZXJvaWRz 58161 -ZmljdGlvbg== 58162 -R1JF 58163 -Z2VuZA== 58164 -IGxpYWJpbGl0aWVz 58165 -IExldHM= 58166 -TWVjaA== 58167 -KG5j 58168 -KGNoYW5nZQ== 58169 -IGNvbm5lY3RvcnM= 58170 -Oms= 58171 -IHRhc3Q= 58172 -ISIpOwoK 58173 -dGhpbmdz 58174 -cm9waHk= 58175 -bHVldG9vdGg= 58176 -IFNpZ25VcA== 58177 -LmN0cmw= 58178 -IHRoZXJlaW4= 58179 -b3JkYQ== 58180 -LmVzY2FwZQ== 58181 -aWdhdG9y 58182 -IHBldHJvbA== 58183 -IHNwZWNpbWVu 58184 -IGRlYnV0ZWQ= 58185 -LVBybw== 58186 -IGNyaXNlcw== 58187 -LmFkZFZpZXc= 58188 -64+Z 58189 -LWRvb3I= 58190 -IG1vbmV0 58191 -IG1pbGxpcw== 58192 -IHZpZXI= 58193 -SW50ZXJuYWxFbnVtZXJhdG9y 58194 -IGFkbWlucw== 58195 -IExhaXI= 58196 -emlu 58197 -Z2V0UXVlcnk= 58198 -dW1ibGVz 58199 -TElNSVQ= 58200 -IFZpZw== 58201 -X3Nvbmc= 58202 -PENoYXJhY3Rlcg== 58203 -Ojou 58204 -X2hvbQ== 58205 -X2Jw 58206 -IFN1cGVydmlzb3I= 58207 -c3VibWlzc2lvbg== 58208 -YWJpbGU= 58209 -IG5vaQ== 58210 -T3JDcmVhdGU= 58211 -IHBlZWw= 58212 -IG9uU3RhcnQ= 58213 -IHNlbnRpbWVudHM= 58214 -dmVoaWNsZXM= 58215 -IGNsYXNzcm9vbXM= 58216 -IHN6ZXI= 58217 -IGJlbmRpbmc= 58218 -IGxvbmdldml0eQ== 58219 -IGFjbA== 58220 -IEFsZXBwbw== 58221 -IFVN 58222 -IFJpY2h0 58223 -IG11bHRpcHJvY2Vzc2luZw== 58224 -RE9NQUlO 58225 -IiwiKw== 58226 -X1lFQVI= 58227 -IHNjcmFwZQ== 58228 -IHNvbGl0YXJ5 58229 -ICJdIjsK 58230 -L2Vycm9ycw== 58231 -7J6s 58232 -nOugpQ== 58233 -YmV0dGVy 58234 -CW51bWJlcg== 58235 -IExG 58236 -IEFjcm9zcw== 58237 -UHViTWVk 58238 -XCIi 58239 -IEV4Y2VsbGVuY2U= 58240 -IHVzYW5kbw== 58241 -IFVJUA== 58242 -QWN0aXZpdHlJbmRpY2F0b3I= 58243 -X1ZPSUQ= 58244 -IGJyZWVkcw== 58245 -772l 58246 -dWVzdGFz 58247 -IFRyZWFzdXJl 58248 -dXN0cmFsaWFu 58249 -KGZhY2U= 58250 -IFRlbm5pcw== 58251 -CUludA== 58252 -IEhhbnNlbg== 58253 -57U= 58254 -Okk= 58255 -IOKclA== 58256 -R1JBWQ== 58257 -T1VTRQ== 58258 -IGhlcGF0 58259 -oO0= 58260 -QUlS 58261 -w7PFvA== 58262 -IHF1ZXVlZA== 58263 -dmluY2lh 58264 -IENocm9taXVt 58265 -IGNvbXBldGVuY2U= 58266 -dW5nYWw= 58267 -aWxsaQ== 58268 -IGdldEJ5 58269 -IEZpbmRlcg== 58270 -IGluY2FwYWJsZQ== 58271 -IHNhZGQ= 58272 -IGNpdGVz 58273 -IENodXJjaGlsbA== 58274 -U2Rr 58275 -TW9yZW92ZXI= 58276 -QXNwTmV0 58277 -KEZsb2F0 58278 -JHBhc3N3b3Jk 58279 -IENvbm5vcg== 58280 -LXNlc3Npb24= 58281 -X2Rt 58282 -Kikp 58283 -IGRldXRzY2g= 58284 -IE5Y 58285 -IHBlcmtz 58286 -X1NPUlQ= 58287 -X1RPT0w= 58288 -X1ZJU0lCTEU= 58289 -LmFzcA== 58290 -5oiW 58291 -IEJyZWF0aA== 58292 -RGV0ZWN0 58293 -IER1ZWw= 58294 -LmNtYg== 58295 -W2l0 58296 -LlNldEJvb2w= 58297 -IG5hcmNpc3M= 58298 -IGFiaWRl 58299 -IGVqZW1wbG8= 58300 -IOKElQ== 58301 -IG1vcm5pbmdz 58302 -IGNvbXB1dGVz 58303 -LnNzbA== 58304 -anQ= 58305 -IG11Y2hvcw== 58306 -X1NT 58307 -W2VuZA== 58308 -IGJhc2lu 58309 -IGFsZ3Vub3M= 58310 -IENyb2F0aWE= 58311 -bGluZXdpZHRo 58312 -KHRhZ3M= 58313 -KGhpZGRlbg== 58314 -w61jaW8= 58315 -IGFwYXI= 58316 -INC2 58317 -5LiO 58318 -LmZvb2Q= 58319 -IFJ1cmFs 58320 -IGJyZWFkdGg= 58321 -5b2x 58322 -KHNlc3M= 58323 -KyIp 58324 -IFBhc3Rl 58325 -IHNlcnZpZG9y 58326 -IEJpdFNldA== 58327 -IFRyYW4= 58328 -bGF1cw== 58329 -dmV0dGU= 58330 -ZXllcw== 58331 -IENMSUNL 58332 -IFZJSUk= 58333 -IFR1cm5z 58334 -IExlQnJvbg== 58335 -IE11ag== 58336 -IERlZw== 58337 -IEFkdWx0cw== 58338 -X3N1aXRl 58339 -cHJvY2Vzc2FibGU= 58340 -IFBIWQ== 58341 -Z2hlc3Q= 58342 -LkZhaWw= 58343 -IFNsYWNr 58344 -Y2Vq 58345 -XENhcmJvbg== 58346 -IHN1cGVyc3Rhcg== 58347 -IGhvbGRpbmdz 58348 -KGZvcm1z 58349 -ICcjJw== 58350 -TXVsdGlw 58351 -KCJbJQ== 58352 -LXNvbGlk 58353 -L3VybA== 58354 -LXRpZXI= 58355 -W2xlbmd0aA== 58356 -IFN0cmVhbVdyaXRlcg== 58357 -IE1hcmtldHBsYWNl 58358 -Z2V0dGV4dA== 58359 -X1RJQ0s= 58360 -IEZvcmdl 58361 -IGJsYWNramFjaw== 58362 -IERPRVM= 58363 -IE1hdHRlcnM= 58364 -d2F2ZXM= 58365 -IHdoaXNwZXJlZA== 58366 -IGx1c2g= 58367 -7Jik 58368 -ZGlnaXRhbA== 58369 -IHdyaW5r 58370 -IEhvZ2Fu 58371 -IHJ1c3RpYw== 58372 -LkFwcGx5UmVzb3VyY2Vz 58373 -IEhhcmR5 58374 -b3NvbWVz 58375 -QVVU 58376 -LlNUQVRF 58377 -IG5hcnJhdGl2ZXM= 58378 -CXN0b3Jl 58379 -Ymli 58380 -CVNjYW5uZXI= 58381 -IENvZHk= 58382 -XFJlcG9zaXRvcmllcw== 58383 -IHJldW5pb24= 58384 -YW5kdW0= 58385 -4oCZaA== 58386 -IHNuaWZm 58387 -TlNCdW5kbGU= 58388 -IGNvbXByZWhlbmQ= 58389 -X1VTQUdF 58390 -X29jYw== 58391 -VVJSRU5DWQ== 58392 -Sk5J 58393 -IHNwZWNpYWxpemluZw== 58394 -IHZpc2lvbnM= 58395 -IGRvbG9yZQ== 58396 -IHbDoQ== 58397 -IENoZXZ5 58398 -IFN0eWxlZA== 58399 -aW1wYWN0 58400 -YWxsZW4= 58401 -IGthcnQ= 58402 -IFRhYmxldA== 58403 -c3R1ZmY= 58404 -cmVlc29tZQ== 58405 -0LDRgtC+0YA= 58406 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 58407 -X0FkbWlu 58408 -IGNlbGxwaG9uZQ== 58409 -IGF1dG9wbGF5 58410 -IGNhbWJpbw== 58411 -IG1hcml0aW1l 58412 -X0JPT1Q= 58413 -LXF1YXJ0ZXI= 58414 -IGxhdGluYQ== 58415 -IEFKQVg= 58416 -ZXF1aXY= 58417 -IEZyb250aWVy 58418 -IFhZ 58419 -fV0K 58420 -IFJvdWdo 58421 -LnByb3Rv 58422 -IGNvcnJlY3RuZXNz 58423 -IGZhY2ls 58424 -IFJlYWNoZWQ= 58425 -44Gd44Gu 58426 -VklT 58427 -LnBz 58428 -IHN0cm5jcHk= 58429 -IGRpZmZ1c2lvbg== 58430 -LnN0YXJ0QWN0aXZpdHk= 58431 -77+977+977+9 58432 -IGFjY29tcA== 58433 -QU1FU1BBQ0U= 58434 -aW1vbmlhbHM= 58435 -IEJsYXN0 58436 -YWJ5cmlu 58437 -IGRvbWU= 58438 -IGV4dHJhdg== 58439 -IHllbg== 58440 -IGN1bGluYXJ5 58441 -UFJJ 58442 -IENvbW11bml0aWVz 58443 -bmlk 58444 -X29wZXJhdGlvbnM= 58445 -Lmhz 58446 -IE1pbHRvbg== 58447 -IG5vaXNlcw== 58448 -QXV0b3Jlc2l6aW5nTWFzaw== 58449 -KGNpZA== 58450 -fQoKCgoKCg== 58451 -XX0sCg== 58452 -IERldGVjdGlvbg== 58453 -dGFibGE= 58454 -IGxpYmVydGllcw== 58455 -X0RZTkFNSUM= 58456 -d2dldA== 58457 -IFTDvHI= 58458 -IFBhc2NhbA== 58459 -VHJhbnNwYXJlbnQ= 58460 -RGVsYXllZA== 58461 -XSgp 58462 -IEhlcmJlcnQ= 58463 -PEFjdGlvblJlc3VsdA== 58464 -Y2hhbGxlbmdl 58465 -IG11c2hyb29t 58466 -Lmluc2VydEJlZm9yZQ== 58467 -IFJpbg== 58468 -IGh1bW91cg== 58469 -IGbDuA== 58470 -YXBpS2V5 58471 -YWxsb2NhdGVk 58472 -IGNvbmZlc3Npb24= 58473 -LiIsDQo= 58474 -CWFzc2VydFRoYXQ= 58475 -IFNPUlQ= 58476 -IExPUkQ= 58477 -IGV4cG9ydGVy 58478 -LnNldExldmVs 58479 -cG9rZW1vbg== 58480 -YXNodHJh 58481 -IGbDqQ== 58482 -dXJhdG9y 58483 -KE1TRw== 58484 -IHR1cA== 58485 -IEh1bGw= 58486 -IHlpZWxkZWQ= 58487 -LlN1YmplY3Q= 58488 -XFJvdXRl 58489 -IT8= 58490 -INGD0LTQsNC7 58491 -XFNlY3VyaXR5 58492 -LWFy 58493 -IGFsbGVnYXRpb24= 58494 -KFNldHRpbmdz 58495 -w6RuZGVy 58496 -IGVsbGlwc2U= 58497 -IFJldHJvZml0 58498 -IHJlZ3VsYXRpbmc= 58499 -IE1vbGx5 58500 -IExvaw== 58501 -X0N1c3RvbQ== 58502 -IFByb21v 58503 -aXNpbg== 58504 -IHJlc3VtZWQ= 58505 -IG1ldHJvcG9saXRhbg== 58506 -LmVycm9yTWVzc2FnZQ== 58507 -Oi0tLS0tLS0tLS0tLS08Lw== 58508 -Lm1s 58509 -c2NvcGlj 58510 -LnJlZnM= 58511 -YXB0b3Jz 58512 -IEluc3RydW1lbnRz 58513 -IHByb3BhZ2F0ZQ== 58514 -fS0+ 58515 -IHBhc2Fkbw== 58516 -dGhhbms= 58517 -X0RlbGV0ZQ== 58518 -IEJyaWdodG9u 58519 -LHVuc2lnbmVk 58520 -5L2c6ICF 58521 -IGFzcGlyYXRpb25z 58522 -LWhvdw== 58523 -Um9zZQ== 58524 -PSgo 58525 -X25lZWRlZA== 58526 -X3BsdXJhbA== 58527 -PEFwcGxpY2F0aW9u 58528 -IFdFRUs= 58529 -IFVubG9jaw== 58530 -IFRFTVA= 58531 -U291 58532 -IHNjaGl6b3BocmVuaWE= 58533 -IHRyb2xs 58534 -IGNvbXBsZW1lbnRhcnk= 58535 -IE5FVFdPUks= 58536 -IGJsaXI= 58537 -IHByb2dyZXNzRGlhbG9n 58538 -IiUo 58539 -IEF0dHJpYnV0ZVNldA== 58540 -CXRz 58541 -Lml0ZXJpdGVtcw== 58542 -6K+d 58543 -IGVzY3JpdA== 58544 -dm91cw== 58545 -X3BsYWNlcw== 58546 -SEs= 58547 -IHNlZ3Vpcg== 58548 -X2Z3 58549 -IFJvdW5kZWQ= 58550 -IGRpc3Bvc2l0 58551 -6KeG 58552 -cGFybQ== 58553 -d293 58554 -U1RSVUNUSU9O 58555 -LmFsbG93 58556 -IENoYXJTZXF1ZW5jZQ== 58557 -CWV4dGVybg== 58558 -IHByb3NlY3V0ZWQ= 58559 -IG1vcnRhcg== 58560 -IEp1ZGE= 58561 -LW1zZw== 58562 -IGVzdHVk 58563 -LmdldERlc2NyaXB0aW9u 58564 -IHNvdw== 58565 -YW1icmU= 58566 -IHJvbWE= 58567 -RW5o 58568 -Ym9udXM= 58569 -IHNxdWF0 58570 -IGRpc3RyYQ== 58571 -ZWRJbWFnZQ== 58572 -IHBlcHBlcnM= 58573 -LXBlcmZvcm1hbmNl 58574 -LAoKCg== 58575 -LGZpbGU= 58576 -IE1JTUU= 58577 -X2NvbmNhdA== 58578 -QUJT 58579 -LWZhc2hpb24= 58580 -IHVuZGVyY292ZXI= 58581 -T25lVG9NYW55 58582 -IHJlY2xhaW0= 58583 -Q09QWQ== 58584 -IGJpbmRz 58585 -IFRhcGU= 58586 -IGdvc3NpcA== 58587 -IEVxdWl0eQ== 58588 -L0NhcmQ= 58589 -LmFjdGl2 58590 -J2Ft 58591 -IGRyYWluYWdl 58592 -PFNjYWxhcnM= 58593 -IG9uQmluZFZpZXdIb2xkZXI= 58594 -KCk/Lg== 58595 -IHNvcnJvdw== 58596 -IEli 58597 -dXB5 58598 -X1VVSUQ= 58599 -IENoYXJt 58600 -IEVsZWN0aW9ucw== 58601 -Lm9uRGVzdHJveQ== 58602 -IEludGVyZXN0aW5nbHk= 58603 -b3VuZGluZ0JveA== 58604 -X2RldGVjdGlvbg== 58605 -LWhlbGQ= 58606 -X3Vua25vd24= 58607 -IHJlZnJhaW4= 58608 -IG3DqXRvZG8= 58609 -IGVCb29r 58610 -RU5PTUVN 58611 -IGRhbmc= 58612 -UHJvZmVzc2lvbmFs 58613 -IGRpY3Rpb25hcmllcw== 58614 -L215c3Fs 58615 -IFNUVUQ= 58616 -IG1hc3Nl 58617 -c2NhcGU= 58618 -IGRyZWk= 58619 -Om5hbWU= 58620 -LmxvZ28= 58621 -U2lnblVw 58622 -IHRhaHVu 58623 -KHRoZW1l 58624 -IEZlbW1l 58625 -IGJvbWJlcg== 58626 -IEphZGU= 58627 -IFRheQ== 58628 -IHN1Ym1hcmluZQ== 58629 -X2NsYXVzZQ== 58630 -enljaA== 58631 -IHNpbXVsdGFuZW91cw== 58632 -IGNhc29z 58633 -LmJvb2xlYW4= 58634 -KGxocw== 58635 -IGNvbnRpbmVudGFs 58636 -LXNhbGU= 58637 -CWVudg== 58638 -IEN1dGU= 58639 -IEZhY3RvcnlHaXJs 58640 -YWJ1cw== 58641 -L3ZhbHVl 58642 -IGphZHg= 58643 -IHN0ZXJu 58644 -Pj4KCg== 58645 -IHN1cmZhY2Vk 58646 -IOyggOyepQ== 58647 -cGxhdHo= 58648 -CWVtYWls 58649 -Y2VwdG9ycw== 58650 -Ij4o 58651 -IGVwaWxl 58652 -6K+7 58653 -IERlYnQ= 58654 -5ZGK 58655 -Tk9Q 58656 -Imh0dHBz 58657 -Omo= 58658 -Rm9ybUl0ZW0= 58659 -X0xJQ0VOU0U= 58660 -LmdldERvdWJsZQ== 58661 -IEFnZW5kYQ== 58662 -CWZpbmFsbHk= 58663 -KGZpbHRlcnM= 58664 -KGF2 58665 -576O 58666 -QVBFUg== 58667 -IGxhdmE= 58668 -0LXRgNC2 58669 -KSkpKQoK 58670 -IGZhdWx0eQ== 58671 -X25t 58672 -IHRyYXZh 58673 -KEJpdG1hcA== 58674 -IHNwZWVkaW5n 58675 -PicpLg== 58676 -IHNjcmVlbmVk 58677 -X3JvbGw= 58678 -IE1hY0Jvb2s= 58679 -IEFVRA== 58680 -IGRpYWdub3Nl 58681 -LkdlbmVyYXRl 58682 -IF5e 58683 -IHN0cnM= 58684 -W1Rlc3Q= 58685 -IHJhbnNvbQ== 58686 -IERIQ1A= 58687 -ZWxkZW4= 58688 -IGludGVycHJldGF0aW9ucw== 58689 -KCldLg== 58690 -ZmxhdE1hcA== 58691 -IGxpbmVIZWlnaHQ= 58692 -X21vdW50 58693 -IFdpemFyZHM= 58694 -IHNsdXRz 58695 -ZWhsZXI= 58696 -b2RhbA== 58697 -IG1pbGl0aWE= 58698 -5bI= 58699 -ZWFybmVk 58700 -IG1pc2VyeQ== 58701 -aW50dmFs 58702 -ZnVuZA== 58703 -IGhpZGVz 58704 -IGRpYXJy 58705 -IFdlc2xleQ== 58706 -IHhtbQ== 58707 -IHF1ZW0= 58708 -IEFyYWJz 58709 -aWZ0aA== 58710 -YXRlZ29yaXplZA== 58711 -RGlzcG9zYWJsZQ== 58712 -UHVyZQ== 58713 -X05PVElGWQ== 58714 -c25pcHBldA== 58715 -IEdhcnJldHQ= 58716 -LnJ1bm5pbmc= 58717 -LndlaWdodHM= 58718 -ICgtLQ== 58719 -IGludmFyaWFudA== 58720 -5LqL5Lu2 58721 -IEFsbG93ZWQ= 58722 -ZGlycw== 58723 -IHBhc3Npb25z 58724 -IGxhZA== 58725 -IEZsdXNo 58726 -bWVudXM= 58727 -OmJsb2Nr 58728 -IGNvbXByYQ== 58729 -LmNob21w 58730 -YWxsb2NhdG9y 58731 -IGN1cmF0ZWQ= 58732 -IEtub3dpbmc= 58733 -IFBhdHRlcnNvbg== 58734 -IHRlbGFo 58735 -J2V4 58736 -IGRvb21lZA== 58737 -IHBoaWxhbnRo 58738 -b3R0eQ== 58739 -LnN0eWxlcw== 58740 -T3duZWQ= 58741 -IGFsbGVyZ2llcw== 58742 -PXBhcmFtcw== 58743 -b2Nlc2U= 58744 -aXRlbGlzdA== 58745 -IFNlbmRpbmc= 58746 -YmVm 58747 -b3JyYXI= 58748 -IE7Do28= 58749 -IEZhcmdv 58750 -IEx1Yg== 58751 -IENvbWJpbmVk 58752 -X2dpdmVu 58753 -CQkJCQkgICAg 58754 -IHJlY29uY2lsaWF0aW9u 58755 -UGF0dGVybnM= 58756 -YXphcmQ= 58757 -IGJpb21hc3M= 58758 -IEhvdXNlcw== 58759 -cmVzcHVlc3Rh 58760 -Y2Nv 58761 -L3RvcGljcw== 58762 -IFl1aw== 58763 -IHdlYWtlbmVk 58764 -X2NhbGVuZGFy 58765 -IG11bGhlcmVz 58766 -IE1hcmw= 58767 -IHNpbmU= 58768 -IFRpbA== 58769 -IFNvdWxz 58770 -IERldXRzY2hl 58771 -IEZPTExPVw== 58772 -IHBpcGVsaW5lcw== 58773 -IEJldmVybHk= 58774 -X0RJUFNFVFRJTkc= 58775 -IiM= 58776 -IFByb3Rv 58777 -LmJpZw== 58778 -IFNhdmluZ3M= 58779 -IFRhbno= 58780 -anVu 58781 -IEdhbW1h 58782 -IFNhZGQ= 58783 -IGFkdmlzb3Jz 58784 -IHJvYXN0 58785 -IHVudGVycw== 58786 -dWRpZXM= 58787 -X2xvbg== 58788 -LXBvaW50ZXI= 58789 -IEVsZW1lbnRSZWY= 58790 -XEJ1aWxkZXI= 58791 -ZXhhbXBsZUlucHV0 58792 -LndlYmRyaXZlcg== 58793 -ZGF0YVR5cGU= 58794 -IFF1aXRl 58795 -IENlbHRpY3M= 58796 -dWls 58797 -LWRlZmVuc2U= 58798 -YmlzaA== 58799 -IFVJV2luZG93 58800 -IFN1ZGRlbmx5 58801 -LmhvdA== 58802 -LnJlYXNvbg== 58803 -IGfDtnI= 58804 -QU1E 58805 -Lk11bHRp 58806 -YXV0aGVudGljYXRlZA== 58807 -cmVnaW9ucw== 58808 -Oyg= 58809 -0LDRgNCw0Lw= 58810 -IEtpcmJ5 58811 -JHJvdXRl 58812 -UFJFQ0FURUQ= 58813 -IER1cmhhbQ== 58814 -b3dv 58815 -IFBlcmZvcm1z 58816 -IGRpc3JlZ2FyZA== 58817 -bnN0 58818 -IFBvbHM= 58819 -IGdldFA= 58820 -Il06 58821 -LWNvbG9yZWQ= 58822 -KEtleXM= 58823 -IEFsbGVn 58824 -X21vZGlmeQ== 58825 -X2xvYWRpbmc= 58826 -c3RyYWluZWQ= 58827 -IGF0cm9j 58828 -X3Bocg== 58829 -PFNwcml0ZQ== 58830 -IHNhdGlzZmFjdG9yeQ== 58831 -bWFuc2hpcA== 58832 -LnBpcGVsaW5l 58833 -VG9ueQ== 58834 -IHRoaWVm 58835 -cG9sYXRvcg== 58836 -KGxvY2s= 58837 -YnVyc3Q= 58838 -IE9wdGltaXphdGlvbg== 58839 -IHN1cmZpbmc= 58840 -Illlcw== 58841 -IGRlc2NlbmRlZA== 58842 -5pI= 58843 -X0NsZWFy 58844 -IGNyaWVz 58845 -IEZyb3plbg== 58846 -RElSRUNU 58847 -LUNvbg== 58848 -IExlaWNlc3Rlcg== 58849 -5aWz 58850 -T09N 58851 -PWRi 58852 -IGdldE1lc3NhZ2U= 58853 -PFN0dWRlbnQ= 58854 -X2JhdGNoZXM= 58855 -Lk1hc2s= 58856 -X2V0aA== 58857 -XCk= 58858 -IHNvbWE= 58859 -Q2F0Y2g= 58860 -W2No 58861 -T3duZXJz 58862 -aW5kbGU= 58863 -OmF1dG8= 58864 -LnZlcnQ= 58865 -aXZy 58866 -LnNldExvY2F0aW9u 58867 -IGZsdWVudA== 58868 -X0VORElBTg== 58869 -IENhcmxv 58870 -Y2VwdHM= 58871 -YWRkQWN0aW9u 58872 -Lm9hdXRo 58873 -PFVuaXR5RW5naW5l 58874 -cmVlbWVudHM= 58875 -LlNraXA= 58876 -PykKCg== 58877 -LmRlZmF1bHRQcm9wcw== 58878 -IGNhYmU= 58879 -IFNoZW4= 58880 -ZXJvc2lz 58881 -IFByb2ZpdA== 58882 -IHBvaXM= 58883 -X0NSRUFURUQ= 58884 -IHJlbW92ZUZyb20= 58885 -KHdz 58886 -P2FjdGlvbg== 58887 -KEZpZWxk 58888 -IGVycm9uZQ== 58889 -Lm1pbmltdW0= 58890 -IFJldHJpZXZlZA== 58891 -IGRhZG8= 58892 -IFBSSVZBVEU= 58893 -LXNwZWM= 58894 -IGd6aXA= 58895 -cGRhdGE= 58896 -IHBvc1k= 58897 -KGxvdw== 58898 -IHF1YWxxdWVy 58899 -L2Nsb3Vk 58900 -6rKM 58901 -KGNvbW1vbg== 58902 -IEFyYmVpdA== 58903 -b3JnYW5pc2F0aW9u 58904 -IHRpZHk= 58905 -IFJvbGFuZA== 58906 -KHBo 58907 -LnpvbmU= 58908 -IGdlbnRsZW1lbg== 58909 -xrDhu6Nj 58910 -5bGx 58911 -IGVuY2xvc3VyZQ== 58912 -IE1hbmFmb3J0 58913 -CUNvbG9y 58914 -U3RlbmNpbA== 58915 -Tmlj 58916 -IHRoZW9yZW0= 58917 -IFZH 58918 -IGNvbG91cmVk 58919 -VkJveExheW91dA== 58920 -dWxzaXZl 58921 -RHJhZ29u 58922 -Y2Zm 58923 -ZXRlc3Q= 58924 -ZW5zYQ== 58925 -b2ZkYXk= 58926 -LkF6dXJl 58927 -OlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZQ== 58928 -X3VwZGF0ZXM= 58929 -IHRyZW5keQ== 58930 -dWdhcw== 58931 -d2Vha1NlbGY= 58932 -IHJpZGdl 58933 -aWJyaQ== 58934 -IOy2lA== 58935 -KENH 58936 -IE1vbmtleQ== 58937 -LndyaXRlSW50 58938 -LnRpbWVkZWx0YQ== 58939 -Vmlld0NvbnRyb2xsZXJBbmltYXRlZA== 58940 -IFByb3ZpZGVuY2U= 58941 -44GI 58942 -IGJsZW5kcw== 58943 -L1N1YnRocmVzaG9sZA== 58944 -IEFwcGw= 58945 -IGF0YW4= 58946 -IHJlbG9hZERhdGE= 58947 -dW1ib3Ryb24= 58948 -c3TDvHQ= 58949 -T0F1dGg= 58950 -IEdpdmluZw== 58951 -IOyEpA== 58952 -IEZpbm5pc2g= 58953 -Y2hlY2tpbmc= 58954 -LkVtYmVk 58955 -c2VxdWVsaXpl 58956 -IGluaXRpYWxpemVz 58957 -IE9zbG8= 58958 -2LY= 58959 -Z2V0RXh0ZW5zaW9u 58960 -X0FMVA== 58961 -KGJsYW5r 58962 -IGZhdGFsRXJyb3I= 58963 -IGRlbWlzZQ== 58964 -KioqKioK 58965 -IFhT 58966 -KEFG 58967 -IEVucw== 58968 -YW50aGE= 58969 -IFBPUg== 58970 -IG5pY2g= 58971 -Lk5hbWVk 58972 -IGdpZ2FudGlj 58973 -IE9ic2VydmF0b3J5 58974 -LlJlc29sdmU= 58975 -IFBheW1lbnRz 58976 -Z3VpbGQ= 58977 -IGN1cnJlbnRTdGF0ZQ== 58978 -PT09PT09PT09PT09PT09Cg== 58979 -IFNleQ== 58980 -cERhdGE= 58981 -IGRlYWRsaW5lcw== 58982 -IGNlbnRyYWxpemVk 58983 -IFNjaG9sYXJzaGlw 58984 -X3N1cHBvcnRlZA== 58985 -LmNocm9tZQ== 58986 -KCldKTsK 58987 -IGN5YW4= 58988 -IENhZ2U= 58989 -QXV0aG9ycw== 58990 -Xw0K 58991 -L29z 58992 -a2lt 58993 -ZGVl 58994 -LnRleA== 58995 -IHlvdXJzZWx2ZXM= 58996 -IG1ncg== 58997 -IGFsaw== 58998 -LWluc3RhbGw= 58999 -IGRyYWZ0aW5n 59000 -IHJ1bW9y 59001 -IHN0YXR1ZXM= 59002 -UG9vbGluZw== 59003 -b2xpbmE= 59004 -QUFBQUFBQUE= 59005 -LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 59006 -IGV4dHJlbWlzdHM= 59007 -Q2FsY3Vs 59008 -aWdodGhvdXNl 59009 -SW5zZXQ= 59010 -KElOUFVU 59011 -IHN5bmNocm9uaXphdGlvbg== 59012 -aXZpcnVz 59013 -LmF4ZXM= 59014 -IEdhcA== 59015 -LUFu 59016 -X1RlbXBsYXRl 59017 -IGdhbWVy 59018 -IENyaWNrZXQ= 59019 -IGxpbnQ= 59020 -IGF1dGhvcml0YXJpYW4= 59021 -TlNVSW50ZWdlcg== 59022 -IHJlZG8= 59023 -IGFkaXBpc2Npbmc= 59024 -X0ZFVENI 59025 -Y2hlaWQ= 59026 -IEZhbmc= 59027 -LmluZGljZXM= 59028 -dG9uZQ== 59029 -0LTQtdC7 59030 -IHt7LS08 59031 -YnJhaGlt 59032 -IHNhbGE= 59033 -Z2V0Q29kZQ== 59034 -IGNvbW11bmljYXRlZA== 59035 -c3RhcnRzV2l0aA== 59036 -ZXJ0eg== 59037 -UmVhZGFibGU= 59038 -SXRlbUlk 59039 -b3JlZmVycmVy 59040 -Y3JlZGlibGU= 59041 -w6FyaWE= 59042 -IGNvbWJpbmVSZWR1Y2Vycw== 59043 -KiovCgo= 59044 -IGJsaXNz 59045 -IGFkb3Ju 59046 -ZGVwZW5kcw== 59047 -IFJPT00= 59048 -IGZyYW1pbmc= 59049 -ID8nLA== 59050 -YXV0eQ== 59051 -X3BvdA== 59052 -X3RhYnM= 59053 -RXhhY3Q= 59054 -LCIs 59055 -ICd9JzsK 59056 -IGFyYml0cg== 59057 -YWhyYWlu 59058 -LmdldFN0cmluZ0V4dHJh 59059 -ICRc 59060 -IG91dHB1dFN0cmVhbQ== 59061 -IGNvbW1lbmM= 59062 -YW51cw== 59063 -Y2h5 59064 -PEVtcGxveWVl 59065 -IGhleGF0cmlnZXNpbWFs 59066 -IG5hY2lvbmFs 59067 -KHNlcmlhbGl6ZXJz 59068 -X3B1dGNoYXI= 59069 -X1NBRkU= 59070 -ZW50aWFsQWN0aW9u 59071 -SXRlbVNlbGVjdGVkTGlzdGVuZXI= 59072 -LkRpc3BhdGNo 59073 -Q29uZmxpY3Q= 59074 -X2Fib3V0 59075 -b3NhdXI= 59076 -Qm91bmRhcnk= 59077 -IGNsZWFyQ29sb3I= 59078 -KExvY2F0aW9u 59079 -IE1PTlRI 59080 -IFRhc3Rl 59081 -LUdlbmVyYWw= 59082 -IFdBUg== 59083 -IGVyaGFsdGVu 59084 -LXNhdmluZw== 59085 -IGNvdXBsaW5n 59086 -LXRyaWdnZXI= 59087 -bW90b3I= 59088 -IHl5eXk= 59089 -IFBhdGVudA== 59090 -cHRv 59091 -IG1pc2RlbWVhbm9y 59092 -dmFzaW9u 59093 -IEFkbWlyYWw= 59094 -4LmJ4Liy 59095 -X1BXUg== 59096 -IGRldmFzdGF0ZWQ= 59097 -Zm9saW9z 59098 -SVRVREU= 59099 -dXJyZWN0 59100 -IHJvYm90aWM= 59101 -IFNhbmN0 59102 -IEhhd2FpaWFu 59103 -LlJvdXRl 59104 -LWNvbmRpdGlvbg== 59105 -IHJr 59106 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK 59107 -Y3JlYXRlRWxlbWVudA== 59108 -IEtvcA== 59109 -aWduYW50 59110 -LnJvbGxiYWNr 59111 -IHNhbHVk 59112 -Xycs 59113 -IEFOU0k= 59114 -RXhjZXB0 59115 -IERyYXdhYmxl 59116 -LlV0Y05vdw== 59117 -Ijpbewo= 59118 -IGtvbGU= 59119 -THVh 59120 -IEJlbGlldmU= 59121 -Q29tcHV0 59122 -IGhhbGx1Yw== 59123 -IFNpZ25z 59124 -cnN0 59125 -Lmh1 59126 -IEtOT1c= 59127 -V2k= 59128 -IEJyYXNz 59129 -IFJhcw== 59130 -QGhvdG1haWw= 59131 -IHNlZGltZW50 59132 -IGFwaw== 59133 -IOyDgQ== 59134 -X3JlZ2lvbnM= 59135 -IHBvZGl1bQ== 59136 -PEJvb2s= 59137 -0LbQtQ== 59138 -IHNpeHRlZW4= 59139 -IEFsaWFz 59140 -IGluZnJhcmVk 59141 -IFZhbmRlcg== 59142 -IExlYWRpbmc= 59143 -dWNpbmc= 59144 -LDosOg== 59145 -X2hvcg== 59146 -d2F0 59147 -IGTDqWNvdQ== 59148 -X1dpZGdldA== 59149 -U291bmRz 59150 -X25hdmlnYXRpb24= 59151 -IHNjaG5lbGw= 59152 -KGdlbmVyYXRvcg== 59153 -dWNlbmU= 59154 -IHJlbWFrZQ== 59155 -SVB2 59156 -IHLDqWFs 59157 -X0lOQ1JFTUVOVA== 59158 -IGh5cG90aGV0aWNhbA== 59159 -X2FuZw== 59160 -IG9mcw== 59161 -ICEK 59162 -LmNvbXBsZXRlZA== 59163 -R2V0VHlwZQ== 59164 -IGtvbW1lbg== 59165 -w6FsaWRv 59166 -YWRkT24= 59167 -IHrFgg== 59168 -VUxB 59169 -X2luZGljYXRvcg== 59170 -J10KCgo= 59171 -YXBhY2hl 59172 -X1NlbGVjdA== 59173 -IEdyZWVuZQ== 59174 -V2hhdHM= 59175 -X2FuaW0= 59176 -IHJlcGV0aXRpdmU= 59177 -bXVjaA== 59178 -IFRocmVzaG9sZA== 59179 -IGxm 59180 -KENhdGVnb3J5 59181 -Y29uZQ== 59182 -TWl4 59183 -X01FVEFEQVRB 59184 -YXlzaWE= 59185 -TmVpZ2hib3Jz 59186 -CQoJCQo= 59187 -SVBIRVI= 59188 -IEZyYWc= 59189 -IENlbGxz 59190 -IG5hbWVzcGFjZXM= 59191 -KGJhY2s= 59192 -IFJlc3RhdXJhbnRz 59193 -c3Zj 59194 -INC70Lg= 59195 -b3RlY2g= 59196 -LXNs 59197 -pb8= 59198 -IFdU 59199 -IFJlZHVjdGlvbg== 59200 -IGRvdHRlZA== 59201 -CWZvdW5k 59202 -IFRFQU0= 59203 -Qm9ybg== 59204 -IE11c2g= 59205 -IENvbXBhcmFibGU= 59206 -IGhpdGNo 59207 -QVRP 59208 -IG1heEhlaWdodA== 59209 -YmVnaW5UcmFuc2FjdGlvbg== 59210 -w612 59211 -X2Ju 59212 -IGhlcmQ= 59213 -IHJldmVyc2Fs 59214 -IEhvbmQ= 59215 -ZGVsaW1pdGVy 59216 -IGNvbmZ1c2U= 59217 -IGhvcHM= 59218 -IGNlbnRyb2lk 59219 -IGNvdXJ0cm9vbQ== 59220 -LmRlY29yYXRvcnM= 59221 -IG1waQ== 59222 -IEltcHJvdmVk 59223 -SU5ORVI= 59224 -IEJhbmdhbG9yZQ== 59225 -IFRhbWI= 59226 -IGJvYXN0 59227 -KCkpKQ0K 59228 -IGlsbGljaXQ= 59229 -IE1vcm9jY28= 59230 -Z3JlZ2F0b3I= 59231 -X3Jlc3VtZQ== 59232 -IGNyYWNrZG93bg== 59233 -IHBvcnRyYWl0cw== 59234 -L2hpZ2g= 59235 -KFwn 59236 -IGF5dWQ= 59237 -X2ZlZWRiYWNr 59238 -IGNhdGU= 59239 -L2F2YXRhcg== 59240 -IGhlYg== 59241 -UG9pbnRDbG91ZA== 59242 -IOWSjA== 59243 -IDwhWw== 59244 -IGdldFJlc291cmNlcw== 59245 -fTp7 59246 -T3BlcmF0aW5n 59247 -IEZvZw== 59248 -CXRhYg== 59249 -IFJlc2VhcmNoZXJz 59250 -IGZhYnJpY2F0aW9u 59251 -LmRhdGFzZXRz 59252 -IENhbXBv 59253 -IEthdWY= 59254 -IGRsbA== 59255 -bGlndA== 59256 -XSkpOwoK 59257 -c3RlbGxlbg== 59258 -QUNLRVQ= 59259 -bHZs 59260 -IEdsb3J5 59261 -LmRhdGVUaW1l 59262 -IGNvbW11dGU= 59263 -IG9uQ3JlYXRlVmlld0hvbGRlcg== 59264 -IFhFbGVtZW50 59265 -IFRva2Vucw== 59266 -PHRoZWFk 59267 -X3BpY2s= 59268 -7KQ= 59269 -dm9u 59270 -ZGVwYXJ0dXJl 59271 -KHJlbmRlcmVy 59272 -cGhvbmVOdW1iZXI= 59273 -KFBlcnNvbg== 59274 -Z2VuZXM= 59275 -IExhcnM= 59276 -ICl7Cgo= 59277 -IEpzb25SZXN1bHQ= 59278 -IG1ldG9kbw== 59279 -Vk9LRQ== 59280 -LmdldFVzZXJJZA== 59281 -QWNjZWxlcg== 59282 -CXJlcXVpcmVk 59283 -IGNoYW1waW9uc2hpcHM= 59284 -QnVpbGRDb250ZXh0 59285 -L3Rhc2s= 59286 -L3JlbGVhc2Vz 59287 -Q2F0ZWdvcmlh 59288 -X292ZXJsYXk= 59289 -IHNjYXJjZQ== 59290 -X2xpbQ== 59291 -bmdy 59292 -YWhsZW4= 59293 -IEFydGlmaWNpYWw= 59294 -c3ByZWFk 59295 -IGJvd2xpbmc= 59296 -LmFuYWx5c2lz 59297 -U01UUA== 59298 -CXBhc3N3b3Jk 59299 -IGJhdGhz 59300 -XSkpewo= 59301 -Y3VycmVudGx5 59302 -YWNpZW50ZQ== 59303 -X3NlcGFyYXRvcg== 59304 -IGRlYmVy 59305 -IERpc2FibGVk 59306 -acOocmVz 59307 -IOKV 59308 -X3Byb2Nlc3Npbmc= 59309 -IHByb3Rlc3Rpbmc= 59310 -IFJPVA== 59311 -Z3JhYg== 59312 -INC30LDQug== 59313 -IHByb2FjdGl2ZQ== 59314 -d29yZHByZXNz 59315 -IFNldmVy 59316 -aW5kZW4= 59317 -IHdpa2lwZWRpYQ== 59318 -KXsNCg0K 59319 -X3dpbmRvd3M= 59320 -aXNsYXRpb24= 59321 -IHVucmVzdA== 59322 -IGRpc21pc3NhbA== 59323 -Lk5VTQ== 59324 -X0ZBU1Q= 59325 -aXNzdWVk 59326 -IEZBQ0U= 59327 -X3VuZGVy 59328 -IHBsdWdnZWQ= 59329 -IOWw 59330 -IGLEmWR6aWU= 59331 -IElDQw== 59332 -IGNvbWJ1c3Rpb24= 59333 -IGtpc3NlZA== 59334 -IHN0YXJyZWQ= 59335 -IFdhdHRz 59336 -IHNwaWVsZW4= 59337 -LXB1cnBvc2U= 59338 -IEV2YWw= 59339 -YXJnZXM= 59340 -LHJlc3VsdA== 59341 -dGVjaG5vbG9neQ== 59342 -IG5hdGlvbmFsaXR5 59343 -aWN1cw== 59344 -IE51Zw== 59345 -INGC0L4= 59346 -CQkJCQkJCSAg 59347 -Y29sbw== 59348 -IGdhc3Rybw== 59349 -YW50ZWVk 59350 -T0xJRA== 59351 -LmJpYXM= 59352 -X3RlbGU= 59353 -Lmluc3BlY3Q= 59354 -IHZlaWw= 59355 -LmZvb3Rlcg== 59356 -IG5lZ2xpZ2VuY2U= 59357 -IGp1ZGdtZW50cw== 59358 -Um9vbXM= 59359 -eW5u 59360 -CWNvdW50ZXI= 59361 -b2NjdXBhdGlvbg== 59362 -IOeUnw== 59363 -dW5hcw== 59364 -ICheKSg= 59365 -TGFtYmRh 59366 -ZmVs 59367 -LlBhcmFtcw== 59368 -INC00L7QsdCw0LI= 59369 -c2V0TGF5b3V0 59370 -IGRlcG9ydGF0aW9u 59371 -IGxvY2FsT2JqZWN0 59372 -IFBoYXJtYWNldXRpY2Fs 59373 -Y2VwdGl2ZQ== 59374 -IE5vbWU= 59375 -RXF1aXBtZW50 59376 -RmFu 59377 -VW5pdmVyc2Fs 59378 -CXNvY2tldA== 59379 -IGdyaW4= 59380 -IGV4cG9zZXM= 59381 -IGhhYmVy 59382 -IHNpbmNlcmVseQ== 59383 -IGNhbXM= 59384 -IG3DvA== 59385 -ZW5pYQ== 59386 -RW1lcg== 59387 -Q3J5cHRv 59388 -U2xvdw== 59389 -KHhocg== 59390 -IT0o 59391 -LXNlcnZpY2Vz 59392 -IFBX 59393 -IHByZW5kcmU= 59394 -IG3DpGRjaGVu 59395 -ZW1vbnM= 59396 -0L7Qt9Cy0YDQsNGJ 59397 -Lk1hbmFnZXI= 59398 -7Jk= 59399 -IGdyYWY= 59400 -LXJh 59401 -bWV0cmljYWw= 59402 -L2Zs 59403 -IGNlbWV0ZXJ5 59404 -Z2Vucw== 59405 -IHDFmQ== 59406 -IE15U3FsQ29tbWFuZA== 59407 -LVRv 59408 -IHbDpQ== 59409 -IGFpcnN0 59410 -b21lbnR1bQ== 59411 -IHNlcnZv 59412 -bWlsbGlvbg== 59413 -IE1pcmFuZGE= 59414 -IlNoZQ== 59415 -IGFkdm9jYXRpbmc= 59416 -LWNhcHRpb24= 59417 -IEF0dHJpYnV0aW9u 59418 -IHdlbGNoZQ== 59419 -X3ZlbmRvcg== 59420 -CVN0YXR1cw== 59421 -YXJyaXM= 59422 -IHByaW50aw== 59423 -IiwiIw== 59424 -IHJlbGF0aXY= 59425 -aWZmZXJlbmNlcw== 59426 -aXp6ZXM= 59427 -IGRlY2ltYWxz 59428 -IFByb3Y= 59429 -Lm1heGltdW0= 59430 -QXJu 59431 -IGhlbGljb3B0ZXJz 59432 -X0JPVFRPTQ== 59433 -Y2h1cmU= 59434 -b2Rpbmdz 59435 -Jyg= 59436 -IikpKTsNCg== 59437 -KGJlYW4= 59438 -LmZk 59439 -RnVuZA== 59440 -IGhhbmdz 59441 -YXBwaWQ= 59442 -L2tlcm5lbA== 59443 -LnBvaQ== 59444 -Lk1pblZhbHVl 59445 -LXZhbGlkYXRpb24= 59446 -THVrZQ== 59447 -Y2Rm 59448 -IEZ1bmVyYWw= 59449 -IFNhbXBsZXM= 59450 -CWRl 59451 -IHRvYXN0cg== 59452 -IHRheGFibGU= 59453 -IGNsdXN0ZXJpbmc= 59454 -ICdcJw== 59455 -IHJlc3RyYWludA== 59456 -ZWNlZA== 59457 -Y2hhaW5z 59458 -44CC77yI 59459 -X0dSQVBI 59460 -IGZ1ZWxlZA== 59461 -6ZyA 59462 -SHA= 59463 -5aSN 59464 -VGlsZXM= 59465 -IGF1bnF1ZQ== 59466 -SkM= 59467 -IGhvc3RhZ2U= 59468 -IEVzaw== 59469 -IG1hdg== 59470 -IGdlc3Rpb24= 59471 -IGJhbm5lcnM= 59472 -fXsk 59473 -LmludFZhbHVl 59474 -LiciCgo= 59475 -X01BVFJJWA== 59476 -IGNlYXNlZA== 59477 -IEdPRA== 59478 -X0NBTUVSQQ== 59479 -LkFsbG93VXNlcg== 59480 -dHJhY2tlZA== 59481 -Q29vaw== 59482 -YmFpcnJv 59483 -KGNvbXBhbnk= 59484 -IHZpZXdwb2ludA== 59485 -LmdldFdyaXRlcg== 59486 -IE5ldHM= 59487 -d2l2ZXM= 59488 -ICgpKQo= 59489 -ZXhhbXBsZU1vZGFs 59490 -CWNoaWxk 59491 -IG15dGhvbG9neQ== 59492 -IC8vIg== 59493 -X2F4ZXM= 59494 -aWJvbGQ= 59495 -LkRhcms= 59496 -IE1heHdlbGw= 59497 -IGdwb2ludGVy 59498 -b2xpY2l0dWQ= 59499 -QmF0 59500 -dWxuZXI= 59501 -YmFsYW5jZWQ= 59502 -bWFpbGVy 59503 -IGNvbnRlbXBvcg== 59504 -5omL5py6 59505 -KCJfXw== 59506 -ICIpIg== 59507 -cmVhcg== 59508 -IEh1YW5n 59509 -XScpCg== 59510 -16k= 59511 -RlRB 59512 -IENhbGxpbmdDb252ZW50aW9u 59513 -IE91dHB1dHM= 59514 -UGs= 59515 -LlJlZmVyZW5jZQ== 59516 -bGVjdHVhbA== 59517 -ICk6Cgo= 59518 -IGJyYWNlbGV0 59519 -dWdlcg== 59520 -CUVycm9y 59521 -U3dlZXQ= 59522 -KCIvIik7Cg== 59523 -aHg= 59524 -IHVucmVhc29uYWJsZQ== 59525 -SW50ZXJwcmV0ZXI= 59526 -IGxvZnQ= 59527 -X3Byb2R1Y3Rv 59528 -IHNvY2lldGFs 59529 -LlBhcnNlcg== 59530 -IEFkYXB0 59531 -LmZvbw== 59532 -KHdoZXJl 59533 -LkZlYXR1cmU= 59534 -IFlhbWFoYQ== 59535 -Z2xhc3M= 59536 -Rm9yZ2U= 59537 -IHByb2hpYml0cw== 59538 -IGNhcGFjaXRpZXM= 59539 -IO2VqOyImA== 59540 -IHBlcm11dGF0aW9u 59541 -IGlobQ== 59542 -Rmxk 59543 -ZWxpYWw= 59544 -PT09PT09PT09PT0K 59545 -QENvbmZpZ3VyYXRpb24= 59546 -IGdlYXJlZA== 59547 -aW9zbw== 59548 -aWVzdGE= 59549 -dHJhbnNsYXRpb25z 59550 -SW5wdXRDaGFuZ2U= 59551 -UG9wdWxhcg== 59552 -IFBMVVM= 59553 -IHZm 59554 -X0ZyZWU= 59555 -YmJveA== 59556 -IGNhdXNhbA== 59557 -UElMRQ== 59558 -IHNjaMO2 59559 -IGlyb25pYw== 59560 -TWly 59561 -LkA= 59562 -5Y2X 59563 -IOiH 59564 -UmV3 59565 -dWxlbmNl 59566 -Zmxlbg== 59567 -IGNhbkFjdGl2YXRl 59568 -LXJlc3BvbnNl 59569 -IGFjY2VudHM= 59570 -aWdub3JlZA== 59571 -wrBG 59572 -LkRlcGVuZGVuY3lJbmplY3Rpb24= 59573 -CXBvaW50 59574 -IGNvbnRpbmdlbnQ= 59575 -IHNxdWFzaA== 59576 -IHBhcm1z 59577 -IENlbWV0ZXJ5 59578 -IGRlbHRhVGltZQ== 59579 -IERPUw== 59580 -IHZhbmlzaGVk 59581 -0LDRgNCw0LzQtdGC 59582 -IERQUw== 59583 -dGZvb3Q= 59584 -IFp1cw== 59585 -X0lOU1RBTEw= 59586 -R0FO 59587 -IGFyYg== 59588 -IG11bmljaXBhbGl0aWVz 59589 -SW50b0NvbnN0cmFpbnRz 59590 -QXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cw== 59591 -LGltYWdl 59592 -X2lnbm9yZQ== 59593 -IGRhbmdlcm91c2x5 59594 -cXVpc2E= 59595 -cGx1Y2s= 59596 -IGhhcnVz 59597 -dXBwZQ== 59598 -SHR0cEV4Y2VwdGlvbg== 59599 -QnJhY2tldA== 59600 -LicnCgo= 59601 -IFRvbA== 59602 -IFZpZXdlcg== 59603 -emJvbGxhaA== 59604 -LkNvZGVBbmFseXNpcw== 59605 -w6xuaA== 59606 -IGNvcnJlY3RhbWVudGU= 59607 -LmRh 59608 -IEFsZ2Vy 59609 -15A= 59610 -YmF1bQ== 59611 -IFBhbnRoZXI= 59612 -cGFydGljaXBhbnQ= 59613 -5b+F 59614 -LXN1cA== 59615 -IGVtdWxhdG9y 59616 -IGZhZGluZw== 59617 -IFdvbHZlcg== 59618 -Y3JlYXRlcw== 59619 -IGJvb2tpbmdz 59620 -LlF1ZXN0aW9u 59621 -p+ihjA== 59622 -IHN0cmVzc2Vz 59623 -IHJld3JpdHRlbg== 59624 -LlBJUEU= 59625 -ZWRlcw== 59626 -IGNiZA== 59627 -IjoiLw== 59628 -IGVuaGFuY2VtZW50cw== 59629 -X3N5 59630 -QklO 59631 -IFNsaXA= 59632 -SW5zcGVjdA== 59633 -IFdlZw== 59634 -IGNvbmdyZWdhdGlvbg== 59635 -IF86 59636 -X3Jt 59637 -RnJhbWVidWZmZXI= 59638 -ICcmIw== 59639 -IEZhbGxvdXQ= 59640 -SXNSZXF1aXJlZA== 59641 -IFBlYXJzb24= 59642 -IEZBQ1Q= 59643 -IHJlbGll 59644 -CWJveA== 59645 -IFNoZXBoZXJk 59646 -IFdpa2lMZWFrcw== 59647 -IENvbGxlY3Rvcg== 59648 -IHJlc2l6ZWQ= 59649 -bWV0aG9kTmFtZQ== 59650 -IGV2ZW50VHlwZQ== 59651 -IEF0aGVu 59652 -RGVzY3JpcHRvcnM= 59653 -IGJlcnM= 59654 -LW9wZXI= 59655 -IEluaXRpYWxseQ== 59656 -5aE= 59657 -X0JUTg== 59658 -ICAgICAgICAgDQo= 59659 -w6Fi 59660 -X2NhbXBhaWdu 59661 -X3dhdGNo 59662 -Rm9yZA== 59663 -LWRhdGVwaWNrZXI= 59664 -IHZpc2M= 59665 -IHNhdHU= 59666 -X3Ntcw== 59667 -IGNvbnRhZG9y 59668 -LXN2Zw== 59669 -IERPSQ== 59670 -JGFyZ3M= 59671 -IGtub2I= 59672 -LkJPTEQ= 59673 -IGRlYmF0ZWQ= 59674 -aW1ncw== 59675 -c29ja29wdA== 59676 -dHJ1dGg= 59677 -IEZlZXM= 59678 -IGhXbmQ= 59679 -X2Zvb2Q= 59680 -IGFicmFz 59681 -IG5vdGlvbnM= 59682 -IFRvZA== 59683 -OmNyZWF0ZQ== 59684 -IENvbmZsaWN0 59685 -VXN1YXJpb3M= 59686 -T1RPUw== 59687 -IG1zbQ== 59688 -S0hUTUw= 59689 -KFso 59690 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 59691 -IH1d 59692 -d2l6YXJk 59693 -IG1pZW50cmFz 59694 -IGRhdGFMaXN0 59695 -IGVtZXJnZXM= 59696 -xINuZw== 59697 -LlJlYWRJbnQ= 59698 -UEdB 59699 -SUxMSVNF 59700 -SUVudW1lcmF0b3I= 59701 -KHR1cGxl 59702 -Q2hyaXN0bWFz 59703 -TG9va0FuZEZlZWw= 59704 -b2dlbmVyYXRlZA== 59705 -ICMKCg== 59706 -Y29udHJvbGxlZA== 59707 -IGV4cXVpc2l0ZQ== 59708 -IGFjZXN0 59709 -UmVhZFdyaXRl 59710 -R2Fpbg== 59711 -44CN44CM 59712 -IGNvcHlyaWdodGVk 59713 -IGRvb20= 59714 -LlRhYmxlTGF5b3V0UGFuZWw= 59715 -IERvcnQ= 59716 -IGNoaWxp 59717 -IHdlcms= 59718 -IEVWRU5UUw== 59719 -IEJlYWNvbg== 59720 -IHNoaXBtZW50cw== 59721 -IHNlYmFnYWk= 59722 -dXBvbg== 59723 -dXRvbQ== 59724 -LmNvbnZlcnRlcg== 59725 -LkRyb3BUYWJsZQ== 59726 -PXt9Cg== 59727 -Zmlj 59728 -fgoK 59729 -IGxlc2JpYW5z 59730 -X25h 59731 -Rm9yZWlnbg== 59732 -CXRoZW4= 59733 -L21z 59734 -IG9yaQ== 59735 -Z2V0UHJvcGVydHk= 59736 -CXNucHJpbnRm 59737 -aGVzaW9u 59738 -44Gk 59739 -In0sIg== 59740 -IGFjcnlsaWM= 59741 -UGVycw== 59742 -QEVuYWJsZQ== 59743 -SXNs 59744 -KENhcmQ= 59745 -LlN0YWNr 59746 -TGljZW5zZWQ= 59747 -X0dVSUQ= 59748 -OnRpdGxl 59749 -IGh1c3Q= 59750 -IHByaW5jaXBhbFRhYmxl 59751 -YW5pdGl6ZQ== 59752 -L2VtYmVk 59753 -IGVuc3VyZWQ= 59754 -IEVHTA== 59755 -2YjYsQ== 59756 -IOWIhg== 59757 -LywK 59758 -IGZ1bmRyYWlzZXI= 59759 -S2V5TmFtZQ== 59760 -IG1hcmNoZWQ= 59761 -X1ZBTFVFUw== 59762 -IFNjZW5hcmlv 59763 -IG1ldGlj 59764 -X2Fzc29jaQ== 59765 -IFBhc3Rvcg== 59766 -CQkJCQkJCQkJCQkJCQkJCQkJ 59767 -ZXJhdGU= 59768 -IGludml0YXRpb25z 59769 -cXVvaXNl 59770 -IGJsYW1pbmc= 59771 -IGRhcmluZw== 59772 -VU1NWQ== 59773 -IHJpY2hlcg== 59774 -ZW1ha2Vy 59775 -IElkZW50aWZpY2F0aW9u 59776 -IOyduA== 59777 -IEJpbmRpbmdGbGFncw== 59778 -Y2hhcw== 59779 -IHJlc2lsaWVudA== 59780 -X3Bn 59781 -IHJlbGVn 59782 -IElSQQ== 59783 -U1RF 59784 -IHRyYWN0b3I= 59785 -LWxvYWRpbmc= 59786 -IFByZXZpb3VzbHk= 59787 -IFZhY2M= 59788 -L2Jl 59789 -IG7DpXI= 59790 -IHVybGVuY29kZQ== 59791 -IE5vcmZvbGs= 59792 -LlJlbGVhc2U= 59793 -IE5ldXRyYWw= 59794 -5Lit5Zu9 59795 -IEFybGluZ3Rvbg== 59796 -IGFsbGVnZXM= 59797 -IFdyaXRlcnM= 59798 -VGVzdGVy 59799 -IFJhbGx5 59800 -IGPDoQ== 59801 -CVByaW50 59802 -IOKHkg== 59803 -IFVzZXJDb250cm9sbGVy 59804 -IFNlZWtpbmc= 59805 -LlZBTA== 59806 -TGlzdE5vZGU= 59807 -X2Zm 59808 -IFBoaWxsaXA= 59809 -RkFDVA== 59810 -IGNhcmFtZWw= 59811 -IE11bHRpcA== 59812 -IENvbXBhcmVk 59813 -IFNlcmJpYQ== 59814 -n7M= 59815 -IHJldml2ZQ== 59816 -IEthbnll 59817 -IHZlcmdl 59818 -IEJ1bGdhcmlh 59819 -Z2V0Qm9keQ== 59820 -IHw+ 59821 -Y2VwaA== 59822 -LkRhdGVUaW1lUGlja2Vy 59823 -LiI7Cgo= 59824 -IFRpZQ== 59825 -LGl0ZW0= 59826 -IG1lbm4= 59827 -R2Fz 59828 -b2NoYQ== 59829 -X3ZpcnR1YWw= 59830 -IG1hc3RlcnBpZWNl 59831 -X3NlcXVlbmNlcw== 59832 -TFRF 59833 -IFN1Ym1pc3Npb24= 59834 -Q2FsbGVy 59835 -JFw= 59836 -U3BvcnQ= 59837 -YWd1cw== 59838 -Q29uc3RyYWludE1ha2Vy 59839 -IGNvbG9j 59840 -IHdpZw== 59841 -INCj 59842 -CUFycmF5 59843 -TG9va3M= 59844 -IEdUQQ== 59845 -LnN0ZXBz 59846 -YXRjaGV3YW4= 59847 -X3Jhbmdlcw== 59848 -ZXh0QWxpZ25tZW50 59849 -IEJyZW5uYW4= 59850 -IGFic3RyYWN0aW9u 59851 -dWxlckFuZ2xlcw== 59852 -Lm1pc2M= 59853 -IGFudGlib2RpZXM= 59854 -IGV4cG9uZW50aWFs 59855 -IENIQU5ORUw= 59856 -ZXhwZW5zZQ== 59857 -J3k= 59858 -IGRldGVjdGl2ZXM= 59859 -IHB1cnBvcnRlZA== 59860 -WVNURU0= 59861 -IHJhZGlvYWN0aXZl 59862 -IExhdGluYQ== 59863 -LkVuY29kaW5n 59864 -LlRBRw== 59865 -eGlu 59866 -RGVncmVl 59867 -dXJhY2lvbg== 59868 -cHJpY2Vz 59869 -IFJlZmVyZW50aWFsQWN0aW9u 59870 -IHJhcml0eQ== 59871 -IHBpbGVz 59872 -Z2VuZGU= 59873 -X3Byb2plY3Rz 59874 -X2dsb2JhbHM= 59875 -LnN0YXJ0VGltZQ== 59876 -IOq1rA== 59877 -U0VDVElPTg== 59878 -X3B1Ymxpc2g= 59879 -RmF1bHQ= 59880 -RERM 59881 -X3ByaW9y 59882 -TW9t 59883 -IHRoaWNrZXI= 59884 -IHNlcXVlbGl6ZQ== 59885 -IGVzc2VudGlhbHM= 59886 -c3RyYXM= 59887 -aW50cg== 59888 -PigoKQ== 59889 -Lm1hbmFnZW1lbnQ= 59890 -ZWls 59891 -6Zet 59892 -QXdhcmU= 59893 -LkNpdHk= 59894 -IEFyYml0 59895 -X0RN 59896 -X2tleWJvYXJk 59897 -TE9iamVjdA== 59898 -LXdlYnBhY2s= 59899 -IE5ld3BvcnQ= 59900 -IHByaW5jaXBhbENvbHVtbg== 59901 -bGVnYW50 59902 -IHBhbGxldA== 59903 -IGZyYWN0dXJl 59904 -IGdtYWls 59905 -Lk1ldGE= 59906 -QWJvdmU= 59907 -LktleUV2ZW50 59908 -aml0 59909 -X21hY3Jv 59910 -X1BVU0g= 59911 -4bup 59912 -L2NvbnRyb2xsZXI= 59913 -5Yqg6L29 59914 -IHN1cGVyZmljaWFs 59915 -ZXh0ZXJpdHk= 59916 -IG1lbnNhZ2Vt 59917 -V2luZA== 59918 -aXN0b24= 59919 -Lm9wZW5hcGk= 59920 -0LjRgNC+0LI= 59921 -IFNlcmlhbGl6ZXI= 59922 -dWN0aXZl 59923 -IHphcg== 59924 -UGxhY2Vz 59925 -LlN0YXRpYw== 59926 -QmE= 59927 -IGluYWR2ZXJ0 59928 -IEluZG9uZXNpYW4= 59929 -X0lQVg== 59930 -KGhvcml6b250YWw= 59931 -IGdldFRpdGxl 59932 -aWRlcHJlc3M= 59933 -IENvbnNvbGVDb2xvcg== 59934 -aXBlcnM= 59935 -JG91dA== 59936 -IGZlc3RpdmU= 59937 -IGV2ZW5pbmdz 59938 -LkdldERhdGE= 59939 -dWl0a2E= 59940 -IE1hbnVhbHM= 59941 -dXNzZWQ= 59942 -X01heA== 59943 -LkNoYXQ= 59944 -IEFpcmNyYWZ0 59945 -PWNvbQ== 59946 -Rk9VTkQ= 59947 -YXBybw== 59948 -IHRyZWFzdXJlcw== 59949 -X2FsaXZl 59950 -IGdhZGdldA== 59951 -ZWtpbmc= 59952 -QnV0dG9uRG93bg== 59953 -QnJvd3NhYmxl 59954 -LlBFUk1JU1NJT04= 59955 -UEFTU1dPUkQ= 59956 -IEhBU0g= 59957 -ZsOp 59958 -XFRlc3RDYXNl 59959 -TE9TUw== 59960 -b3RoZXJz 59961 -LEo= 59962 -IGFzc2hvbGU= 59963 -d2Vyaw== 59964 -IG3Dow== 59965 -Lmll 59966 -ZXZpbA== 59967 -a29udGFrdGU= 59968 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K 59969 -PXN5cw== 59970 -CWxvY2s= 59971 -LS07Cgo= 59972 -X0ZVTg== 59973 -RmlsbENvbG9y 59974 -w7Nh 59975 -cHJlbmQ= 59976 -IGNvbXByZXNzb3I= 59977 -TW90aGVy 59978 -IEFyY2hlcg== 59979 -LmdvdG8= 59980 -IHfDvHJkZQ== 59981 -IGJhbWJvbw== 59982 -77yO 59983 -IFRyZWVz 59984 -IGJ1bXBlcg== 59985 -IHNhdXNhZ2U= 59986 -IEVsYXN0aWNzZWFyY2g= 59987 -IGhvcml6b250YWxseQ== 59988 -IEd1bA== 59989 -SW1tdXRhYmxl 59990 -IGxvc2Vy 59991 -IGFib3J0ZWQ= 59992 -LWRlbW8= 59993 -IEhhdGNo 59994 -IHVuZGU= 59995 -IHByb2Nlc3Nv 59996 -LWNhbGw= 59997 -SW5jb21l 59998 -5YM= 59999 -X3JldHVybnM= 60000 -J10uIic= 60001 -KHN3 60002 -Q0JT 60003 -YW1pbGllcw== 60004 -IFlvdXJzZWxm 60005 -IEhvbHQ= 60006 -Lk1PTg== 60007 -4KeH 60008 -0YjQtQ== 60009 -YW5vbg== 60010 -IEZvbnRBd2Vzb21l 60011 -cHJvZHVjZXI= 60012 -anI= 60013 -IG1hdQ== 60014 -CWludGVy 60015 -IGRpc2hvbmVzdA== 60016 -IG1hZ25h 60017 -IENvbGxlY3RpdmU= 60018 -IHZyYWltZW50 60019 -IGNob2l4 60020 -c3RheQ== 60021 -IHdlbGRpbmc= 60022 -cmlzaW5n 60023 -LG1pbg== 60024 -IEZhdGU= 60025 -Z2xvYg== 60026 -UkdCQQ== 60027 -IGRldHRl 60028 -VmVu 60029 -IGVtYmFycmFzc21lbnQ= 60030 -LkRFTEVURQ== 60031 -Z3JlZ2Fy 60032 -LXJlbmRlcg== 60033 -KGJ1Y2tldA== 60034 -Ij4KCgo= 60035 -LndhaXRLZXk= 60036 -QnVzeQ== 60037 -IGRpZmZlcmVudGlhdGlvbg== 60038 -IENTVA== 60039 -LkNvbnN0YW50 60040 -IGxpbmVOdW1iZXI= 60041 -KG1hdGNoZXM= 60042 -IHdlYnNvY2tldA== 60043 -IGJhcnJlZA== 60044 -IHB1ZWRlcw== 60045 -TW9ubw== 60046 -Q09SRQ== 60047 -SUlE 60048 -ICAgIA0KDQo= 60049 -IHDDumJsaWNv 60050 -bGVhbmluZw== 60051 -IGNsZWFuc2luZw== 60052 -IGNyaXM= 60053 -IERldmlscw== 60054 -X1NFVFRJTkc= 60055 -dW50YXJ5 60056 -Lik7Cg== 60057 -CiAgIAo= 60058 -W2N1cnI= 60059 -dHN5 60060 -IEFsZXhpcw== 60061 -cml0ZWw= 60062 -IHBldHJvbGV1bQ== 60063 -LnByZXByb2Nlc3Npbmc= 60064 -bWF0dGVy 60065 -Rm9yUmVzdWx0 60066 -LWxpY2Vuc2U= 60067 -IHRyYXZlbGxlcnM= 60068 -IERpc3BhdGNoZXI= 60069 -ZW5uaWZlcg== 60070 -IGRpZ2VzdGl2ZQ== 60071 -UEVE 60072 -aGliaXRpb24= 60073 -TUFTQ29uc3RyYWludE1ha2Vy 60074 -IFdhdHQ= 60075 -QmVuZWY= 60076 -LnNldFZpZXc= 60077 -ZHRv 60078 -VEVF 60079 -IFBlbG9zaQ== 60080 -X0VYVFJB 60081 -IG1lZGFscw== 60082 -eGhy 60083 -Zm9yZWNhc3Q= 60084 -IG5hcmdpbg== 60085 -b3Vucw== 60086 -LWZpbGw= 60087 -X0NVUlNPUg== 60088 -IHN1cGVydmlzZWQ= 60089 -IHR1cmY= 60090 -IEVkZ2Fy 60091 -UE9TSVRJT04= 60092 -IGNhdGVnb3J5SWQ= 60093 -4ok= 60094 -X0VS 60095 -4bunYQ== 60096 -U2hvd24= 60097 -Lmxs 60098 -X1BPTElDWQ== 60099 -KCksJw== 60100 -IFByZXY= 60101 -IFN0cmluZ0ZpZWxk 60102 -CUdsb2JhbA== 60103 -YXNzZWQ= 60104 -VGhyb3VnaG91dA== 60105 -b3N0cmluZ3N0cmVhbQ== 60106 -LmF3dGV4dHJh 60107 -IHNsb3Blcw== 60108 -IFNlcXVlbnRpYWw= 60109 -IGdpb3Ju 60110 -IHplbGY= 60111 -IHZlcnNhdGlsaXR5 60112 -bGVuZWNr 60113 -LmNnaQ== 60114 -IGRvdWJsaW5n 60115 -IEJhbmdrb2s= 60116 -IGJ1dXJ0 60117 -IHVzdcOhcmlv 60118 -c3R1ZGlv 60119 -IGpldW5lcw== 60120 -IG11dGVk 60121 -IGlwcw== 60122 -X2ZyYWN0aW9u 60123 -JiYo 60124 -IHN0dW50 60125 -Jyk7Pz48Lw== 60126 -IExpZ2E= 60127 -IHF1YWxpdMOp 60128 -QXNzaWduYWJsZQ== 60129 -IHdvcmthcm91bmQ= 60130 -IHNwdXI= 60131 -IHNsZXc= 60132 -X0dF 60133 -IEFncmljdWx0dXJhbA== 60134 -IHJlbGVudGxlc3M= 60135 -KFF1ZXJ5 60136 -IFNlY3Rpb25z 60137 -IHJldmlld2Vycw== 60138 -UmFpbg== 60139 -ZGxn 60140 -YXNzZXJ0RmFsc2U= 60141 -IG5vbWluZWVz 60142 -X18pLg== 60143 -LmR5bmFtaWM= 60144 -IFBCUw== 60145 -Q2hhbmdpbmc= 60146 -IHNsaWdodGVzdA== 60147 -IE1hbmc= 60148 -fT4NCg== 60149 -IGV2YXBvcg== 60150 -YmFibGU= 60151 -IFBSSUNF 60152 -IOaz 60153 -bHVjZW50 60154 -IHZhbXA= 60155 -IFRlY2huaWNpYW4= 60156 -IHVuaXF1ZW5lc3M= 60157 -TWVz 60158 -dXJiYW4= 60159 -LnBhcmFtZXRyaXpl 60160 -IFJlcGxheQ== 60161 -U2Vzc2lvbnM= 60162 -ZW1icg== 60163 -LUFtZXJpY2Fucw== 60164 -X1BST1hZ 60165 -IHBpYW4= 60166 -IHRyaWU= 60167 -IERlc3RydWN0b3I= 60168 -R2FtZVN0YXRl 60169 -IElNRg== 60170 -Y2hpbg== 60171 -IHBvcnRl 60172 -IFN3YWw= 60173 -5Z+O 60174 -U3Vic3RyaW5n 60175 -aW1pbmc= 60176 -L0xpYnJhcnk= 60177 -IGZyaWdodGVuZWQ= 60178 -d3JpdGVz 60179 -IHJlY3Vyc29z 60180 -YXJSZXN1bHQ= 60181 -X0lOSVRJQUxJWg== 60182 -IEJhZGdl 60183 -X2NyYw== 60184 -RWlnaHQ= 60185 -IERJU1RJTkNU 60186 -IHRocm8= 60187 -QFhtbA== 60188 -IExlZ2VuZGFyeQ== 60189 -LXR3aXR0ZXI= 60190 -X2Vhc3k= 60191 -ICsrKw== 60192 -KERBVEE= 60193 -LkxvY2FsZQ== 60194 -IGvDpA== 60195 -IG51cnQ= 60196 -IGNydWlz 60197 -X2lvcw== 60198 -IHNlbnNpbmc= 60199 -X0xpbmU= 60200 -CiAgICAgICAgICAgICAgICAgICAgCg== 60201 -cG9uZw== 60202 -b2xlb24= 60203 -IHdpbGRjYXJk 60204 -55So5oi35ZCN 60205 -IGJlZ2dpbmc= 60206 -Um9k 60207 -IMOO 60208 -X0NFTEw= 60209 -UmVzZWFyY2hlcnM= 60210 -LnNlbGVjdG9y 60211 -X2luZw== 60212 -IGFzcGlyaW5n 60213 -IGltbW9ydGFs 60214 -IHltaW4= 60215 -X3JvYm90 60216 -IHBsdXI= 60217 -QlRD 60218 -IERJRA== 60219 -IHBpZXJjaW5n 60220 -KnU= 60221 -X0RFRklORUQ= 60222 -IFRoaQ== 60223 -aXRhaXJl 60224 -KG1lZGlh 60225 -LW9ucw== 60226 -IGNoZWZz 60227 -ICIqLg== 60228 -L0FQ 60229 -IHJhem9y 60230 -IHNlYXJjaERhdGE= 60231 -ID0m 60232 -IOOAgg== 60233 -IG1vdXJu 60234 -dGluZ2hhbQ== 60235 -IG9saQ== 60236 -IFZlcm5vbg== 60237 -X1JT 60238 -nuaApw== 60239 -IGbDoWNpbA== 60240 -YW5nZW4= 60241 -Y2VsYWlu 60242 -IGFpbA== 60243 -bGVzdA== 60244 -IFFDT01QQVJF 60245 -Z2Fpbg== 60246 -IM61 60247 -IEtvYg== 60248 -IEZhdWx0 60249 -X2NvbmZpZ3M= 60250 -57uT5p6c 60251 -Lis= 60252 -Y2FsYXI= 60253 -KGNvbG9ycw== 60254 -TXVs 60255 -X0FSVA== 60256 -IGV4cGVyaW1lbnRpbmc= 60257 -ZXJtZW4= 60258 -IEFuZ2xv 60259 -LkZpeGVkU2luZ2xl 60260 -U2Vh 60261 -IGN0eHQ= 60262 -LnNsaWRlcg== 60263 -Q29sbGFwc2U= 60264 -R3JleQ== 60265 -IGZsZA== 60266 -LXByb29m 60267 -LmNhcGFjaXR5 60268 -Z2V0UGFyZW50 60269 -IENvbXBsaWFuY2U= 60270 -IGJ1cmds 60271 -LXJlYw== 60272 -IG92ZXJ3cml0dGVu 60273 -TVU= 60274 -IHJvdXRlcnM= 60275 -CU1vZGVs 60276 -IGZhbnRhc2llcw== 60277 -YXZpYW4= 60278 -X3ByZWM= 60279 -IFNjYW5kaW4= 60280 -IC8vPA== 60281 -L29jdA== 60282 -IGNlcmVtb25pZXM= 60283 -TW9udGhz 60284 -dW5keQ== 60285 -IHF1ZWQ= 60286 -IE5vdQ== 60287 -IFZpYnI= 60288 -LnJnYg== 60289 -IGNpdHJ1cw== 60290 -IGJyYWNlcw== 60291 -LXVwcGVyY2FzZQ== 60292 -Z2V0VGFibGU= 60293 -IGRvcG8= 60294 -IEtlcnI= 60295 -X0NISUxE 60296 -LWNsb3Vk 60297 -CU1hdHJpeA== 60298 -IGdhcmRlbmluZw== 60299 -U2luZw== 60300 -YWxtb3N0 60301 -UmVxdWlyZW1lbnRz 60302 -dWd1YXk= 60303 -KFByb3BlcnR5 60304 -c3Vic2NyaWJlcg== 60305 -RkFTVA== 60306 -cmVhY3Rpb24= 60307 -KGxw 60308 -KX0pCg== 60309 -YCku 60310 -LndhbGxldA== 60311 -X2V4Y2hhbmdl 60312 -Lk1heGltdW0= 60313 -IFZlcmI= 60314 -4pSB 60315 -KCk8 60316 -77ybCg== 60317 -Uk9U 60318 -Q0FSRA== 60319 -dWJpdA== 60320 -e0A= 60321 -X2tlbA== 60322 -IFRvb2x0aXA= 60323 -TXlTUUw= 60324 -TWFpbkFjdGl2aXR5 60325 -YXJm 60326 -IG1hbGlnbg== 60327 -IHNlaW5lbg== 60328 -YXBpc3Q= 60329 -IDwl 60330 -TWV0aG9kSW1wbA== 60331 -TWls 60332 -IE1pY2s= 60333 -LmRlcGVuZA== 60334 -PElE 60335 -IHByZWRpY3RpdmU= 60336 -IEFQUExJQ0FUSU9O 60337 -bGVm 60338 -ZGltZW5zaW9ucw== 60339 -IGNvbm9jZXI= 60340 -L2NvbmY= 60341 -IFRyYWN5 60342 -Rm90bw== 60343 -X3JlbWFpbmluZw== 60344 -PWZpbGU= 60345 -IHBhZ2VJbmRleA== 60346 -IFBhcmlzaA== 60347 -IHRleGFz 60348 -IE1BR0lD 60349 -IEhldw== 60350 -ZGlmZmVyZW5jZQ== 60351 -IGFsdHVyYQ== 60352 -Y3Vt 60353 -CWRhdGFUeXBl 60354 -IGNhcmFjdGVyZXM= 60355 -YXZpb3Vycw== 60356 -IFZPSUQ= 60357 -6L+R 60358 -UFVCTElD 60359 -Qmlv 60360 -IHN0cmluZ0J5QXBwZW5kaW5n 60361 -UGFyc2VFeGNlcHRpb24= 60362 -IFN1ZmY= 60363 -IE5vcnRvbg== 60364 -L2RldGFpbHM= 60365 -Lm51bGw= 60366 -Pj4m 60367 -CW9r 60368 -LWxvdw== 60369 -LnVzdWFyaW8= 60370 -bmVzdGVk 60371 -WEI= 60372 -T1VSUw== 60373 -LkJvcmRlckNvbG9y 60374 -IGJyb3c= 60375 -INCV 60376 -Y29ycg== 60377 -IFJlZHNraW5z 60378 -LmdldFRhZw== 60379 -LmdldFRyYW5zYWN0aW9u 60380 -IHN0aWdtYQ== 60381 -aGFyZHQ= 60382 -IFBsYXllclByZWZz 60383 -YWxzeQ== 60384 -dWNzb24= 60385 -TGFuZ3VhZ2Vz 60386 -IE9saXZpYQ== 60387 -IHRhYw== 60388 -IGJsaQ== 60389 -IGNhdmFs 60390 -IGNvbnNvbGlkYXRlZA== 60391 -IHBlcmls 60392 -IGRlbGU= 60393 -IGZvcm11bGF0ZWQ= 60394 -IGhpZ2h3YXlz 60395 -LnNwYXdu 60396 -PT0k 60397 -IE5pZXQ= 60398 -IHZlZ2dpZXM= 60399 -eXBv 60400 -LXJ1bGU= 60401 -IFZpZQ== 60402 -L2VwbA== 60403 -IGVuZmFudHM= 60404 -c3RyaW5nTGl0ZXJhbA== 60405 -IHRvdWdoZXN0 60406 -YnV5ZXI= 60407 -IGNvdmFyaWFuY2U= 60408 -IGlsaQ== 60409 -IFNvcGhpZQ== 60410 -IEJBQg== 60411 -ICIpLA== 60412 -IFVr 60413 -Y3VycmVudEluZGV4 60414 -X3VzZXJkYXRh 60415 -LmNvZGVj 60416 -IFB1bmphYg== 60417 -IFNOUA== 60418 -bG9s 60419 -YWR2YW5jZQ== 60420 -IGNvbWZ5 60421 -SnNvbklnbm9yZQ== 60422 -IGZhc2hpb25hYmxl 60423 -IElDT04= 60424 -IG9yYQ== 60425 -IFByaWNpbmc= 60426 -PG51bQ== 60427 -IElSQw== 60428 -RVJW 60429 -IE1laW4= 60430 -IElEaWN0aW9uYXJ5 60431 -QURPVw== 60432 -aXNOZXc= 60433 -IERldm9u 60434 -YXRs 60435 -KHJlcXVlc3RDb2Rl 60436 -CVByZXBhcmVkU3RhdGVtZW50 60437 -SU1QT1JU 60438 -IG1hcml0YWw= 60439 -X1NFTEVDVEVE 60440 -Z2V0UmVzcG9uc2U= 60441 -YXJEb3du 60442 -QlY= 60443 -aWJOYW1l 60444 -IFBBVENI 60445 -w6TDpG4= 60446 -IGRhYXI= 60447 -IEZpbGVNb2Rl 60448 -IG1hcnR5 60449 -LlNwcmluZ0FwcGxpY2F0aW9u 60450 -Y2VuZQ== 60451 -YW1wb2xpbmU= 60452 -Z2V0U2l6ZQ== 60453 -UmVzdGFydA== 60454 -5pWI 60455 -LnByb2plY3Rz 60456 -IEV0aGlvcGlh 60457 -IHN0YXR1c2Vz 60458 -VElPTg== 60459 -KGJn 60460 -IFh1bml0 60461 -VGVtcG9yYXJ5 60462 -IEVuZ2FnZW1lbnQ= 60463 -IHhm 60464 -IHByb3hpZXM= 60465 -IGdlbmVzaXM= 60466 -UGFnZXJBZGFwdGVy 60467 -IFNsYXZl 60468 -IHN1bmdsYXNzZXM= 60469 -IENobG9l 60470 -IGtvamk= 60471 -YWRlbQ== 60472 -CUpTT05PYmplY3Q= 60473 -zrM= 60474 -IGhvcnM= 60475 -Knc= 60476 -w7Ny 60477 -ZXNjaA== 60478 -IGNyaXRpY2lzZWQ= 60479 -emlhbA== 60480 -IFNhbGVt 60481 -LlZlcnRpY2Fs 60482 -IFJhc2g= 60483 -PkU= 60484 -dGVyaW5n 60485 -L3NjcmVlbnM= 60486 -IGhlaWdodGVuZWQ= 60487 -0LDRgNGC 60488 -QXV0aG9yaXRpZXM= 60489 -X2Jib3g= 60490 -w7xuc3Q= 60491 -LmZvbnRTaXpl 60492 -IEJPT0xFQU4= 60493 -ZGl2aWRl 60494 -IFNsb3Zlbg== 60495 -dWNlcg== 60496 -2ZI= 60497 -c3R1Yg== 60498 -IG5hdmlnYXRpbmc= 60499 -OmFuaW1hdGVk 60500 -X05PVw== 60501 -X3ZlY3Q= 60502 -fXsK 60503 -QCg= 60504 -IHRlbGVjb20= 60505 -IGNvbnRyYWN0aW5n 60506 -IEFzc2FuZ2U= 60507 -IGV4dHJhY3Rpbmc= 60508 -IGdyw7Y= 60509 -Y29icmE= 60510 -LkRJUw== 60511 -IGNyYWI= 60512 -IHR3aXRjaA== 60513 -IHZlcnRz 60514 -IHJlamVjdHM= 60515 -CWZvcm1hdA== 60516 -IHJlZ2VuZXJhdGlvbg== 60517 -LlN5cw== 60518 -c29sdmU= 60519 -CWRpYWxvZw== 60520 -c2hp 60521 -bWV0ZXI= 60522 -KGJlc3Q= 60523 -dmFsaWRhdG9ycw== 60524 -IG9ud2FyZHM= 60525 -IGd1cnU= 60526 -IG1vZGVyYXRvcg== 60527 -b3dpZWQ= 60528 -ZXhwZXJpbWVudA== 60529 -cnVi 60530 -IG1xdHQ= 60531 -IENhdWNhcw== 60532 -IG5hdGlvbmFsaXNt 60533 -IG1hbmdl 60534 -CUltR3Vp 60535 -L0VkaXQ= 60536 -IGluaA== 60537 -IGludGVsbGln 60538 -ZXJva2Vl 60539 -CWV4cG9ydA== 60540 -IGRpc2NyaW1pbmF0ZQ== 60541 -c3VidHJhY3Q= 60542 -IE1vb2RsZQ== 60543 -ZW5zZXI= 60544 -IEd1aWRlcw== 60545 -UkFQ 60546 -LWhvdA== 60547 -X2dycA== 60548 -LnBpY3R1cmU= 60549 -WEE= 60550 -IGluaXRWaWV3 60551 -X0NvbW0= 60552 -IG92ZXJkb3Nl 60553 -ICsKCg== 60554 -IFNpbGVudA== 60555 -c2hvd3M= 60556 -IGludGVycG9sYXRl 60557 -Rm9ybWF0aW9u 60558 -IGJpc2M= 60559 -bWFya2V0cw== 60560 -KFND 60561 -WmU= 60562 -IE5ldHdvcmtpbmc= 60563 -IGFkcmVuYWw= 60564 -IEd1bnM= 60565 -ZXRlb3I= 60566 -RGVjbGFyZWQ= 60567 -b3JnZXRvd24= 60568 -IGthcmVuYQ== 60569 -L3Bhc3N3b3Jk 60570 -X2FkZHJlc3Nlcw== 60571 -SVRFUkFM 60572 -QnV6eg== 60573 -IENvbndheQ== 60574 -KGNhc2U= 60575 -UFdE 60576 -aGVpcm8= 60577 -KGFjdA== 60578 -KioNCg== 60579 -KCkpOwoKCg== 60580 -IGFudg== 60581 -IC4uCgo= 60582 -KE1lbnVJdGVt 60583 -KG1haWw= 60584 -X3NlY3Rpb25z 60585 -CW5ldA== 60586 -IHBsdXQ= 60587 -IHdyZW5jaA== 60588 -L29iamVjdA== 60589 -IElzdA== 60590 -IFZJUw== 60591 -L3B1Yg== 60592 -YWx0ZW4= 60593 -IGd1aXRhcnM= 60594 -IGFudGliaW90aWM= 60595 -77yW 60596 -wrk= 60597 -ICIrIg== 60598 -Zm9ybXVsYQ== 60599 -IGJhYmVz 60600 -IFByb21wdA== 60601 -IGVuaW0= 60602 -L3BsYXllcg== 60603 -CXJlZg== 60604 -IGJ5xIc= 60605 -IGNvbnN1bWVz 60606 -IEhhc3Q= 60607 -IFRhbw== 60608 -ICcpKQo= 60609 -IGNsYW0= 60610 -IHRoaWdocw== 60611 -IG1vdGlm 60612 -QXBpT3BlcmF0aW9u 60613 -IFdM 60614 -Z2V0Qw== 60615 -CWZsYWdz 60616 -b2ludG1lbnRz 60617 -IGVjb25vbWljYWw= 60618 -bmVlZGxl 60619 -eGxz 60620 -cHJhY3RpY2U= 60621 -dXR6ZXI= 60622 -dGltZW9mZGF5 60623 -LW91dHB1dA== 60624 -IGZpbmRCeUlk 60625 -IEJ1ZGR5 60626 -0J7Rgg== 60627 -U2V2ZW4= 60628 -IEJhcms= 60629 -IGVudm95 60630 -X2FsZ29yaXRobQ== 60631 -5Yip 60632 -IGJhbGxpc3RpYw== 60633 -56e7 60634 -cmFkZXM= 60635 -CWRvYw== 60636 -cm9kdWNpbmc= 60637 -IEVhdGluZw== 60638 -VW5tb3VudA== 60639 -L2RhdGFUYWJsZXM= 60640 -X2JvbnVz 60641 -IGxpdHQ= 60642 -cHBz 60643 -KWxvY2FsT2JqZWN0 60644 -cGVyZg== 60645 -IEhlbHZldGljYQ== 60646 -c2h1dGRvd24= 60647 -L21s 60648 -LnRva2Vucw== 60649 -IEhhcmRjb3Jl 60650 -LHJvdw== 60651 -L2Jn 60652 -U2NhbGVy 60653 -4oCUYXM= 60654 -X2xvZ2l0cw== 60655 -4oCZaW50 60656 -CUFwcA== 60657 -SW1wbGljaXQ= 60658 -LkZwcmludGY= 60659 -RVRP 60660 -IHRlcnJh 60661 -IHBvc3Nlc3Npbmc= 60662 -LnJzdHJpcA== 60663 -LCks 60664 -PXllcw== 60665 -IFN0cmlwZQ== 60666 -Pz0= 60667 -bmV1dHJhbA== 60668 -Lmdvb2Q= 60669 -IGtlbm5lbg== 60670 -IFN1bmc= 60671 -ZmF1bHQ= 60672 -eXN0YXRlY2hhbmdl 60673 -Q2FuYWRpYW4= 60674 -JywnIi4k 60675 -IE1pdHM= 60676 -w6ZuZA== 60677 -IFNUUlVDVA== 60678 -IFVSTFdpdGhTdHJpbmc= 60679 -IENvbXBhc3M= 60680 -IC0tCgo= 60681 -IE5TTGF5b3V0Q29uc3RyYWludA== 60682 -fG1pbg== 60683 -LWFkanVzdA== 60684 -IHJlYnVpbHQ= 60685 -TElHSFQ= 60686 -L3Nl 60687 -LW1vdW50 60688 -dnBu 60689 -dmFsaWRhdGVk 60690 -KFFPYmplY3Q= 60691 -IGlnbml0aW9u 60692 -IENoYXJnZXJz 60693 -UllQVE8= 60694 -XWluaXRXaXRoRnJhbWU= 60695 -IEZsdWlk 60696 -IGNhZHJl 60697 -IG5vbWluYXRpb25z 60698 -TmVpbGw= 60699 -IEhvdQ== 60700 -IGN1cnJlbnRz 60701 -X2dlbmU= 60702 -KGlucA== 60703 -UGFyaXM= 60704 -esSZ 60705 -YWdncmVnYXRl 60706 -IGFzc29j 60707 -d2VldGVk 60708 -ZXJyYXQ= 60709 -4oCTCgo= 60710 -ICcvJywK 60711 -Zml4dHVyZQ== 60712 -IEhpZ2hlc3Q= 60713 -YW1iaWVudA== 60714 -IGNobW9k 60715 -IGNvbnRl 60716 -IHNlbnN1YWw= 60717 -IGdhcm1lbnQ= 60718 -emVycw== 60719 -IFBvd2VyZWQ= 60720 -ZG9tYWlucw== 60721 -UmV3YXJk 60722 -aW9tYW5pcA== 60723 -IGNvY2twaXQ= 60724 -b3V0ZmlsZQ== 60725 -IGJ1aWx0aW4= 60726 -IGluc2lzdGluZw== 60727 -LnZhcnM= 60728 -emlwY29kZQ== 60729 -IO+/ve+/ve+/ve+/vQ== 60730 -ZmFpbHM= 60731 -IGNvbnNvbGlkYXRpb24= 60732 -X29pZA== 60733 -UGxhbmV0 60734 -ID0iLA== 60735 -CWVs 60736 -VUlMVA== 60737 -w6R0eg== 60738 -YWZhcmk= 60739 -IE1jQ2w= 60740 -VGltZWxpbmU= 60741 -RXN0YQ== 60742 -IGZyYW0= 60743 -WUU= 60744 -IGNlcmVicmFs 60745 -T2ZNb250aA== 60746 -IFByZWdu 60747 -INC60LvQsNGB0YE= 60748 -ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgCg== 60749 -IEZyZXM= 60750 -QXBwcm92ZWQ= 60751 -LlNwZWNpYWw= 60752 -IFByb3Rlc3RhbnQ= 60753 -IGFsbGVyZ3k= 60754 -X3BjbQ== 60755 -CUNvcHlyaWdodA== 60756 -IHN1cGVyQ2xhc3M= 60757 -InN0cmNvbnY= 60758 -IE1vaGFtZWQ= 60759 -ICcvLw== 60760 -Rm9yZUNvbG9y 60761 -QXJ0aHVy 60762 -IEp1bmdsZQ== 60763 -IHZlaW5z 60764 -U2Fk 60765 -IGJhY2t1cHM= 60766 -IE9waW5pb24= 60767 -w7t0 60768 -IGludGVybWl0dA== 60769 -b2R5bg== 60770 -IENocmlzdGluYQ== 60771 -IGFuZHJl 60772 -IGV2YWN1YXRpb24= 60773 -cGFsZXR0ZQ== 60774 -aG9yc2U= 60775 -IFJlc2lkZW50 60776 -IEhhc3Nhbg== 60777 -Lk5pbA== 60778 -IGFpc2xl 60779 -IEdyb3dpbmc= 60780 -IGJsb2dpbmZv 60781 -L3NxbA== 60782 -X2lvY3Rs 60783 -U2NhbGluZw== 60784 -IE1vbmFk 60785 -X2NwcA== 60786 -IEh1dGNo 60787 -IEFwcGxlV2ViS2l0 60788 -RXhwZW5zZQ== 60789 -X0pPQg== 60790 -IHBvaW50bGVzcw== 60791 -RnJvbUJvZHk= 60792 -YW50YWw= 60793 -IGRlcGljdGluZw== 60794 -IENFTEw= 60795 -IHJlZmlu 60796 -IENOQw== 60797 -7LmY 60798 -X2RpbWVuc2lvbnM= 60799 -IFNBTg== 60800 -IGFmdA== 60801 -IGZvb3RzdGVwcw== 60802 -Y2NvbGk= 60803 -X1BIT05F 60804 -L21hdGg= 60805 -LWtpbmQ= 60806 -IE1lYW5z 60807 -aWNoYWVs 60808 -Lmd1bmE= 60809 -IGluYXVndXJhdGlvbg== 60810 -LWRyaXZpbmc= 60811 -KGRlbGV0ZQ== 60812 -IHRvdGFsQ291bnQ= 60813 -X01D 60814 -LkV4dGVuc2lvbg== 60815 -Q29tbWVyY2lhbA== 60816 -IHpJbmRleA== 60817 -PEN1c3RvbWVy 60818 -Imc= 60819 -LXNoYXJl 60820 -IHBhY3Q= 60821 -YWdhcmE= 60822 -IFNJTA== 60823 -X21vZGVz 60824 -IE1vbGVjdWxhcg== 60825 -IHN5c3RlbWF0aWNhbGx5 60826 -PEc= 60827 -X3Njcg== 60828 -IE9ybw== 60829 -YXNlcnM= 60830 -IGJpYw== 60831 -IGRlc3Ryb3lz 60832 -UElQRQ== 60833 -LlN0YXJ0UG9zaXRpb24= 60834 -IGPhu6dh 60835 -aXJleg== 60836 -LkJ1bmlmdQ== 60837 -X0Z1bmN0aW9u 60838 -IHPDvA== 60839 -X2Z1dHVyZQ== 60840 -IFdlYWx0aA== 60841 -IE5hdHVyYWxseQ== 60842 -5oC7 60843 -X3llcw== 60844 -IGFicnVwdGx5 60845 -U3RyaW5nRW5jb2Rpbmc= 60846 -IENHUG9pbnRNYWtl 60847 -IHpo 60848 -IGltcGVyc29u 60849 -IHBpdm90YWw= 60850 -IFNvbWFsaWE= 60851 -IHNlZ21lbnRhdGlvbg== 60852 -X0FOQUw= 60853 -IExvZ2luQ29tcG9uZW50 60854 -Q29uc3VsdA== 60855 -IHRydW5jYXRlZA== 60856 -XSI7Cg== 60857 -LmdldENvbmZpZw== 60858 -IGludGVybnNoaXA= 60859 -QmFieQ== 60860 -6rCc 60861 -IHN0cmVuZ3RoZW5lZA== 60862 -X01J 60863 -YmFza2V0 60864 -IG5pY2h0cw== 60865 -IFRWcw== 60866 -IFNoYW4= 60867 -44K1 60868 -cmFjdXNl 60869 -LlJlTFU= 60870 -L2ludGVyZmFjZXM= 60871 -IGdldEl0ZW1Db3VudA== 60872 -IHJldGlyaW5n 60873 -IHNwZWNpYWxz 60874 -IGVudGl0eU1hbmFnZXI= 60875 -YmVsaWVm 60876 -IHNvbGRlcg== 60877 -ZGF1Z2h0ZXI= 60878 -aWprbA== 60879 -IHV0aWxpemVz 60880 -LmZpeGVk 60881 -U1U= 60882 -IGRyYXN0aWM= 60883 -IGhhY2tz 60884 -Z3J1bmQ= 60885 -IE1V 60886 -IFN0YXJ0ZXI= 60887 -LkNvbXBvbmVudHM= 60888 -X21vdG9y 60889 -R29sZGVu 60890 -IGxvZGdl 60891 -ICkpOw== 60892 -IENvcmludGg= 60893 -0LjRh9C10YHRgtCy0L4= 60894 -w7NuaWNv 60895 -Z3JlU1FM 60896 -IEZsdWVudA== 60897 -IG1hcmM= 60898 -LkxvYWRTY2VuZQ== 60899 -Lkdyb3Vwcw== 60900 -IGVyaA== 60901 -IEF1dHVtbg== 60902 -U3RvcHBlZA== 60903 -IGl0YWxpYW5v 60904 -IG1pbmlvbnM= 60905 -IEFzc2VydGlvbnM= 60906 -IG11eA== 60907 -QnU= 60908 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 60909 -CXVw 60910 -cmVhZHlzdGF0ZWNoYW5nZQ== 60911 -X01ldGE= 60912 -IGN1cnJlbnREYXRl 60913 -IENoYXBtYW4= 60914 -VW5kbw== 60915 -U2Vhbg== 60916 -YXBy 60917 -IHBhcm0= 60918 -X2ljb25z 60919 -IFN0YQ== 60920 -w6F6 60921 -IHN1YmRpdmlzaW9u 60922 -IGFsdGVyaW5n 60923 -UE5H 60924 -cG9uZW50aWFs 60925 -IHBvc3RncmVz 60926 -IEJEUw== 60927 -LWV4aXN0ZW50 60928 -IEJyYWRmb3Jk 60929 -IE9NWA== 60930 -X1dISVRF 60931 -X1BST0dSQU0= 60932 -cWM= 60933 -IHR5cGluZ3NTbGlua3k= 60934 -IFBpY3M= 60935 -X01FVEE= 60936 -SVRURVI= 60937 -X3N1YnNjcmlwdGlvbg== 60938 -SVJPTk1FTlQ= 60939 -IEh5dW5kYWk= 60940 -KCk7CgoKCg== 60941 -INiz 60942 -IGphYw== 60943 -IGVsaW1pbmF0ZXM= 60944 -KX0pOwo= 60945 -IGNvbXByZW5k 60946 -CWluc2VydA== 60947 -X2ZhY2Vz 60948 -Ij4k 60949 -IGViYXk= 60950 -IGNhcHRpdmU= 60951 -cGxpYW50 60952 -IENhbGN1bGF0ZXM= 60953 -b2x0YQ== 60954 -ZXN0aW5n 60955 -X3JldmlzaW9u 60956 -IG3DunM= 60957 -K20= 60958 -IiwiIiwi 60959 -V0hBVA== 60960 -IGNvbXBhc3Npb25hdGU= 60961 -aGFyZ2E= 60962 -W3JhbmRvbQ== 60963 -IG1vZHVsbw== 60964 -KHNu 60965 -IG9jY3VwYXRpb25z 60966 -Ly8vLwo= 60967 -CWJvYXJk 60968 -IEJhbGs= 60969 -d2nEhQ== 60970 -IFdpZmk= 60971 -LlByb2ZpbGU= 60972 -Om1hag== 60973 -CW1hdA== 60974 -TE9DS1M= 60975 -KGpCdXR0b24= 60976 -ICgnJA== 60977 -TXVy 60978 -5oyJ 60979 -YmJsZQ== 60980 -IGZyb2c= 60981 -LWhpZGU= 60982 -IGJyb2FkY2FzdGVy 60983 -4Lie 60984 -aGFsZWQ= 60985 -IGFtdXNpbmc= 60986 -X3ByZWRpY3Rpb25z 60987 -X2ludHI= 60988 -IGVhZ2xl 60989 -0LDRgtC10LvRjA== 60990 -IGdldExpc3Q= 60991 -cHNpbG9u 60992 -IGNoYXJhY3Rlcml6YXRpb24= 60993 -QVJEUw== 60994 -IHJlbG9jYXRpb24= 60995 -IHJ1bGVycw== 60996 -UEFZ 60997 -IERlZmluaXRlbHk= 60998 -X0FjdGlvbg== 60999 -IGNsb3N1cmVz 61000 -IGZhY3R1YWw= 61001 -b2R5bmFtaWM= 61002 -IHByZWNhdXRpb25z 61003 -bmllag== 61004 -IFBhcnRpZXM= 61005 -IFN1YmFydQ== 61006 -IGNvdXNpbnM= 61007 -YXJiZWl0 61008 -Lm1vbmV5 61009 -Z3VudGE= 61010 -KGFuZA== 61011 -Z2V0aXRlbQ== 61012 -LlN0eWxlUHJpb3JpdHk= 61013 -IHNsaWQ= 61014 -c2luZ2xldG9u 61015 -IGdhcm4= 61016 -IFBBUw== 61017 -IGRheno= 61018 -YcW8 61019 -IGJvZ3Vz 61020 -IE1vZw== 61021 -IHJpdmFscnk= 61022 -aXNvbA== 61023 -IGxhbmRtYXJrcw== 61024 -w7Fhcw== 61025 -QmVybg== 61026 -IFNhY2hz 61027 -ICIpCgo= 61028 -IGhvc3RpbGl0eQ== 61029 -X21leA== 61030 -bWVyZQ== 61031 -TW90 61032 -cGljdHVyZUJveA== 61033 -RGVmZW5zZQ== 61034 -IGFmZmlkYXZpdA== 61035 -b3RoZXJ3aXNl 61036 -LmRpcmVjdG9yeQ== 61037 -X1VuaXR5RW5naW5l 61038 -LWJsb2c= 61039 -LnNraW4= 61040 -cGhlbQ== 61041 -QXBlbGxpZG8= 61042 -ZXJjaGFudA== 61043 -W2NsYXNz 61044 -IHdhcnQ= 61045 -LiJb 61046 -YWxldXI= 61047 -L2JhY2s= 61048 -ICAgIAkgICA= 61049 -IHByZWNpcGl0YXRpb24= 61050 -IG9ic3RydWN0aW9u 61051 -IHBPYmo= 61052 -IHJ1cHQ= 61053 -VUNLRVQ= 61054 -YXll 61055 -5o6S 61056 -Z3g= 61057 -IGVjbA== 61058 -IHNlY3JlY3k= 61059 -L0hlYWRlcg== 61060 -IExlc2I= 61061 -IGxlaQ== 61062 -IEJ1bGxldGlu 61063 -IGdpdmVhd2F5 61064 -LkhvbWU= 61065 -X1JPT00= 61066 -Ilc= 61067 -IGNvd29yaw== 61068 -X3Jh 61069 -IEN5Y2xpbmc= 61070 -IFBhdw== 61071 -IHB1cGls 61072 -L2FyY2g= 61073 -IEZpbGVVdGlscw== 61074 -6aaW 61075 -cnNw 61076 -IGZyZWVkb21z 61077 -IExlYXI= 61078 -fWApLg== 61079 -IGJvd2xz 61080 -L2Jsb2Nr 61081 -X2xvZ2dpbmc= 61082 -IG1ldGhhbmU= 61083 -IGhvcm5z 61084 -IHdvbmRlcmZ1bGx5 61085 -IGFsdGVyYXRpb25z 61086 -IGV4aWxl 61087 -bHNlbg== 61088 -X3BhdXNl 61089 -X0xBTkdVQUdF 61090 -IFVTREE= 61091 -X215c3Fs 61092 -X0FNT1VOVA== 61093 -IExJRkU= 61094 -IHlvdW5nc3RlcnM= 61095 -IHJpb3Rz 61096 -W0U= 61097 -IHVuZm9yZ2V0dGFibGU= 61098 -LH0sCg== 61099 -RGlzcG9zZWQ= 61100 -IEFzc2Fzc2lu 61101 -VU5H 61102 -IE5ld3Nw 61103 -VXNlclNlcnZpY2U= 61104 -OmFsb2Fk 61105 -Kycs 61106 -IHNldHRsZXJz 61107 -IHNjcmVhbXM= 61108 -IGluY29udmVuaWVuY2U= 61109 -LlJvdGF0ZQ== 61110 -IGphcnM= 61111 -IFB1enpsZQ== 61112 -IG1lc3Q= 61113 -YXJzaQ== 61114 -IFNoYXJtYQ== 61115 -fCg= 61116 -LmRz 61117 -IFNhY3JlZA== 61118 -X2V2dA== 61119 -IGV4cHJlc3Nlcw== 61120 -IGhvY2g= 61121 -IER1Y2g= 61122 -LmNhbGxz 61123 -dGhy 61124 -IFNoZWZmaWVsZA== 61125 -LkFsZXJ0RGlhbG9n 61126 -IHJhZGljYWxseQ== 61127 -IHRyb3Vz 61128 -IHByZXZhaWxpbmc= 61129 -IFdXSUk= 61130 -4oCZbg== 61131 -ZW5zZWx5 61132 -IFllc3RlcmRheQ== 61133 -IFNpcml1cw== 61134 -IGtpbGxlcnM= 61135 -IEZGVA== 61136 -IG92YWw= 61137 -Jyk6DQo= 61138 -IOygleuztA== 61139 -b3VyYWdl 61140 -IENoZWNrYm94 61141 -V29ya2Jvb2s= 61142 -LmRlZmVy 61143 -X2Zsb29y 61144 -IGNvdW5jaWxs 61145 -IG5vcnNrZQ== 61146 -bW9pbA== 61147 -b3JlYQ== 61148 -IG1hcmtldGVk 61149 -X1NVUg== 61150 -eEFB 61151 -IHN0YWluZWQ= 61152 -ZXV0 61153 -IE1lbmc= 61154 -IGllZWU= 61155 -LmV4dGVybg== 61156 -ZWdpZQ== 61157 -IHJhcHA= 61158 -IFB5b25neWFuZw== 61159 -J2NsYXNz 61160 -TW9i 61161 -IGluaXRpYWxWYWx1ZQ== 61162 -X3dhdmU= 61163 -IGphYg== 61164 -IG1hc2N1bGluZQ== 61165 -IGFtcGxpZmllcg== 61166 -IHR0eQ== 61167 -UGF0aENvbXBvbmVudA== 61168 -X3h0 61169 -IEdGUA== 61170 -L3NlYw== 61171 -CWRpc3BhdGNo 61172 -bWFya2Rvd24= 61173 -IFNjaG4= 61174 -Ym9sZQ== 61175 -wrfCtw== 61176 -bW91c2Vtb3Zl 61177 -IGVyck1zZw== 61178 -IGFzaWdu 61179 -X21vbm8= 61180 -VG9TZWxlY3Rvcg== 61181 -IFp1 61182 -KFJlY3Q= 61183 -IEVycm9yQ29kZQ== 61184 -bGF0aW4= 61185 -YW5naWJsZQ== 61186 -dnRr 61187 -Q0dTaXpl 61188 -UG9rZW1vbg== 61189 -IGNsYXNzbWF0ZXM= 61190 -IGF0dHJhY3Rz 61191 -IFRhdHRv 61192 -dWx0YW4= 61193 -b2zDs2c= 61194 -IGhhbHRlZA== 61195 -4KSo 61196 -IEthcnQ= 61197 -IHVl 61198 -X0luaXRTdHJ1Y3R1cmU= 61199 -VGVzdENsYXNz 61200 -IEFpcmJuYg== 61201 -XyIs 61202 -IGNoYXJjb2Fs 61203 -IGlwYw== 61204 -IFN0cmV0Y2g= 61205 -LmdsaWRl 61206 -bGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz 61207 -IHBvdGlvbg== 61208 -SVRUTEU= 61209 -IGNvdW50ZXJ0 61210 -X2hk 61211 -cHJlcGFyZWQ= 61212 -QWRz 61213 -IFZhbXBpcmU= 61214 -cm9ib3Rz 61215 -LkNyZWF0ZUluZGV4 61216 -U3RhdHVzTGFiZWw= 61217 -IHR1Y2tlZA== 61218 -YWbDvHI= 61219 -VXQ= 61220 -IHN3ZWF0ZXI= 61221 -X0ZO 61222 -ICAgICAgICAgICAgICAgIAk= 61223 -YXRha2E= 61224 -IGV5ZWJyb3dz 61225 -YWNvZXM= 61226 -dWRlbg== 61227 -LkxpbmVhckxheW91dE1hbmFnZXI= 61228 -IHN3YXk= 61229 -IG11bHRpbg== 61230 -KCkpKSkK 61231 -IE5TVUludGVnZXI= 61232 -IE15QmFzZQ== 61233 -UGFydG5lcg== 61234 -dXRzY2hlbg== 61235 -IENhdGVy 61236 -LnNldEJhY2tncm91bmRDb2xvcg== 61237 -IGFjY29tcGxpc2htZW50 61238 -X3Byb2JsZW0= 61239 -LmR0ZA== 61240 -IHBhZ2VOdW1iZXI= 61241 -IGphY2tldHM= 61242 -IGNyb3BwZWQ= 61243 -dWVscw== 61244 -IEhlcA== 61245 -IGNhcHBlZA== 61246 -Kk1hdGg= 61247 -X2NhbGxiYWNrcw== 61248 -IHB1YmI= 61249 -IEJydW5zd2ljaw== 61250 -LnJlc3BvbmQ= 61251 -WyJf 61252 -IGJlZGRpbmc= 61253 -aHl0aG0= 61254 -T1g= 61255 -KHNwZWVk 61256 -IHBlc3RpY2lkZXM= 61257 -IC0tLS0tLS0= 61258 -LkJsdWU= 61259 -IG5vb2RsZXM= 61260 -IEdvZXM= 61261 -IHNhdmVy 61262 -b3h5 61263 -X2NvbXBsZXRpb24= 61264 -IFN3aW5nZXI= 61265 -IGdldERhdGU= 61266 -IG1pbmRlZA== 61267 -aW50ZWdyYXRpb24= 61268 -IExvdHVz 61269 -KHN0b3A= 61270 -KCcsJyk7Cg== 61271 -IGZsb29kcw== 61272 -IFdvcmtmbG93 61273 -IGVydXB0ZWQ= 61274 -TWFjcm8= 61275 -IFNhdWNl 61276 -IGV2ZW50TmFtZQ== 61277 -XElucHV0 61278 -QnJlYWtpbmc= 61279 -CXdoZW4= 61280 -X3B3 61281 -SU5ERVI= 61282 -IFdlbGxuZXNz 61283 -IHZveGVs 61284 -IE1lbGw= 61285 -IE1FRElB 61286 -U0VOUw== 61287 -IEZ1bmRz 61288 -IE1pbGQ= 61289 -PEFycmF5 61290 -LXRoaXM= 61291 -dW1wZWQ= 61292 -L2Z3 61293 -IERiQ29udGV4dA== 61294 -V0k= 61295 -Z2lybHM= 61296 -SE9X 61297 -Jyk7Pz4K 61298 -IHRlbXB0aW5n 61299 -IHRlc3RhbWVudA== 61300 -IGJpYmxl 61301 -IGNvbnN1bHRlZA== 61302 -IEluZGV4RXJyb3I= 61303 -6KiY 61304 -IGtleXBhZA== 61305 -aXp6bw== 61306 -KG9r 61307 -IHdoYXRzYXBw 61308 -IFJlbW90ZUV4Y2VwdGlvbg== 61309 -IHRlYW1lZA== 61310 -4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU4oCU 61311 -wrss 61312 -IGdldFRpbWU= 61313 -ZGlhZw== 61314 -aXNzeQ== 61315 -IGhlZA== 61316 -IGtub3Rz 61317 -am9t 61318 -IGZ1bm5lbA== 61319 -LW1haWxz 61320 -IGV4cG9ydGluZw== 61321 -IFZM 61322 -IEthcm4= 61323 -IEJ1ZGRoaXNt 61324 -IEFsbGFu 61325 -X1JBRElVUw== 61326 -IHdvcmRpbmc= 61327 -IEZvcmdldA== 61328 -IENvcm9uYQ== 61329 -aXBoeQ== 61330 -IGxpbWJ1cmc= 61331 -dWdneQ== 61332 -IFVzZXJSZXBvc2l0b3J5 61333 -aW1pbg== 61334 -KGVsZQ== 61335 -IGxhYmVsbGVk 61336 -56S+ 61337 -IEhlcm1hbg== 61338 -LnFx 61339 -ICIpKTsK 61340 -aWViZXI= 61341 -LlRyYW5zbGF0ZQ== 61342 -cnlu 61343 -IGRlc2Vudg== 61344 -dW1k 61345 -U2ltcGx5 61346 -CW1vZGU= 61347 -UnBj 61348 -IFZhbGVuY2lh 61349 -IHN0YWZmZXJz 61350 -IHNlbHY= 61351 -IFNwaWtl 61352 -IGRlbGlj 61353 -IGVydQ== 61354 -X0RU 61355 -SnVkZ2U= 61356 -4buV 61357 -IEJhc2lu 61358 -Lm11dGFibGU= 61359 -InVybA== 61360 -IHRhcmlmZg== 61361 -IFNsZWV2ZQ== 61362 -IGZsYXJl 61363 -LmRyb3BvdXQ= 61364 -IGJyaWRlcw== 61365 -KSksDQo= 61366 -X2NvbnN0cmFpbnRz 61367 -ZGVzdHJ1Y3Q= 61368 -T3V0bGluZQ== 61369 -IGRpc2FwcGVhcnM= 61370 -X2xvY2tlZA== 61371 -IE5TTG9jYWxpemVkU3RyaW5n 61372 -Y2tl 61373 -CW51bGw= 61374 -YWRyZXNzZQ== 61375 -IHRvcHBpbmc= 61376 -IEpva2Vy 61377 -YmlzaG9w 61378 -0L3QvtGB0YLRjA== 61379 -YW5kZXJpbmc= 61380 -X2FtcA== 61381 -PXRpbWU= 61382 -X1NwYWNl 61383 -X1BVTEw= 61384 -Jz0= 61385 -IGFudGlxdQ== 61386 -IGNhY2g= 61387 -X19fCgo= 61388 -T05FUw== 61389 -0L7Rjw== 61390 -IHVucmVhZA== 61391 -LnBvbGljeQ== 61392 -b29vb29vb28= 61393 -65+s 61394 -IHVzdGVk 61395 -IFJlY2U= 61396 -IGFsbGVt 61397 -44O844K5 61398 -IFRob3VnaHRz 61399 -dmVpbGxhbmNl 61400 -aXN0cmF0ZQ== 61401 -X2xhbmU= 61402 -IGZhbWVk 61403 -LkdldE5hbWU= 61404 -IHNtb290aGVy 61405 -IFF1YWxpZmllZA== 61406 -YXplcnM= 61407 -X2dlbw== 61408 -RmF4 61409 -IE1pbmRz 61410 -IFJhaXNlcw== 61411 -IHRyYW5zY3JpcHRz 61412 -Q29udmVyc2F0aW9u 61413 -IHJlbWFya2Vk 61414 -64KY 61415 -ZGxpbmc= 61416 -IGRlcGxveWluZw== 61417 -IHNoYXJlZEFwcGxpY2F0aW9u 61418 -IGtw 61419 -Rm9udEF3ZXNvbWVJY29u 61420 -X2R1bW15 61421 -cmVpYmVu 61422 -IEphbmVpcm8= 61423 -RGlyZWN0aW9ucw== 61424 -LmdldEJlYW4= 61425 -c2Fzcw== 61426 -IGNvbW1hbmRlcnM= 61427 -dmF0aW9u 61428 -ZXJyb3JDb2Rl 61429 -IEFsbG95 61430 -LmxvY2FsaXplZA== 61431 -0JE= 61432 -IGRpc2h3YXNoZXI= 61433 -IFNvdXA= 61434 -TnU= 61435 -X0RlZmF1bHQ= 61436 -IHVuZXZlbg== 61437 -IC8+IjsK 61438 -LUJhc2Vk 61439 -IHNlYW1sZXNzbHk= 61440 -LW51bGw= 61441 -IFhD 61442 -IHN0ZXc= 61443 -KGRlbGF5 61444 -QVRPUlM= 61445 -IFdoZWVsZXI= 61446 -Ijw/ 61447 -IENoYW5kbGVy 61448 -IHJldGFsaWF0aW9u 61449 -IGJ1ZGRpZXM= 61450 -LXNpemluZw== 61451 -IEVpbnM= 61452 -IC4uLiw= 61453 -cXVldGU= 61454 -IERPQw== 61455 -IGZhbHNlbHk= 61456 -IGZsYXRz 61457 -TklDQUxM 61458 -IGxpYnI= 61459 -QmVOdWxs 61460 -aW11bGF0aW9u 61461 -CVF1ZXJ5 61462 -X3V0 61463 -IHBsYXF1ZQ== 61464 -YmlsZA== 61465 -IHNjcmVhbWVk 61466 -Lm12Yw== 61467 -LldpZGdldA== 61468 -IGRpZmZlcmluZw== 61469 -L3N1cHBvcnQ= 61470 -X1ZPTFVNRQ== 61471 -Lm5vZGVUeXBl 61472 -CVdyaXRl 61473 -IHLDs3du 61474 -Ym9va21hcms= 61475 -X0NPTk4= 61476 -IENyZWVk 61477 -IGluaGliaXRpb24= 61478 -IFJlaGFi 61479 -dXZyZQ== 61480 -IGR1bXBz 61481 -b3dlag== 61482 -X3BsYWNlaG9sZGVy 61483 -IEhXTkQ= 61484 -IGRlcm1hdA== 61485 -LmRldGFjaA== 61486 -IGZpbmFsaXplZA== 61487 -Z2VyaWVz 61488 -aWRhaw== 61489 -X3Byb2c= 61490 -IHVwZGF0ZVVzZXI= 61491 -bHlz 61492 -Lkdvb2dsZQ== 61493 -IGx1ZWdv 61494 -IGFudHM= 61495 -5qCH6aKY 61496 -IERSTQ== 61497 -0LvQtdC9 61498 -LWRi 61499 -ZXJyaWNr 61500 -X2xu 61501 -Li5c 61502 -aWtpdA== 61503 -IERpZW4= 61504 -IHBhcmFtZXRyb3M= 61505 -a2V5cHJlc3M= 61506 -IEtlcmFsYQ== 61507 -IGRyYWluZWQ= 61508 -ZsO8Zw== 61509 -IGNhcGl0 61510 -X2F1Zw== 61511 -dGFudA== 61512 -TmF2QmFy 61513 -IHJvbGxiYWNr 61514 -IGxleQ== 61515 -4LiI 61516 -IEJTUA== 61517 -IFByZWRpY3Rvcg== 61518 -IHdhZ29u 61519 -ICJ8Ig== 61520 -U2VydmU= 61521 -LkRvbmU= 61522 -IER1cmNo 61523 -UHJvdmlkZQ== 61524 -CXNjb3Jl 61525 -X09E 61526 -LndlYXBvbg== 61527 -IHVuaXZlcnNhbGx5 61528 -IGluanVuY3Rpb24= 61529 -X1NDUk9MTA== 61530 -Lk1hdHJpeA== 61531 -IE1vbmdvQ2xpZW50 61532 -YnVmZmVycw== 61533 -IGJhZGdlcw== 61534 -IHNoYXJrcw== 61535 -IFNoYXJr 61536 -TU9ERUw= 61537 -LlJFQUQ= 61538 -CXRhZw== 61539 -IHN0cnRvdXBwZXI= 61540 -RVJHWQ== 61541 -Ymlhcw== 61542 -IGFjY291bnRJZA== 61543 -IEVtbWFudWVs 61544 -IHJlc29ydHM= 61545 -IHN2bg== 61546 -d2FybmluZ3M= 61547 -X0lF 61548 -TEFT 61549 -IG51bGxh 61550 -CWFz 61551 -IGRlbWVhbg== 61552 -4oCcQXM= 61553 -QXV0aG9yaXplZA== 61554 -IHRlbmRlbmNpZXM= 61555 -LXNldHRpbmc= 61556 -IHByZWxvYWQ= 61557 -IGNubg== 61558 -4oCcTm8= 61559 -JSkKCg== 61560 -PVQ= 61561 -dXN0bw== 61562 -IEZJUkU= 61563 -cmVzZWFyY2g= 61564 -INCT 61565 -IExlc3NvbnM= 61566 -LkFwcGVuZEZvcm1hdA== 61567 -IGluaXRpYXRpb24= 61568 -IENvdXM= 61569 -YXJlcg== 61570 -cHJvamVjdGlvbg== 61571 -IFNoZWV0cw== 61572 -IEZvbGQ= 61573 -UmVkZGl0 61574 -RGVsZXRpbmc= 61575 -IHphbQ== 61576 -IE5ldXJhbA== 61577 -IEZlY2hh 61578 -IMKu 61579 -IHRhc3RlZA== 61580 -IEVuZW1pZXM= 61581 -IEpvaG5zdG9u 61582 -IGRhbmNlcnM= 61583 -IGRpc2FibGluZw== 61584 -IHBldHR5 61585 -IFdlbGQ= 61586 -Ly0t 61587 -KHNwcml0ZQ== 61588 -SUdP 61589 -YXJnb3V0 61590 -IHF1YXJ0ZXJiYWNrcw== 61591 -ZGlzcGF0Y2hlcg== 61592 -IFN1c3RhaW5hYmxl 61593 -ZW5hcmlvcw== 61594 -IFNraQ== 61595 -IGZhY3Rv 61596 -aWxsaW4= 61597 -X2V4dGVuc2lvbnM= 61598 -ybU= 61599 -Pkg= 61600 -ZWFzdA== 61601 -LmFpcg== 61602 -4oCcQnV0 61603 -T2JqZWN0Q29udGV4dA== 61604 -c3VjY2Vzc2Z1bGx5 61605 -X2xhbmQ= 61606 -IGZvbGRz 61607 -X0NPT1JE 61608 -IHN1YnBv 61609 -LmdldEFkZHJlc3M= 61610 -aW5zdHI= 61611 -TWF0ZXJpYWxz 61612 -0YPRgdGC 61613 -ZGVwb3NpdA== 61614 -LWxhc3Q= 61615 -X0dSQVk= 61616 -PWZpbmQ= 61617 -IG11dGFudA== 61618 -IGxlc2JpZW5uZQ== 61619 -bGV0Y2hlcg== 61620 -Uk9VR0g= 61621 -dXJla2E= 61622 -LmNhcHR1cmU= 61623 -IGVubg== 61624 -IChbWw== 61625 -IEZsdQ== 61626 -IHRhc2tJZA== 61627 -IEh1c3NlaW4= 61628 -LmZvbGRlcg== 61629 -IGF1c3Rlcml0eQ== 61630 -SVNUUkFUSU9O 61631 -X0ltcGw= 61632 -5rOo5oSP 61633 -IGRlY3JlZQ== 61634 -LWNoYXQ= 61635 -IGltcGxpY2F0aW9u 61636 -IGd1ZXNzZXM= 61637 -dWxrYW4= 61638 -QW5hbHl0aWNz 61639 -LnBsdXM= 61640 -Q09NTUFORA== 61641 -0LXQu9C4 61642 -wrsKCg== 61643 -X1NJVEU= 61644 -IGVxdWFsVG8= 61645 -U3VwcG9ydEZyYWdtZW50TWFuYWdlcg== 61646 -IFJlY29yZGluZw== 61647 -5a6M5oiQ 61648 -IGJhZ2dhZ2U= 61649 -IHBpdGNoZXJz 61650 -IEVo 61651 -b3F1ZQ== 61652 -CWNudA== 61653 -ID0+JA== 61654 -L2Zvbw== 61655 -SVJB 61656 -IFNhdGVsbGl0ZQ== 61657 -Ym9yYWg= 61658 -IH19Igo= 61659 -IEVuZHM= 61660 -IFNwcmF5 61661 -LHBhcmFt 61662 -LkNocm9tZQ== 61663 -KnE= 61664 -dGhvdWdodA== 61665 -aWJyYXRlZA== 61666 -IHRoaWV2ZXM= 61667 -IGJlbmVmaWNpYXJpZXM= 61668 -RW50ZXJlZA== 61669 -b3R0ZXN2aWxsZQ== 61670 -IHZldGVyaW4= 61671 -QnlJRA== 61672 -cXVpcGU= 61673 -dW1wdGlvbg== 61674 -LXVuaXQ= 61675 -RXhlY3V0aW9uQ29udGV4dA== 61676 -QHM= 61677 -IEdpb3Y= 61678 -LlRvb2xUaXA= 61679 -X2ZyaWVuZA== 61680 -KGF0dHJpYnV0ZXM= 61681 -IGR1bXBpbmc= 61682 -IEpD 61683 -X0RPQ1VNRU5U 61684 -IEFybW91cg== 61685 -KGluc2VydA== 61686 -Lkhvcml6b250YWxBbGlnbm1lbnQ= 61687 -IFFlZA== 61688 -44GE44G+44GZ 61689 -L2dpdA== 61690 -IFlZWVk= 61691 -IENhcmRpZmY= 61692 -IGFwYQ== 61693 -b3JnYW5pYw== 61694 -IFdoZXJlYXM= 61695 -IOad 61696 -IE1pYQ== 61697 -IGRlbW9saXRpb24= 61698 -IHNjYXJz 61699 -IHBhaQ== 61700 -IHJldHJpZXM= 61701 -IHJx 61702 -IERlbmlz 61703 -KFV0aWxz 61704 -IGFsbGV2aWF0ZQ== 61705 -IFBJQw== 61706 -aWR1ZQ== 61707 -IGFja25vd2xlZGdpbmc= 61708 -IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 61709 -56Gu5a6a 61710 -xKs= 61711 -XEpzb24= 61712 -LmJpbmFyeQ== 61713 -IHh0eXBl 61714 -c2lnbmFscw== 61715 -IEFwcGVhcmFuY2U= 61716 -JnI= 61717 -fXM= 61718 -Q2k= 61719 -IElsbHVt 61720 -cG9yYXRl 61721 -aG9n 61722 -IGluZGV4T2Y= 61723 -XENvbW1hbmQ= 61724 -X3BhcmFsbGVs 61725 -IFNoZXJsb2Nr 61726 -7YM= 61727 -ICIiKQ0K 61728 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 61729 -IGNyaXRpY2l6ZQ== 61730 -IFNvYXA= 61731 -IE1hdGNoZXI= 61732 -IGdyaWxsZWQ= 61733 -KlQ= 61734 -IGFkb3Jl 61735 -dWxsaW5n 61736 -IGplZG9jaA== 61737 -X3JlZnM= 61738 -bGVhbnVw 61739 -IEpBWEI= 61740 -IHJvc2Vz 61741 -IExpYW0= 61742 -c2l6ZWk= 61743 -IGdldGNoYXI= 61744 -IHRhcmRl 61745 -LXRvb2x0aXA= 61746 -IHF1YWxpZmllcg== 61747 -IEludGVybWVkaWF0ZQ== 61748 -X1dpbmRvdw== 61749 -IE1hbHRh 61750 -RGlzY29ubmVjdA== 61751 -ZXdoZXJl 61752 -Q2FtcG8= 61753 -IGlycmF0aW9uYWw= 61754 -bGVkbw== 61755 -IERO 61756 -QVJHVg== 61757 -IG91dHJv 61758 -IHRoaXJ0ZWVu 61759 -Sm9zZXBo 61760 -TUFS 61761 -L2ds 61762 -SmVzcw== 61763 -IFBzeWNoaWF0 61764 -IHBhZGRpbmdCb3R0b20= 61765 -LWxvb3A= 61766 -L2ZvbnRz 61767 -X3NlZW4= 61768 -VGVhbXM= 61769 -UmVhY3RET00= 61770 -KG1hbg== 61771 -KHhwYXRo 61772 -LmdldFNpbXBsZU5hbWU= 61773 -Pigq 61774 -IFB2dA== 61775 -IGVsZGVycw== 61776 -IHBpZXM= 61777 -LnVzZXJBZ2VudA== 61778 -LXJlZ2lvbg== 61779 -IEdyZWVrcw== 61780 -KGZyYWdtZW50 61781 -c3R1 61782 -IGNvdW5jaWxz 61783 -IHN0YW1pbmE= 61784 -IEdvZGRlc3M= 61785 -6KW/ 61786 -IHBoaWxvc29waGVycw== 61787 -IHBlcnNvbmU= 61788 -IExvc2U= 61789 -IENMUg== 61790 -IERvY3M= 61791 -IHNvYWs= 61792 -IEhPTERFUg== 61793 -IGJlbGxz 61794 -aGFzaENvZGU= 61795 -UkFURQ== 61796 -X1dFSUdIVA== 61797 -aW5vdXM= 61798 -ZW5kcmE= 61799 -b3Bob2JpYw== 61800 -IHByb3Nl 61801 -IGZpbmVseQ== 61802 -L29hdXRo 61803 -KHNwYWNl 61804 -YWRnZQ== 61805 -IE1hbWE= 61806 -IHN0cmluZ0J1ZmZlcg== 61807 -IHN0aW50 61808 -IG1pc21h 61809 -IHZpbGxhaW5z 61810 -IENyaW1lYQ== 61811 -IGRpcGxvbWE= 61812 -INC/0L7RgdC7 61813 -IEJlYQ== 61814 -KGpvaW4= 61815 -IO2VtA== 61816 -Q0hBVA== 61817 -cGVyaW5n 61818 -IENyb3M= 61819 -IG1vbmtleXM= 61820 -IHByZWRz 61821 -eWxh 61822 -LCws 61823 -IHZpYnJhdG9y 61824 -IE5V 61825 -5YWI 61826 -ZmFudA== 61827 -emV0 61828 -IGJpZXRldA== 61829 -dW5mdA== 61830 -c3dvcnRo 61831 -LkZsb3c= 61832 -IHBzeWNoZWQ= 61833 -IENvbnRpbmVudGFs 61834 -PnQ= 61835 -IHF1aWx0 61836 -LlVQ 61837 -IGV4cGFuc2l2ZQ== 61838 -RGlzcG9zZQ== 61839 -KGxhbmd1YWdl 61840 -Q2Fwcw== 61841 -X1pPTkU= 61842 -IHJlY3ljbGU= 61843 -IE1hbmFnZWQ= 61844 -Y3VycmVudENvbG9y 61845 -LmJyb2FkY2FzdA== 61846 -c2lnbklu 61847 -LnByb20= 61848 -bGx1 61849 -dWVibG8= 61850 -IHB1bmNoZXM= 61851 -IGF1dG9tYXQ= 61852 -IGFzc2lnbmluZw== 61853 -IGNyZWF0ZVVzZXI= 61854 -IEFsbGllZA== 61855 -IGNvbmR1Y3Rvcg== 61856 -gqg= 61857 -IHNhZGRsZQ== 61858 -IGRuaQ== 61859 -b21lZGljYWw= 61860 -LVdlc3Q= 61861 -UG9zaXRpdmVCdXR0b24= 61862 -IGl0YWxpYw== 61863 -P1s= 61864 -KHRyaWdnZXI= 61865 -IGVsZXBoYW50cw== 61866 -IjoiIiwi 61867 -IGNhbGliZXI= 61868 -cmFmdGVk 61869 -ZGlnaXRz 61870 -IG1hcnNoYWw= 61871 -bWlsbGlzZWNvbmRz 61872 -bWFya2Vycw== 61873 -bW9t 61874 -L3BsYWNl 61875 -IGhvbGlzdGlj 61876 -OnQ= 61877 -Iyw= 61878 -IGJvdG8= 61879 -IG5hdXNlYQ== 61880 -IFNob290aW5n 61881 -aXRlY2g= 61882 -IHRleHRTdGF0dXM= 61883 -PENsYXNz 61884 -IERlc2NyaWJl 61885 -IGJ1ZmZldA== 61886 -Z2ls 61887 -IGxvZ2l0cw== 61888 -c3RkY2FsbA== 61889 -bW9kcw== 61890 -IFNrdWxs 61891 -IEJhcmU= 61892 -aG9wZQ== 61893 -IEludHI= 61894 -RmFpcg== 61895 -CXB0 61896 -IGFjb21wYW5o 61897 -IGZraw== 61898 -X3JwYw== 61899 -SW5zdGFsbGVk 61900 -X2Fucw== 61901 -LmdldE1pbnV0ZXM= 61902 -4oCmIgoK 61903 -LXRocmVhZA== 61904 -IHByZXNjaG9vbA== 61905 -QUlMUw== 61906 -IGRpZmZpYw== 61907 -KGNvbnZlcnQ= 61908 -IE5hdGg= 61909 -IERPSg== 61910 -IHJlZ2ltZXM= 61911 -IGVudGh1c2lhc3Q= 61912 -IHdhcnJhbnRpZXM= 61913 -IGZhc2NpbmF0ZWQ= 61914 -X2JpbmRpbmc= 61915 -X05vdA== 61916 -b2Z0ZW4= 61917 -X1JX 61918 -L21haWw= 61919 -IHRpdGxlTGFiZWw= 61920 -IHZpbGxhZ2Vycw== 61921 -IEppYW5n 61922 -IHN3YWdnZXI= 61923 -LlJvd0luZGV4 61924 -X2ltZ3M= 61925 -cmFweQ== 61926 -VkVSQUdF 61927 -LlVw 61928 -IG5vb3A= 61929 -Y2lv 61930 -CVNU 61931 -IGRlY3JlbWVudA== 61932 -IG1hZ25lc2l1bQ== 61933 -X3JvdGF0ZQ== 61934 -U2l0 61935 -IG5pZXV3ZQ== 61936 -IHRlcm1lZA== 61937 -7ZWp64uI64uk 61938 -IHVyZw== 61939 -X3RvdWNo 61940 -IHN3YXJt 61941 -IGNsYXZl 61942 -dGhlc3Q= 61943 -IExhZg== 61944 -SFg= 61945 -IEh1bGs= 61946 -IHBsYWludGV4dA== 61947 -IFNvZmE= 61948 -Z2V0U2Vzc2lvbg== 61949 -TGVk 61950 -IGVjb3N5c3RlbXM= 61951 -aGVp 61952 -IEtpbGxz 61953 -IGh1c2JhbmRz 61954 -0YXRgNCw0L0= 61955 -KGRvbQ== 61956 -X3RpbGVz 61957 -TmliTmFtZQ== 61958 -IGRvbmF0aW5n 61959 -LmFjYw== 61960 -IGxpZmVzcGFu 61961 -LmJu 61962 -X1JHQ1RY 61963 -5qU= 61964 -YW5zZW4= 61965 -IG1vZGVsbGluZw== 61966 -TGF5b3V0UGFyYW1z 61967 -IG9uQ2hhbmdlVGV4dA== 61968 -cnNh 61969 -LWxvY2F0aW9u 61970 -LlBl 61971 -KGJ1cw== 61972 -KHNvbmc= 61973 -IHByb2R1aw== 61974 -IFNIT1VMRA== 61975 -IENK 61976 -IHNvcw== 61977 -IEhvbWVDb250cm9sbGVy 61978 -LmxvYWRlZA== 61979 -KERvY3VtZW50 61980 -LnNvY2lhbA== 61981 -dGlsZXM= 61982 -IGxhbWU= 61983 -PWRm 61984 -LnBhcnNlTG9uZw== 61985 -IHByYWM= 61986 -IGRldG94 61987 -IFZF 61988 -IHB1bnRvcw== 61989 -IGRvY3Ry 61990 -IGFuY29y 61991 -Q0FQRQ== 61992 -IGNtYg== 61993 -54S2 61994 -Kiki 61995 -Oi8vLw== 61996 -VmFsdWVUeXBl 61997 -IG1vcnRnYWdlcw== 61998 -O3E= 61999 -IFJvY2tldHM= 62000 -c3BvcnQ= 62001 -VUdD 62002 -Y3Rz 62003 -44KB 62004 -aWV1cg== 62005 -IEFwcGVhbA== 62006 -KG5i 62007 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 62008 -SU1BVElPTg== 62009 -IENyZXM= 62010 -IE1hbmlw 62011 -Q2F1c2U= 62012 -YXR5cGVz 62013 -bWFudWZhY3R1cmVy 62014 -Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 62015 -IHNwb3I= 62016 -ZXNvbg== 62017 -IHB1bmNoZWQ= 62018 -IGJvb2ttYXJrcw== 62019 -IEJ1bGs= 62020 -Q29tcGxldGVMaXN0ZW5lcg== 62021 -IFRhbGtpbmc= 62022 -IEVybmVzdA== 62023 -IHJ1YmJpc2g= 62024 -a2lsbHM= 62025 -IERFRklO 62026 -IG5laWdoYm91cmluZw== 62027 -YXJsbw== 62028 -IFBDQQ== 62029 -CW1hdHJpeA== 62030 -bG9r 62031 -IGF0bGFz 62032 -IEd1cg== 62033 -IHd5bg== 62034 -LW5lZ2F0aXZl 62035 -IHR1bA== 62036 -IHJlbGlj 62037 -IFZvbHRhZ2U= 62038 -IFByZWlz 62039 -IEpOSUNBTEw= 62040 -IFBNSUQ= 62041 -YWtldA== 62042 -CWF0dHI= 62043 -IGV0aXF1 62044 -IE1K 62045 -IEdtYWls 62046 -Y2xy 62047 -X2V4ZWN1dGlvbg== 62048 -6ZSu 62049 -cG9zaXRvcg== 62050 -LmFm 62051 -TnI= 62052 -R2VvcmdpYQ== 62053 -VG9wb2xvZ3k= 62054 -IHBlcmNow6k= 62055 -IG11c2xpbQ== 62056 -IGVwaWRlbWk= 62057 -IHNhYm90 62058 -YWN0dXM= 62059 -IOuMgA== 62060 -IElPRXJyb3I= 62061 -LmVzdA== 62062 -cHJlZnM= 62063 -IEtyaXNo 62064 -LlJlYWRLZXk= 62065 -TkFTQQ== 62066 -dcOnw6Nv 62067 -X0Ri 62068 -dW1lcmF0b3I= 62069 -V2lkZQ== 62070 -KHN0YXRlbWVudA== 62071 -LmVuZHBvaW50 62072 -Li4uLi4uLi4u 62073 -IFsq 62074 -c3RyZWFtcw== 62075 -bXRpbWU= 62076 -UHg= 62077 -YXRy 62078 -IHRwbA== 62079 -Um9tYW4= 62080 -IHNjZW5pYw== 62081 -Lm56 62082 -IFNlY29uZHM= 62083 -c3VibWVudQ== 62084 -IOyLpO0= 62085 -X2J1bmRsZQ== 62086 -IGRlxJ8= 62087 -IFNpc3RlcnM= 62088 -cHJlZmVyZW5jZXM= 62089 -IHBvcnRh 62090 -QWR2aXNvcg== 62091 -bWF4TGVuZ3Ro 62092 -IEdSRUFU 62093 -X18oCg== 62094 -b2xlc3Q= 62095 -IExhYmVscw== 62096 -IGVuZmVy 62097 -ICAgICAgCgo= 62098 -IFRoZWZ0 62099 -X0ZJTEw= 62100 -IFdpc2U= 62101 -KWFwcGxpY2F0aW9u 62102 -dW5hbWk= 62103 -PigpKQo= 62104 -QUREUkVTUw== 62105 -QlNU 62106 -ZXR6dA== 62107 -IFFncw== 62108 -U2Vuc2U= 62109 -RXhjZXB0aW9uSGFuZGxlcg== 62110 -IENodQ== 62111 -LmdldE93blByb3BlcnR5 62112 -IGV4ZXJjaXNlZA== 62113 -aW90aWM= 62114 -IFJlbGVhc2Vz 62115 -IHBpbnRlcmVzdA== 62116 -b2xpZQ== 62117 -aXNvZnQ= 62118 -IHNlcXVlbmNpbmc= 62119 -IHBhZHJl 62120 -XSkpOw0K 62121 -KHJhZGl1cw== 62122 -Lm1lZA== 62123 -YWludGllcw== 62124 -Lk9iamVjdE1vZGVs 62125 -IGVtcGxl 62126 -IHNlZ3Vybw== 62127 -U3RhcnM= 62128 -IHF1YWxpdGF0aXZl 62129 -bGVtbg== 62130 -4bux 62131 -PiIpLg== 62132 -IGd4 62133 -LWNlcnQ= 62134 -IEFTVE0= 62135 -IGZ1bGxuYW1l 62136 -IHRlbGVtZXRyeQ== 62137 -IENhbWJvZGlh 62138 -X3Vs 62139 -IENsYXJl 62140 -Q1VTVE9N 62141 -UUM= 62142 -IFVucw== 62143 -IEhUVFBT 62144 -IFBhcmtpbnNvbg== 62145 -YW5jeWJveA== 62146 -JywnLg== 62147 -VHVl 62148 -LmdldExhc3Q= 62149 -IGFiaQ== 62150 -xIVk 62151 -QXN0 62152 -IEVkaXRpbmc= 62153 -LlVuaXR5 62154 -am1w 62155 -IG1hdHM= 62156 -IHNoYXJlZFByZWZlcmVuY2Vz 62157 -Q2FwdGFpbg== 62158 -LnBhZ2VTaXpl 62159 -IHJ0bA== 62160 -IGFubWVsZA== 62161 -UnVudGltZU9iamVjdA== 62162 -IGRlbWFuZGU= 62163 -KCI7 62164 -c2VpdGU= 62165 -LWhlYWRlZA== 62166 -IEtyYQ== 62167 -IEZPTlQ= 62168 -YFw= 62169 -Q2xhc3NOb3RGb3VuZEV4Y2VwdGlvbg== 62170 -LmF2Zw== 62171 -YXRpY2Fs 62172 -QWo= 62173 -IHBlcm1pdHRpbmc= 62174 -UHJvag== 62175 -RVJSUQ== 62176 -IGNyZWFtcGll 62177 -IEJ1eWVy 62178 -LW1vZHVsZXM= 62179 -IFN1bmRheXM= 62180 -fGAK 62181 -IGRheXRpbWU= 62182 -ICso 62183 -IGdsaXRjaA== 62184 -IE9wZXJhbmQ= 62185 -IHRveGlucw== 62186 -aW55YQ== 62187 -RE5T 62188 -IFNhcw== 62189 -Q2FrZQ== 62190 -IE5hdGlvbmFscw== 62191 -LmFkZFRv 62192 -IHNpbmtpbmc= 62193 -IGNvbXByZWhlbnNpb24= 62194 -IHNjb3I= 62195 -YWdlbWVudHM= 62196 -IHRhcmQ= 62197 -IG1hcmNoaW5n 62198 -IE1UVg== 62199 -IHNhbmU= 62200 -Q3JlYXRlSW5mbw== 62201 -4bqv 62202 -IGVuZEluZGV4 62203 -CWxheW91dA== 62204 -IOWQjQ== 62205 -U0lURQ== 62206 -IFRIRVJF 62207 -IFt7Jw== 62208 -b3BhdGhpYw== 62209 -IHRyYW5zbWl0dGVy 62210 -L2JvZHk= 62211 -IHB1bmQ= 62212 -IENsb3Npbmc= 62213 -IHNldGF0dHI= 62214 -IGJvdW5kZWQ= 62215 -QXRsYXM= 62216 -c3VtaW5n 62217 -KHRpbWVz 62218 -cGFyZXI= 62219 -eW5vbQ== 62220 -ZmVpdA== 62221 -IGZyZW0= 62222 -LWxlZw== 62223 -IEJyYXM= 62224 -PiM= 62225 -IOy2nOugpQ== 62226 -IElOU1RBTkNF 62227 -IENvdWNo 62228 -X2hvc3Rz 62229 -bGlrZWxpaG9vZA== 62230 -Lk1hcmtlcg== 62231 -IE1hc2tz 62232 -IGNlcmVhbA== 62233 -dXRpbGl0aWVz 62234 -IGVsZW1lbnRhbA== 62235 -IGRpc3RvcnRlZA== 62236 -aW5hY3RpdmU= 62237 -Y3J5 62238 -V0w= 62239 -VVBQT1JURUQ= 62240 -LlRocm93cw== 62241 -L3NjaGVtYQ== 62242 -c2VyaWU= 62243 -LiInLA== 62244 -IEJlbmVkaWN0 62245 -LXBpY2tlcg== 62246 -aWdncw== 62247 -IFBpcmF0ZQ== 62248 -5ZGo5pyf 62249 -IFRoZW1h 62250 -IFNvdXRoYW1wdG9u 62251 -IGFycmF5V2l0aA== 62252 -IFBhdWxh 62253 -IHByZWRpY3Rvcg== 62254 -LUFzcw== 62255 -LnVzZXJpZA== 62256 -IHBlcmk= 62257 -IGV4YWdnZXJhdGVk 62258 -dXJhdGU= 62259 -YXJzZWlsbGU= 62260 -IENvbmNlbnQ= 62261 -IFBpaw== 62262 -IEBfOwoK 62263 -IGZvcm1hdGlvbnM= 62264 -IGRlbm9taW4= 62265 -Ii8+Lgo= 62266 -ZW5kZWRvcg== 62267 -IHBhbmNyZQ== 62268 -IGFtdA== 62269 -IG9uUmVzdW1l 62270 -b25EZWxldGU= 62271 -IEJDSA== 62272 -KSgi 62273 -bW92ZW1lbnQ= 62274 -IHBvdGFzc2l1bQ== 62275 -PCEtLVs= 62276 -IG1lbWVz 62277 -X1NFVFVQ 62278 -X2dhbW1h 62279 -IGNvbG9yV2l0aFJlZA== 62280 -IGdyYXZlcw== 62281 -IHN0YXR1dGVz 62282 -IGFxdWFyaXVt 62283 -IExhbWFy 62284 -IHhBeGlz 62285 -V2VicGFja1BsdWdpbg== 62286 -X2ZvbGQ= 62287 -Lmdlbw== 62288 -IEZlZXQ= 62289 -LXNwZWFraW5n 62290 -6aKd 62291 -X2Nvcw== 62292 -IEF2ZWM= 62293 -YW5zdA== 62294 -IEVFUFJPTQ== 62295 -IGRlYWxlcnNoaXA= 62296 -IFVudGVybmVobWVu 62297 -LEludGVnZXI= 62298 -IMOqdGVz 62299 -LmB8YAo= 62300 -dmluZQ== 62301 -IEtuaWZl 62302 -X3ZlcnRpY2Fs 62303 -LkRvd25sb2Fk 62304 -IG92ZXJzaXplZA== 62305 -bGlk 62306 -IHBpbGxhcg== 62307 -Y2F1Z2h0 62308 -IGZsYWdnZWQ= 62309 -KHJvdXRlcg== 62310 -KFJFRw== 62311 -IGJhcmJlY3Vl 62312 -YnJvd3Nl 62313 -IEZpdHpnZXJhbGQ= 62314 -INC/0YDQvtCy 62315 -aXJpZQ== 62316 -IGVyc3Rl 62317 -ZWxpYg== 62318 -X1BSRVNT 62319 -IGhlYWxlZA== 62320 -IGhhdXQ= 62321 -PnhwYXRo 62322 -IFdlbg== 62323 -Z3J1bnQ= 62324 -LktleXdvcmQ= 62325 -LWhhc3BvcHVw 62326 -bnc= 62327 -U1o= 62328 -Z2FiZQ== 62329 -SW50ZXJhY3Rpb25FbmFibGVk 62330 -cHJlY2g= 62331 -IHByaW1v 62332 -c3RyaXBl 62333 -YWx0ZWQ= 62334 -X0JPUkRFUg== 62335 -ZmluZEJ5 62336 -X2Fubm90YXRpb24= 62337 -V2ViU29ja2V0 62338 -QnVy 62339 -IGRpcGxvbWFjeQ== 62340 -KHRk 62341 -IFNpbXBs 62342 -ZGV0ZWN0 62343 -cGVyZm9ybWFuY2U= 62344 -IGNhcmJvaHlkcmF0ZXM= 62345 -L2lvdXRpbA== 62346 -LS0tLS0tKw== 62347 -X3Ny 62348 -bWVldGluZw== 62349 -IHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 62350 -X1Zhcg== 62351 -IHJvdmVy 62352 -IGNhc2k= 62353 -IE1hdGNoZXM= 62354 -cXJ5 62355 -X0JPT0s= 62356 -IHByZXN1bWVk 62357 -IE3DqXQ= 62358 -L2l0ZW1z 62359 -IENyZWRlbnRpYWxz 62360 -XSkuCg== 62361 -IEthcmRhc2g= 62362 -QWRtaW5pc3Ry 62363 -IFNsb3Zhaw== 62364 -KCcsJykK 62365 -IGNvbnF1ZXN0 62366 -UGVyc2lzdA== 62367 -IERyYWlu 62368 -Ymlq 62369 -IGRvdg== 62370 -IHPDuGdlcg== 62371 -V29uZGVy 62372 -QVNFVA== 62373 -W21pbg== 62374 -Z3VuYQ== 62375 -Z3Jvd24= 62376 -IH0pCgoK 62377 -QVVE 62378 -IGJlbGlldmVy 62379 -aXNlcnM= 62380 -KHNlbnQ= 62381 -SmFja3Nvbg== 62382 -IHBhaXM= 62383 -IGN1ZGFNZW1jcHk= 62384 -IGZsYXNoZXM= 62385 -YmVyZQ== 62386 -IG11bHRpZg== 62387 -IENhcmdv 62388 -RWxlbWVudHNCeVRhZ05hbWU= 62389 -KGVwb2No 62390 -IEt1bmRlbg== 62391 -UmVjb2duaXRpb24= 62392 -IFNldFZhbHVl 62393 -IFN1bnNoaW5l 62394 -QUNQ 62395 -OnN0cg== 62396 -IGFtYmlndQ== 62397 -IO2VnA== 62398 -LWxpbmVhcg== 62399 -IFdPVw== 62400 -KGN1c3RvbQ== 62401 -IGlzRW5hYmxlZA== 62402 -QkFU 62403 -X2RpYWc= 62404 -X0dVSQ== 62405 -SGVhdA== 62406 -IGFzc2VtYmxpZXM= 62407 -IENldHRl 62408 -L2NhcmQ= 62409 -IERlY2xhcmU= 62410 -IHVwaGVsZA== 62411 -IENsYXVk 62412 -LWZsb3c= 62413 -IGhvb2t1cA== 62414 -SVJR 62415 -RmF0aGVy 62416 -RGVsZXRlcw== 62417 -KSk7Ly8= 62418 -IFBUU0Q= 62419 -KTsNDQo= 62420 -ZWdhbA== 62421 -LmFycm93 62422 -IE1QVQ== 62423 -w7Nq 62424 -IG1vdGl2YXRl 62425 -IEthdGhlcmluZQ== 62426 -LmZyYW1lcw== 62427 -IHRoaQ== 62428 -PFJlc3VsdA== 62429 -LmdyYXk= 62430 -IEt1c2huZXI= 62431 -IENlbWVudA== 62432 -IEJ1cmw= 62433 -SW50ZXJ2aWV3 62434 -PSciLg== 62435 -UE9XRVI= 62436 -IENEcw== 62437 -IFsmXSg= 62438 -IGNoYW5nZXI= 62439 -Pj4sCg== 62440 -LXdl 62441 -IENMSw== 62442 -IEFkcmk= 62443 -IGNpbA== 62444 -PVg= 62445 -IHNlbmRv 62446 -IENlbHNpdXM= 62447 -YmxvY2tlZA== 62448 -T3V0T2ZCb3VuZHM= 62449 -LiE= 62450 -b3Byb2plY3Q= 62451 -YW5kZXM= 62452 -ZWRpdGluZw== 62453 -IHB1bXBlZA== 62454 -KCk7fQo= 62455 -4Ka/ 62456 -X0VWRU5UUw== 62457 -IEZyaWVkbWFu 62458 -ID4v 62459 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 62460 -IHRlbXB0YXRpb24= 62461 -IElwc3Vt 62462 -IENlcw== 62463 -IG5vdGljaW5n 62464 -X2VsZQ== 62465 -QWNjZW50 62466 -IE52aWRpYQ== 62467 -IGFtdXNlbWVudA== 62468 -IGludHJvZHVjdG9yeQ== 62469 -CXJldHZhbA== 62470 -IGxpbA== 62471 -aXJpbQ== 62472 -ZW5xdWV1ZQ== 62473 -LWhpc3Rvcnk= 62474 -IGNvdW5zZWxvcg== 62475 -VFJBTlNGRVI= 62476 -X1ZlY3Rvcg== 62477 -Y2F0ZWdvcnlJZA== 62478 -cGVyeQ== 62479 -RklMVEVS 62480 -KHJlbW90ZQ== 62481 -IHNlcGFyYXQ= 62482 -IEVtYmVkZGVk 62483 -IEJhY29u 62484 -dGVycmFmb3Jt 62485 -IHJlc3BlY3RhYmxl 62486 -aWNoYQ== 62487 -YWlj 62488 -Kydc 62489 -IHN0cmF5 62490 -0LXQvdC40Lk= 62491 -IEF1ZGl0b3I= 62492 -ZW50aWNhdG9y 62493 -IGNsb2Fr 62494 -IFVOS05PV04= 62495 -IEFtZW4= 62496 -dm94 62497 -YXN0cmVldA== 62498 -Li4uXQ== 62499 -IGAl 62500 -LXByb3BlcnR5 62501 -IFF1YWxjb21t 62502 -ZWRpdGVk 62503 -IGRpc2NyZWV0 62504 -LU11c2xpbQ== 62505 -LnJlY2lwZQ== 62506 -IHZhbmRhbA== 62507 -IHXFvHk= 62508 -c2VuaGE= 62509 -LGlz 62510 -IFBvbXBl 62511 -IEtuaWNrcw== 62512 -KCknLA== 62513 -KHRi 62514 -IEhJRA== 62515 -IHBldw== 62516 -IGNhcnJvdHM= 62517 -IHBvbGljeW0= 62518 -Lmxp 62519 -IHR3ZW50aWV0aA== 62520 -X3Byb21wdA== 62521 -c2NlbmFyaW8= 62522 -LkpGcmFtZQ== 62523 -IE1RVFQ= 62524 -IEluZGl2aWR1YWxz 62525 -dG9NYXRjaFNuYXBzaG90 62526 -w61zdGljYXM= 62527 -IkQ= 62528 -IGZvZA== 62529 -IHJpY2h0 62530 -IFphcg== 62531 -IHJlc3VycmVjdGlvbg== 62532 -IG1pbGl0YXI= 62533 -IE1hbmFnZXJz 62534 -X0dSSUQ= 62535 -bm9ubnVsbA== 62536 -QkVSVA== 62537 -T3V0cHV0cw== 62538 -ICAgIAoKCg== 62539 -IHByZWRlY2Vzc29ycw== 62540 -IGlzU2VsZWN0ZWQ= 62541 -IGN5YmVyc2VjdXJpdHk= 62542 -5YaZ 62543 -Lm1j 62544 -UXVp 62545 -IGFsbGVnaW5n 62546 -IHRpYw== 62547 -TWFudWZhY3R1cmVy 62548 -IEVuaGFuY2Vk 62549 -IEJpeg== 62550 -IHJlYWRPbmx5 62551 -w7Ru 62552 -IGx1bWJlcg== 62553 -YWVk 62554 -IHJhaW5z 62555 -cHJvdmlkZQ== 62556 -TGF0ZQ== 62557 -IHBlZGVzdHJpYW5z 62558 -amF2 62559 -QWN0aXZhdGlvbg== 62560 -J0JyaWVu 62561 -IHZhY2FuY3k= 62562 -Ly8t 62563 -IGJsYWRkZXI= 62564 -IGFnaWxl 62565 -IHN0ZWFscw== 62566 -IHJlZ2lzdHJhcg== 62567 -IGVsZWN0b3JhdGU= 62568 -R292ZXJubWVudA== 62569 -J109Ig== 62570 -YWxidW1z 62571 -ZWxlY3Rpb24= 62572 -YWJs 62573 -IE9yaWVudA== 62574 -IHBpcmF0ZXM= 62575 -IGxvb3Bo 62576 -CXJlYWRlcg== 62577 -IMO6bHRpbW8= 62578 -IFBldHJv 62579 -INGB0YLRgNCw0L3QuNGG 62580 -IHNhbXA= 62581 -aW52ZXJzZQ== 62582 -LmdyYWRsZQ== 62583 -IERvbnQ= 62584 -eG9u 62585 -IGNyZWFk 62586 -ZXJ0aWxpdHk= 62587 -cmdjdHg= 62588 -IHBvbMOtdGljYQ== 62589 -VmFsdWVDaGFuZ2Vk 62590 -QXBpUmVzcG9uc2U= 62591 -Y29tYm8= 62592 -IFVY 62593 -IGRhaGE= 62594 -J2Fu 62595 -LW15 62596 -4oCcTXk= 62597 -cGVl 62598 -bGF0bG9uZw== 62599 -XEJhc2U= 62600 -Lndpaw== 62601 -IFBPVA== 62602 -IHB1bmN0dWF0aW9u 62603 -cXVz 62604 -aW55aW4= 62605 -PW1pbg== 62606 -IG51Y2xldXM= 62607 -IGNvbmNlc3Npb25z 62608 -LmF2ZXJhZ2U= 62609 -dXNlcmluZm8= 62610 -IHRhYmxlc3Bvb24= 62611 -IE5laWdoYm9yaG9vZA== 62612 -KFRocm93YWJsZQ== 62613 -PnY= 62614 -b3Z5 62615 -WFhYWFhYWFg= 62616 -aXN0aQ== 62617 -IGJhcnQ= 62618 -77u/Cg== 62619 -RW5jcnlwdA== 62620 -PWVuZA== 62621 -IGluY3Vy 62622 -IHBlcnRpbmVudA== 62623 -X01JTk9S 62624 -KSI+Cg== 62625 -Y2hpZWY= 62626 -IHZk 62627 -KGAK 62628 -dXJneQ== 62629 -YWJ5cmludGg= 62630 -IFNoYXBlcw== 62631 -IHZhZ3k= 62632 -LmRkcw== 62633 -bWVtY21w 62634 -CUl0 62635 -c2VtZXN0ZXI= 62636 -IEVtaXQ= 62637 -IGluc2Fu 62638 -IGJydXNoZWQ= 62639 -X0ZBVEFM 62640 -ImVycm9ycw== 62641 -IGRpc3J1cHRpdmU= 62642 -JW4= 62643 -IGNvbXBvc2l0aW9ucw== 62644 -IGJhY2hlY2E= 62645 -IGRpc2FncmVlbWVudA== 62646 -UHJvdGVjdA== 62647 -TElLRQ== 62648 -LkZpbGVOb3RGb3VuZEV4Y2VwdGlvbg== 62649 -IHdlaXRlcmU= 62650 -IE1vbmFjbw== 62651 -Xzw/ 62652 -IG1vZGVsZWQ= 62653 -c3RlZWw= 62654 -ZWVudGg= 62655 -IFtdKS4= 62656 -KHJlZ2V4 62657 -ZW5pZQ== 62658 -LkZsdXNo 62659 -LnBvcHVw 62660 -IE92ZXJz 62661 -LkRlYnVnZ2Vy 62662 -PmA7Cg== 62663 -bml0ZQ== 62664 -LnF1b3Rl 62665 -IGNvZw== 62666 -IHdha2Vz 62667 -IFdyZXN0bGluZw== 62668 -SW50cm8= 62669 -IHNlcmRl 62670 -IHJldXNhYmxl 62671 -IENvbXBvdW5k 62672 -SW1wbE9wdGlvbnM= 62673 -CUl0ZW0= 62674 -IG51bU9m 62675 -IENIUg== 62676 -IEJvbHRvbg== 62677 -UExVUw== 62678 -Ym91bmRpbmc= 62679 -KCsr 62680 -ICIsIjsK 62681 -IEd1ZXN0cw== 62682 -IGRlcHJpdmVk 62683 -IG1lbG9keQ== 62684 -WklQ 62685 -Pj4oKQ== 62686 -IGNvbmNlZGVk 62687 -X2RpZQ== 62688 -IGpveXN0aWNr 62689 -IGFuYXRvbXk= 62690 -IFRvb2xTdHJpcA== 62691 -IEVub3VnaA== 62692 -Iio= 62693 -aW50b3No 62694 -aGFiaQ== 62695 -IFN5cmFjdXNl 62696 -IEluY3JlYXNlZA== 62697 -TXVz 62698 -LnBhdGllbnQ= 62699 -IGluY3JlbWVudHM= 62700 -IFBJWA== 62701 -IGJvb3R5 62702 -LnByaXZhdGU= 62703 -ZXJ0b2lyZQ== 62704 -IGN1dHRlcg== 62705 -IGJla2Fu 62706 -IGRyYXdlcnM= 62707 -X0FMSUFT 62708 -QW5pbWF0aW5n 62709 -X2Fuc3dlcnM= 62710 -LmF0dGFjaw== 62711 -d3JpdGVycw== 62712 -IGdhYW4= 62713 -aWtvbg== 62714 -CWNvbnRyb2xsZXI= 62715 -IGZhY2FkZQ== 62716 -k+WQjQ== 62717 -LHN0YXR1cw== 62718 -LmZl 62719 -IHBvc3Rwb25lZA== 62720 -IEZvbnRz 62721 -IEJlbmNobWFyaw== 62722 -aWRlbnRhbA== 62723 -IGNoaWxsaW5n 62724 -IEtpZXY= 62725 -IGJydXNoZXM= 62726 -LXdoZWVs 62727 -IEhpcmU= 62728 -KHByb2M= 62729 -IGNoZW1vdGhlcmFweQ== 62730 -INCx0YvRgtGM 62731 -IE5vbGFu 62732 -KGllcnI= 62733 -IEp1ZGU= 62734 -LUF1Zw== 62735 -dW1ub3M= 62736 -Y29udmVyc2F0aW9u 62737 -IEJlaGF2aW9yU3ViamVjdA== 62738 -YmF1Z2g= 62739 -IGd1aXRhcmlzdA== 62740 -Lm9mZmVy 62741 -IGFjY3VzZQ== 62742 -cGFyZA== 62743 -cmVmZg== 62744 -LlJlYWN0 62745 -IHVjaGFy 62746 -IG9mZnNldG9m 62747 -JHN0YXR1cw== 62748 -L2VtYWls 62749 -LmNvbm5lY3RlZA== 62750 -Lys= 62751 -QHFx 62752 -YXJhdmVs 62753 -IGZ2 62754 -LlBlcnNpc3RlbnQ= 62755 -ZW5zdGVpbg== 62756 -Li4uXQoK 62757 -LmdyaWRWaWV3 62758 -IEpPQg== 62759 -LScuJA== 62760 -LmxheW91dENvbnRyb2w= 62761 -IGNhcmc= 62762 -IEtvdA== 62763 -X2VxdWFscw== 62764 -IHdpdGhkcmV3 62765 -QVRFU1Q= 62766 -LWJ1dHRvbnM= 62767 -CVVQUk9QRVJUWQ== 62768 -IFVJR3JhcGhpY3M= 62769 -IFB1YmxpY2F0aW9ucw== 62770 -IElOVEVSTg== 62771 -IGV0aGFub2w= 62772 -w6RuZ2Vy 62773 -U0VORA== 62774 -CXNsb3Q= 62775 -0LvQtdC90LjRjw== 62776 -IHBhc28= 62777 -X2V4dGVuZGVk 62778 -b3J0aGFuZA== 62779 -KHNoZWV0 62780 -IHByb2NlZHVyYWw= 62781 -IGtpZG5hcHBpbmc= 62782 -Ly8tLS0tLS0tLS0tLS0tLS0t 62783 -W21zZw== 62784 -T2NjdXJyZWQ= 62785 -QWxpY2U= 62786 -IENBU1Q= 62787 -IGthdGE= 62788 -5rOo5YaM 62789 -Y2hlYXA= 62790 -aWNpdHk= 62791 -IHJlYWRpbmVzcw== 62792 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 62793 -IFNZTg== 62794 -IE1hZ2dpZQ== 62795 -cmljYQ== 62796 -IHlp 62797 -IFR3ZQ== 62798 -aWdub24= 62799 -YW5kZW4= 62800 -IGpxdWVyeQ== 62801 -IHN0YXJ0WQ== 62802 -IGF2ZW51ZQ== 62803 -QW50aA== 62804 -X2NhcHRpb24= 62805 -IFJvd3M= 62806 -wq/Cr8Kvwq8= 62807 -c2VxdWVuY2Vz 62808 -0LjRhA== 62809 -KCIvIikK 62810 -Y3JhdGU= 62811 -IFNhZ2E= 62812 -SnVk 62813 -IGZhY2V0cw== 62814 -X3NjYWxlZA== 62815 -UnVieQ== 62816 -IFBR 62817 -IGNydXM= 62818 -SXJhbg== 62819 -LnNxdWVlemU= 62820 -CWZk 62821 -IHBlcmNl 62822 -IGRhdGFw 62823 -Xl5eXg== 62824 -X1NDT1BF 62825 -IFNhbG1vbg== 62826 -IHRhaWxsZQ== 62827 -IFZhbG9y 62828 -QUdFTUVOVA== 62829 -UnA= 62830 -IEd1YXJkaWFucw== 62831 -IHJlYWRGaWxl 62832 -IG5lZ3Jv 62833 -IG9icmE= 62834 -LlBhcmNlbA== 62835 -Q0FDSEU= 62836 -cmV0Y2hlZA== 62837 -Y3Jt 62838 -cXJzdA== 62839 -b3VmbA== 62840 -7ZqM 62841 -Lm5vbQ== 62842 -c3NpZA== 62843 -IHNhZmVzdA== 62844 -LkVycm9ycw== 62845 -X3BuZw== 62846 -Q29udmVydGVyRmFjdG9yeQ== 62847 -PFNlbGY= 62848 -IHNlcGFyYXRlcw== 62849 -X2pCdXR0b24= 62850 -IG1pc3VzZQ== 62851 -ZXhjZXB0aW9ucw== 62852 -IFt7Ig== 62853 -IFBBRA== 62854 -562+ 62855 -a0h6 62856 -PWVu 62857 -IGjDoG5n 62858 -SFo= 62859 -IFhhdmllcg== 62860 -e2lk 62861 -IHN0YWlyY2FzZQ== 62862 -dGV4dGZpZWxk 62863 -L2RvY2tlcg== 62864 -KHRhYmxlTmFtZQ== 62865 -IHRlbGVjb21tdW5pY2F0aW9ucw== 62866 -b25zbw== 62867 -b2Ns 62868 -UGFyZW50cw== 62869 -L3BhcnNlcg== 62870 -LWRyb3A= 62871 -KHN0eWxlcw== 62872 -X21vZGlmaWVy 62873 -UmVxdWVzdElk 62874 -LmJyYW5k 62875 -IENvaW5z 62876 -IGt1bnQ= 62877 -Lkdy 62878 -IEhJU1RPUlk= 62879 -KGRyb3A= 62880 -QnJhZA== 62881 -IHNla3Np 62882 -X3Nkaw== 62883 -IGluc3BlY3RlZA== 62884 -cHJlZGljYXRl 62885 -LmZp 62886 -R09S 62887 -IGNvY29h 62888 -IElRdWVyeWFibGU= 62889 -LS0tPC8= 62890 -IGRlcm5pZXI= 62891 -IFVzZXJEZWZhdWx0cw== 62892 -X1RT 62893 -IGVvcw== 62894 -IGJsZW5kZXI= 62895 -IGxvdWRlcg== 62896 -U3BhbmlzaA== 62897 -bGluZXI= 62898 -XHdpZGdldHM= 62899 -IHNjaGVtYXM= 62900 -X0NBUFRVUkU= 62901 -Lm1pY3Jv 62902 -44Kt 62903 -IPCfkQ== 62904 -IGFuZGVy 62905 -YWx0dW5n 62906 -ID09Jw== 62907 -IGVuZm9yY2luZw== 62908 -IEV4aXN0 62909 -dXZ3 62910 -aXJ0c2NoYWZ0 62911 -IEdyZWF0ZXN0 62912 -IE1vc3Vs 62913 -X3Bv 62914 -IHNpbW1lcg== 62915 -IHByb2dyZXNzZWQ= 62916 -IHJvdGFyeQ== 62917 -IG50bw== 62918 -Tm9pc2U= 62919 -IGNoYXNlZA== 62920 -IGluc3RpbmN0cw== 62921 -UHVibGljS2V5 62922 -IHNuYXBzaG90cw== 62923 -IFN1cGVydg== 62924 -Lm1hYw== 62925 -IEJpYmxp 62926 -Li4uKQoK 62927 -CW9sZA== 62928 -S0VO 62929 -IENsaW0= 62930 -IFByb2dyZXNzRGlhbG9n 62931 -bGljYW50cw== 62932 -X3NsaWRl 62933 -K2g= 62934 -IGVtcG93ZXJlZA== 62935 -SW5qZWN0b3I= 62936 -IGluZmx1ZW56YQ== 62937 -IHBsYW5ldGFyeQ== 62938 -V2lsbGlhbXM= 62939 -IG1vbmQ= 62940 -ZW5hbg== 62941 -LnJhbmRvbVVVSUQ= 62942 -KFBvc2l0aW9u 62943 -IGhvbWJyZXM= 62944 -IGluc2VjdXJl 62945 -IHZlcmJz 62946 -X3JlY3RhbmdsZQ== 62947 -SU5TVEFMTA== 62948 -IFBhcnNlRXhjZXB0aW9u 62949 -X1RB 62950 -JGZpZWxk 62951 -LkltYWdlSWNvbg== 62952 -IEd1amFyYXQ= 62953 -LWxpdmVk 62954 -X3NvbWU= 62955 -IGNsaXBwaW5n 62956 -LmdldENvbXBvbmVudA== 62957 -LmNsb3Nlc3Q= 62958 -LmxpdmU= 62959 -IGluY2lk 62960 -DQoJCQ0K 62961 -IHByb2R1dG9z 62962 -X211c2lj 62963 -U3FsQ29ubmVjdGlvbg== 62964 -IFByZWRpY3Rpb24= 62965 -IFhU 62966 -LW5vdGVz 62967 -IEpld2Vscnk= 62968 -cmVtZW4= 62969 -KHJlYXNvbg== 62970 -U25hcA== 62971 -QWZmaW5lVHJhbnNmb3Jt 62972 -YW5nZWxvZw== 62973 -IGRpY3RhdGU= 62974 -IHpvc3Rh 62975 -QmFyQ29udHJvbGxlcg== 62976 -L3Nob3A= 62977 -ZWlk 62978 -LXN3 62979 -Q291cnNlcw== 62980 -Zm9udFdlaWdodA== 62981 -IEhvZmZtYW4= 62982 -X051bQ== 62983 -S1I= 62984 -IFdpbGxpZQ== 62985 -YXJrYW4= 62986 -LXNjYWw= 62987 -IGF1ZGl0aW9u 62988 -LmRpc2M= 62989 -IHR3aXN0cw== 62990 -IGRlcGljdHM= 62991 -IGJhbnlhaw== 62992 -IEtpdHM= 62993 -IEhlemJvbGxhaA== 62994 -bm9ydGg= 62995 -IEdSRQ== 62996 -w7Zn 62997 -cXVvaQ== 62998 -LXRocmVhdGVuaW5n 62999 -IHdvcm1z 63000 -IFBO 63001 -IHNleGRhdGU= 63002 -IG1vbnVtZW50cw== 63003 -TU1D 63004 -Ym90cw== 63005 -IFNETEs= 63006 -ZGVhdGg= 63007 -IHBpdHM= 63008 -X2Nob2ljZXM= 63009 -KHNvbHV0aW9u 63010 -IHByb2NsYWltZWQ= 63011 -IFFpbmc= 63012 -IHNzY2FuZg== 63013 -c3RyYXRlZ3k= 63014 -ZGVhdXg= 63015 -IEZpc2NoZXI= 63016 -X0lW 63017 -IGlud2FyZA== 63018 -RGF0ZVBpY2tlcg== 63019 -IHNld2Vy 63020 -IGV1cm9w 63021 -IGhvbWVsZXNzbmVzcw== 63022 -LlNwcmluZ0Jvb3RBcHBsaWNhdGlvbg== 63023 -IFNwYWNlWA== 63024 -IGluZm9ybWluZw== 63025 -ICch 63026 -IHBsYXN0ZXI= 63027 -SW5pdGlhbGl6YXRpb24= 63028 -LmJldGE= 63029 -IFBlcnNvbnM= 63030 -dWdnbGluZw== 63031 -IHNoYW1wb28= 63032 -IEplaA== 63033 -IHNlcnI= 63034 -IG1heFNpemU= 63035 -IHN0aXRjaGVz 63036 -W3BhdGg= 63037 -LnJldA== 63038 -IFByZXQ= 63039 -TmVpbA== 63040 -Q29udmVydGVk 63041 -IE1hemRh 63042 -UE9TSVQ= 63043 -VG9vbGtpdA== 63044 -IFJFQURNRQ== 63045 -Q3VzdG9tQXR0cmlidXRlcw== 63046 -YXJjaGl2bw== 63047 -LlBhaW50 63048 -Z2V0T2JqZWN0 63049 -SVE= 63050 -LldlYkRyaXZlcg== 63051 -IGFudGlib2R5 63052 -IExpbWE= 63053 -aW5jb3JyZWN0 63054 -RnJhY3Rpb24= 63055 -IERlYWRsaW5l 63056 -c2VuZE1lc3NhZ2U= 63057 -Lk9mZnNldA== 63058 -ZWRpbw== 63059 -INeQ 63060 -IHNtb290aGluZw== 63061 -LmJv 63062 -IENFTlQ= 63063 -ZWxhc3RpYw== 63064 -LmNoYXJDb2RlQXQ= 63065 -UmVmcmVzaExheW91dA== 63066 -QUdFRA== 63067 -KTtcCg== 63068 -IFtdKQoK 63069 -IHRhcHM= 63070 -RFY= 63071 -4oCV 63072 -IENveQ== 63073 -IG91dHdlaWdo 63074 -J2dj 63075 -XEV4Y2VwdGlvbnM= 63076 -IEdyYW1tYXI= 63077 -IEd1YXRlbWFsYQ== 63078 -IEd1cnU= 63079 -IHRlag== 63080 -IGZyaWVuZHNoaXBz 63081 -IGNvcGluZw== 63082 -KHVwZGF0ZWQ= 63083 -X2R4 63084 -QW5hbA== 63085 -LU1heQ== 63086 -IG1hdGNobWFraW5n 63087 -IGp1bnRv 63088 -UEFDS0FHRQ== 63089 -IHJlbnRz 63090 -IOiHqg== 63091 -Y2FrZXM= 63092 -44CCJywK 63093 -cmVuZGluZw== 63094 -X0ZyYW1ld29yaw== 63095 -LSk= 63096 -KHVwbG9hZA== 63097 -IG9wb3J0dW4= 63098 -IGNhdXNh 63099 -IHByb2xpZmlj 63100 -Um93Q291bnQ= 63101 -IG5hY2t0ZQ== 63102 -IFNveQ== 63103 -U2h1dGRvd24= 63104 -6Ig= 63105 -X0VYUEk= 63106 -IEhhcmJvdXI= 63107 -IHRvcmU= 63108 -XE1lc3NhZ2U= 63109 -L1U= 63110 -T01CUkU= 63111 -LnNlZ21lbnQ= 63112 -IGNvbWVk 63113 -cm9tYW4= 63114 -IHNlZ8O6bg== 63115 -U2lnbWE= 63116 -IHNraWluZw== 63117 -IFRlcnJhaW4= 63118 -IGJlbmNobWFya3M= 63119 -IEF0dGVudGlvbg== 63120 -IH0qLwoK 63121 -IGdlaWw= 63122 -IGNhcnRvb25z 63123 -IGF0dHJpYnV0aW9u 63124 -IHJvdG9y 63125 -ZW5oYQ== 63126 -IM6z 63127 -IHRyYWo= 63128 -IGPDtG5n 63129 -IHNoYWtlcw== 63130 -IENsZW1zb24= 63131 -IGJydXRhbGl0eQ== 63132 -IDsNCg0K 63133 -IGVpZ2h0ZWVu 63134 -IEF3YXJlbmVzcw== 63135 -KHJlc3Q= 63136 -IHZpb2xpbg== 63137 -X1JPVVRF 63138 -LkZpZWxkTmFtZQ== 63139 -IEFkZQ== 63140 -aXppYQ== 63141 -IEhlbG0= 63142 -IHR5aW5n 63143 -IFByb2dyZXNzQmFy 63144 -YXV0b3I= 63145 -IGxvbmRvbg== 63146 -Jnc= 63147 -Z29v 63148 -SVNUUlk= 63149 -L0NyZWF0ZQ== 63150 -IFVTSU5H 63151 -IEdY 63152 -IEVGRkVDVA== 63153 -RmNu 63154 -IEVuY3J5cHRpb24= 63155 -Q0VE 63156 -ZmluZQ== 63157 -LWFycmF5 63158 -IHB1c2hWaWV3Q29udHJvbGxlcg== 63159 -QCQ= 63160 -VXBsb2FkZWQ= 63161 -LXdyaXRl 63162 -LmdldFBhZ2U= 63163 -X2VzdGFkbw== 63164 -QU5UTFI= 63165 -IFZpZXdEYXRh 63166 -ICR7KA== 63167 -IGFsbW9uZA== 63168 -IExvZ2ljYWw= 63169 -IHNob290ZXJz 63170 -IOygnA== 63171 -IHB1ZmY= 63172 -IHVuY29tbWVudA== 63173 -IGN1c3RvbWl6YWJsZQ== 63174 -xINy 63175 -RGlyZWN0aXZl 63176 -CWlkeA== 63177 -Q2hhbGxlbmdl 63178 -IHN1bW1hcml6ZQ== 63179 -IEF2Zw== 63180 -LlVzZXJJRA== 63181 -LmRpc3BhdGNoRXZlbnQ= 63182 -IGNvb2tlcg== 63183 -IGNvbm5lY3Rpb25TdHJpbmc= 63184 -IHNocmlua2luZw== 63185 -amFk 63186 -IFRoZW1lcw== 63187 -YW5kYXRvcnk= 63188 -IGR1YmlvdXM= 63189 -IGNlcA== 63190 -c3Bpbm5lcg== 63191 -IHN1YnJlZGRpdA== 63192 -IGlpaQ== 63193 -L2NhY2hl 63194 -ZGVmZXI= 63195 -IHN1YnN0aXR1dGVk 63196 -IGd1bm1hbg== 63197 -Y2xpbmc= 63198 -IOyw 63199 -KGN0cmw= 63200 -T3JkZXJJZA== 63201 -X2VuZw== 63202 -IGZpbG1tYWtlcnM= 63203 -IGZvcndhcmRpbmc= 63204 -IHN0cmFuZGVk 63205 -IExlYW4= 63206 -IOunjA== 63207 -KFVuaXQ= 63208 -IGRpZFNldA== 63209 -bGFrZQ== 63210 -Z3JvdW5kcw== 63211 -5Zug 63212 -IHVucmVnaXN0ZXI= 63213 -IG1pbmhh 63214 -IFZlZ2Fu 63215 -CWlWYXI= 63216 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 63217 -b3R0bGU= 63218 -SVBD 63219 -IHByYWdtYQ== 63220 -IElJRA== 63221 -X01pbg== 63222 -JTsiPgo= 63223 -X3JhbQ== 63224 -ZHJpdmVycw== 63225 -IENoaWNr 63226 -IGNscg== 63227 -X0JVRkY= 63228 -INCy0YvQsQ== 63229 -TWVyYw== 63230 -anV2ZW4= 63231 -IHNoaW0= 63232 -0YvRhQ== 63233 -IHRoZW9yZXRpY2FsbHk= 63234 -L2ZvcnVt 63235 -IHNwaWRlcnM= 63236 -IGdvb3Nl 63237 -IFBob3Rvbg== 63238 -IHByb2ZpY2llbmN5 63239 -IENsZXJr 63240 -X2ZpZw== 63241 -Q29uY2Vybg== 63242 -KGNvc3Q= 63243 -IHJlZGQ= 63244 -LmVudmlyb25tZW50 63245 -Q3JvcA== 63246 -IOKJpQ== 63247 -eWVjdG9z 63248 -LkJhdGNoTm9ybQ== 63249 -LWNvbXA= 63250 -JGltYWdl 63251 -IE5pa29u 63252 -IGRtZw== 63253 -Wzo6LQ== 63254 -UExM 63255 -dW5jaW9z 63256 -Zm9jdXNlZA== 63257 -IHR1bw== 63258 -IGh2b3JkYW4= 63259 -IGF0dGFpbmVk 63260 -IHByb3RlY3Rvcg== 63261 -IEthbnQ= 63262 -IHNob3Jlcw== 63263 -IEV0aGFu 63264 -X3NjaG9vbA== 63265 -IG5lYXRseQ== 63266 -LlNoYXBlcw== 63267 -IE5lbQ== 63268 -aGNw 63269 -LicvJy4k 63270 -IE3DqXhpY28= 63271 -c3RydWN0dXJpbmc= 63272 -IGxha2g= 63273 -IGFkcmVzc2U= 63274 -JywnIw== 63275 -IEhhc2tlbGw= 63276 -X0VOR0lORQ== 63277 -IHJlcGVudA== 63278 -IGN1Y2s= 63279 -LkZJRUxE 63280 -IFNrZQ== 63281 -QEBAQA== 63282 -SGl0cw== 63283 -IGltcGxhbnRz 63284 -IENvbnN0aXR1dGlvbmFs 63285 -IFBIUFVuaXQ= 63286 -IHRvaWxldHM= 63287 -LmFsYnVt 63288 -5LiL6L29 63289 -CXNldFN0YXRl 63290 -KCItLS0tLS0tLS0tLS0tLS0t 63291 -LkFtb3VudA== 63292 -ZWN0dXJl 63293 -IFRob3VzYW5kcw== 63294 -TmVpdGhlcg== 63295 -IHByZXNldHM= 63296 -IEFzc3VtZQ== 63297 -KGZhY3Rvcnk= 63298 -IGxpY2s= 63299 -IGdvYWxrZWVwZXI= 63300 -PFN0YXRl 63301 -LXNlY3VyaXR5 63302 -X2ll 63303 -ZXNrdG9w 63304 -IEx2 63305 -IFN5bXBob255 63306 -LnNhbXBsZXM= 63307 -IGh5cGVydGVuc2lvbg== 63308 -xYJ1 63309 -Lmp1c3Q= 63310 -TWVuc2FqZQ== 63311 -IT0t 63312 -PFRLZXk= 63313 -IHNweWluZw== 63314 -LGRhdGU= 63315 -b3JnYW5pemVk 63316 -ICAgICAgICAgIA0K 63317 -KGN1ZGE= 63318 -X01ldGFkYXRh 63319 -dWJpc2hp 63320 -LUJlbno= 63321 -X0Fzcw== 63322 -IEVsc2VJZg== 63323 -IGxlc2lvbnM= 63324 -IFByZXN0b24= 63325 -VGVjaG5pY2Fs 63326 -IHBsYXRpbnVt 63327 -L3Bp 63328 -SW5kZXhlcw== 63329 -IHBhcmFwaA== 63330 -IG92ZXJ0aHJvdw== 63331 -aXBhdGVk 63332 -b250b2xvZ3k= 63333 -IGRlbW9ncmFwaGljcw== 63334 -IGNhbmU= 63335 -IHByb2ZpdGFiaWxpdHk= 63336 -IGVzdGFibGlzaG1lbnRz 63337 -XSY= 63338 -OmFic29sdXRl 63339 -ZW50cmFkYQ== 63340 -VHA= 63341 -IHNoYXJlaG9sZGVy 63342 -Lidf 63343 -5aaC5p6c 63344 -bnBq 63345 -dnJpcg== 63346 -IEVYRUM= 63347 -IFBvbGljaWVz 63348 -IGZlbGxvd3NoaXA= 63349 -IENHUmVjdEdldA== 63350 -X3JlY2lwZQ== 63351 -X1JFQw== 63352 -dW51 63353 -IHJvYmJlZA== 63354 -IHR1cm1vaWw= 63355 -KTo6 63356 -LnN0YXJ0RGF0ZQ== 63357 -IGV2YWN1YXRlZA== 63358 -LWVxdQ== 63359 -IGZvdXJ0ZWVu 63360 -QFNwcmluZ0Jvb3RBcHBsaWNhdGlvbg== 63361 -IOaVsOaNrg== 63362 -bmFudHM= 63363 -dGhyZW4= 63364 -U29ueQ== 63365 -REZT 63366 -LWNpZ2FyZXQ= 63367 -IGFnZ3JhdmF0ZWQ= 63368 -IG5lZGVybGFuZA== 63369 -IEZ1ag== 63370 -dWNlcw== 63371 -L3VzZQ== 63372 -dW1tZXI= 63373 -KFNURA== 63374 -6rCE 63375 -Kj4m 63376 -LnBlcmNlbnQ= 63377 -aWFudHM= 63378 -IEN0 63379 -VkFT 63380 -X1RIRU1F 63381 -IHNuaXBlcg== 63382 -X0VM 63383 -LXdvcmtlcnM= 63384 -U25vdw== 63385 -IEF1cmE= 63386 -aWVnbw== 63387 -IEdsb2I= 63388 -TmFtZWRRdWVyeQ== 63389 -X0JH 63390 -IExpdmVEYXRh 63391 -IFNlbmRNZXNzYWdl 63392 -IHJlc3BvbmRzVG9TZWxlY3Rvcg== 63393 -ZW5jZXJz 63394 -aW5zdHJ1Y3Rpb25z 63395 -KEl0 63396 -5ZG95ZGo5pyf 63397 -IEdvbWV6 63398 -Y2hhcmdlcw== 63399 -LkdlbmVyYXRlZFZhbHVl 63400 -IE1hY3Jvbg== 63401 -KFBPUlQ= 63402 -IFByb2Nlc3Nlcw== 63403 -Lm9uUmVzdW1l 63404 -IGZpZQ== 63405 -QnVpbGRlcnM= 63406 -KWdldA== 63407 -X3dhbGxldA== 63408 -IGNhbmM= 63409 -IE1vYmlsaXR5 63410 -IGFsYXJtcw== 63411 -cm9zaXM= 63412 -YW1hw7Fv 63413 -IHBpcw== 63414 -IOODuw== 63415 -U2hh 63416 -IGNvbmZlc3NlZA== 63417 -KElORk8= 63418 -KCcsJw== 63419 -X1NlcnZlcg== 63420 -IGJsYXN0ZWQ= 63421 -IEZhcm1lcnM= 63422 -cnV6 63423 -Y2tlZGl0b3I= 63424 -X0lNUExFTUVOVA== 63425 -IG1vdHRv 63426 -IENBUkU= 63427 -IHlkaw== 63428 -Qm9uZQ== 63429 -IGFkZW3DoXM= 63430 -KyIvIis= 63431 -UHJvcFR5cGVz 63432 -X1Na 63433 -LnBhaW50 63434 -LnBpeGVs 63435 -IE1lc3NhZ2VUeXBl 63436 -IHR3ZWFrcw== 63437 -YC4KCg== 63438 -VmVyaWZpY2F0aW9u 63439 -bmVjaw== 63440 -YmVycmE= 63441 -IG1pbmRmdWw= 63442 -U3Vydg== 63443 -IDotCg== 63444 -IGFueXdheXM= 63445 -IEFkbWlzc2lvbg== 63446 -YWNjZXNzaWJsZQ== 63447 -RmxhdEJ1dHRvbg== 63448 -ICInIik7Cg== 63449 -IGhhaGE= 63450 -VG9Qb2ludA== 63451 -IGJ1cmdlcnM= 63452 -Z2V0U3RhdGU= 63453 -XEhlbHBlcg== 63454 -IEZVTkNU 63455 -IEVMRU1FTlQ= 63456 -IENFUlQ= 63457 -IEFDQ09VTlQ= 63458 -Y2hhcmdpbmc= 63459 -X2NhbmRpZGF0ZQ== 63460 -X3JlY2VudA== 63461 -IEluc3RydWN0b3I= 63462 -IGRydW5rZW4= 63463 -WVNRTA== 63464 -b3JhdGl2ZQ== 63465 -IjoiIg== 63466 -IHRhZ05hbWU= 63467 -X05FRw== 63468 -IHFw 63469 -IFVuZGVmaW5lZA== 63470 -IGdyZWFzZQ== 63471 -CSAgCQ== 63472 -IGVhZ2VybHk= 63473 -VGV4UGFyYW1ldGVyaQ== 63474 -ZGlzdHJpYnV0ZWQ= 63475 -QWRtaW5pc3RyYXRvcg== 63476 -RGlzdHJpYnV0aW9u 63477 -IERlY29tcA== 63478 -IFRyYW5zZm9ybWVy 63479 -LmJ0blNhdmU= 63480 -IEdvcw== 63481 -KEVudW0= 63482 -Y2Fpcm8= 63483 -LWNp 63484 -L3JlcG9ydA== 63485 -IFBvc3Rlcg== 63486 -X2RlcGVuZGVuY3k= 63487 -IGV4cGxvaXRz 63488 -c2V0Rmxhc2g= 63489 -IHh0 63490 -IGpld2VsbGVyeQ== 63491 -IGRhaQ== 63492 -X1JBTQ== 63493 -IGJlcnJpZXM= 63494 -IGdyYW5ueQ== 63495 -RmF0YWw= 63496 -w6lhbA== 63497 -LW1vc3Q= 63498 -LlZpc3VhbEJhc2lj 63499 -IFBlbmQ= 63500 -YmVp 63501 -amFr 63502 -OyovCg== 63503 -Qm95 63504 -PlNlbGVjdA== 63505 -aW5kcmljYWw= 63506 -VGVjaG5vbG9neQ== 63507 -IEFsbGlzb24= 63508 -ZGF0YXR5cGU= 63509 -J2Nsb2Nr 63510 -IGtvc3Q= 63511 -IGJham8= 63512 -LkNvdW50cnk= 63513 -WmVuZA== 63514 -LndyYXBwZXI= 63515 -4L0= 63516 -IEZpbGlwaW5v 63517 -b2NyZQ== 63518 -U1NI 63519 -IFNBTVBMRQ== 63520 -X2luaXRpYWxpemVk 63521 -KTs/Pgo= 63522 -IHBvcm5vc3Q= 63523 -ZXNhbg== 63524 -IEN1dHRpbmc= 63525 -IG1peGVz 63526 -X2FnYWlu 63527 -IGZvcm11bGFyaW8= 63528 -W1Y= 63529 -IHRlbGVmb25v 63530 -L3Vz 63531 -IGxvYWREYXRh 63532 -LnJlZmVyZW5jZXM= 63533 -IG1hcFZpZXc= 63534 -KyJf 63535 -IFNRTGl0ZURhdGFiYXNl 63536 -aXRvbg== 63537 -Q29sdW1uVHlwZQ== 63538 -IEV2ZXJ0b24= 63539 -LlJlc3VsdHM= 63540 -L25vdA== 63541 -IGdldEZpbGU= 63542 -aGVyaXRhbmNl 63543 -IGdldEhlaWdodA== 63544 -JHVzZXJuYW1l 63545 -d2l0aGRyYXc= 63546 -Xyk7DQo= 63547 -LnV0 63548 -IFFBcHBsaWNhdGlvbg== 63549 -dXJuYWw= 63550 -LWRvd25sb2Fk 63551 -YnVyZ2Vy 63552 -cHJlY2k= 63553 -IFRoYW5rZnVsbHk= 63554 -LkVWRU5U 63555 -IGdyZWF0bmVzcw== 63556 -IGxvb3NlbHk= 63557 -IG1hc2g= 63558 -IGdlaGVu 63559 -X2FudA== 63560 -IGltcGVuZGluZw== 63561 -LmlzUHJlc2VudA== 63562 -IHN0YWlucw== 63563 -SU1T 63564 -LmJhY2tlbmRz 63565 -IGlycmlnYXRpb24= 63566 -IFRhdA== 63567 -L3Rlc3Rz 63568 -IEtpbmdzdG9u 63569 -LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz 63570 -IHZvbWl0aW5n 63571 -LXJlcXVpcmVk 63572 -IGJsYXpl 63573 -IFN0YWZmb3Jk 63574 -UklE 63575 -L2Z3bGluaw== 63576 -IGthbGU= 63577 -c29sZA== 63578 -KHByb2dyZXNz 63579 -KGNoYXJ0 63580 -IGN5c3Q= 63581 -IGRpbGlnZW5jZQ== 63582 -L21w 63583 -IGNsZXJneQ== 63584 -IEJyb3dzZXJSb3V0ZXI= 63585 -IEFQSw== 63586 -IENPTlRBQ1Q= 63587 -QmFySXRlbQ== 63588 -LURpc3Bvc2l0aW9u 63589 -IE1vdG9yb2xh 63590 -X3NhbA== 63591 -IFdvb2Rlbg== 63592 -IFRIRVk= 63593 -IGNvbW1lbnRhdG9ycw== 63594 -IGNvbW1lcmNpYWxz 63595 -PW1vZGVs 63596 -LiIpLAo= 63597 -IFBsdWdpbnM= 63598 -ZGFpbg== 63599 -aGVhZGVk 63600 -IENvb3JkaW5hdGVz 63601 -SmFuZQ== 63602 -IFByZWZlcnJlZA== 63603 -IHBvZGVtb3M= 63604 -LmlzQmxhbms= 63605 -IFN0YXA= 63606 -IHdzcA== 63607 -IENPTEw= 63608 -X2JpZA== 63609 -IHByb2Jlcw== 63610 -dWFuaWE= 63611 -KHN5bQ== 63612 -IGN1ZXJwbw== 63613 -IG1hbmlwdWxhdGluZw== 63614 -IGFtYXppbmdseQ== 63615 -LkRBWQ== 63616 -dW1wdGVjaA== 63617 -YWNvYmlhbg== 63618 -VGVybWluYXRl 63619 -IHN0YXRpb25lZA== 63620 -U2V0QnJhbmNo 63621 -U2NyZWVuc2hvdA== 63622 -ZXN0aGVzaWE= 63623 -IHdhbGtlcg== 63624 -I2Zyb20= 63625 -Y29vcmRpbmF0ZQ== 63626 -X2ludGVyZXN0 63627 -IGhlbHBsZXNz 63628 -CXB1Yg== 63629 -bmdh 63630 -X0V4 63631 -IG53 63632 -IHRleHR1YWw= 63633 -IHBsdWdz 63634 -IG1pbmlvbg== 63635 -bWFyZXM= 63636 -PD4K 63637 -QUNB 63638 -Q29tcGFueU5hbWU= 63639 -KGVj 63640 -IExhbmRzY2FwZQ== 63641 -X1BST1ZJREVS 63642 -Y3c= 63643 -lIQ= 63644 -QWNjb3VudElk 63645 -JDo= 63646 -IFBlcnNvbmFsbHk= 63647 -cHJvcGVydHlOYW1l 63648 -IEt1Yg== 63649 -J2k= 63650 -IEdpdWw= 63651 -IHByaW9yaXRpemU= 63652 -Rk9STUFOQ0U= 63653 -IFBhcmFkZQ== 63654 -KVwK 63655 -c3RkYm9vbA== 63656 -IGFsZXJ0RGlhbG9n 63657 -IExlaA== 63658 -LmNhdGFsb2c= 63659 -IHdlYmluYXI= 63660 -IGltcG9ydGVy 63661 -cHJvamVjdElk 63662 -VFlQTw== 63663 -X18NCg== 63664 -R1c= 63665 -c3VtbWVy 63666 -IHNpbmlzdGVy 63667 -LmZhaWxlZA== 63668 -IGJlc29pbg== 63669 -aXNtYW4= 63670 -REVTVA== 63671 -IG5o4bqtcA== 63672 -IG1vxbxuYQ== 63673 -X2luc3Ry 63674 -IHBhdmVk 63675 -IHByZWZpeGVz 63676 -IHJhbXBhbnQ= 63677 -IHlBeGlz 63678 -IOazqA== 63679 -X21pZGRsZQ== 63680 -IHNjaG9sYXJseQ== 63681 -IHByb3N0aXR1dGVz 63682 -IG1vcmFsZQ== 63683 -LnBlcm1pc3Npb25z 63684 -LmdldExpc3Q= 63685 -IHJlamVjdGluZw== 63686 -IGxvb3Bpbmc= 63687 -IFNwZWNpZmljYXRpb25z 63688 -IGltbWVuc2VseQ== 63689 -IE1lZGlhbg== 63690 -KGNoYWlu 63691 -IGNsaWNo 63692 -L2ZsdXR0ZXI= 63693 -YWNm 63694 -LnVybG9wZW4= 63695 -dXR0ZXJzdG9jaw== 63696 -IHNwZWN0cmE= 63697 -IGFkbWly 63698 -L21heA== 63699 -LkVtaXQ= 63700 -KHdlaWdodHM= 63701 -acSZ 63702 -SW5zdGFsbGluZw== 63703 -SnU= 63704 -IEZlbGw= 63705 -IEZSRQ== 63706 -LmRlbg== 63707 -IEJpZ0ludA== 63708 -Ij5A 63709 -ICopOwoK 63710 -IEJpb2xvZ2ljYWw= 63711 -IHBhdGVudGVk 63712 -LnBhZ2luYXRpb24= 63713 -LnJvbGw= 63714 -IER1bA== 63715 -IGRlc2Fycm9sbG8= 63716 -UmVnYXJkbGVzcw== 63717 -mOydtA== 63718 -IHJvYmU= 63719 -0J3QtQ== 63720 -IEJveWQ= 63721 -LyoqKioqKioqKioqKioqKioqKioqKioqKg== 63722 -cmVjZWlwdA== 63723 -IEFzc2lnbmVk 63724 -YXR0ZW5kYW5jZQ== 63725 -LWNob2ljZQ== 63726 -ZXRzeQ== 63727 -X2Vsc2U= 63728 -LG5leHQ= 63729 -X2V4aXN0aW5n 63730 -ICcnKSwK 63731 -IGxpYmVydGlu 63732 -dHJhaXRz 63733 -YXR0ZQ== 63734 -Q29tcGFyYWJsZQ== 63735 -IENvdg== 63736 -IEFkb2xlcw== 63737 -LHRoZQ== 63738 -IExvYWRlZA== 63739 -fHI= 63740 -PWluZGV4 63741 -IEdhc3Q= 63742 -IGluamVjdG9y 63743 -CXN0b3A= 63744 -LWdvb2dsZQ== 63745 -IGZldGFs 63746 -IGFsbG8= 63747 -eWxlZnQ= 63748 -Z2V0UGFyYW1ldGVy 63749 -4oCd4oCU 63750 -X3NlY3Rvcg== 63751 -LlV0aWxpdHk= 63752 -b3Njb3Bl 63753 -LmVhc2U= 63754 -IE1hZ25ldGlj 63755 -QXJyYXlPZg== 63756 -IGZlYXJmdWw= 63757 -IEluZmVy 63758 -IEZ1aw== 63759 -Sm9obnNvbg== 63760 -JGFycmF5 63761 -IHNhaXM= 63762 -X2NvbnRy 63763 -RGVzY3Jp 63764 -IERldGFpbGVk 63765 -X2xlYXZl 63766 -X1JPVA== 63767 -IG7DpGNo 63768 -IGthbWk= 63769 -RENBTEw= 63770 -OmVx 63771 -IG1vbms= 63772 -X29ianM= 63773 -KFNlcnZpY2U= 63774 -ZmluYW5jZQ== 63775 -IHBvZGVt 63776 -X3Jlc3RvcmU= 63777 -IGRlY29yYXRvcnM= 63778 -IGFkdmlzaW5n 63779 -INC/0LDRgA== 63780 -LnBlcm0= 63781 -IEhhaQ== 63782 -IGZr 63783 -dW50ZWVycw== 63784 -IFJUV0Y= 63785 -X2l4 63786 -QUNT 63787 -IGJyZWFrb3V0 63788 -ZGlyZWNjaW9u 63789 -IFN1bnNldA== 63790 -X2Z4 63791 -b2xrYXRh 63792 -LXJhZGlv 63793 -SGV0 63794 -LnV0aWxpdGllcw== 63795 -X2Jhc2lz 63796 -KGtpbmQ= 63797 -IENvbmM= 63798 -VGh1bWI= 63799 -IE1pY2hl 63800 -ZGVsaXZy 63801 -IGd1dGU= 63802 -IEZpbGVQYXRo 63803 -IFRyaWJl 63804 -XCIp 63805 -X2N1ZGE= 63806 -RGlmZmVyZW5jZQ== 63807 -IE1vbnN0ZXJz 63808 -IHNldFR5cGU= 63809 -LkNvbnRlbnRUeXBl 63810 -IGR1bQ== 63811 -RW52ZWxvcGU= 63812 -YWd0 63813 -IHVubG9hZA== 63814 -X2NoZWNrZXI= 63815 -IHJlc3Rv 63816 -X3Blb3BsZQ== 63817 -UHJpY2Vz 63818 -UHJvZmlsZXM= 63819 -KClc 63820 -RlVO 63821 -ICIjIg== 63822 -IFBhdHRlcm5z 63823 -IFNQRA== 63824 -X1JPV1M= 63825 -T3JpZw== 63826 -YmxhZGU= 63827 -IGzDqQ== 63828 -JWk= 63829 -Kysr 63830 -TGlmZWN5Y2xl 63831 -LS0tLS0tLS0tLS0tLS0tCg== 63832 -VGFy 63833 -VGhhbk9y 63834 -JnE= 63835 -IGNyaXRpY2lzbXM= 63836 -LXBo 63837 -RWxlbWVudEV4Y2VwdGlvbg== 63838 -X2d1ZXN0 63839 -IOu2 63840 -X0Fz 63841 -IENhcnJ5 63842 -X0JJRw== 63843 -YWtldXA= 63844 -X3JldHJ5 63845 -IG7DqWNlc3M= 63846 -IE1JU1M= 63847 -aXN1 63848 -IFNwaXJpdHVhbA== 63849 -XyRf 63850 -IHJlZmxlY3Rpb25z 63851 -PHQ= 63852 -IGZ1bsOnw6Nv 63853 -IG1vbmFyY2g= 63854 -IFBhdGVs 63855 -X3ZvbHRhZ2U= 63856 -IHJhaW55 63857 -Y291cnQ= 63858 -IHVsdHJhc291bmQ= 63859 -aU9T 63860 -X0FMV0FZUw== 63861 -V28= 63862 -X0JMRU5E 63863 -b2tzZW4= 63864 -IHRyYXZlbGVy 63865 -IGRhdGFUYWJsZQ== 63866 -c2V0Q3VycmVudA== 63867 -V29ya2Zsb3c= 63868 -LnllbGxvdw== 63869 -XSkt 63870 -QUJTUEFUSA== 63871 -X2l0ZXJhdGlvbg== 63872 -0LTRgA== 63873 -IHViaWM= 63874 -IG1lYXRz 63875 -L2Vt 63876 -IERpc29yZGVy 63877 -IGVudmlhcg== 63878 -U0VP 63879 -IGhlYXZlbnM= 63880 -X3N0dWI= 63881 -IGFkcmVzcw== 63882 -IFRyaWU= 63883 -IExpbmRzYXk= 63884 -bGVp 63885 -IHBsYXRh 63886 -LnNldHRpbmc= 63887 -IGVsZWs= 63888 -ICgkew== 63889 -QXV0b21hdGlj 63890 -IGRvd25zdGFpcnM= 63891 -UElY 63892 -aWNpb25hbA== 63893 -YWJhbA== 63894 -LXN0b3JhZ2U= 63895 -aWNoaWVy 63896 -IEFscGhhYmV0 63897 -LGxhYmVs 63898 -QAo= 63899 -IGludGVzdGluYWw= 63900 -IHZhcmE= 63901 -Lm1h 63902 -IHByb2du 63903 -IG5lcGhldw== 63904 -VGltaW5n 63905 -Y2xhc3NuYW1l 63906 -IGxvY29t 63907 -IFNhbWFudGhh 63908 -IEFjY29yZGluZ2x5 63909 -IFhDVGVzdENhc2U= 63910 -IFBsYWlucw== 63911 -IExlbmlu 63912 -bm9w 63913 -IFR5c29u 63914 -IHJlbmFs 63915 -b2luZQ== 63916 -KFRlc3RDYXNl 63917 -IExvbWI= 63918 -QmFuZw== 63919 -IHZvbHVt 63920 -X2dlbmRlcg== 63921 -IGx1dA== 63922 -IO+8 63923 -Q29uZmlndXJlcg== 63924 -IHN0cm9rZVdpZHRo 63925 -Lkh0dHBTZXJ2bGV0 63926 -fHg= 63927 -LkpTY3JvbGxQYW5l 63928 -IGNvbnNvcnQ= 63929 -LmJ1bXB0ZWNo 63930 -dHJpZGdlcw== 63931 -IGJlbmVmaWNpYXJ5 63932 -PXJlcXVpcmU= 63933 -cmVuYw== 63934 -IE9V 63935 -ZW50YXJpbw== 63936 -IHVyZ2Vz 63937 -4oCUbm90 63938 -Q2FtcGFpZ24= 63939 -ZHJl 63940 -IFJpdmVyc2lkZQ== 63941 -CXRi 63942 -IG91dHB1dEZpbGU= 63943 -IGFic3Q= 63944 -IHN0cnVjdHM= 63945 -IHJ2YWw= 63946 -XCI+Ig== 63947 -IGFjcXVpc2l0aW9ucw== 63948 -QkxBQ0s= 63949 -IHRydW5j 63950 -IGFubm90YXRlZA== 63951 -c2V0VXA= 63952 -VE9LRU4= 63953 -IENvY2E= 63954 -RGlzYXBwZWFy 63955 -OnZhbHVl 63956 -IGFpZGVk 63957 -dHRs 63958 -bHV4 63959 -IGFjdWVyZG8= 63960 -IEZpbmdlcg== 63961 -Lkdlb21ldHJ5 63962 -XScpOwo= 63963 -Lmdm 63964 -VFhU 63965 -IFNjb3RpYQ== 63966 -YXZyYQ== 63967 -IHZpcA== 63968 -IHdob3BwaW5n 63969 -LWdpcmw= 63970 -IGN1cnNlZA== 63971 -XVst 63972 -IGNpcmN1bGF0ZWQ= 63973 -dW5jdHVyZQ== 63974 -b3JtYW4= 63975 -IG1BZGFwdGVy 63976 -IOKAlAoK 63977 -RmlsZU1hbmFnZXI= 63978 -KGlQYXJhbQ== 63979 -SW1hZ2VCdXR0b24= 63980 -REFR 63981 -QXJtb3I= 63982 -IHNwYXQ= 63983 -LmpzZGVsaXZy 63984 -IG1pc29n 63985 -LmVjb3Jl 63986 -J119Cg== 63987 -aW1wb3J0cw== 63988 -IGRpbm9zYXVy 63989 -LUZyZWU= 63990 -IGFubm9u 63991 -IHRyaWJ1bmFs 63992 -WWE= 63993 -Lmd1aWQ= 63994 -bW9zdGx5 63995 -PT09PQo= 63996 -IGltYWdlbQ== 63997 -U3VpdA== 63998 -a2Fz 63999 -IENoYW5uZWxz 64000 -QnVkZ2V0 64001 -IERpdmlkZQ== 64002 -amVt 64003 -IEdyaQ== 64004 -IGluZGljYXRpdmU= 64005 -XEZhY3Rvcnk= 64006 -LnJlcG9zaXRvcmllcw== 64007 -IEFNUA== 64008 -LnNucA== 64009 -IGHDpw== 64010 -Ims= 64011 -IMK1 64012 -ZGVjb2RlZA== 64013 -X2FyYw== 64014 -LUNsYXVzZQ== 64015 -IEFkag== 64016 -IG5ld0FycmF5 64017 -KEdFVA== 64018 -IGxhdGlu 64019 -IHd6 64020 -OnVpbnQ= 64021 -5Yir 64022 -Ii4u 64023 -Q29ubmVjdGluZw== 64024 -ZW5ub24= 64025 -5bm2 64026 -IFNlcw== 64027 -IGJlbG9uZ2luZ3M= 64028 -Kycm 64029 -CXNldHRpbmdz 64030 -SU5W 64031 -IHDDqQ== 64032 -IGFkdWx0aG9vZA== 64033 -YW1ibGU= 64034 -X21hc2tz 64035 -LXJlc29sdXRpb24= 64036 -cmF0cw== 64037 -IO2BtA== 64038 -IHZvZw== 64039 -IFNobw== 64040 -IENvdmVuYW50 64041 -IHJlbWluZGluZw== 64042 -b3JuYWRv 64043 -aWFk 64044 -5byC 64045 -Q3JlYXRpdmU= 64046 -IFNUWUxF 64047 -IGFub21hbHk= 64048 -XEFwcGxpY2F0aW9u 64049 -IG1hbmlmZXN0YXRpb24= 64050 -IE5hbm8= 64051 -TWFwVmlldw== 64052 -aWRlYWw= 64053 -YWNoaW5lcnk= 64054 -IFZhdWdo 64055 -cHJpbnRlcg== 64056 -VmVyZGFuYQ== 64057 -L2NvbXBvbmVudA== 64058 -IGFkZENoaWxk 64059 -IGxlYXJuZXI= 64060 -IGRlY3J5cHRlZA== 64061 -IHRpZ2h0ZXI= 64062 -5p2f 64063 -IGplag== 64064 -IC4KCgoK 64065 -IExvYmJ5 64066 -bGVw 64067 -w6Rubg== 64068 -bGVpZ2g= 64069 -L3JvdXRlcw== 64070 -IGNhbm9weQ== 64071 -IEZpc2NhbA== 64072 -Ojsi 64073 -IGJ1cmRlbnM= 64074 -L2Z1bGw= 64075 -IENTUg== 64076 -LlNoYXJlZFByZWZlcmVuY2Vz 64077 -L3RyZWU= 64078 -IGRyb2l0 64079 -SW1wbGVtZW50 64080 -R2V0Q3VycmVudA== 64081 -KHB1c2g= 64082 -JHg= 64083 -0Y/Qtw== 64084 -QUNJVFk= 64085 -PT09PT09PT09PQo= 64086 -amM= 64087 -X2hyZWY= 64088 -LmdldFJvb3Q= 64089 -IEtE 64090 -KGxz 64091 -W2NudA== 64092 -IGRhbGw= 64093 -KGJw 64094 -IEVX 64095 -S2V5RXZlbnQ= 64096 -bG9iZQ== 64097 -IGh0bWxlbnRpdGllcw== 64098 -IGZhbHRh 64099 -IHZhbHZlcw== 64100 -IHNpemluZw== 64101 -UG9ybg== 64102 -IHNob3dFcnJvcg== 64103 -IEZyaWQ= 64104 -IMOH 64105 -LnJhbmRu 64106 -IHRhbnRy 64107 -IHNheA== 64108 -dXJvdmlzaW9u 64109 -dGhlb24= 64110 -X1JDQw== 64111 -eEZE 64112 -SW5pdFN0cnVjdA== 64113 -IGNhbm5lZA== 64114 -IHF1YW50aWRhZGU= 64115 -LldBUk5JTkc= 64116 -IEJyaXR0 64117 -LXJlZ2lzdGVy 64118 -YWN0aXZlbHk= 64119 -IE5hdGFsaWU= 64120 -44G/ 64121 -IENPTk5FQ1Q= 64122 -emVr 64123 -IG1pbGxvbmVz 64124 -XWludA== 64125 -ICcsJyw= 64126 -IHByaW4= 64127 -IjpbLQ== 64128 -IC8vLg== 64129 -IGludGltaWRhdGluZw== 64130 -cmF6aW9uZQ== 64131 -LmlibQ== 64132 -IEpha2FydGE= 64133 -0LzQtdGA 64134 -IGxvYWRDaGlsZHJlbg== 64135 -X1VQTE9BRA== 64136 -IFdlZWtz 64137 -IGdldFRleHQ= 64138 -IPCfkg== 64139 -IF1dCg== 64140 -IENvc3Rz 64141 -xJlw 64142 -cGF5bWVudHM= 64143 -Lk1vdmll 64144 -bGg= 64145 -tIg= 64146 -X2NlcnRpZmljYXRl 64147 -PXE= 64148 -bGlicmFyaWVz 64149 -IEFlcg== 64150 -YXVzcw== 64151 -CWZhaWw= 64152 -T1VORFM= 64153 -c2VuZEtleXM= 64154 -IHNjYW1z 64155 -d2FydHM= 64156 -SGlzdA== 64157 -IEVzc2V4 64158 -IGZ1cnk= 64159 -IHRpdHJl 64160 -IENvcGVuaGFnZW4= 64161 -IHByZWRlZmluZWQ= 64162 -c2Nw 64163 -c2VycmF0 64164 -LmVuc3VyZQ== 64165 -aWxlZQ== 64166 -TWVyaXQ= 64167 -X1VOTE9DSw== 64168 -IENvcnJlY3Rpb24= 64169 -Tm9ybWFsaXphdGlvbg== 64170 -IOS/ruaUuQ== 64171 -IHN0b29s 64172 -IOWIoOmZpA== 64173 -U2hvcnRjdXQ= 64174 -Y2hvc2Vu 64175 -IGJ1bGx5 64176 -IGZ1bmNpw7Nu 64177 -44O844Or 64178 -IOeUn+WRveWRqOacnw== 64179 -LmFsaWFz 64180 -PlRvdGFs 64181 -IFNURU0= 64182 -cGVuZw== 64183 -Y2FsZXI= 64184 -cGVyZmVjdA== 64185 -IGJvbmRpbmc= 64186 -UGhvbmVz 64187 -IHB1bHA= 64188 -67aA 64189 -SUVXUw== 64190 -IERlZXI= 64191 -X0xDRA== 64192 -IENvbmNvcmQ= 64193 -V2l6YXJk 64194 -IG9mcmVj 64195 -IEVtZXJhbGQ= 64196 -dGVuZXNz 64197 -bmF2aWdhdG9y 64198 -VGhlb3J5 64199 -IGd1YXJkYXI= 64200 -IGZ1bGZpbA== 64201 -IFVuYXV0aG9yaXplZA== 64202 -IEJvdXQ= 64203 -CWhvc3Q= 64204 -IFJpYg== 64205 -KGZ0 64206 -RG9jcw== 64207 -LmdldEJvZHk= 64208 -5b+D 64209 -IFJpdmVyYQ== 64210 -IHdhdmluZw== 64211 -IHBlcmZpbA== 64212 -Qm91bmRpbmdDbGllbnRSZWN0 64213 -LmZh 64214 -cGFnZWQ= 64215 -IEFmZmlsaWF0ZQ== 64216 -IHByb2xldA== 64217 -fS0+ew== 64218 -KHNjb3Jlcw== 64219 -IHZpdGFl 64220 -e05hbWU= 64221 -c2NoZWR1bGVy 64222 -X1NBTg== 64223 -IE5lYw== 64224 -IEJlZWY= 64225 -X3Rj 64226 -TElO 64227 -IEV2ZW50VHlwZQ== 64228 -IEJ1ZmZlcmVkV3JpdGVy 64229 -IHNvZnRlcg== 64230 -IFZvdGluZw== 64231 -IEdlc3R1cmVEZXRlY3Rvcg== 64232 -IHVuc2Vlbg== 64233 -IFNDTw== 64234 -IGVsbw== 64235 -Y29tYmluZQ== 64236 -X21ha2VDb25zdHJhaW50cw== 64237 -IHVuZGVyZ29uZQ== 64238 -IE9mZmljaWFscw== 64239 -LG9wdA== 64240 -IGxheWVyZWQ= 64241 -ScOTTg== 64242 -IGJhbmtlcnM= 64243 -IHNlZ3JlZ2F0aW9u 64244 -IHJ1c3NpYW4= 64245 -IHZlbnRhbmE= 64246 -Z2V0S2V5 64247 -U2FudGE= 64248 -LlRvb2xTdHJpcFNlcGFyYXRvcg== 64249 -IEFlcm9z 64250 -LnB1dEludA== 64251 -IGluZm9ybXM= 64252 -X2JpbGw= 64253 -66aE 64254 -LnNldE1heA== 64255 -IH0+Cg== 64256 -IElQUw== 64257 -IEFsaWM= 64258 -In0KCg== 64259 -IHVzaGVy 64260 -IE5ndXllbg== 64261 -IGFic29sdXQ= 64262 -IGd1YXJkZWQ= 64263 -IFJlYmVs 64264 -IFp3 64265 -IEFubnVuY2k= 64266 -IHByw6E= 64267 -YWJjZGVmZ2hpamts 64268 -IFZlcmlmaWVk 64269 -W2l4 64270 -IHRpZXJz 64271 -w6J0 64272 -LiIpDQo= 64273 -aWp1 64274 -bGl2aW5n 64275 -R1BT 64276 -LlRlc3RUb29scw== 64277 -U2l6ZVBvbGljeQ== 64278 -IG1hc3NhZ2Vz 64279 -YXNzZXJ0SW5zdGFuY2VPZg== 64280 -IHBvc3PDrXZlbA== 64281 -IGJ1c2M= 64282 -IEp1ZGFpc20= 64283 -IGluZGlzcGVuc2FibGU= 64284 -IE1vc3RseQ== 64285 -SVRB 64286 -IGdldENvbnRlbnQ= 64287 -QnJvd3NlclJvdXRlcg== 64288 -LWNvdW50ZXI= 64289 -IG9idGVu 64290 -IC8+KTsK 64291 -0LjQuw== 64292 -aGVhZGxpbmU= 64293 -KGhvbWU= 64294 -YWxpY2U= 64295 -bGRyZQ== 64296 -X01vZHVsZQ== 64297 -Q29tcGFuaWVz 64298 -TlBD 64299 -IHRvcnNv 64300 -LmNvbnM= 64301 -CWFkZHJlc3M= 64302 -X3B1cmNoYXNl 64303 -IEJhcmQ= 64304 -Z3N0 64305 -LWFuaW1hdGlvbg== 64306 -X3BhaWQ= 64307 -LnNwZWNpYWw= 64308 -IGRlbGlt 64309 -IHRha2VvdmVy 64310 -KGhhbmQ= 64311 -ZW51aW5l 64312 -LWdyZXk= 64313 -IEFCSQ== 64314 -U2Vzc2lvbkZhY3Rvcnk= 64315 -aW5zdGFsbGVy 64316 -X0RJU1RBTkNF 64317 -IEZhdm9yaXRlcw== 64318 -oIA= 64319 -Jz57 64320 -IExhdXJlbnQ= 64321 -0YfQtdGC 64322 -IHN0cmlwc2xhc2hlcw== 64323 -IGVzdGFiYQ== 64324 -JnQ= 64325 -LnBhbg== 64326 -IFBBUlRZ 64327 -IEJhbGk= 64328 -Y3Np 64329 -KG1lbW9yeQ== 64330 -IFRvZG9z 64331 -IFNPQVA= 64332 -YWduZXQ= 64333 -CWJlZm9yZQ== 64334 -T3B0aW9uc1Jlc29sdmVy 64335 -aWJlbg== 64336 -INmF2YY= 64337 -IGFkZGl0aXZl 64338 -IE1lbGVl 64339 -IE1hbml0b2Jh 64340 -IFBlcmNlbnRhZ2U= 64341 -PSgt 64342 -LmtpbGw= 64343 -IGx4 64344 -YW5jYQ== 64345 -IGZvdG9ncmFm 64346 -IGJsYW5j 64347 -IFJlc2lkZW50cw== 64348 -cGluaw== 64349 -SEJveExheW91dA== 64350 -LnVuaW9u 64351 -IEhZ 64352 -IGNvbnRlbnRWaWV3 64353 -LWZhdA== 64354 -CWhhcw== 64355 -66OM 64356 -IHdoaXBwZWQ= 64357 -dmVuZG9ycw== 64358 -dWJyZQ== 64359 -SVRIRVI= 64360 -LmZ1bmN0aW9uYWw= 64361 -INCy0LXRgA== 64362 -Q2FuY2VsZWQ= 64363 -LWNu 64364 -SW5PdXQ= 64365 -LlJvd1N0eWxlcw== 64366 -IHRyYXRh 64367 -IEluZG9vcg== 64368 -LWZhc2hpb25lZA== 64369 -IEJvb3Ro 64370 -LkxhYmVsQ29udHJvbA== 64371 -IHBvcGU= 64372 -IENhcm5lZ2ll 64373 -bmVyZ2ll 64374 -IEJY 64375 -44CCIiwK 64376 -IFdlYnN0ZXI= 64377 -CWRpdg== 64378 -TmFycg== 64379 -IGNvbmp1Zw== 64380 -a2lk 64381 -IG1vZGVyYXRpb24= 64382 -IGFteQ== 64383 -IFNvbHZl 64384 -VklD 64385 -IEVa 64386 -aWxsYWM= 64387 -IENpcGhlcg== 64388 -IEFjY2VwdGVk 64389 -TEFCRUw= 64390 -IHdyYXRo 64391 -IG1pblZhbHVl 64392 -IGthxbw= 64393 -IERhdWdodGVy 64394 -KS5e 64395 -KGRj 64396 -IHJlc29sdmVz 64397 -c2Nzcw== 64398 -YWJvdXRz 64399 -dWx0aXBhcnRGaWxl 64400 -IGZlYXRz 64401 -IGxhdW5kZXJpbmc= 64402 -IGNvbXBhw7E= 64403 -IHNlZ3VyaWRhZA== 64404 -IGhvYmJpZXM= 64405 -LWZhY2luZw== 64406 -InZhbHVl 64407 -Z2V0SW1hZ2U= 64408 -U3FsU2VydmVy 64409 -IHdpdGhTdHlsZXM= 64410 -PkRhdGU= 64411 -IEV4cGVk 64412 -JGpzb24= 64413 -6ZO+ 64414 -IEFDVElPTlM= 64415 -U2Vuc2l0aXZl 64416 -Ymxhc3Q= 64417 -IMO2ZmY= 64418 -ZnRl 64419 -Q1RTVFI= 64420 -IExvZ0xldmVs 64421 -Y29udHJhY3Rz 64422 -LmRqYW5n 64423 -Ij4NDQo= 64424 -RVRZUEU= 64425 -IG9iamM= 64426 -X1NPVU5E 64427 -X3NwYWNpbmc= 64428 -X2NsYXNzaWZpZXI= 64429 -IHJvYw== 64430 -Q2xhc3NpYw== 64431 -IOuztA== 64432 -X2ludmVyc2U= 64433 -LWFjcmU= 64434 -IEZJTA== 64435 -IERWRHM= 64436 -IHN3YWxsb3dlZA== 64437 -dmlsbGE= 64438 -IFJlcGxpZXM= 64439 -RmlyZWJhc2U= 64440 -IHBoeXNpcXVl 64441 -CXRoYXQ= 64442 -IFJlc2l6ZQ== 64443 -Pj4+Pj4+Pg== 64444 -TmVhcmx5 64445 -LmFydGlzdA== 64446 -LXs= 64447 -Pz4NCg0K 64448 -Lmxy 64449 -Lmly 64450 -KFsk 64451 -aWFubmU= 64452 -CW9i 64453 -LCcl 64454 -IGtuZXg= 64455 -IGNvcnJv 64456 -IE93ZW5z 64457 -PW5pbA== 64458 -bGF5cw== 64459 -YXBn 64460 -w5Y= 64461 -RU5P 64462 -SGVucnk= 64463 -SnVzdGlu 64464 -ZWxlY3RyaWM= 64465 -IE5vcmRpYw== 64466 -5oyH 64467 -IGV4Y2x1ZGVz 64468 -RXVyb3BlYW4= 64469 -IHRlbnRz 64470 -KFN0cmluZ1V0aWxz 64471 -KHBlZXI= 64472 -eXN0b3Jl 64473 -UG9ja2V0 64474 -ZnVlbA== 64475 -ZXR1cw== 64476 -IE1hcmlu 64477 -0YDRg9C6 64478 -6K+E 64479 -IFBlbnM= 64480 -IGluZWZmaWNpZW50 64481 -IGV0ZXJuaXR5 64482 -Licm 64483 -IFBhY2thZ2Vz 64484 -IEFwcENvbmZpZw== 64485 -IG11bHRpZA== 64486 -Y3Vsbw== 64487 -IGJvcnJvd2Vycw== 64488 -IERlYmJpZQ== 64489 -IGZyb250cw== 64490 -Sko= 64491 -ICIuLi8uLi8uLi8uLi8= 64492 -ICIrCg== 64493 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 64494 -IEdhdmlu 64495 -IG1pc2g= 64496 -4pWR 64497 -X0FUVEFDSw== 64498 -SW5kZXBlbmQ= 64499 -4K+N4K4= 64500 -w6Fm 64501 -Z2Fycw== 64502 -IFBhcnRpY2lwYXRpb24= 64503 -VmVyYm9zZQ== 64504 -U3By 64505 -U3Zn 64506 -KFZhbHVlRXJyb3I= 64507 -IHJlY29uY2lsZQ== 64508 -CURCRw== 64509 -bWVldA== 64510 -IExvZ2luUGFnZQ== 64511 -LXVudXNlZA== 64512 -IGpvbmc= 64513 -IGFuY29yYQ== 64514 -INij 64515 -Plo= 64516 -PXc= 64517 -IFJlbm8= 64518 -dmll 64519 -b3Rpb25FdmVudA== 64520 -IExpc3RUaWxl 64521 -X1J1bnRpbWU= 64522 -IHVwaG9sZA== 64523 -IE9idGFpbg== 64524 -cHJvdmlkZWQ= 64525 -IERhdGVQaWNrZXI= 64526 -IENHSQ== 64527 -IEJsYWNrQmVycnk= 64528 -YWNobw== 64529 -IElzYWlhaA== 64530 -5pW0 64531 -IEFiZHVsbGFo 64532 -IHVwcA== 64533 -IHVybHBhdHRlcm5z 64534 -CXNpemVvZg== 64535 -IHBpc3NlZA== 64536 -IHByZWZlcnJlZFN0eWxl 64537 -QVBQRVI= 64538 -IFZC 64539 -IFRlcmVzYQ== 64540 -b2duaXRv 64541 -RU1Z 64542 -IGVsZWdhbmNl 64543 -IENsYXl0b24= 64544 -YXRpdm9z 64545 -IEFuYWxvZw== 64546 -IGdhdXNzaWFu 64547 -IEhpYmVybmF0ZQ== 64548 -W11b 64549 -IHN3ZWV0bmVzcw== 64550 -IE5pZWxzZW4= 64551 -IER1dGVydGU= 64552 -KHNlbA== 64553 -LCs= 64554 -IGV4dHJhb3JkaW4= 64555 -Zmxha2U= 64556 -W0RvdWJsZQ== 64557 -Ly8vDQo= 64558 -IG11Y2hhcw== 64559 -IEJyb2FkY2FzdGluZw== 64560 -QXNzb2NpYXRpb24= 64561 -ZXhlcmNpc2U= 64562 -LlJlbGF0aXZl 64563 -IHViaXF1aXRvdXM= 64564 -U0JBVENI 64565 -xLFuYQ== 64566 -LWZvb2Q= 64567 -IGNyeXN0YWxs 64568 -0YPQsQ== 64569 -ICd+ 64570 -INCR 64571 -IGR1bms= 64572 -IHpp 64573 -IE11Zw== 64574 -IGRlY2VwdGlvbg== 64575 -IEVtYWNz 64576 -CiAgICAKICAgIAo= 64577 -IMSRxrDhu6Nj 64578 -IFdvbHZlcw== 64579 -YW1lbnRp 64580 -ICcpWw== 64581 -Zm9ybWF0cw== 64582 -UmVjdg== 64583 -RGV0YWlsZWQ= 64584 -KEhXTkQ= 64585 -X3RyaWFs 64586 -YWdyYW50 64587 -T20= 64588 -Y29uc2Npb3Vz 64589 -IG9zcA== 64590 -cXXDqQ== 64591 -IGdvbg== 64592 -IG1lcmVrYQ== 64593 -YXJlbmRyYQ== 64594 -TWluZQ== 64595 -LmxpbmtlZGlu 64596 -IGZpZm8= 64597 -Lm1vbml0b3I= 64598 -IHJ1bmU= 64599 -bW5vcA== 64600 -IHNwZWN1bGF0ZQ== 64601 -ZWds 64602 -IHZhc2N1bGFy 64603 -LnRlY2g= 64604 -IG1hZ21h 64605 -IGxlc3Q= 64606 -dW1hbm4= 64607 -IERyaXZlck1hbmFnZXI= 64608 -IG9ydA== 64609 -IGxpbmdlcmluZw== 64610 -IG9zdHJlYW0= 64611 -IHNwYXJrbGluZw== 64612 -LmNvbm5lY3Rvcg== 64613 -IHRhaWxz 64614 -IGtlcm5lbHM= 64615 -VVNFUk5BTUU= 64616 -CWNj 64617 -IG9uU2VsZWN0 64618 -L01QTA== 64619 -dGFwZQ== 64620 -LmRqYW5nb3Byb2plY3Q= 64621 -R2VuZQ== 64622 -4oCZaW4= 64623 -L2ZpbHRlcg== 64624 -LWVudmVsb3Bl 64625 -IGFwcGxhdXNl 64626 -IHJlZ2lzdHJvcw== 64627 -IENvcnk= 64628 -b2ZmbGluZQ== 64629 -LXNob3Q= 64630 -bGVzYw== 64631 -b3RlbnQ= 64632 -IG51bWVyYXRvcg== 64633 -LmVmZmVjdA== 64634 -cGxhY2VtZW50cw== 64635 -IEFGQw== 64636 -LlNlcXVlbmNl 64637 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 64638 -eW50aGlh 64639 -IEdyaWZmaXRo 64640 -ZWxtYW4= 64641 -c2V0RGVzY3JpcHRpb24= 64642 -IE5pZ2h0cw== 64643 -Lm9yZGVycw== 64644 -IGAsCg== 64645 -IFNhbGFk 64646 -amlhbmc= 64647 -IHJlY3Vy 64648 -IFNUQVRJQw== 64649 -LXNwb25zb3JlZA== 64650 -eWxlbmU= 64651 -LGVtYWls 64652 -X18pKQ== 64653 -KSIpLg== 64654 -Q0VMTA== 64655 -YW1tZW50 64656 -TEFZ 64657 -LHN0ZA== 64658 -LnByZWY= 64659 -LkNvcg== 64660 -cmVkbw== 64661 -IEZ1Y2tlZA== 64662 -IHJ1c3M= 64663 -IGVzdGFibGlzaGVz 64664 -bnZhcmNoYXI= 64665 -LkdldEZpbGVOYW1l 64666 -IHBlbWI= 64667 -IFNhdWQ= 64668 -X3BhY2tldHM= 64669 -Lmludm9pY2U= 64670 -LmdldFRvdGFs 64671 -SG9tZUNvbnRyb2xsZXI= 64672 -IHTDtg== 64673 -YWdoZXI= 64674 -LmVudA== 64675 -LkFic29sdXRlQ29uc3RyYWludHM= 64676 -IGdlbnVz 64677 -IEJhYnlsb24= 64678 -IC4uLy4uLw== 64679 -IE1pZG5pZ2h0 64680 -IHdn 64681 -IGRhbmNlcg== 64682 -LWltbQ== 64683 -ZGlyZQ== 64684 -aGF6aQ== 64685 -Y2VydGlmaWNhdGU= 64686 -IG1EYXRh 64687 -IGN1cmVk 64688 -c3Zu 64689 -IkI= 64690 -aWJyZQ== 64691 -IGRyYWZ0cw== 64692 -Q2FwaXRhbA== 64693 -IGNvbmNpc2U= 64694 -IFBlYWNo 64695 -IHxc 64696 -IHBwbQ== 64697 -X2NvbnRhaW5z 64698 -QXV0b3I= 64699 -QXV0b1NpemU= 64700 -X2xi 64701 -IHNvbGVtbg== 64702 -IGZpbmdlcnQ= 64703 -IEluZGljYXRvcg== 64704 -IFN2 64705 -UGFyaw== 64706 -JHR5cGU= 64707 -X01JU1M= 64708 -YW5udWFs 64709 -UGFpZA== 64710 -bWFzdGVycw== 64711 -IFdE 64712 -IHZ1ZWw= 64713 -IGVqYWM= 64714 -CWdsdXQ= 64715 -IHVuZmluaXNoZWQ= 64716 -ZXN0ZWVt 64717 -Z3JvdXBCb3g= 64718 -UmVtb3Zpbmc= 64719 -IGVpbmlnZQ== 64720 -IFNjcmlwdHM= 64721 -Z2V0dG8= 64722 -LkhhbmRsZUZ1bmM= 64723 -Il0pLA== 64724 -IGRpc2FkdmFudGFnZXM= 64725 -LWZyb250 64726 -PnA= 64727 -c2V0T25DbGlja0xpc3RlbmVy 64728 -IGxhbmRsb3Jkcw== 64729 -IE3DvA== 64730 -IHByZXByb2Nlc3Npbmc= 64731 -KX0+ 64732 -LWNvbnRleHQ= 64733 -LGJvb2w= 64734 -UVVJVA== 64735 -ICIpIik7Cg== 64736 -IFdlYnNpdGVz 64737 -IENoYXJsb3R0ZXN2aWxsZQ== 64738 -TGF0Y2g= 64739 -LmRpcmVjdGl2ZQ== 64740 -IEh1ZmZpbmd0b24= 64741 -X2RpcnR5 64742 -ZXhwaXJhdGlvbg== 64743 -IFRQTQ== 64744 -IGVkeA== 64745 -IFdlYkRyaXZlcldhaXQ= 64746 -IGFkbWlyZWQ= 64747 -IGxpc3RlbnM= 64748 -IFZpbA== 64749 -ZGlmZmVyZW50 64750 -IGxpdmVsaWhvb2Q= 64751 -IFdhcmNyYWZ0 64752 -IHBvc2ljaW9u 64753 -IGltcGVhY2htZW50 64754 -SmF5 64755 -IHBvc2l0aXZlcw== 64756 -IGp1bmdl 64757 -IFNNQg== 64758 -L2luY2x1ZGVz 64759 -KCcuLi8uLi8uLi8= 64760 -QXJndW1lbnROdWxsRXhjZXB0aW9u 64761 -ZGVzY3JpY2Fv 64762 -QUJDREU= 64763 -LUFB 64764 -IGludmFkZWQ= 64765 -IGFtZXJpY2E= 64766 -dWVkZQ== 64767 -IFBoYXNlcg== 64768 -IHNjb3Jlcg== 64769 -IGRpc2NvdXJhZ2Vk 64770 -dGhpbg== 64771 -IGFiZG9tZW4= 64772 -IElQUA== 64773 -IEhhbXB0b24= 64774 -L0RlbGV0ZQ== 64775 -W3NyYw== 64776 -Q1N0cmluZw== 64777 -IE51bg== 64778 -IGVwaXRo 64779 -4oC7 64780 -LnRhYmxlcw== 64781 -IEhlaW4= 64782 -IHdoaXJs 64783 -IGNsYXJpZmljYXRpb24= 64784 -IHdlZGdl 64785 -IGjDpHI= 64786 -IFRpbmE= 64787 -IHRod2FydA== 64788 -IENvc3R1bWU= 64789 -aW9uYWdl 64790 -Q29k 64791 -X2FjbA== 64792 -IHJlc2g= 64793 -IE1lcmN5 64794 -IERpeG9u 64795 -IGRlc2Fycm9sbA== 64796 -VmlyZ2lu 64797 -KiopJg== 64798 -IExlbm92bw== 64799 -IGVyYXNlZA== 64800 -ZW50aW9ucw== 64801 -IHNsaXBwaW5n 64802 -5Zub 64803 -IGNyYXZpbmc= 64804 -cGxhbnRz 64805 -IGdldHRleHQ= 64806 -IG1hc3NpdmVseQ== 64807 -IFJlbmFtZQ== 64808 -Lmhlcm8= 64809 -44K7 64810 -IHRvbWFy 64811 -IENPU1Q= 64812 -IFByYWN0aWNlcw== 64813 -Lk1lZGlhVHlwZQ== 64814 -IEZ1bmRpbmc= 64815 -RmluZQ== 64816 -aWdlcmlh 64817 -VW5j 64818 -IHN3YXBwaW5n 64819 -PicuCg== 64820 -aW50ZXJw 64821 -YXJ0aWZhY3Q= 64822 -IEJhZ3M= 64823 -LnZpZXdNb2RlbA== 64824 -cXVvdGVk 64825 -CUxvbmc= 64826 -X1NDT1JF 64827 -IHNhdnZ5 64828 -bmVsbGU= 64829 -a2zDpA== 64830 -Q291bnRz 64831 -2q8= 64832 -RmllbGRUeXBl 64833 -b2thYmxl 64834 -IFJUTA== 64835 -I2luZGV4 64836 -ICV7 64837 -IGFyaXN0 64838 -LkdldE1hcHBpbmc= 64839 -KEFkYXB0ZXJWaWV3 64840 -PSIiKQo= 64841 -IGRpc2lu 64842 -IFRvdWNoYWJsZU9wYWNpdHk= 64843 -IE1PWg== 64844 -IER1bm4= 64845 -Q2FwYWJpbGl0eQ== 64846 -YWtoc3Rhbg== 64847 -VUlWaWV3Q29udHJvbGxlcg== 64848 -KHNvY2tmZA== 64849 -IEphY3F1ZXM= 64850 -PXRr 64851 -YXJQYXJhbXM= 64852 -Y29uZGE= 64853 -IGFkdm9jYXRlZA== 64854 -IHBlbmV0cmF0ZQ== 64855 -SkVDVElPTg== 64856 -IOuwmA== 64857 -IEZJTkQ= 64858 -IGVhcm5z 64859 -YXBwZW4= 64860 -6rE= 64861 -IHRocm91Z2hwdXQ= 64862 -IHBlbnNpb25z 64863 -IGZ1c3M= 64864 -SFRUUFJlcXVlc3Q= 64865 -bnV0cw== 64866 -b2NodA== 64867 -LWVzdGFibGlzaGVk 64868 -IEFMSUdO 64869 -IGpzcGI= 64870 -RGlzcA== 64871 -X2VtYmVkZGluZ3M= 64872 -IHJlcHQ= 64873 -IFlvcmtlcg== 64874 -w7JuZw== 64875 -IGpvdXJuZXlz 64876 -IEFwcHJvdmFs 64877 -CVNFTEVDVA== 64878 -KEdyYXBo 64879 -0LzQuA== 64880 -IGRvbGxz 64881 -IHNleGlzdA== 64882 -IHBhbnM= 64883 -IG1wbA== 64884 -IG9wZXJhdGl2ZQ== 64885 -IFRvcnJlbnQ= 64886 -WU0= 64887 -IFBhc3Npb24= 64888 -5pat 64889 -LmNvbXBpbGVy 64890 -CUNTdHJpbmc= 64891 -PWNvbG9y 64892 -b3JpYW5DYWxlbmRhcg== 64893 -IEtub2Nr 64894 -IGhhaWxlZA== 64895 -L3N0YXRl 64896 -IHNldHVwdG9vbHM= 64897 -IE1hcmU= 64898 -IHN5bmNocm9uaXpl 64899 -IFN3aXBl 64900 -IGdhbWJsZQ== 64901 -LCcnXV1dLAo= 64902 -IGRlZmVjdGl2ZQ== 64903 -X09CSkM= 64904 -IGRlbmlt 64905 -IHRhZA== 64906 -IEtpbWJlcg== 64907 -IG5ldXJvbG9naWNhbA== 64908 -w6puY2lhcw== 64909 -CWNi 64910 -LnNldFBhc3N3b3Jk 64911 -IFBsZWFzYW50 64912 -IFBoaQ== 64913 -LXRhZ3M= 64914 -IGNvbnRhZw== 64915 -IENvcmFs 64916 -IGRpc3RyYWN0 64917 -aXRpemVy 64918 -IHN1bnJpc2U= 64919 -c2V0SWQ= 64920 -IENoZW5uYWk= 64921 -IE9ncmU= 64922 -X0hJU1RPUlk= 64923 -UFJFU1NJT04= 64924 -X1NVRkZJWA== 64925 -ZHVwbGljYXRl 64926 -LmF1dGhTZXJ2aWNl 64927 -IHNwYWNlZA== 64928 -IEJlbmdhbHM= 64929 -U29sdmVy 64930 -IGJ1cmVhdWNyYWN5 64931 -X2hpdHM= 64932 -INGC0LjQvw== 64933 -IGPDqQ== 64934 -IGRpc2dyYWNl 64935 -6KeS 64936 -aXNPcGVu 64937 -Q2hlbQ== 64938 -X2xpY2Vuc2U= 64939 -X2hvc3RuYW1l 64940 -X0JSRUFL 64941 -IGZpZXJ5 64942 -OkQ= 64943 -L2xpbnV4 64944 -VGl0dWxv 64945 -UmFkaWFucw== 64946 -aXpvbnM= 64947 -UmFt 64948 -b2RpYW4= 64949 -aWFuZ2xl 64950 -IG5pbmph 64951 -RXZlcnlib2R5 64952 -KCI+ 64953 -IHRha8W8ZQ== 64954 -IGdyb3VuZGJyZWFraW5n 64955 -IGRpcmln 64956 -SFRNTEVsZW1lbnQ= 64957 -IFVuY29tbWVudA== 64958 -Y2hlaW4= 64959 -IOeUn+WRveWRqOacn+WHveaVsA== 64960 -JSIK 64961 -IHRpcG9z 64962 -Q2hhckNvZGU= 64963 -IFByb2R1Y3Rv 64964 -ZmFpdA== 64965 -J2w= 64966 -LXRodW1ibmFpbA== 64967 -dXN1 64968 -X2Zvcm11bGE= 64969 -LlRPUA== 64970 -LmJ1eQ== 64971 -IG1pZXV4 64972 -Q2VudHVyeQ== 64973 -cGVp 64974 -IHRic3A= 64975 -LVBhY2lmaWM= 64976 -b2dp 64977 -IGZhdHRv 64978 -IGZhbnRhc3Q= 64979 -IFNBTEU= 64980 -LmFkcw== 64981 -IHBpbGxhcnM= 64982 -X3RyaXA= 64983 -IHR1YQ== 64984 -IGFwZWxsaWRv 64985 -LnNldENlbGxWYWx1ZQ== 64986 -ICgoXw== 64987 -IE5pbmE= 64988 -PGM= 64989 -aW5pdW0= 64990 -ZGZ1bmRpbmc= 64991 -LXdvcmtpbmc= 64992 -IEVzdGFkb3M= 64993 -IE1hbGk= 64994 -PGY= 64995 -dXJhbmNlcw== 64996 -cGFnaW5h 64997 -X1BL 64998 -IHVuYXJtZWQ= 64999 -b2dnbGVk 65000 -Q2FuZGlkYXRl 65001 -UmF0aGVy 65002 -IGZyYW5jaGlzZXM= 65003 -IGNvdmVuYW50 65004 -wqo= 65005 -aXBwaW5lcw== 65006 -R3Vu 65007 -LWZlaXJh 65008 -IGxpbmVhZ2U= 65009 -X0dSQU5URUQ= 65010 -Z2VucmVz 65011 -LkVsYXBzZWQ= 65012 -IGxhcmdv 65013 -0Js= 65014 -LXJlYWR5 65015 -X3Byb2Nlc3NlZA== 65016 -bGFuZ3M= 65017 -w7ptZXJvcw== 65018 -ZnE= 65019 -L25wbQ== 65020 -X3Nydg== 65021 -IGF0dGVuZGFudA== 65022 -aXZpZA== 65023 -ZXZpY2U= 65024 -QUJJ 65025 -KGJpbmFyeQ== 65026 -X1ZBTElEQVRF 65027 -IGFkZEl0ZW0= 65028 -X2NvZWY= 65029 -YWxlYg== 65030 -b2dyYXBoaWNhbGx5 65031 -Qm9yZGVyQ29sb3I= 65032 -IGFzc2F5 65033 -IGNhdGNoRXJyb3I= 65034 -IENocnlzbGVy 65035 -b2do 65036 -IGtleVZhbHVl 65037 -ZGVjaXNpb24= 65038 -LW9mZnM= 65039 -IGxpZWd0 65040 -KERhdGFUeXBl 65041 -IGlyaXM= 65042 -IGV1cA== 65043 -cmlnZXI= 65044 -b25pY2E= 65045 -IHJvcGVz 65046 -IG5hcnJvd2x5 65047 -IFF1YWRy 65048 -IGVwdWI= 65049 -ZXN0aW5hbA== 65050 -LXR1cm4= 65051 -IGxhbmdz 65052 -55uR5ZCs6aG16Z2i 65053 -IHF1ZWxsbw== 65054 -LGFyZ3M= 65055 -aWdhdGU= 65056 -IFNlZW1z 65057 -IGZvcnRl 65058 -Q0xJ 65059 -X0xPQURJTkc= 65060 -LlJ1bGU= 65061 -IHlvdXRocw== 65062 -KHh4 65063 -IEFzc3VtaW5n 65064 -YWdoZXR0aQ== 65065 -KQoKCgoK 65066 -IG9uT3B0aW9uc0l0ZW1TZWxlY3RlZA== 65067 -T2NjdXA= 65068 -IGRldHJpbWVudGFs 65069 -IGlubmF0ZQ== 65070 -IEJhcnJlbA== 65071 -dWVuY2lh 65072 -IG9uQmx1cg== 65073 -IGxpYnM= 65074 -W2xhc3Q= 65075 -IGNwZg== 65076 -LlRpbWVvdXQ= 65077 -ZXN0YXRpb24= 65078 -IHdpZWw= 65079 -IHV0aWxpemFy 65080 -IGRpc2d1aXNl 65081 -IER1bQ== 65082 -T0NJ 65083 -T05HTw== 65084 -ICg/LA== 65085 -IFBhdGlv 65086 -VmVydGV4QXJyYXk= 65087 -LmF1dGhvcml6YXRpb24= 65088 -cm96 65089 -IEhvcw== 65090 -LlNwYWNl 65091 -IFZpcnVz 65092 -KGtleXdvcmQ= 65093 -VE9DT0w= 65094 -X0NPTlRST0xMRVI= 65095 -IEJsb2NrZWQ= 65096 -IENob3A= 65097 -d2nEmQ== 65098 -XFJvdXRpbmc= 65099 -L3BhY2thZ2U= 65100 -IHBlcnN1YWRlZA== 65101 -YmVpdHM= 65102 -TENE 65103 -IG11Yw== 65104 -X0ZPUldBUkQ= 65105 -IG91dGxhdw== 65106 -IHphdw== 65107 -X3ZlaGljbGU= 65108 -IEplbnNlbg== 65109 -LkdyZWVu 65110 -IC8vLy8v 65111 -SVJDTEU= 65112 -LWJ1c2luZXNz 65113 -LkhpZGRlbg== 65114 -IGtvbm50ZQ== 65115 -cHE= 65116 -IHBhcmVjZQ== 65117 -IGxhbmRzY2FwaW5n 65118 -IERlY29yYXRpb24= 65119 -IEdSQQ== 65120 -X3Byb2ZpbGVz 65121 -IEZsZW0= 65122 -Q0xJQ0s= 65123 -IEZBSUxVUkU= 65124 -IGlvbnM= 65125 -X1RpbWVy 65126 -LkRvZXM= 65127 -IGJvdW5jaW5n 65128 -dXBweQ== 65129 -dWxpcw== 65130 -L2Fn 65131 -IEdhcm4= 65132 -IGh1ZA== 65133 -IHJlc3BvbmRlcg== 65134 -IHN0cmNocg== 65135 -IGNob2tl 65136 -IHN0YXNo 65137 -X2NoZWNrc3Vt 65138 -IHN0YW1wZWQ= 65139 -QEdldE1hcHBpbmc= 65140 -LkJ5dGVBcnJheQ== 65141 -IER5cw== 65142 -YXRlcm5pdHk= 65143 -KHJi 65144 -IGVkaXRUZXh0 65145 -IGVyZWN0aW9u 65146 -IGNlc3M= 65147 -X2V2ZXJ5 65148 -X2dhdGV3YXk= 65149 -ICciLg== 65150 -IHN0YWZmaW5n 65151 -IGludm9pY2Vz 65152 -aW5pY2lv 65153 -fV0sCg== 65154 -LHZhcg== 65155 -eWNpbg== 65156 -IERpb24= 65157 -ICUlCg== 65158 -Jywo 65159 -LXNwYW4= 65160 -IHRow6BuaA== 65161 -IGJvcm5l 65162 -IEthdGhsZWVu 65163 -6L+e5o6l 65164 -X2N1YmU= 65165 -IGluZm9ybWHDp8O1ZXM= 65166 -bmdlcg== 65167 -L0ZpbGU= 65168 -IGRhcmE= 65169 -IG1M 65170 -KioqKioqCg== 65171 -IG1hcmtpbmdz 65172 -YmJl 65173 -IHJlY3VycmVudA== 65174 -IFJhbmtpbmc= 65175 -X2ludGVncmFs 65176 -XT4K 65177 -IHVuYW5pbW91c2x5 65178 -IGRpcGxvbWF0cw== 65179 -IElPUw== 65180 -OyI+PD8= 65181 -IE1hdHRl 65182 -IFJhbGVpZ2g= 65183 -IEltcHJvdmU= 65184 -ZXhpc3RlbnQ= 65185 -IGZha2Vy 65186 -IEhpZ2hsYW5k 65187 -c3RlbQ== 65188 -LW1z 65189 -TGlzdE9m 65190 -Lkxpc3RlbmVy 65191 -KHdhaXQ= 65192 -X1JTVA== 65193 -VW5h 65194 -IG9jY3VwYXRpb25hbA== 65195 -LW1lbW9yeQ== 65196 -IFN1cmY= 65197 -IGJydXRl 65198 -X0VsZW1lbnQ= 65199 -ZGRkZA== 65200 -IERlY3Jl 65201 -LnBzaQ== 65202 -LWRldmVs 65203 -IE9uVHJpZ2dlckVudGVy 65204 -VG9EZWxldGU= 65205 -IGhlcmFsZA== 65206 -IHNvY2lhbGVz 65207 -IGJvb3N0ZWQ= 65208 -Lkl0b2E= 65209 -KiI= 65210 -IGFudGlkZXByZXNz 65211 -IE1hdmVy 65212 -X18pKQo= 65213 -KER1cmF0aW9u 65214 -ZXN0YXRl 65215 -YnJhdGU= 65216 -Q2xh 65217 -IOS4ig== 65218 -65CY 65219 -cmnDqHJl 65220 -YnJlYWtlcg== 65221 -X2xlZw== 65222 -fWVsc2VpZg== 65223 -X2Z1bmNz 65224 -dcOt 65225 -LnBhZ2VZ 65226 -Y3JlYXR1cmU= 65227 -IGNhbm5hYmlu 65228 -IEFzdHJv 65229 -bG9jYWxz 65230 -IExBUw== 65231 -X2NvbnZlcnNpb24= 65232 -IENSVUQ= 65233 -LnNraWxs 65234 -IHN0cmF0ZWdpc3Q= 65235 -LnBvbA== 65236 -KHNlZ21lbnQ= 65237 -IHBlZQ== 65238 -fSIpOwoK 65239 -LnByZXZpZXc= 65240 -SmFt 65241 -IGhlZnR5 65242 -aXZhdGluZw== 65243 -R3JpZENvbHVtbg== 65244 -IGN1ZGQ= 65245 -IGluamVjdGlvbnM= 65246 -IE5JTA== 65247 -LW9sZHM= 65248 -ZmxhdGlvbg== 65249 -IExlYWZz 65250 -IHNwaGVyaWNhbA== 65251 -IGZhbGxvdXQ= 65252 -YW1pbmVy 65253 -IDo6PQ== 65254 -LnBvaW50ZXI= 65255 -LU1hcnQ= 65256 -IG1hdHRl 65257 -IGNvcXVpbmU= 65258 -IGRpc2NvbnRpbnVlZA== 65259 -IFJFR0lPTg== 65260 -LlJpZ2h0VG9MZWZ0 65261 -IHNxdWVlemVk 65262 -X1BPSU5UUw== 65263 -YmVzdG9z 65264 -LWxhc3Rpbmc= 65265 -KHV0aWxz 65266 -PEJhc2U= 65267 -IHBhcmRvbg== 65268 -U3RyaWRl 65269 -Y2Ry 65270 -IG5hcnJhdG9y 65271 -dm9sdXRpb24= 65272 -IHVzZXJJbnB1dA== 65273 -X2NvbnRhY3Rz 65274 -KGVuZW15 65275 -IENoYW1iZXJz 65276 -emllbA== 65277 -IGJsb2NrU2l6ZQ== 65278 -QW5pbWF0aW9uc01vZHVsZQ== 65279 -IGltbWVyc2l2ZQ== 65280 -IG91dGluZw== 65281 -dWVzdG9z 65282 -VHdlZW4= 65283 -IGtlcA== 65284 -IHLDqXN1bHQ= 65285 -IEJvbGx5d29vZA== 65286 -RExM 65287 -IFN1cmVseQ== 65288 -LlJvd1N0eWxl 65289 -KHRt 65290 -X2dlbmVyYXRpb24= 65291 -IFN0aXI= 65292 -IGRhdGFTbmFwc2hvdA== 65293 -Y2h1cmNo 65294 -IGNvbmZpZGVudGlhbGl0eQ== 65295 -X3N1c3BlbmQ= 65296 -dmlw 65297 -IEthdGh5 65298 -44Km 65299 -IHZpb2xlbnRseQ== 65300 -cGV0cw== 65301 -IG1lc3NlZA== 65302 -IHRleHRib29rcw== 65303 -ICAgICAgICAJCQk= 65304 -5raI5oGv 65305 -IExhcmF2ZWw= 65306 -IEFyY2FkZQ== 65307 -IGVudGg= 65308 -IGJlbmlnbg== 65309 -X0RST1A= 65310 -LWVuYWJsZQ== 65311 -4oCdKS4= 65312 -dXZ3eHl6 65313 -X2xpc3Rpbmc= 65314 -IE5JQw== 65315 -44GV44GE 65316 -KCIuIiw= 65317 -LXJvdW5kZWQ= 65318 -LXBhY2Vk 65319 -cGF0cmljaw== 65320 -U2VsZQ== 65321 -LmdldEZpcnN0 65322 -LkVYSVQ= 65323 -ZXRlcm1pbmF0ZQ== 65324 -R3JhbQ== 65325 -Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 65326 -LmV4dGVybmFs 65327 -IHdyb25nZG9pbmc= 65328 -IEVsbQ== 65329 -IHNhbms= 65330 -VGVlbg== 65331 -IFRob21zb24= 65332 -cHJpb3I= 65333 -amV0YQ== 65334 -IEFEUw== 65335 -IFBlcnNpc3RlbmNl 65336 -IEZvbGs= 65337 -e1wi 65338 -Ym9uZA== 65339 -X1NQRUNJQUw= 65340 -X0xBVA== 65341 -b25la3Np 65342 -IG1vdGhlcmJvYXJk 65343 -IHNoZWFy 65344 -RnVsbFNjcmVlbg== 65345 -Kks= 65346 -KEJsdWVwcmludA== 65347 -TWV0aG9kSW5mbw== 65348 -QmVjb21l 65349 -IGhhaWw= 65350 -IERvYg== 65351 -IGdlbmVyb3NpdHk= 65352 -ID8iOwo= 65353 -IHdoaXNrZXk= 65354 -IHRoaW5uZXI= 65355 -IENw 65356 -IGludGVyc2VjdGlvbnM= 65357 -Q3JpdA== 65358 -cmFpc2Fs 65359 -cmVmZmVu 65360 -V2hlbmV2ZXI= 65361 -IGNvbW1lbmNlZA== 65362 -VHJhbnNmb3JtYXRpb24= 65363 -L3dyaXRl 65364 -PSIiIg== 65365 -KGxk 65366 -IG5vcnNr 65367 -QU1FTlQ= 65368 -LnNoYXJlZEluc3RhbmNl 65369 -X2hvdXNl 65370 -IGdsRW5hYmxl 65371 -6L2v 65372 -IG5hbw== 65373 -IGRlcG9zaXRpb24= 65374 -IGRpbm9zYXVycw== 65375 -IHRpbWVTdGFtcA== 65376 -X18pOwoK 65377 -LlJpYmJvbg== 65378 -IExpbmRzZXk= 65379 -OnVzZXI= 65380 -IMOA 65381 -X2Zvcm1z 65382 -bWluYXRpbmc= 65383 -IE9saXY= 65384 -IGTDqWJ1dA== 65385 -YmFyY29kZQ== 65386 -c2ltaWxhcg== 65387 -IHBsYXRlYXU= 65388 -IGluZGVt 65389 -UmVhbG0= 65390 -IGZlcnRpbGl6ZXI= 65391 -IGNhcGU= 65392 -IGNoYW1wYWduZQ== 65393 -IHNlbGZpZQ== 65394 -IHBsYWlubHk= 65395 -IGNhdGFzdHJvcGhl 65396 -IGJldHJheWVk 65397 -dmVyc2libGU= 65398 -VXBkYXRlVGltZQ== 65399 -Lk91dHB1dFN0cmVhbQ== 65400 -Ymlhc2Vk 65401 -Ym91bmNl 65402 -IFNwb3J0aW5n 65403 -Q29vcmRpbmF0b3I= 65404 -ZGV2ZWxvcGVycw== 65405 -IHRyYWNlcg== 65406 -IG11c3RhcmQ= 65407 -U1E= 65408 -X3Rlcm1pbmFs 65409 -IGNvb2xlZA== 65410 -IGF2b2lkYW5jZQ== 65411 -TG9naWNhbA== 65412 -IHllbGw= 65413 -X3JvdXRlcw== 65414 -IGFydGVyeQ== 65415 -IEJlYXJpbmdz 65416 -Lm12cA== 65417 -LkdVSQ== 65418 -VUlTY3JlZW4= 65419 -eW1t 65420 -aXTDpA== 65421 -KClbIg== 65422 -IEF6ZXJiYWk= 65423 -IGNvbmRpdGlvbmVy 65424 -IHdhZw== 65425 -IHNjYWxw 65426 -dmluY2lhbA== 65427 -b3dsZXI= 65428 -LicpOwoK 65429 -QkxVRQ== 65430 -IMKnwqc= 65431 -Qm9zdG9u 65432 -IExpbmtlZEhhc2hNYXA= 65433 -RG9jdW1lbnRhdGlvbg== 65434 -LkxlcnA= 65435 -IGRlbm5l 65436 -IGhlc2l0YXRpb24= 65437 -IENlbGVicml0eQ== 65438 -IEh5ZGU= 65439 -IGNvbW1hbmRpbmc= 65440 -YWNlbGx1bGFy 65441 -IHBhdmVtZW50 65442 -IEhhbW1vbmQ= 65443 -YXNzaWM= 65444 -UExVR0lO 65445 -IHJldm9rZWQ= 65446 -RG9jdW1lbnRv 65447 -LnBob3Rvcw== 65448 -IFdpbGxvdw== 65449 -IFZpa2luZw== 65450 -IHVwZnJvbnQ= 65451 -IExpZmV0aW1l 65452 -ICVb 65453 -RHJlYW0= 65454 -5aS0 65455 -IGFjY2VsZXJhdG9y 65456 -UGVyc29uYQ== 65457 -X3RvcGljcw== 65458 -77yJ44CB 65459 -IChfLg== 65460 -IHPDqWN1cg== 65461 -IEt3 65462 -X2Nhc2g= 65463 -IHNvb3RoaW5n 65464 -IExvdmVseQ== 65465 -IEhlcnM= 65466 -ZWxvbg== 65467 -TElDRU5TRQ== 65468 -X2NhY2hlZA== 65469 -LnNoYQ== 65470 -UkZD 65471 -LkZpbGVJbnB1dFN0cmVhbQ== 65472 -LUFs 65473 -IHVzZXJMaXN0 65474 -IG7DpHI= 65475 -SGlsbGFyeQ== 65476 -IHBhZ28= 65477 -LlBsdWdpbg== 65478 -IENvdmU= 65479 -X3lhbWw= 65480 -X3JzcA== 65481 -J3Bvc3Q= 65482 -LWR1cmF0aW9u 65483 -IHNlbnRpZG8= 65484 -IG1pbkhlaWdodA== 65485 -IHR1cnJldA== 65486 -LWVuZXJneQ== 65487 -IOeJ 65488 -0YDRg9Cz 65489 -b3RlY2E= 65490 -X3F1YWw= 65491 -U2VsZWN0aXZl 65492 -IEJFTE9X 65493 -CWFkbWlu 65494 -IH19LAo= 65495 -J3VzZXI= 65496 -U1ZH 65497 -IGN1bG8= 65498 -KFdvcmxk 65499 -LWJpbmRpbmc= 65500 -bmJy 65501 -IFNlbmRz 65502 -IHN1cHJlbWFjeQ== 65503 -IHNrYXRpbmc= 65504 -IGNyZWVr 65505 -IGFjY3VzYXRpb24= 65506 -YXBnb2xseQ== 65507 -LklERU5USVRZ 65508 -IG1hbmRhdGVk 65509 -IGdvd24= 65510 -IHdpZHRocw== 65511 -IExTVQ== 65512 -L3ZlcnNpb24= 65513 -IFJlYWRlcnM= 65514 -IFJvbmFsZG8= 65515 -IGJhZmY= 65516 -IGA7Cg== 65517 -R0xJU0g= 65518 -KGRvdA== 65519 -IE9wZXJhdG9ycw== 65520 -LlNjZW5lTWFuYWdlbWVudA== 65521 -bWVyYw== 65522 -X3JlcG9ydHM= 65523 -LWNlbnRyaWM= 65524 -IENlaWxpbmc= 65525 -PXsh 65526 -bW9ueQ== 65527 -IEFERFJFU1M= 65528 -5a+56LGh 65529 -TWF0Y2hpbmc= 65530 -IHVuaw== 65531 -IGtleUNvZGU= 65532 -ICcvJyk= 65533 -KWRhdGE= 65534 -IFZvbHVudGVlcg== 65535 -IGxheg== 65536 -IEd1YW5n 65537 -IENhbmRpZGF0ZXM= 65538 -RW5zdXJl 65539 -aWFnZQ== 65540 -c3VjYw== 65541 -Q2VydGFpbg== 65542 -IGxlZnRvdmVy 65543 -aW5pbg== 65544 -LWVsZW1lbnRz 65545 -cGlrZQ== 65546 -IHNsaWRlc2hvdw== 65547 -LnRvb2xTdHJpcFNlcGFyYXRvcg== 65548 -LnBoYXNl 65549 -IGVudGVydGFpbmVk 65550 -IENhcnJpZQ== 65551 -IE1vaGFtbWFk 65552 -LmxvZ2dlZA== 65553 -IHNjcm9sbFRvcA== 65554 -IEFiYmV5 65555 -aW1vbnk= 65556 -KHJlc3VsdFNldA== 65557 -IGFkaGVzaXZl 65558 -X0RBTUFHRQ== 65559 -IGlvY3Rs 65560 -YnJvd24= 65561 -SU5TVA== 65562 -LkNsb25l 65563 -IGxvb21pbmc= 65564 -RGVzZXJpYWxpemU= 65565 -IGx1eg== 65566 -cXJzdHV2d3h5eg== 65567 -LmlkZW50 65568 -SGVhdnk= 65569 -IGRpbw== 65570 -5piv5ZCm 65571 -IEZ1cm4= 65572 -6YKu 65573 -emltbWVy 65574 -44O844OJ 65575 -c3BlYWtlcg== 65576 -IEdlZA== 65577 -IHVuaWRlbnRpZmllZA== 65578 -SW50ZXJmYWNlT3JpZW50YXRpb24= 65579 -IFN1cnZpdm9y 65580 -ZGVlbg== 65581 -IEJvcmc= 65582 -dG9Eb3VibGU= 65583 -X2J3 65584 -IHB1Ymxpc2hlcw== 65585 -X0FMRVJU 65586 -YW5ncw== 65587 -aWVyZXM= 65588 -IGhlaQ== 65589 -IElDb25maWd1cmF0aW9u 65590 -IGNvbnN0aXR1dGVk 65591 -V0FUQ0g= 65592 -cHJpdmF0aW9u 65593 -IEdyYW5pdGU= 65594 -LlRleHRBbGlnbm1lbnQ= 65595 -X2t3 65596 -OyIsCg== 65597 -Y290 65598 -IE5ld2Fyaw== 65599 -cm9hY2g= 65600 -KW9iag== 65601 -Q29tcGlsYXRpb24= 65602 -Q2F0ZWdvcnlJZA== 65603 -LnNldFVzZXI= 65604 -aXZ5 65605 -IEltYWdpbmc= 65606 -aWdodGVk 65607 -IHdnZXQ= 65608 -IG1vdXRocw== 65609 -Lmxpbg== 65610 -IFJhZGlvQnV0dG9u 65611 -LkNtZA== 65612 -c3Nl 65613 -IG1lc2hlcw== 65614 -IFNvbGU= 65615 -LnJlY29yZHM= 65616 -IGFudGlz 65617 -KG1vbg== 65618 -INGH0LjRgdC70L4= 65619 -gq0= 65620 -IOyeiOuKlA== 65621 -QWxsQXJnc0NvbnN0cnVjdG9y 65622 -IHN1cnJlYWw= 65623 -IE1hcnJpZWQ= 65624 -IHhwYXRo 65625 -XGY= 65626 -QnJpbmc= 65627 -IHlhaG9v 65628 -IEV0c3k= 65629 -X2RhaWx5 65630 -IHRocm93YWJsZQ== 65631 -IFBsYXNtYQ== 65632 -L1B1YmxpYw== 65633 -aW1pemVCb3g= 65634 -IHZlcw== 65635 -IHRyb20= 65636 -X3Jocw== 65637 -LWFscGhh 65638 -IEFyYm9y 65639 -KSkt 65640 -RmlzaA== 65641 -ZmVlZHM= 65642 -IGNhbGY= 65643 -IFNlcmdlYW50 65644 -KGVudW0= 65645 -IFJhbXNleQ== 65646 -IElkZW50aWZ5 65647 -LmluaXRTdGF0ZQ== 65648 -IGZsdWN0dWF0aW9ucw== 65649 -X0FUVFJJQlVURVM= 65650 -IHB3bQ== 65651 -RVNB 65652 -Y3Bm 65653 -U2ltdWxhdGlvbg== 65654 -IHlvdXRoZnVs 65655 -IEluZmFudHJ5 65656 -IGdsYW5jZWQ= 65657 -IFByb3Blcg== 65658 -5LmJ 65659 -IEtyYWZ0 65660 -Q2l0 65661 -b29wcw== 65662 -PXVybA== 65663 -cG9zdGluZw== 65664 -ZGVjbGFyaW5n 65665 -IHBOb2Rl 65666 -SmF2YXNjcmlwdA== 65667 -CQkJCQoJCQkJCg== 65668 -LmNvb3JkaW5hdGVz 65669 -cmlldA== 65670 -IFNx 65671 -X0NBVA== 65672 -IFBhcGE= 65673 -YW5kaQ== 65674 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 65675 -TWVldGluZw== 65676 -IOyekA== 65677 -SW1hZ2Vu 65678 -w6lyaWVuY2U= 65679 -QWdncmVnYXRl 65680 -LnBvbHk= 65681 -IHdhdmVk 65682 -IGludmVycw== 65683 -c2VhcmNoTW9kZWw= 65684 -IHRyb2xscw== 65685 -W2xldmVs 65686 -IExvd2U= 65687 -dWxsbw== 65688 -KHBsYWNl 65689 -IE5BU0NBUg== 65690 -IG9yYml0YWw= 65691 -LnN0b3J5 65692 -IGF1dGhvcml0YXRpdmU= 65693 -LnRleHRWaWV3 65694 -IGFscGg= 65695 -X3JlZHVjZQ== 65696 -IEZyYW1lcw== 65697 -IEJyb20= 65698 -cmVkaQ== 65699 -KE1ldGhvZEltcGxPcHRpb25z 65700 -bWFjZW4= 65701 -VG90 65702 -IG1pZGQ= 65703 -2Y8= 65704 -IEJhc2VNb2RlbA== 65705 -IFZlZ2E= 65706 -ID8+Igo= 65707 -IFJpZ2lkYm9keQ== 65708 -LnNldENvbnRlbnRUeXBl 65709 -YWFT 65710 -QmFzZWxpbmU= 65711 -IGJsYW5rZXRz 65712 -c2Fw 65713 -IGNhc3VhbGx5 65714 -VW5pdmVycw== 65715 -IFRyYXk= 65716 -IEFpcmVz 65717 -IG1heFk= 65718 -X1BST1BFUlRJRVM= 65719 -IGhlbG1ldHM= 65720 -wqY= 65721 -X2Rlc2Ny 65722 -c2hpbnQ= 65723 -X0NQUA== 65724 -dW1v 65725 -YWRheQ== 65726 -KHBsb3Q= 65727 -ZW56eW1l 65728 -IEV4Y2VwdGlvbnM= 65729 -X3Zpc3VhbA== 65730 -Ol0KCg== 65731 -KHRhcmdldEVudGl0eQ== 65732 -cGhlcmVz 65733 -dW5hbg== 65734 -IHNlbG9u 65735 -d2ls 65736 -IFJlbmRlcmluZw== 65737 -S0M= 65738 -IGNvbnN0aXR1ZW5jeQ== 65739 -U0NSSUJF 65740 -ZXN5 65741 -IEZlbGxvd3NoaXA= 65742 -5Y+4 65743 -IGZ1dHVybw== 65744 -IGFybW9yZWQ= 65745 -bGlzdGU= 65746 -b3Jhcw== 65747 -bXVsdGlwbHk= 65748 -Z2VtZQ== 65749 -Y29lZg== 65750 -0L7QsdGA0LDQtg== 65751 -IERlbGl2ZXI= 65752 -ZW5nbw== 65753 -LnVzZXJTZXJ2aWNl 65754 -T05VUw== 65755 -Lm9ucmVhZHlzdGF0ZWNoYW5nZQ== 65756 -ICIvIiw= 65757 -YW1iaW8= 65758 -X1Byb2plY3Q= 65759 -Jyk/Pg== 65760 -IGZsaXBwaW5n 65761 -d29tZW4= 65762 -LkNyb3Nz 65763 -IGhvbGxhbmQ= 65764 -IGNpbmVtYXRpYw== 65765 -IHdoaXN0bGVibA== 65766 -IGxpbmd1aXN0aWM= 65767 -LkdldHRlcg== 65768 -IG3DpG5uZXI= 65769 -IExlZ28= 65770 -IFNjaHVtZXI= 65771 -YXNzZXNzbWVudA== 65772 -X2Noaw== 65773 -IHJlY29tbWVuZGluZw== 65774 -LnNjYWxh 65775 -IEd1YXJhbnRlZQ== 65776 -IEBf 65777 -LkFVVEg= 65778 -IHlQb3M= 65779 -bGF0ZXg= 65780 -IEFsYmVydG8= 65781 -5q2l 65782 -dGhvcmE= 65783 -4Li34LmI 65784 -VVJMRXhjZXB0aW9u 65785 -R2hvc3Q= 65786 -LlRvb2xiYXI= 65787 -IGVuZGlhbg== 65788 -6Zeo 65789 -c3RyYWN0aW9ucw== 65790 -RmlsZU5vdEZvdW5kRXhjZXB0aW9u 65791 -IHN0aW11bGF0aW5n 65792 -YnNlcnZpY2U= 65793 -YXTDs3Jpbw== 65794 -aXRpb3Vz 65795 -IGF1dGhTZXJ2aWNl 65796 -X1RSQU5TRkVS 65797 -IHJlZGlyZWN0VG8= 65798 -IG1lbnNlbg== 65799 -IFNQTA== 65800 -IMK7LA== 65801 -IGFjZXQ= 65802 -X0JhY2s= 65803 -4KSV 65804 -YWFj 65805 -IFJpb3Q= 65806 -X0ZC 65807 -IFph 65808 -UGxhdGU= 65809 -IGxhYmVsVGV4dA== 65810 -INCy0YDQtdC8 65811 -aHRvbg== 65812 -IE1jQQ== 65813 -IEFwcGVuZGl4 65814 -IEtvaw== 65815 -IGludGVydmlld2luZw== 65816 -X3NwZWxs 65817 -IFN1YmplY3Rz 65818 -IGJ1cm5lcg== 65819 -5a+8 65820 -aWxsaWFu 65821 -IGJ1bXBz 65822 -UGFzc2Vk 65823 -IENvbnRyaWJ1dG9y 65824 -WW8= 65825 -Ymxh 65826 -IHNvdXQ= 65827 -LmV4Yw== 65828 -Tm90aWZpZXI= 65829 -c2hpdg== 65830 -LlVuaXRUZXN0aW5n 65831 -dWVsbGVz 65832 -X1NMRUVQ 65833 -CW9wdHM= 65834 -IHByZXNjcmlwdGlvbnM= 65835 -IHJldmlzZQ== 65836 -RURJVE9S 65837 -IGFubsOpZXM= 65838 -X3BrZw== 65839 -IFRyYWNrcw== 65840 -4LmI4Liy 65841 -PWZvcm1z 65842 -LlJVTg== 65843 -IGFzZWc= 65844 -IHDDoQ== 65845 -IGplcw== 65846 -R3Jl 65847 -YWNy 65848 -T2ZmaWNpYWxz 65849 -dWtlcw== 65850 -Y29tcGFuaWVz 65851 -XFF1ZXJ5 65852 -IFByaW50YWJsZQ== 65853 -5a6i 65854 -X1ZP 65855 -IGRlaXg= 65856 -IGRldmljZUlk 65857 -IGRpc3R1cmJhbmNl 65858 -bmlzdA== 65859 -Lmlzbw== 65860 -cGFyYWxsZQ== 65861 -LWRlc2NyaWJlZGJ5 65862 -IExpZg== 65863 -IGJyZWFzdGZlZWRpbmc= 65864 -IGZlbWluaXN0cw== 65865 -bGVncm91bmQ= 65866 -IGRhbWU= 65867 -IGNvbXB1bHNvcnk= 65868 -TUVSQ0hBTlRBQklMSVRZ 65869 -LXJlc3VsdHM= 65870 -Zm9ybWVkVVJMRXhjZXB0aW9u 65871 -OlsK 65872 -LWludGVyZXN0 65873 -IHPDpA== 65874 -IG5vc3RhbGdpYQ== 65875 -IGNsYXJpZmllZA== 65876 -IFBIT1RP 65877 -IHJldmlzaXQ= 65878 -IGNhcHN1bGVz 65879 -IHNoaW5lcw== 65880 -IGNyYWZ0c20= 65881 -c3ViamVjdHM= 65882 -ICAgICAgICAgICANCg== 65883 -5LiN6IO95Li656m6 65884 -IFNjaHdhcnR6 65885 -cmV1 65886 -IG1hZHJpZA== 65887 -LnBlbmRpbmc= 65888 -IExJTg== 65889 -IHVuc3Q= 65890 -CW12 65891 -IHZpdmFzdHJlZXQ= 65892 -IHNwb2ls 65893 -w7hq 65894 -64u5 65895 -IGJ1ZW5h 65896 -IGRpZ2l0YWxXcml0ZQ== 65897 -c3Vicw== 65898 -IFVOSVZFUlM= 65899 -IFN1aWNpZGU= 65900 -PEd1aWQ= 65901 -LmVsZW0= 65902 -X2NvbnN0cnVjdA== 65903 -IGFtaWRzdA== 65904 -IOuP 65905 -LWVzdGVlbQ== 65906 -IEludGVncml0eQ== 65907 -LmZtbA== 65908 -T3V0T2ZCb3VuZHNFeGNlcHRpb24= 65909 -LVNlbWl0aXNt 65910 -QmV0YQ== 65911 -LWdvaW5n 65912 -U2VnbWVudHM= 65913 -IE1hZQ== 65914 -IFBlcnNvbmFsaXR5 65915 -dXJiYXRpb24= 65916 -5Y+z 65917 -IHNlcnZpY2luZw== 65918 -IGJpcG9sYXI= 65919 -X1NUQUdF 65920 -LkpQRw== 65921 -Jyl9fSI+ 65922 -aXNobHk= 65923 -SVZFUlk= 65924 -IEluc3BpcmVk 65925 -LnNlcnY= 65926 -KGRhdGFz 65927 -IGRpdmlkZXM= 65928 -PFJlYWw= 65929 -dmVydHVyZQ== 65930 -IG1vdGl2YXRpb25z 65931 -dmVydGU= 65932 -RU5DSA== 65933 -ZmRz 65934 -IHJldm9sdA== 65935 -d2VidG9rZW4= 65936 -aW5zdGVhZA== 65937 -CW9wdA== 65938 -IE1hcmlqdWFuYQ== 65939 -X2FkYw== 65940 -YmFv 65941 -W1NlcmlhbGl6ZUZpZWxk 65942 -IGdyYWZmaXRp 65943 -LWFvcw== 65944 -ZW1pYWg= 65945 -IGbDrXM= 65946 -IGV0aGlj 65947 -J2FsbA== 65948 -OmtleQ== 65949 -65Ok 65950 -IHJlc3RyaWN0aW5n 65951 -IFhIVE1M 65952 -ZXJlbw== 65953 -dW5kb3M= 65954 -CWVuZGlm 65955 -WzosOiw= 65956 -IHN0ZWhlbg== 65957 -YWtoaXI= 65958 -IGp1aWNlcw== 65959 -ZGF0YVNvdXJjZQ== 65960 -X21r 65961 -LmRlbGV0ZWQ= 65962 -Q29uZ3Jlc3M= 65963 -aW1tZWw= 65964 -RWxlY3RyaWM= 65965 -YW9z 65966 -IE92ZXJsYXk= 65967 -IEFDTFU= 65968 -cm5k 65969 -ZXNzZXM= 65970 -IEx1eGVtYm91cmc= 65971 -cGFyc2VGbG9hdA== 65972 -IGd1dHM= 65973 -Y2xhc3NpZmllZA== 65974 -IGRlZlN0eWxl 65975 -IFRjcA== 65976 -cGVhdGluZw== 65977 -Q2hhcnRz 65978 -X3Vy 65979 -X2xhdGVzdA== 65980 -KSEK 65981 -Y2F0aW9u 65982 -LkdldGVudg== 65983 -KGxvb3A= 65984 -IHVubA== 65985 -X2R0eXBl 65986 -emXFhA== 65987 -KEpOSUVudg== 65988 -LmZldGNob25l 65989 -IHNpZ21vaWQ= 65990 -IE9MRA== 65991 -IE1pbmlzdA== 65992 -7YE= 65993 -IEvDtg== 65994 -IGZyYWN0aW9ucw== 65995 -IHNpeg== 65996 -PT09PT0K 65997 -LlByaW50V3JpdGVy 65998 -X0FkZHJlc3M= 65999 -IEF1ZGllbmNl 66000 -Q29tbw== 66001 -IEJydWlucw== 66002 -LmFjdGl2aXRpZXM= 66003 -IGFuY2VzdHJ5 66004 -0YPQu9GM0YI= 66005 -CVJldHVybg== 66006 -cHVu 66007 -IGdyYXBlcw== 66008 -SUxvZw== 66009 -IGRpam8= 66010 -IFBlcmtpbnM= 66011 -IFZNd2FyZQ== 66012 -X2F1dGhlbnRpY2F0ZWQ= 66013 -w650cmU= 66014 -b3ZlcndyaXRl 66015 -IEhk 66016 -IGdhbGF4aWVz 66017 -YWNodQ== 66018 -SHJlZg== 66019 -W0Q= 66020 -IHBhcmNl 66021 -TGF0TG5n 66022 -X3BhdHRlcm5z 66023 -IFNIT1JU 66024 -IHJ1bW91cnM= 66025 -Y291bnR5 66026 -IEdSSUQ= 66027 -IFsv 66028 -IFNreXJpbQ== 66029 -RGF0YUdyaWRWaWV3VGV4dEJveENvbHVtbg== 66030 -IGNlbg== 66031 -IGN1Y3VtYmVy 66032 -LklOVA== 66033 -X0NPTkZJUk0= 66034 -IGN0bA== 66035 -cGVybA== 66036 -aWxsb3M= 66037 -IEFDQQ== 66038 -IEdlb3JnZXRvd24= 66039 -X2NhbGxhYmxl 66040 -IENyYWZ0cw== 66041 -L2Nv 66042 -IGluYm91bmQ= 66043 -IFRlY2huaXF1ZXM= 66044 -c2V0Q2hlY2tlZA== 66045 -IHBuYW1l 66046 -Y29tcHV0 66047 -U3RlZWw= 66048 -IGhhbmRoZWxk 66049 -IEFsYW0= 66050 -YWJzdHJhY3RtZXRob2Q= 66051 -6aKR 66052 -SU5Z 66053 -YmF0dGxl 66054 -X0VWVA== 66055 -IGNldXg= 66056 -IGF0b2Y= 66057 -IEFieXNz 66058 -X3ZhbGlkYXRvcg== 66059 -IGhhaXJz 66060 -VmVydGV4QXR0cmliQXJyYXk= 66061 -IGNvbW1vbnM= 66062 -LWJpbmQ= 66063 -TXVp 66064 -IGNvc21ldGljcw== 66065 -IG1pcmFj 66066 -Lm1hcmtlcg== 66067 -U0NBTEU= 66068 -LldvcmQ= 66069 -LXVs 66070 -IERpdmVyc2l0eQ== 66071 -IEREUw== 66072 -LmN3ZA== 66073 -X3h5eg== 66074 -IENvbXB1dGVz 66075 -KGNsaWNrZWQ= 66076 -VEVNUExBVEU= 66077 -IHpvbmluZw== 66078 -IGZpbnM= 66079 -IFBK 66080 -ZXh0Vmlldw== 66081 -Q2hhcmFjdGVyaXN0aWM= 66082 -aWdhdG9ycw== 66083 -IHByb2NsYWlt 66084 -IHByaXN0aW5l 66085 -IGRhdGFzdG9yZQ== 66086 -IGRpc2NvdXJhZ2U= 66087 -X25zZWM= 66088 -IG5pbmV0ZWVudGg= 66089 -IGNlbHVp 66090 -Sm9uYXRoYW4= 66091 -IGFtcGg= 66092 -IENyb3NzaW5n 66093 -IEh1bWFucw== 66094 -IEJvb2tlcg== 66095 -w6JjZQ== 66096 -Z2V0UG9zdA== 66097 -IE1vbnRlcg== 66098 -IEZsYXZvcg== 66099 -TWVkaWFUeXBl 66100 -IuKAlA== 66101 -IEFyY2hhZQ== 66102 -QHJldHVybg== 66103 -LWF3YXJl 66104 -b3J1 66105 -LVRoZQ== 66106 -YW1wbGVk 66107 -S0Y= 66108 -LlRlbXA= 66109 -IERyZQ== 66110 -KHtf 66111 -cG9seWdvbg== 66112 -IMOm 66113 -IERlZmVuZGVy 66114 -77yY 66115 -Xyks 66116 -LlVuc3VwcG9ydGVk 66117 -X14o 66118 -KElEQw== 66119 -JHY= 66120 -IHdvcnRobGVzcw== 66121 -IFNFRw== 66122 -aWxpa2k= 66123 -Tm9BcmdzQ29uc3RydWN0b3I= 66124 -IE1lcmNo 66125 -IG5vcA== 66126 -IGZvcmdldHRpbmc= 66127 -IGRvcGFtaW5l 66128 -anVhbA== 66129 -ZW9u 66130 -IFJlYXNvbnM= 66131 -c29ydEJ5 66132 -KCctJyw= 66133 -LXN5bmM= 66134 -ZWNlZG9y 66135 -S1A= 66136 -KGNvb3Jk 66137 -KENoYXQ= 66138 -XCQ= 66139 -ZXN0cmluZw== 66140 -Y2Vm 66141 -LmhhbmRsZUVycm9y 66142 -24zYrw== 66143 -0YHQug== 66144 -IGhhbmRj 66145 -ZWxpamtl 66146 -IFNwaXI= 66147 -IEJ1Y2tz 66148 -IFFSZWN0 66149 -U2V0Rm9udA== 66150 -LmV4ZWNTUUw= 66151 -OjoKCg== 66152 -IHN1aWNpZGFs 66153 -c2VlaW5n 66154 -IGNpZGVy 66155 -UHJvZ3Jlc3NEaWFsb2c= 66156 -IG1vbGRpbmc= 66157 -CXRyYWNl 66158 -IGVtcGhhc2l6ZXM= 66159 -IG11bHRpcGxlcw== 66160 -X1BU 66161 -X091dHB1dA== 66162 -Y2FwaXRhbA== 66163 -TmVlZHM= 66164 -X0RJUkVDVElPTg== 66165 -LmlzVmlzaWJsZQ== 66166 -IHJlc3Rl 66167 -IG92YXI= 66168 -KHNoYXJlZA== 66169 -LWNvbXBvc2U= 66170 -LmJhY2t3YXJk 66171 -CXJlY3Q= 66172 -QW1hemluZw== 66173 -LmRpZFJlY2VpdmVNZW1vcnlXYXJuaW5n 66174 -U0VSVklDRQ== 66175 -IEluanVyeQ== 66176 -QnJhaW4= 66177 -IGF1c2dl 66178 -KHBl 66179 -Ly8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 66180 -b3JwdGlvbg== 66181 -X01BSUw= 66182 -b2hh 66183 -IHNubw== 66184 -IGJvaWxlZA== 66185 -aWxkZW5hZmls 66186 -IFdlbGZhcmU= 66187 -IFF1YXJ0eg== 66188 -IGNhcHRjaGE= 66189 -IFdFU1Q= 66190 -IE1hemU= 66191 -IGdyYXBoZW5l 66192 -IHBlcms= 66193 -IG1pc3RyZXNz 66194 -LkZvcm1TdGFydFBvc2l0aW9u 66195 -IGV4cGVyaW1lbnRhdGlvbg== 66196 -KikoKA== 66197 -IGJyb2FkY2FzdHM= 66198 -IHJlbW92ZUFsbA== 66199 -CUdVSQ== 66200 -5YOP 66201 -YWJjZGVmZ2hpamtsbW5vcA== 66202 -IHVuaW5z 66203 -QVNQ 66204 -K3c= 66205 -bXVy 66206 -IGRpbmU= 66207 -IGFyb3U= 66208 -IGVzY2FwZXM= 66209 -IFRvYmFjY28= 66210 -Lm5hbWVk 66211 -IFBhdHJlb24= 66212 -X0ZBQ0U= 66213 -X3NwaW5uZXI= 66214 -bW92aW5n 66215 -X3ZvdGVz 66216 -T2hpbw== 66217 -LmVuY29kaW5n 66218 -RGVncmVlcw== 66219 -IlRv 66220 -IHByZXN0aWdl 66221 -b3NwaGVyZQ== 66222 -IExhbmNhc3Rlcg== 66223 -77yX 66224 -IG9uQ2FuY2Vs 66225 -IEhJUw== 66226 -0J7RiNC40LHQutCw 66227 -IG9yY2hlc3Ry 66228 -IHJlZnJlc2hlZA== 66229 -RGF0aW5n 66230 -KG11 66231 -IEplZA== 66232 -IEVkaXRvcmlhbA== 66233 -U2V0QnJhbmNoQWRkcmVzcw== 66234 -Q3BwVHlwZURlZmluaXRpb24= 66235 -IEJyb254 66236 -IGdhdGhlcmluZ3M= 66237 -ICcnDQo= 66238 -cG9zdERhdGE= 66239 -IEZyYW0= 66240 -Q2xpcGJvYXJk 66241 -IFhQYXRo 66242 -cmF5cw== 66243 -IGJha2VyeQ== 66244 -IHJvd0NvdW50 66245 -IGxvd3M= 66246 -YW5kV2hlcmU= 66247 -X3ZlcnNpb25z 66248 -IEd1bm4= 66249 -IHdlZXI= 66250 -IGNvbnRleHR1YWw= 66251 -IEtleUNvZGU= 66252 -IFNhc2thdGNoZXdhbg== 66253 -IFBoaWxseQ== 66254 -IE1vdXRo 66255 -IGRvUG9zdA== 66256 -IHBlcmNlbnRpbGU= 66257 -IGJ1ZmZlclNpemU= 66258 -KGZyZXE= 66259 -JHNtYXJ0eQ== 66260 -aWVydGU= 66261 -aXNzYW50 66262 -X2Zwcw== 66263 -IGludGltYWN5 66264 -X2Jvb2tpbmc= 66265 -IGRlY29tcG9zaXRpb24= 66266 -dW5pY2lwaW8= 66267 -IE5TSW5kZXhQYXRo 66268 -IEtS 66269 -IHR1cmJpbmU= 66270 -LXByb20= 66271 -X0NBUlQ= 66272 -KGNvb3Jkcw== 66273 -ZWNvbQ== 66274 -IGNvd2FyZA== 66275 -IHdheXBvaW50 66276 -LUNvbGE= 66277 -IHByb2ZvdW5kbHk= 66278 -IEVSUA== 66279 -Ym91bmRhcnk= 66280 -IHBvb3Jlcg== 66281 -L2V4YW1wbGU= 66282 -IHJlbmNvbnRy 66283 -IG5pY2Vy 66284 -54E= 66285 -LWNoYWlu 66286 -IEVudGl0eVN0YXRl 66287 -IGdyYWRpbmc= 66288 -QUxJR04= 66289 -IFBpY2tz 66290 -LmFr 66291 -LXZlY3Rvcg== 66292 -IEVudHJpZXM= 66293 -IFNlcmdpbw== 66294 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 66295 -T0RC 66296 -IOW9 66297 -IGNvcm9uYXJ5 66298 -IHNoYXZlZA== 66299 -IGFxdWU= 66300 -ZW1wbG95ZXI= 66301 -IHBhcmNo 66302 -IG1lYXN1cmFibGU= 66303 -IGJvaXM= 66304 -am9pbmluZw== 66305 -IHZvbGNhbm8= 66306 -Ok0= 66307 -LnRocmVzaG9sZA== 66308 -IERveWxl 66309 -dmVyYm9zaXR5 66310 -IOKWug== 66311 -IHNwb3VzZXM= 66312 -IHJlc3VtZXM= 66313 -TmF0 66314 -ek0= 66315 -X0VuYWJsZQ== 66316 -IFVTRUQ= 66317 -IENhcmV5 66318 -CWZw 66319 -UGF0cmljaw== 66320 -IE9zdw== 66321 -UG9zc2libGU= 66322 -LmxlYWRpbmc= 66323 -YWhydW5n 66324 -4pmqCgo= 66325 -CQkJCQkJCQkJIA== 66326 -44CC44CM 66327 -LmFkZEVkZ2U= 66328 -IGVjeA== 66329 -J0xCTA== 66330 -IFRDTA== 66331 -IGJpcnRocw== 66332 -IHRoZWF0cmljYWw= 66333 -IHBpag== 66334 -Z3JlYXRlcg== 66335 -IEZTdHJpbmc= 66336 -QkVE 66337 -7ZmY 66338 -LkNhc3Q= 66339 -Q1g= 66340 -L01haW4= 66341 -cGVhdGVy 66342 -IHBlcnN1YXNpdmU= 66343 -Y29udG8= 66344 -eGxzeA== 66345 -X0FCUw== 66346 -IEJ1bg== 66347 -bWFuYWdlZFR5cGU= 66348 -0LPQvg== 66349 -IFNjYWxh 66350 -cmFkb3I= 66351 -IHJlY29nbml6YWJsZQ== 66352 -dHJ1 66353 -IHRq 66354 -XE1hcHBpbmc= 66355 -X0JPQVJE 66356 -IHRvSnNvbg== 66357 -IGJvd2Vs 66358 -KWQ= 66359 -J30p 66360 -KGhXbmQ= 66361 -aHJz 66362 -Y2FudA== 66363 -X18oKQoK 66364 -IGludGVycm9nYXRpb24= 66365 -bGljYXRpdmU= 66366 -CQkJCgo= 66367 -IFR3aW5z 66368 -IEFP 66369 -QmlyZA== 66370 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 66371 -cGVyaGFwcw== 66372 -b2ZpbGU= 66373 -IHBlbmM= 66374 -IHRyZWVOb2Rl 66375 -IHRvcGljYWw= 66376 -LXByaXZhdGU= 66377 -54m5 66378 -IERpc2N1c3M= 66379 -IGRlc24= 66380 -UnVh 66381 -LlZFUlRJQ0FM 66382 -44CN44Go 66383 -SUZPUk0= 66384 -IGNvdXJ0eWFyZA== 66385 -INGB0LXRgA== 66386 -ICMjIwo= 66387 -IGVtcG93ZXJpbmc= 66388 -IEZhY2lsaXRpZXM= 66389 -XCIsXA== 66390 -vZQ= 66391 -Ok9iamVjdA== 66392 -IFZvdGVz 66393 -aXNlbA== 66394 -IGV1Y2g= 66395 -b3JzdA== 66396 -KENsb25l 66397 -LmNvb2tpZXM= 66398 -JHRtcA== 66399 -KGluZGljZXM= 66400 -ZXJnZW5jeQ== 66401 -IHBsYWd1ZWQ= 66402 -IERpYQ== 66403 -eWNsaWM= 66404 -fSkp 66405 -6rK9 66406 -IGR1ZWw= 66407 -IGhldGVyb3NleHVhbA== 66408 -LmFkZENvbXBvbmVudA== 66409 -U0VDUkVU 66410 -bGVybw== 66411 -Y29uc3RyYWludHM= 66412 -IGdldENvbm5lY3Rpb24= 66413 -IExlYmVucw== 66414 -IFBvbg== 66415 -IENocm9uaWNsZXM= 66416 -ICAgICAgICAgICAgICAgICAgICAgICAgDQo= 66417 -IE1vdXJpbmhv 66418 -IG9jY3VwYW5jeQ== 66419 -X3NsYXZl 66420 -T1JJWkVE 66421 -CVk= 66422 -LmhpZ2hsaWdodA== 66423 -X3NlbnNpdGl2ZQ== 66424 -IHNwZWN0cm8= 66425 -LmVuY3J5cHQ= 66426 -IHNwb2lsZXJz 66427 -LlNpemVNb2Rl 66428 -IHByb2Zlc3Npb25hbGlzbQ== 66429 -Pklu 66430 -RXhwaXJlcw== 66431 -QXU= 66432 -IEhWQUM= 66433 -cmVsYXRpb25z 66434 -IEFUSw== 66435 -X0dFTkVSQUw= 66436 -IFNpZ2h0 66437 -IGtpdGNoZW5z 66438 -OlJlZ2lzdGVy 66439 -IGVkbQ== 66440 -IHRvbGVyYXRlZA== 66441 -IFNFU1NJT04= 66442 -aWVyeg== 66443 -IElOU1Q= 66444 -LnBhdGhz 66445 -IHBlcnBldHJhdG9ycw== 66446 -ZWJw 66447 -cGVjdGluZw== 66448 -ZWR1Y2F0ZWQ= 66449 -IFBpb25lZXI= 66450 -X1JFVg== 66451 -IGJ1c3R5 66452 -c3RhdHVzZXM= 66453 -UmVzcG9uZA== 66454 -c2h1ZmZsZQ== 66455 -IFRpbmRlcg== 66456 -RXhhY3RseQ== 66457 -aWxsaXNlY29uZA== 66458 -INC30L3QsNGH0LXQvdC40LU= 66459 -KEFjY291bnQ= 66460 -LiY= 66461 -aXpy 66462 -YXNzdW1pbmc= 66463 -CU9wdGlvbmFs 66464 -U2VuaGE= 66465 -IGVucm9s 66466 -dHVy 66467 -IGFycm9nYW50 66468 -IEpPYmplY3Q= 66469 -b2xpdGhpYw== 66470 -bWFwcGVk 66471 -IHRpcHBlZA== 66472 -LlVQREFURQ== 66473 -w6htZXM= 66474 -R05VQw== 66475 -V1g= 66476 -IG1vbmtz 66477 -LmJvcmRlcldpZHRo 66478 -IFNodXRkb3du 66479 -IEhhcm1vbnk= 66480 -Y2xhc3NpZmljYXRpb24= 66481 -IGRlcXVldWVSZXVzYWJsZUNlbGw= 66482 -IF07DQo= 66483 -Lkdlbg== 66484 -IGxhdm9ybw== 66485 -IExlb25hcmRv 66486 -ICYp 66487 -IGRlcG9pcw== 66488 -IFZvbHQ= 66489 -RXRo 66490 -IExlb25l 66491 -IE5lZGVybGFuZA== 66492 -IEVYVFJB 66493 -UmVzb2x2ZWQ= 66494 -IHBlbmluc3VsYQ== 66495 -X1ZN 66496 -R2Vy 66497 -2KfYrw== 66498 -LnByb21wdA== 66499 -LmFsaWdu 66500 -aW5nZ2E= 66501 -ZmlsbXM= 66502 -SEFORExF 66503 -IGNhcnRz 66504 -KFNvbWU= 66505 -PEF1ZGlv 66506 -IGVubGFyZ2VtZW50 66507 -IGdyb2Nlcmllcw== 66508 -LWhvbGRlcg== 66509 -IGlycml0YXRpb24= 66510 -Q29tbXVuaWNhdGlvbg== 66511 -IHByaW1hcmllcw== 66512 -aHR1Yg== 66513 -X2luaWNpbw== 66514 -IGNvb3JkaW5hdGluZw== 66515 -KHF1 66516 -IGZhaXM= 66517 -IHZpc3Rv 66518 -Z3VpZGVk 66519 -IHZsYW4= 66520 -IGVzcHJlc3Nv 66521 -w6h0ZQ== 66522 -c2VoZW4= 66523 -X3Blbmc= 66524 -IHJvb2Zpbmc= 66525 -IEFsaXZl 66526 -QXhpc1NpemU= 66527 -IHN0dW4= 66528 -IHJlc3RlZA== 66529 -dWxsZXRz 66530 -IE1hbGF5c2lhbg== 66531 -LFVuaXR5RW5naW5l 66532 -IGVudnk= 66533 -J107DQoNCg== 66534 -IE9zdA== 66535 -X2p1bXA= 66536 -IGNvbnRyYXNlw7Fh 66537 -Ing= 66538 -CVBhZ2U= 66539 -KVsi 66540 -IFNJUA== 66541 -IEdlb2dyYXBoaWM= 66542 -IGNhdWN1cw== 66543 -X1RFUg== 66544 -4oCdOw== 66545 -UG9zdEV4ZWN1dGU= 66546 -aW1zaG93 66547 -IENPTVBBTlk= 66548 -IE5lYWw= 66549 -IEhlYXJpbmc= 66550 -KGFjdG9y 66551 -Qmlk 66552 -LlBS 66553 -LlByb2R1Y3Rz 66554 -IEVtbQ== 66555 -IOab 66556 -IHB1bHNlcw== 66557 -X0VW 66558 -L2V4cA== 66559 -X21vdGlvbg== 66560 -IGdiYw== 66561 -IG5hdmlnYXRpb25Db250cm9sbGVy 66562 -IENvdXJ0cw== 66563 -IEljb25EYXRh 66564 -d3U= 66565 -X3Jm 66566 -IFJhZ2U= 66567 -LWZsYXQ= 66568 -IEhpbXNlbGY= 66569 -X2NodW5rcw== 66570 -IG92ZXJzaA== 66571 -IGNpZg== 66572 -KElz 66573 -cGVha2Vy 66574 -IENQVXM= 66575 -aXJlY3Rvcg== 66576 -LHRpdGxl 66577 -LnNldERlc2NyaXB0aW9u 66578 -IGVhcnRocXVha2Vz 66579 -IHdu 66580 -Z2x5cGg= 66581 -dWx1bWk= 66582 -IHNwZWVkeQ== 66583 -IGVzcGFjaW8= 66584 -IGVtdWxhdGU= 66585 -IFwiJA== 66586 -X0lORg== 66587 -Y2FsbG9j 66588 -LXF1ZXJ5 66589 -KHZhbHM= 66590 -IHNlYWI= 66591 -IGhhdm9j 66592 -IEludGVyc3RhdGU= 66593 -IHRyaWFuZ3VsYXI= 66594 -YmluZGluZ3M= 66595 -CQkJCQkgICAgIA== 66596 -IAkg 66597 -YmNyeXB0 66598 -IGNyZWRpdG9ycw== 66599 -IHNlbWlm 66600 -bGxl 66601 -aWVuemE= 66602 -IEtlbGxlcg== 66603 -IG1vbnN0cg== 66604 -IE1hcmNvcw== 66605 -KHJlaW50ZXJwcmV0 66606 -IGhpdmU= 66607 -U2Ny 66608 -X2hyZXN1bHQ= 66609 -IOyhsA== 66610 -IFNxbERhdGFSZWFkZXI= 66611 -YW5ub3VuY2U= 66612 -X3ByZWZlcmVuY2Vz 66613 -IHRydXN0cw== 66614 -RXJvdA== 66615 -LXdvcmtlcg== 66616 -IHR3ZWVu 66617 -IFN0cmVldHM= 66618 -gq3soJw= 66619 -IEZyYW56 66620 -IOKApi4= 66621 -VUlUZXh0RmllbGQ= 66622 -LmdldEl0ZW1z 66623 -IHRvbHVh 66624 -4oCcT3Vy 66625 -IHPhu5E= 66626 -IHZpcnR1ZXM= 66627 -IHBvdWx0cnk= 66628 -PXJvdw== 66629 -Y29kZWQ= 66630 -Tm9TdWNo 66631 -IGtvZA== 66632 -bHNp 66633 -IGtldG8= 66634 -IGdyb3VwTmFtZQ== 66635 -YXNu 66636 -IHVuY29tcA== 66637 -IHRleHRpbGU= 66638 -dG9vbFN0cmlw 66639 -LlBvcGVu 66640 -IHByb3N0aXR1dGU= 66641 -IHByb21vdGVy 66642 -Ijt9Cg== 66643 -IGNvbGxpZGVy 66644 -QnJva2Vy 66645 -ZGF0YXNldHM= 66646 -CU5TU3RyaW5n 66647 -YW5nbGVy 66648 -UklFUw== 66649 -YXRvbXM= 66650 -IHJlbmRleg== 66651 -YXBv 66652 -IOuE 66653 -Lmdj 66654 -IFNPTUU= 66655 -IGZnZXRz 66656 -R0xF 66657 -IHphbA== 66658 -IE9wcG9zaXRpb24= 66659 -aGFuZGxlU3VibWl0 66660 -X21hdGg= 66661 -IHNwcmU= 66662 -IHNob3J0ZW5lZA== 66663 -IGNhdmVz 66664 -U01T 66665 -LWNvbnNjaW91cw== 66666 -IFNhdmVz 66667 -LkJhY2tncm91bmRJbWFnZUxheW91dA== 66668 -IGVsZWN0cm9tYWduZXRpYw== 66669 -KGl0ZXJhdG9y 66670 -IHVuYmU= 66671 -amVjdG9yaWVz 66672 -IG1lZGlhbnRl 66673 -IMOubnQ= 66674 -Iiwt 66675 -IEFTTQ== 66676 -6K6w5b2V 66677 -IGNvbmZpbmVtZW50 66678 -4oCmCgoK 66679 -RXhjZXB0aW9ucw== 66680 -LW1ham9y 66681 -IFZhbmlsbGE= 66682 -IExPQ0FUSU9O 66683 -IGVsdXNpdmU= 66684 -VUFSSU8= 66685 -IElOTElORQ== 66686 -IHByb2R1Y3ROYW1l 66687 -X3F1ZXJpZXM= 66688 -Li4uIjsK 66689 -IFhpYW8= 66690 -V2luZG93VGl0bGU= 66691 -bGV0dGVz 66692 -IHBlcnBldHVhbA== 66693 -U2V2ZXJpdHk= 66694 -IEFjaGlldmVtZW50 66695 -w6JuY2lh 66696 -IHJlbWluZGVycw== 66697 -c29ydGFibGU= 66698 -IGFmZm9yZGVk 66699 -IGluZmx1ZW5jaW5n 66700 -IFR1bm5lbA== 66701 -LmxlYXJuaW5n 66702 -IFF1w6k= 66703 -cGhldGFtaW5l 66704 -LkJBRA== 66705 -Lm1ldGFtb2RlbA== 66706 -LWRldmljZQ== 66707 -IEtvbnRha3Q= 66708 -4pSB4pSB 66709 -LXN1bW1hcnk= 66710 -KCc8Pw== 66711 -KTw9 66712 -IHdpc2VseQ== 66713 -X290 66714 -Om1vZGVs 66715 -IFVX 66716 -IE9wZW5TU0w= 66717 -IEpwYVJlcG9zaXRvcnk= 66718 -Q29uZXhpb24= 66719 -VE9U 66720 -LmNyZWF0ZWRBdA== 66721 -KHRyYWluaW5n 66722 -IGJpc2hvcHM= 66723 -IHZlbnR1cmVz 66724 -LkVucXVldWU= 66725 -IFRoZXJtYWw= 66726 -IEJyZXdlcnk= 66727 -b3Rlbg== 66728 -IEZhdGFs 66729 -X3N1cHBseQ== 66730 -IGNvbmRpdGlvbmVk 66731 -IHN1cGVyaW9yaXR5 66732 -IElicmFoaW0= 66733 -IGNvcnBv 66734 -dW91c2x5 66735 -IFByYWN0aWNhbA== 66736 -Ly9b 66737 -IEFmcmljYW5z 66738 -IEJhaHJhaW4= 66739 -IHN0ZXJpbA== 66740 -IENsYXNzTm90Rm91bmRFeGNlcHRpb24= 66741 -LlJlZ2lvbg== 66742 -IHRyYW5zaXRpb25hbA== 66743 -IGludGVycHJldGluZw== 66744 -LlNvdW5k 66745 -IGZyb250YWw= 66746 -IGhhcnZlc3Rpbmc= 66747 -fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4= 66748 -YXRhaXJl 66749 -Lkh0dHBTdGF0dXM= 66750 -S00= 66751 -IEVyb3Rpc2NoZQ== 66752 -IGVyb3Rpc2tl 66753 -RmlnaHQ= 66754 -UGFja2FnZU5hbWU= 66755 -IENBQ0hF 66756 -d2luZ0NvbnN0YW50cw== 66757 -IFppbW1lcm1hbg== 66758 -L2Nhcg== 66759 -IFF1cmFu 66760 -TWV0YWw= 66761 -IHVzZXJNYW5hZ2Vy 66762 -IG1hc3Rlcnk= 66763 -KFVVSUQ= 66764 -IHZpZXdXaWxsQXBwZWFy 66765 -IHN1bW1lZA== 66766 -KC0o 66767 -ICAgICAgIAoK 66768 -VGFrZW4= 66769 -IGNsb2Nrd2lzZQ== 66770 -IENhZsOp 66771 -KGxldHRlcg== 66772 -IENyb3NzUmVm 66773 -IEFzdG9u 66774 -IEFzc2VtYmx5VmVyc2lvbg== 66775 -6Z2e 66776 -bnRz 66777 -ICQoJ1s= 66778 -X1JBVElP 66779 -aWNpZW50ZQ== 66780 -IHJpY2h0aWc= 66781 -IHBlZGln 66782 -KGl4 66783 -0YHRi9C7 66784 -QXNzaWduYWJsZUZyb20= 66785 -Ym91bmRlZA== 66786 -IGFsa2Fs 66787 -X3ByaWNlcw== 66788 -IGfFgg== 66789 -YW5jaGlzZQ== 66790 -X3JlY2VpdmVy 66791 -SUdBVElPTg== 66792 -X3B1bGw= 66793 -IFN0YXRpc3RpY2Fs 66794 -X3Rvb2xiYXI= 66795 -YW1pZGU= 66796 -IEFzeW5jVGFzaw== 66797 -cmV0YQ== 66798 -IOyi 66799 -IFJFQUxMWQ== 66800 -IGJ1cnN0cw== 66801 -IElucXVpcnk= 66802 -IGJpZ290 66803 -c2FuaXRpemU= 66804 -IEhvbWVy 66805 -UXXDqQ== 66806 -IFJvdXRpbmc= 66807 -LmNvbGxlY3Rpb25WaWV3 66808 -IEJpbGxpb24= 66809 -U1RSVUNUT1I= 66810 -LmVqYg== 66811 -IGVuY2g= 66812 -LnNldFRpbWVvdXQ= 66813 -UnVi 66814 -LXJvYWQ= 66815 -Lm91dHB1dHM= 66816 -Y29udGVzdA== 66817 -IHNwaGVyZXM= 66818 -IHJlc3VycmVjdA== 66819 -Ii4i 66820 -IElyaXM= 66821 -IOya 66822 -IFhL 66823 -IFJhcml0eQ== 66824 -IElTZXJ2aWNl 66825 -YXRoYQ== 66826 -IOWH 66827 -IHByZXZhaWw= 66828 -CXBw 66829 -Lkxv 66830 -Z2V0V2lkdGg= 66831 -IHd3 66832 -IHdpY2h0aWc= 66833 -QEdldHRlcg== 66834 -IEpheXM= 66835 -IHNwZWN1bGF0aXZl 66836 -KGF0dA== 66837 -IHRlZGlvdXM= 66838 -IHNjcmF0Y2hlcw== 66839 -IHBlbMOtY3Vs 66840 -IGJvcm91Z2g= 66841 -IG3Dsw== 66842 -UmVwcmVzZW50 66843 -YXRvcml1bQ== 66844 -KENhbWVyYQ== 66845 -IGNvbHVtbk5hbWU= 66846 -IHJlaXRlcmF0ZWQ= 66847 -IENhc3Rpbmc= 66848 -LmdldEhlYWRlcg== 66849 -IOKAnFs= 66850 -IEp1aWNl 66851 -Y2h1 66852 -LkhUTUw= 66853 -IEFudHdvcnQ= 66854 -R0x1aW50 66855 -CUl0ZXJhdG9y 66856 -IEFOQUw= 66857 -IHVucG9wdWxhcg== 66858 -KExvY2FsZQ== 66859 -IG1pdGlnYXRpb24= 66860 -IGFkcmVz 66861 -4bq3 66862 -fSx7Cg== 66863 -IFNjaHdhcg== 66864 -X1BBSVI= 66865 -PigpLAo= 66866 -b3V2 66867 -IEFsZg== 66868 -eEVG 66869 -55yB 66870 -IGVzY3Jp 66871 -TE9VUg== 66872 -U0VMRg== 66873 -IFRtYXg= 66874 -VHJl 66875 -bG90cw== 66876 -ICguLi4p 66877 -XSsk 66878 -IGFtZXJpYw== 66879 -L3JlZmVyZW5jZQ== 66880 -IE9keXNzZXk= 66881 -IE1pbmVz 66882 -IGFnb3Jh 66883 -IHByb3BoZWN5 66884 -IE9wcG9ydHVuaXRpZXM= 66885 -cHJvZmVzc2lvbmFs 66886 -KHByb3h5 66887 -cGhhbnVtZXJpYw== 66888 -IEVkaXRlZA== 66889 -b2xvZ25h 66890 -LmlzT3Blbg== 66891 -KHZlcnRpY2Vz 66892 -IFJpY2t5 66893 -X292ZXJsYXA= 66894 -Pjs= 66895 -LkRPTQ== 66896 -e31f 66897 -IENPTVBVVA== 66898 -cmVkaXJlY3RUbw== 66899 -IHNoYWtlbg== 66900 -IHJhdGlvbg== 66901 -IG5lbGw= 66902 -X2Jj 66903 -IE5lcg== 66904 -YW5kUmV0dXJu 66905 -IGVyZWN0ZWQ= 66906 -Q2hpZWY= 66907 -IGRpbmVybw== 66908 -IGphc21pbmU= 66909 -LS0tLS0tLS0tLS0tLQo= 66910 -ZmFybQ== 66911 -IEhhdGU= 66912 -VEFTSw== 66913 -QU5ORVI= 66914 -J11dXQo= 66915 -IE5pZ2Vs 66916 -aGliaXQ= 66917 -IFFUZXh0 66918 -Lkxlbg== 66919 -IHRlxbw= 66920 -c2xpZGVz 66921 -ZmVsdA== 66922 -IFJFVg== 66923 -X2hvbGQ= 66924 -IENvdXBsZQ== 66925 -ZXNjYXBlZA== 66926 -LWV4cG9ydA== 66927 -Pkk= 66928 -ZXdpc2g= 66929 -KEFwaQ== 66930 -ICghWw== 66931 -Tm91cw== 66932 -T1RPUg== 66933 -IHNlYWxpbmc= 66934 -V2ll 66935 -IGthbm5zdA== 66936 -K3htbA== 66937 -IG14QXJyYXk= 66938 -IGFkbWlyYXRpb24= 66939 -Lm5i 66940 -IGpld2Vs 66941 -LlRlYW0= 66942 -IHByb3NlY3V0ZQ== 66943 -LnhtbGJlYW5z 66944 -Y2h3 66945 -KGJhY2tncm91bmQ= 66946 -IEF2aXY= 66947 -CWZpbGw= 66948 -IGRpc3Bhcml0eQ== 66949 -4Lo= 66950 -X0FQUEVORA== 66951 -IFB2UA== 66952 -44OQ 66953 -IFZpdmU= 66954 -IGdyYW5kc29u 66955 -LmFkZEVsZW1lbnQ= 66956 -QXRvbWlj 66957 -IHByaW1hcnlLZXk= 66958 -IGNvbnRpbmVudHM= 66959 -IEZ1Y2tpbmc= 66960 -JScK 66961 -QG1haWw= 66962 -IGN1bHR1cmFsbHk= 66963 -YW5nYW5lc2U= 66964 -7KCE 66965 -Zm9sbG93ZXJz 66966 -IHVybg== 66967 -IHJhY2tz 66968 -IFNBRkU= 66969 -Ly8NCg0K 66970 -KCIvew== 66971 -X0lOSVRJQUw= 66972 -X1Jlc3BvbnNl 66973 -RXZlbnREYXRh 66974 -Jz4k 66975 -c3RhcnRz 66976 -4Kk= 66977 -IHRoYWltYXNzYWdl 66978 -IHNwZWNpYWxpemF0aW9u 66979 -IOyEpOyglQ== 66980 -ZWRv 66981 -IGNvbXBlbnNhdGVk 66982 -X2NoYXJzZXQ= 66983 -fS57 66984 -L2VudGl0aWVz 66985 -X2Zr 66986 -LS0tLS0tCgo= 66987 -YXNjYXI= 66988 -IGNlbGxGb3JSb3dBdEluZGV4UGF0aA== 66989 -IFByb3Bvc2Fs 66990 -IE90dG8= 66991 -IF9fX19f 66992 -ICIqIg== 66993 -IHRvb2xraXQ= 66994 -IGV4cGVjdGFuY3k= 66995 -RG93bkxpc3Q= 66996 -LWRh 66997 -IHByb3ZvY2F0aXZl 66998 -IG1laW8= 66999 -ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 67000 -KCgpPT57Cg== 67001 -JGxpbms= 67002 -aW5jYXJl 67003 -IGljeQ== 67004 -IEhpc3Q= 67005 -QWNjZXB0ZWQ= 67006 -IGNsb25lcw== 67007 -IFFB 67008 -IGNvbmZvcnQ= 67009 -IHByb3ByaW8= 67010 -IFZvZw== 67011 -KG1hcms= 67012 -X1NlYXJjaA== 67013 -IGVuZHdoaWxl 67014 -ICQj 67015 -44GX44GL 67016 -X0xU 67017 -SW5zdGFuY2VJZA== 67018 -YmFyZA== 67019 -cm5l 67020 -cmVnb3I= 67021 -IG5vcmdl 67022 -XDo= 67023 -0YDRg9C3 67024 -LmJ0bkFkZA== 67025 -IHBpbGxvd3M= 67026 -IFBhcmFtZXRlckRpcmVjdGlvbg== 67027 -SGFuZGxlcw== 67028 -IGRlYWxpbmdz 67029 -IGNvbnZleA== 67030 -IENoYXJpdHk= 67031 -Lk51bWVyaWNVcERvd24= 67032 -IFNrZWxldG9u 67033 -IFp1Y2tlcmJlcmc= 67034 -ZXNlbg== 67035 -IEZBQQ== 67036 -X3N0ZQ== 67037 -IGh1bWlk 67038 -am0= 67039 -Y2hn 67040 -LmdldExvY2Fs 67041 -IHRhbmRlbQ== 67042 -aXN0bGVz 67043 -X210 67044 -LmFjY291bnRz 67045 -IEluc3BlY3Rpb24= 67046 -IEZyYXVk 67047 -IGvDvA== 67048 -IHN5bmNocm9ub3Vz 67049 -IFJpY2FyZG8= 67050 -IEh1ZQ== 67051 -IENvbm5lY3Rpb25z 67052 -SU1FTlQ= 67053 -b2NoYXN0aWM= 67054 -XGRhdGE= 67055 -IEVudGVycHJpc2Vz 67056 -LXNpbXBsZQ== 67057 -IGltYWdlRGF0YQ== 67058 -IFVtYg== 67059 -LXNjcmlwdA== 67060 -L2dlbmVyYWw= 67061 -QVBU 67062 -IFR1dA== 67063 -aW1pemF0aW9u 67064 -IGlkYWRl 67065 -IEtlbQ== 67066 -ZWxzaWY= 67067 -LkFMSUdO 67068 -IFRvcmllcw== 67069 -IEJhc2ls 67070 -b2dvbmFs 67071 -aGFjaw== 67072 -TnVsbE9yRW1wdHk= 67073 -IiksCgo= 67074 -44OD44OI 67075 -ICclJw== 67076 -X1JG 67077 -ZWdvdA== 67078 -LmFzcGVjdA== 67079 -KFByb2plY3Q= 67080 -TEVOR1RI 67081 -cGxlbWVudGFyeQ== 67082 -X3ByZWRz 67083 -IEhvbGRz 67084 -Y2Fycmllcg== 67085 -CWxheWVy 67086 -QXR0YWNoZWQ= 67087 -LXByZXNpZGVudA== 67088 -aW5kaA== 67089 -J10uJyI= 67090 -LkFDQ0VTUw== 67091 -IENFTlRFUg== 67092 -UXVhbGlmaWVk 67093 -IG9zdHI= 67094 -LlN5bWJvbA== 67095 -dGFodW4= 67096 -IExBTkc= 67097 -X2J1c2luZXNz 67098 -CVN0YXJ0 67099 -ZXJyZQ== 67100 -IGFzaGVz 67101 -IEFkdmVydGlzZW1lbnQ= 67102 -Lkhvdw== 67103 -IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 67104 -IG9ibGl2 67105 -IGJsZWVk 67106 -IHN2bw== 67107 -Lm5vZGVOYW1l 67108 -IGl0ZW1OYW1l 67109 -IEJBTks= 67110 -w61jdWxvcw== 67111 -IEVtbXk= 67112 -IERvbWluaWNhbg== 67113 -JylbJw== 67114 -IHJlYWxsb2M= 67115 -dWxzZXM= 67116 -6L6T5Ye6 67117 -IE9mZmVyaW5n 67118 -64ql 67119 -LXByb2dyYW0= 67120 -INGB0L7QvtCx0Yk= 67121 -TU9W 67122 -IG5vZGVJZA== 67123 -0LXQvw== 67124 -Zmx1aWQ= 67125 -IHRlYXNl 67126 -w7hyZQ== 67127 -IGNvbXJhZGVz 67128 -IHVucmVsaWFibGU= 67129 -IHBvc3RJZA== 67130 -Z2V0SUQ= 67131 -b2dyYXBocw== 67132 -VGFuaw== 67133 -IFFWRVJJRlk= 67134 -IGZsb2F0ZWQ= 67135 -X1RISVM= 67136 -Y2ltaWVudG8= 67137 -IE5pY2Fy 67138 -c2hy 67139 -Qm91bmRpbmdCb3g= 67140 -IGlub3JkZXI= 67141 -IEdsb3Nz 67142 -V2l0aFRpdGxl 67143 -dW5jaW8= 67144 -IHBlcnNpc3Rz 67145 -IGRpcmVjdHM= 67146 -YWNjacOzbg== 67147 -U2FtcGxlcg== 67148 -IGJsYWNrbGlzdA== 67149 -IGFEZWNvZGVy 67150 -IGludm9rZXM= 67151 -X3NraW4= 67152 -Pklm 67153 -dHJ1bmNhdGU= 67154 -LlNpbg== 67155 -c29vbg== 67156 -IGRpc2Zy 67157 -CVZlYw== 67158 -IyNf 67159 -LnNjaG9vbA== 67160 -IGJsaW5kcw== 67161 -IGFjYWI= 67162 -IHBhdGhldGlj 67163 -IHZvbGNhbmlj 67164 -IHJkZg== 67165 -IGN1bHRpdmF0ZWQ= 67166 -IFVJTmF2aWdhdGlvbkNvbnRyb2xsZXI= 67167 -IGlwdA== 67168 -IGdsYW5k 67169 -IGV2aWRlbnRseQ== 67170 -UGh5cw== 67171 -IHN3YW1w 67172 -IGltYWdlTmFtZQ== 67173 -LkxheWVy 67174 -dWZl 67175 -LFsn 67176 -IENyaW1zb24= 67177 -6YCg 67178 -PGZvb3Rlcg== 67179 -IGJpa2luZw== 67180 -INC00LDQvdC90YvQtQ== 67181 -bW92ZXM= 67182 -Y3Jj 67183 -aWxsYXRpb24= 67184 -IGxhdXJl 67185 -0YDQsNCx0L7Rgg== 67186 -0YPQug== 67187 -IENhaW4= 67188 -IHB5cw== 67189 -IGNvbGxpZGU= 67190 -IHxffA== 67191 -KHNwYW4= 67192 -IGdpbmc= 67193 -IG9iZWRpZW5jZQ== 67194 -b3V0ZXJz 67195 -U29vbg== 67196 -IFdoaXRuZXk= 67197 -IEltcG9ydHM= 67198 -OlVJVGFibGVWaWV3 67199 -KiY= 67200 -IGJr 67201 -V2l0aEVycm9y 67202 -LWV4dA== 67203 -X1JET05MWQ== 67204 -X3RyYWNraW5n 67205 -bm9vcGVuZXI= 67206 -w7xucw== 67207 -IEd0a1dpZGdldA== 67208 -c2ti 67209 -U0FWRQ== 67210 -T2Jz 67211 -KCcuJylb 67212 -IGF1dGhvcmVk 67213 -LS8= 67214 -TG91aXM= 67215 -LmdldE91dHB1dFN0cmVhbQ== 67216 -IGdlbmVyYWxpemVk 67217 -7Yw= 67218 -IGFydGlzYW4= 67219 -KGNwcw== 67220 -IERtaXQ= 67221 -0LvQuNGG 67222 -LkltYWdlTGF5b3V0 67223 -IHN1Y2hlbg== 67224 -XX0s 67225 -LmNvbGxpZGVy 67226 -VGFiUGFnZQ== 67227 -XT1b 67228 -aHlkcm8= 67229 -X3N0cmlw 67230 -IGxpY2tpbmc= 67231 -IGJvb3N0cw== 67232 -IHNrZXB0aWNpc20= 67233 -IGpvZ28= 67234 -IGNvbXBldGVk 67235 -IOuCtA== 67236 -Tm9kZVR5cGU= 67237 -WEY= 67238 -IHBvc3NpYmlsaXQ= 67239 -LWNvcHk= 67240 -IHRyaXR1cg== 67241 -IEF0dGFja3M= 67242 -IG7Dqw== 67243 -SURBRA== 67244 -b2dyYXBoaWVz 67245 -VGltZVN0YW1w 67246 -b3R5cGluZw== 67247 -LUFwcg== 67248 -INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjw== 67249 -ICI7Ig== 67250 -IEhhbGU= 67251 -L2FwaXM= 67252 -IDpdCg== 67253 -X2hkbA== 67254 -IERpYWw= 67255 -CUNvbmZpZw== 67256 -X0ZSQUdNRU5U 67257 -X0VkaXQ= 67258 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 67259 -IGNhbmRpZGFjeQ== 67260 -IENvbXByZXNzaW9u 67261 -X2xvc3Nlcw== 67262 -Kj4oJg== 67263 -SW50ZWdyYWw= 67264 -IHBhcm9keQ== 67265 -IGluaXRpYWxpc2U= 67266 -ZmlsbHM= 67267 -IGFsdHJp 67268 -X0VMRU1FTlRT 67269 -YWRhc3RyYXI= 67270 -Y29ycmVv 67271 -IHdhdHQ= 67272 -X0RSVg== 67273 -IEZvcmdvdA== 67274 -IGdldENvbnRleHQ= 67275 -IHNob3J0YWdlcw== 67276 -IE9DVA== 67277 -d2VldGFsZXJ0 67278 -IE9wZW5z 67279 -Kmw= 67280 -IEtpdHR5 67281 -4oCZw6l0 67282 -IFBpY2Fzc28= 67283 -LnRvQnl0ZUFycmF5 67284 -0L7Qu9GD0Yc= 67285 -IERFTg== 67286 -5aeT5ZCN 67287 -V2ludGVy 67288 -YW50YW4= 67289 -X19b 67290 -UHJpbQ== 67291 -IHJvb2Z0b3A= 67292 -IEJpbGxib2FyZA== 67293 -dGVzdENhc2U= 67294 -cHJvZHV0bw== 67295 -LXRodW1i 67296 -IHJlc2V0cw== 67297 -Z2Vibg== 67298 -PkVycm9y 67299 -LmRlcGFydG1lbnQ= 67300 -IGVhcnJpbmdz 67301 -IENhcm91c2Vs 67302 -KGV4YW1wbGU= 67303 -CWVt 67304 -XENvbnRhaW5lcg== 67305 -IEVsdmlz 67306 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 67307 -RW5nbGFuZA== 67308 -Y3JlZGl0ZWQ= 67309 -X2NvbnN0cnVjdG9y 67310 -IGxvcg== 67311 -IERhd3Nvbg== 67312 -QnVybg== 67313 -IEJyaWdhZGU= 67314 -IE11dGV4 67315 -IFRyYW5zaXRpb25hbA== 67316 -IE1vdXNlRXZlbnQ= 67317 -Z3Jvdw== 67318 -Lm1pbnV0ZQ== 67319 -IEdNTw== 67320 -PVtdLA== 67321 -IHN1c2hp 67322 -IGFlc3RoZXRpY3M= 67323 -T0NVUw== 67324 -IFNFTEY= 67325 -IEFzc2VydGlvbkVycm9y 67326 -IE1DVQ== 67327 -IGhpbnRUZXh0 67328 -IHNlYXc= 67329 -bmdsZQ== 67330 -IGV4cGVsbGVk 67331 -UFJPUEVSVFk= 67332 -KS48Lw== 67333 -LW9wZXJhdGlvbg== 67334 -IEltbXVu 67335 -IGxpY2Vucw== 67336 -aWJpYQ== 67337 -IGJpZXRlbg== 67338 -IGdyaXBz 67339 -Q0hBTk5FTA== 67340 -X0VSUk9SUw== 67341 -X3JlY3Vyc2l2ZQ== 67342 -VWx0aW1hdGVseQ== 67343 -IE1hamVzdHk= 67344 -IGRlYWN0aXZhdGU= 67345 -IEVYQU1QTEU= 67346 -dWNpb25lcw== 67347 -IGN1cnJlbnRWYWx1ZQ== 67348 -IGV2YWx1YXRlcw== 67349 -L0dyYXBoaWNz 67350 -InRleHQ= 67351 -X3BhbGV0dGU= 67352 -IFRNUA== 67353 -IEJlZHM= 67354 -LkNvcw== 67355 -4Lix4LiZ 67356 -PXRvcmNo 67357 -IFBBQ0tBR0U= 67358 -aWxsYXJk 67359 -LmNw 67360 -leyduA== 67361 -LWFwcHJvdmVk 67362 -IE5vcnRod2VzdGVybg== 67363 -PHRleHRhcmVh 67364 -IENvbXBhdGlibGU= 67365 -X1JEV1I= 67366 -LlF1YW50aXR5 67367 -QElk 67368 -X29yaWVudGF0aW9u 67369 -Z2V0VXJs 67370 -IHRyYW5zbGF0aW5n 67371 -IFdlYXZlcg== 67372 -IGpzb25BcnJheQ== 67373 -IGVtYmxlbQ== 67374 -LklzTnVsbA== 67375 -IENoYXJ0cw== 67376 -W119 67377 -Z2Fl 67378 -X25lc3RlZA== 67379 -dGVtcHM= 67380 -cGF0aG5hbWU= 67381 -Q1c= 67382 -LXdyaXR0ZW4= 67383 -IFBBUks= 67384 -KGNvbmQ= 67385 -X2FsYXJt 67386 -IGdlcmU= 67387 -IEdpeg== 67388 -IE5nYg== 67389 -IC5f 67390 -YXBwaW5lc3M= 67391 -IERlcGxveW1lbnQ= 67392 -aVBhZA== 67393 -Il1d 67394 -IHN0cnN0cg== 67395 -IHRvbnVtYmVy 67396 -KGRs 67397 -CXdvcmQ= 67398 -W3Rv 67399 -X0ZJWEVE 67400 -RXhwaXJhdGlvbg== 67401 -OnJldHVybg== 67402 -T250 67403 -PlBsZWFzZQ== 67404 -Z2V0VGl0bGU= 67405 -LnNwbGl0ZXh0 67406 -Y29tYmluZWQ= 67407 -T2Q= 67408 -IG5vdmVsdHk= 67409 -IlM= 67410 -IHN2bQ== 67411 -Q292ZXJhZ2U= 67412 -IEh1dA== 67413 -IHJlc2lzdGVk 67414 -IGVsbG8= 67415 -IG3DtmNodGU= 67416 -S2F5 67417 -Lmxpa2U= 67418 -Y2Npb25l 67419 -IHJlc2VtYmw= 67420 -RGVhdGhz 67421 -IGVwaXQ= 67422 -KHJnYg== 67423 -LkNsYXNzZXM= 67424 -INC00L7RgdGC 67425 -Y2FwdHVyZXM= 67426 -XStc 67427 -YW1pZW50 67428 -IFBhc28= 67429 -LlNlbmRNZXNzYWdl 67430 -IFJlbmF1bHQ= 67431 -IE5hcmVuZHJh 67432 -dG91dA== 67433 -IGhhZGRl 67434 -IFR3ZWVu 67435 -w6VkZQ== 67436 -IG91dGZpZWxk 67437 -Lz48Lw== 67438 -QFw= 67439 -IER1cmFudA== 67440 -IGFicmU= 67441 -X3N0b3J5 67442 -IHBlcmZ1bWU= 67443 -Q3BwVHlwZURlZmluaXRpb25TaXplcw== 67444 -INC/0LDRgNCw0LzQtdGC 67445 -Y2hlbWVz 67446 -IFNhZGRhbQ== 67447 -cHJlbm9t 67448 -dXNwZW5kZWQ= 67449 -IEJlbmVmaXQ= 67450 -IHNjZXB0 67451 -X01vdmU= 67452 -IE5hag== 67453 -LU9u 67454 -cnVk 67455 -SW1hZ2VQYXRo 67456 -wq4s 67457 -IGFuYWx5c2Vk 67458 -IE9H 67459 -ZWxsZWljaHQ= 67460 -YmlyZHM= 67461 -ZWt0ZQ== 67462 -IEFsaXNvbg== 67463 -IGF0aGVpc3Q= 67464 -eyU= 67465 -YWJo 67466 -LXBob3Rv 67467 -aW5zdHJ1bWVudA== 67468 -IGhpbnRlZA== 67469 -IE9mZmxpbmU= 67470 -KSIpOwoK 67471 -X1BSRUY= 67472 -IHN0eWxpc3Q= 67473 -IEt1YmVybmV0ZXM= 67474 -IGZlcnY= 67475 -CgoKCgoKCgoKCgoKCgo= 67476 -KCI9Ig== 67477 -LmdldE0= 67478 -IG5vdGV3b3J0aHk= 67479 -IHNjb3V0aW5n 67480 -X3RyYW5zbGF0ZQ== 67481 -IGJlZ2lubmluZ3M= 67482 -IEx1bw== 67483 -IHFs 67484 -X2FsaWduZWQ= 67485 -IGVydw== 67486 -dWFycw== 67487 -X1BhdGg= 67488 -LicuJA== 67489 -IGhvYw== 67490 -IGRlcnA= 67491 -bG9p 67492 -IE1jS2lu 67493 -6K+05piO 67494 -Lz0= 67495 -TGlua0lk 67496 -c3RkZGVm 67497 -cmVkdWNlcnM= 67498 -aXNhbnM= 67499 -Lmhpc3Q= 67500 -Jy8+Cg== 67501 -IFRveGlj 67502 -IGRpc2FwcGVhcmluZw== 67503 -IGNpcw== 67504 -KGRv 67505 -IG1haW5TY3JlZW4= 67506 -X0JBTks= 67507 -IGRlbW9uc3RyYXRvcnM= 67508 -IFBhbGV0dGU= 67509 -dWVseQ== 67510 -UmFyZQ== 67511 -IHJlc2lkaW5n 67512 -IGFtYmllbnRl 67513 -IG1pc20= 67514 -LXF1ZXN0aW9u 67515 -IG9wcHJlc3NlZA== 67516 -IGxldHJh 67517 -PGR5bmFtaWM= 67518 -IEZvdG9z 67519 -LXBvbGljeQ== 67520 -aXN0ZW0= 67521 -LmV4Y2hhbmdl 67522 -c3RyZQ== 67523 -JC8s 67524 -7ZWY6riw 67525 -JAoK 67526 -IFJlbmU= 67527 -IHRvdXRlZA== 67528 -LUNvcmU= 67529 -IENyYW4= 67530 -IFRyYWRlcg== 67531 -IGRldw== 67532 -IGZsYXA= 67533 -CWZpbGVuYW1l 67534 -IGlubWF0ZQ== 67535 -KE1vY2s= 67536 -IFNvYg== 67537 -aXNibg== 67538 -IG5vZQ== 67539 -IEZvcmJpZGRlbg== 67540 -IGVsZXM= 67541 -IGRpbmc= 67542 -X3Nh 67543 -KSovCg== 67544 -YXJpZQ== 67545 -IFN1cHBvcnRz 67546 -IG1vZHVsYXRpb24= 67547 -IGVuc2w= 67548 -IFNoYWRvd3M= 67549 -cHJpbmNpcGFs 67550 -YW5nZW50 67551 -LUphbg== 67552 -IFBhbnRz 67553 -LHRy 67554 -IGZpdHRl 67555 -IGdhcm1lbnRz 67556 -TWFyZ2lucw== 67557 -TFRS 67558 -IE1peQ== 67559 -dmVudHVz 67560 -IE3DtmdsaWNo 67561 -W2F0dHI= 67562 -L3Jlc3BvbmQ= 67563 -IHR0aw== 67564 -IG9sZHXEnw== 67565 -IENvbnNl 67566 -UHJlbWl1bQ== 67567 -IGZyYW5jYWlzZQ== 67568 -X2hvcml6b250YWw= 67569 -X2li 67570 -IEZhcmU= 67571 -IGhhcnZlc3RlZA== 67572 -ZW5kaXI= 67573 -KGhpdA== 67574 -PiovCg== 67575 -IElSZXBvc2l0b3J5 67576 -eWxpZQ== 67577 -IGRldGVjdHM= 67578 -Om5v 67579 -4pi0 67580 -IGRpc2XDsQ== 67581 -IHVuc2VyZW4= 67582 -IG1vY2tpbmc= 67583 -c291dGg= 67584 -cmF0ZXM= 67585 -IGh5cG9j 67586 -IFNob3J0bHk= 67587 -IEJsYWNrcw== 67588 -0YLQuNGA0L7Qsg== 67589 -IEFTQVA= 67590 -cmViYmU= 67591 -aWVj 67592 -LkFkZERheXM= 67593 -IGVwaXM= 67594 -LWluZmxhbW1hdG9yeQ== 67595 -LW5ldA== 67596 -IHBhbGw= 67597 -65Q= 67598 -IGlzc3VhbmNl 67599 -IGNvbnRlbnRpb3Vz 67600 -LkFyZWFz 67601 -0LjQu9GM 67602 -IGNvbnRpZ3VvdXM= 67603 -W2FjdGlvbg== 67604 -IGV4cHJlcw== 67605 -ISIpCgo= 67606 -VUxP 67607 -IHdyZQ== 67608 -IHN1YmRpdg== 67609 -IHR1cm5hcm91bmQ= 67610 -IGFjY2Vs 67611 -IFVuaXY= 67612 -IFVuaXZlcnNpZGFk 67613 -c2V0dA== 67614 -ZGVzY3I= 67615 -LkdlbmVyYXRpb24= 67616 -IHBhdHJpb3Q= 67617 -IGZhcw== 67618 -KioqKgo= 67619 -UVA= 67620 -IOWN 67621 -b3BwZWw= 67622 -IGp1ZWdvcw== 67623 -LmRyYXdTdHJpbmc= 67624 -LWNvbmZpcm0= 67625 -CSAgICAgICAgICAgICA= 67626 -PFByb3Bz 67627 -IGZhbWlsbGU= 67628 -IEhlbG1ldA== 67629 -ZXJ0aWFyeQ== 67630 -YXRoaQ== 67631 -IGN1bHRpdmF0ZQ== 67632 -IGR1cGxpY2F0aW9u 67633 -IHNweU9u 67634 -Ki8pCg== 67635 -IEh1bmdlcg== 67636 -T3J0aA== 67637 -IHBpbnBvaW50 67638 -IEhhZw== 67639 -IHRpbWV0YWJsZQ== 67640 -bWFyZ2luVG9w 67641 -IHJlY2lwcm8= 67642 -ZmVsbA== 67643 -IFBlcnNpc3RlbnQ= 67644 -44Gp 67645 -cGx1cmFs 67646 -cXVldWVk 67647 -IGdyYWNpYXM= 67648 -w6F0aWNv 67649 -IGhhcmRzaGlw 67650 -IEFwYXJ0bWVudHM= 67651 -IEp1bms= 67652 -IFJldmU= 67653 -X01zaw== 67654 -IHN1cHJh 67655 -IEFUUA== 67656 -IHNldFNob3c= 67657 -5a2X56ym5Liy 67658 -IE5vdHRpbmdoYW0= 67659 -U3RldmVu 67660 -IE11bmQ= 67661 -cmFuZ2Vz 67662 -IHVwbG9hZHM= 67663 -IGJmcw== 67664 -cHo= 67665 -dWx0aW1hdGU= 67666 -IEVmZmljaWVuY3k= 67667 -QU1J 67668 -5b6E 67669 -X1JFUEVBVA== 67670 -IGFjYWRlbWlh 67671 -LnRvb2xTdHJpcEJ1dHRvbg== 67672 -VG9FbmQ= 67673 -cnZpbmU= 67674 -IFRoeQ== 67675 -IEVsZWN0b3JhbA== 67676 -IFJFUVVJUkVE 67677 -IHBsdW5nZQ== 67678 -IFJldm9sdXRpb25hcnk= 67679 -IFRlbnQ= 67680 -IGdyZW5hZGU= 67681 -IjpbeyI= 67682 -IG1vdXI= 67683 -UG93 67684 -IGV2YW5nZWxpY2Fs 67685 -VEVDVEVE 67686 -IG92ZXJ0dXJu 67687 -CUlucHV0 67688 -cmVjb21tZW5k 67689 -JUM= 67690 -IHNsYWc= 67691 -IEJoYXI= 67692 -X2VuY3J5cHQ= 67693 -IFdhcmZhcmU= 67694 -KGFnZQ== 67695 -QVRFR09SSUVT 67696 -bWlsZQ== 67697 -IGhlYXZlbmx5 67698 -YW1tZXI= 67699 -KCkpWw== 67700 -YWRlcmE= 67701 -aGc= 67702 -IExBVw== 67703 -IHBhY2thZ2VOYW1l 67704 -X3R5cGVEZWZpbml0aW9u 67705 -KGJl 67706 -REJOdWxs 67707 -X3Rhcg== 67708 -IGhldXJpc3RpYw== 67709 -IFdhbnRlZA== 67710 -IFN0dWI= 67711 -IGtpdHQ= 67712 -UkVD 67713 -IHBhc2Fy 67714 -Lm5ld0J1aWxkZXI= 67715 -CWdyYXBo 67716 -aW9zYQ== 67717 -LmNvbHVtbkhlYWRlcg== 67718 -IHNldE9wZW4= 67719 -IFRoaXJ0eQ== 67720 -ICIlLg== 67721 -QWxiZXJ0 67722 -IHNhbWE= 67723 -IHJvY2tpbmc= 67724 -Q29tcGxl 67725 -TVY= 67726 -fCgpCg== 67727 -X3JlYWRz 67728 -KHZhcmFyZ2lu 67729 -b3Vsb3VzZQ== 67730 -IFNJTUQ= 67731 -IGNhcmJvaHlkcmF0ZQ== 67732 -d2hvbGU= 67733 -LE5vbmU= 67734 -i+ivlQ== 67735 -IENoYW5k 67736 -Y3phcw== 67737 -X3F1ZXJ5c2V0 67738 -IGV4aXN0ZW50aWFs 67739 -IGVkaWJsZQ== 67740 -IGFnaWxpdHk= 67741 -IFdpbGxpcw== 67742 -IGh5bQ== 67743 -IEJyaWxs 67744 -0LjRhQ== 67745 -IE5vdEZvdW5kRXhjZXB0aW9u 67746 -ICgoKQ== 67747 -QVBTSE9U 67748 -IHN1YnN0YW50aXZl 67749 -X3R5cGVEZWZpbml0aW9uU2l6ZQ== 67750 -IHZhY2FuY2llcw== 67751 -RU5HSU5F 67752 -IGFuZGVycw== 67753 -IHN5bWI= 67754 -IGV0cmVl 67755 -KS5f 67756 -IHRyYW5zcG9ydGluZw== 67757 -aW1wcw== 67758 -L2NvcA== 67759 -YWN0YWJsZQ== 67760 -X2ZsdXg= 67761 -IG5ld0luc3RhbmNl 67762 -YXRvaXJl 67763 -IGNvbHVtbkluZGV4 67764 -IEdpbw== 67765 -IHN1YnRpdGxlcw== 67766 -LldpbkZvcm1z 67767 -0LvRj9C10Lw= 67768 -IGFsZXJ0ZWQ= 67769 -IHN0cmlwcGluZw== 67770 -d2VuZHVuZw== 67771 -IE1ldGhvZEludm9jYXRpb24= 67772 -RXJyb3JIYW5kbGVy 67773 -U2Nyb2xsYmFy 67774 -UG9ydGZvbGlv 67775 -Y29uc3Vt 67776 -IENPTU1PTg== 67777 -TGY= 67778 -X2Jhc2Vk 67779 -b2NhbHk= 67780 -IGVmZmV0 67781 -dnZt 67782 -cmlwc2k= 67783 -IGZsb3VyaXNo 67784 -Y2h0ZXI= 67785 -PT09PT09PT09Cg== 67786 -IHJlcXVlcg== 67787 -LnF1ZXN0aW9ucw== 67788 -KCI/ 67789 -IHBvc1g= 67790 -IFBDUg== 67791 -IE9yZ2FuaXphdGlvbnM= 67792 -cHLDvA== 67793 -RXhhbQ== 67794 -IEluY29ycG9yYXRlZA== 67795 -X3BocmFzZQ== 67796 -IHByYXllZA== 67797 -IGhvbWVvd25lcg== 67798 -IFRhag== 67799 -eng= 67800 -IElkZWFsbHk= 67801 -X01BQ0hJTkU= 67802 -IFJlbW92aW5n 67803 -Q29lZmZpY2llbnQ= 67804 -IGVkdWNhdGluZw== 67805 -ID8+Jg== 67806 -IHBvdXJz 67807 -aXJhbQ== 67808 -X3BlYWs= 67809 -IG5lc3Rpbmc= 67810 -YWJ5dGU= 67811 -bmF0dXJl 67812 -IGFmcw== 67813 -IFJvbw== 67814 -Y2FyZ28= 67815 -b2JqZXQ= 67816 -IGZyZWVpbmc= 67817 -cXVha2U= 67818 -RGVuc2l0eQ== 67819 -IGRlc2NyaWNhbw== 67820 -LyoqKioqKioq 67821 -IGRhc2hlZA== 67822 -IGdyb8Of 67823 -b29reQ== 67824 -IFBFT1BMRQ== 67825 -X1Bvc3Q= 67826 -IGNlcnZpY2Fs 67827 -IEFkanVzdGFibGU= 67828 -ZW5zdWFs 67829 -IFJldmlzZWQ= 67830 -KHJlZmVyZW5jZQ== 67831 -CUJhc2U= 67832 -ZXNzaW0= 67833 -TWFpbnQ= 67834 -IGdldFNpemU= 67835 -IFNhbmR3aWNo 67836 -cmFkaWVudA== 67837 -c2luaw== 67838 -Oi8vJw== 67839 -X3R0 67840 -RlBT 67841 -IEFybWVuaWFu 67842 -cHJldlN0YXRl 67843 -X0xJTkVT 67844 -IHRpZ2h0ZW4= 67845 -PFs= 67846 -XTw8Ig== 67847 -IFRyYWZm 67848 -IGxpcXVpZHM= 67849 -IGFyY3M= 67850 -X0NvbW1hbmQ= 67851 -QHByb3RvY29s 67852 -LWlzaA== 67853 -IHJ1YmJlZA== 67854 -QkJD 67855 -L2ZpcmViYXNl 67856 -QXBwQmFy 67857 -PFg= 67858 -IFNJTkdMRQ== 67859 -LlN0YXR1c0ludGVybmFsU2VydmVyRXJyb3I= 67860 -IHZlcnRl 67861 -L3F1ZXJ5 67862 -IGdldENvbmZpZw== 67863 -IERpcmVjdFg= 67864 -cGh5c2ljcw== 67865 -eWNvcA== 67866 -IGJyZWFrZXI= 67867 -LXZvbHVtZQ== 67868 -ZGF0YVRhYmxl 67869 -4oCZZQ== 67870 -cmlvdHQ= 67871 -IEV0ZXJuYWw= 67872 -Z2V0SGVpZ2h0 67873 -IG9uSXRlbUNsaWNr 67874 -IHF1YXRlcm5pb24= 67875 -IGtpbmt5 67876 -ZGVzZXJpYWxpemU= 67877 -KFNwcmluZw== 67878 -IHBlYWNlZnVsbHk= 67879 -X0RldmljZQ== 67880 -KE1hdHJpeA== 67881 -acOocmVtZW50 67882 -KHR5cA== 67883 -LnZhYWRpbg== 67884 -LmdldE1ldGhvZA== 67885 -IOKAnQoK 67886 -IHRocmVhZGVk 67887 -IEZhbW91cw== 67888 -IEdhbWI= 67889 -IOyngA== 67890 -INCk 67891 -IGZha3Q= 67892 -IGVjaHQ= 67893 -X3Vi 67894 -LkpwYVJlcG9zaXRvcnk= 67895 -IHVuZ2U= 67896 -LWVuZGluZw== 67897 -IENBTUVSQQ== 67898 -Y3JlZGVudGlhbA== 67899 -IFBhc3Nwb3J0 67900 -CVJUREJH 67901 -IGV4dHJhZA== 67902 -LW9yaWdpbg== 67903 -IHNhY3JpZmljZWQ= 67904 -IFNjaHVsdHo= 67905 -IFR1cnRsZQ== 67906 -LmNlbnRlclg= 67907 -IHNob3djYXNpbmc= 67908 -IGJ6dw== 67909 -eXJv 67910 -aXNOdWxs 67911 -LmlzRGlyZWN0b3J5 67912 -bWFpbnQ= 67913 -X2Jp 67914 -IFNwcmluZ2Vy 67915 -fSgpCgo= 67916 -aXNzdWVy 67917 -LWFybQ== 67918 -ZXNr 67919 -bGluaGE= 67920 -IGtvcnQ= 67921 -YWphcw== 67922 -YWxpbms= 67923 -KEJ1dHRvbg== 67924 -IFJlc3RvcmF0aW9u 67925 -IGluY3I= 67926 -IFpob3U= 67927 -CSAgICAgICAgCQ== 67928 -IERpc2NsYWltZXI= 67929 -IGt2aW5ub3I= 67930 -IERhcmU= 67931 -IDwtPg== 67932 -6K+m 67933 -CQkJCQkJCQkJCQo= 67934 -LkNsYW1w 67935 -CXNjb3Bl 67936 -IE11bQ== 67937 -PDw8PDw8PA== 67938 -L3t7 67939 -X2FydGlzdA== 67940 -IFJlYWN0aW9u 67941 -IE5pY2tlbA== 67942 -X1JlbW92ZQ== 67943 -KCgoKA== 67944 -64yA 67945 -IGR5bmFzdHk= 67946 -IFRocm93cw== 67947 -IENvdWw= 67948 -X3JuZw== 67949 -IERvaw== 67950 -Lmxpc3RWaWV3 67951 -IFR1Y3Nvbg== 67952 -KHRvaw== 67953 -IFBoaWxpcHBl 67954 -VG9TaG93 67955 -IGRpZXRh 67956 -IFVsdHI= 67957 -LlRpY2s= 67958 -IEdldFR5cGU= 67959 -aWV0ZQ== 67960 -IExlYWg= 67961 -SGFyZHdhcmU= 67962 -IENvbXByZWhlbnNpdmU= 67963 -Q09NTU9O 67964 -IGluZHVzdHJp 67965 -aXJpY2Fs 67966 -LWJlZHJvb20= 67967 -IGd5cm8= 67968 -INC60L7RgA== 67969 -IC0vCg== 67970 -Y291cg== 67971 -IEJydXNoZXM= 67972 -TXVsdGlwbGllcg== 67973 -IHVzZXJkYXRh 67974 -IFJlY29nbg== 67975 -IG9ibGlnYXRlZA== 67976 -IExldmlu 67977 -YW5jZXN0b3I= 67978 -IG1lbmluZw== 67979 -IFVk 67980 -LGpzb24= 67981 -KGFzc2lnbg== 67982 -IG5kYXJyYXk= 67983 -X2Nvcm5lcg== 67984 -QEFsbEFyZ3NDb25zdHJ1Y3Rvcg== 67985 -6aqM6K+B56CB 67986 -YWRvcnM= 67987 -IHJlc3BvbmRlbnQ= 67988 -R09SSVRI 67989 -IHRlbmdv 67990 -IHNldE1lc3NhZ2U= 67991 -IElQTw== 67992 -YXJyYXlz 67993 -IEFHQUlO 67994 -J1s= 67995 -ICItLy8= 67996 -w6Rt 67997 -44CCXA== 67998 -Lm9uY2U= 67999 -Y3VycmVudFRpbWU= 68000 -R292 68001 -IGdldG9wdA== 68002 -bWx4 68003 -IFRvbmU= 68004 -J11dOwo= 68005 -IHByZWRhdG9y 68006 -V3k= 68007 -L2VudGl0eQ== 68008 -IG1hbnRyYQ== 68009 -KT49 68010 -b2dyYWQ= 68011 -IG1lbGFu 68012 -IHNvcnRCeQ== 68013 -IERFRklORQ== 68014 -UHJvdGVjdGVk 68015 -Y2RlY2w= 68016 -Jz4iLiQ= 68017 -PGN2 68018 -Y3JpcmU= 68019 -LVRydW1w 68020 -IHVjZmlyc3Q= 68021 -Y2Fzc2VydA== 68022 -IGFja25vd2xlZGdlbWVudA== 68023 -IElOVg== 68024 -IFVOVQ== 68025 -LnNxdWFyZXVw 68026 -IFNheA== 68027 -cmV0dGU= 68028 -KCkKCgoK 68029 -IERhdGFCYXNl 68030 -IFBhdHJpb3Q= 68031 -X1Jvdw== 68032 -IEV4aGliaXRpb24= 68033 -IGRldGFpbmVlcw== 68034 -IFN0cmluZ0lP 68035 -X0RFTg== 68036 -TW9kaWZpZXJz 68037 -YXNhcg== 68038 -aXJ0aW5n 68039 -IHRyYW5xdWls 68040 -KGVuYw== 68041 -IOOCsw== 68042 -bmNvZGVy 68043 -X3VudXNlZA== 68044 -IEJpYW4= 68045 -VmVyYg== 68046 -X2V4Y2VycHQ= 68047 -L2V4cG9ydA== 68048 -IFNleHQ= 68049 -RHM= 68050 -QU1QTA== 68051 -T2ZTdHJpbmc= 68052 -X3RyYWNrcw== 68053 -d2o= 68054 -b3Rvbmlu 68055 -IElURQ== 68056 -SVZFTg== 68057 -LW9yaWdpbmFs 68058 -IEZJTkFM 68059 -X18pCgoK 68060 -IGVuc2U= 68061 -IFV0dA== 68062 -Oioq 68063 -IFN1cnJleQ== 68064 -IEthaXNlcg== 68065 -YWRtaW5pc3RyYXRvcg== 68066 -LWxhcmdlc3Q= 68067 -IGxldHp0ZW4= 68068 -IGNoYWluZWQ= 68069 -J0g= 68070 -IGRvY3VtZW50aW5n 68071 -IExlY3R1cmU= 68072 -Ukg= 68073 -b2xsYXBzZWQ= 68074 -c2tpcnRz 68075 -ZWxkZXI= 68076 -IFNpeHRo 68077 -IGFsbGVnaWFuY2U= 68078 -SVNPU3RyaW5n 68079 -VXNhZ2VJZA== 68080 -LmhhcmR3YXJl 68081 -IHBhcmk= 68082 -IHfDpGhyZW5k 68083 -IHJkcg== 68084 -IGhqZW0= 68085 -TE9PUg== 68086 -IExQQVJBTQ== 68087 -INC80L7QttC10YI= 68088 -IGhvbWFnZQ== 68089 -b3V0c2lkZQ== 68090 -IENoYXJTZXQ= 68091 -PEdhbWU= 68092 -77yZ 68093 -X01VVEVY 68094 -KSkvKA== 68095 -X3Jlb3JkZXJlZA== 68096 -dGV4dElucHV0 68097 -QU5DRUQ= 68098 -IFRlZQ== 68099 -IGNvcm5lcmJhY2s= 68100 -UXVlcnlTdHJpbmc= 68101 -IGxvbmdpdHVkaW5hbA== 68102 -IEhvbGlkYXlz 68103 -QUJDREVGRw== 68104 -LktleVByZXNz 68105 -LnVs 68106 -eWRybw== 68107 -IFRhdGU= 68108 -CXJvdXRlcg== 68109 -c3BvdHM= 68110 -IHBhdWw= 68111 -LXByZXY= 68112 -IGtub3dpbmdseQ== 68113 -IEt1cmRz 68114 -IEV1cm9w 68115 -LmNlcnQ= 68116 -QklH 68117 -KGNvZWZm 68118 -IENsYXVz 68119 -L2V4YW1wbGVz 68120 -IEZhcm1z 68121 -IC8vKA== 68122 -U1BBTg== 68123 -IGNpcmN1cw== 68124 -IE1JUw== 68125 -IFRyYWl0cw== 68126 -LWNsZWFy 68127 -IHJlZ2ltZW4= 68128 -IGJhY2tncm91bmRJbWFnZQ== 68129 -dXNhaGE= 68130 -X01ldGFkYXRhVXNhZ2VJZA== 68131 -IHJoZQ== 68132 -Q2xpbg== 68133 -IERvbWluaWM= 68134 -Lm5leHREb3VibGU= 68135 -KGRldGFpbA== 68136 -VGhyZWFkUG9vbA== 68137 -IENhcnBlbnRlcg== 68138 -c29ydGluZw== 68139 -IGdvdmVybm9ycw== 68140 -IHNpbmdlcnM= 68141 -dW5saW5r 68142 -IHJpbmdpbmc= 68143 -IHNjaGVtYXRpYw== 68144 -IGVycm1zZw== 68145 -IGJlYg== 68146 -LiIr 68147 -IEluY3JlYXNlcw== 68148 -IkFsbA== 68149 -IGFjb250ZQ== 68150 -emlh 68151 -LlRleHRDaGFuZ2Vk 68152 -IFRvRG8= 68153 -LDopOwo= 68154 -bmFnZQ== 68155 -Y2hs 68156 -b3dlbA== 68157 -IGdlcmFkZQ== 68158 -X2ZmdA== 68159 -IGVzdGFtb3M= 68160 -U1RBUg== 68161 -IGRpc2d1c3Q= 68162 -Z3Jhbg== 68163 -cG9ydHVuaXR5 68164 -IGF1dG9iaQ== 68165 -e317Cg== 68166 -IENvdXBvbnM= 68167 -X0dBSU4= 68168 -IFRDSEFS 68169 -L3Bhc3M= 68170 -55Sx 68171 -IGZvb3R3ZWFy 68172 -KGJvdW5kcw== 68173 -YXB1cw== 68174 -Y2l0ZQ== 68175 -Qk9PVA== 68176 -IENvZGVj 68177 -bG9ndWU= 68178 -LXByb3BlcnRpZXM= 68179 -YXV0b21hdGlvbg== 68180 -IFNob2U= 68181 -c3BlY3Q= 68182 -KG1t 68183 -IEtldA== 68184 -W3BhcmFt 68185 -IGJhc2ls 68186 -IEFuZ3VsYXJGaXJl 68187 -IGFkdmVudHVyb3Vz 68188 -X1VDbGFzcw== 68189 -IGluZHVsZ2U= 68190 -CWN1ZGE= 68191 -IGluc3VsdGluZw== 68192 -LkV4cHJlc3Npb25z 68193 -IG9uQ3JlYXRlT3B0aW9uc01lbnU= 68194 -VUVM 68195 -IGJpdGluZw== 68196 -KCFf 68197 -IEVuY3ljbG9wZWRpYQ== 68198 -IGJlcnQ= 68199 -IFZlcmE= 68200 -IEJpYmxpY2Fs 68201 -aW5zaWNz 68202 -X1NJTVBMRQ== 68203 -IHNhbGlkYQ== 68204 -cmVxdWVzdGVk 68205 -IENvbXBvc2l0aW9u 68206 -LkF0b2k= 68207 -KEtleUV2ZW50 68208 -ZXJlYQ== 68209 -IGRlcG9ydGVk 68210 -IFF1cg== 68211 -IG5pcHBsZXM= 68212 -aXNBcnJheQ== 68213 -INGD0LrQsNC3 68214 -IGJyaW5r 68215 -bWV0cm9z 68216 -RW51bWVyYXRpb24= 68217 -IEJ1aWxkcw== 68218 -ZXJ0b3M= 68219 -IHNhaW50cw== 68220 -LmRlcGxveQ== 68221 -ZXRoZXJldW0= 68222 -IGtpbmRlcmdhcnRlbg== 68223 -dmFuaXplZA== 68224 -IGNvbWJpbg== 68225 -IHBvdXZvaXI= 68226 -S2lu 68227 -YXLEsQ== 68228 -IC4uLi4u 68229 -77y+ 68230 -Lkdv 68231 -IHF1aXJreQ== 68232 -xLFuZGFu 68233 -IGFjdGlvblR5cGVz 68234 -IFFVRVJZ 68235 -VGF5bG9y 68236 -IFJL 68237 -dGF0 68238 -LnBhY2tldA== 68239 -IElNUE9SVEFOVA== 68240 -IGN1c2hpb25z 68241 -YnVsaw== 68242 -ZHVjdGl2ZQ== 68243 -YmVuZWY= 68244 -b2NyaXN5 68245 -IGZ1ZXJvbg== 68246 -IGN1cnNlcw== 68247 -IGZpbGluZ3M= 68248 -ZWxpZXI= 68249 -KD86 68250 -X2RyaXZl 68251 -IGNvbnRhY3Rv 68252 -IFBhcmt3YXk= 68253 -dmlkZXM= 68254 -Z25l 68255 -YXZhZ2U= 68256 -XFwu 68257 -ZnVsbE5hbWU= 68258 -ZGxs 68259 -IHNob2Nrcw== 68260 -ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 68261 -X3B4 68262 -QFdlYg== 68263 -LlBlcnNpc3RlbmNl 68264 -IHN1bms= 68265 -LnRvb2x0aXA= 68266 -YXV0aWNhbA== 68267 -TmV3c2xldHRlcg== 68268 -IHdhaXRlcg== 68269 -IGlucXVpcmU= 68270 -0LDQtdGC0YHRjw== 68271 -KCdfXw== 68272 -dG9n 68273 -SUVOVEFUSU9O 68274 -IGNvbXBhbnlJZA== 68275 -IEJhc2ljcw== 68276 -CUpMYWJlbA== 68277 -IG1hY09T 68278 -IE1hdHM= 68279 -X3RlbA== 68280 -LXByZWZpeA== 68281 -IG11dGF0ZQ== 68282 -fScp 68283 -Y2hlbmc= 68284 -IE1pbGl0 68285 -IiY= 68286 -ZmluZGluZw== 68287 -IERhdGFMb2FkZXI= 68288 -LkdQSU8= 68289 -IExldnk= 68290 -IHNuZWFrZXJz 68291 -IGNyw6lk 68292 -YXduZXI= 68293 -eGlh 68294 -L3NpbXBsZQ== 68295 -Q0hS 68296 -IGZsb3RhdGlvbg== 68297 -LnNlbnNvcg== 68298 -QnJhemls 68299 -IFNlYXNvbnM= 68300 -IFNwZWFr 68301 -LWJhbGw= 68302 -IE11dGF0aW9u 68303 -dWtrYW4= 68304 -IE9tYWhh 68305 -4oCZb24= 68306 -IEN1b21v 68307 -IEp1ZGljaWFs 68308 -IGNoZWNrcG9pbnRz 68309 -IEZyZW0= 68310 -CUlk 68311 -ZWdyaXR5 68312 -X2Fm 68313 -QE5vQXJnc0NvbnN0cnVjdG9y 68314 -IHRhYmVsYQ== 68315 -WyM= 68316 -bm90YQ== 68317 -IEZhY3RvcnM= 68318 -KGdyb3Vwcw== 68319 -aXN3YQ== 68320 -SVZP 68321 -IHNjcmk= 68322 -YWNldA== 68323 -IE1laA== 68324 -KGNsYXp6 68325 -IFs8 68326 -cGVyaWFs 68327 -IHN1cnBhc3NlZA== 68328 -IGpva2Vk 68329 -IHJ1ZA== 68330 -IGltYmFsYW5jZQ== 68331 -IEZyYWdl 68332 -c3Nw 68333 -IGluZGljdGVk 68334 -Lm1hcmtldA== 68335 -O20= 68336 -IHJlcGFpcmluZw== 68337 -LW5vdGU= 68338 -RGVidWdnZXI= 68339 -KFdlYg== 68340 -IHNpbmdz 68341 -IExveQ== 68342 -IERFU0lHTg== 68343 -LkNvbXA= 68344 -LWNvbnRyb2xsZXI= 68345 -IGF2b2NhZG8= 68346 -IEJvd2ll 68347 -Y29udGFkb3I= 68348 -dWxpbmdz 68349 -dWNob3M= 68350 -c3BlY2lmaWVy 68351 -IFZvbHZv 68352 -IGRlbW9z 68353 -IFByb2R1dG8= 68354 -Lk5vdEZvdW5k 68355 -IG5pw7Fvcw== 68356 -IEJvbHM= 68357 -X291dGVy 68358 -U2hlcg== 68359 -QVVUTw== 68360 -IGpvdg== 68361 -IEZyZWRkaWU= 68362 -b3JpYXM= 68363 -IGFmZWN0 68364 -IGZhY2lsaXRhdGluZw== 68365 -IGRvbWluYXRpbmc= 68366 -UGFyY2VsYWJsZQ== 68367 -JywnLQ== 68368 -bW9vbg== 68369 -IG1ldGFzdA== 68370 -IHNjYXJm 68371 -IFRoZXJt 68372 -Q2FsbEJhY2s= 68373 -0YHRgtCw0LI= 68374 -LkltcG9ydA== 68375 -IGJldHJheWFs 68376 -aWN1bG9z 68377 -IHdlacOf 68378 -5YyF 68379 -X14= 68380 -d2lmaQ== 68381 -IFNFTlNPUg== 68382 -X0JVU1k= 68383 -JGI= 68384 -X0ZJTkQ= 68385 -IHBsYXN0aWNz 68386 -IENPTlZFUlQ= 68387 -CWNhbGw= 68388 -IFByYWd1ZQ== 68389 -IGdhcm5lcmVk 68390 -X2xlYXJuaW5n 68391 -c2hvb3Q= 68392 -J10pKQ0K 68393 -IEdpbmdlcg== 68394 -PXBk 68395 -LHRlc3Q= 68396 -UHJvZml0 68397 -IGVzdGltYXRvcg== 68398 -IGJyZWU= 68399 -IC8vPC8= 68400 -X2hhdmU= 68401 -IEtvZA== 68402 -X0lNTQ== 68403 -aXp6YXM= 68404 -bWlnaHR5 68405 -154= 68406 -IE9uQ2xpY2tMaXN0ZW5lcg== 68407 -44OH 68408 -IFNjaWVudGlzdA== 68409 -RmlsdGVyZWQ= 68410 -YXZs 68411 -aGF5 68412 -X2dlbmVyYXRlZA== 68413 -XScK 68414 -IEF1dGhvcml0aWVz 68415 -OnBhcmFt 68416 -IHN0YXR0 68417 -LW1hdGVyaWFs 68418 -IGxpZGVy 68419 -IENyb3A= 68420 -IEJ1bmlmdQ== 68421 -IG5leHRQcm9wcw== 68422 -b3J6 68423 -X29yZA== 68424 -PHg= 68425 -X0lPQ1RM 68426 -IE11c2NsZQ== 68427 -CWV4ZWM= 68428 -RU5BTUU= 68429 -X2xldHRlcnM= 68430 -IyMjIyM= 68431 -IENz 68432 -J109PSI= 68433 -ICInKQ== 68434 -Q2xlYW51cA== 68435 -LnN0cnVjdHVyZQ== 68436 -zro= 68437 -6YCa6L+H 68438 -J107Pz4i 68439 -IExhdGl0dWRl 68440 -YmJpbmc= 68441 -IGJhbmFuYXM= 68442 -cmVjdGlvbnM= 68443 -IFJhbmRhbGw= 68444 -TllTRQ== 68445 -IGFwcmVuZA== 68446 -LlJlc3BvbnNlRW50aXR5 68447 -IHRlc3REYXRh 68448 -XGU= 68449 -IFdL 68450 -LkFkZENvbXBvbmVudA== 68451 -X3J1bnM= 68452 -w6dvaXM= 68453 -LW1pbmk= 68454 -Zm9sZGVycw== 68455 -IGxvc2Vycw== 68456 -IFRvd2Vycw== 68457 -LUVuY29kaW5n 68458 -OnI= 68459 -Y2hvb3Nlcg== 68460 -IGZsYXR0ZW5lZA== 68461 -0YHRgtCw0L3QvtCy 68462 -CVB5 68463 -5Lic 68464 -IGRhbW5lZA== 68465 -RGVwdA== 68466 -d2Vk 68467 -IHBpc2M= 68468 -Z2llcw== 68469 -X2dhbWVz 68470 -Lm1hc3M= 68471 -KEVxdWFs 68472 -IG5hdGl2ZXM= 68473 -LnRodW1ibmFpbA== 68474 -bHRy 68475 -IGVxbA== 68476 -X2luY29tZQ== 68477 -CWhlYWRlcnM= 68478 -LWhhaXJlZA== 68479 -IG1lZGlvY3Jl 68480 -IFdpdGhkcmF3 68481 -IGJpdHRl 68482 -2b4= 68483 -PWlu 68484 -b2NrZWQ= 68485 -RnVsbHk= 68486 -IFRFTVBMQVRF 68487 -w7pkZQ== 68488 -T2Rk 68489 -aWxsZXo= 68490 -VGVsZXBob25l 68491 -IAoJCQo= 68492 -KCInIg== 68493 -X3NjaGVk 68494 -ZXJuZQ== 68495 -wr4= 68496 -LnBpY2s= 68497 -IE1TSQ== 68498 -CWZm 68499 -RGlzY292ZXJ5 68500 -IENPRA== 68501 -IExhY2s= 68502 -IHNlbnNhdGlvbmFs 68503 -bW90aA== 68504 -IExlZ2lzbGF0aXZl 68505 -0Y0= 68506 -IHZpYWJpbGl0eQ== 68507 -IGdldEVtYWls 68508 -IHVuYW5pbW91cw== 68509 -IHBlbGxldA== 68510 -ICIoKQ== 68511 -Y29hdA== 68512 -YWdvb24= 68513 -IEFMV0FZUw== 68514 -XHVD 68515 -X3N0ZG91dA== 68516 -QW5keQ== 68517 -IG5ld0xpc3Q= 68518 -IE1haGFyYXNodHJh 68519 -LF9f 68520 -PXVzZXJuYW1l 68521 -IHNjcmlwdGluZw== 68522 -IFRtaW4= 68523 -PEFjdGlvbg== 68524 -PXt9LA== 68525 -c3ltYm9scw== 68526 -IGZlbmNpbmc= 68527 -IHbDrWRlb3M= 68528 -IE1hdXJpY2U= 68529 -Y29ybGli 68530 -IGtlbQ== 68531 -In0pLAo= 68532 -IENsYXNzaWNhbA== 68533 -Y29sbGVnZQ== 68534 -IEhvbWVwYWdl 68535 -IH19Cgo= 68536 -X01zcA== 68537 -IENvbXBsYWludA== 68538 -IHNhbmR5 68539 -QXNpYW4= 68540 -X3NlcmlhbGl6ZXI= 68541 -IExhaA== 68542 -IGJ1ZHM= 68543 -b2xvZ25l 68544 -IHJlc3BvbnNlRGF0YQ== 68545 -b3BoaWxl 68546 -a2F0ZWdvcmk= 68547 -RW5kZWQ= 68548 -bGVjdGlj 68549 -IGNsYXdz 68550 -Li4uJyk7Cg== 68551 -IHBsYW5uZXJz 68552 -IFphaw== 68553 -IEdsb3Zlcw== 68554 -Iil9 68555 -IGZhc2hpb25lZA== 68556 -YnJvbg== 68557 -IG5ld2NvbWVycw== 68558 -dmFuYQ== 68559 -IHBpZXJ3cw== 68560 -UmVjZWlwdA== 68561 -LWVudg== 68562 -IHJ1dGE= 68563 -IEZhcm1lcg== 68564 -b2RvcmU= 68565 -bXVp 68566 -IHJvbWFudA== 68567 -IGluZmxpY3Q= 68568 -IHNlbWluYXJz 68569 -PWN2 68570 -KHN0b2Nr 68571 -IGV4dHJhY3Rvcg== 68572 -IFRpZmZhbnk= 68573 -X3V2 68574 -LmNvbnRhY3Rz 68575 -JyksKCc= 68576 -IHNvbHZlcw== 68577 -LkNvbm5lY3Rpb25TdHJpbmc= 68578 -L2RlYnVn 68579 -IEF2ZXJ5 68580 -44Oj 68581 -IG1heFg= 68582 -U3Bhcms= 68583 -PHRoaXM= 68584 -IGhpa2Vz 68585 -S2V5VmFsdWVQYWly 68586 -IFF1aWV0 68587 -c3RhYg== 68588 -IEtvbW1lbnQ= 68589 -bHljZXI= 68590 -IE1TTQ== 68591 -IExhbnRlcm4= 68592 -IGNvbmp1bnRv 68593 -aHNp 68594 -TVVMVA== 68595 -V2l0aER1cmF0aW9u 68596 -YXR0YWNoZWQ= 68597 -IEFzdGVy 68598 -CXBvaW50cw== 68599 -IFNpYmVy 68600 -IE1ldGhvZGlzdA== 68601 -L3NpdGVz 68602 -IGZvcnR1bmVz 68603 -UGFydGljaXBhbnQ= 68604 -IGN1c3RvbWVySWQ= 68605 -KWluaXQ= 68606 -X3NlcnZlcnM= 68607 -IHdlYXZl 68608 -IFRSQUlO 68609 -IGhhcmFzc2Vk 68610 -7J6R 68611 -YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo= 68612 -X2Zhcg== 68613 -QWxjaGVteQ== 68614 -LmxpbmVXaWR0aA== 68615 -IHRoZXJhcGlzdHM= 68616 -IExvYg== 68617 -ZXF1aXBtZW50 68618 -IHJlY2h0 68619 -Lm1pcG1hcA== 68620 -Lm5pY2tuYW1l 68621 -IHVudG91Y2hlZA== 68622 -QUdPTg== 68623 -IFNhdWw= 68624 -IHdvcmtzaGVldHM= 68625 -IFZldGVyYW4= 68626 -b3VkZW4= 68627 -YWNsYXNz 68628 -X2FzbQ== 68629 -IHRlbXBs 68630 -IEV4cGVuc2U= 68631 -ZWlnaHQ= 68632 -I1NCQVRDSA== 68633 -em9uZXM= 68634 -LnBhcnRz 68635 -YXRyaWNl 68636 -bGF3cw== 68637 -dG9CZURlZmluZWQ= 68638 -RWZmZWN0aXZl 68639 -IFBpZWNlcw== 68640 -YXJ0aQ== 68641 -IGluaGliaXRvcnM= 68642 -CXBhcmFtZXRlcnM= 68643 -IHRlbGVncmFt 68644 -Ym91cmc= 68645 -X25vdGlmaWNhdGlvbnM= 68646 -IHBvc2l0aW9uYWw= 68647 -LWRlYWxz 68648 -IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 68649 -IHNoYWRlcnM= 68650 -XT0k 68651 -IGRlY28= 68652 -ZXR5cGVz 68653 -Y2xhcmU= 68654 -IEdTTQ== 68655 -LnV0aWxpdHk= 68656 -VG9TdHI= 68657 -YWZlbg== 68658 -IFht 68659 -X3BhcnRpY2xlcw== 68660 -IGZsdWZmeQ== 68661 -TWFya2V0aW5n 68662 -IHN0YW5kaW5ncw== 68663 -PwoKCgoKCg== 68664 -VU1BTg== 68665 -X1BBWU1FTlQ= 68666 -CVRpbWU= 68667 -cmF3bg== 68668 -b3Jybw== 68669 -IGVlcnN0ZQ== 68670 -IHBhZ2VOdW0= 68671 -IENPUA== 68672 -IHBsYWdpYXI= 68673 -VXBsb2FkZXI= 68674 -JHNlbGY= 68675 -bGF0ZXI= 68676 -ZXJpYWxpemVk 68677 -IGFsaWduU2VsZg== 68678 -IOKZpQ== 68679 -LmFycmF5Y29weQ== 68680 -IG5vc290cm9z 68681 -CWdwaW8= 68682 -IHBsb3R0ZWQ= 68683 -aXRlcmF0aW9ucw== 68684 -IFJlbGF4 68685 -Y2lwaGVy 68686 -R2lmdA== 68687 -IEJldHQ= 68688 -IFhS 68689 -IHN0cmlwZWQ= 68690 -KGVudmlyb25tZW50 68691 -ZWdlcnM= 68692 -X1JFU0VSVkVE 68693 -IGvDtm5udGU= 68694 -IGluZmVycmVk 68695 -UGRm 68696 -c29ycnk= 68697 -cGFyYXRl 68698 -LkNvbmNhdA== 68699 -IGxpcGlk 68700 -LkJP 68701 -IG9ybQ== 68702 -IENvbnNvcnQ= 68703 -IG92ZXJzZWVpbmc= 68704 -IGFtYmVy 68705 -IHBsZXRob3Jh 68706 -CUFjdGlvbg== 68707 -cXVlcnF1ZQ== 68708 -IGh1aXM= 68709 -ID1b 68710 -IHByb2dyZXNzZXM= 68711 -anVkdWw= 68712 -IGNvbnZlcnRpYmxl 68713 -LmVtYmVkZGluZw== 68714 -IHs/Pgo= 68715 -IHJlZHV4 68716 -W2xhYmVs 68717 -OiIpOw0K 68718 -Lm9ubGluZQ== 68719 -cXVhcnRlcmVk 68720 -IHNjaG9vbGluZw== 68721 -ICJcIiI= 68722 -W2xpc3Q= 68723 -QWxhbg== 68724 -J30KCg== 68725 -eXBzdW0= 68726 -IHN0cml2aW5n 68727 -IFJlc3BvbnNpYmxl 68728 -IO2MjOydvA== 68729 -LkludFB0cg== 68730 -cmlrZXM= 68731 -ZW52aWxsZQ== 68732 -LnNldExheW91dE1hbmFnZXI= 68733 -IFBhc3Nlbmdlcg== 68734 -IGRpc29i 68735 -IGZlcm1lbnQ= 68736 -LlBpeGVs 68737 -Pign 68738 -IGNvbnRlbmRlcnM= 68739 -LWJldGE= 68740 -IGFmZmlybWF0aXZl 68741 -0L3QvtGB0YLQuA== 68742 -aWHDp8Ojbw== 68743 -UmVjb21tZW5k 68744 -aW1pdGVycw== 68745 -X3lsaW0= 68746 -IHN1YnNpZHk= 68747 -IGVyYg== 68748 -RmlsZVNpemU= 68749 -KHNy 68750 -IHBvb3Jlc3Q= 68751 -IHZvaQ== 68752 -U2lk 68753 -IHNsaXBz 68754 -X21pbnV0ZXM= 68755 -IHVn 68756 -xqFu 68757 -IG5hdMO8cmxpY2g= 68758 -44Oe 68759 -YmVhcg== 68760 -fV8kew== 68761 -IGZpc3Nl 68762 -IGRpc2NyaW1pbmF0b3J5 68763 -CQkgIAo= 68764 -IENvaWw= 68765 -X2lmYWNl 68766 -LnZlcg== 68767 -IG1pbmVk 68768 -IGFzc2Fzc2lu 68769 -IHVuc2V0dA== 68770 -LnJlcXVlc3Rz 68771 -LlVT 68772 -aW1hZ2VVcmw= 68773 -IHN0cmF0ZWdpY2FsbHk= 68774 -LWJhbmQ= 68775 -IHRyb3VzZXJz 68776 -WEQ= 68777 -ey8= 68778 -bGVjdGlvbnM= 68779 -YCgp 68780 -IlA= 68781 -IHNrZXRjaGVz 68782 -Y2xpZW50SWQ= 68783 -IFNyYw== 68784 -b3BlbmluZw== 68785 -UHV0aW4= 68786 -IFBvZXRyeQ== 68787 -IFBST00= 68788 -SUxMSVNFQ09ORFM= 68789 -IGJvb21pbmc= 68790 -U2ltaWxhcmx5 68791 -Omxhc3Q= 68792 -Lndvcmtlcg== 68793 -LmdldElE 68794 -LlNQ 68795 -c2VydmVycw== 68796 -b2N1bGFy 68797 -IHNwaW5hY2g= 68798 -SVNL 68799 -w7A= 68800 -J10pWw== 68801 -IGNoaWVmcw== 68802 -IGdyb8OfZW4= 68803 -cmlldmluZw== 68804 -LmFzaw== 68805 -LXN1cg== 68806 -VlY= 68807 -Lz4iOwo= 68808 -KHJlbW92ZQ== 68809 -IEtM 68810 -IEhhbGV5 68811 -QFJlc3BvbnNlQm9keQ== 68812 -LSY= 68813 -U3dhZ2dlcg== 68814 -IHpuYWo= 68815 -Lm9uRXJyb3I= 68816 -cmVnbw== 68817 -ZWxpeA== 68818 -IEFWQUlMQUJMRQ== 68819 -IHNlcGVydGk= 68820 -aWFw 68821 -X21pc3M= 68822 -IHN1cmdlcmllcw== 68823 -IGltcGFydGlhbA== 68824 -IENvdA== 68825 -YWt0aW9u 68826 -IHdoaXRlbGlzdA== 68827 -INCw0LI= 68828 -X21peA== 68829 -IEJlZHJvb21z 68830 -IHByaW1laXJh 68831 -IHNpZ25pZmljYQ== 68832 -L2J5 68833 -IHN0YXJ0bGluZw== 68834 -IFNQRQ== 68835 -dWNjacOzbg== 68836 -TnVtZXI= 68837 -SUJN 68838 -LmZyYWdtZW50cw== 68839 -UmVudA== 68840 -IHLDs3duaWXFvA== 68841 -LkFVVE8= 68842 -LkZvckVhY2g= 68843 -IFpodQ== 68844 -IEN1bm5pbmc= 68845 -IFdhcm4= 68846 -IEJI 68847 -X0RPV05MT0FE 68848 -QnlLZXk= 68849 -KeKAlA== 68850 -IGNvbW1hbmRl 68851 -X0FOUw== 68852 -Q2hyb24= 68853 -RklU 68854 -X2F0b21z 68855 -X1NLSVA= 68856 -IHZhcA== 68857 -KEJveA== 68858 -IGxkYXA= 68859 -dW5wcm9jZXNzYWJsZQ== 68860 -SVRJT05T 68861 -w6lyw6k= 68862 -LG1zZw== 68863 -IG91dHNldA== 68864 -IGRyaWxsZWQ= 68865 -IGTDqXZlbG9wcA== 68866 -IENvYXQ= 68867 -IEJlbmdoYXpp 68868 -SG9va3M= 68869 -IE1pc3NpbGU= 68870 -X1Jlc2V0 68871 -Pi88 68872 -ICItIgo= 68873 -KCk9PnsK 68874 -IEhvY2g= 68875 -LmF3YWl0 68876 -QWRyZXNzZQ== 68877 -IGRpZ2l0YWxseQ== 68878 -IlRoZXNl 68879 -b3BsZXZlbA== 68880 -IGFzeW5jaHJvbm91c2x5 68881 -IER1Y2tz 68882 -UkVTUA== 68883 -SVJP 68884 -LmZpeA== 68885 -IFJhZGFy 68886 -dmVydGlzZQ== 68887 -w61zZXM= 68888 -SXRlcmF0aW9ucw== 68889 -bW91c2V1cA== 68890 -bWludA== 68891 -RklSU1Q= 68892 -IHBheXBhbA== 68893 -X3VwZ3JhZGU= 68894 -V3JhcHBlZA== 68895 -Ow0NDQo= 68896 -K3M= 68897 -IGNhdGNoZXI= 68898 -Lk9w 68899 -X05PVElDRQ== 68900 -cGFyYWxsZWxlZA== 68901 -Q1ZF 68902 -Zm9yZ290 68903 -IHBhbm9y 68904 -IG9mZnJl 68905 -IGVub3JtZQ== 68906 -KCkNCg0KDQo= 68907 -YWRpYXRvcg== 68908 -YWRkQWxs 68909 -W3RleHQ= 68910 -KHV0aWw= 68911 -LlByb21pc2U= 68912 -YW5pc20= 68913 -X29mZmVy 68914 -RU5ESUY= 68915 -ZG90cw== 68916 -IEtybw== 68917 -IHNwZWxsZWQ= 68918 -IGFwcE5hbWU= 68919 -QWN0aXZpdGllcw== 68920 -IFNwaWNl 68921 -ZWF0ZWQ= 68922 -IHNrYg== 68923 -IGvDtno= 68924 -IHRvcmNodmlzaW9u 68925 -Q2l2aWw= 68926 -IGhvcw== 68927 -X0hlbHBlcg== 68928 -acSH 68929 -X3Vuc2lnbmVk 68930 -6K66 68931 -4oCcQW5k 68932 -CWtmcmVl 68933 -LnJhaXNl 68934 -IGNhbGxl 68935 -IExhbnM= 68936 -IGFudGln 68937 -XCI+IjsK 68938 -YnJhbmNoZXM= 68939 -bG9ncmFkb3Vybw== 68940 -IHN0YWxsZWQ= 68941 -YWx5emVk 68942 -RGVyaXZlZA== 68943 -Om5vdA== 68944 -IGdpYmk= 68945 -IFR1cm5idWxs 68946 -LnVzZXJEYXRh 68947 -KFRhYmxl 68948 -IERlcml2ZWQ= 68949 -CWNvbmY= 68950 -IGFsZ2Fl 68951 -IGthZmth 68952 -IG5ha25l 68953 -IEhlYXRpbmc= 68954 -IFRpcmU= 68955 -YWR1bHQ= 68956 -IERhdGVGb3JtYXQ= 68957 -b3Bj 68958 -ZW5zYWdlbQ== 68959 -LlRvb2xz 68960 -Lk1peGVkUmVhbGl0eQ== 68961 -cmFp 68962 -IFdvbmRlcmZ1bA== 68963 -KV0pCgo= 68964 -aWFyZA== 68965 -VGhlbWVQcm92aWRlcg== 68966 -IGV2ZW50RGF0YQ== 68967 -I2Fk 68968 -LmdldFVybA== 68969 -IHRvb2xib3g= 68970 -IG92ZXJyaWRpbmc= 68971 -Q09OVEVOVA== 68972 -LXByb2R1Y3Rz 68973 -d2lsZA== 68974 -X2V4cGFuZA== 68975 -aW5haXJl 68976 -QnJ1 68977 -b2xscw== 68978 -INGN0YLQvg== 68979 -Y3Rlc3Q= 68980 -IHB1bmNoaW5n 68981 -RFJW 68982 -X3NwYWNlcw== 68983 -IFN1cGVyaW50ZW5kZW50 68984 -IGxheXVp 68985 -KGZlZWQ= 68986 -dG9k 68987 -IHZo 68988 -IGluc3VsdHM= 68989 -IFN1Yw== 68990 -aWtz 68991 -VG9ycmVudA== 68992 -Lmty 68993 -X2FjdGl2YXRl 68994 -k5g= 68995 -amVl 68996 -aW1lcnM= 68997 -cnVpdHM= 68998 -IHByZWNpbmN0 68999 -LlJlcXVpcmVk 69000 -IHNhdGlzZmllcw== 69001 -IGNoZWVyaW5n 69002 -IGFycml2 69003 -CXJlYw== 69004 -IENvYmI= 69005 -IGNvbmN1c3Npb24= 69006 -dWpldA== 69007 -Tm90Rm91bmRFcnJvcg== 69008 -SmVhbg== 69009 -IHBob3Rvbg== 69010 -Pl8= 69011 -IEJhcmNs 69012 -YW1k 69013 -ICV9Cg== 69014 -PVwiIw== 69015 -SW50ZXJu 69016 -IENvbW1pdHRlZXM= 69017 -LmJlbA== 69018 -bnVtbWVy 69019 -IGxldml0cmE= 69020 -X3ZlcmJvc2U= 69021 -KGNvZGVj 69022 -IFN0aXRjaA== 69023 -PSIiOw0K 69024 -IHJlZ3JldHM= 69025 -IG11bHRpbmF0aW9uYWw= 69026 -IHJlc3RydWN0dXJpbmc= 69027 -IE1FTg== 69028 -eW5jaHJvbml6YXRpb24= 69029 -IG1lZGlhdG9y 69030 -a2ly 69031 -UHJpbmNl 69032 -IGluaGliaXQ= 69033 -IGdvc3Q= 69034 -IE1NQw== 69035 -IHNpZGVk 69036 -X2Rhcms= 69037 -KGJsb2I= 69038 -PkxvcmVt 69039 -PiIpOwoK 69040 -c2Nhbm5lcg== 69041 -OmlubGluZQ== 69042 -LmNhcm91c2Vs 69043 -b3RpZGU= 69044 -IFdXVw== 69045 -IGRydW1tZXI= 69046 -LmZhbWlseQ== 69047 -IG9yZGluYWw= 69048 -5b2T5YmN 69049 -IGRpcGxvbWF0 69050 -IHN1cHBsZW1lbnRhbA== 69051 -IGRhZsO8cg== 69052 -IEZBVA== 69053 -IFlvbmc= 69054 -aGFwdXM= 69055 -IEp1bmN0aW9u 69056 -emw= 69057 -LlVzZUZvbnQ= 69058 -IGhhc2hNYXA= 69059 -LVJl 69060 -ICIqKg== 69061 -LnNldEJhY2tncm91bmRSZXNvdXJjZQ== 69062 -IGltcGVyZmVjdA== 69063 -LkZpbmRFbGVtZW50 69064 -IExMUA== 69065 -IG11cmRlcmVy 69066 -IHRleHRl 69067 -aXPDqQ== 69068 -YWN0aWNz 69069 -VG95 69070 -R3JhbnQ= 69071 -X2Rpc2Nvbm5lY3Q= 69072 -IGJyYXNpbGU= 69073 -IGVtZXJnZW5jaWVz 69074 -X2x2bA== 69075 -IEAiXA== 69076 -fSovCgo= 69077 -X1NPQw== 69078 -Tk9STUFM 69079 -L2dhbGxlcnk= 69080 -YXNpY3M= 69081 -RXZlbnR1YWxseQ== 69082 -IGdyYXA= 69083 -IGNyaXN0 69084 -IHByb2plY3Rvcg== 69085 -IGdlb21ldA== 69086 -IGRldGVjdG9ycw== 69087 -IGNyaXRpY2l6aW5n 69088 -IGNoaWNrcw== 69089 -IEhpag== 69090 -L2ZyYW1l 69091 -LW1vbmV5 69092 -ImRlc2NyaXB0aW9u 69093 -IHRleHRpbmc= 69094 -IHNleGlzbQ== 69095 -IE1WQw== 69096 -LWdlbmVyYWw= 69097 -IG92ZXJ0dXJuZWQ= 69098 -IG1vdmVy 69099 -IFBocmFzZQ== 69100 -IFVOVVNFRA== 69101 -IEVudHJlcHJlbmV1cg== 69102 -VEVHUg== 69103 -ZWxsaXBzZQ== 69104 -TWFya2Rvd24= 69105 -X18oKg== 69106 -IEthcmRhc2hpYW4= 69107 -cHBlbGlu 69108 -IEdvdHQ= 69109 -IGR5c3Q= 69110 -IFJlZHV4 69111 -SG9sYQ== 69112 -PyEKCg== 69113 -IFJlYWx0eQ== 69114 -U3VydmV5 69115 -IE1jR3JlZ29y 69116 -X2hhbmRsZXM= 69117 -IGludHJpZ3VlZA== 69118 -IGdldFVybA== 69119 -IGRldmlzZWQ= 69120 -IFBheXBhbA== 69121 -IHRoaW5rZXJz 69122 -IFN0YXR1c0Jhcg== 69123 -IEVsaWc= 69124 -IGNvbXBsZXhlcw== 69125 -INC60L7QtA== 69126 -c3RvY2tz 69127 -LWluaXRpYWxpemVk 69128 -IHNjYW5kYWxz 69129 -IGNvbWZvcnRpbmc= 69130 -IFJvY2tz 69131 -IGxpb25z 69132 -bG9jYXRvcg== 69133 -IV0= 69134 -IFBvbnk= 69135 -RGF0dW0= 69136 -IEZldA== 69137 -IG9mZnNldFk= 69138 -IFJFVFVSTlM= 69139 -IGJyZWFjaGVz 69140 -VGltZUludGVydmFs 69141 -IHZpZWxlbg== 69142 -VmVyc2U= 69143 -IGthZA== 69144 -IGdhYXQ= 69145 -KCItIiw= 69146 -IG1vdXNlWQ== 69147 -KFBvc3Q= 69148 -IFVo 69149 -ZWxpZ2libGU= 69150 -YWx0YQ== 69151 -IHV0aWxpc2U= 69152 -ZmFjdHM= 69153 -SElQ 69154 -IG9yY2hlc3RyYQ== 69155 -IFNwYWNlcw== 69156 -aXNwaWVs 69157 -IG11bHRpcGFydA== 69158 -LW9wYWNpdHk= 69159 -U2VhcmNoaW5n 69160 -IFBsYXRv 69161 -VmlzaW9u 69162 -IGx1bA== 69163 -IEFwcHJlbnQ= 69164 -57uc 69165 -W3JhbmQ= 69166 -LWRpc2FibGVk 69167 -IEZsZXRjaGVy 69168 -IHRyYW5zcG9ydHM= 69169 -JmU= 69170 -dHBhcmFt 69171 -cG9sZQ== 69172 -IEJ1ZW5vcw== 69173 -w7pibGljYQ== 69174 -aW50ZXJhY3Rpb24= 69175 -IGhvYg== 69176 -IGluZmxpY3RlZA== 69177 -bGl0ZQ== 69178 -IFBBUkFNRVRFUlM= 69179 -IFN0YW0= 69180 -KG14 69181 -IEF1dG9NYXBwZXI= 69182 -aWxpYW4= 69183 -IHF1aXR0aW5n 69184 -PXt9 69185 -IEpvbmFz 69186 -IGxvY2FsaXR5 69187 -IFNpbGVuY2U= 69188 -X2ZsdXR0ZXI= 69189 -IG5icg== 69190 -bGl0ZXI= 69191 -IE5vcm1hbGl6ZQ== 69192 -IGFjdW0= 69193 -QnJhaW5z 69194 -ZXF1aXA= 69195 -XT09Ig== 69196 -IGRlc3Rpbm8= 69197 -IERpb3M= 69198 -Lk11bHRpbGluZQ== 69199 -YWdyZWU= 69200 -KQoKCgoKCgoK 69201 -IHN0ZWxsZW4= 69202 -IGN1cmx5 69203 -Lk9mZmljZQ== 69204 -LWFib3V0 69205 -ICcuLy4uLy4uLw== 69206 -IFVUSUw= 69207 -IFJw 69208 -4oC6 69209 -IG1hcGE= 69210 -LkRP 69211 -YWdhbA== 69212 -LndpbmRvd3M= 69213 -IGFkdmVyc2VseQ== 69214 -Llh0cmFMYXlvdXQ= 69215 -bWVkaWNhbA== 69216 -IHVuc3Vy 69217 -dGhlcm1hbA== 69218 -Lk1vZGVsQWRtaW4= 69219 -LmFjdHVhbA== 69220 -c2V0Q29udGVudA== 69221 -IHBvc3RmaXg= 69222 -UFc= 69223 -IENoYWlycw== 69224 -IGdyYW1t 69225 -IGNvbXBsaWM= 69226 -RElTUExBWQ== 69227 -IE1vb3Nl 69228 -aGFhcg== 69229 -QUxFUw== 69230 -IGxkYQ== 69231 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCg== 69232 -ICcvJwo= 69233 -QVNO 69234 -IEJhcmJlcg== 69235 -IG1haW5z 69236 -IG1haW5XaW5kb3c= 69237 -0LDQt9Cy0LDQvdC40LU= 69238 -IGVtYW4= 69239 -X2NvbGxlY3Q= 69240 -IHJlbXBs 69241 -LnRheA== 69242 -YmFo 69243 -IFBzeWNoaWF0cnk= 69244 -RGVzY3JpcHRpb25z 69245 -IGV4ZWN1dGlvbnM= 69246 -CUxPR0dFUg== 69247 -JkU= 69248 -OmJn 69249 -IGtk 69250 -LmRhbWFnZQ== 69251 -IG5pc2k= 69252 -5qy+ 69253 -IENhbWVs 69254 -aW5pZGFk 69255 -IExpZmVzdHlsZQ== 69256 -IFRISVJE 69257 -IOCkuA== 69258 -IHBvbHlnb25z 69259 -IGF0dGlyZQ== 69260 -YWxlbnQ= 69261 -X1VTQVJU 69262 -IG1hbGFyaWE= 69263 -bG9icw== 69264 -IF19Cg== 69265 -KHJlZ2lzdGVy 69266 -LXBz 69267 -X29wdGltaXplcg== 69268 -KEFMT0FE 69269 -IHZhcGU= 69270 -LnNvY2s= 69271 -kOiXjw== 69272 -JHByb2R1Y3Q= 69273 -KEVSUg== 69274 -Y2twdA== 69275 -YnVxdWVycXVl 69276 -IH19Ij57ew== 69277 -IEhpdmU= 69278 -IE1hc2g= 69279 -IEVwaWQ= 69280 -IEx1bmQ= 69281 -X3RyYW5zYWN0aW9ucw== 69282 -IHN1YmNsYXNzZXM= 69283 -RWFzZQ== 69284 -X0Nsb3Nl 69285 -X2NoZWNrb3V0 69286 -IicsCg== 69287 -U2VjdG9y 69288 -b2lzZQ== 69289 -LXRlbXA= 69290 -KSIp 69291 -aHlwZXI= 69292 -ZXJjdWw= 69293 -c3RhY2twYXRo 69294 -X05S 69295 -SUxMRQ== 69296 -IHJlbGFjacOzbg== 69297 -IE1hdHRo 69298 -X0NPREVD 69299 -IGhhbmRsZUVycm9y 69300 -X09uZQ== 69301 -YWxib3Jn 69302 -CQkgICAgICAgICA= 69303 -IFVwbG9hZGVk 69304 -Tm0= 69305 -Ly89 69306 -KlM= 69307 -X0VYUEVDVA== 69308 -IGZyYWN0aW9uYWw= 69309 -Q291 69310 -IHNjYWxhYmxl 69311 -IENJRA== 69312 -PFBvc3Q= 69313 -CXRocmVhZA== 69314 -aGFyZHdhcmU= 69315 -LmNoYW5nZWQ= 69316 -LkVsZW1lbnRBdA== 69317 -IGFydGljdWxhdGU= 69318 -ZWRvcmVz 69319 -RXN0YWJsaXNo 69320 -PXtbCg== 69321 -ISo= 69322 -IFNK 69323 -TWV0ZXI= 69324 -LnJlcA== 69325 -IFZPTA== 69326 -IE91 69327 -bMOp 69328 -IHBuZXVtb25pYQ== 69329 -X3BpY2tlcg== 69330 -ZXhwbG8= 69331 -IOyekQ== 69332 -IFN3aW0= 69333 -ZHJlc3M= 69334 -c3Rvcmllcw== 69335 -L25hdg== 69336 -VmE= 69337 -INit 69338 -L3NlbGY= 69339 -IHZldGVyaW5hcnk= 69340 -KERlbnNl 69341 -CWJvb3N0 69342 -IElzTm90 69343 -IHRydXN0aW5n 69344 -IExlYmFuZXNl 69345 -JHJlcXVlc3Q= 69346 -eGZmZmZmZg== 69347 -X3JlbW92ZWQ= 69348 -IHVwZGF0ZXI= 69349 -2KfY 69350 -RE9XTkxPQUQ= 69351 -IEltbWVkaWF0ZWx5 69352 -IHJvYW1pbmc= 69353 -IEhvcm55 69354 -LmNvZGlnbw== 69355 -IEZpZ3VyZXM= 69356 -IHBhbnRyeQ== 69357 -KHNhbXBsZXM= 69358 -IEJFTA== 69359 -IHNldENvbnRlbnQ= 69360 -dW1vcg== 69361 -5pSv5LuY 69362 -X01JTlVT 69363 -IHVubGVhc2hlZA== 69364 -IHByb2ZpY2llbnQ= 69365 -CVVJ 69366 -LkV4Y2VwdGlvbnM= 69367 -IHNyYW5k 69368 -UHJlc3N1cmU= 69369 -LmFzc2VydE5vdA== 69370 -KHNlcmlhbGl6ZXI= 69371 -CXR4dA== 69372 -UG9ydHM= 69373 -IG5lY2VzYXJpbw== 69374 -IHJldml2ZWQ= 69375 -IG1pbGVzdG9uZXM= 69376 -Y2Fubw== 69377 -RXNjb3J0 69378 -IGVudGVuZA== 69379 -QVBF 69380 -aXBj 69381 -LmF0b21pYw== 69382 -IFBlbWI= 69383 -IHJlYWNoYWJsZQ== 69384 -IGthbnM= 69385 -d2hhdGV2ZXI= 69386 -TGlzdEJveA== 69387 -IENseQ== 69388 -cGljdHVyZWQ= 69389 -IEVsZWN0cm8= 69390 -YWJpYw== 69391 -IGZ1bms= 69392 -IGRpYXJyaGVh 69393 -IOeZ 69394 -IFNvbHZlcg== 69395 -IEJhYw== 69396 -IHNrZWxldGFs 69397 -IO+C 69398 -IEZpbGVOb3RGb3VuZEV4Y2VwdGlvbg== 69399 -ICIpWw== 69400 -IFRyYWl0 69401 -dWRva3U= 69402 -LS0tLS0tLS0tLQoK 69403 -QW5nZWw= 69404 -YWdy 69405 -IHNpbXBsZXM= 69406 -IGJhbmM= 69407 -IEFsZXJ0cw== 69408 -IENvbmZpcm1hdGlvbg== 69409 -IEFseQ== 69410 -Y2FsbGJhY2tz 69411 -IGZ1bmt0aW9u 69412 -IGdyYWZ0 69413 -WVBE 69414 -L0FGUA== 69415 -V0s= 69416 -a3Vy 69417 -Q0tFVA== 69418 -IFNsYXRl 69419 -IFN0ZWY= 69420 -CVJ1bnRpbWU= 69421 -IEVTTA== 69422 -IHByZWFjaGluZw== 69423 -QnJvYWQ= 69424 -IHNldERlc2NyaXB0aW9u 69425 -YXplbA== 69426 -PQoK 69427 -IGphY2twb3Q= 69428 -IC8vIQo= 69429 -dmlhcg== 69430 -IGVpZA== 69431 -IGF0aXY= 69432 -IHJlZmxleGl2aXR5 69433 -Lkxpc3Rlbg== 69434 -IGx5cmlj 69435 -IHZlcms= 69436 -IGNvbGx1c2lvbg== 69437 -YXphYXI= 69438 -IHdpbms= 69439 -IE11ZA== 69440 -L29wZXJhdG9y 69441 -IGV4dGVybmFsbHk= 69442 -IGJhcnU= 69443 -IGJhc2tldHM= 69444 -dGlja2Vy 69445 -KHBob3Rv 69446 -X2V2ZW4= 69447 -IHNwb25nZQ== 69448 -IGhlaWdodEZvcg== 69449 -Z2V0Q2hpbGQ= 69450 -X2Zvcm1hdHM= 69451 -LkV4ZWN1dGlvbg== 69452 -X1Byb3BlcnR5 69453 -cmVwb3M= 69454 -dGhlaWQ= 69455 -X1BIWVM= 69456 -IGV2aWRlbmNlZA== 69457 -LmhlYWRpbmc= 69458 -QW5ndWxhcg== 69459 -IFZlbnVl 69460 -IEhPVVNF 69461 -IEVzdG9uaWE= 69462 -0LzQsA== 69463 -cmdhbml6YXRpb24= 69464 -L2RldmljZQ== 69465 -SVJS 69466 -X3RoZW4= 69467 -YXJlbQ== 69468 -IGFnZ2k= 69469 -RU1PTg== 69470 -INGB0Lo= 69471 -IEVwaA== 69472 -IE1TUA== 69473 -IGxvZ2ZpbGU= 69474 -LWxlYWRpbmc= 69475 -YXRoYW0= 69476 -IHVubWF0Y2hlZA== 69477 -IFNpdHVhdGlvbg== 69478 -KCl7fQo= 69479 -CWNoYW5nZQ== 69480 -IENoYXB0ZXJz 69481 -LlJFU1VMVA== 69482 -IG9l 69483 -RVRZ 69484 -X3ZpZA== 69485 -Li4uJyw= 69486 -IGFsdGVybmF0aXZlbHk= 69487 -X1dT 69488 -IFBsZW50eQ== 69489 -IENyYXRl 69490 -YXNpb25hbGx5 69491 -IExhd24= 69492 -IElNTQ== 69493 -IFZhbml0eQ== 69494 -IFZvb3I= 69495 -5ZCv 69496 -IG1pag== 69497 -c3RlcnJlaWNo 69498 -IFJERg== 69499 -IENyaXRlcmlvbg== 69500 -Lkludg== 69501 -LlN0ZXA= 69502 -X0ZyYW1l 69503 -IEVOVU0= 69504 -774= 69505 -SG9wZWZ1bGx5 69506 -TmF2Q29udHJvbGxlcg== 69507 -IOy2lOqwgA== 69508 -IFZhZGVy 69509 -IHJ1dGhsZXNz 69510 -JGtleQ== 69511 -Y2t0 69512 -aW5lbQ== 69513 -aWxlbnQ= 69514 -IHJlc3BlY3Rpbmc= 69515 -bGNk 69516 -KGJ0 69517 -IEVsbGlvdA== 69518 -IFVuaWRvcw== 69519 -KENoYW5uZWw= 69520 -IGVpdXM= 69521 -IGFzdHJvbmF1dHM= 69522 -IEhvc3Rpbmc= 69523 -IGNhc3Rl 69524 -IGhhcm1lZA== 69525 -b3VwbGVz 69526 -PFJvbGU= 69527 -LkRlc2M= 69528 -LWNvdXJzZQ== 69529 -IENhcnRvb24= 69530 -aWxlZ2Vk 69531 -IG15c3RpY2Fs 69532 -IOex 69533 -KGZpZWxkTmFtZQ== 69534 -V0lUSE9VVA== 69535 -LHN1bQ== 69536 -J2FjYw== 69537 -CXJvd3M= 69538 -IGdldFBhc3N3b3Jk 69539 -IGNvY2tz 69540 -cGl2b3Q= 69541 -bmFtZW9m 69542 -IGZlYXNpYmlsaXR5 69543 -IGNvbW1lbmNlbWVudA== 69544 -IERvbWU= 69545 -LkpTT05FeGNlcHRpb24= 69546 -IEh5ZGVyYWJhZA== 69547 -IExpc3RlZA== 69548 -IENvbXB1dGVycw== 69549 -W3ZhbA== 69550 -IGlzb3Q= 69551 -CXdpbg== 69552 -IG5laA== 69553 -KElOVA== 69554 -UmVwdWJsaWNhbg== 69555 -INC/0YDQvtCy0LXRgA== 69556 -RmF0 69557 -IGVxdWl2 69558 -IERhdHVt 69559 -YXN0aQ== 69560 -IHNvaWxz 69561 -dXB1bmN0dXJl 69562 -cHJlc3NpdmU= 69563 -XykpOwo= 69564 -Lldhcm4= 69565 -IGhhcmI= 69566 -Lm9uT3B0aW9uc0l0ZW1TZWxlY3RlZA== 69567 -IGNsb3du 69568 -IE9XTg== 69569 -IGV4YW1pbmF0aW9ucw== 69570 -IEV4aXN0aW5n 69571 -am91cmQ= 69572 -IGNvbmNlc3Npb24= 69573 -IEZpcmViYXNlRGF0YWJhc2U= 69574 -IHVwdGFrZQ== 69575 -IGVubGlzdGVk 69576 -IENhcmI= 69577 -IGZ1cw== 69578 -IGFidXNpbmc= 69579 -LnByb2R1Y3Rpb24= 69580 -eW5jaA== 69581 -aWx5bg== 69582 -cmVmdW5k 69583 -LWhhdmU= 69584 -KGFyZ3VtZW50 69585 -IGZzY2FuZg== 69586 -Y29uY2VwdA== 69587 -X0xBTkU= 69588 -IGVuZ2FnZXM= 69589 -IEV4YWN0bHk= 69590 -YWx0dXJh 69591 -KEFkZHJlc3M= 69592 -IHN5bm9ueW1vdXM= 69593 -VG93bg== 69594 -IFBheW5l 69595 -cm9pdA== 69596 -cGVyaWVuY2Vz 69597 -cGFydGljbGVz 69598 -X2Jk 69599 -IEdyaW5kZXI= 69600 -TWFuYWdlZE9iamVjdENvbnRleHQ= 69601 -KGJi 69602 -W3RtcA== 69603 -LWNvbnM= 69604 -YW9rZQ== 69605 -IHN0ZXdhcmQ= 69606 -IFZpZXdDaGlsZA== 69607 -LmRyYXdMaW5l 69608 -IFdBUk4= 69609 -IHB1ZXM= 69610 -bW9kYXRpb24= 69611 -IHpz 69612 -QWdyZWdhcg== 69613 -ICIuIiw= 69614 -LmNlbnRlclk= 69615 -IGZsYXdsZXNz 69616 -IGRldXRzY2hl 69617 -IExpcXU= 69618 -aXRlaXQ= 69619 -X2ludHJv 69620 -LXVzZWQ= 69621 -LHRhcmdldA== 69622 -IEhERA== 69623 -ICUr 69624 -b3JlbnQ= 69625 -L09iamVjdA== 69626 -IGRpc3J1cHRlZA== 69627 -w6J0ZQ== 69628 -IGFjY2Vzbw== 69629 -IExvd2VzdA== 69630 -IFdpbGxpYW1zb24= 69631 -X2NyZWF0b3I= 69632 -U2VsbA== 69633 -IEJVRw== 69634 -X3JlcHI= 69635 -6ICM 69636 -IGFyY2hhZW9sb2dpY2Fs 69637 -b21lcnM= 69638 -IEVsb24= 69639 -IFNjcm9sbFZpZXc= 69640 -IGxpbmVzdHlsZQ== 69641 -aXNSZXF1aXJlZA== 69642 -aXNrbw== 69643 -X3Ji 69644 -ZsO8aA== 69645 -ICAgCQk= 69646 -KGRlZmluZQ== 69647 -IFNDTQ== 69648 -IERJRkY= 69649 -X2Jz 69650 -cGVuZGljdWxhcg== 69651 -cGFjZWQ= 69652 -IEpvdXJuYWxpc20= 69653 -LkpTT05BcnJheQ== 69654 -IERhdGFBY2Nlc3M= 69655 -TWFyaWE= 69656 -IELDvA== 69657 -SEVMTA== 69658 -IE1BVFJJWA== 69659 -T0xUSVA= 69660 -YXBzaWJsZQ== 69661 -XToKCg== 69662 -bmFpcmVz 69663 -X2hpc3RvZ3JhbQ== 69664 -IGZsYWly 69665 -aGF2aW5n 69666 -IFVzZXJJRA== 69667 -IFJlbGF0aW9uc2hpcHM= 69668 -UmVwbGFjZW1lbnQ= 69669 -IHJzYQ== 69670 -IGVucmljaGVk 69671 -IHJlaGVhcnM= 69672 -IHfDpHJl 69673 -IGxvYWRlcnM= 69674 -IEVsZW5h 69675 -IFdhdGNoaW5n 69676 -CWpvYg== 69677 -TkVXUw== 69678 -L3NldHRpbmdzZGlhbG9n 69679 -aXZlYw== 69680 -X0VRVUFMUw== 69681 -VGVtcGxhdGVOYW1l 69682 -IEJPRFk= 69683 -LmFkYXB0ZXJz 69684 -d29mZg== 69685 -Y29tYm9Cb3g= 69686 -Lk5ld1JlYWRlcg== 69687 -fHJlcXVpcmVk 69688 -X3Byb2JhYmlsaXR5 69689 -ICg6Og== 69690 -IGNyYXo= 69691 -IFVG 69692 -VGVzdElk 69693 -IGVzcGVjaWZpYw== 69694 -aWJlbA== 69695 -cGF3bg== 69696 -640= 69697 -IE1hcnI= 69698 -IHN0YXJ0WA== 69699 -X3NpdGVz 69700 -Lz4KCg== 69701 -IGltcGxpY2F0ZWQ= 69702 -KGlubmVy 69703 -IGVmZm9ydGxlc3NseQ== 69704 -wq10aW9u 69705 -YXdhcmQ= 69706 -IGhvdmVyaW5n 69707 -cHJp 69708 -JHRlbXBsYXRl 69709 -dWFuZw== 69710 -IGF1dG9tYXRl 69711 -ICoqLwoK 69712 -aWJsaQ== 69713 -IG51dHJpdA== 69714 -KS4o 69715 -ZWVlZQ== 69716 -QXBpQ29udHJvbGxlcg== 69717 -L293bA== 69718 -IFdvbWVucw== 69719 -LWRvdWJsZQ== 69720 -IE9yZGVyaW5n 69721 -c3Bt 69722 -TW9kZXI= 69723 -Lk5hdGl2ZQ== 69724 -IEJlcmdlcg== 69725 -ZXNkYQ== 69726 -ZXJkaW5ncw== 69727 -X2VjaG8= 69728 -IHN1bW1hcml6ZWQ= 69729 -IGVsZXZhdGU= 69730 -X3F1YWQ= 69731 -IHdvbw== 69732 -dWxhbnQ= 69733 -UHJvcGVydHlWYWx1ZQ== 69734 -IHBsaXN0 69735 -IEdSQVBI 69736 -IFNUREVSUg== 69737 -KScpLg== 69738 -QXNzZXJ0aW9u 69739 -bGlua3BsYWlu 69740 -IGFjY2VsZXJhdGluZw== 69741 -IHNuaXBwZXRz 69742 -IFNhbG1hbg== 69743 -YWJjZA== 69744 -LmVjaG8= 69745 -X2lkeHM= 69746 -IHBjbQ== 69747 -b2NhbHlwdGlj 69748 -X2Nvb3JkaW5hdGU= 69749 -KHByZXZpb3Vz 69750 -LXNob3J0 69751 -LnN1YnRyYWN0 69752 -KEJpdA== 69753 -P3Q= 69754 -IE5vdGVib29r 69755 -IEthdHJpbmE= 69756 -aWZmZXJlbnRpYWw= 69757 -c2lsZW50 69758 -dGVybWluYXRlZA== 69759 -IHRhbmdlbnQ= 69760 -OlQ= 69761 -IGNvc8Os 69762 -IHBhcmFub2lk 69763 -IGRlcHJpdmF0aW9u 69764 -L3t7JA== 69765 -IGhlbWlzcGhlcmU= 69766 -IHJlaW5zdA== 69767 -ZWN6 69768 -dGVycg== 69769 -IFBMQVRGT1JN 69770 -IHRyb3VibGVzaG9vdGluZw== 69771 -IHZhbGlkYXRpbmc= 69772 -IE9yaW9u 69773 -YXN1cmluZw== 69774 -0LjQvdCw 69775 -IGh1YnM= 69776 -YXJlbmNl 69777 -IENoYWxsZW5nZXM= 69778 -IHplYWw= 69779 -U3Bv 69780 -IFNjcmVlbnM= 69781 -IG11bmRhbmU= 69782 -IER1bms= 69783 -ICMjIyMj 69784 -IFJFRkVS 69785 -b25ldA== 69786 -LmNhc2U= 69787 -LXBvc2l0aXZl 69788 -SU5URUdFUg== 69789 -Lm1ldHJvTGFiZWw= 69790 -U0FO 69791 -IHByb2Zlc3Npb25z 69792 -IHR5cmVz 69793 -UGFsaW5kcm9tZQ== 69794 -IFNFQ09ORA== 69795 -LkdSRUVO 69796 -IFNuYXBzaG90 69797 -VUxL 69798 -X2NpZA== 69799 -JEk= 69800 -IGN1bnQ= 69801 -ZXN0cnVjdGlvbg== 69802 -UHN5Y2g= 69803 -IEh0dHBSZXNwb25zZU1lc3NhZ2U= 69804 -ZW1iYWxp 69805 -X3Jldmlld3M= 69806 -U2VsZWN0YWJsZQ== 69807 -X1BSRVNFTlQ= 69808 -IEpzb25SZXF1ZXN0 69809 -IFRoZXRh 69810 -X2ludGVycA== 69811 -UmFzdGVy 69812 -I2Vycm9y 69813 -LG9iag== 69814 -IHR3ZWV0aW5n 69815 -X0dQVQ== 69816 -X3RvZGF5 69817 -X3NlY3M= 69818 -bmVlcw== 69819 -LmdldFN5c3RlbVNlcnZpY2U= 69820 -IHZub2Rl 69821 -IFJlZ3VsYXRvcnk= 69822 -IEZhaHJlbmhlaXQ= 69823 -IHNjYWxlcg== 69824 -X21hcmtldA== 69825 -LmFsbG9jYXRl 69826 -dGlja2V0cw== 69827 -YXRhaw== 69828 -IFBpa2U= 69829 -IExvcg== 69830 -ZGl0b3I= 69831 -IGxvY2F0aW9uTWFuYWdlcg== 69832 -IGluaXREYXRh 69833 -IFdhcmU= 69834 -IEluY2lkZW50 69835 -IGNvbW1lbnRhdG9y 69836 -dWVudGVz 69837 -IEluZmxhdGU= 69838 -IOWG 69839 -IGFjdGl2aWRhZA== 69840 -IEJq 69841 -RU5VTQ== 69842 -IHJldXNlZA== 69843 -INC80LXQvQ== 69844 -IHNlc2nDs24= 69845 -LicpKTsK 69846 -44GT44KT 69847 -L2dl 69848 -YWdhaW5zdA== 69849 -LGxpbmU= 69850 -KFVubWFuYWdlZFR5cGU= 69851 -KT0i 69852 -IHl0 69853 -dWRpYW50ZXM= 69854 -cm9sbGFibGU= 69855 -5aGr 69856 -X0NPTExFQ1RJT04= 69857 -b2xpcw== 69858 -dW1iZXJsYW5k 69859 -KCIiIgo= 69860 -IHppcHBlcg== 69861 -DAo= 69862 -L3NpZ251cA== 69863 -IHN0cmFuZHM= 69864 -cmF4 69865 -LmNvbnN1bWVy 69866 -IHVuY2VydGFpbnRpZXM= 69867 -RGVidWdFbmFibGVk 69868 -IGRlZmVhdHM= 69869 -IGRydg== 69870 -IHJlYWxpc20= 69871 -YWdyYW1z 69872 -WEU= 69873 -IEhhemFyZA== 69874 -LW5lZWRlZA== 69875 -KHRhYmxlVmlldw== 69876 -LkVsZW1lbnRz 69877 -IFNBUg== 69878 -CWVsZW0= 69879 -KHBrZw== 69880 -U2ltb24= 69881 -VGludENvbG9y 69882 -IFBoZW4= 69883 -X0VNUA== 69884 -2Iw= 69885 -Pz4KCgo= 69886 -X2F0dHJpYg== 69887 -IGJveFNoYWRvdw== 69888 -IENHQWZmaW5lVHJhbnNmb3Jt 69889 -IENhbmJlcnJh 69890 -IHN0YXJ0UG9z 69891 -IFJhaw== 69892 -CWNlcnI= 69893 -IFRhbnphbmlh 69894 -dW9uZw== 69895 -Y2Fm 69896 -LmJhc2ljQ29uZmln 69897 -b2lucw== 69898 -Q29udGFpbmVk 69899 -PXNldA== 69900 -X2dpdA== 69901 -CXBhY2tldA== 69902 -IGNvZg== 69903 -KFRS 69904 -5qC85byP 69905 -KHt9KQo= 69906 -IGRpcmVjY2lvbg== 69907 -IHBsYXlsaXN0cw== 69908 -IGFmZmluZQ== 69909 -LnNldFNlbGVjdGlvbg== 69910 -IGFtbW9u 69911 -IGNvbnF1ZXJlZA== 69912 -IFJhbW9z 69913 -IFBTUA== 69914 -PXN1bQ== 69915 -IGNvcnJlbGF0aW9ucw== 69916 -IHJvYWRtYXA= 69917 -IGV4dGluY3Q= 69918 -IGFkdmlzYWJsZQ== 69919 -IGJvbWJlcnM= 69920 -IFVJUmVzcG9uZGVy 69921 -X0JQ 69922 -INCx0YPQtNC10YI= 69923 -IFByZW1pZXJl 69924 -IFJV 69925 -dHJhc2g= 69926 -KGNsanM= 69927 -Z251 69928 -LlBhZ2Vz 69929 -IGluc3BlY3RvcnM= 69930 -TWV4aWNv 69931 -IFZlcmU= 69932 -UHJlYw== 69933 -IFNjYWw= 69934 -aXNwZXJz 69935 -UnVubmFibGU= 69936 -Lm9yaWc= 69937 -IHNhaWxvcnM= 69938 -UGFyc2luZw== 69939 -IFZpc2l0b3Jz 69940 -JnR5cGU= 69941 -cG9wb3Zlcg== 69942 -PCgpLA== 69943 -IG93ZXM= 69944 -IHJlYWN0cw== 69945 -IERlZmluZWQ= 69946 -IHJlYWxtZW50ZQ== 69947 -IGRpY3RhdG9yc2hpcA== 69948 -YWRtaW5pc3Ry 69949 -aWRlbmQ= 69950 -PUw= 69951 -c3RyY2FzZWNtcA== 69952 -XSU= 69953 -0L7Qs9GA0LDQvA== 69954 -ZWR1bGE= 69955 -LWRlc2lnbmVk 69956 -Q09WRVI= 69957 -X0NoYW5uZWw= 69958 -IHByb2pldG8= 69959 -eW1vb24= 69960 -Q0hLRVJSUQ== 69961 -6YeK 69962 -IHZlcmlmeWluZw== 69963 -L2tleQ== 69964 -LmZyb21DaGFyQ29kZQ== 69965 -LkJpdA== 69966 -X2J1ZGdldA== 69967 -ICUi 69968 -dmV5b3I= 69969 -IHl1bQ== 69970 -IGV4dHJlbWVz 69971 -X0NSRQ== 69972 -Z2V0U3RhdHVz 69973 -c3Vic2VjdGlvbg== 69974 -IHNvYWtlZA== 69975 -IGdlbmF1 69976 -X0NIQVJBQ1RFUg== 69977 -5oyB 69978 -LW9ubGluZQ== 69979 -LnRvQ2hhckFycmF5 69980 -Y2VyZXI= 69981 -Il0sIg== 69982 -IHN0cm9sbA== 69983 -IFl1YW4= 69984 -IFdhbmRlcg== 69985 -IHNpc3RlbQ== 69986 -X3Vj 69987 -KG5vbWJyZQ== 69988 -Y2hhbnRtZW50 69989 -KGNsb3Nl 69990 -bWV0aA== 69991 -LXNlY3JldA== 69992 -cHNldWRv 69993 -Q291bnR5 69994 -Q09OVFJPTA== 69995 -IHNvbHZlbnQ= 69996 -IHNvYXJpbmc= 69997 -IHNwaWVz 69998 -TmF2SXRlbQ== 69999 -IHJlc2VtYmxhbmNl 70000 -KGJpdHM= 70001 -IGNlbGx1bA== 70002 -IGFzc29jaWF0aXZl 70003 -Lmltd3JpdGU= 70004 -LmNvb3JkaW5hdGU= 70005 -XSwk 70006 -KHNr 70007 -Ki8p 70008 -IG1vY2tz 70009 -IGp1bmc= 70010 -X0RPQw== 70011 -LXJ1bnRpbWU= 70012 -IEdpdmVz 70013 -dW5q 70014 -KHNlZw== 70015 -KFtc 70016 -IG5haA== 70017 -X2V4cGVjdA== 70018 -Um93SW5kZXg= 70019 -KGZvcmNl 70020 -IEdldFZhbHVl 70021 -IHN1bW1hcmllcw== 70022 -X1NIQVJF 70023 -LXRyYWluZWQ= 70024 -IEJsYW5j 70025 -IGZpdHRpbmdz 70026 -IHdhdGVyZnJvbnQ= 70027 -Lk5vdGU= 70028 -IFdhbmQ= 70029 -b3ZlcmU= 70030 -cHJlZGljdGlvbg== 70031 -IGNzcg== 70032 -LnRvcEFuY2hvcg== 70033 -IFN0cm9rZQ== 70034 -X0ZpbHRlcg== 70035 -YXRoZQ== 70036 -ICJcXCI= 70037 -IEFGRg== 70038 -PSIvIj4= 70039 -LlJlcXVlc3RNZXRob2Q= 70040 -kJzntKI= 70041 -IHdpdG5lc3Npbmc= 70042 -QXBwYXJlbnRseQ== 70043 -IG1kaQ== 70044 -c3RpY2tz 70045 -IEFsdg== 70046 -w6TDnw== 70047 -X2NvbnRpbg== 70048 -IGJvaWxlcnM= 70049 -IE1hcnhpc3Q= 70050 -SU9D 70051 -bmVybw== 70052 -aW5uYWNsZQ== 70053 -TGl0 70054 -Y2Vj 70055 -S2V5UHJlc3M= 70056 -R2V0RGF0YQ== 70057 -IGlzbnQ= 70058 -0YDQvtCy0LXRgA== 70059 -IHFyeQ== 70060 -Um9vdEVsZW1lbnQ= 70061 -IE5TQ29kZXI= 70062 -LmdldE51bQ== 70063 -IHRocmVlc29tZQ== 70064 -VXNlcw== 70065 -LiJf 70066 -IENvbnRpbnVvdXM= 70067 -IHBvcHVsaXN0 70068 -IFBzeWNob2xvZ2ljYWw= 70069 -X2N5Y2xlcw== 70070 -IGlmZGVm 70071 -aXBoZXJhbHM= 70072 -CSAgICAgICAgICA= 70073 -IGFkdmlzZXM= 70074 -IENvbXBhbmlvbg== 70075 -dHJpZ2h0 70076 -IGdyb3dlcnM= 70077 -IFNPQ0tFVA== 70078 -eW1jZQ== 70079 -UlNT 70080 -bWVtYmVyT2Y= 70081 -VG91Y2hhYmxl 70082 -X2FycmF5cw== 70083 -IGp1bXBlcg== 70084 -IGhlcnBlcw== 70085 -IFRpdHM= 70086 -IFRlbGVmb24= 70087 -X1BBTkVM 70088 -dWdlbg== 70089 -5YyX5Lqs 70090 -LlNpdGU= 70091 -X3VucmVnaXN0ZXI= 70092 -X2Nocg== 70093 -LnRm 70094 -LWh1bWFu 70095 -IGFzb2Np 70096 -IHF1ZWVucw== 70097 -QW50aG9ueQ== 70098 -IHN0cmluZ2VudA== 70099 -IG1vbGVzdA== 70100 -c2V0SWNvbg== 70101 -SEVFTA== 70102 -SEVMUA== 70103 -RERT 70104 -LmNtcw== 70105 -SVNUUklCVVQ= 70106 -Y2llcw== 70107 -LmZvckNoaWxk 70108 -LmNoaw== 70109 -IE90dG9tYW4= 70110 -IFRQUA== 70111 -IG1pbw== 70112 -IEJ1Zg== 70113 -Ym9h 70114 -VmVyc2lvbnM= 70115 -KGxvY2FsZQ== 70116 -IFJhaWxyb2Fk 70117 -YmNj 70118 -LyoqPA== 70119 -LXBhaWQ= 70120 -IGNlbGVyeQ== 70121 -YXRpc2NoZQ== 70122 -Z2V0T3B0aW9u 70123 -b3Jpb3VzbHk= 70124 -IGFkYXB0ZXJz 70125 -U3RvcmVz 70126 -L3NhdmU= 70127 -IEJhc2lz 70128 -0Y7Rgg== 70129 -IExhZA== 70130 -X3JlbGF0aW9uc2hpcA== 70131 -IENsdWJz 70132 -IOCo 70133 -OiI8PA== 70134 -X01JU0M= 70135 -VmlzdWFsaXphdGlvbg== 70136 -IG1pcnJvcmVk 70137 -ZXNwZXI= 70138 -U3RyTG4= 70139 -IHJlc3BvbnNlT2JqZWN0 70140 -5ZCR 70141 -LmVuY29kZXI= 70142 -LS0tLS0tLS0tCgo= 70143 -IGdyaWRWaWV3 70144 -X2luZGVudA== 70145 -YW50d29ydA== 70146 -IGFycml2YWxz 70147 -IFNldHRsZW1lbnQ= 70148 -Vmlld0luaXQ= 70149 -LXZhbHVlcw== 70150 -IHdhdGVyZmFsbA== 70151 -IGluY2FyY2VyYXRpb24= 70152 -IFRlZW5z 70153 -CXNpZ24= 70154 -aW1tdW5l 70155 -LnNlY29uZGFyeQ== 70156 -IHZpZGVvZXI= 70157 -IOi+k+WFpQ== 70158 -IGludGltaWRhdGlvbg== 70159 -ZW5kYWxl 70160 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 70161 -IGluc2lnaHRmdWw= 70162 -IHNhbmRz 70163 -IHBob3RvZ3JhcGhpYw== 70164 -UGFnaW5hdG9y 70165 -IGRpc2NpcGxpbmVk 70166 -X1RMUw== 70167 -XSkpLA== 70168 -cmxlbg== 70169 -PGNlbnRlcg== 70170 -X1BDTQ== 70171 -S2VsbHk= 70172 -LWJpbGxpb24= 70173 -LmN4 70174 -IGpldXg= 70175 -IGZpbGVMaXN0 70176 -IFFEaWFsb2c= 70177 -dHJhY3RpdmU= 70178 -RHQ= 70179 -IGVzdHJvZ2Vu 70180 -IHN0YXJjaA== 70181 -X2VtaXQ= 70182 -INC30LDQv9GA0L7RgQ== 70183 -IFF1YXJ0 70184 -IGluYWR2ZXJ0ZW50bHk= 70185 -IHRyb25n 70186 -c2hpcG1lbnQ= 70187 -IE5PUg== 70188 -IFNjcmVlbmluZw== 70189 -IERpc2Nvbm5lY3Q= 70190 -bWVubw== 70191 -IFdvcnN0 70192 -IE5y 70193 -e2s= 70194 -c3Bs 70195 -X2N0cg== 70196 -LnNvcnRlZA== 70197 -LXBsYWNlaG9sZGVy 70198 -KCk7Ig== 70199 -aHVyc3Q= 70200 -LWhpdA== 70201 -LnNvbHZl 70202 -566X 70203 -IHVuZGVhZA== 70204 -IHdoaW1z 70205 -IGdldERlZmF1bHQ= 70206 -IE5pa2tp 70207 -YXNzZW1ibGU= 70208 -IHJlbG9jYXRlZA== 70209 -LXJldA== 70210 -SXRhbGlhbg== 70211 -OlN5c3RlbQ== 70212 -LnNjaGVkdWxlcg== 70213 -4oCcU28= 70214 -Rm9yYmlkZGVu 70215 -QVZPUg== 70216 -emlhxYI= 70217 -LkFkYW0= 70218 -CWNhbnZhcw== 70219 -IHBhcnRuZXJpbmc= 70220 -IGd5bW4= 70221 -IG1hbmlj 70222 -RGlmZmVyZW50 70223 -IMOlcmh1cw== 70224 -IGZlcnRpbGU= 70225 -Y2xm 70226 -LQ0K 70227 -LnJldmlldw== 70228 -b2RhYmxl 70229 -IEJvdW5kcw== 70230 -b2Jhbw== 70231 -IFBhcGVyYmFjaw== 70232 -IG1vZGlmaWM= 70233 -Y2hlY2twb2ludA== 70234 -IEFwcEJ1bmRsZQ== 70235 -IHN0YWJpbGl6ZQ== 70236 -IEF1ZGlvQ2xpcA== 70237 -bW9udGhseQ== 70238 -LmJlaA== 70239 -IGZsb3I= 70240 -IGJvbmRlZA== 70241 -IFdvcmtvdXQ= 70242 -Y29taW5ncw== 70243 -IHJhYmJpdHM= 70244 -IEJBTA== 70245 -Q0NS 70246 -X3Z1ZQ== 70247 -IExldml0cmE= 70248 -IGxpYmVydGluZQ== 70249 -IGNoYWxsZW5nZXI= 70250 -IFZhY2F0aW9u 70251 -VG9G 70252 -fSQv 70253 -X0RyYXc= 70254 -IGZlbmNlcw== 70255 -IGRhdGFzb3VyY2U= 70256 -IHBhcGVs 70257 -c2xpY2s= 70258 -X21lcw== 70259 -IFVJU3Rvcnlib2FyZFNlZ3Vl 70260 -KFRhZw== 70261 -IOWvuQ== 70262 -ICctJyk= 70263 -X0NMQVNTRVM= 70264 -KFJlbmRlcg== 70265 -CWZ3cml0ZQ== 70266 -VUVE 70267 -QUVT 70268 -KGpzb25QYXRo 70269 -IHNsb3dz 70270 -PkRlc2NyaXB0aW9u 70271 -IGVucmljaG1lbnQ= 70272 -IGl0ZW1wcm9w 70273 -IFBvdmVydHk= 70274 -IGFic29yYmluZw== 70275 -IFBzeWNobw== 70276 -5rGf 70277 -LC4KCg== 70278 -SW52ZXJzZQ== 70279 -IGFkanVk 70280 -aWdpZEJvZHk= 70281 -emlvbmk= 70282 -ICInLiQ= 70283 -5LiN5a2Y5Zyo 70284 -VGhhaQ== 70285 -IHNsYWlu 70286 -IGJydXRhbGx5 70287 -IFBlcnNwZWN0aXZl 70288 -IFJldGlyZW1lbnQ= 70289 -JHJz 70290 -IHNlcnZpY2VOYW1l 70291 -IOyI 70292 -LXByb2Nlc3Npbmc= 70293 -YnJhbmRz 70294 -OmVycm9y 70295 -KHByb3BlcnR5TmFtZQ== 70296 -IEJvZWg= 70297 -L2Nt 70298 -L3JlYWQ= 70299 -QU1C 70300 -IHJvdGF0aW9ucw== 70301 -LndvcmtzcGFjZQ== 70302 -Onk= 70303 -IHVwaG9s 70304 -dW5reQ== 70305 -IEJyYWNl 70306 -L21ldGE= 70307 -IEJyYXZl 70308 -YWNqZQ== 70309 -KFVJbnQ= 70310 -IHZpZWlsbGU= 70311 -cmFkaQ== 70312 -X2R5bg== 70313 -Tlc= 70314 -bG9zZXI= 70315 -ZXJ1c2Zvcm0= 70316 -IEJhcnRvbg== 70317 -IGZhcmVz 70318 -IE11aw== 70319 -4buHdQ== 70320 -IEF1ZGlvU291cmNl 70321 -KChf 70322 -LkJpZw== 70323 -Lm9yZ2FuaXphdGlvbg== 70324 -IFRyaWNr 70325 -IGJsdXNo 70326 -KFRZUEU= 70327 -IFJlbGF0aXZlTGF5b3V0 70328 -bGVjdHJvbg== 70329 -XX0i 70330 -IFphcA== 70331 -IFR3ZWx2ZQ== 70332 -Okw= 70333 -IHN0aWZmbmVzcw== 70334 -X0hFTA== 70335 -IHNwZXA= 70336 -KGNvZGVy 70337 -IHRhbWFuaG8= 70338 -IGFudGlveGlkYW50 70339 -IGhvc3BpdGFsaXplZA== 70340 -R1BD 70341 -IHNjcnV0aW4= 70342 -4buBbg== 70343 -IFNa 70344 -IEp1bGl1cw== 70345 -IFNhYmI= 70346 -ZWxvcg== 70347 -KG1j 70348 -6YeM 70349 -IFBpbnM= 70350 -IG1vZGVyYXRlbHk= 70351 -IEvDvA== 70352 -b3JnYW5pemF0aW9ucw== 70353 -IFNDT1JF 70354 -IHNjb3Vy 70355 -IGNob3I= 70356 -IFVJRWRnZUluc2V0cw== 70357 -IHNrdWxsZQ== 70358 -X29wZXJhbmQ= 70359 -LmdzdGF0aWM= 70360 -L25naW54 70361 -IGdldFdpZHRo 70362 -QmF0dGVyeQ== 70363 -IFNldHRlcg== 70364 -bUE= 70365 -KFJlc291cmNlcw== 70366 -X3BsYXlsaXN0 70367 -IG1hbmdv 70368 -IE9SRA== 70369 -YW5raW5k 70370 -ZXdheXM= 70371 -Pyks 70372 -IEdMVVQ= 70373 -IGp1c3Rl 70374 -IHBheWVy 70375 -KGNhbQ== 70376 -IFRlYWNo 70377 -IEZsdXg= 70378 -IG91dHNwb2tlbg== 70379 -IFN0cmluZ1V0aWw= 70380 -IFpoYW8= 70381 -LkhlbHBlcg== 70382 -IGVzdGlsbw== 70383 -IEFudGhyb3A= 70384 -IEd1YXJkcw== 70385 -Vm9jw6o= 70386 -Olsn 70387 -CXByb2R1Y3Q= 70388 -dXBkYXRlZEF0 70389 -IGluc3BpcmVz 70390 -cXc= 70391 -QkxFTQ== 70392 -YWtpc3Rhbg== 70393 -IGN6xJk= 70394 -LWhlYXJ0ZWQ= 70395 -IENvbXBlbnNhdGlvbg== 70396 -0LjQsw== 70397 -IGNvbWE= 70398 -IEZpYXQ= 70399 -IHhtbGh0dHA= 70400 -IHJlZmVycmFscw== 70401 -IHNwZWN0YXRvcnM= 70402 -IFRvcw== 70403 -aXNvcw== 70404 -SU1QTEVNRU5U 70405 -IGVudHJlcHJlbmV1cmlhbA== 70406 -IFNjb3V0cw== 70407 -IEFsb25l 70408 -YnJva2Vy 70409 -UHJvZHVjdElk 70410 -IEtvYmU= 70411 -IGNoYXVk 70412 -L2ZlYXR1cmVz 70413 -IHJvb21tYXRl 70414 -IFByb2plY3Rpb24= 70415 -YXZvdXJpdGVz 70416 -X0pPSU4= 70417 -IEFWQw== 70418 -X3BoeXM= 70419 -S2V5UHJlc3NlZA== 70420 -LDw= 70421 -IHVucmVhY2hhYmxl 70422 -IENpdGF0aW9u 70423 -W2NoYW5uZWw= 70424 -c3RhcnRzd2l0aA== 70425 -IEphZ3VhcnM= 70426 -LklzRmFsc2U= 70427 -bWVtYmVyc2hpcA== 70428 -QXR0ZW50aW9u 70429 -IHJlbW9kZWxpbmc= 70430 -IENpbmR5 70431 -IGNsaW5pY2FsbHk= 70432 -IG1pbGxlbm5pYWxz 70433 -IM60 70434 -IHJmbA== 70435 -ZW5ldA== 70436 -IG9icmln 70437 -IHZvbHVudGVlcmluZw== 70438 -Q3JlZGl0cw== 70439 -CWFy 70440 -IHJlc2lzdGluZw== 70441 -IFByb2R1a3Q= 70442 -PT09Ig== 70443 -IGNvbmVjdA== 70444 -IHJpag== 70445 -INeU 70446 -IHB1YmxpY0tleQ== 70447 -IG95 70448 -IEJ1dHQ= 70449 -X21pc2M= 70450 -IEJlc3Rl 70451 -IFBMQw== 70452 -IOafpQ== 70453 -IEJveEZpdA== 70454 -IiIu 70455 -VGVzdEZpeHR1cmU= 70456 -IGNoYXR0ZXI= 70457 -IGRvb3J3YXk= 70458 -eXNpemU= 70459 -INGH0YI= 70460 -SUNUVVJF 70461 -PScuLi8= 70462 -c2hvd24= 70463 -X3dlYXRoZXI= 70464 -IExvZ01hbmFnZXI= 70465 -XX0iCg== 70466 -IGNvbG91cmZ1bA== 70467 -IHJ1bW9yZWQ= 70468 -IGzDpQ== 70469 -IHByb2Jz 70470 -CWJ1aWxk 70471 -IOWmgg== 70472 -LnJldg== 70473 -IGludGVyY2VwdGVk 70474 -R2F5 70475 -TGlzdENvbXBvbmVudA== 70476 -IHBpw6g= 70477 -IkF0 70478 -IGFnYXI= 70479 -IEd1bmQ= 70480 -X0FFUw== 70481 -7IM= 70482 -jpjsnbQ= 70483 -IGF1dGhvcmlzZWQ= 70484 -IENoYWxs 70485 -X2xvZ291dA== 70486 -Y3Jvbg== 70487 -YXRlZ2llcw== 70488 -cGVyc2lzdGVudA== 70489 -IEFuZEFsc28= 70490 -dXN6 70491 -X3Jlc3RhcnQ= 70492 -IGRlY2lk 70493 -emY= 70494 -IHBhZ2luYXRvcg== 70495 -b2xsZXI= 70496 -IEhH 70497 -T3BhcXVl 70498 -c2VhdQ== 70499 -IE9NSVQ= 70500 -IFRoaWNrbmVzcw== 70501 -IEFpcndheXM= 70502 -X2RlbQ== 70503 -eXRpYw== 70504 -IHByb3Rlc3RlZA== 70505 -IHVwcmlzaW5n 70506 -IHN1aW5n 70507 -IFNoZWxieQ== 70508 -LmVuZXJneQ== 70509 -IGFsbGVsZQ== 70510 -LWJpZw== 70511 -U3RyaW5nQnVpbGRlcg== 70512 -IHNpZGVsaW5lcw== 70513 -IFRV 70514 -X2Fp 70515 -LkhPUklaT05UQUw= 70516 -IHJhZ2luZw== 70517 -LnRvTG9jYWxl 70518 -Lm11c3Q= 70519 -eEZGRg== 70520 -Lm5paA== 70521 -ICd7fSc= 70522 -2YjYrw== 70523 -IHB1bG1vbmFyeQ== 70524 -IOWPkQ== 70525 -IG7Dum1lcm9z 70526 -IE5hcG9sZW9u 70527 -X01ldGhvZEluZm8= 70528 -bGFzdGluZw== 70529 -IGV4cG9zdXJlcw== 70530 -IGVtYmFyaw== 70531 -X3VkcA== 70532 -S2lkcw== 70533 -X0NPTk5FQ1RFRA== 70534 -IHdlZWRz 70535 -UE9PTA== 70536 -IGtyaWo= 70537 -IG51aXM= 70538 -Sk5JRVhQT1JU 70539 -YWFhYWFhYWE= 70540 -IO2P 70541 -5Lu9 70542 -IHJlcGxlbg== 70543 -IFRyaWFscw== 70544 -d2FzaA== 70545 -cnV0 70546 -LWJlZm9yZQ== 70547 -X0FUVEFDSE1FTlQ= 70548 -VU5U 70549 -XFZhbGlkYXRpb24= 70550 -VG9u 70551 -IGhlYWRpbmdz 70552 -UHJvYmFibHk= 70553 -IGZhYnJpY2F0ZWQ= 70554 -U29ja2V0QWRkcmVzcw== 70555 -IGxldHRyZQ== 70556 -KSI+ 70557 -IHZhY2NpbmF0ZWQ= 70558 -Omh0dHA= 70559 -IGNvbmRvbA== 70560 -c2hlZA== 70561 -IFNwaWVsZQ== 70562 -44OU 70563 -RGVwbG95 70564 -LkNvbnRyYWN0 70565 -LWJv 70566 -Iy8= 70567 -IGludGVyY2VwdGlvbg== 70568 -IGlzYm4= 70569 -IG1hbm5lcnM= 70570 -L2Fj 70571 -CUNoZWNr 70572 -X2Zn 70573 -IGVuZFBvaW50 70574 -X3dlYXBvbg== 70575 -IHVuaW50ZW50aW9u 70576 -IHF1aXRz 70577 -X01JQw== 70578 -YXBpcm8= 70579 -IGJhbGxvb25z 70580 -IGdyYWRz 70581 -bWFycmllZA== 70582 -IDwqPg== 70583 -IGRpc3RvcnQ= 70584 -X01FU1NBR0VT 70585 -IFBTQQ== 70586 -X1BE 70587 -YWxzZXg= 70588 -IERpYWxvZ3Vl 70589 -IHJlZ2lzdHJhdGlvbnM= 70590 -IE9yaWdpbnM= 70591 -IGZsYW5r 70592 -PzsKCg== 70593 -OwoKCgoK 70594 -XS0k 70595 -IERlc3M= 70596 -LlN0YXR1c0JhZFJlcXVlc3Q= 70597 -IGluaGFiaXRlZA== 70598 -IGdpbHQ= 70599 -IFNURENBTEw= 70600 -LnRoZXRh 70601 -JCQkJA== 70602 -aWNsYXNz 70603 -QXBhcnQ= 70604 -Lmxpc3RCb3g= 70605 -IEJlbGFydXM= 70606 -IGRlbmVu 70607 -IFN1c3NleA== 70608 -CWRlbA== 70609 -X0VD 70610 -bmVhcmVzdA== 70611 -XE9yZGVy 70612 -UGFja2FnZXM= 70613 -Zm9ybWVybHk= 70614 -Ke+8jA== 70615 -6LSj 70616 -U2V4eQ== 70617 -IGhvcnJvcnM= 70618 -Uk9BRENBU1Q= 70619 -QXBwcm94 70620 -RGVzaw== 70621 -QU1FRA== 70622 -Lk5vcm1hbGl6ZQ== 70623 -X3B1Ymxpc2hlZA== 70624 -IERlYm9yYWg= 70625 -56eR 70626 -IHBvdW5kaW5n 70627 -IEVzcGVy 70628 -IERhbmNpbmc= 70629 -IExPT1A= 70630 -IFJveWFscw== 70631 -IGluc3VyZQ== 70632 -IEludmVzdG9ycw== 70633 -IHRoZW9sb2dpY2Fs 70634 -QXBwb2ludG1lbnQ= 70635 -IGNhdGVnb3JpY2Fs 70636 -IGNyYW4= 70637 -VmFsaWRpdHk= 70638 -IHJlc3BvbmRlcnM= 70639 -ICgpDQo= 70640 -ZXBhZA== 70641 -QklUUw== 70642 -IExhbWJlcnQ= 70643 -c3VtbQ== 70644 -YWNpZGFk 70645 -IGxvZ2dlZElu 70646 -PVc= 70647 -LkxvY2FsaXphdGlvbg== 70648 -cmlkbw== 70649 -JyIpCg== 70650 -IFdlYlZpZXc= 70651 -bG90aA== 70652 -IHRlYXNlcg== 70653 -IENhbmQ= 70654 -IGVwaWxlcHN5 70655 -SW5jcmVhc2U= 70656 -aXZpdHlNYW5hZ2Vy 70657 -ZW50cmFudA== 70658 -VGVsZWZvbm8= 70659 -LmN1cnJlbnRTdGF0ZQ== 70660 -IE5vZWw= 70661 -ICAgICAgICAgICAgCQk= 70662 -IGV4aGF1c3Rpb24= 70663 -ZWxpYW4= 70664 -IGNvdmV0ZWQ= 70665 -LXByb2R1Y3Rpb24= 70666 -KHN0ZGlu 70667 -IHByZWZlcmFibGU= 70668 -IG9mZmVuZGluZw== 70669 -KGNvbW1pdA== 70670 -CWFs 70671 -IHJlbG9jYXRl 70672 -IGFub21hbA== 70673 -IERpc2Vhc2Vz 70674 -IEZvcmc= 70675 -IFdJRkk= 70676 -IEtpbGxpbmc= 70677 -cXY= 70678 -IGZtYXA= 70679 -IGxsZXZhcg== 70680 -dGl0cmU= 70681 -LmVtcA== 70682 -LCRf 70683 -YXZy 70684 -Q2FuQmU= 70685 -X21h 70686 -IEhhd2tpbnM= 70687 -X1JPVVQ= 70688 -IGxvYWRJbWFnZQ== 70689 -IFdhaA== 70690 -IERlbXM= 70691 -IGluZGVudGF0aW9u 70692 -cHJlY2F0aW9u 70693 -IOaWh+S7tg== 70694 -IEJ1ZGFwZXN0 70695 -IHV0Yw== 70696 -KGhvdXJz 70697 -IHRyYW5ueQ== 70698 -QW5z 70699 -ennEhw== 70700 -LnZlaGljbGU= 70701 -Q29pbnM= 70702 -IEJyYXVu 70703 -CVJlc3BvbnNl 70704 -IHZyaWo= 70705 -IHN0cmFuZ2VseQ== 70706 -IEZhc2M= 70707 -XFNlc3Npb24= 70708 -TW91c2VMaXN0ZW5lcg== 70709 -IFJvbGxz 70710 -4bqnbg== 70711 -LmdycGM= 70712 -SW50ZWdlckZpZWxk 70713 -CWFmeA== 70714 -RG9ja0NvbnRyb2w= 70715 -JVw= 70716 -JTsi 70717 -IGdpZ2c= 70718 -IGJvcnJvd2Vy 70719 -IGRpc3BvbmlibGVz 70720 -X1JFQ1Q= 70721 -IFRoaW4= 70722 -IHBlYXJs 70723 -eEZC 70724 -IHJpcHBsZQ== 70725 -IGtIeg== 70726 -LmFjcXVpcmU= 70727 -Ymlvcw== 70728 -dGFibGVGdXR1cmU= 70729 -L2FudGxy 70730 -b3JhY2xl 70731 -IEFSRUE= 70732 -IGludGVuc2VseQ== 70733 -IHByb3RvYnVm 70734 -IExFTkc= 70735 -IEhlYWRxdWFydGVycw== 70736 -YXRoZWQ= 70737 -TWluZA== 70738 -aW5peg== 70739 -CVBhdGg= 70740 -WE1MTG9hZGVy 70741 -IGFsbG9jYXRpb25z 70742 -LnNsb3Q= 70743 -UHJvY0FkZHJlc3M= 70744 -IHJvbGVJZA== 70745 -Oyc7Cg== 70746 -IEJSRUFL 70747 -IFBlcmZvcm1pbmc= 70748 -Lk9yZGluYWxJZ25vcmVDYXNl 70749 -LWds 70750 -Omg= 70751 -IGRvd25sb2FkYWJsZQ== 70752 -IFN1YnNjcmliZXI= 70753 -YW5zZQ== 70754 -IGNoYXJhY3Rlcml6ZQ== 70755 -IHNocnVnZ2Vk 70756 -IHNjcA== 70757 -IGd1c3Rh 70758 -IG1ldGFsbA== 70759 -IGxhYm9yYXRvcmllcw== 70760 -IFhpbg== 70761 -IE1vdG9yY3ljbGU= 70762 -IGVnZXQ= 70763 -IGZpbmFuY2Vk 70764 -IE1PRElGWQ== 70765 -KlI= 70766 -QWk= 70767 -IGV4dHJlbWlzbQ== 70768 -IEhhbGlmYXg= 70769 -IHZhbW9z 70770 -JG51bQ== 70771 -IGltcGFydA== 70772 -YnJpY2s= 70773 -IOexuw== 70774 -IGZ1ZXJh 70775 -IFJPTEU= 70776 -LkNvbmN1cnJlbnQ= 70777 -X09QRVJBVE9S 70778 -IGN5bmljYWw= 70779 -IFJlZ2luYQ== 70780 -Z2V0RXJyb3I= 70781 -2KM= 70782 -YnN1Yg== 70783 -SmFwZ29sbHk= 70784 -IGluaGliaXRvcg== 70785 -SnVzdGljZQ== 70786 -44U= 70787 -TmV2ZXJ0aGVsZXNz 70788 -LXNlbQ== 70789 -Lm9nZw== 70790 -cmVxdWVudA== 70791 -IG5vc3Nv 70792 -SGFpcg== 70793 -LkxpYnJhcnk= 70794 -bWRpcg== 70795 -IGhhcmk= 70796 -IFRhcmE= 70797 -IFBvcnRv 70798 -bmV0aW5ldA== 70799 -IGFsbGlhbmNlcw== 70800 -ZWxsc2NoYWZ0 70801 -X1N1cmZhY2U= 70802 -CVZpZXc= 70803 -YXR1cmRheXM= 70804 -IHBvcGNvcm4= 70805 -X1BBUlNF 70806 -IFJpcHBsZQ== 70807 -IHBoYW50b20= 70808 -IG1vbmRv 70809 -LmNyZWF0ZUNsYXNz 70810 -IEtvcmVhbnM= 70811 -IGZhc2U= 70812 -IFdvY2hlbg== 70813 -IEVxdWlw 70814 -LWVpZ2h0 70815 -IFN0YXRlbWVudHM= 70816 -IGFkYXB0aW5n 70817 -UHJlY2lv 70818 -IEN1cmU= 70819 -IGNhbWJpYXI= 70820 -5rCR 70821 -IGhleGFkZWNpbWFs 70822 -c3BpcmFjeQ== 70823 -YmlsdA== 70824 -IFl1Zw== 70825 -IC0tLT4= 70826 -IFBQQw== 70827 -aXN6 70828 -YWtlRnJvbU5pYg== 70829 -IERpc3A= 70830 -IEF0aGxldGljcw== 70831 -IG5pZ2h0Y2x1Yg== 70832 -R09PRA== 70833 -LnNldEdlb21ldHJ5 70834 -K1s= 70835 -L3NlbmQ= 70836 -IGJpbmFyaWVz 70837 -IHLDoXA= 70838 -OnJlcQ== 70839 -LWNvbnN1bWluZw== 70840 -ZXJ0aW1l 70841 -VVBEQVRFRA== 70842 -X251bGxhYmxl 70843 -VklO 70844 -dWxpYQ== 70845 -Y3lhbg== 70846 -IG1pc3VuZGVyc3RhbmRpbmc= 70847 -b3JpY2Fs 70848 -ZGVncmVlcw== 70849 -TGVhZGluZw== 70850 -LkFS 70851 -aWNrZXN0 70852 -TnVldm8= 70853 -dWZvcmlh 70854 -IGdvb2RpZXM= 70855 -IGZvcmVz 70856 -KCk8PCI= 70857 -YWRlbWlj 70858 -QWN0aW9uQ3JlYXRvcnM= 70859 -c2VydmVybmFtZQ== 70860 -KG50 70861 -ZGJDb250ZXh0 70862 -IGFpcmJvcm5l 70863 -IGV4aGliaXRpb25z 70864 -Y2VsZQ== 70865 -IHRlbGE= 70866 -PE1vdmll 70867 -KCd7fQ== 70868 -RXhwbGFuYXRpb24= 70869 -IGhPYmplY3Q= 70870 -IGJlYXJlcg== 70871 -ZW5zaWJseQ== 70872 -bmlw 70873 -IEplcm9tZQ== 70874 -IENa 70875 -IGRhdGVGb3JtYXR0ZXI= 70876 -w6ljaWFs 70877 -U2V0TmFtZQ== 70878 -b3VjZQ== 70879 -IHJlZ3Jlc3M= 70880 -JkM= 70881 -KCkiPg== 70882 -LnNldFByZWZlcnJlZFNpemU= 70883 -IE1JRA== 70884 -IEFsZXNz 70885 -IGhvcnNlcG93ZXI= 70886 -IGF0bQ== 70887 -IFBhY2thZ2luZw== 70888 -IGNpcGhlcnRleHQ= 70889 -UmVxdWVzdE1ldGhvZA== 70890 -IGJlaWRlbg== 70891 -6KM= 70892 -IFBPVw== 70893 -LldyaXRlSGVhZGVy 70894 -ZGlyZWN0b3I= 70895 -LWJ1dA== 70896 -44Gg44GV44GE 70897 -aW5jZXI= 70898 -X2Ru 70899 -ISEhISE= 70900 -IG1hbnVmYWN0dXJlcw== 70901 -LlRleHRVdGlscw== 70902 -IGNvbnNjaW91c2x5 70903 -IGJvdW5jZWQ= 70904 -Y3VsdHVyZQ== 70905 -IFNwYXI= 70906 -IFBpcGVy 70907 -LnByZXNz 70908 -LW93bmVy 70909 -IGV2YWx1YXRvcg== 70910 -IFNUUkVBTQ== 70911 -LlBpY3R1cmVCb3hTaXplTW9kZQ== 70912 -IHN1Z2Fycw== 70913 -U2NyZWVuV2lkdGg= 70914 -IG5leHRTdGF0ZQ== 70915 -IGl2b3J5 70916 -IGJydW5jaA== 70917 -ZGVuc2l0eQ== 70918 -X09X 70919 -IENvcm9uYXZpcnVz 70920 -IENGUg== 70921 -YmFr 70922 -XENhdGVnb3J5 70923 -5pWw57uE 70924 -IGludm9rZXZpcnR1YWw= 70925 -fSgpCg== 70926 -IHN1amV0 70927 -LW1hcmtlcg== 70928 -aXNkaWdpdA== 70929 -IE1vYmls 70930 -IEpzb25SZXF1ZXN0QmVoYXZpb3I= 70931 -X1JFTU9URQ== 70932 -LmV4aXN0c1N5bmM= 70933 -IHJpY2hlcw== 70934 -LnByZXNlbnRlcg== 70935 -IGdsQ29sb3I= 70936 -IGhhbnlh 70937 -IGZvcnRyZXNz 70938 -IGZsYXNoZWQ= 70939 -dml6 70940 -cmVxdWVudGx5 70941 -YnVhdA== 70942 -JGNvbg== 70943 -Pnw= 70944 -LkZ1bmM= 70945 -IGh1bW9yb3Vz 70946 -dWVt 70947 -LlpFUk8= 70948 -IFNUTA== 70949 -IEJ1aw== 70950 -L3NhbXBsZQ== 70951 -IEdyb3M= 70952 -UmVjaXBlcw== 70953 -IGluZmxhdGVk 70954 -IHN3dW5n 70955 -OkY= 70956 -RmFjaW5n 70957 -LlRoZW1l 70958 -0L3QuNC6 70959 -IHNwbGVuZGlk 70960 -IHJlcXVlc3RJZA== 70961 -LkNlbnRlclNjcmVlbg== 70962 -L2F1dG9sb2Fk 70963 -ZW1iZWRkZWQ= 70964 -X2RlcGFydA== 70965 -IFBvcnRz 70966 -4LmD 70967 -0LDQudC0 70968 -ZGlzY3Vzc2lvbg== 70969 -X2NvbnN1bQ== 70970 -IHNjb3V0cw== 70971 -IGNvbGFib3I= 70972 -LlN0YWdl 70973 -Lm5hbm8= 70974 -ZWxkb3Jm 70975 -IGdlbWFjaHQ= 70976 -ICAgICAgICAgICAgICAgICAgICAgICAgICAK 70977 -IHBvbGljeW1ha2Vycw== 70978 -X1BLVA== 70979 -LFRo 70980 -b2t5 70981 -X1VJRA== 70982 -UGluZw== 70983 -IG9yY2hlc3Q= 70984 -IG9wdGljcw== 70985 -dWhhbg== 70986 -IFhPUg== 70987 -IGVzcGHDsW9s 70988 -IEFkaWRhcw== 70989 -cm5n 70990 -bWFucw== 70991 -LnZzdGFjaw== 70992 -IGdldGF3YXk= 70993 -IGhpZXJhcmNoaWNhbA== 70994 -YW5vaWE= 70995 -IEJpdG1hcEZhY3Rvcnk= 70996 -cmVhbG0= 70997 -CWFw 70998 -X2FwcHM= 70999 -LWRpdmlkZXI= 71000 -LmRyYXdlcg== 71001 -IEhBUkQ= 71002 -J107Pz4K 71003 -LXBhY2tlZA== 71004 -5rK7 71005 -X1NUUlVDVFVSRQ== 71006 -W1k= 71007 -aVBhcmFt 71008 -KGVx 71009 -IGVuY29tcGFzc2Vz 71010 -IFwKCg== 71011 -LT5b 71012 -JnV0bQ== 71013 -Z3JvdXBvbg== 71014 -c3RyYXRl 71015 -RFk= 71016 -b21vcnBoaWM= 71017 -Jzpb 71018 -IGdyYXZpdGF0aW9uYWw= 71019 -IE1pY2hh 71020 -IFRlbmNlbnQ= 71021 -IGNvYWNoZWQ= 71022 -7Lac 71023 -0YPQvNC10L3Rgg== 71024 -L21vYmlsZQ== 71025 -TW91c2VEb3du 71026 -YnVk 71027 -IFlhcw== 71028 -IFByb3ZpZGVycw== 71029 -Tlo= 71030 -CXJlcG9ydA== 71031 -ZXJybXNn 71032 -IGltYWdlUGF0aA== 71033 -YWN0ZXJpYWw= 71034 -IE1hbmdh 71035 -d2lja2x1bmc= 71036 -KHVzdWFyaW8= 71037 -IikpOw0KDQo= 71038 -LyoqKg== 71039 -IG9yZ2FuaXNl 71040 -SW5kZXhlZA== 71041 -X1FVQUw= 71042 -KFB5T2JqZWN0 71043 -IHN1cnJlbmRlcmVk 71044 -UE9DSA== 71045 -IE5PVEVT 71046 -XFwi 71047 -LWpvYg== 71048 -IHNldmVudHk= 71049 -IyMjIwo= 71050 -IE1hbm9y 71051 -IGRvd25yaWdodA== 71052 -IHRpbWVmcmFtZQ== 71053 -aW5zdXJhbmNl 71054 -Y2hlY2tlcg== 71055 -IFNFQ1JFVA== 71056 -IGVjaG9lcw== 71057 -IENhcm1lbg== 71058 -LnNldEhvcml6b250YWxBbGlnbm1lbnQ= 71059 -IGlzQ2hlY2tlZA== 71060 -IFRPUg== 71061 -X25u 71062 -KCco 71063 -RmV0Y2hSZXF1ZXN0 71064 -IFByaW50ZWQ= 71065 -Rmx1aWQ= 71066 -IFNUQUNL 71067 -R0VT 71068 -YWlnbmVk 71069 -aWdvcg== 71070 -LlVua25vd24= 71071 -Q0JD 71072 -IENhcmxzb24= 71073 -LlVSSQ== 71074 -IHBsaWdodA== 71075 -L3N0YXJ0 71076 -IFBlcnNvbm5lbA== 71077 -IFBSRUZJWA== 71078 -LCoq 71079 -IGxpbWl0ZQ== 71080 -X2hlYXQ= 71081 -Je+8jA== 71082 -IERvbm5l 71083 -Z2V0Tm9kZQ== 71084 -IFNjaWVudG9sb2d5 71085 -IGNvbWV0 71086 -IHdlbmln 71087 -QXNpZGU= 71088 -IE1QRUc= 71089 -Jz8= 71090 -dmFyaWFibHk= 71091 -LmVuZERhdGU= 71092 -IHVuY29udA== 71093 -IFNjb3Jlcw== 71094 -IExvZ2luRm9ybQ== 71095 -LmdlbmVyYXRlZA== 71096 -LGNo 71097 -LW1hcg== 71098 -IE5lZA== 71099 -IGV2ZW50SWQ= 71100 -K3A= 71101 -IFNJTg== 71102 -L3Jlc2V0 71103 -LlJFQUNU 71104 -IE1lc3Np 71105 -X1JBTks= 71106 -LndyaXRlRmlsZQ== 71107 -IGNyaXBw 71108 -ZXN0aGV0aWM= 71109 -RVJTSVNU 71110 -IHJlaW1idXJzZW1lbnQ= 71111 -Q3VycmVudFZhbHVl 71112 -IHVuaW4= 71113 -RG93bkxhdGNo 71114 -IHBhZGRpbmdSaWdodA== 71115 -IHN0b2NrZWQ= 71116 -Lycu 71117 -IHJlcGF5bWVudA== 71118 -dHJhaw== 71119 -L2JhY2tlbmQ= 71120 -INC40LfQvNC10L0= 71121 -Q1NS 71122 -IHByZXZlbnRpdmU= 71123 -IHBhbnRhbGxh 71124 -X3RyaW0= 71125 -UGVkaWRv 71126 -aG9zcGl0YWw= 71127 -IG1hbmFnZWFibGU= 71128 -cm91dGVQYXJhbXM= 71129 -dGV4dHVyZXM= 71130 -Li4uLi4uCgo= 71131 -IHPDqWxlY3Rpb24= 71132 -TmFtZVZhbHVlUGFpcg== 71133 -IHBvbGx1dA== 71134 -TW9kZXM= 71135 -IExhdWQ= 71136 -amF5 71137 -IFVycw== 71138 -IHNpZ25lcg== 71139 -IEpK 71140 -IENoZXJva2Vl 71141 -X0VYSVNUUw== 71142 -IGR3YXI= 71143 -ICgkKCcj 71144 -IHJlZWY= 71145 -Pnsk 71146 -IEJheWxvcg== 71147 -IE1vZGVsU3RhdGU= 71148 -LV8= 71149 -IFN0cnVjdHVyZXM= 71150 -IHNvdXZlbnQ= 71151 -U3BlY2lmeQ== 71152 -KHBpcGU= 71153 -IGZyYWNraW5n 71154 -IEdQQQ== 71155 -IGJlbGU= 71156 -CQkJCQkJCSAgIA== 71157 -IE1pbm9yaXR5 71158 -IHR1ZA== 71159 -IG9wZW5uZXNz 71160 -IElsbHVzdHJhdGVk 71161 -IG94aWRhdGlvbg== 71162 -IE5L 71163 -CVVwZGF0ZQ== 71164 -IEVNUw== 71165 -IFRlZGR5 71166 -IGdlbmVyYWxz 71167 -CU1hdA== 71168 -IHJhZGlvcw== 71169 -IEFudGlxdWU= 71170 -Y29ub215 71171 -IFNxdWFkcm9u 71172 -KScsJw== 71173 -5aOw 71174 -IHlvdXJl 71175 -IE1haW5QYWdl 71176 -IGJlaGF2aW91cnM= 71177 -ZW5naHQ= 71178 -KEAiJUAiLA== 71179 -IHRlc3RjYXNl 71180 -IENvbXBpbGF0aW9u 71181 -IGZsYXZvdXJz 71182 -IEV4dGVuZA== 71183 -aWxsYXRvcg== 71184 -IGNvaA== 71185 -IHNwbGluZQ== 71186 -IEtH 71187 -LXBheQ== 71188 -IGNvbW11bmlzbQ== 71189 -IEJ1c2luZXNzZXM= 71190 -b2NraW5n 71191 -Lk1heExlbmd0aA== 71192 -YXNzYW5kcmE= 71193 -cXVpcmluZw== 71194 -YWRkZW4= 71195 -IEplYg== 71196 -X2ZhdWx0 71197 -W2ZpbGU= 71198 -IHByb21pbmVuY2U= 71199 -ZGlzY2lwbGluYXJ5 71200 -4oCUdGhleQ== 71201 -X2V4dGVudA== 71202 -IFZJQw== 71203 -IGVudGFpbHM= 71204 -LnBhcnRuZXI= 71205 -IGhpcHBvYw== 71206 -TGVhZ3Vl 71207 -55S3 71208 -d2lwZQ== 71209 -LXNwaW5uZXI= 71210 -IHNhbHV0ZQ== 71211 -IFN1cmdpY2Fs 71212 -KG91dHB1dHM= 71213 -d29ya2Vk 71214 -W3N0cmxlbg== 71215 -YXBwb2ludGVk 71216 -IEhlZw== 71217 -IEFDUEk= 71218 -KFte 71219 -dWFsYQ== 71220 -X3RvbA== 71221 -IFJpdA== 71222 -LlBheW1lbnQ= 71223 -a293c2tp 71224 -IHdhbG1hcnQ= 71225 -cmVxdWlyZW1lbnRz 71226 -IEZJTlNFUQ== 71227 -X0JBQ0tHUk9VTkQ= 71228 -IE9zYm9ybmU= 71229 -KGVycm9yTWVzc2FnZQ== 71230 -UmVwb3J0aW5n 71231 -IGF1Y3Rpb25z 71232 -IGNvbWJvcw== 71233 -IE5vdGljZWQ= 71234 -X29jdA== 71235 -IHByaW1lcm8= 71236 -dGFpcmU= 71237 -X2hy 71238 -INC80L7QtA== 71239 -IGNvbnRyYWRpY3Rvcnk= 71240 -PSJA 71241 -YWNoaW5lcw== 71242 -KG9wdGFyZw== 71243 -IFBlbmd1aW4= 71244 -IEFiYmFz 71245 -IHN1YmxpbWU= 71246 -IHBhZ2VhYmxl 71247 -IERlZmVuc2l2ZQ== 71248 -IGRpc3RpbmN0bHk= 71249 -IEF1dG9tYXRpY2FsbHk= 71250 -VW5kZXJzdGFuZGluZw== 71251 -RXF1YWxpdHlDb21wYXJlcg== 71252 -Z290YQ== 71253 -ICI6Og== 71254 -IHB1bHZlcg== 71255 -IEJhdHRsZXM= 71256 -IHVucGFyYWxsZWxlZA== 71257 -VENIQQ== 71258 -IGNvbnN0cnVlZA== 71259 -LWFmZg== 71260 -IHByZWN1cnNvcg== 71261 -LWxmcw== 71262 -IG1hZHVyYXM= 71263 -IERhaXN5 71264 -IEFyYmVpdHM= 71265 -Lk1hbmFnZW1lbnQ= 71266 -CUlu 71267 -IHJvYmVz 71268 -IHNww6lj 71269 -4oCcKA== 71270 -IG1hdGVybml0eQ== 71271 -ZXh0ZW50 71272 -IFNwYWNlcg== 71273 -RGlkQXBwZWFy 71274 -CXVz 71275 -LmdldFJlcXVlc3REaXNwYXRjaGVy 71276 -KGNvbHM= 71277 -IHBsdW1tZXQ= 71278 -7IU= 71279 -IHsKCgoK 71280 -w6lyaWNh 71281 -IFNpemVz 71282 -LmVudW0= 71283 -LkhpZ2hsaWdodA== 71284 -ICEhfTwv 71285 -QVRURVJZ 71286 -IFNvcm9z 71287 -R0xmbG9hdA== 71288 -44KE 71289 -IEplbm5pbmdz 71290 -Pz8KCg== 71291 -IFJvbWVv 71292 -ID8+CgoK 71293 -V2Vubg== 71294 -IGNsaW1heA== 71295 -IGNyZW0= 71296 -X3RoYXQ= 71297 -W+KApg== 71298 -X2RvbWFpbnM= 71299 -X1JFUExZ 71300 -IGNvbXBsZXRh 71301 -VkVTVA== 71302 -X3BhcnRpY2xl 71303 -IHNvcA== 71304 -IGZhdGFsaXRpZXM= 71305 -aW1wbGlmeQ== 71306 -IFNLRg== 71307 -IGluZnVzaW9u 71308 -IEphdmllcg== 71309 -IGJhbGxldA== 71310 -IGFtaWdv 71311 -LndhbnQ= 71312 -IGNvbGxhZ2Vu 71313 -IExhd3llcg== 71314 -LlN0YXRlbWVudA== 71315 -LnJ0 71316 -YmFhcg== 71317 -RW5kUG9pbnQ= 71318 -IEJlaw== 71319 -U0hJUA== 71320 -IHBhdHJpYXJjaA== 71321 -IEF1bnQ= 71322 -X1RN 71323 -IG3DrW4= 71324 -IG1hc3RlcmVk 71325 -V1hZWg== 71326 -IGVzcG9z 71327 -PWxvZ2dpbmc= 71328 -IHJpZ2h0ZW91c25lc3M= 71329 -dG9ycmVudA== 71330 -IGJzdA== 71331 -X0NIQUlO 71332 -IG91dHNraXJ0cw== 71333 -KHJvdGF0aW9u 71334 -ICcuJyk= 71335 -aWdyYW50cw== 71336 -K2xzaQ== 71337 -IENDVFY= 71338 -X1BIQVNF 71339 -LmF6dXJl 71340 -X1Byb2Nlc3M= 71341 -dmFl 71342 -IFRyb3BpY2Fs 71343 -IEFua2FyYQ== 71344 -aW1hZ2VWaWV3 71345 -X1JVTk5JTkc= 71346 -ICopX18= 71347 -4bq/bg== 71348 -KGNsaQ== 71349 -c2NhdHRlcg== 71350 -IHNjaGU= 71351 -UmVnaXN0cmFy 71352 -IGFpcmluZw== 71353 -IHB5cGxvdA== 71354 -aXNpw7Nu 71355 -L2N1c3RvbWVy 71356 -IHNpbXBsZW1lbnQ= 71357 -IGNsYXNzeQ== 71358 -IERXQw== 71359 -IEJhc2hhcg== 71360 -IERFVkVMTw== 71361 -IFZpY2s= 71362 -YXZhaWw= 71363 -IEjDtg== 71364 -X2V4dGVuZA== 71365 -ZHJGYw== 71366 -LmlzTm90Qmxhbms= 71367 -IHBsYWlz 71368 -fH0K 71369 -IHBvcm5vZmls 71370 -bGFicw== 71371 -IGhhdXM= 71372 -IG9yaWdpbmF0aW5n 71373 -IHN1cnJvdW5kcw== 71374 -IFFVQUw= 71375 -bWVn 71376 -L2xvZ2dlcg== 71377 -W29iag== 71378 -IGlycmVzcG9uc2libGU= 71379 -IFB1YmxpY0tleQ== 71380 -SE9ORQ== 71381 -Oicv 71382 -aWJveA== 71383 -IEZWZWN0b3I= 71384 -fHsK 71385 -YXRhbG9hZGVy 71386 -aGF3a3M= 71387 -SERS 71388 -IGVzY2FsYXRpb24= 71389 -IFBvZHNEdW1teQ== 71390 -ZWxpdGU= 71391 -IHByZXN1cA== 71392 -Q2FjaGVk 71393 -Pkc= 71394 -Lm9wdGltaXplcg== 71395 -IFZpc2libGU= 71396 -tIA= 71397 -IG5lbg== 71398 -IHBjcw== 71399 -IElkbGU= 71400 -W0FueQ== 71401 -IGtleWJvYXJkcw== 71402 -IENPTVBPTkVOVA== 71403 -IHRpdGFuaXVt 71404 -KG11dA== 71405 -IExlZGdlcg== 71406 -IHByb3NwZXJvdXM= 71407 -ZXRyb2ZpdA== 71408 -X0xM 71409 -X3BhdGllbnQ= 71410 -IHBkYXRh 71411 -IGtvbnRha3Rl 71412 -U3dpcGU= 71413 -IGNoZWVyZnVs 71414 -IEhvbmR1cmFz 71415 -Il1bJA== 71416 -IGhlbW9ycmg= 71417 -IjoiKw== 71418 -IGxlYXNpbmc= 71419 -IGluc3RhbGxz 71420 -IFBheA== 71421 -IExvZ2lzdGljcw== 71422 -IGtpbmV0aWM= 71423 -IFBob24= 71424 -X21vdmVtZW50 71425 -CWJ5dGVz 71426 -IGNpbmNv 71427 -IE1hZG5lc3M= 71428 -Iikr 71429 -IEpF 71430 -X2lq 71431 -U2NlbmVNYW5hZ2Vy 71432 -IEJ1c3Q= 71433 -cHRlc3Q= 71434 -YWVh 71435 -IGJlc3Nlcg== 71436 -w61n 71437 -0LTQuNC9 71438 -KHRhc2tz 71439 -KCIoIg== 71440 -c2V0VHlwZQ== 71441 -KG91dGZpbGU= 71442 -CXJlc2V0 71443 -IEFSQw== 71444 -IG3DunNpY2E= 71445 -IFNoZWxm 71446 -IG1pblk= 71447 -cGNo 71448 -IHdlaWJlcg== 71449 -aXNzb3I= 71450 -IHRyb3V2ZQ== 71451 -CUJ1dHRvbg== 71452 -IHJlZ2VuZXJhdGVk 71453 -xaNp 71454 -aW1hY2hpbmVyeQ== 71455 -YmxvY2tpbmc= 71456 -LmRhdGFUYWJsZXM= 71457 -X2ZyYWM= 71458 -IEFkdmFudGFnZQ== 71459 -LnZpc2l0TWV0aG9k 71460 -6YeN5paw 71461 -IGV4dHJhcG9s 71462 -IHRlYXNpbmc= 71463 -IEhpdGNo 71464 -IEdlZWs= 71465 -RVNDTw== 71466 -IHdpY2g= 71467 -CWF4 71468 -X2RlY29y 71469 -IHNjcmVlbldpZHRo 71470 -IFNvcGhpYQ== 71471 -Rm9yZ290 71472 -LnVuaQ== 71473 -IFZlbnR1cmU= 71474 -X2NvbGxpc2lvbg== 71475 -IGxhd21ha2Vy 71476 -KEVkaXQ= 71477 -YmxlcnM= 71478 -IGdldE5leHQ= 71479 -4oCUeW91 71480 -TWVkaWFQbGF5ZXI= 71481 -IEhvcmRl 71482 -IENvbmdyZXNzbWFu 71483 -b2JzZXJ2YXRpb25z 71484 -CXByb3BlcnR5 71485 -IDwtLQ== 71486 -Q3JlYXRlZEF0 71487 -dWJ5dGU= 71488 -IHF1YXJhbnRpbmU= 71489 -IGRpc3RyZXNzZWQ= 71490 -X0FQQg== 71491 -IEdvb2RtYW4= 71492 -44Kr 71493 -IHJlY29tZW5k 71494 -X1BSSU5URg== 71495 -RE9ORQ== 71496 -QmluZGFibGU= 71497 -cnN0cmlw 71498 -Y2VudGFqZQ== 71499 -IFVuZXhwZWN0ZWQ= 71500 -IFNDSE9PTA== 71501 -IFByb2Zlc3Npb25hbHM= 71502 -IEdQVXM= 71503 -TGVzc29u 71504 -RXhjbHVzaXZl 71505 -IGF0cmF2 71506 -IERhbms= 71507 -IExhd3llcnM= 71508 -IFdhbHRvbg== 71509 -Pltd 71510 -IGFsb3Vk 71511 -PSIuLi8uLi8uLi8= 71512 -IGRlYmF0aW5n 71513 -IEFWRw== 71514 -X1ZPTA== 71515 -L2NnaQ== 71516 -LmRlZw== 71517 -Omc= 71518 -LkluZm9m 71519 -TWVhc3VyZVNwZWM= 71520 -LnNvbmc= 71521 -bXRyZWU= 71522 -dWxscw== 71523 -Sm9yZGFu 71524 -IENvdmVycw== 71525 -IGF0dHJpYnV0YWJsZQ== 71526 -IGplZGlz 71527 -aWF0cmljcw== 71528 -IHJvdHRlcmRhbQ== 71529 -IG1lbGQ= 71530 -IENvbnRlbnRUeXBl 71531 -IG1hbnRsZQ== 71532 -IGFsaWNl 71533 -X2R1cGxpY2F0ZQ== 71534 -L0ludGVybmFs 71535 -IGZpbGVzaXpl 71536 -CWZpcmU= 71537 -cmVzZQ== 71538 -b25kZXJl 71539 -IGZhbWlsaWFyaXR5 71540 -IENyZXN0 71541 -IGthcm1h 71542 -IHRvcmlubw== 71543 -IG1lc2E= 71544 -L3RlbXA= 71545 -IGNoaXI= 71546 -IE92ZXJmbG93 71547 -IHRlbmVtb3M= 71548 -dW5paw== 71549 -TkVYVA== 71550 -QWxsZQ== 71551 -IG54dA== 71552 -TWFydA== 71553 -IGF0bA== 71554 -IHBlcmlvZG8= 71555 -X3lvdQ== 71556 -IH0pKS4= 71557 -aW50ZXN0aW5hbA== 71558 -LkFkYXB0ZXJWaWV3 71559 -IGhlc2l0YW50 71560 -IGNvbXBhcmF0aXZlbHk= 71561 -LlVJbnQ= 71562 -KHZpZXdNb2RlbA== 71563 -IHNhbmdhdA== 71564 -IFJlc3BvbnNpdmU= 71565 -IFphY2s= 71566 -4oU= 71567 -SkFWQQ== 71568 -IEZ1bGxlcg== 71569 -IOKdpA== 71570 -LkNvbnN1bWVy 71571 -IGFuaw== 71572 -IHJlYWN0b3Jz 71573 -ZnVjaw== 71574 -X3JhdA== 71575 -IHNlc3Npb25GYWN0b3J5 71576 -X2JhY2t3YXJk 71577 -IHNjcmFtYmxlZA== 71578 -CXRo 71579 -IGluc2Vuc2l0aXZl 71580 -IGNoYW1wcw== 71581 -IG5naW54 71582 -IGNvbmhlYw== 71583 -IEphc3Blcg== 71584 -LmZt 71585 -U3RyaWN0RXF1YWw= 71586 -YWNoc2Vu 71587 -LU5vdg== 71588 -bGFzc2Vu 71589 -LmludGVncmF0aW9u 71590 -KGxibA== 71591 -Q29tcG9zZQ== 71592 -IEZvbg== 71593 -w5o= 71594 -R3JhdGlz 71595 -IExpbWU= 71596 -IEFkYXB0ZXJWaWV3 71597 -IHBvaXNvbmVk 71598 -YW5jaG9ycw== 71599 -6K6+6K6h 71600 -J10/PiI= 71601 -IHByb2N1cg== 71602 -SXRhbHk= 71603 -Lk1PTlRI 71604 -IExVQQ== 71605 -IExpdGh1YW5pYQ== 71606 -IEhlYWRz 71607 -X0NIVU5L 71608 -IFBVU0g= 71609 -QXNwZWN0UmF0aW8= 71610 -IHdlZw== 71611 -IHZpZHM= 71612 -IFdlaW4= 71613 -CUlOVA== 71614 -c2Vzc2lvbklk 71615 -SW5kdXN0cnk= 71616 -IGRlbm91bmNlZA== 71617 -SktMTQ== 71618 -IFZhbmVzc2E= 71619 -LklkZW50aWZpZXI= 71620 -cHJvcHJp 71621 -INC40LM= 71622 -IHTDqWNu 71623 -IG1vc2FpYw== 71624 -U3RyZWFtUmVhZGVy 71625 -LVRo 71626 -Zm9ydGg= 71627 -IGFkaGVyZW5jZQ== 71628 -YmF0ZQ== 71629 -IGtuaWdodHM= 71630 -c291bmRz 71631 -IHNhbGxl 71632 -T01FVA== 71633 -44K544OI 71634 -LXRt 71635 -IFJoZQ== 71636 -LkZpbGVPdXRwdXRTdHJlYW0= 71637 -5YiG57G7 71638 -IEVORw== 71639 -aG9saWRheQ== 71640 -IENvbmdyYXR1bGF0aW9ucw== 71641 -KSgK 71642 -IGFnZ3JlZ2F0ZXM= 71643 -SE9PSw== 71644 -ZXdpcmU= 71645 -U2VuYXRvcg== 71646 -IGVtYmVkZGluZ3M= 71647 -ZXB5 71648 -KENPTQ== 71649 -IHJvYmJlcg== 71650 -w6R0ZXI= 71651 -d2FuZw== 71652 -X3RlYWNoZXI= 71653 -IHJlc2VudG1lbnQ= 71654 -IGxldHR1Y2U= 71655 -ZXJyZXVy 71656 -KGlj 71657 -IFRhY3RpY2Fs 71658 -IENvbnRyYWN0cw== 71659 -IG3Dpm5k 71660 -IHNpdGlvcw== 71661 -IGJhc3RhbnRl 71662 -IG51ZXZvcw== 71663 -CU5kckZj 71664 -IHByaXZhdGVLZXk= 71665 -dWNjaA== 71666 -TU1kZA== 71667 -IOi+k+WHug== 71668 -dW1iYQ== 71669 -QGZvcmVhY2g= 71670 -OiIpOwoK 71671 -IHNsaXBwZXJ5 71672 -IEtleXN0b25l 71673 -IHBpb25lZXJpbmc= 71674 -X3RyaWFuZ2xl 71675 -KCIK 71676 -CQkJCQkJCQkgIA== 71677 -IEludGVydmVudGlvbg== 71678 -U0NJ 71679 -IGNKU09O 71680 -IHRlcm1pbmF0aW5n 71681 -67mE 71682 -IGJhYnlz 71683 -U3Vic2V0 71684 -IOuh 71685 -IHNldWxlbWVudA== 71686 -IG11ZXN0cmE= 71687 -RW50cmU= 71688 -5Lul5LiK 71689 -bmdv 71690 -ImJ5dGVz 71691 -UVJTVA== 71692 -IHlwb3M= 71693 -cGVyc29uYQ== 71694 -IERlcGxveQ== 71695 -Y2Vl 71696 -IOCu 71697 -LmdvYWw= 71698 -IGhhYml0YXRz 71699 -IGlzQWRtaW4= 71700 -IGV4cGxvaXRpbmc= 71701 -IHZlbnRpbA== 71702 -IEJhbGxz 71703 -2KfYqA== 71704 -IG1pbmRmdWxuZXNz 71705 -KGt3YXJncw== 71706 -IHJlc2VtYmxpbmc= 71707 -IGNob2ly 71708 -IG9uQmFja1ByZXNzZWQ= 71709 -IFNFQ1VSSVRZ 71710 -L2d0ZXN0 71711 -IGp1c3RpY2Vz 71712 -IGludGVnZXJWYWx1ZQ== 71713 -YmxhaA== 71714 -IEFpbQ== 71715 -X2ZpbmFsaXpl 71716 -a2Vo 71717 -IENvbXBsZXhpdHk= 71718 -IGF1Z3VzdA== 71719 -Z2V0RWxlbWVudHNCeVRhZ05hbWU= 71720 -IHByZWFjaA== 71721 -IHByb251bmNpYXRpb24= 71722 -IFRyYXNo 71723 -LXBlcmNlbnQ= 71724 -X1BSSVY= 71725 -IEh1bnRz 71726 -IEN1cnNl 71727 -dWVsbGVu 71728 -IGhlYXZ5d2VpZ2h0 71729 -WGk= 71730 -CXNlbGVjdGVk 71731 -IE1jQ295 71732 -5byC5bi4 71733 -fD0K 71734 -IEJhdHRsZWZpZWxk 71735 -SXRlbUltYWdl 71736 -IGRlZHVjdGlvbnM= 71737 -IEVsZW1lbnRhbA== 71738 -KCkpOy8v 71739 -IEJ1cms= 71740 -fSkNCg0K 71741 -c3dpZnQ= 71742 -L2Z1bmN0aW9u 71743 -VXN1YWxseQ== 71744 -X1N0 71745 -X2ZlYXRz 71746 -IElzVmFsaWQ= 71747 -IHphZA== 71748 -SW1hZ2VDb250ZXh0 71749 -IGNsYXNzbmFtZQ== 71750 -IGRvbm5lcg== 71751 -IC0tPgoKCg== 71752 -IG1vdG9yY3ljbGVz 71753 -KycvJys= 71754 -IHNldEJhY2tncm91bmQ= 71755 -XENNUw== 71756 -LkFsbEFyZ3NDb25zdHJ1Y3Rvcg== 71757 -IExleGluZ3Rvbg== 71758 -LmV4YW1wbGVz 71759 -IFB1cnM= 71760 -UHVzaE1hdHJpeA== 71761 -ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 71762 -LmFkZFRhcmdldA== 71763 -cG9yYQ== 71764 -RnVsbHNjcmVlbg== 71765 -IGdvb2Y= 71766 -aGxlbg== 71767 -w6RnZQ== 71768 -IENVUkw= 71769 -IEludGVyZXN0aW5n 71770 -IHJldHJpZXZlcw== 71771 -X09iag== 71772 -aW5uZXNz 71773 -LS0tLS0KCg== 71774 -LnRzdg== 71775 -KElN 71776 -IEJyYXZlcw== 71777 -X0lTUg== 71778 -b3N0aQ== 71779 -4buT 71780 -IEV4dGVyaW9y 71781 -IENvdXJ0bmV5 71782 -IHJlc2lkdWVz 71783 -VGllcg== 71784 -Lio7DQoNCg== 71785 -OmJsYWNr 71786 -d2ViVmlldw== 71787 -InBhdGg= 71788 -IG1hc2E= 71789 -XSE9Jw== 71790 -IE1hdGNoaW5n 71791 -ZHVy 71792 -SnZt 71793 -PWNvbnRleHQ= 71794 -X1JJTkc= 71795 -IHByb3BvbmVudHM= 71796 -IFFTdHJpbmdMaXRlcmFs 71797 -IGluZmxhdGU= 71798 -PEZsb2F0 71799 -IERvbm92YW4= 71800 -KElP 71801 -SE9SVA== 71802 -IGRpc2FncmVlZA== 71803 -aXNreQ== 71804 -YXNraW5n 71805 -X1ZFQw== 71806 -SEFTSA== 71807 -IG1hdGhz 71808 -IExhc3RseQ== 71809 -IGRlcHJlc3Npbmc= 71810 -LmVzdGFkbw== 71811 -IGhhbG8= 71812 -X2JsZQ== 71813 -IEdhYnJp 71814 -PFRSZXN1bHQ= 71815 -IHRyb29w 71816 -IGVudW1z 71817 -IFNFUklBTA== 71818 -bnVtZXJ1c2Zvcm0= 71819 -IENoaWM= 71820 -LWV4ZWM= 71821 -IGJhY2tsb2c= 71822 -IEJyYXZv 71823 -UG9wTWF0cml4 71824 -IEJydXQ= 71825 -IGJsb3F1ZQ== 71826 -IGp1bml0 71827 -IFdoaWxzdA== 71828 -0YbQuNGP 71829 -ZmV3 71830 -rIE= 71831 -IFZhcmlldHk= 71832 -IFBvbGl0aWNv 71833 -ZXhlbXBsZQ== 71834 -VXNlckNvbnRyb2xsZXI= 71835 -IGhhcmRlbmVk 71836 -YWtlbnM= 71837 -IFNlZWRlcg== 71838 -b3dhcmRz 71839 -Y2hlY2tzdW0= 71840 -IFNhaQ== 71841 -VkVSVEVY 71842 -UmVzcG9uc2Vz 71843 -cGxvZGU= 71844 -LWhhcmQ= 71845 -U3BlY2llcw== 71846 -UmVuZGVyVGFyZ2V0 71847 -X0NIQVQ= 71848 -IHNob3djYXNlcw== 71849 -aXRpbWF0ZQ== 71850 -X0ZPUkVBQ0g= 71851 -X0NPTkZJR1VSQVRJT04= 71852 -ZWJh 71853 -IEVzc2VudGlhbGx5 71854 -KHBvbHk= 71855 -LWxlYXJuaW5n 71856 -IGfDpXI= 71857 -X3N1Y2M= 71858 -KE1hdA== 71859 -IGNvaWxz 71860 -YnJhcw== 71861 -IGFtYQ== 71862 -X21hdGNoaW5n 71863 -aW5kdXN0cnk= 71864 -IE5vcnJpcw== 71865 -IEV4cG9zdXJl 71866 -IHBlcnZhc2l2ZQ== 71867 -IGRleg== 71868 -5peP 71869 -IGVsZWN0cm9uaWNhbGx5 71870 -RERS 71871 -IFN0aW0= 71872 -INGE0LDQudC70LA= 71873 -IG1hZHJl 71874 -bmVtb25pYw== 71875 -a2ljaA== 71876 -IEZyYWdlbg== 71877 -IFJ1bmU= 71878 -IG9uVG91Y2g= 71879 -CXNjYWxl 71880 -IFBoYXJtYWM= 71881 -IE1hbmRhdG9yeQ== 71882 -IFN0bw== 71883 -IEJyYW0= 71884 -X0xlZnQ= 71885 -X1NUQVI= 71886 -KX19Ig== 71887 -c2Npb3VzbHk= 71888 -0LXQt9GD0LvRjNGC 71889 -56uZ 71890 -Z3Jhdml0eQ== 71891 -K0M= 71892 -fTw= 71893 -QU5HRVM= 71894 -IGNvbnRyYWN0aW9u 71895 -IFdhbGxwYXBlcg== 71896 -LkZhY2U= 71897 -IHByw7N4aW1v 71898 -LmZpZw== 71899 -bGFuZ2xl 71900 -INC/0LXRgNC10Lw= 71901 -X0NSRUFU 71902 -QmFzaWNhbGx5 71903 -IGF3YWl0cw== 71904 -IENIQVJBQ1RFUg== 71905 -IHZwbg== 71906 -SG9u 71907 -IGV2aXRhcg== 71908 -IFVuZG8= 71909 -UVM= 71910 -IEVkbXVuZA== 71911 -IG1pcmFjbGVz 71912 -IFRpbWluZw== 71913 -IFZlbmV6dWVs 71914 -LlNxcnQ= 71915 -b2lkYWw= 71916 -IGVycnM= 71917 -LS0tLS0tLS0KCg== 71918 -IERFQ0xBUkU= 71919 -IHZpZ29yb3Vz 71920 -YXJnb24= 71921 -IGFnZ3JlZ2F0ZWQ= 71922 -IFNoYXJrcw== 71923 -IEN5cnVz 71924 -IHJlcHLDqXM= 71925 -bWF0Y2hlcg== 71926 -IGd1aUFjdGl2ZQ== 71927 -PyIpCg== 71928 -IEpOSQ== 71929 -LmNoYXJzZXQ= 71930 -J3w= 71931 -IGdvYXRz 71932 -aW5kcmU= 71933 -LmdldERheQ== 71934 -IHBhcnNlcw== 71935 -IElocmVu 71936 -X18uJy8= 71937 -aWxlZ2Vz 71938 -bmF2aWdhdGU= 71939 -IEJ1ZmZ5 71940 -UEhQVW5pdA== 71941 -IG1hc3Nh 71942 -YWx0YXI= 71943 -JyldLAo= 71944 -IG92ZXJzZWVz 71945 -IHt9DQoNCg== 71946 -IFdMQU4= 71947 -Y2xpcGJvYXJk 71948 -X0luc3RhbmNl 71949 -IGdsYWRseQ== 71950 -KHNlcmllcw== 71951 -IHZhZA== 71952 -IGdldFBhZ2U= 71953 -W29m 71954 -LkludGVydmFs 71955 -aW51cw== 71956 -Y2hhckF0 71957 -b2xlbQ== 71958 -YWludGluZw== 71959 -LkFG 71960 -X21pbm9y 71961 -X0lM 71962 -O3k= 71963 -IFRlbGVjb20= 71964 -IFBvbmQ= 71965 -IG1tYXA= 71966 -L14= 71967 -IFlhaw== 71968 -IFJhYmJp 71969 -ZW5vcw== 71970 -CUNvbnRleHQ= 71971 -LnZlYw== 71972 -KEF0dHJpYnV0ZQ== 71973 -IGNhdGVnb3JpemVk 71974 -IGRpYWJldGlj 71975 -KHJhbms= 71976 -IHBhw61zZXM= 71977 -IEAiIjsK 71978 -IGppa2E= 71979 -YXJzaXR5 71980 -IC8o 71981 -LkhlbHA= 71982 -LWJhbm5lcg== 71983 -IEJ5cm9u 71984 -IHVucmVhbGlzdGlj 71985 -IHxf 71986 -IFN0b3B3YXRjaA== 71987 -IGV4ZW1wdGlvbnM= 71988 -L2NhcmRz 71989 -IHRvc3RyaW5n 71990 -bmdpbmU= 71991 -IHNwcmF3bGluZw== 71992 -IGx0ZA== 71993 -IFVuZGVyc3RhbmQ= 71994 -INGC0LXQutGB0YI= 71995 -ZXdpdG5lc3M= 71996 -IGNhbGxCYWNr 71997 -LVllYXI= 71998 -RnVlbA== 71999 -PSo= 72000 -IGludmVudG9y 72001 -IGJlc3RzZWxsaW5n 72002 -IGhhcmRuZXNz 72003 -IFR1cw== 72004 -IGtleW5vdGU= 72005 -IGJlYXU= 72006 -X2Fib3J0 72007 -IHByb3Bvcg== 72008 -IGNvbWVyYw== 72009 -X1JFRkVS 72010 -UGFz 72011 -aGF2ZW4= 72012 -LWZpeA== 72013 -Q2Fub25pY2Fs 72014 -IGxvb2tvdXQ= 72015 -RXhwbG9yZXI= 72016 -IGNlcmNv 72017 -KHNlbnNvcg== 72018 -IEpzb25TZXJpYWxpemVy 72019 -IHZva3Nlbg== 72020 -IGJyaWdodGVzdA== 72021 -IHN0YWJiaW5n 72022 -LkJl 72023 -LmFkZFByb3BlcnR5 72024 -IEh1bXBo 72025 -IGlzQXV0aGVudGljYXRlZA== 72026 -5rKh 72027 -IHBvcmVz 72028 -IGplZ28= 72029 -IFNob3dpbmc= 72030 -ID8+Ij4NCg== 72031 -X0NPU1Q= 72032 -aWxpbmVhcg== 72033 -IFdvcmtzcGFjZQ== 72034 -IHNwZWw= 72035 -YWdvZ3Vl 72036 -IE1pbGxlbm5pdW0= 72037 -IFBvcHVsYXRl 72038 -IG5pZA== 72039 -LnBhcnNlQ29sb3I= 72040 -U29sYXI= 72041 -IEdhZA== 72042 -IOykkQ== 72043 -IEthbXA= 72044 -CXJt 72045 -IGJlbno= 72046 -IEhvbmVzdGx5 72047 -IGVsZWN0cm9kZQ== 72048 -IFByYWlyaWU= 72049 -IFBST0ZJTEU= 72050 -IE9yaWVudGFs 72051 -IE9MRUQ= 72052 -L2NvcHlsZWZ0 72053 -YXdhaWk= 72054 -KHByb2R1Y3Rz 72055 -KVw8 72056 -LWNyZWF0ZWQ= 72057 -Lk1hbnlUb01hbnk= 72058 -Ikhvdw== 72059 -INCy0YvQvw== 72060 -IG1pdG9jaG9uZHJpYWw= 72061 -X3Rlc3Rpbmc= 72062 -KGNyZWF0ZWQ= 72063 -IGdldEZpZWxk 72064 -X0VWQUw= 72065 -XS4i 72066 -IEZTTQ== 72067 -IFJpdGE= 72068 -IOWPguaVsA== 72069 -IGPDtHQ= 72070 -IEluc2lnaHQ= 72071 -CW15c3FsaQ== 72072 -X3RpbWluZw== 72073 -SURP 72074 -KSkpKSkK 72075 -Q09WRVJZ 72076 -LmltYWc= 72077 -Q0RG 72078 -bHVzdA== 72079 -aWNrdA== 72080 -X0ZQ 72081 -LicsJw== 72082 -Z2Nj 72083 -IGt1cno= 72084 -X3B3bQ== 72085 -IG9kcG93aWVk 72086 -IEJhcnJpZXI= 72087 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 72088 -cGFr 72089 -LUlzcmFlbA== 72090 -IFJ1dGdlcnM= 72091 -IHNlbGVjdGVkSXRlbQ== 72092 -IFJhbWlyZXo= 72093 -RmFybQ== 72094 -IGNhbGVuZGFycw== 72095 -Z3ppcA== 72096 -IGJsb2NrYnVzdGVy 72097 -IFBseW1vdXRo 72098 -55yM 72099 -cmVzcG9uc2Vz 72100 -LkRpYWxvZ0ludGVyZmFjZQ== 72101 -LWdyYW5k 72102 -IGdldFNvdXJjZQ== 72103 -IGRlanRpbmdz 72104 -IHRpZXRlbg== 72105 -IGNvbmRlbW5hdGlvbg== 72106 -IGNvbnRpbnVhcg== 72107 -Lk1vY2tNdmM= 72108 -L2VuZ2xpc2g= 72109 -IE1lZGlhUGxheWVy 72110 -Y29tcHV0ZWQ= 72111 -IENsaXBwZXJz 72112 -KGRlbGVnYXRl 72113 -LlNsZg== 72114 -IOuhnA== 72115 -IFRpZGU= 72116 -IGlocmVt 72117 -IFdhbg== 72118 -0YPRjtGJ 72119 -fT48 72120 -RGlzY3Vzc2lvbg== 72121 -IHdhdHRz 72122 -LW1pbnVz 72123 -IEp1bGlldA== 72124 -6ZuF 72125 -IGNvbmNsdWRpbmc= 72126 -YW5kc2NhcGU= 72127 -IMO6bHRpbWE= 72128 -IERFUlA= 72129 -IHNpZ25VcA== 72130 -IFNlY29uZGx5 72131 -V0FJVA== 72132 -bGRz 72133 -LmNhbGxiYWNrcw== 72134 -KGhvdXI= 72135 -aW1hdG9ycw== 72136 -dm9sZW50 72137 -QUFG 72138 -ZWRyaXZlcg== 72139 -IE1hdGhlbWF0aWM= 72140 -PFR1cGxl 72141 -IC8+Jw== 72142 -e2o= 72143 -X0FCT1JU 72144 -RXRoZXI= 72145 -IGVkdWNhdG9y 72146 -IHByZWNhdXRpb24= 72147 -IGZpbmdlcnRpcHM= 72148 -Z2V0VmFy 72149 -Y2FtYXRhbg== 72150 -LWRlYnVn 72151 -IFJBRg== 72152 -W2FyZw== 72153 -IHJhY2Vk 72154 -IHRzdW5hbWk= 72155 -LmZsaW5r 72156 -IGdseWM= 72157 -dWtv 72158 -IE11bHRpcGx5 72159 -IHJlZGlzdHJpYnV0aW9u 72160 -QUdP 72161 -IFJvdXRpbmU= 72162 -IG9wcg== 72163 -KGxvd2Vy 72164 -IEZ1bmt0aW9u 72165 -LmRr 72166 -IGVndA== 72167 -X0JBU0lD 72168 -c3lzY2FsbA== 72169 -IExTRA== 72170 -IER1cGxpY2F0ZQ== 72171 -X3NlbGw= 72172 -IGVycm9ySGFuZGxlcg== 72173 -X2lwcw== 72174 -IGVydg== 72175 -YW5uaWU= 72176 -KHJlc291cmNlTmFtZQ== 72177 -IGJvdHRsZWQ= 72178 -IGNyYXdsaW5n 72179 -ZWdtZW50 72180 -LnNldFRhZw== 72181 -IHJzcw== 72182 -IFF1YXJyeQ== 72183 -X2V4YWN0 72184 -Lmp3dA== 72185 -IEJvYXJkcw== 72186 -b3Bp 72187 -IG5hc2Fs 72188 -IFhZWg== 72189 -LnVk 72190 -Tm9ydGhlcm4= 72191 -IGFjdGl2YXRpbmc= 72192 -ZWR4 72193 -b3ZhaA== 72194 -IGluZHg= 72195 -QWxlcnREaWFsb2c= 72196 -IHRpZW5lcw== 72197 -YW5ueWE= 72198 -X3Bhbg== 72199 -KGRlY2ltYWw= 72200 -LkRpY3Q= 72201 -IHN1YnNpZGlhcmllcw== 72202 -UHJvZHVjdE5hbWU= 72203 -RmV3 72204 -ZGF0bw== 72205 -b2RpZWQ= 72206 -LXVuZGVy 72207 -IOqygw== 72208 -54mI5pys 72209 -YXRpc20= 72210 -W01hdGg= 72211 -Lic8 72212 -KGluZmlsZQ== 72213 -IGRlbm90ZXM= 72214 -JGNsYXNz 72215 -X1NFQ1VSSVRZ 72216 -IHNld2FnZQ== 72217 -bWVsb24= 72218 -KENoYXJhY3Rlcg== 72219 -L2dpdGh1Yg== 72220 -IGdsYXJpbmc= 72221 -Lkd1aWQ= 72222 -X3NwYXJzZQ== 72223 -IE1hcmdpbg== 72224 -X2Rucw== 72225 -IG1laW5lcg== 72226 -IGxlZnRpc3Q= 72227 -CWxvYw== 72228 -YWJ5dGVz 72229 -IGVxdWlwbWVudHM= 72230 -ZXhwbw== 72231 -IFNvbWVyc2V0 72232 -RUs= 72233 -5o2i 72234 -IGxlY3R1cmVy 72235 -IG1lbWlsaWtp 72236 -5qC4 72237 -57Sg 72238 -cHJvbg== 72239 -OnBvaW50ZXI= 72240 -Ym9ycm93 72241 -IFByb3RlY3RpdmU= 72242 -X2Nm 72243 -INCV0YHQu9C4 72244 -YnBw 72245 -JzsKCgoK 72246 -YXR1cmFsbHk= 72247 -X05BVg== 72248 -IHBlcHRpZGU= 72249 -PmQ= 72250 -IGlmc3RyZWFt 72251 -X0ZBQ1RPUlk= 72252 -Jyk7Ly8= 72253 -am9pbmVk 72254 -bW9uZw== 72255 -IHRpbWVzcGVj 72256 -IGRlc3RhYmls 72257 -IGF1dG9w 72258 -LWxpbWl0 72259 -cHVibGljYXRpb24= 72260 -IERlbm4= 72261 -Lk1lbW9yeQ== 72262 -KHNrYg== 72263 -IEFuYWhlaW0= 72264 -X1JFVFVSTlRSQU5TRkVS 72265 -b3VldXI= 72266 -KF8oJw== 72267 -bGVndA== 72268 -aXN0aW5ndQ== 72269 -CXByaXY= 72270 -IHJlZGlyZWN0cw== 72271 -TXQ= 72272 -IGFsbGVlbg== 72273 -IFBvaW50Rg== 72274 -IG9taW4= 72275 -IGNpdHQ= 72276 -IFRhZ2U= 72277 -IFdhbGxz 72278 -4buJ 72279 -IG9jY3VweWluZw== 72280 -eEJG 72281 -cmFuZ2xl 72282 -IHJlbGF0aW9uYWw= 72283 -LW9yZw== 72284 -IGpwZw== 72285 -LWRlcml2ZWQ= 72286 -IG1hbGZ1bmN0aW9u 72287 -IEJlbnNvbg== 72288 -KHNjcm9sbA== 72289 -IFhE 72290 -SG9seQ== 72291 -KGNvbW1hbmRz 72292 -IHRpcHBpbmc= 72293 -IHByaW1pdGl2ZXM= 72294 -IHNleGxl 72295 -Q2FsbENoZWNr 72296 -IE1BU1RFUg== 72297 -X1RFQU0= 72298 -LnNldFJlcXVlc3RIZWFkZXI= 72299 -X3NwZWNz 72300 -IHNlcmdl 72301 -Lk1hc3Rlcg== 72302 -IGltcw== 72303 -LlNwcmluZ0Jvb3RUZXN0 72304 -cGF5cGFs 72305 -IFdBTlQ= 72306 -Lkluc3Q= 72307 -IENhcnBldA== 72308 -IHdyb25nbHk= 72309 -KCQoJy4= 72310 -IGJpbGQ= 72311 -LlJvbGw= 72312 -IFVyYg== 72313 -LWNhbg== 72314 -44GP44Gg44GV44GE 72315 -b2xpYmVyYWw= 72316 -PCEtLTw= 72317 -4oCUZm9y 72318 -IG5lZ2F0ZQ== 72319 -KG5vcm0= 72320 -YWVj 72321 -X3NhbGFyeQ== 72322 -cGxhaW50ZXh0 72323 -b2Rlc2s= 72324 -IEJvc2No 72325 -U2NpZW50aXN0cw== 72326 -aW5kZXhlcw== 72327 -IG1weg== 72328 -IGdyb3VuZHdhdGVy 72329 -fX0pOwo= 72330 -0LDQu9C40Lc= 72331 -IGVybw== 72332 -IHByZXNjcmliZQ== 72333 -IEV4dHI= 72334 -PEFycmF5TGlzdA== 72335 -IGF0cm9jaXRpZXM= 72336 -QXJlYXM= 72337 -IFRJbnQ= 72338 -KHBsYXllcnM= 72339 -IGRhdGFi 72340 -IHd5bQ== 72341 -44Gb 72342 -IGR1YXM= 72343 -X3Bvc3NpYmxl 72344 -IGluc3RydWN0aW9uYWw= 72345 -aXRpb25lcg== 72346 -L2F1ZGlv 72347 -ICAgICAgICAgICAgICAgIAoK 72348 -c3RvcmVk 72349 -T01QSQ== 72350 -IGFwcHJlbnRpY2Vz 72351 -VGVuYW50 72352 -IENvdXQ= 72353 -IGNvbnRyYWNlcHRpb24= 72354 -TG9hbg== 72355 -X3Zpc2liaWxpdHk= 72356 -J3x8 72357 -LlBhcnNlRXhjZXB0aW9u 72358 -IGNvaW5jaWRl 72359 -LmdldFdpbmRvdw== 72360 -IE1hcnRpYWw= 72361 -X3Rscw== 72362 -L2Jvb2tz 72363 -IG91dHJhZ2Vk 72364 -ICh+KA== 72365 -c3Ryc3Ry 72366 -IEJveGVz 72367 -6YO9 72368 -44Ol 72369 -Uk9J 72370 -RnVuY3Rpb25hbA== 72371 -IFByb2Q= 72372 -PFRlc3Q= 72373 -IHZpZGVvdA== 72374 -IGFtb3Jl 72375 -YWJicg== 72376 -IE1vbnVtZW50 72377 -IHJlaW5mb3JjZW1lbnQ= 72378 -IENvY29udXQ= 72379 -LnNlbmRTdGF0dXM= 72380 -Lmtl 72381 -IExlYXA= 72382 -X2FydGljbGVz 72383 -UGll 72384 -IElydmluZQ== 72385 -QUJDREVGR0hJ 72386 -IEV4cGxhbmF0aW9u 72387 -Z3JvdXBCeQ== 72388 -IG92ZXJoZQ== 72389 -IGFuw6Fs 72390 -IGNsYXNzaWZpZXJz 72391 -IE1peGVy 72392 -L2NvbG9ycw== 72393 -IFVzZXJEYXRh 72394 -X0FSUk9X 72395 -X3ZsYW4= 72396 -LkNyZWF0ZURpcmVjdG9yeQ== 72397 -IEhhaw== 72398 -IEJvbmVz 72399 -IEFwaVJlc3BvbnNl 72400 -IE1vb2R5 72401 -REFD 72402 -Z2V0Yw== 72403 -6LaF 72404 -LkZpcmU= 72405 -6aM= 72406 -IGhpdHRlcg== 72407 -ZnJlc2g= 72408 -4LmB 72409 -IENoaWxkaG9vZA== 72410 -eG9y 72411 -LWh0dHA= 72412 -IE1PUg== 72413 -LnNlbmRLZXlz 72414 -X3NoYXBlcw== 72415 -IFVwcw== 72416 -IEFycmVzdA== 72417 -YXp6aQ== 72418 -X29wY29kZQ== 72419 -Lk5vbWJyZQ== 72420 -IHByw7Nw 72421 -IHp4 72422 -IHRyZW1lbmRvdXNseQ== 72423 -U3BhY2Vz 72424 -ZWNj 72425 -IHZlbHZldA== 72426 -IG1lbW9yaWE= 72427 -IExBUA== 72428 -LkRyYXdMaW5l 72429 -IHRhcmdldFR5cGU= 72430 -cmVzdHJpY3Rpb24= 72431 -IERSVg== 72432 -W3RvcA== 72433 -IeKAmQ== 72434 -L2NoYXQ= 72435 -IHNvbmlj 72436 -VG9yb250bw== 72437 -b3dp 72438 -LmRvY3M= 72439 -IEluaXRpYWxpc2U= 72440 -IDwh 72441 -LnRibA== 72442 -LlByZXBhcmVkU3RhdGVtZW50 72443 -L2RvbQ== 72444 -LnJvdA== 72445 -X1BST00= 72446 -S2VlcGluZw== 72447 -IGhhcmdh 72448 -IGpvcm4= 72449 -IGlkZW50aWZpYWJsZQ== 72450 -W2lw 72451 -UGluaw== 72452 -X0hlYWRlcg== 72453 -w5E= 72454 -YWRsZQ== 72455 -572R57uc 72456 -c2VxdWVudA== 72457 -QWN0aXZhdGVk 72458 -dG1wbA== 72459 -IFBhbGw= 72460 -IGZhdGFsbHk= 72461 -fX0pCg== 72462 -UG9wb3Zlcg== 72463 -IE1jTGFyZW4= 72464 -Q2hhbmdlZEV2ZW50QXJncw== 72465 -IEZvcm1hdGlvbg== 72466 -TmFt 72467 -bmV3c2xldHRlcg== 72468 -LmZyb21TdHJpbmc= 72469 -X2ltbQ== 72470 -QVBQRUQ= 72471 -LG5vZGU= 72472 -KGRldA== 72473 -IHBhcmFsbGVscw== 72474 -IGxhc2Vycw== 72475 -IGNob2NvbA== 72476 -L3BvcnQ= 72477 -YWZmZW4= 72478 -KGRldGFpbHM= 72479 -IHJlcGxpY2F0ZWQ= 72480 -QXNTdHJlYW0= 72481 -YXJtYWM= 72482 -XV09 72483 -YWxhY2g= 72484 -X3Nlc3Npb25z 72485 -QWxnb3JpdGhtRXhjZXB0aW9u 72486 -IHZlcmJvc2l0eQ== 72487 -LkNvbHVtblN0eWxlcw== 72488 -KFVTRVI= 72489 -IHNsZWVwcw== 72490 -IGFxdWF0aWM= 72491 -X2J1bGs= 72492 -PScuLw== 72493 -b3VybsOpZQ== 72494 -IE1TRA== 72495 -IEJsb2M= 72496 -IEdsZQ== 72497 -IHJlcHJlc3Npb24= 72498 -IGVudG9uY2Vz 72499 -CQkgICAgICAgICAgICAgICAgICAg 72500 -WU5D 72501 -LkFsbG93R2V0 72502 -IHR1cnRsZXM= 72503 -ICd+Lw== 72504 -ZXNzb24= 72505 -IERJRQ== 72506 -IEFxdWE= 72507 -IFNFUQ== 72508 -Ozs7Ozs7Ozs7Ozs7Ozs7Ow== 72509 -LnB1dHM= 72510 -IE1BSw== 72511 -KEN1c3RvbWVy 72512 -IGRlc3NlcnRz 72513 -IGVtYmVsbA== 72514 -IHRheGVk 72515 -5bqX 72516 -IHNjaGw= 72517 -cmVzY28= 72518 -IEZyb2c= 72519 -IFBlbmRpbmdJbnRlbnQ= 72520 -X0xvY2Fs 72521 -L3NlY3VyaXR5 72522 -IFJveA== 72523 -IHNwb2lsZWQ= 72524 -X1dJTkRPV1M= 72525 -SmVubmlmZXI= 72526 -IGRhdGk= 72527 -VW5sb2Fk 72528 -LmdyaWR4 72529 -KHN0YWdl 72530 -4buX 72531 -U3FsQ29tbWFuZA== 72532 -Lm14 72533 -IGJsaXR6 72534 -IEZvcnRyZXNz 72535 -IEJyb3dzZXJBbmltYXRpb25zTW9kdWxl 72536 -d2luZQ== 72537 -TlNF 72538 -LXJhbmtpbmc= 72539 -eXJl 72540 -IGxpbmthZ2U= 72541 -w6Fr 72542 -kZw= 72543 -YXRzYXBw 72544 -IEN5Y2w= 72545 -IGVjb2xvZ3k= 72546 -IGJsYXRhbnQ= 72547 -IFBlcmY= 72548 -IFhpYW9taQ== 72549 -IERvcnRtdW5k 72550 -cmVzdWx0U2V0 72551 -IGdpw6A= 72552 -IGZhdWNldA== 72553 -IERhbHRvbg== 72554 -IGZyZWVz 72555 -QlVGRg== 72556 -LnBhcmFsbGVs 72557 -IEFzdHJvcw== 72558 -IFZFQ1RPUg== 72559 -IHN0YW5kb3V0 72560 -w7Ntbw== 72561 -IGZyYW1lYm9yZGVy 72562 -X1BBUkFNRVRFUlM= 72563 -IEZhbGs= 72564 -IERpZ2l0 72565 -IGVsZWN0csOzbmljbw== 72566 -IHZlcnI= 72567 -VUlBbGVydFZpZXc= 72568 -KFNxbA== 72569 -LUlORg== 72570 -IikpKTs= 72571 -JycK 72572 -KEVGRkVDVA== 72573 -IFp1bQ== 72574 -X0RQ 72575 -KV07DQo= 72576 -IGFudGVubg== 72577 -IGFiYnJldmlhdGlvbg== 72578 -IHNlaXNtaWM= 72579 -X1RSQU5TTA== 72580 -tZw= 72581 -Lk1pbGxpc2Vjb25k 72582 -LGxhdA== 72583 -IEFuY2g= 72584 -X01vZA== 72585 -QWxyaWdodA== 72586 -ZGRh 72587 -IMKl 72588 -VU5ETEU= 72589 -INC30LDQsw== 72590 -IHN1bGZ1cg== 72591 -IFNpdGg= 72592 -IE5pbWJ1cw== 72593 -IEV4YW1pbmF0aW9u 72594 -X3dpZmk= 72595 -fWApOwoK 72596 -IHNlbnNhdGlvbnM= 72597 -YWZz 72598 -X0NMUg== 72599 -IGluZmluaXRlbHk= 72600 -IHN5c3TDqG1l 72601 -X2ZvbnRz 72602 -SW1wYWN0 72603 -UG93ZXJlZA== 72604 -IDw9Pg== 72605 -X25lZWQ= 72606 -REVDUkVG 72607 -IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v 72608 -IFJlcG8= 72609 -Z2V0U2VydmljZQ== 72610 -JG4= 72611 -X3BjdA== 72612 -RXJyZXVy 72613 -IE5HT3M= 72614 -ICoKCgo= 72615 -LmF0YW4= 72616 -X1RNUA== 72617 -IGNvbGxhcHNpbmc= 72618 -IHNobw== 72619 -X1BDSQ== 72620 -Lm9wZXI= 72621 -KGFkag== 72622 -IGdpb3Y= 72623 -Piku 72624 -IGluY29udHJv 72625 -YXJkYQ== 72626 -IGFwZXg= 72627 -IG1lZGlkYQ== 72628 -IFNoZWlraA== 72629 -IEFybWVuaWE= 72630 -YXNzb2NpYXRl 72631 -LXdvdw== 72632 -IFR1cm5pbmc= 72633 -IEZyZXVk 72634 -IEZvb2w= 72635 -IExEUw== 72636 -LS0tLS0tLQoK 72637 -b2xzb24= 72638 -LkZJTEU= 72639 -X2RldGVjdG9y 72640 -RG9taW4= 72641 -IGRlcGxveW1lbnRz 72642 -IGZhcmV3ZWxs 72643 -KGJpbmQ= 72644 -IG5vdmljZQ== 72645 -dGRvd24= 72646 -IGdldEVsZW1lbnQ= 72647 -IHZlbGl0 72648 -YXN0aGFu 72649 -CWNoYW5uZWw= 72650 -X0ZSQU1FQlVGRkVS 72651 -LnRyYWlsaW5n 72652 -LnNldEVkaXRhYmxl 72653 -Oyw= 72654 -IElERg== 72655 -X1BC 72656 -Z2V0TGFzdA== 72657 -IENvYXN0YWw= 72658 -IEhhbmR5 72659 -bGluZ2Vy 72660 -44Gn44KC 72661 -UGVyc2lzdGVuY2U= 72662 -LmdldFNlcnZpY2U= 72663 -INC+0Lo= 72664 -IG5vdHdpdGhzdGFuZGluZw== 72665 -KFBS 72666 -VU1C 72667 -J10pKXsNCg== 72668 -ZW1icmFuY2U= 72669 -ZXhjZXJwdA== 72670 -YXF1 72671 -X2Jsb2M= 72672 -IFByb3Zpc2lvbg== 72673 -IE1jRG9u 72674 -IEdvbGRiZXJn 72675 -IGNvbXBvbmVudFdpbGxVbm1vdW50 72676 -IGJhc2VQYXRo 72677 -LWZpcmVk 72678 -IGZvbGxhbmRv 72679 -IFRpbGVz 72680 -QGVuZGZvcmVhY2g= 72681 -RU5DSUw= 72682 -IEJveGluZw== 72683 -aXF1ZXI= 72684 -QWNoaWU= 72685 -RW51bXM= 72686 -QmFzZVVybA== 72687 -KHNjYW4= 72688 -IFBhc3NpdmU= 72689 -YWJlbGxh 72690 -L3Nu 72691 -Lm51bWVyaWNVcERvd24= 72692 -IHZlcm4= 72693 -bG9jYWxpemVk 72694 -IE1peg== 72695 -IHJlc3VsdExpc3Q= 72696 -L3Z1ZQ== 72697 -RVJWSUNF 72698 -Lm9k 72699 -IGxpZ24= 72700 -IFN0cmluZ1Rva2VuaXplcg== 72701 -IHRyYWc= 72702 -QWNjb3JkaW9u 72703 -IG5vcmVmZXJyZXI= 72704 -bXNjb3JsaWI= 72705 -w6F0aXM= 72706 -Ynl0ZXI= 72707 -IHNob3dkb3du 72708 -IHNlbWFpbmU= 72709 -IC0tPg0KDQo= 72710 -IE1haG0= 72711 -fSI7Cgo= 72712 -IGRx 72713 -IFB1Ymxpc2hlcnM= 72714 -IEFtcGw= 72715 -IERhbmllbGxl 72716 -IHRlcm4= 72717 -6LW3 72718 -bm/Fm8SH 72719 -ZWlu 72720 -IEFzeW5jU3RvcmFnZQ== 72721 -dW5nZXI= 72722 -cm91dw== 72723 -IHNjaXNzb3Jz 72724 -L2Fzc2VydA== 72725 -LmJ1Y2tldA== 72726 -L2FyY2hpdmU= 72727 -X01hbg== 72728 -IGludG9sZXI= 72729 -ICgpPT4= 72730 -INCS0Ys= 72731 -IHNhaQ== 72732 -Lnh5 72733 -LiINCg== 72734 -IHVyaW5hcnk= 72735 -ZXN1Yg== 72736 -SVNUSUNT 72737 -IM66 72738 -IGNvbXBsaW1lbnRz 72739 -IHR5cGluZ3NKYXBnb2xseQ== 72740 -aWhhcg== 72741 -RXhwYW5zaW9u 72742 -IFNlcnZpbmc= 72743 -X3N0dWRlbnRz 72744 -IFhCT09MRQ== 72745 -KGls 72746 -IOyymA== 72747 -IGrDsw== 72748 -KHRvbA== 72749 -KEpT 72750 -CUNH 72751 -IERSQVc= 72752 -dHdpZw== 72753 -IG9hdA== 72754 -X3Ntb290aA== 72755 -IENTTA== 72756 -IG9zb2I= 72757 -IGVuc3Vpbmc= 72758 -IGJhbmtlcg== 72759 -IEJhY2twYWNr 72760 -X3Bpbmc= 72761 -IHdpc2hsaXN0 72762 -PWF4 72763 -CSAgIAo= 72764 -RGlzbmV5 72765 -c3RlYWR5 72766 -Ij4l 72767 -IHByb3BoZXRz 72768 -IFpY 72769 -IG1pbmltYWxpc3Q= 72770 -LlBMQUlO 72771 -U2VhdHRsZQ== 72772 -Lm9yZGluYWw= 72773 -IFBJUEU= 72774 -IHJldG9ybmE= 72775 -IGp1Z2Fkb3I= 72776 -IEJyZXQ= 72777 -IOKUnA== 72778 -IHBsdXNo 72779 -VUxBVE9S 72780 -U29ydGluZw== 72781 -LmdyaWR5 72782 -ZWN0b215 72783 -X2FjdGl2 72784 -cmFjaw== 72785 -SW50ZXJhY3RpdmU= 72786 -IEFudGFyY3RpY2E= 72787 -IHZlbmdlYW5jZQ== 72788 -ZW5zbw== 72789 -X2tub3du 72790 -dXBwbGllcg== 72791 -Lk1vZHVsZXM= 72792 -IENvbm5lY3Rpb25TdGF0ZQ== 72793 -6ZqQ6JeP 72794 -QEZpbmRCeQ== 72795 -IHBsYWNlcg== 72796 -XG1vZGVs 72797 -PCgpPg== 72798 -LmlzU3VjY2Vzc2Z1bA== 72799 -LWdvb2Q= 72800 -Yno= 72801 -IERyYWNv 72802 -QXNzaXN0YW50 72803 -LWV4dHJh 72804 -0LDQsdC70LjRhg== 72805 -IGh5cG9jcmlzeQ== 72806 -IHRzdA== 72807 -IEFncg== 72808 -JHR4dA== 72809 -IGxvZ2lzdGlj 72810 -bGljZW5zZWQ= 72811 -IEhvZg== 72812 -IHRhdA== 72813 -KGl2 72814 -IGludG94aWM= 72815 -cG9zdElk 72816 -X3N0cmlrZQ== 72817 -IGh1bWlsaWF0aW9u 72818 -cGNvZGVz 72819 -InN5bmM= 72820 -KHJlY2lwZQ== 72821 -K04= 72822 -cmVudGU= 72823 -CUNsaWVudA== 72824 -eWNvcGc= 72825 -IFp1cmljaA== 72826 -IFByb2ZpbGVz 72827 -Q291bnRyaWVz 72828 -IHBpY3Q= 72829 -IHJvbGxvdXQ= 72830 -cmVxdWVuY2llcw== 72831 -IHBhdGNoZWQ= 72832 -IGNhcnRyaWRnZXM= 72833 -IHNoYWRpbmc= 72834 -SmFy 72835 -IHNhbHZhZ2U= 72836 -IFRheGVz 72837 -IHN0YW5kYnk= 72838 -YXBvcmFu 72839 -RWlnZW4= 72840 -LmFuZ3VsYXI= 72841 -IE5lc3RlZA== 72842 -5Lqr 72843 -IGlzVmlzaWJsZQ== 72844 -IER3aWdodA== 72845 -X0JSQU5DSA== 72846 -LkRlbGF5 72847 -IGtlbmQ= 72848 -IGZhY2lsaXRhdGVk 72849 -LmZsYXRNYXA= 72850 -IHNhbnRh 72851 -CVNlbmQ= 72852 -L21lc3NhZ2Vz 72853 -IG9mVHlwZQ== 72854 -CXN3YXA= 72855 -I3BsdA== 72856 -IFR1cmtz 72857 -TkVT 72858 -IHByb2dyZXNzaXZlbHk= 72859 -IFJlc2lkZW5jZQ== 72860 -IFRSRUU= 72861 -IG5vZW4= 72862 -ZGlv 72863 -IG5lbGxl 72864 -IHNvZ2Fy 72865 -aXR0aQ== 72866 -d2Vla2x5 72867 -IGFtYmlndWl0eQ== 72868 -X1NldHRpbmdz 72869 -V2FyZQ== 72870 -Lm5lbw== 72871 -X0RTVA== 72872 -IOaWuQ== 72873 -cHJlcA== 72874 -bG9iYnk= 72875 -QGVtYWls 72876 -L21vdmll 72877 -IGZ1bmtj 72878 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 72879 -wq1z 72880 -IGd1YXJkaWFucw== 72881 -LXBvcw== 72882 -IGNvbmZpZ3VyaW5n 72883 -IENQUw== 72884 -IERldXM= 72885 -IHZpZMOpb3M= 72886 -X2VtcHJlc2E= 72887 -IHNsYXBwZWQ= 72888 -PE1vZGVs 72889 -IHVuZGVyc2NvcmVz 72890 -VWg= 72891 -LmFjY2Vzc1Rva2Vu 72892 -U0VUUw== 72893 -IFNwYXJzZQ== 72894 -IENhbGQ= 72895 -OnBhdGg= 72896 -IFNlcnZlcnM= 72897 -PWJhdGNo 72898 -IGtuaXR0aW5n 72899 -IHhh 72900 -IHNlYXJjaEJhcg== 72901 -IHNuYWc= 72902 -IGluZnVzZWQ= 72903 -LmJhbQ== 72904 -bGV2ZXI= 72905 -IHRheG9ub215 72906 -w44= 72907 -IGF0dGFjaGluZw== 72908 -IGhlcm4= 72909 -X05PUA== 72910 -Q2xpY2thYmxl 72911 -KFBhcnNl 72912 -IER5bmFtbw== 72913 -LWJ1aWxkZXI= 72914 -IGRlcmVn 72915 -IHNjYXR0ZXJpbmc= 72916 -6L+b6KGM 72917 -YW56aQ== 72918 -IFNoZXBhcmQ= 72919 -Ij4nLAo= 72920 -X1hERUNSRUY= 72921 -IEJ1enpGZWVk 72922 -X01BUkdJTg== 72923 -UExPWQ== 72924 -LnNtYWxs 72925 -IG1pbWVUeXBl 72926 -IGhvbG9n 72927 -CWNhbWVyYQ== 72928 -bGlhcw== 72929 -IHN1c3BlbnNl 72930 -b2R5bmFt 72931 -YmF1 72932 -IGdyYXZleWFyZA== 72933 -X25hbWVk 72934 -IjoiJw== 72935 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 72936 -IGdhbWVPdmVy 72937 -IExFTkdUSA== 72938 -CXNjcmVlbg== 72939 -IGRvSW5CYWNrZ3JvdW5k 72940 -X2RlcGVuZGVuY2llcw== 72941 -IHJ0Yw== 72942 -L3Vw 72943 -X1JPTQ== 72944 -SGFsbA== 72945 -IGRlZmljaWVuY2llcw== 72946 -KHRl 72947 -JyM= 72948 -X2VxdWl2 72949 -IHByZW9yZGVy 72950 -IEF4ZQ== 72951 -0L7QvNGD 72952 -LnNlbmRGaWxl 72953 -IGZpbHQ= 72954 -IExpbWl0cw== 72955 -IENhdmFsaWVycw== 72956 -LmRpc2NvdW50 72957 -4oaQ 72958 -IFdpdA== 72959 -UVJTVFVW 72960 -IGlq 72961 -IHRlZ2Vu 72962 -IDoiLA== 72963 -ZGlmZmljdWx0eQ== 72964 -cHVua3Q= 72965 -IEVtYWlscw== 72966 -Y2hsb3I= 72967 -KGZ1bg== 72968 -LlVpbnQ= 72969 -IFN0YWxs 72970 -X3ZlcmlmaWVk 72971 -dUQ= 72972 -RmlsZVR5cGU= 72973 -IHBsZWFzdXJlcw== 72974 -IGp1ZGljaWFyeQ== 72975 -IHNoYW0= 72976 -aXB1cg== 72977 -X1BMVVM= 72978 -b2ZmZXJz 72979 -KGZvbw== 72980 -X0dU 72981 -CWNvcmU= 72982 -RU5USU9O 72983 -IExpYmVyYXRpb24= 72984 -Q29tbWFuZExpbmU= 72985 -X2RlcGFydG1lbnQ= 72986 -LkFy 72987 -X25laWdoYm9y 72988 -IFN1Ym1pdHRlZA== 72989 -IDwhLS1b 72990 -IGxvY2F0aW5n 72991 -Lk1hcHBlcg== 72992 -X3N0cmVuZ3Ro 72993 -Wy4uLiw= 72994 -IEphbA== 72995 -L2xvYWQ= 72996 -IGJ1ZmZz 72997 -IG1vdG9yaXN0cw== 72998 -CWNz 72999 -YXNjZW5kaW5n 73000 -IFdoYXRzYXBw 73001 -IE5hc3M= 73002 -X0NPTFVNTlM= 73003 -TGVvbg== 73004 -cHBl 73005 -ZWx0YXM= 73006 -IHRqZWplcg== 73007 -X0tFWVdPUkQ= 73008 -cXVhbGlmaWNhdGlvbg== 73009 -aHJh 73010 -IHJpZGljdWxvdXNseQ== 73011 -JGluZm8= 73012 -RkVBVFVSRQ== 73013 -ZG9lc24= 73014 -IEtX 73015 -IEVudW1lcmFibGVTdHJlYW0= 73016 -X01BVA== 73017 -IFN0cmVhbUxhenk= 73018 -IHNjcmF0Y2hpbmc= 73019 -LnRpY2tldA== 73020 -IHNob3J0Y29taW5ncw== 73021 -ZWxsaXBzaXM= 73022 -PWN1cnJlbnQ= 73023 -IGNyZXN0 73024 -IHdob3Jl 73025 -IFBldHJvbGV1bQ== 73026 -Y29udGV4dHM= 73027 -IOat 73028 -LXB5dGhvbg== 73029 -KGpzb25PYmplY3Q= 73030 -IFByaXNt 73031 -IHlhY2h0 73032 -t6g= 73033 -Zmxhc2hkYXRh 73034 -IGxlaWNodA== 73035 -IE1vcnRvbg== 73036 -IHN0ZXJsaW5n 73037 -X2l0cg== 73038 -X3Vk 73039 -RmFjZXM= 73040 -IGhpcmVz 73041 -ZmZh 73042 -Jyx7Cg== 73043 -LWNhbWVyYQ== 73044 -X1JFQVNPTg== 73045 -IEhlbGVuYQ== 73046 -cnVn 73047 -aWdodGx5 73048 -IHBlcm11dGF0aW9ucw== 73049 -IFRvcmFo 73050 -IOaYr+WQpg== 73051 -CXJlY29yZA== 73052 -w4A= 73053 -LmdtYWls 73054 -Rm9ydHVuYXRlbHk= 73055 -KE1vZA== 73056 -T2NjdXJyZW5jZXM= 73057 -IGRlcHJlY2k= 73058 -IHZhZ3VlbHk= 73059 -L1o= 73060 -Vk4= 73061 -LnRw 73062 -X2dlbmVy 73063 -IHs6P30iLA== 73064 -d2FobA== 73065 -SUtF 73066 -IExlZ2lzbGF0aW9u 73067 -IGhpbnRlcg== 73068 -IGFkZWw= 73069 -KGhpZ2g= 73070 -5o+Q5Lqk 73071 -L2RvbWFpbg== 73072 -LnRpbGVz 73073 -IFRpYmV0YW4= 73074 -IFN0ZXJlbw== 73075 -IGZpbGVTaXpl 73076 -Z3J1cG8= 73077 -aWFl 73078 -U0NQ 73079 -IHZvdWNoZXJz 73080 -IFBhbmRvcmE= 73081 -IGRpc21heQ== 73082 -IGzDqWc= 73083 -IEJlaGF2aW9yYWw= 73084 -Y3Jhbg== 73085 -TmVzdGVk 73086 -YWNjb20= 73087 -IE5haA== 73088 -IEJhbHRpYw== 73089 -IERFU1Q= 73090 -IGtpc3Nlcw== 73091 -Vmlu 73092 -IHByb3Zva2U= 73093 -X0NvbnRleHQ= 73094 -IHdlZWtkYXlz 73095 -dXJnZW5jZQ== 73096 -TGlr 73097 -IHBsYXph 73098 -IGJsZXY= 73099 -IHJlYWZm 73100 -X1RpdGxl 73101 -KEd0aw== 73102 -IGNlbGxl 73103 -Iz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 73104 -IEpvb21sYQ== 73105 -Ij4vLw== 73106 -TW9udGhseQ== 73107 -LnRvRG91Ymxl 73108 -KGVudHJpZXM= 73109 -IE5SRg== 73110 -KGdjZg== 73111 -IE1pZGRsZXdhcmU= 73112 -fS17 73113 -X0hJREU= 73114 -IGxvd2Vycw== 73115 -KFNlbGY= 73116 -5Y+R6YCB 73117 -IGlzTG9nZ2VkSW4= 73118 -IGJpb2RpdmVyc2l0eQ== 73119 -IG11c2NoaQ== 73120 -KGNhbmRpZGF0ZQ== 73121 -IEFuc2k= 73122 -CXNt 73123 -L2lt 73124 -Kycp 73125 -Y2Rj 73126 -IGFsZ3VuYQ== 73127 -IHNhY3JpZmljaW5n 73128 -L3ZlbmRvcnM= 73129 -L0FQSQ== 73130 -QWR2ZXJ0aXNpbmc= 73131 -IEdFTkVSQVRFRA== 73132 -IERpc29yZGVycw== 73133 -IFNlcmlhbGl6YXRpb24= 73134 -IHNhdmFnZQ== 73135 -IOm7 73136 -IEluc2lnaHRz 73137 -IHJldm9rZQ== 73138 -IGp1cm9ycw== 73139 -c3VpdA== 73140 -IENhbXBpbmc= 73141 -X3Byb2ZpdA== 73142 -YnVjaA== 73143 -LkFjdGlvbnM= 73144 -IElERUE= 73145 -b2x1bHU= 73146 -TGlrZXM= 73147 -67KI7Zi4 73148 -LkJMTA== 73149 -dsOk 73150 -IGNhcmRp 73151 -IGRpc3Byb3BvcnRpb25hdGVseQ== 73152 -IGluc2FuaXR5 73153 -LmVvZg== 73154 -IFBsYXR6 73155 -LmZpcnN0bmFtZQ== 73156 -IFNsYXNo 73157 -X0NG 73158 -amFuZHJv 73159 -IEdhdWdl 73160 -IFN1bmRlcg== 73161 -IEJ1bm55 73162 -X3Vt 73163 -6IGU57O7 73164 -IGlQaG9uZXM= 73165 -IEJJTw== 73166 -IGtobw== 73167 -eEZB 73168 -IEZyaWVuZHNoaXA= 73169 -IGNhbG1seQ== 73170 -X3Rocg== 73171 -X0FuaW0= 73172 -IHJhaXNvbg== 73173 -L3Jvb3Q= 73174 -LmdldEJ5SWQ= 73175 -IFNhdmFubmFo 73176 -IEludGVycHJldA== 73177 -a2lsbGVy 73178 -CXdn 73179 -XSld 73180 -0YPQtdGC 73181 -S2V5VmFsdWU= 73182 -W0c= 73183 -c3RyZXRjaA== 73184 -LXBsYXlpbmc= 73185 -JTsNCg== 73186 -IHBsYW5r 73187 -IHBlYWNo 73188 -IERlcnJpY2s= 73189 -0LTRgNC10YE= 73190 -IFNoYW0= 73191 -QVBQTElDQVRJT04= 73192 -LnByb2dyZXNzQmFy 73193 -IHRyYW5zaXRpb25pbmc= 73194 -X2RyYWc= 73195 -LlJlcXVlc3RCb2R5 73196 -Lk1vYmlsZQ== 73197 -Sm9uZXM= 73198 -LlBob3Rv 73199 -IGF4bGU= 73200 -enVn 73201 -L29wdGlvbnM= 73202 -XV0pCgo= 73203 -CW5v 73204 -W2hyZWY= 73205 -IGFncmVnYXI= 73206 -IFNlcnZpY2VFeGNlcHRpb24= 73207 -bmluZ2Vu 73208 -RGlmZmljdWx0eQ== 73209 -Qk9PTEVBTg== 73210 -QWRkcw== 73211 -LWhhbmRsZXI= 73212 -IEdhdA== 73213 -IEVib255 73214 -4bqtbg== 73215 -YnJpZ2h0 73216 -IGNvcnBzZXM= 73217 -LkNoZWNrZWRDaGFuZ2Vk 73218 -IG1hdGluZw== 73219 -IEhhcnRmb3Jk 73220 -IHpvdQ== 73221 -IGR1ZGVz 73222 -X2FsZw== 73223 -IEp1bGk= 73224 -b2N1cA== 73225 -INC/0YDQsNCy 73226 -IEthdHk= 73227 -X0ludGVybmFsQXJyYXk= 73228 -LkNvbHVtbkhlYWRlcnNIZWlnaHRTaXplTW9kZQ== 73229 -TWV0aG9kTWFuYWdlcg== 73230 -IFJlZGU= 73231 -IGxpc3RJdGVt 73232 -LkJvdW5kcw== 73233 -IGF2ZW51ZXM= 73234 -IENvZ25pdGl2ZQ== 73235 -RXh0ZW5k 73236 -dGVjaG5pY2Fs 73237 -4oCa 73238 -c25ha2U= 73239 -RnJvbUNsYXNz 73240 -aWxlc3M= 73241 -ID17 73242 -dXJldHRl 73243 -L3RocmVhZA== 73244 -RklFTERT 73245 -SVZJTkc= 73246 -IFBPU0lY 73247 -X2Fr 73248 -IC4uLy4uLy4uLw== 73249 -TXA= 73250 -IGFub255bW91c2x5 73251 -VGFyZ2V0RXhjZXB0aW9u 73252 -YWZmZXI= 73253 -YW55dGhpbmc= 73254 -Imlz 73255 -Z3Jlc28= 73256 -IExhcmE= 73257 -aXphZG9z 73258 -IG1pbmc= 73259 -LnRh 73260 -X3Rocm93 73261 -Umg= 73262 -IHNvbGlkaXR5 73263 -bmFobWU= 73264 -aWNoYWdl 73265 -IG1vdW5k 73266 -b2xpbw== 73267 -YXJ5YQ== 73268 -QVNVUkU= 73269 -IHdvaGw= 73270 -IGZ1cm5pc2hpbmdz 73271 -LnNlY3Rpb25z 73272 -IGFwb2xvZ2llcw== 73273 -YXBpa2V5 73274 -IFNjcmV3 73275 -IFdhcnNhdw== 73276 -L2dyYXBo 73277 -IFNBVEE= 73278 -eXNlcw== 73279 -L2J1dHRvbnM= 73280 -0LXQvdC+ 73281 -VUdIVA== 73282 -IHBvcm5zdGFy 73283 -UGljdHVyZUJveA== 73284 -X1RleHR1cmU= 73285 -IGHDsQ== 73286 -IG5lcmQ= 73287 -LWNvbm5lY3RlZA== 73288 -IG91dHNpZGVycw== 73289 -IG9wZXJhdGl2ZXM= 73290 -YWJibGU= 73291 -L21hbg== 73292 -IHBsZWFk 73293 -XERi 73294 -IENvdmVyZWQ= 73295 -PVM= 73296 -IEZsYW1lcw== 73297 -77+l 73298 -X3RpdGxlcw== 73299 -IHJldHJhY3Q= 73300 -IGNvbGxhYm9yYXRpbmc= 73301 -IGJlaGFuZA== 73302 -LkRhdGFHcmlkVmlld0NvbHVtbkhlYWRlcnNIZWlnaHRTaXplTW9kZQ== 73303 -IGxhYm9yZQ== 73304 -IHRvdGFsUHJpY2U= 73305 -IHNwb2lsZXI= 73306 -IGRpcHBlZA== 73307 -Iikpew0K 73308 -X1NC 73309 -IExlaQ== 73310 -IGluY2x1c28= 73311 -dmVsbA== 73312 -CXBs 73313 -SW5hY3RpdmU= 73314 -IFVTU1I= 73315 -b25kZW4= 73316 -IHJvdXRlZA== 73317 -LnN0cnVjdA== 73318 -4Ks= 73319 -IE1hbGlr 73320 -IEhFWA== 73321 -IEN1c3Q= 73322 -X1BFUkNFTlQ= 73323 -X2VwaXNvZGU= 73324 -5ouJ 73325 -VkVSUw== 73326 -IGNydWlzaW5n 73327 -Qm9va21hcms= 73328 -4oCmCgoKCg== 73329 -Y2hlY2tCb3g= 73330 -b3VmbGFnZQ== 73331 -IG5vbnplcm8= 73332 -IGFwcm94 73333 -IFB1cmR1ZQ== 73334 -Y29vbg== 73335 -bGVncw== 73336 -IExvdHRlcnk= 73337 -U2xm 73338 -SEFW 73339 -Pms= 73340 -PkFu 73341 -IHNsZW5kZXI= 73342 -c2NoZWQ= 73343 -VGVsZWdyYW0= 73344 -Umljaw== 73345 -X1N0cnVjdA== 73346 -X0JD 73347 -IGN1c3RvbWFyeQ== 73348 -IERhbW9u 73349 -dXJjaGFzZWQ= 73350 -IGtvYg== 73351 -IHRpb24= 73352 -KHByb21wdA== 73353 -IGltYg== 73354 -eEND 73355 -CVdlYkVsZW1lbnQ= 73356 -IGhlbW9z 73357 -4Kaw 73358 -IENOQkM= 73359 -IEFMTE9X 73360 -57Gz 73361 -IEVOQw== 73362 -LnNjYWxhdGVzdA== 73363 -IFRCRA== 73364 -Z2V0UmVmZXJlbmNl 73365 -IEltcG9ydGVk 73366 -4Liw 73367 -IGl3 73368 -b2xvbg== 73369 -bWls 73370 -Oi8vJHs= 73371 -Lk1hbmlmZXN0 73372 -IGxo 73373 -IGl0ZW1MaXN0 73374 -X2Fkcw== 73375 -SW5zcGVjdGFibGU= 73376 -IFRvbGVkbw== 73377 -IERpc2FzdGVy 73378 -VXBkYXRlZEF0 73379 -KScpLA== 73380 -IFBBTg== 73381 -RmlsZUNob29zZXI= 73382 -IHl1YW4= 73383 -aXRt 73384 -INC10LPQvg== 73385 -IElibg== 73386 -SGF0 73387 -X3Vsb25n 73388 -YXBs 73389 -IFVydWd1YXk= 73390 -w6lueQ== 73391 -IENyYWlnc2xpc3Q= 73392 -ZG9jaA== 73393 -IGJpbGU= 73394 -IHByb2R1a3Q= 73395 -IGVsZWN0cm9seQ== 73396 -LkNvdXJzZQ== 73397 -IG1x 73398 -dW5jdHVhdGlvbg== 73399 -LyoqKioqKioqKioqKioqKio= 73400 -dWp1 73401 -TU1NTQ== 73402 -X0xFRw== 73403 -IG5ldXRyb24= 73404 -IHBsdXJhbGl0eQ== 73405 -ICsrJA== 73406 -Zm91bmRhdGlvbg== 73407 -LkNvbHVtblN0eWxl 73408 -IEhvb3Zlcg== 73409 -LkFDVA== 73410 -IEJyYXo= 73411 -bGVzc29ucw== 73412 -ZsO8aHI= 73413 -4KSC 73414 -IENsYXNzaWNz 73415 -cmFpZw== 73416 -IG1o 73417 -IGtldHRsZQ== 73418 -U3RyaWtl 73419 -ZXJkYWxl 73420 -RU5UQQ== 73421 -IFRhYmxlQ29sdW1u 73422 -IFNoYWtl 73423 -IFdG 73424 -IExpY2Vuc2luZw== 73425 -dWHDp8Ojbw== 73426 -IHNlY2FyYQ== 73427 -IG5ld1ZhbA== 73428 -U2VsZWNjaW9u 73429 -UHJlZmFi 73430 -ZmlnaHRlcg== 73431 -TGF1bmNoaW5n 73432 -JyI7DQo= 73433 -Lmxvbg== 73434 -LnV0Y25vdw== 73435 -IEh1bmRyZWRz 73436 -ZXN0ZWFk 73437 -IE92ZXJ3YXRjaA== 73438 -X0FGVEVS 73439 -IHJlbW5hbnRz 73440 -KS5c 73441 -IGxvYmJ5aXN0cw== 73442 -IHVuaW50ZW5kZWQ= 73443 -IOuQ 73444 -eXN6 73445 -IGxpYnJvcw== 73446 -LXBhZ2Vz 73447 -SU5URVJGQUNF 73448 -IGRldGVybWluaXN0aWM= 73449 -IFVOSVFVRQ== 73450 -IGV0dMOk 73451 -U2luZ2xlTm9kZQ== 73452 -CQkJCQkJCQ0K 73453 -LXN0YXQ= 73454 -IGhhc2hpbmc= 73455 -L2FjY2Vzcw== 73456 -dGVsbA== 73457 -CXVzZXJuYW1l 73458 -IERhdG9z 73459 -Qml0Q29udmVydGVy 73460 -Omhvc3Q= 73461 -IGFsdGVybmF0aW5n 73462 -IOKAi+KAiw== 73463 -IHdhdmVmb3Jt 73464 -PEVsZW1lbnQ= 73465 -IENhbnRvbg== 73466 -IGRlc3RhYw== 73467 -dGVudA== 73468 -LmdldE1heA== 73469 -IHN0ZW5jaWw= 73470 -IEFjcXVpc2l0aW9u 73471 -LkdlbmVyYXRpb25UeXBl 73472 -IE1FUg== 73473 -X2NvbWJpbmU= 73474 -IFtdLg== 73475 -X0JJVE1BUA== 73476 -bGRy 73477 -IGNhbnY= 73478 -IEpWTQ== 73479 -cGFycw== 73480 -IGRvd25oaWxs 73481 -RGV0YWlsc1NlcnZpY2U= 73482 -KE5BTUU= 73483 -IHJlanV2ZW4= 73484 -X3dpdGhpbg== 73485 -QWNjZXNzb3J5 73486 -IFPDqQ== 73487 -L2luYw== 73488 -IildCgo= 73489 -UHVibGljYXRpb24= 73490 -X3JvaQ== 73491 -IG1vYnM= 73492 -Lk5vQXJnc0NvbnN0cnVjdG9y 73493 -IGV2ZW50b3M= 73494 -LnZlbmRvcg== 73495 -X1NFTEVDVE9S 73496 -w6lmb25v 73497 -PSJb 73498 -IGxhYXQ= 73499 -IGJsdXJyZWQ= 73500 -IEJvcmRlclNpZGU= 73501 -eEZGRkZGRg== 73502 -X3dyaXR0ZW4= 73503 -IGplbnRl 73504 -L3Rpbnk= 73505 -Lndw 73506 -LnN0eWxlYWJsZQ== 73507 -IENoYXJnZXI= 73508 -IGJhdGhpbmc= 73509 -IFBhbmRh 73510 -w6lsaQ== 73511 -IHBhY2llbnRl 73512 -IGdpb2NoaQ== 73513 -IFZpZXdTdGF0ZQ== 73514 -Y2dp 73515 -LmxvZ2ljYWw= 73516 -RG9uYWxkVHJ1bXA= 73517 -LGNvcHk= 73518 -ZW1t 73519 -X0xpbms= 73520 -IGluc2lnbmlmaWNhbnQ= 73521 -ZmZtcGVn 73522 -L3BheQ== 73523 -X3F1aXQ= 73524 -SU9EZXZpY2U= 73525 -IEV4aXN0cw== 73526 -IGNvb2tz 73527 -anVuY3Rpb24= 73528 -IFRYVA== 73529 -KGVndA== 73530 -YW5pdQ== 73531 -X3BhcnRuZXI= 73532 -IGZhY3VsdA== 73533 -IFVuaWZpZWQ= 73534 -L3NiaW4= 73535 -IE5laA== 73536 -IEthemFraHN0YW4= 73537 -cG9zdGNvZGU= 73538 -IHZlZ2Fz 73539 -IHNlaW5lbQ== 73540 -fV0s 73541 -dGV0 73542 -LXBheW1lbnQ= 73543 -IENvbW1lbnRhcnk= 73544 -IGd1aWRlbGluZQ== 73545 -KTsk 73546 -IENvbnNvcnRpdW0= 73547 -57O757uf 73548 -dmlzbw== 73549 -IEJpbGxpbmc= 73550 -aWNpYXI= 73551 -IFR5cGVJbmZv 73552 -CXRyYW5z 73553 -PFRleHR1cmU= 73554 -YXRob20= 73555 -bGF1Z2hz 73556 -IGludGVyY2VwdGlvbnM= 73557 -KEVWRU5U 73558 -Rm9yZWNhc3Q= 73559 -VHJhcA== 73560 -dHJ4 73561 -IFdoaXRlcw== 73562 -c3VibWl0dGVk 73563 -YWxnbw== 73564 -IHRyYW5zcG9ydGVy 73565 -b3VuZGFyeQ== 73566 -IEluaGVyaXRz 73567 -IENvbmV4aW9u 73568 -LmNsaWVudFg= 73569 -CXByb2plY3Q= 73570 -aGVhcnRiZWF0 73571 -LW90aGVy 73572 -ICc7DQo= 73573 -w6ty 73574 -b3JwaW9u 73575 -KGNvcnM= 73576 -IEVMRUNU 73577 -IFBlcmU= 73578 -IHVzZU1lbW8= 73579 -ZXdyaXRlcg== 73580 -IHNxdWlydA== 73581 -L2V4dGVuc2lvbnM= 73582 -L2Fz 73583 -LkNMSUVOVA== 73584 -IGdvdXJtZXQ= 73585 -IGF1dG9Db21wbGV0ZQ== 73586 -UkVW 73587 -IGJyYWtpbmc= 73588 -X1NFTEVDVElPTg== 73589 -44Oh44Oz44OI 73590 -X2xpZmU= 73591 -X2dyb3VuZA== 73592 -X3Rlcg== 73593 -c25z 73594 -IFNQT1JU 73595 -kuGe 73596 -5rs= 73597 -VW5pcXVlSWQ= 73598 -IGRyaXA= 73599 -X0JST1dTRVI= 73600 -LW1ldGVy 73601 -ZW5kZXo= 73602 -IGV4aGF1c3RpdmU= 73603 -KFNL 73604 -IEJ1cmxpbmd0b24= 73605 -d29vcmQ= 73606 -KHBvdw== 73607 -IHNlYXJjaFRleHQ= 73608 -hYw= 73609 -aGVlbHM= 73610 -c3RlbGxlcg== 73611 -LnNpZw== 73612 -WU9VUg== 73613 -LmFsaQ== 73614 -IERhdGFDb2x1bW4= 73615 -IHByb2plY3ROYW1l 73616 -X2ZlY2hh 73617 -IHJlZnVuZHM= 73618 -IHRvcG8= 73619 -IENISUxE 73620 -IE1hcmJsZQ== 73621 -IGZvckNlbGw= 73622 -IHBlc3NpbQ== 73623 -IGNyaXNweQ== 73624 -aWZlc3R5bGVz 73625 -IG92ZXJkdWU= 73626 -b2xhcml0eQ== 73627 -IGFtYXTDuHI= 73628 -TWQ= 73629 -UFJFU1M= 73630 -IGluc3VyZXI= 73631 -b2NyYXQ= 73632 -IGZhY2lsaXRhdGVz 73633 -Lw0KDQo= 73634 -IGh1cmRsZXM= 73635 -X0hJ 73636 -TGV0dGVycw== 73637 -bWluZWNyYWZ0 73638 -YXh0ZXI= 73639 -eWs= 73640 -IGVjb27Ds20= 73641 -INC90LDRhw== 73642 -IFNXSVRDSA== 73643 -Q29uc3VsdGE= 73644 -IE5vcmE= 73645 -Q0tFUg== 73646 -X0NU 73647 -LmFwcHNwb3Q= 73648 -IC8vLS0= 73649 -CUJPT1NU 73650 -X2NvdXJzZXM= 73651 -IHdpbGxpbmdseQ== 73652 -66eM 73653 -ZmZk 73654 -ZmlsZXI= 73655 -IE1lYXN1cmVz 73656 -IGxlYXNlcw== 73657 -IERvcm90aHk= 73658 -Ol0u 73659 -c3Vic2NyaXB0aW9ucw== 73660 -IGNob2lz 73661 -IGFsYW4= 73662 -IGFicmly 73663 -LlBvcHVw 73664 -RXN0aW1hdGVk 73665 -IFBMQU4= 73666 -4LWN 73667 -IEVMRg== 73668 -IGRpc3RhbmNpbmc= 73669 -CWFuc3dlcg== 73670 -IHJ1Z3M= 73671 -S2k= 73672 -4Z+S4Z4= 73673 -R3VpbGQ= 73674 -ZXh0cmFz 73675 -Y3Bz 73676 -TW9ja3M= 73677 -IHRla3N0 73678 -Kmc= 73679 -LnJlcXVlc3RGb2N1cw== 73680 -IGFsdGVyYXRpb24= 73681 -IENhdGVnb3JpYQ== 73682 -aW1tZXJz 73683 -IERyb3Bib3g= 73684 -IEFkZHI= 73685 -5byV 73686 -ZGVwcw== 73687 -Lk1lc3NhZ2VCb3g= 73688 -ISwK 73689 -LmdldEI= 73690 -IG1pZ3JhdGVk 73691 -IEhvYmJ5 73692 -IE1n 73693 -LlZlcnRleA== 73694 -IGZvcmdpdmVu 73695 -IERlVg== 73696 -IHdlcmQ= 73697 -IEFyYWJpYW4= 73698 -IFNtb2tpbmc= 73699 -IHN0cmF3YmVycnk= 73700 -IENNUA== 73701 -ZGJs 73702 -IERIUw== 73703 -LWVycm9ycw== 73704 -LnBhZw== 73705 -IFJORw== 73706 -IHNoYXZl 73707 -IHR3ZWU= 73708 -IGFzc2VydE51bGw= 73709 -IERlbnNpdHk= 73710 -ZG9qbw== 73711 -YWlubWVudA== 73712 -IHBq 73713 -LllFQVI= 73714 -ICopKTsK 73715 -aWJyYXJpZXM= 73716 -SmV0cw== 73717 -RXhlY3V0aXZl 73718 -X2RlbnNl 73719 -LmdldENvbnRlbnRQYW5l 73720 -Y2hhbmRsZQ== 73721 -YWluYQ== 73722 -LXJlZmVyZW5jZQ== 73723 -IGxpYXI= 73724 -IEhFQUxUSA== 73725 -W3Rlc3Q= 73726 -LmlzbmFu 73727 -Q2hhcmxpZQ== 73728 -IHB1cHBlcg== 73729 -IGtpcg== 73730 -OmhpZGRlbg== 73731 -aXNWaXNpYmxl 73732 -IGtvbXQ= 73733 -IGFjcXVhaW50ZWQ= 73734 -IERydWlk 73735 -KENz 73736 -Lmxhc3RuYW1l 73737 -RFNB 73738 -IGRpc3NvbHZl 73739 -57yW5Y+3 73740 -VmFyaW91cw== 73741 -IERleA== 73742 -X2FuZ2xlcw== 73743 -L2FwaW1hY2hpbmVyeQ== 73744 -IGV4cGxvZGluZw== 73745 -KENoYXJTZXF1ZW5jZQ== 73746 -IEhpc3Bhbg== 73747 -KyspewoK 73748 -Lk1vZGVsU2VyaWFsaXplcg== 73749 -UVJTVFVWV1hZWg== 73750 -54K55Ye7 73751 -PXNldHRpbmdz 73752 -4KWB 73753 -UENT 73754 -IElOVEVSTkFM 73755 -IEhVR0U= 73756 -IG1pY3Jvc2NvcGU= 73757 -aXNBZG1pbg== 73758 -XHY= 73759 -LnJlcXVpcmVOb25OdWxs 73760 -0L7Qu9C+0LI= 73761 -aWNlcmNh 73762 -X1NFTlQ= 73763 -IGRlcGljdGlvbg== 73764 -IFVzZXJDb250cm9s 73765 -IE1lbW9y 73766 -IEFsbG9jYXRpb24= 73767 -IEJlZGZvcmQ= 73768 -IOabtA== 73769 -IHRvcm1lbnQ= 73770 -YXplZXJh 73771 -LlRvZGF5 73772 -IFJlZ2FyZGluZw== 73773 -X0VOQw== 73774 -X1JBTkRPTQ== 73775 -TG9nTGV2ZWw= 73776 -PVI= 73777 -IEdyZWVubGFuZA== 73778 -IHN0cmFpbmVk 73779 -IG1hZ25ldHM= 73780 -IGFsZXJ0Q29udHJvbGxlcg== 73781 -IENocm9uaWM= 73782 -X3JlZ2lzdGVyZWQ= 73783 -IGxpag== 73784 -IEVudHJ5UG9pbnQ= 73785 -IFJlZ2ltZW50 73786 -dWNpZA== 73787 -IENvdWxkbg== 73788 -IEFjdGluZw== 73789 -X3JheQ== 73790 -IG5hYg== 73791 -LXNlcGFyYXRlZA== 73792 -IHBubA== 73793 -Q29hY2g= 73794 -QVRZUEU= 73795 -IHN1cHBsZW1lbnRhdGlvbg== 73796 -YWNlcnM= 73797 -ZmxlZXQ= 73798 -SW5wdXRCb3JkZXI= 73799 -IFN0cnVjdHVyYWw= 73800 -IGRlaW5l 73801 -IGJyZXdlcmllcw== 73802 -YW5vaQ== 73803 -IHRyYW5zbGF0b3Jz 73804 -IGVpZ2VuZW4= 73805 -IGRhbmNlcw== 73806 -dGFt 73807 -IENvb3BlcmF0aW9u 73808 -X3JlcXVlc3RlZA== 73809 -IE1hZ2ljYWw= 73810 -CUxFRlQ= 73811 -ICIiKSwK 73812 -Ky0rLSstKy0rLSstKy0rLQ== 73813 -IE5vaXI= 73814 -IEVzdGltYXRl 73815 -IFRocmVhZFBvb2w= 73816 -IEhlY2s= 73817 -ICcqLg== 73818 -VHVya2V5 73819 -IHN1Y2NlZWRpbmc= 73820 -ZHJ1Zw== 73821 -dmlv 73822 -IHBvbmVy 73823 -IEphZA== 73824 -aXp6bHk= 73825 -ZXZlcnl0aGluZw== 73826 -IHt9KS4= 73827 -IEluc3RpdHV0ZXM= 73828 -IG51b3Zv 73829 -IGluaXRXaXRoVGl0bGU= 73830 -IGx1YUw= 73831 -b3duaWs= 73832 -IHRob3I= 73833 -IGtsYXI= 73834 -IG5vdG9yaW91c2x5 73835 -IGRvbmc= 73836 -ZW1lbnM= 73837 -X3Byb2plY3Rpb24= 73838 -X0dSRQ== 73839 -LmV5ZQ== 73840 -IHdhdGVyaW5n 73841 -IFRpaw== 73842 -b1M= 73843 -IFN0cmFuZ2Vy 73844 -ICANCg0K 73845 -cGFnaW5n 73846 -X2ludGVyc2VjdA== 73847 -IENvbG9uaWFs 73848 -TGlzYQ== 73849 -LnVubGluaw== 73850 -IG1pcA== 73851 -YW51dHM= 73852 -YW1hem9u 73853 -IElERU5U 73854 -c3Rhc3k= 73855 -Snd0 73856 -LS0tLS0tKy0tLS0tLSs= 73857 -IEVWUA== 73858 -Q29udGVudExvYWRlZA== 73859 -CUJJVA== 73860 -LnBhcmVudHM= 73861 -IGFsbG9jYXRpbmc= 73862 -IEdPTEQ= 73863 -fWA7Cgo= 73864 -QUxBUg== 73865 -IHByZWNpc2E= 73866 -RGlzdGluY3Q= 73867 -c2Vp 73868 -IHN1YnBvZW5h 73869 -IHBvbXA= 73870 -IFBvbG8= 73871 -Y29l 73872 -dmo= 73873 -LndvcmtmbG93 73874 -ZXN0cmU= 73875 -IGNvbm5leGlvbg== 73876 -aW1ldHlwZQ== 73877 -LlJvd0NvdW50 73878 -IERoYWJp 73879 -IGVtaXRz 73880 -LkJvcmRlclNpemU= 73881 -KHBvbGljeQ== 73882 -LG1lc3NhZ2U= 73883 -T25Jbml0 73884 -KShf 73885 -IGZpbmVy 73886 -W251bWJlcg== 73887 -IHNjcmlwdHVyZQ== 73888 -UmVmbGVjdA== 73889 -LXRvb2xiYXI= 73890 -KFBBVEg= 73891 -IEVOVFJZ 73892 -KC4uLikK 73893 -LWRvbWFpbg== 73894 -KHN0cmlw 73895 -KSgq 73896 -IGNvbnZleWVk 73897 -IGF0dGVudGl2ZQ== 73898 -w6hnZQ== 73899 -X0xE 73900 -IEdyYW50cw== 73901 -LWhpZ2hsaWdodA== 73902 -IGJyZXRocmVu 73903 -2YjZhA== 73904 -IGRlcXVldWVSZXVzYWJsZUNlbGxXaXRoSWRlbnRpZmllcg== 73905 -YXB1bHQ= 73906 -LmJvdHRvbUFuY2hvcg== 73907 -IG9wY2lvbg== 73908 -IG91dEZpbGU= 73909 -cmVhdGluZw== 73910 -ZGlu 73911 -X3NhbXBsZXI= 73912 -CWdsRW5hYmxl 73913 -cHR5cGU= 73914 -X0NPTkRJVElPTg== 73915 -LWVmZmljaWVudA== 73916 -Jm8= 73917 -IGpj 73918 -0Kc= 73919 -L0Zvcm0= 73920 -KWZyYW1l 73921 -IGJpbmdl 73922 -X2Nsb3N1cmU= 73923 -SU1B 73924 -KG5leHRQcm9wcw== 73925 -CWNk 73926 -IGdldE1lbnU= 73927 -IGdldFN1cHBvcnRBY3Rpb25CYXI= 73928 -IG1hbmlmb2xk 73929 -WlI= 73930 -Y2hhbmdlcg== 73931 -YXNzaW5n 73932 -ZGlzaA== 73933 -IE1vdQ== 73934 -Lm5ldGZsaXg= 73935 -IHBvc3Rjb2Rl 73936 -IHdvbWI= 73937 -IEFycw== 73938 -4oCmKQ== 73939 -IGxpbmVXaWR0aA== 73940 -RGVhbA== 73941 -YXJhcw== 73942 -IEdyYW50ZWQ= 73943 -IGhvYXg= 73944 -IGRpcmVjdGlvbmFs 73945 -LktleUNoYXI= 73946 -ID09Ig== 73947 -IFZlcmRl 73948 -X0tQ 73949 -IHN1cnJvZ2F0ZQ== 73950 -IERVSQ== 73951 -dXB5dGVy 73952 -IHBlbnNl 73953 -IFJBTkQ= 73954 -KGV4Yw== 73955 -IG1pc3VuZGVyc3Rvb2Q= 73956 -IENVVA== 73957 -IOS4rQ== 73958 -CXRp 73959 -X2luc2lkZQ== 73960 -IGJpY3ljbGVz 73961 -IGRlYW4= 73962 -ZGlyZWN0aXZl 73963 -LnBlZXI= 73964 -aWNpbmE= 73965 -X2l0ZXJz 73966 -IGltcGx5aW5n 73967 -Lm9idGFpbg== 73968 -IHBzeWNoaWF0cmlzdA== 73969 -dXNlclNlcnZpY2U= 73970 -ZWxpdmVyeQ== 73971 -CXBhcnQ= 73972 -IGh1cnJpZWQ= 73973 -IGJ1bQ== 73974 -IGhlcGF0aXRpcw== 73975 -amlk 73976 -J10+Owo= 73977 -IHVuY29udmVudGlvbmFs 73978 -IGZhc2Npc3Q= 73979 -IFBleQ== 73980 -6K+t 73981 -Jyl9PC8= 73982 -LkNsdXN0ZXI= 73983 -IEJpdENvbnZlcnRlcg== 73984 -ZWRhdGE= 73985 -zr/PhQ== 73986 -4pSC 73987 -QXBwQnVuZGxl 73988 -Lmh0dHBDbGllbnQ= 73989 -IGFwbw== 73990 -QUlOUw== 73991 -IFZG 73992 -X2dpZA== 73993 -IG9kZQ== 73994 -RVJSWQ== 73995 -IFJlY2VpcHQ= 73996 -IENhbmRsZQ== 73997 -IG1pc3Npb25hcnk= 73998 -IENyYW5l 73999 -IFNUQVRFUw== 74000 -Ym91dA== 74001 -YXlhcmFu 74002 -Li4uIiwK 74003 -IGl0aW5lcmFyeQ== 74004 -KGxhdGl0dWRl 74005 -IENPTlM= 74006 -L3NpZGViYXI= 74007 -U3BpZGVy 74008 -R1JJRA== 74009 -LmRlYnVnTGluZQ== 74010 -IGAn 74011 -LXllbGxvdw== 74012 -IHJlZmluZW1lbnQ= 74013 -IE1ha2V1cA== 74014 -IERhbm4= 74015 -KCk7DQoNCg0K 74016 -IG92ZXJjb21pbmc= 74017 -IEJhdHRlcg== 74018 -L3BhY2thZ2Vz 74019 -INCy0LjQtA== 74020 -IGFyeQ== 74021 -4oCdPw== 74022 -cmVsbGFz 74023 -IGdydXBvcw== 74024 -IFR5cGljYWw= 74025 -IE1vbnNhbnRv 74026 -SW50ZXJzZWN0aW9u 74027 -IHR5cmU= 74028 -PT09PT09Cg== 74029 -zq4= 74030 -OzsKCg== 74031 -IHRyaXZpYQ== 74032 -X3Rha2Vu 74033 -IHNtdWdnbGluZw== 74034 -IG5hcnJvd2Vk 74035 -4bqpbQ== 74036 -IHBhbGFicmE= 74037 -Y2Vh 74038 -cGFydGljdWxhcmx5 74039 -QWNjZXNzVHlwZQ== 74040 -IGNvbGU= 74041 -VG9GaXQ= 74042 -IHZlcmU= 74043 -IENPUw== 74044 -L3ZpZGVvcw== 74045 -ICgkKCIj 74046 -IGNyYW5l 74047 -Lmhhc01vcmU= 74048 -JHBhdGg= 74049 -aXZpc20= 74050 -IHN1cGVydmlzb3Jz 74051 -IEZsb3Jlcw== 74052 -cHJvZ3JhbXM= 74053 -LlppcA== 74054 -IGltcGFjdGluZw== 74055 -IG1vdG8= 74056 -IFRK 74057 -cGVnYXdhaQ== 74058 -X0tJTkQ= 74059 -X2ludGVyZmFjZXM= 74060 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 74061 -IExlYXZpbmc= 74062 -VGV4dFN0eWxl 74063 -YmVpdGVy 74064 -IFdpbm5pbmc= 74065 -LXBhcmFt 74066 -R2FyeQ== 74067 -IFN1bnM= 74068 -YWzEscWf 74069 -ZHVjaw== 74070 -IHRocmVhZElkeA== 74071 -IHBvZXRz 74072 -IHBsZWFkaW5n 74073 -IENvcmludGhpYW5z 74074 -ZmNj 74075 -YXdhaXRlcg== 74076 -Ki0= 74077 -IHBlcnNldmVy 74078 -IGFjdGl2aWRhZGVz 74079 -X291dGxpbmU= 74080 -LXBsYW4= 74081 -LnNjcm9sbFZpZXc= 74082 -cXVhdA== 74083 -IHNhbXN1bmc= 74084 -IGxldmVsaW5n 74085 -IHNwbGl0dGVy 74086 -X2dlb20= 74087 -IHByb21pbmVudGx5 74088 -IFNlZWRz 74089 -5Zyf 74090 -dWFpcw== 74091 -ZWZ1bGx5 74092 -SUVudW1lcmFibGU= 74093 -YWRkcw== 74094 -dmVyc2F0aW9ucw== 74095 -IGRpc2FibGVz 74096 -QU5EUk9JRA== 74097 -IFdlaXRlcg== 74098 -X0Zvcm1hdA== 74099 -X3NwbGl0cw== 74100 -IEFjdGl2ZVN1cHBvcnQ= 74101 -KGNzcw== 74102 -X21pY3Jv 74103 -c3RyaWtl 74104 -IENhdXNlcw== 74105 -IHZpc2libHk= 74106 -Q2FuY2VsYWJsZQ== 74107 -IFlvc2g= 74108 -IGRyYWluaW5n 74109 -IGNvbGk= 74110 -YXNsZXk= 74111 -IFJlc3BvbnNpYmlsaXRpZXM= 74112 -IFN1dHRvbg== 74113 -KnRoaXM= 74114 -U2hhcmVz 74115 -LWdyYXBo 74116 -IGVubGFyZ2Vk 74117 -Um91dGluZQ== 74118 -IGZyYW1lYnVmZmVy 74119 -IGFpcmZsb3c= 74120 -IHRyeA== 74121 -IExlaWdo 74122 -IEtlbnM= 74123 -KGhlYXA= 74124 -IHNwaWxsZWQ= 74125 -U0NBTEw= 74126 -IFZlbHZldA== 74127 -YWN0dWFsbHk= 74128 -X0VOQ09ESU5H 74129 -IFdvcm0= 74130 -KSl9Cg== 74131 -IERhbmdlcm91cw== 74132 -IHN1cGVyaW50ZW5kZW50 74133 -Lmxvb2s= 74134 -IHNoZWw= 74135 -L2Zz 74136 -U2FmZXR5 74137 -5a6L 74138 -LkRFRklORQ== 74139 -X2ZhY3RvcnM= 74140 -IHBhcnRpZG8= 74141 -IG9wdGltaXppbmc= 74142 -RG91YmxlQ2xpY2s= 74143 -LWNvbW1lcmNpYWw= 74144 -IGxvZ2ljYWxseQ== 74145 -Y3ljaA== 74146 -dXJ2ZQ== 74147 -wrU= 74148 -QUlMWQ== 74149 -IHJlYWN0aW5n 74150 -X0VYUFI= 74151 -a8O2 74152 -LmxvY2FsaXplZERlc2NyaXB0aW9u 74153 -IGFzdG91bmRpbmc= 74154 -IHBhc3RyeQ== 74155 -IGdsb3NzeQ== 74156 -IGJlaGF2ZXM= 74157 -L2Vj 74158 -IGNsaXBwZWQ= 74159 -IHByb3dlc3M= 74160 -IFVC 74161 -LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 74162 -CWFscGhh 74163 -IGV4dHJhdmFn 74164 -IGZpbm5z 74165 -KFNvY2tldA== 74166 -IFVuc2FmZQ== 74167 -IHF1aWVyZQ== 74168 -X2VuY29kZWQ= 74169 -b2x1bWJpYQ== 74170 -IHphYg== 74171 -c3RyaWN0ZWQ= 74172 -IG1uaWU= 74173 -IE1PUw== 74174 -IGF0aGxldGljcw== 74175 -IEtlbmRhbGw= 74176 -IOyYpA== 74177 -QVZBSUxBQkxF 74178 -aW5veA== 74179 -X09QQ09ERQ== 74180 -IEl0ZW1UeXBl 74181 -IGNlbnRyaWY= 74182 -IGludGVyc3RhdGU= 74183 -X2Jvb2tz 74184 -LmRlbGl2ZXJ5 74185 -IExpc3Rl 74186 -b3JzaQ== 74187 -X3NlY3VyZQ== 74188 -Z3Jvd3Ro 74189 -IHZlbnRl 74190 -IHBzeWNob2xvZ2lzdHM= 74191 -IENDUw== 74192 -dWRlbmNl 74193 -IGNyYXdsZXI= 74194 -L21hbnVhbA== 74195 -IHRleHRTdHlsZQ== 74196 -IHBhbGluZHJvbWU= 74197 -IGNvbmR1Y3Rz 74198 -dGFibA== 74199 -V2l0aFVSTA== 74200 -L3JpZ2h0 74201 -IERyYQ== 74202 -Lk1haWw= 74203 -KHNlYw== 74204 -b2Z0d2FyZQ== 74205 -IHNldWw= 74206 -IHdyaW5rbGVz 74207 -X0ZX 74208 -QXk= 74209 -IEVybnN0 74210 -dW5iaW5k 74211 -IGNvbW1lbmQ= 74212 -X2hvb2tz 74213 -IE1vbmV0YXJ5 74214 -IFFR 74215 -dW5pdE9mV29yaw== 74216 -IEVudGl0eVR5cGU= 74217 -IGhvcm1vbmFs 74218 -LkZBSUw= 74219 -QFNsZg== 74220 -L2NoYW5uZWw= 74221 -c29ubw== 74222 -RGFucw== 74223 -X1JlZ2lzdGVy 74224 -SGFu 74225 -T1JC 74226 -SktMTU5PUA== 74227 -dmVudGVk 74228 -IGxvbmdzdGFuZGluZw== 74229 -IGJnQ29sb3I= 74230 -IDsp 74231 -IFJvYmJpZQ== 74232 -KCIuIg== 74233 -IGFqdXN0 74234 -LmhhbmRsZUNsaWNr 74235 -cmF0aW5ncw== 74236 -cHRlcg== 74237 -IGVyb3RpY28= 74238 -IEplbGx5 74239 -KioqKioqDQo= 74240 -LkRvZXNOb3RFeGlzdA== 74241 -CWJl 74242 -JHRlbXA= 74243 -Ij4mIw== 74244 -55u0 74245 -CVB1YmxpYw== 74246 -neyytA== 74247 -IEJ1aWxkaW5ncw== 74248 -LWFsb25l 74249 -LCdc 74250 -IHN3YXBz 74251 -IHBlcnBsZXg= 74252 -X3Byb2Nlc3NvcnM= 74253 -INC00LI= 74254 -IE5ZUEQ= 74255 -UENS 74256 -5q+P 74257 -IGhvamU= 74258 -RWRpdE1vZGU= 74259 -IHZ1bGdhcg== 74260 -IHZlcmRl 74261 -ICgpPT57Cg== 74262 -L2Zyb250ZW5k 74263 -IHRlbGVmb25l 74264 -IGxhbnRlcm4= 74265 -LnBhZ2VY 74266 -IER1ZA== 74267 -bGltaXRhdGlvbnM= 74268 -IG5vdGlmaWVy 74269 -IE1lc3NhZ2luZw== 74270 -IWltcG9ydGFudA== 74271 -IHN1cmdlb25z 74272 -KT0o 74273 -Rml4ZWRTaXpl 74274 -Llpvb20= 74275 -aW5hbg== 74276 -IGNyZWRz 74277 -IEJVRg== 74278 -LlN0YWNrVHJhY2U= 74279 -IHdhcnJhbnRlZA== 74280 -IHNvdXJjaW5n 74281 -IGNvbm5h 74282 -X0ZSRQ== 74283 -IHdvbGw= 74284 -IHJlZmluaW5n 74285 -X0FMTE9XRUQ= 74286 -X212 74287 -IFdvcmNl 74288 -IFNpbmNsYWly 74289 -Q2hlY2tzdW0= 74290 -IHVubG9ja3M= 74291 -IE1hcmtkb3du 74292 -IGZpc2hlcm1lbg== 74293 -RHVi 74294 -IEJvbm5pZQ== 74295 -ICAgICAgICAJCg== 74296 -IHZlcno= 74297 -Piw8Lw== 74298 -PjwhWw== 74299 -Wyc8ew== 74300 -amVj 74301 -IEVyZw== 74302 -cmF0aGVy 74303 -IHBhbGFicmFz 74304 -IFBBQ0tFVA== 74305 -bWlzZQ== 74306 -ZGFx 74307 -IE9rdG9iZXI= 74308 -KEdMRlc= 74309 -IEhlbnJp 74310 -IEZvdA== 74311 -IER1bw== 74312 -IE5FUw== 74313 -IHNhbHNh 74314 -IHVuYmlhc2Vk 74315 -QFNwcmluZ0Jvb3RUZXN0 74316 -IG9mZnM= 74317 -5YWs5Y+4 74318 -IGFtb3VudGVk 74319 -RnVsbFBhdGg= 74320 -IHF1YXQ= 74321 -IG1haWRlbg== 74322 -IFN1YnNldA== 74323 -IEFwcGxpY2F0aW9uRGJDb250ZXh0 74324 -bWlycm9y 74325 -bmV4 74326 -LnN0cmVldA== 74327 -c2V0UXVlcnk= 74328 -JHJlc3VsdHM= 74329 -YWRlcm8= 74330 -Z3Jlc3Nvcg== 74331 -X2J1Zw== 74332 -aXNzZXI= 74333 -IFNlYXJz 74334 -IGZpbGxDb2xvcg== 74335 -Lm1hc2tz 74336 -IERpYWJsbw== 74337 -X0FORFJPSUQ= 74338 -0J7QsQ== 74339 -IGZyZWFraW5n 74340 -IHJpbnNl 74341 -KHBrdA== 74342 -IGJvb2tsZXQ= 74343 -IHNhbmN0aW9uZWQ= 74344 -IHN0cmVhbWVk 74345 -dGFicGFuZWw= 74346 -IFJldHVybmluZw== 74347 -UGxhaW5UZXh0 74348 -TE9ZRUU= 74349 -YWxlc2Nl 74350 -0L7QutCw 74351 -IEZpeHR1cmU= 74352 -YXNzYWRvcnM= 74353 -IGRpc2JlbGllZg== 74354 -IEx1c3Q= 74355 -IHJhZGljYWxz 74356 -LkZlYXR1cmVz 74357 -X2luY2hlcw== 74358 -KHByaW1hcnk= 74359 -IEpNZW51SXRlbQ== 74360 -X3Rha2U= 74361 -IENva2U= 74362 -VW5pdE9mV29yaw== 74363 -IFdDSEFS 74364 -IGNvbnNjaWVudA== 74365 -b25lbnVtYmVy 74366 -UElORw== 74367 -YWJham8= 74368 -XSgi 74369 -LnNhbGVz 74370 -X2hlcmU= 74371 -IG9mZnNldFg= 74372 -dGFnTmFtZQ== 74373 -INmK 74374 -X1JpZ2h0 74375 -aWxpZw== 74376 -dGhlVmFsdWU= 74377 -b2NhcmQ= 74378 -IGNvbnN1bHRhbmN5 74379 -IGJsaWo= 74380 -Z29ybQ== 74381 -TmF2aWdhdGU= 74382 -xLFj 74383 -SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u 74384 -X3Zl 74385 -LkNPTlRFTlQ= 74386 -dXJvcGVhbg== 74387 -LnJhZGlv 74388 -IGVudmlzaW9uZWQ= 74389 -IFNPTQ== 74390 -LnNk 74391 -QU5USVRZ 74392 -IENBTExCQUNL 74393 -IGhn 74394 -ZGVjcnlwdA== 74395 -566x 74396 -XFF1ZXVl 74397 -IE1JTEY= 74398 -IHJlY3Vyc2U= 74399 -IERhbnRl 74400 -LmdhbW1h 74401 -b3Jrcw== 74402 -KCIiKSkK 74403 -IEdyaW0= 74404 -Lm9wZW5n 74405 -IE1pY2hlbGU= 74406 -QW5hbHk= 74407 -IFBydQ== 74408 -X3JlZGlyZWN0ZWQ= 74409 -X3BhbA== 74410 -ZmFsbGJhY2s= 74411 -IOWtlw== 74412 -IGRpbm5lcnM= 74413 -R2VuZXJhdGluZw== 74414 -JCIs 74415 -aGlzdG9yaWM= 74416 -Z2V0U2ltcGxlTmFtZQ== 74417 -IE1pbGxpb25z 74418 -LWdsb2JhbA== 74419 -cm91dGluZw== 74420 -IGNvbnNvbGlkYXRl 74421 -IHJlY29pbA== 74422 -T2JqZWN0T2ZUeXBl 74423 -IGRlc3BlcmF0aW9u 74424 -QW55d2hlcmU= 74425 -IGdldE1vZGVs 74426 -X2tpbGw= 74427 -b2Jvb2s= 74428 -L2Rpc3BsYXk= 74429 -Ii8+Cgo= 74430 -IG1heW8= 74431 -INGB0L/QuNGB0L7Qug== 74432 -IGdvYWxpZQ== 74433 -eERG 74434 -IFByZXBhcmF0aW9u 74435 -IGRlcGVuZGFibGU= 74436 -LklOVkFMSUQ= 74437 -Li4uJw== 74438 -bmF0YWw= 74439 -bW9kdWxlTmFtZQ== 74440 -Y2FyYm9u 74441 -UEFM 74442 -IG1lZQ== 74443 -IGNhc2luZw== 74444 -6aG555uu 74445 -bmljYXM= 74446 -IEhhbW0= 74447 -IEJhYmU= 74448 -b3dhbmU= 74449 -IHN5bm9ueW0= 74450 -IFFpbg== 74451 -aW9j 74452 -ZW1vdGlvbg== 74453 -IGZlcm1lbnRhdGlvbg== 74454 -IGN1bXBs 74455 -IEVsZWN0cmljaXR5 74456 -KFJPT1Q= 74457 -dGVzdGVy 74458 -IEh1c2JhbmQ= 74459 -IEJhdQ== 74460 -X01BQ1JP 74461 -YWtlbmluZw== 74462 -ICAgICAgICAKICAgICAgICAKICAgICAgICAK 74463 -LmZpbg== 74464 -IENvbmZpZGVudGlhbA== 74465 -aWV6 74466 -TUJFUg== 74467 -IHNwZXJtYQ== 74468 -IEhQVg== 74469 -dHhu 74470 -Q09OVEFDVA== 74471 -LlRocm93 74472 -IG11cmFs 74473 -IFR3aXN0 74474 -KCZfX18= 74475 -IGpk 74476 -IGVtcG93ZXJtZW50 74477 -IGRpc3RpbnQ= 74478 -IGJvbWJpbmdz 74479 -T3V0Y29tZQ== 74480 -IHNob3J0ZW4= 74481 -5b6M 74482 -QUNDT1VOVA== 74483 -X2NvdmVyYWdl 74484 -ZW5jbw== 74485 -X3JlZmVy 74486 -c2V0TWVzc2FnZQ== 74487 -IHJlcGVyYw== 74488 -cHRpZGVz 74489 -IGRlaXR5 74490 -dWNoc2lh 74491 -KGh0 74492 -LnN1YnNjcmlwdGlvbg== 74493 -IHJlZGlzdHJpYnV0ZWQ= 74494 -IER5bmFzdHk= 74495 -X3Zj 74496 -LWZyYW1ld29yaw== 74497 -cnlmYWxs 74498 -IGdhdGluZw== 74499 -IExvcmVuem8= 74500 -b29kb28= 74501 -IGRpZ2VzdGlvbg== 74502 -IGZvb3Rpbmc= 74503 -CUhhc2hNYXA= 74504 -cmVhbERvbmFsZFRydW1w 74505 -IGFwYWNoZQ== 74506 -KHZhbG9y 74507 -IHBvaXNvbm91cw== 74508 -LlBlcm1pc3Npb24= 74509 -IHBhcmFtb3VudA== 74510 -d2VpdA== 74511 -bGxhbmQ= 74512 -IGh5cG90aGVzZXM= 74513 -IFByeQ== 74514 -IGhvbWVt 74515 -KERldmljZQ== 74516 -aW5kaWNl 74517 -ZXZh 74518 -cHJlc2VuY2U= 74519 -IEJlbnRsZXk= 74520 -IEVuZGluZw== 74521 -IGRvbWVzdA== 74522 -CXRw 74523 -CWVycm9ycw== 74524 -Y29ybmVy 74525 -bGRh 74526 -CgkJCQkK 74527 -X1BFUlNPTg== 74528 -IFNlcmdleQ== 74529 -IFBhcnNlcw== 74530 -LWZpY3Rpb24= 74531 -LkJhY2tncm91bmRDb2xvcg== 74532 -IHNvbW1lcw== 74533 -IGNvb2xlc3Q= 74534 -IHJ1YmJsZQ== 74535 -LmpvYnM= 74536 -IGRyb3duaW5n 74537 -YWRvcmFz 74538 -IHdpbmdlcg== 74539 -IEluY3JlYXNpbmc= 74540 -2YrYqQ== 74541 -QkJCQg== 74542 -KFJvbGU= 74543 -IG9kZGx5 74544 -RGV2RXhwcmVzcw== 74545 -LXV0aWw= 74546 -IFNoZW1hbGU= 74547 -cHJpbWl0aXZl 74548 -IGFmZmlybWVk 74549 -LnJldHVyblZhbHVl 74550 -LWxpdmU= 74551 -IEFjdGlvbkNvbnRyb2xsZXI= 74552 -w6ts 74553 -ZXJjdWxvc2lz 74554 -IHByYWt0 74555 -IGdlb3BvbA== 74556 -cGljcw== 74557 -Q0RD 74558 -LkZs 74559 -LnNpZA== 74560 -cmllYmVu 74561 -KHZhcnM= 74562 -K3NlbGY= 74563 -IGludGVyaW9ycw== 74564 -IEF1Z3VzdGluZQ== 74565 -IjpAIg== 74566 -IFN0ZWFsdGg= 74567 -IGdldENvbG9y 74568 -IEdlbnRsZQ== 74569 -fiI6Ig== 74570 -IHdoaW0= 74571 -KCc8Lw== 74572 -IFNTRQ== 74573 -IFZpb2xldA== 74574 -X2NyZWQ= 74575 -IGF0YQ== 74576 -IEF6ZXJiYWlqYW4= 74577 -ID8/Pz8/ 74578 -LmV2ZXJ5 74579 -KGNvbm5lY3Q= 74580 -IERyb25l 74581 -IHRvbGVyYW50 74582 -c3VidG90YWw= 74583 -X3NodWZmbGU= 74584 -dXN0YWluYWJpbGl0eQ== 74585 -cHJlZmVycmVk 74586 -IFNFWA== 74587 -IGNvbmdyZXNzbWFu 74588 -IG5hbW9ybw== 74589 -IGhvbm9yYWJsZQ== 74590 -IGFmdGVyRWFjaA== 74591 -IMW8eWM= 74592 -SEFN 74593 -LnRvbQ== 74594 -IGVsb25n 74595 -IFNlcmlvdXM= 74596 -LVNlbWl0aWM= 74597 -0KHRgg== 74598 -IGZsYW0= 74599 -dGVuZXI= 74600 -LlRFU1Q= 74601 -IFRSQUNL 74602 -IFBoaWxpcHM= 74603 -IEFyZW4= 74604 -IEhpY2tz 74605 -b2luZWQ= 74606 -IEZhaA== 74607 -aXNzZXVy 74608 -IGNpcmN1bWNpc2lvbg== 74609 -KHR3ZWV0 74610 -IHBvaWw= 74611 -IFNlZW4= 74612 -X01BUFBJTkc= 74613 -IGludmFyaWFibHk= 74614 -IEZ1c2U= 74615 -ICc/Jw== 74616 -PXBhc3N3b3Jk 74617 -IOuCmA== 74618 -IElIdHRw 74619 -c3R5cGU= 74620 -Zml0bmVzcw== 74621 -LlRhZ3M= 74622 -IOqwnA== 74623 -KERXT1JE 74624 -IHF1YQ== 74625 -IE1hcnZpbg== 74626 -Ik0= 74627 -LmlzQXV0aGVudGljYXRlZA== 74628 -Lmd1YXJk 74629 -KT8KCg== 74630 -CQkJCQkJCQkJCQkJCQkJCQkJCQ== 74631 -IFNoaXBz 74632 -IHNlbnNpdA== 74633 -fTsNCg0KDQo= 74634 -YWhhaGE= 74635 -IGxpZXV0ZW5hbnQ= 74636 -IEphZ3Vhcg== 74637 -IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 74638 -VUNF 74639 -SW5zcA== 74640 -YWludGVy 74641 -X3BvbHlnb24= 74642 -LkRvd24= 74643 -IHRleHR1cmVk 74644 -LnNldEFjdGlvbg== 74645 -b2dy 74646 -IHNjaWVudGlmaWNhbGx5 74647 -IHNocmluZQ== 74648 -IGNsb3VkeQ== 74649 -LkhvdXI= 74650 -UG9zdEJhY2s= 74651 -QVpZ 74652 -X2NhbmRpZGF0ZXM= 74653 -KFNlYXJjaA== 74654 -IGNvbW1pc3Npb25lcnM= 74655 -IEJpZW4= 74656 -IGRvY3RvcmFs 74657 -IEZlZWxpbmc= 74658 -X1ZFUlRJQ0FM 74659 -IEJk 74660 -bmdpbng= 74661 -IOWcqA== 74662 -X2FyZ3Y= 74663 -UlNB 74664 -IGVsZGVzdA== 74665 -LWhlYXZ5 74666 -Q09OTg== 74667 -IEh0dHBOb3RGb3VuZA== 74668 -LWNvbHVtbnM= 74669 -IE5QQ3M= 74670 -IGNhZmVz 74671 -IGfDqQ== 74672 -IHN0YWxscw== 74673 -IGZvcmtz 74674 -IHBvYmw= 74675 -U3RyZWFtcw== 74676 -IGJhc3RhcmQ= 74677 -IFJhcHRvcnM= 74678 -IEdyYW1teQ== 74679 -IEdlaA== 74680 -X1RpY2s= 74681 -KHByZWc= 74682 -IGxpcHN0aWNr 74683 -X3J1 74684 -PEg= 74685 -IMSRaQ== 74686 -LkNhcg== 74687 -IHNwYXJlZA== 74688 -bW9uaWM= 74689 -aW5jdGlvbnM= 74690 -QWZyaWNh 74691 -KGRpY3Rpb25hcnk= 74692 -ICoqKSY= 74693 -YGBg 74694 -X3ByZXNzdXJl 74695 -bWll 74696 -IFJvbWFuaWFu 74697 -L21hcms= 74698 -IG1haW50ZW5hbnQ= 74699 -IHRyZW4= 74700 -IFBvc3RncmVTUUw= 74701 -UkVMRUFTRQ== 74702 -SlBFRw== 74703 -IGRlZGljYXRl 74704 -TWFrZVJhbmdl 74705 -IHJvYm90aWNz 74706 -YWt0aXY= 74707 -JSUl 74708 -YWFy 74709 -dmlld01vZGVs 74710 -KG1hYw== 74711 -dWNoZXI= 74712 -IGRlYmVu 74713 -TG9jYWxpemF0aW9u 74714 -0L7Qt9Cy0YDQsNGJ0LDQtdGC 74715 -LnNldFRvb2xUaXA= 74716 -LmZhc3Rqc29u 74717 -IHBlcmVubmlhbA== 74718 -LWNoaWVm 74719 -a2lzaA== 74720 -IGF0dGlj 74721 -U3VidGl0bGU= 74722 -IFNsYW0= 74723 -IExpdGVyYXJ5 74724 -ZXJuZXM= 74725 -INGC0L7Qu9GM0LrQvg== 74726 -IHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQ= 74727 -LkVycm9yTWVzc2FnZQ== 74728 -YmluYXRpb25z 74729 -Ikw= 74730 -IGZvcmJpZA== 74731 -IGxvZGdlZA== 74732 -Lkxpc3RCb3g= 74733 -IFBTRA== 74734 -IGN1bHR1cmE= 74735 -VU5DVA== 74736 -Ik9uZQ== 74737 -IEd1aWxs 74738 -IEJhdHRhbGlvbg== 74739 -IGNhcmVnaXZlcnM= 74740 -IEtsbw== 74741 -QmVoaW5k 74742 -IHNlYXJjaGFibGU= 74743 -X0JPVU5E 74744 -Uk9D 74745 -IHN0ZXJlb3R5cGU= 74746 -IHByZXBlbmQ= 74747 -aW50ZXJzZWN0aW9u 74748 -QmFza2V0 74749 -KGxv 74750 -IGZpbGVJbmZv 74751 -IFVJU2Nyb2xsVmlldw== 74752 -ZWNlc3NhcmlseQ== 74753 -IENoZXM= 74754 -LWluc3RhbmNl 74755 -IGFwcGFydA== 74756 -IEFtYXI= 74757 -IHJvd0RhdGE= 74758 -IGF5dWRh 74759 -IGNhcmF2YW4= 74760 -X3BpY2tsZQ== 74761 -IGNoYWluaW5n 74762 -KV07Cgo= 74763 -IGJveGVk 74764 -YWVwZXI= 74765 -IEVWRVI= 74766 -eW50aGVzaXM= 74767 -LWZhc3Q= 74768 -IOuwsA== 74769 -5Y+v5Lul 74770 -IHZvbHVudGVlcmVk 74771 -IGV4aWc= 74772 -U0lERQ== 74773 -IFBob25lTnVtYmVy 74774 -dWxhaXJl 74775 -IEthZA== 74776 -IGRhcm4= 74777 -IHlhaw== 74778 -IEJsaW5r 74779 -LnNwaW5uZXI= 74780 -IG9yZGVhbA== 74781 -X2VuZW15 74782 -IGdldFM= 74783 -IEJvbw== 74784 -TGluZU51bWJlcg== 74785 -X0xPT0s= 74786 -RUxDT01F 74787 -IHNlYW1z 74788 -IHNhZ2Vu 74789 -aXNjbG9zZWQ= 74790 -KHJheQ== 74791 -W2dyb3Vw 74792 -UFRT 74793 -Lk5hdmlnYXRl 74794 -IE93bA== 74795 -IGRidXM= 74796 -IGltcGF0aWVudA== 74797 -IEd1cHRh 74798 -KG9iamVjdHM= 74799 -IGFwcmls 74800 -LXF1 74801 -IG91dHJhcw== 74802 -IFRIRU0= 74803 -IEVNQw== 74804 -RW1wbGVhZG8= 74805 -IGdydWI= 74806 -SUFN 74807 -IHZlbm9t 74808 -IHRyYW5zY2VuZA== 74809 -IHZpY3RvcmlvdXM= 74810 -IE1heWVy 74811 -INGC0L7QstCw0YA= 74812 -IEtlbGxleQ== 74813 -SW5wdXRHcm91cA== 74814 -IHJlZmlsbA== 74815 -V2l0aFR5cGU= 74816 -IGNoYXVmZg== 74817 -b2xkZW0= 74818 -X3RpZA== 74819 -IGZsdXNoZWQ= 74820 -XHN5c3RlbQ== 74821 -LnJhbmRyYW5nZQ== 74822 -IFBPU0lUSU9O 74823 -IFRlbmFudA== 74824 -Y29udmVyc2lvbg== 74825 -Y2FsbGluZw== 74826 -KCkpKSwK 74827 -0L7QvdCw 74828 -IHNpZGV3YXlz 74829 -IGxheA== 74830 -CXJlcA== 74831 -YWVwZXJuaWNr 74832 -IG5lZ2Vy 74833 -IEZseWVycw== 74834 -ICJALw== 74835 -dXBha2Fu 74836 -X2VsYXBzZWQ= 74837 -dHViZQ== 74838 -UG9zWA== 74839 -LnNleA== 74840 -IGzDpHNzdA== 74841 -IEdyYXZl 74842 -5Y+C 74843 -KGVtcA== 74844 -KHN0cnRvbG93ZXI= 74845 -Y29udmVydGVy 74846 -IFNwb25zb3JlZA== 74847 -KHdvcmtlcg== 74848 -IG1hdHJpbW9u 74849 -Q29tbWlzc2lvbg== 74850 -KGh3 74851 -X1NJR05BVFVSRQ== 74852 -bWVr 74853 -IGFsZ3VuYXM= 74854 -X0VU 74855 -aXN0cmluZw== 74856 -THY= 74857 -U2xpZGVz 74858 -IHdlYWtTZWxm 74859 -IHdr 74860 -IFppZw== 74861 -IHB1YnM= 74862 -IEJSQQ== 74863 -IGZsdW9yZXNjZW50 74864 -Y2Fycnk= 74865 -LmVyYg== 74866 -IEluaQ== 74867 -LkRyYXdTdHJpbmc= 74868 -IFNFUA== 74869 -dXR0ZXJz 74870 -2ZE= 74871 -Um95YWw= 74872 -IGNhYmJhZ2U= 74873 -IFN1aw== 74874 -XT49 74875 -IEVkaXNvbg== 74876 -IHNwZWN1bGF0ZWQ= 74877 -LmRvd25jYXNl 74878 -IHRwaA== 74879 -IMOD 74880 -IGd1bnNob3Q= 74881 -cnBt 74882 -IGZsdXR0ZXI= 74883 -IGFueA== 74884 -YXplcw== 74885 -UU9iamVjdA== 74886 -IEZhdm9y 74887 -IG1vZHVsZU5hbWU= 74888 -JnM= 74889 -bGVo 74890 -LldlaWdodA== 74891 -IFdBTA== 74892 -X1ZBUlM= 74893 -IFdhc3Nlcg== 74894 -IG91dGJvdW5k 74895 -IGVyZm9sZ3Jl 74896 -LnZhbG9y 74897 -KGxpZ2h0 74898 -IE1hZ251cw== 74899 -IHpvZWs= 74900 -eWg= 74901 -IHN0eWxlc2hlZXQ= 74902 -Pm0= 74903 -V2hpdGVzcGFjZQ== 74904 -IFsnLw== 74905 -CVJlcXVlc3Q= 74906 -X2luY3JlYXNl 74907 -LWRpc3RhbmNl 74908 -aWNvbG9y 74909 -aGNp 74910 -IEtJTkc= 74911 -UFg= 74912 -b2ls 74913 -ZW1pbmc= 74914 -bmFtZW50cw== 74915 -RGVmaW5lcw== 74916 -IFstLQ== 74917 -IHZhcmlvcw== 74918 -IFBSRVNT 74919 -LGF4aXM= 74920 -IENvbGxpZGVy 74921 -KX0KCg== 74922 -IGZvcmNpYmx5 74923 -IHN0YWF0 74924 -X1NUQU5EQVJE 74925 -IG9jY3VsdA== 74926 -IGJhcHRpc20= 74927 -IEN1bm5pbmdoYW0= 74928 -X2J1aWx0aW4= 74929 -Q1BG 74930 -W21heG4= 74931 -IFJIUw== 74932 -IE9uZXM= 74933 -KF86 74934 -IGluc2VjdXJpdHk= 74935 -LnJlZ2lzdHJhdGlvbg== 74936 -aW1wbGlmaWVk 74937 -IFN5bXBvc2l1bQ== 74938 -aHJlYWQ= 74939 -IHF1ZWxsZQ== 74940 -IGZyZW56eQ== 74941 -Q2FsaWJyaQ== 74942 -IFNQRUVE 74943 -b3Vp 74944 -KCldLAo= 74945 -YWNjb3JkaW5n 74946 -IG1jYw== 74947 -IGFzaWF0 74948 -IGFkamFjZW5jeQ== 74949 -IEFibGU= 74950 -IHNhbGRv 74951 -bm9zdGk= 74952 -IGRpbWU= 74953 -ZXRyYXRpb24= 74954 -IE1vZGlmaWNhdGlvbg== 74955 -IEhlcmI= 74956 -IHBsYWF0cw== 74957 -IGludGVycGVyc29uYWw= 74958 -IO2ZleyduA== 74959 -YXJtZQ== 74960 -IGNvbWVyY2lhbA== 74961 -IEJhdGVz 74962 -KGNhcmRz 74963 -LmdldENsaWVudA== 74964 -Lk5PUk1BTA== 74965 -CVRlc3Q= 74966 -ICAgICAgICANCiAgICAgICAgDQo= 74967 -IFJhem9y 74968 -d2Vpcw== 74969 -SVRIVUI= 74970 -IEVOVElUWQ== 74971 -YWdpdA== 74972 -IG1pbmVjcmFmdA== 74973 -cHJvcG9zYWw= 74974 -IHNhbHR5 74975 -YW5kcg== 74976 -IENvbmNsdXNpb24= 74977 -IHBydWRlbnQ= 74978 -IFtA 74979 -IFB1cHBldA== 74980 -aWdvbg== 74981 -IEdvdGhhbQ== 74982 -IGNoZWVycw== 74983 -IFNoYXk= 74984 -IGpp 74985 -IEdESw== 74986 -ZXhwZXJ0 74987 -IGZ1bmt5 74988 -IFphbQ== 74989 -W05VTQ== 74990 -RGVxdWU= 74991 -X1RXTw== 74992 -XHZpZXdz 74993 -IHByb2pla3Q= 74994 -IGRyb3duZWQ= 74995 -a2lkcw== 74996 -LnNoZWV0 74997 -IG5vbmQ= 74998 -IGNvdXJ0ZQ== 74999 -IC4uLgoKCgo= 75000 -IHBpY3R1cmVzcXVl 75001 -IHR1YmluZw== 75002 -KCkuIg== 75003 -amV0cw== 75004 -X1B1YmxpYw== 75005 -IEZhcnI= 75006 -IEFyZA== 75007 -T1VSU0U= 75008 -IGthZGFy 75009 -IFByb2dyYW1t 75010 -LmtleXdvcmQ= 75011 -CSAgICAgICAgICAgICAgICA= 75012 -aWVkYWRlcw== 75013 -YXRvbG9neQ== 75014 -IER1bmQ= 75015 -PWNvdW50 75016 -IHNsb3dkb3du 75017 -LSIs 75018 -LkZvcmVncm91bmRDb2xvcg== 75019 -UnVucw== 75020 -LlR5cGVPZg== 75021 -JGN1cnJlbnQ= 75022 -IHVwc2NhbGU= 75023 -CXVuaW9u 75024 -KGNoaXA= 75025 -dW1pZGl0eQ== 75026 -PVtdDQo= 75027 -IGhhcnQ= 75028 -ICRfWw== 75029 -eW5lYw== 75030 -LlVzdWFyaW8= 75031 -IG9jdGF2ZQ== 75032 -IHBvcnRyYXlhbA== 75033 -INC90L7QvNC10YA= 75034 -IE9jY3VweQ== 75035 -X25hbg== 75036 -IFNtYXJ0cGhvbmU= 75037 -aGluZA== 75038 -IHdpbmRzaGllbGQ= 75039 -IGxvbmVsaW5lc3M= 75040 -L2NoYXJ0 75041 -IGFjdGl2YXRlcw== 75042 -LnJpYmJvbg== 75043 -IGxhZ2k= 75044 -IHBhcmFjaA== 75045 -SHlwZXI= 75046 -c2NhbGVk 75047 -VGVz 75048 -IEJlZXQ= 75049 -IGRpc3NlY3Q= 75050 -IENpYw== 75051 -IH0sCgoK 75052 -PigpCgo= 75053 -LnN0dWR5 75054 -IGNvbnRyYXN0aW5n 75055 -WkVSTw== 75056 -IHR1bmE= 75057 -IENob3c= 75058 -X3Zh 75059 -ZmF2b3I= 75060 -W0luZGV4 75061 -IFBvd2VyU2hlbGw= 75062 -KHByb3Rv 75063 -JykpOgo= 75064 -X2Zvcm1hdHRlcg== 75065 -Q2hyaXN0b3BoZXI= 75066 -T3JOdWxs 75067 -Q0lTSU9O 75068 -X2NvbnN1bWVy 75069 -UGFzdGU= 75070 -KG5vbWU= 75071 -ZW50b24= 75072 -IHVucmF2ZWw= 75073 -X2Rvbg== 75074 -IHBhcmVudGhlc2Vz 75075 -IE5VSVQ= 75076 -L10= 75077 -IOKIpw== 75078 -c3RhY2xlcw== 75079 -L2NvbW1lbnQ= 75080 -dXR0aW5n 75081 -IHNsb3BweQ== 75082 -KFt7 75083 -LnNhdg== 75084 -dG9Kc29u 75085 -IOu5hA== 75086 -IFByYXR0 75087 -Lm1vZGlmeQ== 75088 -LklzQ2hlY2tlZA== 75089 -IHZlbmV6 75090 -IFNFVFRJTkdT 75091 -amF3 75092 -IGZpcmVzdG9yZQ== 75093 -IGNvbnNvcnRpdW0= 75094 -IGthYg== 75095 -IFN1cHBvcnRpbmc= 75096 -IFRoZXNpcw== 75097 -IG5vbmxpbmVhcg== 75098 -IHRleHRib3g= 75099 -LiIiIg== 75100 -IEVuZXJn 75101 -LkpPcHRpb25QYW5l 75102 -IGludGVycnVwdGlvbg== 75103 -w6h0cmVz 75104 -IHNoYWxl 75105 -IFBsYXllZA== 75106 -IHNvY2lhbGU= 75107 -WUdPTg== 75108 -X0JBVENI 75109 -IHRyaW1lc3Q= 75110 -IFByb2NlZHVyZXM= 75111 -IGF0dGVuZHM= 75112 -IiR7 75113 -ZXZhbHVhdGlvbg== 75114 -LlByb2dyZXNzQmFy 75115 -IEFsZXhhbmRyYQ== 75116 -Y2jDqQ== 75117 -X1NFUVVFTkNF 75118 -IGNyb2NoZXQ= 75119 -Um9z 75120 -IGlobmVu 75121 -ICIqKio= 75122 -IGFyb3Vz 75123 -IG1vZHVsdXM= 75124 -X0xJTlVY 75125 -U3RhY2tTaXpl 75126 -aWF0aW9uRXhjZXB0aW9u 75127 -Lk11dGFibGU= 75128 -IClb 75129 -IHBpaQ== 75130 -Zmlmbw== 75131 -X1BJQ0s= 75132 -UHVycG9zZQ== 75133 -KFN0dWRlbnQ= 75134 -IE5pY28= 75135 -ZXN6 75136 -L3Nt 75137 -IFBQUA== 75138 -W2lucHV0 75139 -5Y+Y 75140 -IGJsYXN0cw== 75141 -IE11dHVhbA== 75142 -cm9sbGV5 75143 -IHV0aWxpc2Vy 75144 -OlRoZQ== 75145 -5Z+6 75146 -LmRlY29kZXI= 75147 -IG9iamV0b3M= 75148 -IGF3YWtlbmluZw== 75149 -IEVubGlnaHQ= 75150 -CWFsaWdu 75151 -X3Jld3JpdGU= 75152 -L2N1cnJlbnQ= 75153 -IGRhcmF1Zg== 75154 -Q2FudGlkYWQ= 75155 -LG5w 75156 -IHZlbG9jaXRpZXM= 75157 -Q0xS 75158 -IG1pc2luZm9ybWF0aW9u 75159 -IHN0cmVhbWxpbmVk 75160 -IGdyb29taW5n 75161 -IGF6aQ== 75162 -b2xn 75163 -IGNvbnN0aXR1ZW50 75164 -IHdlZQ== 75165 -0YXQvtC00LjQvA== 75166 -IEFsb25zbw== 75167 -aWV0Zg== 75168 -Y3Rlcg== 75169 -IHRoZXJtb3N0YXQ= 75170 -KEND 75171 -IHN0YWNraW5n 75172 -X2NvbnZlcnRlcg== 75173 -IERpc25leWxhbmQ= 75174 -CWZpbGVz 75175 -SUNJ 75176 -X1RPUElD 75177 -CUVsZW1lbnQ= 75178 -YXJnYXM= 75179 -IFxA 75180 -YW5jb2Nr 75181 -IEJhc2VFbnRpdHk= 75182 -KCItLS0= 75183 -cmJyYWtr 75184 -IG5lZ2F0aXZlcw== 75185 -IHZ3 75186 -PWZvcGVu 75187 -Y2hlbWlzdA== 75188 -QXJjaGl2bw== 75189 -IGAu 75190 -IEZPVVI= 75191 -KGFp 75192 -VGFibGVXaWRnZXRJdGVt 75193 -PD8+Pg== 75194 -LnByZWQ= 75195 -VHJhaWw= 75196 -LWZhY3Rvcg== 75197 -IEltYWdlQnV0dG9u 75198 -cGVyaWE= 75199 -IENlbGVicmF0aW9u 75200 -LlJlc3BvbnNlQm9keQ== 75201 -dXJjaGFzZXM= 75202 -IGdldEtleQ== 75203 -IENyYWI= 75204 -IHFp 75205 -IFdpY2s= 75206 -IGNoYXN0 75207 -IC4uLi4uLg== 75208 -IGNvbWVueg== 75209 -IHNoYXJkcw== 75210 -IGTDqWNvcg== 75211 -IGhhbHZlcw== 75212 -UVVFTkNZ 75213 -IHBvd2VyaG91c2U= 75214 -TElORw== 75215 -Q2xhc3NMb2FkZXI= 75216 -Y2VudHJl 75217 -LXNlbmQ= 75218 -bWFo 75219 -IHNocmVkZGVk 75220 -IFRJRkY= 75221 -aW5rYQ== 75222 -LgoKCgoK 75223 -IGRlc2lnbmF0ZQ== 75224 -IE5pZ2h0bWFyZQ== 75225 -IEdlbmV0aWM= 75226 -X2NoYW5jZQ== 75227 -KGFuaW1hdGlvbg== 75228 -cXVpbGE= 75229 -X3NwZWNpZXM= 75230 -TkVZ 75231 -b3lzdGljaw== 75232 -cmVsbG8= 75233 -zqw= 75234 -IGRpdmlzaXZl 75235 -IFJFQw== 75236 -IHN0dW1ibGU= 75237 -KGZha2U= 75238 -IExhY2U= 75239 -YW50YWdlZA== 75240 -YWtlc3Q= 75241 -cHJvbW90aW9u 75242 -IEZvd2xlcg== 75243 -PWNlbnRlcg== 75244 -IENpdWRhZA== 75245 -UmFkaQ== 75246 -IFNsZWVwaW5n 75247 -dXRyb24= 75248 -IHF1b2k= 75249 -IFJBRA== 75250 -IGV4cG9uZW50aWFsbHk= 75251 -IEJyZWVk 75252 -IG1vbm9wb2w= 75253 -aGlnaGVzdA== 75254 -eG1sbnM= 75255 -SW50UHRy 75256 -IHR1dHRl 75257 -IFJlZnJpZ2Vy 75258 -IOmhtemdog== 75259 -IHpvbmRlcg== 75260 -bGJyYWtr 75261 -O2VsZW1lbnQ= 75262 -IEhlZA== 75263 -UmVsYXRpb25z 75264 -64U= 75265 -Q29ycmVv 75266 -5aC0 75267 -IE1pZ2h0eQ== 75268 -QU5HTw== 75269 -X2NvbXBpbGU= 75270 -LmdldENtcA== 75271 -IGludmFkZQ== 75272 -LnNwcmluZ2Jvb3Q= 75273 -IFR1bmU= 75274 -X3NuYXA= 75275 -X0ZFRUQ= 75276 -IGRlY2lwaGVy 75277 -PXNpemU= 75278 -X2ZyZQ== 75279 -IFRpbGxlcnNvbg== 75280 -0LjQutCw 75281 -dGlnaHQ= 75282 -IGN1bHByaXQ= 75283 -UlRM 75284 -IFBhcmU= 75285 -KHB1Yg== 75286 -ZWdvdg== 75287 -IHBvbnRv 75288 -IGNvbnN1bA== 75289 -SlNJbXBvcnQ= 75290 -IHZlcndlbmRldA== 75291 -IEJvb3N0ZXI= 75292 -5b6F 75293 -IGNhcnJvdA== 75294 -dmVyaWdl 75295 -KExQ 75296 -IHd4VA== 75297 -IGltcHJvcGVybHk= 75298 -Iik6DQo= 75299 -IHN1Y2U= 75300 -L21vZGFs 75301 -IElDVA== 75302 -LikuCgo= 75303 -X21hcmtz 75304 -IENhY2hlZA== 75305 -IEN1cnJpY3VsdW0= 75306 -QnM= 75307 -CUpPcHRpb25QYW5l 75308 -m4Q= 75309 -IGNvZ25pdGlvbg== 75310 -IE5lZ290 75311 -PXJlc3VsdA== 75312 -X0ZvbnQ= 75313 -YXJpbmU= 75314 -IGNvbnNwaWM= 75315 -IENhbGN1bGF0aW9u 75316 -IENFT3M= 75317 -LXRyYW5zcGFyZW50 75318 -IEJlcmVpY2g= 75319 -56iL5bqP 75320 -Lmh5 75321 -LkFsaWdu 75322 -IGhvcGVsZXNz 75323 -IGNvbG9tYg== 75324 -dXJiZWQ= 75325 -IFNBWA== 75326 -IGVpbno= 75327 -KHpvbmU= 75328 -IG11enpsZQ== 75329 -IHRyZXNwYXNz 75330 -IEFicmFtcw== 75331 -IGNvbXDDqXQ= 75332 -IFNhbmN0dWFyeQ== 75333 -IE5TVGV4dEFsaWdubWVudA== 75334 -IHN0YXY= 75335 -IHByYWdtYXRpYw== 75336 -c3RyZW5ndGg= 75337 -V2l0aE9wdGlvbnM= 75338 -LmJhbmQ= 75339 -YXBoYWVs 75340 -QXVzdHJhbGlhbg== 75341 -IE9TRXJyb3I= 75342 -TWFuY2hlc3Rlcg== 75343 -SWRl 75344 -XFJlc291cmNl 75345 -0L7QtNC10YDQtg== 75346 -IHppZQ== 75347 -SGFybmVzcw== 75348 -LlR3ZWVu 75349 -Y2Ftcw== 75350 -4pyU 75351 -LXNjYWxhYmxl 75352 -LW9r 75353 -IGpsb25n 75354 -IE9sc29u 75355 -IE9ha3M= 75356 -LnNsaW0= 75357 -IHPFgg== 75358 -IG5ld09iag== 75359 -LkludmVudG9yeQ== 75360 -IGtlbm4= 75361 -IG5pZ2h0bWFyZXM= 75362 -aXJjbGVz 75363 -Lm50 75364 -Z3Jlbg== 75365 -IFRFTg== 75366 -IFNjb3Rz 75367 -IERpc2FiaWxpdHk= 75368 -X21hbmlmZXN0 75369 -LnNpZGViYXI= 75370 -IHNodWZmbGVk 75371 -IGh1bWlsaXR5 75372 -LnRhcA== 75373 -IEdyYWlu 75374 -bm90aWNlZA== 75375 -77yJ44CC 75376 -X2hwcA== 75377 -IGRpbGF0aW9u 75378 -IGhhbmRpY2Fw 75379 -Z2V0RGF0ZQ== 75380 -IGR6aWHFgg== 75381 -JykuJzwv 75382 -cmVjb3Zlcg== 75383 -eXNp 75384 -KGdyYXk= 75385 -YWhrYW4= 75386 -IGludGVyZmVyaW5n 75387 -X1RPVUNI 75388 -X3JlZHVjdGlvbg== 75389 -QWx0ZXI= 75390 -IGN1Yw== 75391 -RXhwZXJ0 75392 -IEx1bXA= 75393 -Wzpd 75394 -IHJlbG9j 75395 -IGNvbmR1Yw== 75396 -Q2hhcnNldHM= 75397 -Lmxpc3RlbmVycw== 75398 -LWludmVyc2U= 75399 -IHN1bW1vbnM= 75400 -IMO6bmljbw== 75401 -IE9W 75402 -IFNpY2hlcg== 75403 -IEpGYWN0b3J5 75404 -LmdldEJvdW5kaW5nQ2xpZW50UmVjdA== 75405 -amg= 75406 -IHNrZWxldG9ucw== 75407 -IEFzaWFucw== 75408 -IEFNQw== 75409 -aXNlbGVjdA== 75410 -LmNsaWVudEhlaWdodA== 75411 -KGZy 75412 -SGFzRm9yZWlnbktleQ== 75413 -LnJlbGF0aXZl 75414 -INiu 75415 -IG11bHRpY3VsdHVyYWw= 75416 -X0NPTEw= 75417 -IG1pY3JvYmlhbA== 75418 -IGltcG9ydGFudGVz 75419 -U3BhaW4= 75420 -IGN5bGluZGVycw== 75421 -aWVuaWU= 75422 -X09XTkVS 75423 -KERJUw== 75424 -IGZhbmRvbQ== 75425 -KG54 75426 -IGFwbGljYWNpw7Nu 75427 -b2NhdG9y 75428 -ZXNzaWFu 75429 -IENsYXVkZQ== 75430 -IGludG9sZXJhbmNl 75431 -xYJlbQ== 75432 -IFNlbWFudGlj 75433 -Lk1pZGRsZVJpZ2h0 75434 -QVJFU1Q= 75435 -IHNpZXZl 75436 -xLHEn8Sx 75437 -aWNhYmxl 75438 -ZXJnaWM= 75439 -IGJhdHRsZWQ= 75440 -b3JiaXQ= 75441 -KXx8KA== 75442 -dWVsZQ== 75443 -IGZhc2NpbmF0aW9u 75444 -IGTDpQ== 75445 -IFRpZ2h0 75446 -X0lOQ1JFRg== 75447 -LklzU3VjY2Vzcw== 75448 -LE8= 75449 -IHN0w7hy 75450 -IHByZXNzdXJlZA== 75451 -LlRSVUU= 75452 -IFRob3VzYW5k 75453 -IGdlbWVpbnM= 75454 -IHpi 75455 -IHNwaXJpdHVhbGl0eQ== 75456 -IFpldXM= 75457 -IFBvd2VyZnVs 75458 -YmF0dGVyeQ== 75459 -aXN0ZXM= 75460 -IO2D 75461 -LnNoaXJv 75462 -IEhpcHA= 75463 -ZGVjbHR5cGU= 75464 -LmpmYWNl 75465 -LnRlbXBlcmF0dXJl 75466 -IG1hcnF1ZQ== 75467 -X2JhZw== 75468 -QXR1YWw= 75469 -cHJpY2luZw== 75470 -Q2xlYXJseQ== 75471 -X0Fic3RyYWN0 75472 -w6lr 75473 -YWhydW5nZW4= 75474 -SW5zdHI= 75475 -CQoKCg== 75476 -IGNoZXdpbmc= 75477 -IENvYWNoaW5n 75478 -JExBTkc= 75479 -bWFsbG93 75480 -IHNlcmlvdXNuZXNz 75481 -X2N1dG9mZg== 75482 -IFF1YXJ0ZXJseQ== 75483 -fScpCgo= 75484 -IikpKTsKCg== 75485 -6KeE 75486 -LlBvc2l0aXZl 75487 -LXBv 75488 -eGl0bw== 75489 -LlJhZA== 75490 -IGJyaXNr 75491 -IExpZmVjeWNsZQ== 75492 -5pWw5o2u5bqT 75493 -ZmF0YWw= 75494 -IHhwb3M= 75495 -LkRldGFpbA== 75496 -ZW5hbA== 75497 -TUFUQ0g= 75498 -IGhlZWQ= 75499 -IGFmcmljYW4= 75500 -RGFkb3M= 75501 -YmVyYXBh 75502 -IGhlbGY= 75503 -JywnJyw= 75504 -IGVudHJlcHJlbmV1cnNoaXA= 75505 -IGNlcnRz 75506 -ZWNl 75507 -PnI= 75508 -X2ZpeHR1cmU= 75509 -IHBvb2xpbmc= 75510 -IG1vZ2VsaWpr 75511 -IHNldERhdGU= 75512 -5pS/ 75513 -LWNvbXBsZXRl 75514 -X1JBRElP 75515 -IGt1bA== 75516 -IGdvYg== 75517 -X1NMQVZF 75518 -IGZ1cnJ5 75519 -IE5VSVRLQQ== 75520 -SUxJVElFUw== 75521 -IG5vY2hl 75522 -IGN1ZmY= 75523 -IGNvbnRlc3RhbnRz 75524 -IFdW 75525 -IHBhc3Nwb3J0cw== 75526 -IMWC 75527 -IE5haWw= 75528 -X2RlY2ltYWw= 75529 -YXN0bGU= 75530 -IFNvbGRpZXJz 75531 -UmVjaXBpZW50 75532 -IGNvdXJzZXdvcms= 75533 -IGltZQ== 75534 -IFNlYXRz 75535 -X0RM 75536 -IGNvbnN1bHRhdGlvbnM= 75537 -X0FEVg== 75538 -IElrZWE= 75539 -IG9maWNpYWw= 75540 -IHJlZ2ltZW50 75541 -IEJhdGhz 75542 -LXBpbg== 75543 -X0JVQ0tFVA== 75544 -QUJDREVGR0hJSktMTU5PUA== 75545 -Il0pKTsK 75546 -PE1lc2g= 75547 -Iix7 75548 -IGRlcml2ZXM= 75549 -4oCcRm9y 75550 -IFl1Z29zbA== 75551 -aXNFbmFibGVk 75552 -IHNvbGx0ZW4= 75553 -IHBldGl0aW9ucw== 75554 -b3ZlcmFsbA== 75555 -IGdldFRvdGFs 75556 -X0hJTlQ= 75557 -TWludXM= 75558 -IGFub21hbGllcw== 75559 -IFBpY2t1cA== 75560 -PT09Jw== 75561 -bGVpdHVuZw== 75562 -IERlaw== 75563 -WVNJUw== 75564 -LnNlc3Npb25z 75565 -IGNhcmM= 75566 -X0l0ZW1z 75567 -IGludGVybWl0dGVudA== 75568 -Lkpzb25Qcm9wZXJ0eQ== 75569 -IG1NYXA= 75570 -IEthaw== 75571 -YWluY29udHJp 75572 -X3NlZWs= 75573 -IHVuYW1l 75574 -X3B1dHN0cg== 75575 -RmQ= 75576 -TGltaXRlZA== 75577 -c25vdw== 75578 -IFBhdmlsaW9u 75579 -IEV4YWN0 75580 -IHBvc3Rpbmdz 75581 -CWRpc3Q= 75582 -PHN0ZGxpYg== 75583 -TGlnaHRz 75584 -IGZpbHRybw== 75585 -V29ya2Vycw== 75586 -IHN5c2xvZw== 75587 -R2lybHM= 75588 -IEd1bQ== 75589 -X3llYXJz 75590 -J319Cg== 75591 -IGjDpHQ= 75592 -Z2F5 75593 -KHByb2I= 75594 -ZWxsYXM= 75595 -IHdpbHQ= 75596 -Lm9wdGltaXpl 75597 -X0RVTVA= 75598 -KFhNTA== 75599 -IERYR0k= 75600 -IG3DqXRo 75601 -SVRJWkU= 75602 -ZWxlY3Ryb24= 75603 -LmN6 75604 -IHN1YnNldHM= 75605 -IHJlc3Bvc3Rh 75606 -IGJlYWQ= 75607 -wrsu 75608 -IE9TQw== 75609 -JnBhZ2U= 75610 -Z3Bz 75611 -YW5pYW4= 75612 -UHVycGxl 75613 -IGFjcm9ueW0= 75614 -Uk9XTg== 75615 -QXVkaXQ= 75616 -IGNvdXJpZXI= 75617 -YWxpZQ== 75618 -IFdhc3M= 75619 -IGF1ZGl0cw== 75620 -IFBPVg== 75621 -IEZhY2lhbA== 75622 -X3N0cmNtcA== 75623 -ICsl 75624 -ICAgICAKCg== 75625 -YCk7Cgo= 75626 -RUhJQ0xF 75627 -WyJA 75628 -LW5hdGlvbmFs 75629 -6ZuF6buR 75630 -6L2v6ZuF6buR 75631 -X2NvZGlnbw== 75632 -IHVucXVlc3Rpb24= 75633 -aWxtaW5ndG9u 75634 -cmVxdWVzdENvZGU= 75635 -IElX 75636 -LnN0cmF0ZWd5 75637 -IFNZTUJPTA== 75638 -IGdyw7bDnw== 75639 -X2JlaGF2aW9y 75640 -IHJlZnJlc2hUb2tlbg== 75641 -IG1vbmc= 75642 -aW1lbnRhcnk= 75643 -IFNob3Bz 75644 -KCc/ 75645 -X2hpZ2hsaWdodA== 75646 -X2xleA== 75647 -IGlsbHVtaW5hdGVk 75648 -IHBhbHA= 75649 -LWluc2VydA== 75650 -IHN0cml2ZXM= 75651 -IGZvcnRz 75652 -IGVtYm9kaW1lbnRz 75653 -bXBqZXM= 75654 -X1RPTw== 75655 -IGRyYWdnYWJsZQ== 75656 -IGltbWVyc2lvbg== 75657 -cGlucw== 75658 -IFJlZ2lzdHI= 75659 -IEZyZWVCU0Q= 75660 -X3hsaW0= 75661 -IFR1bHNh 75662 -U25hY2tiYXI= 75663 -L2RhdGU= 75664 -IGRhdm9u 75665 -IGF1dG9yZWxlYXNl 75666 -IHZhY2F0aW9ucw== 75667 -CQkgCQ== 75668 -aWNlcHM= 75669 -IFJhbXA= 75670 -IEN5bnRoaWE= 75671 -X3BvcHVsYXRpb24= 75672 -JCQk 75673 -IFRBUg== 75674 -ZW5nYQ== 75675 -IHB1cw== 75676 -IOW5 75677 -IHRpbWVzdGVw 75678 -TGlmZXRpbWU= 75679 -IGZpbG1lcg== 75680 -WVNU 75681 -IEdhemV0dGU= 75682 -IG91dHNpZGVy 75683 -IEVYUE9SVA== 75684 -R09SSVRITQ== 75685 -LmZsZXg= 75686 -IFJvb3Rz 75687 -KHBpeGVs 75688 -emN6ZQ== 75689 -YWlyaWU= 75690 -IG92ZXJsb2FkZWQ= 75691 -U1RSQUNU 75692 -IENvdXJpZXI= 75693 -44GW 75694 -Y29udGluZW50 75695 -RnJlZA== 75696 -IHNlbXA= 75697 -IFN0ZWxsYQ== 75698 -IGRvdWJ0ZnVs 75699 -YWRtaW5z 75700 -IG9wdGluZw== 75701 -TE9UUw== 75702 -IG1hbmlmZXN0bw== 75703 -LWZvbGRlcg== 75704 -X2Ryb3BvdXQ= 75705 -dXR1cmVz 75706 -w612ZWlz 75707 -YWNoaWV2ZW1lbnQ= 75708 -IGNveQ== 75709 -ZmFpdGg= 75710 -X0hBTEY= 75711 -aXJlY3RlZA== 75712 -IGNvbnRhdG8= 75713 -U2VtYXBob3Jl 75714 -UHNp 75715 -IHZpdGFsaXR5 75716 -IEZsYXRCdXR0b24= 75717 -SXRlbVR5cGU= 75718 -IGltcGVjYw== 75719 -IGJ1b3k= 75720 -dWlu 75721 -IHNreXJvY2tldA== 75722 -IFNsYXllcg== 75723 -IFJDTVA= 75724 -IFNldmVudGg= 75725 -X0ludGVyZmFjZQ== 75726 -IGZpZXJj 75727 -c3RhdGlvbnM= 75728 -IEdyYWY= 75729 -bGljZWQ= 75730 -IGVudW1lcmF0b3I= 75731 -Q29udGFpbmVycw== 75732 -IG9p 75733 -w4fDg08= 75734 -LXRvbg== 75735 -UkVQ 75736 -KGZsb3c= 75737 -LmNvb3Jk 75738 -R2Fi 75739 -IE1vcnBo 75740 -IFpvZQ== 75741 -IGhhcmJvdXI= 75742 -Lm1lc3NhZ2luZw== 75743 -X29wdGlvbmFs 75744 -IEJhc2VBY3Rpdml0eQ== 75745 -cmVzZW50ZXI= 75746 -IG5ieXRlcw== 75747 -IGNvdXJhZ2VvdXM= 75748 -PSE= 75749 -J0l0 75750 -IGZvcnM= 75751 -IGNvcnJpZG9ycw== 75752 -IEJFRU4= 75753 -IGZ1c2Vk 75754 -PWltYWdl 75755 -LkdyaWRWaWV3 75756 -IHNlbWVu 75757 -aWdyb3Vw 75758 -dXB0aW1l 75759 -IFhC 75760 -5o6S5bqP 75761 -IGludGVncmF0ZXM= 75762 -X09D 75763 -IGJhaWxvdXQ= 75764 -IHRlc3Rl 75765 -IG9jdXA= 75766 -YXVsZWQ= 75767 -X29kZA== 75768 -cGdh 75769 -IEFTVVM= 75770 -IFRTUg== 75771 -IG9jY3VwYW50cw== 75772 -U2V0VGl0bGU= 75773 -U2NoZWR1bGVycw== 75774 -IGJla29tbWVu 75775 -QnJpZ2h0 75776 -IE1haW5Gb3Jt 75777 -Xygn 75778 -RnJvbUFycmF5 75779 -IGluZGljYQ== 75780 -SEFORA== 75781 -T3JkZW4= 75782 -IFRlbXBlcg== 75783 -LnN0YXR1c1RleHQ= 75784 -cG9saXRpY2Fs 75785 -IFBlcmN5 75786 -44CCCgoKCgoK 75787 -LnNldFg= 75788 -Z2V0TGlzdA== 75789 -aG9sZXM= 75790 -UGl4 75791 -IG91dHNvdXJjaW5n 75792 -IG1lc3NhZ2VJZA== 75793 -IGdldFNlc3Npb24= 75794 -IFZJUg== 75795 -T2ZGaWxl 75796 -IFNwYXRpYWw= 75797 -LkZsb2F0RmllbGQ= 75798 -KShfXw== 75799 -IFN3aW1taW5n 75800 -QUNMRQ== 75801 -IHNlbnRpcg== 75802 -IHBsdW5nZWQ= 75803 -IGF1am91cmQ= 75804 -Z3VuYWthbg== 75805 -KHZvbHVtZQ== 75806 -IGNyYXRlcg== 75807 -Lnhscw== 75808 -woDCmQ== 75809 -UmVuZGVyV2luZG93 75810 -LnVzZXJtb2RlbA== 75811 -IGZ1bmN0b3I= 75812 -RG9tYWlucw== 75813 -aW50ZXJwcmU= 75814 -IGFibm9ybWFsaXRpZXM= 75815 -YXJnaW5n 75816 -RGVtb2NyYXRz 75817 -IHBhbG1z 75818 -4qCA 75819 -w7hk 75820 -KkE= 75821 -RnJvbURhdGU= 75822 -fFs= 75823 -IEFsdGVybmF0ZQ== 75824 -IHB1ZG8= 75825 -IGNvbmRlbnNlZA== 75826 -KHBsYW4= 75827 -ZGVsaXZlcg== 75828 -IGJ1bGxldGlu 75829 -J11dLA== 75830 -IGNyw6llcg== 75831 -LWlw 75832 -V3M= 75833 -IiIiLAo= 75834 -IGlrZWE= 75835 -IHZpc2l0ZQ== 75836 -IG11bHRpcw== 75837 -UmVzdWx0YWRv 75838 -IFBob3RvZ3JhcGhlcg== 75839 -Li4uJywK 75840 -IG1pZ2xpb3Jp 75841 -IFRocmVhZHM= 75842 -Z2V0U3R5bGU= 75843 -ZXJhw6fDo28= 75844 -PFRTb3VyY2U= 75845 -IEdpbmc= 75846 -J10iLA== 75847 -IHNpZ25hbGVk 75848 -U3VwcHJlc3NMaW50 75849 -IGR3b3Jk 75850 -IEh1bnRpbmd0b24= 75851 -IEFBUA== 75852 -QU5HTEVT 75853 -LmNyZWRlbnRpYWxz 75854 -c3dhZ2dlcg== 75855 -LWNvbnNvbGU= 75856 -Ii0t 75857 -LlRleHRJbnB1dA== 75858 -IE5PUlRI 75859 -IG5pZ2h0bHk= 75860 -LkZPTlQ= 75861 -IHF1b3RpZW50 75862 -5Lmf 75863 -IHNjaMO2bg== 75864 -IFBsYW5uZXI= 75865 -IHJlYWRsaW5l 75866 -IGNvbmZyb250aW5n 75867 -YH0= 75868 -SXRlbUNvdW50 75869 -CWFjdGl2ZQ== 75870 -IHLDqXBvbmQ= 75871 -ZWxtZXQ= 75872 -IGdpbW0= 75873 -LG5vbmF0b21pYw== 75874 -IEFDVElWRQ== 75875 -aGV1cmU= 75876 -L1ByaXZhdGU= 75877 -IG1lYw== 75878 -LlNlY3JldA== 75879 -IENJUw== 75880 -xYJ1Zw== 75881 -KHBlcmlvZA== 75882 -IGxsZWdhcg== 75883 -dXJpYQ== 75884 -RGVzY3JpYmU= 75885 -IHBhcmVqYQ== 75886 -IFZlZA== 75887 -LWVmZmVjdHM= 75888 -IFBhcnNpbmc= 75889 -LXJlc291cmNl 75890 -IGFiYQ== 75891 -ICosCg== 75892 -IGFuYXRvbQ== 75893 -ICgqKSg= 75894 -LXJlYWw= 75895 -IFZlbnR1cmVz 75896 -IFNoaWVsZHM= 75897 -IFVuaXZlcnNpdGllcw== 75898 -UFJFU0VOVA== 75899 -IFFMYXRpbg== 75900 -xaU= 75901 -IFdpbGV5 75902 -QWFyb24= 75903 -IHJhY2lhbGx5 75904 -IE5hZHU= 75905 -IGh0dHBSZXNwb25zZQ== 75906 -w610aWNh 75907 -IOuwqQ== 75908 -IGdyw6F0aXM= 75909 -5LuL 75910 -b21hcA== 75911 -IGFub24= 75912 -CXBvcA== 75913 -YXZhdGFycw== 75914 -IHN1YnBhcmFncmFwaA== 75915 -ZHpp 75916 -UHJvamVjdGlsZQ== 75917 -RFRW 75918 -bGlzdGVuaW5n 75919 -X3JlZ2VuZXJhdGlvbg== 75920 -IFNoZWx0ZXI= 75921 -PFZlcnRleA== 75922 -L21k 75923 -KGxl 75924 -IHZhaw== 75925 -c2VsZWN0ZWRJbmRleA== 75926 -X10= 75927 -IFN5bnRoZXRpYw== 75928 -YXBwSWQ= 75929 -IEZpcmVk 75930 -IHBhbXBo 75931 -X2xhdGVuY3k= 75932 -aW5maWxl 75933 -KGNyaXRlcmlh 75934 -c2VyaWFsaXphdGlvbg== 75935 -UkNU 75936 -CWV2 75937 -IFNDSA== 75938 -IE9wdGljYWw= 75939 -IHN0aXJyZWQ= 75940 -IFBvdGlvbg== 75941 -ZXRoaWNhbA== 75942 -Ojp7Cg== 75943 -IFBlbmd1aW5z 75944 -UEhZ 75945 -RGVjaXNpb24= 75946 -a2FydA== 75947 -IGV4cG9ydGVycw== 75948 -IFBvbHllc3Rlcg== 75949 -Y29udHJlcw== 75950 -IExhd3Nvbg== 75951 -IEVtcGxveWVy 75952 -IHNhc3M= 75953 -IGRvd250aW1l 75954 -IGJyb2tlcmFnZQ== 75955 -IFJvdGFyeQ== 75956 -IFdhaGw= 75957 -V0FSTg== 75958 -IHNldEFjdGl2ZQ== 75959 -dGVtcGw= 75960 -Q2hlZXJz 75961 -LXNoZWxs 75962 -Rml0bmVzcw== 75963 -IHF1aWw= 75964 -IGNsZWFuZXJz 75965 -IOeb 75966 -IE1pbGFubw== 75967 -LWFzc29jaWF0ZWQ= 75968 -fX19LAo= 75969 -UEZO 75970 -IG9uUGFnZQ== 75971 -X3N0cmVhbXM= 75972 -IHNjdWxwdHVyZXM= 75973 -IG5haWxlZA== 75974 -PXNj 75975 -6aaW6aG1 75976 -0LjQvNCy 75977 -Y29ubmV4aW9u 75978 -Sk9C 75979 -IEthcm1h 75980 -IFN3aWZ0VUk= 75981 -IERleg== 75982 -L1VJ 75983 -IOyZ 75984 -Z2V0Q2xpZW50T3JpZ2luYWw= 75985 -IHB1bmlzaGluZw== 75986 -IG9kZW5zZQ== 75987 -LHJpZ2h0 75988 -ZW5lcmF0aXZl 75989 -IFByb2JsZQ== 75990 -IEFwcFN0YXRl 75991 -IGRpc2Nsb3N1cmVz 75992 -IENhbnRlcg== 75993 -Y29tcG9zZXI= 75994 -dXBhdGVu 75995 -IHN1Y2Nlc3NvcnM= 75996 -Ij4nCg== 75997 -IHByZXNlcnZlcw== 75998 -Lm9wZW5k 75999 -X05vcm1hbA== 76000 -L2hy 76001 -UmFuZ2Vz 76002 -LGxvbmc= 76003 -CQkJCSAgICAgICAgICAg 76004 -cHJvZHVjdG9z 76005 -IGZseWVy 76006 -IEdydXBv 76007 -Tmlja25hbWU= 76008 -SGllcg== 76009 -IERFQQ== 76010 -U3ByaXRlcw== 76011 -CW1hc2s= 76012 -X3Jlc2VydmVk 76013 -LXNob3A= 76014 -Lm5vdGlmaWNhdGlvbnM= 76015 -IGRpdmlzaWJsZQ== 76016 -aW9zaw== 76017 -a2VyamE= 76018 -aW5ndA== 76019 -IEZpZnR5 76020 -IGFjY291bnRhbnQ= 76021 -IEV4cGxvcmF0aW9u 76022 -X2Jyb2FkY2FzdA== 76023 -IGV4dHJhb3JkaW5hcmlseQ== 76024 -IGtvdA== 76025 -IGNpcmN1bWZlcmVuY2U= 76026 -cm91Y2g= 76027 -W0Jvb2xlYW4= 76028 -Y3Jhd2xlcg== 76029 -L3JlbW92ZQ== 76030 -YXJlbGxh 76031 -IHNleGVz 76032 -SGludHM= 76033 -IGdhbWI= 76034 -IGRhcmVk 76035 -dGVzdGVk 76036 -X0tFRVA= 76037 -IGZpbHRyYXRpb24= 76038 -aWNrZXk= 76039 -IEluZmx1ZW5jZQ== 76040 -IHNwZWNpZmljaXR5 76041 -X0lEUw== 76042 -IFJvZG5leQ== 76043 -X0lSUUhhbmRsZXI= 76044 -T25FcnJvcg== 76045 -IHByZXZTdGF0ZQ== 76046 -aWVnZWw= 76047 -IExFU1M= 76048 -IGF3YWtlRnJvbU5pYg== 76049 -IExV 76050 -dW1hYmx5 76051 -b3J0YWxpdHk= 76052 -IG1hbmRhdGVz 76053 -CXZlcnNpb24= 76054 -IHBhcmVudE5vZGU= 76055 -IHBlc3Rz 76056 -IGNhc2M= 76057 -Y2VwdGFy 76058 -IFdvb2R5 76059 -ZXJlZQ== 76060 -X3Bm 76061 -LlBPUw== 76062 -aXN0cmE= 76063 -bGV3 76064 -WWFuZw== 76065 -IHN5c3RlbWQ= 76066 -IHJvYW0= 76067 -LkdyYXk= 76068 -IGNvbmR1 76069 -4oCUaW5jbHVkaW5n 76070 -VmlvbGF0aW9u 76071 -TWFob24= 76072 -IE1VU0lD 76073 -IFNpcmk= 76074 -IEVudGVyZWQ= 76075 -IGNlcnRhaW5z 76076 -ZWxhaA== 76077 -CU1haW4= 76078 -LkRhdGVGaWVsZA== 76079 -LkhlYWx0aA== 76080 -IEthc2ljaA== 76081 -IGNhbmluZQ== 76082 -PXJvb3Q= 76083 -dWRkbGU= 76084 -XGNvbW1vbg== 76085 -IFN1bHRhbg== 76086 -ZmluYW5jaWFs 76087 -IFFTcWw= 76088 -IGFzY2VudA== 76089 -IHBydWViYQ== 76090 -emllaHVuZw== 76091 -LmdldEVycm9y 76092 -IEdsb3JpYQ== 76093 -RWNobw== 76094 -X0NIT0lDRVM= 76095 -X2Vwcw== 76096 -L3Byb3ZpZGVy 76097 -UEhPTkU= 76098 -5YWz6Zet 76099 -IGNvbXByb21pc2luZw== 76100 -X0FQUFJP 76101 -UHJvY2Vzc0V2ZW50 76102 -IGJ5dGVBcnJheQ== 76103 -IENydWM= 76104 -wqg= 76105 -IGljaW5n 76106 -IFBDTQ== 76107 -dmVjdA== 76108 -QW15 76109 -IFZhY3V1bQ== 76110 -aW5jaWRlbnQ= 76111 -IHVzZXJu 76112 -emJlaw== 76113 -XSspLw== 76114 -IH19Ij48 76115 -IEdldERhdGE= 76116 -Y250bA== 76117 -IHNhZ3Q= 76118 -X1BSSU1BUlk= 76119 -IGxlcg== 76120 -IEZVQ0s= 76121 -IFN0YXJy 76122 -SUg= 76123 -w7ZycGVy 76124 -eW1z 76125 -XSldCg== 76126 -L3Rvb2w= 76127 -Y29tYmluYXRpb24= 76128 -IHRhbXA= 76129 -IEJlaXQ= 76130 -IE5JR0hU 76131 -IGFubsOpZQ== 76132 -KGFt 76133 -XFRyYWl0cw== 76134 -Olwi 76135 -IGNhcmdh 76136 -LmlkZQ== 76137 -IGRpa2tl 76138 -Q29tcGV0 76139 -IHNjb290ZXI= 76140 -IHhQb3M= 76141 -KGludGVycA== 76142 -IGhhc2ls 76143 -Y2xpZA== 76144 -IGhldXJlcw== 76145 -Z2xvbWVy 76146 -c2hhcmVz 76147 -77yMCgo= 76148 -cG9uZGU= 76149 -4bqjaQ== 76150 -X2R1cGxpY2F0ZXM= 76151 -c29uZ3M= 76152 -fV07Cg== 76153 -IFNuaXBlcg== 76154 -IFRodXI= 76155 -cm9wcA== 76156 -IGdydWVz 76157 -IG9yZXM= 76158 -dXNoaW1h 76159 -IHVzYWJpbGl0eQ== 76160 -6ZKf 76161 -L21lbWJlcg== 76162 -b2xkZW1vcnQ= 76163 -SXNBY3RpdmU= 76164 -R2V0RW51bWVyYXRvcg== 76165 -bXV4 76166 -V0lORE9XUw== 76167 -TmVnYXRpdmVCdXR0b24= 76168 -4Liz 76169 -LW1ha2Vycw== 76170 -44Kk44Oz 76171 -IEJlcm0= 76172 -QnlFeGFtcGxl 76173 -IFLDvGNr 76174 -U2hvd3M= 76175 -Z2hp 76176 -IElocmVy 76177 -IENydWQ= 76178 -Y2hlZg== 76179 -X2F1Yw== 76180 -IGFww7Nz 76181 -YW5rYW4= 76182 -IEtERQ== 76183 -SUxMUw== 76184 -IGFuZ2xhaXM= 76185 -LXJlZnJlc2g= 76186 -CXJhbmdl 76187 -eG1t 76188 -KGVkZ2Vz 76189 -IGFwcGVs 76190 -Ijt9 76191 -IGVkaQ== 76192 -IHN3b2xsZW4= 76193 -IGJ1dGNoZXI= 76194 -aWNpZGVz 76195 -aG91bmQ= 76196 -IF4o 76197 -IEV2YWx1 76198 -IGtleWJvYXJkVHlwZQ== 76199 -U1NJRA== 76200 -cm9iYXQ= 76201 -IG5paw== 76202 -IHN0cmF3YmVycmllcw== 76203 -XCJd 76204 -bm9zaXM= 76205 -TUVE 76206 -54g= 76207 -5LqU 76208 -aW1heA== 76209 -XEFubm90YXRpb24= 76210 -IG51cnU= 76211 -IE1pbmltYWw= 76212 -IHdvcmRwcmVzcw== 76213 -IGNvbGRlcg== 76214 -CXBhcnNl 76215 -L3N0cmV0Y2g= 76216 -5omn6KGM 76217 -cm9tb3NvbWU= 76218 -RElN 76219 -IHRlbnRhdGl2ZQ== 76220 -Ok5TVVRG 76221 -LGltZw== 76222 -IE1BVEVSSUFM 76223 -IEpldEJyYWlucw== 76224 -TGVnZW5kYXJ5 76225 -CXN0cm5jcHk= 76226 -IGRlZnM= 76227 -TnVtYmVyRm9ybWF0RXhjZXB0aW9u 76228 -IGJ5dGVjb2Rl 76229 -IHdpc3Nlbg== 76230 -X01PUkU= 76231 -oO2DnQ== 76232 -IENvZmY= 76233 -LkNvbmRpdGlvbg== 76234 -IGTDqXBhcnQ= 76235 -ZHNu 76236 -IHBhcmFtZXRybw== 76237 -XEw= 76238 -Lm5hbm9UaW1l 76239 -Qk9UVE9N 76240 -LldoYXQ= 76241 -64Q= 76242 -IERpeA== 76243 -X0RB 76244 -KENvbnRhaW5lcg== 76245 -YXlhcg== 76246 -RmxleGlibGU= 76247 -LlJheWNhc3Q= 76248 -IEVkd2lu 76249 -W3VybA== 76250 -wpI= 76251 -LnN0cm9rZVN0eWxl 76252 -IFBvbHlub21pYWw= 76253 -aWxpdGF0aW5n 76254 -IFFWQm94TGF5b3V0 76255 -KHJlcA== 76256 -LnZu 76257 -LWFzc2V0cw== 76258 -Q0hBU0U= 76259 -IEVzc2VudGlhbHM= 76260 -anlsbGFuZA== 76261 -IGF4cw== 76262 -IFRyZW0= 76263 -Lm1haW5sb29w 76264 -IFdJTkRPV1M= 76265 -LlJFUVVFU1Q= 76266 -IHJlaW50 76267 -IExpYnJl 76268 -Y2hlb24= 76269 -IGd1ZXJy 76270 -CU5kckZjU2hvcnQ= 76271 -LnNvZnRtYXg= 76272 -IEFzdXM= 76273 -LXNjb3Jl 76274 -IEpPSE4= 76275 -PlN0YXR1cw== 76276 -PkVkaXQ= 76277 -IENhbWU= 76278 -IEFzaGU= 76279 -X3VzaW5n 76280 -IExvbmU= 76281 -IGxlc2Vu 76282 -IHJldmVyc2luZw== 76283 -bmdyeA== 76284 -LnNpZ25hdHVyZQ== 76285 -LUFzc2Fk 76286 -L25hdGl2ZQ== 76287 -X3JhdGluZ3M= 76288 -IG55YQ== 76289 -IGFkaWRhcw== 76290 -KG9wdGlvbmFs 76291 -Il0o 76292 -IHJlY3VycmVuY2U= 76293 -IEJNUA== 76294 -z4w= 76295 -X2dw 76296 -Ij5c 76297 -X3dyb25n 76298 -eXBz 76299 -LlByb3h5 76300 -X1VEUA== 76301 -UXRDb3Jl 76302 -TGlua2VkSW4= 76303 -IGNhdmVybg== 76304 -IHNww6ljaWFs 76305 -X3dpcmU= 76306 -IG5hbm9w 76307 -LmJhbGw= 76308 -IHJlZHVjZXJz 76309 -IG1haWxlZA== 76310 -ZG9uZw== 76311 -IG9wcG9zZXM= 76312 -IEhhbnNvbg== 76313 -IFNhdHVyZGF5cw== 76314 -YWNvbW1lbnQ= 76315 -X01ldGFEYXRh 76316 -IEdhbGFjdGlj 76317 -KCIvIik= 76318 -IENsZWFuZXI= 76319 -X1RFUk0= 76320 -IGNsYXJv 76321 -Lk9VVA== 76322 -5a6h 76323 -IHNsaWs= 76324 -IGplZG5haw== 76325 -SGFuZGxlckNvbnRleHQ= 76326 -IGlycmFkaQ== 76327 -ICAgICAgICAgICAgICAgICAgICAgICAgIAo= 76328 -LnRpZ2h0 76329 -QnJlYWRjcnVtYg== 76330 -ZnJleQ== 76331 -IOqwneyytA== 76332 -bGJyYWNl 76333 -TEVHQUw= 76334 -LWd1bg== 76335 -IEJsb2dz 76336 -IFNoaXJsZXk= 76337 -IFB1bmU= 76338 -dXJzaW9ucw== 76339 -IHN1YnRyYWN0aW9u 76340 -ICoqKgo= 76341 -YXJtYWN5 76342 -IHNhbXQ= 76343 -PSIpLg== 76344 -IHBlcm1pc3NpYmxl 76345 -KHJk 76346 -IFdBVEVS 76347 -IHByb2Zlc2lvbmFs 76348 -IGhhbmRib29r 76349 -IG1vdXJuaW5n 76350 -YXJlZmE= 76351 -IGFzbg== 76352 -aXNleA== 76353 -IGNvbnRlbnU= 76354 -IFVOQw== 76355 -LmdldFByaWNl 76356 -IFB1bXBraW4= 76357 -LwoKCg== 76358 -IGNvc2luZQ== 76359 -IG5pZWQ= 76360 -IEJyYWtl 76361 -RGF0YVVSTA== 76362 -IERhdGFHcmlkVmlld0NlbGxTdHlsZQ== 76363 -IFJldHVybmVk 76364 -ZXdvb2Q= 76365 -aXF1w6k= 76366 -IGJsZWFr 76367 -IHdlYmhvb2s= 76368 -LlRoZXk= 76369 -YXJi 76370 -TEFOR0FETQ== 76371 -X29yZGVyZWQ= 76372 -IHByYW5r 76373 -Lk5ld1JlcXVlc3Q= 76374 -IGxpdGVyYWxz 76375 -J30+Cg== 76376 -c2VyaWFsaXplZA== 76377 -a3Rvcg== 76378 -KHJ4 76379 -IGdldFk= 76380 -CVN0cmluZ0J1ZmZlcg== 76381 -KHNsaWNl 76382 -cmJyYWNl 76383 -ZW1lbnRv 76384 -IGxhbmM= 76385 -RGVwbG95bWVudA== 76386 -IGNvbmNlbnRyYXRpbmc= 76387 -U2tldGNo 76388 -IGJyaWdodGx5 76389 -QmVnaW5uaW5n 76390 -IERhaA== 76391 -VGs= 76392 -SW5zZW5zaXRpdmU= 76393 -IHNhYmU= 76394 -KE1vZHVsZQ== 76395 -IGNlZGFy 76396 -X2NvbnRpbnVl 76397 -IHdpdGhPYmplY3Q= 76398 -IGNvbHVtbmE= 76399 -IENhbGRlcg== 76400 -INC/0L7QvA== 76401 -X3NvZnRj 76402 -c2hhbGVk 76403 -ZXJ0YXRpb24= 76404 -CSAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 76405 -OkAiIg== 76406 -IGZhw6dvbg== 76407 -dXN0dW0= 76408 -c3Rr 76409 -X0NSQw== 76410 -b2R6aQ== 76411 -IGFzY2VuZA== 76412 -Zmdhbmc= 76413 -IHByZWZhYg== 76414 -IGZpbmRldA== 76415 -Oicr 76416 -5Y2V5L2N 76417 -dW1ibGVkb3Jl 76418 -LmludmFsaWRhdGU= 76419 -IHRvaQ== 76420 -YW5nZXBpY2tlcg== 76421 -X0FJ 76422 -aGls 76423 -U2VhdA== 76424 -IHBpc3Rvbg== 76425 -Zmli 76426 -X2JsdWVwcmludA== 76427 -44K4 76428 -X1JlY29yZA== 76429 -cmV0cw== 76430 -RnJhbg== 76431 -IENhaXQ= 76432 -IHBlbGlj 76433 -IGRuYQ== 76434 -IHVwZGF0ZVRpbWU= 76435 -IC9eWw== 76436 -IHJhbGxpZWQ= 76437 -IEhpbWFs 76438 -U1NJ 76439 -X3BsYW5lcw== 76440 -IE91dHN0YW5kaW5n 76441 -QXBwbGljYXRpb25CdWlsZGVy 76442 -c3R1ZA== 76443 -X2xvY2F0b3I= 76444 -IGFib2xpdGlvbg== 76445 -ICgkKQ== 76446 -amVybmU= 76447 -IEFBQw== 76448 -L3dpbmRvd3M= 76449 -LUNhbA== 76450 -X1NFQ09ORFM= 76451 -ICcnfQo= 76452 -w6FueQ== 76453 -IHl1bW15 76454 -5omL5py65Y+3 76455 -IFZHQQ== 76456 -aWxhdGU= 76457 -IFN1cnZlaWxsYW5jZQ== 76458 -CUd0aw== 76459 -8J+Y 76460 -IHNoaW1tZXI= 76461 -YWx0ZXJuYXRl 76462 -Rm9yU2VndWU= 76463 -dWVzdHJh 76464 -LWNvdmVy 76465 -YXNs 76466 -IEluc2V0cw== 76467 -bGlqYWg= 76468 -OlM= 76469 -CWNhdGVnb3J5 76470 -IGZq 76471 -w61saWE= 76472 -IE1BRA== 76473 -QGpz 76474 -5p8= 76475 -IHBvb2xlZA== 76476 -IHRyZWF0aWVz 76477 -IEJpaw== 76478 -IEhhemVs 76479 -QWxsb2NhdGU= 76480 -IGFpcnBsYW5lcw== 76481 -IHNlcm1vbg== 76482 -IFBvc2l0aW9ucw== 76483 -IE1BSUw= 76484 -U3RvcHBpbmc= 76485 -YXZvcmVk 76486 -KFRlbXA= 76487 -IGNoZWF0cw== 76488 -LnVzZXJJRA== 76489 -IHB1dGE= 76490 -LXl5eXk= 76491 -VWlUaHJlYWQ= 76492 -IG9mc3RyZWFt 76493 -XFNlZWRlcg== 76494 -IENvdHRhZ2U= 76495 -IF4K 76496 -IEFMVEVS 76497 -IHF1YW50aWZ5 76498 -cmVpYnVuZw== 76499 -IG5lY2Vzc2l0aWVz 76500 -LkxvY2FsRGF0ZQ== 76501 -IOaXpQ== 76502 -cGljdHVyZXM= 76503 -IGNydWQ= 76504 -5pyo 76505 -IGRvd250dXJu 76506 -YWN0b3Jpbmc= 76507 -IERlcm0= 76508 -IGVzdHJ1Y3Q= 76509 -IE11c2lr 76510 -IG1seA== 76511 -Lm1ham9y 76512 -Lkh0dHBTZXNzaW9u 76513 -Pzw= 76514 -eWVhaA== 76515 -IG1vam8= 76516 -IFVuaXR5RWRpdG9y 76517 -IHJha2U= 76518 -X3R3ZWV0 76519 -IHJhZGlvQnV0dG9u 76520 -IERvbWluaW9u 76521 -YXNTdHJpbmc= 76522 -b3p5 76523 -IHZvZGth 76524 -b2dsb2I= 76525 -IEFsdW1uaQ== 76526 -YmFsYW5jZXM= 76527 -X21hbnVhbA== 76528 -LmxvYWR0eHQ= 76529 -X2ZyaWVuZHM= 76530 -IFhtbERvY3VtZW50 76531 -W2ZpcnN0 76532 -S2V5Q29kZQ== 76533 -IHBvZXRpYw== 76534 -bWluYQ== 76535 -IG9wY2lvbmVz 76536 -5omT 76537 -X3N1cHBsaWVy 76538 -LkZyb21SZXN1bHQ= 76539 -X2Rpc3RyaWN0 76540 -IEdhbGE= 76541 -LnF0 76542 -IGNvbnRyYWN0dWFs 76543 -YWNvbnM= 76544 -LWFuY2hvcg== 76545 -IHl1cA== 76546 -IHVuYW5zd2VyZWQ= 76547 -IG1heGxlbg== 76548 -RXJyTXNn 76549 -LXNu 76550 -IGh5cG5vdA== 76551 -X1dN 76552 -KCldWw== 76553 -IGRlc2VydmluZw== 76554 -b3dtZW50 76555 -KFJhbmRvbQ== 76556 -IHZldG9y 76557 -IElTVA== 76558 -0LDQvdC0 76559 -LWxhbmc= 76560 -IHNpaw== 76561 -Y3JlYXNpbmc= 76562 -IHBvcnRhbHM= 76563 -IEJ1bGxkb2dz 76564 -cHJvbW8= 76565 -IHByb3Zva2Vk 76566 -XX07Cg== 76567 -IEliaWQ= 76568 -ZXJnbGFzcw== 76569 -X1dJRkk= 76570 -YXBwcm9wcmk= 76571 -IHJlZGVzaWduZWQ= 76572 -IC8vLS0tLS0tLS0tLS0tLS0tLQ== 76573 -emlr 76574 -JG8= 76575 -dWx0b24= 76576 -IFJlbGF0aXZlcw== 76577 -IG1ldHJvcw== 76578 -IG1lbnRvcmluZw== 76579 -YXTEgw== 76580 -dXNobWFu 76581 -IGluaGVyaXRz 76582 -IFJ0 76583 -L3ByZWZlcmVuY2Vz 76584 -aW1lZA== 76585 -Sk9JTg== 76586 -KGludGVyZmFjZQ== 76587 -IGFkZXB0 76588 -IE9mZmVuc2l2ZQ== 76589 -IEFHUkU= 76590 -b25pYW4= 76591 -LnBhcnNlcnM= 76592 -IHBhc3NwaHJhc2U= 76593 -IHVuc2VyaWFsaXpl 76594 -VmlzaXRlZA== 76595 -IGdldFByb3BlcnR5 76596 -IG5vYw== 76597 -ZWRhZA== 76598 -ICMtfQoK 76599 -dmlkYQ== 76600 -c29sdmVy 76601 -IE1vcmFsZXM= 76602 -IGt2aW5uZQ== 76603 -IEFjY2lkZW50 76604 -IHZldXQ= 76605 -IG1pc2d1aWRlZA== 76606 -IFJldmVsYXRpb24= 76607 -IHJhcGlkZQ== 76608 -cHVuaw== 76609 -Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 76610 -T2JqZWN0SWQ= 76611 -YWJpbmV0 76612 -ZXh0cmFjb21tZW50 76613 -IGJ1bm55 76614 -IERlZmVycmVk 76615 -dXR0YQ== 76616 -dWFl 76617 -YnVzdGVycw== 76618 -IFNvaWw= 76619 -R1NU 76620 -LkN1cnJlbnRSb3c= 76621 -44GR 76622 -IGdyYXR1aXRz 76623 -IGNydWlzZXI= 76624 -15E= 76625 -IFRlbm4= 76626 -anNj 76627 -IO2VhA== 76628 -ZGlzcG9zZWQ= 76629 -QUJPVVQ= 76630 -fQ0NCg== 76631 -ZXhwaXJlZA== 76632 -IFhtbE5vZGU= 76633 -IFRhdHRvbw== 76634 -Vm90ZXM= 76635 -Rm9sZA== 76636 -RWxpemFiZXRo 76637 -X0ZJTEVOTw== 76638 -IGNvbmNv 76639 -IEdkaw== 76640 -b3BpZXM= 76641 -fX19 76642 -UVVPVEU= 76643 -LUlJ 76644 -c3BhbQ== 76645 -LWxp 76646 -IGNhcnRh 76647 -LmxheW91dHM= 76648 -IGJlc3Bva2U= 76649 -IGFtYXRldXJz 76650 -IGNvdWxldXI= 76651 -aXRhbWlu 76652 -IGlycmVzcGVjdGl2ZQ== 76653 -IGJsYWNrQ29sb3I= 76654 -LnlhaG9v 76655 -IHdlYXJ5 76656 -IHN3ZWV0cw== 76657 -PyI7Cg== 76658 -PVwiJQ== 76659 -X3dvcmtzcGFjZQ== 76660 -IERpYW1ldGVy 76661 -IGFtZA== 76662 -IE5ldWU= 76663 -IGRiTmFtZQ== 76664 -SmVyZW15 76665 -bG9nZmlsZQ== 76666 -YXRyaWI= 76667 -IEh0dHBTZXNzaW9u 76668 -CUNyZWF0ZQ== 76669 -aWRkeQ== 76670 -LlBBUkFN 76671 -IGZpYW4= 76672 -IHN6Y3o= 76673 -IHFyZWFs 76674 -X0VTQ0FQRQ== 76675 -dXNhaGFhbg== 76676 -LmRpZ2VzdA== 76677 -IGdldFBhcmVudA== 76678 -LkRyb3BEb3duTGlzdA== 76679 -IHRow6k= 76680 -IG1vbnN0cm91cw== 76681 -IGJlcmhhc2ls 76682 -IiIiDQoNCg== 76683 -U3VwcG9ydGVkQ29udGVudA== 76684 -IEdhdGhlcmluZw== 76685 -aW5jeQ== 76686 -LktleUNvZGU= 76687 -IGZldHVz 76688 -LmNlbnQ= 76689 -IGJlc29uZGVycw== 76690 -bmlsYWk= 76691 -TFRSQg== 76692 -IGhpbmdl 76693 -UFJPUA== 76694 -LmZvdW5kYXRpb24= 76695 -bnVtZXI= 76696 -LXJhbmtlZA== 76697 -6I0= 76698 -IHBhaW5mdWxseQ== 76699 -ICg7Oyk= 76700 -Zm9ybWU= 76701 -TGFkeQ== 76702 -L2FwcGxl 76703 -IENvbnN0aXQ= 76704 -IHN0b2NraW5ncw== 76705 -5rS7 76706 -IG1lbnRvcnM= 76707 -PkNyZWF0ZQ== 76708 -IEludGVybmFsRW51bWVyYXRvcg== 76709 -IHRlbGV2aXNlZA== 76710 -VG9rZW5UeXBl 76711 -IGJyaWI= 76712 -Y3JlYXRlVmlldw== 76713 -L0RURA== 76714 -R2l0SHVi 76715 -KGJpZw== 76716 -IG3DoXhpbW8= 76717 -5b6u6L2v6ZuF6buR 76718 -LmNm 76719 -IMKgIMKgIMKgIMKg 76720 -PHR5cGVvZg== 76721 -IHByb2dyZXNzaW5n 76722 -LnNldFdpZHRo 76723 -KHR2 76724 -IHVuZmFpcmx5 76725 -IEFuaXRh 76726 -YXJ5YXdhbg== 76727 -RGFs 76728 -VVJZ 76729 -b2dlbmVpdHk= 76730 -ZWZh 76731 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 76732 -IGRlamE= 76733 -T1NF 76734 -cmFpbA== 76735 -cm9vZg== 76736 -X3F1b3Rlcw== 76737 -PGo= 76738 -44Ko 76739 -KHNldHRpbmc= 76740 -bGV2ZWxuYW1l 76741 -X2hhbmRsaW5n 76742 -w6lyYQ== 76743 -JGo= 76744 -IGRhcmxpbmc= 76745 -LlBhdGhWYXJpYWJsZQ== 76746 -W3NvdXJjZQ== 76747 -TWV0aG9kTmFtZQ== 76748 -IE91dGxldA== 76749 -5pKt 76750 -IENvY29h 76751 -VWJ1bnR1 76752 -IG1vb2ll 76753 -IGZsb3JpZGE= 76754 -IHJldGhpbms= 76755 -IGdldFg= 76756 -Z2V0RWxlbWVudA== 76757 -IHJhZGl4 76758 -IEdhbWVy 76759 -ZGVhbGxvYw== 76760 -bGVmdEpvaW4= 76761 -X1NZTg== 76762 -R3JpZExheW91dA== 76763 -Imdv 76764 -KGVhY2g= 76765 -CXNjZW5l 76766 -IFB5RXJy 76767 -SG93YXJk 76768 -LlNpZ25hbA== 76769 -IFRFTQ== 76770 -IOen 76771 -VkVOVE9SWQ== 76772 -IHNpbXVs 76773 -IDw8LQ== 76774 -IHR1cmJpbmVz 76775 -IHN1cnRvdXQ= 76776 -YWx0bw== 76777 -IHVuYXJ5 76778 -YA0K 76779 -IFNjcmk= 76780 -IE1vbms= 76781 -IHVuZm9sZGVk 76782 -Q29tcG9zaXRpb24= 76783 -UFBFUg== 76784 -IHNpZGluZw== 76785 -Jyx7Jw== 76786 -IHRyZWZm 76787 -X1VOSUNPREU= 76788 -IGRlcmVjaG8= 76789 -IHBvbGFyaXR5 76790 -IG9yYw== 76791 -PERvY3VtZW50 76792 -KHRvZGF5 76793 -LikKCgoK 76794 -IHNlZW1pbmc= 76795 -XFY= 76796 -PklE 76797 -IGZpYm9uYWNjaQ== 76798 -KG1hdGVyaWFs 76799 -RkxBU0g= 76800 -ZGlyZWN0b3JpZXM= 76801 -ZXN0ZXJz 76802 -VEVDVElPTg== 76803 -d3JhcHBlZA== 76804 -LXNlbGVjdGlvbg== 76805 -LXJlbGF0aXZl 76806 -KGNocg== 76807 -IHBvcnRmb2xpb3M= 76808 -IHNob3dEaWFsb2c= 76809 -aW5nbGV0b24= 76810 -IFRJQ0s= 76811 -IEludmVzdG9y 76812 -IGJyYXY= 76813 -IFNWTg== 76814 -IGhhdGVmdWw= 76815 -cmlwcw== 76816 -ZXhwaXJ5 76817 -X2NvaW4= 76818 -PgoKCgoK 76819 -IG1hcmdpbmFsaXplZA== 76820 -IGV4Y2VlZGluZ2x5 76821 -bmF2YmFyU3VwcG9ydGVkQ29udGVudA== 76822 -KGV4dGVuc2lvbg== 76823 -IGFkdmFudGFnZW91cw== 76824 -Lk1pY3Jvc29mdA== 76825 -IGVuc3VpdGU= 76826 -LXZpb2w= 76827 -X2R1ZQ== 76828 -S0g= 76829 -IFJvbWFudGlj 76830 -aW5hbmQ= 76831 -ZWNp 76832 -cmVwb3J0ZWQ= 76833 -IENvcnB1cw== 76834 -IHNwYW5raW5n 76835 -IENyb3NieQ== 76836 -LkZvdW5kYXRpb24= 76837 -XF8= 76838 -IGFubm9uY2Vz 76839 -QXR0YWNobWVudHM= 76840 -4Liy4Lij 76841 -IFdheA== 76842 -77yB77yBCgo= 76843 -IHNhaWxlZA== 76844 -LkV1bGVy 76845 -CXNjcm9sbA== 76846 -IHBlYXNhbnRz 76847 -IEJ1aWxkZXJz 76848 -LkdlbmVyYWw= 76849 -QVJFQQ== 76850 -IG1lc3Npbmc= 76851 -dmVybg== 76852 -IGRpYXBlcg== 76853 -IG9jY3VwaWVz 76854 -CWxvZ2lu 76855 -LkxPQw== 76856 -aWdhbnM= 76857 -77yB4oCd 76858 -X2Zvb3Q= 76859 -X3RhdQ== 76860 -LXBhY2thZ2Vz 76861 -cmVjdXI= 76862 -QWx0ZXJuYXRpdmU= 76863 -77yB44CN 76864 -YXJvbw== 76865 -IHRydXN0ZWU= 76866 -LDpd 76867 -5pa55byP 76868 -Pz4+ 76869 -Lk1pbnV0ZQ== 76870 -IGFsY2Fu 76871 -IENvbmNlcHRz 76872 -Y2hpbGROb2Rlcw== 76873 -Q291cnQ= 76874 -IGNlbGxhcg== 76875 -bGVr 76876 -YWtpcw== 76877 -QnViYmxl 76878 -IG9iamVjdGVk 76879 -IO+7vw== 76880 -Ol06Cg== 76881 -LnBhcnNlRmxvYXQ= 76882 -IHNwYXJrcw== 76883 -LWZpbmQ= 76884 -dmFyaWF0aW9u 76885 -SGFjaw== 76886 -RmFucw== 76887 -X3BhcnNlZA== 76888 -RW50aXR5VHlwZQ== 76889 -YXVjZQ== 76890 -X3RyZWVz 76891 -IEVnZ3M= 76892 -VUlCYXJCdXR0b25JdGVt 76893 -X3RheG9ub215 76894 -IFNIT1A= 76895 -VHdlbnR5 76896 -X2NoZWNrcw== 76897 -IExY 76898 -dXRzY2hlaW4= 76899 -KHBsYXRmb3Jt 76900 -IGF1dG9wc3k= 76901 -UmVxdWlyZW1lbnQ= 76902 -IFJFQ1Q= 76903 -dG9Db250YWlu 76904 -JywnJQ== 76905 -L2VkaXRvcg== 76906 -IHFi 76907 -IEVFRw== 76908 -aHRh 76909 -X1RJTEU= 76910 -LXN1bQ== 76911 -IEFsYnVxdWVycXVl 76912 -IHNob3J0Y29kZQ== 76913 -IHNpbnVz 76914 -IGRlc2tz 76915 -IHBvb3A= 76916 -Lm9wZW5zb3VyY2U= 76917 -IENvbGxhcHNl 76918 -LmRlcg== 76919 -IGhhd2s= 76920 -IFZhbmd1YXJk 76921 -IE1hcnJpb3R0 76922 -X1RhcmdldA== 76923 -IEJhbmFuYQ== 76924 -X2F0dGVudGlvbg== 76925 -IEFyaWVs 76926 -X3Rlbg== 76927 -IGJha2Vy 76928 -4oCUaGU= 76929 -xIXFvA== 76930 -dmVsb3BtZW50 76931 -RWxm 76932 -X2djaGFuZGxl 76933 -UmVwdWJsaWNhbnM= 76934 -IGl0ZW1CdWlsZGVy 76935 -V29u 76936 -X2FjY3Vt 76937 -IG5ld1Bhc3N3b3Jk 76938 -IGRldm9pZA== 76939 -IE1hcmt1cw== 76940 -ZGFlbW9u 76941 -Lkh0dHBDb250ZXh0 76942 -S3Jpc3Q= 76943 -IGFhbGJvcmc= 76944 -X3RyaWFscw== 76945 -KGFzc2VydA== 76946 -44Gj44Gm 76947 -YmVsdA== 76948 -IG1pbGRseQ== 76949 -ZXJ2b2ly 76950 -IGRlc2NlbmRhbnQ= 76951 -IEdpb3Zhbm5p 76952 -IGRlY2x0eXBl 76953 -LVNoaXJ0 76954 -IGFwcm8= 76955 -QXBwbGllZA== 76956 -LmdldFBhcmFt 76957 -aG9m 76958 -dXJhcg== 76959 -IE9CUw== 76960 -X3Nlcg== 76961 -KHNlY3JldA== 76962 -W2xheWVy 76963 -IHVzZWZ1bG5lc3M= 76964 -IEtvdQ== 76965 -X3N1Ym1pc3Npb24= 76966 -X0hPUklaT05UQUw= 76967 -LHRtcA== 76968 -Ly4K 76969 -IGxlc3Nlbg== 76970 -X3dj 76971 -X0ZJTkFM 76972 -0L3QvtC/ 76973 -LnRvZG9z 76974 -LlhQYXRo 76975 -IElEYXRh 76976 -IGRvb3JzdGVw 76977 -IGNvbXBvc2luZw== 76978 -IGh1dA== 76979 -IFZMQU4= 76980 -IG91dGY= 76981 -6K+l 76982 -KGJldGE= 76983 -KioqLwoK 76984 -IEluZG8= 76985 -IGtsYQ== 76986 -X2NvbmZpZ3VyZQ== 76987 -Lk1hcms= 76988 -b3NlY29uZHM= 76989 -KFZlcnRleA== 76990 -b3JnYW5pc21z 76991 -IGZmbQ== 76992 -IGRlbW9saXNoZWQ= 76993 -ICItLS0= 76994 -bGVzaQ== 76995 -IFNpZG5leQ== 76996 -LmdldEluZGV4 76997 -Lk1vbmFk 76998 -U2VsZWN0ZWRJdGVt 76999 -IE5hdlBhcmFtcw== 77000 -YXpvbGU= 77001 -QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVo= 77002 -X3NlbnRlbmNlcw== 77003 -IGluY2xpbmF0aW9u 77004 -IEZhdGhlcnM= 77005 -YWNjb3VudElk 77006 -aGFyaQ== 77007 -KT4K 77008 -L3Jhdw== 77009 -ICcnKTsKCg== 77010 -K2w= 77011 -KGNk 77012 -IHVuemlw 77013 -IGdsYW1vcm91cw== 77014 -IyIs 77015 -IG5hdw== 77016 -IG1pbmli 77017 -IEJyYW4= 77018 -TmFjaA== 77019 -X3R3ZWV0cw== 77020 -IENDUA== 77021 -JSI+PA== 77022 -IFN0ZXBoZW5z 77023 -bWFzxLE= 77024 -J2Vz 77025 -IHJlcGFy 77026 -X2RvY3VtZW50cw== 77027 -LmNsb3NlZA== 77028 -LXJpbmc= 77029 -L2NhdGVnb3JpZXM= 77030 -IERlZXBDb3B5 77031 -U1VQ 77032 -Lm5ld2F4aXM= 77033 -IGdkeQ== 77034 -aG9l 77035 -IFJlZWY= 77036 -IHBvbGl0aWM= 77037 -IFJlcXVpcmVtZW50 77038 -IHNoZWRz 77039 -c2VhbGVk 77040 -IHBhdGhvbG9neQ== 77041 -Ii8+PA== 77042 -bW9kbw== 77043 -IHN0ZW1taW5n 77044 -IHRhYm9v 77045 -IFNhdmlvcg== 77046 -IH0NCg0KDQoNCg== 77047 -LmN2 77048 -IGpvdWV1cg== 77049 -IENvcm53YWxs 77050 -IFJlY2VwdGlvbg== 77051 -IGlsbHVtaW5hdGlvbg== 77052 -IGdkYg== 77053 -VkVD 77054 -b2R1 77055 -Q29udGVudEFsaWdubWVudA== 77056 -c3RhbnRpYWw= 77057 -YmFzZWxpbmU= 77058 -X2J1c3k= 77059 -LwoKCgo= 77060 -IHBsYXllcklk 77061 -5qM= 77062 -X3BldA== 77063 -IE1pcmFjbGU= 77064 -dXJlbnQ= 77065 -IE1lcmxpbg== 77066 -dWJlbg== 77067 -IHNldENvbG9y 77068 -IGRhcmtlc3Q= 77069 -c3Rlcnk= 77070 -IGNhcmlj 77071 -IHJldGFyZA== 77072 -IEhvdXNlaG9sZA== 77073 -IGphbA== 77074 -IHlw 77075 -IiwiIik7Cg== 77076 -IEFjZXI= 77077 -W1c= 77078 -b2xraWVu 77079 -YXlv 77080 -UHJpdmF0ZUtleQ== 77081 -IFNUQVRT 77082 -INC90YPQtg== 77083 -OicuJA== 77084 -IHRoYW5rZnVsbHk= 77085 -IGRpc3RydXN0 77086 -Z2V0RGVmYXVsdA== 77087 -L2ZhY2Vib29r 77088 -IENvbnJhZA== 77089 -IHV0aWxpemFuZG8= 77090 -IEthZw== 77091 -L25hbWU= 77092 -IGJhbWI= 77093 -LkZyb21TZWNvbmRz 77094 -IG11dGls 77095 -IExhZ29z 77096 -IEJsZXNzZWQ= 77097 -aWxsZWdhbA== 77098 -aWVp 77099 -X1RQ 77100 -IG1hdGxhYg== 77101 -IGN5Y2xpYw== 77102 -IHdpdGhoZWxk 77103 -IGhvcnJpYmx5 77104 -LWhvdXJz 77105 -LUhlYWRlcnM= 77106 -IG92ZXJsYXBz 77107 -IGN1YXRybw== 77108 -IGVxdWl0YWJsZQ== 77109 -IGNvbG9ybWFw 77110 -IHNoaW4= 77111 -IFN1aXRlcw== 77112 -X2x1YQ== 77113 -KHZv 77114 -X1JFU1VMVFM= 77115 -IFZpa3Rvcg== 77116 -RG93bmxvYWRpbmc= 77117 -bm9jaA== 77118 -TW9vbg== 77119 -IGRlY2lkZWRseQ== 77120 -44GU44GW 77121 -X1JQQw== 77122 -SW50ZXJwb2xhdG9y 77123 -IHZhbnM= 77124 -e1Q= 77125 -X3NwYXdu 77126 -IEV4eG9u 77127 -X0NhbGw= 77128 -IENsYXNzcm9vbQ== 77129 -IHNlcm90b25pbg== 77130 -IERpcGxvbWE= 77131 -YmVkdGxz 77132 -IFByb3RvdHlwZQ== 77133 -LmV4ZWN1dGlvbg== 77134 -IGRhdGluZ3NpZGU= 77135 -IEdva3U= 77136 -X3Jvb21z 77137 -4oCZYW0= 77138 -Z3JhZg== 77139 -YWNlb3Vz 77140 -IGFjY29tbW9kYXRpbmc= 77141 -fSwn 77142 -LmRpbWVuc2lvbg== 77143 -ZXJyb3JNc2c= 77144 -CW1lc2g= 77145 -RmlsbGVk 77146 -LnByZWZlcmVuY2U= 77147 -IHNtYXJ0eQ== 77148 -X2NvdXBvbg== 77149 -IMO2dmVy 77150 -IGNvbmNlaXZl 77151 -b2Rvbg== 77152 -ZGljZQ== 77153 -VG9EYXRl 77154 -YWRhbWVudGU= 77155 -LW1hc2s= 77156 -IGVzY2FsYXRpbmc= 77157 -4oCmKQoK 77158 -SW5SYW5nZQ== 77159 -X0Vt 77160 -IHV0aWxpemE= 77161 -IGxldnk= 77162 -PCFb 77163 -IEplbm5lcg== 77164 -IFJFU09VUkNF 77165 -X1NUQVJURUQ= 77166 -IHZvbGxleWJhbGw= 77167 -IG1nYQ== 77168 -IFJvc3Np 77169 -Q2hhbmNl 77170 -IEVuZGVk 77171 -LnVudGls 77172 -IGtub2Nrb3V0 77173 -X2V4ZQ== 77174 -IFByZXNjcmlwdGlvbg== 77175 -IENPVU5UWQ== 77176 -Lmhy 77177 -aWVyc2hpcA== 77178 -RVJWRQ== 77179 -6ak= 77180 -44Gn44Gv 77181 -IHBlcsOt 77182 -IGltZ1VybA== 77183 -ZWN4 77184 -IFd5bg== 77185 -CVJldHVybnM= 77186 -X2V5ZQ== 77187 -IEFnaW5n 77188 -cXVldWVz 77189 -IOWIneWni+WMlg== 77190 -LlNlcmlhbGl6ZWROYW1l 77191 -LmhvdXJz 77192 -IGlzZQ== 77193 -LkFjdG9y 77194 -5p2h5Lu2 77195 -YXBwbA== 77196 -VGFu 77197 -L2NhdGFsb2c= 77198 -L1Jlc291cmNlcw== 77199 -ZWxhbg== 77200 -KCd7ew== 77201 -IGluc24= 77202 -IG5vZGVOYW1l 77203 -IGNvb2tib29r 77204 -JywnPScsJw== 77205 -Uk9NRQ== 77206 -LnRlbXBsYXRlcw== 77207 -ZWN1cmU= 77208 -LWtleXM= 77209 -IGdsVW5pZm9ybQ== 77210 -IGdlw6c= 77211 -IFJlY292ZXI= 77212 -SURY 77213 -IEtyaXN0ZW4= 77214 -IHBvbnRvcw== 77215 -YD0nJA== 77216 -YXJnZW50 77217 -IGFycmFuZ2luZw== 77218 -6KiY5LqL 77219 -IGVybGU= 77220 -ZW5lZG9y 77221 -KCkpKTs= 77222 -w6Zra2U= 77223 -IEdpbGxlcw== 77224 -In0+Cg== 77225 -Lm1vdmllcw== 77226 -LXNlbGVjdG9y 77227 -LmxlYXJu 77228 -IHBvdGVuY3k= 77229 -IGZpbm8= 77230 -CWJn 77231 -IGxlaGV0 77232 -IGzDtg== 77233 -IGVybQ== 77234 -IGFzYmVzdG9z 77235 -IGRlc3Rl 77236 -IGJsb2NrYWRl 77237 -IFJPVU5E 77238 -IGxuYW1l 77239 -IFNlcGFyYXRl 77240 -w6RuZ2U= 77241 -IGZ1eno= 77242 -CVVO 77243 -X25vbWU= 77244 -X2xpbmtlZA== 77245 -IFNoYXJlUG9pbnQ= 77246 -aGF1c2Vu 77247 -IGxvYWY= 77248 -LWVjb25vbWlj 77249 -IGRpZEZpbmlzaA== 77250 -eWVu 77251 -IGJsYXN0aW5n 77252 -IFdlaXJk 77253 -SUNMRVM= 77254 -IEdGWA== 77255 -IHN1ZmZpY2U= 77256 -ZWJpbg== 77257 -IGFwcHJvdmluZw== 77258 -IFJleWVz 77259 -IFJUQUw= 77260 -aWdsaQ== 77261 -X3Rvaw== 77262 -b3Jkb3Zh 77263 -Q2FybA== 77264 -IFBsYXlz 77265 -bG9zc2Vu 77266 -cGFpcmVk 77267 -QUdNQQ== 77268 -d2nEhXo= 77269 -bGlua2VkaW4= 77270 -IGVnYWw= 77271 -KHByZWRpY2F0ZQ== 77272 -IFJFU1BPTlNF 77273 -IG1pblg= 77274 -IGNoYW5jZWxsb3I= 77275 -IFJFQ0VJVkVS 77276 -IGFzY2VydGFpbg== 77277 -IHplcg== 77278 -IFdvcmtzaGVldHM= 77279 -Tks= 77280 -IHZvd2Vs 77281 -dmFudA== 77282 -VVBT 77283 -4oCcLg== 77284 -IEhheWRlbg== 77285 -IFNwYXJ0YW4= 77286 -cmlnaHRz 77287 -LmdldElu 77288 -IGlubGFuZA== 77289 -IE5pbGU= 77290 -IFRyYW5zbGF0b3I= 77291 -IHJlY3RhbmdsZXM= 77292 -QnV0dG9uVHlwZQ== 77293 -IFNvbGlj 77294 -IHJhZ2F6emE= 77295 -L3RhZw== 77296 -IGlycmVzaXN0 77297 -I0VuZA== 77298 -KioqKioqKg0K 77299 -IHJlc3RyYWluZWQ= 77300 -IGNoaXJvcHI= 77301 -L1No 77302 -LWZsaWdodA== 77303 -Y29udmVydGVk 77304 -IHNraXJ0cw== 77305 -KGNoYXJz 77306 -JHZpZXc= 77307 -IGlucHV0RmlsZQ== 77308 -Z21haWw= 77309 -X0RJQUc= 77310 -IG51bWVs 77311 -IEdpbmE= 77312 -ZWxsdW5nZW4= 77313 -IHRheGE= 77314 -IGRyaXBwaW5n 77315 -PSIiLz4K 77316 -IGJvcmRlcmVk 77317 -IHRvdWdobmVzcw== 77318 -bGVuZXNz 77319 -IEJpZWJlcg== 77320 -X1dBS0U= 77321 -KGV0 77322 -IHNhbnTDqQ== 77323 -IFRFWA== 77324 -X0RJU0NPTk5FQ1Q= 77325 -IHBpZW4= 77326 -IEZvbnRTdHlsZQ== 77327 -X1VM 77328 -LXRvdGFs 77329 -d29sZg== 77330 -IE1hcml0aW1l 77331 -IE9QVElPTkFM 77332 -LXJlc3Q= 77333 -IG1lbWJ1YXQ= 77334 -IEJTT04= 77335 -X3NpbWlsYXJpdHk= 77336 -Lm92ZXJsYXk= 77337 -IHBhbGF0ZQ== 77338 -IEJyaWRnZXM= 77339 -QW5kUGFzc3dvcmQ= 77340 -IENoYXZleg== 77341 -aGV0dG8= 77342 -Lm9mZnNldEhlaWdodA== 77343 -IHVuZGVzaXJhYmxl 77344 -IGFwbGlr 77345 -IC8+XA== 77346 -LHRv 77347 -IHJlbW92ZXI= 77348 -IE1vZGVsaW5n 77349 -IHB1cmNoYXNlcg== 77350 -IENob29zaW5n 77351 -b3BsZWZ0 77352 -IG11dGFibGVMaXN0T2Y= 77353 -IFNpc3RlbWE= 77354 -IElQTA== 77355 -aWNrZXJWaWV3 77356 -SGFzQ29sdW1uVHlwZQ== 77357 -IHNvYmll 77358 -dWJlcm4= 77359 -IGFsdW5v 77360 -IGltYWdpbmF0aXZl 77361 -IEludGVyZXN0ZWQ= 77362 -KCl9PC8= 77363 -IGRpdmVyc2lvbg== 77364 -X3Rvb2x0aXA= 77365 -LlNhbXBsZQ== 77366 -IEZ1dHVyZXM= 77367 -Y29udGVuaWRv 77368 -IEVJTlZBTA== 77369 -KGVuY29kZWQ= 77370 -IFNoYXVu 77371 -CXBheWxvYWQ= 77372 -ZGVr 77373 -PllvdXI= 77374 -SXNv 77375 -VHJhdmVyc2Fs 77376 -aWNpZQ== 77377 -LmNyb3A= 77378 -IEpC 77379 -SU5HRVI= 77380 -IGV4ZW1wbGFyeQ== 77381 -X3JlbHU= 77382 -YW5uaXM= 77383 -0LXQt9GD0LvRjNGC0LDRgg== 77384 -Y2x1YnM= 77385 -4oaR 77386 -IHNjcmFtYmxl 77387 -IFVuYmxvY2s= 77388 -IGRvcnM= 77389 -IHNoYWNr 77390 -IG1pbmltaXppbmc= 77391 -IFBhc3Npbmc= 77392 -YWRkRWxlbWVudA== 77393 -4bud 77394 -IHJvb2Zz 77395 -IGpjbGFzcw== 77396 -Y29yZG92YQ== 77397 -UG9zWQ== 77398 -KENhbnZhcw== 77399 -KGZpbg== 77400 -LWxvc3M= 77401 -LmJ0bkNsb3Nl 77402 -ZG9jdW1lbnRhdGlvbg== 77403 -IFJK 77404 -YW1vbmc= 77405 -TW9z 77406 -bGluZ2Vu 77407 -IEFndQ== 77408 -b2x5bm9taWFs 77409 -XTw9 77410 -IGRpZmZpY2lsZQ== 77411 -IFdpbm5lcnM= 77412 -5bGV 77413 -U3RyYQ== 77414 -IGNvbmdyZWc= 77415 -IEVuYWJsZXM= 77416 -IFN5bXB0b21z 77417 -X3Nn 77418 -IFJpZGluZw== 77419 -X2hlYWRz 77420 -IENvc21ldGlj 77421 -w650 77422 -LlNpbmdsZXRvbg== 77423 -IE5pY2FyYWd1YQ== 77424 -IAoKCgoK 77425 -IG3DrQ== 77426 -J30sDQo= 77427 -IEJvc25pYQ== 77428 -Plg= 77429 -Ly8qWw== 77430 -IHBpbGVk 77431 -Y2FzdGluZw== 77432 -IGdyw6JjZQ== 77433 -IEhlbHNpbmtp 77434 -R3Jv 77435 -I2Fm 77436 -7Iud 77437 -IHNvdWhh 77438 -IEluZGll 77439 -X25lYXI= 77440 -IGltbW9iaWw= 77441 -LkV4Y2Vs 77442 -IHJhZGlhbnQ= 77443 -X01C 77444 -IEtldG8= 77445 -dmVudGFyaW8= 77446 -X2FnZW50cw== 77447 -VGFibGVWaWV3Q2VsbA== 77448 -IFRoZW9kb3Jl 77449 -PT09PT09PT0K 77450 -LGxpc3Q= 77451 -KHNp 77452 -aWNpcGF0aW9u 77453 -QVJUSA== 77454 -c2V0RGlzcGxheQ== 77455 -LkZ1dHVyZQ== 77456 -IFNUQU5EQVJE 77457 -IE9JRA== 77458 -IGZyb3duZWQ= 77459 -IE1hcmlseW4= 77460 -b2xhcmU= 77461 -UHU= 77462 -IHPDqWN1cml0w6k= 77463 -UmVkdXg= 77464 -U0NP 77465 -CQkJCQkgICAgICA= 77466 -cml2 77467 -cGVydA== 77468 -IHNvZnRtYXg= 77469 -IHNlbmF0ZQ== 77470 -PWVtYWls 77471 -IGVzdGltYXRpbmc= 77472 -CXRk 77473 -RnVjaw== 77474 -IFdhdGVybG9v 77475 -IG1leGljbw== 77476 -TmV3dG9u 77477 -U2Fi 77478 -LOKApgoK 77479 -IGNlbGVzdGlhbA== 77480 -IFFOYW1l 77481 -IGdldEFwcA== 77482 -Tmll 77483 -X3BjaQ== 77484 -IFFQb2ludEY= 77485 -X2xpc3Rh 77486 -Lk5WYXJDaGFy 77487 -IENvYw== 77488 -S2Fy 77489 -IGJ1c3RlZA== 77490 -aXphdGlvbmFs 77491 -b3VyZA== 77492 -X2Nvbm5lY3Rvcg== 77493 -IFNla3M= 77494 -0L3Rg9GO 77495 -0II= 77496 -L0xpc3Q= 77497 -L2lj 77498 -XEZyYW1ld29ya0J1bmRsZQ== 77499 -dXh0 77500 -IGhlYWRwaG9uZQ== 77501 -RVhURVJO 77502 -LXJlc2V0 77503 -IEdlaWxl 77504 -IHRyaWFuZw== 77505 -IEFOTg== 77506 -IHTDrQ== 77507 -IFNQQQ== 77508 -IE1hY2Vkb25pYQ== 77509 -IGNyaWFy 77510 -IGNsaW1icw== 77511 -IFNPTg== 77512 -IENyaXRpY3M= 77513 -IGTDsw== 77514 -X1NQTElU 77515 -IEJvdW5kYXJ5 77516 -X0luc2VydA== 77517 -Q29sZA== 77518 -LmNyZWF0ZUNlbGw= 77519 -X3NhaWRh 77520 -LkJMVUU= 77521 -QmlnRGVjaW1hbA== 77522 -KEJ5dGVz 77523 -CVN0YXRl 77524 -LS0tQA== 77525 -Vmlld1NldA== 77526 -YWthaA== 77527 -X1JlcG9ydA== 77528 -LWNyb3Nz 77529 -LmdldEN1cnJlbnRVc2Vy 77530 -dWx0dXI= 77531 -KEZs 77532 -IEltYWc= 77533 -Q1Rlc3Q= 77534 -7IOd 77535 -IHN0YWc= 77536 -IG96b25l 77537 -IGvDqQ== 77538 -cmVwYWly 77539 -KSIpOw0K 77540 -IHZvd3M= 77541 -LkFsdGVy 77542 -IEFsZ2VicmE= 77543 -IEFoZWFk 77544 -Z2V0dA== 77545 -LklubmVyVGV4dA== 77546 -IFpoZW5n 77547 -LnJlYWxwYXRo 77548 -IGRpc3RyYWN0aW9ucw== 77549 -LGV2ZW50 77550 -IElOQ0xVREVE 77551 -Lk1hdGNoZXI= 77552 -LnNwb3RpZnk= 77553 -IGNvbnNpZA== 77554 -Lk1hcHBpbmc= 77555 -IEZvYW0= 77556 -IE5BTkQ= 77557 -IGRldmFudA== 77558 -XSIpXQo= 77559 -TGF1cmE= 77560 -IHNhY2tlZA== 77561 -X3hvcg== 77562 -IHJlYWxtcw== 77563 -IFJvYm90aWNz 77564 -LlNlZWs= 77565 -LiQk 77566 -IFJpYmJvbg== 77567 -CUhSRVNVTFQ= 77568 -IENyZXNjZW50 77569 -RUZS 77570 -IE1lZGl0YXRpb24= 77571 -LmdldFo= 77572 -INC60L7QvNC/ 77573 -anNvbndlYnRva2Vu 77574 -Oj8= 77575 -ZmFm 77576 -VklPVVM= 77577 -YWxsYWg= 77578 -IHBpcGluZw== 77579 -IG1vZGVybmU= 77580 -cG9zdGFsY29kZQ== 77581 -IGxldmVyYWdpbmc= 77582 -IENISVA= 77583 -cGNt 77584 -bWFp 77585 -IGlQ 77586 -QUtFUg== 77587 -ZGF0YUdyaWRWaWV3 77588 -X2RlcHM= 77589 -LWRyaXZlcg== 77590 -TGll 77591 -ZGlzY2FyZA== 77592 -eW50YXhFeGNlcHRpb24= 77593 -IGVjdA== 77594 -IEV4aGliaXQ= 77595 -ICgqKg== 77596 -IOuU 77597 -Q2hhbmdlRXZlbnQ= 77598 -IHN1cGVybWFya2V0cw== 77599 -IHNobQ== 77600 -cHJvZml0cw== 77601 -cGlsbGFy 77602 -cmFpc29u 77603 -V2F0 77604 -IHBoYXJtYWNpZXM= 77605 -IG5ydw== 77606 -Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0= 77607 -CXdvcmxk 77608 -U3RyZWFtaW5n 77609 -RGlhbW9uZA== 77610 -IEVudW1lcmF0b3I= 77611 -IGVucXVpcnk= 77612 -LmxhbWJkYQ== 77613 -YmVr 77614 -Uk9UTw== 77615 -IFBkZlA= 77616 -IGhpc3Rv 77617 -IGdldENoaWxk 77618 -L3N0cmV0Y2hy 77619 -IEFNQVo= 77620 -IEFyZ3VtZW50T3V0T2ZSYW5nZUV4Y2VwdGlvbg== 77621 -InVzZXI= 77622 -IHNhbml0YXRpb24= 77623 -IENsb3RoZXM= 77624 -Lm51bXB5 77625 -ZmVj 77626 -ICMjIyMjIyMjIyMjIw== 77627 -0LXQudGB0YLQsg== 77628 -X2xw 77629 -IGF6dXJl 77630 -WFBhdGg= 77631 -VmVudA== 77632 -TGFib3I= 77633 -IG1pc3Rha2VubHk= 77634 -IGNvbmR1aXQ= 77635 -IEZhaXJmYXg= 77636 -Z2V0U3RhdHVzQ29kZQ== 77637 -IE1veQ== 77638 -TGlzdEFkYXB0ZXI= 77639 -ICg/KQ== 77640 -R2VuZXJhbGx5 77641 -LmlzQ29ubmVjdGVk 77642 -dmlkbw== 77643 -TW91c2VCdXR0b24= 77644 -R2VuZXJhdGlvblN0cmF0ZWd5 77645 -X2Rlcml2 77646 -IGxla2tlcg== 77647 -TWVhc3VyZW1lbnQ= 77648 -X0NPT0tJRQ== 77649 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 77650 -IGNvbXBldGl0aXZlbmVzcw== 77651 -IGdhbWxl 77652 -IHJldHJvc3BlY3Q= 77653 -IEVkdWFyZG8= 77654 -IERhdGFTZXJ2aWNl 77655 -IGVzY29ydGVk 77656 -IFF0eQ== 77657 -SG9saWRheQ== 77658 -CXJhdw== 77659 -bGV1cnM= 77660 -QmlydGhkYXk= 77661 -IGhlYXRz 77662 -LmludmVyc2U= 77663 -IF8NCg== 77664 -aWxsdW0= 77665 -b2thYmxlQ2FsbA== 77666 -X21s 77667 -TGlrZWQ= 77668 -ZW51bWVyYXRl 77669 -RmluaXRl 77670 -LXByb3A= 77671 -QXJlYVZpZXc= 77672 -IG1lZGlhdGlvbg== 77673 -IGNoYW50aW5n 77674 -X05U 77675 -X3VuYw== 77676 -c21vdXRo 77677 -IHBpZ21lbnQ= 77678 -UGFzc3dvcmRFbmNvZGVy 77679 -IHbDqXI= 77680 -IHdhc3Rld2F0ZXI= 77681 -LVBhY2s= 77682 -IGpvdmVu 77683 -YWVz 77684 -S1k= 77685 -UGludGVyZXN0 77686 -IG11c2ljYQ== 77687 -bGFjZXM= 77688 -IFdpY2g= 77689 -KHJvdA== 77690 -KGly 77691 -IOyCreygnA== 77692 -44Gd44KM 77693 -X1RIRQ== 77694 -Z2V0RmlsZQ== 77695 -W3Byb3BlcnR5 77696 -IGVuZGluZ3M= 77697 -aXp6YXJl 77698 -PXRyYWlu 77699 -LWxvdmluZw== 77700 -IG5vdXZl 77701 -IGNvbW1hcw== 77702 -IGNhbWJp 77703 -IFp1c2FtbWVu 77704 -CUV4dA== 77705 -KG9ic2VydmVy 77706 -Zm9ybWlr 77707 -IHF1aW5kaQ== 77708 -IEl2b3J5 77709 -IEJvbGl2aWE= 77710 -YXNhZA== 77711 -X2xlZ2VuZA== 77712 -Q2l0aWVz 77713 -X0ZJUkU= 77714 -YXNkZg== 77715 -LkRlcHRo 77716 -VmFsdWVHZW5lcmF0aW9uU3RyYXRlZ3k= 77717 -dXBk 77718 -LkdldFJlc3BvbnNl 77719 -IHVyZ2VudGx5 77720 -SW52YXJpYW50 77721 -R2V0WA== 77722 -IHN0YXR1cmU= 77723 -IGltYWdpbmluZw== 77724 -YXRlYXU= 77725 -TU9WRUQ= 77726 -KFRyYW5zYWN0aW9u 77727 -X3Bvcg== 77728 -UmVmUHRy 77729 -Lmdsb2JhbERhdGE= 77730 -Z3JhdmU= 77731 -aW1lc3RlcHM= 77732 -Zm91bmRsYW5k 77733 -U2FsaXI= 77734 -YXJ0aXN0cw== 77735 -IGNyZWF0ZUFjdGlvbg== 77736 -IFNhbnRv 77737 -INC90LXRgg== 77738 -CQkJICAgICAgICAgICAgICAg 77739 -LXNvbmc= 77740 -IG51aXNhbmNl 77741 -IGltcG92ZXI= 77742 -XykNCg== 77743 -IGNyb3dkZnVuZGluZw== 77744 -IHRpbXA= 77745 -UGljdHVyZXM= 77746 -IGxvZGdpbmc= 77747 -6ZKu 77748 -YXRhc2V0cw== 77749 -44Ot44Kw 77750 -cGVyc29ucw== 77751 -Y29uZHVjdA== 77752 -IGV2YWRl 77753 -IGhhdW50aW5n 77754 -ICEhfQ== 77755 -IExBUkdF 77756 -IGtpdHRlbg== 77757 -IHVwaGlsbA== 77758 -KG1pbnV0ZXM= 77759 -IEVtYW51ZWw= 77760 -J0M= 77761 -IFNreXdhbGtlcg== 77762 -cHVycG9zZQ== 77763 -X21hcHBlcg== 77764 -IGFkYXB0YXRpb25z 77765 -LmZpbGxUZXh0 77766 -cnVr 77767 -IHJlcGVydG9pcmU= 77768 -KHByaW9yaXR5 77769 -KG1hcHBlZA== 77770 -Um9iaW4= 77771 -IGVycm9uZW91cw== 77772 -IGluaGFs 77773 -Qk9WRQ== 77774 -KCIsIikK 77775 -dWVsbGVtZW50 77776 -IGZpbmdlcnByaW50cw== 77777 -IFBZVEhPTg== 77778 -LWRlbQ== 77779 -bGVhbm9y 77780 -esSFZA== 77781 -IlBlb3BsZQ== 77782 -YXNpZXI= 77783 -IHBhdHJpb3RpYw== 77784 -LmZyZWV6ZQ== 77785 -SUo= 77786 -IEJhbmNv 77787 -IGlzU3VjY2Vzcw== 77788 -KHZlaGljbGU= 77789 -KExheW91dA== 77790 -IGNhcnZpbmc= 77791 -X2NpcGhlcg== 77792 -IHZlemVz 77793 -KCdfJyw= 77794 -IEZpcnN0bHk= 77795 -IGZ1bGxlc3Q= 77796 -IExpc3RlbmluZw== 77797 -X3NpZ25hbHM= 77798 -ZXdvbGY= 77799 -IFNDUg== 77800 -IE1lcnJ5 77801 -L3Rlc3RpZnk= 77802 -X1NBTklUSVpF 77803 -aW9jdGw= 77804 -SUVFRQ== 77805 -PU1hdGg= 77806 -IGVucXU= 77807 -CWF1eA== 77808 -4pml 77809 -IGRpc3BlcnNlZA== 77810 -aGFyZQ== 77811 -YmVybg== 77812 -IEFtZW5k 77813 -IGluc2lkZXJz 77814 -IEFsdmFyZXo= 77815 -IFp1Zw== 77816 -L2NhbGVuZGFy 77817 -IGhldXJl 77818 -LXBhcGVy 77819 -IHNvZm9ydA== 77820 -IHNtaXRo 77821 -IHBvYg== 77822 -KHJhdGU= 77823 -IHNvY2nDqXTDqQ== 77824 -IHdvZXM= 77825 -IGJydXNoaW5n 77826 -cWQ= 77827 -b2xvZ3Vl 77828 -c29ja2V0cw== 77829 -X1lFUw== 77830 -LmFkZENvbHVtbg== 77831 -IGV2YXNpb24= 77832 -U09GVFdBUkU= 77833 -YWJveA== 77834 -LnlsaW0= 77835 -IGVuZ3VsZg== 77836 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwo= 77837 -IG5nT25EZXN0cm95 77838 -IG5vc3Nh 77839 -LmxzdA== 77840 -KCl9Pgo= 77841 -Lmt3YXJncw== 77842 -IGNvbnRleHRv 77843 -IFBVQg== 77844 -RnU= 77845 -IGJpZ290cnk= 77846 -IGJyaWQ= 77847 -IHN0ZXJvaWQ= 77848 -IHZpZ29yb3VzbHk= 77849 -IGJ1cnN0aW5n 77850 -IHZlbmU= 77851 -IHNhbGFkcw== 77852 -IFZBUklBQkxFUw== 77853 -IE9uYw== 77854 -IGZpcmVFdmVudA== 77855 -c2FuZGJveA== 77856 -IHRvdWNoc2NyZWVu 77857 -c2Fucw== 77858 -L0luc3RydWN0aW9u 77859 -IGVvZg== 77860 -bGVjdHVyZQ== 77861 -Py0= 77862 -LmxvY2FsaXphdGlvbg== 77863 -VkVT 77864 -X3ZvaWNl 77865 -aXR1cmE= 77866 -LnJlcG9ydGluZw== 77867 -IF0pOw== 77868 -Tm92YQ== 77869 -X0NPTVBBVA== 77870 -IG91dGJyZWFrcw== 77871 -LmNsaWVudFdpZHRo 77872 -aWZsb3dlcg== 77873 -X0dSQQ== 77874 -SW5pdGlhbGl6aW5n 77875 -X3BlcmY= 77876 -KCl9LA== 77877 -PVA= 77878 -X0lNRVRIT0Q= 77879 -IHRpZ2h0ZW5pbmc= 77880 -IHRhYkJhcg== 77881 -IEJL 77882 -CURvdWJsZQ== 77883 -L2hhc2g= 77884 -IG1leg== 77885 -VG9VcHBlcg== 77886 -VEc= 77887 -KGluZGVudA== 77888 -IHNpbGljYQ== 77889 -IC8vLy8vLw== 77890 -w7Zr 77891 -IGVsdmVz 77892 -ZW1wbGF0ZXM= 77893 -LkNvbXBhcmVUbw== 77894 -IGd1bmZpcmU= 77895 -YW5pbWFscw== 77896 -IGtlcGFkYQ== 77897 -IENQUg== 77898 -X0xTQg== 77899 -CXZlcnRleA== 77900 -INC/0LXRgNCy 77901 -LCE= 77902 -IGR1bHk= 77903 -X1BBVENI 77904 -RU5B 77905 -CUND 77906 -Y29tcG9zaXRpb24= 77907 -X3N2 77908 -TGJs 77909 -amVq 77910 -0YHRgtGA0L7QuQ== 77911 -LkVkaXRWYWx1ZQ== 77912 -5YW3 77913 -YW50YXM= 77914 -IGJyZWFkY3J1bWI= 77915 -IFRlc3Rlcg== 77916 -IE1lYXN1cmVtZW50cw== 77917 -L0lucHV0 77918 -IFJheg== 77919 -X1BPTEw= 77920 -SW5kZXBlbmRlbnQ= 77921 -Lmx1Y2VuZQ== 77922 -IE1lY2hhbmljcw== 77923 -Y29sb24= 77924 -LnN1cmZhY2U= 77925 -IHVuYXM= 77926 -cmFkbw== 77927 -UExJQ0FURQ== 77928 -Q1JU 77929 -LnNldERlZmF1bHQ= 77930 -JUg= 77931 -IHJlc3BvbnNhYmxl 77932 -IHBlcnBlbmRpY3VsYXI= 77933 -IFJlc3Bpcg== 77934 -IFR1bmlzaWE= 77935 -XEFycmF5 77936 -6Lev5b6E 77937 -IHBhdw== 77938 -IGRlYm91bmNl 77939 -KE1QSQ== 77940 -INiv2LE= 77941 -IGVsaw== 77942 -IFJlbGF5Q29tbWFuZA== 77943 -L2xpZ2h0 77944 -LnNlcmlhbGl6YXRpb24= 77945 -QlNJVEU= 77946 -KSgoKCg= 77947 -IEJpb3M= 77948 -X3N2Zw== 77949 -KHN1cmZhY2U= 77950 -RHVwbGljYXRlcw== 77951 -ICg+ 77952 -X0FTVA== 77953 -Lm5pY2s= 77954 -IldoeQ== 77955 -IEludGVsbGVjdHVhbA== 77956 -YWJicmV2aWF0aW9u 77957 -ZWFyYWJsZQ== 77958 -IGNvbnNlZ3Vpcg== 77959 -KEJl 77960 -X1BvZHM= 77961 -PEFuaW1hdG9y 77962 -X1VOREVGSU5FRA== 77963 -QVJSWQ== 77964 -IC8vfg== 77965 -cGVyYXRvcg== 77966 -LndyaXRlRmlsZVN5bmM= 77967 -QWxz 77968 -bGRlcg== 77969 -IG1pZWpz 77970 -IGZ1bmNz 77971 -aW5jaWJsZQ== 77972 -IGR1c3R5 77973 -IERyaWxs 77974 -IGNvbnRpbnVhbA== 77975 -IEVsZWN0cm9u 77976 -LmVuZW15 77977 -KHBi 77978 -IHJldW5pdGVk 77979 -U21va2U= 77980 -LWZhY2Vk 77981 -SW50ZW5zaXR5 77982 -IFRyZWVNYXA= 77983 -IEFyZ3VtZW50RXJyb3I= 77984 -LndyaXRlSGVhZA== 77985 -IFRSRQ== 77986 -U3BsaXRPcHRpb25z 77987 -LyoqKioqKi8K 77988 -IFw8Xg== 77989 -IEludmVzdG1lbnRz 77990 -U1VNRVI= 77991 -IGRhYw== 77992 -QU5J 77993 -Llllc05v 77994 -KG9mU2l6ZQ== 77995 -eXRo 77996 -ZWxvYWQ= 77997 -IGltcHJlcw== 77998 -IGJsb2Jz 77999 -LnJldHJpZXZl 78000 -IHR5cmFubnk= 78001 -IGNhbmNlbEJ1dHRvblRpdGxl 78002 -IGhhY2k= 78003 -IENhc2lub3M= 78004 -IGRoZQ== 78005 -UmV0YWls 78006 -IFBvcm5odWI= 78007 -IENyaW1lcw== 78008 -T2ls 78009 -KElTZXJ2aWNl 78010 -UmVzaXphYmxl 78011 -CVNv 78012 -T2Z0ZW4= 78013 -IGNvbW1vbnBsYWNl 78014 -X0dD 78015 -YWxkaQ== 78016 -YXRobG9u 78017 -KFZpZXdHcm91cA== 78018 -KEVtcGxveWVl 78019 -IHNhZmVndWFyZHM= 78020 -6YCA5Ye6 78021 -X0FVUkE= 78022 -IHVubm90aWNlZA== 78023 -IFRob3Ju 78024 -bW9kZWxl 78025 -IGFjb3Jkbw== 78026 -IFdlbmdlcg== 78027 -aW11cw== 78028 -ZW5zYnVyZw== 78029 -b21iYQ== 78030 -Y2nDs24= 78031 -Imh0dHA= 78032 -X01hdHJpeA== 78033 -fHx8fA== 78034 -b3JuZWNlZG9y 78035 -CUJ1ZmZlcmVkUmVhZGVy 78036 -cmVnaXN0ZXJz 78037 -cmVsZWFzZWQ= 78038 -IGFkZE9ic2VydmVy 78039 -IFZhbGVudA== 78040 -KEN1bHR1cmVJbmZv 78041 -IG1hbm5lbg== 78042 -IGJ1cmdsYXJ5 78043 -X21pbnV0ZQ== 78044 -IGludGVyY2VwdG9y 78045 -b2NyYXRlcw== 78046 -YXR0cm8= 78047 -IFlF 78048 -ZXNzbGVy 78049 -bGlzdGVuZXJz 78050 -L3Byb20= 78051 -IOek 78052 -dG91Y2hlcw== 78053 -RXNw 78054 -IEFib3J0 78055 -IGZmaQ== 78056 -IGNsdW1z 78057 -TklM 78058 -X1ZJUlRVQUw= 78059 -IGxvaW4= 78060 -eW5vbWlhbHM= 78061 -INec 78062 -IGd6 78063 -IE5lb24= 78064 -SVNJUw== 78065 -YW1lcmF0ZQ== 78066 -X2F2YWls 78067 -IG1heGk= 78068 -IGlzQXJyYXk= 78069 -Q29sdW1uSW5mbw== 78070 -aXppbg== 78071 -IHBlcnNv 78072 -IG91ZA== 78073 -aWFsaXplZA== 78074 -eW1p 78075 -IGNvbmZpZGVudGx5 78076 -PSIvIj4K 78077 -LmRhdGFzb3VyY2U= 78078 -IHBheWNoZWNr 78079 -IEJhdg== 78080 -L0JyYW5jaA== 78081 -IFRlYXI= 78082 -IG1lcnVwYWthbg== 78083 -IEJyYWg= 78084 -INC60L7QvdGC 78085 -74I= 78086 -LHBhdGg= 78087 -IGRhenpsaW5n 78088 -IFVDSEFS 78089 -IHByb3Zpc2lvbmFs 78090 -0L/Qvw== 78091 -IGxlZ2FsaXplZA== 78092 -X2FsZ28= 78093 -X1JTQQ== 78094 -YWx0ZXJuYXRpdmU= 78095 -IERFVEFJTFM= 78096 -VG9Ebw== 78097 -cmVmbGVjdGlvbg== 78098 -X1dFRUs= 78099 -IENMRUFO 78100 -IHNsb2dhbnM= 78101 -IOuTsQ== 78102 -IFZldGVyaW5hcnk= 78103 -aWRm 78104 -LmRhdGVUaW1lUGlja2Vy 78105 -aWNvbnRyb2w= 78106 -KHBsYXk= 78107 -IHVsbGFt 78108 -ICcpDQo= 78109 -IGNoZXF1ZQ== 78110 -5a6L5L2T 78111 -IHVuc2VyZW0= 78112 -IEFyY2hpdGVjdHM= 78113 -YW1lbnRhbHM= 78114 -IHZtYXg= 78115 -IGplbWFuZA== 78116 -Q0VFRA== 78117 -IE9saXZpZXI= 78118 -c2V2ZXJpdHk= 78119 -Uks= 78120 -RGlzY29ubmVjdGVk 78121 -IHdlYXBvbnJ5 78122 -dWnDp8Ojbw== 78123 -IGJpbmdv 78124 -ZG9udA== 78125 -X0NIQU5ORUxT 78126 -IERhZw== 78127 -IGTDpHI= 78128 -w6lyaXF1ZQ== 78129 -Z3JhZGFibGU= 78130 -IENPTVBMRVRF 78131 -IHNwYW5pc2g= 78132 -IGluc3RydW1lbnRhdGlvbg== 78133 -dmFzaXZl 78134 -RFJBVw== 78135 -IGZwdXRz 78136 -IFNwZW5k 78137 -IFJlc3BlY3Q= 78138 -Q291cnRlc3k= 78139 -IHNjaG8= 78140 -IHBvc3RhZ2U= 78141 -IE1lYWRvd3M= 78142 -IHR1dG9yaW5n 78143 -ZXJ2bw== 78144 -QWJzb2x1dGVseQ== 78145 -w6FuZGV6 78146 -vZTrk5w= 78147 -IFNIUg== 78148 -cGhvb24= 78149 -IERlcG9z 78150 -PScnCg== 78151 -IHBoeXNpb2xvZ3k= 78152 -KnRpbWU= 78153 -IFRvdWdo 78154 -ZG9jaw== 78155 -L2hl 78156 -KEhhdmU= 78157 -IE1vaW5lcw== 78158 -U1RZUEU= 78159 -IEJyaWRl 78160 -IHN0cm9u 78161 -IHdvcmxkdmlldw== 78162 -IGdyYXR1aXRv 78163 -IGFlcm9zcGFjZQ== 78164 -IElocmVt 78165 -IHFj 78166 -IG1hbmlmZXN0YXRpb25z 78167 -c2xhdWdodA== 78168 -PEFjY291bnQ= 78169 -IEluZm9z 78170 -YW1iaWw= 78171 -X0ZpbmFs 78172 -IGFkbWluaXN0cmF0aW9ucw== 78173 -IGNvbGxhYm9yYXRlZA== 78174 -LmpkZXNrdG9w 78175 -b2x1Y2nDs24= 78176 -YXNjdGltZQ== 78177 -X2FsbG9jYXRl 78178 -YXJyaXZhbA== 78179 -Sk9S 78180 -IHNoYWR5 78181 -IHBpbmVhcHBsZQ== 78182 -44KP 78183 -IHNhdGlu 78184 -YnJlcm8= 78185 -IExpZXM= 78186 -IHRlbnNvcnM= 78187 -IEludGVsbGlnZW50 78188 -LlNlbGVjdGVkSW5kZXhDaGFuZ2Vk 78189 -IHJhZGlhdG9y 78190 -YXNzaXN0YW50 78191 -JGZpZWxkcw== 78192 -CXN0ZXA= 78193 -IE1pdGdsaQ== 78194 -IEV2ZXJldHQ= 78195 -IFNjaGVkdWxlZA== 78196 -SG9yYQ== 78197 -Il0tPg== 78198 -IG1vdHM= 78199 -IERTVA== 78200 -Zm9udE5hbWU= 78201 -IFdhcndpY2s= 78202 -X1Rhc2s= 78203 -KkM= 78204 -44On 78205 -b2JlbA== 78206 -X0RFVA== 78207 -IHNvY2lvbG9neQ== 78208 -IEthdHo= 78209 -aWNpb25z 78210 -b3RsYW5k 78211 -YWRvbw== 78212 -X3BhcnM= 78213 -IHJpcHBpbmc= 78214 -aWNobw== 78215 -IG51dHJpdGlvdXM= 78216 -CWRhbWFnZQ== 78217 -S3k= 78218 -IGFuY2hvcmVk 78219 -IGFydGlmaWNpYWxseQ== 78220 -IEp1dmVudHVz 78221 -L3Blcmw= 78222 -IGV4cHJlc3NpdmU= 78223 -eEVF 78224 -IEVudW1lcmF0aW9u 78225 -Lk1FU1NBR0U= 78226 -KGRlZw== 78227 -5b+X 78228 -IyMjIyMj 78229 -ICIiKSw= 78230 -a2zDpHI= 78231 -XE1haWw= 78232 -RGVzaWduZWQ= 78233 -IHN0YWZmZXI= 78234 -IHNhbHRz 78235 -KioqKioNCg== 78236 -IOKB 78237 -IHNldFRpdGxlQ29sb3I= 78238 -RFZE 78239 -LldyaXRlQWxs 78240 -ZWxsYW50 78241 -IGNvZXJjaW9u 78242 -IFNvcnRpbmc= 78243 -6KiA 78244 -IHN0YXJ2YXRpb24= 78245 -Ly97ew== 78246 -LmhlYXA= 78247 -IE1lZGlldmFs 78248 -ICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 78249 -77yR77yQ 78250 -IHdhcmRz 78251 -IEhlcmM= 78252 -IEhvZ3dhcnRz 78253 -LWNvbW1lbnRz 78254 -IExhdWRlcmRhbGU= 78255 -5rw= 78256 -IHJpZnQ= 78257 -IHplaXQ= 78258 -IHByb29mcw== 78259 -LnZpZXdwb3J0 78260 -JHN0YXJ0 78261 -IEJvdWdodA== 78262 -LnJpY2hUZXh0Qm94 78263 -IGNsaW5n 78264 -ICcqKg== 78265 -T3duZXJzaGlw 78266 -IEJvZWhuZXI= 78267 -KGR5bmFtaWM= 78268 -IG1lZGljYWxseQ== 78269 -IFdURg== 78270 -IE1haW5NZW51 78271 -6LSt 78272 -IGRpZmVyZW50ZQ== 78273 -L3Jlc3VsdHM= 78274 -ZW50aGFs 78275 -IFdpZGdldHM= 78276 -cnVzaA== 78277 -IFJNUw== 78278 -IFZvbGxleQ== 78279 -IHJlbW92ZUZyb21TdXBlcnZpZXc= 78280 -IExhZmF5ZXR0ZQ== 78281 -IEZldGNoVHlwZQ== 78282 -YWNhcw== 78283 -IHBhdGhvZ2Vucw== 78284 -IE1NTw== 78285 -LkN1cnJlbmN5 78286 -b2Npb3Vz 78287 -IHNwcml0ZUJhdGNo 78288 -ZG9sbA== 78289 -IHZhbXBpcmVz 78290 -bGF1bmNoZXI= 78291 -IHBlYWtlZA== 78292 -IGRlYnVuaw== 78293 -IEFTRA== 78294 -IHVuZXF1YWw= 78295 -IHNxdWFkcw== 78296 -fS4kew== 78297 -bWFuaQ== 78298 -IkU= 78299 -IEZhaHI= 78300 -IElTSQ== 78301 -IHVuYXZvaWQ= 78302 -b3Bob25l 78303 -WzpdCg== 78304 -IERpcmVjdGVk 78305 -IGJ1c2hlcw== 78306 -LmZhaWx1cmU= 78307 -IGltbWVyc2Vk 78308 -ZXhv 78309 -SGlzdG9ncmFt 78310 -IEthbm4= 78311 -IHBpcmFjeQ== 78312 -IENydW5jaA== 78313 -IGzDpg== 78314 -Ly8i 78315 -IG1vbm90 78316 -IFNhdW5kZXJz 78317 -IFNldmVudA== 78318 -KEFic3RyYWN0 78319 -IHNtb2tlcg== 78320 -cm9uZQ== 78321 -LmNsaWVudFk= 78322 -ICItIiw= 78323 -IEZvdW50YWlu 78324 -IGlubmU= 78325 -7IOJ 78326 -Q3Ry 78327 -JGlucHV0 78328 -UFJPRklMRQ== 78329 -IERvbmF0aW9u 78330 -V2l0aEVtYWls 78331 -IGZyYWN0dXJlcw== 78332 -S2VlcGVy 78333 -IG1laXNqZXM= 78334 -IGFyY2hpdGVjdHVyZXM= 78335 -IEx1bmc= 78336 -J2ltYWdl 78337 -aGFybWE= 78338 -IGFiYW5kb25pbmc= 78339 -QUxMRUQ= 78340 -c3VidHlwZQ== 78341 -cmVpcmE= 78342 -IG1vc3M= 78343 -IFBhcnNvbnM= 78344 -YWtlZG93bg== 78345 -PW9iag== 78346 -IHN1Y2Vzcw== 78347 -IHdlYXJhYmxl 78348 -44Kn 78349 -IGFkdWx0aQ== 78350 -LnVt 78351 -IHZpYnJhdGlvbnM= 78352 -IHN3ZWxs 78353 -IERpc2Nsb3N1cmU= 78354 -IFJERA== 78355 -cGFpcnM= 78356 -YW5nZ2Fu 78357 -IG1haW5CdW5kbGU= 78358 -IERJTg== 78359 -IHJvY2tlZA== 78360 -c2hvdWxkQmU= 78361 -Lmdi 78362 -IElNRA== 78363 -IFdO 78364 -LGFyZw== 78365 -4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm 78366 -W109JA== 78367 -LlNN 78368 -IGFsZ3Vucw== 78369 -YWRkb25z 78370 -X0NvbW1vbg== 78371 -X1JFRlJFU0g= 78372 -INmB2Yo= 78373 -IFRZUE8= 78374 -IEVjb2xvZ3k= 78375 -IGdsdQ== 78376 -LkRhdGFUeXBl 78377 -IFByb2Jl 78378 -THV4 78379 -b3dlZ28= 78380 -IHJlaw== 78381 -IFBsYWludGlmZg== 78382 -YWNoYWJsZQ== 78383 -Lm5hbWE= 78384 -Km91dA== 78385 -fX17ew== 78386 -IENBUElUQUw= 78387 -5L2G 78388 -SW1wb3J0ZXI= 78389 -LmNyZWF0ZVNlcnZlcg== 78390 -X3Jlc29sdmU= 78391 -X0VQUw== 78392 -c3RlbGxhcg== 78393 -X1Byb2ZpbGU= 78394 -CXN3 78395 -LW1vbg== 78396 -dWRldg== 78397 -XFBsdWdpbg== 78398 -X01JWA== 78399 -IERpc2NyaW0= 78400 -LmZyb21MVFJC 78401 -IFN0cmFuZA== 78402 -QW55dGhpbmc= 78403 -cG93ZXJz 78404 -XV0NCg== 78405 -LlRJTQ== 78406 -IGFkZHNsYXNoZXM= 78407 -IGVzaQ== 78408 -QEJlZm9yZQ== 78409 -IHNhaw== 78410 -ICcvJzsK 78411 -Y29j 78412 -xZ/EsQ== 78413 -ICkpOw0K 78414 -X2Fib3Zl 78415 -IEVDQw== 78416 -L2NwdQ== 78417 -IGNhZGU= 78418 -LlN0ZGVycg== 78419 -IHBlbGxldHM= 78420 -IFBhbGlu 78421 -IGfDqW4= 78422 -X2phdmE= 78423 -IHNhbGFo 78424 -IGJlcmdlbg== 78425 -X1NXQVA= 78426 -IGdpYg== 78427 -acOjbw== 78428 -X2Rpc3RhbmNlcw== 78429 -IENpbmRlcg== 78430 -IGFuYXJjaGlzdA== 78431 -aW1hdA== 78432 -CW1vY2s= 78433 -44GX44G+44GZ 78434 -T21lZ2E= 78435 -IGJhaHdh 78436 -X1BhcnNl 78437 -LnBhcGVy 78438 -CUludGVudA== 78439 -cmVucw== 78440 -L2dyaWQ= 78441 -IGZpbHRoeQ== 78442 -LmV2 78443 -IyMjIyMK 78444 -IHNhcmU= 78445 -IHNvYWtpbmc= 78446 -IFJlZ2lvbnM= 78447 -X1VTRUQ= 78448 -IFNpaw== 78449 -aWZpa2FzaQ== 78450 -CUVkaXRvcg== 78451 -THVjaw== 78452 -IOyXsA== 78453 -xINt 78454 -LiI7 78455 -IFppZWw= 78456 -IGdyYXlzY2FsZQ== 78457 -KEZ1bmM= 78458 -44OB 78459 -LkRlbnNl 78460 -LWxlYW5pbmc= 78461 -IGdyYWNlZnVs 78462 -R3JhcGhOb2Rl 78463 -X0NPTU1JVA== 78464 -IENWUw== 78465 -IHBsYWlucw== 78466 -IHJlag== 78467 -cGNpb25lcw== 78468 -IHVuZGVybWluaW5n 78469 -X2NhdHM= 78470 -ZmVi 78471 -Q29sbGVjdGlvblZpZXc= 78472 -U0VNQg== 78473 -IHRodQ== 78474 -dGV4dGJveA== 78475 -KEFuZHJvaWQ= 78476 -IHJpZ29y 78477 -IFlpZWxk 78478 -LmlzUGxheWluZw== 78479 -OnZpZXc= 78480 -cmVtYWluZGVy 78481 -IFBpcA== 78482 -KWluZGV4 78483 -IEJlY2tlcg== 78484 -dG9Mb2NhbGU= 78485 -YXV0b3JlbGVhc2U= 78486 -IFJvbWVybw== 78487 -LkhhbmRsZWQ= 78488 -IENhYmluZXRz 78489 -KVY= 78490 -IHJ0ZQ== 78491 -IEh1bHU= 78492 -aWNpZWw= 78493 -L2FuaW1hdGlvbnM= 78494 -IHByZXN1bWU= 78495 -LnRyYW5zcGFyZW50 78496 -IHN1Ym1lbnU= 78497 -cW0= 78498 -aWVydGVu 78499 -IHRleHRTaXpl 78500 -IHN0YXJ2aW5n 78501 -L2pvYg== 78502 -QXBhY2hl 78503 -IHlpZWxkaW5n 78504 -LWFydGljbGU= 78505 -Jz0+JF8= 78506 -IOih 78507 -PFNwcml0ZVJlbmRlcmVy 78508 -IFNoaWE= 78509 -KToo 78510 -IHB1Ymxp 78511 -emllag== 78512 -IHRlbGVzYw== 78513 -IHRlaWw= 78514 -TGVnYWN5 78515 -IFBsYWNlbWVudA== 78516 -KCkpew== 78517 -IHRyb3VibGVzb21l 78518 -5pif 78519 -IHBlcnPDtm4= 78520 -X0FzcE5ldA== 78521 -PX0= 78522 -KHVzZXJJRA== 78523 -U3Vz 78524 -44K6 78525 -LWF2ZXJhZ2U= 78526 -IFFJbWFnZQ== 78527 -LlN0cmljdA== 78528 -dGVib3Jn 78529 -LWZ1bmN0aW9ucw== 78530 -UkVHSU9O 78531 -Pk5ldw== 78532 -X2Nob29zZQ== 78533 -KGNp 78534 -IHVubGVhc2g= 78535 -IFJJR0hUUw== 78536 -IFNwZWFy 78537 -CW1ha2U= 78538 -IHR5cw== 78539 -YW5lbGE= 78540 -IFdY 78541 -X01BS0U= 78542 -L3NldHVw 78543 -IG9uU2F2ZQ== 78544 -IGNsaW5pY2lhbnM= 78545 -CWJhY2s= 78546 -LkxpbmtlZA== 78547 -IGNvbnNlcnZl 78548 -IGJpdHRlbg== 78549 -X3ZhcmlhbmNl 78550 -IGxpcmU= 78551 -IGluZXJ0aWE= 78552 -dWZmbGVz 78553 -X01QSQ== 78554 -aWRkbGVz 78555 -W2Fycg== 78556 -LnZvY2Fi 78557 -IHNoaXR0eQ== 78558 -IG5lc3Rl 78559 -c3NpemU= 78560 -IEtU 78561 -Ymxlcg== 78562 -X2xpbnV4 78563 -IG1vbmdvZGI= 78564 -IElURU1T 78565 -S29u 78566 -IEJ1cnN0 78567 -X3Bob3Rvcw== 78568 -Q29sb3JhZG8= 78569 -IGFja25vd2xlZGdtZW50 78570 -IG9pbHk= 78571 -IG5mcw== 78572 -IFppb25pc3Q= 78573 -IGFkZGljdHM= 78574 -IGFkZFVzZXI= 78575 -IE1pc2g= 78576 -IGtX 78577 -IFdhbnRz 78578 -KHJlY29yZHM= 78579 -b2N1cnJlbmN5 78580 -SlNHbG9iYWw= 78581 -LmVsYXBzZWQ= 78582 -IE5i 78583 -IHBwdA== 78584 -XERlcGVuZGVuY3k= 78585 -Um9s 78586 -IMOnYWzEscWf 78587 -IGV4cGFuc2lvbnM= 78588 -YnViYmxl 78589 -IG1pZHRlcm0= 78590 -ICcjew== 78591 -Y3R4dA== 78592 -SVN5bnRheEV4Y2VwdGlvbg== 78593 -IFZhbGxl 78594 -IENhZGlsbGFj 78595 -ICIifSwK 78596 -IHNlbXVh 78597 -cmljaFRleHQ= 78598 -c29mdG1heA== 78599 -b2JqUEhQRXhjZWw= 78600 -LmhzdGFjaw== 78601 -X2NyaXRpY2Fs 78602 -KDw/ 78603 -ZGo= 78604 -IGNvbnNvbg== 78605 -IHJvb21JZA== 78606 -RE9NQ29udGVudExvYWRlZA== 78607 -cGFybXM= 78608 -IHplaWd0 78609 -VFBM 78610 -LW5vdGNo 78611 -IG9wcHJlc3NpdmU= 78612 -Q29kaW5n 78613 -IExlYXZlcw== 78614 -KERpc3BsYXk= 78615 -LnNpZ25Jbg== 78616 -Ly8tLQ== 78617 -IE9wcg== 78618 -Y3Rh 78619 -IG1ldGF2 78620 -U2VyaWFsaXplZA== 78621 -IHVuYWZmZWN0ZWQ= 78622 -IEFUTA== 78623 -IEtQ 78624 -QXRsYW50aWM= 78625 -LHVybA== 78626 -LHN0YXRl 78627 -IGJpc3Q= 78628 -ZW5lZw== 78629 -IHNpbXBsaXN0aWM= 78630 -IGJpZGRlcg== 78631 -IHBlcmNlcHQ= 78632 -IGNlbGli 78633 -IFRIUk9X 78634 -KC9b 78635 -VGNw 78636 -IGZ1cnRoZXJtb3Jl 78637 -LkFjYw== 78638 -b3BwYWJsZQ== 78639 -5Lik 78640 -IFRhcnQ= 78641 -IEJlbno= 78642 -IGVtYm9kaWVk 78643 -KENvbnN0 78644 -ICst 78645 -UGFydGljaXBhbnRz 78646 -IGh0dHBSZXF1ZXN0 78647 -YWNjZW50 78648 -IFPDvA== 78649 -IGhvcnJpZnlpbmc= 78650 -IC8+LA== 78651 -IGVuYWN0bWVudA== 78652 -IFVOSU9O 78653 -L2xvZ3M= 78654 -IHNjcmVlbkhlaWdodA== 78655 -IGV0d2E= 78656 -5L6L5aaC 78657 -IGHDum4= 78658 -5bem 78659 -X3RpbWVsaW5l 78660 -ICIiKSkK 78661 -JzonJw== 78662 -Qlc= 78663 -IHJlbm92YXRpb25z 78664 -IDwK 78665 -UGFsZQ== 78666 -Pjo8Lw== 78667 -U2tlbGV0b24= 78668 -IGdldFVzZXJz 78669 -X2RhdGFmcmFtZQ== 78670 -YWJy 78671 -bWF0ZXJpYWxz 78672 -JmVhY3V0ZQ== 78673 -LkRpc3BsYXlOYW1l 78674 -IGh2aXM= 78675 -X2xhbmd1YWdlcw== 78676 -LnN5 78677 -dG93ZXI= 78678 -SUZJQ0FUSU9OUw== 78679 -IGJhcnJpYw== 78680 -IFBsdXRv 78681 -YDs= 78682 -44OL 78683 -Y2VudGU= 78684 -I2Fi 78685 -IGxleGljYWw= 78686 -IEJSTw== 78687 -IHJ1bGluZ3M= 78688 -SEVZ 78689 -LmlPUw== 78690 -cmV0dXJuZWQ= 78691 -LmJvb2tz 78692 -IEh1YmI= 78693 -ZW9m 78694 -Pj46Og== 78695 -IOyG 78696 -IGdvVG8= 78697 -6ICD 78698 -44Go44GG 78699 -PEZvcm0= 78700 -Y29waWVz 78701 -LnF1YW50 78702 -IFBvdGF0bw== 78703 -IENvdXNpbnM= 78704 -IHPDuw== 78705 -R292ZXJu 78706 -IGdhbGVy 78707 -IEZJUg== 78708 -X1dpZHRo 78709 -IFNoZWxkb24= 78710 -LkRldg== 78711 -IFJlc3BvbnNpYmlsaXR5 78712 -c29uaWFu 78713 -IHN1cGVyY2xhc3M= 78714 -Yml0c2V0 78715 -ZWRkYXI= 78716 -IExhYm9yYXRvcmllcw== 78717 -IGNvaW5lZA== 78718 -IFRlY2huaXF1ZQ== 78719 -KENvcmU= 78720 -IHNwcmF5ZWQ= 78721 -IHBvbmc= 78722 -KE5ldHdvcms= 78723 -IHJvYXI= 78724 -IEVBU1Q= 78725 -c3RyYWlu 78726 -IG1lbnN0cnVhbA== 78727 -b21iYXQ= 78728 -IGNhbG1pbmc= 78729 -CURpbQ== 78730 -X21vdmllcw== 78731 -IFJBSUQ= 78732 -LWRpc21pc3NpYmxl 78733 -IGZyZXVuZA== 78734 -LWNoYW4= 78735 -IHJlc2lzdG9y 78736 -X0NvcHk= 78737 -b2NyaW5l 78738 -IGVzcGlvbmFnZQ== 78739 -Z2Fkbw== 78740 -TkRBUg== 78741 -IHBvcmNlbGFpbg== 78742 -dGhhbG0= 78743 -IGBb 78744 -IGdyYWRv 78745 -0LjRgA== 78746 -RE9VQkxF 78747 -IGFjY2Vzc2Vz 78748 -LkZsb29y 78749 -IOKGlA== 78750 -IHRva2VuaXpl 78751 -YW5hbHl0aWNz 78752 -LkNyZWF0ZUluc3RhbmNl 78753 -IHN1Y2hl 78754 -CWVudA== 78755 -aWduZXI= 78756 -INC/0LXRgNC10LQ= 78757 -IGNvbmRpY2lvbmVz 78758 -LmxpYnM= 78759 -Iic7 78760 -UERPRXhjZXB0aW9u 78761 -IG9uRGF0YQ== 78762 -IEF1dGlzbQ== 78763 -LWhlbHBlcg== 78764 -IHJld2luZA== 78765 -IGNvZmZpbg== 78766 -44O844K4 78767 -IHRyYW5zbWl0dGluZw== 78768 -LnNldEFsaWdubWVudA== 78769 -IGRlYWxsb2M= 78770 -IGFuY2VzdHJhbA== 78771 -b2dpZQ== 78772 -LkNPTVA= 78773 -OmZyYW1l 78774 -bW1v 78775 -Jzoi 78776 -IFJlZ2VudHM= 78777 -IGNoZWF0ZWQ= 78778 -Lmdn 78779 -IHBhY2Vk 78780 -IGVzdGFk 78781 -b2NlbmU= 78782 -bHNh 78783 -KGZj 78784 -L2dyb3Vwcw== 78785 -L21pc2M= 78786 -IFNodXR0bGU= 78787 -VVBJ 78788 -w6Fv 78789 -LWN5Y2xl 78790 -CXByb3Bz 78791 -IHJvdHRlbg== 78792 -UmVqZWN0ZWQ= 78793 -I2Fj 78794 -LnVh 78795 -IEFtbmVzdHk= 78796 -IHBlbm5lZA== 78797 -SU5DUkVNRU5U 78798 -PGRpbQ== 78799 -LnNldFVw 78800 -IFR3ZWV0cw== 78801 -IE1hZHVybw== 78802 -INmC 78803 -IENBY3RpdmU= 78804 -CUJZVEU= 78805 -KHNlcGFyYXRvcg== 78806 -LlJlc2l6ZQ== 78807 -dWZmbWFu 78808 -c3VwcG9ydHM= 78809 -IHVyYg== 78810 -IEZvdW5kZWQ= 78811 -X2hhcmQ= 78812 -IGVjbGVjdGlj 78813 -LkZpbHRlcnM= 78814 -IFJvdW5kZWRSZWN0YW5nbGU= 78815 -X3NhbXBsaW5n 78816 -IEpldHp0 78817 -YW1lcmljYW4= 78818 -Lmludm9rZUxhdGVy 78819 -IEJ1dHRlcmZseQ== 78820 -KGNvbm5lY3Rpb25TdHJpbmc= 78821 -IE5hb21p 78822 -IEphaW1l 78823 -cnRz 78824 -IG1hZ2ljYWxseQ== 78825 -Lm1hY2hpbmU= 78826 -IEFwcGFsYWNo 78827 -Iisi 78828 -dmFsZQ== 78829 -LW1vdW50ZWQ= 78830 -IGFjaGU= 78831 -TUo= 78832 -IFVJSW1hZ2VQaWNrZXJDb250cm9sbGVy 78833 -LUp1bg== 78834 -TWFuYQ== 78835 -a3JhaW5l 78836 -RENG 78837 -L1Byb2R1Y3Q= 78838 -IFJFU0VSVkVE 78839 -IEZIQQ== 78840 -OkAiJUAiLA== 78841 -IFByb2pla3Q= 78842 -IE5pcg== 78843 -IENhcm5pdmFs 78844 -ICom 78845 -IFFT 78846 -V0hP 78847 -IHdlbHQ= 78848 -IG1hcnJ5aW5n 78849 -QWxleGFuZGVy 78850 -IFJldmlld2Vk 78851 -YWN0ZXJpYQ== 78852 -IHdhbg== 78853 -KHJvYm90 78854 -IFdpbmRvd01hbmFnZXI= 78855 -IG1vbnVtZW50YWw= 78856 -IERvbWluZw== 78857 -L3dlYXRoZXI= 78858 -X3NlY29uZGFyeQ== 78859 -T3BlcmF0b3Jz 78860 -X1NJREU= 78861 -S2F0 78862 -LXpvbmU= 78863 -IHNpZ25pZmllcw== 78864 -IEh0dHBNZXRob2Q= 78865 -L2NvbnRleHQ= 78866 -Ig0KDQoNCg== 78867 -IFJvZHJpZ28= 78868 -IGJ1Yg== 78869 -L211c2lj 78870 -IHNlcm9udA== 78871 -IG1STkE= 78872 -X2VtYWlscw== 78873 -ICc+Jw== 78874 -IEdlbWU= 78875 -INGA0LDRgQ== 78876 -IH5+ 78877 -IGR1Y2tz 78878 -IEZyZXVuZA== 78879 -RXhwZXJpbWVudA== 78880 -IHJlb3BlbmVk 78881 -IFwiew== 78882 -IGVsbGlwdA== 78883 -IGNvbmNhdGVuYXRl 78884 -IHBvbG8= 78885 -VGltZVpvbmU= 78886 -ICAKICAgIAo= 78887 -IGNhcHRpb25z 78888 -cmlja3M= 78889 -LmZyZXE= 78890 -Lm1lbW8= 78891 -IHNtYg== 78892 -RHJ1Zw== 78893 -XVsv 78894 -X0JBQ0tFTkQ= 78895 -IEVsbGE= 78896 -IFBvcnRpb25z 78897 -IGZldGNoRGF0YQ== 78898 -IGNvcm91dGluZQ== 78899 -IGVzdGF2YQ== 78900 -IEdlbml1cw== 78901 -OmB+ 78902 -IFN3YW5zZWE= 78903 -KHBheW1lbnQ= 78904 -Vm90cmU= 78905 -IFBydWl0dA== 78906 -Lm9mZnNldFdpZHRo 78907 -YXJ5bA== 78908 -IHVuaWZvcm1seQ== 78909 -IFdhcnA= 78910 -IFNFQQ== 78911 -IGRlZHVjdGlibGU= 78912 -IGJ1bGxpZWQ= 78913 -IEJlc2No 78914 -IFByb3NwZWN0 78915 -T1NQ 78916 -IlllYWg= 78917 -IEFuZ3J5 78918 -LlZhbA== 78919 -IGdpZ3M= 78920 -IGJ1bGt5 78921 -ZXRlcmlh 78922 -LmdldFN0YXJ0 78923 -IE1FVEg= 78924 -IGNvaGVyZW5jZQ== 78925 -IG1lZGlhdGVk 78926 -0LXQs9C40YHRgg== 78927 -Li4uLgo= 78928 -IHN0cm9rZUxpbmU= 78929 -bWo= 78930 -IFVuc3VyZQ== 78931 -YXRocm9vbQ== 78932 -KEJpbmFyeQ== 78933 -X0tleVByZXNz 78934 -5p6E 78935 -aW5oZXJpdHM= 78936 -IHJlcHJlaA== 78937 -CVNjaGVtYQ== 78938 -IHVucmVzdHJpY3RlZA== 78939 -LmRlZmluaXRpb24= 78940 -XT8u 78941 -IGl0aA== 78942 -5aCx 78943 -IHNsaW1l 78944 -bXNncw== 78945 -X0pT 78946 -CVZlcnNpb24= 78947 -X1NFQ1VSRQ== 78948 -IGNvc3Rv 78949 -LlJlc3Ry 78950 -Y3Ny 78951 -X1RPT0xUSVA= 78952 -cGNs 78953 -IOKGkw== 78954 -U2VsZlBlcm1pc3Npb24= 78955 -LnJhdmVs 78956 -IG1lbWJyZXM= 78957 -QXNzZW1ibGVy 78958 -cm9taXVt 78959 -c3VyZg== 78960 -IFVQREFURUQ= 78961 -KGJyYW5jaA== 78962 -KGluY2x1ZGU= 78963 -IElkb2w= 78964 -XE9iamVjdA== 78965 -IGNsb25pbmc= 78966 -IGlzTmFO 78967 -IGFueg== 78968 -xrDhu51uZw== 78969 -IG9uYw== 78970 -X0NMVVNURVI= 78971 -IHt9KSwK 78972 -aW1pbmFyeQ== 78973 -CWNvbnRlbnRQYW5l 78974 -dHJhaWw= 78975 -IG5pbmV0eQ== 78976 -IE5pYWdhcmE= 78977 -IEFuZHI= 78978 -w6lzeg== 78979 -IGRpZmlj 78980 -dXRyYQ== 78981 -J319Pg== 78982 -44Kk44OI 78983 -c3Bhcg== 78984 -ICJcIiw= 78985 -IG15ZmlsZQ== 78986 -ZmZj 78987 -IG5vdGljZWFibHk= 78988 -ZXlh 78989 -IFB1dHRpbmc= 78990 -SlY= 78991 -LmRpbWVuc2lvbnM= 78992 -ZXJjYQ== 78993 -Z2VuZXNpcw== 78994 -ZWZmZWN0aXZl 78995 -IHBlcmRlcg== 78996 -Lk9S 78997 -X0NPTVBBUkU= 78998 -Omxlbg== 78999 -L3JlZA== 79000 -IEFyaXN0b3RsZQ== 79001 -IHF1ZXJpZWQ= 79002 -IGZvcmVzZWVhYmxl 79003 -IFVJQ29udHJvbA== 79004 -cmVtaW5kZXI= 79005 -IGNlbmE= 79006 -IGhpYw== 79007 -ICIiOw0KDQo= 79008 -L2Jhc2lj 79009 -IGFmZm9yZGFiaWxpdHk= 79010 -LGVycg== 79011 -INGB0LjQvNCy 79012 -IElTUg== 79013 -bGljZW5zZXM= 79014 -Vk9JQ0U= 79015 -Lkxhbmc= 79016 -LnJlbGF0aW9uc2hpcA== 79017 -IGxlbmRz 79018 -IG51dHplbg== 79019 -IGVzcGVjw61m 79020 -aWVuZGE= 79021 -PFBhaXI= 79022 -VHY= 79023 -X1JFVFJZ 79024 -IGhvbm9yaW5n 79025 -X2RlY2xhcmF0aW9u 79026 -KE5P 79027 -IEhpY2s= 79028 -IG1pbmxlbmd0aA== 79029 -IEdlc2NoaWNodGU= 79030 -YXBlc2g= 79031 -QVRPTQ== 79032 -JykiKTsK 79033 -ZW50ZXJwcmlzZQ== 79034 -Pn08Lw== 79035 -IHBvbGl0aXF1ZQ== 79036 -ZWRpdGlvbg== 79037 -X0RlYnVn 79038 -QW5uZQ== 79039 -LlNjb3Bl 79040 -Y3Rw 79041 -Y2Fub25pY2Fs 79042 -Pj47Cg== 79043 -TWVudXM= 79044 -IGZpZXJjZWx5 79045 -Lk9uY2U= 79046 -IEJvcnJvdw== 79047 -IHNvc3Q= 79048 -IHNlcnZpbmdz 79049 -LWZsYWc= 79050 -IHZlc3RlZA== 79051 -IGZyb24= 79052 -7ZWo 79053 -IGZhbWluZQ== 79054 -Il0pKXsK 79055 -ZXJlw6dv 79056 -IGtpamtlbg== 79057 -IEZsb29yaW5n 79058 -55CD 79059 -b2JzZXJ2YXRpb24= 79060 -IHVzZXJEYW8= 79061 -PSIiPg0K 79062 -Q09WSUQ= 79063 -YmFieQ== 79064 -IHRyb3VnaA== 79065 -IFNlYW0= 79066 -IEZpZ2h0ZXJz 79067 -b21pdA== 79068 -IENoYXJnZXM= 79069 -UnVzcw== 79070 -IHF1ZWxxdWU= 79071 -R2V0UG9zaXRpb24= 79072 -IE1pbmlzdGVycw== 79073 -X3JlY2VpcHQ= 79074 -IHJvb3ROb2Rl 79075 -bXVsdGlw 79076 -JHNlYXJjaA== 79077 -IikpKSkK 79078 -dGFrZXM= 79079 -ICghIQ== 79080 -IEJBVA== 79081 -Y2hhbmc= 79082 -xJM= 79083 -Lm9j 79084 -IHNraWxsZXQ= 79085 -IFNLVQ== 79086 -IEdhbGxhZ2hlcg== 79087 -IGNyZXNj 79088 -d2Vla2RheQ== 79089 -ZXJ2aXNlZA== 79090 -Q2FyZENvbnRlbnQ= 79091 -LmFjY2Vs 79092 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 79093 -VGFp 79094 -IENvbXBhdGliaWxpdHk= 79095 -eENG 79096 -X3Jld2FyZHM= 79097 -cmRm 79098 -QVBQTEU= 79099 -LWZlZA== 79100 -IGRlcGVuZGVk 79101 -LWdlbmVyYXRvcg== 79102 -KFByb2Nlc3M= 79103 -0LzQvtC2 79104 -IGRpc2NyZXBhbmN5 79105 -IHBob3NwaGF0ZQ== 79106 -TmV0d29ya2luZw== 79107 -6K6+6K6h5Zmo 79108 -KHJv 79109 -IGNvbmN1cnJlbmN5 79110 -CWF1dGg= 79111 -UGx1Zw== 79112 -QVRBTE9H 79113 -c3Viag== 79114 -L3RlYW0= 79115 -KGF2Zw== 79116 -b2tpbg== 79117 -IHBsZWRnZXM= 79118 -IGNvbGxhYm9yYXRvcnM= 79119 -IGVtYmFya2Vk 79120 -IERvY2g= 79121 -IERhaXJ5 79122 -Y29tcGV0aXRpb24= 79123 -IE11dGFibGVMaXN0 79124 -LXNldmVu 79125 -IGNvbmN1cnJlbnRseQ== 79126 -IFZpag== 79127 -IHJlc2V0dGluZw== 79128 -ZHBp 79129 -IHNsaXQ= 79130 -IFBPSU5URVI= 79131 -IENBUlQ= 79132 -LmRleA== 79133 -Y3Vsb3M= 79134 -X3BlcnNvbmFs 79135 -IGFuYWx5dGlj 79136 -I2NyZWF0ZQ== 79137 -X21lbWNweQ== 79138 -KExpc3ROb2Rl 79139 -X1RhZw== 79140 -IElycg== 79141 -Ij4nOw0K 79142 -U2hvcnRseQ== 79143 -LnRpcA== 79144 -XFs= 79145 -IFJlcHJlc2VudGF0aW9u 79146 -X0xJVEVSQUw= 79147 -LmNibw== 79148 -IEthcm5hdGFrYQ== 79149 -IENvbXBldGl0aXZl 79150 -IFJ1ZQ== 79151 -IHJ1bm9mZg== 79152 -IFNwZWxscw== 79153 -ZmNsb3Nl 79154 -Y2lz 79155 -RnJh 79156 -IHJlbW9yc2U= 79157 -IENvbG9nbmU= 79158 -IHJhbmdlcg== 79159 -IE1vcmc= 79160 -ZmlnaHRlcnM= 79161 -LlJlcXVlc3RQYXJhbQ== 79162 -Q29ycw== 79163 -IGRlbm90ZQ== 79164 -IGNob3Nlcw== 79165 -w6JuZA== 79166 -LnJlY3ljbGU= 79167 -IExvZ2lzdGlj 79168 -IERFQUQ= 79169 -LWxvYWRlZA== 79170 -IENsZWFycw== 79171 -IGtlbGw= 79172 -cmFwaGlj 79173 -IE1hbmU= 79174 -RU1CRVI= 79175 -IG1hc2tpbmc= 79176 -CWVkaXRvcg== 79177 -SGFsbG8= 79178 -Omxpc3Q= 79179 -IGV0aG4= 79180 -LXNlYXQ= 79181 -ICopWw== 79182 -IEdseQ== 79183 -IEFDUw== 79184 -CXN0YXQ= 79185 -L0NvbW1vbg== 79186 -IGRpc2d1aXNlZA== 79187 -RmluYW5jZQ== 79188 -IEVsZXBoYW50 79189 -dGVtcG9yYXJ5 79190 -IENhcmx5 79191 -IGNvY29z 79192 -IEp1ZGl0aA== 79193 -IHdyYXBwZXJz 79194 -IEx1bmFy 79195 -IHLDqWN1cA== 79196 -LXNldHVw 79197 -IHNpemFibGU= 79198 -ICAJIA== 79199 -Y2xhc3NpZmllcg== 79200 -IGZpZ3NpemU= 79201 -IG1hc3R1cg== 79202 -IOabtOaWsA== 79203 -IFJ3YW5kYQ== 79204 -KXQ= 79205 -IEN1cHM= 79206 -QXp1cmU= 79207 -KCl9LAo= 79208 -U1BBUkVOVA== 79209 -KGRpYw== 79210 -IFRleHRGb3JtRmllbGQ= 79211 -IGRlZm9ybQ== 79212 -IGRpcmVjY2nDs24= 79213 -IHlheg== 79214 -IGdsdWVk 79215 -IGF0cmF2w6lz 79216 -Y29mZmVl 79217 -IFVwZGF0aW5n 79218 -IENvbGxlZ2Vz 79219 -w6RsbHQ= 79220 -YW5kZWxpZXI= 79221 -IHNhbGly 79222 -IFNDQUxF 79223 -cWU= 79224 -6rO1 79225 -KHJlY2VpdmVy 79226 -bWRi 79227 -Im1hdGg= 79228 -aXNuYW4= 79229 -dGVsZWZvbmU= 79230 -UkVQT1JU 79231 -LmFkZE1vdXNlTGlzdGVuZXI= 79232 -ZHVlZA== 79233 -e31d 79234 -KCkpOg== 79235 -IHdvcmtpbmdz 79236 -fSk7CgoKCg== 79237 -IGNvbXBvbmVudFdpbGxNb3VudA== 79238 -U2VydmVycw== 79239 -X0NMT1NFRA== 79240 -SVpFUg== 79241 -IGJvb2I= 79242 -IENPTkNBVA== 79243 -IEhhcHBpbmVzcw== 79244 -IGNvbW11bmU= 79245 -eEFC 79246 -b3duZXJzaGlw 79247 -X05FQVI= 79248 -X0hBUkQ= 79249 -IFlB 79250 -bGlvbg== 79251 -IHNwaWVs 79252 -IHRhZ2dpbmc= 79253 -IGltbW9yYWw= 79254 -LWdyb3VuZA== 79255 -IHRodW5r 79256 -IGxvY3Vz 79257 -IExhdHZpYQ== 79258 -aXppb25p 79259 -Y2xhcnNpbXA= 79260 -IHBhdGllbnRseQ== 79261 -XEhhcw== 79262 -IHN1Ym9yZGluYXRl 79263 -IFdISUNI 79264 -ZW50aW9uUG9saWN5 79265 -IGRlcGxldGVk 79266 -RlNJWkU= 79267 -IFss 79268 -IEJpb2dyYXBoeQ== 79269 -IFNhbmRz 79270 -U0hBUkU= 79271 -Q2hhcnNldA== 79272 -LndyaXQ= 79273 -X1NVUw== 79274 -IE1vcmVubw== 79275 -IGJyb2Njb2xp 79276 -IFZY 79277 -YW1pY3M= 79278 -LkdldFVzZXI= 79279 -IENvbW1vZA== 79280 -LnNjaGVtZQ== 79281 -KHZz 79282 -IGFuYWxvZ291cw== 79283 -UHN5 79284 -PWxpbmU= 79285 -LnB1Ymxpc2hlcg== 79286 -IG9ud2FyZA== 79287 -0LXQutGB 79288 -IERlYWxlcnM= 79289 -IHRvQXJyYXk= 79290 -IENob2ljZXM= 79291 -0JTQvtCx0LDQsg== 79292 -IGRlZmF1bHRNZXNzYWdl 79293 -IGFncmVn 79294 -IENvbmNhdA== 79295 -SFY= 79296 -IENpcmN1bGFyUHJvZ3Jlc3M= 79297 -X3N2Yw== 79298 -VEFC 79299 -X2ZpbA== 79300 -Lk1hcFBhdGg= 79301 -emJ1cmc= 79302 -IGdldFByb2R1Y3Q= 79303 -IFZFUklGWQ== 79304 -Lk1vbmdv 79305 -IHB1bmRpdHM= 79306 -cHVsc2U= 79307 -bGljdGluZw== 79308 -Z2lhdGFu 79309 -IC4uLiI= 79310 -IGZpeg== 79311 -IGFudGlt 79312 -IENoYXR0 79313 -X1RZUEVERUY= 79314 -R3V5 79315 -CXRlc3Rz 79316 -IFNsb3Zlbmlh 79317 -IENvbW1hbmRMaW5l 79318 -IGJlbmVmaWNpYXRpb24= 79319 -IGJpbmRBY3Rpb25DcmVhdG9ycw== 79320 -TlRBWA== 79321 -LUNz 79322 -IGNoYXJpc21hdGlj 79323 -LmFsbG9j 79324 -X25m 79325 -IGFzc2F1bHRpbmc= 79326 -INGC0LDQsdC70LjRhg== 79327 -IGPDoWM= 79328 -IFNjcm9sbHM= 79329 -SEFT 79330 -eXl5eU1NZGQ= 79331 -IEdhbGU= 79332 -IFByb3plbnQ= 79333 -IFRob3JudG9u 79334 -ZGVhbGVy 79335 -IGV2aWN0aW9u 79336 -IGFuYWxl 79337 -4oCO 79338 -PSIo 79339 -IGVhZw== 79340 -KCcnKTsKCg== 79341 -IGNvbnRlbXBsYXRpbmc= 79342 -aHlw 79343 -YmVsdW0= 79344 -IEZpdHM= 79345 -IEV4YW1pbmVy 79346 -IEJ1Y2M= 79347 -IG1lbWJyYW5lcw== 79348 -IGJyaWxsaWFudGx5 79349 -IENlcmFtaWM= 79350 -w6h2ZQ== 79351 -IFBvdW5k 79352 -IHRyZWFzdXJ5 79353 -LicpOw0K 79354 -CXRj 79355 -ZWNha2U= 79356 -Q3VycmVudFVzZXI= 79357 -LmhhYmJv 79358 -IHRyZWFzb24= 79359 -IEZUQw== 79360 -TVVY 79361 -IG51bWJlcmluZw== 79362 -UklB 79363 -LS0pDQo= 79364 -IGJlaWdl 79365 -IEFydGVt 79366 -YmFzZXM= 79367 -X0JBTkQ= 79368 -IFBhdmVs 79369 -0YHRgtGA0YPQug== 79370 -dGhlZA== 79371 -X25icg== 79372 -INCx0LDQtw== 79373 -c2xpZGVVcA== 79374 -IFRheGk= 79375 -IGFxdWVs 79376 -IE1pc2NlbGxhbmVvdXM= 79377 -ZWx1 79378 -IGluc3VsYXRlZA== 79379 -IGFzc2V6 79380 -LkNvbmZpZ3VyZQ== 79381 -IHF1ZWxsYQ== 79382 -IHBhcmFzaXRlcw== 79383 -QXdheQ== 79384 -ZHVjaWJsZQ== 79385 -KCc9Jw== 79386 -IHZlcm8= 79387 -IFdhdGtpbnM= 79388 -IFNlcGFyYXRvcg== 79389 -YXBzZXM= 79390 -ZW52aXJvbm1lbnRz 79391 -IGFwcHJhaXNhbA== 79392 -cGF1c2Vk 79393 -X2RlYXRo 79394 -IHNpdHVhY2nDs24= 79395 -IGZyYXRlcm5pdHk= 79396 -IGluc2lzdGVuY2U= 79397 -X2NyeXB0bw== 79398 -QXR0cmliUG9pbnRlcg== 79399 -Il1dLAo= 79400 -IG94aWRhdGl2ZQ== 79401 -IG5ldXJvbmFs 79402 -IFFHcmFwaGljcw== 79403 -Ij4nLA== 79404 -IFNtaWxl 79405 -T2JqZWN0aXZl 79406 -IFNha3VyYQ== 79407 -Wk8= 79408 -YW1pZW50b3M= 79409 -LkxvY2FsRGF0ZVRpbWU= 79410 -L3VuaXQ= 79411 -LWZyZXF1ZW5jeQ== 79412 -LUNT 79413 -In07Cgo= 79414 -IHJlbGV2 79415 -QWxsb2NhdGlvbg== 79416 -JU0= 79417 -IER1c3Rpbg== 79418 -IHN3aXBlcg== 79419 -IE5hcmM= 79420 -dGF0dXM= 79421 -IGxvbmdpbmc= 79422 -IHRodWlzb250dmFuZ3N0 79423 -IGNvbW1vZG8= 79424 -IEFEQQ== 79425 -aW11 79426 -X2ZvcnVt 79427 -YW5naQ== 79428 -CUFwcGxpY2F0aW9u 79429 -W2Zyb20= 79430 -IEJldGhlc2Rh 79431 -b3Ryb3BpYw== 79432 -IE1VQ0g= 79433 -IHByZWRpYw== 79434 -ZmlsbWU= 79435 -KGdyYW1tYXI= 79436 -KEFQUA== 79437 -IEN1cmw= 79438 -IHNob3J0aGFuZA== 79439 -YWZmaWxpYXRl 79440 -XSoq 79441 -X250aA== 79442 -aWFiaWxpdHk= 79443 -Ym9tYg== 79444 -WVQ= 79445 -KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 79446 -IEJpY3ljbGU= 79447 -aW1hdGluZw== 79448 -Lm5paQ== 79449 -IEthcmE= 79450 -YXNrYW4= 79451 -cmVhY3RzdHJhcA== 79452 -IHdsYW4= 79453 -b2dyYXBoZXJz 79454 -CSANCg== 79455 -cGFnaW5hdG9y 79456 -aWhhbm5h 79457 -IG1hdGNodXBz 79458 -X1BBRERJTkc= 79459 -X3JlZ2lzdGVycw== 79460 -eXRl 79461 -IHByaWNleQ== 79462 -IGZvb3Ro 79463 -IEh1Y2s= 79464 -UEFSVE1FTlQ= 79465 -IHByb2hpYml0aW5n 79466 -LmlzRGVidWdFbmFibGVk 79467 -4KS4 79468 -bGVpbg== 79469 -PXJlcw== 79470 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 79471 -ZGRs 79472 -bXBy 79473 -IOqwmQ== 79474 -IFdBTEw= 79475 -IHJldm9sdmVz 79476 -IFBFUkY= 79477 -KTt9 79478 -IFRvYnk= 79479 -Ly4uLw== 79480 -IGthbw== 79481 -IGZvcmVjYXN0aW5n 79482 -X0NvbnRlbnQ= 79483 -IH0pKSwK 79484 -cG9ybm8= 79485 -bGVhZGVycw== 79486 -LWhvb2tz 79487 -aXN0cmlidXRvcg== 79488 -L3N0b3J5 79489 -CWxpbmVz 79490 -LXJlcGx5 79491 -IGFkcmVuYWxpbmU= 79492 -Rmxvd0xheW91dA== 79493 -LnJvdXRpbmc= 79494 -CXRpbWVvdXQ= 79495 -IHJhaWRlZA== 79496 -CURE 79497 -IGRpc2RhaW4= 79498 -Y29uc2lzdGVudA== 79499 -Z2Vpc3Q= 79500 -KCI6Lw== 79501 -KHN0YXRlcw== 79502 -IEhJVA== 79503 -LVJheQ== 79504 -LWhlYWx0aA== 79505 -IC8vLQ== 79506 -dGVtZW50 79507 -Lm5hdmlnYXRlVG8= 79508 -IGJlbmNoZXM= 79509 -ZXdpbmc= 79510 -ZW56aGVu 79511 -LXNwbGl0 79512 -UmVqZWN0 79513 -IHB5bGFi 79514 -IGZsYXNobGlnaHQ= 79515 -IGluaXRpYXRpbmc= 79516 -IE9FQ0Q= 79517 -IGVudHJlZ2E= 79518 -TmF0dXJl 79519 -Lm9yYW5nZQ== 79520 -IMO6bHRpbW9z 79521 -IGVjcw== 79522 -LmhvdmVy 79523 -IGRlbHV4ZQ== 79524 -Um9nZXI= 79525 -IFRpYw== 79526 -IixfXw== 79527 -IHBsYWNlaG9sZGVycw== 79528 -IHNwYXduaW5n 79529 -IG51cnR1cmU= 79530 -IGV4Y2hhbmdpbmc= 79531 -Q3JlYXRlRGF0ZQ== 79532 -IGxhbWlu 79533 -IFNlbWljb25kdWN0b3I= 79534 -ICovCgoKCg== 79535 -IGbDuHJzdGU= 79536 -IGluaXRpYWxz 79537 -IHByb3ZlcmI= 79538 -IEFjdHJlc3M= 79539 -Q29uY2F0 79540 -IE5pY29sYQ== 79541 -LXNob3BwaW5n 79542 -aXZpdMOg 79543 -aXRpYW4= 79544 -IFdlcnQ= 79545 -LkFkZFNjb3BlZA== 79546 -IHNhbGVzbWFu 79547 -Ym9z 79548 -IEZlcnJ5 79549 -Q0VOVEVS 79550 -bW9kZWxv 79551 -IFJvZQ== 79552 -IElzbGFuZGVycw== 79553 -dXBlcnRpbm8= 79554 -RGVjbGFyZQ== 79555 -IHZvd2Vscw== 79556 -IGJveGVy 79557 -KHRvb2xiYXI= 79558 -IGhhbGZ0aW1l 79559 -bmlu 79560 -IEJyb29rZQ== 79561 -IFZlcw== 79562 -0LvQsNGC 79563 -IG1vdGl2bw== 79564 -cHJvdGVpbg== 79565 -a3Vz 79566 -YnVzeQ== 79567 -IHN0cmluZ1ZhbHVl 79568 -CU15 79569 -TnV0 79570 -dXp6aQ== 79571 -IHNleg== 79572 -IG9sZHM= 79573 -IG1ldGh5bA== 79574 -IGLDvA== 79575 -aGliYQ== 79576 -IEluc3BpcmF0aW9u 79577 -IGF3YWl0ZWQ= 79578 -QnJ1Y2U= 79579 -QkFMTA== 79580 -IFRSWQ== 79581 -LWxpdGU= 79582 -IHVuZGVyZXN0aW1hdGU= 79583 -CXJ2 79584 -Lm1vdg== 79585 -IGhpc3TDsw== 79586 -IEVyaWU= 79587 -Y25hbWU= 79588 -L2Nvbm5lY3Q= 79589 -Y29uZmVyZW5jZQ== 79590 -X3RyYWl0 79591 -IGt2aW5kZQ== 79592 -IEludm9jYXRpb24= 79593 -IERhdGVUaW1lT2Zmc2V0 79594 -d2VjaGF0 79595 -Q0VP 79596 -IExpYnlhbg== 79597 -LmNhcGl0YWxpemU= 79598 -IGdyYWNlZnVsbHk= 79599 -IHJlZWxz 79600 -aW5jcmVhc2U= 79601 -Lm1heGNkbg== 79602 -ZmF2b3JpdGVz 79603 -SVRFRA== 79604 -PFNjYWxhcg== 79605 -LkZldGNo 79606 -IHN1c3BpY2lvbnM= 79607 -W01BWE4= 79608 -X1RSQU5TQUNUSU9O 79609 -IGN5bGluZHJpY2Fs 79610 -Lm5leHRFbGVtZW50 79611 -IG1vcnBob2xvZ3k= 79612 -IENlZA== 79613 -IGNuYW1l 79614 -KHJhd1ZhbHVl 79615 -V2Fsa2luZw== 79616 -TG9hZHM= 79617 -X0FMSUdOTUVOVA== 79618 -X1JPVU5E 79619 -IFJPQ0s= 79620 -Y2x1c3RlcnM= 79621 -Img= 79622 -dWV1cg== 79623 -cGxhbnM= 79624 -IGF0aGVpc3Rz 79625 -IHZhdA== 79626 -PSJfXw== 79627 -YXdhaA== 79628 -ZXJ2YXRpdmVz 79629 -IGZpbmRPbmU= 79630 -IG5vdGVib29rcw== 79631 -IFRUTA== 79632 -LkdldEFzeW5j 79633 -IG3DvG5jaGVu 79634 -bUFo 79635 -YnJ0Yw== 79636 -X1BZ 79637 -QnVpbGRlckludGVyZmFjZQ== 79638 -CWdiYw== 79639 -IGJsYW5rcw== 79640 -IGTDqW0= 79641 -UmVjdXJzaXZl 79642 -Lk1hbnlUb01hbnlGaWVsZA== 79643 -X1BBUlNFUg== 79644 -IGVuZGVhdm9ycw== 79645 -IGRyaWI= 79646 -X3BocA== 79647 -IGF1dG9tb2JpbGVz 79648 -bG9pdA== 79649 -IE9ydGl6 79650 -IFVE 79651 -KGRBdEE= 79652 -IE1pdHN1YmlzaGk= 79653 -QXR0cmlidXRlVmFsdWU= 79654 -IHBvYXRl 79655 -55u45YWz 79656 -IGNhdmFscnk= 79657 -Lk1hdGNoZXJz 79658 -IGluZ3Jlc3M= 79659 -IEplaG92YWg= 79660 -CXNlcQ== 79661 -X3N0cmVldA== 79662 -IFNvZmlh 79663 -IHNjcm9sbHM= 79664 -dmluY2Vz 79665 -ZWxlY3Ryb25pY3M= 79666 -XHBhcmFt 79667 -IHplbmQ= 79668 -IHNraW0= 79669 -LnBpeA== 79670 -ZW5r 79671 -X2FyZWFz 79672 -IEJvaXNl 79673 -LXZhbGlkYXRvcg== 79674 -IHVuZWFydGg= 79675 -b2ZpbG0= 79676 -IEJDRQ== 79677 -b3Zza3k= 79678 -IExldmVy 79679 -IHBvbGljZW1hbg== 79680 -IG1pZXM= 79681 -IFBvcnRyYWl0 79682 -IHBvdGlvbnM= 79683 -X21vdA== 79684 -bWFzc2FnZQ== 79685 -0LXQvdGL 79686 -IGN1ZA== 79687 -IG1hbnVzY3JpcHRz 79688 -Y29udGludW91cw== 79689 -LnRj 79690 -w7x6 79691 -IEZyZWV6ZQ== 79692 -Xzoq 79693 -Lmht 79694 -IENTUkY= 79695 -IE3DpGRjaGVu 79696 -LXBlZXI= 79697 -IHB1dFN0ckxu 79698 -IGltc2hvdw== 79699 -IEB7JA== 79700 -IEJhdWVy 79701 -KHRvbHVh 79702 -IHdyb3VnaHQ= 79703 -IEdpYW4= 79704 -IMO2bg== 79705 -ZnVuZw== 79706 -QnV0dG9uVGl0bGVz 79707 -fSkiLA== 79708 -IE11cmRvY2g= 79709 -S1c= 79710 -IFJlcG9ydGVk 79711 -c2ll 79712 -IG1laWxsZXVycw== 79713 -IEthZXBlcm5pY2s= 79714 -IGRzcA== 79715 -IEV2ZXJ5ZGF5 79716 -cmVuZHM= 79717 -IENvbmNl 79718 -IGluY29udHI= 79719 -LnJlbW92ZUF0dHJpYnV0ZQ== 79720 -44G+44GX44Gf 79721 -IHJldw== 79722 -IFByZXNlbmNl 79723 -L2dpbg== 79724 -LkNsYWltcw== 79725 -CXNs 79726 -RHJhZ2dpbmc= 79727 -IHNwcmVl 79728 -IGFjdHVhbGl6YXI= 79729 -IG5vc3M= 79730 -IGxpZmVzdHlsZXM= 79731 -O2M= 79732 -VURHRQ== 79733 -SW5NaWxsaXM= 79734 -IGl0aw== 79735 -YWJieQ== 79736 -KHBh 79737 -aXNzZW50 79738 -IFByZXNpZGVudHM= 79739 -IEhleGF0cmlnZXNpbWFs 79740 -ZWNpZGVk 79741 -KHRleA== 79742 -IGNyb3duZWQ= 79743 -UGhpbGlw 79744 -IFNhcms= 79745 -IEFkZGl0aW9u 79746 -IENvbGJlcnQ= 79747 -IEdMRVM= 79748 -IFFMaW5lRWRpdA== 79749 -IGRyYWlucw== 79750 -IHNvcnRPcmRlcg== 79751 -ZXNjb3J0 79752 -VGVk 79753 -IG1hbmlmZXN0ZWQ= 79754 -LnZhcmlhbnQ= 79755 -IFJFRkVSRU5DRVM= 79756 -KGdj 79757 -L3sk 79758 -b2N5dGU= 79759 -IG9ybmFtZW50 79760 -IGJvb2tzdG9yZQ== 79761 -SG9s 79762 -IFZhbGw= 79763 -Lycp 79764 -YWNhaw== 79765 -IE5hdkJhcg== 79766 -IG55ZQ== 79767 -X0RlYw== 79768 -b2x2aW1lbnRv 79769 -TVJJ 79770 -IGhvb3A= 79771 -ICAgCiAgICAK 79772 -IFBvc3Rpbmc= 79773 -IG91dGxpbmluZw== 79774 -YWdhc2Nhcg== 79775 -LmJyZWFrcG9pbnRz 79776 -Y2F0aWQ= 79777 -X3RyaWdnZXJlZA== 79778 -IHJ1bm5hYmxl 79779 -L3RydW5r 79780 -LWNoYWly 79781 -IGJhaXNlcg== 79782 -ZmFjaWxpdHk= 79783 -IHBvbGxlbg== 79784 -6Z+z 79785 -IFtbIg== 79786 -IENHU2l6ZU1ha2U= 79787 -IGFzc2FpbA== 79788 -IEF0aGVuYQ== 79789 -IEFkZGljdGlvbg== 79790 -aWxhbmQ= 79791 -O2Jy 79792 -LktleWJvYXJk 79793 -X2Zt 79794 -QWNl 79795 -IFJFUQ== 79796 -IE5ld2VzdA== 79797 -Oy4= 79798 -IE1BREU= 79799 -c2V0VGltZW91dA== 79800 -U2VydmxldENvbnRleHQ= 79801 -CQkJCQkgICAgICAg 79802 -IEx1cA== 79803 -LXJldmlld2Vk 79804 -IEFuYWx5emVy 79805 -Lk5hTg== 79806 -dXR1cmE= 79807 -R2VvbQ== 79808 -eW1lcw== 79809 -X3Npbg== 79810 -IHRydXN0ZWVz 79811 -Ly89PT0= 79812 -IGFkbWl0dGVkbHk= 79813 -IGFrbw== 79814 -IFVFRkE= 79815 -X2hlcm8= 79816 -R2l0aHVi 79817 -X2VzdGltYXRl 79818 -IGNvcnJvYm9y 79819 -ZW50aWZ1bA== 79820 -IFN0ZWVyaW5n 79821 -IE1pdGFy 79822 -IFBpcGVz 79823 -IGvDpQ== 79824 -X3NlYXNvbg== 79825 -IEJDSFA= 79826 -L3NvZnR3YXJl 79827 -bmV0dGU= 79828 -KiIs 79829 -dW5kcmE= 79830 -IGdldFJlcXVlc3Q= 79831 -LkJ1ZmZlcmVk 79832 -ZmVybg== 79833 -TWFyaW8= 79834 -IGRpc3BlcnM= 79835 -X2NhdGVnb3JpYQ== 79836 -IGVuZGxlc3NseQ== 79837 -Z3VhcmRz 79838 -CWF0b21pYw== 79839 -c2NvcGVk 79840 -IHVuZG9uZQ== 79841 -U0hPUA== 79842 -IFRvcmNo 79843 -IEhhc3Rpbmdz 79844 -IEZJTEVT 79845 -X1NhdmU= 79846 -V2l0aE1hbnk= 79847 -V2lz 79848 -IGludGVuc2lmaWVk 79849 -LmFyZ3VtZW50 79850 -IEFwaVNlcnZpY2U= 79851 -IEpTSW1wb3J0 79852 -ZWtp 79853 -SW5zdXJhbmNl 79854 -c3R5 79855 -LmRzbA== 79856 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 79857 -bHRyZQ== 79858 -U0VH 79859 -RFJBTQ== 79860 -LWJsb2NraW5n 79861 -0L3QtQ== 79862 -cGlyaW5n 79863 -IFBSRVM= 79864 -IEZhY2g= 79865 -IHNhcmM= 79866 -IFNNRQ== 79867 -IEVsZW0= 79868 -IENhbGlmb3Ju 79869 -VW5zYWZl 79870 -IENvbXBvc2Vy 79871 -KGRlcA== 79872 -IEF0dGVuZA== 79873 -ICopKCg= 79874 -IHRlYXNlZA== 79875 -IEFUSQ== 79876 -KHBt 79877 -ICIoXDw= 79878 -J10r 79879 -IHNlY3Rhcmlhbg== 79880 -IFBoYXJtYQ== 79881 -RUk= 79882 -CVRva2VuTmFtZUlkZW50aWZpZXI= 79883 -w6d1 79884 -IGF1Z21lbnRhdGlvbg== 79885 -IHNhamE= 79886 -IGNvbG9yZQ== 79887 -ZGVhZGxpbmU= 79888 -LklURU0= 79889 -IFJpeQ== 79890 -bWFhbA== 79891 -CWNsaWNr 79892 -UGVybWFuZW50 79893 -SG91c3Rvbg== 79894 -UmVzcG9uc2l2ZQ== 79895 -IEVyZ2Vibg== 79896 -ICIlIg== 79897 -LnRvT2JqZWN0 79898 -CXBpZA== 79899 -LlN1Ykl0ZW1z 79900 -IFsr 79901 -IGZ1bmd1cw== 79902 -IGJyb2NodXJl 79903 -IEFwcHJveGltYXRlbHk= 79904 -IG1paw== 79905 -dmVsb3Blcg== 79906 -IHBhZ2FtZW50bw== 79907 -5Yqo55Sf5oiQ 79908 -IGN5dA== 79909 -IFRlbXBs 79910 -ZW5pYWJsZQ== 79911 -IENvbmFu 79912 -IHNldGJhY2s= 79913 -b2JsaW5z 79914 -IE5UTg== 79915 -b3NzYWw= 79916 -VkVSQk9TRQ== 79917 -LmJpbw== 79918 -IMWe 79919 -4buf 79920 -IEdyaXA= 79921 -PCo= 79922 -VFJJRVM= 79923 -LmNob29zZQ== 79924 -UGhvZW5peA== 79925 -IHByb3ZpbmNpYQ== 79926 -TUZMT0FU 79927 -Q2Fycw== 79928 -IHJldHJvc3BlY3RpdmU= 79929 -IGFnb255 79930 -IGxsZW4= 79931 -IGJ1bXBlZA== 79932 -eWxhdGlvbg== 79933 -IHdhcnRv 79934 -IHRvZGRsZXJz 79935 -bGF2 79936 -KHBhdGllbnQ= 79937 -ICgpLT4= 79938 -Y2xj 79939 -IG9uQWN0aXZpdHlSZXN1bHQ= 79940 -IGVtdWxhdGlvbg== 79941 -IGJ1bGxk 79942 -X0FVVEhPUg== 79943 -Pk8= 79944 -L3F1 79945 -IMK2 79946 -CWhy 79947 -c3RkQ2xhc3M= 79948 -IHNwYWNlcg== 79949 -VHJhbnNsYXRlZg== 79950 -LmFkag== 79951 -Oml0ZW0= 79952 -IGV4aGF1c3Rpbmc= 79953 -cGx4 79954 -IHJldml0YWw= 79955 -xZtuaWU= 79956 -IGNhbGlmb3JuaWE= 79957 -c2V0U3RhdGU= 79958 -L3RhYg== 79959 -aW5kc2lnaHQ= 79960 -X0xldmVs 79961 -aW1pbGFy 79962 -Lm5hdmlnYXRvcg== 79963 -IHRlbXBlcmFtZW50 79964 -IGRpZsOtYw== 79965 -IGluZXhwZXJpZW5jZWQ= 79966 -IGltcHJpbnQ= 79967 -IFJlc2lzdA== 79968 -X0ZPTExPVw== 79969 -IFJldHJ5 79970 -IGVuZ2FnZW1lbnRz 79971 -Q2FuQmVDb252ZXJ0ZWQ= 79972 -IHNpbmdsZWQ= 79973 -Lmljb25z 79974 -IGNvbmRvbXM= 79975 -IEZlYXRoZXI= 79976 -bGVybmVu 79977 -KWI= 79978 -IE5wZ3NxbA== 79979 -IENvbnNvbGlk 79980 -cGVrdA== 79981 -56uv 79982 -c3RyaW5nVmFsdWU= 79983 -R2Ft 79984 -IFNpbmFp 79985 -IE9iamVjdFR5cGU= 79986 -X2lucA== 79987 -IHBhcnRp 79988 -IFdhdGVycHJvb2Y= 79989 -IGNvbGxpZGVk 79990 -IGFpcnM= 79991 -L3dvcmxk 79992 -L1NlYXJjaA== 79993 -X3N5bnRheA== 79994 -xZ9p 79995 -X2Fubm90YXRpb25z 79996 -IFRhY28= 79997 -TEFU 79998 -IE9wY29kZQ== 79999 -44CC4oCdCgo= 80000 -IGxlYXNo 80001 -IEFsaWNpYQ== 80002 -77yM6buY6K6k 80003 -IFRTQQ== 80004 -IGhvdHRlcg== 80005 -X0hhbmRsZVR5cGVEZWY= 80006 -Z2luYXM= 80007 -IGluZGlmZmVyZW50 80008 -Q3VzdG9tTGFiZWw= 80009 -kZA= 80010 -b2R5bmFtaWNz 80011 -T25VaVRocmVhZA== 80012 -IENhcmE= 80013 -LmRldmljZXM= 80014 -IEZvcmVpZ25LZXk= 80015 -PicpOw0K 80016 -LmJ1dA== 80017 -LnRpZg== 80018 -IOaWsA== 80019 -IE9rSHR0cENsaWVudA== 80020 -KFRleHR1cmU= 80021 -LlNPQ0s= 80022 -KGluc3Ry 80023 -bWlzdA== 80024 -VW5uYW1lZA== 80025 -U3I= 80026 -Km51bQ== 80027 -KE5VTQ== 80028 -KioqKioKCg== 80029 -L2hlbHA= 80030 -YmVlbGQ= 80031 -LmFkanVzdA== 80032 -X1Bhcm1z 80033 -X0FOR0xF 80034 -VFJFRQ== 80035 -IGVzdHVkaW8= 80036 -d29ya3NoZWV0 80037 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 80038 -QWR2aWNl 80039 -w7bDn2U= 80040 -bkVudGVy 80041 -YcSH 80042 -IGFnZWluZw== 80043 -IEt1cmRpc3Rhbg== 80044 -X1JUQw== 80045 -YmFua3M= 80046 -LlVS 80047 -IGluY2FybmF0aW9u 80048 -IGdsYW1vdXI= 80049 -IOOCuQ== 80050 -IGltcGVyaWFsaXNt 80051 -7J6F64uI64uk 80052 -IHNpZGVsaW5l 80053 -LkFycmF5QWRhcHRlcg== 80054 -IyMjIyMjCg== 80055 -IFN5cmlhbnM= 80056 -IEF0dGVuZGFuY2U= 80057 -LWVzcXVl 80058 -IGdyZW5hZGVz 80059 -X3Fvcw== 80060 -T1ND 80061 -X2Rvb3I= 80062 -LkNhcA== 80063 -REFM 80064 -IGFtYnVzaA== 80065 -CWVz 80066 -VG9Kc29u 80067 -TWFudWZhY3Q= 80068 -RW1lcmdlbmN5 80069 -IFFGaWxl 80070 -IOWV 80071 -CUxQ 80072 -5pCc57Si 80073 -IEdhcmxhbmQ= 80074 -LmNvbm5lY3Rpb25z 80075 -LlJlYWRGaWxl 80076 -IEh3eQ== 80077 -4oCUZXZlbg== 80078 -eERF 80079 -IG5vdXZlbGxlcw== 80080 -IEh1c3M= 80081 -RGVwb3NpdA== 80082 -X2ZvcmVpZ24= 80083 -YWJhag== 80084 -IFBveg== 80085 -ZGJ1cw== 80086 -IGlvZA== 80087 -w5cKCg== 80088 -IENoZWVycw== 80089 -SmVzc2ljYQ== 80090 -IHNhaXNvbg== 80091 -IFB0eQ== 80092 -Ij48IS0t 80093 -aW5vYQ== 80094 -ZXhjbHVkaW5n 80095 -IGJpdHRlcm5lc3M= 80096 -dWVsaW5n 80097 -UHJvdGVjdGlvbg== 80098 -IEJlcmdlbg== 80099 -CQkJIAo= 80100 -QkVM 80101 -IFRvYmlhcw== 80102 -IHVwZA== 80103 -67KE 80104 -IGZvbGlhZ2U= 80105 -X1BVUg== 80106 -IEFkdm9jYXRl 80107 -IG9uUmVxdWVzdA== 80108 -LnBhcnRpdGlvbg== 80109 -IERldmVsb3BlZA== 80110 -IGNyaWI= 80111 -0YHQutC4 80112 -dm91Y2hlcg== 80113 -IEludGVyc2VjdGlvbg== 80114 -IG5pZWNl 80115 -IGxr 80116 -IENhdWN1cw== 80117 -KFsNCg== 80118 -IERldGVjdG9y 80119 -L2xn 80120 -IEhlZGdl 80121 -IHNsdWdn 80122 -YW5nc3Ryb20= 80123 -IENvbnRyb2xsZXJCYXNl 80124 -CXl5 80125 -LnBw 80126 -IEtsaW5n 80127 -IExUUw== 80128 -4oaT 80129 -YXJyYQ== 80130 -Z2V0SlNPTg== 80131 -X3dlYnNpdGU= 80132 -IGlkaW90cw== 80133 -IE1lZ2hhbg== 80134 -QnV0dG9uTW9kdWxl 80135 -ICU+ 80136 -IHByb2plY3RpbGVz 80137 -c3dvcmQ= 80138 -ICAgIAkJCQkJ 80139 -IGFzc2Vz 80140 -IFN1Y2hl 80141 -IGtlZA== 80142 -csOhZg== 80143 -IHNhcsOg 80144 -TEVuY29kZXI= 80145 -UkFORA== 80146 -IFNvbWVob3c= 80147 -IFNhbGE= 80148 -IG11bHRpbQ== 80149 -IG51bVJvd3M= 80150 -IFJvY2tpZXM= 80151 -IHhk 80152 -IGRpc3Byb3BvcnRpb25hdGU= 80153 -CVJUTEk= 80154 -CVVSTA== 80155 -YWdsaQ== 80156 -IFN1YkxPYmplY3Q= 80157 -IEdyYXZlcw== 80158 -X3JlZ3VsYXJpemVy 80159 -X2NoYXJhY3RlcnM= 80160 -LmFuYWx5dGljcw== 80161 -Lm1vZHM= 80162 -IGltcHJvdmlz 80163 -IEJsb2NrUG9z 80164 -X2luc3RhbGxlZA== 80165 -X0NPTlRJTlVF 80166 -L2Rvd24= 80167 -U09D 80168 -LmFwaVVybA== 80169 -LlVzZXJTZXJ2aWNl 80170 -VHJlZXM= 80171 -5oqV 80172 -X292ZXJmbG93 80173 -YXVzYWw= 80174 -Ym94ZWQ= 80175 -Jgo= 80176 -IEphY3F1 80177 -X3Vzcg== 80178 -SU5UUg== 80179 -IHNpZ25hZ2U= 80180 -IGNvY2g= 80181 -Tm9ybWFsaXplZA== 80182 -CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo= 80183 -IHN1c3RhaW5pbmc= 80184 -IFNjcmFw 80185 -cHJhYWs= 80186 -LWF2YXRhcg== 80187 -LndlYnNpdGU= 80188 -KGd1aQ== 80189 -PXJlc3BvbnNl 80190 -KG9wZXJhdG9y 80191 -IGVmZm9ydGxlc3M= 80192 -IEFjdGlvbkJhcg== 80193 -RkZF 80194 -56uL 80195 -CVJlZ2lzdGVy 80196 -QVJTRQ== 80197 -KW4= 80198 -IE1PU1Q= 80199 -X1NQUg== 80200 -X0NISVA= 80201 -YXNk 80202 -IHRvcExlZnQ= 80203 -IFR4dA== 80204 -0LDQttC0 80205 -LlZvbHVtZQ== 80206 -IGlubGV0 80207 -IGZyYWN0dXJlZA== 80208 -IExvbmdpdHVkZQ== 80209 -IERyYW0= 80210 -LkNvbm5lY3Rpb25TdHJpbmdz 80211 -YWJlZQ== 80212 -cGVyYXRl 80213 -am5p 80214 -YHQ= 80215 -ZmluZ2Vy 80216 -IEplc3NpZQ== 80217 -LGxs 80218 -IFJ1ZHk= 80219 -IGdlbmVyb3VzbHk= 80220 -X0NPTlZFUlQ= 80221 -IGVpdXNtb2Q= 80222 -IERhaQ== 80223 -aW1hZ2lu 80224 -IEdPYmplY3Q= 80225 -IMSRw6M= 80226 -aWRpb3Vz 80227 -cmlkZ2Vk 80228 -IHNvcHI= 80229 -0LvQsNC0 80230 -IHN0aXRjaGluZw== 80231 -IGtyYg== 80232 -CiAgICAgICAgCiAgICAgICAgCg== 80233 -IGxhdmlzaA== 80234 -IENpdg== 80235 -U3RhcnRFbGVtZW50 80236 -IExvbA== 80237 -CXV0aWw= 80238 -J11dLg== 80239 -IE1hbGF5 80240 -IC4NCg== 80241 -548= 80242 -X0ludm9rZQ== 80243 -aXZpc3Q= 80244 -RGVwZW5kaW5n 80245 -KSI7DQo= 80246 -IHRvZnU= 80247 -IE1DUA== 80248 -IHN0b2NraW5n 80249 -IGNhdGhlZHJhbA== 80250 -IHF1YWRyYXRpYw== 80251 -YWxlemE= 80252 -Lm1vdmVUb0ZpcnN0 80253 -Q29sb3JCcnVzaA== 80254 -IEVyZWN0 80255 -IFJDUw== 80256 -OmJlZm9yZQ== 80257 -PW5vZGU= 80258 -IHByb2Jsw6htZQ== 80259 -X3Jobw== 80260 -IHN2ZW5zaw== 80261 -Um95 80262 -YmFzZVBhdGg= 80263 -IGtvbmQ= 80264 -INC10YHRgtGM 80265 -Z2V0U2luZ2xldG9u 80266 -IERTTQ== 80267 -SWFu 80268 -IGh1bnRlZA== 80269 -IFRlcnJhY2U= 80270 -IGNoaWxkY2FyZQ== 80271 -IGNvZWZmcw== 80272 -IGdyYWRlZA== 80273 -IEx1Y2lh 80274 -IGpzb25PYmo= 80275 -YWJsZU9iamVjdA== 80276 -VmF1bHQ= 80277 -w61zdGljYQ== 80278 -X3BhZ28= 80279 -X1BG 80280 -YW5kcmU= 80281 -IEFuYXRvbXk= 80282 -LkpDb21ib0JveA== 80283 -b3VyZQ== 80284 -IGdlbm90eXBl 80285 -YmVuY2htYXJr 80286 -IGJhaWs= 80287 -IFF1w6liZWM= 80288 -KCkpDQoNCg== 80289 -IGt1bm5l 80290 -IFBvc3NpYmx5 80291 -IEJlaXNwaWVs 80292 -IGNvbmRvbGVuY2Vz 80293 -PXF1ZXJ5 80294 -IHbDtQ== 80295 -IG51ZXZhcw== 80296 -IEFwb2NhbHlwc2U= 80297 -dmVjdGlvbg== 80298 -CXNwcml0ZQ== 80299 -bGV2YXRvcg== 80300 -LiJdCg== 80301 -Z2V0TmV4dA== 80302 -KFJlZ2lzdGVy 80303 -IHVuc3Vi 80304 -dHJlZXZpZXc= 80305 -Tm9kZUlk 80306 -IOyK 80307 -JikK 80308 -Zmx0 80309 -IGhvdHNwb3Q= 80310 -IGdhc3Ryb2ludGVzdGluYWw= 80311 -ZmlnY2FwdGlvbg== 80312 -b3dlcmVk 80313 -IENzcw== 80314 -X3Jvcw== 80315 -X3NjYWxpbmc= 80316 -IGVkaXRhcg== 80317 -J11dKTsK 80318 -Lm5lZw== 80319 -IGZ1dHVyaXN0aWM= 80320 -IHN0YXRh 80321 -dWN0b3I= 80322 -VUxBVEU= 80323 -IHfFgg== 80324 -LWNoYXJhY3Rlcg== 80325 -ICAKCgo= 80326 -IEJlYXU= 80327 -IHBlcm1hbGluaw== 80328 -Qnl0ZUJ1ZmZlcg== 80329 -IGRpY3RhdGVz 80330 -IE1MQQ== 80331 -X0xvZ2lu 80332 -Q29uZGl0aW9uYWw= 80333 -U1lN 80334 -QXJyYW5nZQ== 80335 -IFN0b2Nrcw== 80336 -IG1lYXNsZXM= 80337 -4KSk 80338 -RW5jcnlwdGlvbg== 80339 -IEVudGlyZQ== 80340 -IG1pbk9jY3Vycw== 80341 -IGh1Z3M= 80342 -L3dpbmRvdw== 80343 -CXByb3A= 80344 -PSQoKA== 80345 -IFVDUw== 80346 -IEZpcg== 80347 -LkNsb2Nr 80348 -LWRlc2t0b3A= 80349 -IG1hbGZvcm1lZA== 80350 -IEFiZXJkZWVu 80351 -IMOF 80352 -IFJvYWRz 80353 -IEJlaGF2aW91cg== 80354 -KCkn 80355 -5bGe5oCn 80356 -LkNvbXBhcmF0b3I= 80357 -X21v 80358 -X0lPUw== 80359 -IE9yaW9sZXM= 80360 -Lkxvb2t1cA== 80361 -IGZzZWVr 80362 -X0lC 80363 -L3N0YXI= 80364 -Kzwv 80365 -X0Rlc3Ryb3k= 80366 -LXRyYQ== 80367 -KCcuJyk= 80368 -IEZvckNhbkJlQ29udmVydGVk 80369 -IEZvckNhbkJlQ29udmVydGVkVG9G 80370 -IEZvckNhbkJlQ29udmVydGVkVG9Gb3JlYWNo 80371 -IEFhZA== 80372 -IGFpcnN0cmlrZXM= 80373 -aXNPaw== 80374 -IGZlZGVyYXRpb24= 80375 -IExhYnJhZG9y 80376 -X2xhdW5jaGVy 80377 -YWxvZ3k= 80378 -Pj4oKTsKCg== 80379 -IEp1Yg== 80380 -dXRy 80381 -aXN0aW5ndWlzaGVk 80382 -YWJhbnQ= 80383 -UmVnaW9ucw== 80384 -L2hlbHBlcg== 80385 -X2xpc3Rlbg== 80386 -CVRvYXN0 80387 -IEZpbGVNYW5hZ2Vy 80388 -aXRvcmlz 80389 -IGVsZWN0cm9kZXM= 80390 -R1JBREU= 80391 -IGJlZ2dlZA== 80392 -IFBsYXRlcw== 80393 -YWZvbmU= 80394 -ISEhCg== 80395 -IGVieA== 80396 -IGRlZmF1bHRQcm9wcw== 80397 -IGNvbXBhcmVUbw== 80398 -IFNDQw== 80399 -LmV4dGVudA== 80400 -YXV0b3M= 80401 -IOyW 80402 -IFRvbGtpZW4= 80403 -OjoqOwoK 80404 -Kics 80405 -LmRvY3VtZW50cw== 80406 -c2luZw== 80407 -PUJpdENvbnZlcnRlcg== 80408 -IEtyaXNobmE= 80409 -IHBsYWlzaXI= 80410 -IGJ1Z2d5 80411 -IHJlZ3VsYXRlcw== 80412 -IGZyaWRheQ== 80413 -IGNvbXBsZXRlbmVzcw== 80414 -IGF1ZGlibGU= 80415 -IFJlY29nbml0aW9uRXhjZXB0aW9u 80416 -IHNoZWRkaW5n 80417 -W10pewo= 80418 -KGJhbGw= 80419 -IENoYXRDb2xvcg== 80420 -KENvZGU= 80421 -KCksCgo= 80422 -IHRlcnRpYXJ5 80423 -IFNJREU= 80424 -KEpTT05PYmplY3Q= 80425 -pOaWrQ== 80426 -UmVtYXJrcw== 80427 -IGxpc3RCb3g= 80428 -LmltYWdlVXJs 80429 -IGRlbGF5aW5n 80430 -IHNvY2lvZWNvbm9taWM= 80431 -Lmxw 80432 -PE15 80433 -Lm9uU3RhcnQ= 80434 -IFNjb3I= 80435 -Ynl0ZXJpYW4= 80436 -LXJvY2s= 80437 -X21ldGVy 80438 -IHJlcG1hdA== 80439 -IHByZWd1bnRh 80440 -IE1FVEE= 80441 -KGd0 80442 -IEZSSUVORA== 80443 -IHNvcnRl 80444 -IGhlcA== 80445 -b25vbWllcw== 80446 -IGF1dG9tw6F0 80447 -IEZvcm1hdHM= 80448 -c3RhdGVQcm92aWRlcg== 80449 -LWZsb29y 80450 -X01VWA== 80451 -KENvbnRlbnQ= 80452 -IElOU1RBTEw= 80453 -IFRpdGFuaXVt 80454 -cnVj 80455 -LkRhdGFzZXQ= 80456 -YXNjbw== 80457 -Lk1BVENI 80458 -IGZlc3Rpdml0aWVz 80459 -TVNO 80460 -Lm90 80461 -IEdldExhc3RFcnJvcg== 80462 -aWVucw== 80463 -IF9fX19fX19fX19fX19fX19fXwoK 80464 -X0dG 80465 -X3BsYXRl 80466 -IEZvcm1hbA== 80467 -LWxldHRlcg== 80468 -S2F0ZQ== 80469 -YXBpYQ== 80470 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 80471 -L2dlbmVyYXRlZA== 80472 -IERpbmc= 80473 -IEZyaWVkcmljaA== 80474 -ICcpJw== 80475 -VUJMSVNI 80476 -IEFiaWxpdGllcw== 80477 -IHVubG9ja2luZw== 80478 -Lnl5 80479 -IEludGVycg== 80480 -bm90aHJvdw== 80481 -aXBvcA== 80482 -IENPUlBPUg== 80483 -W2FycmF5 80484 -PFdlYkVsZW1lbnQ= 80485 -X1NJRA== 80486 -LnF1YWw= 80487 -RGlhZ25vc3RpYw== 80488 -OiIiLAo= 80489 -KG1vbWVudA== 80490 -anVyZWQ= 80491 -IHRlcnJlc3RyaWFs 80492 -ZXJ1bGU= 80493 -ICYpOwo= 80494 -IGJ1cmVhdWNyYXRpYw== 80495 -b3BwaW5z 80496 -IGphcG9u 80497 -bGVvbg== 80498 -X3JlbmFtZQ== 80499 -X0RFU1RST1k= 80500 -LkVuZHNXaXRo 80501 -IGVydXB0aW9u 80502 -KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 80503 -UEVU 80504 -X3JlbG9hZA== 80505 -IHN1cHBsZW1lbnRhcnk= 80506 -IHppZW4= 80507 -Q0xMb2NhdGlvbg== 80508 -IGtsZWlu 80509 -X2Vm 80510 -Ont9 80511 -IGNvbWVudGFyaW9z 80512 -KHZhbGlkYXRpb24= 80513 -Lnh0ZXh0 80514 -X0lNQUdFUw== 80515 -LnNldElucHV0 80516 -IERlY29tcGlsZWQ= 80517 -X1RCTA== 80518 -Y29tcGxleFR5cGU= 80519 -X2ZlYXR1cmVk 80520 -ID8+PD8= 80521 -LnZvdGU= 80522 -IEZyaWRheXM= 80523 -LmNvbnN1bWU= 80524 -Lk1FRElB 80525 -IHN5bmVyZw== 80526 -jpjsnbTsp4A= 80527 -X0hFQURFUlM= 80528 -eEFD 80529 -X252 80530 -zq0= 80531 -IFNpbW9uZQ== 80532 -Q2VycmFy 80533 -YWRkb2Nr 80534 -LnNlcmlhbGl6ZXI= 80535 -IENsYXNzaWZpZWQ= 80536 -Lkl0ZW1zU291cmNl 80537 -IHByZWNvbmRpdGlvbg== 80538 -44Gd44GX44Gm 80539 -RElTVA== 80540 -SW1hZ2VVcmw= 80541 -L3JhbmRvbQ== 80542 -IGVyw7N0 80543 -W3Jvb3Q= 80544 -QUxMRVJZ 80545 -Y2o= 80546 -eEFE 80547 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo= 80548 -IGl0YWxpYW5p 80549 -fCM= 80550 -IHJlZ2VuZXJhdGU= 80551 -IHN0cnI= 80552 -KHx8 80553 -IEVtZXJzb24= 80554 -IFBJRQ== 80555 -Y2xpZmZl 80556 -CWFu 80557 -PlBhc3N3b3Jk 80558 -dG9EYXRl 80559 -Q2lwaGVy 80560 -IGNvbnZveQ== 80561 -IFhDVEFzc2VydFRydWU= 80562 -L19f 80563 -LWZvY3Vz 80564 -IFJoaW5v 80565 -IGdvbw== 80566 -IGJvdG9u 80567 -Lk5vU3VjaA== 80568 -IFJlZHVjZWQ= 80569 -TUlTUw== 80570 -IFdpbmNoZXN0ZXI= 80571 -dXJsZW5jb2Rl 80572 -IG11ZGR5 80573 -aXlh 80574 -IE1icHM= 80575 -IHN0YWw= 80576 -b2RhZm9uZQ== 80577 -5Lus 80578 -IHBo4bqpbQ== 80579 -ICIvIjsK 80580 -IEFtbW8= 80581 -TmV3UHJvcA== 80582 -ID0KCg== 80583 -INCf0YA= 80584 -IHBheg== 80585 -IGxpYmVybw== 80586 -CVJlc291cmNl 80587 -bmVpZ2hib3Jz 80588 -LHJlc3BvbnNl 80589 -X2F0dGVtcHRz 80590 -IG5r 80591 -IG1pbGl0aWFz 80592 -X1BBWUxPQUQ= 80593 -LkJ5dGVTdHJpbmc= 80594 -INGB0L7QtNC10YDQtg== 80595 -YXJ0b24= 80596 -PkhlbGxv 80597 -bGlnaHRseQ== 80598 -b3dlbGw= 80599 -IGd1YXJkaW5n 80600 -IFRPSw== 80601 -IHdoZXJlYWJvdXRz 80602 -X2R3 80603 -IFJvdWxldHRl 80604 -IGd5cg== 80605 -IEZlZG9yYQ== 80606 -LkJ1dHRvbnM= 80607 -IGV4Y2xhaW1lZA== 80608 -IFNvbW1lcg== 80609 -QXV0aEd1YXJk 80610 -LXJhdGluZw== 80611 -TWV0aG9kQmVhdA== 80612 -LnBvc2l0aW9ucw== 80613 -TWVkaWFu 80614 -LuKApgoK 80615 -IGdsYWM= 80616 -IHVuZGVybWluZWQ= 80617 -JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJQ== 80618 -X3RoaXJk 80619 -LmtlZXA= 80620 -IGhheWE= 80621 -IHRvSlNPTg== 80622 -IExhdXJpZQ== 80623 -IAkgICA= 80624 -IEFjY3Vt 80625 -IHBydW5l 80626 -dXJ2ZWQ= 80627 -IE5TRg== 80628 -IEdyYXBl 80629 -RkxJQ1Q= 80630 -6LI= 80631 -IHByZWRpcw== 80632 -X3B0cnM= 80633 -IG11bHRpY2FzdA== 80634 -KEdyb3Vw 80635 -IGhlacOf 80636 -IGZlZGVyYWxseQ== 80637 -X1BBVVNF 80638 -IG1hbGF5c2lh 80639 -IFJlY2FsbA== 80640 -IHJvZHo= 80641 -IFNlbnRlbmNl 80642 -aW50ZWw= 80643 -X2RydmRhdGE= 80644 -LXNjZW5lcw== 80645 -PHk= 80646 -IGZvb2xlZA== 80647 -IExvdWQ= 80648 -IGFudGl2aXJ1cw== 80649 -LnBsaXN0 80650 -IHZlcndlbmRlbg== 80651 -IFdvbGZl 80652 -KWl0ZW0= 80653 -IHR3aXN0aW5n 80654 -IGVzcGFu 80655 -YXRlcm5v 80656 -IEFjY29yZA== 80657 -KCldLA== 80658 -UkVNT1ZF 80659 -ZGVoeQ== 80660 -X1ByZQ== 80661 -IG1pc2Nhcg== 80662 -dmxh 80663 -IHNlbWJs 80664 -IHRldGhlcg== 80665 -IEJpag== 80666 -LycKCg== 80667 -IENvcGllcw== 80668 -LXBhdHRlcm4= 80669 -Lm9uVmlldw== 80670 -LXRha2luZw== 80671 -X3NpbXBz 80672 -44GX44GL44GX 80673 -IERBQ0E= 80674 -b3JuaW5n 80675 -IFBlc3NvYQ== 80676 -b3JueQ== 80677 -X3Bhcw== 80678 -IGVpZ2h0eQ== 80679 -VGFj 80680 -X1NUT0NL 80681 -LmxvY2F0aW9ucw== 80682 -Iil9LAo= 80683 -IHTDoQ== 80684 -LWZpZWxkcw== 80685 -b2thbmU= 80686 -L2t1YmVybmV0ZXM= 80687 -IGNoaWNh 80688 -IGFydMOtY3Vsbw== 80689 -7II= 80690 -Q1JFQVNF 80691 -QVNB 80692 -IExvbmQ= 80693 -IGV4ZW1wbG8= 80694 -QWxsb3dz 80695 -aHRtbHNwZWNpYWxjaGFycw== 80696 -KHZpcw== 80697 -IGpy 80698 -54Gr 80699 -IEVDTQ== 80700 -IGVtYmFy 80701 -X0FEQVBURVI= 80702 -IGRpbHV0ZWQ= 80703 -X29mZmljZQ== 80704 -IHNraW5jYXJl 80705 -QUdJTkc= 80706 -IMO+ 80707 -IFNNQVJU 80708 -L1RhYmxl 80709 -IGJhc2Fs 80710 -Q29uY3VycmVuY3k= 80711 -IFZveA== 80712 -IFVJQ29sbGVjdGlvblZpZXdDZWxs 80713 -IHdvbA== 80714 -IFNPVVRI 80715 -IGZyb21EYXRl 80716 -IGNvcmRz 80717 -RU1T 80718 -LndlaXhpbg== 80719 -J2VsbGU= 80720 -IOWx 80721 -IGdvYWx0 80722 -dWli 80723 -IE5lcHR1bmU= 80724 -KG9yZA== 80725 -xLFuxLFu 80726 -IG1pY3JvYmVz 80727 -V2VhcG9ucw== 80728 -LURlYw== 80729 -IFJvb25leQ== 80730 -IFN3YWdnZXI= 80731 -66qF 80732 -X2xh 80733 -IGdlbmVyYWRv 80734 -IEhpcg== 80735 -Q29taWM= 80736 -IGNhcnZl 80737 -X3Jx 80738 -aWN0ZXI= 80739 -IGNhcnRlbA== 80740 -YW5jaWFz 80741 -IFBhbmFzb25pYw== 80742 -IHJvYWRzaWRl 80743 -IGZyZXNod2F0ZXI= 80744 -IGRiYw== 80745 -X3RleHRz 80746 -X3NrdQ== 80747 -IFN1bW1lcnM= 80748 -IFBpY3R1cmVCb3g= 80749 -Lmdyb3VwQ29udHJvbA== 80750 -VkFSQ0hBUg== 80751 -UmVMVQ== 80752 -IHNhYm90YWdl 80753 -DQogICAgICAgICAgICANCg== 80754 -IHNjcm9sbGJhcg== 80755 -IGJhdHRlcmVk 80756 -Y2lw 80757 -LXBpY3R1cmU= 80758 -CXN0YXRz 80759 -LmNyZWF0b3I= 80760 -X0NMRUFO 80761 -Lk1PRA== 80762 -IGJpZ2ludA== 80763 -IFRlcnJvcmlzbQ== 80764 -X1Nob3c= 80765 -IFNwaWNlcg== 80766 -X0VUSA== 80767 -IMSR4buD 80768 -IHN1bW1lcnM= 80769 -IFVyYW4= 80770 -L21lbW9yeQ== 80771 -UmV2aWV3ZWQ= 80772 -IGR1ZXM= 80773 -c2V0U2NhbGU= 80774 -IFJheXM= 80775 -IENTQw== 80776 -aW5jb21pbmc= 80777 -LWJ1eQ== 80778 -IHByb2N1cmU= 80779 -ZW50YXI= 80780 -IGJ1bGxz 80781 -IAkJCQkJCQ== 80782 -IEZpYm9uYWNjaQ== 80783 -LXNjaGVtYQ== 80784 -bWFrZXM= 80785 -RWY= 80786 -X0Rlc2NyaXB0aW9u 80787 -L2FsZXJ0 80788 -IGpzb25TdHJpbmc= 80789 -dWZmbGluZw== 80790 -IEtFUk5FTA== 80791 -IEhveQ== 80792 -IGdyYW50UmVzdWx0cw== 80793 -b25hbGQ= 80794 -IFByb3ZpbmNpYWw= 80795 -c2VuZGluZw== 80796 -cHRvbQ== 80797 -INCe0LE= 80798 -IGNvbnN0cmFpbg== 80799 -IMWhdG8= 80800 -IFJhaXNlZEJ1dHRvbg== 80801 -VVRET1dO 80802 -IEdMc2l6ZWk= 80803 -IOekug== 80804 -44OR 80805 -IEdvbg== 80806 -UExJRVI= 80807 -J119PC8= 80808 -Y2xhc3NpYw== 80809 -IGVuZ3JhdmVk 80810 -IG1hc2N1bGluaXR5 80811 -TWFyc2g= 80812 -c3NxbA== 80813 -KEdyYXZpdHk= 80814 -IGxvYnN0ZXI= 80815 -67aE 80816 -X0ludGVy 80817 -XGJhc2U= 80818 -JzpbJw== 80819 -IGRldGFsbGU= 80820 -dHdlZXRz 80821 -IGplYWxvdXN5 80822 -YWdlbmRh 80823 -LGl0 80824 -c3dpcmU= 80825 -K0I= 80826 -IHRyb3V0 80827 -X2FsdGVybg== 80828 -OiIj 80829 -IER3YXJm 80830 -IFNoYXBpcm8= 80831 -ZXJvb24= 80832 -IG5vaw== 80833 -X2xvbmdpdHVkZQ== 80834 -IFdlcm5lcg== 80835 -IHZpb2xldA== 80836 -dXJzaXZlbHk= 80837 -LWF3YWl0 80838 -IH0KCgoKCgo= 80839 -IExlbm5vbg== 80840 -IEFudGFyY3RpYw== 80841 -IGLDpWRl 80842 -X3Nsb3Bl 80843 -bWFuZG8= 80844 -b3VuY2Vy 80845 -LWlvbg== 80846 -IERlc3RydWN0aW9u 80847 -aXNzZW5zY2hhZnQ= 80848 -UGl6emE= 80849 -IEdlb2xvZ2ljYWw= 80850 -Qk9VTkQ= 80851 -IGNpbmU= 80852 -RGVtb24= 80853 -LnBlb3BsZQ== 80854 -X1RPR0dMRQ== 80855 -CW5vZGVz 80856 -YnVzY2Fy 80857 -LnByb2Nlc3Nvcg== 80858 -Tmg= 80859 -L3Nkaw== 80860 -IG15Y2tldA== 80861 -YXVjdGlvbg== 80862 -TWVn 80863 -R01FTQ== 80864 -IGlyb25pY2FsbHk= 80865 -5riF 80866 -IGNvbnZlcmdl 80867 -IFVJVGFibGVWaWV3RGF0YVNvdXJjZQ== 80868 -QXJkdWlubw== 80869 -PmU= 80870 -Sm95 80871 -IFNob3VsZGVy 80872 -IER1Yw== 80873 -UFJJTUFSWQ== 80874 -Lioo 80875 -LXByZXM= 80876 -IGRpYWxvZ1JlZg== 80877 -aW1hZ2VOYW1l 80878 -X2ludm9rZQ== 80879 -XFRlbXBsYXRl 80880 -T0k= 80881 -IHZyaWVuZA== 80882 -IEd1ZXJy 80883 -IHByZXJlcXVpc2l0ZQ== 80884 -IFBHQQ== 80885 -IFJlc3A= 80886 -KSIsIg== 80887 -bGxlbg== 80888 -IHNuYXBwaW5n 80889 -X0ZpcnN0 80890 -S0lU 80891 -LnNldEZvY3Vz 80892 -IEN5cHJlc3M= 80893 -Y3JhZnRlZA== 80894 -LzsK 80895 -d2VpZ2h0ZWQ= 80896 -dm95 80897 -X3RG 80898 -X2luc24= 80899 -IEluc3RhbGxpbmc= 80900 -IEdhbGx1cA== 80901 -QURPUg== 80902 -IEFMT0c= 80903 -Q29udGV4dEhvbGRlcg== 80904 -IFRvdXQ= 80905 -IEZvbGV5 80906 -IGNvbnRlbXBsYXRl 80907 -IENvaW5iYXNl 80908 -WMOj 80909 -d2FuZA== 80910 -LkNyZWF0ZUNvbW1hbmQ= 80911 -U29jaw== 80912 -IHVud3JhcA== 80913 -Y2xhc3NwYXRo 80914 -PFJlc291cmNl 80915 -X0VTVA== 80916 -PXJhbmRvbQ== 80917 -IFNoYWRl 80918 -IGRpY2k= 80919 -2K/Zig== 80920 -IGtpdHR5 80921 -0LDRgtC10LM= 80922 -4buNbg== 80923 -LkNvbXBsZXRlZA== 80924 -cGxvcmVy 80925 -IGJhYmVs 80926 -Lk9uSXRlbUNsaWNrTGlzdGVuZXI= 80927 -IE1jTWFob24= 80928 -IHJlc3RUZW1wbGF0ZQ== 80929 -IHRlc3M= 80930 -U2V0VXA= 80931 -L29jdGV0 80932 -IGNhbGFt 80933 -IGhpbmdlcw== 80934 -IGFydGVyaWFs 80935 -IFRydW1hbg== 80936 -IENoZXJ5bA== 80937 -X0REUg== 80938 -IHRtcGw= 80939 -IExlcg== 80940 -W2hhc2g= 80941 -S0VS 80942 -IHByb3BvcmNpb24= 80943 -IGNvYXN0bGluZQ== 80944 -YWNpb3M= 80945 -Ij4tLX19Cg== 80946 -IGRpc2FkdmFudGFnZWQ= 80947 -VG91Y2hMaXN0ZW5lcg== 80948 -IFNlZ2E= 80949 -Y29lcw== 80950 -SWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbg== 80951 -PEJveA== 80952 -IEluY3JlZGlibGU= 80953 -VXBkYXRlcg== 80954 -RkxU 80955 -aW5hbWU= 80956 -IEludGVyZmFjZXM= 80957 -Kylc 80958 -ZW5kaW1lbnRv 80959 -IHBhbmNha2Vz 80960 -IGluY29uc2lzdA== 80961 -LnBldA== 80962 -IGtleW9m 80963 -SW5uZXJUZXh0 80964 -Picp 80965 -RGVhbg== 80966 -IFDDqQ== 80967 -KENvbnRyb2w= 80968 -IHNwYXI= 80969 -bGluaWs= 80970 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA== 80971 -IERhbmU= 80972 -X1BBR0VT 80973 -IHNldEJhY2tncm91bmRDb2xvcg== 80974 -c3ViY2F0ZWdvcnk= 80975 -IFN0cmluZ1NwbGl0T3B0aW9ucw== 80976 -QWxsZW4= 80977 -ISgie30iLA== 80978 -hOyerA== 80979 -IGJhYw== 80980 -X1BST0RVQ1RT 80981 -dXBwZXJjYXNl 80982 -PSQoIiM= 80983 -xJlr 80984 -IFVJVGFwR2VzdHVyZVJlY29nbml6ZXI= 80985 -TUVUQQ== 80986 -IHNjYXJjZWx5 80987 -6aA= 80988 -X21hbmFnZWQ= 80989 -IGNvbnN1bW8= 80990 -TW91c2VNb3Zl 80991 -IFNwZWNz 80992 -IFNlYXJjaGluZw== 80993 -SGVhZGVyVmlldw== 80994 -Oicp 80995 -IG1pY3Jvc29mdA== 80996 -IEtvc292bw== 80997 -ZW1hbm4= 80998 -LmZmdA== 80999 -IEh1YmJhcmQ= 81000 -IGRleA== 81001 -X1RFUk1JTg== 81002 -X0ZD 81003 -IHBoaWxpcHBpbmVz 81004 -XENvbGxlY3Rpb25z 81005 -IHRlaA== 81006 -IHF1YWxpZmllcw== 81007 -IGlucHV0VmFsdWU= 81008 -IEdPVA== 81009 -KHNh 81010 -SUxMRUQ= 81011 -IHNsYW5n 81012 -IGtlaW5lbg== 81013 -IGZlbG9u 81014 -IEVyaWNr 81015 -YWJpbGlkYWRl 81016 -LnNlcg== 81017 -IHJ1bmVz 81018 -IFVucmVhbA== 81019 -KG9y 81020 -IOusuOyekA== 81021 -IGJpZGk= 81022 -IGlyYw== 81023 -CWl0ZXI= 81024 -Im5pbA== 81025 -L3VidW50dQ== 81026 -IG11cmRlcmluZw== 81027 -ID8u 81028 -dW5rZXI= 81029 -UmVjdFRyYW5zZm9ybQ== 81030 -JykpCgoK 81031 -IGFyaXR5 81032 -IEZyZWVs 81033 -Lm1vdW50 81034 -Q09NTUVOVA== 81035 -ICIqIiw= 81036 -ZW5jcnlwdGlvbg== 81037 -W21vZGVs 81038 -In19Pgo= 81039 -LlRvdWNo 81040 -L3RodW1i 81041 -IHByZXo= 81042 -L2NvbXBhbnk= 81043 -IHLDs8W8 81044 -IHNvZnRlbg== 81045 -IHBvc3NpYmlsZQ== 81046 -IEVDQg== 81047 -X0Jvb2w= 81048 -IC0tLS0tCg== 81049 -IGludGVydHc= 81050 -X3N0YQ== 81051 -X0JBTA== 81052 -Lm5hdmlnYXRpb25CYXI= 81053 -IFJHQkE= 81054 -Z3JpbHk= 81055 -c3RvZmY= 81056 -YWNreQ== 81057 -UUI= 81058 -QEFwaQ== 81059 -cGVjaWE= 81060 -IFJwYw== 81061 -IGFtcHM= 81062 -IEZlbmNl 81063 -IGdlbm9taWM= 81064 -KGFsaWFz 81065 -Vmllbg== 81066 -U3BpbkJveA== 81067 -LmdldFNlY29uZHM= 81068 -IGdsb2JhbGl6YXRpb24= 81069 -IGN1cw== 81070 -a3ViZWN0bA== 81071 -IHRocm90dA== 81072 -IGluZXJ0 81073 -IFNjcmF0Y2g= 81074 -w5c8Lw== 81075 -Lmlzc3Vl 81076 -ZXNzYXk= 81077 -LUlzbA== 81078 -IG3DoXI= 81079 -CWJpdA== 81080 -IGFib2xpc2hlZA== 81081 -LmluZmluaXR5 81082 -bGluZW5v 81083 -LmFsZ29yaXRobQ== 81084 -b3JzY2g= 81085 -RW1haWxBZGRyZXNz 81086 -IERBRw== 81087 -YnJpbmdpbmc= 81088 -Lm15YXBwbGljYXRpb24= 81089 -LlN1cHBvcnQ= 81090 -X2xlYWRlcg== 81091 -IERldmlu 81092 -IFtdDQoNCg== 81093 -IHJtcw== 81094 -IGJ1Y2tsZQ== 81095 -aWdsaWE= 81096 -L3Byb2JsZW0= 81097 -IGhhdXRl 81098 -IGluc3RpdHV0ZWQ= 81099 -SVU= 81100 -bGFtYQ== 81101 -RVhQRUNURUQ= 81102 -IEJlY2toYW0= 81103 -IEh5ZHJhdWxpYw== 81104 -U3RhdGljcw== 81105 -X25vcm1hbGl6ZWQ= 81106 -LmAsCg== 81107 -IG1pbWV0eXBl 81108 -IHNoYXZpbmc= 81109 -T3ZlcnJpZGVz 81110 -IE1lcmNlcg== 81111 -dHJmcw== 81112 -LXN0YXRz 81113 -b3NwYWNl 81114 -IGFudGlveGlkYW50cw== 81115 -aW5maW5pdHk= 81116 -Um9ja2V0 81117 -IEV1bGVy 81118 -LXZhbHU= 81119 -IGzDuA== 81120 -LUlO 81121 -SG1t 81122 -LXJldHVybg== 81123 -IFBBTkVM 81124 -IHRlcm1pbmF0b3I= 81125 -IHRla24= 81126 -IHByZWRpY2F0ZXM= 81127 -U3RhbXBlZA== 81128 -IHN2ZQ== 81129 -YW50ZXI= 81130 -IGN5Y2xpc3Q= 81131 -IEVwc3RlaW4= 81132 -IGhpdHRlcnM= 81133 -ZG9ncw== 81134 -LkFkZExpc3RlbmVy 81135 -X2V4Y2VwdGlvbnM= 81136 -IEZPT1Q= 81137 -aWNhcmU= 81138 -W3RhZw== 81139 -LWZldGNo 81140 -VVBMT0FE 81141 -LmRyb3Bkb3du 81142 -IGNlbnRyb2lkcw== 81143 -IGFyYmU= 81144 -IGhpam8= 81145 -IERhdGFiYXNlUmVmZXJlbmNl 81146 -UG9saXRpY2Fs 81147 -IEJBU0lD 81148 -LWZvcmNl 81149 -fCQ= 81150 -IFJFVklFVw== 81151 -LmRlY29yYXRl 81152 -IEFzcGVjdA== 81153 -IGNvbW1lbW9y 81154 -IGNsZWFuc2U= 81155 -IENsYXVkaWE= 81156 -Z2VuZXJhdGlvbg== 81157 -SExU 81158 -dHlwZW9ybQ== 81159 -cHJlZmVy 81160 -b3ZlcmxhcA== 81161 -YmlvbG9neQ== 81162 -U3RyZWFtZXI= 81163 -Y29tbWlzc2lvbg== 81164 -IHRodW1ibmFpbHM= 81165 -LkN1cnJlbnRDdWx0dXJl 81166 -IHVybHBhcnNl 81167 -IGdpb3Jubw== 81168 -IGRldnM= 81169 -X2FzcGVjdA== 81170 -IGNoZXJpc2hlZA== 81171 -IE5hY2hyaWNodA== 81172 -IHJpZ2dlZA== 81173 -L2xvZ2dpbmc= 81174 -aHVudA== 81175 -VHlwZUVycm9y 81176 -PFNlbGVjdA== 81177 -KHByb2c= 81178 -IEdyaWRMYXlvdXQ= 81179 -6JA= 81180 -IEVYUEVS 81181 -CUtFWQ== 81182 -LmRt 81183 -CWNhcmQ= 81184 -IFRhdQ== 81185 -IG5vdGFtbWVudA== 81186 -IGhlcm9pbmU= 81187 -IGJhdGh0dWI= 81188 -YXRyb24= 81189 -IOaU 81190 -77yS77yQ 81191 -Y29ub21pY3M= 81192 -IHJldmVyc2libGU= 81193 -6YeR6aKd 81194 -IGpzeA== 81195 -IFNwZWFrZXJz 81196 -RGVzZXJpYWxpemVy 81197 -LnRvRmxvYXQ= 81198 -INC/0LXRgNC10LzQtdC9 81199 -IFByb3ZpZGluZw== 81200 -6LSm 81201 -W2VsZW1lbnQ= 81202 -Kjo= 81203 -PlJldHVybnM= 81204 -IHRpdHVsYXI= 81205 -IGhlYXJ0YnJlYWtpbmc= 81206 -X05C 81207 -LkFyZ3VtZW50cw== 81208 -IG9wdGlj 81209 -YXR0YWNrcw== 81210 -IFZ1bG5lcg== 81211 -CWtleXM= 81212 -IGNvbnRyb2xl 81213 -LlJHQg== 81214 -IHN1Ymdyb3Vw 81215 -bWFuZGF0b3J5 81216 -IENBQg== 81217 -CWVuZ2luZQ== 81218 -44Gw 81219 -TUVESUE= 81220 -L3RyYW5z 81221 -IGRhbms= 81222 -IHNlcnZpY2Vk 81223 -IGluY2FyY2VyYXRlZA== 81224 -IEZyZWFr 81225 -IHVwdG8= 81226 -ZHJhd2Vy 81227 -WyIr 81228 -IGVudHdpY2s= 81229 -Z0w= 81230 -TW9kZWxFcnJvcg== 81231 -IHJlYWRkaXI= 81232 -aXN0cmlidXRl 81233 -IGdsYXJl 81234 -aXF1ZW1lbnQ= 81235 -Y2hpbmE= 81236 -IEthcGxhbg== 81237 -IFN0YWJpbGl0eQ== 81238 -cG9zaXRlcw== 81239 -IEpBWEJFbGVtZW50 81240 -IHRvdGFsbWVudGU= 81241 -KGNvbW0= 81242 -X3Byb2Nlc3Nlcw== 81243 -VGhvdXNhbmRz 81244 -IElscw== 81245 -ZXJ0YWludHk= 81246 -IFNoYWRlcw== 81247 -YWN0YWw= 81248 -bG9nZ2VkSW4= 81249 -IE5pY2hvbHM= 81250 -IE1pZGxhbmRz 81251 -ZGV2aWw= 81252 -IHN0clNRTA== 81253 -In0p 81254 -IEpvcmQ= 81255 -KGZm 81256 -IEp1bmk= 81257 -5bCx 81258 -YXJ0aXNhbmxpYg== 81259 -IG1vb25z 81260 -IHVucmVzb2x2ZWQ= 81261 -IHdpdGNoZXM= 81262 -IEfDvA== 81263 -IEdvYmxpbg== 81264 -YW5zc29u 81265 -fCU= 81266 -IGJ6 81267 -IGR1cGxleA== 81268 -ICIpKQ== 81269 -Lmxpa2Vz 81270 -KHZlcnRpY2Fs 81271 -IGNvd2JveQ== 81272 -U2VsZWNjaW9uZQ== 81273 -ICcqJyw= 81274 -IFNhcA== 81275 -IFNhYmJhdGg= 81276 -U09SVA== 81277 -4Ka/4KY= 81278 -X2NlbnRlcnM= 81279 -XFBvc3Q= 81280 -KFRyZWU= 81281 -IHBhcnRlcw== 81282 -X3lhdw== 81283 -YXJlbW9z 81284 -c2V2ZW4= 81285 -IGhpYXR1cw== 81286 -X2ludGVuc2l0eQ== 81287 -LW1hbnk= 81288 -IERvbGxhcnM= 81289 -LXVuc3R5bGVk 81290 -IGdyaXBwaW5n 81291 -IG1hcnZlbG91cw== 81292 -IHJlY2VwdGlvbnM= 81293 -IG92ZXJjbG9jaw== 81294 -YmVybWFu 81295 -IGhlYWRxdWFydGVyZWQ= 81296 -eEJC 81297 -Y2xhc3NDYWxsQ2hlY2s= 81298 -IG9ic2VydmVz 81299 -U3VibWl0dGluZw== 81300 -0LjRh9C10YE= 81301 -IEh0dHBTdGF0dXNDb2RlUmVzdWx0 81302 -IGhpZXJvbnRh 81303 -cm9wcGluZw== 81304 -Rk9SQ0U= 81305 -CXV0aWxz 81306 -IHZlbnRz 81307 -YWRkZXJz 81308 -IE1JWA== 81309 -IEVsZWdhbnQ= 81310 -IGFjb3M= 81311 -KG1hY2hpbmU= 81312 -IG1lZGRsaW5n 81313 -IHZpbGU= 81314 -LWNvbXBhdGlibGU= 81315 -IGNyZWFtcw== 81316 -IFRhYmxlUm93 81317 -IFJlaGFiaWxpdGF0aW9u 81318 -QWJi 81319 -KHVzZXJJbmZv 81320 -X2V4cGlyZWQ= 81321 -Lk9iamVjdE1ldGE= 81322 -IGdvZHQ= 81323 -dXN1YWw= 81324 -LmJpbmRpbmdOYXZpZ2F0b3JNb3Zl 81325 -IFJlZ2lzdHJhcg== 81326 -bWlncmF0aW9u 81327 -YXB0dXJlZA== 81328 -LHBhcmFtcw== 81329 -IGNlbnRlclk= 81330 -b3dhbg== 81331 -bG9jYWxlcw== 81332 -SW5wdXRNb2R1bGU= 81333 -IHZpZ2lsYW50 81334 -IG5jb2xz 81335 -IGluZ3I= 81336 -IGPDtHTDqQ== 81337 -dmVydGltZQ== 81338 -IHdpZGVzdA== 81339 -IEhERg== 81340 -IEFsZ2VyaWE= 81341 -IGNoYXR0 81342 -JHNlbGVjdA== 81343 -Il0pDQo= 81344 -IG11bHRlcg== 81345 -IENoZW5leQ== 81346 -ZnVzY2F0ZWQ= 81347 -PSciLiRf 81348 -IERlbmlzZQ== 81349 -IHJpZmY= 81350 -QWJzZW50 81351 -IHRhbWHDsW8= 81352 -IGplc3pjemU= 81353 -LlByb2dyYW0= 81354 -CWJy 81355 -ZXJhaXM= 81356 -IHNhbmRhbHM= 81357 -ICws 81358 -IGRpc3NvbHV0aW9u 81359 -IHVudGVyc2NoaWVk 81360 -UHJvdg== 81361 -LnRyYW5zYWN0aW9ucw== 81362 -IFRyb3VibGU= 81363 -Lm1pZGRsZQ== 81364 -LmdldERlY2xhcmVk 81365 -IHN3ZWF0aW5n 81366 -IEhhbmNvY2s= 81367 -6LS5 81368 -IHBvZw== 81369 -IEtpYQ== 81370 -IG1vZG5l 81371 -IEFjY2Vzc2liaWxpdHk= 81372 -IGxlYWthZ2U= 81373 -IGRlY2VwdGl2ZQ== 81374 -IFdPTQ== 81375 -INC+0YE= 81376 -IGNzYWs= 81377 -YWNvY2s= 81378 -LlN5bnRheA== 81379 -ICxb 81380 -LicpLAo= 81381 -IGZvcmVjbG9zdXJl 81382 -IHVuZmF2b3I= 81383 -IGV4Y2w= 81384 -Q1VEQQ== 81385 -ZGVuc2U= 81386 -PFVuaXQ= 81387 -IHZhcGluZw== 81388 -IG1hamVzdGlj 81389 -aWF0b3Jz 81390 -IGF1dGlzdGlj 81391 -LmdhdGV3YXk= 81392 -VXJsUGFyc2Vy 81393 -SGVsbA== 81394 -IENvc3Rjbw== 81395 -IEhJUA== 81396 -T2JzZXJ2ZXJz 81397 -IFBlb3BsZXM= 81398 -IFNwb3RsaWdodA== 81399 -IFRhdmVybg== 81400 -IFRPVVI= 81401 -cGxpbmdz 81402 -LldSQVA= 81403 -IGFsZA== 81404 -TkFM 81405 -KCIqKio= 81406 -c2V0UHJvcGVydHk= 81407 -X1N0b3A= 81408 -YW5ub3VuY2VtZW50 81409 -IEltbWVkaWF0ZQ== 81410 -IEhTVg== 81411 -X1RFU1RT 81412 -IGNyYXZl 81413 -X1VD 81414 -LmRlY3J5cHQ= 81415 -KFJvbGVz 81416 -IHN1Ymo= 81417 -X0ludGVnZXI= 81418 -Lm5vdE51bGw= 81419 -IEdzdA== 81420 -IEJ5cm5l 81421 -IEFxdWFyaXVt 81422 -IENhbmM= 81423 -X0NIQU4= 81424 -IERUTw== 81425 -Lmhs 81426 -IG1lbmdndW5ha2Fu 81427 -RnJhbmM= 81428 -RGlhbG9nQ29udGVudA== 81429 -Li4uJwo= 81430 -IEt1bnN0 81431 -IEFsbG9jYXRvcg== 81432 -VVNBR0U= 81433 -S25vd2xlZGdl 81434 -CWNwdQ== 81435 -IG1vcmFscw== 81436 -cGF0aWVudHM= 81437 -IGlsaw== 81438 -IGNyaXRlcg== 81439 -IFZldA== 81440 -IE1lc3NpYWg= 81441 -X186 81442 -YXZlbm91cw== 81443 -X3ZpZXdlcg== 81444 -KERpY3Rpb25hcnk= 81445 -IEJvZGllcw== 81446 -aGFzT25l 81447 -0LjQvNC10YA= 81448 -IHppcGNvZGU= 81449 -U3Rlcg== 81450 -IGLDoXM= 81451 -X0Rpc3BsYXk= 81452 -IGZpcm1h 81453 -IFJhaWRlcg== 81454 -IEtI 81455 -V2l0aERhdGE= 81456 -KEFSRw== 81457 -IHByb3Ry 81458 -IG1zZWM= 81459 -IGxhdmVuZGVy 81460 -KFV0aWw= 81461 -INC/0YDQvtCz0YDQsNC8 81462 -X211eA== 81463 -X2xhdGl0dWRl 81464 -UG9ydHJhaXQ= 81465 -IHNpdGNvbQ== 81466 -IGFkaWNpb24= 81467 -KGNvbnN0YW50cw== 81468 -IEFueGlldHk= 81469 -IFJvc2Vz 81470 -IHN0aW11bGF0ZWQ= 81471 -IGNocm9ubw== 81472 -IGZvc3NpbHM= 81473 -IEFpcmJ1cw== 81474 -bGVmdHJpZ2h0 81475 -IE3DqXRvZG8= 81476 -Inc= 81477 -IGtsZWluZW4= 81478 -IGNsaXF1ZQ== 81479 -b21pbmF0aW9u 81480 -IG1vdGVs 81481 -L3ZlY3Rvcg== 81482 -ZGVjbGFyYXRpb24= 81483 -IG5ld1k= 81484 -W0g= 81485 -LnNjYWxhcg== 81486 -b21ibw== 81487 -aHVk 81488 -O3NldA== 81489 -ZnR5cGU= 81490 -KCcnKS4= 81491 -b3JkZXM= 81492 -eW5vcw== 81493 -J10sCgo= 81494 -X0ZMVVNI 81495 -aWRlbnRpZnk= 81496 -L2RldmljZXM= 81497 -IGRpY3RhdGVk 81498 -IGRlamFy 81499 -IEVtaW4= 81500 -IFBlbmRhbnQ= 81501 -IG9uVXBkYXRl 81502 -XSkpKQ== 81503 -IEJhcmtlcg== 81504 -T3Jt 81505 -6K+36YCJ5oup 81506 -X2d1aWRl 81507 -w6FiYWRv 81508 -b3BoZQ== 81509 -ICIuCg== 81510 -IEJyZXdlcnM= 81511 -IGJyaWRhbA== 81512 -IENFUw== 81513 -X0NhdGVnb3J5 81514 -IEJUTg== 81515 -IERhcnRo 81516 -I2Zvcg== 81517 -ZXRobmlj 81518 -YXJjaGl0ZWN0dXJl 81519 -IENvdXBl 81520 -aWRvcmVz 81521 -IGZhc2Npc20= 81522 -IGNvbnRyYWRpY3Rpb25z 81523 -ZWZmZWN0cw== 81524 -SW5pdGlhbFN0YXRl 81525 -IOekuuS+iw== 81526 -bWF0cGxvdGxpYg== 81527 -LmRlc2t0b3A= 81528 -INCt 81529 -IFFQaXhtYXA= 81530 -CWJlZ2lu 81531 -IHduZA== 81532 -IGNvbnRpZW5l 81533 -KGhlbHBlcg== 81534 -Lk5vdGlmeQ== 81535 -KEJvb2s= 81536 -IEd1YXJhbnRlZWQ= 81537 -cGxs 81538 -aW9sYQ== 81539 -IGZ1bmdp 81540 -aXZlbnQ= 81541 -IE9B 81542 -5rKh5pyJ 81543 -IHdpxJljZWo= 81544 -CQoJCgkKCQo= 81545 -77yaIis= 81546 -IFRhbGtz 81547 -LnN0YXJ0ZWQ= 81548 -b2NpdGllcw== 81549 -IGVzcG9ydHM= 81550 -PElucHV0 81551 -IEVYQ0VQVElPTg== 81552 -IGFjdHU= 81553 -LmltcA== 81554 -ICIvIgo= 81555 -T3RoZXJ3aXNl 81556 -IFBlbnNpb24= 81557 -IFdhdmVz 81558 -xrDGoQ== 81559 -aWFyZHM= 81560 -ICo8Lw== 81561 -dXJnZW9u 81562 -IFNDSQ== 81563 -IExhdXJlbA== 81564 -ZXRhZw== 81565 -TmV0ZmxpeA== 81566 -IFJlc3BvbnNlcw== 81567 -IG5lb2xpYmVyYWw= 81568 -aXNDb250YWluZWQ= 81569 -PW15 81570 -IHJlcHJpbnQ= 81571 -b25lc3RseQ== 81572 -IGRlcGFydGluZw== 81573 -UFdN 81574 -ZXdoYXQ= 81575 -PSI8PA== 81576 -Lnlhbmc= 81577 -IFRyYWRpdGlvbg== 81578 -KyI6 81579 -ZGVwZW5kaW5n 81580 -X1VuaXQ= 81581 -IENvZGFibGU= 81582 -IHdoaXNreQ== 81583 -IGNvcnJlbGF0ZQ== 81584 -IGRpcmV0 81585 -TGFzdGx5 81586 -CU91dHB1dA== 81587 -KGlub2Rl 81588 -XExvZw== 81589 -IERlcGVuZGVuY2llcw== 81590 -V2lsbERpc2FwcGVhcg== 81591 -IFBhbmVscw== 81592 -IOKUnOKUgOKUgA== 81593 -IG9zdGVuc2libHk= 81594 -fC0t 81595 -QW5udWFs 81596 -IGF1dG9sb2Fk 81597 -VmFsdWVIYW5kbGluZw== 81598 -LmNvaW4= 81599 -ZWR1Y3Q= 81600 -Wlk= 81601 -IENhbnVja3M= 81602 -IHNtZWFy 81603 -IHJlYWxpZGFk 81604 -IHt7Cg== 81605 -aXZvbA== 81606 -ZXRTb2NrZXRBZGRyZXNz 81607 -IEtlbXA= 81608 -L0ZyYW1ld29yaw== 81609 -IHF1aWNrZXN0 81610 -XyIuJA== 81611 -IHdpdGhob2xkaW5n 81612 -IGludHJpZ3Vl 81613 -IEFERFI= 81614 -RGllc2U= 81615 -V2Vla2x5 81616 -X19fX18= 81617 -IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbg== 81618 -b2xhdGVk 81619 -UnVuTG9vcA== 81620 -IHBhc3PDqQ== 81621 -LmZpcmViYXNlaW8= 81622 -LmV1bGVyQW5nbGVz 81623 -aXN0ZW5jZQ== 81624 -IGZlYXJpbmc= 81625 -IEVsZW1lbnRUeXBl 81626 -L1Rlc3Q= 81627 -IOafpeivog== 81628 -IGZvbmRv 81629 -IFBhcnI= 81630 -IHplc3Q= 81631 -IFRyYW5zZm9ybWVycw== 81632 -TGluZVN0eWxl 81633 -IGV0aGVybmV0 81634 -YWZmbGVz 81635 -IG5hbWVkdHVwbGU= 81636 -IFNjYWxhcnM= 81637 -TlNVUkxTZXNzaW9u 81638 -LWV4dGVuc2lvbg== 81639 -KE1lc3NhZ2Vz 81640 -IGF0ZW5jacOzbg== 81641 -IEplcnNleXM= 81642 -YmVkUGFuZQ== 81643 -IFN0dW5kZW4= 81644 -IHZvaXR1cmU= 81645 -IOm7mOiupA== 81646 -Lm9wZW5nbA== 81647 -ICJ9 81648 -IFJldmVuZ2U= 81649 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 81650 -SW5zdGFudGlhdGU= 81651 -IGVucg== 81652 -VmFsaWRhdGlvbkVycm9y 81653 -X0FMUkVBRFk= 81654 -TG90cw== 81655 -b2Nl 81656 -IHNjcmlt 81657 -IGVtYm9keQ== 81658 -0YDQsNGC 81659 -IGNvbmNlZGU= 81660 -YXNzZWw= 81661 -IEJSRQ== 81662 -UExFQVNF 81663 -CWRpZmY= 81664 -57uT5p2f 81665 -LmZw 81666 -YmFt 81667 -TWVhbA== 81668 -IE1hZG9ubmE= 81669 -IHB1bmlzaGFibGU= 81670 -aWZmaWVz 81671 -X3VuaXg= 81672 -7JmA 81673 -IEdhZ2E= 81674 -InN0cnVjdA== 81675 -VG9TZW5k 81676 -IE9DUg== 81677 -IHByYWlzaW5n 81678 -Z2V0U3RvcmU= 81679 -IGV1dGg= 81680 -IGFycmVnbG8= 81681 -IGZlcm0= 81682 -ZmRm 81683 -Q29vbGRvd24= 81684 -IFJlY3ljbGluZw== 81685 -QW5h 81686 -aW5kcg== 81687 -X0hQ 81688 -IEdvdmVybmFuY2U= 81689 -IGJhcnJhZ2U= 81690 -L2Nh 81691 -ICwo 81692 -RsO8cg== 81693 -IElTUHM= 81694 -IG1lbmFjZQ== 81695 -VmlyZ2luaWE= 81696 -IGZhbmM= 81697 -IG5vbWJyZXM= 81698 -Lmluc3RydWN0aW9ucw== 81699 -IGVzY2FsYXRlZA== 81700 -YWdpbmE= 81701 -IExldmluZQ== 81702 -CWZpbmQ= 81703 -X2Vy 81704 -IGRlanRpbmdzYWo= 81705 -c3Zw 81706 -YWdvcw== 81707 -KHNvbA== 81708 -IExpZA== 81709 -UFJJVkFURQ== 81710 -IElNUExFTUVOVA== 81711 -ZWZlbGxlcg== 81712 -KFRhcmdldA== 81713 -4LmJ4Lit4Lih 81714 -aG91c2luZw== 81715 -LnNldEN1cnNvcg== 81716 -IG5laG1lbg== 81717 -LnJlY2VpdmVy 81718 -IFR1dG9y 81719 -IG1hdHRlcmVk 81720 -bWRhdA== 81721 -cmVndWxhdGVk 81722 -IGdldEFkZHJlc3M= 81723 -IE1pbnV0ZW4= 81724 -IElV 81725 -0LvQsNCy 81726 -IHR1cm5vdmVycw== 81727 -IHN1aXRhYmlsaXR5 81728 -CWVzYw== 81729 -Y2FsY3Vs 81730 -X1N0cmVhbQ== 81731 -X2ZpbGVuYW1lcw== 81732 -LXZhcnM= 81733 -Li4uLi4KCg== 81734 -RGlh 81735 -IHN3aW1z 81736 -T3B0aW1pemVy 81737 -PGJvb3N0 81738 -IFBlcm1pdA== 81739 -J10pKXs= 81740 -XE9wdGlvbnNSZXNvbHZlcg== 81741 -5qGI 81742 -IGhlY3RhcmVz 81743 -KHVz 81744 -IERldmVsb3Bpbmc= 81745 -X3hz 81746 -IG5vdmVsaXN0 81747 -IENvbnZlbmllbmNl 81748 -d2Fsa2luZw== 81749 -IGNoYXJtcw== 81750 -IExlYXNl 81751 -CUhBTA== 81752 -KFsm 81753 -IHJlc3RhcnRlZA== 81754 -TWFnZQ== 81755 -SXB2 81756 -INGN0Lo= 81757 -UkxG 81758 -IGFzc2VtYmxpbmc= 81759 -IEVjYw== 81760 -dmluZm9z 81761 -cGVkaWRv 81762 -IHN5bm9wc2lz 81763 -IFN0YW50b24= 81764 -c3RhcnR1cA== 81765 -LmdldHZhbHVl 81766 -IEtpdHQ= 81767 -cHJvcGVy 81768 -IHByZXRyYWluZWQ= 81769 -IFBFTg== 81770 -LlRlcm0= 81771 -IHBlcXU= 81772 -ZXBoaXI= 81773 -IEFsbGllcw== 81774 -IG1vZGVsQW5kVmlldw== 81775 -IGJ1dHRlcmZsaWVz 81776 -IEtpcnN0 81777 -IENoZWNrZXI= 81778 -IGN1bm5pbmc= 81779 -LnNldFk= 81780 -X01hc3Rlcg== 81781 -SW5jcmVhc2luZw== 81782 -IGh1cmRsZQ== 81783 -IGZpc3Rz 81784 -IFNsb3Zha2lh 81785 -IG5vbWJyZXV4 81786 -IDo6Cg== 81787 -dGFza0lk 81788 -IGZvbGx5 81789 -PFRyZWVOb2Rl 81790 -IFZvbGRlbW9ydA== 81791 -IGJsaXN0ZXI= 81792 -xYJl 81793 -LkVudGl0eU1hbmFnZXI= 81794 -LkRPV04= 81795 -IEdyZWdn 81796 -LWNvb3JkaW5hdGU= 81797 -KHZj 81798 -w6FiYg== 81799 -LlRvZ2dsZQ== 81800 -IExpc2Jvbg== 81801 -56I= 81802 -INC/0L7Rgg== 81803 -cGFyZW50Tm9kZQ== 81804 -LnNldFNjYWxl 81805 -X01JU1NJTkc= 81806 -IG91dHJh 81807 -IGt1cA== 81808 -YF0= 81809 -X3ZpYQ== 81810 -ZWRpY3M= 81811 -IEJvcmRlcnM= 81812 -IGlwYWQ= 81813 -IGVkdA== 81814 -IENhcnRlc2lhbg== 81815 -L21hYw== 81816 -IGJhcmxleQ== 81817 -IFNjYXJsZXQ= 81818 -ICAgIAogICAgCiAgICAKICAgIAo= 81819 -cXVlcnlQYXJhbXM= 81820 -IHJoeXRobXM= 81821 -IGdlYXJpbmc= 81822 -Wlg= 81823 -aHlkcmF0aW9u 81824 -U1RT 81825 -IHBsZW50aWZ1bA== 81826 -Y29ycA== 81827 -fUA= 81828 -aW50ZWdy 81829 -L2F0 81830 -LmRlYg== 81831 -IHVuZGVuaWFibGU= 81832 -IG9wZW5zc2w= 81833 -LmRlYWQ= 81834 -IFBpbGxvdw== 81835 -IEJlYW5z 81836 -LmFudA== 81837 -X3Fz 81838 -LWluZm9ybWF0aW9u 81839 -IOuzgOyImA== 81840 -JSIpLAo= 81841 -INC00YDRg9Cz 81842 -IFNwb25nZQ== 81843 -IHNpZnQ= 81844 -dGVzdGltb25pYWw= 81845 -IHVubmF0dXJhbA== 81846 -VUlTY3JvbGxWaWV3 81847 -dmVyZ2VuY2U= 81848 -KHRleHRCb3g= 81849 -LXBhZ2luYXRpb24= 81850 -IERpc3F1cw== 81851 -X3Byb2R1aw== 81852 -YWduYXI= 81853 -S2V5VXA= 81854 -CQkJICAgICAgICA= 81855 -0LXQu9C1 81856 -PHNvdXJjZQ== 81857 -Lmls 81858 -LmF0b20= 81859 -X0NvbXBvbmVudA== 81860 -IHlu 81861 -WydfXw== 81862 -IHdlYWtlc3Q= 81863 -X2RlY3J5cHQ= 81864 -L21zZw== 81865 -Y2Jj 81866 -IHBvbGl0ZWx5 81867 -b21hdA== 81868 -IGVubGlnaHRlbm1lbnQ= 81869 -IGNyZWE= 81870 -IGJydWs= 81871 -X2FscmVhZHk= 81872 -IHNvY2tmZA== 81873 -dW5wYWNr 81874 -b3JnZXM= 81875 -IFVORVNDTw== 81876 -aW5hbGl0eQ== 81877 -IHNlbnRpbmVs 81878 -IGFmZmx1ZW50 81879 -IHRocm93RXJyb3I= 81880 -aWV0cw== 81881 -QU5KSQ== 81882 -IFN1ZmZvbGs= 81883 -YmVybw== 81884 -a2V0w7h5 81885 -RW5kcG9pbnRz 81886 -ZXhlY3V0b3I= 81887 -R2E= 81888 -LkxB 81889 -X3BvcnRmb2xpbw== 81890 -dW5zY2g= 81891 -ZWxhZ2U= 81892 -IGdvYmllcm5v 81893 -IEJpb2w= 81894 -TW9kaWZpY2F0aW9u 81895 -IERlY2ltYWxGb3JtYXQ= 81896 -IFZvY8Oq 81897 -IG1ldGhvZG9sb2dpZXM= 81898 -W10u 81899 -IEdW 81900 -IHJlcGxpY2Fz 81901 -4oCUd2l0aA== 81902 -KTspOwo= 81903 -cG9zaXg= 81904 -U3VjY2Vzc0xpc3RlbmVy 81905 -cGhl 81906 -X25vcm1hbGl6ZQ== 81907 -IExhcmdlcg== 81908 -IHJlcGVyY3Vzc2lvbnM= 81909 -X1ZlcnQ= 81910 -IGhvc3RlbA== 81911 -IGluY29tcGV0ZW50 81912 -aGV2 81913 -X0RFTFRB 81914 -IHB1ZWRv 81915 -aW5zdGFsbGF0aW9u 81916 -X2ZyYWc= 81917 -KHJy 81918 -IE1BVg== 81919 -IExvY2FsaXphdGlvbg== 81920 -KCIiKS4= 81921 -IC0tLS0tLS0tLQ== 81922 -DQoK 81923 -IFB5VHVwbGU= 81924 -IEp1bGlv 81925 -CUdMdWludA== 81926 -bWFya3Vw 81927 -X0ZBTUlMWQ== 81928 -UFJPR1JBTQ== 81929 -IEZpcm13YXJl 81930 -KnNpemU= 81931 -V2lmaQ== 81932 -IHZpc2l0YQ== 81933 -IEVybA== 81934 -RmluZE9iamVjdA== 81935 -LlVOUkVMQVRFRA== 81936 -cGh0aGFsbQ== 81937 -IHBlcnNvbmFsaXpl 81938 -IGNyw6lhdGlvbg== 81939 -ICAgIAkg 81940 -LnByZWNpc2lvbg== 81941 -IHNldHRlcnM= 81942 -IG5ld1NpemU= 81943 -IENhdGFsYW4= 81944 -CW9wdGlvbg== 81945 -IHBpZWw= 81946 -IGNhZ2Vz 81947 -IFN0ZW0= 81948 -ZHJhd2luZw== 81949 -ZXhwbGFpbmVk 81950 -IOaOpw== 81951 -IGRyZWFkZnVs 81952 -ZXJydXB0ZWQ= 81953 -LmdldFZhbHVlQXQ= 81954 -IGVsYXBzZWRUaW1l 81955 -IGluZGVmaW5pdGU= 81956 -IFRIQU5L 81957 -X3N0YXJ0dXA= 81958 -U1VSRQ== 81959 -IGtpZG5leXM= 81960 -IEN1aXNpbmU= 81961 -fGFycmF5 81962 -U2VuZE1lc3NhZ2U= 81963 -ZmF2 81964 -IEFlcm9zcGFjZQ== 81965 -X21lYW5z 81966 -IG5lYg== 81967 -IE9UUA== 81968 -IGNodXJu 81969 -L2Zy 81970 -IFJlaWdu 81971 -X2NsYXNzaWZpY2F0aW9u 81972 -IE1hY0RvbmFsZA== 81973 -Ii4KCgoK 81974 -IGNoaWxseQ== 81975 -IOivt+axgg== 81976 -aWhhdA== 81977 -U1RB 81978 -J2F1dHJlcw== 81979 -IGxhc2M= 81980 -Lm1peA== 81981 -IGJsb3Q= 81982 -IElERA== 81983 -ZGF0YXRhYmxl 81984 -c3BpZWw= 81985 -IMOpeGl0bw== 81986 -YXJ0aWM= 81987 -LkF4aXM= 81988 -LmFkdmFuY2U= 81989 -IG1vdXNlWA== 81990 -J8Og 81991 -IHJlY2lldmVk 81992 -IHBvc2k= 81993 -IGZvdXJu 81994 -IE1hZmlh 81995 -IHBjYQ== 81996 -YmVsb25ncw== 81997 -YWJseXR5cGVk 81998 -QVVUSE9SSVpFRA== 81999 -LnNjYWxhYmx5dHlwZWQ= 82000 -7JyE 82001 -LWRvdA== 82002 -IGVtcGhhc2l6aW5n 82003 -TWVtYmVyc2hpcA== 82004 -KnBvdw== 82005 -LXNwaW4= 82006 -cnV0YQ== 82007 -aGV2aWs= 82008 -X0FTWU5D 82009 -X2NvbXBpbGVy 82010 -LkZsYWc= 82011 -IGVsYm93cw== 82012 -LkNSRUFURQ== 82013 -TWV0cm8= 82014 -LmxvZ3M= 82015 -em1hbg== 82016 -cG9uZQ== 82017 -xJnFvA== 82018 -IGludGVycw== 82019 -IHdlYnM= 82020 -X0hJRERFTg== 82021 -CW5vdw== 82022 -Q29tbXVuaWM= 82023 -JHRwbA== 82024 -c2NvcGVz 82025 -IFppa2E= 82026 -IHN0cmluZ3N0cmVhbQ== 82027 -IFVuY2F0ZWdvcml6ZWQ= 82028 -Rlk= 82029 -L3N3YWdnZXI= 82030 -UGVubg== 82031 -aW1lSW50ZXJ2YWw= 82032 -IGNvbnRlbmRz 82033 -eGllcw== 82034 -IFNhbGVzZm9yY2U= 82035 -IHV0ZW5z 82036 -IHVuZGlz 82037 -Q3J5c3RhbA== 82038 -Lm5kaW0= 82039 -IGZvcm11bA== 82040 -IEZhdg== 82041 -5bm/ 82042 -cmlzaw== 82043 -bmFk 82044 -L3Rvcw== 82045 -IFBFUkZPUk1BTkNF 82046 -IHdyaXRlbG4= 82047 -IGNvbGxv 82048 -YW50aWNhbGx5 82049 -VURFTlQ= 82050 -Umdi 82051 -IG9mZXJl 82052 -IG1lcmdlcw== 82053 -ZmlkZg== 82054 -IGt6 82055 -VmljdG9yaWE= 82056 -IC9eXA== 82057 -IGt1YmU= 82058 -IEFwb3N0bGU= 82059 -IGRlZmVuZHM= 82060 -PD0o 82061 -IE1FTU9SWQ== 82062 -XElk 82063 -IEFjdGl2ZUZvcm0= 82064 -IE9uZVBsdXM= 82065 -SHR0cFNlcnZsZXRSZXF1ZXN0 82066 -IFRlbXBEYXRh 82067 -7KCB 82068 -LkFTQ0lJ 82069 -2YTYpw== 82070 -S0k= 82071 -IGZyYXQ= 82072 -X0NJUEhFUg== 82073 -LlN1cmZhY2U= 82074 -IHBpdGZhbGxz 82075 -LW1lZGlhdGVk 82076 -eXBp 82077 -LWFsaXN0 82078 -eEJD 82079 -dGVhY2hlcnM= 82080 -IEN5Yw== 82081 -IHBzeWNoZWRlbGlj 82082 -IER1bWJsZWRvcmU= 82083 -IikuCgo= 82084 -IFRoYXRjaGVy 82085 -IFByaW5jaXBsZQ== 82086 -VG9nZXRoZXI= 82087 -IGZsb3Jh 82088 -d2Vla3M= 82089 -X2NyaXRlcmlh 82090 -Ym9uZXM= 82091 -LmludGVybmV0 82092 -IGJsb2NrRGlt 82093 -LlNpbmdsZU9yRGVmYXVsdA== 82094 -RGljZQ== 82095 -IEV2ZWw= 82096 -IFRMYWJlbA== 82097 -IElnb3I= 82098 -IENvcHA= 82099 -IGluYXVndXI= 82100 -L3ByaXZhdGU= 82101 -IGFiZXJy 82102 -bmRz 82103 -O2lm 82104 -LXJhbmdpbmc= 82105 -YWNodHM= 82106 -X21hcnNoYWxs 82107 -IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18= 82108 -LmVuZFRpbWU= 82109 -IE1vZGVsUmVuZGVyZXI= 82110 -KGZvb2Q= 82111 -KCJ+ 82112 -IHN1cHBs 82113 -KCJcKA== 82114 -U3E= 82115 -VHJhbnNsYXRlZA== 82116 -IENvbnRpbnVpbmc= 82117 -IHBvc3Nvbm8= 82118 -RklYTUU= 82119 -IEFuZ2Vib3Q= 82120 -aWV2ZXI= 82121 -IEt5b3Rv 82122 -Y2ls 82123 -TmV3VXJsUGFyc2Vy 82124 -LkRp 82125 -IGh1bWFuZQ== 82126 -RGVtYW5k 82127 -IE1hcnRpYW4= 82128 -d29vZHM= 82129 -IEhlYWw= 82130 -IFl1ZQ== 82131 -IGNvdXJ0aG91c2U= 82132 -IHZvbnQ= 82133 -IGJvbnM= 82134 -aW50ZWdyYWw= 82135 -ICQoJyMn 82136 -ZXRlcm1pbmF0aW9u 82137 -Lm1vZGlmaWVk 82138 -IHByaW5jaXBhbHM= 82139 -IGFsYXJtZWQ= 82140 -LmNyZWF0ZU9iamVjdA== 82141 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 82142 -L2NvdW50 82143 -IGVudHJlbmNoZWQ= 82144 -XGE= 82145 -IGludHJ1c2lvbg== 82146 -IE54 82147 -CQkKCQkKCQkK 82148 -Y2hlbWF0aWM= 82149 -IHNsaWRlcnM= 82150 -IHNlbGVjdGFibGU= 82151 -X25s 82152 -aWVzZQ== 82153 -X2VzdGltYXRvcnM= 82154 -IFN2Zw== 82155 -IGRlbGV0ZVVzZXI= 82156 -KG1hcHBpbmc= 82157 -IOyymOumrA== 82158 -IGFudGFnb25pc3Q= 82159 -IGtpbmFzZQ== 82160 -IHdlbGRlZA== 82161 -IExlbmE= 82162 -ZWRpdGg= 82163 -aWFsaQ== 82164 -KHBpYw== 82165 -IGJyZWFjaGVk 82166 -UElD 82167 -IGNvYXN0ZXI= 82168 -RkRB 82169 -IGtyZQ== 82170 -cGVyZmls 82171 -IEdlbXM= 82172 -X2ZlbmNl 82173 -VVJMUmVxdWVzdA== 82174 -4oCZYXBw 82175 -UkVGRVJFTkNF 82176 -LkV4cG9ydA== 82177 -IG1pbmltaXplZA== 82178 -aXBlbA== 82179 -aWRhdGE= 82180 -KWRlYWxsb2M= 82181 -ZXNjYWw= 82182 -X2Z3ZA== 82183 -bWVtY3B5 82184 -IExvcmk= 82185 -X1JlZg== 82186 -IGJhcmE= 82187 -IFNlbGxlcnM= 82188 -IGRldGVyaW9yYXRpb24= 82189 -ZnJhY3Rpb24= 82190 -KV07 82191 -L3BsYXk= 82192 -wqU= 82193 -LXRlc3Rz 82194 -T2Zmc2V0cw== 82195 -T2k= 82196 -IEtsYXVz 82197 -IHF1ZXJ5aW5n 82198 -d2lzaA== 82199 -YXBlbA== 82200 -X3dvcmtpbmc= 82201 -bXlNb2RhbExhYmVs 82202 -IHRvRGF0ZQ== 82203 -cGVybWFsaW5r 82204 -IGZyZWM= 82205 -b2xlY3VsZXM= 82206 -IEdvb3Nl 82207 -LXdpZGdldHM= 82208 -dHVydGxl 82209 -SW1wcm92ZWQ= 82210 -IHJvYWR3YXk= 82211 -a2Vocg== 82212 -IGFzdHJvbm9teQ== 82213 -Q29tYmluZQ== 82214 -IGNpZ2Fycw== 82215 -X0dBVEU= 82216 -L21hbmFnZQ== 82217 -IEdlcmFyZA== 82218 -IFByb3RlY3Rvcg== 82219 -U3Vic3lzdGVt 82220 -L2ZpbmQ= 82221 -L1lZWVk= 82222 -IHRvdGFsaW5n 82223 -0LzQvtGC 82224 -IE9tYW4= 82225 -IGluZmluaXQ= 82226 -LW9mZmljZQ== 82227 -IGluc3RhbnRpYXRpb24= 82228 -LsKn 82229 -Y2V1 82230 -KGF0b20= 82231 -IERyb3BvdXQ= 82232 -7YGs 82233 -IGNvbmRlbW5pbmc= 82234 -X2Jhc2VuYW1l 82235 -XX08Lw== 82236 -RGF0YUNvbnRleHQ= 82237 -IFdhc2hpbmc= 82238 -Lk9O 82239 -IG1vbW15 82240 -KCl9Owo= 82241 -IDspCgo= 82242 -L2V4dA== 82243 -Zm9yZWdyb3VuZENvbG9y 82244 -dW5zdXBwb3J0ZWQ= 82245 -IHNvbGxlbg== 82246 -IGNvbWXDpw== 82247 -RElTQUJMRQ== 82248 -IG9uUGF1c2U= 82249 -INGH0YLQvtCx0Ys= 82250 -IEFpbg== 82251 -R3M= 82252 -CVRhc2s= 82253 -aGF3aw== 82254 -Ik5vdA== 82255 -QUdS 82256 -LmdldFRhYmxl 82257 -IGRpdmVyZ2VuY2U= 82258 -IG5lZ29jaQ== 82259 -UmVwbGFjaW5n 82260 -XX0pCg== 82261 -aWxsdXNpb24= 82262 -IM6U 82263 -X0tFWUJPQVJE 82264 -S3I= 82265 -CW9y 82266 -56Gu6K6k 82267 -CXByaW50bG4= 82268 -IFNlYXJjaGVz 82269 -IEZyZXNubw== 82270 -IHZlcmRhZA== 82271 -XE1pZGRsZXdhcmU= 82272 -IOy1nA== 82273 -fSkoKTs= 82274 -dGV4dEFsaWdu 82275 -aW5rZWw= 82276 -LlR4dA== 82277 -IG9wdGltaXphdGlvbnM= 82278 -eW91bmc= 82279 -IGxlYXNlZA== 82280 -SlQ= 82281 -IElvbmljTW9kdWxl 82282 -ZXR0aW5ncw== 82283 -ZXNlaGVu 82284 -IGZhdm91cmFibGU= 82285 -YW5leQ== 82286 -IG90aGVyQnV0dG9uVGl0bGVz 82287 -IFRoYW1lcw== 82288 -CXVuaXQ= 82289 -Q09MVU1O 82290 -IGxvaQ== 82291 -LHByb3Rv 82292 -X1BSSQ== 82293 -IHdhbmRlcmVk 82294 -IHNhcGk= 82295 -YmFja3dhcmQ= 82296 -YXJhb2g= 82297 -IEZI 82298 -IEFsZw== 82299 -CWFj 82300 -YXJybw== 82301 -5Y6G 82302 -IFNPUw== 82303 -IERyZWFk 82304 -VmVjdG9yWGQ= 82305 -LnJtdHJlZQ== 82306 -X2V4ZWN1dG9y 82307 -IHByZWduYW5jaWVz 82308 -IHByYWN5 82309 -IFd3dw== 82310 -IEFyY2hiaXNob3A= 82311 -IG1laW5lbg== 82312 -RlU= 82313 -LkVudg== 82314 -IGVubGlnaHRlbmVk 82315 -IG9yaWdpbmF0ZQ== 82316 -5Y+K 82317 -IHpsaWI= 82318 -X1NB 82319 -IHdhc3Rlcw== 82320 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 82321 -cHJhcw== 82322 -IGhvcnJpZmllZA== 82323 -IENhbGR3ZWxs 82324 -dG95 82325 -X3Nob3Q= 82326 -IGxlc2Jp 82327 -IE1hZ25ldA== 82328 -b3hpYw== 82329 -U3VybmFtZQ== 82330 -IHNob3dUb2FzdA== 82331 -CURlc3Ryb3k= 82332 -LmdldEV4dGVybmFs 82333 -SUxJ 82334 -IE5ldmlsbGU= 82335 -dHNreQ== 82336 -IG1lbGFrdWthbg== 82337 -ICImIw== 82338 -IGZsb3dlcmluZw== 82339 -IHZldGVyaW5hcmlhbg== 82340 -IGhhcm1vbmlj 82341 -IENhc3NhbmRyYQ== 82342 -KENyZWF0ZQ== 82343 -cGVyc2U= 82344 -UGVybQ== 82345 -KU5TU3RyaW5n 82346 -IGlzSW4= 82347 -IEZsb2F0aW5nQWN0aW9uQnV0dG9u 82348 -L05ldw== 82349 -IPCd 82350 -Y2FwYWJpbGl0eQ== 82351 -IGN1Y2tvbGQ= 82352 -IEJhaW4= 82353 -KCl7DQoNCg== 82354 -UEVBUg== 82355 -IGphd3M= 82356 -IGdvZGU= 82357 -IGNhc3NldHRl 82358 -LmZyZXF1ZW5jeQ== 82359 -U0NPUkU= 82360 -LmludGVudA== 82361 -Olsi 82362 -IOWmguaenA== 82363 -77yf4oCd 82364 -L0ltYWdl 82365 -IHNpZW5kbw== 82366 -X2FsbG9jYXRpb24= 82367 -OkI= 82368 -L1JlZ2lzdGVy 82369 -X2thdGVnb3Jp 82370 -dW55YQ== 82371 -Lmluc3RhbmNlcw== 82372 -IFVOSVZFUlNJVFk= 82373 -IHBsZWFzYW50bHk= 82374 -IGdsYW5kcw== 82375 -IFlFTExPVw== 82376 -IFRoaWNr 82377 -QW10 82378 -IHByeQ== 82379 -IGx1aw== 82380 -KHByb2JsZW0= 82381 -IHByb2plY3Rpbmc= 82382 -W25vdw== 82383 -IGVzdG95 82384 -KCgpPT4= 82385 -IHdheXBvaW50cw== 82386 -IEJsaWNr 82387 -LlJlcXVpcmU= 82388 -TGFrZQ== 82389 -IElHTk9SRQ== 82390 -IFFIQm94TGF5b3V0 82391 -X3Jlc3BvbnNlcw== 82392 -Lndy 82393 -JmFjdGlvbg== 82394 -LmNoYXJhY3RlcnM= 82395 -SVc= 82396 -cGFnZU51bQ== 82397 -IGRpc3RyYWN0aW5n 82398 -XS0n 82399 -cGVlcw== 82400 -b3VuY3k= 82401 -IHNlZ3U= 82402 -LmdldFNlbGVjdGlvbk1vZGVs 82403 -SW5saW5pbmc= 82404 -J2FmZg== 82405 -IFByZXNlcnZl 82406 -IGFjcXVhaW50YW5jZQ== 82407 -IGFudXM= 82408 -aW5zdGl0dXRpb24= 82409 -IC8vKg== 82410 -IFNpY2s= 82411 -IEtvZGk= 82412 -IEFWUg== 82413 -IGJldHI= 82414 -IEJlcm5zdGVpbg== 82415 -LGN2 82416 -Y2Ni 82417 -Q0FG 82418 -CXNpZ25hbA== 82419 -6KiI 82420 -UmVzdWx0c0NvbnRyb2xsZXI= 82421 -IHNhbG9wZXM= 82422 -IHBoZW5vdHlwZQ== 82423 -dWJhaA== 82424 -X2RhdGFzZXRz 82425 -IGdyYWNpb3Vz 82426 -IENsaXBib2FyZA== 82427 -IGdlbmRlcnM= 82428 -ZG93bmxvYWRz 82429 -RXhwZXJpbWVudGFs 82430 -IGJla2FubnQ= 82431 -IG5pdmU= 82432 -LkVk 82433 -ZGlzbWlzcw== 82434 -XFR3aWc= 82435 -LkF2 82436 -L3Rhc2tz 82437 -LnBpY2tsZQ== 82438 -KkI= 82439 -Y2VzdG9y 82440 -Y2FwaXRhbGl6ZQ== 82441 -LkdldFNlcnZpY2U= 82442 -S2V5SWQ= 82443 -LnBpdGNo 82444 -IENvbnRyb2xsZWQ= 82445 -LnNhdmVk 82446 -IHphag== 82447 -IENhdGh5 82448 -KENhbmNlbGxhdGlvblRva2Vu 82449 -LWFuaW1hdGU= 82450 -XFxc 82451 -IEphc21pbmU= 82452 -LkxJTkU= 82453 -IGJvdGhlcnM= 82454 -IGJ1ZmZhbG8= 82455 -IEZPUkVJR04= 82456 -IHRhY2tsZWQ= 82457 -X0hFQVA= 82458 -IHNlcnZpYw== 82459 -Pj4s 82460 -IEFjdG9ycw== 82461 -LlR4 82462 -ZWJ4 82463 -X3Zpc2l0b3I= 82464 -X21hcnNoYWxlZA== 82465 -LG1hcA== 82466 -IGhlYXRlcnM= 82467 -IHVMb2NhbA== 82468 -IEthcG9vcg== 82469 -IG1pbnV0 82470 -LnJlYWRBcw== 82471 -IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u 82472 -X1ZPTFQ= 82473 -LmJ6 82474 -IGNvcnJlY3Rpbmc= 82475 -U0VQ 82476 -YnJpbmc= 82477 -SHU= 82478 -IEd1cw== 82479 -QUFE 82480 -aWVyYW4= 82481 -ZnJhcmVk 82482 -X3JvbQ== 82483 -IHNjYXJjaXR5 82484 -IGFwb2xvZ2lzZQ== 82485 -IHNvbGlkcw== 82486 -IEZvcm1hdHRlcg== 82487 -ICclJA== 82488 -LXZpcw== 82489 -IiwiIiw= 82490 -VU5ERVI= 82491 -ISEhIQoK 82492 -IEVsZXZlbg== 82493 -KSld 82494 -IHNhdGlyZQ== 82495 -XHVC 82496 -IHNldmVudGVlbg== 82497 -TEFOR1VBR0U= 82498 -IGFkdmVyc2FyeQ== 82499 -IHN0cmZ0aW1l 82500 -IG5leHVz 82501 -dWJpdHM= 82502 -ICclIg== 82503 -IFNLSVA= 82504 -S0hS 82505 -LmJhdA== 82506 -IEplYW5z 82507 -Lj8= 82508 -IGltcG9zdA== 82509 -LnF0eQ== 82510 -Q29tcHJlc3Npb24= 82511 -IHByaW5jaXBhbGVz 82512 -b25pbw== 82513 -IGJhcmNlbG9uYQ== 82514 -IENoaWxp 82515 -X21vc3Q= 82516 -LnVm 82517 -IGNvbnRlbnRWYWx1ZXM= 82518 -IEZpc3Q= 82519 -dWdhZG9y 82520 -VGV4dFdyaXRlcg== 82521 -QkFDS0dST1VORA== 82522 -IGxpdnJv 82523 -IERlc2lyZQ== 82524 -bWVhc3VyZW1lbnQ= 82525 -UHJvYmU= 82526 -IHB1ZGRpbmc= 82527 -LnNob3dFcnJvcg== 82528 -IHVudGVyc3TDvHQ= 82529 -44CB44CB 82530 -IMSHZQ== 82531 -IHB1bml0aXZl 82532 -5q2i 82533 -TGlzdEdyb3Vw 82534 -LkFyZWE= 82535 -IPCfmIkKCg== 82536 -b29yZA== 82537 -IHNjcmFwaW5n 82538 -KHRpY2tldA== 82539 -IFdvY2hl 82540 -IGV4cGVjdGVkUmVzdWx0 82541 -IEtvc3Rlbmxvcw== 82542 -Y29uZmlndXJlZA== 82543 -X3N0cmVycm9y 82544 -LmFkZEhhbmRsZXI= 82545 -bW91c2VsZWF2ZQ== 82546 -IEZlbGlwZQ== 82547 -IENoaW0= 82548 -X0NTUg== 82549 -UENB 82550 -aWZpY2HDp8Ojbw== 82551 -KysKCg== 82552 -eWFz 82553 -IOaWueazlQ== 82554 -IElETQ== 82555 -IGFuaW1hdGVXaXRoRHVyYXRpb24= 82556 -IHNhbWVu 82557 -LnN1YnRpdGxl 82558 -X0tleURvd24= 82559 -IFRyZXk= 82560 -IHRlbXBvcmFkYQ== 82561 -IHNwZA== 82562 -IFJj 82563 -IE1hc3NpdmU= 82564 -IGJvd3M= 82565 -SG9zcGl0YWw= 82566 -IGdyb290 82567 -IHBhdmluZw== 82568 -IGNob3Jlcw== 82569 -IEFsbHk= 82570 -IGNlcnRpZmljYXRpb25z 82571 -IHhib3g= 82572 -c2VsZWN0QWxs 82573 -R2FtZU92ZXI= 82574 -IGNvcm5lcnN0b25l 82575 -UmVjb3ZlcmVk 82576 -IGRlZW0= 82577 -VWx0cmE= 82578 -IGdldExhc3Q= 82579 -IGFsbWE= 82580 -LnRleHRGaWVsZA== 82581 -IHdhaXZlZA== 82582 -Pih7Cg== 82583 -IEVzdHI= 82584 -aXNhYmxl 82585 -IHByb3Rvbg== 82586 -X2ZhY2Vib29r 82587 -X1RSQUlO 82588 -IGNvb3BlcmF0aW5n 82589 -dW5naQ== 82590 -QXJpem9uYQ== 82591 -I2VjaG8= 82592 -LWV4cHJlc3Npb24= 82593 -Lm1pbnV0ZXM= 82594 -IHByZWZpeGVk 82595 -IGZpc2hlcmllcw== 82596 -LmNvcnJlY3Q= 82597 -IG7Dpg== 82598 -KFNwcml0ZQ== 82599 -TW9kcw== 82600 -IFZpZGU= 82601 -IGdldEJ5SWQ= 82602 -IEtleW5lcw== 82603 -IEVneXB0aWFucw== 82604 -X0NPRA== 82605 -Qmllbg== 82606 -cmVvcGVu 82607 -aWdoZXQ= 82608 -UkVERU5USUFM 82609 -IHVud2luZA== 82610 -JA0K 82611 -IHJhY2tldA== 82612 -IGZsb2F0VmFsdWU= 82613 -IFNwZWNpYWx0eQ== 82614 -b2NhdGU= 82615 -bW91bnRlZA== 82616 -QXR0ZW1wdHM= 82617 -T2ZmaWNlcnM= 82618 -SGFzaFRhYmxl 82619 -IGTDqXZlbG9wcGVtZW50 82620 -IGRhcA== 82621 -IG10eA== 82622 -TmFycmF0ZWQ= 82623 -a0I= 82624 -X1NUQQ== 82625 -LUNsYXNz 82626 -IGR1bA== 82627 -IExlYWRz 82628 -IHRyw6pz 82629 -ZnJpZW5kbHk= 82630 -IEZpbHRlcmluZw== 82631 -LXByb3ZpZGVy 82632 -INGD0YHQvw== 82633 -IEtvbGthdGE= 82634 -bWFza2Vk 82635 -SURhdGE= 82636 -IFt8 82637 -wqQ= 82638 -IFJlZXNl 82639 -IEhvbm9sdWx1 82640 -VG9PYmplY3Q= 82641 -IHRocmlmdA== 82642 -YXNzaQ== 82643 -IGNvbmdyYXR1bGF0aW9ucw== 82644 -U0tJ 82645 -ZW50YXJpb3M= 82646 -IEZST05U 82647 -dWZpZw== 82648 -aG9u 82649 -CWdldGxpbmU= 82650 -IGhlYXJ0eQ== 82651 -Y2FsaW5n 82652 -IMOpY29ub20= 82653 -ICoqKi8K 82654 -X0hFUkU= 82655 -YCg= 82656 -TWljaGlnYW4= 82657 -QmVhbnM= 82658 -LXJvdXRl 82659 -IHByaW5j 82660 -IEd1aWRhbmNl 82661 -CWVtaXQ= 82662 -Lk9Q 82663 -dGhpYw== 82664 -ZWxvcGU= 82665 -IElSZXF1ZXN0 82666 -IGhhbmRsZUNsb3Nl 82667 -ZGF0YUFycmF5 82668 -LkV4ZWN1dGVTY2FsYXI= 82669 -RVBISVI= 82670 -IENvbnZlcnNlbHk= 82671 -KEZvbnQ= 82672 -IG1ldHJl 82673 -IFNwaWVsZXI= 82674 -RWxsaXBzZQ== 82675 -IFBWT0lE 82676 -IERhdGFDb250ZXh0 82677 -Y29uc3RydWN0ZWQ= 82678 -QU5ESU5H 82679 -LS0tLS0tLS0tLS0qLwo= 82680 -Qm9uam91cg== 82681 -X1BIUA== 82682 -cHJvZ3Jlc3NiYXI= 82683 -Tm90U3VwcG9ydGVkRXhjZXB0aW9u 82684 -IHZlcmRhZGU= 82685 -L2NoYW5nZQ== 82686 -b3Jzaw== 82687 -IGFyb21hdGlj 82688 -cmVzcG9ucw== 82689 -cmVhbGxvYw== 82690 -YXRpc2No 82691 -LGV2 82692 -IFNpb3V4 82693 -dGVh 82694 -IFBvZQ== 82695 -5LmI 82696 -X2Ntb3M= 82697 -IGFsYg== 82698 -KGxy 82699 -IEFwcGFyZWw= 82700 -IGRlbGxv 82701 -INGC0L7Rhw== 82702 -IHN0cmVhbWxpbmU= 82703 -d2NoYXI= 82704 -QWRvYmU= 82705 -LG1vZHVsZQ== 82706 -IHVuaW5zdXJlZA== 82707 -fSIpDQo= 82708 -KCIvLypbQA== 82709 -LXBoYXNl 82710 -IGZldQ== 82711 -X3RB 82712 -em9law== 82713 -IGZvbGxpYw== 82714 -IHR1Zw== 82715 -IGJlZmluZA== 82716 -IHRhbGxlc3Q= 82717 -KG10 82718 -aWVkeQ== 82719 -X0xlbmd0aA== 82720 -IHN0YXVuY2g= 82721 -IHJlbW92ZU9iamVjdA== 82722 -IGZsYWtlcw== 82723 -Z3Jlc3Fs 82724 -IGlua2w= 82725 -IFNDU0k= 82726 -IEtlZXBlcg== 82727 -O2w= 82728 -IEhpbmR1cw== 82729 -X1BFRA== 82730 -X0NPTkQ= 82731 -IExhdW5kcnk= 82732 -KytdPQ== 82733 -X0FVWA== 82734 -IGJ5xYI= 82735 -IGF1bWVudG8= 82736 -bWFyZ2luTGVmdA== 82737 -ZXF1YWxpdHk= 82738 -IEx1eg== 82739 -IEVjaw== 82740 -X21hcw== 82741 -X2xlbnM= 82742 -IHN0ZXJpbGU= 82743 -Y2xpZW50ZXM= 82744 -J30pCgo= 82745 -IGdvb2R3aWxs 82746 -IEVsbGlzb24= 82747 -U3BhY2VJdGVt 82748 -IHNob3dNZXNzYWdl 82749 -66Gc6re4 82750 -IGNvbnRyYXRv 82751 -UG9zdGluZw== 82752 -LmludGVycG9sYXRl 82753 -KGZpbGw= 82754 -IGJ1bGxwZW4= 82755 -LmdlbmVy 82756 -IGh1ZXM= 82757 -IG1lbW9yYW5kdW0= 82758 -dG9Qcm9taXNl 82759 -IEJ5eg== 82760 -KHB4 82761 -KFByb2dyYW0= 82762 -UkVTU0lPTg== 82763 -YmZk 82764 -IHBsYW50YQ== 82765 -Lm1vdXNlUG9zaXRpb24= 82766 -IFNwYW0= 82767 -6LSn 82768 -dGVsZWdyYW0= 82769 -YWd5 82770 -IGdlZnVuZGVu 82771 -LkRvbQ== 82772 -IGxpbmVtYW4= 82773 -LmJ0bkRlbGV0ZQ== 82774 -IHNlbGVjdGl2ZWx5 82775 -65Og 82776 -SUZT 82777 -IEdldEhhc2hDb2Rl 82778 -IHJldGly 82779 -IHJlcXVpc2l0ZQ== 82780 -QlRUYWc= 82781 -cGxpYg== 82782 -IGZpcmVmb3g= 82783 -LnRyYWRl 82784 -ICMk 82785 -LmNvbXByZXNz 82786 -IGxhZGVu 82787 -IERpcmVjdG9yeUluZm8= 82788 -IE1vZGVz 82789 -IGtvbmU= 82790 -IGRpdnVs 82791 -CWhz 82792 -Y3JvZnQ= 82793 -IFdIWQ== 82794 -eENF 82795 -L0dyaWQ= 82796 -X0FVRA== 82797 -IFNjcmU= 82798 -IGVycm9yVGhyb3du 82799 -U2FkbHk= 82800 -YXRpdGlz 82801 -IG5lZ2xpZ2libGU= 82802 -LlJlZ2lzdGVyVHlwZQ== 82803 -IE1vaXN0 82804 -5rWL6K+V 82805 -IEJNQw== 82806 -bGVhZmxldA== 82807 -eW5l 82808 -cm9rZW4= 82809 -IHZpbmM= 82810 -dHR5 82811 -IGJldXJldHRl 82812 -IEFscGluZQ== 82813 -IE1jTQ== 82814 -U3BvaWxlcg== 82815 -ZGlzdHJpYnV0aW9u 82816 -LXJheXM= 82817 -IOuwlA== 82818 -X3BhcmVudHM= 82819 -IGNyYXRlcw== 82820 -IGNvbW11dGVycw== 82821 -IEFyZ2VudGluZQ== 82822 -77u/LyoK 82823 -L2ZyYW1ld29yaw== 82824 -IGNoYW5uZWxJZA== 82825 -Z3JlZW5z 82826 -LnNldFN0eWxlU2hlZXQ= 82827 -IGluYWNjZXNzaWJsZQ== 82828 -aXRhdGVz 82829 -IHdhcm1lZA== 82830 -RmFicmlj 82831 -Z2V0YXR0cg== 82832 -ZGlzcGxheVRleHQ= 82833 -X01PTklUT1I= 82834 -IHNpZGV3YWxrcw== 82835 -SW50aWFsaXplZA== 82836 -IGtvbWVu 82837 -IGRpc2NyaW1pbmF0b3I= 82838 -IE5hdmlnYXRl 82839 -KERpcmVjdGlvbg== 82840 -IFNwaXQ= 82841 -X2FkZGl0aW9uYWw= 82842 -IGh0b24= 82843 -IGVzcGVyYQ== 82844 -IGRlbHZl 82845 -IGNvbXBhcnRpcg== 82846 -IHByZWVtcHQ= 82847 -cHJvY2Vzc29ycw== 82848 -LWdpdA== 82849 -YmVlbg== 82850 -LlNVQg== 82851 -IFJlZXZlcw== 82852 -L2dlbg== 82853 -O3RvcA== 82854 -CU1QSQ== 82855 -Wlc= 82856 -R0VTVA== 82857 -YWJpbGly 82858 -IHByb2dyZXNzaXZlcw== 82859 -aGFmdA== 82860 -QXVm 82861 -IEFjdGlvblR5cGU= 82862 -bGVv 82863 -IHV0YW4= 82864 -SW5pY2lhbA== 82865 -PlVzZXI= 82866 -IH0pOwoKCgo= 82867 -INio2Yc= 82868 -IENoYWlucw== 82869 -aXNzcGFjZQ== 82870 -L3JlbQ== 82871 -U1FMaXRl 82872 -IGNlYXNlZmlyZQ== 82873 -JGFy 82874 -VFJT 82875 -Oi8vew== 82876 -IFNwaXJpdHM= 82877 -2Lo= 82878 -KFNpemU= 82879 -IG51Zw== 82880 -IE9sc2Vu 82881 -IGNobG9yaWRl 82882 -IERpc3BsYXlOYW1l 82883 -IFBlcnQ= 82884 -IGdldE1heA== 82885 -IEVkaXRvcnM= 82886 -IFBhaXM= 82887 -YXNtdXM= 82888 -VmFj 82889 -IFRhYmxlTmFtZQ== 82890 -IG51YW5jZWQ= 82891 -Rm9yTWVtYmVy 82892 -IHNsZWVweQ== 82893 -YWR2aXNvcg== 82894 -IHN0YWxraW5n 82895 -Lm1lZGlhbg== 82896 -X0F0dA== 82897 -IGdldE5vZGU= 82898 -IEZhbmN5 82899 -5pWw6YeP 82900 -LkF0dHJpYnV0ZVNldA== 82901 -KGluc3RydWN0aW9u 82902 -eEJE 82903 -IGtvcA== 82904 -QWZmZWN0ZWQ= 82905 -L25hdmJhcg== 82906 -IGFpbG1lbnRz 82907 -IFJhbWFkYW4= 82908 -IEFjY2VudA== 82909 -IFBhcmFtb3VudA== 82910 -IEdBTQ== 82911 -5L2N572u 82912 -PSov 82913 -LklOUFVU 82914 -PFByb2plY3Q= 82915 -TGVhc3Q= 82916 -IEdlbm9tZQ== 82917 -QWNjZXNzb3JUeXBl 82918 -bGVmdHJpZ2h0YXJyb3c= 82919 -dmVudGluZw== 82920 -L3BheW1lbnQ= 82921 -X1B0cg== 82922 -IHRhbWU= 82923 -IE1FTUJFUg== 82924 -IEJpdGNvaW5z 82925 -LmVwYW0= 82926 -LlBsZWFzZQ== 82927 -IHNjaHdhcg== 82928 -Q3BwTWV0aG9kSW50aWFsaXplZA== 82929 -IHVuaWNvcm4= 82930 -IGJlZGV1dA== 82931 -X0hT 82932 -IGF1dG9nZW5lcmF0ZWQ= 82933 -IExpbGx5 82934 -IEFzc2Vzcw== 82935 -IEhlaWRp 82936 -LnNvdXJjZXM= 82937 -LnRlbGw= 82938 -YXJnaW5z 82939 -KCInIiw= 82940 -0LvQvtC2 82941 -IEVyb3RpYw== 82942 -IGp1c3Rv 82943 -IGVzYWM= 82944 -Y29tYQ== 82945 -IENvbG9ueQ== 82946 -IHBjdA== 82947 -CWVu 82948 -IGVtcGV6 82949 -IERlbGV0aW5n 82950 -TkVM 82951 -IGVuYW0= 82952 -UHJlc3NFdmVudA== 82953 -IFJlc29sdmVy 82954 -IFJURQ== 82955 -Rng= 82956 -IEluY29ycmVjdA== 82957 -IHlj 82958 -X3JlYWRpbmc= 82959 -O2Jhc2U= 82960 -IGhhc2h0YWdz 82961 -IE1hcmluZXJz 82962 -LlNldEZsb2F0 82963 -IHJlYXNzdXJpbmc= 82964 -aXJzY2g= 82965 -KHVzZXJpZA== 82966 -ID09PT0= 82967 -XSkpKTsK 82968 -a2Y= 82969 -IHRpbGVk 82970 -ZWd1YXJk 82971 -Q2xpZW50ZXM= 82972 -5pmC6ZaT 82973 -ZHNs 82974 -UmlnaHRz 82975 -IFBzYWxt 82976 -ZHVyaW5n 82977 -Q2xlYXJDb2xvcg== 82978 -dXN0YQ== 82979 -PENvbW1lbnQ= 82980 -IG5venpsZQ== 82981 -IFBMQUNF 82982 -L2hpc3Rvcnk= 82983 -aWh1 82984 -aVZhcg== 82985 -IGdlcm0= 82986 -IHRyaW1taW5n 82987 -IEh1bnRlcnM= 82988 -IFJTVlA= 82989 -SW50ZXJlc3RpbmdseQ== 82990 -amlhbg== 82991 -KSl7Cgo= 82992 -LkV4cGVjdA== 82993 -IFRvaWxldA== 82994 -IHdhbGxwYXBlcnM= 82995 -LldlYlNlcnZsZXQ= 82996 -YXJwYQ== 82997 -L21haW53aW5kb3c= 82998 -aHE= 82999 -IHV5 83000 -IGluZGlnbg== 83001 -Q2hlY2tlZENoYW5nZUxpc3RlbmVy 83002 -IGNhbGxlcnM= 83003 -IE1vdXNlRXZlbnRBcmdz 83004 -IEpTY3JvbGxQYW5l 83005 -IHfFgmE= 83006 -cmVwb3NpdG9yaWVz 83007 -IMWbdw== 83008 -IHJlZmVyZW5jaWE= 83009 -IGlvdGE= 83010 -IGNhcmdhcg== 83011 -X29ic2VydmVy 83012 -SENJ 83013 -c2lsdmVy 83014 -IGRldmFzdGF0aW9u 83015 -LXNlbWlib2xk 83016 -IEV4cGxhaW4= 83017 -IEJsb2NrbHk= 83018 -Llhy 83019 -ZXN0dXJlUmVjb2duaXplcg== 83020 -Q2FuY2VsQnV0dG9u 83021 -IExvY2tl 83022 -VHJpYWw= 83023 -X1BMQUNF 83024 -anVhbGFu 83025 -IFJ1Ymlu 83026 -U3RyaXBl 83027 -IG1ldGFEYXRh 83028 -Y29uZmlkZW5jZQ== 83029 -X2JhdHRlcnk= 83030 -IGlzbA== 83031 -IGJvYQ== 83032 -LnRhcmdldHM= 83033 -bGlqa2U= 83034 -IGFkb2xlc2NlbnRl 83035 -YmV3 83036 -LEZhbHNl 83037 -IHlPZmZzZXQ= 83038 -UHJldmlvdXNseQ== 83039 -PXBhdGg= 83040 -X0FB 83041 -iOadgw== 83042 -IGJha2VrYQ== 83043 -IGxlZQ== 83044 -IEJsb2NraW5n 83045 -L3RpdGxl 83046 -IOW8gA== 83047 -IFN0ZXZlbnNvbg== 83048 -KW9iamVjdA== 83049 -aXN0cm9z 83050 -LmdldFNlcnZlcg== 83051 -IHBsYW50YXRpb24= 83052 -X0JveA== 83053 -ICc7Jw== 83054 -dGljYQ== 83055 -KSldOwo= 83056 -IGRpc3Bhcml0aWVz 83057 -xrDhu5s= 83058 -aWNyb2JpYWw= 83059 -IHNwYXM= 83060 -L0RE 83061 -KHBvaW50ZXI= 83062 -IG1pZHBvaW50 83063 -LmdldENsYXNzTmFtZQ== 83064 -IFRvdGFsbHk= 83065 -IGNvbmdlbg== 83066 -IHTDqnRl 83067 -LnhsaW0= 83068 -Q09NUExFVEU= 83069 -KGZp 83070 -b3dhcmQ= 83071 -0LzRjw== 83072 -LmFzYw== 83073 -IHBhZ2luYXRl 83074 -IGx1cmtpbmc= 83075 -LnNpZ251cA== 83076 -U1RZTEU= 83077 -IHdvcnNo 83078 -aHY= 83079 -IGRlZmVuc2l2ZWx5 83080 -IEx1dGhlcmFu 83081 -LmZ1bg== 83082 -INC40L3RhNC+0YDQvA== 83083 -cHNj 83084 -IGFkbW9u 83085 -IEVzdGltYXRlZA== 83086 -IE15U3FsQ29ubmVjdGlvbg== 83087 -LnN0YXR1c1N0cmlw 83088 -IGFudGlnZW4= 83089 -IGhlcnJhbWllbnQ= 83090 -IENvbnN1bWVycw== 83091 -IFlU 83092 -Lm1hc2tzVG9Cb3VuZHM= 83093 -Lnh0aWNrcw== 83094 -OnJlcXVlc3Q= 83095 -IE1vbw== 83096 -LWF1 83097 -IHRvUmV0dXJu 83098 -IFNhcHBoaXJl 83099 -Y294 83100 -ZXhhbXBsZUlucHV0RW1haWw= 83101 -IGNvcmF6 83102 -KHBpZWNl 83103 -IHJlY29uc3RydWN0ZWQ= 83104 -X3NpZ251cA== 83105 -J10pPw== 83106 -QmlsbGluZw== 83107 -IENyb3dsZXk= 83108 -c3Rvcm1z 83109 -Zm9yY2Vy 83110 -IHN1cHJlbWFjaXN0 83111 -X3doZWVs 83112 -CXBj 83113 -LmdldERvY3VtZW50 83114 -LnVuc3F1ZWV6ZQ== 83115 -LmdyYWRl 83116 -ZWxsdW5n 83117 -LnNob3BwaW5n 83118 -Y3VzdG9tZXJJZA== 83119 -IG1lZGlkYXM= 83120 -IE1vbWVudHM= 83121 -ZW51b3Vz 83122 -SUZJQ0FURQ== 83123 -IyMjIyMjIwo= 83124 -5paH56ug 83125 -4buNYw== 83126 -b3Jtc2c= 83127 -YWxvbQ== 83128 -LXRyYWRl 83129 -CWJ0 83130 -L3N0dWRlbnQ= 83131 -YnJpZw== 83132 -YW5uZXNz 83133 -KHJh 83134 -IHJpY2VyY2E= 83135 -U3BlYWtlcg== 83136 -csOz 83137 -Z3Rlc3Q= 83138 -R2x5cGg= 83139 -w7xnZW4= 83140 -QEpzb24= 83141 -KHN1bW1hcnk= 83142 -S29t 83143 -YmV0aA== 83144 -L2VuZ2luZQ== 83145 -Q2xpbWF0ZQ== 83146 -c3VibWl0QnV0dG9u 83147 -ZXZl 83148 -ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cg== 83149 -cGVkaWE= 83150 -IHVzZXJuYW1lcw== 83151 -IEpN 83152 -IG1zZQ== 83153 -aW5zcGVjdA== 83154 -IFNuYXBkcmFnb24= 83155 -IGRlZmVuc2VtYW4= 83156 -IFVJVGFibGVWaWV3RGVsZWdhdGU= 83157 -aW5kaG92ZW4= 83158 -IEJveWxl 83159 -IEFsdGE= 83160 -YXJkdQ== 83161 -IHdyZXN0bGVy 83162 -IFN0cmFpdA== 83163 -IGVncmVn 83164 -X2Jhc2VsaW5l 83165 -RW52aXJvbm1lbnRhbA== 83166 -IGludml0 83167 -IEJUUw== 83168 -IElTSUw= 83169 -IGNvb3A= 83170 -aG9yZXM= 83171 -I0A= 83172 -IGNvbXBlbA== 83173 -KHNraXA= 83174 -6Ziz 83175 -X0RFUFJFQ0FURUQ= 83176 -aXBoZXJz 83177 -ZG91YmxlVmFsdWU= 83178 -IEFSUg== 83179 -LlNjb3Jl 83180 -IGNocm9tb3NvbWVz 83181 -Y2xhdXNl 83182 -IEx1aWdp 83183 -IHN1bnNjcmVlbg== 83184 -IGN5dG9r 83185 -LnRvSlNPTlN0cmluZw== 83186 -IHByb3ByZQ== 83187 -cG9vbnM= 83188 -bWl0dGVycw== 83189 -IGtpdHRlbnM= 83190 -IGNhdGhvbGlj 83191 -Lmx0 83192 -wqw= 83193 -X3F1aWNr 83194 -IHZyYWk= 83195 -IElSZWFkT25seQ== 83196 -IEhpZ2dpbnM= 83197 -IHNob3ZlZA== 83198 -IGxpYWlzb24= 83199 -X293bg== 83200 -IG1vc3F1aXRvZXM= 83201 -X25n 83202 -LlNldEtleU5hbWU= 83203 -X1JlbmRlcmVy 83204 -X09zYw== 83205 -LnVucmVnaXN0ZXI= 83206 -TWVzc2FnZVR5cGU= 83207 -LWZvdW5kZWQ= 83208 -IHNvdXRoZWFzdGVybg== 83209 -IGhhc2h0YWJsZQ== 83210 -LmluZGVudA== 83211 -IGpveWZ1bA== 83212 -X3NleA== 83213 -c2Fk 83214 -LmRlYmlhbg== 83215 -X2dhcw== 83216 -IHBlcmlzaA== 83217 -IGhldGU= 83218 -X3NpbmdsZXRvbg== 83219 -KGdyYWQ= 83220 -IGt0w7NyYQ== 83221 -IGR3aW5k 83222 -aXR0YWw= 83223 -U2VlaW5n 83224 -IFJvb2tpZQ== 83225 -CUxhYmVs 83226 -c2hhbg== 83227 -PDw8PDw8PDw= 83228 -IHLDqA== 83229 -aWVzZWw= 83230 -YXJyZXJh 83231 -Y2hyaXN0 83232 -IGN1cnZhdHVyZQ== 83233 -IGVwaGVt 83234 -Rm9ybWF0dGluZw== 83235 -LmRpY3Rpb25hcnk= 83236 -LlNldHRlcg== 83237 -IEhpc3RvZ3JhbQ== 83238 -IFN0dXR0Z2FydA== 83239 -IHBhY2luZw== 83240 -dXRhdGlvbnM= 83241 -IE5TSw== 83242 -IFBhbWVsYQ== 83243 -IEJhaWw= 83244 -IHBvbGFyaXphdGlvbg== 83245 -IEfDtg== 83246 -IEVsYWluZQ== 83247 -IGtpY2tvZmY= 83248 -IGNoYXBlbA== 83249 -PXBvc3Q= 83250 -IG1pZHdheQ== 83251 -ZXdpcw== 83252 -X01S 83253 -aWVlZQ== 83254 -LXRlc3Rpbmc= 83255 -bWV6 83256 -Pi0t 83257 -IGRvY3RyaW5lcw== 83258 -IG1pbGlldQ== 83259 -IFJBRElP 83260 -dGFrZW4= 83261 -UmVzcG9ucw== 83262 -IGhhbmRzZXQ= 83263 -IGNvbnRybw== 83264 -IEFwcGxpZXM= 83265 -6Zif 83266 -LkJpbmRpbmdTb3VyY2U= 83267 -INis 83268 -IGh1bWlsaQ== 83269 -IE1lbGFuaWE= 83270 -T3ZlcmxhcA== 83271 -KFBhcmNlbA== 83272 -IHdhcmVob3VzZXM= 83273 -LkdldEJ5SWQ= 83274 -IGZyYW5rZnVydA== 83275 -IFdpdHQ= 83276 -LnByb2o= 83277 -IFNhc2hh 83278 -IFJldmVy 83279 -IGFydGljdWxhdGVk 83280 -YW5jaGVz 83281 -IFNlbWluYXI= 83282 -IERhZ2dlcg== 83283 -IEFnaWxl 83284 -T1dM 83285 -IEJz 83286 -b2tseW4= 83287 -RXRh 83288 -IGFnb3N0bw== 83289 -7ZWY7Jes 83290 -IG9wdGFyZw== 83291 -CW9uQ2hhbmdl 83292 -IFJPQUQ= 83293 -R0JL 83294 -IGVudGZlcg== 83295 -LkF1dG9Db21wbGV0ZQ== 83296 -IGhlbGZlbg== 83297 -Q2hlYXA= 83298 -IGFwcHJlbnRpY2U= 83299 -aW90aWNz 83300 -5oqA 83301 -T2ZZZWFy 83302 -aW5kZXJlZA== 83303 -Lk1TRw== 83304 -IE1hcsOtYQ== 83305 -KGlucGxhY2U= 83306 -IGZpbmRl 83307 -KERF 83308 -LlNlcmlhbGl6ZXI= 83309 -JHRpbWU= 83310 -dW5uYWJsZQ== 83311 -TWFpblRocmVhZA== 83312 -ZGVwbG95bWVudA== 83313 -IG1wZnI= 83314 -cmljaFRleHRQYW5lbA== 83315 -KTsKCgoKCg== 83316 -IGRhbnljaA== 83317 -X0JFRk9SRQ== 83318 -X2FyeQ== 83319 -IEJhdW0= 83320 -IHR1cmJ1bGVudA== 83321 -IE11bHRpbWVkaWE= 83322 -IHBoeXNpY2lzdA== 83323 -5Zy6 83324 -QW5pbWF0ZQ== 83325 -PUY= 83326 -UGFnbw== 83327 -L3R3aXR0ZXI= 83328 -b3R0aWU= 83329 -dWN1cnNhbA== 83330 -X3BhZ2luYXRpb24= 83331 -LmFyY2hpdmU= 83332 -LWRvY3VtZW50 83333 -aW5pbmU= 83334 -U2VsbGVy 83335 -YWRyZXNz 83336 -6ZO+5o6l 83337 -0LDRgtC10LPQvtGA 83338 -X2ZybQ== 83339 -bm9EQg== 83340 -aWdhdGVk 83341 -IE9zYW1h 83342 -cGV0dG8= 83343 -Pnk= 83344 -LVVu 83345 -IGNvcHBpYQ== 83346 -QWxtb3N0RXF1YWw= 83347 -LmxleA== 83348 -IGxldmVsZWQ= 83349 -IFNDSVA= 83350 -X0hPT0s= 83351 -SUxvZ2dlcg== 83352 -bmVhdQ== 83353 -77ye 83354 -24zZhg== 83355 -aWtoYWls 83356 -IHVwbG9hZGVy 83357 -IENhcm9seW4= 83358 -LmFkZFZhbHVl 83359 -dGhpbmtpbmc= 83360 -cHJpbnRTdGF0cw== 83361 -IGNhbWJpb3M= 83362 -cG9p 83363 -IEJFRA== 83364 -IHhibWM= 83365 -Lu+/vQ== 83366 -IHNhcmNhc3Q= 83367 -IE5FQw== 83368 -JGJvZHk= 83369 -QWxsV2luZG93cw== 83370 -IHlvdW5nc3Rlcg== 83371 -IHVuZWFzeQ== 83372 -KEFU 83373 -IG5vc3RhbGdpYw== 83374 -UFJJQ0U= 83375 -IFNlaXRlbg== 83376 -IG1ha2E= 83377 -IGxpbXA= 83378 -IGNvbnRyYXN0cw== 83379 -Q29mZmVl 83380 -CWdlbg== 83381 -IHBlcm1z 83382 -IE5lZWRsZXNz 83383 -b3V2ZQ== 83384 -YXJjaGluZw== 83385 -X3BlbmFsdHk= 83386 -cm93YWQ= 83387 -b25nYW4= 83388 -X2R1cg== 83389 -IGlmbmRlZg== 83390 -aWF1eA== 83391 -IGNhcGFjaWRhZA== 83392 -IE5vcnRl 83393 -IC0qLQ0K 83394 -aWZlcw== 83395 -IE1hbnNpb24= 83396 -I1JlZ2lvbg== 83397 -Q2FuY2VsbGF0aW9u 83398 -IG5lYXJpbmc= 83399 -IGxhbmd1 83400 -ZXJlcXVpc2l0ZXM= 83401 -X2V4cGVyaW1lbnQ= 83402 -b25kaGVpbQ== 83403 -XSwm 83404 -IENvb2xpbmc= 83405 -IHNhZmFyaQ== 83406 -IHBpb25lZXJz 83407 -IGZhcm1ob3VzZQ== 83408 -IGRpc3RhbmNpYQ== 83409 -IGRlc2VydGVk 83410 -IE5hcnJvdw== 83411 -LnNn 83412 -IGVudHJhcg== 83413 -LnJh 83414 -IHJlZnVyYmlzaGVk 83415 -IGludGVyY29ubmVjdGVk 83416 -IHN1cnZpdmVz 83417 -IHF1YWxpZmllcnM= 83418 -X0NIQVJT 83419 -LWFqYXg= 83420 -IFJvcnk= 83421 -IGtvbGVq 83422 -L0dM 83423 -X2xlZ2Fs 83424 -IFRZUEVT 83425 -IFZvaWNlcw== 83426 -IEZlcmQ= 83427 -dWplbXk= 83428 -IHNjb3JlYm9hcmQ= 83429 -IEJPVA== 83430 -eERE 83431 -IEl2YW5rYQ== 83432 -IGhzdg== 83433 -bm9kaXNjYXJk 83434 -IFRIRVNF 83435 -bW9qb20= 83436 -IHRpY2tpbmc= 83437 -cGVx 83438 -IOa3u+WKoA== 83439 -IE5pY29s 83440 -CWFuZ2xl 83441 -X2FsbG9jYXRlZA== 83442 -IHN0cnV0 83443 -eERC 83444 -RXZhbHVhdGU= 83445 -IFZBUklBTlQ= 83446 -IHJlZmVyZW5jZWRDb2x1bW5OYW1l 83447 -bG9o 83448 -IFJlcXVlc3RPcHRpb25z 83449 -IGNvY28= 83450 -IGJsZWFjaA== 83451 -X29yZ2FuaXphdGlvbg== 83452 -IENITw== 83453 -SFRUUFM= 83454 -X2JhcnJpZXI= 83455 -LnZpc2l0TWV0aG9kSW5zbg== 83456 -IHZpdGU= 83457 -IC0k 83458 -W2NlbGw= 83459 -IGNlc3NhdGlvbg== 83460 -CgoKCgoKCgoKCgo= 83461 -INGB0LDQuQ== 83462 -RXZhbHVhdGlvbg== 83463 -IENJTQ== 83464 -cXVhbGl0aWVz 83465 -WG1sQXR0cmlidXRl 83466 -IEVtb2pp 83467 -ICIoJw== 83468 -IFRVUk4= 83469 -eHNk 83470 -IEdJUw== 83471 -IGNyZWF0ZVNlbGVjdG9y 83472 -cmlwcGxl 83473 -IHVubmVjZXNzYXJpbHk= 83474 -IG5ld1Bvcw== 83475 -IHN5bWJvbGlzbQ== 83476 -b2J1dHRvbg== 83477 -IHNhbW8= 83478 -ICgqKCg= 83479 -LnJld2FyZA== 83480 -S0VSTkVM 83481 -KGpTY3JvbGxQYW5l 83482 -IGJ5c3RhbmQ= 83483 -X2ljYWxs 83484 -IGR1bmdlb25z 83485 -IGNvbnN0ZWxsYXRpb24= 83486 -IGVtYnJhY2Vz 83487 -IEluZmFudA== 83488 -QXVzdGlu 83489 -LmFic3RyYWN0 83490 -IGNvbXBhZ24= 83491 -IENvbmRpdGlvbmluZw== 83492 -TWFpcw== 83493 -VmVyaWZpZXI= 83494 -IFB5cmFtaWQ= 83495 -IG1MaXN0ZW5lcg== 83496 -X2J1aWxkaW5n 83497 -LlJlZGlz 83498 -IFRvb3Ro 83499 -TE9HR0VS 83500 -LkFzeW5jVGFzaw== 83501 -X3ByaW5jaXBhbA== 83502 -ZXhhbXBsZU1vZGFsTGFiZWw= 83503 -CUxvY2Fs 83504 -TWFya2Vycw== 83505 -IGRvbHBoaW5z 83506 -LlRleHRFZGl0 83507 -J2Fs 83508 -IG92ZXJzdA== 83509 -LWRyaXZl 83510 -IGluc29tbmlh 83511 -IGFkYg== 83512 -X3F1ZXVlcw== 83513 -RWI= 83514 -IERhbW4= 83515 -aXN0cmluZ3N0cmVhbQ== 83516 -CUR1ZWw= 83517 -aWJibGU= 83518 -IGltcmVhZA== 83519 -LmZpbmlzaGVk 83520 -IG1pc3JlcHJlc2VudGVk 83521 -xYRzdA== 83522 -aW9uYWxlcw== 83523 -Ik5vdw== 83524 -LlNlbGVjdFNpbmdsZU5vZGU= 83525 -IHdlYWtlbmluZw== 83526 -X2luc3RydWN0aW9ucw== 83527 -LW9z 83528 -IHN0YXJ0UG9pbnQ= 83529 -IE1pbWU= 83530 -IEhlbGQ= 83531 -fHwo 83532 -dW1taW5ncw== 83533 -b2tpbm8= 83534 -IHJlZmw= 83535 -cmlkb3I= 83536 -SW50ZWdyYXRlZA== 83537 -RU9iamVjdA== 83538 -cGVhdHM= 83539 -Q2lyY3VsYXI= 83540 -IFNvZGl1bQ== 83541 -IHBvZHLDrWE= 83542 -bWVkaWNpbmU= 83543 -IHBhcmFub2lh 83544 -L2JhY2tncm91bmQ= 83545 -KGJvcmRlcg== 83546 -X3Nsb3c= 83547 -IHByZXNlbnRWaWV3Q29udHJvbGxlcg== 83548 -IGNvbnRpbmdlbmN5 83549 -IFBhc2FkZW5h 83550 -bG9vcHM= 83551 -IE9j 83552 -YXBwbGljYXRpb25z 83553 -IG1wZw== 83554 -IEFR 83555 -LldpbkNvbnRyb2xz 83556 -bGVkb24= 83557 -IFJlcQ== 83558 -IEFjcmVz 83559 -aWJpcg== 83560 -IGdldFdpbmRvdw== 83561 -IFlhaA== 83562 -IG5lZWR5 83563 -4pa6 83564 -IFRPTQ== 83565 -KFsuLi4= 83566 -IGZx 83567 -IENhbWRlbg== 83568 -b3JkaW5hdGVk 83569 -CWNoaWxkcmVu 83570 -dmVnZXQ= 83571 -CWRpcmVjdGlvbg== 83572 -PEZpZWxk 83573 -X2NvcnJlY3Rpb24= 83574 -KEVORA== 83575 -SEVFVA== 83576 -RmFsc3k= 83577 -LmR5bGli 83578 -X1JFUE8= 83579 -IGJyaWxsaWFuY2U= 83580 -b2dyw6Fm 83581 -bG9k 83582 -IHBvd2RlcmVk 83583 -KEFydA== 83584 -IE1JTEw= 83585 -0LXQtNCw0Lo= 83586 -X3NpbXVsYXRpb24= 83587 -IHNtYXNoaW5n 83588 -IHVybFN0cmluZw== 83589 -IGRyZWFkZWQ= 83590 -cmllZw== 83591 -L25z 83592 -IEludGVycHJldGVy 83593 -Om1heA== 83594 -ZGVyaXY= 83595 -IFBldHQ= 83596 -IG1vZMOobGU= 83597 -IGFtcGxpZmllZA== 83598 -IFNpZ25hbHM= 83599 -Lm5hdkN0cmw= 83600 -5ZY= 83601 -IHNlcGFyYXRvcnM= 83602 -IFNISUZU 83603 -IGZpZGVsaXR5 83604 -LnNvbg== 83605 -KGNh 83606 -IFBMVUdJTg== 83607 -IGxpZ2h0ZW4= 83608 -UEJT 83609 -ZmxvYXRpbmc= 83610 -KGxvYWRlcg== 83611 -IHBlZWxlZA== 83612 -aGlj 83613 -IHRhcGVk 83614 -IG5vdmVtYnJl 83615 -IHN0dWZmaW5n 83616 -IEZpcmVhcm1z 83617 -LkRyYXdhYmxl 83618 -IGNvcnRpY2Fs 83619 -IEdVSUNvbnRlbnQ= 83620 -IFZlcm9uaWNh 83621 -X3JzYQ== 83622 -IGNvbW1lbW9yYXRl 83623 -LlNZU1RFTQ== 83624 -IGRhbXM= 83625 -LmlzVHJ1ZQ== 83626 -IFByZWduYW5jeQ== 83627 -7Iug 83628 -IGF1ZGl0b3J5 83629 -KENlbGw= 83630 -IGludmFkaW5n 83631 -IGZvckVhY2g= 83632 -CURyYXc= 83633 -TWFyY3Vz 83634 -UHJvY2Vzc2Vk 83635 -IHNwcmF5aW5n 83636 -IE91dGxpbmVJbnB1dEJvcmRlcg== 83637 -ZXNzZXJhY3Q= 83638 -IOacgA== 83639 -UGc= 83640 -LXF1YXJ0ZXJz 83641 -IHNrbA== 83642 -L3Byb3ZpZGVycw== 83643 -dG9IYXZlQmVlbkNhbGxlZFRpbWVz 83644 -IGNvc21vcw== 83645 -IGZpbmFsaXN0cw== 83646 -IHNsZWVwZXI= 83647 -IE1hdGVyaWFsQXBw 83648 -ZGFj 83649 -IGJ1c2luZXNzbWVu 83650 -xJ9lcg== 83651 -Qmlhcw== 83652 -ZGF0YWw= 83653 -VXBFZGl0 83654 -IFRpcg== 83655 -SVNUSUM= 83656 -IEhlcmE= 83657 -X2ludGVyc2VjdGlvbg== 83658 -IExhbWE= 83659 -CWFwcGVuZA== 83660 -IHBvbGx1dGFudHM= 83661 -IFNpa2g= 83662 -IGNvbGxhYm9yYXRpb25z 83663 -bnV0cml0aW9u 83664 -IGhhbW0= 83665 -IERpbGxvbg== 83666 -X0RPVA== 83667 -IGZpcnN0aGFuZA== 83668 -U09BUA== 83669 -PXo= 83670 -LnByaXY= 83671 -TWlzbWF0Y2g= 83672 -LnNlbmRSZWRpcmVjdA== 83673 -LmxpbmtMYWJlbA== 83674 -IHdyZWFr 83675 -TWFydmVs 83676 -L3Ns 83677 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 83678 -IG1vdmFibGU= 83679 -0YPQuQ== 83680 -IERyaW5raW5n 83681 -YWNlYQ== 83682 -IHRyb3ZhcmU= 83683 -LkNTUw== 83684 -IGtlcm4= 83685 -dmZz 83686 -5pWw5a2X 83687 -IHN0ZXNzbw== 83688 -IEZPUkNF 83689 -IGxpZWY= 83690 -IGFjaGlldmVz 83691 -IEVsaWphaA== 83692 -R2V0UHJvcGVydHk= 83693 -LypA 83694 -IEh1bWFuaXR5 83695 -KFRoZQ== 83696 -d2FybQ== 83697 -PiIp 83698 -IGNvbXB1dGF0aW9ucw== 83699 -LnRpbnRDb2xvcg== 83700 -IHVzbGVlcA== 83701 -IEdQTHY= 83702 -bmRhdGE= 83703 -L2NsaQ== 83704 -TW9o 83705 -PiINCg== 83706 -LmJyaWRnZQ== 83707 -IGVuY3ljbG9wZWRpYQ== 83708 -IEJJTg== 83709 -IFN1cHBvc2U= 83710 -INio2Kc= 83711 -cmlldmVk 83712 -cGFnZW4= 83713 -aXJzZQ== 83714 -UGFjaWZpYw== 83715 -LmZ1bGxOYW1l 83716 -IGFsbGVnZQ== 83717 -aWxsdXN0cg== 83718 -IOqysA== 83719 -IGRldGVycmVudA== 83720 -IE5hcGxlcw== 83721 -aW5jbHVkZWQ= 83722 -UmF0ZXM= 83723 -IGhhc05leHQ= 83724 -IEplcmVtaWFo 83725 -IEZlcm5hbmRleg== 83726 -IGdldE9yZGVy 83727 -LlN1YnNjcmliZQ== 83728 -UG9zcw== 83729 -OikK 83730 -IFdvcmtzaGVldA== 83731 -YmxlbmQ= 83732 -IHdpdHR5 83733 -IGNvdW50ZXJmZWl0 83734 -X2R5 83735 -L1J1bnRpbWU= 83736 -IHNvZG9t 83737 -L2Rv 83738 -IDx8 83739 -IFJlY3J1 83740 -5aOw5piO 83741 -IG1vZGVsb3M= 83742 -IGJpdHJhdGU= 83743 -LmNybQ== 83744 -bHVz 83745 -IGZpbGVUeXBl 83746 -5bCR 83747 -IG1hcnJvdw== 83748 -IFZlbmV6dWVsYW4= 83749 -IHNjYXY= 83750 -IFNUT0NL 83751 -IEltcG9zc2libGU= 83752 -bmF2aWdhdGlvbkJhcg== 83753 -IHNpZ2h0aW5ncw== 83754 -IGNlbGxGb3JSb3dBdA== 83755 -IHJlY3Rz 83756 -IGFpcmw= 83757 -IExlc3Rlcg== 83758 -IG5vZHM= 83759 -QHJlZ2lzdGVy 83760 -eENE 83761 -cG5hbWU= 83762 -IHBvdHRlcnk= 83763 -IHp3YXI= 83764 -IFN1bmRlcmxhbmQ= 83765 -4oCmYnV0 83766 -L2NvbnRyb2w= 83767 -IGNhbGN1bHVz 83768 -KGlzb2xhdGU= 83769 -cGxhY2Vob2xkZXJz 83770 -Kilf 83771 -IH19DQo= 83772 -IEtvaGFuYQ== 83773 -Y29kaWxl 83774 -b3Rlcmlj 83775 -IHByZXBhaWQ= 83776 -IGdyYW5kbWE= 83777 -IHN1bHBo 83778 -IEdhaW5lcw== 83779 -XE1vZHVsZQ== 83780 -IGNvdW5zZWxsaW5n 83781 -LWdlbmVyaWM= 83782 -IFR1ZXM= 83783 -LkdyYWRpZW50 83784 -IFRodXJz 83785 -IGVudHJh 83786 -IGFkdmFuY2VtZW50cw== 83787 -U1dFUA== 83788 -X01BUktFUg== 83789 -IGtsdWI= 83790 -IG3DqWc= 83791 -ZmZmZmZmZg== 83792 -Il0pewo= 83793 -L2NvbXBpbGVy 83794 -YWRpZW5z 83795 -U3RyaW5nVmFsdWU= 83796 -IFNjdWxwdA== 83797 -cGFuZWxz 83798 -5b2i 83799 -5Lqn5ZOB 83800 -YXLDrWE= 83801 -IGRlcmFpbA== 83802 -IExvY2g= 83803 -IHBlcHA= 83804 -bXB6 83805 -IOKe 83806 -S1Y= 83807 -IERpZXRhcnk= 83808 -QVJSSUVS 83809 -IHBvbw== 83810 -IFJBTkRPTQ== 83811 -6LM= 83812 -IEhvbWV3b3Jr 83813 -LlZhbGlkYXRpb25FcnJvcg== 83814 -IE1hcnhpc20= 83815 -0YPRgtGM 83816 -IGNvbWVudGFyaW8= 83817 -X0JPVEg= 83818 -IHBybQ== 83819 -Y2FzdEhpdA== 83820 -aXBsaW5h 83821 -IFZvdGVycw== 83822 -LmFzc2lnbm1lbnQ= 83823 -bmV0dA== 83824 -U0FNUExF 83825 -amlz 83826 -InRpdGxl 83827 -LnZhbGlkYXRvcnM= 83828 -ICI/Ig== 83829 -dW5pZGFk 83830 -X2ZpZ3VyZQ== 83831 -IGFjY3J1 83832 -IFJlbWFyaw== 83833 -Rm91bmRlcg== 83834 -LmluaXRpYWxpemVBcHA= 83835 -IFByZXNlbnRz 83836 -IE1VTFRJ 83837 -dmVzdGVy 83838 -LnZpc2l0SW5zbg== 83839 -IGdldFBhdGg= 83840 -X2RpZmZlcmVudA== 83841 -IGxvb3Nlbg== 83842 -IGFycm9nYW5jZQ== 83843 -IGp1bmk= 83844 -IFphaGw= 83845 -IEdDQk8= 83846 -IG1vZGVyYXRvcnM= 83847 -TGluZUNvbG9y 83848 -IE5vZGVUeXBl 83849 -X2JlbG93 83850 -b3JndA== 83851 -IEhhcmxlbQ== 83852 -IE9yd2VsbA== 83853 -X1VOSVg= 83854 -LnJlc3RhcnQ= 83855 -aXRoZQ== 83856 -IGdlbmll 83857 -IGNsYWQ= 83858 -Jzp7Jw== 83859 -IHNob3djYXNlZA== 83860 -IGxhcnZhZQ== 83861 -TWljaGVsbGU= 83862 -IExI 83863 -LmdldExvZw== 83864 -Q29uc3RydWN0ZWQ= 83865 -IGh2YQ== 83866 -X3N1YnM= 83867 -IGRhYg== 83868 -LmRvY3VtZW50YXRpb24= 83869 -IG5pZw== 83870 -IE1hbmRhcmlu 83871 -4oCUYXJl 83872 -LXBpYw== 83873 -X2Nvcm5lcnM= 83874 -LkJvdA== 83875 -XVso 83876 -X18nOg0K 83877 -LkVkaXRvckJ1dHRvbg== 83878 -LXN5bnRheA== 83879 -U2FuZGVycw== 83880 -IFRhbmtz 83881 -ZGVzaXJlZA== 83882 -c3RhbnRpYXRlVmlld0NvbnRyb2xsZXI= 83883 -R2Vhcg== 83884 -IHVzZXJNb2RlbA== 83885 -CWNvbnRyb2w= 83886 -RGF0YUJhc2U= 83887 -IERlYmF0ZQ== 83888 -aW5lc2lz 83889 -IHhl 83890 -Lm1hZ25pdHVkZQ== 83891 -IHlhbg== 83892 -IEFwaUV4Y2VwdGlvbg== 83893 -KHdoaWNo 83894 -YXRoZXJpbmc= 83895 -Q29uc2lkZXJpbmc= 83896 -IEFMUEhB 83897 -568= 83898 -IFJhbmtpbmdz 83899 -LmxpZmU= 83900 -6rCS 83901 -T0ZGU0VU 83902 -LnRlbGVncmFt 83903 -IGZhdmljb24= 83904 -X3NzaA== 83905 -IEVER0U= 83906 -UmVmcw== 83907 -YW5kYW4= 83908 -IGFkb2xlc2NlbmNl 83909 -IFNoYW5r 83910 -IFN3YW1w 83911 -X3BlcmM= 83912 -IGNvbnRyYXJpbw== 83913 -Lm55 83914 -LiIpLA== 83915 -IHVudGVu 83916 -X0VOU1VSRQ== 83917 -L29yZGVycw== 83918 -KGNm 83919 -IHVudHJlYXRlZA== 83920 -YXplbg== 83921 -KElucHV0U3RyZWFt 83922 -IGFwcHJvdmFscw== 83923 -IGdlcm1hbnk= 83924 -IGF2ZXJl 83925 -VHJpcGxl 83926 -LWJhcnM= 83927 -IHNldFBhZ2U= 83928 -SmFj 83929 -IEZpcmVz 83930 -IERBWVM= 83931 -56i/ 83932 -IHNjcmF0Y2hlZA== 83933 -IEJFTg== 83934 -LXdpZmU= 83935 -IGludGVsbGVjdHVhbHM= 83936 -IHBvdWNv 83937 -IHN0YWJpbGl6YXRpb24= 83938 -IHBlbG9z 83939 -IFNUT1JZ 83940 -PGZpZWxkc2V0 83941 -IE1haWRlbg== 83942 -LkNpcmNsZQ== 83943 -IHNtw6U= 83944 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw== 83945 -L2VuZA== 83946 -6Iux 83947 -KG51bXB5 83948 -LnBhbmVsQ29udHJvbA== 83949 -Y2hyaWZ0 83950 -Y29udGluZW50YWw= 83951 -X3BlbA== 83952 -RFNM 83953 -PFwv 83954 -IE9QUw== 83955 -IE5vb24= 83956 -IHVuZGlzY2xvc2Vk 83957 -IFlpbg== 83958 -c3Bv 83959 -CWRlc2NyaWJl 83960 -dG9ncm91cA== 83961 -IGRpYXBlcnM= 83962 -IG1IYW5kbGVy 83963 -CUNsb3Nl 83964 -IHJlbmRpdGlvbg== 83965 -PXsoew== 83966 -RW50ZXJpbmc= 83967 -KERJUg== 83968 -X09MRA== 83969 -IFN0aW5n 83970 -IFBhd24= 83971 -dXNzZXM= 83972 -IGdldENvZGU= 83973 -SXRlbUxpc3Q= 83974 -IGluZGlz 83975 -ID4iLA== 83976 -IGNvbmZs 83977 -IGRvbWluYXRlcw== 83978 -dGhlc2l6ZWQ= 83979 -c3RlcmVk 83980 -IGNhYw== 83981 -IEdlbnVpbmU= 83982 -PFBhdGg= 83983 -IEhvZGc= 83984 -LWZseQ== 83985 -LmNpZA== 83986 -IG9iamVjdElk 83987 -KCMp 83988 -Lm1vdmVUb05leHQ= 83989 -RGlhbG9ndWU= 83990 -PHBjbA== 83991 -dGVhckRvd24= 83992 -Jyl9fQo= 83993 -5ri4 83994 -TGl2ZXI= 83995 -TWF0cml4WGQ= 83996 -IGNyYXBweQ== 83997 -X0RFQUQ= 83998 -LnBhcnRpYWw= 83999 -LkRyb3BEb3duU3R5bGU= 84000 -ZnVy 84001 -LkNvbGxhcHNlZA== 84002 -LXRvd24= 84003 -SUNJQUw= 84004 -RGlyZWNjaW9u 84005 -IHNldFJlc3VsdA== 84006 -L3Jlc3VsdA== 84007 -IFNoZWVw 84008 -eXNjYWxl 84009 -Y29udGk= 84010 -IHJlY29ub2M= 84011 -6b4= 84012 -W2Jsb2Nr 84013 -Y2xheno= 84014 -IGJlbmVmaXRpbmc= 84015 -QUFQ 84016 -LnJlcXVpcmVz 84017 -LkNvb2tpZQ== 84018 -IGNhcHRpdml0eQ== 84019 -LlNlY3Rpb24= 84020 -XSkpOw== 84021 -LWNhcmV0 84022 -KHZh 84023 -IHbDpGw= 84024 -IEhpZ2hsYW5kcw== 84025 -Tm90YQ== 84026 -IEZNTA== 84027 -d2ludGVy 84028 -IGFnZW5kYXM= 84029 -X18sX18= 84030 -ZGVtYW5k 84031 -IHR1dG9ycw== 84032 -X1NZTQ== 84033 -KENI 84034 -IHVuZXF1aXY= 84035 -LnRyYW5zaXRpb25z 84036 -IENhbG9yaWVz 84037 -IEVjb25vbWlzdA== 84038 -LlBpbg== 84039 -IGRlZmxlY3Q= 84040 -RXhwb3NlZA== 84041 -IGdlcA== 84042 -LkxheW91dENvbnRyb2xJdGVt 84043 -IHJhaw== 84044 -ZmliZXI= 84045 -IGFwb3B0 84046 -IEVudW1z 84047 -aXRldXI= 84048 -IG1vZGlmaWVz 84049 -IHJlbHVjdGFuY2U= 84050 -IHNwaWxscw== 84051 -QXNjZW5kaW5n 84052 -IHRlbXBlcmF0dXJh 84053 -LWludGVyZmFjZQ== 84054 -IGNvd29ya2Vycw== 84055 -IDpc 84056 -IFJvdW5kZWRSZWN0YW5nbGVCb3JkZXI= 84057 -PEtleVZhbHVlUGFpcg== 84058 -UGFyc2Vk 84059 -IHdpdGhkcmF3aW5n 84060 -KGhpc3Q= 84061 -IHRoZW9yaXN0cw== 84062 -LW5n 84063 -IGNoaWZm 84064 -66W4 84065 -UEFJUg== 84066 -IEJyZXdlcg== 84067 -S2E= 84068 -IEJvd2xpbmc= 84069 -X3Rs 84070 -J30pLg== 84071 -IHByb2Jpbmc= 84072 -QXJz 84073 -LnJlYWxt 84074 -IGVzdGF0ZXM= 84075 -dmFyeQ== 84076 -IEtlcw== 84077 -ICIsIiw= 84078 -fSwNCg0K 84079 -UGxhbm5pbmc= 84080 -IFJlY29u 84081 -IGNvbmNsdXM= 84082 -dmF1bHQ= 84083 -IGluY2VudGl2 84084 -IGJpbm5lbg== 84085 -IFBoaWxsaWVz 84086 -LkxvYWRlcg== 84087 -IEZhbGxlbg== 84088 -X1R3bw== 84089 -IEJpYXM= 84090 -Um9sZUlk 84091 -IFBhcmNlbGFibGU= 84092 -IERvZGQ= 84093 -ICQoIiMi 84094 -5Lq/5YWD 84095 -LW1lYW4= 84096 -KE91dHB1dA== 84097 -QVRUUklCVVRF 84098 -IHNlY3JldGl2ZQ== 84099 -IFBlcmlwaGVyYWw= 84100 -IEZpbGVk 84101 -IOW3 84102 -X21lZGlhbg== 84103 -LklD 84104 -IEFycmF5QnVmZmVy 84105 -KFRBQkxF 84106 -IF0KCgo= 84107 -IGFudGhvbG9neQ== 84108 -IG9ic2NlbmU= 84109 -b3BhdXNl 84110 -IEVTVg== 84111 -w6F2ZWlz 84112 -b3NlbWl0ZQ== 84113 -R3J1cG8= 84114 -IE1PQ0s= 84115 -IHVuYXZvaWRhYmxl 84116 -IGNvdmlk 84117 -aG93ZXI= 84118 -Lk5ldmVy 84119 -U2V0QWN0aXZl 84120 -e3RleHQ= 84121 -X3Byb2Jh 84122 -XENvbmZpZ3VyYXRpb24= 84123 -IEJyeWNl 84124 -IGNvZXJjZQ== 84125 -IFZhbmRlcmJpbHQ= 84126 -Z2VtZW50cw== 84127 -bGVnZw== 84128 -IHJlYnV0 84129 -IFZJTg== 84130 -5YiG6ZKf 84131 -IG9ic2Vzc2l2ZQ== 84132 -L2NtZA== 84133 -IGtvbW1lbnQ= 84134 -IExhdWdo 84135 -64uI 84136 -IHNlbHZlcw== 84137 -b3JyYQ== 84138 -LnJvb21z 84139 -IGNvbXBsZXhpdGllcw== 84140 -CW9wZXJhdG9y 84141 -QWx0ZXJuYXRl 84142 -IHNvcnRpZQ== 84143 -Z2V0TnVt 84144 -IHJlYWxpemFkbw== 84145 -RG9pbmc= 84146 -X0dyaWQ= 84147 -IHNldFN1cHBvcnRBY3Rpb25CYXI= 84148 -w6RobHQ= 84149 -5ZQ= 84150 -OnsNCg== 84151 -SW50ZXJlc3RlZA== 84152 -IGRpbWluaXNoaW5n 84153 -IExvb3Q= 84154 -QWRhcHRlckZhY3Rvcnk= 84155 -LXJ1bm5lcg== 84156 -c2F2aW5n 84157 -KHNlbQ== 84158 -ZmFk 84159 -RURVUkU= 84160 -X2RvY3VtZW50bw== 84161 -IENhbGVi 84162 -IGd1aXNl 84163 -IE1jR3U= 84164 -KHVuaXRz 84165 -IGJlemllcg== 84166 -IHBhdHQ= 84167 -IHBlbHZpYw== 84168 -IGNvbm9zYw== 84169 -YWN0aXZv 84170 -IE1hbG9uZQ== 84171 -LlRha2U= 84172 -KHNxcnQ= 84173 -c3Rhc2hvcA== 84174 -LWVuZGVk 84175 -IE1pZGk= 84176 -IEJhbmM= 84177 -IFBlcHNp 84178 -X01BWQ== 84179 -IHBsbA== 84180 -L2luZXQ= 84181 -LWVuaA== 84182 -IEl0YWw= 84183 -bW91cg== 84184 -IHJlbHVjdGFudGx5 84185 -LnJjUGFyYW1z 84186 -IHBhbHM= 84187 -LnBrZw== 84188 -IGZvcm1hcw== 84189 -bGllw59saWNo 84190 -LWJvb2tz 84191 -b21hbHk= 84192 -IHJlY29tbWFuZA== 84193 -UExJQ0lU 84194 -acSN 84195 -LmNnQ29sb3I= 84196 -KEJvYXJk 84197 -0LXQvdC40Lg= 84198 -IExFTg== 84199 -Xy1f 84200 -IFVubw== 84201 -IE5PVElGWQ== 84202 -aGFuYQ== 84203 -W3Nsb3Q= 84204 -XGFkbWlu 84205 -SW5JbnNwZWN0b3I= 84206 -KWNvbnN0 84207 -IGZsYXR0ZXJpbmc= 84208 -aWdyYW1z 84209 -Y2Fj 84210 -IGhlYXJ0ZmVsdA== 84211 -SW5kdXN0cmlhbA== 84212 -QWlycG9ydA== 84213 -WEk= 84214 -IHZhbGlkYXI= 84215 -cmVwcmVzZW50YXRpb24= 84216 -IFJlbnRhbHM= 84217 -IG9taXNzaW9u 84218 -IG15dGhpY2Fs 84219 -IEVudHJhbmNl 84220 -IHNlcmdlYW50 84221 -IHdyaXRlVG8= 84222 -IE5vcndpY2g= 84223 -IExpb25lbA== 84224 -LWJhbA== 84225 -IFp3ZQ== 84226 -X3JlbnQ= 84227 -IHJlbWFy 84228 -IEJhaGFtYXM= 84229 -IEJhbGU= 84230 -OiIiLA== 84231 -U3RhdGVNYW5hZ2Vy 84232 -IGLDqW7DqQ== 84233 -ICEqKio= 84234 -IGJsb2NrZXJz 84235 -LnNlbA== 84236 -KExFRA== 84237 -IGZzbQ== 84238 -IHdpcGluZw== 84239 -IHphbWFu 84240 -IFJlaQ== 84241 -YWd1YXk= 84242 -Li4n 84243 -IGxvdW5n 84244 -ZXRjb2Rl 84245 -IGxhbno= 84246 -Y2l0YXRpb24= 84247 -W2A= 84248 -LWVs 84249 -YXNib3VyZw== 84250 -IFNPTEQ= 84251 -IE9yY2hhcmQ= 84252 -Q0hhbmRsZQ== 84253 -IExvZnQ= 84254 -LmRpdmlkZQ== 84255 -LVdpdGg= 84256 -L2Rlc2lnbg== 84257 -LlNlcnZpY2VNb2RlbA== 84258 -TWlz 84259 -IHJhd0RhdGE= 84260 -IGludGVyYWN0cw== 84261 -IEVyb3Rpaw== 84262 -IG9uUG9zdEV4ZWN1dGU= 84263 -6Jk= 84264 -IHZleA== 84265 -IHN0cmluZ2lmeQ== 84266 -eW5lcw== 84267 -X0VtYWls 84268 -X09N 84269 -cXVpdGU= 84270 -X2VmZmVjdHM= 84271 -QURY 84272 -IGFkb3JuZWQ= 84273 -c3Nm 84274 -ZWRpdGFy 84275 -IE1hZGFtZQ== 84276 -IHJlZnV0ZQ== 84277 -IEx1Y2E= 84278 -IFdvbHZlcmluZQ== 84279 -c2V4bw== 84280 -QW5kcmU= 84281 -PFJvdXRl 84282 -IFNjZW5lcw== 84283 -IHJlb3JkZXI= 84284 -X214 84285 -Y3JlYXRlVGltZQ== 84286 -IHN5bnQ= 84287 -LG1vZGVs 84288 -aWNyb3Vz 84289 -IE1PVVNF 84290 -6rk= 84291 -Y29tcHJlc3Npb24= 84292 -IHByaW5jZXM= 84293 -IHNoYW1lZnVs 84294 -IHBhdQ== 84295 -IFRFRA== 84296 -KGNvZWZmcw== 84297 -4K+B 84298 -L3VtZA== 84299 -IGNhbnlvbg== 84300 -L3JlbmRlcg== 84301 -LnVzZWQ= 84302 -IEFncmVl 84303 -IEpld2Vs 84304 -L2NvbW1hbmQ= 84305 -QmFyY29kZQ== 84306 -KGRlYWQ= 84307 -d2Vic29ja2V0 84308 -dW11 84309 -R0xPU1M= 84310 -IGZvcnRu 84311 -IGJvYXN0ZWQ= 84312 -ICJcIj4= 84313 -aXN0dW5n 84314 -LW1hY2hpbmU= 84315 -IGluY2lkZW50YWw= 84316 -IG1N 84317 -LXJlYWRhYmxl 84318 -LmZ4 84319 -IFBPTElU 84320 -IHN5bWxpbms= 84321 -KHVzaW5n 84322 -eEVE 84323 -ICIiIi4= 84324 -LlN0ZG91dA== 84325 -IOiL 84326 -IGFsbWFjZW4= 84327 -CXRyaWdnZXI= 84328 -LXRpcA== 84329 -IENPTU1JVA== 84330 -LmluZ3JlZGllbnRz 84331 -IG1hbmlmZXN0cw== 84332 -IE9TUw== 84333 -IEhhdXQ= 84334 -L2xvYWRpbmc= 84335 -LlR5cGVTdHJpbmc= 84336 -KGNsZWFu 84337 -IExJQw== 84338 -IEJhcmJpZQ== 84339 -T09TRQ== 84340 -LuKApg== 84341 -IEludml0YXRpb24= 84342 -IHJlZGVlbWVk 84343 -KS4nPC8= 84344 -IGltZGI= 84345 -IGJlbGFuZw== 84346 -IHNjcmFwcGVk 84347 -LW5pbA== 84348 -IFByb3Vk 84349 -0LDRgdGC 84350 -LlNJWkU= 84351 -IHNldFZpc2libGU= 84352 -IHJhaW5pbmc= 84353 -IGxlbmdodA== 84354 -IGFuYWs= 84355 -X0NNUA== 84356 -IHBhbm9yYW1pYw== 84357 -IGdpbQ== 84358 -c2FpZA== 84359 -IHByb2dlbg== 84360 -IEdCUA== 84361 -4oCg 84362 -IGludmVzdGlnYXRlcw== 84363 -IHByw6hz 84364 -L25hdmlnYXRpb24= 84365 -Lm1vdGlvbg== 84366 -IExpZ2h0d2VpZ2h0 84367 -CQkgICAgICAgICAgICA= 84368 -IG9udG9sb2d5 84369 -IE5JSA== 84370 -KHNpbXA= 84371 -LnB1bGw= 84372 -IHByb3Bvc2l0aW9ucw== 84373 -QFdlYlNlcnZsZXQ= 84374 -IHJlZGVmaW5l 84375 -IEVORVJHWQ== 84376 -7KC4 84377 -T1JJWkFUSU9O 84378 -IFZlcmbDvGc= 84379 -fX1dLAo= 84380 -IHdlZ2Vu 84381 -4LmH 84382 -Jm9hY3V0ZQ== 84383 -LkJvYXJk 84384 -IGN1bHBh 84385 -IEdlbmV0aWNz 84386 -IH0+ 84387 -IGFkYW1hbnQ= 84388 -44GV44KM 84389 -CWF1ZGlv 84390 -6riA 84391 -IG51bWVyYWw= 84392 -IHJlc3RyYWluaW5n 84393 -LklOVEVSTkFM 84394 -IE1vbXM= 84395 -IElQQWRkcmVzcw== 84396 -aW1lbnRp 84397 -IGFscGhhYmV0aWNhbA== 84398 -IEpGSw== 84399 -IEF0dGVtcHRz 84400 -ZnJhZ2U= 84401 -IGRhcm0= 84402 -IGJhc2VtYW4= 84403 -PWxvZw== 84404 -LGVycm9y 84405 -IERJU0NMQUlNUw== 84406 -CXRleHR1cmU= 84407 -LWNvdmVyZWQ= 84408 -IFBsdW0= 84409 -IOWVhg== 84410 -IHDDqXJp 84411 -KHJldmlldw== 84412 -IEZvcmNlZA== 84413 -Rkg= 84414 -IOy0iA== 84415 -IGV5ZWJyb3c= 84416 -X1JFR1M= 84417 -IGNoZXN0cw== 84418 -IExhcmdlc3Q= 84419 -XV06Cg== 84420 -VVRPUg== 84421 -IGVucXVpcmllcw== 84422 -IGNva2U= 84423 -LWNhdGNoaW5n 84424 -IEdlb2dyYXBoeQ== 84425 -YXRlbA== 84426 -KHByb2Q= 84427 -b3JXaGVyZQ== 84428 -TmluZQ== 84429 -IFBpZWQ= 84430 -IGFkanVzdHM= 84431 -KHByb20= 84432 -X21lbnVz 84433 -X2V4YW0= 84434 -IE5vdGlmaWNhdGlvbkNlbnRlcg== 84435 -CWRz 84436 -TElL 84437 -X3R3aXR0ZXI= 84438 -Q1JD 84439 -IGV1eA== 84440 -IFN0YWJsZQ== 84441 -aXlvcg== 84442 -IGNhcmJvbmF0ZQ== 84443 -LnNhbA== 84444 -TWFwcGVk 84445 -aWV2aW5n 84446 -KXk= 84447 -eW5hbW9kYg== 84448 -LkNvbXBhcmVUYWc= 84449 -IHNldmVyZWQ= 84450 -J2VtYWls 84451 -IGZvcnNr 84452 -bGV4cG9ydA== 84453 -SU1JVEVS 84454 -IEFwZXg= 84455 -IGhtYWM= 84456 -IE9kZHM= 84457 -b3ZlcnJpZGVz 84458 -OiI7DQo= 84459 -IG9waW9pZHM= 84460 -IG1lc21lcg== 84461 -IEdBTA== 84462 -LWxpbmVz 84463 -IGFwcGx5TWlkZGxld2FyZQ== 84464 -IHNlcmlh 84465 -RVNJUw== 84466 -IG5pbGFp 84467 -IG1hbGxz 84468 -IFBhb2xv 84469 -IExlbnQ= 84470 -LmJ1aWxkZXJz 84471 -LyY= 84472 -IENsaXBz 84473 -IEp1cmFzc2lj 84474 -4pWd 84475 -LWNvbmQ= 84476 -44O844OI 84477 -fHd4 84478 -LmhvdXNl 84479 -IGhlcmF1cw== 84480 -IGhr 84481 -IENvY28= 84482 -IlwK 84483 -IGFjY3JlZGl0YXRpb24= 84484 -IFJhY2g= 84485 -ZXJ0ZXN0 84486 -c2hvcnRjb2Rl 84487 -IHZhbGlkYXRpb25z 84488 -VUxTRQ== 84489 -IGV4Y2VycHRz 84490 -U2Vla0Jhcg== 84491 -IGdldExvY2F0aW9u 84492 -IGZlbmNlZA== 84493 -KGdz 84494 -IGx5cw== 84495 -IGhhcm1z 84496 -IEhvbW8= 84497 -4oCcU2hl 84498 -IOKAuw== 84499 -PXNlc3Npb24= 84500 -X0NPTVBJTEU= 84501 -TWVhbnM= 84502 -IHBldGl0aW9uZXI= 84503 -SU1P 84504 -Il09Pg== 84505 -ZGJl 84506 -X2dwcw== 84507 -IG1q 84508 -X2V4cGlyZQ== 84509 -IERBTg== 84510 -IHh2 84511 -IGZ1bmNpb25lcw== 84512 -IHNoYWt5 84513 -U3VnYXI= 84514 -IGdldFJlc3VsdA== 84515 -PFRva2Vu 84516 -aHR0cENsaWVudA== 84517 -Lm9uUGF1c2U= 84518 -c3Rp 84519 -U25ha2U= 84520 -TWFwcGluZ3M= 84521 -IFJlYXBlcg== 84522 -IGZyZWk= 84523 -IENvc21vcw== 84524 -dWVycw== 84525 -IEhhag== 84526 -IEJsYXpl 84527 -b2ppcw== 84528 -Q3JMZg== 84529 -LnByb2M= 84530 -IG90cA== 84531 -IERyYXdz 84532 -CVJFRw== 84533 -KCcnJw== 84534 -IGdlbmVyYQ== 84535 -IEF0dGFjaGVk 84536 -UkVN 84537 -JTsiPg== 84538 -dXJuaXNoZWQ= 84539 -X3Jw 84540 -IHpvYWxz 84541 -IGFzc29ydGVk 84542 -aXRpemVk 84543 -IGNhbWlubw== 84544 -IGFiZHVjdGVk 84545 -LnRvQmU= 84546 -J10pOg== 84547 -IE1vb3I= 84548 -SW5jbHVkaW5n 84549 -IGdyYXppbmc= 84550 -c2V0U3RhdHVz 84551 -YWlyb2Jp 84552 -X0V4ZWN1dGU= 84553 -aWZpYW50 84554 -ZWxkbw== 84555 -YXV0b21hdGlj 84556 -KCQp 84557 -IGxlYXBz 84558 -b25lZERhdGVUaW1l 84559 -KGxheWVycw== 84560 -LXByb2R1Y2Vk 84561 -IFdvcmtib29r 84562 -IGVub3Jtb3VzbHk= 84563 -IGRlcHJlc3NpdmU= 84564 -IGFhYQ== 84565 -RW1iZWRkZWQ= 84566 -QlVN 84567 -IGVsbGVz 84568 -IGJvYXJkZWQ= 84569 -xZtteQ== 84570 -IG1hc2lo 84571 -X2dlbmVz 84572 -CVRleHR1cmU= 84573 -aXN0YXI= 84574 -IEF1Z3VzdGE= 84575 -IEFwcE1ldGhvZEJlYXQ= 84576 -IGtvZGU= 84577 -YWJleg== 84578 -X3BpZWNlcw== 84579 -Q3Vycg== 84580 -IGxpYmVyYWxpc20= 84581 -RGljaw== 84582 -QWxl 84583 -IHF1YWxl 84584 -fSc7Cg== 84585 -LmFuc3dlcnM= 84586 -IEpBTg== 84587 -IFBVUkU= 84588 -IGNhbm9l 84589 -IFNBTUU= 84590 -UXVhbGlmaWVy 84591 -IGRibmFtZQ== 84592 -IElubm9j 84593 -CVRSQUNF 84594 -aXZyZQ== 84595 -IG1lY2g= 84596 -YXNlbA== 84597 -Iixb 84598 -IGFzaWE= 84599 -IENhbnRlcmJ1cnk= 84600 -LkRhdGFCaW5kaW5ncw== 84601 -a2Fo 84602 -KCkpKSk= 84603 -IGR6aWV3 84604 -cmV0ZQ== 84605 -IHNjcmVlbmluZ3M= 84606 -Lk1PVVNF 84607 -IGJ1c2llc3Q= 84608 -CXJlbmRlcmVy 84609 -IHRlc3RpbW9uaWFscw== 84610 -IGFzcGlyZQ== 84611 -Zm9ydHVuZQ== 84612 -IE1TQw== 84613 -IGRhbXBpbmc= 84614 -XCIsCg== 84615 -V2Vs 84616 -V2lr 84617 -IOyXrA== 84618 -KHRpZA== 84619 -IENhbm5lcw== 84620 -b2NvcA== 84621 -PiIrCg== 84622 -ZmFjZXQ= 84623 -IHNsYXNoZWQ= 84624 -IExpYmVyaWE= 84625 -U21vb3Ro 84626 -X2NoZQ== 84627 -TGFib3Vy 84628 -IGVtaW5lbnQ= 84629 -Olg= 84630 -XEJhY2tlbmQ= 84631 -ICsrKQo= 84632 -IHRlYW13b3Jr 84633 -X2FnZw== 84634 -LlNlcnZl 84635 -IFNORA== 84636 -IFBJQ0s= 84637 -IHdpcGVz 84638 -L1R5cG9ncmFwaHk= 84639 -IEFQQQ== 84640 -aWtraQ== 84641 -IGNvZGVy 84642 -Z2FiZW4= 84643 -IHVua25vdw== 84644 -LkRlcGFydG1lbnQ= 84645 -4Lix4Lia 84646 -IHBsYXllck5hbWU= 84647 -KmU= 84648 -PEJsb2Nr 84649 -X3VwZA== 84650 -IEdpYmJz 84651 -bGVhc2luZw== 84652 -IENvbG9tYmlhbg== 84653 -KFBIUA== 84654 -ICoqKiEK 84655 -IOydvA== 84656 -IEN1cnRhaW4= 84657 -L2F5 84658 -2YTZiQ== 84659 -c3BvcnRz 84660 -IGRlc2Vh 84661 -aXLDoQ== 84662 -IHVuY29uZGl0aW9uYWw= 84663 -IHRocm9t 84664 -IENIUklTVA== 84665 -IEhPUg== 84666 -b3Njb3BpYw== 84667 -IHlhxZ8= 84668 -IG5vc3Rybw== 84669 -Li4uIik7DQo= 84670 -IHNsdXI= 84671 -IGhhdHRlbg== 84672 -IHBlc3RpY2lkZQ== 84673 -IGZyZWV3YXk= 84674 -IENvaA== 84675 -IHdhbm5vbmNl 84676 -IG1laWRlbg== 84677 -X3N1YnN0cg== 84678 -X0NTUw== 84679 -IFN5bWJvbHM= 84680 -4Li34Lit 84681 -REVU 84682 -IE1hZGRlbg== 84683 -IHJlcXVlc3Rlcg== 84684 -LnZpcnR1YWw= 84685 -IHd4RGVmYXVsdA== 84686 -IGF1dG9tw6F0aWNhbWVudGU= 84687 -YnJpZHM= 84688 -aVQ= 84689 -LlByaW9yaXR5 84690 -Jyk7PC8= 84691 -YnVuZw== 84692 -RGVhZGxpbmU= 84693 -Q29uY3JldGU= 84694 -IG5leHRQYWdl 84695 -IOuwmw== 84696 -IFN0b2tl 84697 -a29w 84698 -INCx0L7Qu9GM 84699 -IFByb2R1aw== 84700 -LW1ha2Vy 84701 -IFByb2plY3RpbGU= 84702 -YW5jZWxsYWJsZQ== 84703 -IFRIRUlS 84704 -VG9SZW1vdmU= 84705 -RU1V 84706 -Y29tbWVyY2lhbA== 84707 -QVZFRA== 84708 -IHdlYXZpbmc= 84709 -IGJpb21l 84710 -QFNldHRlcg== 84711 -cW1s 84712 -IGJyb2FkZW4= 84713 -INGB0L8= 84714 -SVNS 84715 -IGRlYWN0aXZhdGVk 84716 -IHNlbGVjdGVkSW5kZXg= 84717 -cmlvdXM= 84718 -ZWxwcw== 84719 -LkVzY2FwZQ== 84720 -IHBvbGxlZA== 84721 -cXVpYQ== 84722 -X3JlZmw= 84723 -X21pbWU= 84724 -PEF1ZGlvU291cmNl 84725 -KFRyYW5zZm9ybQ== 84726 -ZXZlbm9kZA== 84727 -CXJhbmRvbQ== 84728 -bG9jcw== 84729 -IGRldXQ= 84730 -cmVwbGFjZW1lbnQ= 84731 -IGV4YW1pbmVy 84732 -SGFzS2V5 84733 -IOumrOyKpO2KuA== 84734 -IENsb3Ro 84735 -IOCkqg== 84736 -IFJlZ2lzdHJv 84737 -IEVzdGhlcg== 84738 -IFNoYXJlZE1vZHVsZQ== 84739 -LmJvcnJvdw== 84740 -IG9zY2lsbGF0b3I= 84741 -IGZvb2xz 84742 -uqs= 84743 -IGJvYXN0aW5n 84744 -X3B1bHNl 84745 -c2hhcmluZw== 84746 -IHBpc3RvbHM= 84747 -X1BMQU4= 84748 -IHNlcHRlbWJlcg== 84749 -IG11c3Rlcg== 84750 -IG1hcmNow6k= 84751 -Q0hFTVk= 84752 -IHN1aQ== 84753 -IGdlYnJ1aWs= 84754 -Lj0n 84755 -ZXJyYXRlZA== 84756 -IExpYQ== 84757 -IGhhdW50 84758 -IEN1c2g= 84759 -cm91dGVQcm92aWRlcg== 84760 -Inw= 84761 -ZW5kcGhw 84762 -Il1dCg== 84763 -IGF2YQ== 84764 -77yBIiw= 84765 -7Ke4 84766 -IGNvbGE= 84767 -X1NQRUxM 84768 -IGFsw6lt 84769 -KExhbmd1YWdl 84770 -KGR1bW15 84771 -IGJ1bmtlcg== 84772 -IEVtcHJlc2E= 84773 -IGNyZWF0ZUNvbnRleHQ= 84774 -Om1pbg== 84775 -IEJPT1Q= 84776 -IE1lcmVkaXRo 84777 -Wmg= 84778 -IERvd25pbmc= 84779 -d2pnbA== 84780 -LmRj 84781 -c2RhbGU= 84782 -IGluY29udmVuaWVudA== 84783 -IHJlYWRtZQ== 84784 -TmF2aWdhdGlvblZpZXc= 84785 -Q09ORElUSU9O 84786 -LmRlcA== 84787 -IHLDqXVzcw== 84788 -IG9wY2nDs24= 84789 -IEFjY291bnRhYmlsaXR5 84790 -Lk1hcg== 84791 -LWd1aWQ= 84792 -RURHRQ== 84793 -RXZlbnRNYW5hZ2Vy 84794 -IGRpc2NpcGxl 84795 -dWNrbGVz 84796 -fX0+ 84797 -aW50ZXJlc3RlZA== 84798 -RmlsdGVyV2hlcmU= 84799 -IHB1c3M= 84800 -LXByb3h5 84801 -X3N0YXR1c2Vz 84802 -IFsj 84803 -dW5mb2xk 84804 -IFJvbm5pZQ== 84805 -JiYh 84806 -IGFjZXNzbw== 84807 -dW9z 84808 -X3lpZWxk 84809 -KGNhbGVuZGFy 84810 -KHNvdW5k 84811 -IGRhdGFBcnJheQ== 84812 -IFlhdGVz 84813 -IHByb2Nlc3Npb24= 84814 -RUZBVUxU 84815 -IEdIQw== 84816 -YW11cmE= 84817 -IHN0cmljdGVy 84818 -LkJPVFRPTQ== 84819 -IGhhYml0dWFs 84820 -eEFG 84821 -QVZJTkc= 84822 -IHNldHVwcw== 84823 -ID17Cg== 84824 -Kioo 84825 -IHNvaw== 84826 -IHJldGluYQ== 84827 -IEZpcmVwbGFjZQ== 84828 -aW52ZXJ0 84829 -IEZvcnJlc3Q= 84830 -PGRhdGE= 84831 -XEFjdGlvbg== 84832 -T1VHSA== 84833 -IGNhcmVsZXNz 84834 -LmdldEFjdGl2ZQ== 84835 -ZXNlcw== 84836 -IHpkasSZ 84837 -KSkqKA== 84838 -U0VN 84839 -IFBhbmlj 84840 -VG91Y2hlcw== 84841 -IHByZWNv 84842 -L2FjY291bnRz 84843 -5L6b 84844 -UG9zdGFsQ29kZXM= 84845 -LXBsdWdpbnM= 84846 -PG1lc3NhZ2U= 84847 -KHBvd2Vy 84848 -IHBlcmN1c3Npb24= 84849 -IGPDqWw= 84850 -5o6o 84851 -IGRhbmNlZA== 84852 -X1NDQU5DT0RF 84853 -IFNpdHRpbmc= 84854 -IExva2k= 84855 -U2hhcmluZw== 84856 -LkRpcg== 84857 -IHNjaHdlcg== 84858 -X0xB 84859 -Lk1lbnVTdHJpcA== 84860 -X3plcm9z 84861 -IGZpeGF0aW9u 84862 -IEFtaXQ= 84863 -IGNvbXBsaWVk 84864 -LnNwYWNlQmV0d2Vlbg== 84865 -IGFycmVzdGluZw== 84866 -IFN1Zw== 84867 -IHBlcmZvcg== 84868 -IGtvbXBsZQ== 84869 -IEVzc2VuY2U= 84870 -IHBsZWlu 84871 -c2ltdWxhdGlvbg== 84872 -IGNyZWF0ZWRCeQ== 84873 -IEV4cGVkaXRpb24= 84874 -77yBCgoKCg== 84875 -dHJhaW5lcg== 84876 -Il09JA== 84877 -IHN1Y3Rpb24= 84878 -bVBpZA== 84879 -bm90aW4= 84880 -IHByZWNpb3M= 84881 -IEFzc3VyYW5jZQ== 84882 -IExhbA== 84883 -LiIm 84884 -IG1pbkxlbmd0aA== 84885 -IE1pbmVyYWxz 84886 -dHJhamVjdG9yeQ== 84887 -U0FGRQ== 84888 -IG51YW5jZXM= 84889 -KGV4dHJh 84890 -X3ZpZGVvcw== 84891 -W109ew== 84892 -IGhvbmV5bW9vbg== 84893 -X3ByZXA= 84894 -CQkJCQkJCQkJCSA= 84895 -IHB1cnBvcw== 84896 -IGFuemVpZ2Vu 84897 -LnN0cnV0cw== 84898 -IHBhZ2Fy 84899 -LkF1dG9TaXplTW9kZQ== 84900 -IHdlbmlnZXI= 84901 -IHBhZ2Fu 84902 -IGFjaWRpYw== 84903 -Z01hcHM= 84904 -IGJld2FyZQ== 84905 -X2lwYw== 84906 -IG1lZHM= 84907 -IGRpc2XDsW8= 84908 -KSkpCgoK 84909 -Q2h1cmNo 84910 -IG51cnR1cmluZw== 84911 -X21waQ== 84912 -IHJlc3VsdGFudA== 84913 -IFBpc3RvbA== 84914 -c1BpZA== 84915 -TXNw 84916 -TW9tZW50 84917 -IFVQTE9BRA== 84918 -TmFubw== 84919 -YmxpY2s= 84920 -IG1lc3VyZQ== 84921 -IExheWVycw== 84922 -X3RyYWo= 84923 -IGJ1dHRvbldpdGhUeXBl 84924 -CWNvbW1vbg== 84925 -IE15Q2xhc3M= 84926 -2KjYsQ== 84927 -eG9vcHM= 84928 -X0hlaWdodA== 84929 -X1dBUk5JTkdT 84930 -U2V0VGV4dA== 84931 -IEhpc3Bhbmljcw== 84932 -TnVsbFBvaW50ZXJFeGNlcHRpb24= 84933 -LmZhY3Rvcg== 84934 -IHZpZWxsZWljaHQ= 84935 -IHNob3V0cw== 84936 -dHJ1c3RlZA== 84937 -IG5ld1Jvdw== 84938 -IEZyYW7Dpw== 84939 -W2pq 84940 -4oCUd2hv 84941 -IFFEaXI= 84942 -X2FkdmFuY2Vk 84943 -KEhhdmVPY2N1cnJlZA== 84944 -IHVucGw= 84945 -L3Jvcw== 84946 -LmVhc3k= 84947 -IEJBTEw= 84948 -550= 84949 -L2xncGw= 84950 -IHN1YmNvbnNjaW91cw== 84951 -ICctJzsK 84952 -ICcpOw== 84953 -INGW 84954 -IHNjYW50 84955 -X3Nlc3M= 84956 -X3BsYXlpbmc= 84957 -X0lTTw== 84958 -IHNldFNpemU= 84959 -X2RlY2s= 84960 -X0xBUkdF 84961 -IE1leQ== 84962 -Q2hpY2tlbg== 84963 -aWZmaW4= 84964 -ZGlzcG9zZQ== 84965 -SEVTVA== 84966 -TGF1Z2g= 84967 -IExDUw== 84968 -IG9uc2l0ZQ== 84969 -LmlzTG9nZ2VkSW4= 84970 -IGlycml0YXRlZA== 84971 -IGJyaWdhZGU= 84972 -IGRlcXVldWU= 84973 -Y2xhc3NOYW1lcw== 84974 -IE3DoXM= 84975 -IEF0YXJp 84976 -KElPRXhjZXB0aW9u 84977 -UmFjaGVs 84978 -LXNhbXBsZQ== 84979 -IGVpZ2VudGxpY2g= 84980 -SUZERUY= 84981 -Lm5laWdoYm9ycw== 84982 -IHNlcGVyYXRl 84983 -IExpc3Rpbmdz 84984 -LmZm 84985 -KGltcG9ydA== 84986 -TW9kZWxBdHRyaWJ1dGU= 84987 -IHNwZW5kZXI= 84988 -IG1vdGlmcw== 84989 -c3N1ZQ== 84990 -IEFwcHJlbnRpY2U= 84991 -LWNhdA== 84992 -clBpZA== 84993 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K 84994 -b2N6 84995 -aW5pb25z 84996 -L2NvbnRhaW5lcg== 84997 -IHBsYWdpYXJpc20= 84998 -V3JpdGFibGVEYXRhYmFzZQ== 84999 -Ly4KCg== 85000 -IEZldmVy 85001 -LVZlcnNpb24= 85002 -YWNpamE= 85003 -IHdlaQ== 85004 -LWluZw== 85005 -IHRlbWFz 85006 -IHN1cmdlZA== 85007 -IGNyaWE= 85008 -IGFyZA== 85009 -Yml0Y29pbg== 85010 -LnRpbWV6b25l 85011 -IG9iamVjdE1hcHBlcg== 85012 -IAogICAgICAgICAgICAK 85013 -IHlsaW0= 85014 -IElDVQ== 85015 -IERlcHJlY2F0ZWQ= 85016 -KSgpOwo= 85017 -QVJHRVI= 85018 -dW5nYWxvdw== 85019 -VGVzdERhdGE= 85020 -KHB0cw== 85021 -RklMRU5BTUU= 85022 -dXBwbHk= 85023 -IHBhY2llbnRlcw== 85024 -LGxlZnQ= 85025 -IFdyaXRlTGluZQ== 85026 -IHBhcmNlbHM= 85027 -X2ZvbGRlcnM= 85028 -IERpcms= 85029 -LmFzc2VydElzSW5zdGFuY2U= 85030 -TWND 85031 -X1ZhcmlhYmxl 85032 -KGFh 85033 -IFBvcms= 85034 -LlB1Ymxpc2g= 85035 -LWdheQ== 85036 -IFBldHJh 85037 -IENvbm5lY3Rpbmc= 85038 -VGFiQ29udHJvbA== 85039 -aXZlcmluZw== 85040 -KFNjcmVlbg== 85041 -IGNoaWxsZWQ= 85042 -IGFpbw== 85043 -VG91Y2hFdmVudA== 85044 -IGFjY2Vzc2lvbg== 85045 -IExvaXM= 85046 -L21vbWVudA== 85047 -IGFudsOkbmQ= 85048 -IHN1aWNpZGVz 85049 -KGhlbHA= 85050 -YW5kZXJz 85051 -IFZJRA== 85052 -QmVp 85053 -ZXZlbnRv 85054 -IEFuZ3Vz 85055 -VmVycw== 85056 -IEJvcmRlYXV4 85057 -LnN0cmVhbWluZw== 85058 -IHJvdWdl 85059 -IGNyYWZ0c21hbnNoaXA= 85060 -b3NzaWw= 85061 -X0ZBTEw= 85062 -QG1lZGlh 85063 -aWxlYWtz 85064 -RGF0YVNlcnZpY2U= 85065 -IFRyaXBBZHZpc29y 85066 -IE1hYXI= 85067 -Q3Vyc28= 85068 -UG9zdGFsQ29kZXNOTA== 85069 -KCk7Kys= 85070 -JFBvc3RhbENvZGVzTkw= 85071 -IG9jb3I= 85072 -IHRhaW50ZWQ= 85073 -IGxlbQ== 85074 -LW91dHM= 85075 -IHh4eHg= 85076 -IGlycml0YXRpbmc= 85077 -b3hpZA== 85078 -b2ludGVk 85079 -IFRvcm8= 85080 -X292 85081 -LmJpcnRo 85082 -KyU= 85083 -IENoYXJhY3RlcmlzdGljcw== 85084 -IEJldHRpbmc= 85085 -IG9mZmVuZA== 85086 -IFBIWVM= 85087 -IElDTVA= 85088 -eERD 85089 -IENk 85090 -LmdldE1hcA== 85091 -YXRjaGV0 85092 -LmN1cnJlbnRJbmRleA== 85093 -RVJBTA== 85094 -IGthcHBh 85095 -aWRlbmNlcw== 85096 -UGFyZW4= 85097 -IFNlcmdlaQ== 85098 -LWZpbg== 85099 -J10sWyc= 85100 -w6FtYXJh 85101 -R3Jvd2luZw== 85102 -R2xhc3M= 85103 -CW1ldGE= 85104 -dmVyYmF0aW0= 85105 -L0dQTA== 85106 -IEthaA== 85107 -KHN2Zw== 85108 -Y2xpc3Q= 85109 -IEJsb3dqb2I= 85110 -b2NjYW4= 85111 -LmFib3J0 85112 -b2RlbGlzdA== 85113 -IGRpZmbDqXJlbnRz 85114 -X09QVFM= 85115 -PXJlcQ== 85116 -IGludG94 85117 -IGRpYWdvbg== 85118 -IFsoIg== 85119 -JlI= 85120 -IG9iamVjdGl2ZWx5 85121 -IGJsaW5raW5n 85122 -IExvdmVz 85123 -cmluZ2U= 85124 -Kik7Cgo= 85125 -IEJvbmRz 85126 -IExvdmVk 85127 -ZWx0cw== 85128 -IGRpc3BhcmF0ZQ== 85129 -IEVucmlxdWU= 85130 -IldpdGg= 85131 -cmVtaXVt 85132 -YWphcmFu 85133 -dHJ5aW5n 85134 -LVJ1c3NpYW4= 85135 -bmV3SW5zdGFuY2U= 85136 -LlRSQU4= 85137 -IG9yYW5nZXM= 85138 -L2xvY2FsZQ== 85139 -IERJU1A= 85140 -CW5z 85141 -IFNodXR0ZXJzdG9jaw== 85142 -IENMT0NL 85143 -KHJhZA== 85144 -IGFzc3VyYW5jZXM= 85145 -IHJhc3A= 85146 -VWJlcmdyYXBo 85147 -RW1pbHk= 85148 -IGludmVudGlvbnM= 85149 -cmlvdA== 85150 -IHRvc3Npbmc= 85151 -IG1ha2VvdmVy 85152 -IHVuaXRPZldvcms= 85153 -YnV0dG9uU2hhcGU= 85154 -5Yid5aeL5YyW 85155 -IHBhcnRlZA== 85156 -4paR 85157 -LnNpZ21vaWQ= 85158 -IHJlZGlyZWN0aW9u 85159 -IGRpc3R1cmJhbmNlcw== 85160 -IGludGltaWRhdGVk 85161 -CUNyZWF0ZWQ= 85162 -YWdldA== 85163 -IGNvcnJlcw== 85164 -IE5FRw== 85165 -aXRvbmU= 85166 -L2Zyb250 85167 -IFZlcnNl 85168 -Z2FtYmFy 85169 -IHByZW1pZXJlZA== 85170 -IElNTw== 85171 -IEdvYmllcm5v 85172 -IGlmcw== 85173 -YXlhaA== 85174 -LkNPTA== 85175 -IGZyZWRlcg== 85176 -IHN1Ym1lcmdlZA== 85177 -IE5lcm8= 85178 -bW9kaWZpYWJsZQ== 85179 -L0Zvb3Rlcg== 85180 -LWNlbnRyYWw= 85181 -IGdvdXZlcg== 85182 -IFRyaWVk 85183 -IGRpenp5 85184 -UXVlcnlQYXJhbQ== 85185 -Ij4nKwo= 85186 -X3ByaW1pdGl2ZQ== 85187 -56iO 85188 -LmdwdQ== 85189 -IHZveg== 85190 -ZW56ZQ== 85191 -IFdpbGRlcm5lc3M= 85192 -IHByb2JhYmls 85193 -L3JlYw== 85194 -IGFjY2Vz 85195 -IFRydXN0ZWVz 85196 -R2I= 85197 -IHBhZGRpbmdIb3Jpem9udGFs 85198 -U2hpZWxk 85199 -IE5hbWVu 85200 -dWRkbGVk 85201 -IFByaW9yaXR5UXVldWU= 85202 -UG9vcg== 85203 -IFNBRg== 85204 -LS1bWw== 85205 -IGNobG9yaW5l 85206 -IHZlcmJhbGx5 85207 -IGFpcmU= 85208 -PjsNCg== 85209 -aWxoYQ== 85210 -W2NvbG9y 85211 -YW5kYWxvbmU= 85212 -LmFkZFJvdw== 85213 -IFNvaw== 85214 -IENvbm9y 85215 -IG1lam9yYXI= 85216 -J2lscw== 85217 -ZGV0YWxsZQ== 85218 -ICIpLAo= 85219 -JUA= 85220 -Lmxhenk= 85221 -Lmp1bXA= 85222 -b3N0ZQ== 85223 -K0Y= 85224 -IGluZnVyaQ== 85225 -IHNvbnJh 85226 -aXRlbWlk 85227 -JGxvZw== 85228 -IG11cmRlcm91cw== 85229 -TEVD 85230 -CW5pbA== 85231 -IE3DpHI= 85232 -KHBn 85233 -aWxlbw== 85234 -QXNjaWk= 85235 -IExvY2toZWVk 85236 -IFRoZW8= 85237 -QmVsbA== 85238 -YWNpb25hbGVz 85239 -LmNyZWF0ZU5ldw== 85240 -IOW+ 85241 -LWZvb3RiYWxs 85242 -IGVjb21tZXJjZQ== 85243 -CVNpbXBsZQ== 85244 -Y2x5 85245 -LklubmVyRXhjZXB0aW9u 85246 -IHBlc29z 85247 -IHRyb3Bl 85248 -IEFSR1M= 85249 -TWlhbWk= 85250 -IFBhbG8= 85251 -IFN1emFubmU= 85252 -X21hcHBpbmdz 85253 -I3tA 85254 -IE9jY3VwYXRpb25hbA== 85255 -X2J1Y2tldHM= 85256 -Z29hbHM= 85257 -X1J1bg== 85258 -LXByZXBlbmQ= 85259 -c3Nz 85260 -bWFyc2hhbGw= 85261 -IGVxdWl2YWxlbmNl 85262 -IFdlbGNo 85263 -KE9wQ29kZXM= 85264 -CWNsb2Nr 85265 -IE1lZGluYQ== 85266 -VEVSUw== 85267 -b3Jhbmc= 85268 -VGhvdWdodA== 85269 -IG9hdHM= 85270 -X1RFWA== 85271 -UklDUw== 85272 -IGluZGlmZmVyZW5jZQ== 85273 -IGFsbG90 85274 -LlVzZVRleHQ= 85275 -IFRyaWNrcw== 85276 -YXdl 85277 -LkZJTEw= 85278 -LXBocA== 85279 -LnZvaWNl 85280 -IFBhdGhmaW5kZXI= 85281 -X1RBR1M= 85282 -IFRyaXQ= 85283 -5oyJ6ZKu 85284 -YmJj 85285 -IGFkZGl0aXZlcw== 85286 -IHNjaGxl 85287 -IEtleWJvYXJkSW50ZXJydXB0 85288 -IHVzZVBhcmFtcw== 85289 -IEJ1Y2hhbmFu 85290 -cmlhbmdsZQ== 85291 -IG11bHRpcGx5aW5n 85292 -IHNlbGJlcg== 85293 -IFllcA== 85294 -Q2hhaXI= 85295 -LXJlcG9ydGVk 85296 -X1NESw== 85297 -LG5v 85298 -IEZhbGxpbmc= 85299 -5rk= 85300 -ICgpLAo= 85301 -cGRi 85302 -IEJvcm91Z2g= 85303 -LnJlbW92ZUZyb20= 85304 -IG92ZXJzaGFkb3c= 85305 -aWdhaWw= 85306 -IHR1bmc= 85307 -IG1tYw== 85308 -W3BhcmVudA== 85309 -RXh0ZXJu 85310 -YXZpb2xldA== 85311 -JykiCg== 85312 -IGNvdW50ZXJ0b3Bz 85313 -IHVidW50dQ== 85314 -5rc= 85315 -IM6T 85316 -IHVucHVibGlzaGVk 85317 -IEluZGllcw== 85318 -VU5FVA== 85319 -IG9mZXJ0YQ== 85320 -IGRhbWVz 85321 -IGFzdGVyb2lkcw== 85322 -IG5vdmVtYmVy 85323 -Y29udHJhc3Q= 85324 -LkFkZE1vZGVsRXJyb3I= 85325 -K1NhbnM= 85326 -IHNjcmFtYmxpbmc= 85327 -dGV4dFZpZXc= 85328 -L2NyeXB0bw== 85329 -VXNlUHJvZ3JhbQ== 85330 -QHVwZGF0ZQ== 85331 -RGVzZGU= 85332 -U0FU 85333 -IGRpc3BsZQ== 85334 -YW5uw6ll 85335 -XERlcGVuZGVuY3lJbmplY3Rpb24= 85336 -IGl0bQ== 85337 -IOe8 85338 -IGV0aG9z 85339 -QVBP 85340 -IEdhcmPDrWE= 85341 -aWRpcw== 85342 -IFN0ZWFr 85343 -cmliYQ== 85344 -X3ZlcmlmaWNhdGlvbg== 85345 -IEZL 85346 -IEVpbnNhdHo= 85347 -IHBlcnNvbmFsaXNlZA== 85348 -LW1vdGlvbg== 85349 -IE1lbGFuaWU= 85350 -w7Zo 85351 -X1ZD 85352 -IGRyaWZ0aW5n 85353 -LmNvbnN0cnVjdA== 85354 -IO2UhA== 85355 -IGJhdGNoaW5n 85356 -Li4vLi4vLi4vLi4v 85357 -RVJQ 85358 -X3V0Yw== 85359 -IG11bHRpdA== 85360 -IG1yYg== 85361 -Y2Nhaw== 85362 -Y2h1bmtz 85363 -IHRyYW5zbHVjZW50 85364 -IHBheW9mZg== 85365 -4oCUYW4= 85366 -IHNpbGw= 85367 -IG9ybmFtZW50cw== 85368 -Z3Vh 85369 -VUJZ 85370 -KHN0ZXBz 85371 -IEJPUkRFUg== 85372 -IFNPVU5E 85373 -YGAK 85374 -ZW5hcmllcw== 85375 -IEJpdHRl 85376 -IGdseXBocw== 85377 -IG92ZXJydW4= 85378 -IGJsb2NrSWR4 85379 -IE1TVA== 85380 -IGdlbm9tZXM= 85381 -dGVuc29yZmxvdw== 85382 -RGlyZWN0b3J5TmFtZQ== 85383 -X2xocw== 85384 -IGZpbnQ= 85385 -YWRkdG9ncm91cA== 85386 -IHN0ZWFkZmFzdA== 85387 -IGNsb3Zlcw== 85388 -IFNvdmlldHM= 85389 -IElTQQ== 85390 -wqNv 85391 -dXJnZXJ5 85392 -c292 85393 -INCy0YvQstC+0LQ= 85394 -IHB1ZA== 85395 -LXdhdGNo 85396 -IEhvc3BpdGFscw== 85397 -fXdoaWxl 85398 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 85399 -4buj 85400 -IGFrdHVhbA== 85401 -IGtpbG9ncmFtcw== 85402 -IEZBQw== 85403 -b3BoeXM= 85404 -cHJz 85405 -KkA= 85406 -eWI= 85407 -c2VjdXJlZA== 85408 -IGFsZ8O6bg== 85409 -IOCkuQ== 85410 -cGhhbnM= 85411 -QWRkb24= 85412 -IGNlbnRyYWxseQ== 85413 -X1NVSVRF 85414 -SW50ZXJlc3Rpbmc= 85415 -dWx0aW1v 85416 -QWdhaW5zdA== 85417 -IEV6cmE= 85418 -IEhlYg== 85419 -dWlkYQ== 85420 -IHNreXM= 85421 -T0xWRQ== 85422 -QmVuZWZpdHM= 85423 -IHByaXNl 85424 -Lio/KQ== 85425 -LmlzRGVmaW5lZA== 85426 -IHN0YW5kb2Zm 85427 -IHBsYW5v 85428 -LmxhdGVzdA== 85429 -ICgkLg== 85430 -IEdvdWxk 85431 -IGNhdXRpb25lZA== 85432 -J10o 85433 -IG51aXQ= 85434 -IEhDSQ== 85435 -Zm9vdGJhbGw= 85436 -IHdpbGxlbg== 85437 -UHJvY2VlZA== 85438 -IGludGVuZGluZw== 85439 -dGlm 85440 -IHNwb25zb3Jpbmc= 85441 -b2hhbmE= 85442 -RG9z 85443 -TW9ybmluZw== 85444 -ICEiKTsK 85445 -LnNoZWxs 85446 -IFJFTEFURUQ= 85447 -IHBpbXA= 85448 -L2NvdXJzZQ== 85449 -IHJhbWlmaWNhdGlvbnM= 85450 -IHBpeG1hcA== 85451 -IHBvd2VybGVzcw== 85452 -IGRvdWNoZQ== 85453 -Y3JpbWU= 85454 -Y29udHJpYnV0b3Jz 85455 -KHByb3RvY29s 85456 -IGdldFBvc2l0aW9u 85457 -U0VUVElOR1M= 85458 -IHZpZXQ= 85459 -aXNzZXM= 85460 -V2l0aEVtYWlsQW5kUGFzc3dvcmQ= 85461 -UmV0dXJuVHlwZQ== 85462 -QXBwZQ== 85463 -IElLRQ== 85464 -LkNvb2tpZXM= 85465 -Lm1lZGl1bQ== 85466 -LmdldEpTT05BcnJheQ== 85467 -X0Zvcg== 85468 -L3Rpbnlvcw== 85469 -IFRhYmxlQ2VsbA== 85470 -IFJFUExBQ0U= 85471 -Lk5ldHdvcmtpbmc= 85472 -IGJvd2Vk 85473 -CW1k 85474 -PSJ7ISE= 85475 -IGhvbmRh 85476 -IEV1cg== 85477 -IGluZG9uZXNpYQ== 85478 -IGhlbmQ= 85479 -LnZpZXdtb2RlbA== 85480 -CWN0cmw= 85481 -IFRhYmxldHM= 85482 -LW9yYW5nZQ== 85483 -ZXJyYXM= 85484 -X2dyYXBoaWNz 85485 -e3M= 85486 -IFRpdGxlcw== 85487 -IGRpYWdub3Nlcw== 85488 -b3VwbGU= 85489 -X0RvdWJsZQ== 85490 -W3Jlc3VsdA== 85491 -IGppdHRlcg== 85492 -X05VTUVSSUM= 85493 -PmY= 85494 -X01Z 85495 -0LjRgdGC0LXQvA== 85496 -c3RvcmVJZA== 85497 -IHJlbGlucXU= 85498 -ZW9z 85499 -IHdpZGVuaW5n 85500 -IHRhY29z 85501 -LllFUw== 85502 -XSsn 85503 -IEluZGV4ZWQ= 85504 -IHByb2Zlc3Npb25uZWw= 85505 -IFN0cmFw 85506 -QnVmZmVyRGF0YQ== 85507 -ZWVh 85508 -ZXJpbg== 85509 -QU5DRVM= 85510 -X1RYVA== 85511 -IHt9Lg== 85512 -KGNvbnRyYWN0 85513 -eXc= 85514 -IGJsaW5kbmVzcw== 85515 -Q0hBTg== 85516 -CWdsQ29sb3I= 85517 -IGN1cnJlbnRQb3NpdGlvbg== 85518 -IENhdWNhc2lhbg== 85519 -JGltZw== 85520 -I2Fh 85521 -IHNlYW4= 85522 -TWVzcw== 85523 -Kj0qPQ== 85524 -IGNhcGFjaXRvcg== 85525 -YWxmYQ== 85526 -LlJlbW92ZUFsbA== 85527 -IFdQQVJBTQ== 85528 -dWxhZG8= 85529 -bmljb3M= 85530 -IG9yZ3k= 85531 -R1g= 85532 -X0RFVklDRVM= 85533 -b3Vya2U= 85534 -IGtC 85535 -IHNvcGhpc3RpY2F0aW9u 85536 -X2F1ZGl0 85537 -L0lQ 85538 -IEx5ZnQ= 85539 -L1N0 85540 -CWNhbmNlbA== 85541 -IG92YXJpYW4= 85542 -bWFyaW5l 85543 -a8SZ 85544 -IFlN 85545 -IE1pbG8= 85546 -IE1hdFRhYmxl 85547 -IEFiYnk= 85548 -bnpl 85549 -IEx1ZHdpZw== 85550 -X2FybW9y 85551 -IHNjYWZmb2xk 85552 -4buXaQ== 85553 -YXV0aG9yaXR5 85554 -4bqleQ== 85555 -LmdldFByb2R1Y3Q= 85556 -IE9yYml0 85557 -X1BhcmFtZXRlcg== 85558 -LmRhdGVGb3JtYXQ= 85559 -L3RhZ3M= 85560 -LlNwZWVk 85561 -KExpbmU= 85562 -IHBvbGlzaGluZw== 85563 -IGtvbWI= 85564 -IHJ0cmlt 85565 -J2ljb24= 85566 -cmllcmU= 85567 -IFByZWZlcg== 85568 -c3RydG9sb3dlcg== 85569 -UmVncw== 85570 -Q0JE 85571 -LT4K 85572 -IHBhcmFzaXRl 85573 -ZW5kc1dpdGg= 85574 -IENvYnJh 85575 -OnRlc3Q= 85576 -IE51Z2dldHM= 85577 -xaF0 85578 -Q29yZUFwcGxpY2F0aW9u 85579 -L2JpbmQ= 85580 -IE1jSW50 85581 -aXR1bmVz 85582 -Wy0t 85583 -IFN1cnByaXNl 85584 -X0lORw== 85585 -IEZhc3Rlcg== 85586 -0J3QsA== 85587 -OkU= 85588 -IGRpbnQ= 85589 -bmdl 85590 -LiInLCciLiQ= 85591 -IGFkamVjdGl2ZQ== 85592 -LmJj 85593 -Y29uc3VtZQ== 85594 -Qk9S 85595 -KGFuY2hvcg== 85596 -IGVzdGVlbQ== 85597 -IGJyZWFrdXA= 85598 -ZGVjYXk= 85599 -ICQKCg== 85600 -RWR3YXJk 85601 -QVNJ 85602 -IGF0dGFjaGVz 85603 -X0RJU0s= 85604 -IFdpbG1pbmd0b24= 85605 -IEt1bA== 85606 -IFtbXQ== 85607 -IERlcGFydG1lbnRz 85608 -IHJldHVyblR5cGU= 85609 -IFVOSVRFRA== 85610 -b2JqZWN0aXZl 85611 -IGdpcmxmcmllbmRz 85612 -X0dV 85613 -QHN0b3Jl 85614 -LU91dA== 85615 -Lm1vdmVz 85616 -KHN0YXJ0RGF0ZQ== 85617 -CUpCdXR0b24= 85618 -IFBhY2U= 85619 -IEJlYXRz 85620 -IGxpY3o= 85621 -IGV0aGVyZXVt 85622 -IGNoZWVyZWQ= 85623 -IGF1Y3Vu 85624 -UmVnYXJkaW5n 85625 -IG1pZ3JhdGluZw== 85626 -IGZ1dGlsZQ== 85627 -IFRhY29tYQ== 85628 -X0NoYXJhY3Rlcg== 85629 -IHZn 85630 -IENvcGE= 85631 -2Ks= 85632 -IG5hbA== 85633 -IGxhbmRmaWxs 85634 -IHRhbWls 85635 -IHBlcnBldHJhdG9y 85636 -IFBhY2Vycw== 85637 -LmdldE9yZGVy 85638 -fA0K 85639 -R2V0T2JqZWN0 85640 -IGJsYQ== 85641 -IEhhcmFt 85642 -cG9ydGxldA== 85643 -IGxva2Fs 85644 -TWVyY2hhbnQ= 85645 -UGFzc3dvcmRz 85646 -b25lbnQ= 85647 -IGFydGVyaWVz 85648 -IEludGVsbGk= 85649 -XFN5c3RlbQ== 85650 -PWxvY2FsaG9zdA== 85651 -LmF2aQ== 85652 -IFZlbmQ= 85653 -KHRibA== 85654 -Q29ycmVjdGlvbg== 85655 -IHV0ZXJ1cw== 85656 -IHNhbGl2YQ== 85657 -Kys7DQoNCg== 85658 -KCcqJyw= 85659 -IHNuYXRjaA== 85660 -IFNUUkVFVA== 85661 -KVs6 85662 -54Sh44GX44E= 85663 -U2VudGVuY2U= 85664 -KCkuJy8= 85665 -OnJlbGF0aXZl 85666 -leOCkw== 85667 -X3VzZXJpZA== 85668 -b2xpbmc= 85669 -IENsYXNo 85670 -CXNldHVw 85671 -KG1p 85672 -IGppdA== 85673 -IFNjYW5kaW5hdmlhbg== 85674 -IFBob25lcw== 85675 -Iic7Cg== 85676 -IHR1bXVsdA== 85677 -IEludGw= 85678 -IFNpbm4= 85679 -KG5ld3M= 85680 -IGRicw== 85681 -IFJlbWFya3M= 85682 -S2l0Y2hlbg== 85683 -IGFkbWlyYWJsZQ== 85684 -X2Rhc2g= 85685 -IERPTUFJTg== 85686 -YWRkTGlzdGVuZXI= 85687 -Il0uKA== 85688 -CU1ldGhvZA== 85689 -bWFya3Q= 85690 -LGV4cG9ydHM= 85691 -IG91dG51bWJlcg== 85692 -X0FTQw== 85693 -cHJlbWl1bQ== 85694 -KU5VTEw= 85695 -IEJvd21hbg== 85696 -LnNldE9uSXRlbUNsaWNrTGlzdGVuZXI= 85697 -IFJlZ2V4T3B0aW9ucw== 85698 -S2Vs 85699 -L21hdA== 85700 -44GT44KM 85701 -IHdlYXJlcg== 85702 -aW5pcw== 85703 -W2RpbQ== 85704 -IE51dHp1bmc= 85705 -aXNidXJ5 85706 -5Yid 85707 -IHJvb3RSZWR1Y2Vy 85708 -ZXlK 85709 -SW5jbHVkZWQ= 85710 -LUxlYWd1ZQ== 85711 -YW5heA== 85712 -KGluZmxhdGVy 85713 -IEZpZWxkVHlwZQ== 85714 -IHNob3Zl 85715 -IGZ1bGxmaWxl 85716 -RGF0YU1hbmFnZXI= 85717 -LmdldExlZnQ= 85718 -IEZz 85719 -ZHJvcG91dA== 85720 -IOuyiA== 85721 -IG1hbmnDqHJl 85722 -IGZsYW1pbmc= 85723 -IGNvbXBsZXRhbWVudGU= 85724 -4oCw 85725 -fC4= 85726 -RW5lbWllcw== 85727 -b3NjaQ== 85728 -IFNBWQ== 85729 -IG1hcnk= 85730 -KFJ1bnRpbWVPYmplY3Q= 85731 -IH4+ 85732 -IFNpbXBzb25z 85733 -J10uJA== 85734 -X21lbWJlcnNoaXA= 85735 -KSI6 85736 -IGxheW91dE1hbmFnZXI= 85737 -IFJvY2tlZmVsbGVy 85738 -ICd8Jw== 85739 -SVBI 85740 -RE9O 85741 -YWNodGU= 85742 -UGVhY2U= 85743 -aHRhcg== 85744 -QCIK 85745 -IHRyZWFkbWlsbA== 85746 -IHNwdXJyZWQ= 85747 -IEtW 85748 -bWlkZA== 85749 -IGZsb3dlZA== 85750 -w6Nlc3Rl 85751 -R2VuZXNpcw== 85752 -PT0+ 85753 -IFZlbnR1cmE= 85754 -X2VsaW0= 85755 -INC40LzRjw== 85756 -IHNvbmd3cml0ZXI= 85757 -Y3JlYXRlRm9ybQ== 85758 -SUdITA== 85759 -IG1vbGRlZA== 85760 -IHJldmVyZWQ= 85761 -VW5kZXJUZXN0 85762 -aW1ibGVkb24= 85763 -X1Nlc3Npb24= 85764 -IG1hc2NvdA== 85765 -IGFsZg== 85766 -66mU 85767 -PldlbGNvbWU= 85768 -IGtub2Nrcw== 85769 -IEVxdWF0aW9u 85770 -LnRvdWNoZXM= 85771 -X0xhc3Q= 85772 -IHVwYmVhdA== 85773 -YmlnaW50 85774 -IGVudmlz 85775 -L2Jhbm5lcg== 85776 -44GC44KK44GM 85777 -IERvd25z 85778 -X1NG 85779 -IHJ1bkFwcA== 85780 -IHF1ZXN0aQ== 85781 -VHJhZGl0aW9uYWw= 85782 -X3dhaXRpbmc= 85783 -cGlja3Vw 85784 -KCdALw== 85785 -CXNl 85786 -IEtlcm4= 85787 -IERlbGljaW91cw== 85788 -IHNhdHVybg== 85789 -IEpTT05FeGNlcHRpb24= 85790 -44KN 85791 -SlI= 85792 -fSgpKTsK 85793 -IFNvbWFsaQ== 85794 -dWFp 85795 -aW1hZ2Vt 85796 -YW5kRmlsdGVyV2hlcmU= 85797 -w6hsZXM= 85798 -aW5ib3g= 85799 -IHlhcMSx 85800 -IG1laXN0ZW4= 85801 -YF0o 85802 -U1dH 85803 -LGNsYXNz 85804 -4LWN4LQ= 85805 -dGFpZW50 85806 -IEZyYW7Dp29pcw== 85807 -QXV0aFRva2Vu 85808 -IHB1ZXN0bw== 85809 -IGps 85810 -IGdhdGVk 85811 -IERlYXRocw== 85812 -IFNpZGQ= 85813 -IHByZXZhaWxlZA== 85814 -LcOqdHJl 85815 -KGFsYnVt 85816 -IHFpbnQ= 85817 -bWFyY2E= 85818 -IE5BRlRB 85819 -IHRpZ2h0ZW5lZA== 85820 -X0dBUA== 85821 -RU5TSU9OUw== 85822 -IExpYmVydGFyaWFu 85823 -X3N0eWxlc2hlZXQ= 85824 -LlNldEludA== 85825 -X3B1Ymxpc2hlcg== 85826 -cGFnZU51bWJlcg== 85827 -enNjaGU= 85828 -IFNRTEFsY2hlbXk= 85829 -IGhvb2Y= 85830 -Z2V0VG9rZW4= 85831 -IG5lYmVu 85832 -bHVuZA== 85833 -Lm1pdA== 85834 -ZXJycw== 85835 -LnNldE1pbmltdW0= 85836 -LXByaWNlZA== 85837 -KHBv 85838 -ZW5nYWdl 85839 -X0ZU 85840 -Ly8KCgo= 85841 -IHRvbWU= 85842 -ICI+PC8= 85843 -VmVjdG9ycw== 85844 -IFRlc3RVdGlscw== 85845 -ZmlsdHI= 85846 -VXN1 85847 -IGRpY3Rpb25hcnlXaXRo 85848 -IG9icmFz 85849 -IEJEU00= 85850 -LmdldFRhcmdldA== 85851 -IGFsbG93YWJsZQ== 85852 -IEluc2VydHM= 85853 -CU5vbmU= 85854 -IGxpYmVyYXRlZA== 85855 -S2VudA== 85856 -IFdpc2hsaXN0 85857 -IExhZ2Vy 85858 -IGp1aW4= 85859 -IG51ZXM= 85860 -IG1vbmFzdGVyeQ== 85861 -IG1pY3Jvc2Vjb25kcw== 85862 -IEhhbm5h 85863 -0L7RgdGC0Lg= 85864 -d2VhcG9ucw== 85865 -X3Nwb3Q= 85866 -b2RvbQ== 85867 -Lk1vZGVsRm9ybQ== 85868 -IG9yZGVybHk= 85869 -RklOSVRF 85870 -IHJlc2lkZW5jZXM= 85871 -X3RD 85872 -Q0dDb2xvcg== 85873 -IMW+ZQ== 85874 -IHNjcmVlbnBsYXk= 85875 -IHB5bW9uZ28= 85876 -IGTDqXQ= 85877 -IGRlc3Rh 85878 -IE5ldXJvc2NpZW5jZQ== 85879 -bmllc3Q= 85880 -QEdlbmVyYXRlZFZhbHVl 85881 -RUxTRQ== 85882 -PGw= 85883 -IGRpc2pvaW50 85884 -LnB1Ymxpc2hlZA== 85885 -ZWxsYW4= 85886 -IFN0cmluZ1dyaXRlcg== 85887 -LkJyb2FkY2FzdA== 85888 -IEZlaW5zdGVpbg== 85889 -YW1waGV0YW1pbmU= 85890 -S2V5U3BlYw== 85891 -IEdyaW1t 85892 -ZXR0ZWw= 85893 -4Lic 85894 -T3Q= 85895 -aWJyYWx0YXI= 85896 -Y2Vi 85897 -IHRpbWluZ3M= 85898 -aW5lZQ== 85899 -IEFuZHLDqQ== 85900 -RXNzYXk= 85901 -Lmpk 85902 -IEJ1bmRlc2xpZ2E= 85903 -UmV0dXJuZWQ= 85904 -IGFwcGFsbGluZw== 85905 -LkJpZ0ludGVnZXI= 85906 -IFNFTg== 85907 -IEhvbWVtYWRl 85908 -LmNoYXB0ZXI= 85909 -LXZhbGlk 85910 -IEFUVFJJQlVURQ== 85911 -dXN0cmlh 85912 -IGVudMOjbw== 85913 -UmV0dXJuaW5n 85914 -dmVydGlzZXI= 85915 -LlBhY2thZ2VNYW5hZ2Vy 85916 -Q2xhcms= 85917 -IHF1b3Rhcw== 85918 -IHNjYWxlRmFjdG9y 85919 -IGNveg== 85920 -X21pbmk= 85921 -IG11dGF0ZWQ= 85922 -LmFjdGl2YXRpb24= 85923 -Km1hdGg= 85924 -LnZlcnR4 85925 -PGFydGljbGU= 85926 -IGVtYnJvaWRlcnk= 85927 -L2J1c2luZXNz 85928 -Y2tldHQ= 85929 -c2NpZW50aWZpYw== 85930 -IEdpbGVz 85931 -IHJhY2Vy 85932 -X3BlcmZvcm1hbmNl 85933 -IGxhbWluYXRl 85934 -IFBISQ== 85935 -UsOp 85936 -IEF0aGU= 85937 -Y29sZXM= 85938 -IHNhxJ8= 85939 -IElua1dlbGw= 85940 -CXNpZw== 85941 -IHNwYWNlc2hpcA== 85942 -IGluc29s 85943 -IFVDbGFzcw== 85944 -LmxlYWRpbmdBbmNob3I= 85945 -dG90YWxz 85946 -IHNwcmlua2xl 85947 -IE1vZHVsYXI= 85948 -ICdcIg== 85949 -b3Jvbg== 85950 -LlJlYWRBbGxUZXh0 85951 -ICAgIAkNCg== 85952 -L2lvbg== 85953 -REVQVEg= 85954 -X21pbmltdW0= 85955 -XENhY2hl 85956 -IGRpdmVyc2lmaWVk 85957 -aWduZXQ= 85958 -IGRvam8= 85959 -IFVJQWxlcnRWaWV3 85960 -L3R0eQ== 85961 -IFNhc3M= 85962 -IC9cLig= 85963 -IElNQUdFUw== 85964 -IGRhdGluZ3NpZGVy 85965 -IEV4cGxvcw== 85966 -LmdlbnJl 85967 -XEV2ZW50cw== 85968 -IGVudW1lcmF0ZWQ= 85969 -Y3VycmVudFN0YXRl 85970 -aXRydXN0 85971 -Q2FsbGFibGVXcmFwcGVy 85972 -Rm91bmRlZA== 85973 -IHJveWFsdGllcw== 85974 -KFByb3BlcnRpZXM= 85975 -IFVTUFM= 85976 -LS0tLS0tLS0tLS0NCg== 85977 -LlJlYWRUb0VuZA== 85978 -IGNvc3k= 85979 -IGFwZQ== 85980 -X2RlZmluaXRpb25z 85981 -IHBhZ2VObw== 85982 -IGR6aWVjaQ== 85983 -c3RhbmRlbg== 85984 -IGJlc2Fy 85985 -aXRpbg== 85986 -IGNvbnNlcXVhdA== 85987 -IHBydg== 85988 -IHNwbGl0dGVk 85989 -IGVzcG9zYQ== 85990 -PWZpbmRWaWV3QnlJZA== 85991 -V2Fsa2Vy 85992 -IEhlYXJ0aA== 85993 -aWJyYXRvcg== 85994 -b3RvbXk= 85995 -YWdnYWJsZQ== 85996 -IOW9kw== 85997 -77yBJyk7Cg== 85998 -aW9uYXRl 85999 -L3llYXI= 86000 -IHNldEM= 86001 -IE1lZGlhVGVr 86002 -LWJveQ== 86003 -LnRvb2xTdHJpcE1lbnVJdGVt 86004 -Q29uZmlncw== 86005 -YXR0ZW5kZWQ= 86006 -IGVtb2M= 86007 -IEJhaQ== 86008 -b3BvbGl0YW4= 86009 -IGludHJ1c2l2ZQ== 86010 -IHp1Zw== 86011 -IGZmbXBlZw== 86012 -X2Jvb3N0 86013 -IG1vemlsbGE= 86014 -IHNsaWNpbmc= 86015 -V0c= 86016 -cGFnZXNpemU= 86017 -UHJvcGVydHlEZXNjcmlwdG9y 86018 -IEFsZWphbmRybw== 86019 -VVNFUw== 86020 -SG9zdGluZw== 86021 -IHJpc2tpbmc= 86022 -IEludml0ZQ== 86023 -IEphemVlcmE= 86024 -IHJlZ2FpbmVk 86025 -IEhhZ3Vl 86026 -IGd1ZXJyYQ== 86027 -IGVuY2xvc2luZw== 86028 -J10iKQo= 86029 -PFRyYW5zZm9ybQ== 86030 -Lk5PUlRI 86031 -IGNyaW0= 86032 -SU5V 86033 -IGNsZW4= 86034 -IE1vdGhlcnM= 86035 -IE93bmVyc2hpcA== 86036 -RHJpbms= 86037 -IGJlYmVyYXBh 86038 -Lm9uZXJyb3I= 86039 -KSsK 86040 -IHRhYkluZGV4 86041 -IERpbw== 86042 -IEZvcnR5 86043 -KExpbms= 86044 -IHNlZ21lbnRlZA== 86045 -IGphbWVz 86046 -IFRhcmdldHM= 86047 -IFJUUw== 86048 -INC60L3QvtC/ 86049 -IHZhcmlhcw== 86050 -IHTDrXR1bG8= 86051 -IGTDvHI= 86052 -L0dhbWU= 86053 -cmFuc2l0aW9u 86054 -IGRpc3Rpbmd1aXNoaW5n 86055 -dWt0dXI= 86056 -YW5qZQ== 86057 -IE1jQ2FiZQ== 86058 -cGFp 86059 -KHRr 86060 -RGVzdHJ1Y3Rvcg== 86061 -R2FtZU9iamVjdFdpdGhUYWc= 86062 -JGg= 86063 -IGFmcg== 86064 -LnNldEVtYWls 86065 -IHJlcGV0aXRpb25z 86066 -bGFuZGVycw== 86067 -IFNoZWE= 86068 -X2NsYWlt 86069 -IGFjZXNz 86070 -QmVuY2htYXJr 86071 -LkVzdA== 86072 -LlBP 86073 -IE7DpA== 86074 -IGl0Y2hpbmc= 86075 -IGNvbmRvbWluaXVt 86076 -X0ZXRA== 86077 -IHJlYWx0aW1l 86078 -IGNpdmlsaXplZA== 86079 -X3BoeXNpY2Fs 86080 -UmFs 86081 -IHdpbnRlcnM= 86082 -IFlhZA== 86083 -IGZvcmE= 86084 -IGNhbGlicmF0ZWQ= 86085 -UGV0cw== 86086 -IHN0b3JtZWQ= 86087 -IGplbA== 86088 -IFNTUA== 86089 -ZGF0YWdyaWQ= 86090 -IExhdQ== 86091 -dW5hcg== 86092 -dWxmaWxsZWQ= 86093 -RVJJTkc= 86094 -IFRyaW8= 86095 -2LHZiA== 86096 -Rm9yZWdyb3VuZENvbG9y 86097 -PW91dA== 86098 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K 86099 -IHZpZW50 86100 -IEFETQ== 86101 -X0Nvbm5lY3Rpb24= 86102 -LWNhbmNlbA== 86103 -KCcuJyk7Cg== 86104 -IHNhaWxz 86105 -IGVxdWl2YWxlbnRz 86106 -TmI= 86107 -IGZseWVycw== 86108 -IEdJUg== 86109 -a2VsaWc= 86110 -LXdhbGw= 86111 -LlJlcXVpcmVz 86112 -IGNvc2U= 86113 -IEFOQw== 86114 -IGphZGU= 86115 -IEFsZWM= 86116 -IGVuZHJlZ2lvbg== 86117 -IEVYVEk= 86118 -ZWRlcmU= 86119 -VGVycmFpbg== 86120 -U3BlY2lmaWNhdGlvbnM= 86121 -IFN3ZWVw 86122 -c2V0SXRlbQ== 86123 -IHNtaXJr 86124 -IHNjcmlwdGVk 86125 -W1N5c3RlbQ== 86126 -56eB 86127 -IHN5bmNlZA== 86128 -IHNxcg== 86129 -Z2V3YXRlcg== 86130 -IGpld2Vscw== 86131 -IGhkYw== 86132 -4KWN4KSw 86133 -z4Y= 86134 -w7xzc2VsZG9yZg== 86135 -bGllbg== 86136 -Qm9yZGVycw== 86137 -IEF0b21pY0ludGVnZXI= 86138 -IHBhcmFseXNpcw== 86139 -Q2xhc3NpZmljYXRpb24= 86140 -IGdsaWRl 86141 -IHVtcA== 86142 -IC8+fQ== 86143 -IHZlbmRpbmc= 86144 -4Li04LiZ 86145 -bm90aWY= 86146 -Jl8= 86147 -IEVtZXJnaW5n 86148 -YXRpY29u 86149 -IHByb3BhZ2F0ZWQ= 86150 -LW9yZGVycw== 86151 -YWdhcw== 86152 -dXJnZW50 86153 -KFRpbWVTcGFu 86154 -QUxDSEVNWQ== 86155 -L2Jvd2Vy 86156 -7IKw 86157 -LmJvb3N0 86158 -LmRlcGVuZGVuY2llcw== 86159 -LlN3aW5nQ29uc3RhbnRz 86160 -dW50bGV0 86161 -LmNoYXJz 86162 -LWNpZ2FyZXR0ZXM= 86163 -IE1vZHM= 86164 -ICAgICAJ 86165 -IGJyYXZlcnk= 86166 -IGNvdW50ZXJlZA== 86167 -cmVsdWRl 86168 -X21vYg== 86169 -QUlORUQ= 86170 -bmdvaW5n 86171 -IHVuZGVyZ3JhZA== 86172 -R2V0TWV0aG9k 86173 -RHVhbA== 86174 -X2pvdXJuYWw= 86175 -LE5v 86176 -IHNpZGVs 86177 -IExhcnNvbg== 86178 -KyIsIis= 86179 -IG5hcnJhdGlvbg== 86180 -IFN1YndheQ== 86181 -IExleGVy 86182 -IE5pbmc= 86183 -aW5kaWM= 86184 -dGhhbmU= 86185 -LlNJRw== 86186 -LWVhcnRo 86187 -IGJlcnJ5 86188 -IFRldWNob3M= 86189 -CUVudGl0eQ== 86190 -ZXJzcGVjdGl2ZQ== 86191 -Tm9z 86192 -IE93bmVk 86193 -QlVS 86194 -IGxpbmVubw== 86195 -IEZpamk= 86196 -R2V0SW50 86197 -U3RyaW5nUmVm 86198 -ICcmJw== 86199 -dWFkYQ== 86200 -LmNhcHRpb24= 86201 -YXBwTmFtZQ== 86202 -KG9mZg== 86203 -IHZlcnN0 86204 -IHR5cG8= 86205 -6ZyA6KaB 86206 -YXRlcmFuZ2VwaWNrZXI= 86207 -IHFlbXU= 86208 -IEdFTw== 86209 -X0Ns 86210 -LklU 86211 -IE51bmVz 86212 -W1o= 86213 -IENvbXBsZXRlbHk= 86214 -LkxpdmU= 86215 -IEphcw== 86216 -IHdlaXQ= 86217 -Y29zaXR5 86218 -IHBvbGljZW1lbg== 86219 -KHRhcmdldHM= 86220 -aXRsZWRCb3JkZXI= 86221 -IOinow== 86222 -LkdsaWRl 86223 -IGRlbW9uaWM= 86224 -SW50ZXJpb3I= 86225 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 86226 -IERvdGE= 86227 -IG9yYml0cw== 86228 -QU1Z 86229 -IFRyaW5pZGFk 86230 -aWN1bQ== 86231 -Lnph 86232 -IGdldEludA== 86233 -QXRsYW50YQ== 86234 -IGFtbmVzdHk= 86235 -IFJhaHVs 86236 -IF98 86237 -aGlybw== 86238 -IFRBS0U= 86239 -IGp1bWxhaA== 86240 -IEF1dG9tb2JpbGU= 86241 -4buP 86242 -d2hvc2U= 86243 -X1NBTVBM 86244 -UGF0aWVudHM= 86245 -INGC0LXQutGD0Yk= 86246 -LnN1YnNjcmlwdGlvbnM= 86247 -IE1lbnRpb24= 86248 -VG9Xb3JsZA== 86249 -aXBh 86250 -CU1lc3NhZ2VCb3g= 86251 -PEFwcGxpY2F0aW9uVXNlcg== 86252 -INil 86253 -ZmFicmlj 86254 -a2VsZXRhbA== 86255 -QmFyQnV0dG9u 86256 -IGFyY2hldHlwZQ== 86257 -aW5zdGFudA== 86258 -IGludGVybmFjaW9uYWw= 86259 -IFZveWFnZXI= 86260 -KHRvdWNo 86261 -IFZhbGs= 86262 -L01JVA== 86263 -IGNhdWw= 86264 -J0Nvbm5vcg== 86265 -KCIh 86266 -KE9Q 86267 -ZmFjdWx0eQ== 86268 -IEJhdG9u 86269 -IFZvbHVudGVlcnM= 86270 -dGFuaw== 86271 -X0JJTkRJTkc= 86272 -O2xpbmU= 86273 -IFZlcnNpb25z 86274 -WUxFUw== 86275 -IGplZXA= 86276 -KEVuY29kaW5n 86277 -IGdlb2xvZ2ljYWw= 86278 -TmljaA== 86279 -KHBkZg== 86280 -IGFuYWx5emVz 86281 -IGNhcHRpdmF0aW5n 86282 -IGhpem8= 86283 -Lm1kbA== 86284 -IGphcA== 86285 -IGZsaXBz 86286 -CWRm 86287 -IFBpZXQ= 86288 -IG5yb3dz 86289 -IGthbXU= 86290 -INCy0L7Qtw== 86291 -IHBydW5pbmc= 86292 -YWN1bGE= 86293 -IHRyYXZlbGxlcg== 86294 -U2hvb3Q= 86295 -LmVwc2lsb24= 86296 -IEZsZW1pbmc= 86297 -aWJ1cg== 86298 -b3BlcmF0ZQ== 86299 -aWdodGVy 86300 -IGJlZ3M= 86301 -IFdhbG51dA== 86302 -KFBhcnNlcg== 86303 -IHdpdGhkcmF3YWxz 86304 -aXNjb3BhbA== 86305 -IGJpbGxib2FyZA== 86306 -a2Vr 86307 -LW9wZW5pbmc= 86308 -IER1ZGU= 86309 -Y29uaQ== 86310 -eEVC 86311 -IGNhbG9y 86312 -YW1haGE= 86313 -LlRYVA== 86314 -RHJ5 86315 -IG1pc3Npb25hcmllcw== 86316 -X1ZlcnNpb24= 86317 -IG11bHRpbGluZQ== 86318 -4oCUd2U= 86319 -IGNvbXBvbmVudERpZFVwZGF0ZQ== 86320 -RmF2b3JpdGVz 86321 -aWdoYW0= 86322 -IGpvdXJuw6ll 86323 -IGFtdXNlZA== 86324 -IE9tbmk= 86325 -dGd0 86326 -IHdhaA== 86327 -ZXRpbmU= 86328 -IHBoYXNlZA== 86329 -IG9uU3RvcA== 86330 -Y3JlYXRpdmVjb21tb25z 86331 -U29waA== 86332 -IHVuYm9ybg== 86333 -PUU= 86334 -IEZlZEV4 86335 -bm9ybWFsbHk= 86336 -IGx5cg== 86337 -TWF0cml4TW9kZQ== 86338 -IHplaWdlbg== 86339 -QXRo 86340 -IEt1bQ== 86341 -w6RobGVu 86342 -LyI7Cgo= 86343 -IGRhbGxl 86344 -IGxhbmNl 86345 -IFN1aXRhYmxl 86346 -IGNvdW5zZWxvcnM= 86347 -5YWo6YOo 86348 -IGZhc3Rh 86349 -IGJsYXppbmc= 86350 -7KeE 86351 -L3R1dG9yaWFs 86352 -LnRjcA== 86353 -5pmv 86354 -TWFuYWdlckludGVyZmFjZQ== 86355 -IFNhbWFy 86356 -CWdsVW5pZm9ybQ== 86357 -IHByZXJlcXVpc2l0ZXM= 86358 -IGFudGljaXBhdGluZw== 86359 -cmFxdW8= 86360 -a3Nlbg== 86361 -TWFnbml0dWRl 86362 -dXRvbWF0aW9u 86363 -SGllcmFyY2h5 86364 -IGRldmlhdGlvbnM= 86365 -aW1ldA== 86366 -Q0NJ 86367 -PSgK 86368 -IGFudGxy 86369 -CWluaXRpYWw= 86370 -IFJlc29ydHM= 86371 -aG9tZXM= 86372 -CXBvb2w= 86373 -IG1hdMOp 86374 -P29wdGlvbg== 86375 -Om15c3Fs 86376 -KHV0Zg== 86377 -LlRhYkNvbnRyb2w= 86378 -PlRpdGxl 86379 -IEFkb3B0 86380 -LklzTWF0Y2g= 86381 -IGVudHJ1c3RlZA== 86382 -U3VzYW4= 86383 -c3dpbmc= 86384 -aW1hZ2VuZXM= 86385 -IHNlbGVjaW9u 86386 -IGFpZGluZw== 86387 -KFtdKg== 86388 -IHNldEZyYW1l 86389 -c3Bpcml0 86390 -L3Jzcw== 86391 -SXRhbGlj 86392 -IFByb3BlbEV4Y2VwdGlvbg== 86393 -IFRvbGw= 86394 -LkZpbmRHYW1lT2JqZWN0V2l0aFRhZw== 86395 -aW5hbnQ= 86396 -IHNlbGZpZXM= 86397 -XXxb 86398 -IGFwcGxpY2F0aW9uQ29udGV4dA== 86399 -aXhl 86400 -Y2Ri 86401 -ZWJi 86402 -IE92ZXJzZQ== 86403 -IHNxbENvbW1hbmQ= 86404 -SG9zdE5hbWU= 86405 -LWxhdW5jaA== 86406 -Umlzaw== 86407 -O3I= 86408 -LlNwYW4= 86409 -X0NJVFk= 86410 -X01B 86411 -LyIKCg== 86412 -UGF3bg== 86413 -IFllbHA= 86414 -QnVuZGxlT3JOaWw= 86415 -IG1heW9yw61h 86416 -U3RhY2tOYXZpZ2F0b3I= 86417 -ITsK 86418 -IHRodWdz 86419 -IEJhcm5ldHQ= 86420 -44O744O744O7Cgo= 86421 -IOqygA== 86422 -X0NPTlY= 86423 -IGJ1enppbmc= 86424 -a2V0ZXJhbmdhbg== 86425 -TWlsaXRhcnk= 86426 -d2VlZA== 86427 -IGRlbGltaXRlZA== 86428 -6LWE5rqQ 86429 -INCw0Lo= 86430 -X0hFTFBFUg== 86431 -IFJFQURZ 86432 -TG9vcGVy 86433 -KioqKi8K 86434 -IFRydWNrcw== 86435 -5Y67 86436 -X3BvZA== 86437 -T01BVElD 86438 -LWphdmE= 86439 -IHVuaWZ5 86440 -L0FyZWE= 86441 -ICcvJyk7Cg== 86442 -IEdhbWJsaW5n 86443 -LkhpdA== 86444 -IEZhcnJlbGw= 86445 -X2ZpdG5lc3M= 86446 -cmVjb21tZW5kZWQ= 86447 -emVuZA== 86448 -b2RpZQ== 86449 -X2JlYW0= 86450 -IHBsYWdl 86451 -bmRvbg== 86452 -LmFzc2VydGo= 86453 -IGdyYXRl 86454 -TWVhc3VyZWQ= 86455 -LmNlbnRyYWw= 86456 -Z2VzdHVyZQ== 86457 -IEdsb2JhbEtleQ== 86458 -cHl4 86459 -IE5lY2tsYWNl 86460 -5Y2O 86461 -LkFkZENvbHVtbg== 86462 -IFJ1ZGQ= 86463 -IFByZXNieXRlcmlhbg== 86464 -dW5kbGVy 86465 -IyFb 86466 -X2xhaGly 86467 -KCk9PSI= 86468 -QWNjZXNzaWJpbGl0eQ== 86469 -LXRyYWluaW5n 86470 -IFRob3U= 86471 -X1BJWA== 86472 -X1RSWQ== 86473 -PEo= 86474 -xrDGoW5n 86475 -bHVjaw== 86476 -X01BWElNVU0= 86477 -IHRoYXc= 86478 -VW5pZmllZA== 86479 -PkNvbnRhY3Q= 86480 -LVByZXNpZGVudA== 86481 -LXBhcnNl 86482 -IFBpY2tlcg== 86483 -TWFyY28= 86484 -dHJz 86485 -zrQ= 86486 -LiQu 86487 -X01FU0g= 86488 -IHNhZ3Rl 86489 -Kz0n 86490 -0K8= 86491 -KHBhcmNlbA== 86492 -aXZvcnM= 86493 -IGRpdmVydGVk 86494 -QUdBSU4= 86495 -IG5lc3M= 86496 -IHZhbGxleXM= 86497 -IC4uLig= 86498 -IEVRVUk= 86499 -IE91dHM= 86500 -IERlbW9uc3Ry 86501 -RGV0YWxsZQ== 86502 -IOu2gA== 86503 -UG9pbnRYWVo= 86504 -LmVwcw== 86505 -IHN5bm9ueW1z 86506 -ID09KA== 86507 -4oCcWWVz 86508 -J3V0aWxpc2F0ZXVy 86509 -TmFtaW5n 86510 -TEVW 86511 -cHJvdG9jb2xz 86512 -IOyb 86513 -IGdldFVzZXJuYW1l 86514 -LXZhcg== 86515 -X210eA== 86516 -IHNwZWN1bGFy 86517 -IG5vdGFz 86518 -SG9yaXpvbnRhbEFsaWdubWVudA== 86519 -IEJheWVy 86520 -c3Vz 86521 -ICAgIAkJCg== 86522 -IFNoYWNr 86523 -cmVzaGVy 86524 -IGltbWF0dXJl 86525 -YnJhY2h0 86526 -SVNDTw== 86527 -LmNyZWRpdA== 86528 -IHZpbmVz 86529 -X0xQ 86530 -RUVERUQ= 86531 -IFNjYXJib3JvdWdo 86532 -w6FudA== 86533 -KT09Jw== 86534 -CWRlbHRh 86535 -X0NPTE9SUw== 86536 -LkN1c3RvbUJ1dHRvbg== 86537 -IGFmaXJt 86538 -IEppbmc= 86539 -UGFybXM= 86540 -Y2VudGVycw== 86541 -LT5fX18= 86542 -IExETA== 86543 -LWNvbnRyaWI= 86544 -IERyZXNkZW4= 86545 -IFBpeGVscw== 86546 -ICIiIiIsCg== 86547 -TEVUVEU= 86548 -eEJF 86549 -IEh1c3Q= 86550 -IEV4ZWN1dGlvbkNvbnRleHQ= 86551 -IEJ1ZmZldHQ= 86552 -Y2xhbXA= 86553 -LkFydGljbGU= 86554 -IFJhdGg= 86555 -IFBleXRvbg== 86556 -IExPV0VS 86557 -b29rZQ== 86558 -IHRpZGFs 86559 -IHVuaGVhcmQ= 86560 -IFNoYWxs 86561 -IGJvbWJhcmQ= 86562 -YW5vdmE= 86563 -W21hc2s= 86564 -KGNyZWRlbnRpYWxz 86565 -IEV1cm9z 86566 -IGJyYW5jaGluZw== 86567 -IHN0cm9uZ2hvbGQ= 86568 -IGNpdmlsaXphdGlvbnM= 86569 -LWNvbm5lY3Q= 86570 -IExTVE0= 86571 -LW1vdmluZw== 86572 -IHV0ZW4= 86573 -Y3Jhc3Q= 86574 -X0RJU1A= 86575 -IENvbnRyb2xsZXJz 86576 -dXBl 86577 -LnBlbg== 86578 -IGRlc3Nh 86579 -IGRpZsOtY2ls 86580 -dWl0YWJsZQ== 86581 -b2ZpcmU= 86582 -W2NoaWxk 86583 -UkVGRVJFTkNFUw== 86584 -IGRlY2VpdA== 86585 -IFVyZw== 86586 -PEVkZ2U= 86587 -IGRlc2k= 86588 -IEJPVEg= 86589 -ICcpJzsK 86590 -dHlwZU5hbWU= 86591 -Q29tbWFuZEV2ZW50 86592 -d2hlcmVJbg== 86593 -KG9wdGltaXplcg== 86594 -IHLDqWFsaXM= 86595 -IG9taW5vdXM= 86596 -IEJyYWNrZXQ= 86597 -IGRhdGVTdHJpbmc= 86598 -IHNpbmdseQ== 86599 -KEpGcmFtZQ== 86600 -4oCZVA== 86601 -ZXNsaW50 86602 -KGhlcm8= 86603 -IE1hcmE= 86604 -IGNhdGNoeQ== 86605 -LGNhbGxiYWNr 86606 -IGN0eXBl 86607 -cHJlc2V0 86608 -CWdsZnc= 86609 -0LXRiQ== 86610 -aGs= 86611 -IHRpdGFu 86612 -QWNlcHRhcg== 86613 -44Gh44Gv 86614 -X2Fzc2lnbmVk 86615 -X2VyYXNl 86616 -IGluZmFuY3k= 86617 -UmV2aWV3ZXI= 86618 -IFJlY29yZGVy 86619 -IHNjbQ== 86620 -IEJpZ2dlc3Q= 86621 -IEdvYQ== 86622 -CVND 86623 -X0xvY2F0aW9u 86624 -X29yaQ== 86625 -a2ls 86626 -cmVuZGU= 86627 -IG1hcnpv 86628 -U3RyaW5nVXRpbA== 86629 -0YPRidC10YHRgtCy 86630 -IEhvd2U= 86631 -xrDhu51p 86632 -Zm9pcw== 86633 -WE1MRWxlbWVudA== 86634 -IGRlcmVjaG9z 86635 -IGR1bmc= 86636 -IFdhaw== 86637 -IEdhdw== 86638 -fVxc 86639 -ISIpOw== 86640 -IEpvaGFubmVzYnVyZw== 86641 -IHN1Ym1hcmluZXM= 86642 -IGFjY29s 86643 -IGZvc3RlcmluZw== 86644 -LgoKCgoKCgoKCgoKCg== 86645 -Lk9wZXJhdG9y 86646 -IG51b3Zh 86647 -IHRyYWplY3Rvcmllcw== 86648 -LnNjaGVkdWxlcnM= 86649 -IEZvbGxvd2Vycw== 86650 -IEFuZGVyc2Vu 86651 -IFBlZ2d5 86652 -LmZyZQ== 86653 -xLFjxLE= 86654 -IGt2cA== 86655 -Y29i 86656 -LWxlbg== 86657 -IG1haWxz 86658 -IGFjY3I= 86659 -IEpBVkE= 86660 -IGFkbWluaXN0ZXJpbmc= 86661 -RGVmYXVsdENlbGxTdHlsZQ== 86662 -IGNsaWNrYWJsZQ== 86663 -IEphY2tldHM= 86664 -O2Rpc3BsYXk= 86665 -IGJyZWFkY3J1bWJz 86666 -Y2hhbA== 86667 -Oic7Cg== 86668 -IEhvdmVy 86669 -dWNjaGluaQ== 86670 -IHRlYw== 86671 -IHN0b3B3YXRjaA== 86672 -X1JlbGVhc2U= 86673 -TWF5b3I= 86674 -4Z62 86675 -IFlhbmtlZQ== 86676 -Y2huZXI= 86677 -QXJ0aWZhY3Q= 86678 -LmJhbm5lcg== 86679 -IGtm 86680 -X3N0dWR5 86681 -Zm92 86682 -IE1lZXRpbmdz 86683 -w7Zt 86684 -IGluanVyaW5n 86685 -L2RvY3VtZW50YXRpb24= 86686 -QkNN 86687 -c3R5bA== 86688 -CXJi 86689 -IG9yaWdpbmFscw== 86690 -IGZsZXJl 86691 -IFRlcnJhcmlh 86692 -dG9rZW5pemVy 86693 -LWxpdGVy 86694 -Jyk7Ig== 86695 -IHBldGl0cw== 86696 -IEJidw== 86697 -IFRoaWVm 86698 -VUlMVElO 86699 -Uk9VVA== 86700 -IHNudWc= 86701 -Pj4p 86702 -LW5pbmU= 86703 -IH1dOwoK 86704 -IEJlbGxldg== 86705 -IGVsw6k= 86706 -IHl5bg== 86707 -eW5hbW8= 86708 -Z2xlcw== 86709 -IHNwZWQ= 86710 -LkJVVFRPTg== 86711 -IGRpc3BlcnNpb24= 86712 -b3VibGVz 86713 -IG5vdmVsbGVy 86714 -Il0uIg== 86715 -IHByaWVzdGhvb2Q= 86716 -ICIiKQoK 86717 -CWd1aQ== 86718 -LWluYw== 86719 -WG1sTm9kZQ== 86720 -IHN0dWRz 86721 -LklzQWN0aXZl 86722 -IHRyw6Q= 86723 -IG9yZGFpbmVk 86724 -IEJ5dGVBcnJheUlucHV0U3RyZWFt 86725 -IHJlcXVlc3RCb2R5 86726 -IFJUUA== 86727 -UkVTVUxUUw== 86728 -KGNvbGw= 86729 -IHJlbG9hZGluZw== 86730 -Lk5hdmlnYXRvcg== 86731 -X2NvdW50ZXJz 86732 -IGJ1ZGRpbmc= 86733 -IGxpY2Vuc2Vl 86734 -b2xvZ2k= 86735 -IHPhuqNu 86736 -IEtpcw== 86737 -IEZsYXR0ZW4= 86738 -X3ByaQ== 86739 -IGFwcHJvcHJpYXRpb24= 86740 -6K+E6K66 86741 -X1JTUA== 86742 -Y29tYmF0 86743 -X1BH 86744 -IGhpc3RvZ3JhbXM= 86745 -ZHE= 86746 -RW50ZXJwcmlzZQ== 86747 -IE5PQUE= 86748 -IFNwZWVkd2F5 86749 -IGJhZ2k= 86750 -IEJld2VydA== 86751 -RmxvYXRpbmc= 86752 -IEtpbWJlcmx5 86753 -UHJvc2Vj 86754 -SmltbXk= 86755 -IEVsaWFz 86756 -IGFyYml0cmFyaWx5 86757 -IOS9v+eUqA== 86758 -IENvdW50cw== 86759 -dXN0ZQ== 86760 -Rmlyc3RDaGlsZA== 86761 -IENsZWFucw== 86762 -LnB1cmNoYXNl 86763 -IGludGVycG9sYXRlZA== 86764 -IGJ1aWxkdXA= 86765 -X1NURU5DSUw= 86766 -RWd5cHQ= 86767 -IGF1cmU= 86768 -LnRydXRo 86769 -ZmVvZg== 86770 -IEdpbQ== 86771 -b2NhY2hl 86772 -IFV0dGFy 86773 -X0NPTVBMRVRFRA== 86774 -U2Vlbg== 86775 -IE5hcG9saQ== 86776 -KGRt 86777 -IGdyaXR0eQ== 86778 -LmVudGVycHJpc2U= 86779 -Y29uZXhhbw== 86780 -IGdhdGhlcnM= 86781 -IHNldFNlYXJjaA== 86782 -IENsaWZmb3Jk 86783 -IFNuYXBl 86784 -IFNhbHZhdGlvbg== 86785 -TG9naW5Gb3Jt 86786 -Q3JpdGljYWxTZWN0aW9u 86787 -LnVzZXJkZXRhaWxz 86788 -IHJlcGFpbnQ= 86789 -44GC44KK44GM44Go44GG 86790 -SHVudGVy 86791 -WmVu 86792 -VGlueQ== 86793 -bWxhbmQ= 86794 -ZXJ0aWw= 86795 -CWJ1ZmY= 86796 -X09mZnNldA== 86797 -IHNtZWxsZWQ= 86798 -Uml2ZXI= 86799 -LXRvcGlj 86800 -IGFjb21w 86801 -IFJvdXRlU2VydmljZVByb3ZpZGVy 86802 -IDwr 86803 -b21icw== 86804 -IENvb3BlcmF0aXZl 86805 -IHNldWxl 86806 -IGFpbWU= 86807 -c2hvdWxkUmVjZWl2ZQ== 86808 -SG9uZw== 86809 -IG9hc2lz 86810 -IEdlbWluaQ== 86811 -cmFwaWQ= 86812 -RHVw 86813 -KFF0R3Vp 86814 -b2RvbnQ= 86815 -LWdudQ== 86816 -IFNlbGVuaXVt 86817 -Jyk/Pjwv 86818 -IE5vcGU= 86819 -R3JlYXRlclRoYW4= 86820 -Lk9ic2VydmVy 86821 -IEFwcHJvcHJp 86822 -IExvbmVseQ== 86823 -IGhhaXJjdXQ= 86824 -IGFsbGVyZGluZ3M= 86825 -w7NwZXo= 86826 -esWR 86827 -IHNsdW1w 86828 -IEdpbnM= 86829 -IGdpb3JuaQ== 86830 -IHBhcGVyYmFjaw== 86831 -LkZpbGVSZWFkZXI= 86832 -ZGFm 86833 -Y3JlZHM= 86834 -dHlwaW5ncw== 86835 -ZGVoeWRl 86836 -Y29pbA== 86837 -U291dGhlcm4= 86838 -IG1vdXNlQ2xpY2tlZA== 86839 -emVpY2huZXQ= 86840 -dXNlclJlcG9zaXRvcnk= 86841 -RGVzdHJveWVk 86842 -aW50ZXJuZXQ= 86843 -IEVpZA== 86844 -IGxpbmtlcg== 86845 -4oCZQg== 86846 -IHNsYXVnaHRlcmVk 86847 -IFBlcnI= 86848 -CVJ1bnRpbWVPYmplY3Q= 86849 -c2FpZGE= 86850 -IHBhZ2VDb3VudA== 86851 -IFJhbmRvbHBo 86852 -IEpOSUVudg== 86853 -X3N1cGVydXNlcg== 86854 -LWRpcmVjdGVk 86855 -IElEYg== 86856 -IEJlcm5hcmRpbm8= 86857 -IE5pbnRo 86858 -IEFsZ29yaXRobXM= 86859 -YmRi 86860 -QHRlc3RhYmxl 86861 -LmFybQ== 86862 -YmVsbGlvbg== 86863 -KHNpZA== 86864 -IGJyaWVmZWQ= 86865 -4pWX 86866 -6YWN572u 86867 -IFVtYQ== 86868 -IEluZGljZXM= 86869 -IEJ1Y2NhbmU= 86870 -IGF5YW50 86871 -RnJlZWRvbQ== 86872 -IFl1cmk= 86873 -ZXRzaw== 86874 -X1Bo 86875 -IGl0YWxpYQ== 86876 -Y2xvc2luZw== 86877 -IHdyaXN0cw== 86878 -ICp9 86879 -c2VjdXRpdmU= 86880 -RW52aWFy 86881 -cmFpdGg= 86882 -IEhhd3Ro 86883 -15M= 86884 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo= 86885 -cGFnZVRpdGxl 86886 -IGRoY3A= 86887 -IOyLpO2WiQ== 86888 -d2lzaGxpc3Q= 86889 -IGJsYW1lcw== 86890 -IHNpZGw= 86891 -dWRkZWQ= 86892 -IGNvbnRyb3ZlcnNpZXM= 86893 -6I8= 86894 -KHVzZXJEYXRh 86895 -IGxpbnNwYWNl 86896 -IERpZmZlcmVuY2Vz 86897 -X2RlcG9zaXQ= 86898 -REVUQUlM 86899 -LmRlY2s= 86900 -IGNvbnRpbnV1bQ== 86901 -IHNhY3JhbQ== 86902 -b21pdGU= 86903 -IG5mbA== 86904 -Q3Vt 86905 -IHNvZg== 86906 -IGV2aWxz 86907 -IGVudGlkYWQ= 86908 -CXNvY2s= 86909 -IExlbW1h 86910 -LlNoaXA= 86911 -IHppZw== 86912 -VGVsZWZvbmU= 86913 -SURFUw== 86914 -IE51bWVyb3Vz 86915 -Lm1ldHJpYw== 86916 -aW5zbg== 86917 -IGNvcHlyaWdodHM= 86918 -IGNvbXBsaWNhdGlvbg== 86919 -IFVSTFNlc3Npb24= 86920 -IGRpcHBpbmc= 86921 -IGNx 86922 -IEJ1c3R5 86923 -cmVsYXRpb25zaGlwcw== 86924 -IENvcnZldHRl 86925 -U3VtbW9u 86926 -ZXZlbnROYW1l 86927 -SXNzdWVz 86928 -IGlycmVzaXN0aWJsZQ== 86929 -IGdyaXM= 86930 -Q0FTQ0FERQ== 86931 -IHBhdXNlcw== 86932 -IGxlZGdl 86933 -X0dQ 86934 -LkltcA== 86935 -IG9yZGVyYnk= 86936 -IE9yZ2FuaXplcg== 86937 -IEdyZWVud2ljaA== 86938 -T2Fr 86939 -LW1lbWJlcnM= 86940 -IFdlYkdM 86941 -IGdhbW0= 86942 -bW9kdWxlSWQ= 86943 -IGZ1bGxQYXRo 86944 -bG9nZW4= 86945 -KGV2ZW50TmFtZQ== 86946 -KCIuIik7Cg== 86947 -IGtyaXN0 86948 -IGNsaWZmcw== 86949 -IFBlcmNlcHRpb24= 86950 -RVRJTkc= 86951 -IGzhuqFp 86952 -IGludGVydg== 86953 -IG9wcG9ydHVu 86954 -IEp1ZGdlcw== 86955 -IENvbWJpbmF0aW9u 86956 -Y29udGludWVk 86957 -Y29ubw== 86958 -LmRyYXdSZWN0 86959 -LkNvbXBvc2U= 86960 -IHNpZ3VpZW50ZXM= 86961 -IER1ZmZ5 86962 -KGVuY29kaW5n 86963 -IFZ1bGthbg== 86964 -IEdlcnI= 86965 -IHBhcmZhaXQ= 86966 -KHl5 86967 -X1RIQU4= 86968 -IGdldFNlcnZpY2U= 86969 -X09SRA== 86970 -LGVw 86971 -Z3JhcGhpYw== 86972 -IFF1ZXJpZXM= 86973 -IHBhcnRpY3VsYXJz 86974 -IEhhdmFuYQ== 86975 -PW8= 86976 -ZmFucw== 86977 -IHVuaWxhdGVyYWw= 86978 -IFJGSUQ= 86979 -Q29tcGF0aWJpbGl0eQ== 86980 -c3RyYW5k 86981 -IHdha3R1 86982 -IHF1YWxpZGFkZQ== 86983 -UHJvcGVydHlQYXJhbXM= 86984 -cmV0ZW4= 86985 -KGhvc3RuYW1l 86986 -X0NBUg== 86987 -IHdpZGVuZWQ= 86988 -IFhwZXJpYQ== 86989 -cG9sbG8= 86990 -QWJvcnQ= 86991 -ISEpCg== 86992 -IFdhZw== 86993 -LS0r 86994 -INGC0YA= 86995 -IFJlY3Vyc2l2ZQ== 86996 -IGFubmU= 86997 -IEdhbWVwbGF5 86998 -PENsaWVudA== 86999 -LlVzYWdl 87000 -IElTU1VF 87001 -IGpkYmM= 87002 -aXNvcnk= 87003 -X21hY3Jvcw== 87004 -cGlja2xl 87005 -LmdhbWVzZXJ2ZXI= 87006 -IHR2Yg== 87007 -0YLRiw== 87008 -Lk9QRU4= 87009 -IHByZWRldGVybWluZWQ= 87010 -IHNpcmU= 87011 -CQkJDQoJCQkNCg== 87012 -aXNjcmltaW5hdGlvbg== 87013 -IHJlcGVhbGVk 87014 -IGNvbmplY3Q= 87015 -IFByZWNvbmRpdGlvbnM= 87016 -IHRpbHRlZA== 87017 -IGlub2M= 87018 -IGV1cm9wZWFu 87019 -YWJk 87020 -X0RFTEVURUQ= 87021 -IC0s 87022 -4oCTYW5k 87023 -QEZYTUw= 87024 -ICldCg== 87025 -UklORw== 87026 -IGFsaXF1YQ== 87027 -IGdydWVzb21l 87028 -IEluY2hlcw== 87029 -UGxheWVk 87030 -KGNvbmZpcm0= 87031 -IE5WSUM= 87032 -X1RvdGFs 87033 -aXNhcw== 87034 -IE9uaW9u 87035 -IHNlY29uZG8= 87036 -IEdldFVzZXI= 87037 -XFVybA== 87038 -X2Fic3RyYWN0 87039 -IGRldmV6 87040 -IGN1cGJvYXJk 87041 -dGV4dHM= 87042 -IElzbGVz 87043 -X01BVEg= 87044 -U2tpcHBpbmc= 87045 -X2Nvc3Rz 87046 -PW91dHB1dA== 87047 -aWJpbGk= 87048 -IGtudWxs 87049 -X2NvZWZmcw== 87050 -X2F0dGVtcHQ= 87051 -CVJ1bg== 87052 -Z2VuZGVu 87053 -cnVwdGVk 87054 -IHNvYXJlZA== 87055 -X2hz 87056 -IGFkb3B0cw== 87057 -X01PRElGSUVE 87058 -XEZhY3Rvcmllcw== 87059 -IFN3ZWF0 87060 -IGRva3VtZW50 87061 -IFRlbGVzY29wZQ== 87062 -IEZpeGVz 87063 -b3JxdWU= 87064 -LkNoYXJ0aW5n 87065 -X0RBQw== 87066 -IHNlY3JldGlvbg== 87067 -IHJoZXRvcmljYWw= 87068 -UGVyZmls 87069 -IG3DtmNodGVu 87070 -LCcs 87071 -IHZpZXdQYWdlcg== 87072 -QlVZ 87073 -IG9uRm9jdXM= 87074 -b3NhbHM= 87075 -IGJpc2N1aXRz 87076 -IHZib3g= 87077 -IGZvcmNlZnVsbHk= 87078 -TmludGVuZG8= 87079 -IHbDoWw= 87080 -IGNsYW5z 87081 -ZnJvZw== 87082 -IGJvcmRlclRvcA== 87083 -QnJpZWY= 87084 -LkJvcmRlckZhY3Rvcnk= 87085 -LXNlcnZpbmc= 87086 -IHF1b3RhdGlvbnM= 87087 -IEdhcm5lcg== 87088 -IEFsbGV5 87089 -Ij8+Cg== 87090 -KHNjYW5uZXI= 87091 -IGVudGFpbA== 87092 -IC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 87093 -KGA8 87094 -LmRlc2NyaXBjaW9u 87095 -X0J5 87096 -IOyalA== 87097 -IHBha2lzdGFu 87098 -ZWxobw== 87099 -RW5naW5lZXJpbmc= 87100 -IGJvb24= 87101 -IExvb3Nl 87102 -aWVyZ2U= 87103 -U2VuYXRl 87104 -IExZ 87105 -cmVzcG9uc2VPYmplY3Q= 87106 -aW9yZQ== 87107 -w6FnZW5lcw== 87108 -IOS4jQ== 87109 -IGFkZEFjdGlvbg== 87110 -IE1BQ0hJTkU= 87111 -YW5na2Fu 87112 -X21p 87113 -X0FSUg== 87114 -TGl0ZXI= 87115 -T0xG 87116 -IHN1cHBlcg== 87117 -IHBhdGhNYXRjaA== 87118 -IE9ycg== 87119 -w61k 87120 -KGZpbHRlcmVk 87121 -IGF1dGhUb2tlbg== 87122 -IOKEnQ== 87123 -LTwv 87124 -KHRlbnNvcg== 87125 -IHJldm9sdmluZw== 87126 -IGluaWNpYXI= 87127 -IFNjaHdhcno= 87128 -ZGVmZ3JvdXA= 87129 -Y29sdW1uTmFtZQ== 87130 -X3RyYWplY3Rvcnk= 87131 -4LmE4Lih 87132 -ZWdhc3Vz 87133 -IOydtOumhA== 87134 -IGVhdGVy 87135 -IHVuZGVyZXN0aW1hdGVk 87136 -IGJ0Yw== 87137 -IOyEoO2DnQ== 87138 -ZW5hZGU= 87139 -IFNFWFA= 87140 -ZW1vdXRo 87141 -T01FVFJZ 87142 -ZW50ZXJlZA== 87143 -LnBob25lTnVtYmVy 87144 -IFZvYw== 87145 -IGV4Y2Vzc2l2ZWx5 87146 -IENBVEVHT1JZ 87147 -X1VQREFURUQ= 87148 -IG1vbmFyY2h5 87149 -YXJjaHM= 87150 -IGNhdmVhdA== 87151 -d2lucw== 87152 -IHBsYXlib29r 87153 -c2hhZGU= 87154 -IHNldFVzZXJuYW1l 87155 -IGFjY3VzZXM= 87156 -IG1vxbxsaQ== 87157 -IGxvcnNxdWU= 87158 -IGFqdWQ= 87159 -aGVhcg== 87160 -IHBzeWNvcGc= 87161 -KEVD 87162 -IG1lbGFuY2g= 87163 -dGhyb2F0 87164 -bmlo 87165 -V09PRA== 87166 -IHZvbHRz 87167 -X05FRUQ= 87168 -X3doaWxl 87169 -IFJpZGVycw== 87170 -16I= 87171 -IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4= 87172 -TmV0TWVzc2FnZQ== 87173 -TW9kaWZpY2Fy 87174 -LnNlc3M= 87175 -KCIiKSw= 87176 -6Kmx 87177 -IHByYWlzZXM= 87178 -IGxjbQ== 87179 -IG1ha2VzaGlmdA== 87180 -IE5PVEhJTkc= 87181 -IEFydGlmYWN0 87182 -d2lq 87183 -dHlwaWNhbGx5 87184 -KCde 87185 -PGs= 87186 -xJlraQ== 87187 -INC+0YLQv9GA0LDQsg== 87188 -IOE= 87189 -IGRlZlN0eWxlQXR0cg== 87190 -aW5jZXJlbHk= 87191 -w6lzdA== 87192 -SW5UaGU= 87193 -c3RpbWU= 87194 -IGZyYWdtZW50ZWQ= 87195 -IGZyeWluZw== 87196 -Z3JpbQ== 87197 -ZmllbGRuYW1l 87198 -IGNyb3NzaW5ncw== 87199 -IGFtbw== 87200 -X09wdGlvbnM= 87201 -IGhhaXJlZA== 87202 -L3dhaXQ= 87203 -IHBhcmNobWVudA== 87204 -IGNyZWF0ZUVsZW1lbnQ= 87205 -SHR0cFN0YXR1cw== 87206 -IGVya2zDpA== 87207 -aXp6YXppb25l 87208 -dGh1bWJuYWlscw== 87209 -bG92YWs= 87210 -IGJhbmdpbmc= 87211 -IHVuaW1hZ2lu 87212 -IE92ZW4= 87213 -KEF1ZGlv 87214 -YXBzdWxhdGlvbg== 87215 -IHJhbXBz 87216 -55Wq 87217 -IFdvb2R3YXJk 87218 -6Zeu6aKY 87219 -cm9ncmFt 87220 -0YDRg9C/0L8= 87221 -IFdvcnNoaXA= 87222 -IHN0YWQ= 87223 -IG5lZg== 87224 -IEphdW5l 87225 -YnV6eg== 87226 -YWx1cw== 87227 -T05ET04= 87228 -LXN1 87229 -IG91dHBhdGllbnQ= 87230 -amFj 87231 -RVNQTg== 87232 -w6ZsbGFuZA== 87233 -bXlw 87234 -IHNob3dyb29t 87235 -TW9udHNlcnJhdA== 87236 -LmdldERyYXdhYmxl 87237 -w6l0aWNv 87238 -IHbDoG8= 87239 -SUJD 87240 -RXhwZXJ0cw== 87241 -TWJwcw== 87242 -Ij4j 87243 -IG5vcnRoZWFzdGVybg== 87244 -IE1lag== 87245 -KG1pbGxpc2Vjb25kcw== 87246 -4oCUYWxs 87247 -LXJlYWNoaW5n 87248 -CXJlcGx5 87249 -P3R5cGU= 87250 -IGNydXo= 87251 -ID48Pw== 87252 -LkZpbmRBc3luYw== 87253 -KGNpcmNsZQ== 87254 -IFNoaW5l 87255 -IE1hdmVyaWNrcw== 87256 -IHNhZmV6b25l 87257 -IExhemFy 87258 -IGRpc3RpbmN0aW9ucw== 87259 -LWZlZWQ= 87260 -LnNldENvZGU= 87261 -4KSq 87262 -IHTDqWM= 87263 -IHNlcmFpdA== 87264 -IE1JQ1JP 87265 -IENvbnN1bXB0aW9u 87266 -Xm4= 87267 -LmZyb21GdW5jdGlvbg== 87268 -IFJ1cGVydA== 87269 -IGhhcmFzc2luZw== 87270 -LUNv 87271 -IHRpaw== 87272 -IFN2ZW5z 87273 -LkltYWdlQWxpZ24= 87274 -X3doaXRlc3BhY2U= 87275 -IGtpY2tlcg== 87276 -IGNhZGFzdHI= 87277 -Q2V0dGU= 87278 -X25vdGlmaWVy 87279 -IEZBRw== 87280 -IHByaW1hbA== 87281 -IGhvbW9nZW5lb3Vz 87282 -IGFzdHJvbm9taWNhbA== 87283 -IEJ1cnI= 87284 -LkNvcHlUbw== 87285 -Z3JhcGhz 87286 -aXR0bw== 87287 -T1NI 87288 -IHNob3dBbGVydA== 87289 -YW50cm8= 87290 -ImRlZmF1bHQ= 87291 -ZW1waGFzaXM= 87292 -V2Vp 87293 -b3V0Y29tZQ== 87294 -IGFrdQ== 87295 -IGNhbXBhaWduZWQ= 87296 -KSI7Cgo= 87297 -IHJlY2lwcm9jYWw= 87298 -IFJveWFsZQ== 87299 -ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 87300 -LlRJTUU= 87301 -IDwq 87302 -T2Zmc2V0VGFibGU= 87303 -Y29tcG91bmQ= 87304 -d2FpdEZvcg== 87305 -dWVnb3M= 87306 -LnN0cmluZ1ZhbHVl 87307 -X1NDSEVE 87308 -IGZhdHQ= 87309 -wqDCoMKgwqDCoMKgwqA= 87310 -LmRpc2s= 87311 -IHdhcnBlZA== 87312 -IGNyaXRpcXVlcw== 87313 -PycKCg== 87314 -KHNraWxs 87315 -IG1vZGVyYXRlZA== 87316 -X2VsZW1z 87317 -S2V5TGlzdGVuZXI= 87318 -IHNlYXNvbmluZw== 87319 -IHBvdXJxdW9p 87320 -X0ZE 87321 -cHJk 87322 -aHlh 87323 -Ij7Dlzwv 87324 -IG5vdXZlYXV4 87325 -IGdpdmVhd2F5cw== 87326 -5oql6YGT 87327 -TWFpbk1lbnU= 87328 -Oy8q 87329 -IEdyb24= 87330 -cXVpdm9z 87331 -Ow0KDQoNCg0K 87332 -IGluZmx1ZW5jZXJz 87333 -KFRJTQ== 87334 -U2hhcmVkUHRy 87335 -IGRpYWxvZ3M= 87336 -KioqKiovCg== 87337 -LkF0b21pYw== 87338 -IE1vcnNl 87339 -IHBjYg== 87340 -IEFQQw== 87341 -LkltbXV0YWJsZQ== 87342 -IHJlc2l6aW5n 87343 -IEx1bXB1cg== 87344 -IEh1bWFuaXRpZXM= 87345 -X3NvbHZl 87346 -X2h1bWFu 87347 -ZXR5bA== 87348 -IEh1cnQ= 87349 -IEVzdGFibGlzaGVk 87350 -Y2xhcmVk 87351 -IGNvbXBhcnRtZW50cw== 87352 -QmVhbQ== 87353 -X1JN 87354 -LmZhbHNl 87355 -KEdyaWQ= 87356 -IFFTaXpl 87357 -X2ZsZw== 87358 -aXN0aWNh 87359 -PkxvZ2lu 87360 -OlVJQnV0dG9uVHlwZQ== 87361 -IEV4aXRpbmc= 87362 -Y2xhcw== 87363 -IGFyc2Vu 87364 -KG1ldHJpYw== 87365 -cm93c2luZw== 87366 -cXVlcnlTZWxlY3Rvcg== 87367 -X0ZSSUVORA== 87368 -LWlv 87369 -IGNvbmZpc2NhdGVk 87370 -IGRlZmlhbnQ= 87371 -IE1PVE9S 87372 -cmVndW50YQ== 87373 -IE1vcnJvdw== 87374 -IEJlcnM= 87375 -Q3JhaWc= 87376 -IENQQQ== 87377 -IHNleGtvbnRha3Rl 87378 -IHNhbW1lbg== 87379 -L0F1dGg= 87380 -LkxpYg== 87381 -Y3JhcGVy 87382 -aWNlbWFpbA== 87383 -Y3JhdGNo 87384 -IFdpcmVk 87385 -IGFkdmVydGlzZXI= 87386 -IGdldENsaWVudA== 87387 -IHJlc3BvbnNpYmx5 87388 -CVVPYmplY3Q= 87389 -LnNldFJvdGF0aW9u 87390 -LkNvdW50ZXI= 87391 -X0hPVVI= 87392 -VGVzdENhdGVnb3J5 87393 -IGhpbmRzaWdodA== 87394 -XGNvbnRyb2xsZXJz 87395 -d2FsbHM= 87396 -LnNldE1heGltdW0= 87397 -IHB1YmVydHk= 87398 -X3RlYW1z 87399 -X01PREFM 87400 -LkNP 87401 -IGJhZGFzcw== 87402 -KSddLAo= 87403 -w7pzcXVlZGE= 87404 -aXJ1dA== 87405 -Q2hlbHNlYQ== 87406 -LnRyYW5zZm9ybXM= 87407 -IGNhcGl0YWxpc3Rz 87408 -TWFyY2E= 87409 -IEFyeQ== 87410 -LWNvZGVk 87411 -546v 87412 -VVJFRA== 87413 -PFRyYW5zYWN0aW9u 87414 -IFBhcmxpYW1lbnRhcnk= 87415 -KSRf 87416 -IHN1YnRseQ== 87417 -IHNpbGt5 87418 -IERpcnQ= 87419 -IHB1enpsZWQ= 87420 -fScpOwo= 87421 -cXVlc3Rz 87422 -Rm9vdGJhbGw= 87423 -IENvbmZpZGVuY2U= 87424 -dXp1 87425 -YnVsYW4= 87426 -IGh1bW1pbmc= 87427 -bW91c2VlbnRlcg== 87428 -UmV0ZW50aW9u 87429 -IHNkbA== 87430 -b2tlZGV4 87431 -JywnPScsJA== 87432 -IEt1YWxh 87433 -U0FN 87434 -IHRyYW5zZm9ybWF0aXZl 87435 -UEtH 87436 -aWxsdXM= 87437 -IHJvb3Rpbmc= 87438 -IFdpdG5lc3Nlcw== 87439 -IFJhamFzdGhhbg== 87440 -5byg 87441 -LWFkZGVk 87442 -IFRlcnJpdG9yaWVz 87443 -KHNxdWFyZQ== 87444 -cmFiYml0 87445 -X1Jlc291cmNl 87446 -6ZaL 87447 -4LiT 87448 -IHdpbm5pbmdz 87449 -IHNwbGU= 87450 -IGTDqHM= 87451 -IE1EQg== 87452 -w6lydA== 87453 -IE1hdHRpcw== 87454 -YWlsbGVz 87455 -X3dlYWs= 87456 -L2phdg== 87457 -IGNvbGxhcHNlcw== 87458 -ICAgICAgCQk= 87459 -IHN3aXJs 87460 -IE5TU3RyaW5nRnJvbUNsYXNz 87461 -IHZvbHZlcg== 87462 -LlJlY2VpdmU= 87463 -IERleHRlcg== 87464 -IHRhYmxlbmFtZQ== 87465 -cmVhdGl2ZQ== 87466 -LkdldEZpbGVz 87467 -dm9vcg== 87468 -IEhvZQ== 87469 -VkVSTg== 87470 -IE9QQw== 87471 -7YOc 87472 -cmFtaWRz 87473 -54Sh44GX44GV44KT 87474 -U3Bpcml0 87475 -IE5PUA== 87476 -IE1haW50YWlu 87477 -KHNpZ21h 87478 -b3Ry 87479 -TW91c2VDbGlja2Vk 87480 -cXVpZXJkYQ== 87481 -X3dm 87482 -0L7QutCw0Lc= 87483 -YXBwYWJsZQ== 87484 -IEhvbGRlbg== 87485 -IENvdW50ZG93bg== 87486 -LnNpZ21h 87487 -Y2hhbGs= 87488 -YmlsZGVy 87489 -IHZpc2lvbmFyeQ== 87490 -CU9u 87491 -JHVwZGF0ZQ== 87492 -IEdpbmdyaWNo 87493 -cm9vbUlk 87494 -Pk5hbWE= 87495 -IHl5dHlwZQ== 87496 -LkRlY2ltYWxGaWVsZA== 87497 -bWFjcm9z 87498 -LnNldExheW91dFBhcmFtcw== 87499 -IHJubg== 87500 -IElNRGI= 87501 -56eN 87502 -ZW1hbGVz 87503 -IGluY2lkaWR1bnQ= 87504 -UmVzdHJpY3RlZA== 87505 -IHBlZGFscw== 87506 -IEpvZw== 87507 -IEFkYXB0aXZl 87508 -IGZhZGVz 87509 -LkV2ZW50U3lzdGVtcw== 87510 -IFBhaWdl 87511 -IHNlaXM= 87512 -IGFwcHJvcHJpYXRlZA== 87513 -RkZU 87514 -Z29yaXQ= 87515 -IGNvaGVzaXZl 87516 -IE5pY2h0 87517 -X3dvcmtmbG93 87518 -bGl1cw== 87519 -IEZvcnRuaXRl 87520 -X0lX 87521 -QXRQYXRo 87522 -IGludG94aWNhdGVk 87523 -bm9zdGlj 87524 -QmluQ29udGVudA== 87525 -LnJlZHVjZXI= 87526 -KT8K 87527 -J10q 87528 -IE9ic2VydmF0aW9u 87529 -X3ByZWZz 87530 -LnJlc29sdXRpb24= 87531 -LlBheWxvYWQ= 87532 -TWl4ZWQ= 87533 -IFJhaQ== 87534 -KHBkZXY= 87535 -KEAo 87536 -aWNvdA== 87537 -JGlz 87538 -IGNyZWU= 87539 -Pz0uKg== 87540 -LlFMYWJlbA== 87541 -IEdlb3JnaWFu 87542 -eENB 87543 -IGRlZmljaWVudA== 87544 -dGhyb3du 87545 -IHJhcGluZw== 87546 -dXBvcw== 87547 -CWNsaQ== 87548 -Z2V0Vmlldw== 87549 -SGlnaGxpZ2h0ZWQ= 87550 -Q3BwR3VpZA== 87551 -IHJlbGVnYXRlZA== 87552 -IGxlYWRlcmJvYXJk 87553 -UmVjZWl2ZVByb3Bz 87554 -Lmhhcg== 87555 -IGNvbmRp 87556 -SU1JVElWRQ== 87557 -IE1jQ2FydA== 87558 -KXRocm93cw== 87559 -YnVpZQ== 87560 -YnVhaA== 87561 -LmNvZWZm 87562 -IEF1c3NpZQ== 87563 -IFNhYmhh 87564 -KGZhYnM= 87565 -cmVsYW5k 87566 -IEbDtnI= 87567 -YmFyYW5n 87568 -LHRvcA== 87569 -CWVsc2lm 87570 -U3RlcFRocm91Z2g= 87571 -IHNrZXdlZA== 87572 -IFVudXNlZA== 87573 -Jyl9Pgo= 87574 -WWU= 87575 -Y2FsbGVl 87576 -SGliZXJuYXRl 87577 -IEV2ZXJlc3Q= 87578 -aW1wb3J0RGVmYXVsdA== 87579 -IHRhcm4= 87580 -IE5vd2FkYXlz 87581 -WUE= 87582 -IENoYWxsZW5nZXI= 87583 -X2xvZ2ljYWw= 87584 -IGNyZWF0ZURhdGU= 87585 -IEdsb3VjZQ== 87586 -IGN1YW50bw== 87587 -IEhBUg== 87588 -IENoaWxs 87589 -Il4= 87590 -IGN1cnNvcw== 87591 -LkVPRg== 87592 -IG5pamU= 87593 -IGFuZ2VyZWQ= 87594 -b2N1c2luZw== 87595 -PENvbnRhY3Q= 87596 -IEF0bW9zcGhlcmlj 87597 -IFdvbGZnYW5n 87598 -IEJK 87599 -Y2hpbGRz 87600 -IEJ1Z3M= 87601 -X0hFWA== 87602 -KFNQ 87603 -w6Vs 87604 -X2V2YWx1YXRpb24= 87605 -IFJBTkdF 87606 -IFNPUA== 87607 -X3Rva2VuaXpl 87608 -bXNnaWQ= 87609 -IHJleA== 87610 -CXBt 87611 -Q29weWluZw== 87612 -Kkw= 87613 -RGFsbGFz 87614 -LVN0YXRl 87615 -dWxmaWxs 87616 -IGJ5xYJv 87617 -IENvbnRyYWN0b3I= 87618 -RGlkbg== 87619 -QVNURQ== 87620 -IFBJTw== 87621 -LlRlbGU= 87622 -LndhdGVy 87623 -ZGV6 87624 -IGFuZ3JpbHk= 87625 -IHV0aWxpc2F0ZXVy 87626 -IHZvcnRleA== 87627 -Q29ycG9yYXRl 87628 -YXR1cmFz 87629 -IHByaXplZA== 87630 -J3VybA== 87631 -dWdsaWZ5 87632 -IGltcHVsc2Vz 87633 -IGNocm9ub2xvZ2ljYWw= 87634 -cGxlbg== 87635 -X25hbWE= 87636 -L29u 87637 -IE9mZmljZXM= 87638 -IENQSQ== 87639 -IEFmdGVyd2FyZHM= 87640 -44GT44KT44Gr 87641 -X0JMT0NLUw== 87642 -R3JhY2U= 87643 -LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg== 87644 -IEthYnVs 87645 -IOaIkA== 87646 -IExlaXB6aWc= 87647 -4Kao 87648 -U2hvY2s= 87649 -QXVz 87650 -IG11cm0= 87651 -X3N0YXJ0cw== 87652 -IGLDpA== 87653 -IFp5 87654 -IkY= 87655 -LXJpZ2h0cw== 87656 -IGJlaGF2aW5n 87657 -KCc+ 87658 -IG1vc3F1ZXM= 87659 -KndpZHRo 87660 -Ii8+Ljwv 87661 -LnVuc3BsYXNo 87662 -LmdldEFjdGl2aXR5 87663 -VVU= 87664 -IFNoYWs= 87665 -X3Jn 87666 -X0VxdWFscw== 87667 -J2h0dHBz 87668 -IE94eWdlbg== 87669 -IFBvcnRzbW91dGg= 87670 -4oCUb25l 87671 -IHdhdGNoZXJz 87672 -IENob2k= 87673 -IHNpZGVy 87674 -cGVjdHJhbA== 87675 -bXF0dA== 87676 -LmNyZWF0ZVVzZXI= 87677 -amVjdGl2ZXM= 87678 -dXJtYQ== 87679 -UmVnaXN0cg== 87680 -UGVyc29uYWxseQ== 87681 -PWtleQ== 87682 -IE5FTw== 87683 -IEZBUXM= 87684 -aWJpbGlkYWRl 87685 -Y2tzw6U= 87686 -IENvbGxhYm9yYXRpb24= 87687 -CWxibA== 87688 -LlNFUlZFUg== 87689 -IGFib3VuZA== 87690 -IEJlbmU= 87691 -d2FudGVk 87692 -LWhvbGU= 87693 -IG11dHRlcmVk 87694 -IHBlcA== 87695 -bmVzYw== 87696 -LlVwbG9hZA== 87697 -c2VtaQ== 87698 -eEVD 87699 -Jz4iKw== 87700 -IGVtYnJ5bw== 87701 -IEZpeGVkVXBkYXRl 87702 -Q2FzdGxl 87703 -Lm1vZGVsbw== 87704 -IHBscw== 87705 -IGVudmVsb3Blcw== 87706 -X3JlbWFpbg== 87707 -UXVhcnRlcg== 87708 -YWxlcnRWaWV3 87709 -X2Zvcm1hdHRlZA== 87710 -IGxhc2hlcw== 87711 -emVsZg== 87712 -aG9tbWU= 87713 -LmZsb3dMYXlvdXRQYW5lbA== 87714 -YWlycG9ydA== 87715 -IE1lbW9yaWVz 87716 -IEhFUk8= 87717 -IEFzaHRvbg== 87718 -IGV4aGliaXRpbmc= 87719 -KFNFTEVDVA== 87720 -U3VibWlzc2lvbg== 87721 -U3R1ZmY= 87722 -X3N1bg== 87723 -IHBlcsOtb2Rv 87724 -IGRlc3ByZQ== 87725 -CWVkaXQ= 87726 -IER0eXBl 87727 -Y2Vzc2l2ZQ== 87728 -YWFk 87729 -IGRlc2Nvbg== 87730 -bmVsbHk= 87731 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ== 87732 -IHNjcmlwdHVyZXM= 87733 -IG9uVmlld0NyZWF0ZWQ= 87734 -IEVWRQ== 87735 -IEJhbGxldA== 87736 -O307Cg== 87737 -VURP 87738 -IFByb2JhYmlsaXR5 87739 -cXVpcnJlbA== 87740 -Q29udGFpbmluZw== 87741 -IFBsYXQ= 87742 -6KI= 87743 -L2JpdA== 87744 -IEpRdWVyeQ== 87745 -IHRpZW5lcg== 87746 -L2RyaXZlcnM= 87747 -IFByZXNpZGVuY3k= 87748 -XHVE 87749 -IEl2ZQ== 87750 -aWVuYQ== 87751 -IGh5cGVycw== 87752 -IFNwZW5kaW5n 87753 -PFc= 87754 -IFRIRU1F 87755 -IHVzZXJQcm9maWxl 87756 -IGFubnVt 87757 -cmV0d2VldGVk 87758 -IFwnJw== 87759 -YnVuZGxlcw== 87760 -KCk8Lw== 87761 -IEN5bGluZGVy 87762 -IG91dGxpZXJz 87763 -IGRpc3NlbWluYXRpb24= 87764 -L2FwdA== 87765 -IE5hdGFzaGE= 87766 -IHJlbmRlckl0ZW0= 87767 -IENoaXBz 87768 -IHJvdW5kdXA= 87769 -IGltcHJvdg== 87770 -IGNvbW11bmljYXRvcg== 87771 -IHNreXBl 87772 -TU1N 87773 -cmlqaw== 87774 -LlBsYWNl 87775 -IHBhc2E= 87776 -IFNZTkM= 87777 -ZW5zaXM= 87778 -IEF4ZWw= 87779 -ZW7Dp2E= 87780 -Z2V0U3RyaW5nRXh0cmE= 87781 -YWJpbGl0w6k= 87782 -IGVtYWNz 87783 -LmdyYXZpdHk= 87784 -IGNoZXJpc2g= 87785 -IElTU04= 87786 -CUpzb24= 87787 -dXlv 87788 -IHVwdGltZQ== 87789 -IHJhbmRvbW5lc3M= 87790 -IGxvZnR5 87791 -Qm93 87792 -Q3JlYXI= 87793 -IHRvd2VyaW5n 87794 -Y2F0ZWdvcmll 87795 -L3Bvd2Vy 87796 -L3dlbGNvbWU= 87797 -fFI= 87798 -IGJhcnJpbmc= 87799 -aWRpYQ== 87800 -cXVhbQ== 87801 -w7pkbw== 87802 -ZXhwZXJpbWVudGFs 87803 -IGNsYQ== 87804 -IGN1cmF0b3I= 87805 -cmVhbWJsZQ== 87806 -aW5keA== 87807 -TExM 87808 -IH0pOg== 87809 -IGhpc3RvaXJl 87810 -c2ltdWxhdGU= 87811 -PEFueQ== 87812 -IEdsYW0= 87813 -IEJhcmc= 87814 -VmFsdWVDb2xsZWN0aW9u 87815 -IEluc3RpdHV0bw== 87816 -QXNTdHJpbmdBc3luYw== 87817 -IGFkZWM= 87818 -IGZlbGxvd3M= 87819 -cGlwZXM= 87820 -IFBsYWNlaG9sZGVy 87821 -IEtn 87822 -IEFsYnVtcw== 87823 -ICooKg== 87824 -X0dPT0Q= 87825 -KSIsDQo= 87826 -LlFSZWN0 87827 -w6Jt 87828 -IH0NDQo= 87829 -TWFyc2hhbEFz 87830 -QmFjaGVsb3I= 87831 -IEJhcmNvZGU= 87832 -IFRyYXZlcnNl 87833 -IG9kaW8= 87834 -LnNldFBhcmVudA== 87835 -IHNlbWljb25kdWN0b3I= 87836 -QUxMRUw= 87837 -IGJhbnF1ZXQ= 87838 -IE5ld3NwYXBlcg== 87839 -RE9NTm9kZQ== 87840 -IE5hdWdodHk= 87841 -Rm9ybWF0dGVkTWVzc2FnZQ== 87842 -IGRpc3J1cHRpbmc= 87843 -5piT 87844 -IGxvb2thaGVhZA== 87845 -IGdyYXR1aXRlcw== 87846 -IGNoZWVzeQ== 87847 -IFNQRg== 87848 -blA= 87849 -IGFyc29u 87850 -IGFudGVubmFz 87851 -X01JRERMRQ== 87852 -X01BTExPQw== 87853 -LmdvQmFjaw== 87854 -IFByb3Bvc2l0aW9u 87855 -IE1pY2hhZWxz 87856 -X3Byb29m 87857 -INC90LDQudC0 87858 -w6R0emxpY2g= 87859 -LXJvbGw= 87860 -RURB 87861 -w6Fuw60= 87862 -Z292ZXJubWVudA== 87863 -w7Z0dA== 87864 -IEVzdGFibGlzaG1lbnQ= 87865 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 87866 -X0hJVA== 87867 -IEFJTQ== 87868 -YWRvbA== 87869 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 87870 -X1JFRkVSRVI= 87871 -IGZvcm1hdERhdGU= 87872 -dWN0b3Nl 87873 -IGRvd25sb2FkZXI= 87874 -VGV4dEVkaXQ= 87875 -IGRpc2FybQ== 87876 -IEhBUFA= 87877 -0L7QtNCw 87878 -ISkuCgo= 87879 -L3Byb2Nlc3M= 87880 -IGJyYWluc3Rvcm0= 87881 -IE9SSUdJTkFM 87882 -LlRhYmxlTmFtZQ== 87883 -IEtvc3Rlbmxvc2U= 87884 -IGTDqXA= 87885 -IElzYWJlbA== 87886 -IGFzdHJvbm9tZXJz 87887 -UVVJUkVT 87888 -OiIt 87889 -dXBsb2FkZXI= 87890 -Oi8vJQ== 87891 -IGFtaXM= 87892 -RmlsZVZlcnNpb24= 87893 -ICwk 87894 -Y29vaw== 87895 -LFNJR05BTA== 87896 -JywvLw== 87897 -IFN1cHByZXNz 87898 -IExhdGlub3M= 87899 -IHdpdGhob2xk 87900 -IG1uZW1vbmlj 87901 -X0NZQ0xF 87902 -IGhvZA== 87903 -IFdvcnNl 87904 -ZXJkZQ== 87905 -IHR5cGVpZA== 87906 -CWV4cG9ydHM= 87907 -IGFjaHRlcg== 87908 -b3Nhcw== 87909 -IGZvb3Rub3Rl 87910 -aGFuaQ== 87911 -KFBhcmFtZXRlcg== 87912 -CVJlbmRlcg== 87913 -IFlZU1RBQ0s= 87914 -IFhJSQ== 87915 -IHNpZGVu 87916 -IGFyb3VzYWw= 87917 -IE9P 87918 -Qml0dGU= 87919 -IG5lYXJlcg== 87920 -IENpcmN1cw== 87921 -IENPTE9SUw== 87922 -IHdpZWxkaW5n 87923 -LkZpbGVTeXN0ZW0= 87924 -IGdyaWxsZQ== 87925 -IERvdmVy 87926 -CiAgICAgCg== 87927 -KGdlb21ldHJ5 87928 -IHN0YXBsZXM= 87929 -IEFubm91bmNlbWVudA== 87930 -IOuyhA== 87931 -IGZvcnR1bmF0ZWx5 87932 -LlNvbWU= 87933 -IG1hbmdhbmVzZQ== 87934 -IGludGVydmlld2Vy 87935 -WVJP 87936 -IGNyeXB0b2dyYXBoeQ== 87937 -IGNoYW1icmU= 87938 -LnJldHJ5 87939 -IGltaXRhdGlvbg== 87940 -JGZkYXRh 87941 -IGxvdGlvbg== 87942 -KGlkZW50aXR5 87943 -LnBn 87944 -IHByZXN1bXB0aW9u 87945 -X1NVUEVS 87946 -dm9jYWI= 87947 -IFNlbWVzdGVy 87948 -IEFiZWw= 87949 -X2FwcHJvdmVk 87950 -LmNvbXBhdA== 87951 -IHdhcnRpbWU= 87952 -XV07Cgo= 87953 -bHV0 87954 -X0FjY291bnQ= 87955 -Pygn 87956 -Y29vcA== 87957 -L3JlZw== 87958 -LnNldFRv 87959 -aXRlc3Nl 87960 -IEh5ZHJh 87961 -Qmlucw== 87962 -Y2FkZW5h 87963 -Pi8nLA== 87964 -Llwi 87965 -CWFjY291bnQ= 87966 -IERhaGw= 87967 -IGRyb3du 87968 -IGdhdXNz 87969 -IHRyYW5zZm9ybWVycw== 87970 -IE1ldGFsbGlj 87971 -IEhlcmJhbA== 87972 -YWNocw== 87973 -X2J1dA== 87974 -IGl0ZXJhdGl2ZQ== 87975 -IEZyZWVk 87976 -anVy 87977 -fE0= 87978 -O2JyZWFr 87979 -X0ZG 87980 -KGRvd25sb2Fk 87981 -4buDbg== 87982 -LmNoZWNrU2VsZlBlcm1pc3Npb24= 87983 -TkVUV09SSw== 87984 -OmZsZXg= 87985 -IENUTA== 87986 -IEFyYg== 87987 -IFByb2R1Y2U= 87988 -CXN5bmNocm9uaXplZA== 87989 -4oCcT2g= 87990 -LmRhdGF0YWJsZXM= 87991 -IGNvbmVz 87992 -RMOp 87993 -0YbQsA== 87994 -QWxn 87995 -IGZ1bmNpb25h 87996 -IFViaXNvZnQ= 87997 -IGdlb3BvbGl0aWNhbA== 87998 -IHNpZWh0 87999 -IGh5ZHJhdGlvbg== 88000 -c3Rocm91Z2g= 88001 -IER1ZGxleQ== 88002 -YXrEgw== 88003 -IHRheGluZw== 88004 -INC30LDQutCw0Lc= 88005 -X0FTTQ== 88006 -TmV1dHJhbA== 88007 -dHJhZGl0aW9uYWw= 88008 -UGxheWFibGU= 88009 -IHNwYWdoZXR0aQ== 88010 -IGlDbG91ZA== 88011 -IERheXRvbmE= 88012 -IHdlcmRl 88013 -IEFOVA== 88014 -IFByb24= 88015 -IFN0YXRpb25z 88016 -IGF0dGVzdA== 88017 -IGZ1bGxlcg== 88018 -IG5vdmFtZW50ZQ== 88019 -XVxc 88020 -Y2Nl 88021 -KGRlY2s= 88022 -L2F5dXNobWFu 88023 -aWdzYXc= 88024 -IGFkdWx0ZXM= 88025 -IHRlcnJl 88026 -Lk9yZGVycw== 88027 -CXByb3BlcnRpZXM= 88028 -RElH 88029 -IFRJTUVT 88030 -ImluZGljZXM= 88031 -ITw= 88032 -TW9uYWQ= 88033 -IG5vbmV4aXN0ZW50 88034 -IEF0bGFudGlz 88035 -IGdyaWV2YW5jZXM= 88036 -dXJlbmNl 88037 -IElQUFJPVE8= 88038 -4pmA4pmA4pmA4pmA 88039 -IGVtcGxlYWRv 88040 -INmD 88041 -Lk1vdmVOZXh0 88042 -IElzbw== 88043 -YmVhdXRpZnVs 88044 -IHNvbHVibGU= 88045 -IHNsdWdnaXNo 88046 -IGRpZmZz 88047 -X09CUw== 88048 -eG1pbg== 88049 -IHR1bWJsZQ== 88050 -IFVuYXJ5 88051 -IHppcGZpbGU= 88052 -IHN2ZW5za2E= 88053 -ZXJsYW5k 88054 -L2N1cGVydGlubw== 88055 -CXNjcmlwdA== 88056 -aXNjaGVz 88057 -TW9kaWZpZWREYXRl 88058 -IHZleWE= 88059 -IGRldGVybWluYW50 88060 -IEdvcmdlb3Vz 88061 -Z2Jvb2xlYW4= 88062 -IExPRA== 88063 -ZGNj 88064 -c2NlbmVz 88065 -IFRTUk1MUw== 88066 -KFR5cGVFcnJvcg== 88067 -IGNhbW91ZmxhZ2U= 88068 -IGJ1cmdl 88069 -VGhlbQ== 88070 -LkFzc2lnbg== 88071 -IGxhc3RJbmRleA== 88072 -X3NwaGVyZQ== 88073 -X0FCSQ== 88074 -w4Q= 88075 -aWxhZ2U= 88076 -XHhmZg== 88077 -IGtheWFr 88078 -IGZpeno= 88079 -dWl0ZW4= 88080 -LlNob3VsZEJl 88081 -IGh0b25s 88082 -IFBldGl0ZQ== 88083 -IGhlYWxz 88084 -IE9zYWth 88085 -Tko= 88086 -SW5QYXJhbWV0ZXI= 88087 -IEJpcmNo 88088 -IGNvbW1lbnRhaXJl 88089 -IFNpZWdl 88090 -IGtleWNvZGU= 88091 -LWludGVuc2l2ZQ== 88092 -cHJvcFR5cGVz 88093 -RXhwb3J0cw== 88094 -IGJ1dHRvblRleHQ= 88095 -IEdvZHppbGxh 88096 -LkV4Y2hhbmdl 88097 -IHVuZGVyc3RhbmRhYmx5 88098 -IGFjY29yZGlvbg== 88099 -IHLDqWdpb24= 88100 -IG1hcmtlZGx5 88101 -YW5vb2dh 88102 -IGNvbnRyYXQ= 88103 -X2xpZnQ= 88104 -W2RhdGU= 88105 -IHNjb3Ju 88106 -IERhdGFNYW5hZ2Vy 88107 -4oCm4oCmCgo= 88108 -X0NPTVBJTEVS 88109 -IENsYXc= 88110 -b2RhdGU= 88111 -IHVuZGVyYWdl 88112 -IEltcGxlbWVudGVk 88113 -Q2xp 88114 -S2Fs 88115 -UHJvZHVjdG9z 88116 -IGVuZmVybWVk 88117 -w6lpcw== 88118 -IGRpc2NyZWRpdA== 88119 -IFNhbW9h 88120 -IFByZXNlbnRlZA== 88121 -IGNpbmVtYXQ= 88122 -XEFjdGl2ZUZvcm0= 88123 -IGZlcm4= 88124 -IFByaW1lcg== 88125 -5oKo 88126 -Z2VyZQ== 88127 -IGlsbHVzaW9ucw== 88128 -bm90YXRlZA== 88129 -IHBvag== 88130 -IG1vZGVsTmFtZQ== 88131 -IFBNQw== 88132 -IGRlY2Fk 88133 -IGZvcmVzdHJ5 88134 -dm9pZQ== 88135 -Li4uCgoKCgoK 88136 -IH19Owo= 88137 -IHRva2VuSWQ= 88138 -YW1tdQ== 88139 -IFBlcnNvbmVu 88140 -IFZFUkJPU0U= 88141 -IHBhdHJvbHM= 88142 -IGFudGlj 88143 -X2RlZXA= 88144 -ZWdlbmQ= 88145 -IFNldFByb3BlcnR5 88146 -IEdhcmV0aA== 88147 -IE1BUw== 88148 -LnJlc3RhdXJhbnQ= 88149 -IEhlYXZlbmx5 88150 -aWVkbw== 88151 -X2xlYWQ= 88152 -IEZ1amk= 88153 -UU4= 88154 -TWFzc2FnZQ== 88155 -IHBhcmFtTWFw 88156 -IGNpdGE= 88157 -X1NwZWVk 88158 -KGJib3g= 88159 -IEpVTA== 88160 -4oCZYW4= 88161 -IG1lbnRl 88162 -IFNob3djYXNl 88163 -IENTSQ== 88164 -PlR5cGU= 88165 -LlNu 88166 -b3R5cGljYWw= 88167 -IEZhbGxvbg== 88168 -LlVUQw== 88169 -IHByZWRhdG9yeQ== 88170 -IG9yZ2FuaXNpbmc= 88171 -Y29sZA== 88172 -IHBhcnNlcnM= 88173 -dWllbg== 88174 -IGNvbXBpbGVycw== 88175 -IFs9 88176 -IEV1cmFz 88177 -TU9TVA== 88178 -CiAgICAKCg== 88179 -UkFS 88180 -LlNjaGVkdWxl 88181 -Lm9wZXJhdGlvbnM= 88182 -dWZz 88183 -w7FhbmE= 88184 -IHByZW9jdXA= 88185 -LXRyZWF0ZWQ= 88186 -LmdldFdvcmxk 88187 -Lic6 88188 -IEFUSA== 88189 -OnN0YXJ0 88190 -IGF1dG9pbW11bmU= 88191 -IEJsYWNramFjaw== 88192 -X0ZJTklTSA== 88193 -KGZsb29y 88194 -IHdyZWNrYWdl 88195 -VVJU 88196 -LkJyYW5k 88197 -cGFpcw== 88198 -Y2ltYWw= 88199 -Y2nDsw== 88200 -TkZM 88201 -LWVxdWlwcGVk 88202 -LmNvbnRlbnRPZmZzZXQ= 88203 -IG92ZXJjcm93 88204 -IFRa 88205 -IG9kb20= 88206 -IENlbGx1bGFy 88207 -CXdyaXRlbA== 88208 -KGlucHV0U3RyZWFt 88209 -KHByZWY= 88210 -LXN0b2Nr 88211 -IERlbmllZA== 88212 -LXN1cHBvcnRlZA== 88213 -ICcoKA== 88214 -YW5jb2Rl 88215 -LmZpbHRlcmVk 88216 -RGltcw== 88217 -IGpi 88218 -CXByaWNl 88219 -IEBACg== 88220 -bm9jaw== 88221 -Lm9wZW5Db25uZWN0aW9u 88222 -IGFudGljcw== 88223 -cmVzdWx0Q29kZQ== 88224 -UGxheWJhY2s= 88225 -IGNlbHVsYXI= 88226 -IEZPT0Q= 88227 -IFBvZGVzdGE= 88228 -PW1lc3NhZ2U= 88229 -LnBlcmZvcm1hbmNl 88230 -IERtaXRyeQ== 88231 -YWx0aW1vcmU= 88232 -IHBsYXRlZA== 88233 -IHR1YmVyY3Vsb3Npcw== 88234 -X2dlbQ== 88235 -KEVkaXRvcg== 88236 -VHBs 88237 -IGNyaWFu 88238 -IGJ1ZmZlcmluZw== 88239 -6KeG6aKR 88240 -ICcpCgo= 88241 -VnU= 88242 -TWF0aGY= 88243 -IHRpbWVsaW5lcw== 88244 -IFRhdGE= 88245 -L3Bw 88246 -IHBsYXN0 88247 -IFRydWx5 88248 -IFN1YnN0aXR1dGU= 88249 -a2llbQ== 88250 -a2Fhcg== 88251 -IFZpc2g= 88252 -J2h1aQ== 88253 -IE1hZ2ljaw== 88254 -L0xheW91dA== 88255 -dXJhbsOnYQ== 88256 -X3R0bA== 88257 -SGlkZUluSW5zcGVjdG9y 88258 -LmtleXdvcmRz 88259 -TGlzdE1vZGVs 88260 -X1N1Y2Nlc3M= 88261 -aWxpaGFu 88262 -IGJsYWNrbWFpbA== 88263 -IFNlcmJpYW4= 88264 -cXVlbGxl 88265 -IER5c2Z1bmN0aW9u 88266 -IFByZXBhcmVk 88267 -IGpNZW51SXRlbQ== 88268 -IGxvZ2luVXNlcg== 88269 -c2V0YXR0cg== 88270 -LkNS 88271 -X2xjZA== 88272 -IGJ5dGVzUmVhZA== 88273 -IGNkZWNs 88274 -IHRvd25zaGlw 88275 -cGVr 88276 -aWprc3RyYQ== 88277 -IG1heGltaXppbmc= 88278 -LnByb3ZpZGVycw== 88279 -SW52ZXN0aWdhdG9ycw== 88280 -IHNob290b3V0 88281 -IGFpcnNwYWNl 88282 -dG9vbGJveA== 88283 -UVdpZGdldA== 88284 -PXBr 88285 -IHBvcnRlcg== 88286 -IFByZWRhdG9y 88287 -IFN1bnJpc2U= 88288 -IGRldm91cg== 88289 -CVVJbnQ= 88290 -aXR0YW5jZQ== 88291 -U1BB 88292 -X2VuZGlhbg== 88293 -IE5hZ2Fy 88294 -dmVuaWRh 88295 -L29wdA== 88296 -QnlFbWFpbA== 88297 -IFBoeXNpY2lhbg== 88298 -XEQ= 88299 -INC80Ys= 88300 -WUVBUg== 88301 -SUND 88302 -L3BvcnRmb2xpbw== 88303 -LmV4ZWN1dG9y 88304 -dWRlbQ== 88305 -RmFsbGJhY2s= 88306 -dWR1 88307 -U2xpbQ== 88308 -w7Nsbg== 88309 -Xnst 88310 -YW5za2U= 88311 -IGh1c3RsZQ== 88312 -IElyZW5l 88313 -IGFieXNz 88314 -IFJvYmJpbnM= 88315 -IGluZGV4ZXI= 88316 -U2F1ZGk= 88317 -IHdob2xlc29tZQ== 88318 -LXNsb3Q= 88319 -IFRlY24= 88320 -IHBhZ2VUaXRsZQ== 88321 -IGNvbnRlc3RhbnQ= 88322 -aWNvcHRlcg== 88323 -IGNvdXJzZUlk 88324 -Q2hy 88325 -IEFYSVM= 88326 -Zm9yZGVy 88327 -X1RVTg== 88328 -VHJhZmZpYw== 88329 -IHR5cGVhbGlhcw== 88330 -IGRhcmY= 88331 -LXVyaQ== 88332 -dHN4 88333 -LmRlc3Ryb3lBbGxXaW5kb3dz 88334 -IGl0ZXJhdGluZw== 88335 -UmVhY3Rpb24= 88336 -CUFN 88337 -IGN1ZW50 88338 -LWNvb2tpZQ== 88339 -IGZsYXZvcmVk 88340 -c3RvaQ== 88341 -IGZsaXJ0aW5n 88342 -44CL77yM 88343 -4KSu 88344 -X0NSWVBUTw== 88345 -W3Rva2Vu 88346 -IHByb2xldGFyaWF0 88347 -LuKAmeKAnQoK 88348 -CWRj 88349 -LlN0cmluZ1Zhcg== 88350 -IGxlZ2l0aW1hdGVseQ== 88351 -X2RlY29yYXRvcg== 88352 -TG9ja2Vy 88353 -IEplbm5h 88354 -VVJJTkc= 88355 -5YaN 88356 -X1ByaW50Zg== 88357 -QVRPUlk= 88358 -LWRpc3Q= 88359 -ICIuIik7Cg== 88360 -LnF1aXo= 88361 -IGlyZ2VuZA== 88362 -LWxlYWd1ZQ== 88363 -Z2llbg== 88364 -IFByb2R1Y2Vk 88365 -SGVsbWV0 88366 -5Y+v6IO9 88367 -UGxhdGZvcm1z 88368 -IFJlc291cmNlTWFuYWdlcg== 88369 -IEh1bmRyZWQ= 88370 -cm9tZXRlcg== 88371 -ZW5na2Fw 88372 -SG9w 88373 -IHBvc3N1aQ== 88374 -QmVmb3JlRWFjaA== 88375 -IENISw== 88376 -IElNUw== 88377 -VGlja2Vy 88378 -IGdyaW5uZWQ= 88379 -LmdldEFz 88380 -IGltcG9zZXM= 88381 -XSIp 88382 -Rm9yZ2V0 88383 -L2ltcG9ydA== 88384 -IGluamVjdGluZw== 88385 -TG92 88386 -IGFicmls 88387 -X3NsaWNlcw== 88388 -LWNvbW0= 88389 -IFBST0RVQ1RT 88390 -IE9hc2lz 88391 -IMO4bnM= 88392 -IFJlamVjdA== 88393 -IHJlZ3VsYXJpemF0aW9u 88394 -aW1wbGljaXRseQ== 88395 -bmF6 88396 -U3BlY2lmaWVy 88397 -IGltcG92ZXJpc2hlZA== 88398 -5po= 88399 -IG5vbWluYXRl 88400 -IE9WRVJSSURF 88401 -IEJhbmRz 88402 -ZXRoeXN0 88403 -IEppYW4= 88404 -IG5ld2NvbWVy 88405 -IE5hYg== 88406 -IGVicA== 88407 -IFBhZ2Vy 88408 -IEh1bWI= 88409 -L2Nj 88410 -IGV4cMOpcmllbmNl 88411 -dWRnaW5n 88412 -TWI= 88413 -ZGJ1Zg== 88414 -Jy8+ 88415 -IG9ja3PDpQ== 88416 -IGpkYmNUZW1wbGF0ZQ== 88417 -IFNISVBQSU5H 88418 -IGludGVyZGlzY2lwbGluYXJ5 88419 -IENFVA== 88420 -YXV0b3A= 88421 -LXN5bWJvbA== 88422 -YXZlYw== 88423 -IGNvbXBvdW5kZWQ= 88424 -IENodW5n 88425 -X1NNUw== 88426 -LWll 88427 -IFByb3NlY3V0b3I= 88428 -IExlaWE= 88429 -IE1hbmRlbGE= 88430 -U2luZ2xlT3JEZWZhdWx0 88431 -CVJFUVVJUkU= 88432 -YXRvd24= 88433 -dXJyZXRz 88434 -5paH5a2X 88435 -IENPTlRFWFQ= 88436 -RU5TSVRZ 88437 -IGluc3VyZ2VudHM= 88438 -IERpYXM= 88439 -LnN0YXRpb24= 88440 -IEtsYW4= 88441 -X21lYXN1cmVtZW50 88442 -X1FNQVJL 88443 -IHN0b2k= 88444 -TU9PVEg= 88445 -PicpOwoK 88446 -IGluZ2VzdGlvbg== 88447 -IEdsb3c= 88448 -dXRjaGVz 88449 -YmVhcmluZw== 88450 -LnRvYXN0cg== 88451 -IGZyYWdtZW50YXRpb24= 88452 -aXBwbw== 88453 -X1NFR01FTlQ= 88454 -IHN0dW1ibGluZw== 88455 -aW1hcg== 88456 -c3Rpbmlhbg== 88457 -XygpCg== 88458 -IG1vdGl2YXRpb25hbA== 88459 -TGlzdEl0ZW1UZXh0 88460 -IHdvbWVucw== 88461 -T3BlbkhlbHBlcg== 88462 -aWJhbmQ= 88463 -IGJ0blNhdmU= 88464 -IGluY29ycG9yYXRpb24= 88465 -IGRvY3VtZW50YXJpZXM= 88466 -aWNs 88467 -IE5k 88468 -IEFyYQ== 88469 -IHF1YWtl 88470 -IEN1bW1pbmdz 88471 -aHRt 88472 -YXN0ZXJlZA== 88473 -LmR0cA== 88474 -IGNvbmRvcw== 88475 -IEd1bmRhbQ== 88476 -L2Rpc2FibGU= 88477 -aHlkcmF0ZQ== 88478 -IEVwb2No 88479 -IG5hdGlvbmFsaXN0cw== 88480 -IGRldmVy 88481 -LHJlcXVlc3Q= 88482 -LmdldFZlcnNpb24= 88483 -Q0VMRVI= 88484 -IFNhbGFo 88485 -IG1vdGU= 88486 -IE1lbGxvbg== 88487 -c3BvdGlmeQ== 88488 -IG9yaWdlbg== 88489 -IG5hbGU= 88490 -IGFkdmVyc2FyaWVz 88491 -LkpUYWJsZQ== 88492 -Zm9yY2VtZW50cw== 88493 -IFJldHJlYXQ= 88494 -IGFyY2hpdm9z 88495 -IHNsYXNoZXM= 88496 -Lk1vdXNlRG93bg== 88497 -PDo6 88498 -X3Rocm91Z2g= 88499 -QWxhbWF0 88500 -LmJsdXI= 88501 -X2ZpbmRlcg== 88502 -IGFsbHVyZQ== 88503 -UGVyaXBoZXJhbA== 88504 -X3Bhc3NlZA== 88505 -X2NoYWxsZW5nZQ== 88506 -IFBhbGVv 88507 -SU5J 88508 -RGlyZQ== 88509 -c3BoZXJl 88510 -KENPTE9S 88511 -YWNrZXJz 88512 -IEdseXBo 88513 -KGludGVnZXI= 88514 -INC60L4= 88515 -IFJlbGV2YW50 88516 -INm+ 88517 -IGF0YXM= 88518 -X3ByaW0= 88519 -IE1VVA== 88520 -bmluZ2Vy 88521 -YXV0b3JlbGVhc2Vwb29s 88522 -PV9f 88523 -IFNpZ25pbmc= 88524 -7ZWY7KeA 88525 -IHVjeg== 88526 -RWRpdGluZ1N0eWxl 88527 -IEhlYXRlcg== 88528 -IEZhaXJmaWVsZA== 88529 -IEJlYXJk 88530 -LGVu 88531 -dXNhdA== 88532 -KCcuJw== 88533 -L3N0cmVhbQ== 88534 -IGdldFN1cHBvcnRGcmFnbWVudE1hbmFnZXI= 88535 -IG1DdXJyZW50 88536 -X1NUQVRFUw== 88537 -X3dpbmQ= 88538 -Q0hBUFRFUg== 88539 -cHJvYmFiaWxpdHk= 88540 -KGFubm90YXRpb24= 88541 -ICovDQoNCg0K 88542 -LlVuaXF1ZQ== 88543 -LkFkZEZpZWxk 88544 -SGlnaGVy 88545 -LmRpZ2l0YWw= 88546 -LmV4cGVyaW1lbnRhbA== 88547 -YXds 88548 -IHdoZW5jZQ== 88549 -ZXJub3Rl 88550 -U0FNRQ== 88551 -Lmlwdg== 88552 -dG9CZUZhbHN5 88553 -YnJhbmU= 88554 -X2NhdGVnb3JpY2Fs 88555 -QXVyYQ== 88556 -IFR5cGVTY3JpcHQ= 88557 -IHNwb250YW5lb3VzbHk= 88558 -bG9uZ2xlZnRyaWdodGFycm93 88559 -aWthbA== 88560 -X1RPRE8= 88561 -IFd5YXR0 88562 -IGZsdXJyeQ== 88563 -ZGlm 88564 -IHJlY2tvbg== 88565 -IENvcm91dGluZQ== 88566 -CWZmbHVzaA== 88567 -IHdvcmtmbG93cw== 88568 -IEZBTUlMWQ== 88569 -c3ByaXRlcw== 88570 -X1dvcms= 88571 -LkdldFNpemU= 88572 -IENvbnN0cmFpbnRz 88573 -QmlnSW50 88574 -aXRpYQ== 88575 -Z2V0Um93 88576 -IGR1aw== 88577 -IGlzTmV3 88578 -IFByb2R1a3Rl 88579 -eENC 88580 -aXNpZXJ0 88581 -ZnVuY3M= 88582 -IEFkZW3DoXM= 88583 -QmluZGluZ1V0aWw= 88584 -b21waWxlcg== 88585 -LWludg== 88586 -IGNoYW50cw== 88587 -IGVudHNwcmVjaA== 88588 -KHRp 88589 -X0lB 88590 -0L7RgNC00LjQvQ== 88591 -IEZBTEw= 88592 -aW1k 88593 -IGxvY2FsdGltZQ== 88594 -PExpbms= 88595 -0L3QuNC60LA= 88596 -IHByb2ZpbGVy 88597 -IGdldFVzZXJJZA== 88598 -IFBoeXNpY2lhbnM= 88599 -UkFE 88600 -IGhtbQ== 88601 -IE5lc3M= 88602 -IFRlbXBv 88603 -IEpU 88604 -IHJlY29ubmFpc3NhbmNl 88605 -PHRyYW5zbGF0aW9u 88606 -IGVudGljaW5n 88607 -IHF1YWludA== 88608 -IGNvdXBl 88609 -X18nLA== 88610 -TkFTREFR 88611 -INC30L3QsNGH0LXQvdC40Y8= 88612 -UEVSQVRVUkU= 88613 -IFBhaQ== 88614 -IHRldGFz 88615 -Q0FT 88616 -SVJST1I= 88617 -IGtj 88618 -IHRvdGU= 88619 -IGRyYXdiYWNr 88620 -IHBhcnNsZXk= 88621 -CUZ1bmN0aW9u 88622 -aXN0eQ== 88623 -IERVUA== 88624 -X0NJRA== 88625 -X1VU 88626 -IGtzaQ== 88627 -IGrDpA== 88628 -PXZhbA== 88629 -LnRvSGV4U3RyaW5n 88630 -5p2/ 88631 -LmNsaXBz 88632 -IG9mZmVu 88633 -IFRFQ0hOTw== 88634 -IFNoYW1l 88635 -IHN1c2NlcHRpYmlsaXR5 88636 -IHN0dXBpZGl0eQ== 88637 -IFRyb3V0 88638 -IENoYW1wYWduZQ== 88639 -ZXRoeWxlbmU= 88640 -IGJlZ3I= 88641 -X3JlZGlz 88642 -WWVw 88643 -IGhhbnM= 88644 -IERlZmVuZGFudA== 88645 -IGRhc2hlcw== 88646 -IHVzZXJUeXBl 88647 -X2RhdG9z 88648 -IHVuaWM= 88649 -a3JpdA== 88650 -IHJlY2VwdGl2ZQ== 88651 -IEdyZXQ= 88652 -KG1i 88653 -IEluZmx1 88654 -w6tu 88655 -fS8+ 88656 -aW50ZXJlc3Rpbmc= 88657 -VVRVUkU= 88658 -IGltYWdlU2l6ZQ== 88659 -IGdyZA== 88660 -IGFic29s 88661 -L2Zh 88662 -LmdyYWRpZW50 88663 -IHd5c3Q= 88664 -XX0+Cg== 88665 -bGVnYXRpb24= 88666 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCg== 88667 -IEJsZW5kZXI= 88668 -X18pOw== 88669 -IHVzZXJFbWFpbA== 88670 -IFBoYXI= 88671 -bGVoZW0= 88672 -KSk/ 88673 -KFJldHVybg== 88674 -ZWdyYQ== 88675 -dXRpdm8= 88676 -IGFwcGVuZGl4 88677 -IFJUVkY= 88678 -IFNFQUw= 88679 -IGd5cHN1bQ== 88680 -X0FyZw== 88681 -IGlsbHVtaW5hdGU= 88682 -IFNjaGlmZg== 88683 -cXVpbA== 88684 -LkNvbWJvQm94U3R5bGU= 88685 -J10pKQoK 88686 -IGFsdGVycw== 88687 -IHByYWN0aXNl 88688 -IHVzdA== 88689 -IERpbWl0 88690 -LVJlZ3VsYXI= 88691 -IGNyZWVwaW5n 88692 -IENhbmFkaWVucw== 88693 -IHJldG9ybg== 88694 -LWNvcm5lcg== 88695 -ICJdIg== 88696 -KHJuZw== 88697 -IGNhbmFkaWFu 88698 -IHBvc3Rv 88699 -LmFzc2VydEFsbW9zdEVxdWFs 88700 -IEJlY2t5 88701 -L3Nz 88702 -IGhvc3RhZ2Vz 88703 -IGJpb2xvZ2lzdA== 88704 -IEhvc3BpdGFsaXR5 88705 -IEVsaw== 88706 -IEJhcmFuZw== 88707 -66qp 88708 -YmJiYg== 88709 -LnRlYWNoZXI= 88710 -IHRlcm1pbmF0ZXM= 88711 -IGlzRXJyb3I= 88712 -IEtlbmRyaWNr 88713 -ZW5kYXJz 88714 -IFN1Z2dlc3Rpb25z 88715 -Q2Vs 88716 -IFNlcnZpY2VQcm92aWRlcg== 88717 -IFdpY2hpdGE= 88718 -XSkpLAo= 88719 -IGhlYWRsaWdodHM= 88720 -X3ZlbnRh 88721 -QU5USQ== 88722 -IHByb3BpZWRhZA== 88723 -IGVubGlzdA== 88724 -CW9yZw== 88725 -TWVzc2VuZ2Vy 88726 -LmxhbmQ= 88727 -IicK 88728 -YXNwZXJz 88729 -IHRlcnM= 88730 -ZmlsdA== 88731 -IEZ1bmN0b3I= 88732 -IHNsaW5n 88733 -X0JMSw== 88734 -LUV1cm9wZWFu 88735 -IEFjaGlsbGVz 88736 -XEVudGl0aWVz 88737 -LkRpc3BsYXlNZW1iZXI= 88738 -IHJlZGV2ZWxvcG1lbnQ= 88739 -CWhlbHA= 88740 -IFsnLQ== 88741 -IEp1bGllbg== 88742 -PUludGVnZXI= 88743 -LmlzTnVsbE9yRW1wdHk= 88744 -IFdvVw== 88745 -UGF5bWVudHM= 88746 -KGhkcg== 88747 -IGJhamE= 88748 -IEpDb21ib0JveA== 88749 -RmlyZWZveA== 88750 -IGNvbmdsb21lcg== 88751 -X2N1c3Q= 88752 -JCIpCg== 88753 -IG11dGFudHM= 88754 -TWFnbg== 88755 -IE1QSA== 88756 -e18= 88757 -X3dhcm5pbmdz 88758 -IGdhc3Q= 88759 -THQ= 88760 -IHRyYWluYWJsZQ== 88761 -VHJhZGVtYXJr 88762 -QkFTSA== 88763 -IEVDUw== 88764 -UmV0cmlldmU= 88765 -J08= 88766 -IGluaXRpYWxpc2Vk 88767 -IGNoZW1pbg== 88768 -LlRyYW5zcG9ydA== 88769 -IFlpbmc= 88770 -YXNpb25z 88771 -IG1vYw== 88772 -X0xPR0dFUg== 88773 -R0VOQ1k= 88774 -IEJsb2dnZXI= 88775 -ICIpIgo= 88776 -UEVuZA== 88777 -IGFjY29tcGFnbg== 88778 -LkNPREU= 88779 -IG1MaXN0 88780 -LWVkdWNhdGVk 88781 -LC8= 88782 -IE1lcnJpbGw= 88783 -L3Blb3BsZQ== 88784 -LicnJwo= 88785 -X3RvZG8= 88786 -IGfDvG4= 88787 -X0ZVTExTQ1JFRU4= 88788 -LmNsZWFudXA= 88789 -VW5tYXJzaGFsbGVy 88790 -LlN1cHByZXNzTGludA== 88791 -IG9uc2xhdWdodA== 88792 -IE1hcnNlaWxsZQ== 88793 -ZWRpYXRvcg== 88794 -X0VOVFJJRVM= 88795 -LGRlZmF1bHQ= 88796 -bWVsZHVuZw== 88797 -ZWxmdGg= 88798 -IEdvdmVybm1lbnRz 88799 -IHBsZWFz 88800 -b3R0cw== 88801 -IHBsdW5kZXI= 88802 -cmVhZE9ubHk= 88803 -IGR5c2Z1bmN0aW9uYWw= 88804 -J05laWxs 88805 -IHVubG9hZGVk 88806 -IHNxdWVlemluZw== 88807 -IGRvb2Q= 88808 -LmFkZERhdGE= 88809 -IEFzaQ== 88810 -TUVT 88811 -KHNjaGVkdWxl 88812 -IGFkdmVudHVyZXJz 88813 -ZXhwZWN0RXhjZXB0aW9u 88814 -IH19Pns= 88815 -Q0xT 88816 -IHJlY2hlcg== 88817 -IGRlcm5pw6hyZQ== 88818 -LkRldGFpbHM= 88819 -IHJhbmRvbU51bWJlcg== 88820 -IGlhcg== 88821 -IExhbmdl 88822 -ZXdl 88823 -IEVtaWw= 88824 -IGFkdmVydHM= 88825 -IGRyYW1hcw== 88826 -IEtvbW0= 88827 -ICAJCQkJ 88828 -X1Rlc3RDYXNl 88829 -IENsYXJlbmNl 88830 -0LXQvdGC0LA= 88831 -dG91cHBlcg== 88832 -Lm9uU3VibWl0 88833 -Y2Fh 88834 -X0FMQVJN 88835 -KikKCg== 88836 -IOuzgOqyvQ== 88837 -LlByaXZhdGU= 88838 -IHNreWxpbmU= 88839 -UkFJTg== 88840 -KGN1cmw= 88841 -b3NpdGU= 88842 -SWdub3Jpbmc= 88843 -IHZ6 88844 -IHZlZGVyZQ== 88845 -IE9TWA== 88846 -YmFuYW5h 88847 -IG1ldGFt 88848 -IHRyYW5zbGF0ZVk= 88849 -IE1jR3I= 88850 -4oCZYWNj 88851 -5Lul5LiL 88852 -IHNwaXJpdHVhbGx5 88853 -KGVuYWJsZWQ= 88854 -IHJlc3RvcmVz 88855 -IGJ0bkNhbmNlbA== 88856 -dmFuaXNoZWQ= 88857 -IE51ZXZv 88858 -U2FsdmFy 88859 -Y2FmZmU= 88860 -IG1hc3RlcmluZw== 88861 -aWRkbGVk 88862 -LmlzZGlnaXQ= 88863 -IGdyYXZ5 88864 -YWdlZExpc3Q= 88865 -XFJlc291cmNlcw== 88866 -IGRvd25mYWxs 88867 -LlBhc3M= 88868 -IGFsdGlqZA== 88869 -IHBpenphcw== 88870 -IH0pKQ== 88871 -cGVybXM= 88872 -aWdodG9u 88873 -IHJlcGVsbA== 88874 -ICcnKSw= 88875 -Lm5vcm1hbGl6ZWQ= 88876 -IG1hcmNoZXM= 88877 -CXJlc29sdmU= 88878 -Q2hpbGRTY3JvbGxWaWV3 88879 -IEluc3RpdHV0aW9ucw== 88880 -QXR0ZW5kYW5jZQ== 88881 -bHNl 88882 -ZXJkZW0= 88883 -LmdldElucHV0 88884 -SGFzQmVlbg== 88885 -YXBldXRpY3M= 88886 -ICpc 88887 -IFJpdHVhbA== 88888 -X0xT 88889 -IHNwb3RpZnk= 88890 -IHNww6R0ZXI= 88891 -IFRodW1ibmFpbA== 88892 -KGNlcnQ= 88893 -IGdldFJlc291cmNl 88894 -X3Bsb3Rz 88895 -IHN0YWluaW5n 88896 -YWRqdXN0ZWQ= 88897 -INep 88898 -RGl2RWxlbWVudA== 88899 -IFRUQw== 88900 -IGFwcm92ZQ== 88901 -LnZpZXdlcg== 88902 -fD0= 88903 -Z2V0U291cmNl 88904 -55S16K+d 88905 -X1RC 88906 -X2JpbGxpbmc= 88907 -LUxpZmU= 88908 -IHBzeWNoZQ== 88909 -IHRhYlBhZ2U= 88910 -IEluZmVjdA== 88911 -eGZmZg== 88912 -X2hpZA== 88913 -IGFwb2NhbHlwc2U= 88914 -IE5GUw== 88915 -IElURVI= 88916 -V2luZG93U2l6ZQ== 88917 -aGVpdHM= 88918 -IGluY3JlbWVudGVk 88919 -IEJyYXk= 88920 -ZW5lZ3Jv 88921 -IGFsbW9uZHM= 88922 -WVBSRQ== 88923 -Tm9ybWFsaXpl 88924 -4oCcV2VsbA== 88925 -IEFwaUNvbnRyb2xsZXI= 88926 -W1VuaXQ= 88927 -R2VucmVz 88928 -IE5leA== 88929 -IExORw== 88930 -IGZvcmVnb2luZw== 88931 -IHRlbmRvbg== 88932 -IEhw 88933 -Q291bmNpbA== 88934 -IFNhdWRpcw== 88935 -IERlemU= 88936 -IHNjcmFwZWQ= 88937 -IGJvdHRsZW5lY2s= 88938 -IE9ybg== 88939 -IHVubWFubmVk 88940 -IGludm9raW5nU3RhdGU= 88941 -IEV4b2R1cw== 88942 -X0FUT01JQw== 88943 -U3ViTWVudQ== 88944 -X2NvbXByZXNz 88945 -Iy4= 88946 -RHJ2 88947 -LnB1c2hCdXR0b24= 88948 -IHN1aXRjYXNl 88949 -b3NzZWQ= 88950 -Yml0cmFyeQ== 88951 -U25pcHBldA== 88952 -IEVwaWRlbWk= 88953 -RGlzYWxsb3c= 88954 -X0NISw== 88955 -IHZlcmlmaWVz 88956 -IENhdGFseXN0 88957 -4oCUZnJvbQ== 88958 -IGNvbnRhbWluYW50cw== 88959 -Sm9obm55 88960 -KGZpbA== 88961 -IGRlcmVu 88962 -IG91dGNyeQ== 88963 -IEpvaGFubg== 88964 -PFRhZw== 88965 -X3Nhbg== 88966 -IHN0ZGRldg== 88967 -IHBhcmFseXplZA== 88968 -IExleHVz 88969 -b3NhdGU= 88970 -IENoYXJzZXQ= 88971 -IFJlYWx0 88972 -PT8iLA== 88973 -KERlZmF1bHQ= 88974 -IFRyZWFzdXJlcg== 88975 -RWluZQ== 88976 -IHVudHJ1ZQ== 88977 -IGZpbmFuemk= 88978 -IGJlaGF2aW91cmFs 88979 -IG5pcHBsZQ== 88980 -IFJhZGljYWw= 88981 -IFBheg== 88982 -IE1haXNvbg== 88983 -LWVtcGxveWVk 88984 -IHdlcmVsZA== 88985 -IGpvcw== 88986 -IERpZWQ= 88987 -ZW50cmVwcmlzZQ== 88988 -JHJvd3M= 88989 -IHNwb29m 88990 -IMK7Lg== 88991 -IGtleXBvaW50cw== 88992 -IGN1cGNha2Vz 88993 -IHt9KTsKCg== 88994 -Y2hpbmU= 88995 -4oCL4oCL 88996 -LExPQ0FUSU9O 88997 -IHBseXdvb2Q= 88998 -IG1hZ2c= 88999 -IFJhbw== 89000 -IERQUg== 89001 -IGVib29rcw== 89002 -KXNpemU= 89003 -IHNwZWNpYWxpc2Vk 89004 -I2Fl 89005 -IG1pY2hhZWw= 89006 -IFNURE9VVA== 89007 -IFBlbGw= 89008 -QU1FUkE= 89009 -YW5nZWxv 89010 -IGluZ2lu 89011 -IG1BdXRo 89012 -IGxlZ2FsaXpl 89013 -IEN1YW5kbw== 89014 -IGNlcnRv 89015 -IGxpdHJlcw== 89016 -IEV4dHJhcw== 89017 -U0hPUlQ= 89018 -IHByZW1hdHVyZWx5 89019 -IFNlbWFwaG9yZQ== 89020 -SEVO 89021 -IGFtcGhpYg== 89022 -IGjDqQ== 89023 -RXhpdGluZw== 89024 -ZXVpbGxleg== 89025 -IFRNUHJv 89026 -LnByZWZlcmVuY2Vz 89027 -LmdldEluZm8= 89028 -w6l0aWNh 89029 -IiIiLg== 89030 -Lm5ld0FycmF5TGlzdA== 89031 -IGtyb24= 89032 -IEJMTA== 89033 -Y2xpbmU= 89034 -X2di 89035 -IFRvbWFz 89036 -cHJvYmFudGU= 89037 -SVRJT05BTA== 89038 -4buRaQ== 89039 -IExvZA== 89040 -SXNu 89041 -LHsK 89042 -IGtvbW11bg== 89043 -d2R4 89044 -Z2Vub21l 89045 -6YCj 89046 -dG9IYXZlTGVuZ3Ro 89047 -J0U= 89048 -IHDDumJsaWNh 89049 -IERldGVjdGVk 89050 -IF8KCg== 89051 -0YzRjg== 89052 -K1M= 89053 -Y2xvdGg= 89054 -Um90b3I= 89055 -Lm51bWVybw== 89056 -X3N0YW5k 89057 -R0ND 89058 -6rU= 89059 -X3Zw 89060 -X0ZBUg== 89061 -QWhlYWQ= 89062 -e31c 89063 -KGNvcnJlY3Q= 89064 -ImNyeXB0bw== 89065 -bW9kdWxv 89066 -X1VUSUxT 89067 -LlZhcg== 89068 -LW1lbg== 89069 -IHZlbmlhbQ== 89070 -IE1jQ29ybQ== 89071 -Z2V0TG9jYXRpb24= 89072 -W2NvZGU= 89073 -JWY= 89074 -IGRpZmZlcmVk 89075 -SVBBZGRyZXNz 89076 -IFN0cmF3YmVycnk= 89077 -IFNhaGFyYQ== 89078 -Y3JlYXRlQ2xhc3M= 89079 -IS8= 89080 -IG1lbWJlcnNoaXBz 89081 -IHByb25vdW5jZQ== 89082 -LkNvbnN0cmFpbnQ= 89083 -IEVucm9sbG1lbnQ= 89084 -IHJlbmV3YWJsZXM= 89085 -Lmd0 89086 -aXp6aWU= 89087 -cnp5 89088 -ZXJzZW4= 89089 -PD0k 89090 -REVMQVk= 89091 -IHNpZ25pbg== 89092 -IFBTVQ== 89093 -QXBwTmFtZQ== 89094 -fVwuWw== 89095 -RUdB 89096 -IGNpZW50 89097 -IFN5bm9wc2lz 89098 -IGxldHRlclNwYWNpbmc= 89099 -IGNoaWxkcw== 89100 -IFNjYWxpbmc= 89101 -KXByZXBhcmU= 89102 -IGNvbW11dGVy 89103 -U2xhc2g= 89104 -b3VzZXI= 89105 -IHdhdGVybWFyaw== 89106 -IFVJU2NyZWVu 89107 -b2xpYW4= 89108 -CXZlcnRpY2Vz 89109 -PkFjdGlvbg== 89110 -IGFwaA== 89111 -aGFuZHM= 89112 -IE9DQw== 89113 -SFU= 89114 -IHNlY2x1ZGVk 89115 -IHZpc2NlcmFs 89116 -IHZpZGVvZw== 89117 -IFNhbXVyYWk= 89118 -IFp1aw== 89119 -IFdpZG93 89120 -YWNjaW5l 89121 -IGxpbGxl 89122 -IFJ5ZGVy 89123 -IFByb2dyYW1tZXI= 89124 -RXhwb3J0ZXI= 89125 -IG1vdmltaWVudG8= 89126 -YXBhcw== 89127 -IGxlaWRlcg== 89128 -dWxhcmVz 89129 -aWVtZQ== 89130 -LWRlbnNpdHk= 89131 -ZGVzY2VuZGluZw== 89132 -KElU 89133 -IHNjcmFwZXI= 89134 -IGljZWJlcmc= 89135 -X0NSSVRJQ0FM 89136 -IGF1dGU= 89137 -X1N0eWxl 89138 -IE1BTA== 89139 -IEhlY3Rvcg== 89140 -LUNocmlzdGlhbg== 89141 -IGRpZmZlcmVudGlhdGVk 89142 -IEJpc29u 89143 -ICAgICAgIAk= 89144 -LnBvcHVsYXRpb24= 89145 -Umlv 89146 -LVRy 89147 -PVZhbHVl 89148 -IEx1ZnQ= 89149 -IEdpdWxpYW5p 89150 -55yf 89151 -Q291cG9u 89152 -IGhhY2llbmRv 89153 -44Od 89154 -cG9uY2U= 89155 -X3Jlc2lkdWFs 89156 -IGxp4buHdQ== 89157 -XHVmZg== 89158 -0L7QsdGF0L7QtNC40Lw= 89159 -IHJlc3BlY3Rv 89160 -IERlc2lyZWQ= 89161 -RGF0YVN0cmVhbQ== 89162 -LnNheA== 89163 -IG1vcA== 89164 -IEhhY2tlcg== 89165 -QU5UQQ== 89166 -QW5j 89167 -VmVudGE= 89168 -IFdvcmRwcmVzcw== 89169 -CWVmZmVjdA== 89170 -YWRhcHQ= 89171 -IEludGVydmlld3M= 89172 -IGRyYXdiYWNrcw== 89173 -QUxMRU5H 89174 -IGfDqW7DqXJhbA== 89175 -LWJhZGdl 89176 -UmVzaXN0YW5jZQ== 89177 -IE9TSQ== 89178 -dG91cm5hbWVudA== 89179 -IFJlcHV0YXRpb24= 89180 -IEVpc2VuaG93ZXI= 89181 -RmlsZWQ= 89182 -IGhlYnQ= 89183 -I1w= 89184 -Y3JlYXRlUXVlcnlCdWlsZGVy 89185 -5pyJ5pWI 89186 -dmFuY2Vk 89187 -Lkhhc0tleQ== 89188 -ZGRl 89189 -KHN0YXJ0VGltZQ== 89190 -IEluc3RhbGxlcg== 89191 -IEltcGw= 89192 -Y29hY2g= 89193 -IHByZWFjaGVk 89194 -IGJyZXdlZA== 89195 -SW5zdGFsbGVy 89196 -b2x2YWJsZQ== 89197 -IGFsYXM= 89198 -KHNwZWxs 89199 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 89200 -IGRlZmFtYXRpb24= 89201 -KEFyZw== 89202 -IHVzZXJEZXRhaWxz 89203 -IGxpY2Vuc29ycw== 89204 -IEludmVzdGlnYXRpb25z 89205 -IGRpbmVy 89206 -IGZpY3Q= 89207 -U3RpY2s= 89208 -TmVpZ2hib3I= 89209 -dG9UaHJvdw== 89210 -LXNlY3Rvcg== 89211 -IHJpc3VsdA== 89212 -4oCZOg== 89213 -Sk5JRW52 89214 -eXBpY2Fs 89215 -ZGVzaWduYXRpb24= 89216 -KHdw 89217 -IGNvbmZpcm1QYXNzd29yZA== 89218 -LWlvcw== 89219 -ICItIjsK 89220 -CWFzc2VydE5vdE51bGw= 89221 -YWRkRXJyb3I= 89222 -YXZyYXM= 89223 -Vm0= 89224 -KGpRdWVyeQ== 89225 -IFZpY3RpbXM= 89226 -IHJlbGlhbnQ= 89227 -IEJsaXR6 89228 -IG91dGFnZQ== 89229 -IGZsdW9yaWRl 89230 -IFROVA== 89231 -LkRpc2NsYWltZXI= 89232 -IFNOTVA= 89233 -dmFibHk= 89234 -IHBob3RvbnM= 89235 -LlJlYWRBc1N0cmluZ0FzeW5j 89236 -U2NoZWR1bGVk 89237 -IGpld2lzaA== 89238 -IEdlb2ZmcmV5 89239 -IEdyYW5ueQ== 89240 -fgo= 89241 -LW1lc3NhZ2Vz 89242 -KGdvYWw= 89243 -IGFyZ2VudA== 89244 -IFBlc3Q= 89245 -IGNvbmdyYXR1bGF0ZQ== 89246 -aW5vc2F1cg== 89247 -IHdoaXNwZXJz 89248 -IHNpc3RlbWFz 89249 -IEbDqQ== 89250 -L0luZGV4 89251 -Lk1JTExJU0VDT05EUw== 89252 -IGFjaGlldmFibGU= 89253 -IEJyaXR0YW55 89254 -KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKys= 89255 -IFJldHVyblR5cGU= 89256 -IGluZml4 89257 -LmlzU3VjY2Vzcw== 89258 -LkNhdGVnb3JpZXM= 89259 -IG91dGxpZXI= 89260 -LkFzc2V0 89261 -b3RlYw== 89262 -IHdpemFyZHM= 89263 -IGJvb3Rsb2FkZXI= 89264 -X2Jlcg== 89265 -IHJlaGFiaWxpdA== 89266 -YW50b3I= 89267 -IFZpdm8= 89268 -IEdhcm1pbg== 89269 -b2JqZWN0SWQ= 89270 -QFBhdGg= 89271 -IMO6bmljYQ== 89272 -IFlvcmtlcnM= 89273 -R3VpZElk 89274 -JGVycm9ycw== 89275 -ICs9Cg== 89276 -IGF4aW9t 89277 -IFBTSQ== 89278 -IFN1Y2M= 89279 -IFNwb2thbmU= 89280 -ICciLiRf 89281 -IExO 89282 -Lm5ld0xpbmU= 89283 -IGludGVyc2VjdHM= 89284 -bGljaGtlaXQ= 89285 -IElBTQ== 89286 -LkRyb3BEb3duSXRlbXM= 89287 -IGNvdXJ0ZW91cw== 89288 -IFNtaXRoc29uaWFu 89289 -IEhtbQ== 89290 -UURlYnVn 89291 -c3RyYWlnaHQ= 89292 -X3NvbGQ= 89293 -QnVsaw== 89294 -VHJpU3RhdGU= 89295 -IGFkZEJ1dHRvbg== 89296 -IEhpcmluZw== 89297 -VHJhbnNwb3Nl 89298 -IFVJVGV4dFZpZXc= 89299 -aXN0ZW5jaWE= 89300 -L2NwcA== 89301 -INC/0L7Qu9GP 89302 -IENvb2tib29r 89303 -L0FwcGxpY2F0aW9u 89304 -Z2VuaWM= 89305 -IFdvb0NvbW1lcmNl 89306 -LHZlY3Rvcg== 89307 -IEJpdGU= 89308 -Lmh3 89309 -IGRvY2tpbmc= 89310 -IFRhbnRyYQ== 89311 -IFNWQw== 89312 -IE1hdXJpdA== 89313 -aWFsaWFz 89314 -IEF1cmU= 89315 -IGJvbHM= 89316 -TE9DSVRZ 89317 -IFdlc3Ricm9vaw== 89318 -IEJQTQ== 89319 -IEZleQ== 89320 -IFNvdmVyZQ== 89321 -IHBhbmRh 89322 -IHF1aXp6ZXM= 89323 -IGNyZW8= 89324 -c3BlZWNo 89325 -L2Rpcg== 89326 -INC40YHQv9C+0LvRjNC30L7Qsg== 89327 -IGZvdW5kYXRpb25hbA== 89328 -LWFwcGVuZA== 89329 -blRoZQ== 89330 -IGFwaVVybA== 89331 -LlhQQVRI 89332 -IExpbmd1 89333 -IEV4aGF1c3Q= 89334 -UGFraXN0YW4= 89335 -IG9tYXA= 89336 -IGZvbnRTdHlsZQ== 89337 -0LXRgdGC0Lg= 89338 -IG1hbnNsYXVnaHRlcg== 89339 -X0xvbmc= 89340 -IGNhcnBldHM= 89341 -Q2hlc3M= 89342 -ZWxpZ2h0 89343 -RHJhd2VyVG9nZ2xl 89344 -IFBhdHR5 89345 -X2Nyb3NzZW50cm9weQ== 89346 -IHR3ZWFraW5n 89347 -0YLRgw== 89348 -IENBTEM= 89349 -c2lw 89350 -IEpNUA== 89351 -X19fX19fX19fX19fX19fX18KCg== 89352 -VHJlZVZpZXc= 89353 -LXdhdmU= 89354 -IHBhc3R1cmU= 89355 -ZWxpbWluYXI= 89356 -IGVyeQ== 89357 -IHJlc3RsZXNz 89358 -6rWs 89359 -IG1hcmlhZ2U= 89360 -IEVsbGll 89361 -Xz0n 89362 -IHZtaW4= 89363 -S2ljaw== 89364 -LnRvb2xib3g= 89365 -IE1hcmlubw== 89366 -eXBzeQ== 89367 -c3RkYXJn 89368 -cHRyZGlmZg== 89369 -IFBlYWtz 89370 -X1ZhbA== 89371 -IGluZ2VzdA== 89372 -IGNvbXBz 89373 -RGViZQ== 89374 -IERlY2xhcmF0aW9ucw== 89375 -aXJjb24= 89376 -PWFsbA== 89377 -LkRlYnVnZg== 89378 -UHJlZGljdGlvbg== 89379 -IGRhdQ== 89380 -KE1lbWJlcg== 89381 -IGNoaWVmbHk= 89382 -L2FuaW1hdGU= 89383 -LkF0dGFjaA== 89384 -IGdhc3RyaWM= 89385 -IFVzZXJEZXRhaWxz 89386 -w7ZyZW4= 89387 -a29h 89388 -LWJvb3Q= 89389 -IHNwbGljZQ== 89390 -bGVh 89391 -b3Rp 89392 -W29w 89393 -U3F1YXJlZA== 89394 -IHNjcm9sbFRv 89395 -IE5ld2ZvdW5kbGFuZA== 89396 -CUVSUk9S 89397 -V2Fs 89398 -RU1BTEU= 89399 -R2V0WQ== 89400 -IGNhYmlucw== 89401 -IGFic2w= 89402 -Lm1peGVy 89403 -IGNkcg== 89404 -Y29uY2VydA== 89405 -IFN5bHZpYQ== 89406 -Qks= 89407 -5LuK5bm0 89408 -X0NMQU1Q 89409 -0YHRgtGA0YPQutGC0L7RgA== 89410 -L2dhbWVz 89411 -xZN1cg== 89412 -PGxvY2F0aW9u 89413 -IGNsb3NlQnV0dG9u 89414 -IEhhaXJzdA== 89415 -4bqhbw== 89416 -IGNydW1ibGluZw== 89417 -IHN1bGZhdGU= 89418 -IGFsZ3VpZW4= 89419 -IEpEQkM= 89420 -IEt2 89421 -UElQ 89422 -X3N1cmY= 89423 -IHXFvHl0aw== 89424 -IG1hbm5lZA== 89425 -IE9jY2FzaW9uYWxseQ== 89426 -b2Jqcw== 89427 -TWluaW1hbA== 89428 -LWRlc3M= 89429 -IFdBVg== 89430 -IEVycm9ySGFuZGxlcg== 89431 -IHNldExvY2F0aW9u 89432 -IGlldHM= 89433 -IHN1YnJvdXRpbmU= 89434 -IHRvbmd1ZXM= 89435 -X3F1aXo= 89436 -TWlsbGVy 89437 -IEJhc2VUeXBl 89438 -IFZ1ZXg= 89439 -aXJhdGU= 89440 -U2VyaW91c2x5 89441 -dHlwZWlk 89442 -IGt1dGpl 89443 -IHByZXNjcmliaW5n 89444 -X3N1cnZleQ== 89445 -LkN0 89446 -IGJsaW5kbHk= 89447 -LmdldExhYmVs 89448 -LCIpOwo= 89449 -IHBvdHJ6ZQ== 89450 -IFN3b3Jkcw== 89451 -U29ydGFibGU= 89452 -IEJsYWNrYnVybg== 89453 -IE1hdGE= 89454 -IHBvbmRz 89455 -IHByb3Rlc3RvcnM= 89456 -IEVuc2VtYmxl 89457 -OmZvY3Vz 89458 -IGl0YWxpYW5h 89459 -IGRvcm1hbnQ= 89460 -IE5lbA== 89461 -SU5DTFVERQ== 89462 -KENvbnY= 89463 -IGJ1Zmxlbg== 89464 -IENETg== 89465 -LnhodG1s 89466 -SGRy 89467 -IGNhcmNpbm9tYQ== 89468 -IFdvcmNlc3Rlcg== 89469 -bmRs 89470 -dXNlUmFs 89471 -dXNlUmFsYXRpdmU= 89472 -dXNlUmFsYXRpdmVJbWFnZVBhdGg= 89473 -IHRha2Vhd2F5 89474 -ZWxlbWVudEd1aWRJZA== 89475 -LmxhYmVsWA== 89476 -W0lE 89477 -QUxFUg== 89478 -CXV2 89479 -PigpLT4= 89480 -L2xp 89481 -K2xlbg== 89482 -IHByb3BlbA== 89483 -IGNhYm8= 89484 -XCIiKTsK 89485 -IHZvY2F0aW9uYWw= 89486 -LXBpbGw= 89487 -Lm5sbQ== 89488 -IGVyb3RpY2E= 89489 -b3BvdA== 89490 -bGFuZHNjYXBl 89491 -aW5zaw== 89492 -IHBsYWNlbWVudHM= 89493 -LnNldEF1dG8= 89494 -IGhvbWljaWRlcw== 89495 -X0ZpZWxkT2Zmc2V0VGFibGU= 89496 -Omw= 89497 -IGFubm90YXRl 89498 -LXJpc2U= 89499 -LGFscGhh 89500 -IGludGVydmVuaW5n 89501 -YW1iaQ== 89502 -Lj0nPA== 89503 -IHBhcmxlcg== 89504 -772l772l 89505 -IGNvbXBseWluZw== 89506 -LWhhbmRsZQ== 89507 -IGludGVycnVwdGlvbnM= 89508 -cGxlcnM= 89509 -cm91cHM= 89510 -X0RlZg== 89511 -IHBpY2tlclZpZXc= 89512 -IHBpZXJjZWQ= 89513 -IGVyYWRpY2F0ZQ== 89514 -bW9ieA== 89515 -W3RyYWlu 89516 -RGVmZXJyZWQ= 89517 -IHRvdGFsZWQ= 89518 -Q2hpbGRJbmRleA== 89519 -IFJlY29tbWVuZGF0aW9ucw== 89520 -X1dPUkRT 89521 -IHNpZ25pZnk= 89522 -IEFlcm8= 89523 -X2Jvb3RzdHJhcA== 89524 -X1Vw 89525 -cHJvZHVjdE5hbWU= 89526 -LWFueQ== 89527 -IHBwbA== 89528 -X1BVVA== 89529 -IGx5b24= 89530 -X0lMaXN0 89531 -IMOpY3JpdA== 89532 -KGd1aWQ= 89533 -IGNvbnRhZ2lvdXM= 89534 -X1NlbGVjdGlvbg== 89535 -L2xhbmd1YWdl 89536 -cXVhbg== 89537 -IGFjdXB1bmN0dXJl 89538 -IG9mcmVjZQ== 89539 -CVJURQ== 89540 -Lkd1bmE= 89541 -IHNlbnNlZA== 89542 -IEtyYWs= 89543 -IHVubHVja3k= 89544 -YXZpYw== 89545 -dGl0bGVMYWJlbA== 89546 -IGhheXN0YWNr 89547 -LmJpdG1hcA== 89548 -IENvdW5zZWxpbmc= 89549 -UExBVEZPUk0= 89550 -X1Rvb2w= 89551 -VGFt 89552 -V2VyZQ== 89553 -0YDQsNC3 89554 -X1NQRQ== 89555 -IG9uQW5pbWF0aW9u 89556 -PTw/PSQ= 89557 -IFNsZQ== 89558 -IEd1aW5uZXNz 89559 -IHR3ZWFrZWQ= 89560 -LXByZXNzdXJl 89561 -X21vbnRocw== 89562 -KW8= 89563 -UHJvYmFiaWxpdHk= 89564 -IENhbXBvcw== 89565 -LkNPTkZJRw== 89566 -VmludGFnZQ== 89567 -PndpbmRvdw== 89568 -IEZhY3RvcnlCb3Q= 89569 -cG9zdGdyZXNxbA== 89570 -IHRhYmxldG9w 89571 -IENhdGE= 89572 -aG9j 89573 -X2FzYw== 89574 -4oKs4oCc 89575 -QmFja1N0YWNr 89576 -w6lv 89577 -IFNvdXM= 89578 -c2V0dGVy 89579 -JyldKQo= 89580 -dmVsbGU= 89581 -IEFsdW1pbml1bQ== 89582 -eEJB 89583 -Lm1vbmdv 89584 -IFZhcmlhdGlvbg== 89585 -eXR1dA== 89586 -bmVobWVy 89587 -4buDbQ== 89588 -IGVmZmVjdGVk 89589 -ICoqLw0K 89590 -IHJlY291bnRlZA== 89591 -UHJhY3RpY2U= 89592 -Q0FOQ0VM 89593 -Y3puaWU= 89594 -TGFycnk= 89595 -IHFh 89596 -IEh1ZmZtYW4= 89597 -Z2V0RHJhd2FibGU= 89598 -IGVuZnJlbnQ= 89599 -IG9uQ2FuY2VsbGVk 89600 -IGxlbw== 89601 -IFhTUw== 89602 -IEh1cnJpY2FuZXM= 89603 -IGpvbg== 89604 -IFRlc3RlZA== 89605 -IE1vcmFs 89606 -IGJlZHRpbWU= 89607 -IEpBRFg= 89608 -IGVjaGFuZw== 89609 -IG51ZXN0cmFz 89610 -UENN 89611 -KS4u 89612 -IOyImOyglQ== 89613 -IGJvcmRlcmxpbmU= 89614 -IGFzc2lzdGly 89615 -IEhlbHBz 89616 -IERpdmU= 89617 -X3NuZA== 89618 -d2l0 89619 -X2JsZW5k 89620 -IGlzRmlyc3Q= 89621 -IGhlYXBx 89622 -KCc9 89623 -IGFzc2VtYmxlcg== 89624 -IE15c3RpYw== 89625 -b3JnaA== 89626 -IGhpam9z 89627 -X0tIUg== 89628 -KGRlY29kZWQ= 89629 -IFFVSQ== 89630 -INeR 89631 -IGNvbnRyb2xJZA== 89632 -U3BhY2Vy 89633 -LmFnZ3JlZ2F0ZQ== 89634 -IHNoYWx0 89635 -X3RyYXA= 89636 -IEZhbWlsaWU= 89637 -zrg= 89638 -b3J0YQ== 89639 -LlBvc3RNYXBwaW5n 89640 -7LA= 89641 -ICcuLics 89642 -esOh 89643 -L2FybQ== 89644 -LmdhbGxlcnk= 89645 -IGltcGVjY2FibGU= 89646 -IHdpbmRvd0hlaWdodA== 89647 -c2xhY2s= 89648 -ZmZi 89649 -X3Fw 89650 -bGFkZW4= 89651 -IFRFUk0= 89652 -c2V0TGFiZWw= 89653 -IFNpbmdsZUNoaWxkU2Nyb2xsVmlldw== 89654 -ecO8aw== 89655 -IHB1bHVtaQ== 89656 -LWdhcA== 89657 -dW5pYWNpZA== 89658 -CWhvbGRlcg== 89659 -LmFkZEZpZWxk 89660 -IHRyaXBsZXM= 89661 -IEp1ZGdtZW50 89662 -IENlbmE= 89663 -cGFyc2Vycw== 89664 -LmRyYXdUZXh0 89665 -INC60LDQttC0 89666 -IGFjY3Q= 89667 -aGl2ZQ== 89668 -IG11c2lxdWU= 89669 -IFlheg== 89670 -LXBvc3Rz 89671 -IGZpbHM= 89672 -IC8vew0K 89673 -X3B1dHM= 89674 -IFN0YXR1ZQ== 89675 -ZGlhbW9uZA== 89676 -U3RvcmFnZVN5bmM= 89677 -IHNodXRz 89678 -IGdldHRpbWVvZmRheQ== 89679 -IEFBQkI= 89680 -aWNoZXJu 89681 -Z2V0TG9jYWxl 89682 -aW50cmVl 89683 -IGZydWl0ZnVs 89684 -QmVhcg== 89685 -IHBsdW1iZXI= 89686 -cWlk 89687 -Q0hJUA== 89688 -IG1vdGl2YXRpbmc= 89689 -IGVzY2FsYXRl 89690 -LmJ1bGs= 89691 -IFBsYXlncm91bmQ= 89692 -X21pcnJvcg== 89693 -IFBlZWw= 89694 -IGRhbmU= 89695 -aW52b2ljZXM= 89696 -SGFzQmVlblNldA== 89697 -LXZlcnRpY2Fs 89698 -IEZyYW5jZXNjbw== 89699 -IEFTQQ== 89700 -INC60L7Qu9C40YfQtdGB0YLQstC+ 89701 -w6Bu 89702 -Rm91cnRo 89703 -IENyZWF0ZVRhYmxl 89704 -Y2N0b3I= 89705 -IGZyYW50aWM= 89706 -YWFi 89707 -IEthcmFjaGk= 89708 -X2ltYWc= 89709 -IG5hdHV1cg== 89710 -RWF0 89711 -IHN0dW1w 89712 -IHJvbGxlcnM= 89713 -IHRyYWl0ZW1lbnQ= 89714 -INC/0YDQvtC0 89715 -IHJlYWxpc3RpY2FsbHk= 89716 -IGVQdWI= 89717 -IFphZw== 89718 -ZGFtbg== 89719 -IEFubmV4 89720 -cGVjaWVz 89721 -KGV4aXQ= 89722 -IHNwZWN0YXRvcg== 89723 -IEJ1bGdhcmlhbg== 89724 -IG1lZ2V0 89725 -IG1hdHVyZXM= 89726 -IGRldGVjdGlvbnM= 89727 -IHphaGw= 89728 -ZW5lZml0 89729 -YWtvdg== 89730 -IGFkdWx0b3M= 89731 -bWlkZGxld2FyZXM= 89732 -aXNPYmplY3Q= 89733 -S2Vubg== 89734 -IHVuZXRoaWNhbA== 89735 -c3VibmV0 89736 -R3JhcGhRTA== 89737 -IEdhZWw= 89738 -LkRyb3BvdXQ= 89739 -IGJ1cmVhdWNyYXRz 89740 -IFJlZGVtcHRpb24= 89741 -LkR0bw== 89742 -LkV2YWx1YXRl 89743 -IG9nZ2k= 89744 -IHRyYXRhbWllbnRv 89745 -IHJlY2FsbGluZw== 89746 -aXN0aW5ndWlzaA== 89747 -L3JlbGVhc2U= 89748 -X1dST05MWQ== 89749 -CW1rZGly 89750 -VHlwZUVudW0= 89751 -IERBUks= 89752 -5rWB 89753 -IFZhcG9y 89754 -IGF0b2w= 89755 -CWluc3Q= 89756 -LmApOwo= 89757 -L2Vs 89758 -IHJlY2xhaW1lZA== 89759 -w59lcmRlbQ== 89760 -X2xvc3Q= 89761 -IEFsYQ== 89762 -INC+0YjQuNCx 89763 -IEJhcnRo 89764 -Q29sb24= 89765 -b3Bvcg== 89766 -X3Bhc3N3ZA== 89767 -X2V4Y2x1ZGU= 89768 -QVBB 89769 -Zmxvd2Vycw== 89770 -IEVib29r 89771 -IFNUQQ== 89772 -VU5T 89773 -X0RJU1BBVENI 89774 -QUNJw5NO 89775 -dGVybWluYXRpb24= 89776 -IG5lc3RsZWQ= 89777 -YWRyYXRpYw== 89778 -Um93QW5pbWF0aW9u 89779 -X2tt 89780 -IHJvbmQ= 89781 -XV0+PC8= 89782 -5L2Z 89783 -IGNvc3BsYXk= 89784 -IG1pbGxlbm5pdW0= 89785 -X3NlcmlhbGl6ZQ== 89786 -IHZlcnNjaGllZGVuZW4= 89787 -YW50dA== 89788 -IEFtaWQ= 89789 -Y3JldGlvbg== 89790 -KT8k 89791 -IHRvd2luZw== 89792 -LmZpbA== 89793 -LkZpbGVXcml0ZXI= 89794 -IGFpcw== 89795 -IGVTcG9ydHM= 89796 -cHJ0 89797 -SVBB 89798 -LkZBTFNF 89799 -IHByaWNr 89800 -RW5kaW5n 89801 -IHByw6lzaWRlbnQ= 89802 -X2dseXBo 89803 -IHN1cHBsZW1lbnRlZA== 89804 -IGNvbnRhcg== 89805 -Ii4kXw== 89806 -IEJ1eWVycw== 89807 -dWph 89808 -IFRpbWVab25l 89809 -ZW5uZW50 89810 -SW5Qcm9ncmVzcw== 89811 -IFN1c3RhaW5hYmlsaXR5 89812 -IFByb3NwZXI= 89813 -Q29udG91cnM= 89814 -IHN0YXJ0bGVk 89815 -X2xlYXN0 89816 -IENvdmVudA== 89817 -Y2huaXR0 89818 -IE1pbGt5 89819 -ICItPg== 89820 -ZXRhaw== 89821 -IHR1c3Nlbg== 89822 -LXBheWluZw== 89823 -X2FjY2Vzc2libGU= 89824 -QmF0bWFu 89825 -KGl0cg== 89826 -SUFMSVpFRA== 89827 -IFRleHRBcmVh 89828 -YW5rZQ== 89829 -X0pVTVA= 89830 -IGJlaGF2ZWQ= 89831 -LG9wdGlvbnM= 89832 -eGl2 89833 -LlBMTA== 89834 -cXg= 89835 -Lm9uTmV4dA== 89836 -IHZlcmlmaWVy 89837 -IGR1xbw= 89838 -IEZ1a3VzaGltYQ== 89839 -IENPUlBPUkFUSU9O 89840 -X3RE 89841 -IE1lYWRvdw== 89842 -IHByb3llY3Rvcw== 89843 -ICgnXA== 89844 -IEJhcmNsYXlz 89845 -IGxlZ2FsaXR5 89846 -IGhhbWJ1cmdlcg== 89847 -IGVpbnM= 89848 -SW5kaWFuYQ== 89849 -IFRLZXk= 89850 -Y2xvYWs= 89851 -PGFsZ29yaXRobQ== 89852 -IHByZWFjaGVy 89853 -e2xuZw== 89854 -LmFydGljbGVz 89855 -c2V0SW1hZ2U= 89856 -UmVuYW1l 89857 -IGJsb3Nzb20= 89858 -IEJsb3Nz 89859 -IHV1cg== 89860 -IGRhZHM= 89861 -IFRpdGFuaWM= 89862 -ICAgICAgICANCg0K 89863 -IG9yZGluYW5jZXM= 89864 -IG3DpG5u 89865 -IGVyaw== 89866 -IGRpc3RpbGxlZA== 89867 -IMOkbA== 89868 -IHJ1cHR1cmU= 89869 -IENhbWVyYXM= 89870 -w7luZw== 89871 -IGhhaXJzdHlsZXM= 89872 -IGVtYnJ5b3M= 89873 -4oCdCg== 89874 -Lk5hdg== 89875 -IHN0cm0= 89876 -CXVzYWdl 89877 -LkFJ 89878 -IFRPVUNI 89879 -IElsbGVnYWxBY2Nlc3NFeGNlcHRpb24= 89880 -6rKw 89881 -a29uZWtzaQ== 89882 -ISIp 89883 -IGVzY2Fw 89884 -dWRpb3M= 89885 -c3RhcnR0aW1l 89886 -IG1laW5lbQ== 89887 -IFNwaXJhbA== 89888 -IEVyZWN0aWxl 89889 -aXZhbGVuY2U= 89890 -IGl0ZW1UeXBl 89891 -IGFiYWl4bw== 89892 -VmVydHM= 89893 -dGFraW5n 89894 -cHN0 89895 -IE9zY2Fycw== 89896 -IER4 89897 -ZXR0eQ== 89898 -TUFM 89899 -IE5lZWRsZQ== 89900 -IENPTVBVVEVS 89901 -5Lu75Yqh 89902 -IG5ld1g= 89903 -ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAK 89904 -cGxldmVs 89905 -QUNFTUVOVA== 89906 -IEpvaGFu 89907 -UG9pbnRG 89908 -IHJlc3Ryb29t 89909 -dmVybw== 89910 -IGVsxZE= 89911 -cHJvZHVr 89912 -IFlFQVJT 89913 -CWFjdHVhbA== 89914 -VVBMRQ== 89915 -Q29udmVydGlibGU= 89916 -IHBvcnJm 89917 -SW5qZWN0ZWQ= 89918 -X2JvdGg= 89919 -L0dhdGU= 89920 -Y2FsY3VsYXRvcg== 89921 -ZW1haWxlcg== 89922 -LlBvZA== 89923 -IFpvdA== 89924 -X3NtYXJ0 89925 -YmFzaXM= 89926 -PENvbG9y 89927 -IGNyYXZpbmdz 89928 -RHJpdmVycw== 89929 -KGNvcw== 89930 -ZGF0YWJsZQ== 89931 -LW1ldGFs 89932 -IFBj 89933 -LmNvcHlPZg== 89934 -IG9yaWVudGF0aW9ucw== 89935 -CWFzdA== 89936 -IFpvbWJpZXM= 89937 -IGJvbWJlZA== 89938 -SG9zdG5hbWU= 89939 -X3JhaXNlcw== 89940 -bWVuc2FnZW0= 89941 -IGNvcnRpc29s 89942 -IEZpb25h 89943 -bGljb3M= 89944 -aGVhdnk= 89945 -IOqwgOyguA== 89946 -b21lbmNs 89947 -IGN1bHR1cmVk 89948 -IGFydGlrZWw= 89949 -xaHDrQ== 89950 -amRr 89951 -IHZhbmRhbGlzbQ== 89952 -IH1dKTsK 89953 -U3RyYWlnaHQ= 89954 -IHJlaGVhcnNhbA== 89955 -RWRpdGlvbg== 89956 -IEluc3Bpcg== 89957 -CXdj 89958 -IGZvcm11bGF0ZQ== 89959 -YW56ZWlnZW4= 89960 -IHBhdGhvbG9naWNhbA== 89961 -IGtlbm5lbmxlcm5lbg== 89962 -Pnsi 89963 -IGRpY2Vk 89964 -IGJyYWNlbGV0cw== 89965 -CQkgICAgCg== 89966 -Kj4q 89967 -L3RhcmdldA== 89968 -LkFnZW50 89969 -Lm1hZ2lj 89970 -IGlkZW9sb2dpZXM= 89971 -VFJBQ0s= 89972 -X2luZGl2aWR1YWw= 89973 -PGRlY2x0eXBl 89974 -IFJFQ0VJVkU= 89975 -L2Jvb3Q= 89976 -OkB7 89977 -UU0= 89978 -IE1hbmRhbA== 89979 -TkFNRVNQQUNF 89980 -IHRlcmNlcg== 89981 -IFJlZ2dpZQ== 89982 -IE5pY2hvbHNvbg== 89983 -IEZ1bHRvbg== 89984 -c3Rha2luZw== 89985 -IHJlc29uYXRl 89986 -bHBhcnI= 89987 -IGNvbnZlcnRlcnM= 89988 -ICgiLw== 89989 -IE1hcmxpbnM= 89990 -SW5mb3JtZQ== 89991 -Jz0+Wyc= 89992 -IHJvYmVydA== 89993 -IEhJTQ== 89994 -d2Vicw== 89995 -LnRyYWlsaW5nQW5jaG9y 89996 -LmFzY2lp 89997 -IE1hc2M= 89998 -IHRlY2hubw== 89999 -ZXR4dA== 90000 -CSAgICAgICAgCg== 90001 -zrHOuQ== 90002 -KFNlcQ== 90003 -ID8+Ojwv 90004 -IFBlYg== 90005 -W3NlbGVjdGVk 90006 -SkVDVEVE 90007 -Q2FzdEV4Y2VwdGlvbg== 90008 -P2Y= 90009 -IGV5ZXdpdG5lc3M= 90010 -IG1lbm8= 90011 -IERhbWllbg== 90012 -X0lFbnVtZXJhdG9y 90013 -IC4uLi4uLi4uLi4uLi4uLi4= 90014 -LlNFTEVDVA== 90015 -IGNyYXk= 90016 -X3BhcGVy 90017 -LlJvbGxiYWNr 90018 -SURFT1M= 90019 -cnBhcnI= 90020 -aW5lYXI= 90021 -X1JlbA== 90022 -IFdpbGRl 90023 -IFdvbmRlcmxhbmQ= 90024 -IFNodWZmbGU= 90025 -IHN0cmlrZW91dHM= 90026 -c2lnbW9pZA== 90027 -ISgiew== 90028 -ZXBhbQ== 90029 -IHJpY2huZXNz 90030 -IGVuZGVhdm91cg== 90031 -bWVudUl0ZW0= 90032 -INCf0L7Qu9GD0Yc= 90033 -IGZydXN0cmF0aW9ucw== 90034 -X3N1YnNjcmliZQ== 90035 -IGJvb3pl 90036 -IExpY2h0 90037 -IHBlYXNhbnQ= 90038 -IHdlaWdodGluZw== 90039 -IOW/ 90040 -QWN0aW9uQ29kZQ== 90041 -LnRyYWNrcw== 90042 -IMOY 90043 -IG1pbGxpb25haXJl 90044 -KHVy 90045 -J10pCgoK 90046 -ICIuJF8= 90047 -X0VERUZBVUxU 90048 -IGN1cmxz 90049 -X0NvbUNhbGxhYmxlV3JhcHBlcg== 90050 -LnNldFZpZXdwb3J0 90051 -IGRlbmQ= 90052 -IGF1dG91cg== 90053 -IEZvdXJpZXI= 90054 -IGJvaWxz 90055 -IEpQRw== 90056 -IGRpZ3M= 90057 -IGNvbXBsYWlucw== 90058 -LWxpbmVk 90059 -IEJsYWRlcw== 90060 -X2RpY3Rz 90061 -IElwcw== 90062 -cmVmZXJlcg== 90063 -IGFueWhvdw== 90064 -YW50YXI= 90065 -LXNoZWV0 90066 -CXBsYXk= 90067 -aWVyY2U= 90068 -Lk1lc3NhZ2luZw== 90069 -6KeB 90070 -CXByb2dyZXNz 90071 -LkRhdGFWaXN1YWxpemF0aW9u 90072 -IFN0b3Bz 90073 -SW50ZXJ2YWxTaW5jZQ== 90074 -QGJyaWVm 90075 -LndpbmQ= 90076 -IGdldElucHV0 90077 -IEtB 90078 -IFJFU1BPTlM= 90079 -IHRhcmc= 90080 -dmlzdWFsaXphdGlvbg== 90081 -IEVzcGHDsQ== 90082 -bmllcg== 90083 -IERvdmU= 90084 -X2lzcg== 90085 -IEFQUExZ 90086 -YmVkbw== 90087 -W117Cg== 90088 -IGV2YWN1YXRl 90089 -IG1pY3Jvc2NvcGlj 90090 -5q2j56Gu 90091 -ZXJvdA== 90092 -LW9wZXJhdGl2ZQ== 90093 -aWt1dA== 90094 -IGRibA== 90095 -IGFqb3V0 90096 -Lml4 90097 -ICAgICAgICAKICAgIAo= 90098 -dGVzdGU= 90099 -bml2ZWw= 90100 -LnNuYXA= 90101 -dXR6dA== 90102 -LmlzQWRtaW4= 90103 -KElD 90104 -IG9iZW4= 90105 -IEVmZmljaWVudA== 90106 -RERldmljZQ== 90107 -IGluZGVtbg== 90108 -IGZyb3pl 90109 -LHJw 90110 -IGRlY2VtYmVy 90111 -57uZ 90112 -IG1lbG9kaWVz 90113 -IEVUQQ== 90114 -44GT44KT44Gr44Gh44Gv 90115 -IHF1YWxjaGU= 90116 -IHNldERlZmF1bHRDbG9zZU9wZXJhdGlvbg== 90117 -T1JJQQ== 90118 -IHphZw== 90119 -IGFsbG93YW5jZXM= 90120 -L3Bo 90121 -LVRva2Vu 90122 -IFBvdQ== 90123 -IG1pbmlzdHJpZXM= 90124 -LkxPR0lO 90125 -IHNlYXJjaFRlcm0= 90126 -IGh1cnJpY2FuZXM= 90127 -IEZsb3Vy 90128 -IFNVUw== 90129 -VGhlbWVz 90130 -cmVlY2U= 90131 -IGVudHJldg== 90132 -RFhWRUNUT1I= 90133 -IEJyZW5kYQ== 90134 -RXJyb3JNc2c= 90135 -OildOwo= 90136 -IGRvbWluYQ== 90137 -IEludmlzaWJsZQ== 90138 -PD4oIg== 90139 -cHV0Yw== 90140 -SEFWRQ== 90141 -RXZhbHVhdG9y 90142 -bWF0Y2hpbmc= 90143 -LW5hbWVz 90144 -IGxhaA== 90145 -X1lVVg== 90146 -5pyN5Yqh5Zmo 90147 -LldSSVRF 90148 -KTpc 90149 -LWRlZmluaXRpb24= 90150 -IGNoaW1uZXk= 90151 -LmNscw== 90152 -a25vd2xlZGdl 90153 -IEFsZXhhbmRyZQ== 90154 -IGNvbGVn 90155 -b8WbY2k= 90156 -LkNobw== 90157 -IHNvZnRlbmVk 90158 -IHJvdGF0ZXM= 90159 -LXN0YXRlcw== 90160 -6rc= 90161 -dmlvbGVudA== 90162 -IDopCg== 90163 -IGFjY2nDs24= 90164 -bmlrYQ== 90165 -IExhdHRlcg== 90166 -X0Zsb2F0 90167 -IGVncmVnaW91cw== 90168 -b2RpYWw= 90169 -U3lub3BzaXM= 90170 -KHhp 90171 -IH0sew== 90172 -Y3h4 90173 -RW1tYQ== 90174 -IENvbmN1cnJlbnRIYXNoTWFw 90175 -X0NhbWVyYQ== 90176 -IHBlYW51dHM= 90177 -44Kz44Oh44Oz44OI 90178 -X2JlZA== 90179 -IGVycm9yQ2FsbGJhY2s= 90180 -IFBhcHVh 90181 -LFRydWU= 90182 -tpo= 90183 -IHN0YWRpdW1z 90184 -IGtub2Jz 90185 -aWZpY2FjaW9uZXM= 90186 -IHB1cnBvc2VseQ== 90187 -IFB1cmVDb21wb25lbnQ= 90188 -INC60LvQuA== 90189 -LlRyYWNr 90190 -c3Nj 90191 -KEpvYg== 90192 -KEh0dHBDb250ZXh0 90193 -IGNob2lzaXI= 90194 -IOy7 90195 -IGF1c3A= 90196 -dXBwZW4= 90197 -QWR2ZW50dXJl 90198 -IEZMQUM= 90199 -IGFwcGVsbGFudA== 90200 -ICgoIg== 90201 -z4c= 90202 -IHRyaWY= 90203 -IGR1cmF0aW9ucw== 90204 -IE5HWA== 90205 -LmJw 90206 -YWN0aW9uRGF0ZQ== 90207 -Lmluc3RhbnQ= 90208 -LVJlcXVlc3RlZA== 90209 -JyYm 90210 -INGH0LXRgA== 90211 -PWJvb2w= 90212 -IGxvcmRz 90213 -bGljaW5n 90214 -IG1hcmlu 90215 -IGJsaW5kZWQ= 90216 -L2xheW91dHM= 90217 -ZmVpdG8= 90218 -aXp6bGluZw== 90219 -RXZ0 90220 -IGJ1bGxpc2g= 90221 -ZXhjbHVzaXZl 90222 -4oCZZXM= 90223 -LmdldE93blByb3BlcnR5RGVzY3JpcHRvcg== 90224 -IGJhcHRpemVk 90225 -INGB0LvRg9GH 90226 -IENlY2ls 90227 -LmVmZmVjdHM= 90228 -IGNyeXB0b2dyYXBoaWM= 90229 -IFZpbGxl 90230 -dWZ0 90231 -IEFudGhlbQ== 90232 -IHNlZWtlcg== 90233 -IG5pY2tuYW1lZA== 90234 -IGNhbXBncm91bmQ= 90235 -IGFjdGlvbkJhcg== 90236 -IEVwaXNvZGVz 90237 -IC0tLS0tLS0tCg== 90238 -QnVpbGRlckZhY3Rvcnk= 90239 -X1VOU1VQUE9SVEVE 90240 -VklMTEU= 90241 -LlJlZ2lzdHJ5 90242 -VG9uaWdodA== 90243 -IG1ha3M= 90244 -IGFkZG9ucw== 90245 -IERlY3J5cHQ= 90246 -LnNraWxscw== 90247 -KGZo 90248 -IGp1Z2c= 90249 -IENvdXBsZXM= 90250 -IEFtaXI= 90251 -ID09PT09PT09PT0= 90252 -IGVuZGVyZWNv 90253 -LlN0cmluZ3M= 90254 -IGhhcm1pbmc= 90255 -IGJ1c3RsaW5n 90256 -KGZpcnN0TmFtZQ== 90257 -LnNwYXJzZQ== 90258 -SVRP 90259 -ICAgICAgICAgICAgICANCg== 90260 -5p2l5rqQ 90261 -b2RlZ2E= 90262 -YW5hZ2Fu 90263 -LkhhbmRsZXJGdW5j 90264 -IHRpbmRlcg== 90265 -ICMo 90266 -IGltYWdpbmFibGU= 90267 -IGF1bg== 90268 -UHJlc2VuY2U= 90269 -UGFja2FnZU1hbmFnZXI= 90270 -IGx1ZGljcm91cw== 90271 -acOobWU= 90272 -IGdldE9iamVjdA== 90273 -Ym94aW5n 90274 -IHNxdWlk 90275 -w6p0ZXM= 90276 -RGFlbW9u 90277 -X2xpa2Vz 90278 -hrU= 90279 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 90280 -Lnd3dw== 90281 -c3NlbA== 90282 -ZXRlY3Rpb25z 90283 -ZGFl 90284 -L2Rvd25sb2Fkcw== 90285 -IENsYXNzaWZpZXI= 90286 -X1NVQkpFQ1Q= 90287 -emVnbw== 90288 -X0dST1VQUw== 90289 -YWN0aWNlcw== 90290 -X2xpdGU= 90291 -IGRhbm1hcms= 90292 -L2Js 90293 -YXB5cnVz 90294 -VElNRVI= 90295 -IFNjcmlwdHVyZXM= 90296 -0Y/Rgg== 90297 -c3Bh 90298 -Ikc= 90299 -IHBlbmV0cmF0aW5n 90300 -IGNvbmZvcm1pdHk= 90301 -bmV3bGluZQ== 90302 -IGx5bg== 90303 -IE1NUA== 90304 -IElOVEVSRkFDRQ== 90305 -IEFjdGlvblR5cGVz 90306 -LmNyaXRlcmlh 90307 -4buRbmc= 90308 -IHJlc3RpdHV0aW9u 90309 -CUZPUg== 90310 -PHBhdGg= 90311 -PT8iOwo= 90312 -KHBlcmNlbnQ= 90313 -bmRv 90314 -IEFDTQ== 90315 -CWN0 90316 -QGE= 90317 -IHTDug== 90318 -IHNwb3R0aW5n 90319 -w7xybg== 90320 -IEdFUg== 90321 -LndyaXRlVmFsdWU= 90322 -X2Jsb2NrZWQ= 90323 -WW1k 90324 -IGluZWZm 90325 -IFJhZGlhdGlvbg== 90326 -IE9pbGVycw== 90327 -QmVlcg== 90328 -cm90cw== 90329 -IFRyb3Q= 90330 -cm5h 90331 -cG9ydGVy 90332 -ZW5lcnk= 90333 -IHBvcm5vZmlsbQ== 90334 -65SU 90335 -X2Nr 90336 -LkNvbXB1dGU= 90337 -IFtdCgoK 90338 -Z2l1bQ== 90339 -IFRFTEU= 90340 -IEluc3RhbmNlcw== 90341 -Kkk= 90342 -IHdpcmVUeXBl 90343 -b25pdW0= 90344 -ZXNoaXJl 90345 -IHB1dGNoYXI= 90346 -IGF3YWtlbmVk 90347 -LmRlZ3JlZQ== 90348 -aGVpdGVu 90349 -LWF3YWl0ZWQ= 90350 -IG5ldXJvdHJhbnM= 90351 -LXRlc3RpZA== 90352 -CgogICAgCg== 90353 -IOe7kw== 90354 -IGtpbm8= 90355 -X0RBWVM= 90356 -IFZhbGVyaWU= 90357 -bnRpdHk= 90358 -QEJlYW4= 90359 -ZXRDb2Rl 90360 -PFJlbmRlcmVy 90361 -IiIK 90362 -IGJlcm4= 90363 -IHRvdGFsaXRhcmlhbg== 90364 -Y2xpbmlj 90365 -IE3DvG5jaGVu 90366 -bm9pbnNwZWN0aW9u 90367 -aXNjZQ== 90368 -X3R1cGxlcw== 90369 -LlBvaW50cw== 90370 -IHBhc3RvcmFs 90371 -SmFr 90372 -a2VuaW5n 90373 -L2NvbHVtbg== 90374 -LXByb2R1Y2luZw== 90375 -IGFib2xpc2g= 90376 -ZmVhcw== 90377 -cmVzcG9uc2VEYXRh 90378 -cmVkaXJlY3RUb1JvdXRl 90379 -IG9ic2VydmF0aW9uYWw= 90380 -cE5leHQ= 90381 -enRl 90382 -Q2hvaWNlcw== 90383 -CUxDRA== 90384 -JlM= 90385 -IGJpbGxpb25haXJlcw== 90386 -X0VPRg== 90387 -IGNvaG9ydHM= 90388 -YW5rZW4= 90389 -LmNvbWJpbmU= 90390 -KE9wdGlvbmFs 90391 -X0NPTlNPTEU= 90392 -QWN0aXZpdHlJbmRpY2F0b3JWaWV3 90393 -IHBoYXJtYWNpc3Q= 90394 -IERvdWdo 90395 -IE9wZXJhdGlvbmFs 90396 -57I= 90397 -IGphbXM= 90398 -U29sbw== 90399 -CWR1cmF0aW9u 90400 -LnJt 90401 -IFRvbmk= 90402 -LmxlYXZl 90403 -IHB1ZWRh 90404 -IEZheQ== 90405 -RGV0YWNo 90406 -Lk1heGltaXplQm94 90407 -IG1hcnR5cg== 90408 -IGhhemU= 90409 -L25l 90410 -IG1hbW1h 90411 -c2VsZWN0b3JNZXRob2Q= 90412 -IHBpbGdyaW1hZ2U= 90413 -IEFzcGhhbHQ= 90414 -IHZhbGlkbw== 90415 -RW5kRWxlbWVudA== 90416 -IGxhcHNl 90417 -ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K 90418 -aWxvcw== 90419 -ZXJuYWxz 90420 -Q29ubmVjdGlvbkZhY3Rvcnk= 90421 -IExvdmluZw== 90422 -LkNvbXBpbGU= 90423 -IGNvcms= 90424 -IEJ5ZQ== 90425 -aWJOYW1lT3JOaWw= 90426 -ZXN0YXI= 90427 -XEdlbmVyYXRlZFZhbHVl 90428 -KExM 90429 -IFJhaXNlUHJvcGVydHlDaGFuZ2Vk 90430 -IElyYW5pYW5z 90431 -IGdldFByaWNl 90432 -bWFyaWVz 90433 -anVtYm90cm9u 90434 -IFJlYmVscw== 90435 -RElGRg== 90436 -IE1vag== 90437 -b3J0aWM= 90438 -CWNvbnN0ZXhwcg== 90439 -bnRw 90440 -IG1hZ2ljaWFu 90441 -IHBhdHJpb3Rpc20= 90442 -LmNl 90443 -LlNpbXBsZUJ1dHRvbg== 90444 -IFBSSVY= 90445 -aGlzdG9pcmU= 90446 -aGlnaGVy 90447 -cmVmaXhlcg== 90448 -Q0pL 90449 -IE9zd2FsZA== 90450 -LnNwcml0ZXM= 90451 -Lkls 90452 -IGFyY2FuZQ== 90453 -IENodW4= 90454 -X09m 90455 -IGV2ZXJ5dGltZQ== 90456 -0Y7RiQ== 90457 -IGxldHJhcw== 90458 -aWxhbg== 90459 -YmFydQ== 90460 -LWJvdA== 90461 -IFNpZ25pZmljYW50 90462 -iOyKteuLiOuLpA== 90463 -4oCM 90464 -LWlzc3Vl 90465 -IGluc2FuZWx5 90466 -YXRlZ2lj 90467 -X1ZF 90468 -OkNHUG9pbnQ= 90469 -TWFya3M= 90470 -LnByb2JsZW0= 90471 -J10uJy8= 90472 -IHJlZHVuZGFuY3k= 90473 -IGRlY3J5cHRpb24= 90474 -SHVuZw== 90475 -LXZhbGlkYXRl 90476 -IEFuZ2Vsbw== 90477 -Sk0= 90478 -IHBvcG92ZXI= 90479 -ZGViaXQ= 90480 -Q29tcHV0ZWRTdHlsZQ== 90481 -KV9f 90482 -KHNpbg== 90483 -ICcpLA== 90484 -KGRlZnZhcg== 90485 -w7R0ZQ== 90486 -VGhhbk9yRXF1YWxUbw== 90487 -Lnpo 90488 -KE5vdGU= 90489 -aWJCdW5kbGVPck5pbA== 90490 -IFNvbmlh 90491 -eW1vdXM= 90492 -44CCPA== 90493 -IGZpbG15 90494 -IGVhcnRobHk= 90495 -IExlYXJuZWQ= 90496 -W3NlY3Rpb24= 90497 -Lmpzb3Vw 90498 -c3RydXA= 90499 -IFBhdHJvbg== 90500 -ICkq 90501 -c2V0Rm9udA== 90502 -IGhlZw== 90503 -IGRlbHRhWQ== 90504 -X1NDUg== 90505 -LmN1dA== 90506 -IHZiQ3JMZg== 90507 -Lk9iamVjdE1hcHBlcg== 90508 -IHLDqXBvbnNl 90509 -WXU= 90510 -KCl7fQoK 90511 -LXBhcmFtZXRlcg== 90512 -xLFzxLE= 90513 -aWF6emE= 90514 -SVpFUw== 90515 -X1NVUFBMWQ== 90516 -a2l0cw== 90517 -IHJlaW5z 90518 -KGRvY3M= 90519 -JSE= 90520 -IHN5c3RlbWN0bA== 90521 -IFBzcg== 90522 -IFdlcms= 90523 -UGhpbGFkZWxwaGlh 90524 -QlJFQUs= 90525 -LmFwcGVuZFRv 90526 -KGxvbg== 90527 -QWJy 90528 -L3JlbmRlcmVy 90529 -IEVsZWFub3I= 90530 -Q0VSVA== 90531 -UGFyYW1ldGVyVmFsdWU= 90532 -JGdldA== 90533 -IOCy 90534 -IEpM 90535 -IGlnbml0ZQ== 90536 -IGLhuqFu 90537 -IENhdWw= 90538 -IGhhc3Rl 90539 -IGRvbWluZ28= 90540 -VGVzbGE= 90541 -L2NvbmZpZ3VyYXRpb24= 90542 -KGV4cGVjdA== 90543 -dXNyYQ== 90544 -IHByZWZlY3Q= 90545 -IGZyb2dz 90546 -IGFzc2lnbmFibGU= 90547 -IGludGVydmVuZWQ= 90548 -LmNob2ljZXM= 90549 -VUlTdG9yeWJvYXJkU2VndWU= 90550 -IGLDqQ== 90551 -IEzDtnM= 90552 -YWxwaGFiZXQ= 90553 -IHByZWFtYmxl 90554 -ZGJh 90555 -IGVtaXR0aW5n 90556 -Lm1vcmU= 90557 -IEJhc2Vs 90558 -KGRhdGVUaW1l 90559 -KCl9KTsK 90560 -IG5vZGVMaXN0 90561 -IEZQR0E= 90562 -d2Vs 90563 -IGxvZGFzaA== 90564 -X2F1dGhlbnRpY2F0aW9u 90565 -w7NyaW8= 90566 -KHJ1bnRpbWU= 90567 -X1NDRU5F 90568 -IGN1ZmZz 90569 -IEFkcmVzc2U= 90570 -Ojw/ 90571 -X2NtZHM= 90572 -VMOqbg== 90573 -IGVqZWN0 90574 -CUVSUg== 90575 -PE8= 90576 -IEtyYW1lcg== 90577 -4oCmCg== 90578 -c29tZW9uZQ== 90579 -IENQTA== 90580 -77yN 90581 -bG9ja2luZw== 90582 -LkZvb3Rlcg== 90583 -IGFsbQ== 90584 -IEFkb2xm 90585 -KS4v 90586 -IE1hdHRoaWFz 90587 -ICIsIgo= 90588 -ZW51aXR5 90589 -IExvdmVy 90590 -IGFsaW1lbnRvcw== 90591 -cGxldHM= 90592 -w6R0emU= 90593 -KHJlY3Y= 90594 -dXJhYQ== 90595 -U1RET1VU 90596 -YW50eg== 90597 -LkZsb2F0VGVuc29y 90598 -IFJhZQ== 90599 -cGln 90600 -IHRlcnVn 90601 -IHRoZW9sb2c= 90602 -IHRheGlz 90603 -Y29tcG9zaXRl 90604 -c2hlcg== 90605 -bGVEYg== 90606 -IFJhaG1lbg== 90607 -IDst 90608 -SW5kZW50ZWQ= 90609 -IHRyb2xsaW5n 90610 -RVJJQ0FO 90611 -Z2V0RW1haWw= 90612 -X0VOQ09ERQ== 90613 -Z2V0Q2VsbA== 90614 -IFdyYXRo 90615 -KHN1aXRl 90616 -bm90RW1wdHk= 90617 -LmdldFJpZ2h0 90618 -IGJyZWF0aGFibGU= 90619 -44Gf44Gg 90620 -IHNldFRpbWU= 90621 -J29wdGlvbnM= 90622 -IHBheWxvYWRz 90623 -YXVnYQ== 90624 -ZWRt 90625 -KHdlYXRoZXI= 90626 -CXNlbQ== 90627 -KGZyb250 90628 -IHBheW91dHM= 90629 -LnNldFRleHR1cmU= 90630 -LFtdLA== 90631 -IFBhY2tz 90632 -IGNhenpv 90633 -V2l0aFBhdGg= 90634 -UHJvZw== 90635 -bW1hcw== 90636 -IGtvaw== 90637 -LkNzcw== 90638 -IGRlbGE= 90639 -QXdhcmQ= 90640 -w7xsdA== 90641 -c291cA== 90642 -KFsoJw== 90643 -b2xsaXBvcA== 90644 -LFNMT1Q= 90645 -Y2hpYQ== 90646 -IGJsYW5jbw== 90647 -T0xVVEU= 90648 -LXBsYW5l 90649 -LExpc3Q= 90650 -eGluZw== 90651 -SU1BVEU= 90652 -LW1vcnQ= 90653 -IGdyYXZpZA== 90654 -IEhhbmdpbmc= 90655 -IHNjb2Zm 90656 -Lml0ZW1JZA== 90657 -VEhFTg== 90658 -aW5mZXI= 90659 -IG1pc3BsYWNlZA== 90660 -CU1vbm8= 90661 -d2F5bmU= 90662 -IGVkZ2Vk 90663 -X25pY2s= 90664 -IE1BUlQ= 90665 -CXN0YXRlbWVudA== 90666 -IEV2ZW50QnVz 90667 -PkFib3V0 90668 -IGJ1cmdlb25pbmc= 90669 -IGNpY2xv 90670 -TE9PUA== 90671 -IGRlZnk= 90672 -IGVsZW1lbnRUeXBl 90673 -IGNvbnNlcnZhdGlzbQ== 90674 -V2ViSG9zdA== 90675 -LkRpc2FibGVk 90676 -IGNsYXA= 90677 -IEFsZWtz 90678 -cm9yaW5n 90679 -aXNzaW9uYWw= 90680 -LUJvbGQ= 90681 -SVJUSA== 90682 -Lml0ZW1WaWV3 90683 -cWluZw== 90684 -P2tleQ== 90685 -IFZlbm9t 90686 -IGFudGlk 90687 -IEZvcm1hdHRpbmc= 90688 -UVB1c2hCdXR0b24= 90689 -IEFzc2VtYmx5VGl0bGU= 90690 -X3Jlc2VydmU= 90691 -LkRpcmVjdA== 90692 -QW5pbWU= 90693 -IG1hdGVyaWFsbHk= 90694 -IGFkanVuY3Q= 90695 -LnNldFRvb2xUaXBUZXh0 90696 -bGFzc2lhbg== 90697 -KG5y 90698 -IG5pbmfDum4= 90699 -IG1pc3VuZGVyc3RhbmQ= 90700 -IEFwcGx5aW5n 90701 -X2NvbXBhdA== 90702 -IG1peGlu 90703 -IGplb3BhcmR5 90704 -0YvQstCw0LXQvA== 90705 -IGNvY2luYQ== 90706 -X1dST05H 90707 -QVRBUg== 90708 -S0Q= 90709 -IGNhdGVnb3J5TmFtZQ== 90710 -SHR0cENvbnRleHQ= 90711 -IGJ1YmI= 90712 -IGFua2xlcw== 90713 -b3dlcmluZw== 90714 -RnJhbWV3b3Jrcw== 90715 -IHNlZ3VuZG9z 90716 -LkFzc2VtYmx5 90717 -X0VudGl0eQ== 90718 -SFE= 90719 -IGZvdXJz 90720 -IGZvcmZlaXR1cmU= 90721 -dmxhbg== 90722 -LWRvbWluYXRlZA== 90723 -LWF3YXk= 90724 -SUNJRU5U 90725 -LlJlYWRCeXRl 90726 -YW1heA== 90727 -Lj0iPA== 90728 -X3Nwcml0ZXM= 90729 -IFJlbWFpbmluZw== 90730 -TE9PRA== 90731 -X3JlcXVpcmVtZW50cw== 90732 -J2FydGljbGU= 90733 -IFBvbXBlbw== 90734 -IHTDqXI= 90735 -IERyb3Bz 90736 -SG9tZUFz 90737 -SG9tZUFzVXA= 90738 -w7ph 90739 -Lm5hc2E= 90740 -X2Jpbw== 90741 -IFlvc2hp 90742 -RWxlY3Ryb25pYw== 90743 -IGpvc2U= 90744 -IGludGVsaWc= 90745 -ID8+Pjw/ 90746 -PnshIQ== 90747 -X3Byb3Y= 90748 -PURC 90749 -PCEtLQo= 90750 -LWZsb2F0aW5n 90751 -eXVt 90752 -LkpNZW51SXRlbQ== 90753 -IE5hdGlvbndpZGU= 90754 -SW1wb3NzaWJsZQ== 90755 -6K+m5oOF 90756 -SmVycnk= 90757 -IGRlc2Nhcmdhcg== 90758 -7JW8 90759 -RGVjcnlwdA== 90760 -IHRlbXBlcmVk 90761 -IGVrcw== 90762 -w61jaWE= 90763 -Lmxhcmdl 90764 -IHVuZm9sZHM= 90765 -IGh2ZXI= 90766 -IEFWTA== 90767 -LnR0 90768 -4oKA 90769 -PSUu 90770 -IHRvcHBpbmdz 90771 -IHN0b3V0 90772 -IHNlbWluYWw= 90773 -eGVz 90774 -IE9VVEVS 90775 -YWRybw== 90776 -IHlvaw== 90777 -IERlcmU= 90778 -CWZyZW9wZW4= 90779 -X2xuZw== 90780 -Q2h1bmtz 90781 -LmdldE9yRWxzZQ== 90782 -KGVsbQ== 90783 -ICgpKTsKCg== 90784 -Q2VsZWJy 90785 -X2NhcGFiaWxpdHk= 90786 -IHNvY2llZGFk 90787 -IGludGltaWRhdGU= 90788 -IEJsYXplcnM= 90789 -aWd0aA== 90790 -ZW5kY29kZQ== 90791 -VUlMREVS 90792 -IEhhbm5pdHk= 90793 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K 90794 -INC40YHQv9C+0LvRjNC3 90795 -IFRvb2s= 90796 -IE1vdmVk 90797 -IHByb250bw== 90798 -IE1hcnRpbnM= 90799 -RGF0YUV4Y2hhbmdl 90800 -LlBvb2w= 90801 -ZXVz 90802 -IGpvYklk 90803 -IEF4ZXM= 90804 -IGhhbXN0cmluZw== 90805 -LnJtaQ== 90806 -RGF0YVRhc2s= 90807 -IE1hZ2ljTW9jaw== 90808 -IEdBUw== 90809 -IE5hdw== 90810 -IHNuZWw= 90811 -X3NjZW5hcmlv 90812 -IGVtYWlsQWRkcmVzcw== 90813 -IE11c3M= 90814 -IHBob2VuaXg= 90815 -IGRlbnNpdGllcw== 90816 -IE1hY09T 90817 -cmVtYQ== 90818 -IHRlc3RlcnM= 90819 -KT87Cgo= 90820 -IHB1cHM= 90821 -bGFwcw== 90822 -ZGRi 90823 -L1BlYWs= 90824 -IGJhY2tzdGFnZQ== 90825 -IGJhY2tCdXR0b24= 90826 -KG5hdg== 90827 -eEFF 90828 -c3RyY3B5 90829 -aWNodGV0 90830 -IFJpZg== 90831 -4LiB4Lij 90832 -IGhvbm91cmVk 90833 -IGdyYXBwbGluZw== 90834 -VmVydGV4QnVmZmVy 90835 -LmdldEFjY291bnQ= 90836 -LU5ldw== 90837 -IG9wcHJlc3M= 90838 -IHV0dGVyZWQ= 90839 -IFVTQUdF 90840 -X0xFQVZF 90841 -X2NvbGxlY3Rpb25z 90842 -X1V0aWw= 90843 -KCIiKSk7Cg== 90844 -IHF1aWV0ZXI= 90845 -YCksCg== 90846 -IHR5cGVJZA== 90847 -IHNlcmlm 90848 -c3RhbGs= 90849 -IHByaW1hcnlTdGFnZQ== 90850 -eEVB 90851 -Ok5TTGF5b3V0 90852 -X1JC 90853 -X0FQUFM= 90854 -U0tV 90855 -KnNjYWxl 90856 -IENvdWdhcg== 90857 -CVJFVFVSTg== 90858 -aWZpw6k= 90859 -dGltaW5n 90860 -IGlkb2xz 90861 -656Y7Iqk 90862 -4oCUaWY= 90863 -KGZvcm1hdHRlcg== 90864 -IGFtYWxn 90865 -c2V0V2lkdGg= 90866 -LG1pZA== 90867 -b3JlYWw= 90868 -LlJvbGVz 90869 -IGRldmVs 90870 -IGdldEluZGV4 90871 -IHN0b29scw== 90872 -IHNub3d5 90873 -IGdyYW5kaQ== 90874 -0Y/QtdC8 90875 -aWd1aWVudGU= 90876 -0LrQvtCy 90877 -IEN1dHRlcg== 90878 -cm9zY29wZQ== 90879 -YWlyYQ== 90880 -0YPRgNGB 90881 -IHRhYmVs 90882 -IGRlZmlhbmNl 90883 -LlRvQm9vbGVhbg== 90884 -IHBlcmc= 90885 -LWNvbW11bml0eQ== 90886 -IHB1cnN1aXRz 90887 -KG1ldHJpY3M= 90888 -TXVzbGlt 90889 -IFJpeWFkaA== 90890 -IOKCuQ== 90891 -LldlYkVsZW1lbnQ= 90892 -IEhhcmRlbg== 90893 -IENvcnJ1cHRpb24= 90894 -IEFl 90895 -IFRhbm5lcg== 90896 -IGluZGVi 90897 -IENoYXJnaW5n 90898 -X1BST0Q= 90899 -IOKTmA== 90900 -IGNlbnRlclg= 90901 -dHlwaW5n 90902 -IHV4 90903 -IFRvZQ== 90904 -CWxvb3A= 90905 -Zmxv 90906 -UmVnaW9uYWw= 90907 -X2Fh 90908 -IHZpZXdwb2ludHM= 90909 -PnRoaXM= 90910 -LXJlc291cmNlcw== 90911 -IEltYW0= 90912 -IFNoaXY= 90913 -IGFuZHJh 90914 -UkVRVUlSRUQ= 90915 -IHNlZWRlZA== 90916 -dW1vbnQ= 90917 -IHRvYXN0ZXI= 90918 -IGhvbWVzY2hvb2w= 90919 -24zYsQ== 90920 -X2V4dHJhY3Rvcg== 90921 -bW9kZXM= 90922 -IE11bmRv 90923 -X2ZpcmVzdG9yZQ== 90924 -IHB1bmlzaG1lbnRz 90925 -IGJvcmVkb20= 90926 -anVyaWVz 90927 -LlNhZmU= 90928 -YW1iaXF1ZQ== 90929 -IGFkdmVyc2l0eQ== 90930 -VUxFUg== 90931 -IGFuYWxzZXg= 90932 -bW9ycGg= 90933 -IE9tbg== 90934 -KCkiPgo= 90935 -IEdJVkVO 90936 -U3o= 90937 -IG5vdW5z 90938 -IHF1YW0= 90939 -IFdpa2ltZWRpYQ== 90940 -IGR6aWV3Y3o= 90941 -LmNvbW11bmlj 90942 -Q291cmllcg== 90943 -Qm9uZA== 90944 -LmNvbW11bmljYXRpb24= 90945 -LlByZWZlcmVuY2U= 90946 -c2xpZGVEb3du 90947 -L2djYw== 90948 -IHZpYmVz 90949 -QVBJVmlldw== 90950 -IE92ZXJzaWdodA== 90951 -X3Zr 90952 -IGVtcHJlcw== 90953 -IGFyaXNlbg== 90954 -ICovKQ== 90955 -KCcoJw== 90956 -IGJ0dw== 90957 -IGNvbmV4acOzbg== 90958 -IFV6YmVr 90959 -IOyEnA== 90960 -IGltYWdlVVJM 90961 -44Kq 90962 -c3RvcHBlZA== 90963 -IFdvdWxkbg== 90964 -IENoZXc= 90965 -Z3LDqQ== 90966 -IHRydXRoZnVs 90967 -IFRyYW5zcGFyZW50 90968 -KHNlcnY= 90969 -IE1jS2F5 90970 -PXJlYWQ= 90971 -IFNhbw== 90972 -CUdyaWQ= 90973 -IGluZHVjZXM= 90974 -Lmxpc3RGaWxlcw== 90975 -IGNhcnJlcmE= 90976 -IGljb25OYW1l 90977 -IENhcmx0b24= 90978 -LkV2ZW50VHlwZQ== 90979 -IGRyYXBlZA== 90980 -X1NBTVBMRVM= 90981 -KGVzdA== 90982 -IFJ1aXo= 90983 -IGNhcHRhaW5z 90984 -IG1hZmlh 90985 -IFJhcGhhZWw= 90986 -IEdBUA== 90987 -aW1wYW4= 90988 -Y29taWM= 90989 -IG1hbnRlbg== 90990 -JEw= 90991 -IGFmdGVybWFya2V0 90992 -15c= 90993 -IENm 90994 -CXRpbGU= 90995 -QXBwU3RhdGU= 90996 -IHdob2xlc2FsZXJz 90997 -bG93ZXN0 90998 -RGVtb2NyYXRpYw== 90999 -IHBvd2VyaW5n 91000 -YXBvdA== 91001 -IENvcnRleA== 91002 -KHNpbmdsZQ== 91003 -b3BoeXNpY2Fs 91004 -LnV0Zg== 91005 -77yf44CN 91006 -IHRhcmVh 91007 -RXF1aXA= 91008 -IGtsaWs= 91009 -IHJ1YQ== 91010 -IGFWYWx1ZQ== 91011 -IE1pbmVy 91012 -IFZlZw== 91013 -YW55bA== 91014 -Q293 91015 -QGM= 91016 -X0xPQURFRA== 91017 -IEFITA== 91018 -d2FrZQ== 91019 -LkxvZ0luZm9ybWF0aW9u 91020 -KGNhdGVnb3JpZXM= 91021 -IFFVRVNUSU9O 91022 -LnVtbA== 91023 -IENyZWF0ZU1hcA== 91024 -bWVlcg== 91025 -IHJlbmNvbnRyZXI= 91026 -X3N1 91027 -IGF0bGVhc3Q= 91028 -KFByb3BlcnR5TmFtZQ== 91029 -IFlhbw== 91030 -IEhhdXB0 91031 -QmxvY2tTaXpl 91032 -IFNBQw== 91033 -IExlZ3M= 91034 -Yml0ZQ== 91035 -IGxvZ2FyaXRo 91036 -IElNZXNzYWdl 91037 -QmFja2Ryb3A= 91038 -IGdkaw== 91039 -7Jy866m0 91040 -LmV4Y2x1ZGU= 91041 -QURPUw== 91042 -LXNoaWZ0 91043 -YXRobGV0ZQ== 91044 -X2NvbWJpbmVk 91045 -IHJlYmF0ZQ== 91046 -IHBhcmQ= 91047 -IGltcGVkYW5jZQ== 91048 -cmVhdQ== 91049 -Xw0KDQo= 91050 -IGRhZ2Vu 91051 -a2VsYXM= 91052 -IGluZ3Jlc2Fy 91053 -IEJSQU5E 91054 -Lm1rZGlycw== 91055 -IHJlaWduaW5n 91056 -VGFsa2luZw== 91057 -LyoqCgo= 91058 -X1JFU09VUkNFUw== 91059 -IFBST0dNRU0= 91060 -IGRhdGFTaXpl 91061 -44Og 91062 -ZGVueQ== 91063 -SVJT 91064 -IHRlbGV2aXM= 91065 -PV8oJw== 91066 -ZWdpcw== 91067 -PD8s 91068 -IHVwc2V0dGluZw== 91069 -IHNhdWNlcw== 91070 -IHB1ZXJ0bw== 91071 -IFZvZ3Vl 91072 -aWRpbmU= 91073 -IEdyZWVud29vZA== 91074 -emlvbg== 91075 -L3F0 91076 -5bGA 91077 -Lmxhbmd1YWdlcw== 91078 -IFBsYXlib3k= 91079 -b25uZW1lbnQ= 91080 -IFBvc2l0aW9uZWQ= 91081 -IOS4uw== 91082 -IEZyaXR6 91083 -SW5pdGlhbGx5 91084 -bm9kZVZhbHVl 91085 -X1RSSUFOR0xFUw== 91086 -LWJhY2tlbmQ= 91087 -dG9JU09TdHJpbmc= 91088 -IEdvdmVybm9ycw== 91089 -WUxPTg== 91090 -Lk9SREVS 91091 -RE9J 91092 -IENoZXZyb24= 91093 -IGRlY2tpbmc= 91094 -IFNoYXJpYQ== 91095 -b3RoZXJtYWw= 91096 -RW1wdHlFbnRyaWVz 91097 -KEluaXRpYWxpemVk 91098 -ZG9yZg== 91099 -Lmx1 91100 -KFJvb20= 91101 -LlllbGxvdw== 91102 -IEFicmFt 91103 -X2xt 91104 -INC90LDQvw== 91105 -IFRIQU4= 91106 -fi1+LX4tfi0= 91107 -Lk92ZXJyaWRl 91108 -IFNWTQ== 91109 -IFN1c3BlbnNpb24= 91110 -IGFic29yYnM= 91111 -X3RyYWZmaWM= 91112 -ICI+Ig== 91113 -LmZpdHM= 91114 -IHJlaW5mb3JjaW5n 91115 -IG1veWVu 91116 -ZXJlcg== 91117 -IFJvc2Vuc3RlaW4= 91118 -IFdlc3Rvbg== 91119 -IGNvbmZpbmVz 91120 -T0xB 91121 -b3JyYWluZQ== 91122 -X0dSUA== 91123 -IHN0cmFwcGVk 91124 -IG1pbmdsZQ== 91125 -CVZr 91126 -IG5vc3RyYQ== 91127 -IGFjdHJlc3Nlcw== 91128 -IFNhbW15 91129 -bGlnbmU= 91130 -SUdITElHSFQ= 91131 -IHN0dXA= 91132 -aWN0b3J5 91133 -IGNvbnZpY3Q= 91134 -IHN1cHA= 91135 -cGVvbg== 91136 -dnJpZXI= 91137 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM= 91138 -IHRyb3R6 91139 -IG1lbHRkb3du 91140 -YXJrZXJz 91141 -LlNlbGVjdENvbW1hbmQ= 91142 -IExpYWJpbGl0eQ== 91143 -IEJlY2FtZQ== 91144 -IGx1Y2tpbHk= 91145 -INC/0L7RgA== 91146 -IHJlYXNzdXJl 91147 -IENvbnRyYXN0 91148 -IEF1ZHJleQ== 91149 -IENvbnN1bHRhbnRz 91150 -IFF1ZW50aW4= 91151 -LU93bmVk 91152 -b2NyaW4= 91153 -X1NUUklQ 91154 -IHJldGFsaQ== 91155 -IHJhbGx5aW5n 91156 -IFJlcXVlc3RDb250ZXh0 91157 -IG1hc3NhYw== 91158 -CWdy 91159 -TEVF 91160 -IGNhxYI= 91161 -IEpvYW5uYQ== 91162 -4butYQ== 91163 -aGho 91164 -IHNxbFNlc3Npb24= 91165 -xLFrbA== 91166 -Q29tcG9zZXI= 91167 -IGN1cnJlbnRQbGF5ZXI= 91168 -YWdpbmk= 91169 -IEJhcmJhcg== 91170 -IEhlbGxvV29ybGQ= 91171 -bG9vbWJlcmc= 91172 -LkhlcmU= 91173 -IGRpc2d1c3RlZA== 91174 -CQkJCQkJICAgIA== 91175 -b2t1cw== 91176 -VmV0ZXI= 91177 -IGNob3Bz 91178 -IEZPUldBUkQ= 91179 -IEVpZw== 91180 -IFBhcnRpYWxWaWV3 91181 -IGltcG9zcw== 91182 -IGNvbnNlcXVlbnRpYWw= 91183 -IFsnIw== 91184 -CWxvZ2dpbmc= 91185 -IEVsaXM= 91186 -cHJvY3M= 91187 -LDwv 91188 -X3BpbnM= 91189 -XERvY3RyaW5l 91190 -VXZz 91191 -IEdJVA== 91192 -IHRhaA== 91193 -KHJ1bGVz 91194 -Y3JlYXRlRnJvbQ== 91195 -ICctJykK 91196 -aGFuZGxpbmc= 91197 -ZXh0ZXJuYWxBY3Rpb25Db2Rl 91198 -Uk9EVUNUSU9O 91199 -Rm9yUmVzb3VyY2U= 91200 -c2J1cmc= 91201 -PFRleHRWaWV3 91202 -dGhpbmthYmxl 91203 -YW5nbGluZw== 91204 -ICJ9XA== 91205 -UFJT 91206 -QXBwcm92YWw= 91207 -IGtsaWVudA== 91208 -bm91bg== 91209 -IERpYW1vbmRz 91210 -SEc= 91211 -IFRyaWJhbA== 91212 -LnB4 91213 -IHByb3BOYW1l 91214 -IGhlbHk= 91215 -0LvQuNGH 91216 -IEJvdXRpcXVl 91217 -Iik7fQo= 91218 -L2hvc3Q= 91219 -IHN0YXR1c0Jhcg== 91220 -PkRhdGE= 91221 -IGRpc2NvbnRlbnQ= 91222 -IGZyYWls 91223 -LmVsZW1lbnRBdA== 91224 -IGVtYW5j 91225 -CWZ1bg== 91226 -YXR0bGVz 91227 -IHByb3B1bHNpb24= 91228 -IGludGVyY2hhbmdlYWJsZQ== 91229 -IFRhbWJpw6lu 91230 -IHZlbmVy 91231 -X0xPV0VS 91232 -IHBkbw== 91233 -IGRldGVyZ2VudA== 91234 -IHRhdmVybg== 91235 -VmVudWU= 91236 -Lmphc3Blcg== 91237 -eXR0 91238 -IEppaGFk 91239 -4oCZw6A= 91240 -IG1lZGlhUGxheWVy 91241 -P3A= 91242 -cGNm 91243 -YW5kb25lZA== 91244 -IHJlY2ViZXI= 91245 -T1RQ 91246 -KGlPUw== 91247 -KCckew== 91248 -UHRz 91249 -IG1hbmFnZXJpYWw= 91250 -IFR1ZA== 91251 -IFdFTEw= 91252 -b3pl 91253 -IEFudG9pbmU= 91254 -IFxcCg== 91255 -IFZlY3Q= 91256 -IFdpbWJsZWRvbg== 91257 -aXNtZXQ= 91258 -IGJvdGhlcmluZw== 91259 -aW9zaXM= 91260 -Z2V0TWV0aG9k 91261 -IGlucHV0RGF0YQ== 91262 -IEJpbmRlcg== 91263 -IGRjdA== 91264 -w6Fsbg== 91265 -X0JPTEQ= 91266 -IEp1Z2VuZA== 91267 -IEJlZ2lubmVycw== 91268 -aW9tcw== 91269 -IHJlbGVudGxlc3NseQ== 91270 -IE1vbmRheXM= 91271 -5LyY 91272 -VG9tb3Jyb3c= 91273 -IFNhbXA= 91274 -XFBlcnNpc3RlbmNl 91275 -TUFTVEVS 91276 -KHByZWRpY3Rpb25z 91277 -KG51bWVybw== 91278 -LnR3aXRjaA== 91279 -LlJlc3RyaWN0 91280 -IFpa 91281 -IE1MTQ== 91282 -LlNtYWxs 91283 -XWJ5dGU= 91284 -IFZpZXdQYWdlcg== 91285 -IEFnZW5jaWVz 91286 -IHBhcnRpY2lwYXRlcw== 91287 -IGluaXRXaXRoU3R5bGU= 91288 -JVg= 91289 -IGAs 91290 -Lk9iag== 91291 -ID8iKTsK 91292 -Q2FyZWVy 91293 -IDwlPQ== 91294 -a3Vs 91295 -Q3BwSQ== 91296 -IE11c2hyb29t 91297 -dXJhdA== 91298 -bWlh 91299 -Q2Q= 91300 -YXJkdWlubw== 91301 -IGNvdW50cnlDb2Rl 91302 -X3BsYWNlbWVudA== 91303 -KCI9PT09PT09PT09PT09PT09 91304 -LWJlbA== 91305 -QXNzZXJ0aW9ucw== 91306 -IHByw7N4aW1h 91307 -KCkiKQo= 91308 -X2Vn 91309 -U1NJUA== 91310 -dXpl 91311 -cGxhY2Vy 91312 -YW1iaWd1b3Vz 91313 -X0lOSVRJQUxJWkVS 91314 -IEhhdHM= 91315 -IEdPT0dMRQ== 91316 -IGFnaXRhdGlvbg== 91317 -KG11dGV4 91318 -SElHSA== 91319 -OiIp 91320 -IGludmFkZXJz 91321 -ICl9Cgo= 91322 -Lm1hbnVhbA== 91323 -IFNpZW1lbnM= 91324 -CUpQYW5lbA== 91325 -YmluZHVuZw== 91326 -ZWNlcmE= 91327 -L21ldA== 91328 -IMOpYw== 91329 -KHN0YXRpb24= 91330 -IHBvc2ljacOzbg== 91331 -X2lzc3Vlcw== 91332 -X2FsaWFzZXM= 91333 -X3RvcG9sb2d5 91334 -IEF1dG9kZXNr 91335 -QWNrbm93bGVk 91336 -ISpcCg== 91337 -IEZyZWlnaHQ= 91338 -IEZYTUxMb2FkZXI= 91339 -aWNoZWw= 91340 -KENoYXRDb2xvcg== 91341 -IGRpc3NvY2k= 91342 -IGFuYWxvZ3Vl 91343 -PHVzaXpl 91344 -LWV2 91345 -IHRlbmRy 91346 -PkFsbA== 91347 -IFVTRVJT 91348 -LnJlc3A= 91349 -X2ludGVncmF0aW9u 91350 -RGlzcGxheVN0eWxl 91351 -RkFJTFVSRQ== 91352 -0YfQuNGC 91353 -aWxkZWQ= 91354 -X3NlbWFwaG9yZQ== 91355 -YWNhZGVtaWM= 91356 -IHNjbGVyb3Npcw== 91357 -RmFs 91358 -LHN0 91359 -YD0= 91360 -aWZ0b24= 91361 -IHN1YnN0aXR1dGVz 91362 -IFN1cHBvcnRlcnM= 91363 -YXBwbGljYW50 91364 -KGt2 91365 -IEJlcm11ZGE= 91366 -IGRpc2NyZXBhbmNpZXM= 91367 -LlNvbGlk 91368 -d2VlbmV5 91369 -IGd1bA== 91370 -IGZpbGV0eXBl 91371 -IHJlc3VsdGF0 91372 -U2VuZGVySWQ= 91373 -IGdlem9jaHQ= 91374 -IEJlcmtzaGlyZQ== 91375 -ICgiPA== 91376 -KG1s 91377 -KHNoaWZ0 91378 -X1JFRElSRUNU 91379 -T0xPTg== 91380 -L2Jyb3dzZQ== 91381 -Ok5TTWFrZVJhbmdl 91382 -IHdhaXZl 91383 -IGV4Y2U= 91384 -IGNhdGFsb2dz 91385 -5Lmm 91386 -aWxsaW9ucw== 91387 -LkdldEN1cnJlbnRNZXRob2Q= 91388 -IGJpbGluZ3VhbA== 91389 -IENhc2NhZGVUeXBl 91390 -CVRyYW5zZm9ybQ== 91391 -X0NVU1RPTUVS 91392 -aXNpZnk= 91393 -INCx0Ls= 91394 -IFdob2V2ZXI= 91395 -IEVBUg== 91396 -IFs9Ww== 91397 -INC80L7QttC90L4= 91398 -IGphcmRpbg== 91399 -QHNob3c= 91400 -IGhlaXJz 91401 -IGFiYW5kb25tZW50 91402 -IFRyYW5zY3JpcHQ= 91403 -XV4= 91404 -OlNldFBvaW50 91405 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAo= 91406 -IEZhY3Rpb24= 91407 -KGVudGl0aWVz 91408 -ZmFjdGlvbg== 91409 -bXR4 91410 -X3JlY2FsbA== 91411 -Lk5VTEw= 91412 -Lm9wdGlvbmFs 91413 -KHByZWRpY3Rpb24= 91414 -QUdFTlQ= 91415 -IPCfmIA= 91416 -4oCZeQ== 91417 -4oCZdXRpbA== 91418 -IGFuZ3N0 91419 -LkV4cGVyaW1lbnRhbA== 91420 -aG9vdA== 91421 -YXN5YXJhaw== 91422 -YXV0b3BsYXk= 91423 -IFNwbGFzaFNjcmVlbg== 91424 -IGhlY3RpYw== 91425 -IG1ldGljdWxvdXNseQ== 91426 -IGNvbWVy 91427 -S2VpdGg= 91428 -IGZyYXNl 91429 -X1VOSVFVRQ== 91430 -Lk1hZ2VudGE= 91431 -KE1heA== 91432 -IHNjYWxlWQ== 91433 -IHB1dHQ= 91434 -KElG 91435 -IEFQUExF 91436 -UG9ybm8= 91437 -LmFkZENlbGw= 91438 -IG1vbHQ= 91439 -Y2hpbXA= 91440 -IGxlZ2dpbmdz 91441 -IGZsb3A= 91442 -4oCZaHVp 91443 -UlRPUw== 91444 -L3NwYW4= 91445 -LmJlZA== 91446 -LkxvZ2lj 91447 -IHVudHJhbnNsYXRlZA== 91448 -Q0xFQVI= 91449 -O2xlZnQ= 91450 -IEJGUw== 91451 -LWdyb3Vwcw== 91452 -dG9vaw== 91453 -X2FjY2VwdGVk 91454 -IGNhc2hpZXI= 91455 -ZXZlbnRJZA== 91456 -IGRvd25ncmFkZQ== 91457 -CQkJCQkJCQkJCQkK 91458 -0LDQvdC40Y4= 91459 -w6RuZGU= 91460 -IGNvdW5jaWxsb3I= 91461 -IGRyZWQ= 91462 -ZFQ= 91463 -V1JBUFBFUg== 91464 -Lm9s 91465 -5LiA6aG1 91466 -TUVB 91467 -IGtpbmV0aWNz 91468 -IGptcA== 91469 -X2ZsaWdodA== 91470 -RmVhcg== 91471 -IENoYW5lbA== 91472 -X21pZ3JhdGlvbg== 91473 -aGRs 91474 -ZXJlcXVpc2l0ZQ== 91475 -LnJhcg== 91476 -LU9uZQ== 91477 -IHNoZXBoZXJk 91478 -LmVhc2luZw== 91479 -KGRlc2NyaXB0b3I= 91480 -IHN1YnRvdGFs 91481 -44OT 91482 -Q29tcGlsZWQ= 91483 -IENvbHQ= 91484 -ZGxl 91485 -L21vY2s= 91486 -KXJvdw== 91487 -IHJlc2V0dA== 91488 -dGVybw== 91489 -IGFlcm9iaWM= 91490 -LmludHJv 91491 -IGNoZWNrYm94ZXM= 91492 -IE1jQ2FydG5leQ== 91493 -IENseWRl 91494 -77yM5bm2 91495 -Y29vbGRvd24= 91496 -LWluc3RhZ3JhbQ== 91497 -IE1QRw== 91498 -IExlaXN1cmU= 91499 -IG5hd2V0 91500 -IE5YVA== 91501 -UmVndWxhckV4cHJlc3Npb24= 91502 -IHJhdmU= 91503 -QklMTA== 91504 -IGJhcnRlbmRlcg== 91505 -RW5sYXJnZQ== 91506 -IHZhaXM= 91507 -IDoKCgoK 91508 -LkVuZHBvaW50 91509 -ICIsDQo= 91510 -fX0iPnt7JA== 91511 -dHJlZXM= 91512 -LmVuZw== 91513 -KmxvZw== 91514 -OltdLAo= 91515 -IGJhdHRhbGlvbg== 91516 -U3ViamVjdHM= 91517 -IGV4cG9zaXRpb24= 91518 -IFRvYXN0cg== 91519 -IHRvcExldmVs 91520 -IENFTA== 91521 -IGd1YmVybg== 91522 -dW5zdWJzY3JpYmU= 91523 -Y29uYQ== 91524 -X2FwcHJveA== 91525 -VFo= 91526 -IFRyZWVTZXQ= 91527 -LmNvbW11bml0eQ== 91528 -IG5hcnJvd2Vy 91529 -KEV4cGVjdGVk 91530 -Q2xy 91531 -IGdvcmU= 91532 -IGFjcXVpdHRlZA== 91533 -IEVVUk8= 91534 -G1s= 91535 -IHJlcHVibGljYW4= 91536 -IGF1dG9iaW9ncmFwaHk= 91537 -X2Zkcw== 91538 -Q29sbGFwc2Vk 91539 -IA0KIA0K 91540 -LXBpbGxz 91541 -TUJFRA== 91542 -IGlOZEV4 91543 -IHJlc3BvbnNlVHlwZQ== 91544 -Z2xmdw== 91545 -LXR1cm5lZA== 91546 -5Y+R5biD 91547 -CUJvb2xlYW4= 91548 -Lk9y 91549 -aW5pYQ== 91550 -IGhvdmVyZWQ= 91551 -IHNvcnRlcg== 91552 -IE5o 91553 -IEV4ZXJjaXNlcw== 91554 -bGVtZW50cw== 91555 -aWRvbg== 91556 -VG9l 91557 -IHLDqWbDqQ== 91558 -U1NGV29ya2Jvb2s= 91559 -IG9yZ2FuaXNlcnM= 91560 -IHJlc3VsdE1hcA== 91561 -X0hPUg== 91562 -RG9k 91563 -TG9jYWxTdG9yYWdl 91564 -IGpzb25SZXNwb25zZQ== 91565 -QXV0aFNlcnZpY2U= 91566 -IHNtZQ== 91567 -ZW1icm9z 91568 -IGxvYmJ5aXN0 91569 -b2d1aQ== 91570 -LnNwaW4= 91571 -IENvcnJlY3Rpb25z 91572 -X1JBRA== 91573 -IExTTQ== 91574 -KGN1cnJlbmN5 91575 -IOaA 91576 -IHByZWZldGNo 91577 -LkhlYWQ= 91578 -LXJlYWRlcg== 91579 -IFJveg== 91580 -CW1vdXNl 91581 -IFRMQw== 91582 -IFFUYWJsZVdpZGdldEl0ZW0= 91583 -IFNUT1JBR0U= 91584 -YW5uZWVy 91585 -IOyXkA== 91586 -YWNlbg== 91587 -U1g= 91588 -SW1hZ2VSZWxhdGlvbg== 91589 -IHJlc3VyZ2VuY2U= 91590 -aXp6eQ== 91591 -aWxvZ3Vl 91592 -SVZBTA== 91593 -IHNtYWNr 91594 -cnJoYQ== 91595 -KFBBUkFN 91596 -IUk= 91597 -IE1lY2g= 91598 -IElNYXBwZXI= 91599 -IGdpc3Q= 91600 -IFBPRA== 91601 -dm9yZQ== 91602 -dWxhw6fDo28= 91603 -ICwt 91604 -IGludm9sdW50YXJ5 91605 -UVJT 91606 -PXRpdGxl 91607 -IEJpb20= 91608 -IFNoZWxsZXk= 91609 -IENTUA== 91610 -UGVz 91611 -ZHJvcHM= 91612 -INGD0YHQv9C10Yg= 91613 -ZGl2ZXM= 91614 -IVsK 91615 -IExlYXN0 91616 -IGtha28= 91617 -IE1vZGVsbw== 91618 -IGZ1bmN0aW9uTmFtZQ== 91619 -IGNob2tpbmc= 91620 -IGRlZm9ybWF0aW9u 91621 -JywnJyk7Cg== 91622 -Y2HDp8Ojbw== 91623 -IHNxdWlycmVs 91624 -c2V0QmFja2dyb3VuZA== 91625 -QnJva2Vu 91626 -cG9saXQ= 91627 -Tm9uY2U= 91628 -IGtleWVk 91629 -TWVzaFBybw== 91630 -LnVzZXJJbnRlcmFjdGlvbkVuYWJsZWQ= 91631 -IGZsdXNoaW5n 91632 -IGJwcA== 91633 -IEFuZ2xpYw== 91634 -VHJvdQ== 91635 -IFdhbHRlcnM= 91636 -IHN0dXR0ZXI= 91637 -SGlw 91638 -X3dhcg== 91639 -aXZlbWVudA== 91640 -Q29ybg== 91641 -IHVuZHVl 91642 -YXBhdGthbg== 91643 -IG1pbmRlbg== 91644 -c2lnbmlmaWNhbnQ= 91645 -KHF1YW50aXR5 91646 -JGluc2VydA== 91647 -IEFMRVJU 91648 -LlVuaWNvZGU= 91649 -aWhu 91650 -XTo9 91651 -IHBpbk1vZGU= 91652 -IGZyYWlz 91653 -aW50ZXJwcmV0ZXI= 91654 -J2FjdGlvbg== 91655 -IGJsZWliZW4= 91656 -obQ= 91657 -cm93c2Vycw== 91658 -R0lU 91659 -X0RJUlM= 91660 -Rm9yZXZlcg== 91661 -IFBkZlBDZWxs 91662 -fG0= 91663 -LnNldEhlaWdodA== 91664 -IGZvcmVhcm0= 91665 -IGJhdHRsZWdyb3VuZA== 91666 -INC/0L7RgdC70LXQtA== 91667 -IEhhdGg= 91668 -IEF1dGhvcml6ZWQ= 91669 -IGNvbmZlcnJlZA== 91670 -IEJPVFRPTQ== 91671 -LmdldEZsb2F0 91672 -b2dyYXBoZWQ= 91673 -YXJkeQ== 91674 -IHNlcnZpw6dv 91675 -b3RveGlj 91676 -L2F1dGhlbnRpY2F0aW9u 91677 -IHJlcHLDqXNlbnQ= 91678 -IGNvbXBsZXhpb24= 91679 -CUNvbW1vbg== 91680 -X2Jo 91681 -V2hvbGU= 91682 -SW1hZ2VEYXRh 91683 -IHRpbms= 91684 -ZXF1YWxUbw== 91685 -IFRIUg== 91686 -IGRlbHRhcw== 91687 -IEFHRQ== 91688 -aXphZG9y 91689 -YWRtaW5pc3RyYXRpb24= 91690 -cXVldHM= 91691 -X2ZpbGxlZA== 91692 -IEjDpA== 91693 -YWxsb2Nh 91694 -IEJvb25l 91695 -CWxjZA== 91696 -Rm9sZGVyUGF0aA== 91697 -LlJhaXNl 91698 -XyN7 91699 -ZXJ0aW5v 91700 -IFRocm9uZQ== 91701 -4K6/ 91702 -b3hldGluZQ== 91703 -cHJheQ== 91704 -IGRpbGlnZW50bHk= 91705 -IEFyY2hpZQ== 91706 -Lm11bHRpcGFydA== 91707 -IHNlbw== 91708 -LmdldFByb2plY3Q= 91709 -IHBhag== 91710 -Y2xlcm9zaXM= 91711 -YW1lcm9u 91712 -IHRvdXJlZA== 91713 -IG5pa2U= 91714 -IEJha2VyeQ== 91715 -LHBhcmVudA== 91716 -X1RFTQ== 91717 -U3BhdGlhbA== 91718 -bGFwcGluZw== 91719 -UHJvZHVjZXNSZXNwb25zZVR5cGU= 91720 -KGJhbGFuY2U= 91721 -SHVuZHJlZHM= 91722 -LXRlcm1pbmFs 91723 -IkRv 91724 -Q29udGVudFNpemU= 91725 -IGJiYw== 91726 -IGTDqWNvdXZyaXI= 91727 -dXRpbHVz 91728 -LnVuZG8= 91729 -LG91dHB1dA== 91730 -Z3JvdXBOYW1l 91731 -JG1heA== 91732 -IEFsbGE= 91733 -INC60LDRgNGC 91734 -Lk9ORQ== 91735 -X2RlY2lzaW9u 91736 -RUVFRQ== 91737 -IHhPZmZzZXQ= 91738 -56o= 91739 -IHJ1bmF3YXk= 91740 -IGhhbmRqb2I= 91741 -IGdlbml0YWxz 91742 -KGpUZXh0RmllbGQ= 91743 -LnJhZGlhbnM= 91744 -IFBhZHJlcw== 91745 -ZGVwZW5kZW5jZQ== 91746 -IHN3YWxsb3dpbmc= 91747 -cm90ZWlu 91748 -IGZsZWV0cw== 91749 -IGNhcmF0dGVy 91750 -KGNhbg== 91751 -IEZsb3JhbA== 91752 -X01zZw== 91753 -IGRlY2xhcmFjacOzbg== 91754 -bHNydQ== 91755 -c2Nob29scw== 91756 -IGRlbGVnYXRlZA== 91757 -IFBlbmFs 91758 -IENoZXJu 91759 -U21hcnRQb2ludGVy 91760 -c3Rvcnlib29r 91761 -IE55bG9u 91762 -5oCd 91763 -X0xFU1M= 91764 -L2FkZHJlc3M= 91765 -IENPUlM= 91766 -IOydtOuvuA== 91767 -IG1vZGE= 91768 -bWRw 91769 -IGRlcmJ5 91770 -IFBoYXJtYWNldXRpY2Fscw== 91771 -IGV5ZWQ= 91772 -X2NwdXM= 91773 -6KaL 91774 -fHwK 91775 -Lm1hZw== 91776 -KFFM 91777 -IENpdmlsaXphdGlvbg== 91778 -6Yw= 91779 -X0RlcA== 91780 -IHN3ZWFyaW5n 91781 -IFNob3J0cw== 91782 -dWViYXM= 91783 -IGRlbGluZQ== 91784 -IEFkdmlzb3Jz 91785 -IOyeiOuLpA== 91786 -X0ZJTkU= 91787 -fSk6 91788 -LGFzc2lnbg== 91789 -IFBDSWU= 91790 -e3t7 91791 -U2Np 91792 -IGFtYm9z 91793 -aWxlZW4= 91794 -IHR1bmVy 91795 -IHBhcmFtTmFtZQ== 91796 -LHRvdGFs 91797 -KExvY2FsRGF0ZQ== 91798 -IHNwcA== 91799 -IGVycm9yZXM= 91800 -IEhlbHBpbmc= 91801 -X21lcmdlZA== 91802 -LnRpbWVTY2FsZQ== 91803 -X0VMRU0= 91804 -X1NPTA== 91805 -IGF2ZW50 91806 -PGQ= 91807 -SnVuaW9y 91808 -CWJhcg== 91809 -Lmx2 91810 -IOy5 91811 -PXd4 91812 -IG1pcmFjdWxvdXM= 91813 -IFJhbmRvbUZvcmVzdA== 91814 -IEZyYW5rZW4= 91815 -YGAs 91816 -KEluaXRpYWxpemVkVHlwZUluZm8= 91817 -IHN1cGVyaGVyb2Vz 91818 -IGFuc2libGU= 91819 -X1R5cGVEZWY= 91820 -IFBlcm0= 91821 -T0xFUg== 91822 -R3Jhbg== 91823 -LW5vdGlmaWNhdGlvbg== 91824 -IGtheg== 91825 -IGV4aGlsYXI= 91826 -c2VydGVy 91827 -IHN0b3JlZnJvbnQ= 91828 -X2VuZHM= 91829 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK 91830 -CWdpdA== 91831 -RFNQ 91832 -Q0hBSU4= 91833 -rLQ= 91834 -SW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbg== 91835 -IFNseQ== 91836 -77yaPA== 91837 -QnJpdGFpbg== 91838 -L3NsaWRlcg== 91839 -IHptcQ== 91840 -IGJhag== 91841 -YnJlZA== 91842 -LlZBTFVF 91843 -IGdyaWV2aW5n 91844 -IHBvcm7DtHM= 91845 -aWd1YQ== 91846 -SU5DTFVERUQ= 91847 -V2FrZQ== 91848 -Y2Jk 91849 -IE1vbmdvbGlh 91850 -aW52aXNpYmxl 91851 -IGNvcnJlY3RpdmU= 91852 -IGNlbnRlcnBpZWNl 91853 -Q2F1Z2h0 91854 -IGthcmFrdGVy 91855 -YWxtw7Y= 91856 -IGJlbHVt 91857 -IGFkam9pbmluZw== 91858 -Pygi 91859 -IFZpc3VhbGl6YXRpb24= 91860 -a2tl 91861 -aWZpY2Fkb3M= 91862 -c3Bk 91863 -X0NCQw== 91864 -LUxhbmd1YWdl 91865 -IHN0aWw= 91866 -b3JldGljYWw= 91867 -KGNvbXBsZXRpb24= 91868 -IFZlcmbDvGd1bmc= 91869 -X1RyZWU= 91870 -cmlwcGxpbmc= 91871 -LlJlbW92ZUVtcHR5RW50cmllcw== 91872 -IFRBWA== 91873 -CUNvZGU= 91874 -5YuV 91875 -dXJnYQ== 91876 -INGD0LbQtQ== 91877 -IGFpZGVy 91878 -IFByZXNjb3R0 91879 -IGZpbGFtZW50 91880 -IC0tLS0tLS0tLS0tLS0tLS0tLS0t 91881 -dGhlcm9z 91882 -0LXRgNCw 91883 -ZGViaWFu 91884 -w6RobA== 91885 -b2xhaA== 91886 -X1VOSVRT 91887 -QXJr 91888 -TW91bnRlZA== 91889 -LlRyaW1TcGFjZQ== 91890 -LmdldE51bWJlcg== 91891 -X2VvZg== 91892 -Lm5y 91893 -IFNIQVJFUw== 91894 -aWxhdGVy 91895 -IHdpY2h0 91896 -X2NvbXBhcmlzb24= 91897 -ICki 91898 -Y2xpbmljYWw= 91899 -IFRFbnRpdHk= 91900 -dmVuZXM= 91901 -LmdldFByb3BlcnRpZXM= 91902 -IHJlbGF0 91903 -IGFubm95YW5jZQ== 91904 -YmVi 91905 -IGFuZXN0aGVzaWE= 91906 -X2ludGVydmFscw== 91907 -X2Zo 91908 -IHN1ZG9rdQ== 91909 -IGRpc2Vu 91910 -Y29ubmVjdGluZw== 91911 -IG9h 91912 -IOKWkQ== 91913 -WkY= 91914 -IGN1eg== 91915 -U09FVkVS 91916 -IE3DtmdsaWNoa2VpdA== 91917 -Y2hhcnRlZA== 91918 -IGhhc2hlcg== 91919 -IEtlZXBz 91920 -QUVB 91921 -CWxvZ3J1cw== 91922 -CU5hbWVzcGFjZQ== 91923 -b3J0aG8= 91924 -JGFjdGlvbg== 91925 -IFJvYw== 91926 -Jyk7Pz4i 91927 -IFBST1Q= 91928 -QGFwaQ== 91929 -Y2hzZWw= 91930 -L2dpZg== 91931 -KEhhbmRsZQ== 91932 -IGFudW5jaQ== 91933 -L3B5 91934 -aW52YWxpZGF0ZQ== 91935 -IE1FUA== 91936 -dGVtcw== 91937 -O10v 91938 -6IM= 91939 -6L+Q 91940 -IHRhY28= 91941 -QURW 91942 -aHBw 91943 -QnV0dG9uQ2xpY2s= 91944 -IGJyaW5nZW4= 91945 -IFRJTUVPVVQ= 91946 -IGFzdHJvbG9neQ== 91947 -ZGF0ZUZvcm1hdA== 91948 -T0dSQVBI 91949 -RmlsZVN0cmVhbQ== 91950 -5a6h5qC4 91951 -LkNvbW0= 91952 -J2I= 91953 -IEdFVEdMT0JBTA== 91954 -ZWF0aW5n 91955 -YW5kZXN0 91956 -IFNFVFVQ 91957 -IEFkdmFuY2Vz 91958 -LnNjcm9sbEhlaWdodA== 91959 -QVpF 91960 -ZW5kdGltZQ== 91961 -d2VhdGhlcm1hcA== 91962 -IE1hbmdv 91963 -IFJJUA== 91964 -IGl0ZXJhdG9ycw== 91965 -IGNvYXg= 91966 -IOWbvg== 91967 -PG1haW4= 91968 -cm1z 91969 -cGNi 91970 -IHZhY2NpbmF0aW9ucw== 91971 -IGRpc2FncmVlbWVudHM= 91972 -CWV2ZW50cw== 91973 -PExvY2F0aW9u 91974 -Lk1lYXN1cmU= 91975 -IHF1ZWRh 91976 -IHNpZ25hbGxpbmc= 91977 -IGRlZ3JhZGVk 91978 -IEFtZWxpYQ== 91979 -LWNvbmZpZGVuY2U= 91980 -ZGJOYW1l 91981 -X2luYWN0aXZl 91982 -b25hdGlvbg== 91983 -IHBlcmlwaGVyYWxz 91984 -5qC3 91985 -U1VQRVI= 91986 -J1I= 91987 -LndheQ== 91988 -UExBSU4= 91989 -IEVuZ2Vs 91990 -cmVsYXk= 91991 -IGRlYmlkbw== 91992 -IFRyb3Rza3k= 91993 -6Iw= 91994 -INCw0LTRgNC10YE= 91995 -CXVzZXJz 91996 -ZXRjaHVw 91997 -dGVw 91998 -IG5ld1Bvc2l0aW9u 91999 -IHdhaXZlcnM= 92000 -ZWRpY2luZQ== 92001 -IHRhbmdnYWw= 92002 -IGFtbW9uaWE= 92003 -LWRldA== 92004 -L2V4ZWM= 92005 -KHBhZGRpbmc= 92006 -IFNob3BwaW5nQ2FydA== 92007 -IFByaW50Zg== 92008 -SGFuZGxlZA== 92009 -IE5BTUVT 92010 -KGNsb2Nr 92011 -IHt9Og== 92012 -IHNpbXM= 92013 -IFRlYXJz 92014 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0= 92015 -X0NBTk5PVA== 92016 -TEVHUk8= 92017 -LlNldFBhcmVudA== 92018 -5YW25Lit 92019 -IGVycmV1cg== 92020 -aXBp 92021 -PEV4cHJlc3Npb24= 92022 -LnRpbWVsaW5l 92023 -ICdfJyw= 92024 -IGNvYXRpbmdz 92025 -IHVzZUZvcm0= 92026 -LnRr 92027 -IEZlYXN0 92028 -LlNL 92029 -w6RzZW50 92030 -Y2h3aXR6 92031 -IGludmVudGl2ZQ== 92032 -IE1laQ== 92033 -IHZlc3RpYg== 92034 -IG7DpGNoc3Rlbg== 92035 -L2JpZw== 92036 -IHJldHJlYXRlZA== 92037 -IHByb3BhbmU= 92038 -dmljdGlt 92039 -QWt0 92040 -IFByZXNlcnZhdGlvbg== 92041 -IFBpcw== 92042 -X1NIQURPVw== 92043 -IHByaWNlbGVzcw== 92044 -csOzZA== 92045 -b2JibGVk 92046 -IHJvbGVOYW1l 92047 -IEdEUFI= 92048 -ICciLA== 92049 -Q2VudHJl 92050 -QXJjaGl0ZWN0dXJl 92051 -Q3BwQ2xhc3M= 92052 -IG1hdHRyZXNzZXM= 92053 -IGJlZXA= 92054 -IERhbWlhbg== 92055 -5p2D6ZmQ 92056 -YmV0dA== 92057 -X2Flcw== 92058 -KGNlbGxz 92059 -IOuwsOyXtA== 92060 -IGJpdG1hc2s= 92061 -Y291bGRu 92062 -LW5vdw== 92063 -IGlubm92YXRl 92064 -IGhhY2Vu 92065 -IEx5b25z 92066 -dGhpY2tuZXNz 92067 -IHdoaXN0bGVibG93ZXI= 92068 -JGZpbHRlcg== 92069 -IGV1bGVy 92070 -IEhhcm0= 92071 -IGxlZHM= 92072 -IEtlbHZpbg== 92073 -LnF1aWNr 92074 -IEzDs3Bleg== 92075 -cmV2ZQ== 92076 -IG5pZ2VyaWE= 92077 -IGp5bGxhbmQ= 92078 -LmVtcHR5TGlzdA== 92079 -IHVuc2V0dGxpbmc= 92080 -dXNiYW5k 92081 -IHRyYWNrZXJz 92082 -PVwiIjsK 92083 -IGNvbnRpbnVh 92084 -IE51bWVybw== 92085 -ZW5kb24= 92086 -IEdlcnJ5 92087 -LlRPRE8= 92088 -UmVwZWF0ZWQ= 92089 -IFNlcmVuYQ== 92090 -0LjQvNCw0LvRjA== 92091 -cHJvZmls 92092 -INCy0YHQtdGF 92093 -QGFkbWlu 92094 -LkxpbmVz 92095 -IHRyYW5zbWlzc2lvbnM= 92096 -IGNq 92097 -YW7Dp2E= 92098 -5Yig6Zmk5oiQ5Yqf 92099 -IGdldE1lbnVJbmZsYXRlcg== 92100 -dWZyZXE= 92101 -IE1hdGhlbWF0aWNhbA== 92102 -TmF2aWdhdG9yTW92ZQ== 92103 -IGZ3ZA== 92104 -dW5pdHRlc3Q= 92105 -IHN5bnRoZXNpemVk 92106 -IGNyZWVk 92107 -KEZyYW1l 92108 -cHN5Y2g= 92109 -dm9k 92110 -dUM= 92111 -4bqndQ== 92112 -IOKAnOKApg== 92113 -IGtyYXQ= 92114 -ZHJhd2FibGU= 92115 -w6ZyZQ== 92116 -PXRvcA== 92117 -KExvZ2dlcg== 92118 -RXJyb3JFeGNlcHRpb24= 92119 -YWlzYWw= 92120 -L3dz 92121 -dWxsZWQ= 92122 -QVJJTkc= 92123 -IG5JbmRleA== 92124 -IGludGVybmFscw== 92125 -IGVmZmljaWVuY2llcw== 92126 -ICNA 92127 -X2JyaWdodG5lc3M= 92128 -X25vcm1hbHM= 92129 -IFN0b3V0 92130 -IHVudmVpbA== 92131 -IFNob3Rz 92132 -LWNvbXBhbnk= 92133 -X2VsdA== 92134 -KGRsbGV4cG9ydA== 92135 -IHByb2R1Y2Npw7Nu 92136 -Q2lzY28= 92137 -Qmxha2U= 92138 -LW1vdXRo 92139 -UGVhcg== 92140 -INC00L7RgdGC0YPQvw== 92141 -IEpBQ0s= 92142 -IO2YuA== 92143 -IHN0b3B3b3Jkcw== 92144 -IFRlc3M= 92145 -IHBvc3Rl 92146 -cmF6aWVy 92147 -6K0= 92148 -TWVzc2FnaW5n 92149 -t+aWsA== 92150 -VGFtYmFo 92151 -IG5hcmNvdGljcw== 92152 -IGNhbXBlcg== 92153 -IHRyaXBvZA== 92154 -IGdsRW5k 92155 -IGdpb2M= 92156 -Y29tYmU= 92157 -VXNlclJvbGU= 92158 -VWw= 92159 -RXF1aXZhbGVudA== 92160 -IGdub21l 92161 -IEZ1w58= 92162 -cGFja2FnZU5hbWU= 92163 -X3Vl 92164 -RGlzY2xvc3VyZQ== 92165 -YW1hdGU= 92166 -X3RlbnNvcnM= 92167 -IEthdGhyeW4= 92168 -X0Jhcg== 92169 -VGhyZWFkSWQ= 92170 -IHZlcmlmaWNh 92171 -LmFzc2VydE51bGw= 92172 -IE9kaW4= 92173 -YsOp 92174 -INGB0L7RgdGC 92175 -IGp0 92176 -LlNlbGVjdGVkSXRlbXM= 92177 -IGFjdGlvbmFibGU= 92178 -IFJlZ2FyZHM= 92179 -aGVr 92180 -Om51bWVs 92181 -LEdM 92182 -IFBIT05F 92183 -CURlZmF1bHQ= 92184 -IGVsYXN0 92185 -IGJlY2s= 92186 -PWNyZWF0ZQ== 92187 -OicK 92188 -YXJodXM= 92189 -bW9kaWZpZXJz 92190 -aW50cHRy 92191 -IHByb3Bpbw== 92192 -77yI56yR 92193 -IHJlcXVlc3RPcHRpb25z 92194 -IGltcGxpYw== 92195 -IGR1cm8= 92196 -IFBDUw== 92197 -RGVsaW1pdGVy 92198 -KGxvZ2l0cw== 92199 -LkVWVA== 92200 -V2l0aENvbnRleHQ= 92201 -IG9sdHJl 92202 -X0VYRUNVVEU= 92203 -b2xpY2l0ZWQ= 92204 -X0VudGVy 92205 -L2Zyb20= 92206 -INGB0LvQvtCy 92207 -IEhvcm0= 92208 -dWliTW9kYWw= 92209 -X0lORklOSVRZ 92210 -77yM44CK 92211 -VUdJTlM= 92212 -T05HTA== 92213 -LGJ1Zg== 92214 -IHBvdXJyYWl0 92215 -cGo= 92216 -KGN1YmU= 92217 -IHVnbA== 92218 -IFNhd3llcg== 92219 -SUZFU1Q= 92220 -QXBpcw== 92221 -IENvcmVEYXRh 92222 -IHNlc2FtZQ== 92223 -LnB0aA== 92224 -LmdldFVzZXJOYW1l 92225 -Y2FzZWQ= 92226 -IHZhbmlzaA== 92227 -X0FwaQ== 92228 -Ly86 92229 -L25vbg== 92230 -LmRvY2tlcg== 92231 -LnNp 92232 -YWxlcnRz 92233 -IGludGVzdGluZQ== 92234 -cGFydGljaXBhbnRz 92235 -LXZpc2libGU= 92236 -ZW1zcA== 92237 -bXVl 92238 -X3B2 92239 -IENyaQ== 92240 -b2dyYQ== 92241 -X2V4cGVyaWVuY2U= 92242 -IElOVEVSVkFM 92243 -X3JlZ3Jlc3Npb24= 92244 -7ZWY7IS47JqU 92245 -ZW5kZXJlY28= 92246 -bGF0YWJsZQ== 92247 -LmxvY2FsdGltZQ== 92248 -IEJJVFM= 92249 -IEZvbGRpbmc= 92250 -CSAJCQ== 92251 -w6lzZQ== 92252 -LWJlYXJpbmc= 92253 -IFhQQVI= 92254 -T1BTSVM= 92255 -J14kJyw= 92256 -aW5jbA== 92257 -IE9wcmFo 92258 -IGJvb3Rocw== 92259 -IFJvaGluZw== 92260 -LkJvcmRlclNpZGU= 92261 -YXRhdHlwZQ== 92262 -Q3JlYXRlZEJ5 92263 -LOKAmeKAnQ== 92264 -ZG9jdHJpbmU= 92265 -IGJyZWF0aGVk 92266 -X2JlZw== 92267 -IGFmZmxpY3RlZA== 92268 -TW91bnRhaW4= 92269 -QmxvYw== 92270 -IHJ1aW5pbmc= 92271 -LkFubm90YXRpb25z 92272 -CWludGVudA== 92273 -IHN0YXRpY2FsbHk= 92274 -X1V0aWxz 92275 -TGF1bmNoZXI= 92276 -Om5vcm1hbA== 92277 -IHVzZXJpbmZv 92278 -LUp1bA== 92279 -S3lsZQ== 92280 -LlJlYWRVSW50 92281 -KHVybHM= 92282 -L2lm 92283 -bWl0dGVs 92284 -YmNt 92285 -QE1vZHVsZQ== 92286 -IENvbnN0YW50aW4= 92287 -IGJq 92288 -ZXJuYXV0 92289 -PHI= 92290 -IE1lbnRvcg== 92291 -IGVncmV0 92292 -X29hdXRo 92293 -LkRhdGFDb250ZXh0 92294 -X0NMSQ== 92295 -KENvbnN0cnVjdG9y 92296 -IHNldFBvc2l0aW9u 92297 -cmVzYXI= 92298 -ZW50aW5n 92299 -4Li54Lil 92300 -VHJhbnNtaXNzaW9u 92301 -IG5vdGlmeURhdGFTZXRDaGFuZ2Vk 92302 -IE1vdXNlQnV0dG9u 92303 -ICoi 92304 -ICAgICAgICAgICAgICAgDQo= 92305 -IEx5ZGlh 92306 -IHN3b3Jl 92307 -IHBsYXRhZm9ybWE= 92308 -CWJ1dHRvbnM= 92309 -IHNwcnVuZw== 92310 -KFRva2VuVHlwZQ== 92311 -Q3g= 92312 -QXF1 92313 -CQkJCQkJCQkJICA= 92314 -CUFERA== 92315 -dWlkcw== 92316 -IOCkrg== 92317 -IOaXtumXtA== 92318 -LkFjdGlvbkJhcg== 92319 -IG9jdXI= 92320 -IGlsbWE= 92321 -LW5ldXRyYWw= 92322 -ICIuIjsK 92323 -CVNpemU= 92324 -UGllY2Vz 92325 -IHN0aWY= 92326 -ICI9Iiw= 92327 -IEVxdWl2YWxlbnQ= 92328 -IGlnZW4= 92329 -ZGZk 92330 -X3RoaWNrbmVzcw== 92331 -X3JlYWRhYmxl 92332 -L2ZhbHNl 92333 -IHRvb2x0aXBz 92334 -b3BsYXN0 92335 -aHVh 92336 -aGFuZGxlUmVxdWVzdA== 92337 -LkxBWlk= 92338 -PFVGdW5jdGlvbg== 92339 -aW1tdXRhYmxl 92340 -aWhpbGF0aW9u 92341 -IG9ydGhvZG94 92342 -LnBvcHVsYXRl 92343 -IHZlcmE= 92344 -IG9iZXI= 92345 -c2FuZA== 92346 -dmln 92347 -Q29uZmVyZW5jZQ== 92348 -KENvbGxpc2lvbg== 92349 -L2F1dG8= 92350 -IFNvbGlkQ29sb3JCcnVzaA== 92351 -Kic= 92352 -LGFkZHJlc3M= 92353 -IHN3ZWV0aGVhcnQ= 92354 -w6F0aWNhcw== 92355 -YW5pbmU= 92356 -X3BheW1lbnRz 92357 -IHVubWlzdA== 92358 -IHRydW1wZXQ= 92359 -QkFM 92360 -IGZpbGVJZA== 92361 -bmllanM= 92362 -QURG 92363 -IG1uaXN0 92364 -IEZlaGxlcg== 92365 -44CRLA== 92366 -Q2hhcmFjdGVyU2V0 92367 -IFZhbmNl 92368 -SW5zZXJ0ZWQ= 92369 -IGRvd253YXJkcw== 92370 -IHJvdGF0aW9uYWw= 92371 -IGVuY291bnRlcmluZw== 92372 -TUJQcm9ncmVzc0hVRA== 92373 -L1N5c3RlbQ== 92374 -L3BvcA== 92375 -IH0pDQoNCg== 92376 -IC4nPC8= 92377 -77yJDQo= 92378 -IGRjYw== 92379 -YXN5YXJha2F0 92380 -IHByaW5jaXBhbGx5 92381 -5a6a5LmJ 92382 -KGNob2ljZXM= 92383 -LnBhZ2luYXRvcg== 92384 -IHVwYnJpbmdpbmc= 92385 -IGRvdGVudg== 92386 -KCkpLw== 92387 -IFRBUw== 92388 -Z2Nk 92389 -X2ludGY= 92390 -Lm11dGV4 92391 -cHJlc3Rhc2hvcA== 92392 -IGLDtnI= 92393 -ZGFw 92394 -X2RlbWFuZA== 92395 -XERlc2t0b3A= 92396 -dG9GbG9hdA== 92397 -IHNlZ3JlZ2F0ZWQ= 92398 -IGNsaW1hdGVz 92399 -Lk9yZGVyQnlEZXNjZW5kaW5n 92400 -KCcsJyk= 92401 -UHVsbFBhcnNlcg== 92402 -QXRvbXM= 92403 -IGJlbsO2dA== 92404 -IGhvbWVy 92405 -YW50dQ== 92406 -SXNFbXB0eQ== 92407 -IEJlZ2lucw== 92408 -PlNob3c= 92409 -IFN1cHBsZW1lbnRz 92410 -b2NjdXM= 92411 -IGRvcGU= 92412 -LmJvb2tpbmc= 92413 -IEFsbWlnaHR5 92414 -W2VkZ2U= 92415 -IEViYXk= 92416 -X3JhY2U= 92417 -RnJvemVu 92418 -X3RyYXZlbA== 92419 -IHBhc3RvcnM= 92420 -X1NVUkZBQ0U= 92421 -X2dlbnJl 92422 -X0hPVA== 92423 -LGRpbQ== 92424 -VGJs 92425 -bXRz 92426 -cHJlZGljdGlvbnM= 92427 -X2N1bQ== 92428 -IGRldGFsbGVz 92429 -LXRyYW5zaXRpb25hbA== 92430 -IHdha2V1cA== 92431 -UGVyc29ucw== 92432 -LmNvbG9yYmFy 92433 -U3RyYW5nZQ== 92434 -2K/Zhw== 92435 -Jlc= 92436 -IEFSUA== 92437 -X1NPRlQ= 92438 -X2RyYWZ0 92439 -SVZB 92440 -IGdyb3A= 92441 -IGxpZWJl 92442 -IGlpZA== 92443 -2KfYsw== 92444 -Y2FuZGlkYXRlcw== 92445 -Z2V0QXM= 92446 -PV8oIg== 92447 -LkdldE9yZGluYWw= 92448 -KSk9PQ== 92449 -YW5ub3RhdGU= 92450 -IEx1bWlh 92451 -SVJNV0FSRQ== 92452 -X09QRU5HTA== 92453 -KGZvcm1EYXRh 92454 -ZW50aW1lcw== 92455 -IHdhdGVyc2hlZA== 92456 -INCx0LXQtw== 92457 -IGZsb3BweQ== 92458 -VG93YXJkcw== 92459 -KGNvbXBhY3Q= 92460 -RERE 92461 -e24= 92462 -IHBva2luZw== 92463 -QG0= 92464 -IHJlY3ljbA== 92465 -c3RydWN0b3Jz 92466 -a2V5Q29kZQ== 92467 -IHZlaGVtZW50 92468 -IGxpdHJl 92469 -IEJJTkQ= 92470 -IEZyYW5jb2lz 92471 -IG51ZGl0eQ== 92472 -IGlzaXpl 92473 -CW9uQ2xpY2s= 92474 -eXN0YWxz 92475 -IGdldFN5c3RlbVNlcnZpY2U= 92476 -V2ViUmVzcG9uc2U= 92477 -ZmlsZXNpemU= 92478 -IENobG9y 92479 -Y29saQ== 92480 -X3NlYXQ= 92481 -LkFkZEluUGFyYW1ldGVy 92482 -KXRlc3Q= 92483 -IHF1ZXM= 92484 -IGNhdXRpb3VzbHk= 92485 -ImRpc3BsYXk= 92486 -LnNodG1s 92487 -IEdVSURBVEE= 92488 -KCIqKg== 92489 -IGdyYW5kZGF1Z2h0ZXI= 92490 -IEFzc2VtYmx5RGVzY3JpcHRpb24= 92491 -Rm9yRWFjaA== 92492 -V2lsc29u 92493 -LGVn 92494 -IGJlbGlldmFibGU= 92495 -IGNyb3Nzd29yZA== 92496 -bG9iYmVy 92497 -IFN0YXBsZXM= 92498 -KHNoaXA= 92499 -IHdhZ2Vk 92500 -IEJvbHNoZXZpaw== 92501 -LkFkZEl0ZW0= 92502 -KEZpbHRlcg== 92503 -X0FCQw== 92504 -IGBc 92505 -0L7RiQ== 92506 -IG1ib3g= 92507 -IE5lcw== 92508 -IEFWQ2FwdHVyZQ== 92509 -IGNvbmhl 92510 -IElOVEVSTkFUSU9OQUw= 92511 -b3Nn 92512 -IF0pLT4= 92513 -U0tUT1A= 92514 -IGtpZGQ= 92515 -IFNTVA== 92516 -IOWFsw== 92517 -IEV0aG5pYw== 92518 -RVJTSEVZ 92519 -IG11bHRpYw== 92520 -X01VTA== 92521 -IEZpbmRPYmplY3RPZlR5cGU= 92522 -IEV4cGVuc2Vz 92523 -Z2V0TW9ja0J1aWxkZXI= 92524 -LWd1aWRl 92525 -J0w= 92526 -IOeZuw== 92527 -IHJhag== 92528 -IEJsYW5jaA== 92529 -IEFkZHJlc3Nlcw== 92530 -Tng= 92531 -IElzbGFtYWJhZA== 92532 -0L7QutGD0LzQtdC90YI= 92533 -IEJlYXZlcg== 92534 -LnN0dWRlbnRz 92535 -IEFzeW5jQ2FsbGJhY2s= 92536 -c2hlZXRz 92537 -ZWNhc3Q= 92538 -IEZ1bmRhbWVudGFs 92539 -IHZlcmRpZW5lbg== 92540 -IGV4YWNlcmJhdGVk 92541 -IE1vZGVyYXRvcg== 92542 -Q0NDQ0ND 92543 -IHRpbWVvdXRz 92544 -IHN1YmRpdmlzaW9ucw== 92545 -IGNvbXByb21pc2Vz 92546 -dXp6ZXI= 92547 -fSwkew== 92548 -X2Jsb2NraW5n 92549 -ZXJtYW5u 92550 -IE1pa2hhaWw= 92551 -IFNlbGJzdA== 92552 -6ZSA 92553 -LnNob3dz 92554 -5LiH5YWD 92555 -IFRm 92556 -IElIdHRwQWN0aW9uUmVzdWx0 92557 -IElFbnRpdHk= 92558 -IGlx 92559 -Rk1M 92560 -b2RlbQ== 92561 -c3Rw 92562 -dWN0aW9ucw== 92563 -LmZhdm9yaXRl 92564 -LkdldERpcmVjdG9yeU5hbWU= 92565 -IGdyYWM= 92566 -IHhtbERvYw== 92567 -X3B1c2hCdXR0b24= 92568 -Y29sbGVjdG9y 92569 -PWV4cGxvZGU= 92570 -IGRlc3RpbmF0aW9uVmlld0NvbnRyb2xsZXI= 92571 -IFNlcmlhbGl6ZWQ= 92572 -Om1lc3NhZ2U= 92573 -IENDQw== 92574 -X3JlY292ZXJ5 92575 -LWtpdA== 92576 -c2hpbWE= 92577 -cm90Y2g= 92578 -IGB9Cg== 92579 -X3N1cHA= 92580 -VGFibGE= 92581 -0YDQtdC00LXQuw== 92582 -R3RrV2lkZ2V0 92583 -IFNJTVBMRQ== 92584 -LnBoaQ== 92585 -IExpYmVydGllcw== 92586 -LS1b 92587 -IHVudmVpbGluZw== 92588 -IGV4dGVudHM= 92589 -YmNk 92590 -IGh2YWQ= 92591 -CWNy 92592 -LnJlYWRkaXI= 92593 -IHJlYWRhYmlsaXR5 92594 -IGRpc21pc3Npbmc= 92595 -Q2FtYg== 92596 -IGNhc3VhbHR5 92597 -IElQVg== 92598 -bWl0ZXM= 92599 -IHB1cmlmaWVk 92600 -Lk9yaWVudGF0aW9u 92601 -IGxq 92602 -aW11bGF0b3I= 92603 -ZnJhbQ== 92604 -L2xvY2F0aW9u 92605 -IGNvbW11bmljYXRlcw== 92606 -OlVJQWxlcnQ= 92607 -L3NvY2lhbA== 92608 -ZWx5bg== 92609 -REVO 92610 -INee 92611 -IGJlZm9yZVNlbmQ= 92612 -IFVudGVycw== 92613 -JykuIg== 92614 -ICcnKTs= 92615 -LndyaXRlT2JqZWN0 92616 -KGdyYW1tYXJBY2Nlc3M= 92617 -IEFwcGxpY2F0aW9uQ29udGV4dA== 92618 -QnlVc2VybmFtZQ== 92619 -IHNraXBz 92620 -IGZpbGhv 92621 -IHZpZXV4 92622 -IG1SZWN5Y2xlclZpZXc= 92623 -IGFyb3VzZWQ= 92624 -Lm93bA== 92625 -IGN1cmxlZA== 92626 -L2NhbGxiYWNr 92627 -KCc6Jylb 92628 -IGludW5k 92629 -IGJyZWFrcG9pbnRz 92630 -LWV2ZW4= 92631 -LnN0ZW0= 92632 -IGRlcm9n 92633 -IG5lcA== 92634 -IENvbXBsZXRhYmxlRnV0dXJl 92635 -LUxpbmU= 92636 -Lyov 92637 -LkhleA== 92638 -IHJ1c3Nl 92639 -IGJpZg== 92640 -IEZvbmQ= 92641 -aWVjdA== 92642 -IGFsbG90dGVk 92643 -ZGV0ZWN0b3I= 92644 -IC8KCg== 92645 -ZW1vZGU= 92646 -dWhl 92647 -dWlzc2U= 92648 -IEZJWEVE 92649 -bWF0aHJt 92650 -IHVuc3Vz 92651 -IEF1dG9z 92652 -IC4uLi4uLi4uLi4= 92653 -LnRyYXZlbA== 92654 -TkFW 92655 -IGxlc2Jpc2s= 92656 -IMO8emVy 92657 -IGNsZXJpYw== 92658 -IGxpbWl0bGVzcw== 92659 -b2x1Y2lvbg== 92660 -IG5lY2tsaW5l 92661 -IGRyaWZ0ZWQ= 92662 -IFJlbGlhYmxl 92663 -IENhcnk= 92664 -IHRlbsOtYQ== 92665 -ID8+Jw== 92666 -L2NvbW1vbnM= 92667 -IEdNQw== 92668 -X05QQw== 92669 -IEJsaXNz 92670 -IEJ1cm1h 92671 -5ZCM5pe2 92672 -KGRlcGVuZA== 92673 -LXN1aXRl 92674 -CXN0YWdl 92675 -RG91Zw== 92676 -aWRlbnRpZmljYXRpb24= 92677 -X3Jlc29sdmVy 92678 -QmVnYW4= 92679 -W3RocmVhZA== 92680 -IDsKCgo= 92681 -TlRTVEFUVVM= 92682 -IGRpc29iZWQ= 92683 -fGg= 92684 -IGFjY3VtdWxhdGluZw== 92685 -ICIsIik7Cg== 92686 -dVBhcmFt 92687 -LmJpbGw= 92688 -cml0Y2g= 92689 -Q3JpbWU= 92690 -0LXRgdGM 92691 -IFJlbWFpbg== 92692 -54Sh5paZ 92693 -X1RIQVQ= 92694 -YCJdCg== 92695 -LnN0YW1w 92696 -IHBhcmFub3JtYWw= 92697 -IE1QQw== 92698 -InVybHM= 92699 -IEVzdGF0ZXM= 92700 -VG9Gcm9udA== 92701 -VGhpcnR5 92702 -QmV0aA== 92703 -J3U= 92704 -IOy9lOuTnA== 92705 -VUZBQ1Q= 92706 -IENyb20= 92707 -IE1pc3Rlcg== 92708 -IEVRVUFM 92709 -ZW5oZWlt 92710 -IC8vew== 92711 -X3dhcw== 92712 -IGJvdXF1ZXQ= 92713 -IE1pZGRsZXRvbg== 92714 -aXp1 92715 -X2hhc2hlcw== 92716 -IGhlbm5l 92717 -IExJTlVY 92718 -CVNlcnZpY2U= 92719 -IFRBTQ== 92720 -IGBf 92721 -IEFUQQ== 92722 -IGRhbmdsaW5n 92723 -cGFpbg== 92724 -X0JPVU5EUw== 92725 -cHJvZ3JhbW1pbmc= 92726 -IGN1cnJlbnRJdGVt 92727 -IGJlc2ll 92728 -ZW1ibGU= 92729 -KGNhbGM= 92730 -LlNraW4= 92731 -IHBlYXJscw== 92732 -IEJ1cmI= 92733 -LW1vbml0b3I= 92734 -L2Nz 92735 -Zmly 92736 -KHZlcg== 92737 -W2FyZ3M= 92738 -w7xja2Vu 92739 -ZXBhcmF0b3I= 92740 -RG91 92741 -LkVudA== 92742 -IEVTQQ== 92743 -KGZt 92744 -dG9uZXM= 92745 -IFphYw== 92746 -a3NhbQ== 92747 -4oCZYWxs 92748 -IE1TUw== 92749 -IkRvbg== 92750 -IHNpbXBsZXg= 92751 -IENvbnNjaW91cw== 92752 -IEFwcGxpY2FudA== 92753 -cGVsbGllcg== 92754 -IHBlZGVzdGFs 92755 -JGh0dHA= 92756 -IEF2YQ== 92757 -LkNH 92758 -IGludMOpcmVzcw== 92759 -IEludGVncmFs 92760 -cmVkZQ== 92761 -PWZvcm1hdA== 92762 -LlBhdGhz 92763 -X1BBUlRJVElPTg== 92764 -IHNlaA== 92765 -IFF1YW5kbw== 92766 -WW91dHViZQ== 92767 -LnB1dFRleHQ= 92768 -7KO87IS47JqU 92769 -LkFXUw== 92770 -IENzdg== 92771 -Q3Vyc29yUG9zaXRpb24= 92772 -LWJlZ2lu 92773 -X2NvdW50cmllcw== 92774 -LXJhbmRvbQ== 92775 -5Y2z 92776 -UGhpbGw= 92777 -IHBhbm9yYW1h 92778 -IHRoZXJlcw== 92779 -5Y+q 92780 -IHNpbGVuY2Vk 92781 -IEN1bWJlcmxhbmQ= 92782 -LlZpc2libGVJbmRleA== 92783 -LnN0YXRpc3RpY3M= 92784 -IHByb3BlbGxlZA== 92785 -QW1lcmljYW5z 92786 -IHZhbGlkYQ== 92787 -IEd1YW0= 92788 -IEZFTUE= 92789 -LnN5bnRheA== 92790 -ZGdl 92791 -IGRlZXBlbg== 92792 -ICAgICAgICAJCQkJ 92793 -IFNwZWNpYWxpc3Rz 92794 -IFNhbnRhbmE= 92795 -IEJlZXRsZQ== 92796 -ICUKCg== 92797 -VXNlclByb2ZpbGU= 92798 -KCIkLg== 92799 -IGVtcGxvaQ== 92800 -IGVtYWlsaW5n 92801 -Z2V0T3JFbHNl 92802 -X1VQUEVS 92803 -LmRyaXZl 92804 -IHJlZGhlYWQ= 92805 -Rk9VTkRBVElPTg== 92806 -IG11bHRpcGxpYw== 92807 -L2VmZmVjdHM= 92808 -IGhhbmR3cml0aW5n 92809 -X3Rh 92810 -IEJheg== 92811 -w7ZmZmVudA== 92812 -cHJpeA== 92813 -IGNoaXBzZXQ= 92814 -IGlwQWRkcmVzcw== 92815 -w61kYQ== 92816 -IFVuZw== 92817 -IFNjaGE= 92818 -LkZMT0FU 92819 -IHF1aWVybw== 92820 -b2Nocm9tZQ== 92821 -IHJlZWZz 92822 -YnNvbg== 92823 -IG3Dug== 92824 -IHRyYXlz 92825 -Qm9tYg== 92826 -IG15TGlzdA== 92827 -eGltaXR5 92828 -IERlbmc= 92829 -VW5p 92830 -LVNlcmllcw== 92831 -b2dhbnk= 92832 -bMSxaw== 92833 -L2NhbA== 92834 -IHJlYWxpemE= 92835 -IEhpYg== 92836 -CQoJCgo= 92837 -IGh1bWlsaWF0aW5n 92838 -WyR7 92839 -IHByZXRlbmRlZA== 92840 -IERhdGVuc2No 92841 -YW5zaWJsZQ== 92842 -CXJlbG9hZA== 92843 -IG1pZ2xpb3I= 92844 -X2JldA== 92845 -IHRvdGFsVGltZQ== 92846 -IEJheHRlcg== 92847 -IGVuYW1lbA== 92848 -L0ltYWdlcw== 92849 -IFNFUw== 92850 -IFNwcmluZ0FwcGxpY2F0aW9u 92851 -KWluaXRXaXRoRnJhbWU= 92852 -CWNhbA== 92853 -RUxFTUVOVA== 92854 -IEd1dGg= 92855 -KEJpZ0ludGVnZXI= 92856 -IE1lZGk= 92857 -Lk1lbWJlcnM= 92858 -IHJlam9pY2U= 92859 -IGRvZg== 92860 -UEVuZFBvaW50 92861 -IGNsaXQ= 92862 -X1JFVVNF 92863 -TWFrZXM= 92864 -IHN6eQ== 92865 -IHNoYWRlZA== 92866 -IGZhdm91cmVk 92867 -aXN0b2w= 92868 -ZGV4 92869 -IGZsZXhHcm93 92870 -hac= 92871 -X3ByaW50ZXI= 92872 -LmZuYW1l 92873 -cGVyYXRpb24= 92874 -IG7Ds3M= 92875 -Z2dlcg== 92876 -6ICB 92877 -INCy0YDQtdC80Y8= 92878 -KGVmZmVjdA== 92879 -QnlVcmw= 92880 -IEFQUw== 92881 -dHV0b3JpYWw= 92882 -ZWpz 92883 -U3FsUGFyYW1ldGVy 92884 -IHNjcmFwcw== 92885 -R3JlZXRpbmdz 92886 -RmVk 92887 -IFJFTkRFUg== 92888 -IGJsb29tcw== 92889 -IGRlYmlsaXRhdGluZw== 92890 -b21ldHJpY3M= 92891 -IHNpbWls 92892 -LWhlcm8= 92893 -IHJlYWxwYXRo 92894 -ZGVwYXJ0bWVudHM= 92895 -QklORA== 92896 -IENhc3NpZHk= 92897 -bGlhbg== 92898 -U0tJUA== 92899 -LWNsZWFu 92900 -IHNpbGRlbmFmaWw= 92901 -X211bHRpcA== 92902 -anNvbkRhdGE= 92903 -QWdlbnRz 92904 -LmZoaXI= 92905 -IHRyaXVt 92906 -IGFzdG9yZQ== 92907 -IG5leA== 92908 -OnVwZGF0ZQ== 92909 -INC00LA= 92910 -4KSy 92911 -OyIpCg== 92912 -LlRleHRJbWFnZVJlbGF0aW9u 92913 -IG1pY3Jvc2NvcHk= 92914 -U1VS 92915 -YW5reQ== 92916 -IFBldGl0 92917 -bWFya2V0aW5n 92918 -IHZlcmlmaWNhcg== 92919 -YW1hZ2Vk 92920 -Y3Ro 92921 -IGluY29uc2lzdGVuY2llcw== 92922 -IG1hasSF 92923 -IGdldEluZm8= 92924 -IHBhc3Npb25hdGVseQ== 92925 -IGljbXA= 92926 -W10+Cg== 92927 -U2luZ2Fwb3Jl 92928 -IE5ld3Rvd24= 92929 -IHJhaWxpbmc= 92930 -IEVubGlnaHRlbm1lbnQ= 92931 -dXRoZXJsYW5k 92932 -bGVpbmU= 92933 -X3JlZ2lzdHJv 92934 -IEVyaWNh 92935 -X3RpY2tldHM= 92936 -L21ldGhvZA== 92937 -aXp6YXRv 92938 -R2F0dA== 92939 -LWZlYXR1cmU= 92940 -IDotKQ== 92941 -IHNlcnBlbnQ= 92942 -IEdyb3VwTGF5b3V0 92943 -TmlrZQ== 92944 -dW5nYQ== 92945 -IE1pbQ== 92946 -IGluY2Vzcw== 92947 -IGRlcGxldGlvbg== 92948 -X2xvdA== 92949 -IGJpcnRoZGF5cw== 92950 -IHJlbnRlcnM= 92951 -IGVxdWlwb3M= 92952 -IExlaHI= 92953 -X1BsYXk= 92954 -IHNwaWVsZQ== 92955 -IExBTkQ= 92956 -IEVuY291bnRlcg== 92957 -aXphbmRv 92958 -IHBlcnU= 92959 -IHNsYW1taW5n 92960 -IHJlaW5zdGFsbA== 92961 -IGFuZ2k= 92962 -SW5UaGVEb2N1bWVudA== 92963 -IHZlcnNjaGlsbA== 92964 -IHZlcnNv 92965 -LnN0YWZm 92966 -KHZw 92967 -KGFjY291bnRz 92968 -Z2V0QXBwbGljYXRpb24= 92969 -IG1hbnRlbmVy 92970 -LlNP 92971 -LkFE 92972 -IE1vcm1vbnM= 92973 -CXJlYWw= 92974 -IGhvdGxpbmU= 92975 -IENhcmRpbw== 92976 -cGFnZUluZGV4 92977 -Ymplcmc= 92978 -Rm8= 92979 -IGNvbnNlaWxz 92980 -IG1pZ3JhaW5l 92981 -IGxhdGlubw== 92982 -IHRvcnBlZG8= 92983 -amFiaQ== 92984 -L3Jz 92985 -dWJiZXI= 92986 -IENsYXNzZQ== 92987 -4Lw= 92988 -KC9eXA== 92989 -X2RlcGxveQ== 92990 -R1JFUw== 92991 -IFdIQVRTT0VWRVI= 92992 -IGFyY3B5 92993 -IG1pZWpzYw== 92994 -QXJteQ== 92995 -IHNjaMO2bmU= 92996 -IGJtaQ== 92997 -IDoiOwo= 92998 -IENydWlzZXI= 92999 -cWg= 93000 -LnByZXBlbmQ= 93001 -IHZpdmU= 93002 -b3JpYXNpcw== 93003 -ICE9Cg== 93004 -dGVnYQ== 93005 -YW1lZGk= 93006 -UHJvamVjdGVk 93007 -LWJyZQ== 93008 -LHJlYWRvbmx5 93009 -IHN1YlRpdGxl 93010 -IG1pc3Ry 93011 -IEluaGFs 93012 -Y292ZXJpbmc= 93013 -IHppag== 93014 -IEFSVElDTEU= 93015 -UlVMRQ== 93016 -IGFsdHJv 93017 -IHNldHRsZXM= 93018 -aWRlbGJlcmc= 93019 -OiIuJA== 93020 -KGZl 93021 -X2Jt 93022 -IHByb3ByaWV0b3I= 93023 -IGtlZXI= 93024 -U2VwYXJhdGVk 93025 -X05FQVJFU1Q= 93026 -KHN0cnBvcw== 93027 -IENvbXB1dGF0aW9uYWw= 93028 -IGVybg== 93029 -SW5WaWV3 93030 -QWNyb3Nz 93031 -IGZydWl0eQ== 93032 -X21hcHBlZA== 93033 -IGdyYXR1aXRlbWVudA== 93034 -IHt9CgoK 93035 -cG90ZW50aWFs 93036 -cGFudHM= 93037 -IHNlbnRpbWVudGFs 93038 -IExpbmtlZGlu 93039 -KHBhdGNo 93040 -IGFkYXB0b3I= 93041 -IFVJU3Rvcnlib2FyZA== 93042 -IHNsYXNoaW5n 93043 -KCIvOg== 93044 -IHRleHREZWNvcmF0aW9u 93045 -LmRpYWc= 93046 -XFJlZGlyZWN0 93047 -IG5ldXJvc2NpZW5jZQ== 93048 -IEFkanVzdG1lbnQ= 93049 -IFNjb3RjaA== 93050 -IENvc2J5 93051 -U0VB 93052 -PXZpZXc= 93053 -IGV2b2x2ZXM= 93054 -IFNhbGlzYnVyeQ== 93055 -44CB4oCc 93056 -ZXZlcnlvbmU= 93057 -KGFyYw== 93058 -IGFwYXJ0aGVpZA== 93059 -IGF6aW11dGg= 93060 -IFNoYW1hbg== 93061 -2KU= 93062 -w7NuaWNh 93063 -OmNsYXNz 93064 -IEluamVjdG9y 93065 -YWhhcw== 93066 -YWJsZXI= 93067 -X2VzdGltYXRvcg== 93068 -X0NVQkU= 93069 -IEtyYW5r 93070 -IHVuZmF2b3JhYmxl 93071 -IHJlcHV0ZWQ= 93072 -IENvbmRpdGlvbmFs 93073 -IG1pbGZz 93074 -IFJlc3RyaWN0aW9ucw== 93075 -KGhyZWY= 93076 -SnVhbg== 93077 -PEVudHJ5 93078 -CXRlbXBsYXRlVXJs 93079 -X3Byb2R1Y3Rpb24= 93080 -VHlwZUlE 93081 -IGJhbGs= 93082 -IG5ld0Fycg== 93083 -IGxpY2VuY2Vz 93084 -LnNvbHV0aW9u 93085 -LnNhbQ== 93086 -IEh2 93087 -IHRyZW1ibGluZw== 93088 -WWF3 93089 -IGZsZWVjZQ== 93090 -IHNob3ZlbA== 93091 -V2Vy 93092 -IHBhdHRlcg== 93093 -PVk= 93094 -IEZybQ== 93095 -U2NyZWVucw== 93096 -JCI= 93097 -IEJsb25k 93098 -INGB0LjRgdGC0LXQvA== 93099 -KG9k 93100 -IG5vY3Q= 93101 -b3VudGVycw== 93102 -dXNlcHBl 93103 -fGludA== 93104 -LnJlbWFpbmluZw== 93105 -IHVsdGltbw== 93106 -IG1hc3R1cmJhdGluZw== 93107 -bW1j 93108 -PUc= 93109 -Il19Cg== 93110 -IGZlYXJsZXNz 93111 -IGFsZ3VtYXM= 93112 -Y3VsdA== 93113 -QWx0ZXJuYXRpdmVseQ== 93114 -5bKB 93115 -T0RFVg== 93116 -IEFkb3B0aW9u 93117 -IHdlYWx0aGllc3Q= 93118 -IG1lbnRyZQ== 93119 -L2dvdG8= 93120 -IGluZm9ybWFudA== 93121 -IFJvdXQ= 93122 -b2Zp 93123 -IGhhbW1lcmVk 93124 -IEVzdG8= 93125 -4oCZQnJpZW4= 93126 -IMWa 93127 -IGRlbWk= 93128 -INGB0LvQtdC0 93129 -IENsaW50b25z 93130 -7IWY 93131 -5aSn5bCP 93132 -RUNI 93133 -IGFuYXJjaGlzdHM= 93134 -IEJldmVyYWdl 93135 -IGdvdQ== 93136 -IGJyaWJlcnk= 93137 -IHBpY2t1cHM= 93138 -IHViZXI= 93139 -IHN5bmVyZ3k= 93140 -ZmNu 93141 -IEhlbnRhaQ== 93142 -IEJhc2VtZW50 93143 -IG1vcmI= 93144 -X2N1 93145 -amFkaQ== 93146 -KHByb2o= 93147 -IEJpbmdv 93148 -X2NhdGU= 93149 -W2VtYWls 93150 -Klg= 93151 -X1NFUA== 93152 -IHByaW5jaXBpbw== 93153 -dXBkYXRpbmc= 93154 -Ly99fQ== 93155 -Li4uKA== 93156 -IERPRQ== 93157 -IHpn 93158 -c2hhcGVz 93159 -PXRtcA== 93160 -Q3J1ZA== 93161 -IHdvcmtwbGFjZXM= 93162 -IHN0YWJpbGl6ZWQ= 93163 -IHRlbnRhbmc= 93164 -LnByb2R1Y3RJZA== 93165 -IFRyaWRlbnQ= 93166 -IG9yY2hlc3RyYXRlZA== 93167 -IEJ1Y2NhbmVlcnM= 93168 -X3RvbGVyYW5jZQ== 93169 -aWdyYXBoeQ== 93170 -w7xsZXI= 93171 -INi1 93172 -QVE= 93173 -IGF0aGxldGljaXNt 93174 -CVNlcnZlcg== 93175 -ZXdlZA== 93176 -RGlkRW50ZXI= 93177 -UmVnaXN0ZXJz 93178 -X2VtbHJ0 93179 -IGZ1bmN0aW9uYWxpdGllcw== 93180 -KGhkYw== 93181 -X21hcmtlcnM= 93182 -T3JlZ29u 93183 -KFN0cg== 93184 -IEdldEJ5SWQ= 93185 -IHp3YXJ0ZQ== 93186 -IE9DSQ== 93187 -IEphbWU= 93188 -X2NyaXQ= 93189 -IHN0b2NraG9sbQ== 93190 -CURpY3Rpb25hcnk= 93191 -X2NhcGFiaWxpdGllcw== 93192 -Q1RS 93193 -IG51bWE= 93194 -X2ZpcnN0bmFtZQ== 93195 -IE5TUmFuZ2U= 93196 -IG1vc3RyYQ== 93197 -IEFycml2YWw= 93198 -KElTZXJ2aWNlQ29sbGVjdGlvbg== 93199 -IHRlYXNwb29ucw== 93200 -IFNldFVw 93201 -CQkNCg0K 93202 -KGd1aWxk 93203 -LiJd 93204 -IG3hu5tp 93205 -YmZm 93206 -REFURVM= 93207 -KCldCgo= 93208 -IGh1bWFub2lk 93209 -dGhybw== 93210 -KGtsYXNz 93211 -IFZhZA== 93212 -ZnNw 93213 -LVNhaA== 93214 -IFVTRVJOQU1F 93215 -IFByb3BlcnR5Q2hhbmdlZEV2ZW50QXJncw== 93216 -IGxlc2lvbg== 93217 -X0RFTklFRA== 93218 -IFRISU5L 93219 -gqQ= 93220 -bWVudGFs 93221 -IHByZWNhcmlvdXM= 93222 -IE5vc2U= 93223 -IGNvbmNs 93224 -IHdpbGRmaXJl 93225 -IFRCcmFuY2g= 93226 -IEJBTQ== 93227 -L2Nzdg== 93228 -IE5BTg== 93229 -IENsZWFyYW5jZQ== 93230 -XEJsb2Nr 93231 -LmFubm90YXRl 93232 -5om+ 93233 -IFdISUxF 93234 -Z2VidW5n 93235 -Pkxpc3Q= 93236 -c2ht 93237 -Um9zcw== 93238 -YWZk 93239 -W3RpZA== 93240 -UGVyUGl4ZWw= 93241 -Kyhc 93242 -IEN5YW4= 93243 -IEtub3Q= 93244 -X3Zsb2c= 93245 -L3Zhcg== 93246 -W19f 93247 -IGhhc2htYXA= 93248 -KCk7DQ0K 93249 -IGFtYXNzZWQ= 93250 -IGRhdGVQaWNrZXI= 93251 -IFNhdG9zaGk= 93252 -X0NBUEFDSVRZ 93253 -IGJ1eg== 93254 -IE1pbmg= 93255 -U2V0Q29sb3I= 93256 -Kz0nPA== 93257 -IEludmVudA== 93258 -b3JjYQ== 93259 -aWdudW0= 93260 -IEFtcGg= 93261 -IHJlZmx1eA== 93262 -CiAgICAgICAgICAgICAgICAgICAgICAgIAo= 93263 -dWhu 93264 -KFRN 93265 -YWxsZXk= 93266 -IGxlZnRvdmVycw== 93267 -ZmRj 93268 -4oCcVGhlc2U= 93269 -IGNyYXdsZWQ= 93270 -KFZvaWQ= 93271 -aWd0ZQ== 93272 -8J+S 93273 -c2V0RGVmYXVsdA== 93274 -IEJlZ2lubmVy 93275 -UG9r 93276 -IEhMUw== 93277 -IGdhbWVJZA== 93278 -IEFtYmllbnQ= 93279 -X1BSRUQ= 93280 -LiJ9LAo= 93281 -w7xocnVuZw== 93282 -LlN5bmM= 93283 -IGludmU= 93284 -IE51cnNlcnk= 93285 -IGdsYXplZA== 93286 -q+yekA== 93287 -X2ZhdGFs 93288 -X2Rpc3BhdGNoZXI= 93289 -W10pDQo= 93290 -IGRldXRzY2hlbg== 93291 -6rGw 93292 -U2hhcGVz 93293 -IGlycmV2ZXJzaWJsZQ== 93294 -X3Blcw== 93295 -X2VzYw== 93296 -IHRoZXJtb21ldGVy 93297 -44OU44O8 93298 -X3NxcnQ= 93299 -Il09PSI= 93300 -IGN1bG1pbmF0aW9u 93301 -V29yZFByZXNz 93302 -IGxldmVu 93303 -VmVydGV4VXZz 93304 -IEhheXdhcmQ= 93305 -IEFzc2V0SW1hZ2U= 93306 -IG1haXpl 93307 -IGNoaWNhZ28= 93308 -IHRhdg== 93309 -ZXhwZW5zZXM= 93310 -0K0= 93311 -K2Y= 93312 -LiInIjsK 93313 -LVNB 93314 -IEtvdGE= 93315 -TWFpbkZyYW1l 93316 -LnNhbGU= 93317 -X0JV 93318 -IHN0cmVu 93319 -X2ZpbHQ= 93320 -L3ByaW50 93321 -KFBhY2tldA== 93322 -INC30LDQsg== 93323 -QWN0cw== 93324 -0LXQu9C10YQ= 93325 -IHJlbWF0Y2g= 93326 -IHJpZGRlbg== 93327 -IH0pKCk7Cg== 93328 -IGVuZG90aA== 93329 -IGNlcnRpZnk= 93330 -IFVJUGlja2VyVmlldw== 93331 -XE5vdGlmaWNhdGlvbnM= 93332 -CVRpdGxl 93333 -IGluZXF1YWxpdGllcw== 93334 -IE1vcmFu 93335 -IERhZW1vbg== 93336 -bGVzaWE= 93337 -IGhvcHBpbmc= 93338 -IGd1c3Rv 93339 -IEZpcmViYXNlRmlyZXN0b3Jl 93340 -IHBvbHlsaW5l 93341 -IHNwaWtlZA== 93342 -JSIpOwo= 93343 -IExBVElO 93344 -TGFiZWxUZXh0 93345 -IHN0cmFwb24= 93346 -X2ZpZA== 93347 -LXNwZWNpYWw= 93348 -YXJnZWQ= 93349 -IFNUSUxM 93350 -UXVhbGlmaWVkTmFtZQ== 93351 -LlJFUw== 93352 -I2M= 93353 -LndyaXRlbG4= 93354 -IEltbXV0YWJsZUxpc3Q= 93355 -IFRodW1i 93356 -IHNpbWQ= 93357 -RGVzY3JpY2Fv 93358 -LlNldFRleHQ= 93359 -IG5vbnByb2ZpdHM= 93360 -V2l0aGRyYXc= 93361 -LWVuY29kZWQ= 93362 -c2Jpbg== 93363 -IGFtb3J0 93364 -CWRk 93365 -cmlm 93366 -IHBhdGVybmFs 93367 -Lk1hcEZyb20= 93368 -X2Fzaw== 93369 -IHJlY291cnNl 93370 -IGJhY2tzdG9yeQ== 93371 -CW1hbmFnZXI= 93372 -X0RHUkFN 93373 -IEJpaGFy 93374 -aW50ZWxsaWdlbmNl 93375 -IHNraW1hZ2U= 93376 -KGVuY29kZXI= 93377 -IHN3aXJsaW5n 93378 -IEFwcGV0 93379 -X3NhbHQ= 93380 -IGF0dGU= 93381 -IFNRVUFSRQ== 93382 -IE5ldHo= 93383 -X3BhaW50 93384 -YXPEsQ== 93385 -aXNjaQ== 93386 -Rmxv 93387 -LWdvYWw= 93388 -LnNldFN0cm9rZQ== 93389 -IEF1c2Nod2l0eg== 93390 -IEFiZGVs 93391 -IGFuZXc= 93392 -IOWung== 93393 -IHRvdGFsUGFnZXM= 93394 -IHJlZmFjdG9y 93395 -IGNyZWF0aXZlbHk= 93396 -ZW1heA== 93397 -b2RveHk= 93398 -X3R4bg== 93399 -LlNvY2tldHM= 93400 -IFJpZGxleQ== 93401 -4buxYw== 93402 -c2FtcA== 93403 -TWluTWF4 93404 -IHdvcnNlbmluZw== 93405 -b3VudGFpbnM= 93406 -YXJ0bmVy 93407 -LXByb2Y= 93408 -c2luZ3VsYXI= 93409 -PWlz 93410 -IEZFQw== 93411 -X0ZN 93412 -IOaIlg== 93413 -IENhdWdodA== 93414 -X1NDTA== 93415 -IGV4cG8= 93416 -aW5mcmE= 93417 -IE1FUw== 93418 -Y2hhcA== 93419 -YWx0ZQ== 93420 -YXJraW4= 93421 -L21M 93422 -IHNlbmREYXRh 93423 -IGZyYW7Dp2Fpc2U= 93424 -IHPDpg== 93425 -X0RFRklOSVRJT04= 93426 -KioqKioqCgo= 93427 -XEN1c3RvbWVy 93428 -IOKWiOKWiOKWiOKWiOKWiA== 93429 -IHBlcnBldHJhdGVk 93430 -IEZ1cmlvdXM= 93431 -IHRlbmdh 93432 -bGVhcmVk 93433 -VUxMRVQ= 93434 -aW5pYw== 93435 -ZWFyY2hCYXI= 93436 -PENhcg== 93437 -IFJlbmV3YWJsZQ== 93438 -IGNvbnRlbXBsYXRlZA== 93439 -L2Zvcm1hdA== 93440 -IGZvcmdpdmluZw== 93441 -LlN1YkVsZW1lbnQ= 93442 -UFVURQ== 93443 -LmNvbnRlbnRTaXpl 93444 -IHJlc3BlY3RmdWxseQ== 93445 -4oCcCgo= 93446 -IHBvaWduYW50 93447 -dXJpbGU= 93448 -fSkiCg== 93449 -c2VxdWVudGlhbA== 93450 -L2Zhc3Q= 93451 -cHJ1bmc= 93452 -IFN0dW5uaW5n 93453 -IEJZVQ== 93454 -IGNvbXBhcmVy 93455 -CXJk 93456 -dW5pY29ybg== 93457 -xrBh 93458 -LkdldEl0ZW0= 93459 -IHNlY3Rpb25hbA== 93460 -anVkZ2U= 93461 -dXh0YXA= 93462 -IHN1bmRheQ== 93463 -IHDDpA== 93464 -TWlubmVzb3Rh 93465 -Ik4= 93466 -IGFwcGxpY2F0aW9uV2lsbA== 93467 -QU5HRVI= 93468 -IHJlYXNvbmVk 93469 -IFpFTkQ= 93470 -emFw 93471 -PWJhY2s= 93472 -b3NwaGF0ZQ== 93473 -6IqC54K5 93474 -IHRpdHRlbg== 93475 -IEFzc29j 93476 -QWN0aXZpdHlDcmVhdGVk 93477 -KVst 93478 -PyIKCgoK 93479 -IGpvdA== 93480 -2Lg= 93481 -IHVuY29tcHJlc3NlZA== 93482 -LklzREJOdWxs 93483 -IHZhc2U= 93484 -IGxvcmVt 93485 -IGVudHJlcHJpc2U= 93486 -IENvbnNlbnQ= 93487 -44Op44Oz 93488 -QnlWZXJzaW9u 93489 -IHF1aWVuZXM= 93490 -CWNvbnQ= 93491 -IEJsYWNraGF3a3M= 93492 -IEJsYXNpbw== 93493 -IHRhbmtlcg== 93494 -IHN0YXJ0dGltZQ== 93495 -IFNlYXM= 93496 -cGlvcw== 93497 -LlNwbGl0Q29udGFpbmVy 93498 -Y29tcGV0aXRpdmU= 93499 -IHBCdWZmZXI= 93500 -IGNvbnNlbnRpbmc= 93501 -LmFkZE9ic2VydmVy 93502 -aXRjaGVk 93503 -IG1pc2NlbGxhbmVvdXM= 93504 -IFRvcHM= 93505 -CWxw 93506 -Y21kcw== 93507 -LmRlcGFydA== 93508 -IGZOYW1l 93509 -CWJlc3Q= 93510 -OlA= 93511 -IHN3YXRo 93512 -IHZva3M= 93513 -YWxsb24= 93514 -IEh0bWxXZWJwYWNrUGx1Z2lu 93515 -LmxvZ2dlZElu 93516 -YnVja2V0cw== 93517 -IGhvbW9waG9iaWM= 93518 -IHN1YmR1ZWQ= 93519 -IG1lc3NhZ2Vib3g= 93520 -V2hhdHNBcHA= 93521 -IGRpc3NpcA== 93522 -IE1BTlVBTA== 93523 -TElLRUxZ 93524 -dGVzdGRhdGE= 93525 -LU9jdA== 93526 -RXhpdGVk 93527 -IFRhc21hbmlh 93528 -bGFj 93529 -IHRow7RuZw== 93530 -U3Rvcmllcw== 93531 -IGJpb2NoZW1pY2Fs 93532 -b3JyZQ== 93533 -IGVjbGlwcw== 93534 -IEFzc2VtYmx5UHJvZHVjdA== 93535 -cnRsZQ== 93536 -IFdpbGhlbG0= 93537 -cGl6emE= 93538 -X0RI 93539 -Y29uag== 93540 -IHB1ZWJsbw== 93541 -IGxpcXVl 93542 -IGN1cGlk 93543 -IEFjdGl2aXR5Q29tcGF0 93544 -LlNt 93545 -Il19 93546 -bWFpbGJveA== 93547 -Lm9wdFN0cmluZw== 93548 -LW9i 93549 -IE1hdWk= 93550 -YXRhaXJlcw== 93551 -IG1lcnJ5 93552 -Um5k 93553 -IGNhcmFjdGVyw61zdGljYXM= 93554 -VHJv 93555 -KGNu 93556 -Lmxk 93557 -LXBvaW50cw== 93558 -LnNi 93559 -IHZlag== 93560 -IGNhcmVnaXZlcg== 93561 -IG5hdQ== 93562 -RElSRUNUT1JZ 93563 -KGFuZw== 93564 -KC4p 93565 -IGV4cGxhbmF0b3J5 93566 -ZWxzZXk= 93567 -IE92ZXJuaWdodA== 93568 -IGxhaXNzZQ== 93569 -IFJBVEU= 93570 -IEdvdw== 93571 -UmVjb2duaXRpb25FeGNlcHRpb24= 93572 -aWNoZXJ0 93573 -IHJldm9sdXRpb25z 93574 -JGNhdGVnb3J5 93575 -IHVuZGVmZWF0ZWQ= 93576 -L2NvbW11bml0eQ== 93577 -LXBhcnRz 93578 -LWFwcGxpY2F0aW9u 93579 -K0E= 93580 -L3N3ZWV0YWxlcnQ= 93581 -IEtt 93582 -aWxhdGVk 93583 -YXRhdA== 93584 -UEFU 93585 -xI1l 93586 -IFRlYw== 93587 -Lm9uQWN0aXZpdHlSZXN1bHQ= 93588 -XFdlYg== 93589 -IEx1Zw== 93590 -b3ZvbHRh 93591 -IGFsdHJ1 93592 -aWd5 93593 -IGLEmWTEhQ== 93594 -IGFjdGl2YXRpb25z 93595 -IGF1ZGl0aW5n 93596 -RVJHRQ== 93597 -IOiLpQ== 93598 -Q2FybG9z 93599 -IGtJbnN0cnVjdGlvbg== 93600 -bWluZXI= 93601 -IH19Lw== 93602 -QW5kSGFzaENvZGU= 93603 -IEJvdXJib24= 93604 -LnByb2Y= 93605 -IGltcHJpbWly 93606 -IEZlcmRpbmFuZA== 93607 -0LzQtdC90YI= 93608 -L3t9Lw== 93609 -IENsYWly 93610 -IE9uQ29sbGlzaW9u 93611 -c2FsZG8= 93612 -cmFpc2Vk 93613 -IEFCT1ZF 93614 -KCk9Pg== 93615 -IGRldXRzY2hsYW5k 93616 -aGliaXRlZA== 93617 -RXh0cmVtZQ== 93618 -L2hvb2tz 93619 -IGRvdXQ= 93620 -IFZPQw== 93621 -ZXRob3Zlbg== 93622 -UE1D 93623 -IHJlc3RhcnRpbmc= 93624 -IFNDTg== 93625 -IEVP 93626 -IERKcw== 93627 -UGFzc3dvcmRGaWVsZA== 93628 -LkFjY2Vzc2libGU= 93629 -CWJ1cw== 93630 -U1RSVUNUSU9OUw== 93631 -IGxhdGVu 93632 -IFNOQVA= 93633 -X0hFUlNIRVk= 93634 -IG9uc3RhZ2U= 93635 -5bCP5pe2 93636 -IHNhaWxvcg== 93637 -IEN1cnNv 93638 -IGltcHJvdmlzZWQ= 93639 -IGdlbmVyYWxpemU= 93640 -IGJ1ZW5v 93641 -IGNlcmVtb25pYWw= 93642 -IENOUw== 93643 -IHBpZ2Vvbg== 93644 -bXNw 93645 -L0FJRFM= 93646 -bGluZUVkaXQ= 93647 -IEZpbmFuY2luZw== 93648 -IGpUYWJsZQ== 93649 -IGJvdHRvbXM= 93650 -IFRleHRJbnB1dFR5cGU= 93651 -IG1laXNqZQ== 93652 -LXNpZ25lZA== 93653 -IEdyZWVudmlsbGU= 93654 -b3BoaWxpYQ== 93655 -SWNvbk1vZHVsZQ== 93656 -IGNsYW5kZXN0 93657 -ZW1haW4= 93658 -U0NBTg== 93659 -X1RJTUVT 93660 -IGxlY2tlbg== 93661 -KGNhbmNlbA== 93662 -IGVjc3Rhc3k= 93663 -Lk1VTFQ= 93664 -IG1vZXRlbg== 93665 -IGFwcHJvcHJpYXRpb25z 93666 -IFFMRA== 93667 -IEd1aWw= 93668 -IHRyYXBwaW5n 93669 -eERB 93670 -IGvDtmxu 93671 -ZW51bXM= 93672 -4oCcVG8= 93673 -cG9ydG8= 93674 -bmluZ2Fy 93675 -IFRPTw== 93676 -LVNU 93677 -IE1hdGhz 93678 -IGt1cnM= 93679 -IFJFUEw= 93680 -X2NvbnRyaWI= 93681 -IFBoeQ== 93682 -cmFuZw== 93683 -Lm1hdmVu 93684 -LWZvbGxvdw== 93685 -IC0tLS0tLS0tLS0t 93686 -xLHEnw== 93687 -X3dpbm5lcg== 93688 -LkNyaXRlcmlh 93689 -KGRhdGFTb3VyY2U= 93690 -IHNldElucHV0 93691 -IFRJTUVTVEFNUA== 93692 -b3BlcmFuZHM= 93693 -Z2V0V2luZG93 93694 -LmZhY2VWZXJ0ZXhVdnM= 93695 -IEludmVzdGluZw== 93696 -Vnk= 93697 -IHBlcnNlY3V0ZWQ= 93698 -4bq/dQ== 93699 -IFBsdW1iaW5n 93700 -T05HT0RC 93701 -RXZpZGVuY2U= 93702 -IFN0cm9t 93703 -cXVvdGE= 93704 -TGl2ZXJwb29s 93705 -CWF0dGFjaw== 93706 -bWluaW1hbA== 93707 -IG9uS2V5RG93bg== 93708 -IG1vZHVsZUlk 93709 -IFZlcmFuc3Q= 93710 -bW9ydA== 93711 -YWNpc3Rz 93712 -IE1BU1M= 93713 -X1VOREVS 93714 -LmdldFJ1bnRpbWU= 93715 -RU5USUNBVElPTg== 93716 -Uk9LRQ== 93717 -IHNjYWxlWA== 93718 -IHNlcnRh 93719 -IEZyZXF1ZW50bHk= 93720 -X1RSQU5TRk9STQ== 93721 -IHR3aWxpZ2h0 93722 -IE1jS2Vuemll 93723 -bGVkZ2Vk 93724 -IEB7QCI= 93725 -X0FDVElW 93726 -IGhvb2tlcnM= 93727 -PWRlZmF1bHQ= 93728 -IHdhbG51dA== 93729 -IHVzZU5ld1VybFBhcnNlcg== 93730 -IENoZWVy 93731 -IHdyb25nZnVs 93732 -bmlv 93733 -YnRj 93734 -LnN0cmlkZQ== 93735 -IHN1Y2Nlc2Z1bGx5 93736 -IFRyb2xs 93737 -aWZpY2lv 93738 -LmNvbmQ= 93739 -IGhlYXBz 93740 -X1BIT1RP 93741 -PEFkZHJlc3M= 93742 -IFN0aWNreQ== 93743 -IG5pZ2h0dGltZQ== 93744 -IGRhbmRv 93745 -IEJJTEw= 93746 -INC+0YLQstC10YI= 93747 -RGV0ZXJtaW4= 93748 -IGZ6 93749 -KHNpZ25hdHVyZQ== 93750 -IHZpbmRlbg== 93751 -LkNPTk5FQ1Q= 93752 -cnVpc2U= 93753 -IHh1 93754 -cHJldmVudA== 93755 -Rk9Y 93756 -VUlBcHBsaWNhdGlvbkRlbGVnYXRl 93757 -U3BsYXNo 93758 -IGVtYnJvaWRlcmVk 93759 -IEhpbGZl 93760 -LnNoYWRlcg== 93761 -IGRvdWJ0ZWQ= 93762 -UmVzcG9uc2VTdGF0dXM= 93763 -IHVuc3RvcHBhYmxl 93764 -dW5sb2Fk 93765 -KyJd 93766 -ImxhYmVs 93767 -IGZyZWVsYW5jZXI= 93768 -RGlyZWN0ZWQ= 93769 -IHZvcmhhbmQ= 93770 -IFNubw== 93771 -ZXhpc3RlbmNl 93772 -b3JkaWFs 93773 -emFn 93774 -LkFnZQ== 93775 -IHNwYXducw== 93776 -IFBTRw== 93777 -c3RpdHV0aW9ucw== 93778 -IHNpZ2h0aW5n 93779 -LXRhbGs= 93780 -INGB0L7RhdGA0LDQvQ== 93781 -ZW5lcmltYQ== 93782 -IEJlbnRvbg== 93783 -X1N0b3Jl 93784 -VHJhbnNwYXJlbnRDb2xvcg== 93785 -IEV4cGxvc2lvbg== 93786 -X0lTUw== 93787 -Q2hlY2twb2ludA== 93788 -IGRlZmxhdGU= 93789 -0JLRi9Cx 93790 -LXRyYW5zZmVy 93791 -IEJhYmllcw== 93792 -IGltYQ== 93793 -LnVzYWdl 93794 -IG5lZ2F0aXZpdHk= 93795 -IEV4dHJlbWVseQ== 93796 -a2o= 93797 -RG93bmxvYWRlcg== 93798 -CWFjdA== 93799 -W2NoYXI= 93800 -Tm9ybWFscw== 93801 -X3JlZmVyZW5jZXM= 93802 -IGRyYWNvbg== 93803 -4bulYw== 93804 -X1RSTlM= 93805 -Y29tcGFueUlk 93806 -IFZlcmQ= 93807 -YW5pbw== 93808 -IE1hdGNoZXJz 93809 -KHJlbGF0aXZl 93810 -IHJlZWxlY3Rpb24= 93811 -LkhF 93812 -VGF1 93813 -INGB0YLRgNC+0LrQuA== 93814 -IE1ldGFscw== 93815 -IENvY2t0YWls 93816 -IGFwcmVuZGVy 93817 -X3ByZWZlcmVuY2U= 93818 -LlNjaGVtZQ== 93819 -IGdsR2V0VW5pZm9ybUxvY2F0aW9u 93820 -VXNpbmdFbmNvZGluZw== 93821 -0YDQsw== 93822 -ICJdIik7Cg== 93823 -TGVhZGVycw== 93824 -J8OqdHJl 93825 -X0RlbGF5 93826 -UHJvY2Vzc2Vz 93827 -aWN1bHR1cmU= 93828 -XCI6e1wi 93829 -4oCUIg== 93830 -RW1vamk= 93831 -LWdyb3c= 93832 -IENDRA== 93833 -Y29tcG9zZWQ= 93834 -TWFpbnRlbmFuY2U= 93835 -IFJ5emVu 93836 -KGFn 93837 -LnByb2I= 93838 -IFNpbmF0cmE= 93839 -IGhvcnJlbmQ= 93840 -IE1vdW50ZWQ= 93841 -X1BFRVI= 93842 -IGN1aw== 93843 -IHPDuGtlcg== 93844 -IFF1YXI= 93845 -X1JFU09MVVRJT04= 93846 -J2VhdQ== 93847 -IGJvdXJib24= 93848 -IGF0SW5kZXg= 93849 -L3BvbA== 93850 -IOq0gA== 93851 -CXB3 93852 -fSl9Cg== 93853 -LmZvcm1EYXRh 93854 -IHVkZW4= 93855 -IHJvYXJpbmc= 93856 -Tm90aWZpY2F0aW9uQ2VudGVy 93857 -IGNsdXN0ZXJlZA== 93858 -IHBhaXJ3aXNl 93859 -bXVsdGlsaW5l 93860 -R2FtZURhdGE= 93861 -Lkxhcmdl 93862 -KSc6 93863 -INGB0LXRgNCy0LXRgA== 93864 -IFVJTWFuYWdlcg== 93865 -U3Zj 93866 -IFBsYXlzdGF0aW9u 93867 -Lk1vcmU= 93868 -LnF1YWxpdHk= 93869 -IGNvbmZpZ0ZpbGU= 93870 -LWNvbnRhaW5pbmc= 93871 -IEdvYXQ= 93872 -ZW5jaW9u 93873 -IGxpa2VuZXNz 93874 -LXVzaW5n 93875 -IHNlYXNpZGU= 93876 -4bqpdQ== 93877 -YW50aWNpcGF0ZWQ= 93878 -Rm9sZGVycw== 93879 -LUxldmVs 93880 -b3BjaW9u 93881 -KXByZXBhcmVGb3JTZWd1ZQ== 93882 -PigpKQ== 93883 -PWFkZA== 93884 -XGdyaWQ= 93885 -IHln 93886 -X0RSSVZF 93887 -IEdldE5hbWU= 93888 -LkRBTw== 93889 -IGhhbm4= 93890 -CWNhdA== 93891 -IHZpZ24= 93892 -IEhlbGxlcg== 93893 -IENSRUFURUQ= 93894 -YmVyb3M= 93895 -YnV0dA== 93896 -IGJlbmRz 93897 -IExlZXI= 93898 -0KY= 93899 -IFNNUA== 93900 -VmVjdA== 93901 -IG9iamVjdFR5cGU= 93902 -OmFzeW5j 93903 -IGNvbXBldGVuY3k= 93904 -IFF0QXdz 93905 -TG91 93906 -L2NhdA== 93907 -UHJvc3RpdA== 93908 -LXZlcw== 93909 -CXR2 93910 -IEVJ 93911 -QW5kV2FpdA== 93912 -IFRPT0w= 93913 -fSo= 93914 -X1Jlcw== 93915 -IGFsaWdubWVudHM= 93916 -7KGw 93917 -IENsYW1w 93918 -LXBhZA== 93919 -IHdyaXRlRmlsZQ== 93920 -IEFwcHJlYw== 93921 -4oCZYXV0cmVz 93922 -dWRhZGVz 93923 -IGx1Z2FyZXM= 93924 -c3BlbmRlcg== 93925 -W2ltYWdl 93926 -RVhJU1Q= 93927 -IGRlY2VpdmU= 93928 -IGh1bnRz 93929 -X1ZPSUNF 93930 -X0RY 93931 -Q0FD 93932 -ICgoJw== 93933 -aXNrcw== 93934 -LGZpbGVuYW1l 93935 -IGxlYW5z 93936 -SW5wdXREaWFsb2c= 93937 -RGF0YUNvbnRyYWN0 93938 -IHNtb290aGVk 93939 -IHJlY3J1aXRlcnM= 93940 -IHRhbmdsZWQ= 93941 -X1RhYg== 93942 -IEZpbGVBY2Nlc3M= 93943 -WUM= 93944 -IHZY 93945 -PGR5bg== 93946 -TGV4ZXI= 93947 -IOKYhg== 93948 -IGdsR2Vu 93949 -VGVtcG9yYWw= 93950 -IEFURg== 93951 -YW5rbw== 93952 -VXNlckNvZGU= 93953 -IEtvdGxpbg== 93954 -Li4KCgoK 93955 -RU5DRUQ= 93956 -LnVudHJhY2tlZA== 93957 -X21y 93958 -IHdhdmVsZW5ndGhz 93959 -IGRpY2hv 93960 -IGltdQ== 93961 -X2NyZQ== 93962 -W0o= 93963 -X0RG 93964 -IGF0dGFpbm1lbnQ= 93965 -IGxpdGVycw== 93966 -W2tleXM= 93967 -IGxpc3Rhcg== 93968 -SHR0cHM= 93969 -IGJyZXdlcnM= 93970 -IGFjb21wYcOx 93971 -IHRvYXN0ZWQ= 93972 -LmZyaWVuZA== 93973 -IHJlbHU= 93974 -IFBzeWNoaWM= 93975 -TWFuaXA= 93976 -ZG5h 93977 -UHJp 93978 -LWZsYXNo 93979 -KGFydGlzdA== 93980 -IEtvdg== 93981 -cHJlc2VydmU= 93982 -X3BlbWI= 93983 -LnNldFByb2dyZXNz 93984 -IGR1c2s= 93985 -IGNhbm5hYmlub2lkcw== 93986 -IEt1bmQ= 93987 -IENvdW50aWVz 93988 -IO2OmOydtOyngA== 93989 -IHJlbmFtaW5n 93990 -IFJ1c3Nv 93991 -TlNTZXQ= 93992 -KEVYUFI= 93993 -5YW25LuW 93994 -RGlhZ3JhbQ== 93995 -LGxhc3Q= 93996 -KHdpdGhEdXJhdGlvbg== 93997 -IGluZGVidGVk 93998 -IERpY2tlbnM= 93999 -IEFscHM= 94000 -IERlZ3JlZXM= 94001 -aWRhcg== 94002 -LWJsb29k 94003 -K29mZnNldA== 94004 -IEh1ZA== 94005 -b3VuZGVy 94006 -dWxuZXJhYmxl 94007 -IHByaW8= 94008 -YmxpbmQ= 94009 -KHBhY2s= 94010 -IG5pZ2h0bGlmZQ== 94011 -IGlsbHVzdHJhdGluZw== 94012 -IG51dHNoZWxs 94013 -IGJyb2FkY2FzdGVycw== 94014 -IGNvbXBhbnlOYW1l 94015 -aXRvcmU= 94016 -LnJpZ2h0QmFyQnV0dG9uSXRlbQ== 94017 -Ym90ZQ== 94018 -IFBJVA== 94019 -LXNjcm9sbGJhcg== 94020 -IHdpbmR5 94021 -IFFNYWluV2luZG93 94022 -aHVl 94023 -LmVwb2No 94024 -IGNhbWVy 94025 -IENMVUI= 94026 -aWZhcg== 94027 -VW5hdmFpbGFibGU= 94028 -LXF1b3Rl 94029 -IEdyYXo= 94030 -IHZhbHU= 94031 -X01BVEVSSUFM 94032 -IHBlbnk= 94033 -IHRyYXR0 94034 -IGxpY2tlZA== 94035 -CWNhbg== 94036 -IFRhaXdhbmVzZQ== 94037 -UGFnZUluZGV4 94038 -LlRpcG8= 94039 -X1JlZA== 94040 -IHZmcw== 94041 -X3RyYW1wb2xpbmU= 94042 -IE1QUw== 94043 -IFBlYW51dA== 94044 -IExvY2tlZA== 94045 -CUFU 94046 -anNwYg== 94047 -X05PREVT 94048 -J1dl 94049 -IENvbnZlbmllbnQ= 94050 -X3N1Y2Nlc3NmdWw= 94051 -K3o= 94052 -WUxlYWY= 94053 -IHBlZGlncmVl 94054 -eHo= 94055 -IHNhbHZhcg== 94056 -X0Rlc2M= 94057 -IG5lc3Rh 94058 -IGhhcmRjb2RlZA== 94059 -LmdvbGQ= 94060 -LkltYWdlRmllbGQ= 94061 -X0JT 94062 -TEs= 94063 -Q2hvY29sYXRl 94064 -LlN0YXJ0dXA= 94065 -IGFuZWNkb3Rlcw== 94066 -Lk1h 94067 -P10= 94068 -L3RvcGlj 94069 -LlNjcm9sbEJhcnM= 94070 -0YHRgtCy0LA= 94071 -IE1PTQ== 94072 -IHFvcw== 94073 -YXJ5YW5h 94074 -w6RjaHN0 94075 -IE1jR2lsbA== 94076 -IEVEVUM= 94077 -KHBvc3Rz 94078 -IEVudHdpY2tsdW5n 94079 -X3NraWxscw== 94080 -LWd1YXJk 94081 -IHRleHRpbGVz 94082 -fHVuaXF1ZQ== 94083 -IEFyaXRobWV0aWM= 94084 -TG9hZElkZW50aXR5 94085 -KTt9Cgo= 94086 -IGFzc3VyZXM= 94087 -V2lsZGNhcmQ= 94088 -IGRlZmF1bHRlZA== 94089 -IE5vdFN1cHBvcnRlZEV4Y2VwdGlvbg== 94090 -IFRvbWF0bw== 94091 -LlN1bW1hcnk= 94092 -ISIu 94093 -dXRoZXJmb3Jk 94094 -IGxvb3Bob2xl 94095 -IGNtYWtl 94096 -LWRhdA== 94097 -IHJhZ2F6em8= 94098 -IGNhcGl0YWxz 94099 -IEltcG9ydGFuY2U= 94100 -IER1bmdlb25z 94101 -X3pvbmVz 94102 -LnNhdA== 94103 -ICAgICAgCiAgICAgIAo= 94104 -Y2F0ZWdvcmlhcw== 94105 -IGRhdGF0YWJsZQ== 94106 -IG5hamxl 94107 -KGdw 94108 -LXJlbg== 94109 -IHBhbmlja2Vk 94110 -IFNreWw= 94111 -IFFVSUNL 94112 -dmFsdWVPZg== 94113 -U3RhdGlzdGlj 94114 -IGRlbWVhbm9y 94115 -bmRlcm4= 94116 -IEFwcGVhcnM= 94117 -UHJhZ21h 94118 -X3Bhc3Q= 94119 -SGFzaHRhYmxl 94120 -IHRoYW5raW5n 94121 -LmNzcmY= 94122 -IHBhdmU= 94123 -IFZpY3RpbQ== 94124 -IFDDpQ== 94125 -Rmlyc3RuYW1l 94126 -Q0FURUdPUlk= 94127 -aWxlc3RvbmU= 94128 -JyktPl9fKCc= 94129 -IGluY2FwYWM= 94130 -U3RyZWFtV3JpdGVy 94131 -IGNvbW11bmlvbg== 94132 -X3N0ZGVycg== 94133 -6Ieq5rK7 94134 -IGh1bWFuaXRpZXM= 94135 -INC70Y4= 94136 -IFBhcmFz 94137 -bG9mZg== 94138 -SGVhZGVyVGV4dA== 94139 -Z3JlZ2F0ZWQ= 94140 -LlhSVGFibGVDZWxs 94141 -IGVudGl0eUlk 94142 -IE1hc3Rlcnk= 94143 -b2xkdA== 94144 -JykpKTsKCg== 94145 -aHVtaWRpdHk= 94146 -Li4uIik7Cgo= 94147 -RGVsdGFUaW1l 94148 -IG1rdGltZQ== 94149 -UGhvdG9u 94150 -IHBlbnNhcg== 94151 -c2NhbGluZw== 94152 -X3llbGxvdw== 94153 -X211bHRpcGx5 94154 -IFZ1bGNhbg== 94155 -IFBlYXJjZQ== 94156 -X2xj 94157 -LWV4Y2x1c2l2ZQ== 94158 -SXNVbmljb2Rl 94159 -IHBhZHI= 94160 -X1BDSUU= 94161 -IGdsaW1wcw== 94162 -IHJhbXBhZ2U= 94163 -IFBhZ2luYXRvcg== 94164 -IGNvbnZleWluZw== 94165 -bm9yZQ== 94166 -X2RldGFjaA== 94167 -J10hPSc= 94168 -IGJvbmE= 94169 -CUNvbg== 94170 -TmF6 94171 -IHNlZ3VpbnQ= 94172 -IG1pZXN6 94173 -IGVzb3M= 94174 -ICcvJykK 94175 -IGZhaXRoZnVsbHk= 94176 -IGJla29t 94177 -0LDQutGB 94178 -d2hlbG1pbmc= 94179 -LnR3bw== 94180 -IFNDRQ== 94181 -LW5h 94182 -ICgpew== 94183 -IERhbWVu 94184 -X3RndA== 94185 -YWRhbGFmaWw= 94186 -IE1NSQ== 94187 -VGhpbg== 94188 -IGRlcHJlY2lhdGlvbg== 94189 -IGFic2VudGVl 94190 -IHNhbGFyaW8= 94191 -IFNvbWVib2R5 94192 -IFNsb2Fu 94193 -IGVyZm9sZ3JlaWNo 94194 -Ok5TTG9jYWxpemVkU3RyaW5n 94195 -IGdlaMO2cnQ= 94196 -IGVtbw== 94197 -IExhZ3VuYQ== 94198 -w6FzYQ== 94199 -aXN0cmF0ZXM= 94200 -UmFpc2U= 94201 -IEFzdHJvcGg= 94202 -ICdcXCc= 94203 -X3BlZA== 94204 -IFRIUk9VR0g= 94205 -IE5pZXR6c2NoZQ== 94206 -ZW5lcmF0aW5n 94207 -b3BsYXllcg== 94208 -IHJvZGVudHM= 94209 -w7xobA== 94210 -R2FtZU1hbmFnZXI= 94211 -IEhlYWRlckNvbXBvbmVudA== 94212 -IG1pbGFu 94213 -cXVlZW4= 94214 -IFBPTEw= 94215 -IEx5bWU= 94216 -IEJyaWdncw== 94217 -ZWNlcg== 94218 -d2Fnb24= 94219 -LkRFU0M= 94220 -IGdsQmVnaW4= 94221 -U3RhdGVtZW50cw== 94222 -ZXRyaQ== 94223 -IG1vY2tlcg== 94224 -IEJsdWVwcmludFJlYWRPbmx5 94225 -L2NvbnRlbnRhc3Npc3Q= 94226 -ZW1hYWt0 94227 -L2xvYWRlcg== 94228 -X2xvd2VyY2FzZQ== 94229 -Y2l2aWw= 94230 -X3ZhbG9y 94231 -X0dsb2JhbA== 94232 -IGFkcg== 94233 -aXRpemVu 94234 -LlNpZGU= 94235 -IEVtYmxlbQ== 94236 -IHRoaXJkcw== 94237 -X1NIQVBF 94238 -UmVncmVzc29y 94239 -UFlUSE9O 94240 -IHBzeWNob3RpYw== 94241 -IGN2cw== 94242 -IEFwcGxpY2F0aW9uVXNlcg== 94243 -IGFsdW5vcw== 94244 -VG9nZ2xlQnV0dG9u 94245 -IG5nYQ== 94246 -IG3Do2U= 94247 -YWR2ZXJ0aXNlbWVudA== 94248 -5YiG5Lqr 94249 -Lm92 94250 -IEFPTA== 94251 -UkVX 94252 -INin2LPYqg== 94253 -IEdpbm55 94254 -IC8vLy8vLy8vLy8= 94255 -U29uZ3M= 94256 -YWNpYw== 94257 -Q01Q 94258 -IHJlY29nbml6ZXI= 94259 -IHDDq3I= 94260 -RElD 94261 -O1wiPg== 94262 -IGNsb3Q= 94263 -OkV2ZW50 94264 -LlRP 94265 -IEN1cnNvcnM= 94266 -XFN0b3JhZ2U= 94267 -IElvbmljUGFnZQ== 94268 -X2pldA== 94269 -KEJpdENvbnZlcnRlcg== 94270 -IGNoaWxkaXNo 94271 -VHJhZGVy 94272 -PEhUTUxJbnB1dEVsZW1lbnQ= 94273 -X0ZSRVFVRU5DWQ== 94274 -PSI7Cg== 94275 -eXN0YWNr 94276 -SnVy 94277 -IOmU 94278 -IHRjYg== 94279 -IHJlY2liaXI= 94280 -LnN6 94281 -IO2BtOuemOyKpA== 94282 -UEVSU09O 94283 -bm92YQ== 94284 -IGNvZXI= 94285 -IE1haG1vdWQ= 94286 -IFdvcmtwbGFjZQ== 94287 -IiIiKSwK 94288 -LlBhZ2VTaXpl 94289 -Z2V0Um9vdA== 94290 -KGJhc2VVcmw= 94291 -W1U= 94292 -IE1DUw== 94293 -IENsYXJrc29u 94294 -LnZvbA== 94295 -ICIifQo= 94296 -IHBldXg= 94297 -IFByb2R1Y3RTZXJ2aWNl 94298 -IG1vbmRheQ== 94299 -IFRlc3REYXRh 94300 -IE1hdWw= 94301 -IHN0cm5jbXA= 94302 -IHNob3BwZXI= 94303 -dGhlb3J5 94304 -IGV0aXF1ZXR0ZQ== 94305 -bGljZW5jZQ== 94306 -c2NhbA== 94307 -LWNsdXN0ZXI= 94308 -IGhpc3TDs3JpYQ== 94309 -IFN1YnRyYWN0 94310 -IGZpYmVyZ2xhc3M= 94311 -X2xhc3RuYW1l 94312 -IFJld3JpdGU= 94313 -L3RvZG8= 94314 -IG92ZXJmbG93aW5n 94315 -IEdhdXNz 94316 -b2theQ== 94317 -IGNsdW1zeQ== 94318 -KHh5 94319 -IGV4ZW1w 94320 -YW5hbHl6ZQ== 94321 -LXRpY2tldA== 94322 -bmluZQ== 94323 -IERlYWRwb29s 94324 -IGNvbHVt 94325 -IEpL 94326 -IFtdLA0K 94327 -IEFzcGVu 94328 -IG1hbGlnbmFudA== 94329 -aMO1ZXM= 94330 -U2NhbGE= 94331 -aW5uZQ== 94332 -IENPTlNUQU5UUw== 94333 -X1ByaWNl 94334 -IyUl 94335 -IGFyc2No 94336 -IE5TQXR0cmlidXRlZFN0cmluZw== 94337 -IEZpbGVUeXBl 94338 -YWxsb2NhdGlvbg== 94339 -X3Npbmd1bGFy 94340 -KFBvaW50ZXI= 94341 -YW5uaWVz 94342 -U3RvcmVk 94343 -ICc7Cgo= 94344 -4oCZZXg= 94345 -ZHJz 94346 -QnJpZ2h0bmVzcw== 94347 -L09S 94348 -VGV4dGJveA== 94349 -IGtuYWNr 94350 -IGplbmlz 94351 -IG9jYXM= 94352 -ZGF0YXA= 94353 -IGdhbWVUaW1l 94354 -IOCw 94355 -bmR4 94356 -IEVWVA== 94357 -QnlUZXh0 94358 -IGF0dHJpYnV0ZU5hbWU= 94359 -IGp1Z2Fy 94360 -X3NlcXM= 94361 -IEZFQVRVUkVT 94362 -OmRhdGU= 94363 -ZmJl 94364 -cmlwcGVy 94365 -56iN 94366 -LkV4cHI= 94367 -VXJiYW4= 94368 -aWRvdA== 94369 -IG9ibGl2aW91cw== 94370 -KERiQ29udGV4dA== 94371 -Q2Fyb2w= 94372 -KCcsJywk 94373 -IEJyaWxsaWFudA== 94374 -a2Fk 94375 -Y2VudHJhdGlvbg== 94376 -IGt1aw== 94377 -IE1BTkFHRU1FTlQ= 94378 -X1dFQVBPTg== 94379 -IGppaGFkaXN0cw== 94380 -IGVudHJlZw== 94381 -IGRvxJ8= 94382 -IGFwcGVuZGluZw== 94383 -IFpp 94384 -X2N0eHQ= 94385 -IHF1YWRyYW50 94386 -ZWxlbWVudFR5cGU= 94387 -PWltZw== 94388 -YnJ1YXI= 94389 -SUNBU1Q= 94390 -IGludGVsbGVjdHVhbGx5 94391 -LkFubm90YXRpb24= 94392 -IGNhbXBhaWduZXJz 94393 -LkRhdGFHcmlkVmlld0F1dG9TaXpl 94394 -IMWfZWs= 94395 -IC9eKA== 94396 -LkRhdGFUYWJsZQ== 94397 -IHdlYmxvZw== 94398 -KGxpYnJhcnk= 94399 -IEZ1cw== 94400 -IE9TVA== 94401 -X1Bhc3N3b3Jk 94402 -IEJ1Y2tsZXk= 94403 -aG9mZg== 94404 -QWxpZ25lZA== 94405 -X1JlYWw= 94406 -RU5USUM= 94407 -L2dyYXBocWw= 94408 -IFdlZWQ= 94409 -IExTQg== 94410 -b2NjYXNpb24= 94411 -YWRkYWZp 94412 -TGV0cw== 94413 -KCJg 94414 -IHdpZGVu 94415 -KHZpc2l0b3I= 94416 -ICJcCg== 94417 -QU5URQ== 94418 -LWNhbXB1cw== 94419 -LUJhcg== 94420 -Y2FtZWw= 94421 -Rm10 94422 -OmRlc2NyaXB0aW9u 94423 -LmFyZQ== 94424 -IEFuYXN0 94425 -IExvbmdlcg== 94426 -c2VyaW91cw== 94427 -IGRhaGVy 94428 -aXp6ZXI= 94429 -TXVsdGlwbGljaXR5 94430 -IEhvbGxhbmRl 94431 -IEFubm90YXRpb25z 94432 -KCk/ 94433 -IHByb3Rlc3Rlcg== 94434 -IFVyZHU= 94435 -IHNwZWNpYWx0aWVz 94436 -X2x5 94437 -Q2Fk 94438 -YW5udA== 94439 -anNw 94440 -IGpvZQ== 94441 -KXI= 94442 -IFBlcnNpc3Q= 94443 -IG9ibA== 94444 -IGRlYWRsb2Nr 94445 -IHNlcmk= 94446 -UmVsYXRpdmVUbw== 94447 -IFl1cw== 94448 -KFByaW50 94449 -YWJpbGlh 94450 -IHVucHJvdGVjdGVk 94451 -IEFTSUM= 94452 -Lk5vbWU= 94453 -IFdlYkNsaWVudA== 94454 -IElUVg== 94455 -w7xybmJlcmc= 94456 -aXRvcmk= 94457 -U2lnbmluZw== 94458 -IFJlYWRvbmx5 94459 -IGVsZHJl 94460 -IENoZWNrZWQ= 94461 -YWxudW0= 94462 -U291cmNlVHlwZQ== 94463 -bGV4aWNhbA== 94464 -IGlsbHVzdHJhdG9y 94465 -IERpcmVjdG9yYXRl 94466 -IFRyb20= 94467 -bXBw 94468 -bG9nZw== 94469 -Lmluc3RydW1lbnQ= 94470 -IHdvb2RlZA== 94471 -IFVzZXJUeXBl 94472 -IFJlbmNvbnRyZXM= 94473 -bW9kZWxOYW1l 94474 -QlRUYWdDb21wb3VuZA== 94475 -PlRv 94476 -IGZyZWV6ZXM= 94477 -IENvbnRl 94478 -IENyZWRlbnRpYWw= 94479 -Y2FsYQ== 94480 -L3dvcmtzcGFjZQ== 94481 -IGxpYmlkbw== 94482 -Y2hsdXNz 94483 -b2xsZXlFcnJvcg== 94484 -IGFjY2lvbmVz 94485 -IEppbnBpbmc= 94486 -YXTDqWc= 94487 -SW50ZXJzdGl0aWFs 94488 -KSkpKSk7DQo= 94489 -eWJyaWQ= 94490 -IFJvbGxlZA== 94491 -TW9kZWxDcmVhdGluZw== 94492 -IFJlZmxleA== 94493 -IEx1Y2lmZXI= 94494 -IGVoZXI= 94495 -IGNhcm5pdmFs 94496 -ISI7DQo= 94497 -X0xPT0tVUA== 94498 -IHN1Y2PDqHM= 94499 -IHJlb3BlbmluZw== 94500 -IGNyZWFkbw== 94501 -IFNteQ== 94502 -IEVudHM= 94503 -LlNpbmNl 94504 -IEZpc2hlcmllcw== 94505 -L2Nvbm5lY3Rpb24= 94506 -IENTQQ== 94507 -INC/0YDQvtCz0YDQsNC80Lw= 94508 -bHNydWhl 94509 -CWFjdG9y 94510 -IFN0cmF1c3M= 94511 -SnNvblZhbHVl 94512 -CWV2YWw= 94513 -bG9ja2Vy 94514 -IFhJVg== 94515 -X2h5cGVy 94516 -IFBvbGx5 94517 -4oCmdGhl 94518 -IEdVUkw= 94519 -0LXRgdGB 94520 -IGRpdmVz 94521 -dWdlb3Q= 94522 -aW5lbWE= 94523 -YmVyc29tZQ== 94524 -Q29tcHJh 94525 -LWN1bHR1cmFs 94526 -IGdyYW5kcw== 94527 -U2Fj 94528 -IEJhcm5leQ== 94529 -X1FVRVNUSU9O 94530 -IG1hbWFu 94531 -IGhhc3RpbHk= 94532 -IGNsdWJob3VzZQ== 94533 -IGdydW5k 94534 -X1dBTEw= 94535 -IHB1cmlmaWNhdGlvbg== 94536 -hOS7tg== 94537 -0LLQsA== 94538 -dmVzdG1lbnQ= 94539 -LkRpc3BsYXlTdHlsZQ== 94540 -X2NvcmVz 94541 -JVM= 94542 -IG9zw7Ni 94543 -IGRpc2I= 94544 -IEZyYW5raWU= 94545 -IGluZGlzY3JpbQ== 94546 -X0JlZ2lu 94547 -KGVy 94548 -O28= 94549 -44Oz44Kw 94550 -bm9kZU5hbWU= 94551 -IHJlZnVuZGVk 94552 -IGRpc21hbA== 94553 -IEh1ZmZQb3N0 94554 -IHVuZGVjaWRlZA== 94555 -d3JpdGVsbg== 94556 -a8Ozdw== 94557 -IEJvc2U= 94558 -CWxpYg== 94559 -b3BsYW4= 94560 -aW50ZXJwcmV0ZWQ= 94561 -IE1PTkVZ 94562 -dXZv 94563 -IG50b2hz 94564 -aXNldW0= 94565 -Pmo= 94566 -IHVuZml0 94567 -IGh1Z2dlZA== 94568 -IEplc3Q= 94569 -bXBz 94570 -IGJyb20= 94571 -J28= 94572 -IGZvdg== 94573 -IFNocmluZQ== 94574 -IEVJVEhFUg== 94575 -eWNhc3RsZQ== 94576 -IHNhdHVy 94577 -cmVxdWVzdERhdGE= 94578 -W2Rpcg== 94579 -T1VDSA== 94580 -X0Rv 94581 -IHlvbA== 94582 -IGluaXRpYWxWYWx1ZXM= 94583 -W3ZlcnRleA== 94584 -c2VydmljZU5hbWU= 94585 -LnNhbGFyeQ== 94586 -IEF1dGhlbnRpY2F0ZQ== 94587 -6L6+ 94588 -X1ZMQU4= 94589 -KFtdKTsKCg== 94590 -IFNlcnVt 94591 -UGF0aFBhcmFt 94592 -Zm9ybXVsYXJpbw== 94593 -IHN1bW1hcml6ZXM= 94594 -T0NS 94595 -b3JhbQ== 94596 -TERBUA== 94597 -Ymlj 94598 -cGlja2Vk 94599 -LXRoYXQ= 94600 -IGNkcw== 94601 -CWFuaW0= 94602 -IGludHJpYw== 94603 -IFdvcnQ= 94604 -IFZMQw== 94605 -IFNoaWl0ZQ== 94606 -U3R1ZGllcw== 94607 -LmRpc3BhdGNoZXI= 94608 -KGVuYWJsZQ== 94609 -Lm1peGlu 94610 -IFNleW1vdXI= 94611 -IGJpb21lZGljYWw= 94612 -IFNwb29u 94613 -IE5vcnNl 94614 -IGludGVudHM= 94615 -IMOpcXVpcA== 94616 -IERyZXNzZXM= 94617 -TFBBUkFN 94618 -LnNldFJlc3VsdA== 94619 -LmRlbGV0ZUJ5SWQ= 94620 -IG5ld2ZvdW5k 94621 -IE9TRA== 94622 -b3VzeQ== 94623 -IGVzdGFkb3M= 94624 -W0J5dGU= 94625 -Q2h1Y2s= 94626 -Lm9uVmlld0NyZWF0ZWQ= 94627 -IENvbnRyaWJ1dGlvbg== 94628 -X0VuYw== 94629 -SU5FVA== 94630 -IGZsYXZvcmZ1bA== 94631 -IOOCog== 94632 -dmlzYQ== 94633 -IEhlcmN1bGVz 94634 -LmdldEFwcA== 94635 -IFlvaw== 94636 -Lk1haW5BY3Rpdml0eQ== 94637 -KS5b 94638 -IGxhdXQ= 94639 -SW52aXRl 94640 -IENodXJjaGVz 94641 -LCcj 94642 -2YrYsQ== 94643 -KFNT 94644 -IHZlbmRh 94645 -YXNqb24= 94646 -LklOVEVS 94647 -aXBoZXJ5 94648 -KFN5bnRheA== 94649 -b25kcm91cw== 94650 -CWNlbnRlcg== 94651 -QnJhY2tldEFjY2Vzcw== 94652 -IENhcGNvbQ== 94653 -LmdldEZvbnQ= 94654 -IFZhdWx0cw== 94655 -IGRpc2XDsWFkb3I= 94656 -Om8= 94657 -KHNoZWxs 94658 -IGVDb21tZXJjZQ== 94659 -IGFsdHJl 94660 -X2F0dGFjaGVk 94661 -IGlzcg== 94662 -IG9idGFpbnM= 94663 -LkNvbnRleHRDb21wYXQ= 94664 -IGF0dGVuZGVl 94665 -IFR3aWNl 94666 -IE1vb2Q= 94667 -6YKu566x 94668 -bm9kb2M= 94669 -IFBJWEk= 94670 -c29mYXI= 94671 -IEJsb29keQ== 94672 -LkNvbXBsZXRl 94673 -IEJFUg== 94674 -IGdldENhdGVnb3J5 94675 -IGRpc3F1YWxpZmllZA== 94676 -X1RydWU= 94677 -J2Vy 94678 -LXRvbw== 94679 -IGh5cGVybGluaw== 94680 -X21heGltdW0= 94681 -TmVhbA== 94682 -IHBJbmZv 94683 -LmdldEVsZW1lbnRzQnlOYW1l 94684 -c2NoZWR1bGVk 94685 -cGF5ZXI= 94686 -CXZlcmlmeQ== 94687 -LWVudGl0eQ== 94688 -bWV0YXRhYmxl 94689 -YmlsZHVuZw== 94690 -IGRlbHRhWA== 94691 -ZW1wbGFjZQ== 94692 -IHJldmVydGVk 94693 -cmVwaWQ= 94694 -bGVhcm5lcg== 94695 -fSkpCgo= 94696 -dWNvc2U= 94697 -IHJpY28= 94698 -IGJhbmdlZA== 94699 -IEFmcm8= 94700 -KGluZXJ0aWE= 94701 -YW5zYQ== 94702 -IMOkdmVu 94703 -S2FyZW4= 94704 -IHN1cGVyc3Q= 94705 -IGZydWl0aW9u 94706 -b3RjaA== 94707 -IFBheXM= 94708 -UmVzaWRlbnRz 94709 -IHByaXNt 94710 -Jik7Cgo= 94711 -Lmptcw== 94712 -IFNsdWc= 94713 -PScnKQ== 94714 -IGd1dGVu 94715 -IFNwaWVsYmVyZw== 94716 -IFRGb3Jt 94717 -KGJlZm9yZQ== 94718 -IEZpbml0ZQ== 94719 -5paw5aKe 94720 -IG1laWxsZXVyZQ== 94721 -0L/QuNGB0LDQvdC40LU= 94722 -X0Vycg== 94723 -LWZ0 94724 -bmFubw== 94725 -LkFkZHI= 94726 -IC8vDQoNCg== 94727 -IEpvbmFo 94728 -IERpc2Nv 94729 -IGx1bmNoZXM= 94730 -IERGQQ== 94731 -ZXhwbGljaXQ= 94732 -XSc7Cg== 94733 -IHJlZmluZXJ5 94734 -IFN0cmluZ1R5cGU= 94735 -dW5zcXVlZXpl 94736 -IExpa2VseQ== 94737 -V3JpdGVz 94738 -LmJwbQ== 94739 -IHBJdGVt 94740 -b3Vuc2Vs 94741 -U3RhbmRpbmc= 94742 -IGNob2tlZA== 94743 -IGFuc2No 94744 -dXBpbA== 94745 -IERlYnVnZ2Vy 94746 -4qCA4qCA 94747 -PEdyb3Vw 94748 -IFNjYWxpYQ== 94749 -IHN1YnN0aXR1dGlvbnM= 94750 -IGNsaW1iZXJz 94751 -ICopIg== 94752 -IG5hbm9wYXJ0aWNsZXM= 94753 -IEFQUFJP 94754 -IHB1cmNoYXNlcnM= 94755 -IFFUZXN0 94756 -IEF3YWtlbmluZw== 94757 -CVNlcmlhbA== 94758 -LnJlcGFpbnQ= 94759 -IHNhdm9yeQ== 94760 -IHBvcm91cw== 94761 -IGFWYXI= 94762 -IFN1YXJleg== 94763 -LUVhc3Q= 94764 -Qm94ZXM= 94765 -IFdlaW5lcg== 94766 -IENSQQ== 94767 -IOqwkuydhA== 94768 -IHhsaW0= 94769 -Ij8KCg== 94770 -IHdhc2hpbmd0b24= 94771 -7Jq0 94772 -IHRvdGFsZW1lbnQ= 94773 -X210aW1l 94774 -LnNldFNjZW5l 94775 -IGxsYW1h 94776 -IGNibw== 94777 -ZWZk 94778 -IHVuZGVycmF0ZWQ= 94779 -cmFpc2luZw== 94780 -IE5BVElPTkFM 94781 -ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCg== 94782 -b3B0aWM= 94783 -aWRlYXM= 94784 -IOaPkA== 94785 -IGxhaw== 94786 -ISEs 94787 -IGtvbW0= 94788 -cGFyYWd1cw== 94789 -U2l0ZXM= 94790 -IHN0cmVzc2luZw== 94791 -IE1hdEJ1dHRvbk1vZHVsZQ== 94792 -IENvbnZlcnRlZA== 94793 -YW5hbWU= 94794 -X1JFQURPTkxZ 94795 -XT0+ 94796 -IGJvcmRlbA== 94797 -IGJpYmxpb2dyYXBoeQ== 94798 -IGdyaWRDb2x1bW4= 94799 -IGpvdXJuYWxpc3RpYw== 94800 -7J6E 94801 -IHJhc3BiZXJyeQ== 94802 -c3RpY2U= 94803 -IGFicmFzaXZl 94804 -IERCSGVscGVy 94805 -IGludGY= 94806 -IFJUQlU= 94807 -fSciLA== 94808 -IEhhbw== 94809 -c3dhbmE= 94810 -IGphbnZpZXI= 94811 -IGluc3RpdHV0ZXM= 94812 -IFNlYmFzdA== 94813 -X0NPTFM= 94814 -IGZpZ3VyYQ== 94815 -IFp1c3Q= 94816 -Zm95 94817 -PigpKTsKCg== 94818 -IExpZWJl 94819 -QWdlbmN5 94820 -IOyLnOyekQ== 94821 -IFRodW1ibmFpbHM= 94822 -dGV4dFRoZW1l 94823 -IGVjaG9pbmc= 94824 -ZW1wZXJhdHVyZQ== 94825 -IGZpcmVwb3dlcg== 94826 -ZWRi 94827 -OicpOwo= 94828 -w6lnb3I= 94829 -L2ZlZWQ= 94830 -IGh1cmw= 94831 -LWF2YWlsYWJsZQ== 94832 -IFJlbmRlcnM= 94833 -IGZkcw== 94834 -IEpTR2xvYmFs 94835 -IENpdGl6ZW5zaGlw 94836 -a2llZ28= 94837 -U3RhbmRhcmRJdGVt 94838 -LnBsYWNlcw== 94839 -IHNjYWxhYmlsaXR5 94840 -IFRyYWlscw== 94841 -Zm9sbG93ZXI= 94842 -IHNlcnZpw6dvcw== 94843 -ID8+Ii8+Cg== 94844 -W21ldGhvZA== 94845 -KGli 94846 -IHJpZGljdWxl 94847 -IGFkYXB0YWJsZQ== 94848 -ZmlsdHJv 94849 -IGtldG9nZW5pYw== 94850 -LkltYWdlVHJhbnNwYXJlbnRDb2xvcg== 94851 -IENGTw== 94852 -IFBFRA== 94853 -ICIiKTs= 94854 -b2dsb2Jpbg== 94855 -W3NpemVvZg== 94856 -QnJhbmRvbg== 94857 -LlRvU2hvcnQ= 94858 -IG5pxbw= 94859 -IFRFUk1JTg== 94860 -LmdldFN0YXR1c0NvZGU= 94861 -IGRlYnRvcg== 94862 -IENPTlNUUkFJTlQ= 94863 -CXNpZGU= 94864 -IERvbWlubw== 94865 -0YLQvtC8 94866 -IGdsYWNpZXI= 94867 -IGdyb3U= 94868 -enA= 94869 -IENhcmxh 94870 -LUZlYg== 94871 -UGVs 94872 -LnJlYWRWYWx1ZQ== 94873 -Y2xpbWF0ZQ== 94874 -IHRpbGVTaXpl 94875 -LnRyaXA= 94876 -RU5URQ== 94877 -IGNodWJieQ== 94878 -IGltcG9zaXRpb24= 94879 -TE9XRVI= 94880 -LmJ5SWQ= 94881 -Lkxvb2tBbmRGZWVs 94882 -YXJpaA== 94883 -LmZpbmRCeUlkQW5kVXBkYXRl 94884 -IFN0b3JlZA== 94885 -IGJvdXJnZW9pc2ll 94886 -SFRUUFJlcXVlc3RPcGVyYXRpb24= 94887 -IHN1Y2tlcg== 94888 -LmRlcXVldWU= 94889 -bGlja2Vu 94890 -IHN1YnJhbmdl 94891 -X01FRElVTQ== 94892 -SXNsYW0= 94893 -IFNwYXJrcw== 94894 -77yaJQ== 94895 -aW1wb3J0ZQ== 94896 -IGAt 94897 -IGpveXM= 94898 -Z3JvdXBpZA== 94899 -Rmx5aW5n 94900 -CWJz 94901 -Z3Jvc3M= 94902 -IEZpZXN0YQ== 94903 -IGNzdA== 94904 -IGFmaWNpb24= 94905 -b3Bob24= 94906 -X0NJ 94907 -am4= 94908 -QmVhdXR5 94909 -IHNjZQ== 94910 -IGNyYWNrZXJz 94911 -YXBr 94912 -IGdvcmQ= 94913 -IHByZXRleHQ= 94914 -IFtc 94915 -IENhbmRpZA== 94916 -R29hbHM= 94917 -QWN0aW9uVHlwZXM= 94918 -LG51bWJlcg== 94919 -IHBvcHVsYWNl 94920 -IGVudHJlbg== 94921 -IEF1dG9m 94922 -6Zmi 94923 -QmFzZUNvbnRleHQ= 94924 -QmFsYW5jZXI= 94925 -KEJvcmRlcg== 94926 -IG1pbmNlZA== 94927 -cmVjYWxs 94928 -Y2Jh 94929 -IGFwcHJvdmVz 94930 -IEtsb3Bw 94931 -ZXJtaW50 94932 -X2Zyb250ZW5k 94933 -ZXNjbw== 94934 -IG5pbmV0ZWVu 94935 -RHJpdmluZw== 94936 -IFhWSQ== 94937 -IFRhY3RpY3M= 94938 -IHByb2dyYW1hcw== 94939 -aWVzZW4= 94940 -TW92 94941 -ZGlldA== 94942 -YXV0w6k= 94943 -KCIuIik= 94944 -IGdvdmVybm8= 94945 -X0FuZA== 94946 -L21pdA== 94947 -IGNhZmV0ZXJpYQ== 94948 -LXRyYWNraW5n 94949 -IGNvbW11dGluZw== 94950 -LnVua25vd24= 94951 -X3R5cGVvZg== 94952 -IFNTQQ== 94953 -UFJPVE8= 94954 -Lk1lcmdl 94955 -IGZvckNlbGxSZXVzZUlkZW50aWZpZXI= 94956 -IFNhdGlzZmFjdGlvbg== 94957 -ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 94958 -SU1QTElFRA== 94959 -IFJlc3RyaWN0ZWQ= 94960 -IE1hZ251bQ== 94961 -0L3QvtC8 94962 -S2Fuc2Fz 94963 -YXlsaWdodA== 94964 -IFRvd2FyZHM= 94965 -IFRvbWU= 94966 -IFRlbmRlcg== 94967 -X2RlcHQ= 94968 -LmNydA== 94969 -dHJlY2h0 94970 -U1RPTkU= 94971 -IGVtcHRpZWQ= 94972 -ICcpOwoK 94973 -4LiB4Liy4Lij 94974 -0Y/RgtGM 94975 -bGVjaw== 94976 -IFt+LA== 94977 -LmV4cGlyZXM= 94978 -IFRpZw== 94979 -IElyb25pY2FsbHk= 94980 -CUxM 94981 -Lk5vdE5pbA== 94982 -IOWKoA== 94983 -IEdvdmVy 94984 -IFBlcnNwZWN0aXZlcw== 94985 -IERWUg== 94986 -IGxva2FsZQ== 94987 -IHJlc2VuZA== 94988 -IGRvdWJseQ== 94989 -IGNvbXVuaWRhZA== 94990 -IEFzc2VtYmx5Q29tcGFueQ== 94991 -KHR1cm4= 94992 -IHN1Ymxpc3Q= 94993 -IGVuZG9yc2VtZW50cw== 94994 -X1JFR0lTVFJZ 94995 -ISIpDQo= 94996 -KTs7Cg== 94997 -IGdhbnpl 94998 -IEhhcm5lc3M= 94999 -X21hdGNoZWQ= 95000 -5L6h 95001 -4oCiCgo= 95002 -Q2hlZg== 95003 -CUluaXRpYWxpemU= 95004 -KTsiPgo= 95005 -IEZhcmFnZQ== 95006 -cmlzaA== 95007 -YWx0ZXQ= 95008 -RGVhbGVy 95009 -LkxvZ1dhcm5pbmc= 95010 -KGFmdGVy 95011 -IEdhcnRlbg== 95012 -IGV4cGxvZGVz 95013 -LkNMQVNT 95014 -IHVzZVJvdXRlcg== 95015 -LUxh 95016 -IHNhZGRlbmVk 95017 -YXJvdg== 95018 -VG9VcGRhdGU= 95019 -IOae 95020 -cGlp 95021 -JwoKCgo= 95022 -IFRSQU5TQUNUSU9O 95023 -b25nYQ== 95024 -bG9nYW4= 95025 -Q3Jvdw== 95026 -IGJyaXRpc2g= 95027 -IENvbnRlbnRWaWV3 95028 -X0JC 95029 -b2x2ZW5jeQ== 95030 -bG9hZE1vZGVs 95031 -VE9PTFM= 95032 -aGV0ZW4= 95033 -X25o 95034 -QUJM 95035 -LXZlcnM= 95036 -QXJlbmE= 95037 -LnNpbmdsZXRvbkxpc3Q= 95038 -KHBhdA== 95039 -CW5hbWVz 95040 -KHNx 95041 -IHZhbG9yZQ== 95042 -JHJlcQ== 95043 -IGFudGhyb3BvbG9neQ== 95044 -VGhpbmtpbmc= 95045 -IG1pc2NoaWVm 95046 -IGFyY2hpdmFs 95047 -4KS5 95048 -LlNldFRvb2xUaXA= 95049 -cHJhcg== 95050 -YW5qYQ== 95051 -IGZpcnN0bHk= 95052 -CWxpZ2h0 95053 -LS0s 95054 -IFNwZWFycw== 95055 -IG9nbA== 95056 -c3RlZW4= 95057 -aW1wbGVtZW50cw== 95058 -cmlzdHM= 95059 -K0U= 95060 -IEJhbnM= 95061 -IGZhc3RiYWxs 95062 -IEhlcm1lcw== 95063 -dmVsZWQ= 95064 -dHdlbnR5 95065 -IG5lY2VzaXRh 95066 -IE1vcm9jY2Fu 95067 -aXNMb2dnZWRJbg== 95068 -Q0xPQ0tT 95069 -LkFic3RyYWN0aW9ucw== 95070 -LlBhY2tldA== 95071 -IG1lbmFjaW5n 95072 -LXZlc20= 95073 -IExpdmluZ3N0b24= 95074 -IG9jaQ== 95075 -IGV4dHJhZGl0aW9u 95076 -ICQoJA== 95077 -IExvY2tlcg== 95078 -IFJlYmVsbGlvbg== 95079 -IG1peGlucw== 95080 -Y3RhbA== 95081 -L3JmYw== 95082 -IFNHRA== 95083 -LGlkeA== 95084 -IGJsZWlidA== 95085 -KFwk 95086 -IHBldGVy 95087 -IGJhcnJlbg== 95088 -IHBob3NwaG9yeQ== 95089 -IGdvZ2dsZXM= 95090 -LmhvbQ== 95091 -QGQ= 95092 -PSct 95093 -LmlzVXNlcg== 95094 -YWthc2g= 95095 -X2h1Yg== 95096 -aXBlbGluZXM= 95097 -IEB9 95098 -LnN1cm5hbWU= 95099 -SW50ZXJvcA== 95100 -IGluRmlsZQ== 95101 -IGVzcGVjaWFsbWVudGU= 95102 -IGF1dG9ub20= 95103 -IFphbWJpYQ== 95104 -X0NPVU5UUlk= 95105 -PENvdXJzZQ== 95106 -aWRlb2dyYXBoaWM= 95107 -IENhbWVyb29u 95108 -ZmluZEJ5SWQ= 95109 -KSIu 95110 -IERlcGVuZHM= 95111 -cml0b3M= 95112 -Lk91cg== 95113 -IHN1YnNpZGl6ZWQ= 95114 -JywnIis= 95115 -IGdsZWFu 95116 -IEFzc2VtYmx5Q29weXJpZ2h0 95117 -cGljYWJsZQ== 95118 -IHVud2l0dGluZw== 95119 -IG9tZGF0 95120 -IEVhc2U= 95121 -IGVtYm9kaWVz 95122 -KHBEWA== 95123 -IFZvdGVy 95124 -QXNzaWduZWQ= 95125 -cmV2ZWFs 95126 -IGZlbmQ= 95127 -KHBhcnNlRmxvYXQ= 95128 -IGRwcw== 95129 -dHBsaWI= 95130 -YXNzZXJ0Q291bnQ= 95131 -eG1heA== 95132 -VW51c2Vk 95133 -KGZi 95134 -IHN1Ym1pdHM= 95135 -IFJlcGxpY2E= 95136 -KGR5 95137 -IGJhbmRl 95138 -LnNlbWFudGlj 95139 -IHNlYXJjaFN0cmluZw== 95140 -IFNhbmZvcmQ= 95141 -CWZ1bGw= 95142 -cHJt 95143 -X3V0aWxpdGllcw== 95144 -VU5VU0VE 95145 -IHNjYW5uZXJz 95146 -IGJmZA== 95147 -Lk9yZ2FuaXphdGlvbg== 95148 -LWN1cg== 95149 -UmFpbA== 95150 -IHhueHg= 95151 -JSk7Cg== 95152 -IG92ZXJwb3N0aW5n 95153 -VmlldA== 95154 -IHRhcGVyZWQ= 95155 -IGNhbWVv 95156 -IFZpZXdpbmc= 95157 -IGRpc21hbnRsZQ== 95158 -IGZpc3M= 95159 -IFNlbnRyeQ== 95160 -aGVhdG1hcA== 95161 -IMOhcmVhcw== 95162 -IEdyw7w= 95163 -IGppZw== 95164 -LmNsZWFyUmVjdA== 95165 -ZXZlbnRUeXBl 95166 -IHR1cmJ1bGVuY2U= 95167 -Y2tpbGw= 95168 -LkZvY3VzZWQ= 95169 -IGludGVybWVkaWFyeQ== 95170 -IE9iZXNpdHk= 95171 -YXRlZ28= 95172 -bW9udG8= 95173 -IEFsYW1vZmlyZQ== 95174 -IFNoZWlsYQ== 95175 -IENPTExFQ1RJT04= 95176 -Q2FyZEJvZHk= 95177 -IEhhYml0 95178 -UExBTg== 95179 -LnZpc3VhbGl6YXRpb24= 95180 -JSkuCgo= 95181 -IEludGVsbGlK 95182 -IEdsb3Zlcg== 95183 -LnNwYXRpYWw= 95184 -IGdyZWV0aW5ncw== 95185 -IE9wZW5GaWxlRGlhbG9n 95186 -ey8q 95187 -IFTDqWzDqQ== 95188 -IEVm 95189 -ICJbJQ== 95190 -IG1hZ2lzdHJhdGU= 95191 -IExpdGVjb2lu 95192 -IFNlbGU= 95193 -IGNvbW1lcmM= 95194 -cHJpbnR3 95195 -bmV4dEludA== 95196 -LmdldENoaWxkQXQ= 95197 -IEdldEN1cnJlbnQ= 95198 -IGV1cm9ww6k= 95199 -IEFJUw== 95200 -ZXR0ZW4= 95201 -LkV2ZW50UXVldWU= 95202 -YW5mb3Jk 95203 -dW5ha2Fu 95204 -LnNldE91dHB1dA== 95205 -IGNtZGxpbmU= 95206 -LGdldA== 95207 -IEhlYXJk 95208 -LmNvbnRlbnRUeXBl 95209 -ZW1k 95210 -IFJldG9ybmE= 95211 -YWNk 95212 -IFBsYXlvZmY= 95213 -YWNtYW4= 95214 -LndlYnNvY2tldA== 95215 -Q2xpZW50SWQ= 95216 -LmV4YW0= 95217 -IGF0dGVudWF0aW9u 95218 -LnNldENoYXJhY3Rlcg== 95219 -CUNvbGxlY3Rpb24= 95220 -5rCX 95221 -IHByZWRpY3RvcnM= 95222 -IFNoZXJpZGFu 95223 -cmltaW5hdG9y 95224 -KFN0YWNr 95225 -X1BLRw== 95226 -PScnKToK 95227 -KHBhZA== 95228 -IE5vZG8= 95229 -IGludGVyb3Blcg== 95230 -IFRyYW5zcGFyZW5jeQ== 95231 -CWR4 95232 -emVt 95233 -IHByYXRpcXVl 95234 -IGZpYnI= 95235 -KCk/Owo= 95236 -X01PQklMRQ== 95237 -LlJFRw== 95238 -X1lFTExPVw== 95239 -VGl0YW4= 95240 -JykKCgoK 95241 -IGNvbXBvbmVudE5hbWU= 95242 -IENvb2xlcg== 95243 -aXNGdW5jdGlvbg== 95244 -LmZlZWRiYWNr 95245 -IHBlcmZlY3RlZA== 95246 -IHBhZWQ= 95247 -LXNjcmlwdHM= 95248 -U3VzcA== 95249 -PE9wdGlvbg== 95250 -IER0 95251 -7YS0 95252 -J1JF 95253 -IE5STA== 95254 -IE1hbm55 95255 -IHJvZw== 95256 -IEdhcnI= 95257 -X2Nvb2tpZXM= 95258 -U3Bs 95259 -IHByb21vdGVycw== 95260 -KmR0 95261 -XEFQSQ== 95262 -IGV2b2tl 95263 -X0VudHJ5 95264 -IGZpcmVmaWdodGVy 95265 -aXZpZGFk 95266 -SmFjb2I= 95267 -IGxlZ2lvbg== 95268 -KHBvbA== 95269 -CWZsYXNo 95270 -b29rZWVwZXI= 95271 -LmNsaXBzVG9Cb3VuZHM= 95272 -IGdyYXBoaXRl 95273 -J2h0dHA= 95274 -X1RSSUFOR0xF 95275 -IERyb3BJbmRleA== 95276 -LnNtdHA= 95277 -IFVOU0lHTkVE 95278 -X1BJQ1RVUkU= 95279 -X09SSUVOVEFUSU9O 95280 -IE9QUA== 95281 -Iyc= 95282 -w6FmaWNv 95283 -Lmhpc3RvZ3JhbQ== 95284 -IEJlbm55 95285 -Pldl 95286 -IHJlcG9zdA== 95287 -IGZpYW5jZQ== 95288 -IEJvdW50eQ== 95289 -c3RyZXNz 95290 -RGF0ZXRpbWU= 95291 -Okg= 95292 -IFNwaGlueA== 95293 -Tm9ybWFsbHk= 95294 -YXBpeGVs 95295 -IHVzZXJBZ2VudA== 95296 -IE1vcmk= 95297 -L2xhYg== 95298 -Lk1PREVM 95299 -IEVtb3Rpb25hbA== 95300 -U2NhbGVk 95301 -ZGV2aWNlSWQ= 95302 -IOqzhA== 95303 -Y2Vhc2Vk 95304 -PElN 95305 -Y2VlZGVk 95306 -IGxpYnJhcmlhbg== 95307 -KW51bGw= 95308 -IG1pY3Jvbg== 95309 -IEZvdQ== 95310 -dWxlbg== 95311 -L2xpdmU= 95312 -cnNjaGVpbg== 95313 -ZmVh 95314 -IGhhYmls 95315 -IE5hdkxpbms= 95316 -bmVjZXNzYXJ5 95317 -LmNvZGVz 95318 -LW1ha2U= 95319 -IHBQYXJlbnQ= 95320 -X3JlbGF0aW9ucw== 95321 -IHJ1c2hlcw== 95322 -IHByb3BlbnNpdHk= 95323 -IFNraW5ueQ== 95324 -V0VTVA== 95325 -X2NvcnB1cw== 95326 -KHJlb3JkZXJlZA== 95327 -ZmRi 95328 -IEdldE1lc3NhZ2U= 95329 -QnJ1bg== 95330 -LnZz 95331 -IHDFgg== 95332 -IGNydW5jaHk= 95333 -Qm9vbQ== 95334 -UEo= 95335 -SmFrZQ== 95336 -57qm 95337 -JGNsaWVudA== 95338 -IH1dKQo= 95339 -IGNvbnZlcnNl 95340 -IEdSQVQ= 95341 -IENSUw== 95342 -Lkxvdw== 95343 -KHZhbGlkYXRl 95344 -X0NMSUNLRUQ= 95345 -LmJsdWV0b290aA== 95346 -CXh0eXBl 95347 -IGNsb3NlTW9kYWw= 95348 -X2ludGVudA== 95349 -IHByb2dub3Npcw== 95350 -c2F2 95351 -Q3Rs 95352 -IGNob29zZXI= 95353 -IFN1ZG9rdQ== 95354 -PVVzZXI= 95355 -LmNsZg== 95356 -CWV4cGxpY2l0 95357 -IHBvdGVudGlhbHM= 95358 -IEdlb3JnZXM= 95359 -IGVsaWM= 95360 -IHRzbGli 95361 -IFJhZ25hcg== 95362 -X3JlcHJlc2VudGF0aW9u 95363 -LWxlZ2dlZA== 95364 -aGFtc3Rlcg== 95365 -IEZpcmVzdG9yZQ== 95366 -Y29udmVydFZpZXc= 95367 -Q29tYmluZWQ= 95368 -INC00LXQuw== 95369 -IGVzcGVjdA== 95370 -IOOCkg== 95371 -IFN0YW1pbmE= 95372 -bG9va3M= 95373 -RU5BUklP 95374 -L2ZpeHR1cmVz 95375 -LnNtcw== 95376 -IHNlbWljbGFzcw== 95377 -IHNlbWljbGFzc2ljYWw= 95378 -LlBlZWs= 95379 -XSQ= 95380 -X0RTUA== 95381 -X0xWTA== 95382 -VklSVFVBTA== 95383 -IENhcGl0YWxz 95384 -IFNDVA== 95385 -LldoaWxl 95386 -IFN1YnN0YW5jZQ== 95387 -LWRvbmU= 95388 -IGVuc2xhdmVk 95389 -Y2xhc3NpZnk= 95390 -ZW50YW55bA== 95391 -IFZlZ2V0YWJsZQ== 95392 -X0RFUEVORA== 95393 -RGFuaQ== 95394 -IHF1aWVyZXM= 95395 -IGFiYmlhbW8= 95396 -IExpYmVy 95397 -YWZj 95398 -6YCf 95399 -cHJlZGljdGVk 95400 -LlBORw== 95401 -IFdoaXA= 95402 -Ly89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ== 95403 -IOKJoA== 95404 -IOWM 95405 -REVN 95406 -Q0NB 95407 -L2Nsb3Nl 95408 -IC8vLzwv 95409 -IG1lc21h 95410 -IEJlaXJ1dA== 95411 -IEluaXRpYWxpemluZw== 95412 -4buZdA== 95413 -TU9OVEg= 95414 -IO2bhA== 95415 -UGFya2luZw== 95416 -Q29tZm9ydA== 95417 -IEVuZ2luZXM= 95418 -d2VycA== 95419 -QFJlcXVlc3RQYXJhbQ== 95420 -LUtleQ== 95421 -IGJhY2tsaWdodA== 95422 -cGFzc2Vz 95423 -Lm51bWJlck9mTGluZXM= 95424 -L0xpbnV4 95425 -KEhUVFA= 95426 -IEh0dHBVUkxDb25uZWN0aW9u 95427 -b3Nvcw== 95428 -Lnh4 95429 -IGZpbG1wamVz 95430 -ID09PT4= 95431 -b3B0aW1pemU= 95432 -Q2Fub24= 95433 -IC4uLiIK 95434 -ICciJzsK 95435 -IGPDqWxpYg== 95436 -IHByaW5jaXBhbG1lbnRl 95437 -IFByb3BlcnR5VmFsdWU= 95438 -T1VOQ0U= 95439 -IGV4Y3Vyc2lvbg== 95440 -IEFjY2Vzc1Rva2Vu 95441 -cmVxdWV0ZQ== 95442 -Vm9sdGFnZQ== 95443 -ZXhwbGFpbg== 95444 -fSkoKTsKCg== 95445 -VVJMT1BU 95446 -IGZ1bmdhbA== 95447 -R3JlZWs= 95448 -LWJsaW5k 95449 -IGZldWRhbA== 95450 -IFNvbmF0YQ== 95451 -IERpYWdub3Npcw== 95452 -JHhtbA== 95453 -ZWRpdGFyeQ== 95454 -IHN0aW11bGF0ZXM= 95455 -UG9udA== 95456 -Lkhhc1ByZWZpeA== 95457 -Ym9hdHM= 95458 -IFNjYXR0ZXI= 95459 -IEdFTkVSSUM= 95460 -IGZpc2hlcw== 95461 -PWxlbmd0aA== 95462 -IG1lbGhvcmVz 95463 -c3BlbnQ= 95464 -w7Rt 95465 -IEluZ3JhbQ== 95466 -Pi4KCg== 95467 -cGFyaXR5 95468 -LlZpZGVvQ2FwdHVyZQ== 95469 -IFR1YmVz 95470 -IGNvbWVkaWM= 95471 -IHByb2Nlc3NEYXRh 95472 -QURC 95473 -KG5ld1N0YXRl 95474 -5YGc 95475 -IFdlYnNlaXRl 95476 -X09mZg== 95477 -LGJvZHk= 95478 -IHN1YmNvbnRyYWN0 95479 -IGNodXRl 95480 -IGNhcnRlc2lhbg== 95481 -dGhyZXNo 95482 -LkNhcnQ= 95483 -IG1ldG9k 95484 -Y3VzdG9taXpl 95485 -THRk 95486 -CXNvdW5k 95487 -V2ViU2VydmljZQ== 95488 -IEhpbmRlcmVk 95489 -W3Jlcw== 95490 -KFRpbGU= 95491 -Y2FwYWJpbGl0aWVz 95492 -X09WRVJGTE9X 95493 -INGB0YHRi9C7 95494 -IENvY2g= 95495 -IHRlc3ROYW1l 95496 -V09SRFM= 95497 -XE1vZHVsZXM= 95498 -P3VybA== 95499 -X2NvbnRpbnVvdXM= 95500 -IFFJY29u 95501 -IHN0YXJlcw== 95502 -IGVqZWN0ZWQ= 95503 -IEludmFzaW9u 95504 -ZmluYWxpemU= 95505 -IGdldg== 95506 -PGc= 95507 -IEVkaXRvckdVSQ== 95508 -QmVybGlu 95509 -LmxpbmVFZGl0 95510 -LXJlZ2V4cA== 95511 -IHNsZWQ= 95512 -IEVBQ0g= 95513 -dWNv 95514 -IHNlZWRpbmc= 95515 -IGxvY2FsaXpl 95516 -ZXR1 95517 -X2FsbW9zdA== 95518 -cGFuc2U= 95519 -IFNlbnNvcnM= 95520 -X1NJ 95521 -KnNw 95522 -IFByb3BlcnR5SW5mbw== 95523 -IGFwcm94aW0= 95524 -IGRhdGFHcmlkVmlld1RleHRCb3hDb2x1bW4= 95525 -16A= 95526 -IGRpZmVyZW5jaWE= 95527 -TE9PSw== 95528 -IG9tbmlw 95529 -IFR1cmluZw== 95530 -IHVuaWRhZGVz 95531 -77yfCg== 95532 -LlJvd0hlYWRlcnM= 95533 -X0FDVElPTlM= 95534 -IERhbHk= 95535 -IGZvcnRpZmllZA== 95536 -IFdhZ2U= 95537 -LnNpbXBz 95538 -KGlzc3Vl 95539 -IGxlcHQ= 95540 -T3duZXJJZA== 95541 -J29yZGVy 95542 -5Y+N 95543 -56Wo 95544 -IHJld3JpdGluZw== 95545 -Lkl0YWxpYw== 95546 -IEZvcmdvdHRlbg== 95547 -KElM 95548 -IE5vU3VjaEVsZW1lbnRFeGNlcHRpb24= 95549 -ZXdu 95550 -IHBvcHVsb3Vz 95551 -IFNoZWQ= 95552 -IyR7 95553 -IEFsbw== 95554 -RGV2aWNlSW5mbw== 95555 -KElOVk9LRQ== 95556 -IHBlbmE= 95557 -IEJCQg== 95558 -LmJi 95559 -IHRvcnM= 95560 -IGNvbmR1Y2l2ZQ== 95561 -LXB1cnBsZQ== 95562 -IHNxdWFyZWx5 95563 -Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCg== 95564 -0LrRgNGL 95565 -ZmFzdGE= 95566 -IGNwdA== 95567 -IEluZ2Vu 95568 -IHs/fQ== 95569 -0YPQsw== 95570 -UGVybA== 95571 -LnNreQ== 95572 -LWF1dG9tYXRpYw== 95573 -aW1wbGVtZW50 95574 -b3JubWVudA== 95575 -LklNQUdF 95576 -LVNwZWVk 95577 -CUZpZWxk 95578 -IHBvdW5kZWQ= 95579 -IExa 95580 -IGF1dG9Gb2N1cw== 95581 -IOC5gA== 95582 -LkNvbXBhbmlvbg== 95583 -IFZpbQ== 95584 -dW5jaWE= 95585 -X3NrYg== 95586 -IHVubWFycmllZA== 95587 -IFNvdXI= 95588 -Z2FhcmQ= 95589 -TGVvZA== 95590 -IOCq 95591 -LkNsb3Vk 95592 -IHJlaW5mb3JjZXM= 95593 -J10+ 95594 -IGZlbGl6 95595 -IFVBVg== 95596 -cmFuY2Vz 95597 -5Y2B 95598 -VG9MaXN0QXN5bmM= 95599 -LkV4ZWN1dG9y 95600 -LXRz 95601 -ICcuJzsK 95602 -IEtpbmVjdA== 95603 -44GE44GG 95604 -IGJldm9y 95605 -IEV4dHJhY3Rpb24= 95606 -X2RyYXdlcg== 95607 -JHN1Yg== 95608 -IHVwbGlmdGluZw== 95609 -LmJ0bkV4aXQ= 95610 -KCcvLypbQA== 95611 -UkVESVM= 95612 -c3RkZXhjZXB0 95613 -ZGVv 95614 -IGdpdmVy 95615 -X2JpbmRpbmdz 95616 -VG9EZXZpY2U= 95617 -Lm1p 95618 -IEVzdGltYXRlcw== 95619 -YWxsZWxl 95620 -Pz8/Cgo= 95621 -IFN0cmVhbXM= 95622 -IGFmZmxpY3Q= 95623 -LnNhcA== 95624 -IHF1YWxp 95625 -IEdhdWw= 95626 -U3BlY2lmaWVz 95627 -IHpr 95628 -IHNhbml0YXJ5 95629 -IG5ld0luZGV4 95630 -c3BlY3M= 95631 -IGZyYWdtZW50TWFuYWdlcg== 95632 -IE5lY2Vzc2FyeQ== 95633 -CVNwcmluZw== 95634 -PX4= 95635 -IE9NQVA= 95636 -Y2FyZWVy 95637 -KCItIik7Cg== 95638 -IERhcmxpbmc= 95639 -aXRhZw== 95640 -OnBr 95641 -IFN0ZWxsYXI= 95642 -IGluZmVydGlsaXR5 95643 -bGV4aWJsZQ== 95644 -VW5hcnk= 95645 -IDpdLA== 95646 -Lk5FVw== 95647 -Z3N1Yg== 95648 -X1VGdW5jdGlvbg== 95649 -LnNsaWRlcw== 95650 -IGRpdmVyc29z 95651 -X2xvY2Fscw== 95652 -XFwv 95653 -IHBjYXA= 95654 -IE9vaw== 95655 -LkRhdGFHcmlkVmlld0NvbnRlbnRBbGlnbm1lbnQ= 95656 -ZXJzb25pYw== 95657 -IHRyZWJ1aWU= 95658 -IHNlcXVlbnRpYWxseQ== 95659 -YWJhcg== 95660 -IElQQ0M= 95661 -IGRldm91dA== 95662 -XEhlbHBlcnM= 95663 -RVR3ZWV0 95664 -IHRyYWJhamFy 95665 -IFdpbGtpbnNvbg== 95666 -IGRhw58= 95667 -SHVtYW5z 95668 -VGVhY2hlcnM= 95669 -IERhdGFWaWV3 95670 -IFlvZw== 95671 -IGplZGU= 95672 -IGFtYmlhbmNl 95673 -dHJhbmQ= 95674 -IGVycmF0aWM= 95675 -IHThu6s= 95676 -LnJhYmJpdA== 95677 -IG5ld2JpZQ== 95678 -IGVudHJhbmNlcw== 95679 -IG9ydGhvZ29uYWw= 95680 -IERJU1BBVENI 95681 -IFNjaHJv 95682 -X1RVUk4= 95683 -Omludm9rZQ== 95684 -IHRhbnRhbA== 95685 -IFpvbmVz 95686 -c3RhdGVtZW50cw== 95687 -TGltaXRz 95688 -IEfDpA== 95689 -aWHFgmE= 95690 -LnByZWRpY2F0ZQ== 95691 -LkZS 95692 -IENocmlzdG9waA== 95693 -LkNvbnM= 95694 -IEhvcnRvbg== 95695 -X0N1c3RvbWVy 95696 -CU1E 95697 -IGVsa2Fhcg== 95698 -IE1TRQ== 95699 -IElzQWN0aXZl 95700 -XSop 95701 -XFVuaXQ= 95702 -IGVv 95703 -Rm9yT2JqZWN0 95704 -ZWxpYWM= 95705 -LWRldmVsb3BtZW50 95706 -IHRlYWw= 95707 -IHN0aXRjaGVk 95708 -IE91dGNvbWU= 95709 -b25jw6k= 95710 -ZW1iZWRkaW5n 95711 -IG9uTmV4dA== 95712 -IO2VtOuLuQ== 95713 -KGV4aXN0aW5n 95714 -LmJpZA== 95715 -CWFzc2VydEZhbHNl 95716 -e2w= 95717 -TEVycm9y 95718 -X2J1bGxldA== 95719 -KEh0bWw= 95720 -IGVCb29rcw== 95721 -cGVyUGFnZQ== 95722 -L3F1ZXN0aW9u 95723 -LmZha2U= 95724 -Lm1i 95725 -X2RsbA== 95726 -IGN1bXNob3Q= 95727 -IE1hZGFnYXNjYXI= 95728 -SE9MREVS 95729 -IHBlc3F1aXNh 95730 -X0RFQ0xT 95731 -XSxbLQ== 95732 -IEFsYmFuaWE= 95733 -LXRvYXN0 95734 -IHByb3RhZ29uaXN0cw== 95735 -IG15b2NhcmQ= 95736 -IHdhbGtlcnM= 95737 -ID09PT09PT0= 95738 -L1BhZ2U= 95739 -PTw/PQ== 95740 -IGVucXVhbnRv 95741 -X1RSVU5D 95742 -IHNlcHRlbWJyZQ== 95743 -IGxheW91dFBhcmFtcw== 95744 -ICcuLi8uLi8uLi8uLi8uLi8= 95745 -IFRyYWZmb3Jk 95746 -IHBhbGF2cmE= 95747 -IHJ1bmRvd24= 95748 -IGJyaXR0bGU= 95749 -w6RjaGU= 95750 -LllFTExPVw== 95751 -IENlcmVtb255 95752 -IG5ld1RleHQ= 95753 -dmVjcw== 95754 -IGVzc2Vu 95755 -IE1ldG9kbw== 95756 -IEdVSURF 95757 -IHBvc3Rwb25l 95758 -IFZTdGFjaw== 95759 -WyIk 95760 -IE1pY3Jvc3lzdGVtcw== 95761 -XFBhZ2U= 95762 -cG1hdA== 95763 -X0ZBVUxU 95764 -X21C 95765 -U3RhdGVNYWNoaW5l 95766 -RmFjdWx0eQ== 95767 -Lnd4 95768 -IE1vemFydA== 95769 -YW5pbWU= 95770 -IHB5dA== 95771 -IEJ1a2tpdA== 95772 -LUlORlJJTkdFTUVOVA== 95773 -IHNlYXJjaGVy 95774 -LWJhc2tldA== 95775 -IG9tYXM= 95776 -IFR1bmlz 95777 -IFBsYXR0 95778 -IHsNCg0KDQo= 95779 -eWFo 95780 -dG9sdWE= 95781 -SW50cm9kdWNlZA== 95782 -c3VwcGx5 95783 -IG1pc29neW4= 95784 -IFdhaXN0 95785 -IEVI 95786 -LW9wZXJhdG9y 95787 -IGRhcmtlbg== 95788 -IENvc21pYw== 95789 -IGdsYWNpZXJz 95790 -IA0NCg== 95791 -XVtf 95792 -Q29tcGFueUlk 95793 -IFJlY29uc3RydWN0aW9u 95794 -aXp6bGllcw== 95795 -IGzDrWRlcg== 95796 -IGNvbGxlZ2lhdGU= 95797 -IFBldHR5 95798 -T1VSTkFM 95799 -ZGVjb3JhdG9ycw== 95800 -cmFtcw== 95801 -KCgK 95802 -IEFzdHJvbm9teQ== 95803 -IHJpbw== 95804 -IEN5cmls 95805 -anVhbg== 95806 -IHJlaW5j 95807 -IFBpc3RvbnM= 95808 -IEJ1c3k= 95809 -cHRyb24= 95810 -IHBvbW9j 95811 -CVJUQ0s= 95812 -QnV5aW5n 95813 -Ly8qKgo= 95814 -IFdyYXBwZWQ= 95815 -IE1lZXI= 95816 -IGltYXA= 95817 -IGJlc3RpbW0= 95818 -IEFnaWxpdHk= 95819 -LlRvVGFibGU= 95820 -c3RpbmVuY2U= 95821 -XSkqKg== 95822 -IEF1dG9tYXRlZA== 95823 -ZHNw 95824 -IEdhcmxpYw== 95825 -aW9kZQ== 95826 -ZXhlbHM= 95827 -aW50cm9z 95828 -IGJlc3Rvd2Vk 95829 -KHZpc2libGU= 95830 -IGh5ZHJhdGVk 95831 -bm94aW91cw== 95832 -IEF1dGhlbnRpY2F0aW9uU2VydmljZQ== 95833 -IHNob3dNb2RhbA== 95834 -IGNvbXBvc2Vycw== 95835 -R0VORVJBTA== 95836 -Q1RT 95837 -IFNocg== 95838 -Y3JlYXQ= 95839 -IGNsb3NldHM= 95840 -IGdyb3VuZGluZw== 95841 -IENPTU1FTlRT 95842 -ICsj 95843 -IGdyb3VuZHdvcms= 95844 -KGluZGV4UGF0aA== 95845 -Z3JhdGlz 95846 -dXBwaWVz 95847 -IGt2bQ== 95848 -IGN1YWxlcw== 95849 -LkRlZXBFcXVhbA== 95850 -IGFsbG95cw== 95851 -LWJ1ZGdldA== 95852 -KF9fXw== 95853 -IGNvbmVjdGFy 95854 -LXJhZA== 95855 -IGl0Y2g= 95856 -bGFtcA== 95857 -LmdycA== 95858 -LWFkZG9ucw== 95859 -IHNlYWJvcm4= 95860 -IG5lZ2xpZ2VudA== 95861 -X0RldGFpbA== 95862 -IHNlcmVuZQ== 95863 -IGJhcnJhY2tz 95864 -IGJx 95865 -IFNlY3Q= 95866 -KGRhdG9z 95867 -IHRoZW1hdGlj 95868 -IHBvbGx1dGVk 95869 -CWFuaW1hdGlvbg== 95870 -SHVnaA== 95871 -RXhlY3V0YWJsZQ== 95872 -KCcvJylb 95873 -IGFwb3B0b3Npcw== 95874 -IGFiYnJldmlhdGVk 95875 -Zm9vbg== 95876 -UmFua2Vk 95877 -CWhpdA== 95878 -CQkgICAgICAgICAgICAgICAgICAgICAgIA== 95879 -Q29udGludW91cw== 95880 -IG1vdmVUbw== 95881 -REJPYmplY3Q= 95882 -IGNvbmNlaXZhYmxl 95883 -IEd3ZW4= 95884 -IMOhbGw= 95885 -X18oKQ== 95886 -IExhbmE= 95887 -IGVpbnplbA== 95888 -IHJlY291bnRz 95889 -eXN0ZW1z 95890 -b3dhbnk= 95891 -KTo/Pgo= 95892 -IEFrcm9u 95893 -b2xpbmk= 95894 -Q29ycA== 95895 -YXBocmFn 95896 -ICInLg== 95897 -IGNvbnZlbmVk 95898 -IC4uLi4KCg== 95899 -IGNhbGxlZQ== 95900 -IENsb3Zlcg== 95901 -LmRlc2NyaXB0b3I= 95902 -Lkl0ZW1TdGFjaw== 95903 -IHBlcnZlcnNl 95904 -X0NF 95905 -PUAi 95906 -LS0tDQo= 95907 -IGJldg== 95908 -c3VtYQ== 95909 -YWNjdW11bGF0b3I= 95910 -IGxpemFyZA== 95911 -INC+0Yc= 95912 -Z2V0RGVzY3JpcHRpb24= 95913 -IFNhcmFz 95914 -Lm5leHRTaWJsaW5n 95915 -IGVsYXN0aWNpdHk= 95916 -IGNoYWM= 95917 -bW92ZWQ= 95918 -X1RvcA== 95919 -dHJlcg== 95920 -KGRvd24= 95921 -ZWxlbXM= 95922 -b2JpbGk= 95923 -LnBvc3RNZXNzYWdl 95924 -ICjiiA== 95925 -Q3N2 95926 -IFlvc2VtaXRl 95927 -c3dlZXQ= 95928 -TUFUUklY 95929 -aWdyYXRlZA== 95930 -IGZvcmdpbmc= 95931 -IFBhZ2VTaXpl 95932 -dHJhbnNmb3Jtcw== 95933 -PVlFUw== 95934 -IGRpc2Nsb3Npbmc= 95935 -IFBlZGlhdHJpYw== 95936 -IERlYWRseQ== 95937 -UmVzb3VyY2VJZA== 95938 -LWJpbmFyeQ== 95939 -IFJvd2U= 95940 -IENhaXI= 95941 -X2V4dHJhY3Rpb24= 95942 -RGVjcmU= 95943 -IE9ic3Q= 95944 -cGxy 95945 -IFBoeXNpb2xvZ3k= 95946 -bXZj 95947 -aHRp 95948 -LlRl 95949 -IGV4dHJhdmFnYW50 95950 -IEFudGli 95951 -w7NzdA== 95952 -b3V0ZGly 95953 -IGNhcm5l 95954 -Vmlld1BhZ2Vy 95955 -IGltcGxhbnRlZA== 95956 -U2VhcmNoUGFyYW1z 95957 -w7xyZ2Vy 95958 -Y29uZGU= 95959 -YWNlbnRl 95960 -X0NVREE= 95961 -JHZhbA== 95962 -IldoaWxl 95963 -IHRlbXBMaXN0 95964 -IHN5bmFnb2d1ZQ== 95965 -Y21j 95966 -INGA0LDQsdC+0YLRiw== 95967 -IHNlem5hbQ== 95968 -IHNlc3N1YWxp 95969 -IGNhYmV6YQ== 95970 -ZXTDoA== 95971 -IGZhw6c= 95972 -Z2Vo 95973 -Y2VkZQ== 95974 -IlNvbWU= 95975 -Om9u 95976 -LWZvcm1lZA== 95977 -YnluYW1l 95978 -IOuwmO2ZmA== 95979 -IG5hw68= 95980 -IEFVRw== 95981 -IGVhc2Vk 95982 -XSl7 95983 -KHB0aHJlYWQ= 95984 -IGplZGVt 95985 -KGZpeHR1cmU= 95986 -IFBhcmw= 95987 -XX0pOwo= 95988 -IGV4cHVsc2lvbg== 95989 -IEluZXRBZGRyZXNz 95990 -IE1MUA== 95991 -LicpOw== 95992 -IG9ybw== 95993 -IFNldmlsbGE= 95994 -IGZvcm11bGFpcmU= 95995 -LXRlcnJvcmlzbQ== 95996 -L1dlYkFQSQ== 95997 -KmFuZ3N0cm9t 95998 -Y3Jhd2w= 95999 -X2xvYW4= 96000 -X0RJR0VTVA== 96001 -IEtub3h2aWxsZQ== 96002 -LmdjYQ== 96003 -IERpeQ== 96004 -bnRhZw== 96005 -YWJsZVZpZXdDb250cm9sbGVy 96006 -LkZlZWQ= 96007 -LXNoYXJlZA== 96008 -IGNvY2Np 96009 -X2ludml0ZQ== 96010 -IEJ1Y2tpbmdoYW0= 96011 -IEdsdXRlbg== 96012 -IGVuZGVtaWM= 96013 -UmFpc2Vk 96014 -IHF1ZXJ5SW50ZXJmYWNl 96015 -IG1hcnRpbg== 96016 -QuG6oW4= 96017 -IGhhcmU= 96018 -IGRlaW4= 96019 -cmFyaWFu 96020 -bXlmaWxl 96021 -IGFuZ3Vpc2g= 96022 -VGV4dG8= 96023 -IEJVRkY= 96024 -KGxu 96025 -bWFycw== 96026 -X3N1YnRpdGxl 96027 -X2dpZnQ= 96028 -IGJvbGRseQ== 96029 -IFNpbmd1bGFy 96030 -KExvZ0xldmVs 96031 -PEFydGljbGU= 96032 -L3N0YXRz 96033 -INC/0L7Qsg== 96034 -IGl0ZW5z 96035 -IGRlbm9taW5hdGlvbg== 96036 -LkRhdGFHcmlkVmlld1RyaVN0YXRl 96037 -X0xS 96038 -IER1Y2hlc3M= 96039 -CUJsb2Nr 96040 -dHJhY2Vy 96041 -LUNO 96042 -XEFwcERhdGE= 96043 -Lmxpc3Rz 96044 -KFJvdXRl 96045 -IEdPT0RNQU4= 96046 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCg== 96047 -IHRpbmhh 96048 -IGV2ZXJsYXN0aW5n 96049 -YURhdGE= 96050 -KGNvbXBhcmU= 96051 -IHJwdA== 96052 -XFBocA== 96053 -LkZJTEVT 96054 -IHNwYXJpbmc= 96055 -U2Nhcg== 96056 -INin2YTYqg== 96057 -IEJldGhsZWhlbQ== 96058 -IGJhY2twYWdl 96059 -c3BsaWNl 96060 -ZsO2cg== 96061 -QGR5bmFtaWM= 96062 -4bupYw== 96063 -7KY= 96064 -LnBhZ2luZw== 96065 -IEJlbG1vbnQ= 96066 -LkVYUA== 96067 -IGludGVybGU= 96068 -IENoZWNrbGlzdA== 96069 -IFVuaWNvcm4= 96070 -QkVTVA== 96071 -Z2V0UGxheWVy 96072 -LmFyZ3NvcnQ= 96073 -IHdpdGhTdHJpbmc= 96074 -IE1vZGVyYXRl 96075 -fSI+Cg== 96076 -LnNldEltYWdlQml0bWFw 96077 -IHRyZW5jaGVz 96078 -IGdlbmVyYXI= 96079 -IGZlcm1lbnRlZA== 96080 -IGRlanRpbmc= 96081 -Q3RybHM= 96082 -IGRpc2FncmVlcw== 96083 -UXVpZXQ= 96084 -KFNRTEV4Y2VwdGlvbg== 96085 -IFRlbnNvckZsb3c= 96086 -T05B 96087 -UG9ydGxhbmQ= 96088 -LlB0cg== 96089 -bGx4 96090 -YXN0b24= 96091 -Q2x1c3RlcnM= 96092 -IFVzdWFyaW9z 96093 -IGtoaQ== 96094 -IGdpYQ== 96095 -IERvbHBoaW4= 96096 -xZFz 96097 -IGx1ZGVy 96098 -IGRpc3Bvc2l0aXZv 96099 -IFZ5 96100 -b21wc29u 96101 -IO2VoA== 96102 -IGtjYWw= 96103 -IENhbGNpdW0= 96104 -U2VjdGlvbnNJbg== 96105 -IENhc2M= 96106 -IGdyYXR1aXRp 96107 -b3NvbWFs 96108 -IHVuZGVyY3V0 96109 -IENhaA== 96110 -OnBhcmFtcw== 96111 -IHJldHVyblVybA== 96112 -IEVyZQ== 96113 -w6lyYw== 96114 -IGludGw= 96115 -fS8jew== 96116 -IG91dHB1dFBhdGg= 96117 -IGZhbHNlaG9vZA== 96118 -IFVzZXJSb2xl 96119 -PEhhc2hNYXA= 96120 -IENyZWF0ZVVzZXI= 96121 -IENvd2JveQ== 96122 -CVVzZQ== 96123 -XSgK 96124 -IFNob3BpZnk= 96125 -Vmlld1N0YXRl 96126 -QWR2YW5jZQ== 96127 -LXRhbms= 96128 -IlQ= 96129 -IEplbnM= 96130 -PW9wdGlvbnM= 96131 -KCIuLg== 96132 -Lm1pbWU= 96133 -IENSVA== 96134 -IGjDpHR0ZQ== 96135 -KHNv 96136 -LlVOS05PV04= 96137 -IGRhcsO8YmVy 96138 -IENPVkVS 96139 -R2Vt 96140 -Q3Jv 96141 -X1JFQ1Y= 96142 -X2hpZXJhcmNoeQ== 96143 -Q2hvb3Npbmc= 96144 -SkVYRUM= 96145 -IGRvcnNhbA== 96146 -KyI8 96147 -IE5leQ== 96148 -V29tYW4= 96149 -QmV6aWVy 96150 -IHJpZ3M= 96151 -IG9udHZhbmc= 96152 -77yM5YiZ 96153 -IEdhdXQ= 96154 -Y21i 96155 -TmhhcA== 96156 -IG1vbm9j 96157 -IGVuZXJnaWE= 96158 -b2JzZXJ2ZU9u 96159 -c3Rha2Vz 96160 -LSot 96161 -IE5hY2s= 96162 -fX0iCg== 96163 -ZXJ2YXM= 96164 -IEhpbmRlcmVkUm90b3I= 96165 -QWRqYWNlbnQ= 96166 -IEludGVybmFjaW9uYWw= 96167 -CWFyZWE= 96168 -IPCflA== 96169 -IHNwYXJrbGU= 96170 -KCkuXw== 96171 -LmlkZWE= 96172 -IHV0cmVjaHQ= 96173 -IG1hcHBlZEJ5 96174 -IENvbG8= 96175 -CVRS 96176 -UG9zdGVy 96177 -IGNvbWJhdGluZw== 96178 -IFllbGxvd3N0b25l 96179 -aWVycmV6 96180 -YWNjdA== 96181 -IHPDoWNo 96182 -Lk5ld3M= 96183 -IGZpZWxkVmFsdWU= 96184 -IGNheg== 96185 -IEZyZWVt 96186 -CQkKCQo= 96187 -IHVzdXI= 96188 -IHNvbGE= 96189 -IGN1bWJlcnNvbWU= 96190 -IGNhdGFwdWx0 96191 -Ii4v 96192 -IEV4ZWN1dG9ycw== 96193 -IEFtZXM= 96194 -ICc8JT0= 96195 -ZmlsbG5h 96196 -LOKAlA== 96197 -OlNldFRleHQ= 96198 -LWNhdGVnb3JpZXM= 96199 -LWFyY2hpdmU= 96200 -IFBvbGx1dGlvbg== 96201 -Lk9m 96202 -4oCcQXQ= 96203 -X0NIQVJTRVQ= 96204 -KENvbHVtbg== 96205 -4oCZKQ== 96206 -IHVubWlzdGFr 96207 -IGVhcm0= 96208 -IFBsYXRmb3Jtcw== 96209 -IE1vbWVudHVt 96210 -VmVjdG9yaXplcg== 96211 -cmF3ZXI= 96212 -KHBhc3Nwb3J0 96213 -KHBsYW5l 96214 -IHJlcHJlc2VudGE= 96215 -IHB1YmtleQ== 96216 -IEphaW4= 96217 -IG1lbm5lcw== 96218 -IGluc3RhbnRhbmVvdXM= 96219 -IGV0aGVycw== 96220 -IG5lc3Rz 96221 -IFBhdHRvbg== 96222 -IEhBQ0s= 96223 -cGFja2luZw== 96224 -SVNlcnZpY2U= 96225 -IHJvY2tlcg== 96226 -IGZpY2E= 96227 -IEdsYWRpYXRvcg== 96228 -IFVQQw== 96229 -IExvd2VsbA== 96230 -YmVhcmVy 96231 -IHZpcGVy 96232 -X2dsb2I= 96233 -IG1hc2hlZA== 96234 -IGhhaXJzdHlsZQ== 96235 -IHVuZGVybWluZXM= 96236 -cmVzdGF1cmFudHM= 96237 -IHJlYWN0aW9uYXJ5 96238 -IGJpbGxpZw== 96239 -fSIpOw0K 96240 -IHZpc3Rhcw== 96241 -IG9wZW5kaXI= 96242 -CWxhYmVscw== 96243 -YWxsaXM= 96244 -IFdvbGZm 96245 -IENQQw== 96246 -IHJhaWx3YXlz 96247 -IFZhdWdoYW4= 96248 -IEFza2luZw== 96249 -Y2Fp 96250 -IEdu 96251 -X1BST0Y= 96252 -LVNlcA== 96253 -LmN1cnZl 96254 -TXVsdGlwbHk= 96255 -0YDQsNC90LjRhg== 96256 -IG1lZXR1cA== 96257 -Z2V0RGI= 96258 -KEdVSQ== 96259 -IHJlaW1idXJzZQ== 96260 -OnJlc3VsdA== 96261 -VHVtYmxy 96262 -LkNsb3NlZA== 96263 -IGNvbmZvcm1z 96264 -IEhvaw== 96265 -aWVkYWRl 96266 -TmV3TGFiZWw= 96267 -IG5hdkN0cmw= 96268 -RG9jdG9ycw== 96269 -IOyViA== 96270 -IGJvdXRz 96271 -IGlzYw== 96272 -Lyc7Cgo= 96273 -dWhs 96274 -LlVp 96275 -LXNhbWE= 96276 -IENhbm9uaWNhbA== 96277 -IG1ldGljdWxvdXM= 96278 -IGdyb3Rlcw== 96279 -IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8= 96280 -ZXRlcw== 96281 -IGxhbmd1ZQ== 96282 -IGZDaGFpbg== 96283 -IFR5cGVmYWNl 96284 -IEJyaWdoYW0= 96285 -aWFyZQ== 96286 -J8OpdGFpdA== 96287 -IEVGRg== 96288 -IGRlc3Ryb3llcg== 96289 -X21hdHJpY2Vz 96290 -TsO6bWVybw== 96291 -Y2FsbGFibGU= 96292 -X3BlcmlvZHM= 96293 -c3RydWs= 96294 -bWFq 96295 -LnJs 96296 -LmxpZnQ= 96297 -2YrZhA== 96298 -w5A= 96299 -UmV0VmFs 96300 -RGVudmVy 96301 -IFRyaWJ1dGU= 96302 -a2l5ZQ== 96303 -emV3 96304 -IFNwYXJl 96305 -IGxldWtlbWlh 96306 -IHdhaXRyZXNz 96307 -IHBsdXTDtHQ= 96308 -QWxpYXNlcw== 96309 -IExvY2F0ZQ== 96310 -5rY= 96311 -SWRlbnRpZmljYXRpb24= 96312 -LnRlbA== 96313 -LWRheXM= 96314 -dGVycml0 96315 -aW1idXM= 96316 -IEJ1dHRlcktuaWZl 96317 -64K0 96318 -cnVwdGN5 96319 -IEdyYWRlcw== 96320 -IHVuZGVyc2lkZQ== 96321 -IGhhcmRzaGlwcw== 96322 -dW5laQ== 96323 -LWNvbnRhaW5lZA== 96324 -IFsnLg== 96325 -T2Jzb2xldGU= 96326 -LlJldHJvZml0 96327 -IHVyYW51cw== 96328 -X3JnYmE= 96329 -IHJhcGVz 96330 -IEthcmU= 96331 -W+KApl0= 96332 -IEZpbmNo 96333 -LmJ1bmlmdUZsYXRCdXR0b24= 96334 -cXVpc2Fy 96335 -IE51cnNlcw== 96336 -ZWdhZGU= 96337 -IGhu 96338 -RXhjbHVkZQ== 96339 -IHN0b2NoYXN0aWM= 96340 -IHNvdHRv 96341 -IFBlbmFsdHk= 96342 -IHNvbnN0 96343 -IHJvc2E= 96344 -X0ZpbmQ= 96345 -IEludmFsaWRhdGU= 96346 -TGlzdEl0ZW1JY29u 96347 -JywNDQo= 96348 -X3BkdQ== 96349 -IE1lYWxz 96350 -YWrEhWM= 96351 -IE9vcHM= 96352 -IE5vdGljZXM= 96353 -IGRlcml2YXRpb24= 96354 -W10NCg== 96355 -6Lqr 96356 -eXN0ZXJ5 96357 -X2ZpdmU= 96358 -RWFybg== 96359 -PWV2ZW50 96360 -IG9ncg== 96361 -LVJFQUw= 96362 -IExpcHM= 96363 -c2VsZWN0b3Jz 96364 -YWRpZXI= 96365 -IHNldEJhY2tncm91bmRJbWFnZQ== 96366 -KHRoaW5n 96367 -IHNvZnRiYWxs 96368 -XHhhYQ== 96369 -KGlkZW50 96370 -IEp1cnk= 96371 -IFZveWFnZQ== 96372 -IFRBcnJheQ== 96373 -KFBhaW50 96374 -V2FybQ== 96375 -RVhURVJOQUw= 96376 -YXN1 96377 -ICghKCg= 96378 -LkZFVENI 96379 -IHNraXJt 96380 -T1JFRA== 96381 -Y2FuY2VsbGVk 96382 -aXR0ZWw= 96383 -IHNlZWR1 96384 -bGljaGVz 96385 -b2hv 96386 -LHJldGFpbg== 96387 -KFdlYkRyaXZlcg== 96388 -aXB0YWJsZXM= 96389 -RVJJQ0E= 96390 -IGNsZWFubGluZXNz 96391 -ZWxsb3dvcmxk 96392 -IGNvaGVzaW9u 96393 -Z2lzdA== 96394 -XS4n 96395 -ZXJnaW5n 96396 -IGlzcA== 96397 -Lm9mZnNldFRvcA== 96398 -KGZhY3Rvcg== 96399 -dW5pdmVyc2Fs 96400 -IFBsYXliYWNr 96401 -IEJ5dGVTdHJpbmc= 96402 -IGRhbW5pbmc= 96403 -IFNTUg== 96404 -YWN1cw== 96405 -IFN0YXRlbg== 96406 -IOWVhuWTgQ== 96407 -IFBlZQ== 96408 -IFNhbXBsaW5n 96409 -YXRvcmlh 96410 -c3RhcnRJbmRleA== 96411 -5ZCr 96412 -IOy0iOq4sA== 96413 -IE9saXZlaXJh 96414 -IEZsYWtl 96415 -Ym9vbQ== 96416 -X01TSw== 96417 -IEZhY2luZw== 96418 -b3JnaGluaQ== 96419 -Zm9vZHM= 96420 -VHJlZVdpZGdldEl0ZW0= 96421 -IEhBTEY= 96422 -IiIiKQo= 96423 -IENIQVBURVI= 96424 -IEV2ZWx5bg== 96425 -Pis= 96426 -IEhvcm5ldHM= 96427 -d29rZQ== 96428 -IC9b 96429 -YXRob2xpYw== 96430 -LnNlZ21lbnRz 96431 -Lm5hdmlnYXRlQnlVcmw= 96432 -IE1hbnVz 96433 -IHBlcHRpZGVz 96434 -IGZsZWV0aW5n 96435 -IEFUVg== 96436 -IFNoaWI= 96437 -SW50QXJyYXk= 96438 -IG1veg== 96439 -cHJvYmxlbXM= 96440 -b2duZQ== 96441 -Lk90aGVy 96442 -QWRtaW5pc3RyYXRpb24= 96443 -JSUqLw== 96444 -Il09PQ== 96445 -IEFuZHJlcw== 96446 -QWRh 96447 -aGludHM= 96448 -XCIiOwo= 96449 -KHBuZw== 96450 -IOqwgOuKpQ== 96451 -44OK 96452 -cmVqZWN0ZWQ= 96453 -IG1vdmVycw== 96454 -546H 96455 -IHBhcmVudGhlc2lz 96456 -KGFzc2lnbnM= 96457 -RWxpdGU= 96458 -UmVtaW5kZXI= 96459 -IHN1ZmZlcmVycw== 96460 -IFJlc291cmNlQnVuZGxl 96461 -dGhhZw== 96462 -PicNCg== 96463 -YW50aW5v 96464 -UGVyaXBo 96465 -IFNoYXJk 96466 -Q2hhcnREYXRh 96467 -KGpq 96468 -IG9zdGF0 96469 -aHVnZQ== 96470 -LWF1dGhvcmVk 96471 -LmNp 96472 -IHB5bXlzcWw= 96473 -IGxpbmVycw== 96474 -IEFUUw== 96475 -Pkxhc3Q= 96476 -KSIpCgo= 96477 -IGdldHBpZA== 96478 -R2V0U2l6ZQ== 96479 -IGV4dG9ydGlvbg== 96480 -W2Zsb2F0 96481 -IEVJTkE= 96482 -L0Jhc2U= 96483 -LnNldE9uQWN0aW9u 96484 -0L7Qu9GP 96485 -IEdsYWNpZXI= 96486 -X2F6 96487 -IHRyYW5zcG9ydGU= 96488 -IFNtcw== 96489 -dGh1bWJz 96490 -IHRyZWFzdXJlcg== 96491 -IG16 96492 -aXN0aWs= 96493 -UkVESUVOVA== 96494 -IGlzaQ== 96495 -X3N0dWZm 96496 -UE9TSVRPUlk= 96497 -c3RhcnRkYXRl 96498 -IFppbmM= 96499 -5rG9 96500 -IGthaw== 96501 -IGVyZmFocmVu 96502 -X0NPTUJP 96503 -IHVjd29yZHM= 96504 -LlBheQ== 96505 -IGtpbmdkb21z 96506 -IGV4Y2VsZW50ZQ== 96507 -aWduaXRl 96508 -X3ZhcmlhdGlvbg== 96509 -IG5hdmVnYWRvcg== 96510 -5LiT 96511 -dmlld0NvbnRyb2xsZXI= 96512 -cmlyZQ== 96513 -SG9uZXN0bHk= 96514 -Q2FzY2FkZQ== 96515 -ZXRyYWlu 96516 -QXJnZW50aW5h 96517 -Y3E= 96518 -IE1hcmlhbg== 96519 -L2Fy 96520 -IGludGVyZXNzZQ== 96521 -dXJhaGFu 96522 -KFBD 96523 -IGZyaXZvbA== 96524 -IFRydXN0ZWQ= 96525 -KElDb25maWd1cmF0aW9u 96526 -IFJpaGFubmE= 96527 -ZW5kb3ph 96528 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg 96529 -IHByb2NsYW1hdGlvbg== 96530 -IHByZWRvbWluYW50 96531 -IGNvbnN0cw== 96532 -LW5lY2s= 96533 -V29sZg== 96534 -LmNoZWNrYm94 96535 -IHN0YW56YQ== 96536 -IGVudGVuZGVy 96537 -Ly8o 96538 -SGFuZHM= 96539 -IGJpbGxlZGVy 96540 -IFRvc2hpYmE= 96541 -YWJiaXg= 96542 -RU5DSUVT 96543 -IGppbQ== 96544 -UFVS 96545 -Lmxlc3Nvbg== 96546 -IGJlcnRo 96547 -bGFyxLFu 96548 -Qmxv 96549 -CWV4dA== 96550 -ZWVs 96551 -IGRlbWFzaQ== 96552 -IGNvbG9uaXphdGlvbg== 96553 -L2Rpc2M= 96554 -77yP 96555 -Q2VydGFpbmx5 96556 -566h55CG5ZGY 96557 -IGpvZ2Fkb3I= 96558 -dcOp 96559 -Q29sdW1uc01vZGU= 96560 -IEpW 96561 -IEluc3RpdHV0 96562 -X3NwZWN0cnVt 96563 -LmRlbnNl 96564 -IFNob3J0Y3V0 96565 -IHNlYnVhaA== 96566 -IGZsYXNoeQ== 96567 -UmVnYXJkcw== 96568 -IHNoYXJwZXI= 96569 -Y2FuY2VsbGF0aW9uVG9rZW4= 96570 -X2RldGFsbGU= 96571 -IFNjYXJsZXR0 96572 -INC80LDRgg== 96573 -IG5lZ29jaW8= 96574 -4LiW 96575 -IEpX 96576 -d2ViZHJpdmVy 96577 -LndhbGw= 96578 -IHhhbWFyaW4= 96579 -b3BhcXVl 96580 -LkFkZFBhcmFtZXRlcg== 96581 -KENvbnRyb2xsZXI= 96582 -LWFib3J0aW9u 96583 -X0ZVTkNUSU9OUw== 96584 -Q3VzdG9tZXJJZA== 96585 -IHZlbmly 96586 -IEJ1c3Rlcg== 96587 -X3ByZWRpY3RlZA== 96588 -L3J1bGVz 96589 -LU1ldGhvZHM= 96590 -IGdkemll 96591 -Il0nKTsK 96592 -IFB4 96593 -Q09OUw== 96594 -LlNsaWNl 96595 -IHJldmFtcGVk 96596 -IFRhYmxlVmlldw== 96597 -IGRpY2tz 96598 -IO2YuOy2nA== 96599 -IEF1eGlsaWFyeQ== 96600 -T3BlcmE= 96601 -L3Jj 96602 -IHVudGhpbmthYmxl 96603 -IGRlZHVjdGVk 96604 -bHo= 96605 -IExhZ2U= 96606 -IFJvd2xpbmc= 96607 -cHJvdmVk 96608 -T2ZmZXJz 96609 -LHNldA== 96610 -UkdCTw== 96611 -IEZV 96612 -IENlbnRPUw== 96613 -b3pv 96614 -IFRyb2phbg== 96615 -IG1hw7FhbmE= 96616 -IC8vPQ== 96617 -Kio6 96618 -IHtcCg== 96619 -IEJvd2Vu 96620 -S25vd2luZw== 96621 -IOW6 96622 -PS09LT0tPS09LT0tPS09LQ== 96623 -IGViZW5mYWxscw== 96624 -XT17Cg== 96625 -Qk1J 96626 -KCk7KQ== 96627 -KHBlcm1pc3Npb24= 96628 -QW5kZXJzb24= 96629 -IGRlZ3JhZGU= 96630 -U29hcA== 96631 -dcWf 96632 -IFB1cHB5 96633 -IEV0aGlvcGlhbg== 96634 -IFRFU1RJTkc= 96635 -ZW5zZXg= 96636 -IGRyZXNzZXI= 96637 -IENob3Jl 96638 -VW5oYW5kbGVk 96639 -QXNzb2NpYXRl 96640 -LmFkZGl0aW9uYWw= 96641 -IGRpZmbDqXJlbnRlcw== 96642 -aXNxdWU= 96643 -IG5lY2Vzc8Ohcmlv 96644 -IGdlbmVyaWNz 96645 -KHBm 96646 -IFxg 96647 -IE5lYXJieQ== 96648 -YXBvcmF0aW9u 96649 -IFRoZW1lRGF0YQ== 96650 -V2lGaQ== 96651 -LlJlYWw= 96652 -YWN5ag== 96653 -TGl2 96654 -IHBzeWNob2xvZ2ljYWxseQ== 96655 -bWV0aG9kUG9pbnRlclR5cGU= 96656 -IE5pa29s 96657 -IERlZGljYXRlZA== 96658 -X1BPUlRT 96659 -IEphZQ== 96660 -TlNBdHRyaWJ1dGVkU3RyaW5n 96661 -IGFtYmFzc2Fkb3Jz 96662 -IEhhbmRsZXJz 96663 -IEFuYXQ= 96664 -IHZvY2FsaXN0 96665 -IHJhcg== 96666 -IGRldnVlbHZl 96667 -Lmdz 96668 -IHhjYg== 96669 -IHN1Ym1vZHVsZQ== 96670 -IEFTU0lHTg== 96671 -dXJlZW4= 96672 -IGNsYXNlcw== 96673 -ZW1vdGg= 96674 -X0NOVEw= 96675 -X2p3dA== 96676 -IOuniA== 96677 -IG91dHBvc3Q= 96678 -IEluYm94 96679 -CWZsZXg= 96680 -IEdyb2Nlcnk= 96681 -SUxJTkU= 96682 -Lm1vYg== 96683 -IENvbnN0cg== 96684 -XT1d 96685 -KHdhbGxldA== 96686 -IHNlZGU= 96687 -ZmFs 96688 -IGltcGFzcw== 96689 -PXtbJw== 96690 -IHVuZm9yZQ== 96691 -ZnVzZQ== 96692 -X0xlYW4= 96693 -IGF2YWxhbmNoZQ== 96694 -PXJhbmQ= 96695 -IGFkdWx0ZXJ5 96696 -IEdlZQ== 96697 -CUlucHV0U3RyZWFt 96698 -IGNhYmVs 96699 -X01PVU5U 96700 -IG5vdGljaWFz 96701 -IFJhdW0= 96702 -IGJ5dGVhcnJheQ== 96703 -IG9uSGlkZQ== 96704 -ICkuCg== 96705 -JGluc3RhbmNl 96706 -IGRpZFNlbGVjdFJvd0F0SW5kZXhQYXRo 96707 -YWNhbQ== 96708 -LWNvbGxlY3Rpb24= 96709 -IHVwaGU= 96710 -UG90ZW50aWFs 96711 -IFNEUw== 96712 -X2FwcHJvdmFs 96713 -RGFtbg== 96714 -OmNvbnZlcnQ= 96715 -IE1vZGlmaWNhdGlvbnM= 96716 -IOyYiA== 96717 -IHVuYWI= 96718 -IHNjcm9sbGVk 96719 -KyIpOwo= 96720 -IGdhdWNoZQ== 96721 -IEhPTA== 96722 -YW50YW5hbW8= 96723 -IGNvbHVtbkhlYWRlcg== 96724 -CVpFUEhJUg== 96725 -emFj 96726 -IG91dGluZ3M= 96727 -IGFwcGxhdWRlZA== 96728 -aG9yaWE= 96729 -bW9keA== 96730 -IG1pbGxlbm5pYQ== 96731 -Jm0= 96732 -Lkpzb25JZ25vcmU= 96733 -IHBpb25lZXJlZA== 96734 -IENhdnM= 96735 -CWpz 96736 -ZGVwYXJ0dXJlZGF5 96737 -X2ti 96738 -LlBhdGllbnQ= 96739 -IHBldGFscw== 96740 -cG9ydHJhaXQ= 96741 -In19Cg== 96742 -SG9tZUFzVXBFbmFibGVk 96743 -LnByZXR0eQ== 96744 -LGNsanM= 96745 -IG1lZGlvcw== 96746 -aGFzaGVk 96747 -ZW1vZGVs 96748 -IE1vam8= 96749 -LmZyb21SR0JP 96750 -LXBl 96751 -IGludGltYXRlbHk= 96752 -IGVsZ2c= 96753 -W107DQo= 96754 -L09ic2VydmFibGU= 96755 -IG9iZWRpZW50 96756 -IEphbWFs 96757 -UmVxdWlyZWRNaXhpbg== 96758 -IExpc3RWaWV3SXRlbQ== 96759 -CXBsYWNlaG9sZGVy 96760 -X3RyYW5zYWtzaQ== 96761 -PFNlcnZpY2U= 96762 -IGVuc3VlZA== 96763 -IFJpY2Fu 96764 -U2FnYQ== 96765 -QVVESU8= 96766 -IGpt 96767 -LXNhbGVz 96768 -LW11bHRp 96769 -JSI7Cg== 96770 -IGNsYXNzaWZpY2F0aW9ucw== 96771 -IHTDo28= 96772 -Q29hbA== 96773 -OycpOwo= 96774 -IGRlbGlnaHRz 96775 -X2h6 96776 -X2JvbGQ= 96777 -REVQRU5E 96778 -INCh0L7Qt9C0 96779 -YXRlZQ== 96780 -X3N1Ym5ldA== 96781 -IFRvd25zZW5k 96782 -IENhc3RpbGxv 96783 -IHBydA== 96784 -JC8p 96785 -IGZpbGli 96786 -KCcvJylbLQ== 96787 -IHVwaG9sc3Rlcnk= 96788 -IGNvbXBvbmVudGU= 96789 -IFhG 96790 -LlJldmVyc2U= 96791 -X3R1bm5lbA== 96792 -SW1tZWRpYXRlbHk= 96793 -LW1vdmU= 96794 -IGFsaXN0 96795 -V1ND 96796 -c3RydWN0dXJhbA== 96797 -aXN0b3JpY2Fs 96798 -VGFuZ2dhbA== 96799 -IENPVVJU 96800 -IG9ic2N1cmVk 96801 -IGxhbmRzbGlkZQ== 96802 -IGJlZHNpZGU= 96803 -IGJhcmFuZw== 96804 -LWVsZWN0ZWQ= 96805 -IGNlcmFtaWNz 96806 -LS0qLwo= 96807 -IFdhbm5h 96808 -RHlu 96809 -IHZlcnNjaGllZGVuZQ== 96810 -IGluZHVjaW5n 96811 -IGZsdXRl 96812 -LkFwcGVuZFRleHQ= 96813 -IFp1Yg== 96814 -IFB1bGl0emVy 96815 -OmJvdGg= 96816 -Lm1heExlbmd0aA== 96817 -LlByb3BlcnR5VHlwZQ== 96818 -YXd5 96819 -aXRlbU5hbWU= 96820 -IE5hcnJhdGl2ZQ== 96821 -cmV2b2x1dGlvbg== 96822 -IGhhbHRlbg== 96823 -IEVycm9yUmVzcG9uc2U= 96824 -Z2F0aGVy 96825 -L3V0aWxpdHk= 96826 -Oicn 96827 -IEtlZQ== 96828 -IE9seW1waWE= 96829 -Q2xpbmljYWw= 96830 -OmdyZWVu 96831 -IFBsZXg= 96832 -IEtlbnNpbmd0b24= 96833 -IFBob25ldGlj 96834 -IGRpc3RyaWJ1dGVz 96835 -X2V4ZW1wdA== 96836 -V2F0Y2hpbmc= 96837 -Lk1pc2M= 96838 -IGRvbWFpbmU= 96839 -OiIu 96840 -44OV44I= 96841 -X01PRFVMRVM= 96842 -IGhhYmxhcg== 96843 -IExhb3M= 96844 -LnNldFRleHRTaXpl 96845 -LnBhdXNlZA== 96846 -X1RX 96847 -IG92ZXJ3aGVsbQ== 96848 -IGhlbWF0 96849 -THVja2lseQ== 96850 -IFNFTlQ= 96851 -IEludmVzdGlnYXRvcnM= 96852 -Pih7 96853 -KGZvdXQ= 96854 -IEFVWA== 96855 -LnJhd1F1ZXJ5 96856 -LXN0cm9uZw== 96857 -IHJlc2VtYmxlZA== 96858 -IFNoYWZ0 96859 -IFhJSUk= 96860 -c3VnZ2VzdA== 96861 -IHNpbmdhcG9yZQ== 96862 -X2FiaWxpdHk= 96863 -JGs= 96864 -CWlOZEV4 96865 -XEltYWdl 96866 -Q2FkYXN0cm8= 96867 -LnBpdm90 96868 -IG1hbnBvd2Vy 96869 -X2F0dHM= 96870 -LnNldEZpbGw= 96871 -ZXdvcmxk 96872 -Y29uc3Rz 96873 -R2V0V2lkdGg= 96874 -IGdyYXR1aXRh 96875 -IFBldHI= 96876 -LWFuc3dlcg== 96877 -IEhlbWlzcGhlcmU= 96878 -IENhag== 96879 -IFRyYWRlcw== 96880 -xIdp 96881 -IEZyZWRkeQ== 96882 -T25DaGFuZ2U= 96883 -IHBvcm5vZ3JhZmlh 96884 -IFNVTU1BUlk= 96885 -X21lYXM= 96886 -IERSSVZF 96887 -IENyZWU= 96888 -X21hbGU= 96889 -IHN1aw== 96890 -IG1hbmV1dmVycw== 96891 -c2V0VmlzaWJpbGl0eQ== 96892 -YWxsaQ== 96893 -IGRpc2NyZXRpb25hcnk= 96894 -cmVnYXRpb24= 96895 -WVNUSUNL 96896 -OmhyZWY= 96897 -IHRhcmFm 96898 -IGNodQ== 96899 -IEBb 96900 -RW5vdWdo 96901 -LlRyYW5zZmVy 96902 -SWZOZWVkZWQ= 96903 -OildKQ== 96904 -CSAgICAgICAgICAgICAg 96905 -W2F4aXM= 96906 -VHJhbnNsYXRpb25z 96907 -LnNlcnZlcnM= 96908 -IEtFRVA= 96909 -JywpCg== 96910 -c3BvbnNvcg== 96911 -YXJjaGl2ZXM= 96912 -LlVsdHJhV2lu 96913 -IEhvbm91cg== 96914 -J10pKTs= 96915 -IGluZWxpZ2libGU= 96916 -IEFudHdvcnRlbg== 96917 -IEFwcGxpY2F0aW9uRXhjZXB0aW9u 96918 -IGNhdGVnb3JpZQ== 96919 -IFdFSUdIVA== 96920 -IEJ1bmR5 96921 -IFBJWEVM 96922 -IGR1a2U= 96923 -VG93ZXI= 96924 -U2NvdGxhbmQ= 96925 -IHJlZmVyZWVz 96926 -IEFzc2VtYmx5VHJhZGVtYXJr 96927 -CXN0YXJ0QWN0aXZpdHk= 96928 -Lk9uZVRvT25l 96929 -IEF1c3dhaGw= 96930 -IHN0cmVuZ3RoZW5z 96931 -LlF1aXQ= 96932 -IFVSTFJlcXVlc3Q= 96933 -ZWVj 96934 -IHJlZ2lzdHJhemlvbmU= 96935 -IGhvc2Vz 96936 -QWN0dWFsaXphcg== 96937 -L2FycmF5 96938 -IGNvbnN0cnVjdGlvbnM= 96939 -Y2Nk 96940 -IEZpbGVOb3RGb3VuZEVycm9y 96941 -VGjDqm0= 96942 -KHJlc3VsdGFkbw== 96943 -IFNFUklFUw== 96944 -U3BlYWs= 96945 -X0FIQg== 96946 -QmxvY2tlZA== 96947 -LWZvbnRhd2Vzb21l 96948 -Ol0p 96949 -b2JibGU= 96950 -KGxpbmtz 96951 -IENhdGFsb25pYQ== 96952 -R2VW 96953 -LkRhdGVGb3JtYXQ= 96954 -IGZsZWE= 96955 -LmVm 96956 -IHNvbGljaXR1ZA== 96957 -IERZ 96958 -Y29kZWdlbg== 96959 -eXRoZQ== 96960 -IGVwb2xs 96961 -X1RE 96962 -IGFmZmlybWF0aW9u 96963 -X2Zh 96964 -SVNUQQ== 96965 -IEVhdG9u 96966 -Y3JlYXRlUXVlcnk= 96967 -IGxvZ2lzdGljYWw= 96968 -IFJheWNhc3RIaXQ= 96969 -IGNhdWxpZmxvd2Vy 96970 -IHVsY2Vy 96971 -LkFscGhh 96972 -aW5rZQ== 96973 -Wy4u 96974 -RVhBTVBMRQ== 96975 -LXdhZ2U= 96976 -IHN0YXRp 96977 -ZWN0aXZl 96978 -LmdldE1pbg== 96979 -IFNVQkpFQ1Q= 96980 -IEF1ZGlvTWFuYWdlcg== 96981 -enphcmVsbGE= 96982 -IFNlbGVjdExpc3RJdGVt 96983 -ICQNCg== 96984 -IG9oaW8= 96985 -IFRhaG9l 96986 -IGtXaA== 96987 -cXVlcnlTdHJpbmc= 96988 -IGRlcGFydGFtZW50bw== 96989 -PWFkbWlu 96990 -IHdvcmtzdGF0aW9u 96991 -KSsrOwo= 96992 -SGVhZGVySW5TZWN0aW9u 96993 -IFRyaXVtcGg= 96994 -Q2hhcmxvdHRl 96995 -IFNNQQ== 96996 -Q8OzbW8= 96997 -IHZlcm0= 96998 -IHRoZWFubw== 96999 -Ymdjb2xvcg== 97000 -XCIiLAo= 97001 -IFJlbWluZGVy 97002 -QmlsbHk= 97003 -b3JhbFR5cGU= 97004 -Z2ViZXI= 97005 -KGNsb25l 97006 -IEt1dA== 97007 -Lz4u 97008 -QXBvbGxv 97009 -IHNobA== 97010 -Wkg= 97011 -VGh1bmRlcg== 97012 -IGdpZnM= 97013 -X2tlbGFz 97014 -IFJvdGhz 97015 -IH0o 97016 -IEJyb2FkY29t 97017 -IERlcHRocw== 97018 -CUlOTkVS 97019 -cGFyY2Vs 97020 -IGVqZXJjaWNpbw== 97021 -IGluZGVwZW5kZW50cw== 97022 -aWxsb3c= 97023 -ZXhlY3V0YWJsZQ== 97024 -RXZlbnRv 97025 -IHpvc3Q= 97026 -IEhNQUM= 97027 -W0RsbEltcG9ydA== 97028 -YWxsZXM= 97029 -X2Rlcml2YXRpdmU= 97030 -QXBpS2V5 97031 -IHN0ZXBwZXI= 97032 -PXBsdA== 97033 -Z2V0SW5kZXg= 97034 -IHZhbGV1cnM= 97035 -UG9saXRpY3M= 97036 -IElEWA== 97037 -IFVzYQ== 97038 -IExUQw== 97039 -Lm1pbkxlbmd0aA== 97040 -c3Rybw== 97041 -X05D 97042 -IHN0YWduYW50 97043 -IG1vbnRhZ2U= 97044 -IGJsb3VzZQ== 97045 -ZWxpZ2U= 97046 -IHR1cnF1b2lzZQ== 97047 -IFN1cGVybg== 97048 -5q2z 97049 -dmFyYQ== 97050 -TmV3SXRlbQ== 97051 -X0VYVEVOREVE 97052 -IHdvb2R3b3JraW5n 97053 -IEVwaXNjb3BhbA== 97054 -LnBhaXI= 97055 -LlVzZXJJbmZv 97056 -IGRpcmVudA== 97057 -L3RjcA== 97058 -IGZyYXVnaHQ= 97059 -U2xhdmU= 97060 -LmdldExhdGl0dWRl 97061 -IFRvb2xib3g= 97062 -IGVhcm5lcnM= 97063 -IEhPVVI= 97064 -0LDQu9Cw 97065 -cG9zYWJsZXM= 97066 -Y29uZGl0aW9uYWxseQ== 97067 -X3h4 97068 -IGxhbsOn 97069 -KHJw 97070 -Q2hh 97071 -IGluY2Fybg== 97072 -LkRhbw== 97073 -Li8o 97074 -2KfZgQ== 97075 -VGQ= 97076 -Q0VG 97077 -L3JhbmQ= 97078 -LlZpcnR1YWw= 97079 -IGRiSGVscGVy 97080 -YW1pbmVz 97081 -IGx6 97082 -IHN0b3M= 97083 -IEF0a2lucw== 97084 -X0RE 97085 -aXRvcmlv 97086 -IG1pbmltaXNl 97087 -aGlwc3Rlcg== 97088 -KHsuLi4= 97089 -X1NSVg== 97090 -W2ZyYW1l 97091 -IFJva3U= 97092 -R1JQ 97093 -IGJhcmJlcg== 97094 -LkZlY2hh 97095 -IOuwnA== 97096 -IGdyYW51bGFyaXR5 97097 -IFNheWluZw== 97098 -X2xpa2VsaWhvb2Q= 97099 -LmJhckRvY2tDb250cm9s 97100 -IGZyb250bGluZQ== 97101 -IFdoYWxl 97102 -IHNtZWxsaW5n 97103 -IENvbnRyaWJ1dGlvbnM= 97104 -aXZhbnQ= 97105 -IGNyaXBwbGluZw== 97106 -cHJlbG9hZA== 97107 -IEhlcnJlcmE= 97108 -X1dBVENI 97109 -LWV0 97110 -OmV4cHI= 97111 -aW52ZXN0bWVudA== 97112 -ZWRlcmF0aW9u 97113 -X21nbXQ= 97114 -IGhvb3Bz 97115 -bW9ua2V5 97116 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK 97117 -aW50ZXJzZWN0 97118 -IGNyaW1zb24= 97119 -IHN1b2k= 97120 -IFtdOgo= 97121 -WE9iamVjdA== 97122 -U0ZNTA== 97123 -RVFVQUw= 97124 -KCd+ 97125 -Y2VudHJvaWQ= 97126 -CXJlc3RvcmU= 97127 -IHByZW5hdGFs 97128 -IE1pc3RyZXNz 97129 -IHF4 97130 -dHBz 97131 -IHJlc3Bhd24= 97132 -IFtdKSwK 97133 -IGtvbnRyb2w= 97134 -44GC44KK44GM44Go44GG44GU44GW 97135 -TW9kdWxlTmFtZQ== 97136 -IG5ld1BhdGg= 97137 -IFBhZ2luZw== 97138 -IHJpbnM= 97139 -X21ha2Vy 97140 -XGJyaWVm 97141 -IGJpc2hlcg== 97142 -CVJlYWQ= 97143 -IGppaGFkaXN0 97144 -LnBlcnNpc3RlbnQ= 97145 -IFJvYm90cw== 97146 -L2dycGM= 97147 -IEpvdQ== 97148 -w6RyZW4= 97149 -77yM5Zyo 97150 -LXB0 97151 -IHpkYXJtYQ== 97152 -X05N 97153 -IENvbm5lY3Rpdml0eQ== 97154 -KGJj 97155 -IEZsb3JpYW4= 97156 -IFNvY2lvbG9neQ== 97157 -X3dv 97158 -QW5kU2VydmU= 97159 -XygpOwo= 97160 -IEZMVA== 97161 -X0RFUg== 97162 -IENvbm5pZQ== 97163 -IEJyb2FkY2FzdFJlY2VpdmVy 97164 -eyg= 97165 -IGNvbW1lbnRlcg== 97166 -IGRlbW9jcmF0 97167 -IGFtcGxpZnk= 97168 -LS0tLS0tLS0tLQ0K 97169 -IEhNUw== 97170 -IHRyYWlsZWQ= 97171 -IFNvZGE= 97172 -LXRlc3RlZA== 97173 -dWxpc3Q= 97174 -KW5ldw== 97175 -X1RocmVhZA== 97176 -VG9kZA== 97177 -IGRlYmlhbg== 97178 -Vms= 97179 -IHByZXNlbnRh 97180 -IGNvbWZvcnRz 97181 -IFdhc2hlcg== 97182 -IGdhcmc= 97183 -IEh1Y2thYmVl 97184 -INGB0LDQvA== 97185 -ICEi 97186 -QWRhcHRlck1hbmFnZXI= 97187 -IEVh 97188 -IEFzc29jaWF0aW9ucw== 97189 -CQkJCQkKCQkJCQkK 97190 -LmdldFdyaXRhYmxlRGF0YWJhc2U= 97191 -IG51Y2xlaQ== 97192 -w6lnb3JpZQ== 97193 -CSAgICAgICAgICAgICAgICAg 97194 -QkFC 97195 -IHVwa2VlcA== 97196 -IFR1cA== 97197 -LndpdGhPcGFjaXR5 97198 -bHlh 97199 -IGx1eGU= 97200 -dXBybw== 97201 -LWVuZw== 97202 -IHJlbGHDp8Ojbw== 97203 -IGtleVByZXNzZWQ= 97204 -IGh5YnJpZHM= 97205 -bGZ3 97206 -T3BlcmF0aW9uQ29udHJhY3Q= 97207 -IG5hbWVMYWJlbA== 97208 -IEhvcnQ= 97209 -X2dydXBv 97210 -IGJhbmRh 97211 -SXg= 97212 -SGVhbHRoeQ== 97213 -LmdldEVuZA== 97214 -ZnJhdQ== 97215 -KFNjZW5l 97216 -KENvbGxlY3Rpb25z 97217 -IFNraXBwaW5n 97218 -dWJv 97219 -IGbDvG4= 97220 -Ij4tLT4K 97221 -IGRyb2l0cw== 97222 -IGhvbW9zZXh1YWxz 97223 -IGFiZHVjdGlvbg== 97224 -CXdpZGdldA== 97225 -JGhlYWRlcnM= 97226 -IERBUg== 97227 -IGZsYQ== 97228 -dGhyZWF0 97229 -IGxvdWlz 97230 -LkdldFByb3BlcnR5 97231 -Ikp1c3Q= 97232 -KGZyYW1lcw== 97233 -cnlv 97234 -cHJvZmVzc2lvbg== 97235 -fGk= 97236 -7ZW07ISc 97237 -KHN2 97238 -IHVucmVjb2duaXplZA== 97239 -SW9uaWM= 97240 -RmFzaGlvbg== 97241 -U2NyZWVuU3RhdGU= 97242 -IEluY29taW5n 97243 -Tm90Tmls 97244 -IHN5bmNpbmc= 97245 -ZW1pZQ== 97246 -IHRoZXJtbw== 97247 -X3Byb2Nz 97248 -IGluY29uc2lzdGVuY3k= 97249 -cmVsaWdpb3Vz 97250 -Lm1q 97251 -IHBlcnNvbm4= 97252 -IG1vbWVudG9z 97253 -b3JhcmlseQ== 97254 -IOaK 97255 -X25ldXJvbnM= 97256 -SWxsdXN0cg== 97257 -aW1vdG8= 97258 -aWxpaw== 97259 -IFdvag== 97260 -VHJhZGluZw== 97261 -IGFwcGFyZQ== 97262 -IGVudHJlcHJpc2Vz 97263 -YWNoYXQ= 97264 -IMKs 97265 -IG5laWdo 97266 -QlVUVE9ORE9XTg== 97267 -IE1haGVy 97268 -YWdoYW4= 97269 -LWhhc2g= 97270 -ImY= 97271 -IGNsaWVudGVsZQ== 97272 -LmFkZEJ1dHRvbg== 97273 -CVNQ 97274 -UWk= 97275 -IGdyYXRlZA== 97276 -UE9TSVRF 97277 -Oj4= 97278 -IEhvd2VsbA== 97279 -IENvbXBhcmF0aXZl 97280 -IElTQw== 97281 -wq1p 97282 -T2NlYW4= 97283 -RGF2aXM= 97284 -IEZpbG1l 97285 -V2lucw== 97286 -IEpJVA== 97287 -b2NjZXI= 97288 -IENvcm0= 97289 -RU5DSE1BUks= 97290 -cmNoaXZl 97291 -aWNhw6fDo28= 97292 -IG1hdGE= 97293 -IGNoaWxkYmlydGg= 97294 -IE9wdGlvbmFsbHk= 97295 -RW5z 97296 -IHhodHRw 97297 -IGVsdWNpZA== 97298 -X09zY0luaXRTdHJ1Y3Q= 97299 -KSkpOgo= 97300 -IGludHVpdA== 97301 -IERvbmF0ZQ== 97302 -IGNvcnJlbGF0ZXM= 97303 -PkRlbGV0ZQ== 97304 -IGVxdWlwZQ== 97305 -IGJvY2E= 97306 -IGluZmxhdGFibGU= 97307 -ZXJhaA== 97308 -IERhdGVUaW1lS2luZA== 97309 -IGNhbHZlcw== 97310 -XExpYg== 97311 -IGVtbHJ0 97312 -IFRyaWxvZ3k= 97313 -IFBhbmM= 97314 -IER1aXM= 97315 -IHBlbMOtY3VsYQ== 97316 -V0FSRFM= 97317 -X0RFVEVDVA== 97318 -LXNlY3Rpb25hbA== 97319 -ZGhjcA== 97320 -Rm9yUm93 97321 -LWRlc3RydWN0 97322 -IFByZXNlbnRlcg== 97323 -L3NsaWNr 97324 -LG9u 97325 -IENpdGFkZWw= 97326 -bG9nZ2VkaW4= 97327 -X3N1YnR5cGU= 97328 -IHNpZ3Vl 97329 -IGN1cmluZw== 97330 -IEZpcmV3YWxs 97331 -IGZsdW9yZXNjZW5jZQ== 97332 -IEl0YWxpYW5z 97333 -0LjRgtGB0Y8= 97334 -LmdldFN0eWxl 97335 -SW5TZWNvbmRz 97336 -amll 97337 -LVNtaXRo 97338 -IHhsaW5r 97339 -IHN1Ym1pc3NpdmU= 97340 -0L7QvdGC 97341 -YXJib25hdGU= 97342 -IEZhdWw= 97343 -X2dvYWxz 97344 -IENvbW1pc3Npb25lcnM= 97345 -Y2hhcnRJbnN0YW5jZQ== 97346 -X1BPU1RGSUVMRFM= 97347 -IG1lZGlhbA== 97348 -IG1hbm9z 97349 -IGRlbHQ= 97350 -c3Zt 97351 -LkFwaXM= 97352 -ZXBoeQ== 97353 -IGFzeW1wdA== 97354 -IGFwcERlbGVnYXRl 97355 -IGltcHJvYmFibGU= 97356 -Y2th 97357 -c2ltZA== 97358 -L0Vycm9y 97359 -LuKAkw== 97360 -IFBUUw== 97361 -ZGVlcg== 97362 -IHNpbmE= 97363 -bWFnbml0dWRl 97364 -SURBREU= 97365 -J119Jw== 97366 -IG1heW9yZXM= 97367 -CWNvbW1lbnQ= 97368 -L2NvbnNvbGU= 97369 -IkA= 97370 -dm9sdA== 97371 -LnNlbGw= 97372 -IE1hY3k= 97373 -IG1lbG9k 97374 -IGltw6FnZW5lcw== 97375 -X2NoZw== 97376 -IGlub3V0 97377 -aWRlbnRl 97378 -KScpLAo= 97379 -ZG5p 97380 -LmJsb2I= 97381 -IHR5cG9ncmFwaHk= 97382 -IGVlcmll 97383 -X09JRA== 97384 -cGVzYW4= 97385 -YWphbg== 97386 -IGNob3BwaW5n 97387 -IGJsdWZm 97388 -YWRm 97389 -X2Jhc2Vz 97390 -LkZvcm1hdHRlcg== 97391 -IFwl 97392 -IFBhZ2VJbmZv 97393 -Q2Fycmllcg== 97394 -IENhbGlicmF0aW9u 97395 -Y29tbw== 97396 -LWJvZGllZA== 97397 -IGZpbmFuY2llcg== 97398 -IElOQQ== 97399 -LkVSUg== 97400 -IGhvb2RpZQ== 97401 -IFNhbml0eQ== 97402 -Z3VhcmRlZA== 97403 -Lm9wZW5kYXlsaWdodA== 97404 -SVNNQVRDSA== 97405 -SGlnaGxpZ2h0cw== 97406 -w7xuaw== 97407 -YW5pZW0= 97408 -YW5nZXJlZA== 97409 -YXNzaWdubWVudHM= 97410 -IHJlZ2lzdHJhZG8= 97411 -IFVQUEVS 97412 -YW1waWxrYW4= 97413 -YXNoaXJl 97414 -IE5pa29sYQ== 97415 -IENGTA== 97416 -IEhEQw== 97417 -IHBvaWRz 97418 -IElQcw== 97419 -IHByZXZlbnRhdGl2ZQ== 97420 -aXBzb2lk 97421 -aWZpeA== 97422 -LmNhbWVs 97423 -Lmdh 97424 -Vm9sdW1lcw== 97425 -LXN0ZQ== 97426 -WWFob28= 97427 -X3NpYmxpbmc= 97428 -SGlnaGVzdA== 97429 -b3B0Z3JvdXA= 97430 -IGt2aW5uYQ== 97431 -4oCd44CCCgo= 97432 -IEFwcGxpYW5jZXM= 97433 -ICI+PA== 97434 -JykiKQo= 97435 -aHR0 97436 -IElkZW50aWZpZWQ= 97437 -IHBlbmNpbHM= 97438 -IG1lbWJlcklk 97439 -IGFwcGVuZFN0cmluZw== 97440 -LmxvYWREYXRh 97441 -IG1vY2tNdmM= 97442 -IGp1Yg== 97443 -IFNsdXQ= 97444 -IFRhaXBlaQ== 97445 -c3RhdHQ= 97446 -UG9saXQ= 97447 -IHBhcnRhZ2Vy 97448 -RGlkQ2hhbmdl 97449 -SW5jcmVhc2Vz 97450 -KX0u 97451 -IEJhYmE= 97452 -X0NMSVA= 97453 -W3VuaXQ= 97454 -INC60LvRjtGH 97455 -IGFsY3VuaQ== 97456 -IExvbGE= 97457 -IGNsaW5naW5n 97458 -QFBvc3RNYXBwaW5n 97459 -KGNvbmNhdA== 97460 -IHNzaWQ= 97461 -IEZhdWM= 97462 -b2tpdA== 97463 -IFJlY29yZGVk 97464 -w6FsZXo= 97465 -KCQoJzw= 97466 -LmFzc2VydElzTm90 97467 -IGthbGk= 97468 -Vm9sdA== 97469 -IHdhcm1seQ== 97470 -IHNjYXJlcw== 97471 -Z2V0dGk= 97472 -ZsO8aHJ0 97473 -X2RvZXM= 97474 -LkVNQUlM 97475 -aW1hdGlvbnM= 97476 -IHNwcmluZ2ZveA== 97477 -IERlY29t 97478 -YXJjeQ== 97479 -IGdsaXRjaGVz 97480 -IE1vZmY= 97481 -IFZvbGw= 97482 -LmJldHdlZW4= 97483 -IGNvb3JkZW4= 97484 -IFBhcnRpY3VsYXJseQ== 97485 -R0JQ 97486 -IHNlbWJsZQ== 97487 -RWFzdGVybg== 97488 -X01TQg== 97489 -XSl7DQo= 97490 -bW9yZ2Fu 97491 -IEVWQUw= 97492 -ZGVyZQ== 97493 -SE9VU0U= 97494 -bW9pcmU= 97495 -aXN0aXF1ZQ== 97496 -X2xzdG0= 97497 -LWNvbW1pdA== 97498 -eXN0ZXJpb3Vz 97499 -IHR3aW5r 97500 -LXRodW1ibmFpbHM= 97501 -ZW7DrQ== 97502 -OicnLA== 97503 -IGJsYWNrb3V0 97504 -IEZsb29ycw== 97505 -IHNvZmFz 97506 -IG91aQ== 97507 -bGVzaG9vdA== 97508 -IFJhcQ== 97509 -LWFicw== 97510 -IGtyYQ== 97511 -TWluaW5n 97512 -c2hhZnQ= 97513 -LnNldENvbHVtbnM= 97514 -Q2xheno= 97515 -UFJFVFRZ 97516 -LnBsYXlsaXN0 97517 -6Zai 97518 -LVNhaGFyYW4= 97519 -TUlORw== 97520 -CWJs 97521 -6K6u 97522 -amY= 97523 -RE9DS0VS 97524 -aG9wZWZ1bGx5 97525 -KGlnbm9yZQ== 97526 -IFVzZXJzQ29udHJvbGxlcg== 97527 -IE1pdGFyYmVpdGVy 97528 -IExFUw== 97529 -SGFtaWx0b24= 97530 -LW1ldGFkYXRh 97531 -IEtL 97532 -aWt0aWc= 97533 -IHdvbGx0ZQ== 97534 -ZWdyYXRvcg== 97535 -XWJvb2w= 97536 -LGN1cnJlbnQ= 97537 -IHZhbHVlVHlwZQ== 97538 -IGV4Y2F2YXRpb24= 97539 -b2xhbmQ= 97540 -IHZlcnY= 97541 -L2ZpbGVwYXRo 97542 -QXV0aFByb3ZpZGVy 97543 -IHByb2NyYXN0 97544 -CVVMT05H 97545 -X01FTUJFUlM= 97546 -IHVwbGlmdA== 97547 -IEF1dG9ub21vdXM= 97548 -IGFydHdvcmtz 97549 -IE91dHJlYWNo 97550 -IHBvcmU= 97551 -SG9tZXBhZ2U= 97552 -RGlhbG9nVGl0bGU= 97553 -IEdlbmVyYXRpbmc= 97554 -UEFSU0U= 97555 -IHNlbWFuYXM= 97556 -IGh1bWFubw== 97557 -SlNHbG9iYWxTY29wZQ== 97558 -IHZvbHRl 97559 -IGJlbGxh 97560 -KGlzaW5zdGFuY2U= 97561 -IHBsYw== 97562 -XENhdGFsb2c= 97563 -IGVzdGVlbWVk 97564 -6Zu3 97565 -KHN1ZmZpeA== 97566 -IHN3ZWVwcw== 97567 -CU9SREVS 97568 -IGRvaXZlbnQ= 97569 -IFN3YXJt 97570 -IENvbXBpbGVk 97571 -Z2V0UGFnZQ== 97572 -QURS 97573 -LlJpY2hUZXh0Qm94 97574 -IE5hbWluZw== 97575 -YWdnZWQ= 97576 -IEdBTkc= 97577 -cmFzaW5n 97578 -b2RlbGVk 97579 -IGdhbGE= 97580 -IEpTTmFtZQ== 97581 -ZGRm 97582 -IGlsbHVzdA== 97583 -IExhbnNpbmc= 97584 -W3BvcnQ= 97585 -LWRlYXRo 97586 -IGRpbmhlaXJv 97587 -IEVpZ2h0aA== 97588 -IGJpYW4= 97589 -c3TDpQ== 97590 -IHZlcnNpw7Nu 97591 -IExpbmVhckdyYWRpZW50 97592 -IEhhcmRpbmc= 97593 -Liop 97594 -ZWN6eQ== 97595 -JGhlYWRlcg== 97596 -IHbDpXI= 97597 -VW5jaGVja2Vk 97598 -IGtvamU= 97599 -IFBhbGFkaW4= 97600 -KCkpKSw= 97601 -R2l2aW5n 97602 -KCl9KQo= 97603 -IGRpcHM= 97604 -RnJpZW5kbHk= 97605 -IHBvcnRyYXlz 97606 -IGhlbGl1bQ== 97607 -IGluc3VyZ2VuY3k= 97608 -X2V4cGlyeQ== 97609 -IHN0cmluZ0J5QXBwZW5kaW5nU3RyaW5n 97610 -IGFhbnRhbA== 97611 -c2xvcGU= 97612 -bWFzdA== 97613 -LmdldEludGVnZXI= 97614 -ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw== 97615 -X1BJUEVMSU5F 97616 -IGRlbnNlbHk= 97617 -IG11dGF0aW5n 97618 -bWlkaQ== 97619 -IFNlaXQ= 97620 -YXluZQ== 97621 -Tk9XTEVE 97622 -IERlc21vbmQ= 97623 -IEZOYW1l 97624 -IE5haXJvYmk= 97625 -XENvbnRleHQ= 97626 -IGNhbGN1bGFy 97627 -LWRlbg== 97628 -IGNvdHQ= 97629 -XSk6DQo= 97630 -IFJlY29tbWVuZGF0aW9u 97631 -IFJvbGV4 97632 -IHZhbGlkYXRpb25SZXN1bHQ= 97633 -LnBhdA== 97634 -IG7DoHk= 97635 -IFJlc3RDbGllbnQ= 97636 -IEdQSQ== 97637 -IEFzaGV2aWxsZQ== 97638 -IE9TUA== 97639 -IFBFUk1JU1NJT04= 97640 -0JTQsNGC0LA= 97641 -L25vdGlmaWNhdGlvbg== 97642 -S25pZ2h0 97643 -X1dvcmQ= 97644 -IEJlbmRlcg== 97645 -cmFua2luZw== 97646 -IHBhcnRpZGE= 97647 -X3Jlc2VydmF0aW9u 97648 -zIA= 97649 -IG1OYW1l 97650 -IGdldGNo 97651 -IGJvcnI= 97652 -IGRpbGlnZW50 97653 -RGlzY3Vzcw== 97654 -5q2j5Zyo 97655 -YXBlYWtl 97656 -aW9uZWQ= 97657 -LU5hemk= 97658 -LmN1bQ== 97659 -IEtyb24= 97660 -PSQoJyM= 97661 -L3NpbmdsZQ== 97662 -IGVyb3Rpc2No 97663 -IFZpYg== 97664 -IHJhdGlmaWVk 97665 -IGNvbmNlcnRlZA== 97666 -IFJFR0FSRA== 97667 -IGRvYnI= 97668 -LkRyaXZlck1hbmFnZXI= 97669 -J3I= 97670 -UG9ydGFibGU= 97671 -CXN1aXRl 97672 -IHJlbGFjaW9uZXM= 97673 -IERvcA== 97674 -ZW1wbG9p 97675 -RE9C 97676 -IGNydW1icw== 97677 -IHhscw== 97678 -X0FwcGxpY2F0aW9u 97679 -KCc6Jyw= 97680 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo= 97681 -bXNl 97682 -IGJlcms= 97683 -IFJldHVyblZhbHVl 97684 -IEJlbGx5 97685 -IGNhbWFy 97686 -IFBlZWs= 97687 -ZWxzaW5n 97688 -IG5vdGlmaWVz 97689 -IFRyaXN0YW4= 97690 -IEdBUg== 97691 -ZW1tZQ== 97692 -IEVsZXZhdGVk 97693 -X0NTVg== 97694 -KGNoYWxr 97695 -IHR3ZW50aWVz 97696 -IFNlYXJjaFJlc3VsdA== 97697 -PXNlYXJjaA== 97698 -IE1peGluZw== 97699 -w710 97700 -IHJlY3J1aXRlcg== 97701 -IElERU9HUkFQSA== 97702 -IEFnbw== 97703 -KE9wZXJhdGlvbg== 97704 -JHZhbHVlcw== 97705 -IHdvcmxkbHk= 97706 -IFJvc2VuYmVyZw== 97707 -IENvbmZpZ3VyZVNlcnZpY2Vz 97708 -Pio8Lw== 97709 -S0FOSkk= 97710 -IGNodWNrbGVk 97711 -IHN0cmlmZQ== 97712 -IEJvbWJheQ== 97713 -IEJBQ0tHUk9VTkQ= 97714 -ZXRhdA== 97715 -ZW51bWVyYXRvcg== 97716 -IHPDu3I= 97717 -IOOBrg== 97718 -X3BlZGlkbw== 97719 -L0Rr 97720 -IGplYW4= 97721 -X0NvbHVtbg== 97722 -IGhlYXRtYXA= 97723 -LlBlbmRpbmc= 97724 -IHVuc3VjY2Vzc2Z1bGx5 97725 -CWVw 97726 -IHNpbmZ1bA== 97727 -IEFudG9ueQ== 97728 -X0ZPQ1VT 97729 -VGV4dExhYmVs 97730 -X3JlYWN0aW9u 97731 -IElEaXJlY3Q= 97732 -IGNhcm5pdg== 97733 -V29ya3NoZWV0 97734 -IHN1ZWRl 97735 -CVJUQ1Q= 97736 -IHNldGJhY2tz 97737 -LnVuYmluZA== 97738 -IHNpw6g= 97739 -TGlxdWlk 97740 -X1JFTkRFUkVS 97741 -TWF0ZQ== 97742 -IE1pbGxlbm5pYWxz 97743 -IGVwb3h5 97744 -aXp6aW5lc3M= 97745 -IGJyYXppbA== 97746 -0L7RgdGC0Yw= 97747 -JnZpZXc= 97748 -L2dwaW8= 97749 -SmFtaWU= 97750 -LkdyYXZpdHk= 97751 -PSIuJF8= 97752 -IFZBTg== 97753 -IElEUg== 97754 -YXBwZWFyYW5jZQ== 97755 -LlNlbGVuaXVt 97756 -TGVhcA== 97757 -LlJlbGF0aXZlTGF5b3V0 97758 -U2lnbmFscw== 97759 -QWNjZWxlcmF0aW9u 97760 -CUhBTkRMRQ== 97761 -L09wZW4= 97762 -IGdldExvZ2dlcg== 97763 -U3Bp 97764 -LXdyaXRpbmc= 97765 -INCy0YvQtw== 97766 -LXdvcnRoeQ== 97767 -IHdjcw== 97768 -IFFUaW1lcg== 97769 -IFBvbHltZXI= 97770 -IHZhbnQ= 97771 -CURlbGV0ZQ== 97772 -aXR0ZQ== 97773 -V2hpbHN0 97774 -IGFsZ3Vt 97775 -IHNoaWVsZGluZw== 97776 -IGttcw== 97777 -CSAgICAJCQk= 97778 -TWV0ZW9y 97779 -IGFnZ3JlZ2F0b3I= 97780 -IFNpbmQ= 97781 -SG9zdEV4Y2VwdGlvbg== 97782 -PScnLAo= 97783 -IEpTQnJhY2tldEFjY2Vzcw== 97784 -T05P 97785 -X0J1aWxk 97786 -IHN0cmlwcGVy 97787 -IExK 97788 -PENvbXBvbmVudA== 97789 -L3NvdXJjZXM= 97790 -IGVyZ29ub21pYw== 97791 -IEFjY3JlZA== 97792 -dW5jZQ== 97793 -b25pcw== 97794 -emVpZ3Q= 97795 -IFNrYXRl 97796 -IFJlY3RUcmFuc2Zvcm0= 97797 -SW5jb21wbGV0ZQ== 97798 -IGluZ2VuaW91cw== 97799 -IGNvaXNh 97800 -IGNpdHlOYW1l 97801 -aGFiaXQ= 97802 -X1RW 97803 -IEFOU1c= 97804 -Li4uIj4K 97805 -IHNub3Jr 97806 -X29wYWNpdHk= 97807 -IGluaXRXaXRoTmliTmFtZQ== 97808 -aWFkbw== 97809 -QUFD 97810 -IF0pLg== 97811 -O3o= 97812 -X3BhcmFncmFwaA== 97813 -IG5vc2Vz 97814 -c3RhbmRz 97815 -aWZy 97816 -X21F 97817 -SXJhcQ== 97818 -LlByZWRpY2F0ZQ== 97819 -ZW5haXJl 97820 -XV1dOwo= 97821 -IHVuaWRhZA== 97822 -IHJldGlyZWVz 97823 -X2hlbGxv 97824 -IG1vZGVsZQ== 97825 -IFVJVGFibGVWaWV3Q29udHJvbGxlcg== 97826 -ZndyaXRl 97827 -X251bWVybw== 97828 -X3Zpc2l0ZWQ= 97829 -IHJlY2ViZQ== 97830 -KE5vdGlmaWNhdGlvbg== 97831 -RmFudGFzdGlj 97832 -X3N1Ym1lbnU= 97833 -IFBFTQ== 97834 -IEN1cGVydGlubw== 97835 -YXBwcm94aW1hdGVseQ== 97836 -Y2xhc3NlZA== 97837 -LlJlYWRTdHJpbmc= 97838 -IGRvbWljaWxl 97839 -X1BX 97840 -IGJhbGxwYXJr 97841 -IEthbGU= 97842 -Y29udHJh 97843 -X2Zhdm9yaXRl 97844 -L29m 97845 -UXVpdGU= 97846 -IE9UQQ== 97847 -IGFjY2VsZXJvbWV0ZXI= 97848 -ZGlkbg== 97849 -fF4= 97850 -IFJvaGluZ3lh 97851 -aXZpY3Jt 97852 -YW5uYWJpbg== 97853 -0L7QsdGL0YLQuA== 97854 -b3JhZG8= 97855 -Jykr 97856 -SGF1bnRlZA== 97857 -LElE 97858 -KFVJQWxlcnRBY3Rpb24= 97859 -dXJ2 97860 -X2JlbA== 97861 -IE1leGljYW5z 97862 -L3Rlcm1z 97863 -IFBhaW50ZXI= 97864 -SW5wdXRMYWJlbA== 97865 -IFZpbmNp 97866 -IFJvc2ll 97867 -XHVj 97868 -PE1lbnU= 97869 -IGNvb2xhbnQ= 97870 -KGN1cnJlbnRVc2Vy 97871 -X2R1YWw= 97872 -KSJ9LAo= 97873 -JnA= 97874 -IGNvbnZlcmdlZA== 97875 -IHJlc3RyYWlu 97876 -IFl1Z29zbGF2aWE= 97877 -PXRhcmdldA== 97878 -IGltcHVscw== 97879 -ZHNh 97880 -U2VhcmNoVHJlZQ== 97881 -IGhib3g= 97882 -IEltcHJlc3M= 97883 -wqfDgw== 97884 -Z2V0RnVsbFllYXI= 97885 -KGRh 97886 -IFlZUw== 97887 -LmFsaWdubWVudA== 97888 -LkdldFRleHQ= 97889 -LnRva2VuaXpl 97890 -IE9seW1wdXM= 97891 -IG11cmt5 97892 -b3Jlc3RhdGlvbg== 97893 -IGRpc3NhdGlzZmFjdGlvbg== 97894 -CVRBcnJheQ== 97895 -X2tzZXM= 97896 -LkFkZFNpbmdsZXRvbg== 97897 -IFN0YXJ0VGltZQ== 97898 -IGZhbmF0aWM= 97899 -ICAgICAgICAgICAgICAgICAgICAJ 97900 -IGVudGl0eVR5cGU= 97901 -Lm92ZXJyaWRl 97902 -IC0tLS0tLS0tLS0tLS0= 97903 -IERhdGFncmFt 97904 -Zm91dA== 97905 -KHdpdGhJZA== 97906 -ICNfXw== 97907 -n+iDvQ== 97908 -ZWt5bGw= 97909 -LmZyaWVuZHM= 97910 -YW1lbGVvbg== 97911 -IHphY2g= 97912 -LnNpbXBsZUJ1dHRvbg== 97913 -cmV0b3Jubw== 97914 -IGtvbms= 97915 -L3NtYWxs 97916 -IFF1aWNrbHk= 97917 -dW5yZWFk 97918 -RG9uYXRl 97919 -RGV0YWlsVmlldw== 97920 -IGR1YQ== 97921 -IHBlbmV0cmF0ZWQ= 97922 -T01VWA== 97923 -IG5pcg== 97924 -X3BkYXRh 97925 -Il0sWyI= 97926 -IGxvd2Vz 97927 -IGRvcGluZw== 97928 -IGFzeW1tZXRyaWM= 97929 -IG5lZWRsZXNz 97930 -b3VyY2Vt 97931 -IHVwcm8= 97932 -IEd1enpsZQ== 97933 -YWZi 97934 -IHNleHRyZWZmZW4= 97935 -LWNvbGxhcg== 97936 -IGNvbG9zc2Fs 97937 -TW9ua2V5 97938 -bmlzaA== 97939 -IGhhbmRsZU1lc3NhZ2U= 97940 -SW5jcmVhc2Vk 97941 -KmR4 97942 -IENoYXR0YW5vb2dh 97943 -Zm9yZw== 97944 -IE9yZGVu 97945 -IHNocmk= 97946 -IFZhbmQ= 97947 -ICJAIg== 97948 -SW1hZ2VTaGFycA== 97949 -IFdpbGRjYXRz 97950 -cG9uaWJsZQ== 97951 -LnNjZW5lcw== 97952 -IHBhaW50ZXJz 97953 -IFBmaXplcg== 97954 -IFphaA== 97955 -VG9Mb2NhbA== 97956 -IEZsYW0= 97957 -IMOpdGFpZW50 97958 -KSle 97959 -IFNhbmRib3g= 97960 -IFRSQURF 97961 -IGNocm9taXVt 97962 -IGFjY2xhaW0= 97963 -IHBhY21hbg== 97964 -wrR0 97965 -KXJlYWRlcg== 97966 -TWFyaQ== 97967 -LkRpc3BhdGNoZXI= 97968 -LkFETUlO 97969 -IFJlbWVk 97970 -U3dlZGVu 97971 -IG92ZXJsYXlz 97972 -LmVy 97973 -IHBhbmc= 97974 -IGNsZWFubHk= 97975 -YXZlbnBvcnQ= 97976 -VG95b3Rh 97977 -cGF0Y2hlcw== 97978 -IHZ0eA== 97979 -IEVpcw== 97980 -Y2xhZG8= 97981 -IFJpdGNo 97982 -Uk9MUw== 97983 -IGhhZGU= 97984 -IGNvbnNwaWN1b3Vz 97985 -IGRvY2tz 97986 -KGpx 97987 -IFByZW1pZXJzaGlw 97988 -IEJleg== 97989 -IOKElg== 97990 -INGD0YHQuw== 97991 -X3RvdGFscw== 97992 -IHByb3Zh 97993 -IEN1ZQ== 97994 -IHNhw7pkZQ== 97995 -IEdhbWVDb250cm9sbGVy 97996 -SU1JWkU= 97997 -LHBvcnQ= 97998 -44CCKA== 97999 -LkNkZWNs 98000 -SW5zdGFudGlhdGlvbkV4Y2VwdGlvbg== 98001 -IGNvbGxhZ2U= 98002 -IElPQw== 98003 -IGJhaXM= 98004 -IG9uRmluaXNo 98005 -LXN0YXJz 98006 -c2V0U2l6ZQ== 98007 -IG1vZ3Vs 98008 -IGRpc2lsbHVzaW9u 98009 -IGNoZXZ5 98010 -KFNjaGVkdWxlcnM= 98011 -KElS 98012 -X2xvY3M= 98013 -IGNhbm5vbnM= 98014 -IGNhbmNlbGxpbmc= 98015 -L2J1cw== 98016 -IGJ1Zmlv 98017 -IFlvdXJz 98018 -IFBpa2FjaHU= 98019 -IHRlcm1l 98020 -csOl 98021 -ZmFocmVu 98022 -IG93bmVySWQ= 98023 -IG9ibGlnYXRvcnk= 98024 -IGN1bHA= 98025 -IGFjaWRpdHk= 98026 -LW11bHQ= 98027 -IEJhbWJvbw== 98028 -ICciPg== 98029 -X2dz 98030 -IGNvbXBpbA== 98031 -bmFyZA== 98032 -LWV4Yw== 98033 -IHJoeW1l 98034 -IGJ1dHRv 98035 -c2F5cw== 98036 -YW50YXN5 98037 -67g= 98038 -IGNpdHTDoA== 98039 -IGNoZWc= 98040 -VGltZVN0cmluZw== 98041 -IHBvc2l0aXZpdHk= 98042 -IERhYmVp 98043 -IHdhbmc= 98044 -IGVzY3Jl 98045 -ImM= 98046 -CXZpZGVv 98047 -IFJhbmtlZA== 98048 -LnN0cmluZ3M= 98049 -Pj4+KA== 98050 -INC40L3RgtC10YA= 98051 -IHJlc3Rh 98052 -WzosOg== 98053 -IHJlbmRyZQ== 98054 -IGRlc2Vy 98055 -Sm9z 98056 -IGRpc3J1cHRpb25z 98057 -INC+0L/QtdGA 98058 -c2FtcGxpbmc= 98059 -c3VwcHJlc3M= 98060 -IGNvbnRhaW5lclZpZXc= 98061 -IFNlYW1sZXNz 98062 -IGFpcnk= 98063 -IG9ubG9hZA== 98064 -LldpbmRvd01hbmFnZXI= 98065 -IFBMQQ== 98066 -YnJhY28= 98067 -LnNldFBvc2l0aXZlQnV0dG9u 98068 -IHBkdQ== 98069 -IGdzaQ== 98070 -IENsaQ== 98071 -X2dyYWRpZW50cw== 98072 -0Y/QtA== 98073 -IFdoaXNwZXI= 98074 -Y3N0ZGludA== 98075 -IGzDpG5n 98076 -IGZvcm11bGF0aW9ucw== 98077 -w6lub20= 98078 -b3VybmVtb3V0aA== 98079 -WyRf 98080 -IG9yZGluYXJpbHk= 98081 -LnNldFVzZXJuYW1l 98082 -IGZhY3VsdGllcw== 98083 -TUlUVEVE 98084 -L3ZhbHVlcw== 98085 -IHdlaXI= 98086 -IEFwdA== 98087 -TVo= 98088 -CWNm 98089 -dWNrZW4= 98090 -CQkJCQkJCQkJCQkJCQkJCQkJCQk= 98091 -ZGVmZW5zZQ== 98092 -W2lWYXI= 98093 -IEJ1c2luZXNzRXhjZXB0aW9u 98094 -U2VsZWN0b3Jz 98095 -KGNvb3JkaW5hdGVz 98096 -IFJlc2V0cw== 98097 -IERyaW5rcw== 98098 -b2xlYW5z 98099 -KHN0eXB5 98100 -X0lPQw== 98101 -Lnh4eA== 98102 -IFNsYXRlcg== 98103 -IEJlbGl6ZQ== 98104 -IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio= 98105 -YWRkaW4= 98106 -X2VwaXNvZGVz 98107 -IGlzY2hlbQ== 98108 -bGVnYWxBcmd1bWVudEV4Y2VwdGlvbg== 98109 -RGFubnk= 98110 -IHBhcmVk 98111 -LmNvZGVoYXVz 98112 -IEFzc3k= 98113 -CVJlY3Q= 98114 -4p4= 98115 -Lmxpc3Rh 98116 -INCy0LDRiA== 98117 -IHZldHM= 98118 -SFdORA== 98119 -aXNvbmVy 98120 -IHhv 98121 -IG9yYWxseQ== 98122 -IFN0bXQ= 98123 -LnJubg== 98124 -IERQSQ== 98125 -IFN0cmlrZXM= 98126 -LnNldFZpZXdwb3J0Vmlldw== 98127 -IOiHquWKqOeUn+aIkA== 98128 -WUVMTE9X 98129 -R0xlbnVt 98130 -cGFydG5lcnM= 98131 -IEltcGxpY2l0 98132 -IHRha28= 98133 -4oCZZWxsZQ== 98134 -IGVybcO2Zw== 98135 -dG90YWxDb3VudA== 98136 -R2ls 98137 -CXdvcms= 98138 -IHByYXRpYw== 98139 -aW5hdGk= 98140 -YWJpZXM= 98141 -IFNraW5uZXI= 98142 -IHNwaXJpdGVk 98143 -IHBhbmNyZWF0aWM= 98144 -IGhkZg== 98145 -J2Vt 98146 -IHBzeWNob3Npcw== 98147 -b2xpY2l0 98148 -ICJ7Ig== 98149 -X2F0dWFs 98150 -IMOpbGVjdA== 98151 -VEVBTQ== 98152 -IGRhaw== 98153 -IFNXQVQ= 98154 -LkZyYWdtZW50TWFuYWdlcg== 98155 -IHByb3Zpc2lvbmluZw== 98156 -bGlmZXRpbWU= 98157 -X0VYVEVOU0lPTlM= 98158 -IENBU0NBREU= 98159 -ICFb 98160 -KEtQ 98161 -IHZlbQ== 98162 -IEludGVycmFjaWFs 98163 -J119LAo= 98164 -c3BhY2Vy 98165 -X2t2 98166 -V2FyZWhvdXNl 98167 -UkRE 98168 -X2ZzbQ== 98169 -LlN0cmV0Y2hJbWFnZQ== 98170 -LFllcw== 98171 -IFJlZnVnZWU= 98172 -IEJyaW5naW5n 98173 -IHbDoWxpZG8= 98174 -LmludGVyc2VjdGlvbg== 98175 -IHNwb29reQ== 98176 -X3BvcnRhbA== 98177 -IG1vdGg= 98178 -IFpvZGlhYw== 98179 -IFNPQ0lBTA== 98180 -TWltZVR5cGU= 98181 -J119fTwv 98182 -IHJlc2l6YWJsZQ== 98183 -5Lqb 98184 -KHBoYXNl 98185 -KG1hcHBlZEJ5 98186 -IG11bmRpYWw= 98187 -IGNvbnZv 98188 -L2xlZnQ= 98189 -L2RvY3VtZW50cw== 98190 -d2FzaGluZw== 98191 -IEFtw6lyaWNh 98192 -X3F1b3Rh 98193 -LnBvc3Rlcg== 98194 -J10iKTsK 98195 -IHN0ZWxsdA== 98196 -IERJU0NMQUlNRVI= 98197 -W29wdA== 98198 -IGVkcw== 98199 -IFJhY2Vz 98200 -dmVudGFz 98201 -IHB6 98202 -IENhcGFj 98203 -IFVzZXJEYW8= 98204 -aXRlc3Q= 98205 -UHJvdmVlZG9y 98206 -IFNob3RndW4= 98207 -IHRoaXJzdHk= 98208 -IEJhbGFuY2Vk 98209 -aXF1ZXRh 98210 -IGhlYWxlcg== 98211 -LyIp 98212 -LlNkaw== 98213 -IHRlcnQ= 98214 -ImRhdGE= 98215 -X3Byb3ZpbmNl 98216 -LkF1dG9tYXRpb24= 98217 -IGZvbnRXaXRoTmFtZQ== 98218 -X0FOVA== 98219 -55WM 98220 -b29kbGVz 98221 -IFJFUFJFU0VOVA== 98222 -X0dQUw== 98223 -IHBlcnN1YXNpb24= 98224 -IERpc2N1c3Npb25z 98225 -IGZyZWQ= 98226 -TkVH 98227 -OmJvcmRlcg== 98228 -CWluaXRpYWxpemU= 98229 -CWdsb2c= 98230 -LWNhcGl0YWw= 98231 -IEltVmVj 98232 -IGRldmlz 98233 -Q2FuZGlkYXRlcw== 98234 -LmFuaW1hdGlvbnM= 98235 -IHJhZ2F6emk= 98236 -IFByb21ldGhldXM= 98237 -IEtpZGQ= 98238 -IHByb2dyYW1tYQ== 98239 -Q2VydGlmaWNhdGVz 98240 -Q29udGE= 98241 -LmVzcHJlc3Nv 98242 -IOuQmA== 98243 -IGJlaWRl 98244 -6ZmG 98245 -LmdldFJhdw== 98246 -IEZ1bGxOYW1l 98247 -IGlhbQ== 98248 -KCopKA== 98249 -bWFpZHM= 98250 -Qkg= 98251 -IENvbnNwaXJhY3k= 98252 -X0RV 98253 -IGJsYXRhbnRseQ== 98254 -IFx8 98255 -IFdpZw== 98256 -IENvbmo= 98257 -UmVuZGVyaW5nQ29udGV4dA== 98258 -TWl0Y2g= 98259 -IGFsbGVsZXM= 98260 -IOazqOaEjw== 98261 -IHJpbXM= 98262 -IE5laWdoYm9y 98263 -IEt5bGll 98264 -LnBhcnR5 98265 -dG9ycw== 98266 -IOyhsO2ajA== 98267 -IHdlcw== 98268 -IENyYWZ0aW5n 98269 -WyIu 98270 -LnNwb25nZQ== 98271 -IOqx 98272 -SXNsYW1pYw== 98273 -IHByb3NlY3V0aW5n 98274 -IHdpaw== 98275 -Lm9zZ2k= 98276 -b25pbmdlbg== 98277 -R3JhbW1hcg== 98278 -J2lt 98279 -IGF4aWFs 98280 -Q2xlYW5pbmc= 98281 -LmdldEV4dGVybmFsU3RvcmFnZQ== 98282 -PS4v 98283 -IGNocm9tYXQ= 98284 -0LXRhQ== 98285 -YWJheQ== 98286 -IGJvbGE= 98287 -LkFnZ3Jlc3NpdmU= 98288 -J10sJF8= 98289 -aXphY2Fv 98290 -UHJlcGFyaW5n 98291 -OkFueQ== 98292 -LkVOVEVS 98293 -LXdpbmRvd3M= 98294 -IGVucmFnZWQ= 98295 -X2RpY2U= 98296 -IGRldHRh 98297 -ZWNhbA== 98298 -X09SSUdJTg== 98299 -IC0tLS0tLT4= 98300 -X0JsdWU= 98301 -IGJvdGFuaWNhbA== 98302 -IGZyYWdz 98303 -IGZhbWlsaWFs 98304 -LWR1 98305 -IHNlaXppbmc= 98306 -KGJsb2Nrcw== 98307 -LnJk 98308 -LmNoZWNrTm90TnVsbA== 98309 -IG1pc2Vy 98310 -IG1heHg= 98311 -IEtuZWU= 98312 -Vmlld0l0ZW0= 98313 -SW5uZXJIVE1M 98314 -RGFuZ2Vy 98315 -KChfXw== 98316 -IHByenlwYWQ= 98317 -Y3JlYXRlVXJs 98318 -Kios 98319 -IERlY29yYXRpbmc= 98320 -QVRFR1k= 98321 -Pz4v 98322 -LkRlc2lnbmVy 98323 -aGV4ZGlnZXN0 98324 -IEV2ZXJ5d2hlcmU= 98325 -YWxsZXJpZXM= 98326 -LlRFWFRVUkU= 98327 -LkJsb2Nrcw== 98328 -emVsbA== 98329 -IHByZcOnbw== 98330 -U3VkZGVubHk= 98331 -aW5wdXRFbWFpbA== 98332 -KHN5bmM= 98333 -LmJk 98334 -Z29sZGVu 98335 -PicpOw== 98336 -IERpY2tpbnNvbg== 98337 -Pj4oCg== 98338 -IFFVRVVF 98339 -IGdldENvbHVtbg== 98340 -IFNBTkQ= 98341 -LnBpZWNl 98342 -bGljZXI= 98343 -Rmx1dHRlcg== 98344 -IGdldFZlcnNpb24= 98345 -IHJlc291cmNlSWQ= 98346 -b2ds 98347 -xYJhdw== 98348 -LkJyYW5jaA== 98349 -CXdlYg== 98350 -IGZyYW1lcmF0ZQ== 98351 -UFBQ 98352 -IGZyYXk= 98353 -Q05U 98354 -IGluZm9ybWF0aWU= 98355 -J10NCg0K 98356 -bmVhcw== 98357 -SGVhZGVyQ29kZQ== 98358 -IOa4 98359 -IHRyZw== 98360 -cmF3dHlwZXM= 98361 -SG9uZGE= 98362 -IG1hcmtldGVy 98363 -IHJlcXVlc3REYXRh 98364 -IFBn 98365 -CW5vdA== 98366 -IHBhZ2VJbmZv 98367 -IGFrdHVlbGxlbg== 98368 -44GV44KT 98369 -IEFNUw== 98370 -cHVzaFZpZXdDb250cm9sbGVy 98371 -CUFM 98372 -IHZlc3Rz 98373 -cHJvZHVjZQ== 98374 -LW3Dqm1l 98375 -IFJhaG1hbg== 98376 -RnVubnk= 98377 -RVo= 98378 -X1ZhbGlk 98379 -IHNxdWFkcm9u 98380 -IGxhc2g= 98381 -IGlybQ== 98382 -aWFzY28= 98383 -IFBhcmFu 98384 -IHBldGl0ZXM= 98385 -IERlY2F5 98386 -IHVuaW5pdGlhbGl6ZWQ= 98387 -cHJpdmlsZWdlZA== 98388 -IG1iZWR0bHM= 98389 -5aSH5rOo 98390 -IF4u 98391 -IGVjc3RhdGlj 98392 -RGV0cm9pdA== 98393 -IHBhcnRlbg== 98394 -IHNvdXZlbmly 98395 -LmdldExvZ2lu 98396 -0LzQvtGC0YA= 98397 -ZW7Dp8Ojbw== 98398 -IG3DrW5pbW8= 98399 -IEFjY2Vzc2Vk 98400 -cmnDsw== 98401 -TWlj 98402 -IFZvY2Fs 98403 -LlNldFN0cmluZw== 98404 -IG1lbnNhamVz 98405 -5YCN 98406 -IGF0dHJhdmVycw== 98407 -IEFwaA== 98408 -ICcpOw0K 98409 -w7xuZGU= 98410 -IGVuY2hhbnRlZA== 98411 -IFJvb3RTdGF0ZQ== 98412 -IENMT1NFRA== 98413 -CQkJCQkJCQkNCg== 98414 -IGNhbGllbnRl 98415 -b3JyaXM= 98416 -IHBoeXNpY2lzdHM= 98417 -aHduZA== 98418 -X3Zp 98419 -IHLDoXBpZG8= 98420 -IGNhcGl0YWxpemVk 98421 -ZWRCeQ== 98422 -IG1hY2hpbmluZw== 98423 -IGh1YmJ5 98424 -IFN0YWN5 98425 -LkJ1cw== 98426 -ZHJpbms= 98427 -SHVy 98428 -IHByb3BpYQ== 98429 -VW5pdFRlc3Q= 98430 -IG1pc2NvbmNlcHRpb24= 98431 -X18pKTsK 98432 -L2Rj 98433 -IE1heXdlYXRoZXI= 98434 -X21D 98435 -LmNyZWF0ZUZyb20= 98436 -IFFQYWludGVy 98437 -cm9wc3ljaA== 98438 -aW5uaXR1cw== 98439 -YXlhcw== 98440 -IGdlZw== 98441 -KGR3 98442 -IHVzYWRv 98443 -IHRyaWNrbGU= 98444 -IGFubmloaWw= 98445 -IFBhc3Rh 98446 -ICsrCg== 98447 -KEV4cGVjdGVkQ29uZGl0aW9ucw== 98448 -LnBvc3RWYWx1ZQ== 98449 -aWNhcA== 98450 -IERvbmV0c2s= 98451 -X3NvdXA= 98452 -LXB1Ymxpc2g= 98453 -IFBi 98454 -bWVudGlvbnM= 98455 -QUNDRVBU 98456 -LlB1bGw= 98457 -LOKAmeKAmQ== 98458 -IHJldGFyZGVk 98459 -X0FUT00= 98460 -IFRlcm1pbmF0b3I= 98461 -LWNvdXJ0 98462 -IENMTG9jYXRpb25Db29yZGluYXRl 98463 -IHJldmVyZW5jZQ== 98464 -IFNTQw== 98465 -dXRlbHk= 98466 -IFdPTg== 98467 -IEdTTA== 98468 -ZnJlaQ== 98469 -LmdldExvbmdpdHVkZQ== 98470 -IG9wZW5GaWxlRGlhbG9n 98471 -LkJ1dHRlcg== 98472 -LWltcG9ydGFudA== 98473 -X01BTlk= 98474 -IEdvbmc= 98475 -4oCcSG93 98476 -IGdvcmdl 98477 -PW1zZw== 98478 -IEV6ZWs= 98479 -Y3JlYXRlQ29tbWFuZA== 98480 -OmNoZWNrZWQ= 98481 -IGluZm9ncmFwaGlj 98482 -LldFU1Q= 98483 -RGlycw== 98484 -IGd1YXJkYQ== 98485 -IGJlZXRsZQ== 98486 -PHNtYWxs 98487 -LWFuZHJvaWQ= 98488 -IGNyZWRpdG9y 98489 -IE3DqWQ= 98490 -IGZpbmFsaXN0 98491 -IGFibA== 98492 -bmV2 98493 -X2ludGVyYWN0aW9u 98494 -IE1vbnRlcmV5 98495 -amFo 98496 -IGNhbmRpZXM= 98497 -IFF1aW5jeQ== 98498 -6Kqt 98499 -IGJhdGNoU2l6ZQ== 98500 -YWtpdA== 98501 -IG9iZQ== 98502 -KHBhcmE= 98503 -IGV4cGVyaW1lbnRlZA== 98504 -IGNvdW5jaWxsb3Jz 98505 -IGNsYXNoZWQ= 98506 -c3F1 98507 -LXN0cm9rZXM= 98508 -IEdL 98509 -IEV4cGlyZXM= 98510 -IHByb3NlY3V0aW9ucw== 98511 -IENyZWF0dXJlcw== 98512 -IHnDtg== 98513 -eGxpbQ== 98514 -X0lNUA== 98515 -RW50cnlQb2ludA== 98516 -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA= 98517 -LkRlZmF1bHRDZWxsU3R5bGU= 98518 -IGJyZXZl 98519 -IEJyaXRhbm4= 98520 -IHN3ZWF0eQ== 98521 -IGxldGg= 98522 -IGZsYXNoYmFjaw== 98523 -cGVybWFuZW50 98524 -IEpESw== 98525 -X0RldGFpbHM= 98526 -RXVybw== 98527 -cHB0 98528 -IHJpY2hUZXh0Qm94 98529 -L2JvYXJk 98530 -IHRyYW5jZQ== 98531 -LmN5Y2xl 98532 -Jyk7Iik7Cg== 98533 -IHRveGlu 98534 -X2RlaW5pdA== 98535 -IG92ZXJhcmNoaW5n 98536 -IGNvbmZpZ3BhcnNlcg== 98537 -IEthd2FzYWtp 98538 -LnRodW1i 98539 -IHBsYXlh 98540 -IEpvc2Vm 98541 -K18= 98542 -IHplcm9lcw== 98543 -IGF1cA== 98544 -IEhhcmk= 98545 -Y29tbWl0dGVk 98546 -Tml0 98547 -LmZpbGVQYXRo 98548 -IERpc2FiaWxpdGllcw== 98549 -bWFudWZhY3Q= 98550 -LWFsaWduZWQ= 98551 -LlJFU0VU 98552 -IHJ1c3R5 98553 -RXk= 98554 -IG91c3RlZA== 98555 -Y29zYQ== 98556 -U3RydWN0dXJlZA== 98557 -LmdldEQ= 98558 -IHPDoWJhZG8= 98559 -PkxvYWRpbmc= 98560 -X21B 98561 -LmdldFJhbmRvbQ== 98562 -Ymxpbmdz 98563 -IGNoZWVzZXM= 98564 -dHRp 98565 -LuKAog== 98566 -IEJ1cmdlc3M= 98567 -ZW5kZXJpdA== 98568 -LicsDQo= 98569 -KCIiKw== 98570 -YWNi 98571 -JXA= 98572 -aW5kZXhlZA== 98573 -X3ByZWRpY2F0ZQ== 98574 -bmVzaWE= 98575 -IGJpZWQ= 98576 -IENJVA== 98577 -KFBvcw== 98578 -X3JhZGk= 98579 -5Lu35qC8 98580 -Qml6 98581 -IEFkb2xlc2NlbnQ= 98582 -IHZpw6pu 98583 -Y3ljbA== 98584 -X0NhbmNlbA== 98585 -IGNvbmNsdXNpdmU= 98586 -IGFwcGVsbGF0ZQ== 98587 -aW5mb3JtYXRpY3M= 98588 -U0o= 98589 -IGVsZWN0aXZl 98590 -cm9sZUlk 98591 -RmV0Y2hlcg== 98592 -CUNvbW1hbmQ= 98593 -KCIoJQ== 98594 -IGZhcnQ= 98595 -SUxB 98596 -Z2V0QmxvY2s= 98597 -QVVTRQ== 98598 -INC00LDQvQ== 98599 -IEFydGU= 98600 -IG5vdGlmeWluZw== 98601 -IGdlbGU= 98602 -LnNhbWU= 98603 -IFJlZ2Vs 98604 -IEJhxZ8= 98605 -LmNyZWF0aW9u 98606 -IFZO 98607 -X2NvbW11bml0eQ== 98608 -IHVuc3VzdGFpbmFibGU= 98609 -U0VY 98610 -IGdyaWRTaXpl 98611 -cmVzY2lh 98612 -YXZlcnNhYmxl 98613 -KCcsJylb 98614 -IFBoZWxwcw== 98615 -4buVaQ== 98616 -QU5DRUxFRA== 98617 -LUlT 98618 -LnJ1bm5lcnM= 98619 -IFN0b2tlcw== 98620 -LlByb2R1 98621 -IHdoaXBwaW5n 98622 -X2FjcXVpcmU= 98623 -IGludmVzdGlnYWNpw7Nu 98624 -ZnJpZWQ= 98625 -LmNvcHlXaXRo 98626 -IEhhcmRjb3Zlcg== 98627 -LVNl 98628 -4Z624Z4= 98629 -aW52aXRhdGlvbg== 98630 -bGVzYWk= 98631 -IERvcm0= 98632 -INGB0L/QuNGB0LrQsA== 98633 -IGNvbmNhdGVuYXRlZA== 98634 -b3BoaWw= 98635 -IHRoaW5rZXI= 98636 -L2ZvbnRhd2Vzb21l 98637 -IExlb3BhcmQ= 98638 -ICIvIik7Cg== 98639 -IHJlc2lkdWFscw== 98640 -IE1pY3Jvd2F2ZQ== 98641 -IGNvbmZvcm1l 98642 -dGhyb3A= 98643 -IGRpc2VtYg== 98644 -IE9NRw== 98645 -IERpc2NpcGxpbmU= 98646 -IEFjcm9iYXQ= 98647 -L3JlcG9zaXRvcnk= 98648 -ZGZh 98649 -X01FRA== 98650 -YnVmaW8= 98651 -IG3DqXRob2Rl 98652 -X0hPTEQ= 98653 -aWFzaQ== 98654 -X2xlZ2FjeQ== 98655 -KQ0NCg== 98656 -5qOA 98657 -R2V0UHJvY0FkZHJlc3M= 98658 -IHlheQ== 98659 -b3RlbmNl 98660 -b3JkZXJpZA== 98661 -LXR3 98662 -IGRlYXJseQ== 98663 -SW5jb21pbmc= 98664 -L2ls 98665 -IG5ldXJvcA== 98666 -dWN6 98667 -KTsNDQ0K 98668 -IElubm92YXRpdmU= 98669 -IHByb2Z1bmQ= 98670 -aWdtYXQ= 98671 -U2VsZWN0aW9uTW9kZQ== 98672 -cmVsZXZhbnQ= 98673 -LkdP 98674 -IGJydWlzZXM= 98675 -IHNhY2g= 98676 -b2RlZg== 98677 -IHJlaW1i 98678 -L2Rlc2t0b3A= 98679 -LXNwb3Q= 98680 -dW5kYW5jZQ== 98681 -RW50cm9weQ== 98682 -XGNvcmU= 98683 -IHN1Z2Vy 98684 -IE12Yw== 98685 -IEdOT01F 98686 -X2luZHg= 98687 -IFlZU1RZUEU= 98688 -IE1hdGxhYg== 98689 -IENJRg== 98690 -ICopKQ== 98691 -IHByb2R1Y3RMaXN0 98692 -IEFscmlnaHQ= 98693 -YWNlbWFyaw== 98694 -0YLQuNCy 98695 -bW9kaWZpY2F0aW9u 98696 -aW50ZXJuYXRpb25hbA== 98697 -IGhvbWVycw== 98698 -IGRpY3Rz 98699 -IFFGb250 98700 -LlNRTGl0ZQ== 98701 -IHRyYW5zcGxhbnRhdGlvbg== 98702 -IE1lc3NhZ2VCb3hCdXR0b24= 98703 -IEVsdmVz 98704 -J11dKQo= 98705 -KFFJY29u 98706 -IGNpbmVtYXM= 98707 -Q09PUkQ= 98708 -LUNoaW5h 98709 -IGto4bqpdQ== 98710 -5oiR55qE 98711 -IHNrdWxscw== 98712 -IHBhaW5zdGFraW5n 98713 -ZmNl 98714 -LlhSTGFiZWw= 98715 -IHNwZWNpZmllcg== 98716 -IHByZWZlcnJpbmc= 98717 -L2FjdGl2aXR5 98718 -KFBob3Rv 98719 -w6FsdA== 98720 -LmxvdA== 98721 -Jycu 98722 -YW5ub25jZQ== 98723 -Lmdvb2dsZWNvZGU= 98724 -LXBkZg== 98725 -IFBva2U= 98726 -X0FDTA== 98727 -IGVuZG93ZWQ= 98728 -ZGlzY292ZXI= 98729 -Lm9tZw== 98730 -IHdvb2RsYW5k 98731 -Lk1hZ2lj 98732 -IHZvbG9udA== 98733 -Tm90QWxsb3dlZA== 98734 -IGNoYXZl 98735 -Qk1X 98736 -JywnPScs 98737 -IFNJWA== 98738 -5oiR5Lus 98739 -IGtvc2hlcg== 98740 -IGFzcGlyYXRpb24= 98741 -aW50bA== 98742 -X3JlZnB0cg== 98743 -JysK 98744 -bWVudG9y 98745 -LmNsdWI= 98746 -V2luZG93U3RhdGU= 98747 -LkFSUg== 98748 -IHp6YQ== 98749 -IG1lc3NhZ2VUeXBl 98750 -LmVxdQ== 98751 -VGhvcg== 98752 -IGluanVzdA== 98753 -IGd1bXM= 98754 -IGJvcmRlclNpZGU= 98755 -Ly8vLy8= 98756 -IFRyYW5zbWl0 98757 -IGJ1ZnNpemU= 98758 -IGhhaw== 98759 -IGVsbGFz 98760 -UkFORE9N 98761 -CW1j 98762 -IHBlYQ== 98763 -ZWtv 98764 -ZG9jdW1lbnRv 98765 -IGh5c3Rlcmlh 98766 -IGFyZW5hcw== 98767 -IGd1bm1lbg== 98768 -IG1pa2U= 98769 -IGltcHVuaXR5 98770 -YXRpc2F0aW9u 98771 -X1plcm8= 98772 -X0NPTVBBTlk= 98773 -IEdvcnM= 98774 -IHVzZUNsYXNz 98775 -KHJlZGlz 98776 -IFJVTk5JTkc= 98777 -IEJhaXI= 98778 -dmVsdGU= 98779 -ICcsJy4= 98780 -0LDRgtGM0YHRjw== 98781 -w7ZzdA== 98782 -ZW5jb2RlVVJJQ29tcG9uZW50 98783 -X3Jlc3RyaWN0 98784 -IGRlY2Fscw== 98785 -IFBlZGlkbw== 98786 -IGFsdGVyY2F0aW9u 98787 -RGlzcGxheXM= 98788 -IEFwcGxpY2FudHM= 98789 -Q1VT 98790 -VGV4dGFyZWE= 98791 -IEFuZ29sYQ== 98792 -LmZ1dHVyZQ== 98793 -IFVTSE9SVA== 98794 -IHN1cHByZXNzaW5n 98795 -IHNldHplbg== 98796 -QVBvbHlub21pYWw= 98797 -IHRvY2g= 98798 -IGhhbGxtYXJr 98799 -ICQkJA== 98800 -IENIQVJTRVQ= 98801 -LnJwbQ== 98802 -IERpY2g= 98803 -LS0tLS0tLS0tLS0tLS0tLS0tLS0= 98804 -X3Bhcm0= 98805 -6L+Y 98806 -YWNjaW9uZXM= 98807 -aGFpdA== 98808 -V0FSREVE 98809 -X3JvdXRpbmc= 98810 -IE5PTQ== 98811 -IGVuY2xhdmU= 98812 -IExvdHRv 98813 -CWZy 98814 -Y29tcGxleENvbnRlbnQ= 98815 -IEJhbGxhcmQ= 98816 -a3ViZQ== 98817 -L3dpbg== 98818 -LmdldENvbHVtbk1vZGVs 98819 -X1JFUExBQ0U= 98820 -SGVhZGVyVmFsdWU= 98821 -IGVzdHVkaWFudGVz 98822 -IGFwaXM= 98823 -IGJwbQ== 98824 -IFR5cGVOYW1l 98825 -QW5kR2V0 98826 -cml0YQ== 98827 -UGxhbnM= 98828 -Pk5vdGU= 98829 -IGZldGlzY2g= 98830 -IHRvbmVk 98831 -X2dvdG8= 98832 -b25zZW5zZQ== 98833 -IG1vbGRz 98834 -IGluZmlsdHJhdGlvbg== 98835 -IEd1ZXJyZXJv 98836 -dWJibw== 98837 -Y2tp 98838 -KCQoIi4= 98839 -X2FjdGl2aXRpZXM= 98840 -KGNoYW5nZXM= 98841 -IG9mQXBw 98842 -IEtlcGxlcg== 98843 -IERlbXA= 98844 -IENvbnRpbmVudA== 98845 -LlRpY2tz 98846 -IFVuc2lnbmVk 98847 -IEphaHJlcw== 98848 -IGZyZXNobWVu 98849 -IEFyY2hpdmVk 98850 -INC60L7RgtC+0YDRi9C5 98851 -ICc6Og== 98852 -VHV0b3JpYWw= 98853 -Q2M= 98854 -IHRhYmxlTGF5b3V0UGFuZWw= 98855 -ZnJvbUpzb24= 98856 -LmxldmVscw== 98857 -X3RyYW5zaWVudA== 98858 -IGVuZG9yc2luZw== 98859 -IERJQw== 98860 -bGF1Zg== 98861 -IHNocmVk 98862 -X0VNSVQ= 98863 -aWZpY2FudGx5 98864 -QUxB 98865 -L3Byb3Rv 98866 -IG5hcnJvd2luZw== 98867 -VXRj 98868 -RmFjdG9ycw== 98869 -IHNlbnRpZW50 98870 -5p6Q 98871 -bGl4aXI= 98872 -IENST1NT 98873 -bWV0ZW9y 98874 -IGdyb2lu 98875 -IG1kYg== 98876 -IFJvdHRlcmRhbQ== 98877 -IGNvbWlkYQ== 98878 -IE9wQ29kZQ== 98879 -IERlZmF1bHRWYWx1ZQ== 98880 -UGVybWlzc2lvbnNSZXN1bHQ= 98881 -IGhldGVyb2dlbmVvdXM= 98882 -IG1vb3Q= 98883 -IGRlY2VpdmVk 98884 -LWluZGVwZW5kZW50 98885 -IE9iamVjdE91dHB1dFN0cmVhbQ== 98886 -IG92ZXJwb3dlcg== 98887 -LmR1cA== 98888 -IGxkYg== 98889 -IGRvbWVzdGljYWxseQ== 98890 -IGJlc3RlbGxlbg== 98891 -IGxvdg== 98892 -IENvbnRyYWN0b3Jz 98893 -VHJpYW5nbGVz 98894 -IGZvZGRlcg== 98895 -IGZpbG1lcw== 98896 -5LyB 98897 -IHJldm9sdmVy 98898 -U3RhcnR1cFNjcmlwdA== 98899 -L3ZhbGlkYXRpb24= 98900 -IFJlc291cmNlVHlwZQ== 98901 -acWf 98902 -IExheg== 98903 -ZmVm 98904 -IGxzdG0= 98905 -eyo= 98906 -LmF0dGFjaG1lbnQ= 98907 -LmhpdHM= 98908 -ZXdpdGg= 98909 -RE9H 98910 -QWxhYmFtYQ== 98911 -IG1lZGl1bXM= 98912 -Lm1Db250ZXh0 98913 -LWNvbHM= 98914 -5Y+L 98915 -Lm5vdGljZQ== 98916 -IGF0dG4= 98917 -IFBhY2tpbmc= 98918 -IExu 98919 -X0NPTVBMRVg= 98920 -L1VzZXJz 98921 -LnNhdmV0eHQ= 98922 -IFJvdW5kcw== 98923 -Pyw/LD8sPyw= 98924 -IGluZ2w= 98925 -IFJPQw== 98926 -X2ZlbWFsZQ== 98927 -IFN0YXJk 98928 -XV07 98929 -IHdyZXN0bGVycw== 98930 -IHRvcnJlbnRz 98931 -IHNpbmg= 98932 -77u/Cgo= 98933 -67O1 98934 -c2Vuc2U= 98935 -aG93ZXZlcg== 98936 -LlBoeXNpY3M= 98937 -SW5mcmFzdHJ1Y3R1cmU= 98938 -IFNhY3I= 98939 -RmVs 98940 -IERJU1RSSUJVVA== 98941 -w6ltZW50cw== 98942 -IFZhbGlkYXRlcw== 98943 -IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj 98944 -IHwv 98945 -IGVzbA== 98946 -IHLDqXNlYXU= 98947 -IEJpcA== 98948 -QllURVM= 98949 -X1dBVEVS 98950 -VHVybmluZw== 98951 -RUxT 98952 -IGp1eHRhcA== 98953 -IGxlc2Jpc2NoZQ== 98954 -w71jaA== 98955 -KFVua25vd24= 98956 -TmVv 98957 -QEpzb25Qcm9wZXJ0eQ== 98958 -IGFsdW1ub3M= 98959 -IFJhcXFh 98960 -aW1laQ== 98961 -LmdldEJvdW5kcw== 98962 -Lk1vdXNlRXZlbnRIYW5kbGVy 98963 -IyMjIyMjIw== 98964 -R2VuZXJpY1R5cGU= 98965 -L2Ntcw== 98966 -IHR1cm5v 98967 -INC80LjQvQ== 98968 -IGZvbGtsb3Jl 98969 -IEV2bw== 98970 -IGNvbmR1Y3Rpdml0eQ== 98971 -IGxlYmVu 98972 -IGdlYXJib3g= 98973 -LXZz 98974 -IM+G 98975 -IGRyaW5rZXJz 98976 -IGNvbmV4YW8= 98977 -IFRlZXRo 98978 -IGdldEFyZ3VtZW50cw== 98979 -IFJBVA== 98980 -ZW50aW91cw== 98981 -RWR1Yw== 98982 -K1c= 98983 -IEluc3RpdHV0aW9uYWw= 98984 -IEJvcmQ= 98985 -aXNFcXVhbA== 98986 -KHB3ZA== 98987 -IGlnbml0ZWQ= 98988 -IFJvdXNzZQ== 98989 -IGltcGFjdGZ1bA== 98990 -IE1hbGs= 98991 -IGdlcmFs 98992 -IFBpdm90 98993 -IGF6dA== 98994 -IGNzdmZpbGU= 98995 -IFJvcGU= 98996 -IFNPTFVUSU9O 98997 -IEFyYml0cmFyeQ== 98998 -IGxldHRv 98999 -Lk1vdXNlQWRhcHRlcg== 99000 -IH19fQ== 99001 -IFNhaWxvcg== 99002 -ZGVyYQ== 99003 -UHV0dGluZw== 99004 -IGNvbmNlbnRyYXRlcw== 99005 -IGF1dGhEb21haW4= 99006 -4oCd55qE 99007 -LWZpbmFscw== 99008 -LHN0cmxlbg== 99009 -TXVvbg== 99010 -IE9yZGluYXJ5 99011 -ZmlyZWZveA== 99012 -IExhVGVY 99013 -IEh1bmQ= 99014 -ZW5naW5lZXJpbmc= 99015 -L2JsdWU= 99016 -ZWRUZXh0Qm94 99017 -KCIiKTs= 99018 -IENEREw= 99019 -a2VwdA== 99020 -IEdldFN0cmluZw== 99021 -S2ly 99022 -KCk9Jw== 99023 -IE9DRA== 99024 -YW50aXVt 99025 -JG1lbnU= 99026 -IEFwcGFsYWNoaWFu 99027 -U2VjcmV0YXJ5 99028 -66WY 99029 -4Li14Lii 99030 -U2VtYW50aWM= 99031 -ICpb 99032 -ZXN0b25l 99033 -dW5na2lu 99034 -TWF4WQ== 99035 -LXRvbmU= 99036 -In07DQo= 99037 -X1BhcnQ= 99038 -PE1lbWJlcg== 99039 -dHJhbQ== 99040 -IHRyYW5zaXN0b3I= 99041 -IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg== 99042 -IERlc2Rl 99043 -IHJpZ2h0ZnVs 99044 -IENvcm5lbA== 99045 -5pE= 99046 -LkhPVVI= 99047 -IHNpZGVsaW5lZA== 99048 -cmVmZXJyZXI= 99049 -bWF6ZQ== 99050 -IGhvbHN0ZXI= 99051 -IGNyaXBwbGVk 99052 -IERhdGVGb3JtYXR0ZXI= 99053 -b3BoYWdl 99054 -X21E 99055 -IGRlc2VsZWN0 99056 -cmF1ZA== 99057 -IFBLSw== 99058 -cm93RGF0YQ== 99059 -IGxvY2tzbWl0aA== 99060 -LnJlc3BvbnNlcw== 99061 -KHByb2R1Y3RJZA== 99062 -X1NUTVQ= 99063 -S2V5VHlwZQ== 99064 -LlRoZW4= 99065 -emVl 99066 -IGNydA== 99067 -IEdyYW5kbWE= 99068 -QFJlc291cmNl 99069 -IGJpdHdpc2U= 99070 -LWNtcHI= 99071 -44CCd3d3 99072 -emVpdGln 99073 -JmRpc3BsYXk= 99074 -Q2FydEl0ZW0= 99075 -LU5v 99076 -IG51bcOpcm8= 99077 -IG1hdXI= 99078 -IGluc3RhbmNpYQ== 99079 -CWR0 99080 -X25wYw== 99081 -IHNrYXRlYm9hcmQ= 99082 -4oCcQWxs 99083 -IENyb3dk 99084 -IMOkbg== 99085 -IGJyYXo= 99086 -Y2Fl 99087 -eW5ldA== 99088 -L3Bt 99089 -L3NjcmVlbg== 99090 -T1BUQVJH 99091 -IFZCb3g= 99092 -IGxlb3BhcmQ= 99093 -X2dyZWF0ZXI= 99094 -Y3B0 99095 -PGRk 99096 -IG1lY2hhbmljYWxseQ== 99097 -b3NwZWxz 99098 -KWY= 99099 -Lmx3amds 99100 -LmdldFBvcnQ= 99101 -IFBSRUY= 99102 -LkFkZFRyYW5zaWVudA== 99103 -cHBhcmQ= 99104 -IO2ajA== 99105 -RXRoZXJuZXQ= 99106 -IHNhbGluZQ== 99107 -KGxldmVscw== 99108 -IHNlcnZpY2VQcm92aWRlcg== 99109 -LkFuZ2xl 99110 -YWx0aXR1ZGU= 99111 -aWxsYXVtZQ== 99112 -IHNjYXBl 99113 -X0NBTEM= 99114 -X3F1ZXN0 99115 -IERpc3NlcnRhdGlvbg== 99116 -IEVETQ== 99117 -LUNkcw== 99118 -IGhvbm9yYXJ5 99119 -c3RvcHM= 99120 -IHN1YmRpcg== 99121 -IFZI 99122 -IENoZWF0 99123 -IHJpZ2h0ZnVsbHk= 99124 -UUU= 99125 -LldyaXRlQnl0ZQ== 99126 -ZmlndXJlcw== 99127 -ZW5uaWU= 99128 -KERCRw== 99129 -IHZva3NuZQ== 99130 -IGV4cGVuZGVk 99131 -VU5JQ0FUSU9O 99132 -aWxpbng= 99133 -IFJlY2Fw 99134 -X3ZlcnRz 99135 -IHRyYXVtYXQ= 99136 -IGdldFBsYXllcg== 99137 -IHZlcmJlc3M= 99138 -IGN1bHRpdmF0aW5n 99139 -IGluaXRpYXRvcg== 99140 -VGjDtG5n 99141 -ZmluZEZpcnN0 99142 -X3Blcm1z 99143 -IGJ1Yw== 99144 -ICIiIg0KDQo= 99145 -VFlQRVM= 99146 -b2JqZWN0TWFuYWdlcg== 99147 -KENvbmZpZ3VyYXRpb25NYW5hZ2Vy 99148 -IHRpbWlk 99149 -IHNuYXBjaGF0 99150 -IGNvbnNlZw== 99151 -CWRpc3RhbmNl 99152 -X3JpZ2h0cw== 99153 -X0Rlcw== 99154 -IEZsZXNo 99155 -LXZlcg== 99156 -IGFmbA== 99157 -ZnJhdWVu 99158 -IGJsYXNwaA== 99159 -IFF1YWxpdMOkdA== 99160 -bWFm 99161 -TW9uaXRvcmluZw== 99162 -LkRpZmY= 99163 -IHNob3JlbGluZQ== 99164 -IHJlc3BvbnNlQm9keQ== 99165 -bWVtc2V0 99166 -PGRlY2ltYWw= 99167 -U21hcnR5SGVhZGVyQ29kZQ== 99168 -IGluc2V0cw== 99169 -IEJpbmFyeVRyZWU= 99170 -YW1lZGE= 99171 -IG5paGls 99172 -IE5heQ== 99173 -eW1vbG9neQ== 99174 -IFdH 99175 -IHRhcGk= 99176 -IEluc3RhbGxlZA== 99177 -bWFpbnRlbmFuY2U= 99178 -KX0iCg== 99179 -IFhP 99180 -LXBlcmlvZA== 99181 -c2Fy 99182 -IG5pbmd1bmE= 99183 -T1JNQVQ= 99184 -LnNldFByb3RvdHlwZU9m 99185 -IEti 99186 -IEhlbnJpaw== 99187 -w6l0aXF1ZQ== 99188 -IExhaG9yZQ== 99189 -CUFkZHJlc3M= 99190 -IG1lbHRz 99191 -Tnk= 99192 -X2FkdmFuY2U= 99193 -IHZlbG9jaWRhZA== 99194 -IGFsdW1ubw== 99195 -IHNhbml0aXplcg== 99196 -IHBoaXNoaW5n 99197 -IENvbWV0 99198 -IGNoaWFy 99199 -CXNwZWM= 99200 -dHJpbW1lZA== 99201 -KHN0YXRlYXJy 99202 -b25uZW4= 99203 -UmV2ZW51ZQ== 99204 -TGVucw== 99205 -IGNoYWlyZWQ= 99206 -IEFzc3VtZXM= 99207 -VHJhc2g= 99208 -X3Vuc2V0 99209 -XEJyaWRnZQ== 99210 -UG9pbnRTaXpl 99211 -IFBvbGlj 99212 -IHNleHVhbGVz 99213 -CWRmcw== 99214 -IFdpZGVTdHJpbmc= 99215 -IGFjY3J1ZWQ= 99216 -WVc= 99217 -X1NDSEVEVUxF 99218 -IGtpdGU= 99219 -IHBhcmFjaHV0ZQ== 99220 -W3RhYmxl 99221 -IGFjdGl2ZUNsYXNzTmFtZQ== 99222 -LlF1YWQ= 99223 -SXNyYWVsaQ== 99224 -IMWT 99225 -IGhvb2c= 99226 -IGNo4buJ 99227 -ZXdlYXI= 99228 -IHRpcmVsZXNzbHk= 99229 -c2V0RXJyb3I= 99230 -LmdldEFtb3VudA== 99231 -LnNldEl0ZW1z 99232 -IE1hbnNvbg== 99233 -IEJheWVzaWFu 99234 -X0ZsYWc= 99235 -QUNIRVI= 99236 -L29yaWdpbmFs 99237 -IGltbWFj 99238 -IExvc2luZw== 99239 -Jz4KCg== 99240 -TGlj 99241 -IE1pcmFnZQ== 99242 -IEFzc2VtYmx5RmlsZVZlcnNpb24= 99243 -VGVW 99244 -IFZhbHVlRXZlbnRMaXN0ZW5lcg== 99245 -LXNvbHZpbmc= 99246 -VGhv 99247 -cm91bGV0dGU= 99248 -X1dQ 99249 -IHVuaW50ZXJydXB0ZWQ= 99250 -IGZpZWxkVHlwZQ== 99251 -LlR5cGVk 99252 -IGFtb3Vy 99253 -IG1vY2tlcnk= 99254 -KHZvbA== 99255 -IFN1YmNvbW1pdHRlZQ== 99256 -IFJ1Zg== 99257 -ZXJveA== 99258 -OlVJQnV0dG9uVHlwZUN1c3RvbQ== 99259 -IEJsdXI= 99260 -IHd5a29u 99261 -bmNlcw== 99262 -QVNIQk9BUkQ= 99263 -ISEiKTsK 99264 -IG11cmRlcmVycw== 99265 -LmRhaWx5 99266 -IERJQUc= 99267 -amluZw== 99268 -IGRvbHBoaW4= 99269 -IGzDsm5n 99270 -IGLDtg== 99271 -IFZvY2FidWxhcnk= 99272 -LlN0T2JqZWN0 99273 -JykiPg== 99274 -IHp1bg== 99275 -IHNjcmltbWFnZQ== 99276 -dHLDqWFs 99277 -IExpZw== 99278 -W3Zp 99279 -Q29sZQ== 99280 -IGZyb3N0aW5n 99281 -LlBsYXllcnM= 99282 -LXRyYW5zbGF0ZQ== 99283 -RmVlbHM= 99284 -PVwiLw== 99285 -LkJ1dHRlcktuaWZl 99286 -ID8+Owo= 99287 -IGF2aQ== 99288 -aW5uaWU= 99289 -LkZhaWx1cmU= 99290 -IHNwaW5kbGU= 99291 -Q29uZmlndXJhdGlvbkV4Y2VwdGlvbg== 99292 -X2hvcA== 99293 -IHBvc2nDp8Ojbw== 99294 -IEF3YWl0 99295 -VUlJbWFnZVBpY2tlckNvbnRyb2xsZXI= 99296 -CWRheQ== 99297 -IGdlbm9t 99298 -Q2Fi 99299 -INGA0LXQt9GD0LvRjNGC0LDRgg== 99300 -T1JJR0lOQUw= 99301 -IGVqYWN1bGF0aW9u 99302 -KHRjcA== 99303 -U0VDT05E 99304 -IHRvbmlj 99305 -IExpc3RCb3g= 99306 -IAkJCg== 99307 -KCk+Cg== 99308 -IHF1YXRyZQ== 99309 -xrDhu6NuZw== 99310 -d2l0aEVycm9ycw== 99311 -Lk1heWJl 99312 -LOKApg== 99313 -dG9rZW5JZA== 99314 -X1VOREVG 99315 -IGZyZXNobmVzcw== 99316 -IEFtZW5kbWVudHM= 99317 -Lm1hcGJveA== 99318 -LkNW 99319 -KGJsb2c= 99320 -X2dldHRpbWU= 99321 -LnF1ZXN0 99322 -c3BhcnNl 99323 -IHJlc2FsZQ== 99324 -IGVudGh1c2lhc3RpY2FsbHk= 99325 -IFByb3N0aXR1dGFz 99326 -V2E= 99327 -Q2FyZ28= 99328 -LlBhcmNlbGFibGU= 99329 -U0VOU09S 99330 -IFJ5dQ== 99331 -TGF1Z2hz 99332 -X05hdGl2ZQ== 99333 -L3Bn 99334 -eXN0cw== 99335 -IHBob3RvYw== 99336 -566A 99337 -YWRvcHQ= 99338 -LnNwZWNpZXM= 99339 -Y29uY2lsaWF0aW9u 99340 -QWRqdXN0ZWQ= 99341 -LkZpcmViYXNlQXV0aA== 99342 -dXR0bGU= 99343 -b3JkaW5hdGlvbg== 99344 -IG11bmNo 99345 -IFN0YWtl 99346 -LnBpbmc= 99347 -YW5rZXI= 99348 -KFFTdHJpbmdMaXRlcmFs 99349 -IHN1YnNjcmlwdA== 99350 -ICAJCg== 99351 -IE1DQw== 99352 -X0NtZA== 99353 -c2V4eQ== 99354 -aW91 99355 -IE1BTlk= 99356 -IG5hbm55 99357 -VFJBSU4= 99358 -IGZsb3VyaXNoaW5n 99359 -IFdhdGNoZXM= 99360 -IFFNYXA= 99361 -IEZlcm0= 99362 -IHdhc20= 99363 -IEFiZWQ= 99364 -X1VE 99365 -IEdsYXNzZXM= 99366 -K3Y= 99367 -QXR0ZW5k 99368 -LkNoYWlu 99369 -IGRlY2VuY3k= 99370 -IFN1cHBsZW1lbnRhcnk= 99371 -aHVudGVy 99372 -LXR4dA== 99373 -ICJ9IjsK 99374 -LnNldFdpbmRvd1RpdGxl 99375 -KCI8Pw== 99376 -IG51bWJlcldpdGhJbnQ= 99377 -IGFmYXI= 99378 -56e75Yiw 99379 -cml0dGU= 99380 -L2xpc3Rz 99381 -KeKAnQ== 99382 -IGRpdmVyc2Fz 99383 -IGVtYmVy 99384 -LlJlYWN0Tm9kZQ== 99385 -IGthbmc= 99386 -IFN0YW1mb3Jk 99387 -W2F0 99388 -LmNsb3NlUGF0aA== 99389 -IGNvbnRyYWNlcHRpdmU= 99390 -KGxvY2F0aW9ucw== 99391 -IGF2YW56 99392 -IENvbnRhaW5lcnM= 99393 -IFNjaG9sYXJz 99394 -LmFjY3VyYWN5 99395 -INCy0YvQv9C+0LvQvQ== 99396 -5ZWP 99397 -PSItLQ== 99398 -IFdyZXN0bGU= 99399 -IEd1YW50YW5hbW8= 99400 -IG55bXBo 99401 -KGd1ZXNz 99402 -LnNldENvbHVtbg== 99403 -X3RF 99404 -LmNvbnRlbnRNb2Rl 99405 -IGludmFsaWRhdGVk 99406 -IFNob290ZXI= 99407 -IE1hdGVy 99408 -LlN1Ym1pdA== 99409 -IGFuZ2xlZA== 99410 -bmF2YmFyRHJvcGRvd24= 99411 -QW8= 99412 -IOa1 99413 -0LjRgdC6 99414 -IFNDQU4= 99415 -CWNt 99416 -IE1hcmt0 99417 -dHJ1Y2s= 99418 -OycK 99419 -Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCg== 99420 -IGdoZXR0bw== 99421 -IGJ1aXRlbg== 99422 -IENsb3du 99423 -OiE= 99424 -IGNoaW1wYW4= 99425 -J2ZpZWxk 99426 -YW1tbw== 99427 -IERlcGVuZA== 99428 -KX0p 99429 -KEZMQUdT 99430 -IFJDQQ== 99431 -IENob2ly 99432 -TG9naW5QYWdl 99433 -IEdvcmQ= 99434 -Q29tcGFjdA== 99435 -LXBvY2tldA== 99436 -IGNvbnN1bHRhcg== 99437 -IEludGVyY2VwdA== 99438 -xZ90aXI= 99439 -dWV0eXBl 99440 -b25lbnRz 99441 -IHN0YXJ0UG9zaXRpb24= 99442 -IHBvc2l4 99443 -IFdvaG51bmc= 99444 -X0VYUFJFU1NJT04= 99445 -IExvZ2luQWN0aXZpdHk= 99446 -KG9wY29kZQ== 99447 -IFRhbmdv 99448 -IE51bWJlck9m 99449 -Lm92ZXJmbG93 99450 -IFdDUw== 99451 -IE9jY3VwYXRpb24= 99452 -X2Nn 99453 -LlRvcGlj 99454 -IENhcmVlcnM= 99455 -QVJBVElPTg== 99456 -LmdldExpbmU= 99457 -IOyihQ== 99458 -IE5hY2h0 99459 -IHRvSXRlbQ== 99460 -aW5jbHVzaXZl 99461 -YXZpZXN0 99462 -LWFwcG9pbnRlZA== 99463 -KGludGVybmFs 99464 -Q09OVEVYVA== 99465 -KGRpZ2l0cw== 99466 -PXsiLw== 99467 -IHBsYXl3cmlnaHQ= 99468 -IGRlYWRsaWVzdA== 99469 -bGVhZHM= 99470 -LlBVVA== 99471 -ICp9Cgo= 99472 -IFBhY3Q= 99473 -IERpc2NvdW50cw== 99474 -TG9jYWxpemVkTWVzc2FnZQ== 99475 -IE3DpG5uZXI= 99476 -Xz4= 99477 -IG1hc2NhcmE= 99478 -KFByb2ZpbGU= 99479 -5Yqf6IO9 99480 -aW1pdMOp 99481 -IHdpbGRmaXJlcw== 99482 -LVJPTQ== 99483 -LmlzT24= 99484 -KGdyb3VwSWQ= 99485 -UmVwYWly 99486 -YWNjdW11bGF0ZQ== 99487 -IDwiLA== 99488 -IGhhbmR3cml0dGVu 99489 -IGFjaGV0ZXI= 99490 -IE1HTQ== 99491 -IElybWE= 99492 -LT57Xw== 99493 -Z2Vl 99494 -Y3JpbWluYWw= 99495 -IOiLpeimgQ== 99496 -IG1vbWVudGFyaWx5 99497 -IikhPQ== 99498 -X2xpdA== 99499 -IGV4cGlyZXNJbg== 99500 -LiIpLg== 99501 -6ZW/5bqm 99502 -IGZyw6Zra2U= 99503 -dmxj 99504 -IG9yYnM= 99505 -KSwk 99506 -IHZlbnR1cmVk 99507 -Lz5c 99508 -Y2hhcm0= 99509 -TnVpdGth 99510 -ZWxkaWc= 99511 -YXRvbmlu 99512 -V2l0bmVzcw== 99513 -LWxhdA== 99514 -IHNldEhpZGRlbg== 99515 -IHJlbGljcw== 99516 -IGNvbnN1bGF0ZQ== 99517 -LklHTk9SRQ== 99518 -IkFmdGVy 99519 -IHNldEFkZHJlc3M= 99520 -IGJlc3RlaHQ= 99521 -ICcnKQoK 99522 -LnhheGlz 99523 -IHNlcsOjbw== 99524 -IG1pc2xlZA== 99525 -X1VOSUZPUk0= 99526 -IFZJQQ== 99527 -aW5jcg== 99528 -IHplbml0aA== 99529 -IHZpc2Nvc2l0eQ== 99530 -IHRoaW5seQ== 99531 -LmdldFNoYXJlZFByZWZlcmVuY2Vz 99532 -LkVycm9yQ29kZQ== 99533 -IiksIg== 99534 -IE1pbGxpb25lbg== 99535 -IC8+KQo= 99536 -U2Nyb2xsSW5kaWNhdG9y 99537 -LXNlZWtpbmc= 99538 -IFBPTElUSUNP 99539 -YXNjYQ== 99540 -X3Js 99541 -TmF2aWc= 99542 -KGZ1bGxmaWxl 99543 -IHNvbGl0dWRl 99544 -IGp1dmVu 99545 -IGhhdWxpbmc= 99546 -IE1hY3Jvcw== 99547 -IEdyeQ== 99548 -IGV4ZXJjaXRhdGlvbg== 99549 -IEFUVEFDSw== 99550 -VGlja0NvdW50 99551 -IHJpdGVz 99552 -IGRvZQ== 99553 -UGFydGljbGVTeXN0ZW0= 99554 -IHNsdQ== 99555 -V2luZG93VGV4dA== 99556 -IENsYXNzTmFtZQ== 99557 -IHNsYW5kZXI= 99558 -CVBvcnQ= 99559 -am9uZw== 99560 -P2E= 99561 -LkRpYWw= 99562 -4oCUYXQ= 99563 -JG9ialBIUEV4Y2Vs 99564 -IHNvYXI= 99565 -RU5O 99566 -YXBwZWFyZWQ= 99567 -IHF1b3RpZA== 99568 -ZW1hY2hpbmU= 99569 -IG5pcA== 99570 -IG1pY3JvdGltZQ== 99571 -IEFsbWE= 99572 -OyE= 99573 -LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t 99574 -IFBhc3NhZ2U= 99575 -IGR1bXBzdGVycw== 99576 -IEV4Y2x1ZGU= 99577 -IHN1Z2dlc3RpdmU= 99578 -IENpcmN1bGFyUHJvZ3Jlc3NJbmRpY2F0b3I= 99579 -X2Nscg== 99580 -QXJyYXlUeXBl 99581 -SUxMQQ== 99582 -RWxhcHNlZFRpbWU= 99583 -RHJpdmVu 99584 -IHJlc291cmNlTmFtZQ== 99585 -IEdhcnJpc29u 99586 -c2VyaXI= 99587 -LWFoZWFk 99588 -IHBpbm5hY2xl 99589 -IEVzcHJlc3Nv 99590 -U3BhcnNl 99591 -IGFzc2F5cw== 99592 -IEdpcmxmcmllbmQ= 99593 -aW1pZA== 99594 -XT0nXA== 99595 -T05HTE9ORw== 99596 -IHBvcnRyYXlpbmc= 99597 -TGFuZQ== 99598 -IGLDunNxdWVkYQ== 99599 -IHJlaW5mb3JjZW1lbnRz 99600 -IFNwcmVhZHNoZWV0 99601 -IEFycmF5Q29sbGVjdGlvbg== 99602 -LGFycg== 99603 -bGlnaHRib3g= 99604 -aWNhbmE= 99605 -PCI= 99606 -YnVpbGRlcnM= 99607 -S2lk 99608 -IE1hdFNuYWNrQmFy 99609 -RVhQUg== 99610 -b2RjYXN0 99611 -IEZvdW5kYXRpb25z 99612 -IGluZHM= 99613 -PSckew== 99614 -Rml6eg== 99615 -LWZ1bmN0aW9uYWw= 99616 -KHdvcmtzcGFjZQ== 99617 -IHN0ZW1tZWQ= 99618 -X3BhdGNoZXM= 99619 -IEphcnZpcw== 99620 -UkVBRElORw== 99621 -IGRpc3Jlc3BlY3RmdWw= 99622 -IFFEb20= 99623 -ICR7Cg== 99624 -ZXN0YXR1cw== 99625 -UmVhY2hlZA== 99626 -IS4KCg== 99627 -SUxU 99628 -IE5ERUJVRw== 99629 -IENvdXJhZ2U= 99630 -YmlydGhkYXRl 99631 -IFRpbmc= 99632 -IHV0aWxpemFkbw== 99633 -w6FuY2hleg== 99634 -T3V0ZG9vcg== 99635 -IGhhbmRndW5z 99636 -UmVmQ291bnQ= 99637 -yZk= 99638 -cm9tbw== 99639 -IHR0cw== 99640 -LlNoZQ== 99641 -IFBhbmU= 99642 -44CRLOOAkA== 99643 -IElPQ1RM 99644 -L2JsYWNr 99645 -aW5zY3JpcHRpb24= 99646 -IGJpb3BzeQ== 99647 -IFRpbWVJbnRlcnZhbA== 99648 -LlRlc3RDaGVjaw== 99649 -IEdVSVN0eWxl 99650 -IENhcGFiaWxpdHk= 99651 -IEJlaXRyYWc= 99652 -ZG9ubmVlcw== 99653 -VHJlYXRtZW50 99654 -LmJhY2t1cA== 99655 -IHNpZ25pbmdz 99656 -IEJvY2E= 99657 -ZHJt 99658 -Lk1BSU4= 99659 -IGdvZWRl 99660 -IE1hcmt1cA== 99661 -R1JFRQ== 99662 -IEJhc2VTZXJ2aWNl 99663 -LkNyZWF0b3I= 99664 -IGphaWxz 99665 -IEthaG4= 99666 -SXBBZGRyZXNz 99667 -QUNISQ== 99668 -IGluaGliaXRlZA== 99669 -IEAkXw== 99670 -IEFzc2Fzcw== 99671 -IGVudmlhZG8= 99672 -SGVyb2Vz 99673 -0J/QtdGA 99674 -IE1hdmVu 99675 -Lmxz 99676 -IGl2ZQ== 99677 -fFJG 99678 -IHJlc2l6ZU1vZGU= 99679 -IHJ1bXBl 99680 -X2F0dGFjaG1lbnRz 99681 -VFU= 99682 -IHRhY3RpbGU= 99683 -QXR0ZW1wdGluZw== 99684 -IHJvYmlu 99685 -eWF3 99686 -IG1lcmNlbmFyaWVz 99687 -IEhhYml0YXQ= 99688 -ZW5kZGF0ZQ== 99689 -IG94eQ== 99690 -CVJhbmRvbQ== 99691 -b2hvbg== 99692 -SXNOdWxs 99693 -IFZhbGlkYXRpb25SZXN1bHQ= 99694 -44Oa 99695 -dW1iZWQ= 99696 -cHB2 99697 -IGFycA== 99698 -aWNoaWNr 99699 -X3Jubg== 99700 -IFRGVA== 99701 -VGV4SW1hZ2U= 99702 -Ik9u 99703 -IFNhbXBsZXI= 99704 -dG9wbA== 99705 -IGphbmU= 99706 -eWxpbmc= 99707 -IFVOSUNPREU= 99708 -VGFiSW5kZXg= 99709 -PHsK 99710 -c3VzcGVuZA== 99711 -dXZpYW4= 99712 -LGFwcGxpY2F0aW9u 99713 -0L7Qu9C40YfQtdGB0YLQstC+ 99714 -eWF0 99715 -ZXppZXI= 99716 -IENIVU5L 99717 -IEFkbGVy 99718 -L0FkZA== 99719 -IEtleVZhbHVl 99720 -IHNwb3PDs2I= 99721 -U2FtcGxpbmc= 99722 -Y2hlcnM= 99723 -X0FNRA== 99724 -UnU= 99725 -Lk11c3RDb21waWxl 99726 -TmF0aW9u 99727 -QXNzb2M= 99728 -TWFuYWdpbmc= 99729 -IEVuZ2w= 99730 -X0dC 99731 -IHN1Y2NpbmN0 99732 -IGRpc2xpa2Vk 99733 -IElrZQ== 99734 -QnVsbGV0aW4= 99735 -X0FSQ0hJVkU= 99736 -UHJvcG9zYWw= 99737 -IGpvZ2dpbmc= 99738 -LkNSRUFURUQ= 99739 -IGNob2w= 99740 -6KOF 99741 -jKg= 99742 -LXB1c2g= 99743 -IHJlc2VydmE= 99744 -Y29yZXY= 99745 -w6h0cmU= 99746 -VEhS 99747 -IGluY29tcGV0ZW5jZQ== 99748 -IGNoYXJpc21h 99749 -5oSf 99750 -ICI9PQ== 99751 -QlRO 99752 -IExvY2F0b3I= 99753 -aXZldA== 99754 -KCcuJykK 99755 -IGZvckluZGV4UGF0aA== 99756 -w7RtZQ== 99757 -IGNhcGFjaXQ= 99758 -d2F0ZXJz 99759 -IFdST05H 99760 -aG9h 99761 -IE1JUFM= 99762 -IGVtaXNz 99763 -IEphY3F1ZWxpbmU= 99764 -KGNtcA== 99765 -IGVlbnM= 99766 -TGVv 99767 -LnRpbWluZw== 99768 -Q0xVU0lPTg== 99769 -ICgiLQ== 99770 -5ZOI 99771 -LmtvZGU= 99772 -IFVuZGVydA== 99773 -IGJld2lsZA== 99774 -IEVzc2Vu 99775 -Lmhk 99776 -IHJlbmVnb3Q= 99777 -IG1vd2Vy 99778 -IGxzcA== 99779 -IHBlbmNoYW50 99780 -IG1hbm9l 99781 -IGFnbGk= 99782 -IHJlY2Fs 99783 -IE9QRVJBVElPTg== 99784 -KF4pKA== 99785 -IM69 99786 -IFNjb3BlZA== 99787 -IEAiCg== 99788 -PWxhYmVs 99789 -W2xvYw== 99790 -SW50bA== 99791 -IE56 99792 -dGFibGV0 99793 -LkNvbHVtbk5hbWU= 99794 -IHNjcmVlblNpemU= 99795 -REJ1cw== 99796 -Y29va2Vk 99797 -LXJlZ2lzdHJhdGlvbg== 99798 -4oCcT25l 99799 -LW5vbg== 99800 -IHdpxJlj 99801 -IGNvc3Rh 99802 -LmFkZFRhYg== 99803 -LmNvbmRpdGlvbnM= 99804 -IEhlc3M= 99805 -TUVNT1JZ 99806 -IEF2YWxhbmNoZQ== 99807 -KCl9fQo= 99808 -IHRyaXBsZXQ= 99809 -IGxhYnlyaW50aA== 99810 -IE5vZGVMaXN0 99811 -IE5ZVA== 99812 -IHllbmk= 99813 -ZGZm 99814 -Lkh0bWxDb250cm9scw== 99815 -QVZJUw== 99816 -L01hdGg= 99817 -IG1lbWNtcA== 99818 -2KfYoQ== 99819 -0L7RgdGM 99820 -Y3JhcA== 99821 -KHBhZ2Vz 99822 -IGx4bWw= 99823 -IFFEYXRlVGltZQ== 99824 -X3RjYg== 99825 -IG9wZW5pZA== 99826 -IHN5bmFwdGlj 99827 -IE1ETUE= 99828 -KHNsdWc= 99829 -aWdtYXRpYw== 99830 -ZW5vcg== 99831 -IGNyYW1wZWQ= 99832 -R09Q 99833 -rZA= 99834 -LmlzRmlsZQ== 99835 -IERpZmZlcmVudGlhbA== 99836 -ID0iIjsK 99837 -CQkJICAgIAk= 99838 -IENvb2tl 99839 -CVVGVU5DVElPTg== 99840 -IHBlcnNldmVyYW5jZQ== 99841 -UmVsYXRpdmVMYXlvdXQ= 99842 -SU1QT1JUQU5U 99843 -IGV4b24= 99844 -INC+0L0= 99845 -aWJhc2U= 99846 -KENPTlQ= 99847 -bm92YXRpb24= 99848 -5L2V 99849 -W3N1Yg== 99850 -QWRtaW5Db250cm9sbGVy 99851 -SFRUUEhlYWRlcg== 99852 -Y3JlYXI= 99853 -IE5JUg== 99854 -IERyb3BEb3duTGlzdA== 99855 -IHZhbGlkZQ== 99856 -IGRlaHlkcmF0aW9u 99857 -Lidd 99858 -KFdJTg== 99859 -IC4uLlw= 99860 -IHBob3Rvc2hvcA== 99861 -CUluaXQ= 99862 -X2NvdQ== 99863 -IHRpbWVab25l 99864 -ZGFyd2lu 99865 -cm9tYXRpYw== 99866 -TmF2aWdhdGlvbkl0ZW1TZWxlY3RlZExpc3RlbmVy 99867 -YnJhdGVz 99868 -XS0tOwo= 99869 -IHRyYWdlZGllcw== 99870 -IFBlZGlhdHJpY3M= 99871 -U01BUlQ= 99872 -LUFQSQ== 99873 -IE1lc3NhZ2VMb29rdXA= 99874 -CXZv 99875 -IHByZWp1ZGljZXM= 99876 -IG1B 99877 -VXBz 99878 -IE1JU1NJTkc= 99879 -CWFk 99880 -Q3JlYW0= 99881 -IFRi 99882 -IE1vbmE= 99883 -X2dob3N0 99884 -CXR5cGVz 99885 -RW1i 99886 -IERvY3VtZW50YXJ5 99887 -Jyk7CgoKCg== 99888 -IGx1cA== 99889 -X1JlZmVyZW5jZQ== 99890 -IEJBVENI 99891 -IGludGVydHdpbmVk 99892 -PENlbGw= 99893 -IENhYnI= 99894 -bmF0aW9u 99895 -IGlzQ29ubmVjdGVk 99896 -LnJlbW92ZUxpc3RlbmVy 99897 -IGNvbmc= 99898 -X3Rp 99899 -IFNpbGljb25l 99900 -IOqysOqzvA== 99901 -IFdBTg== 99902 -IEdpYnJhbHRhcg== 99903 -L3Jlc3BvbnNl 99904 -CXBlcnNvbg== 99905 -Y2hhbnRz 99906 -VklQ 99907 -ZW1lcmdlbmN5 99908 -UGl4ZWxGb3JtYXQ= 99909 -LUFt 99910 -IHNvdXRod2VzdGVybg== 99911 -X3BsbA== 99912 -aWZlcnM= 99913 -X09OQ0U= 99914 -IEZheWV0dGU= 99915 -Lm5jYmk= 99916 -X1BhbmVs 99917 -LlF1YWw= 99918 -IHBvbHlz 99919 -IGNyZWF0ZVN0YWNrTmF2aWdhdG9y 99920 -77+9dA== 99921 -IGxheW9mZnM= 99922 -IEJsYW5jbw== 99923 -RmVhdA== 99924 -IFZpbWVv 99925 -X2NoaQ== 99926 -X2xpZmV0aW1l 99927 -UE9JTlRT 99928 -LHByaXZhdGU= 99929 -IHVuYmVhcmFibGU= 99930 -cHJpbnRpbmc= 99931 -IGNnaQ== 99932 -LkJBQ0s= 99933 -IGludGVybnM= 99934 -IE5ld2x5 99935 -aW5mZWxk 99936 -KElC 99937 -IEthdGE= 99938 -IERlZmVuZGFudHM= 99939 -VGhy 99940 -6aKE 99941 -X1ZG 99942 -RkZGRkZGRkY= 99943 -IGRhdmlkamw= 99944 -IGJpdHRlcmx5 99945 -U3VnZ2VzdGlvbnM= 99946 -LnNldENhbmNlbGFibGU= 99947 -RklOQUw= 99948 -YXNvbnM= 99949 -X3J3bG9jaw== 99950 -X1dSQVBQRVI= 99951 -IGhhcHBpZXN0 99952 -KHJvd0luZGV4 99953 -w7NzaXRv 99954 -VE9UWVBF 99955 -QXV0b21hdGlvbg== 99956 -TG9nRmlsZQ== 99957 -IGNvbnNvbGF0aW9u 99958 -44OA 99959 -IHTDqm0= 99960 -IHByZXI= 99961 -cmd5eg== 99962 -IEdlZw== 99963 -CWR0bw== 99964 -LmRlZmF1bHRWYWx1ZQ== 99965 -IEthbWk= 99966 -IEFTRQ== 99967 -b3B0aW1pemVk 99968 -IO2PrA== 99969 -IG9yaWdpbmF0ZXM= 99970 -ZXJyTXNn 99971 -IGVzcGHDp28= 99972 -KFNZUw== 99973 -IE1jQg== 99974 -ZGFuY2U= 99975 -X2RldGVjdGVk 99976 -IGZyw7w= 99977 -CQkgICAgCQk= 99978 -PERhdGU= 99979 -KGNvbWI= 99980 -IERlY2lkZQ== 99981 -XEZpZWxk 99982 -IFByb3Bvc2Vk 99983 -Umli 99984 -IGRpc2xpa2Vz 99985 -IFdpZW4= 99986 -CURvY3VtZW50 99987 -IHRyYWY= 99988 -IHN0b3JpYQ== 99989 -IFRlbGxz 99990 -Jyk9PQ== 99991 -Q3Jp 99992 -KFZBTFVF 99993 -IEJ1cm5ldHQ= 99994 -LHZvaWQ= 99995 -IGRhbmg= 99996 -IGNjcA== 99997 -QmxvY2tjaGFpbg== 99998 -OiItImAK 99999 -SUNsaWVudA== 100000 -SVNPREU= 100001 -SXNzdWVy 100002 -KX0NCg== 100003 -LGJ1dA== 100004 -IFVwaA== 100005 -KFN1Yg== 100006 -IHTDqWzDqXBob25l 100007 -IG9uRGF0YUNoYW5nZQ== 100008 -IG1hcnNoYWxsZXI= 100009 -LWFuYWx5dGljcw== 100010 -LGNvbnRlbnQ= 100011 -IGRlYmFjbGU= 100012 -X1ZhbHVlQ2hhbmdlZA== 100013 -IGZhdW5h 100014 -ICM9Pg== 100015 -IGZveWVy 100016 -J3V0aWxpc2F0aW9u 100017 -IE3DvGxsZXI= 100018 -IEZldGlzaA== 100019 -IGRlZmF1bHRNYW5hZ2Vy 100020 -IGJhY2t0cmFjaw== 100021 -QmFo 100022 -RXhwbGljaXQ= 100023 -X0FTQ0lJ 100024 -IG1BY3Rpdml0eQ== 100025 -KE1zZw== 100026 -IOqyjA== 100027 -IFRFUk1T 100028 -IEFuZ2ll 100029 -SFNW 100030 -IE1vc3F1ZQ== 100031 -Lk5hbWVz 100032 -7Yq8 100033 -cmVzdGU= 100034 -X3Bhcm1z 100035 -IGdhcGluZw== 100036 -IGNyb3BwaW5n 100037 -RGF0YUZyYW1l 100038 -IHJlc3BvbnNpdmVuZXNz 100039 -X3VuZG8= 100040 -X3RyYW4= 100041 -LnRlcm1pbmF0ZQ== 100042 -IGl0YWxpYW5l 100043 -IHdhbGt0aHJvdWdo 100044 -IGF0dHJhY3RpdmVuZXNz 100045 -0LTQtQ== 100046 -X1NUUw== 100047 -X2xlYXJu 100048 -IGNob2NvbGF0ZXM= 100049 -aWVyYXJjaGljYWw= 100050 -LXRoaW5raW5n 100051 -ICkpKQ== 100052 -aXNobWVudHM= 100053 -LkxvZ2Y= 100054 -IFRNWg== 100055 -IENhbmFyeQ== 100056 -Zm9pbA== 100057 -IFZhY2NpbmU= 100058 -LnZ4 100059 -IFN1cnJvdW5k 100060 -SW50ZXJtZWRpYXRl 100061 -IGlvdg== 100062 -dmFpcw== 100063 -JzsiOwo= 100064 -772eCgo= 100065 -6YCB5paZ 100066 -4oCmaXQ= 100067 -U2VhdHM= 100068 -Q2xhcg== 100069 -V2Fycw== 100070 -IEh1dGNoaW5zb24= 100071 -IEhhc2Fu 100072 -IScpCgo= 100073 -IFJpY2hpZQ== 100074 -Y2hlaWRlbg== 100075 -KCQoJw== 100076 -WW9yaw== 100077 -IGxpZHM= 100078 -IGFscGhhbnVtZXJpYw== 100079 -IEdsb2Nr 100080 -LnNoYXBlcw== 100081 -IHNwYXJraW5n 100082 -X2Vwc2lsb24= 100083 -dXBsaWNhdGVk 100084 -LmRpcnR5 100085 -XSk9PQ== 100086 -IOychOy5mA== 100087 -IHNjbg== 100088 -IC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq 100089 -X1BSRVZJRVc= 100090 -X0hD 100091 -aWVsZGluZw== 100092 -ZmdldHM= 100093 -IEFkZGlzb24= 100094 -IHByb2R1Y3RTZXJ2aWNl 100095 -LWZpZ3VyZQ== 100096 -KHJldHZhbA== 100097 -emFubw== 100098 -IGF1dG9i 100099 -CXNk 100100 -X251bWVy 100101 -IFNldExhc3RFcnJvcg== 100102 -IEZpb3I= 100103 -aWZpY2FuY2U= 100104 -VW50aXRsZWQ= 100105 -IGluZmllbGQ= 100106 -IHt9KSk7Cg== 100107 -IHNwYWM= 100108 -IHJvb2tpZXM= 100109 -KGRlc2NyaWJpbmc= 100110 -bmdlbg== 100111 -4K6/4K4= 100112 -LnJkZg== 100113 -Lk11dGV4 100114 -IGtuZWVsaW5n 100115 -IFFF 100116 -c2V0TWF4 100117 -UmVhZFN0cmVhbQ== 100118 -IHZlbnRhcw== 100119 -c3V0 100120 -Y21wZXE= 100121 -LldyaXRlQWxsVGV4dA== 100122 -IEV4cGVyaWVuY2Vk 100123 -JF9f 100124 -IGthdW0= 100125 -IExJUw== 100126 -IGRvY3VtZW50b3M= 100127 -X0hFQUxUSA== 100128 -aWNvbnRhaW5z 100129 -IGFydGlzYW5z 100130 -T1dORVI= 100131 -IGJsaW5rZWQ= 100132 -Z2V0RGlzcGxheQ== 100133 -IHRvZW4= 100134 -IHJvd051bQ== 100135 -IGF2cmls 100136 -IGludmlz 100137 -IEtlYXI= 100138 -dG9CZUluVGhlRG9jdW1lbnQ= 100139 -YXB1cg== 100140 -IHJhY2tlZA== 100141 -IE1jTWFzdGVy 100142 -X0FUVFJJQg== 100143 -SGF6 100144 -IGZhY3R1cmE= 100145 -L3Rz 100146 -INGA0LDQt9C80LXRgA== 100147 -IHpm 100148 -IHNob3J0ZmFsbA== 100149 -LmZhc3Rh 100150 -IENPTlNUQU5U 100151 -Lm1hbmFnZWQ= 100152 -Z2Vtcw== 100153 -U2hhcmVkUG9pbnRlcg== 100154 -IGJsdXJyeQ== 100155 -YnJpZ2h0bmVzcw== 100156 -KGNvbXBvbmVudHM= 100157 -IC4uLiIKCg== 100158 -U0VMTA== 100159 -IElsbHVzdHJhdG9y 100160 -LmdldENoYW5uZWw= 100161 -IHRyb3V2w6k= 100162 -eXN0ZXJz 100163 -IHZvaXM= 100164 -IExpbmRlbg== 100165 -IGVtb2ppcw== 100166 -IGJyYXds 100167 -IE1TUg== 100168 -IEVsbw== 100169 -IENyb2F0aWFu 100170 -UG9wdXBNZW51 100171 -TGV3aXM= 100172 -LkpXVA== 100173 -IGFzdG9uaXNoZWQ= 100174 -QnVzaA== 100175 -KGl0ZW1JZA== 100176 -IGRldGFjaG1lbnQ= 100177 -IEVuY29yZQ== 100178 -5bCU 100179 -IHJla2w= 100180 -IGNyYW0= 100181 -KSQv 100182 -LmdldEhvc3Q= 100183 -X3JlY29tbWVuZA== 100184 -LUhU 100185 -X2NhbGlicmF0aW9u 100186 -QXV0aGVudGljYXRl 100187 -LmZpcmViYXNlYXBw 100188 -VU5JWA== 100189 -CUNhbWVyYQ== 100190 -IEhFQVA= 100191 -SWRlYWw= 100192 -Lm9mZmljZQ== 100193 -IGdvb2Z5 100194 -KFN5bWJvbA== 100195 -IGpvdWVy 100196 -X3BhcnRpdGlvbnM= 100197 -IHJhcGlkZW1lbnQ= 100198 -IEdOVU5FVA== 100199 -aWRVc2Vy 100200 -IHN1cGVydmlzZQ== 100201 -KENvbnRhY3Q= 100202 -QVdO 100203 -44GY 100204 -IG5hYW0= 100205 -IGF1c3Q= 100206 -5Zyo57q/ 100207 -X3NvZnRtYXg= 100208 -QWxsb3dBbm9ueW1vdXM= 100209 -YW1tYWJsZQ== 100210 -Uk9VVEU= 100211 -KkQ= 100212 -IGFkZW4= 100213 -IENyaXN0aW5h 100214 -IENyaXN0aWFubw== 100215 -IGJsb29kc3RyZWFt 100216 -c3ViY2xhc3M= 100217 -X3BlcnNvbmE= 100218 -Q0hJTEQ= 100219 -LWtub3c= 100220 -IG5hdmlnYXRpb25PcHRpb25z 100221 -IFp1a3VuZnQ= 100222 -IFBpeGFy 100223 -VHlsZXI= 100224 -IHVuZGVyd29ybGQ= 100225 -IHNpbmNlcml0eQ== 100226 -IGRpc3BlbnNlcg== 100227 -IGt0ZXI= 100228 -aWRkZXJz 100229 -LmFkZE5vZGU= 100230 -LWNoZWNrZWQ= 100231 -IGtleXN0 100232 -IFdUTw== 100233 -LnNpZ25hbHM= 100234 -IGFkdmVudHVyZXI= 100235 -IFBhbmc= 100236 -XFI= 100237 -PXBvcw== 100238 -IGRpc3BlbnNhcmllcw== 100239 -IENsb3NldA== 100240 -KCJ7XCI= 100241 -aWRlb24= 100242 -IG7DqWNlc3NhaXJl 100243 -KCkiCg== 100244 -X1JFQ0VJVkVE 100245 -IHLDqXN1bHRhdHM= 100246 -IG1vZGVu 100247 -IEljZWxhbmRpYw== 100248 -O2Q= 100249 -LmFsbG93ZWQ= 100250 -KG5ld1VzZXI= 100251 -IG1lcmNpbGVzcw== 100252 -LldhaXRGb3I= 100253 -IGRheWNhcmU= 100254 -IENvbnZleW9y 100255 -INk= 100256 -2KfZ 100257 -4Liy4Lg= 100258 -0Z8= 100259 -0Z/Rnw== 100260 -IOC4 100261 -4LmA4Lg= 100262 -aeG7 100263 -44CA44CA44CA44CA 100264 -INin2A== 100265 -4KWI 100266 -IOOAgA== 100267 -0Zc= 100268 -aeG7hw== 100269 -0Z/Rn9Gf0Z8= 100270 -4KWH4KSC 100271 -0ZbQtA== 100272 -4KS+4KSw 100273 -2YbYrw== 100274 -0ZbQsg== 100275 -IOCkrA== 100276 -IOCknA== 100277 -4KWk 100278 -0L3Rlg== 100279 -4KSX 100280 -INii 100281 -IOCkqA== 100282 -0ZQ= 100283 -INGA0LA= 100284 -IOCkhQ== 100285 -0YHRjA== 100286 -IOCktQ== 100287 -0YbRlg== 100288 -IHbhuw== 100289 -s9iq 100290 -IOCkpg== 100291 -bsSb 100292 -IOCksg== 100293 -IOOAgCDjgIA= 100294 -4KWC 100295 -4KSm 100296 -4Lit4LiH 100297 -2YjZhg== 100298 -4KS1 100299 -YcWf 100300 -4LmC 100301 -zrnOug== 100302 -IOCksA== 100303 -INCy0Lg= 100304 -4KWN4KSv 100305 -4KS+4KSo 100306 -INin2LI= 100307 -2KfZhw== 100308 -m2k= 100309 -IGjhuw== 100310 -4KWL4KSC 100311 -aeG6vw== 100312 -IMSR4bs= 100313 -4KSv 100314 -z40= 100315 -IGPhu6c= 100316 -INio2LE= 100317 -INmF24w= 100318 -INin24w= 100319 -IOCkhg== 100320 -44CA44CA44CA44CA44CA44CA44CA44CA 100321 -4KS/4KSv 100322 -0Z/Rn9Gf0Z/Rn9Gf0Z/Rnw== 100323 -0LLQuA== 100324 -2LHYrw== 100325 -0L3Rgw== 100326 -2YrZhg== 100327 -zrnOsQ== 100328 -IOCkpA== 100329 -0YfQuA== 100330 -IOCkleCksA== 100331 -2KfYsg== 100332 -YcSf 100333 -IOCkiQ== 100334 -4KSs 100335 -z4TOsQ== 100336 -2KrYsQ== 100337 -2YfYpw== 100338 -4Lij4Liw 100339 -asOt 100340 -zpE= 100341 -0LDRgtC4 100342 -IOCklw== 100343 -INGC0LA= 100344 -2oY= 100345 -4KSc 100346 -4Liy4LiZ 100347 -IOCkrQ== 100348 -4KS/4KSV 100349 -w6F2 100350 -INqv 100351 -z44= 100352 -4Liy4Lii 100353 -IOCklA== 100354 -xZnDrQ== 100355 -2KfZiA== 100356 -INGJ 100357 -IOCklOCksA== 100358 -0LXQvdC90Y8= 100359 -INqp2Yc= 100360 -4KSh 100361 -z4TOvw== 100362 -zrXOuQ== 100363 -IOCkhw== 100364 -4KWN4KSk 100365 -4KSf 100366 -27E= 100367 -INiM 100368 -z4HOvw== 100369 -zrfPgg== 100370 -66w= 100371 -0ZbQvQ== 100372 -aeG7gQ== 100373 -acOqbg== 100374 -INCy0ZbQtA== 100375 -ZMSx 100376 -2YTbjA== 100377 -INiy 100378 -z4HOsQ== 100379 -INuM 100380 -4Liy4LiH 100381 -IHRo4bs= 100382 -IOC5gOC4 100383 -aeG7h24= 100384 -2KfZig== 100385 -0LDQvdC90Y8= 100386 -0YDQtQ== 100387 -zp8= 100388 -5ZI= 100389 -2KfYtA== 100390 -4KS+4KSy 100391 -64WE 100392 -IOCkrw== 100393 -INix2Kc= 100394 -4KS8 100395 -0YPQsg== 100396 -2YjZhQ== 100397 -INi52YQ= 100398 -zq/OsQ== 100399 -4KWI4KSC 100400 -4KWB4KQ= 100401 -4Liy4Lih 100402 -IG3hu5l0 100403 -IOCkjw== 100404 -44CA44CA44CA 100405 -IOCkquCksA== 100406 -INin2YY= 100407 -INin24zZhg== 100408 -IHbhu5tp 100409 -zqM= 100410 -4KSa 100411 -27A= 100412 -aeG7gw== 100413 -4Liy4LiB 100414 -zpk= 100415 -2KfYuQ== 100416 -0ZbQuQ== 100417 -4LmB4Lil 100418 -2YfYp9uM 100419 -0YfQsA== 100420 -LjouOg== 100421 -z4TOtw== 100422 -IM6R 100423 -2LHbjA== 100424 -IG5naA== 100425 -zr3OsQ== 100426 -4LmD4LiZ 100427 -4KS/4KSk 100428 -IM66zrHOuQ== 100429 -z4TOtQ== 100430 -4KWN4KSf 100431 -zrzOsQ== 100432 -0LvRgw== 100433 -w71t 100434 -z4DOvw== 100435 -4KWI4KWk 100436 -77y8 100437 -2LHZig== 100438 -0L3QuNGF 100439 -z4HOuQ== 100440 -2YA= 100441 -0YDQvg== 100442 -IOCkmg== 100443 -4KS+4KSk 100444 -2KfZgg== 100445 -IOCktg== 100446 -IMSR4buZ 100447 -w6lobw== 100448 -aeG7gXU= 100449 -4Lio 100450 -0ZbQu9GM 100451 -dXnhuw== 100452 -27I= 100453 -IG7Egw== 100454 -z4nOvQ== 100455 -IM+Ezr/PhQ== 100456 -0LrQuNC5 100457 -7ZY= 100458 -INGJ0L4= 100459 -4KWN4KS1 100460 -INin2YTYow== 100461 -2KfYpg== 100462 -dMSx 100463 -IM+Ezr8= 100464 -rKw= 100465 -INi3 100466 -2YXYp9mG 100467 -IM6g 100468 -0LTQuA== 100469 -4Li2 100470 -4KS/4KSP 100471 -44Gj44Gf 100472 -24zZhQ== 100473 -w61uaA== 100474 -cmF2 100475 -xJt0 100476 -zpU= 100477 -INGP0Lo= 100478 -54I= 100479 -4Lit4LiZ 100480 -44Gm44GE 100481 -4KS/4KSy 100482 -0ZbRgg== 100483 -0LfQsA== 100484 -w6Fw 100485 -4KSn 100486 -IOq1 100487 -4LmB4Lil4Liw 100488 -w61jaA== 100489 -INii2YY= 100490 -2KrZhw== 100491 -INmF2Lk= 100492 -0L3QuNC5 100493 -xrDhu5tj 100494 -INin2YTYuQ== 100495 -2LHYqA== 100496 -4KS+4KSu 100497 -INix2Yg= 100498 -6as= 100499 -xLF5 100500 -IGjhu40= 100501 -0YLRjNGB0Y8= 100502 -IM6a 100503 -IOCkh+CkuA== 100504 -77y/ 100505 -INqG 100506 -INmI2KfZhA== 100507 -7ZWZ 100508 -0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z8= 100509 -IHbDvQ== 100510 -4KS/4KS4 100511 -4buvbmc= 100512 -2LPbjA== 100513 -IOyD 100514 -4KS+4KSC 100515 -772k 100516 -4LmH4LiZ 100517 -IOCkpQ== 100518 -bGFyYWs= 100519 -w6J5 100520 -dMSb 100521 -zr3Ovw== 100522 -INmF2Yg= 100523 -IG5nxrDhu51p 100524 -5aY= 100525 -2YrYrw== 100526 -aWxpcg== 100527 -2KfYrQ== 100528 -IOOA 100529 -2Ys= 100530 -INGA0L7Qtw== 100531 -INC5 100532 -IGThu6U= 100533 -4LmA4Lib 100534 -4Lix4LiH 100535 -0LvQtQ== 100536 -4KS+4KSv 100537 -77+j 100538 -2YjYp9mG 100539 -IHRo4buD 100540 -44O9 100541 -w7zFnw== 100542 -558= 100543 -IM6/ 100544 -IM6j 100545 -24zYqg== 100546 -4Lix4LiB 100547 -zqQ= 100548 -IOCkj+CklQ== 100549 -INmH2YU= 100550 -7JuU 100551 -IM6c 100552 -IOC4hA== 100553 -r7g= 100554 -2KfYsduM 100555 -4KS/4KSo 100556 -IG5o4buvbmc= 100557 -IG5oxrA= 100558 -0LjRgtC4 100559 -44Oz44M= 100560 -4LmA4Lij 100561 -INCb 100562 -0YDRlg== 100563 -w6Fk 100564 -w7x5 100565 -aXll 100566 -IM6V 100567 -IOC4qg== 100568 -z4POtw== 100569 -IOus 100570 -77s= 100571 -4KSj 100572 -zpc= 100573 -4KS2 100574 -INmF2K0= 100575 -2YTZig== 100576 -IM68zrU= 100577 -IHDFmcOt 100578 -zp0= 100579 -4KWN4KS3 100580 -dGly 100581 -2LHYp9mG 100582 -IMSR4buL 100583 -INC60L7Rgg== 100584 -0LrRgNCw 100585 -zrvOvw== 100586 -IM+Ezrc= 100587 -0YnQtQ== 100588 -z4TOuc66 100589 -4Lix4LmJ 100590 -aeG6v3Q= 100591 -zrHOvQ== 100592 -7ZQ= 100593 -0LrQuNGF 100594 -INC/0L7RgQ== 100595 -dMSxcg== 100596 -4KWN4KSu 100597 -2LHZgQ== 100598 -xJts 100599 -4KSt 100600 -b3bDqQ== 100601 -IGzhuw== 100602 -4LmE4LiU 100603 -44Gq44GE 100604 -4Lip 100605 -aeG7h3U= 100606 -zr4= 100607 -INi52YTZiQ== 100608 -0LTRgw== 100609 -IGThu6VuZw== 100610 -0LDRgNCw 100611 -4KS+4KSm 100612 -b8W+ 100613 -2YTZhw== 100614 -2YTZhQ== 100615 -0L3QvtGX 100616 -27Hb 100617 -4LiC4Lit4LiH 100618 -zqE= 100619 -4KWA4KSC 100620 -INC/0ZbQtA== 100621 -IOCkqw== 100622 -4LiY 100623 -zrXPgg== 100624 -4KS+4KS4 100625 -4LmD4Lir 100626 -0L7QstCw 100627 -2KrbjA== 100628 -4Lit4Lii 100629 -4LiN 100630 -IG7Eg20= 100631 -z4TOuQ== 100632 -2YjbjA== 100633 -INC80ZY= 100634 -INin2YU= 100635 -z4DPjA== 100636 -IHrDoQ== 100637 -4KSI 100638 -IOCklg== 100639 -IG7Emw== 100640 -Y8Ot 100641 -2Ybarw== 100642 -0YHQuA== 100643 -zrY= 100644 -bsOh 100645 -nWk= 100646 -xak= 100647 -2KY= 100648 -INin2YTYsw== 100649 -4buRYw== 100650 -4bq9 100651 -2KfYrA== 100652 -2YXYpw== 100653 -6rWt 100654 -0L7Rjg== 100655 -2K/YsQ== 100656 -4LmA4LiB 100657 -4Lig 100658 -w6FuZw== 100659 -7ZWp 100660 -IM+EzrfPgg== 100661 -INGW0L0= 100662 -0L7Rlw== 100663 -4KWH4KS2 100664 -4LiL 100665 -4KWL4KSX 100666 -0LvRlg== 100667 -IHDFmWVk 100668 -xI1uw60= 100669 -INC60LA= 100670 -IM6k 100671 -4buZaQ== 100672 -dsOt 100673 -0YDRjw== 100674 -4KS+4KSc 100675 -0LDRhQ== 100676 -4KS/4KSw 100677 -4Liy4Liq 100678 -ZMSxcg== 100679 -2KI= 100680 -zpo= 100681 -IM6t 100682 -IHThuqFp 100683 -aeG7h2M= 100684 -aeG6v24= 100685 -INi6 100686 -2KfYrg== 100687 -INin2YTYrQ== 100688 -INCx0YM= 100689 -IHbhu4E= 100690 -0LzRlg== 100691 -2YXZhA== 100692 -bcSxxZ8= 100693 -4Lib4Lij4Liw 100694 -zr/PjQ== 100695 -zrXOrw== 100696 -IOCksOCkuQ== 100697 -0L3QuNC8 100698 -2LnYrw== 100699 -INio2KfZhA== 100700 -pJE= 100701 -56A= 100702 -IG9sbQ== 100703 -z47OvQ== 100704 -IGjhu41j 100705 -2KfYs9iq 100706 -4Liy4Lin 100707 -2YjYqA== 100708 -0ZbRjw== 100709 -INmH2KfbjA== 100710 -66eI 100711 -4KWM 100712 -IMSM 100713 -4KSP 100714 -2KfYr9mH 100715 -INin2Yg= 100716 -0L3Ri9C8 100717 -4bqx 100718 -2YXZhg== 100719 -aeG7h3Q= 100720 -bGHFnw== 100721 -0ZbQtw== 100722 -2YjYsw== 100723 -IGzDoG0= 100724 -IMSR4bq/bg== 100725 -4KSq4KSo 100726 -INuM2qk= 100727 -INmE2YQ= 100728 -IG3Emw== 100729 -INio2LHYp9uM 100730 -4KS+4KS5 100731 -INmF2LE= 100732 -ZcOn 100733 -4Lit4Lij 100734 -zrXPgQ== 100735 -4Lix4LiU 100736 -0LrQvtC9 100737 -bm91 100738 -INCz0L7QtA== 100739 -4Li54LmJ 100740 -4LmA4Lil 100741 -2pg= 100742 -IMSR4buLbmg= 100743 -IMSRw7M= 100744 -0LDQvdC+0LI= 100745 -INmB2LE= 100746 -2KfYsdiv 100747 -0ZbRlw== 100748 -4LiE4Lij 100749 -4KWN4KSl 100750 -Y2Fr 100751 -0YbRltGX 100752 -IOOAgCDjgIAg44CAIOOAgA== 100753 -2YfYsQ== 100754 -4KWJ 100755 -IGdp4bs= 100756 -7YY= 100757 -4oCM2YfYp9uM 100758 -4KWB4KSw 100759 -IOC4gQ== 100760 -xYg= 100761 -5qg= 100762 -zp/O 100763 -4Liy4LiE 100764 -0LrRgNCw0Zc= 100765 -4bqjbw== 100766 -b8Sf 100767 -IOCkuOCkrg== 100768 -IHZp4buHYw== 100769 -IHPhur0= 100770 -IG7DoQ== 100771 -2YrZhQ== 100772 -o3A= 100773 -w7Z5 100774 -2YjYsg== 100775 -IM66zrE= 100776 -2YXYrw== 100777 -bsOtbQ== 100778 -b3bDoQ== 100779 -4KS+4KS1 100780 -4KS+4KWk 100781 -4KWN4KS4 100782 -57c= 100783 -4bq3Yw== 100784 -IOC4ng== 100785 -772A 100786 -w7Rp 100787 -IOG7nw== 100788 -zr/Pgg== 100789 -IHRyw6pu 100790 -0LzRgw== 100791 -0YHRjNC6 100792 -4Lif 100793 -b3ZhdA== 100794 -IG3huw== 100795 -7Y8= 100796 -INCy0L4= 100797 -zrXOvQ== 100798 -4KWC4KSw 100799 -2q/Yp9mH 100800 -IMSR4buZbmc= 100801 -2qnZhg== 100802 -0YnQuA== 100803 -INC/0YDQsA== 100804 -w7xyaw== 100805 -2YjYuQ== 100806 -4bqlcA== 100807 -bsO9 100808 -IHF1YW4= 100809 -0ZbRhw== 100810 -IM69zrE= 100811 -IOCkqOCkuQ== 100812 -INqp2YY= 100813 -Y8Sx 100814 -552A 100815 -0LHQvg== 100816 -INin2LM= 100817 -6Ls= 100818 -2KfZhtuM 100819 -4LiV4Lij 100820 -z4TOrA== 100821 -INij2YY= 100822 -6YKj 100823 -IOC4oQ== 100824 -0LrRgg== 100825 -acOq 100826 -IGjhu6Nw 100827 -2KrZhQ== 100828 -INio2YY= 100829 -aG9k 100830 -zrnPgw== 100831 -4Lir4LiZ 100832 -INGX 100833 -0LvQuNCy 100834 -INqp2LHYrw== 100835 -INmF2LQ= 100836 -2KfYtw== 100837 -2KjZig== 100838 -IOC4ow== 100839 -2K/ZhQ== 100840 -2YTYp9mF 100841 -4LmI4Lin 100842 -INmG2YU= 100843 -IOaX 100844 -6YU= 100845 -0L3QvtGB0YI= 100846 -aeG7g20= 100847 -6rWQ 100848 -YXnEsQ== 100849 -INio2YjYrw== 100850 -2q/YsQ== 100851 -IGhp4buHbg== 100852 -57M= 100853 -0YHRgtCy0LXQvQ== 100854 -IOCkleCksOCkqA== 100855 -IM+EzrfOvQ== 100856 -IOC4rQ== 100857 -INmF2Ko= 100858 -gW4= 100859 -2KzZhQ== 100860 -zrvOuw== 100861 -INGA0LU= 100862 -4Li04LiU 100863 -INin2YTZgg== 100864 -zrHPgQ== 100865 -IOCkr+CkuQ== 100866 -bsOtY2g= 100867 -0ZTRgtGM0YHRjw== 100868 -IOC4lw== 100869 -24zYtA== 100870 -xZll 100871 -IG5lYm8= 100872 -INGH0LA= 100873 -bG91 100874 -0YHRgtCy0L4= 100875 -INCn 100876 -4LiE4Lin 100877 -2YfZhQ== 100878 -4LmA4LiU 100879 -IOC5gQ== 100880 -IOC5gg== 100881 -27M= 100882 -xaluZw== 100883 -IG5lag== 100884 -24zaqQ== 100885 -IHPhu60= 100886 -2YHYsQ== 100887 -zqA= 100888 -INC/0L7Qug== 100889 -INin2YTZhg== 100890 -IHbFoQ== 100891 -4bqr 100892 -IG5ow6A= 100893 -44CA44CA44CA44CA44CA 100894 -zq7Pgg== 100895 -zr/PgQ== 100896 -IM+H 100897 -4LmA4LiX 100898 -0YPQu9GM 100899 -44WH 100900 -IHnEsWw= 100901 -0YDQvtC0 100902 -zq/OvQ== 100903 -7JeI64uk 100904 -2KfYtQ== 100905 -IMSR4bqndQ== 100906 -4KWH4KSV 100907 -0YDQvtC8 100908 -44GT44Go 100909 -INin2LE= 100910 -5aW5 100911 -INiq2K0= 100912 -xaF0xJs= 100913 -4KWN4KSy 100914 -4KWN4KSV 100915 -INqp2KfYsQ== 100916 -dWrDrQ== 100917 -IOCkieCkqA== 100918 -IM6xz4DPjA== 100919 -IG3DoA== 100920 -xb7DrQ== 100921 -IOC4iA== 100922 -YWzEsQ== 100923 -4KSr 100924 -0YfQtdGB 100925 -INi52YY= 100926 -5pWZ 100927 -776G 100928 -4KS/4KSC 100929 -IHPhu7E= 100930 -0LLQvtGA 100931 -IHRo4buxYw== 100932 -642w 100933 -44Gm44GE44KL 100934 -4LmI4LiH 100935 -2KrYqA== 100936 -IG5oaeG7gXU= 100937 -g24= 100938 -IMSR4buT 100939 -IOC4qw== 100940 -27U= 100941 -bcSb 100942 -4bqhdA== 100943 -IGNow61uaA== 100944 -zrzOrQ== 100945 -YW7EsQ== 100946 -IGLhu4s= 100947 -4bqxbmc= 100948 -xZllZA== 100949 -6Z8= 100950 -w6FuaA== 100951 -2YDZgA== 100952 -INmF2LM= 100953 -4buLY2g= 100954 -xINu 100955 -b3bDoW7DrQ== 100956 -4LmI4Liy4LiH 100957 -IOC4mw== 100958 -IG7GsOG7m2M= 100959 -0LHQvtGC 100960 -xLF5b3I= 100961 -INiu2YjYrw== 100962 -27k= 100963 -INmF2K8= 100964 -IMO8eg== 100965 -7L0= 100966 -2YjZgg== 100967 -66W0 100968 -0LvQtdC6 100969 -IGPhuqM= 100970 -0L7Qu9C+0LM= 100971 -4LmJ4Lit4LiH 100972 -bWnFnw== 100973 -4LmJ4Lin 100974 -xKk= 100975 -zpw= 100976 -4Lit4LiB 100977 -77y/77y/ 100978 -4KSW 100979 -INCv 100980 -66y0 100981 -2KfbjNuM 100982 -c2vDqQ== 100983 -dXnDqm4= 100984 -ZcWf 100985 -w6Fp 100986 -w7puZw== 100987 -w6Bv 100988 -0ZbRgQ== 100989 -57Y= 100990 -IOCkhuCkqg== 100991 -77o= 100992 -zps= 100993 -IOqztQ== 100994 -INCG 100995 -IOCkheCkquCkqA== 100996 -4bupbmc= 100997 -z4zPgg== 100998 -IG5naGnhu4c= 100999 -INin2YTYqA== 101000 -4KWL4KSo 101001 -IOCknw== 101002 -IOycoA== 101003 -IGPFqW5n 101004 -IOCkieCkuA== 101005 -IOCkoQ== 101006 -INi02K/Zhw== 101007 -4Li14LmJ 101008 -27Q= 101009 -4bq3dA== 101010 -5pav 101011 -IOuN 101012 -INC/0Ls= 101013 -0LHQuA== 101014 -6rOE 101015 -zr/OvQ== 101016 -IMOnxLFr 101017 -IGJ1bHVu 101018 -2LPZhQ== 101019 -YcOn 101020 -2KfZhtmH 101021 -24zYsg== 101022 -bGXFnw== 101023 -4bqvYw== 101024 -2KfaqQ== 101025 -IOCkuOCklQ== 101026 -INC+0YDQsw== 101027 -IOC4mQ== 101028 -4KS+4KSl 101029 -INmF2YI= 101030 -IM6URQ== 101031 -0Y7RgtGM 101032 -4buZYw== 101033 -IM63 101034 -c29i 101035 -IHRoZW8= 101036 -5Z4= 101037 -INin2YTYtA== 101038 -4LmA4Lie 101039 -zq3Pgg== 101040 -4LmA4LiC 101041 -5Zk= 101042 -4KS/4KS2 101043 -INio2KfYsg== 101044 -0YDQvtCx 101045 -IM6zzrnOsQ== 101046 -zrzOtQ== 101047 -INio2KfYtA== 101048 -4KS+4KSH 101049 -IHF1eQ== 101050 -zrvOtQ== 101051 -2KfZgw== 101052 -INGA0L7Qug== 101053 -IFTDvHJr 101054 -INCl 101055 -0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rn9Gf0Z/Rnw== 101056 -5qk= 101057 -IHBo4bqjaQ== 101058 -4LiE4Lin4Liy4Lih 101059 -Ojo6 101060 -bMOt 101061 -IGpzb3U= 101062 -24zZhA== 101063 -w6FsbsOt 101064 -lJQ= 101065 -7ZaJ 101066 -5oOz 101067 -bMOh 101068 -IM+Dz4U= 101069 -0YvQstCw 101070 -IG5o4bqldA== 101071 -4Lit4Lih 101072 -27g= 101073 -ZWNlaw== 101074 -0ZbRgA== 101075 -2YjYtA== 101076 -zrvOsQ== 101077 -IM6S 101078 -0L7RgNCw 101079 -2YHYqg== 101080 -ZWRpcg== 101081 -0YPRhQ== 101082 -5LiW 101083 -INCj0LrRgNCw0Zc= 101084 -IO2U 101085 -zqzOvQ== 101086 -INi02LE= 101087 -INin2YTYrA== 101088 -0LXRgNC10LQ= 101089 -7JiB 101090 -IGjDoG5o 101091 -77+j77+j 101092 -0LzQtQ== 101093 -0Y7RgtGB0Y8= 101094 -INil2YTZiQ== 101095 -7JeF 101096 -INiq2LE= 101097 -0LrQvtC8 101098 -INi02K8= 101099 -INin2YTZgw== 101100 -IM+Dz4TOvw== 101101 -4KWN4KSm 101102 -66Ck 101103 -0YPQstCw0L3QvdGP 101104 -IHRow6w= 101105 -6rSA 101106 -zrrOtQ== 101107 -2LPYqA== 101108 -7YOA 101109 -IO+8jw== 101110 -IOC5geC4peC4sA== 101111 -IM+M 101112 -0L3QuNGG 101113 -INCd0LA= 101114 -0Y/Qsg== 101115 -bMO8 101116 -zrnOvw== 101117 -2YbYr9mH 101118 -2YTZgw== 101119 -IG5nw6B5 101120 -IG5ow6Ju 101121 -IF57 101122 -4KWD 101123 -IGdlcmVr 101124 -2KfYsdmH 101125 -IGPGoQ== 101126 -IOC4lQ== 101127 -5oI= 101128 -55Sw 101129 -4KWI4KSC4KWk 101130 -4Lix4Lin 101131 -dsSb 101132 -w7Z6 101133 -0LjQu9C4 101134 -IHBow6Fw 101135 -6riI 101136 -IM6f 101137 -IHDFmWk= 101138 -IOyWtA== 101139 -INC00L7Quw== 101140 -2YjYsdiv 101141 -4LmA4Lih 101142 -z4POtQ== 101143 -4Liy4LiX 101144 -b8OgaQ== 101145 -4Lij4Lih 101146 -27Y= 101147 -IOC4mg== 101148 -aXlldA== 101149 -z4TOsc65 101150 -7ISg 101151 -IM61z4A= 101152 -4KS/4KS1 101153 -6rmM 101154 -0LPQsA== 101155 -INGB0LvRgw== 101156 -IGjDrG5o 101157 -INiv2KfZhg== 101158 -IOCkl+Ckrw== 101159 -2YrYpw== 101160 -6JE= 101161 -4KSC4KSk 101162 -INiz2KfZhA== 101163 -66CI 101164 -bGVyaW4= 101165 -4KWH4KSk 101166 -LjouOi46Ljo= 101167 -IOuF 101168 -INin2YTYpQ== 101169 -4bqjbmc= 101170 -6IQ= 101171 -zr/Ouw== 101172 -0L/QvtCy 101173 -IM64 101174 -27c= 101175 -IG7Dsw== 101176 -IGTDvMWf 101177 -IHRp4bq/ 101178 -2YjYrA== 101179 -IGpzZW0= 101180 -4bqhbmc= 101181 -44GC44KL 101182 -4Lit4Lia 101183 -2YjZig== 101184 -4KSV4KSw 101185 -INC00LU= 101186 -r7w= 101187 -INC90L4= 101188 -0YbRltC5 101189 -z4PPhA== 101190 -0LrQuNC1 101191 -z4POtc65 101192 -7JWI 101193 -IGjGoW4= 101194 -IOCkleCkuQ== 101195 -2KfYtg== 101196 -7Lg= 101197 -44Of 101198 -44CA44CA44CA44CA44CA44CA 101199 -44KI44GG 101200 -4KS+LA== 101201 -0LXRgNC4 101202 -66mw 101203 -7ZSE 101204 -INC/0L7RgdGC 101205 -2K7YsQ== 101206 -4KWL4KSk 101207 -w6J1 101208 -0LrQvtC5 101209 -ZGFraQ== 101210 -7YU= 101211 -Ojo6Ojo6Ojo6Ojo6Ojo6Og== 101212 -IMO2eg== 101213 -0YDQsNC2 101214 -bsOtaG8= 101215 -4Lir4Lil 101216 -IM+Dz4TOtw== 101217 -IMSR4buB 101218 -IGvhuw== 101219 -aeG7g24= 101220 -xZlp 101221 -IGt0ZXLDqQ== 101222 -ooU= 101223 -w7zDpw== 101224 -2YrZgQ== 101225 -IGzDvQ== 101226 -IHRo4budaQ== 101227 -IOyGjA== 101228 -0L3RjA== 101229 -0IY= 101230 -0YLRgA== 101231 -4LiH4Liy4LiZ 101232 -0LrQvtGX 101233 -zrzOvw== 101234 -IHPDvHI= 101235 -dXnhu4Fu 101236 -INmF2Kc= 101237 -4KSC4KSX 101238 -IMSR4buTbmc= 101239 -w7Ju 101240 -4KWB4KSy 101241 -4KWN4KSq 101242 -zrvOtw== 101243 -2YXYsQ== 101244 -0L/RgNC4 101245 -aXlsZQ== 101246 -4KS+4KSq 101247 -IOCkheCkqA== 101248 -INGU 101249 -IHnDtm4= 101250 -2YTZgQ== 101251 -YWTEsXI= 101252 -4b0= 101253 -IOqzoA== 101254 -2K7YtQ== 101255 -aW1peg== 101256 -5ZyL 101257 -INC90LDQtA== 101258 -IMWZ 101259 -0L3QvtGB0YLRlg== 101260 -INin2YE= 101261 -0LDQvdGW 101262 -4KWH4KSf 101263 -IOunkA== 101264 -44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 101265 -IOyKpA== 101266 -4Li04LiV 101267 -5YQ= 101268 -24zZhw== 101269 -0L7RiA== 101270 -xb5pdA== 101271 -7Iuk 101272 -4KWA4KSo 101273 -IO4= 101274 -5qWt 101275 -4KWH4KSo 101276 -INiw 101277 -IGxv4bqhaQ== 101278 -4LmE4Lib 101279 -0ZbQug== 101280 -INC60YDQsA== 101281 -4KWL4KSw 101282 -4Li44LiU 101283 -INin2YTYsQ== 101284 -INGB0L7QsQ== 101285 -4Liy4LiK 101286 -IOCkuOCkleCkpA== 101287 -IM6d 101288 -2KfZhdmH 101289 -4LmJ4Liy4LiZ 101290 -IHRyw6xuaA== 101291 -INin2YTZgQ== 101292 -INin2YTYrw== 101293 -dW51bg== 101294 -0L7RgtC+0LI= 101295 -xrDhu58= 101296 -INGB0LLQvg== 101297 -zq/Osc+C 101298 -4bqlbg== 101299 -0L7Qs9C00LA= 101300 -4LiX4Lii 101301 -IGJ5bA== 101302 -2K3Yrw== 101303 -4LiB4Lil 101304 -2KjZhw== 101305 -IHbEmw== 101306 -6KKr 101307 -INii2YU= 101308 -IMSRaeG7gXU= 101309 -5ag= 101310 -IGtkeQ== 101311 -INio2Yg= 101312 -4bqrbg== 101313 -7Jyg 101314 -4KS+4KSV 101315 -a8Wv 101316 -IHRyxrDhu51uZw== 101317 -aWNrw6k= 101318 -0L3QuNGP 101319 -IM+Azr/PhQ== 101320 -xrDhu59uZw== 101321 -0L3QvtC80YM= 101322 -4LmI4LiZ 101323 -4Li54LmI 101324 -IGvhur90 101325 -IO+8vA== 101326 -IOyLoA== 101327 -acOn 101328 -IG7Eg25n 101329 -xI3DrQ== 101330 -0YLRjw== 101331 -0YDQtdCx 101332 -2YvYpw== 101333 -2q/bjA== 101334 -44OO 101335 -IGthcsWf 101336 -0LLRlg== 101337 -IHBo4bqnbg== 101338 -4LiI4Liw 101339 -4bqvdA== 101340 -2LHYqQ== 101341 -4Li04LiH 101342 -4Li04LmI 101343 -4KS+4KSI 101344 -4Liy4Lie 101345 -2YbbjA== 101346 -7Jew 101347 -YsSb 101348 -INin2YTYtQ== 101349 -7Zc= 101350 -INiz2LE= 101351 -bGFyYQ== 101352 -64uo 101353 -INmC2LE= 101354 -6I4= 101355 -2KjYrw== 101356 -INC50L7Qs9C+ 101357 -4KWN4KS5 101358 -IGPDoWNo 101359 -7ZWY6rOg 101360 -IM+Az4HOvw== 101361 -INiq2Lk= 101362 -kog= 101363 -INCy0L7QtA== 101364 -56We 101365 -0LrQuNC8 101366 -IGThu7E= 101367 -4LmA4Lir 101368 -0LDQvdCw 101369 -IO+9 101370 -IGJhxJ8= 101371 -IOCkquCkuQ== 101372 -IGNhbw== 101373 -z4HPjA== 101374 -2YbYrA== 101375 -4KS+4KSP 101376 -IOW5tA== 101377 -IG5naGnhu4dw 101378 -27LbsA== 101379 -0LrQsNGP 101380 -z4HOrw== 101381 -INCx0L7Quw== 101382 -IGdpw6E= 101383 -INC30LQ= 101384 -4KWH4KSy 101385 -IGPhuqVw 101386 -4LmA4Liq 101387 -z4HOsw== 101388 -IOyC 101389 -ZMSb 101390 -4KWB4KSo 101391 -7Ig= 101392 -xLFsYW4= 101393 -0LvQsNGB 101394 -IOC4pw== 101395 -IM+DzrU= 101396 -INir 101397 -INCm 101398 -54K6 101399 -IGLDvHk= 101400 -0LXRhg== 101401 -5aSq 101402 -IOCkrOCkqA== 101403 -0L7Qs9GA0LA= 101404 -INC/0YDQvtGC 101405 -IGzGsOG7o25n 101406 -IGTDtm4= 101407 -4Lij4LiH 101408 -0LDQu9C+ 101409 -INis2YU= 101410 -4KWILA== 101411 -IOuvuA== 101412 -IOq5 101413 -2YjYqg== 101414 -4KWA4KSv 101415 -4LiI4Liy4LiB 101416 -IGNo4bqldA== 101417 -zqk= 101418 -IGtow6Fj 101419 -IHRow6FuZw== 101420 -asWhw60= 101421 -IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg 101422 -4buRdA== 101423 -4Lir4Lij 101424 -0ZbQuw== 101425 -5YWJ 101426 -5YI= 101427 -2YTYqQ== 101428 -IOqxsA== 101429 -0L7QstC+0YA= 101430 -aeG7g3U= 101431 -INC80LXRgg== 101432 -0LDRlA== 101433 -INGH0LDRgQ== 101434 -z4HOtQ== 101435 -7Lm0 101436 -4oCM2LQ= 101437 -66y8 101438 -w7pj 101439 -4oCM2YfYpw== 101440 -aeG7gW4= 101441 -c3Rhdg== 101442 -7Z4= 101443 -INmG2Lg= 101444 -hpI= 101445 -IM+EzrE= 101446 -INC30LDQsQ== 101447 -2YPYqQ== 101448 -INCz0YDRgw== 101449 -0LLQvg== 101450 -INmF2Kw= 101451 -IHNhaA== 101452 -2KjZhA== 101453 -2LnYqQ== 101454 -0YPRiA== 101455 -INGC0LXQvA== 101456 -7Ys= 101457 -ZWNr 101458 -z4nPgg== 101459 -2YrYqg== 101460 -7JeI 101461 -54s= 101462 -2LDYpw== 101463 -7KCA 101464 -INC90LDRgQ== 101465 -INC/0L7Rhw== 101466 -5qCh 101467 -z4g= 101468 -0YHQutC+0Lk= 101469 -w7xj 101470 -2YLZhA== 101471 -INC/0L7Qtw== 101472 -INC+0YHQvtCx 101473 -4Liy4Lil 101474 -0L3Ri9C80Lg= 101475 -0L7Qu9C+0LQ= 101476 -6Lw= 101477 -INiv24w= 101478 -INGD0YHRgg== 101479 -IOustA== 101480 -2YrYsw== 101481 -67Cp 101482 -4KWN4KSa 101483 -0LjQu9Cw 101484 -IG7Dqm4= 101485 -0L3QuNC1 101486 -zrnOvQ== 101487 -bGFyxLFuxLE= 101488 -4LmA4LiZ 101489 -2YbYqg== 101490 -YcSfxLE= 101491 -xLFtxLF6 101492 -INin2YTYrg== 101493 -4LmA4Lin 101494 -4KWN4KSo 101495 -IM+F 101496 -IO2G 101497 -4bq7 101498 -4Li04LmC 101499 -zrHPgg== 101500 -0LzQtdGC 101501 -IHpw 101502 -IGplaG8= 101503 -4Li14Lii4LiZ 101504 -0YTQvtGA 101505 -xLFuxLF6 101506 -a2xhZA== 101507 -7YyM 101508 -dXnhu4c= 101509 -zrnOrA== 101510 -IOOAgQ== 101511 -2LTYsQ== 101512 -5qmf 101513 -INiq2Kc= 101514 -INC30L3QsA== 101515 -2LPYqtin2YY= 101516 -4KWH4KSw 101517 -66ek 101518 -54M= 101519 -INC20LU= 101520 -4Liy4LiU 101521 -INi2 101522 -6a0= 101523 -INC90LDQtw== 101524 -INuM2Kc= 101525 -ZW7DqQ== 101526 -4Lix4Lii 101527 -7ZaI64uk 101528 -INio2K8= 101529 -4KWB4KSV 101530 -0YLQvtCy 101531 -7LCo 101532 -2YfYrw== 101533 -4LiU4Lii 101534 -IGhv4bq3Yw== 101535 -INCf0YDQuA== 101536 -2YbYpw== 101537 -546L 101538 -0YPQstCw0YLQuA== 101539 -4Lia4Lij 101540 -IOCkleCksOCkpA== 101541 -z4POt8+C 101542 -2KQ= 101543 -6ZW3 101544 -5YWL 101545 -INiv2KfYsQ== 101546 -4Lix4LmI 101547 -xqFp 101548 -4Liy4LiI 101549 -w71taQ== 101550 -4bqldQ== 101551 -INiv2LPYqg== 101552 -a2Vt 101553 -INC+0YHQvdC+0LI= 101554 -66qo 101555 -z4HOrA== 101556 -5oU= 101557 -INin2Kg= 101558 -5aOr 101559 -hJY= 101560 -zpQ= 101561 -2YrZgw== 101562 -7Y4= 101563 -IHnDvHo= 101564 -YWTEsQ== 101565 -4Liy4LiV 101566 -5LuA 101567 -7J2064uk 101568 -IHp2 101569 -IHTEmw== 101570 -IO2W 101571 -4KSl 101572 -IOCksuCklw== 101573 -7JiA 101574 -INCw0L0= 101575 -55c= 101576 -7Jet 101577 -0L3RltGB0YLRjA== 101578 -xZ4= 101579 -IHBow6F0 101580 -2YLYqQ== 101581 -IHRo4bq/ 101582 -IO++ 101583 -7LKc 101584 -IOyEoA== 101585 -4LmD4LiK 101586 -acOqdQ== 101587 -xJ9pbmk= 101588 -2YLYrw== 101589 -IGt0ZXLDvQ== 101590 -0YHQutC40Lk= 101591 -4KWN4KSh 101592 -dGFkxLFy 101593 -INGB0Lw= 101594 -2YjZgQ== 101595 -2KfYsdmK 101596 -5b63 101597 -4Li04Lih 101598 -2K7Yqg== 101599 -5b6I 101600 -INCz0L7RgA== 101601 -77yM5oiR 101602 -IOyYgQ== 101603 -IOuPmQ== 101604 -0YHQsA== 101605 -4LmA4LiE 101606 -66+8 101607 -4Li24LmI 101608 -IGxpw6pu 101609 -INmH2Kc= 101610 -bGVyaW5p 101611 -INGG0LU= 101612 -2KfZhNuM 101613 -IOCkruCkuQ== 101614 -IHbhu6U= 101615 -IHh14bqldA== 101616 -4Li04LiB 101617 -INC/0YDQvtGG 101618 -IM6xzr0= 101619 -0YDQuNC8 101620 -IGPhuqdu 101621 -INC40YU= 101622 -0L3QvtGO 101623 -IHTDrW5o 101624 -IGLhu5k= 101625 -0ZbQvA== 101626 -IG5o4bqtbg== 101627 -44CA44CA44CA44CA44CA44CA44CA 101628 -2YrZhw== 101629 -5Lqa 101630 -INC+0LHQu9Cw 101631 -IOCkmA== 101632 -bsO9Y2g= 101633 -5p2R 101634 -2YTYsw== 101635 -INC90LXQvtCx 101636 -2KfYqNip 101637 -dsOh 101638 -zr/Phc69 101639 -0YDQtdGC 101640 -YXPEsW5kYQ== 101641 -IHlhcg== 101642 -IMSRaeG7g20= 101643 -0L3Rjg== 101644 -4KS+4KSX 101645 -INqp2LQ= 101646 -0YPQtw== 101647 -IOC4lA== 101648 -4bqjbQ== 101649 -0LrQsNC80Lg= 101650 -IM6Z 101651 -4LmA4LiV 101652 -IGzhu5s= 101653 -2YLbjA== 101654 -a291 101655 -2YTYqA== 101656 -0LjQstCw 101657 -5pM= 101658 -4bq5 101659 -zrrOsQ== 101660 -67KV 101661 -6IKy 101662 -4buRbg== 101663 -IGJlbGly 101664 -7Yag 101665 -z4TOrg== 101666 -0YvRiA== 101667 -44KD 101668 -INCw0LHQvg== 101669 -c2vDvQ== 101670 -4KWI4KS4 101671 -INC/0YDQvtGB0YI= 101672 -ZWt0ZWRpcg== 101673 -YcW+ 101674 -4LmI4Lit 101675 -INC+0YHRgg== 101676 -IGLhuqNv 101677 -IOWkpw== 101678 -0YvQvA== 101679 -IG3Frw== 101680 -xrDhu5tuZw== 101681 -5Y+X 101682 -2YjZhw== 101683 -INGD0L8= 101684 -2YPZhg== 101685 -IM+Ez4nOvQ== 101686 -64W4 101687 -IOC4ig== 101688 -INGC0L7Qs9C+ 101689 -INCo 101690 -7J207Yq4 101691 -4LmA4Lit 101692 -0LjQvdGD 101693 -mIU= 101694 -dXnhu4Nu 101695 -7ZKI 101696 -4bqhbmg= 101697 -IOODvQ== 101698 -0YLQvtCx0Ys= 101699 -IHThuqFv 101700 -5bed 101701 -IMSR4buRaQ== 101702 -IOuPhA== 101703 -5LmF 101704 -INiq2YU= 101705 -0LDRgNC4 101706 -c3R2w60= 101707 -IGPDuW5n 101708 -7Z6I 101709 -IHRhcmlo 101710 -7KSR 101711 -7YI= 101712 -INiv2Yg= 101713 -7KE= 101714 -0LDQu9GW 101715 -4LiQ 101716 -IGPDsm4= 101717 -0LjRgtGM0YHRjw== 101718 -IOCkteCkuQ== 101719 -xZllYg== 101720 -6Zu7 101721 -INC80Lg= 101722 -b3bEmw== 101723 -IGTDom4= 101724 -0YbRltGP 101725 -24zYs9iq 101726 -5a24 101727 -IMO8cg== 101728 -2LXZhA== 101729 -0YDQuNGC 101730 -4Liy4Lir 101731 -44Gm44GE44Gf 101732 -zrjOtw== 101733 -55Y= 101734 -2J8= 101735 -acWfdGly 101736 -INCj0LrRgNCw0ZfQvdC4 101737 -67CY 101738 -4KWH4KSW 101739 -IHbhu4s= 101740 -zqU= 101741 -IOOAgCDjgIAg44CA 101742 -IGLhurFuZw== 101743 -IHThu5U= 101744 -0L7Qu9C4 101745 -4LmG 101746 -ZXpp 101747 -INC90Lg= 101748 -IM6b 101749 -IHLhuqV0 101750 -zrzPgA== 101751 -0LbQtA== 101752 -4KS+4KSw4KSk 101753 -IHXFvg== 101754 -4KWH4KS4 101755 -2KfZhtiv 101756 -IGLDvQ== 101757 -4KWL4KSy 101758 -ZMSbbA== 101759 -7JWY 101760 -INis2K8= 101761 -5bM= 101762 -4Li34LmJ 101763 -IGLhuqNu 101764 -4bqhY2g= 101765 -IMWfZXk= 101766 -INmH2LE= 101767 -IGplbg== 101768 -INCy0ZbQvQ== 101769 -ZXNpbmRl 101770 -IOCkueCkrg== 101771 -56CU 101772 -4Lia4Lia 101773 -IGNo4bupYw== 101774 -4Li24LiH 101775 -bWFsYXI= 101776 -IGRlxJ9pbA== 101777 -5p2x 101778 -IHTDoWM= 101779 -IGtpxZ8= 101780 -IHThu7E= 101781 -4KWN4KSn 101782 -4LiZ4LiX 101783 -zp/OpQ== 101784 -0YHRjNC60L7Qs9C+ 101785 -IOCkpw== 101786 -IOydmA== 101787 -2YbYqQ== 101788 -w7xz 101789 -6Ks= 101790 -IHRhcmFmxLFuZGFu 101791 -hW4= 101792 -IGtpbmg= 101793 -z4POuQ== 101794 -4KWA4KSV 101795 -7Y+s 101796 -2KfZhdmE 101797 -IFZp4buHdA== 101798 -IM+Ezr/OvQ== 101799 -INiq2YY= 101800 -IOCkheCkpw== 101801 -4LmI4Liy4LiZ 101802 -csSx 101803 -4KSC4KSm 101804 -6ao= 101805 -IGNow7puZw== 101806 -0LPQuA== 101807 -z4TOsc69 101808 -INC00L7Qvw== 101809 -0L3RltC5 101810 -0L7QvdCw0LvRjA== 101811 -zpM= 101812 -IGLDvHnDvGs= 101813 -4bw= 101814 -4KWA4KSw 101815 -2LDZhw== 101816 -IOyVhOydtA== 101817 -IGRvYW5o 101818 -IMWZw60= 101819 -0YbRjw== 101820 -IHTGsA== 101821 -IOCkuOCksA== 101822 -IG3DrXN0 101823 -IOuwjw== 101824 -2LTZhg== 101825 -0ZbQsQ== 101826 -IOOAgOOAgA== 101827 -55m9 101828 -0L7RgdC/ 101829 -0LrRltCy 101830 -IHThur8= 101831 -44Gt 101832 -IHThu5tp 101833 -IOyasA== 101834 -5pyD 101835 -2KfbjNiv 101836 -5qc= 101837 -7KCQ 101838 -IGR1cnVt 101839 -4LmA4LiK 101840 -4KWA4KSk 101841 -INmH2Yg= 101842 -4KWC4KSq 101843 -IGfDtnJl 101844 -INGA0L7QsQ== 101845 -IHRoaeG6v3Q= 101846 -YWrDrQ== 101847 -INin24zYsdin2YY= 101848 -4oCP 101849 -0YHRjNC60L7Rlw== 101850 -54U= 101851 -IOyEuA== 101852 -4bur 101853 -IOC4gg== 101854 -xa9t 101855 -656M 101856 -zrnOus6u 101857 -INC80L7Qsw== 101858 -2YbZig== 101859 -44Ga 101860 -4KS+4KSs 101861 -5qI= 101862 -2LnZhw== 101863 -0ZTQvA== 101864 -IM6s 101865 -zr/Phc+C 101866 -2LLYp9ix 101867 -6rG0 101868 -c2vDoQ== 101869 -INin2Yo= 101870 -IGlsZw== 101871 -IHPEsQ== 101872 -ZWxlcmk= 101873 -IM6X 101874 -dXlvcg== 101875 -4KS3 101876 -4KS/4KSu 101877 -0LXQstCw 101878 -5LuA5LmI 101879 -4Li44LmI 101880 -4LmJ4Liy4LiH 101881 -IGhp4buHdQ== 101882 -INin2Lk= 101883 -IMO2emVs 101884 -zr3Otw== 101885 -64Sk 101886 -IHRvw6Bu 101887 -IG1vaA== 101888 -INGP0LrRlg== 101889 -54o= 101890 -bWFrdGFkxLFy 101891 -2KrYp9io 101892 -INGB0YM= 101893 -IHnDvGs= 101894 -IM6n 101895 -0LfQvdCw 101896 -0L7RhQ== 101897 -xrB1 101898 -4LiX4Lij 101899 -44WL 101900 -IGthcsWfxLE= 101901 -2YXbjA== 101902 -INGG0ZY= 101903 -2KfYr9uM 101904 -4KWA4KWk 101905 -z4HOtw== 101906 -0LvQvtCy 101907 -5aSr 101908 -IHBow6Ju 101909 -INC/0L7Qvw== 101910 -57ea 101911 -0Y/QvQ== 101912 -4Li44LiT 101913 -0YHRgtGD0L8= 101914 -zq/Ovc6xzrk= 101915 -INGA0L7QutGD 101916 -bGFyZGE= 101917 -6LuK 101918 -z4HPiQ== 101919 -2YjYp9mH 101920 -6IU= 101921 -4KWN4KSw4KSk 101922 -5bex 101923 -INGA0YM= 101924 -IHRo4buL 101925 -IMSRaeG7h24= 101926 -7JaR 101927 -bsOpaG8= 101928 -4Liq4Lih 101929 -6rCB 101930 -YWPDrQ== 101931 -INCz0L7QtNCw 101932 -a2F6 101933 -IGLDtmw= 101934 -IGdpYW4= 101935 -4Lib4Lij 101936 -776e 101937 -4Lix4LiV 101938 -IGdlcsOn 101939 -INin2Kw= 101940 -IM6u 101941 -2ZHZjg== 101942 -0YHQutC+0LPQvg== 101943 -0YDQsNGF 101944 -IMWg 101945 -IOCkmw== 101946 -0L7RgdGC0ZY= 101947 -67O4 101948 -0YHRjNC60LjQuQ== 101949 -27HbuQ== 101950 -0YPQstCw 101951 -2KfZhNmF 101952 -INmF2LU= 101953 -642Y 101954 -YsOt 101955 -INmI2Kw= 101956 -z4TPjA== 101957 -ZWJpbGly 101958 -IHRp4bq/cA== 101959 -6aQ= 101960 -IOS4gA== 101961 -INGB0YDQtdC0 101962 -64Ko 101963 -zrXPgc65 101964 -2KfYqw== 101965 -0YHQvtCy 101966 -z4fOtQ== 101967 -IOu2hA== 101968 -IHRha8Op 101969 -IGTDvHo= 101970 -IO2PiQ== 101971 -INin2LU= 101972 -IM+Dz4TOt869 101973 -67CU 101974 -IGjhu5lp 101975 -2LHZhw== 101976 -2KjbjA== 101977 -0LLQtQ== 101978 -INin2YTYtw== 101979 -INGA0LXQtw== 101980 -2KjYp9ix 101981 -IGdp4bqjaQ== 101982 -44Gr44Gq 101983 -b2xlxI0= 101984 -4KSg 101985 -Ozo= 101986 -5L2P 101987 -2qnZhw== 101988 -IM6m 101989 -INGD0Yc= 101990 -4peP4peP 101991 -4Li54LiB 101992 -4KWH4KS1 101993 -z4POsQ== 101994 -INin2YbYqg== 101995 -INCy0L8= 101996 -IHF14bqj 101997 -ZW5pbg== 101998 -IOq1kA== 101999 -zrzOrA== 102000 -2qnYqg== 102001 -2YLZhw== 102002 -IFTDvHJraXll 102003 -IHRo4bupYw== 102004 -7ZeY 102005 -aeG7h20= 102006 -IOCkpOCklQ== 102007 -IOmH 102008 -4KS84KS+ 102009 -INij2Yg= 102010 -w6FsZQ== 102011 -56m2 102012 -IMWfZWtpbA== 102013 -0LrQvtCz0L4= 102014 -0YjQuNGF 102015 -2KfbjNi0 102016 -2KrZhg== 102017 -0L3QtdC5 102018 -4LiX4Liz 102019 -INGP0LI= 102020 -2LHZhQ== 102021 -IG3DoXk= 102022 -4Lir4Lih 102023 -xLF5bGE= 102024 -IGPhuqd1 102025 -INC00L7QsQ== 102026 -IOyepQ== 102027 -b3bDvQ== 102028 -zrnOus+M 102029 -IOOFhw== 102030 -INGC0LXRgA== 102031 -jJI= 102032 -2LPZig== 102033 -IG9sdcWf 102034 -IGJ5bGE= 102035 -2LnZhA== 102036 -INmD2KfZhg== 102037 -0LHQvtGA 102038 -7LKt 102039 -44OP 102040 -dWJs 102041 -INin2K4= 102042 -2YTZiNiv 102043 -2KrZig== 102044 -bGFkxLE= 102045 -IMO2xJ8= 102046 -cnVo 102047 -578= 102048 -INio2LnYrw== 102049 -zpnOkQ== 102050 -aWRpcg== 102051 -44Gr44Gv 102052 -IHPDtnk= 102053 -IGtow6FjaA== 102054 -0YbQtQ== 102055 -INi02YjYrw== 102056 -57g= 102057 -IOuFuA== 102058 -w7pw 102059 -IG5lZGVu 102060 -IGjDs2E= 102061 -IOCkieCkqg== 102062 -z4POtc65z4I= 102063 -5oi/ 102064 -IMKgwqA= 102065 -IOyVjA== 102066 -4KWALA== 102067 -tJE= 102068 -w6p1 102069 -0YDQvtC6 102070 -4LmA4LiI 102071 -IM61zq/Ovc6xzrk= 102072 -INio2YQ= 102073 -INGB0L7Qsg== 102074 -IMO2bmVt 102075 -IOC4iw== 102076 -7KeA66eM 102077 -5a6Y 102078 -6rKp 102079 -7ISd 102080 -IGHFvg== 102081 -IGR1eQ== 102082 -44Go44GE 102083 -2Js= 102084 -zrTOvw== 102085 -zrjOtQ== 102086 -2YPYp9mG 102087 -4KSi 102088 -4KS+4KST 102089 -IGThu4tjaA== 102090 -4buZbmc= 102091 -4Liq4Liz 102092 -xI8= 102093 -INGX0YU= 102094 -zrHOuw== 102095 -ZcSN 102096 -57K+ 102097 -INC30LI= 102098 -6Ieq5bex 102099 -INin2YTZhNmH 102100 -INCh0YI= 102101 -INiz2Ybarw== 102102 -INC00L7QvA== 102103 -0LPQvtGC0L7Qsg== 102104 -0L/QvtCy0ZbQtA== 102105 -IELhu5k= 102106 -4KWN4KSv4KSV 102107 -2LfYqQ== 102108 -0LzQvtCy 102109 -4LiX4Liy4LiH 102110 -4Li24LiB 102111 -INGW0Lc= 102112 -4KWL4KSc 102113 -IGfDtnN0ZXI= 102114 -INio2KfYtNiv 102115 -aWxlcmk= 102116 -INGB0LXQsQ== 102117 -0YnQvg== 102118 -IOOFh+OFhw== 102119 -2KjYqg== 102120 -0YHQtQ== 102121 -4KWH4KSc 102122 -IGzDqm4= 102123 -INiq2Yg= 102124 -0ZbRgdGC0Yw= 102125 -776G776G 102126 -IHRoxrDhu51uZw== 102127 -IG9sZHXEn3U= 102128 -dsSbdA== 102129 -7IaN 102130 -44Gd44GG 102131 -IOyEsQ== 102132 -67Cc 102133 -IOC4geC4suC4ow== 102134 -INi02YfYsQ== 102135 -c2xlZA== 102136 -4bqjbmg= 102137 -5p6X 102138 -bGFjYWs= 102139 -IG3DrG5o 102140 -2qnbjA== 102141 -IOC5g+C4mQ== 102142 -IGTDuW5n 102143 -INC80LDRgQ== 102144 -0YTQtdC6 102145 -5rCU 102146 -6ac= 102147 -INin2K0= 102148 -6LWw 102149 -zpnOmg== 102150 -4KWH4KWk 102151 -0YHRjNC60LA= 102152 -INGH0LDRgdGC 102153 -bGFyxLFuxLFu 102154 -IOq5gA== 102155 -7Li1 102156 -0L3QuNC80Lg= 102157 -6Kqe 102158 -5YCL 102159 -IOq1rQ== 102160 -0LrQvtGA 102161 -bWF5YQ== 102162 -4Li04LmC4LiZ 102163 -LuC4qA== 102164 -IGjhu4c= 102165 -INiq2YI= 102166 -zrPOug== 102167 -IOCkhuCkquCklQ== 102168 -0YHRgtC+0YA= 102169 -IMSRbw== 102170 -IGNo4bun 102171 -2KfbjNiq 102172 -IFF14buRYw== 102173 -0LPQu9GP 102174 -44CC44CNCgo= 102175 -IG7DoG8= 102176 -4Lit4Lil 102177 -5oqK 102178 -2YjYsdiq 102179 -IGJ1ZGU= 102180 -5pu4 102181 -ZWxpaw== 102182 -INis2Yc= 102183 -INio2YjYp9io2Kk= 102184 -6Iqx 102185 -2K/Yp9ix 102186 -IGLDvXQ= 102187 -0YfQtQ== 102188 -44KT44Gg 102189 -INmF2Lc= 102190 -bGVyZQ== 102191 -zpfOow== 102192 -7ZiV 102193 -4paN 102194 -xJ91 102195 -INCy0Lc= 102196 -2YrYsg== 102197 -INCg0L7RgQ== 102198 -7Yuw 102199 -INiv2KfYtA== 102200 -7KeR 102201 -YXTEsQ== 102202 -bWVzaQ== 102203 -44KJ44KM 102204 -xa92 102205 -csOhdA== 102206 -0L7RgdC+0LE= 102207 -5ZCE 102208 -dXnhu4du 102209 -5YGa 102210 -w7xzdA== 102211 -6YeO 102212 -zrHPgw== 102213 -IG3hurd0 102214 -0LXQu9C+0LI= 102215 -5Y2a 102216 -0LTQtg== 102217 -INiv2KfYsdiv 102218 -IGZhcms= 102219 -4LmJ4Lin4Lii 102220 -0L7QvdC4 102221 -INio2K4= 102222 -4KWB4KSk 102223 -IMSRw6J5 102224 -zrHPgc6x 102225 -IM60zrnOsQ== 102226 -IOiv 102227 -0LrQsNGF 102228 -Y2jDoXo= 102229 -emVuw60= 102230 -0YDQvtC/ 102231 -4KWA4KSu 102232 -7Ya1 102233 -ZMO8 102234 -4Lig4Liy4Lie 102235 -IO2K 102236 -2YjYpw== 102237 -IHThu5F0 102238 -77yf44CNCgo= 102239 -IOaciA== 102240 -IG5oxrBuZw== 102241 -IG5lxb4= 102242 -4KWL4KSh 102243 -7JeQ6rKM 102244 -4KSC4KSh 102245 -tow= 102246 -INC80LXRgdGC 102247 -4KS+4KSB 102248 -7Kad 102249 -IMSRYW5n 102250 -4Lit4LiU 102251 -7ZuE 102252 -4buNaQ== 102253 -c2vDqWhv 102254 -INC00L7Qug== 102255 -INiq2LU= 102256 -IHBow7JuZw== 102257 -IOqwlQ== 102258 -IHRyxrDhu5tj 102259 -7ZGc 102260 -2ZQ= 102261 -IHBow60= 102262 -IGNo4buNbg== 102263 -5LmQ 102264 -IMWfZWtpbGRl 102265 -IO2O 102266 -6bo= 102267 -66Oo 102268 -4KWI4KWkCg== 102269 -2YjYsduM 102270 -0YHRgtGA0LA= 102271 -aWxkaQ== 102272 -IM6xz4U= 102273 -0LLQsNC90L3Rjw== 102274 -7Jq4 102275 -LuKAnAoK 102276 -INGC0LDQutC20LU= 102277 -65Ox 102278 -0LXQutCw 102279 -5omN 102280 -2YXYqQ== 102281 -IHBoxrDGoW5n 102282 -6ams 102283 -44CAIOOAgA== 102284 -b3bDvWNo 102285 -4Li14Lii4LiH 102286 -IFRydQ== 102287 -0LXRgdC/ 102288 -c3R1cA== 102289 -xIw= 102290 -IGRhbMWhw60= 102291 -2LLbjA== 102292 -IOunpA== 102293 -INC+0LHRgNCw0Lc= 102294 -IGHDp8Sxaw== 102295 -6rCV 102296 -2YHYp9iv2Yc= 102297 -2q/Yp9mG 102298 -4LmJ4LiZ 102299 -4bqpbg== 102300 -5bel5L2c 102301 -IOCkpOCksA== 102302 -2YrYuQ== 102303 -IOOAig== 102304 -LOKAnA== 102305 -IG5ldg== 102306 -4Lix4LiN 102307 -xJ/EsW7EsQ== 102308 -IGppbg== 102309 -2KfYrtiq 102310 -2LPYsQ== 102311 -IHTDoGk= 102312 -IGt0ZXLDoQ== 102313 -INin2YTZhA== 102314 -4KSF 102315 -aXptZXQ= 102316 -4KWB4KSu 102317 -4Liy4Liw 102318 -IOq3 102319 -bMSxxJ/EsQ== 102320 -54++ 102321 -bGnEn2k= 102322 -6rWw 102323 -YWzEsWs= 102324 -INiv2YjYsQ== 102325 -IOyLpA== 102326 -INC30LDRgQ== 102327 -2YLZig== 102328 -IOG7qW5n 102329 -INmD2Yc= 102330 -zp/Oow== 102331 -6Kit 102332 -54w= 102333 -44GE44Gf 102334 -7ZiE 102335 -INGC0LU= 102336 -0LXRgNGW 102337 -c8Sxeg== 102338 -IMO9 102339 -0LTQvtCy 102340 -IOCkh+CkuOCklQ== 102341 -0LPQvtC0 102342 -IGJ5bG8= 102343 -4Liy4LiE4Lih 102344 -0LXQvdC40LXQvA== 102345 -0Kg= 102346 -5pyv 102347 -IOCkquCkueCksg== 102348 -IGHFnw== 102349 -4KS/4KSc 102350 -5ZOh 102351 -0LLQsNGA 102352 -4LmJ4Liz 102353 -4oyS 102354 -b3bDoW4= 102355 -IGdpw7pw 102356 -0KU= 102357 -INGB0YPQtA== 102358 -IOCkleCkrg== 102359 -4bqhbQ== 102360 -2LHYsw== 102361 -IOS6ug== 102362 -INio24w= 102363 -IOCkieCkqOCklQ== 102364 -66a9 102365 -4bqteQ== 102366 -IHbhuq10 102367 -0LvRj9C10YLRgdGP 102368 -IHNlw6c= 102369 -IOy9 102370 -0YDRg9C2 102371 -2KrYtQ== 102372 -fDo= 102373 -IOug 102374 -0LjQvNC4 102375 -INC70Y7QsQ== 102376 -IOC4nA== 102377 -77yM5L2G 102378 -INC90LDQsg== 102379 -4oCs 102380 -4LmI4Liy4Lii 102381 -INix2LM= 102382 -c2luaXo= 102383 -66g= 102384 -0LXQvdC40Y4= 102385 -IOC4pQ== 102386 -2KfYs9uM 102387 -4KWc 102388 -INm+24zYtA== 102389 -zq/OtA== 102390 -INm+24w= 102391 -0LXRgNC20LDQsg== 102392 -4KSG 102393 -IGTDvMWfw7xu 102394 -5b+r 102395 -0YDQtdGB 102396 -5YWr 102397 -0YLRlg== 102398 -4KS/4KSf 102399 -INGC0LXRhQ== 102400 -w7p0 102401 -2YbZhw== 102402 -INmG2LQ= 102403 -55m6 102404 -IOqwpA== 102405 -0LvQtdC0 102406 -IOuTpA== 102407 -IGJpbGc= 102408 -IHNwb2xlxI0= 102409 -IMSRxqFu 102410 -IOCkieCkpA== 102411 -IHRy4buL 102412 -INi52YU= 102413 -IOClpA== 102414 -IMO6xI0= 102415 -44G4 102416 -4Lin4LiB 102417 -INGB0LvRg9GH0LA= 102418 -4buNbmc= 102419 -5Y+I 102420 -0LjRgtGD 102421 -5pyJ6ZmQ 102422 -66aw 102423 -64uY 102424 -IGhv4bqhdA== 102425 -IOydtOuPmQ== 102426 -0LfQvdCw0Yc= 102427 -INin2LPYqtmB2KfYr9mH 102428 -INC/0YDQvtGG0LXRgQ== 102429 -YW7EsW4= 102430 -0LPRgw== 102431 -INin2YTYqw== 102432 -5pel5pys 102433 -zrnOus6s 102434 -INGX0Zc= 102435 -7KeB 102436 -aW51 102437 -INiz2KfYsg== 102438 -44Kh 102439 -776J 102440 -INin2YI= 102441 -IGvhur8= 102442 -xa9zb2I= 102443 -4LmH4LiB 102444 -5ZCn 102445 -5ryU 102446 -0YnQuNC1 102447 -54Y= 102448 -0YzQvtCz0L4= 102449 -4KWL4KSf 102450 -2KfZvg== 102451 -5a6k 102452 -IOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgA== 102453 -IHRyaeG7g24= 102454 -IHThuq1w 102455 -6aOf 102456 -67k= 102457 -INGH0LXRgNC10Lc= 102458 -INGG0Lg= 102459 -0YHRgw== 102460 -INC90LXQvA== 102461 -INCw0YA= 102462 -INmE2Kc= 102463 -IOynhA== 102464 -55+z 102465 -INC/0YDQvtCx 102466 -IOybkA== 102467 -24zZhtuM 102468 -0Y7Rh9C4 102469 -4oCN 102470 -27Hbsw== 102471 -44Ks 102472 -56CU56m2 102473 -7YKk 102474 -IGdlcsOnZWs= 102475 -INit2LM= 102476 -7ZS8 102477 -6IKh 102478 -IM+Ezrk= 102479 -IHbFoWVjaA== 102480 -IHbDrA== 102481 -2KfZhtmK 102482 -INmH2LPYqg== 102483 -IOuCqA== 102484 -xZllag== 102485 -0LXRgNCz 102486 -IHPDtno= 102487 -INin2YTZhdiq 102488 -IGNo4bq/ 102489 -4buTaQ== 102490 -5Y+k 102491 -4paN4paN 102492 -4buTbmc= 102493 -44Oi 102494 -INC00Lg= 102495 -zrXOuw== 102496 -INC+0L3QsA== 102497 -INC90LDQuQ== 102498 -IF97 102499 -0L/QvtC7 102500 -YWxpeg== 102501 -IHTEg25n 102502 -IGTDrQ== 102503 -w6lw 102504 -INmE2YU= 102505 -IG1vxb4= 102506 -IG5nb8OgaQ== 102507 -6Jc= 102508 -INGH0LXQvA== 102509 -IMSR4buV 102510 -0LXRgtCw 102511 -5Y+y 102512 -INGB0LrQsNC3 102513 -44K/44O8 102514 -0LDQvdGM 102515 -IGfDtno= 102516 -67OE 102517 -44GL44Gj44Gf 102518 -IOuNlA== 102519 -INmG2YI= 102520 -INGD0YfQsA== 102521 -IHNhaGlw 102522 -INGB0L/QtQ== 102523 -zq/Ov8+F 102524 -7L2U 102525 -IOuI 102526 -bWFt 102527 -IHJvY2U= 102528 -INmG2KfZhQ== 102529 -0LXRgNCw0YLRgw== 102530 -xLFw 102531 -44GE44Gm 102532 -IO2VmQ== 102533 -IOCkh+CkqA== 102534 -5ak= 102535 -IG5oacOqbg== 102536 -YXTEsXI= 102537 -xZllbsOt 102538 -2K/YqQ== 102539 -44Oq44O8 102540 -4Lil4LiH 102541 -IOmA 102542 -IOC5gOC4mw== 102543 -0LTRlg== 102544 -zq3PgQ== 102545 -7ISk 102546 -0LPRgNCw 102547 -ZXNpbmU= 102548 -INC10LU= 102549 -IGlraQ== 102550 -INiq2Kw= 102551 -bGFyxLFuYQ== 102552 -ZMO8cg== 102553 -INin2YTYsA== 102554 -2YXYqg== 102555 -IOCkkA== 102556 -4KS/4KSm 102557 -IOu5 102558 -0YTQvtGA0LzQsA== 102559 -INC+0L3QuA== 102560 -0LPQvtGA 102561 -0L3QtdGB 102562 -7JiA64uk 102563 -xLFsZMSx 102564 -IMOnZWs= 102565 -INC00L7Qsg== 102566 -2K/bjA== 102567 -IMSMZXNr 102568 -0YjQsA== 102569 -INin2Ko= 102570 -5bGL 102571 -5pa8 102572 -IHByw6F2 102573 -w6ltdQ== 102574 -5biI 102575 -44WL44WL 102576 -IGlsZ2lsaQ== 102577 -4Lir4Lin 102578 -4KSH 102579 -4KS+4KS3 102580 -656R 102581 -YXN5b24= 102582 -0YbRjA== 102583 -4LmB4LiV 102584 -4bufaQ== 102585 -INCy0YvRgQ== 102586 -0ZbQu9GM0LrQuA== 102587 -INC60L7RgtC+0YDRi9C1 102588 -0L3QuNC60Lg= 102589 -INin2K8= 102590 -IMW+aXY= 102591 -IM6xz4DOvw== 102592 -2LHYtg== 102593 -2KfYqQ== 102594 -IGtkecW+ 102595 -4buvYQ== 102596 -IOuMgO2VnA== 102597 -IHTDtGk= 102598 -0YPRlA== 102599 -2LLYsQ== 102600 -IOWl 102601 -44OL44OL 102602 -2KjYqQ== 102603 -z4TOv8+C 102604 -0YbQuNC+0L0= 102605 -INmF2Yo= 102606 -IMSDbg== 102607 -4KWH4KSX 102608 -INGA0LXQsw== 102609 -IGzhu5tu 102610 -7KSA 102611 -7Ius 102612 -IGJp4bq/dA== 102613 -YWxhcsSx 102614 -2YHZig== 102615 -5LiW55WM 102616 -INC90LXQvtCx0YXQvtC00LjQvA== 102617 -4LiZ4Lin 102618 -zr3PhA== 102619 -IOG6o25o 102620 -7ZaI 102621 -IOCkteCksA== 102622 -aGxlZA== 102623 -4Li04LiI 102624 -5q27 102625 -INin2YTYqtmK 102626 -0L3QvtGB 102627 -cHJhdg== 102628 -0Y/RgtC4 102629 -0YnQsA== 102630 -2YjZhtmH 102631 -IGHEnw== 102632 -4Lie4Lij4Liw 102633 -IHRo4buRbmc= 102634 -0YTQuA== 102635 -INCz0L7Qu9C+0LI= 102636 -IGtob2E= 102637 -IOugiA== 102638 -44GS 102639 -IGdldGly 102640 -2LTYqg== 102641 -0LbQtdC90L3Rjw== 102642 -0LXQvdGW 102643 -IGdp4buv 102644 -bGVyaW5pbg== 102645 -4KWA4KS1 102646 -6YG4 102647 -4KS44KSw 102648 -INGH0LXQu9C+0LI= 102649 -4KWN4KSc 102650 -INCx0YPQu9C+ 102651 -INin2YbYrw== 102652 -4Lix4LiZ4LiX 102653 -6K6p 102654 -IHF1eeG7gW4= 102655 -INit2KfZhA== 102656 -7LKY 102657 -INC70Y7QtA== 102658 -z4HPhw== 102659 -0LDQu9GM0L3Qvg== 102660 -44CA44O9 102661 -6riJ 102662 -44Kx 102663 -INmF2LHYrw== 102664 -IMO0bmc= 102665 -INin2LQ= 102666 -5aSn5a2m 102667 -7KaI 102668 -5oim 102669 -ZXlp 102670 -INCQ0L0= 102671 -4KS/4KSq 102672 -IHRpw6p1 102673 -2LTbjA== 102674 -4bqvbg== 102675 -6a2U 102676 -44Go44GE44GG 102677 -IOyggA== 102678 -0LrRgtC4 102679 -INmF2K3Zhdiv 102680 -IO2GtQ== 102681 -4Li44Lih 102682 -5Y2h 102683 -0L7RgNC+0LI= 102684 -0LrQvtGO 102685 -IGzhu7Fj 102686 -5bO2 102687 -INix2YjYsg== 102688 -0YXRltC0 102689 -IGjhu5M= 102690 -IMO8bA== 102691 -INi02YU= 102692 -2YbYsw== 102693 -2KjZiA== 102694 -IHRow6pt 102695 -4bqhYw== 102696 -5bqc 102697 -ZWNobg== 102698 -IM6azrE= 102699 -6JGX 102700 -55y8 102701 -w6Fo 102702 -IM65 102703 -6rmM7KeA 102704 -bWF6 102705 -zrvOv86z 102706 -IGpzbWU= 102707 -IOG8 102708 -INC/0YDQsNCy0Lg= 102709 -0LrQu9Cw0LQ= 102710 -IHRo4bun 102711 -c2Fo 102712 -xJ9pdA== 102713 -INmB24w= 102714 -0LXQvdC90L4= 102715 -4KWB4KSb 102716 -44G7 102717 -55m+ 102718 -0LjRgtCw 102719 -INCx0YvQu9C+ 102720 -IHZ5cw== 102721 -IOy2nA== 102722 -4bqvbmc= 102723 -IMSR4bqhaQ== 102724 -INmF2YjYsdiv 102725 -0LXQu9Cw 102726 -0ZbRiA== 102727 -0LvQtdC90L3Rjw== 102728 -5pA= 102729 -INC90LXQtA== 102730 -aXlhdA== 102731 -7Lw= 102732 -IG9sZHXEn3VudQ== 102733 -2K/Yp9mG 102734 -7Z0= 102735 -INiz24w= 102736 -4Li14LiB 102737 -xJtzdA== 102738 -xLFtxLE= 102739 -5LiJ5LiJ 102740 -44K9 102741 -INGC0LXQvw== 102742 -INGA0LDQuQ== 102743 -4KS+4KSn 102744 -IOyCrOuejA== 102745 -IFRydW5n 102746 -77yP77yP 102747 -IHTDom0= 102748 -xaFlbsOt 102749 -44ON 102750 -IM+Ezr/Phc+C 102751 -INC90ZY= 102752 -0LLQuNC0 102753 -5r8= 102754 -INi4 102755 -44Ov 102756 -7KKF 102757 -0LLQsNGC0Lg= 102758 -IHF1w6E= 102759 -4Lik 102760 -IMSRxrDhu51uZw== 102761 -4KWB4KSm 102762 -cm9q 102763 -INGD0YE= 102764 -6aaZ 102765 -7L2Y 102766 -INmI2Ko= 102767 -4Lih4Liy4LiB 102768 -5YiH 102769 -IMOhbg== 102770 -INC80LXQtA== 102771 -7JeQ64qU 102772 -IGhsYXY= 102773 -2LHYqg== 102774 -4LmD4LiI 102775 -5rSy 102776 -INC70ZY= 102777 -5oiY 102778 -2YjZhtiv 102779 -6Laz 102780 -5YuZ 102781 -55Sz 102782 -IOyx 102783 -IOydtOuPme2VqeuLiOuLpA== 102784 -0YnQtdGB0YLQsg== 102785 -IOu2iA== 102786 -2YTZiA== 102787 -w7x2ZW4= 102788 -6IiH 102789 -IGdp4bubaQ== 102790 -INmI2YI= 102791 -IOqwpOuhnOq3uA== 102792 -INi52KfZhQ== 102793 -mJA= 102794 -Ojo6Ojo= 102795 -INGD0LQ= 102796 -LdGC0L4= 102797 -INGE0L7RgA== 102798 -0LjQvdC4 102799 -44GX44GE 102800 -IOqwpOuhnOq3uOuhnA== 102801 -44Gz 102802 -44Op44Kk 102803 -ZW7DoQ== 102804 -IG5leg== 102805 -IMO2bmVtbGk= 102806 -INC90LjRhQ== 102807 -4KSC4KS4 102808 -IOCkieCkuOCklQ== 102809 -4KWN4KSw4KSm 102810 -IG7Ds2k= 102811 -2YPZhA== 102812 -4Li04Lin 102813 -zrrOvw== 102814 -4KWB4KSW 102815 -w7Z5bGU= 102816 -zqzOuw== 102817 -w7NuZw== 102818 -INiv2KfZhti0 102819 -INC30LE= 102820 -7Ls= 102821 -4Lic4Lil 102822 -65Ok7J20 102823 -IGV0aw== 102824 -2LHYp9iq 102825 -IM61zro= 102826 -0YLRgNCw 102827 -4KWN4KSk4KSw 102828 -4KSC4KSs 102829 -INC80ZbRgQ== 102830 -5qC5 102831 -44OZ 102832 -IHThu4k= 102833 -4LmA4LiL 102834 -7Iig 102835 -77yM5LiN 102836 -7Jio 102837 -IG3Em3N0 102838 -gbU= 102839 -YXrEsQ== 102840 -cmFkYQ== 102841 -z4DOsQ== 102842 -bcOp 102843 -2YbYp9mF2Yc= 102844 -2KfbjNmE 102845 -zrzOtw== 102846 -bHVr 102847 -2YPZig== 102848 -IO+8iQ== 102849 -INC00LXRgg== 102850 -IGnDp2luZGU= 102851 -0Y/QvA== 102852 -IGTGsOG7 102853 -INC/0YDQtdC00YHRgtCw0LI= 102854 -w7xyZQ== 102855 -5ZWK 102856 -INGC0YDRgw== 102857 -ZXNpbmk= 102858 -INCw0LvQtQ== 102859 -44Oz44OJ 102860 -4KWD4KSk 102861 -zrXPhQ== 102862 -4KWB4KSG 102863 -IGhpw6c= 102864 -55S6 102865 -INCW 102866 -54Wn 102867 -a8Oh 102868 -IHRy4buNbmc= 102869 -INiq2LQ= 102870 -4KS+4KS2 102871 -INmF2Ks= 102872 -ZXRpbQ== 102873 -IHRo4bqleQ== 102874 -IOCkrOCkuQ== 102875 -2LnYqg== 102876 -4Li24LmJ 102877 -IHNldg== 102878 -0YHRgtCw 102879 -IGPhu6k= 102880 -IHRp4buBbg== 102881 -4KWA4KSc 102882 -0Y/Qsw== 102883 -INC+0YDQs9Cw0L3QuA== 102884 -INCx0YvQuw== 102885 -dMO8cg== 102886 -INio2KfYstuM 102887 -IOyerA== 102888 -4KS14KSw 102889 -5pyJ6ZmQ5YWs5Y+4 102890 -a3Vw 102891 -IGl5aQ== 102892 -7ZWY6rKM 102893 -44CAbA== 102894 -44K344On 102895 -2KfYsdip 102896 -4Liq4Lij 102897 -IHTDrWNo 102898 -INC60LDRgA== 102899 -0LjQsQ== 102900 -INCy0ZbQtNC/0L7QstGW0LQ= 102901 -IHBvZGxl 102902 -4KWN4KSw4KSV 102903 -aXlvbg== 102904 -0LrQvtC90L7QvA== 102905 -IM68zq0= 102906 -INC/0YDQvtC40Lc= 102907 -IOKAjw== 102908 -bWVrdGVkaXI= 102909 -zqnOnQ== 102910 -IGLDoW8= 102911 -4LiI4Liz 102912 -642U 102913 -67iM 102914 -IHPhu58= 102915 -24zYsduM 102916 -0L7QvdGD 102917 -xLFuZGFraQ== 102918 -0LDQu9GM0L3QvtCz0L4= 102919 -zrzOsg== 102920 -0LvQuNC3 102921 -IGplamljaA== 102922 -5pa9 102923 -5L6/ 102924 -bGXFn3Rpcg== 102925 -INmI2KM= 102926 -IOCkuOCkrA== 102927 -bGVyZGU= 102928 -INqG2Yc= 102929 -z4TOrQ== 102930 -IGfDrA== 102931 -IMOa 102932 -INGA0LDRgdC/ 102933 -IHTDvG0= 102934 -4LmA4LiH 102935 -6JC9 102936 -7Iah 102937 -4LmE4LiX4Lii 102938 -bcSxxZ90xLFy 102939 -INmC2LHYp9ix 102940 -IOC4hOC4suC4qg== 102941 -IGvEsXM= 102942 -0L7QstCw0L3QuNGP 102943 -44KC44Gu 102944 -2K/Yp9mF 102945 -7Jyh 102946 -b2xvag== 102947 -INC/0L7RgdC70LU= 102948 -INCi0LDQug== 102949 -INCx0L7Qu9C10LU= 102950 -IMSR4buVaQ== 102951 -bGFr 102952 -7YWM 102953 -IGF5bg== 102954 -0Y/RgQ== 102955 -INC/0L7Qsw== 102956 -IGFyYXPEsW5kYQ== 102957 -iKw= 102958 -4KWC4KSy 102959 -IM6xzr3OsQ== 102960 -IHF1eeG6v3Q= 102961 -IHRodeG7mWM= 102962 -IGTDvG4= 102963 -IHDFmWVz 102964 -0YTRlg== 102965 -IOW4 102966 -2KfZhNmK 102967 -INC/0L7QstC10YA= 102968 -0YfQuNC90LA= 102969 -c2tv 102970 -57WQ 102971 -2KE= 102972 -INCz0YDQsA== 102973 -0L7RgtC4 102974 -IHF14buRYw== 102975 -0YbRltCy 102976 -bGVuZGly 102977 -0LLRltC0 102978 -INC20LjRgg== 102979 -w7x5b3I= 102980 -77yM5LuW 102981 -bGFyxLFuZGE= 102982 -IHV5Zw== 102983 -IHRyw60= 102984 -INi02YY= 102985 -2KfYqNmE 102986 -5rex 102987 -wqBw 102988 -0YHQutCw0Y8= 102989 -0L7RgtCw 102990 -2YjYtw== 102991 -INin2Lc= 102992 -5L6G 102993 -INC30LDRgg== 102994 -INC40LzQtQ== 102995 -4LmA4LiX4Lio 102996 -64u0 102997 -bsSbbsOt 102998 -0YPQu9GP 102999 -LdC/ 103000 -5Zg= 103001 -INCy0LjQvw== 103002 -0LDRgNCw0LrRgg== 103003 -4LmA4Lia 103004 -56aP 103005 -z4HPjg== 103006 -2LPZhw== 103007 -4KWM4KSw 103008 -IGRpxJ9lcg== 103009 -4LmC4LiU4Lii 103010 -INGB0L/QvtGB0L7QsQ== 103011 -5Y23 103012 -6JY= 103013 -0LDQvdGC 103014 -0Y7RgtGM0YHRjw== 103015 -INGN0YLQvtC8 103016 -IO+9gA== 103017 -4Liq4Liy4Lih 103018 -w6xt 103019 -INGI0Lo= 103020 -IOC4m+C4o+C4sA== 103021 -4KS84KWA 103022 -ZWts 103023 -bXXFnw== 103024 -INGC0LDQutC+0LY= 103025 -2YjYs9i3 103026 -IMSNaQ== 103027 -4Li14LiZ 103028 -24zZhtmH 103029 -xJtr 103030 -5b28 103031 -bGVyaW5l 103032 -IMSR4bqldA== 103033 -4KWB4KSP 103034 -0L7Qu9C+0YE= 103035 -IOWwjw== 103036 -2LLZitip 103037 -INCy0LvQsA== 103038 -4KWA4KSy 103039 -IGV0dGk= 103040 -INGB0L7RgdGC0LDQsg== 103041 -2YTYp9mE 103042 -IOeO 103043 -IHDFmcOtcGFk 103044 -65+w 103045 -4Li44LiB 103046 -INGH0Lg= 103047 -5YWN 103048 -bsSbasWhw60= 103049 -4Li04Lil 103050 -5Y2A 103051 -c2vDvWNo 103052 -4Liy4Lio 103053 -5ZCX 103054 -IO2YhA== 103055 -IGFsxLFu 103056 -5aeU 103057 -4Lie4Lij 103058 -YcW+ZA== 103059 -INCx0ZbQu9GM 103060 -4LmI4Lin4LiZ 103061 -b29n 103062 -YWPEsQ== 103063 -bMSxxJ8= 103064 -IGtodQ== 103065 -IGhpem1ldA== 103066 -IOmb 103067 -IM6Y 103068 -IGRlxJ9lcg== 103069 -5YWt 103070 -INiv2Yc= 103071 -IG7Em2s= 103072 -4LiE4LiZ 103073 -0LXRgtGM 103074 -2KjYp9mG 103075 -z4TOuc66zq4= 103076 -IMSR4buLYQ== 103077 -IEPDtG5n 103078 -7YyQ 103079 -INC60L7Qs9C00LA= 103080 -INqp2YbYrw== 103081 -44Gn44GN 103082 -IM+AzrXPgc65 103083 -bGFyZGFu 103084 -INC30LXQvA== 103085 -2KrZiNin2YY= 103086 -6LOH 103087 -bGlrbGU= 103088 -IHThu6U= 103089 -IGThuqtu 103090 -IG5heQ== 103091 -INGB0YLQvtGA 103092 -INi02YXYpw== 103093 -2KvYsQ== 103094 -IGRlZGk= 103095 -0LrQvtC1 103096 -65GQ 103097 -0YbQtdCy 103098 -2KzZhw== 103099 -IG3Fr8W+ZQ== 103100 -4KWB4KSq 103101 -4KWN4KSw4KSu 103102 -IHRhxZ8= 103103 -0L7RgNGC 103104 -zrPPgc6x 103105 -55m8 103106 -4Liy4Lia 103107 -aeG7hW4= 103108 -INmF2LPYqg== 103109 -0LvQtdC60YE= 103110 -IHByYXY= 103111 -INC00L7RgQ== 103112 -IGTEscWf 103113 -IHplbQ== 103114 -IGdpYW8= 103115 -IHZsYXN0 103116 -INGN0YLQvtCz0L4= 103117 -772w 103118 -4Lin4LiH 103119 -0YDQvtC5 103120 -IGJpcmxpaw== 103121 -ZW7DvQ== 103122 -IOuLqA== 103123 -0L7QstCw0L3QuA== 103124 -6aOO 103125 -7Y+J 103126 -IHphaA== 103127 -0LHQsA== 103128 -5Yqp 103129 -6YCy 103130 -6raM 103131 -IGRpeWU= 103132 -4KSC4KSV 103133 -IGNodXnhu4Nu 103134 -IOyXrQ== 103135 -INGC0YDQuA== 103136 -IMO2bmNl 103137 -77yM6L+Z 103138 -b+G6oWk= 103139 -0LvQtdGC 103140 -IM+Dz4XOvQ== 103141 -bMOhZA== 103142 -w6dl 103143 -dMO8 103144 -IMSNw6FzdA== 103145 -IM61zr0= 103146 -IGJp4buHdA== 103147 -IOmr 103148 -4KWL4KSV 103149 -2YTYp9iq 103150 -2KjYp9mE 103151 -ZWNpZXM= 103152 -IOuLuQ== 103153 -4LiK4LiZ 103154 -z4TOsc+C 103155 -4KWN4KSj 103156 -dWrDrWPDrQ== 103157 -xI1ldA== 103158 -INC/0L7QsQ== 103159 -2YjYp9ix 103160 -aXlhcw== 103161 -IGRydWg= 103162 -2K/Yrw== 103163 -z4zOvQ== 103164 -0YDQtdC9 103165 -4Liy4Lij4LiW 103166 -5L2O 103167 -7JW9 103168 -0YDQvtC3 103169 -64qU642w 103170 -44KT44Gq 103171 -xI1lbsOt 103172 -KioqKioqKioqKioq 103173 -IM6h 103174 -INGC0L7QvNGD 103175 -4Lij4LiB 103176 -4KWB4KS4 103177 -5Lmd 103178 -5bCx5piv 103179 -o2k= 103180 -6Ziy 103181 -2YPYsQ== 103182 -INGN0YLQuA== 103183 -INqp2LTZiNix 103184 -IOqwkA== 103185 -INCw0LQ= 103186 -INiv2KfYrw== 103187 -6YGO 103188 -2as= 103189 -IGzhuq1w 103190 -INin2YTZhw== 103191 -5pyb 103192 -INiq2Yc= 103193 -7KeI 103194 -44Gn44GC44KL 103195 -INC80LXQtg== 103196 -INGA0LXQt9GD0LvRjNGC 103197 -540= 103198 -0LXQvNGD 103199 -INiq2YjYp9mG 103200 -INix2KfZhw== 103201 -44O844Og 103202 -5YS/ 103203 -5bGe 103204 -0LHRiw== 103205 -4b8= 103206 -4LiE4Lil 103207 -4KWL4KSI 103208 -w7x0w7xu 103209 -4KSX4KSw 103210 -7JWY64uk 103211 -4oin 103212 -IOywqA== 103213 -57WE 103214 -zrzOsc+EzrE= 103215 -4Li44LiZ 103216 -INGC0L7QvA== 103217 -0LXRgNCy 103218 -zpHOow== 103219 -IGnFn2xlbQ== 103220 -2LnZhQ== 103221 -64M= 103222 -44OE 103223 -2KfZgdiq 103224 -5Yqe 103225 -IG5lcw== 103226 -YXZhxZ8= 103227 -INmG24zYsg== 103228 -5by6 103229 -IOmZ 103230 -0ZbQvdC90Y8= 103231 -5rKz 103232 -w6HFmQ== 103233 -5p2Q 103234 -INij2Yo= 103235 -IOy5tA== 103236 -IG5lbsOt 103237 -INmI2YU= 103238 -INqp2YU= 103239 -aeG6v3U= 103240 -IOaw 103241 -5Yy7 103242 -IHpvcg== 103243 -zq/Pgw== 103244 -4KS/4KSn 103245 -INC/0L7QutCw0Lc= 103246 -4KS54KSw 103247 -IGnDp2Vy 103248 -2K3YqQ== 103249 -4KS/4KSW 103250 -0LDQtNCw 103251 -2KrYsduM2YY= 103252 -IGJhbw== 103253 -IHjDow== 103254 -4LmA4LiE4Lij 103255 -IG5naMSp 103256 -4LmB4Lia4Lia 103257 -IGRvxJ9ydQ== 103258 -0ZbRgtC4 103259 -INio2YrZhg== 103260 -INC70LXRgg== 103261 -2KfYug== 103262 -24zaqduM 103263 -csOhdg== 103264 -4KWN4oCN 103265 -4oCZbmlu 103266 -IOC4og== 103267 -5Y2K 103268 -INC60L7Qu9C4 103269 -IHRy4buf 103270 -6Z2S 103271 -656A 103272 -IOuo 103273 -INmI2LE= 103274 -776K 103275 -6KeC 103276 -INC/0Lg= 103277 -0L3Rg9Cy 103278 -aWxtZXNp 103279 -2LPYqtmH 103280 -INC00LXRgNC20LDQsg== 103281 -5a6D 103282 -5Yil 103283 -64WA 103284 -0LvRgdGP 103285 -4KSC4KSn 103286 -INGC0Lg= 103287 -IHDFmWlw 103288 -0L/QuA== 103289 -4buTbg== 103290 -0L7QstCw0YLRjA== 103291 -7J206528 103292 -5pyd 103293 -IOuYkA== 103294 -IM6tzr3OsQ== 103295 -44G+44Gn 103296 -2KzYp9mF 103297 -IOuK 103298 -0L3RltCy 103299 -z4DOv8+F 103300 -INiy2YXYp9mG 103301 -5puy 103302 -INmF2Yc= 103303 -66Co 103304 -5LiD 103305 -44Go44GX44Gm 103306 -bGFiaWxpcg== 103307 -0L7QttC1 103308 -5aSc 103309 -INC90YPQttC90L4= 103310 -5b2p 103311 -54ix 103312 -IGhvw6Bu 103313 -w7xuw7w= 103314 -IOuEpA== 103315 -INis2YY= 103316 -IG7Em2o= 103317 -0LrQuNC80Lg= 103318 -IGF5bsSx 103319 -INmD2YQ= 103320 -IG5oYXU= 103321 -4bqz 103322 -2YrYp9iq 103323 -IG1lemk= 103324 -INGA0LXQug== 103325 -IHTDvHI= 103326 -INCz0L7QstC+0YA= 103327 -IGZhemxh 103328 -5YeG 103329 -0YjQuNC5 103330 -0J/RgNC4 103331 -0YDQvtGB0YI= 103332 -INC+0YDQs9Cw0L0= 103333 -bsO9bQ== 103334 -INGA0L7QtA== 103335 -INmI24w= 103336 -aWNrw70= 103337 -66a8 103338 -772y 103339 -5oCO 103340 -INmH2LDYpw== 103341 -INGH0LDRgdGC0Lg= 103342 -w61y 103343 -4buHbmg= 103344 -IO2X 103345 -6rs= 103346 -bHXFvg== 103347 -w61s 103348 -Y8OtY2g= 103349 -5a6f 103350 -44Gg44Gj44Gf 103351 -2YrYsdip 103352 -IHbEg24= 103353 -5riv 103354 -IM+EzrnPgg== 103355 -2KfYsdiq 103356 -IHbhuqVu 103357 -4pSB4pSB4pSB4pSB 103358 -5a++ 103359 -z4HOrQ== 103360 -INCz0L7QtNGD 103361 -INiz2Kg= 103362 -2KfYsdin2Ko= 103363 -0LXQu9C10Lk= 103364 -INC30LDRhQ== 103365 -INCy0LDQtg== 103366 -IHThu4luaA== 103367 -2KfYqNi5 103368 -IOCknOCkrA== 103369 -IOCkkOCkuA== 103370 -INC00YM= 103371 -IOmrmA== 103372 -6rKg 103373 -0L3QtdC1 103374 -772M 103375 -INC80LDQuw== 103376 -6L65 103377 -44Gg44GR 103378 -4LmJ4Lij 103379 -2YLYtw== 103380 -IGLDqm4= 103381 -IHNlYg== 103382 -INiu2YjYp9mH 103383 -c2l6 103384 -IG9sdXI= 103385 -IOuUsA== 103386 -IOyiiw== 103387 -IHN2xJt0 103388 -aWNrw6E= 103389 -4bu5 103390 -IHF14bqjbg== 103391 -INC40YE= 103392 -IHphxI0= 103393 -4Li34Lit4LiZ 103394 -0ZTRjg== 103395 -4KS/4KS3 103396 -54q2 103397 -z4POvA== 103398 -4Lix4Liq 103399 -w7Nj 103400 -INCx0LXRgA== 103401 -IO2d 103402 -Ozo7Og== 103403 -INm+2LM= 103404 -IOuRkA== 103405 -0L3QuNGH 103406 -INC+0YfQtdC90Yw= 103407 -IOyVhOydtOy9mA== 103408 -IM64zrE= 103409 -INCy0YHRgg== 103410 -2KfYr9ip 103411 -IGRldmFt 103412 -4Li34Lit4LiH 103413 -INC70Y7QtNC4 103414 -7JiI 103415 -4buxYQ== 103416 -0Y/RhQ== 103417 -4oCM2KfbjA== 103418 -INiz2Yg= 103419 -5bC8 103420 -IHRo4bup 103421 -bWV5ZQ== 103422 -IOi1 103423 -6Imv 103424 -IGRlxJ9pxZ8= 103425 -0YjRlg== 103426 -IHRy4buj 103427 -IOKAjiM= 103428 -55eF 103429 -7JuM 103430 -IGtkZQ== 103431 -zqc= 103432 -5qQ= 103433 -INGF0LDRgNCw0LrRgg== 103434 -5oc= 103435 -IGJp4bq/bg== 103436 -2YLYuQ== 103437 -5Z+f 103438 -INC90LXQvw== 103439 -IGTFrw== 103440 -INC/0LjRgg== 103441 -INGC0YDQtdCx 103442 -2KfYstuM 103443 -INi32LE= 103444 -INmF2YQ= 103445 -IHRoYW0= 103446 -INmI2KzZiNiv 103447 -IHN2w6k= 103448 -6aeF 103449 -2KfbjNmG 103450 -IHRpw6pu 103451 -c3RydQ== 103452 -IHbhuq15 103453 -w7xuZQ== 103454 -IOC5gOC4oQ== 103455 -IHLhurFuZw== 103456 -0LDRgtGD 103457 -5LqR 103458 -0L3QuNGC 103459 -5LyK 103460 -2YjYtQ== 103461 -IOmd 103462 -INC/0YDQvtCx0LvQtdC8 103463 -ZGVraQ== 103464 -KioqKioqKioqKioqKio= 103465 -w7Jh 103466 -IMSR4buBdQ== 103467 -44KM44Gf 103468 -2KfYsdiz 103469 -44Gq44GP 103470 -2KfZgti5 103471 -6LuN 103472 -2YPZhQ== 103473 -xI1hcw== 103474 -IGvhu7M= 103475 -2LTZhQ== 103476 -4KWH4KSh 103477 -6Zi/ 103478 -IGplasOt 103479 -IOaZ 103480 -IMSwxZ8= 103481 -YXJkxLFt 103482 -IOCkuOCkruCkrw== 103483 -INCd0L4= 103484 -aWxlcmlu 103485 -INi52KjYrw== 103486 -bsOtaw== 103487 -INi02qnZhg== 103488 -4Li04LiX4Lii 103489 -4buF 103490 -0YDQtdC3 103491 -IGNo4bupbmc= 103492 -IDou 103493 -IOCkquCkpA== 103494 -IMW+aXZvdA== 103495 -5aKD 103496 -q2E= 103497 -IHRydW5n 103498 -0L3QuNC60ZbQsg== 103499 -INin2YTZhdmG 103500 -INGA0LDRgdGB 103501 -INC20LjQsg== 103502 -INC30LDQutC+0L0= 103503 -IOuqqQ== 103504 -IHrDoXY= 103505 -IGhha2s= 103506 -5Luk 103507 -INGP0LrQuNC5 103508 -INio2Yo= 103509 -zrvOrQ== 103510 -b2N1aw== 103511 -INGO 103512 -4LiB4Lin 103513 -INin2Ybarw== 103514 -4KWB4KSC 103515 -IG7DoW0= 103516 -4buVbmc= 103517 -INC20LXQuw== 103518 -IMSR4bq3Yw== 103519 -xI1pdA== 103520 -IOqxtA== 103521 -INio24zYtA== 103522 -0LrRgNCw0ZfQvQ== 103523 -INmI2Yc= 103524 -0L3QtdC90L3Rjw== 103525 -IOC5gOC4ng== 103526 -0L7QvNC10L0= 103527 -IGzhuqdu 103528 -INi52YXZhA== 103529 -IO6BtQ== 103530 -xJ4= 103531 -0ZbRgdC70Y8= 103532 -xrBuZw== 103533 -4KS+4KSr 103534 -4LiX4LiY 103535 -0LTQtdC9 103536 -INGJ0L7QsQ== 103537 -0YfQuNCy 103538 -xLFsxLFy 103539 -2KfYudin2Ko= 103540 -asOtY8Ot 103541 -67Ko 103542 -2obZhw== 103543 -2KfYsdis 103544 -INm+2LHZiA== 103545 -INC+0LTQuNC9 103546 -0LvQuNC9 103547 -0LHRgw== 103548 -IOCkuOCksOCklQ== 103549 -5YCZ 103550 -67aA7YSw 103551 -4KWI4KSCLA== 103552 -5bQ= 103553 -4LmC4Lil 103554 -IHbFoWFr 103555 -INC+0L/RgNC10LQ= 103556 -7LE= 103557 -5r0= 103558 -IGThu7FuZw== 103559 -cHLDoXY= 103560 -4Li04Liq 103561 -IG5oaeG7h20= 103562 -IGlsacWf 103563 -INC10YnQtQ== 103564 -IGplxaF0xJs= 103565 -INGA0LDRgdGC 103566 -4Liu 103567 -4KSC4KSf 103568 -4oCM2qk= 103569 -INio24zZhg== 103570 -b3ZvdQ== 103571 -5pmu 103572 -zq/Otc+C 103573 -0L7RgNC+0Yg= 103574 -IG9sbWFr 103575 -IHN0w6F0 103576 -ZGnEn2k= 103577 -IHTDrG5o 103578 -IGTEmw== 103579 -INqv2LHZgQ== 103580 -z4POvw== 103581 -INGD0YI= 103582 -7ZWZ6rWQ 103583 -4Lix4LiQ 103584 -4Liy4Lit 103585 -IMSR4bq3dA== 103586 -INC80L7Qs9GD0YI= 103587 -67Cw 103588 -dGlr 103589 -qr0= 103590 -bGnEnw== 103591 -z4DOtQ== 103592 -IOiA 103593 -a8O8 103594 -YWRlY2U= 103595 -zrrPjA== 103596 -INC00ZY= 103597 -4bqnbQ== 103598 -54Sh44GX 103599 -27LbsNux 103600 -6LWb 103601 -0L7RgdGD0LQ= 103602 -IOyViOuCtA== 103603 -INCU0LY= 103604 -5bqn 103605 -aWNrw71jaA== 103606 -IOyggQ== 103607 -4KWHLA== 103608 -b3bDqWhv 103609 -IHbhuqtu 103610 -IGJpcmxpa3Rl 103611 -IOCksOCklg== 103612 -INmG2Yc= 103613 -2YLYsQ== 103614 -4KSq4KSw 103615 -ZXTDrQ== 103616 -INGC0Ys= 103617 -gOydtA== 103618 -IOCkheCksg== 103619 -INC80L7QttC1 103620 -44K0 103621 -IHN0cmFu 103622 -2LfYsQ== 103623 -6L+Z5Liq 103624 -INio2Lk= 103625 -5Yab 103626 -ZWt0aXI= 103627 -IGjGsOG7m25n 103628 -2YbYp9mG 103629 -IOCkkQ== 103630 -z4zPhM63 103631 -0L7RgdC6 103632 -5Y2D 103633 -YXPEsW5h 103634 -INi02Yc= 103635 -INC00LXRgA== 103636 -INmF2K7Yqg== 103637 -INit2YI= 103638 -44O+ 103639 -2LPYp9mG 103640 -IGN1bmc= 103641 -0LrQvtGA0LjRgdGC 103642 -z4TOuc66zqw= 103643 -INCy0L7QvdCw 103644 -2KjYpw== 103645 -44GV44KM44Gf 103646 -bm91dA== 103647 -IMSx 103648 -6KeJ 103649 -IMO2xJ9yZW4= 103650 -IOy9lA== 103651 -5bim 103652 -0YHQu9C+0LI= 103653 -IM61z4DOuQ== 103654 -6rCQ 103655 -INmF2LHYqA== 103656 -INmB24zZhNmF 103657 -INC60YDQvtCy 103658 -IOuNsA== 103659 -4KS+4KSj 103660 -IGVsZWt0 103661 -INC90LDRgNC+0LQ= 103662 -24zYr9mH 103663 -57SE 103664 -INC/0YDQvtGE 103665 -z4HOv8+C 103666 -IOOF 103667 -5LiN5piv 103668 -IOCknOCkqA== 103669 -4Lix4Lil 103670 -INi12YjYsdiq 103671 -44Oc 103672 -IOCkl+CkiA== 103673 -xJ9pdGlt 103674 -0YHRjNC60LjRhQ== 103675 -INC70LXQsw== 103676 -INiq2YjZhA== 103677 -IOyatA== 103678 -2LnYsQ== 103679 -IG3DoHU= 103680 -0LPQvtCy 103681 -5rOi 103682 -aW5kZWtp 103683 -7KCB7J24 103684 -4bqlbQ== 103685 -IO2ZlQ== 103686 -INio2KfbjNiv 103687 -4LmM4LiX 103688 -IGtlbmRp 103689 -4Li14Lin 103690 -4Li04LiB4Liy4Lij 103691 -INqp2LHYr9mH 103692 -5be0 103693 -4KSB 103694 -4Lij4Liy4LiK 103695 -4KWN4KS2 103696 -INCU0LvRjw== 103697 -5aWH 103698 -INGD0YHRgtCw0L3QvtCy 103699 -0LnRgtC1 103700 -44KH 103701 -zqzPgQ== 103702 -INCu 103703 -IGx14bqtdA== 103704 -44CJ 103705 -6LSo 103706 -2K/Ypw== 103707 -IGTDvHplbg== 103708 -4Liq4LiZ 103709 -0YDQvtC9 103710 -ZMSxxJ/EsQ== 103711 -4oCZZGE= 103712 -IGZhcmtsxLE= 103713 -0YXQvtCy 103714 -bMOhbg== 103715 -0YfQsNGB 103716 -0YfQuNC9 103717 -IOywuA== 103718 -7LSI 103719 -0YbQuNC/ 103720 -57k= 103721 -6ZaA 103722 -0LbQsA== 103723 -0YDQvtCy0LDQvQ== 103724 -4LiT4Liw 103725 -2YTZitiy2YrYqQ== 103726 -z4fOtc65 103727 -4KWILg== 103728 -0LrRgdC/ 103729 -2KfZiNix 103730 -IG5ndXnDqm4= 103731 -44Gr44KI 103732 -4KWH4KSu 103733 -z4PPhM61 103734 -2KrZiA== 103735 -xI1law== 103736 -0YbRiw== 103737 -IOusvA== 103738 -0Y3Rgg== 103739 -IGthemFu 103740 -2YHYsw== 103741 -ZWhpcg== 103742 -0LLRltGC 103743 -INiv2YjZhA== 103744 -IOuTnA== 103745 -IOCkmuCksg== 103746 -0LXRgdGC0LLQsA== 103747 -zrTOsQ== 103748 -INCx0YPQsg== 103749 -INCd0LU= 103750 -2K3YsQ== 103751 -0L7Qs9GA0LDRhA== 103752 -IHJvemhvZA== 103753 -INCy0LjQutC+0YDQuNGB0YI= 103754 -IHnDqnU= 103755 -zrvOv8+C 103756 -2qnYsw== 103757 -INi02Kg= 103758 -4Li04Lip 103759 -5q+N 103760 -INC00L7RgA== 103761 -IG5naOG7hw== 103762 -IHRyYW5n 103763 -4KWH4KSm 103764 -IHTDrG0= 103765 -0YfQvdC+ 103766 -INin2YXYpw== 103767 -6YGL 103768 -2qnYsQ== 103769 -a8Op 103770 -IHbEm3Q= 103771 -INC90LDRgdGC 103772 -IOax 103773 -IOWbvQ== 103774 -IGdp4bqjbQ== 103775 -2KfYr9mK 103776 -64Kc 103777 -66Gg 103778 -IO+9pA== 103779 -INC00LXQvdGM 103780 -0YbRltGO 103781 -IGjhuqFu 103782 -4bqzbmc= 103783 -zrvOrg== 103784 -ZXllbg== 103785 -5LiU 103786 -5q2m 103787 -INGE0LDQug== 103788 -4LmI4Lit4LiZ 103789 -IM6/zrk= 103790 -2LLZhQ== 103791 -44GX44Gm44GE44KL 103792 -0LvQuNCy0LA= 103793 -4oCV4oCV 103794 -IMO2bA== 103795 -IOCkkw== 103796 -0YHRgtGW 103797 -4LiB4Lij4Lij4Lih 103798 -IHThu6Vj 103799 -IGfDtnLDvG4= 103800 -44GX44G+ 103801 -IOym 103802 -6aas 103803 -INC80L7QttC90LA= 103804 -INqp2YQ= 103805 -INGG0LXQvdGC 103806 -IOyZuA== 103807 -zpg= 103808 -54c= 103809 -IGdlbGVu 103810 -INin2YrZhg== 103811 -INii2Kg= 103812 -IOCkhuCkrw== 103813 -4Lix4LiB4Lip 103814 -0YHQuNC8 103815 -INCx0L7Qu9GM0Yg= 103816 -INC80L0= 103817 -0L7QtNC4 103818 -IMSwbA== 103819 -IOCkhuCksA== 103820 -0LXRgtC1 103821 -0YbQuNGO 103822 -4bqtdQ== 103823 -IHRp4bq/bmc= 103824 -67aB 103825 -5qeY 103826 -INC90LDRiA== 103827 -4Lih4Liy 103828 -4oCZxLFu 103829 -44OD44OX 103830 -2YjYrNmH 103831 -INit2K8= 103832 -w6F2w6E= 103833 -2LHZiNi0 103834 -INC00LXQudGB0YLQsg== 103835 -44Gj44Gm44GE44KL 103836 -z4HOrg== 103837 -IMO8c3Q= 103838 -IHRp4bq/dA== 103839 -YWNhxJ8= 103840 -INCf0L4= 103841 -6Yo= 103842 -66i4 103843 -Y2hvZA== 103844 -INii2YXZiNiy 103845 -44Gf44KB 103846 -IGNodXnDqm4= 103847 -IHV5Z3U= 103848 -0L3RltGB0YI= 103849 -67Q= 103850 -5o6n 103851 -0YPRjtGC0Yw= 103852 -xI1p 103853 -44G5 103854 -4KWC4KSo 103855 -5pep 103856 -44OH44Kj 103857 -6JI= 103858 -INi02K7YtQ== 103859 -INGF0L7Rgg== 103860 -INqp2YbbjNiv 103861 -0LPQuw== 103862 -4Lit4Lit4LiB 103863 -6YCZ 103864 -INiy24zYsQ== 103865 -7ZWt 103866 -IMOWeg== 103867 -5ZGz 103868 -2K3Yr9ip 103869 -IGthxb5k 103870 -INGG0LLQtdGC 103871 -IOe+ 103872 -INC60L7Qtg== 103873 -INCt0YLQvg== 103874 -0Y/RgtC10LvRjA== 103875 -0LvQsNGB0Yw= 103876 -4oCM2LTZiNiv 103877 -zrzOuQ== 103878 -IOay 103879 -IHPDvHJl 103880 -4Lil4Liw 103881 -6YWS 103882 -4Li24LiB4Lip 103883 -zrvOu86s 103884 -55E= 103885 -IOyDiA== 103886 -IOCkuOCkuQ== 103887 -IEjDoA== 103888 -66as6rOg 103889 -2LXYsQ== 103890 -IOaKlQ== 103891 -6aCt 103892 -IGLhu4duaA== 103893 -IOyDneqwgQ== 103894 -IOCkheCkrQ== 103895 -6rO17KeA 103896 -7JQ= 103897 -4budaQ== 103898 -562U 103899 -IGLDoGk= 103900 -0L7QtNGW 103901 -4Liy4LiC 103902 -0L3QuNC60L7Qsg== 103903 -IGTDtm5lbQ== 103904 -4Lin4Lih 103905 -44OG44Kj 103906 -4KS+4KSw4KSj 103907 -0L7Qs9C4 103908 -IGtp4buDbQ== 103909 -0L7RhA== 103910 -5LqI 103911 -5Yaz 103912 -2KfZhNin2Ko= 103913 -IG7hur91 103914 -IGNlc3Q= 103915 -2LLYtA== 103916 -2Y7ZhA== 103917 -INiq2KM= 103918 -IMSR4bqhbw== 103919 -z43OvQ== 103920 -INCy0L3Rgw== 103921 -INis2KfZhQ== 103922 -aXZuw60= 103923 -IOyeiOyKteuLiOuLpA== 103924 -z4o= 103925 -5oSb 103926 -44Ob 103927 -0LzRltC9 103928 -IHTDrW0= 103929 -4bqxbQ== 103930 -6reg 103931 -5LqV 103932 -IHjDonk= 103933 -IOyblA== 103934 -0LXQu9C10L0= 103935 -IOC5guC4lOC4og== 103936 -2KfZhNmH 103937 -IGLhuqV0 103938 -4buTbQ== 103939 -4oCM2q8= 103940 -2YjYsdip 103941 -2KjYp9iq 103942 -IGLDoW4= 103943 -4bqrdQ== 103944 -2KfZhtmI2YY= 103945 -IHrDoWtvbg== 103946 -w6HFvg== 103947 -7LaU 103948 -4LmB4LiB 103949 -44KN44GG 103950 -0YDQvtGC 103951 -55M= 103952 -INCy0L7QvdC4 103953 -IHjDoWM= 103954 -INiv24zar9ix 103955 -z4DOv865 103956 -INC90LXRgdC6 103957 -2LHYs9uM 103958 -IOudvA== 103959 -2KrZhA== 103960 -zrvOrA== 103961 -INGP0LLQu9GP0LXRgtGB0Y8= 103962 -5L6d 103963 -IOWFrA== 103964 -l2k= 103965 -IO2KuQ== 103966 -2YPZiNmG 103967 -4bqvcA== 103968 -2KzZhdmI2Lk= 103969 -z4bOv8+B 103970 -0LXQu9C+ 103971 -IGfDvHZlbg== 103972 -INC80LDQuQ== 103973 -INGB0L7Qtw== 103974 -4LiB4Lij4Liw 103975 -INin2LPZhNin2YU= 103976 -INGJ0LU= 103977 -IHPhu5FuZw== 103978 -4KWN4KSs 103979 -2qnYp9ix 103980 -IHRodeG6rXQ= 103981 -IG7DrQ== 103982 -56ys5LiA 103983 -6KaW 103984 -4LmA4LiB4Lih 103985 -2KfZitip 103986 -IM6I 103987 -44K2 103988 -INmF2YjZgti5 103989 -IOWS 103990 -6KGT 103991 -INCe0LQ= 103992 -IOS4iQ== 103993 -bGVyaW5kZQ== 103994 -INGB0LLQvtGX 103995 -4KWA4KSP 103996 -IHRoxrDGoW5n 103997 -z4PPhM6/ 103998 -INi62YrYsQ== 103999 -INm+2LE= 104000 -INGB0LXQsdC1 104001 -INCy0Lo= 104002 -IGtoYWk= 104003 -44KA 104004 -INmG2LjYsQ== 104005 -INC00L7QutGD0Lw= 104006 -4LmH4Lia 104007 -IO2VnOq1rQ== 104008 -772J 104009 -5bel56iL 104010 -INmI2YQ= 104011 -2K3Zig== 104012 -INC/0LvQsA== 104013 -IMSwc3RhbmJ1bA== 104014 -4oCZZGU= 104015 -0LDQu9GB0Y8= 104016 -INii2YbZh9in 104017 -INin2Yc= 104018 -IOq0gOumrA== 104019 -IGFuaA== 104020 -xaHDrW0= 104021 -bGFybGE= 104022 -77yd 104023 -bm9zdMOt 104024 -0YHRgtCy0LU= 104025 -24zZgQ== 104026 -INqv2LHYrw== 104027 -44KM44KL 104028 -IHbhu7E= 104029 -xJtuw60= 104030 -IGfDtnJldg== 104031 -IHnEsWzEsW5kYQ== 104032 -IGzhu6Np 104033 -IGFubGFt 104034 -INC/0YDQvtCy0L7QtA== 104035 -0YbRjg== 104036 -IOWJ 104037 -IOunjg== 104038 -0YDQsNGB 104039 -IMW9 104040 -2qnYp9mG 104041 -0Jk= 104042 -44Gj44Go 104043 -2qnZhA== 104044 -4Liy4Lii4LiZ 104045 -2LnYp9mE 104046 -IGvDvQ== 104047 -INC80LDRgtC10YDQuA== 104048 -6ruY 104049 -xLFsbWFzxLE= 104050 -zrzOrc69 104051 -INmG2YXbjA== 104052 -IGN14buZYw== 104053 -IM60zrXOvQ== 104054 -5bmy 104055 -77y/77y/77y/77y/ 104056 -4KWA4KSf 104057 -IMOnxLFrYXI= 104058 -IGtvbnXFnw== 104059 -0LjRgtC10LvRjNC90L4= 104060 -bGFudMSx 104061 -4LmE4Lil 104062 -5b6L 104063 -IO2UvA== 104064 -7Jm4 104065 -IHPDoW5n 104066 -6YGU 104067 -0L7QttC0 104068 -INii2K7YsQ== 104069 -aWxlY2U= 104070 -4KWI4KSo 104071 -IGplZG4= 104072 -INGB0L/QtdGG0Lg= 104073 -tJ0= 104074 -INqY 104075 -IOOAggo= 104076 -6IGM 104077 -INmG24w= 104078 -0YLQvtGA0LA= 104079 -zrvOuQ== 104080 -INmI2Kg= 104081 -acWfaW0= 104082 -57u0 104083 -44CAaQ== 104084 -IG11YQ== 104085 -IGppxb4= 104086 -6LaK 104087 -44KS6KaL 104088 -IG7hu5lp 104089 -4KWN4KSX 104090 -56iu 104091 -IOOAgOOAgOOAgA== 104092 -4LmD4Lir4Lih 104093 -IM6G 104094 -2YbYr9uM 104095 -INGB0Yc= 104096 -IGzhu4c= 104097 -bHVi 104098 -0LXRgNGC 104099 -INin2LfZhA== 104100 -INGB0LXRgNC10LQ= 104101 -IOmB 104102 -INC30LDQuw== 104103 -2YbbjNmG 104104 -55+l6YGT 104105 -2KLZhg== 104106 -INC60LDQvw== 104107 -IOC5hOC4oQ== 104108 -xa92b2Q= 104109 -INm+2KfbjA== 104110 -0YLRgNC4 104111 -IGlodA== 104112 -4LmK 104113 -INCy0YHRlg== 104114 -IHRoYXk= 104115 -5Ya1 104116 -INi52YbZiNin2YY= 104117 -IM6l 104118 -4Lid 104119 -zrXPhM6xzrk= 104120 -aXlvcmR1 104121 -77yM6ICM 104122 -55qE5Lq6 104123 -IOCkuOCkrQ== 104124 -4LmJ4Lit4Lii 104125 -zrnOus6/ 104126 -44KT44Gn 104127 -7KGx 104128 -2YbYrNmE2YrYstmK2Kk= 104129 -IMW+w6Fk 104130 -0YDQsNCy0Lg= 104131 -zrPOsw== 104132 -5rWL 104133 -0L7RhtGW 104134 -44CA44CAIOOAgA== 104135 -IOCkpOCksOCkuQ== 104136 -IOuG 104137 -4KWA4KSa 104138 -4LmI4Lih 104139 -IGfhu5Nt 104140 -IGtp4buHbg== 104141 -6Lef 104142 -zqY= 104143 -ZXNpbmlu 104144 -6aU= 104145 -6auU 104146 -0L7Rh9C90L4= 104147 -4KSw4KSj 104148 -5pil 104149 -57aT 104150 -INio2KfYsQ== 104151 -6re8 104152 -6ZmF 104153 -INiz2Yo= 104154 -0YHRg9GC 104155 -7LWc 104156 -5bGF 104157 -IMSNZXNr 104158 -zpHOnQ== 104159 -IGRp4buHbg== 104160 -IM61zq8= 104161 -4LiH4LiX 104162 -44Kp 104163 -IHbhu7Fj 104164 -0LLQsNCy 104165 -dMSxxJ/EsQ== 104166 -IOuqhQ== 104167 -zrfOvQ== 104168 -0LLQuNGC 104169 -INij2YM= 104170 -INC/0YDQvtC/ 104171 -cmFr 104172 -0YDQsNGC0Lg= 104173 -IMSRw6FuaA== 104174 -0YDQtdC/ 104175 -6rSR 104176 -0LXRhtGM 104177 -IOCkrOCkpA== 104178 -IOWMlw== 104179 -IHPDoXQ= 104180 -bGVkaQ== 104181 -7KCB7Jy866Gc 104182 -xa9q 104183 -27DbsA== 104184 -IG5hc8SxbA== 104185 -INmI2LM= 104186 -IM61zr4= 104187 -0LLRiw== 104188 -572X 104189 -2KfYsduM2K4= 104190 -4Lib4Lil 104191 -zq/Oug== 104192 -IOq4iA== 104193 -5Yeg 104194 -5by3 104195 -6L+U 104196 -IG5o4buP 104197 -5b6A 104198 -INC00LDQttC1 104199 -IMOnZXY= 104200 -0LrRlg== 104201 -INij2YU= 104202 -4Li14Liq 104203 -4Liq4Liy4Lih4Liy4Lij4LiW 104204 -INCE 104205 -0YXQvtC00LjRgg== 104206 -65Y= 104207 -IHRydXnhu4Fu 104208 -INGB0YLQsNC9 104209 -65Ok7J2A 104210 -2KfZhNiq 104211 -4KS84KWH 104212 -IOCkheCkrA== 104213 -5pW4 104214 -INC00ZbRjw== 104215 -INmF2KrYsQ== 104216 -IOu4 104217 -776N 104218 -IOqzvA== 104219 -INiy24w= 104220 -65+8 104221 -INCf0LXRgA== 104222 -IHPEsWs= 104223 -0L3QvtGB0YLRjNGO 104224 -IGVkZW4= 104225 -2KfYr9ix 104226 -44Q= 104227 -INC70LXRhw== 104228 -INmH2LDZhw== 104229 -2LbZiNi5 104230 -IOyVhOuLiA== 104231 -aXJrZXQ= 104232 -INin2q/YsQ== 104233 -INGF0L7Rhw== 104234 -INCx0LDQvQ== 104235 -7ZSM 104236 -5oCO5LmI 104237 -6Js= 104238 -IOCkrOCkmg== 104239 -INqp2KrYp9io 104240 -54mM 104241 -INC00LLQsA== 104242 -2KzYsQ== 104243 -INC/0YDQvtGB0YLQvg== 104244 -IOCkhuCktQ== 104245 -IG3hu6lj 104246 -jbw= 104247 -IGrDrQ== 104248 -7Y6Y 104249 -IHRhbWFt 104250 -5Yib 104251 -4LiS 104252 -0L/QtdGH 104253 -4KWL4KS4 104254 -INGB0LXQvA== 104255 -IHTGsMahbmc= 104256 -5LiB 104257 -ibQ= 104258 -INGA0L7RgQ== 104259 -INC80LDRlA== 104260 -5q2M 104261 -INiv2KfZhtmE2YjYrw== 104262 -IExvw6Bp 104263 -IGVkaWxt 104264 -IGtvbnU= 104265 -INin2YTZhdix 104266 -IHVsYcWf 104267 -IHnDvGtzZWs= 104268 -zr/OuQ== 104269 -2Y7Zhg== 104270 -IGLEmw== 104271 -44K344On44Oz 104272 -77+j77+j77+j77+j 104273 -IGfDvMOn 104274 -INin2YjZhA== 104275 -INC80LA= 104276 -INio2K7YtA== 104277 -4KS+4KSW 104278 -INCy0LjRgQ== 104279 -xb5lbsOt 104280 -IHpwxa9zb2I= 104281 -em5hbQ== 104282 -INix2YjbjA== 104283 -5Yud 104284 -4KWkCg== 104285 -2YTZgg== 104286 -INC20LjQtw== 104287 -0YDRltCy 104288 -INGD0L/RgNCw0LI= 104289 -IHBo4buR 104290 -aWNyb3M= 104291 -IOC5geC4lQ== 104292 -IOuwlQ== 104293 -2YjYp9iq 104294 -77yM5LiA 104295 -0LDQvdGB 104296 -57Sa 104297 -4Lii4LiZ 104298 -4LmB4LiC 104299 -IGdpw6Fv 104300 -5LqM5LqM 104301 -IMSwcw== 104302 -7Iq5 104303 -IG9sYWNhaw== 104304 -IEPDoWM= 104305 -INGA0YPQsQ== 104306 -4bq5cA== 104307 -xJ9pbml6 104308 -44Gq44Gp 104309 -INC80L7RgA== 104310 -INGB0LTQtdC7 104311 -2YTZhdin2YY= 104312 -bsOpbQ== 104313 -5bCN 104314 -IGRuZQ== 104315 -7Lac7J6l 104316 -2LnYqA== 104317 -Ojo6Ojo6Og== 104318 -zpI= 104319 -ZWtldA== 104320 -INGA0LXRiA== 104321 -6Iis 104322 -IO2ZlA== 104323 -2LXYrw== 104324 -INC80LDRgA== 104325 -0Y/Qtg== 104326 -2LTYp9ix 104327 -44Gy 104328 -INin2YTZig== 104329 -2Y0= 104330 -4KSC4KSc 104331 -0LzRiw== 104332 -IGthcmFy 104333 -2YTbjNiz24w= 104334 -4Liy4LiT 104335 -576k 104336 -IG9sbWFzxLE= 104337 -IGhhesSxcg== 104338 -zrPPgc6xz4Y= 104339 -r3U= 104340 -0LLQvtC7 104341 -INGB0YLQsNGA 104342 -b3ZhbGE= 104343 -INCy0L7Qt9C80L7Qtg== 104344 -INC00LDQsg== 104345 -6aKo 104346 -2LHYpw== 104347 -INC00L7Qv9C+0Lw= 104348 -6rKD 104349 -IOyYrA== 104350 -IOWO 104351 -IOuquw== 104352 -dcOn 104353 -7Zo= 104354 -bMO8aw== 104355 -5Lit5b+D 104356 -IOCkpuCksA== 104357 -IOKXhg== 104358 -IHRheQ== 104359 -INio2LPbjA== 104360 -IM+Dz4TOsQ== 104361 -INmF2K4= 104362 -0Y/RiQ== 104363 -5beu 104364 -4LiJ 104365 -66C5 104366 -4LmD4LiZ4LiB4Liy4Lij 104367 -INmH2YY= 104368 -44G2 104369 -0LvRltC0 104370 -5Y2w 104371 -IHNhbw== 104372 -xZlhZA== 104373 -66as64qU 104374 -0YHQu9C10LQ= 104375 -5ZSu 104376 -IHw6 104377 -5pWZ6IKy 104378 -INC80L7Quw== 104379 -INmH2Yo= 104380 -64E= 104381 -INC60YPQu9GM 104382 -J25pbg== 104383 -INiu2LE= 104384 -IGdlbmVs 104385 -IHThu60= 104386 -IGt1cnVs 104387 -0LXQvdGC0Lg= 104388 -4KWL4KSc4KSo 104389 -6L+Z5qC3 104390 -INC80ZbQtg== 104391 -IG5naGnhu4dt 104392 -IM+Azr/Ouw== 104393 -5oub 104394 -IOCkl+Ckjw== 104395 -4bqneQ== 104396 -IGPhuqNt 104397 -57Sw 104398 -csSxY2E= 104399 -INi52YTbjA== 104400 -4Li04LmJ 104401 -aHVy 104402 -IGNoxrBh 104403 -0YPRlNGC0YzRgdGP 104404 -44Gp44GG 104405 -0YPQuw== 104406 -4Li04Lij 104407 -IOaciQ== 104408 -5Ly8 104409 -0YTQtdGA 104410 -0Y3RgtC+0LzRgw== 104411 -5peF 104412 -INmF2YjYrA== 104413 -IOuzuA== 104414 -IGdp4bud 104415 -IGtp4bq/bg== 104416 -4LmI4Lin4Lii 104417 -IGTDvG55 104418 -INiy2YU= 104419 -0L7QstGW 104420 -INGG0YzQvtCz0L4= 104421 -4Li04Lia 104422 -IOyGkA== 104423 -6JCl 104424 -INGA0ZbQtw== 104425 -IGjhu5c= 104426 -0YDRltCx 104427 -IOOAgCDjgIAg44CAIOOAgCDjgIA= 104428 -7Jy866mw 104429 -5LqG5LiA 104430 -INmC2KjZhA== 104431 -6b6Z 104432 -INqv2LA= 104433 -INmC2K8= 104434 -44Gq44GL44Gj44Gf 104435 -IOC5gOC4ow== 104436 -5biM 104437 -INGB0YU= 104438 -INCz0YDQvtC8 104439 -5Zui 104440 -IOynkQ== 104441 -INC70YPRhw== 104442 -5YW1 104443 -INCe0YI= 104444 -IG114buRbg== 104445 -44GY44KD 104446 -b3Zuw60= 104447 -66m07ISc 104448 -67OA 104449 -INC90LXQsQ== 104450 -0YHQuNC4 104451 -2YbZhQ== 104452 -xJ9pbg== 104453 -IHRvaG8= 104454 -ZW5peg== 104455 -2KjYp9i0 104456 -INGB0LvRg9C2 104457 -IGLhu59p 104458 -IMO8emVyZQ== 104459 -IHNhZGVjZQ== 104460 -IM+AzrHPgQ== 104461 -wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA= 104462 -6IyD 104463 -z4TOuc66z4w= 104464 -IOS6jA== 104465 -44KI44GG44Gr 104466 -6J4= 104467 -44Gu44Gv 104468 -INGD0LrRgNCw0ZfQvQ== 104469 -IGLhuq90 104470 -0LLQsNC9 104471 -INGB0YLRgNCw 104472 -6KGA 104473 -bnV0w60= 104474 -b2t0 104475 -4Lij4LiH4LmA4Lij 104476 -INi12YE= 104477 -5YWa 104478 -z4TOrw== 104479 -77yB44CNCgo= 104480 -INGC0LXQvNC/ 104481 -6aGM 104482 -IHNsdcW+ 104483 -0YPQutC+0LI= 104484 -IG5naMSpYQ== 104485 -55Sy 104486 -IGThu4U= 104487 -0L7QstC4 104488 -z4TPhQ== 104489 -2LHbjNqp 104490 -IEFuaA== 104491 -INCy0YHQtdCz0L4= 104492 -4oCM2qnZhg== 104493 -dGXFmcOt 104494 -IG3hu6Vj 104495 -2YfZhtqv 104496 -INCf0L7RgQ== 104497 -2pjZhw== 104498 -INin2YTYug== 104499 -5p2+ 104500 -eXNs 104501 -IHlhcMSxbGFu 104502 -54i2 104503 -IG3huqFuaA== 104504 -2LHYp9mH 104505 -4LiU4LiH 104506 -b8SN 104507 -66eQ 104508 -5aCC 104509 -0LzQsNGC 104510 -IGXFnw== 104511 -2YjZhdin2Ko= 104512 -INiz2KfYrtiq 104513 -5Zug5Li6 104514 -INC/0YDQuNC5 104515 -xLFsbcSxxZ8= 104516 -6aSo 104517 -4Li44LiH 104518 -IOuB 104519 -4LiV4Liy4Lih 104520 -5ZCJ 104521 -zrzOrg== 104522 -IOacrA== 104523 -IHrDoWtsYWQ= 104524 -2KrYrQ== 104525 -6L68 104526 -INCy0ZbQuQ== 104527 -INmF2YbYtw== 104528 -IHRvw6Fu 104529 -0LrQsNGA 104530 -INCX0LA= 104531 -INC/0YDQuNC80LXQvQ== 104532 -44KL44Go 104533 -4Lix4LiX 104534 -24zYsw== 104535 -INin2YbYrNin2YU= 104536 -INi52YTZig== 104537 -4KS84KS/ 104538 -ZW7DvWNo 104539 -IExpw6pu 104540 -INC/0LA= 104541 -6ZqK 104542 -IG1vaG91 104543 -INC60ZbQu9GM 104544 -IM6kzr8= 104545 -2KfZhNio 104546 -zq3OvQ== 104547 -IG5hYsOt 104548 -w6dp 104549 -bGVyZGVu 104550 -IHRoYW5o 104551 -IGLDvHTDvG4= 104552 -IOWf 104553 -7Lig 104554 -IHphdA== 104555 -2YrZiA== 104556 -IM68zrnOsQ== 104557 -dXnhur90 104558 -0ZHQvQ== 104559 -5YiS 104560 -0LvQuNCy0L4= 104561 -4LmI4Lit4LiH 104562 -5LuW5Lus 104563 -INCx0LDQsw== 104564 -4KS/4KSt 104565 -INGC0LDQvA== 104566 -INC/0YDQtdC/ 104567 -4Li04LiK 104568 -4oCZ0Y/Qtw== 104569 -IFBow6Ju 104570 -0LbQtdC9 104571 -4KWI4KSV 104572 -INGB0LvRg9GH0LDQtQ== 104573 -IC46 104574 -5a2m5qCh 104575 -xLBO 104576 -576p 104577 -INGB0YLQvg== 104578 -IOCkueCksA== 104579 -z4XOvQ== 104580 -IHhlbQ== 104581 -INCx0YPRgtC4 104582 -0YHQuNGC 104583 -56qB 104584 -4KWN4KSb 104585 -5ZGi 104586 -77yM5Lmf 104587 -ZW7Emw== 104588 -IM66zqw= 104589 -aXlvcnVt 104590 -INqv2YHYqg== 104591 -4peP4peP4peP4peP 104592 -4Lix4Lih 104593 -INCa0L7QvQ== 104594 -0L3QvtGI 104595 -0L3QuNGG0YI= 104596 -w7x6ZWw= 104597 -c8Ot 104598 -5bir 104599 -2LXZiNmE 104600 -54Ot 104601 -IMSR4bun 104602 -44Ku 104603 -5pWF 104604 -IMWha29s 104605 -0YfQtdC9 104606 -4LmA4Lii 104607 -4LiZ4LiZ 104608 -2YDZgNmA2YA= 104609 -IMO8w6c= 104610 -5b+1 104611 -44Oq44Ki 104612 -IO2ZmA== 104613 -IOmHkQ== 104614 -54+t 104615 -INGB0LrQu9Cw0LQ= 104616 -0Y/QvNC4 104617 -w7xm 104618 -IGjDow== 104619 -IMSQ4bqhaQ== 104620 -woI= 104621 -5YSq 104622 -IGJ1bHVuYW4= 104623 -INin2YTZhdit 104624 -5oiP 104625 -IOip 104626 -INC90L7RgNC8 104627 -IGNodeG6qW4= 104628 -INC30LDRgdGC 104629 -IHbDrWNl 104630 -0JY= 104631 -IOCkhuCkpw== 104632 -IMSNYXM= 104633 -INCx0L7RgA== 104634 -z4HOuc6x 104635 -INmF2KfZhw== 104636 -IO2F 104637 -xZllbA== 104638 -0Y/QstC4 104639 -z4TOtc+C 104640 -aW7Emw== 104641 -INC/0LXRgNC1 104642 -6ZWH 104643 -4KWN4KSe 104644 -IOmY 104645 -4LmI4Liy4Lin 104646 -4Lij4Lij 104647 -INiz2Yc= 104648 -0LLQsNC70Lg= 104649 -55WZ 104650 -INGE0YPQvdC6 104651 -IO2WiQ== 104652 -2YHZhw== 104653 -55Sf5rS7 104654 -6IGe 104655 -b2t1ZA== 104656 -IOyCtA== 104657 -xLF6xLE= 104658 -INC/0L7Qu9GD 104659 -77yM5L2g 104660 -2LTYp9mG 104661 -5rG6 104662 -0LHRgNGP 104663 -0L7RgdGD0LTQsNGA 104664 -IG95dW4= 104665 -0LDQvdC40Lg= 104666 -IHByxa8= 104667 -IG7DoXY= 104668 -INC80LXQvdGP 104669 -IOyemA== 104670 -IMSwbg== 104671 -IHRow61jaA== 104672 -IMSR4bqjbQ== 104673 -5ZyS 104674 -INCy0LbQtQ== 104675 -IGxvw6Bp 104676 -INCe0L0= 104677 -0LzQtdGB0YI= 104678 -IM6+ 104679 -44CF 104680 -IGNoaeG6vw== 104681 -0YfRlg== 104682 -IO2RnA== 104683 -64us 104684 -IOuLrA== 104685 -4KWA4KSh 104686 -0YDQsNC70Yw= 104687 -ZGlr 104688 -IO2GoA== 104689 -65+J 104690 -INi12YY= 104691 -IHN0ZWo= 104692 -INCw0LrRgtC40LI= 104693 -IOmm 104694 -IOC5hOC4lA== 104695 -5oqA5pyv 104696 -IHByb3N0xZllZA== 104697 -5a6z 104698 -44GQ 104699 -IG9sdcWfdHVy 104700 -ZWxvcA== 104701 -44Gh44KD 104702 -6YOO 104703 -2LbYpw== 104704 -INiu2Lc= 104705 -67CV 104706 -0LXRgdGP 104707 -INmH24w= 104708 -0L3QsNC0 104709 -IG5nw6BuaA== 104710 -0YDRg9GI 104711 -44GE44GE 104712 -IMO8csO8bg== 104713 -4Lit4LiV 104714 -4KWL4KSq 104715 -IHNhecSx 104716 -4KWA4KS4 104717 -0LXQvdC40YU= 104718 -INGB0LjQvA== 104719 -4KWA4KSm 104720 -5aSJ 104721 -4LmI4Lin4Lih 104722 -IOC5gOC4gg== 104723 -5bey57uP 104724 -0LDRgtC+ 104725 -INGA0LDQudC+0L0= 104726 -7YOd 104727 -INGC0YDQsA== 104728 -bGF5YW4= 104729 -4bq/cA== 104730 -4KS+4KSf 104731 -2K7Yp9io 104732 -5Lq65rCR 104733 -5a6d 104734 -6IY= 104735 -6KqN 104736 -bmHEjQ== 104737 -IO6g 104738 -INCa0Lg= 104739 -IGJhxZ9rYQ== 104740 -Y8Wv 104741 -2LbYuQ== 104742 -6Iiq 104743 -4Li14Lih 104744 -0YvQvNC4 104745 -zpnOow== 104746 -INi02LHaqdiq 104747 -4Lii4Lin 104748 -IG11c8Ot 104749 -INC90LDQuw== 104750 -4Li14LiX 104751 -IMOhcA== 104752 -4Lij4Liy4Lii 104753 -5rK5 104754 -bGVtZQ== 104755 -IOCkruCkqA== 104756 -4LmE4Lif 104757 -0LDRgtC40LI= 104758 -uI8= 104759 -6K2w 104760 -z4PPhM6x 104761 -7Zal 104762 -0LXRgtGD 104763 -INGB0LLRj9C3 104764 -0LXQtNC10YDQsA== 104765 -INiu2KfYsdis 104766 -4Liy4Lip 104767 -4oCM2b4= 104768 -0ZbQsw== 104769 -6aGe 104770 -IGto4bqj 104771 -INGB0L/RgNCw0LI= 104772 -6KGX 104773 -44OV44Kh 104774 -INC80LXQttC00YM= 104775 -0YPQu9C4 104776 -INio2LLYsQ== 104777 -0YbQtdC9 104778 -IGVrb25vbQ== 104779 -2K/Zhg== 104780 -2KfZhduM 104781 -4Liy4Liq4LiV4Lij 104782 -IG7Em2tvbA== 104783 -Z8O8bg== 104784 -0LfQuA== 104785 -IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg 104786 -56a7 104787 -IHRyxrDhu59uZw== 104788 -j2k= 104789 -7Y64 104790 -INGA0LXQsQ== 104791 -5bqV 104792 -INiq2KfYsduM2K4= 104793 -0L3QuNC80LA= 104794 -IHRow6Ju 104795 -0LDRgtC10LvRjNC90L4= 104796 -INin2YTYsNmK 104797 -2YjZhtuM 104798 -IOmD 104799 -IGLDrG5o 104800 -zrnOus6uz4I= 104801 -4Lie4Lil 104802 -2KrZhdin2Lk= 104803 -IFByYWhh 104804 -INGB0YLQsNCy 104805 -2K/Zitiv 104806 -IGdp4buvYQ== 104807 -INC/0YDQvtCy0LXQtA== 104808 -wqBr 104809 -2YbYr9qv24w= 104810 -0YbQuNC5 104811 -55I= 104812 -INin2YTYo9mF 104813 -IOi0 104814 -2KXZhtis2YTZitiy2YrYqQ== 104815 -IOyeiOyXiOuLpA== 104816 -57eo 104817 -4Lix4LiZ4LiY 104818 -INGA0L7QutGW0LI= 104819 -IGPDoW8= 104820 -IGtow7M= 104821 -INmG2YjYuQ== 104822 -2LPZhA== 104823 -INGD0YHQu9C+0LI= 104824 -IGPhu6l1 104825 -0L7QstC+0LPQvg== 104826 -4KS/4KSX 104827 -lOuLpA== 104828 -5p2O 104829 -IGLDtmxn 104830 -IG5ndQ== 104831 -IGjhu691 104832 -0L3QuNC4 104833 -7KCI 104834 -INC/0YDQvtC8 104835 -5Y+M 104836 -IGTGsOG7m2k= 104837 -0K4= 104838 -2YrYtA== 104839 -5rip 104840 -64+F 104841 -INC30LzRlg== 104842 -zrjOt866zrU= 104843 -IGJhxJ9sxLE= 104844 -IMO8emVyaW5kZQ== 104845 -INiq2Lo= 104846 -INC/0YDQvtCz0YDQsA== 104847 -acW+ 104848 -IOel 104849 -IHlhcmTEsW0= 104850 -woDCgA== 104851 -INGD0LI= 104852 -IHLFrw== 104853 -IGNoaeG6v24= 104854 -zr3Ov8+C 104855 -44Go44Gq 104856 -2KfZhtiq 104857 -6LC3 104858 -w61zaw== 104859 -aXNpbmRl 104860 -INC00L7Qsw== 104861 -6L+9 104862 -INC/0YDQvtGC0LjQsg== 104863 -z4HOv8+F 104864 -44Gu44GL 104865 -IGJhesSx 104866 -xLFyYWs= 104867 -4KWH4KS3 104868 -INmF2LTYp9ix 104869 -IOyWkQ== 104870 -INC90LXQtw== 104871 -INiw2YTZgw== 104872 -6Kq/ 104873 -5YKZ 104874 -INGC0YDQsNC9 104875 -IM+AzrHPgc6x 104876 -24zZhdiq 104877 -IHRp4bq/bg== 104878 -INmH2YXZhw== 104879 -ZWZvbg== 104880 -wrsuCgo= 104881 -INmG2K8= 104882 -2KzZhA== 104883 -INiv2KfYr9mH 104884 -INCy0LXQtA== 104885 -IHPEsW4= 104886 -INGB0LLRltGC 104887 -ZWxlcmlu 104888 -4oio 104889 -IHnDvHI= 104890 -0LTQsNC9 104891 -INCe0YE= 104892 -IGjhuqFuZw== 104893 -6K64 104894 -z4PPhM63 104895 -dXnhur9u 104896 -INC90LDQsQ== 104897 -INC+0YU= 104898 -z4PPiQ== 104899 -IGJ5bHk= 104900 -0YHQutC40YU= 104901 -bGFtYWs= 104902 -0LjRgtC+0YA= 104903 -IHlhdMSxcg== 104904 -INC/0YDQvtC40LfQstC+0LQ= 104905 -INis2YXYuQ== 104906 -xaA= 104907 -5o+Q5L6b 104908 -IHBydm7DrQ== 104909 -IM6xz4A= 104910 -7Zmp 104911 -INC/0YDQsNC60YLQuA== 104912 -bGVyaW5kZW4= 104913 -INC90LXQvtCx0YXQvtC00LjQvNC+ 104914 -5bq3 104915 -2Y7Ypw== 104916 -INiz2YY= 104917 -xLBM 104918 -IOq0kQ== 104919 -IFDFmQ== 104920 -554= 104921 -INGC0LXQvNC/0LXRgNCw0YLRgw== 104922 -IGthYnVs 104923 -IGJ1ZG91 104924 -0YbRltC+0L3QsNC70Yw= 104925 -772c 104926 -IMOnb2N1aw== 104927 -INGC0ZbQu9GM0LrQuA== 104928 -Ynl0 104929 -44Ok 104930 -INGB0YLQsNGC 104931 -IOadsQ== 104932 -bGXFvml0 104933 -2KfYs9i32Kk= 104934 -4Li44Lij 104935 -acOqbQ== 104936 -INC60YPQu9GM0YLRgw== 104937 -INC/0L7QvQ== 104938 -xKluaA== 104939 -5Zac 104940 -0L3QtdCy 104941 -0ZTQvQ== 104942 -INGB0L7QvtGC 104943 -650= 104944 -54i+ 104945 -IHR14buVaQ== 104946 -a2FuxLE= 104947 -4Liq4Liz4Lir4Lij 104948 -2KfYudiq 104949 -44CA44CA44CA44CA44CA44CA44CA44CA44CA 104950 -0LTQtdGA0LY= 104951 -INC+0LHQu9Cw0YHRgtC4 104952 -IHbhu6th 104953 -INmF2YU= 104954 -4LiB4Liz 104955 -4LmB4Lih 104956 -aXZlcnNpdA== 104957 -4LmB4Liq 104958 -5qyn 104959 -bGFuYW4= 104960 -2YrZhtip 104961 -2LPYqQ== 104962 -INC70Y7QtNC10Lk= 104963 -4Lij4Lij4Lih 104964 -IOyxhA== 104965 -IOWkqQ== 104966 -0LXQvdC90YvRhQ== 104967 -4LmB4Lir 104968 -IHNwcsOhdg== 104969 -6K2m 104970 -77yc 104971 -4Lix4LiS 104972 -aWxlY2Vr 104973 -IOaf 104974 -IOiLsQ== 104975 -INGF0L7RgNC+0Yg= 104976 -66CH 104977 -27LbsNuw 104978 -5oqk 104979 -IGzDow== 104980 -xZnDrXplbsOt 104981 -INiq2YjZhNuM2K8= 104982 -6Zqb 104983 -44KM44Gw 104984 -w6HFoQ== 104985 -2KfYsdmK2K4= 104986 -5pS7 104987 -IGtob+G6o25n 104988 -6ZmN 104989 -0L7QstCw0L0= 104990 -IGfDonk= 104991 -4oCZbsSxbg== 104992 -2KPZhg== 104993 -bWnFn3Rpcg== 104994 -IHPhu6lj 104995 -0LrRg9GB 104996 -IMO8emVyaW5l 104997 -xJ/DvA== 104998 -2KfYqNix 104999 -77yM5bCx 105000 -zKM= 105001 -IOuPjA== 105002 -IHRy4buxYw== 105003 -5pS25b2V 105004 -5om/ 105005 -IE7hu5lp 105006 -IOeZvg== 105007 -0YjRjA== 105008 -2KzYqQ== 105009 -67Kg 105010 -4KSJ 105011 -4LiP 105012 -IMO8bGs= 105013 -INmH2LPYqtmG2K8= 105014 -4Lix4Lia4LiB4Liy4Lij 105015 -INGP0LrQsA== 105016 -444= 105017 -INCv0Lo= 105018 -INCz0LTQtQ== 105019 -dGl2 105020 -44CI 105021 -0LvRjtGH0LA= 105022 -4KS+4KWkCg== 105023 -INmF2KfZhg== 105024 -IGRsb3U= 105025 -IOODlQ== 105026 -4KSb 105027 -IHBo4bulYw== 105028 -YWthdA== 105029 -0Kw= 105030 -YXPEsW7EsQ== 105031 -IOaKleeovw== 105032 -0YDQtdCy 105033 -IHZ5dA== 105034 -IHptxJs= 105035 -z4TPiQ== 105036 -6Kw= 105037 -INGD0Lw= 105038 -IHV6dW4= 105039 -IHByb3Rp 105040 -INGB0L7RgdGC0L7Rjw== 105041 -4Lix4LiS4LiZ 105042 -YXRpaw== 105043 -IOC4oA== 105044 -IOCkhuCkpg== 105045 -bGFyxLFuZGFu 105046 -5oCl 105047 -44O844Kv 105048 -INmE2YTZhQ== 105049 -2YHYqtmH 105050 -Ljou 105051 -w7zDp8O8aw== 105052 -0L7Qu9C10LLQsA== 105053 -4LmMCg== 105054 -INC/0LXRgNC10LI= 105055 -INmG2LPYqA== 105056 -0LXQu9C10L3QvdGP 105057 -J8Sxbg== 105058 -zr3PiQ== 105059 -6KGj 105060 -INiv2Yo= 105061 -5Y2H 105062 -IGJlbGlydA== 105063 -IC86 105064 -6JGJ 105065 -IHZ5aA== 105066 -55qE5LiA 105067 -6IOM 105068 -IOyXtA== 105069 -0L7Qu9Cw 105070 -INiq2Kg= 105071 -w6FjaQ== 105072 -4KS+4KSJ 105073 -4LiO 105074 -55Si 105075 -4KWI4KSy 105076 -INmC2Lc= 105077 -64SI 105078 -4bqvbQ== 105079 -0YDRj9C0 105080 -IHBo4bul 105081 -INmI2KfZgti5 105082 -IG1lcms= 105083 -IGNo4buRbmc= 105084 -5a+f 105085 -2KfYqNi3 105086 -dXN1bmRh 105087 -INC+0LTQvdCw 105088 -xb5lbA== 105089 -INGB0YPQvA== 105090 -IHBow7k= 105091 -IM62 105092 -IHphdg== 105093 -ZWRu 105094 -IHBvdMWZZWI= 105095 -INqp2YbZhtiv 105096 -INGA0LDQt9Cy 105097 -v6A= 105098 -INin2YTYsg== 105099 -IG3Em2w= 105100 -INGB0YLQsNC90L7Qsg== 105101 -INiv2LHbjA== 105102 -IHTGsOG7o25n 105103 -44G1 105104 -INC00LLQuA== 105105 -0YzRjw== 105106 -6KO9 105107 -INiq2YQ= 105108 -xaHFpQ== 105109 -44Gq44KJ 105110 -IOCkleCkiA== 105111 -xaFp 105112 -4oCM2KfYs9iq 105113 -IGvhu7k= 105114 -66ed 105115 -IOCkhuCknA== 105116 -44O0 105117 -IGLhu48= 105118 -ZHXEn3U= 105119 -IOav 105120 -0L/QtdGA 105121 -2KfZhNmK2Kk= 105122 -5omA5Lul 105123 -5YWw 105124 -IG9yYW4= 105125 -IO2e 105126 -z4POr86x 105127 -IHBo4bun 105128 -INCx0YvQu9Cw 105129 -0YfQuNCy0LA= 105130 -IOqwhA== 105131 -0L7Qu9GW 105132 -2YPYqg== 105133 -5YWn 105134 -4KWC4KSf 105135 -IOuW 105136 -INmE2Yc= 105137 -66CI7J20 105138 -IGjEsXo= 105139 -5aSP 105140 -IOaKleeov+aXpQ== 105141 -6Zq+ 105142 -k7A= 105143 -0LPQu9GP0LQ= 105144 -w6xu 105145 -INC80LXRgA== 105146 -IOOAkQ== 105147 -INC+0LHRiQ== 105148 -dW1odXI= 105149 -56C0 105150 -0LvQuNGB0Yw= 105151 -c3DEmw== 105152 -2LHZitmC 105153 -INiq2YE= 105154 -INin2YTZiA== 105155 -57Wx 105156 -0LDQu9C+0YHRjA== 105157 -IG3DtA== 105158 -IHbhu4c= 105159 -IM60zrk= 105160 -INC30L0= 105161 -INio2K0= 105162 -2KrZiQ== 105163 -IOyngQ== 105164 -IHZlbG1p 105165 -dXnhu4Vu 105166 -IHBo4bqhbQ== 105167 -0YHRgtCy0L7QvA== 105168 -INmI2KfZhNmF 105169 -INCx0YvQu9C4 105170 -2KfYsA== 105171 -xJvFmQ== 105172 -4oSW 105173 -INC/0L7Qu9C+0LY= 105174 -4Liy4LiB4Liy4Lij 105175 -IMSNbMOhbg== 105176 -zpXOoQ== 105177 -IOyCsA== 105178 -zrLOsQ== 105179 -IOaXpeacrA== 105180 -2LLYrw== 105181 -INmG24zYs9iq 105182 -IGhheWF0 105183 -56K6 105184 -4LmA4Lin4Lil 105185 -IENow61uaA== 105186 -77yM5piv 105187 -INmI2KfYrQ== 105188 -6I+v 105189 -IM6uz4TOsc69 105190 -IHjhu60= 105191 -IMSNZXJ2 105192 -INmF2K/bjNix 105193 -6YY= 105194 -IOuIiA== 105195 -57ut 105196 -IHTDqm4= 105197 -7Ja4 105198 -IG9ydGF5YQ== 105199 -INC20LXQvQ== 105200 -IG7GoWk= 105201 -0LXQvdC90YvQtQ== 105202 -0YTQtdC60YLQuNCy 105203 -7Z2s 105204 -IGto4buP 105205 -IMSRYQ== 105206 -b3N5YWw= 105207 -4Lib4Lij4Liw4LmA4LiX4Lio 105208 -IG9kc3Q= 105209 -IOC4lg== 105210 -IM6/z4DOvw== 105211 -5pS/5bqc 105212 -IGLDoG4= 105213 -IEdp4bs= 105214 -IG9sZHVr 105215 -0L7QstCw0L3QuNC1 105216 -4Lit4Liq 105217 -INC90LXQsg== 105218 -z4TPgc6/ 105219 -IOyGjQ== 105220 -a8Sx 105221 -IOCkrOCkoQ== 105222 -IM+Fz4A= 105223 -IFbDvQ== 105224 -776E 105225 -562W 105226 -zrXPhg== 105227 -IOWFqA== 105228 -INmB2LHZiNi0 105229 -2YLbjNmC 105230 -5LyB5Lia 105231 -zrXPjQ== 105232 -6Jmf 105233 -IGF5cg== 105234 -2LbZiA== 105235 -xaFlbA== 105236 -INC/0ZbRgdC70Y8= 105237 -0ZbQudGB 105238 -6aKG 105239 -2qnYqtix 105240 -0LvRg9Cx 105241 -6KuW 105242 -5rC4 105243 -0LXQt9C/0LXRhw== 105244 -INC60LDQvA== 105245 -2LnYr9in2K8= 105246 -6rGw656Y 105247 -4Li54LiH 105248 -INiq2YfYsdin2YY= 105249 -IOuEiA== 105250 -0YDQuNCy 105251 -INGC0L7RgA== 105252 -2KfZiQ== 105253 -J9GP0Lc= 105254 -2ZDZig== 105255 -IGtow60= 105256 -INGI0YI= 105257 -IM6czrU= 105258 -IGJpcmk= 105259 -6Ie0 105260 -0YPQstCw0LI= 105261 -44GI44KL 105262 -INC00LjRgQ== 105263 -0LDRjtGC 105264 -2LXYqA== 105265 -5Z2H 105266 -0L7Qu9GO 105267 -6Iul 105268 -INin2Ks= 105269 -c291 105270 -5ZCD 105271 -44Gu44Gg 105272 -dWJsaWs= 105273 -0LvQtdC5 105274 -wqBt 105275 -IO2Pieq3oA== 105276 -4bqheQ== 105277 -zrXPgA== 105278 -dMSxaw== 105279 -IHZ5dQ== 105280 -2LnZiNiv 105281 -INC00L7Qtw== 105282 -IGzhu4tjaA== 105283 -6LOq 105284 -4KWB4KSI 105285 -4Lix4Lie 105286 -IHTDqW0= 105287 -IGthw6c= 105288 -IGPDoWk= 105289 -IM68zrE= 105290 -4oCm4oCm44CNCgo= 105291 -7Yis 105292 -2LHZiNmH 105293 -IHJ5Y2g= 105294 -zpHOpA== 105295 -INGA0ZbQsg== 105296 -67OR 105297 -5YGl 105298 -IHpkcmF2 105299 -INi52K/Yrw== 105300 -6I2J 105301 -zrTOuc6x 105302 -IHbhuq1u 105303 -0YvRgg== 105304 -INC60L7Qu9C40Yc= 105305 -z4zPhM61 105306 -IGLEsXJhaw== 105307 -INit2YU= 105308 -IGNo4buL 105309 -6buE 105310 -INin2YTZhdiq2K3Yr9ip 105311 -4Li34Lit4LiB 105312 -INC30LDQu9C4 105313 -IG5oYW5o 105314 -4oCM2KrZiNin2YY= 105315 -6529 105316 -INiq2YjYs9i3 105317 -6KaB5rGC 105318 -0LDQu9GD 105319 -w7xua8O8 105320 -44Gq44KT 105321 -IFRyb25n 105322 -4LiZ4Liw 105323 -5ZG8 105324 -INmK2YU= 105325 -0LjQutC4 105326 -INGC0YPRgg== 105327 -IHlhxZ9hbQ== 105328 -IG3hu41p 105329 -6ZuE 105330 -INit2LY= 105331 -INCw0LLRgtC+0Lw= 105332 -IOCkuOCkrOCkuA== 105333 -IHnhur91 105334 -44K544K/ 105335 -z4fOrg== 105336 -0ZbRjg== 105337 -6Jg= 105338 -4Li04Lii 105339 -IG1ldg== 105340 -aWNrw6lobw== 105341 -4KS/4KS5 105342 -5a2j 105343 -zrjOrg== 105344 -IOCkrOCkog== 105345 -INin2YTZhdiz 105346 -z4TOv8+F 105347 -ZWtsaQ== 105348 -INC00LXRgNC10LI= 105349 -5bit 105350 -5rKZ 105351 -44Gr44KC 105352 -IG9ibGFzdA== 105353 -IGjhu5k= 105354 -IOW5sw== 105355 -LjouOi46LjouOi46LjouOg== 105356 -IOmW 105357 -INis2LI= 105358 -INmH2YXahg== 105359 -5Lim 105360 -0YbQtdC/ 105361 -4KS+Cg== 105362 -5Lit55qE 105363 -J27EsW4= 105364 -IO2VmOuKlA== 105365 -0ZTRlw== 105366 -INio2LQ= 105367 -5Y20 105368 -5Lmg 105369 -INin2LfZhNin2LnYp9iq 105370 -IOuyoA== 105371 -INqp2LHYr9mG 105372 -4KS+4KSh 105373 -IOCkheCksA== 105374 -IEjhu40= 105375 -INCz0YDQvtC80LDQtA== 105376 -INiz2Ko= 105377 -z4TOuc+C 105378 -IGFuY2Fr 105379 -INC+0LM= 105380 -IGt0ZcWZw60= 105381 -IOas 105382 -IE5naA== 105383 -IHRlZHk= 105384 -IM+Azr8= 105385 -IHF1w6Ju 105386 -INCx0YPQu9C4 105387 -6K+G 105388 -IHThu6tuZw== 105389 -5Lq655qE 105390 -4Li14LiB4Liy4Lij 105391 -IM66zrHPhM6x 105392 -IHBvdXpl 105393 -oW5n 105394 -INii2LE= 105395 -INGC0YM= 105396 -IHThu7c= 105397 -IERhbmg= 105398 -0L7QvdC+0Lw= 105399 -0YHQuNC5 105400 -IOC5gOC4lA== 105401 -o6g= 105402 -xaFr 105403 -44OD44OJ 105404 -YXJkxLFy 105405 -IHnDtm5ldA== 105406 -0YPQstCw0LvQuA== 105407 -5YWI55Sf 105408 -INCQ0YA= 105409 -IHByb3Rvxb5l 105410 -IO2BrA== 105411 -IGplZG5vdA== 105412 -IHTDvQ== 105413 -6YeH 105414 -IOC4q+C4ow== 105415 -IOWcsA== 105416 -57qi 105417 -INC80L7Qu9C+0LQ= 105418 -acOqbmc= 105419 -IM+Mz4TOuQ== 105420 -INiv2KfYtNiq2Yc= 105421 -IHV5Z3Vu 105422 -INC+0L/QtdGA0LA= 105423 -5Y+r 105424 -INCw0L8= 105425 -INC60YPRgA== 105426 -2KfYudip 105427 -dW51eg== 105428 -IOyCrOynhA== 105429 -IHbDtA== 105430 -w6dvaw== 105431 -IOiB 105432 -0YLQtdGA0LXRgQ== 105433 -INin2LPYqtin2YY= 105434 -0LDQu9Cw0YHRjA== 105435 -4KWB4KS1 105436 -4buz 105437 -IGzGsHU= 105438 -INCi0LA= 105439 -IGzhu7Fh 105440 -J9GU 105441 -IMO8eQ== 105442 -INuM2qnbjA== 105443 -5r4= 105444 -0L3QtdC8 105445 -INiu2KfZhg== 105446 -INGN0LvQtdC6 105447 -2YLYp9mE 105448 -0LvQvtC6 105449 -IMSR4bq5cA== 105450 -4KWJ4KSy 105451 -IG3Fr8W+ 105452 -64uk64qU 105453 -IO2VmOuCmA== 105454 -2YTYqg== 105455 -546w5Zyo 105456 -0LzQvg== 105457 -z4XPgw== 105458 -44Gf44Gh 105459 -IOyghOyEuA== 105460 -4KWN4KSf4KSw 105461 -2LnYp9iq 105462 -2K/ZiA== 105463 -5L+6 105464 -5qW9 105465 -5qOu 105466 -INC70LjRgdGC 105467 -zrTOuQ== 105468 -5a+M 105469 -IMSRxrBh 105470 -0LLQtdGB0YLQuA== 105471 -0LTQvg== 105472 -0LDQvdC90ZY= 105473 -IMO8cmV0 105474 -IGfhu41p 105475 -INGB0LLQvtGO 105476 -4burbmc= 105477 -IHThuqV0 105478 -5Lqa5rSy 105479 -w6FjZQ== 105480 -TsON 105481 -INGA0Ys= 105482 -5ruh 105483 -z4HOtc+C 105484 -5YWN6LS5 105485 -0LvQvtGC 105486 -5pm6 105487 -IM6xzrM= 105488 -IOCkheCkrg== 105489 -IOe0 105490 -0L7QtNC+ 105491 -0YXQuA== 105492 -IG5ndeG7k24= 105493 -6YOo5YiG 105494 -0LLQsNGC 105495 -INGC0LXQsQ== 105496 -0LfQsNGG0ZbRlw== 105497 -INCf0YDQvg== 105498 -2LnbjA== 105499 -INmI2Yo= 105500 -656c 105501 -IG5lYnk= 105502 -INis2K/bjNiv 105503 -xJ9pbWl6 105504 -o70= 105505 -IOCkhuCkpA== 105506 -IOCkreCksA== 105507 -5omY 105508 -5a6J5YWo 105509 -IOuTpOyWtA== 105510 -2KjYsdiv 105511 -IOqyg+ydtA== 105512 -5Lqy 105513 -5rCP 105514 -0LDQu9GW0Lc= 105515 -bGFjaw== 105516 -INmF2K7YqtmE2YE= 105517 -2KfZhtmK2Kk= 105518 -IOyyrQ== 105519 -INCy0LjRgg== 105520 -IGhhcmVrZXQ= 105521 -6ag= 105522 -4LiZ4Liz 105523 -INio2LHYrg== 105524 -5aOy 105525 -0YfQsNC5 105526 -IGFubGF0 105527 -IOCkheCktQ== 105528 -INin2YHYsg== 105529 -IGjhur90 105530 -INqG2YbYrw== 105531 -6Zec 105532 -0L/RgNC40ZTQvA== 105533 -Z8Sx 105534 -IGtvbXA= 105535 -IGzhu5tw 105536 -IG3hu5dp 105537 -4Lib4Lij4Liw4LiB 105538 -IGhhZg== 105539 -IGVkZXI= 105540 -INC30LTQvtGA0L7Qsg== 105541 -4KWC4KSu 105542 -66C4 105543 -IG9udW4= 105544 -INmF2LHYr9mF 105545 -INCc0LDRgA== 105546 -IOyWtOuW 105547 -0LzQsNC9 105548 -INGB0LjQu9GM 105549 -57ay 105550 -67iU 105551 -0LvRj9C10YI= 105552 -INC90LXRgdC60L7Qu9GM0LrQvg== 105553 -bGFuZMSxcg== 105554 -INCy0LQ= 105555 -INmG2Yg= 105556 -44GO 105557 -0YLQuNC9 105558 -2KrYtA== 105559 -0LDQvdC40Lk= 105560 -IHTFmQ== 105561 -0YHQuNGF 105562 -0LvQvtC8 105563 -5q2p 105564 -446h 105565 -INit2LE= 105566 -5ouN 105567 -ZW5vdQ== 105568 -INCy0LXQu9C4 105569 -IM60zrc= 105570 -c2th 105571 -5Li76KaB 105572 -2KfZgdip 105573 -INCx0L7Qu9GM0YjQtQ== 105574 -4Li04Lio 105575 -55uK 105576 -INmB2YLYtw== 105577 -5aiB 105578 -IGjGsOG7n25n 105579 -IERvxJ8= 105580 -IGTDoGk= 105581 -INCz0L7RgtC+0LI= 105582 -INCy0LDQvA== 105583 -4oCJ 105584 -4KS+4KSa 105585 -5YW4 105586 -4LmD4Lir4LiN 105587 -IOer 105588 -ZWt0w7Zy 105589 -INCy0LXQuw== 105590 -INmE2Yg= 105591 -2LTYqtmH 105592 -5pi+ 105593 -4bqjeQ== 105594 -4LmC4Lih 105595 -IHThu5VuZw== 105596 -INC/0L7QstC10YDRhQ== 105597 -0ZfQsg== 105598 -IHBow6lw 105599 -55qH 105600 -INC/0L7RgNGP0LQ= 105601 -INGB0L7QvtGC0LLQtdGC 105602 -4KSd 105603 -INGB0LXQsdGP 105604 -IOuCoA== 105605 -INCx0YPQu9Cw 105606 -4LmJ4Liy4Lii 105607 -IOOAgOOAgOOAgOOAgA== 105608 -INmF2KzZhdmI2Lk= 105609 -77yM5Lul 105610 -INio2YjYr9mH 105611 -zrzPjA== 105612 -IO2OuA== 105613 -ZcWfaXQ= 105614 -0Y7RidC40LU= 105615 -0Y7RidC40YU= 105616 -5Z+66YeR 105617 -INiq2K3Yqg== 105618 -INCy0LvQsNGB 105619 -bGVybGU= 105620 -44Ky 105621 -64qY 105622 -6JM= 105623 -bWFuxLFu 105624 -7J6I 105625 -IHphc3Q= 105626 -INGH0LXQu9C+0LLQtdC6 105627 -4KWH4KSs 105628 -cGXEjQ== 105629 -INio2LHZhtin2YXZhw== 105630 -IHNsb3Y= 105631 -IG7Em2phaw== 105632 -6rec 105633 -4KWH4KS5 105634 -6Jek 105635 -INio24zYtNiq2LE= 105636 -aWxpeg== 105637 -IOuUlA== 105638 -2KfYstmH 105639 -2KrYrw== 105640 -IGV0bQ== 105641 -IOuLpOuluA== 105642 -IHbFrw== 105643 -5bCE 105644 -INC60LvQsNGB 105645 -0LLRgNC+0L8= 105646 -5rS+ 105647 -IMSRw6xuaA== 105648 -0YPRjtGC 105649 -0YPQtdGC0YHRjw== 105650 -6Zyy 105651 -INGB0LrQvtGA 105652 -INCy0LDRgQ== 105653 -7ZWY7JiA64uk 105654 -INiv2KfYtNiq 105655 -IOeE 105656 -IOilvw== 105657 -IM66zrHPhM6s 105658 -4KWm 105659 -7JeG 105660 -INiu2K/ZhQ== 105661 -2KfYs9mF 105662 -zpHOoQ== 105663 -IEFtYQ== 105664 -5aWl 105665 -INio2LLYsdqv 105666 -INCS0ZbQvQ== 105667 -IMWY 105668 -IOC4iOC4suC4gQ== 105669 -INGF0LDRgNCw0LrRgtC10YA= 105670 -IMSR4buZaQ== 105671 -INGA0L7Qt9Cy0LjRgg== 105672 -INC/0YDQvtGE0LXRgQ== 105673 -INC60L7QvdGC0YA= 105674 -zp/Omw== 105675 -IG1pbmg= 105676 -5LyR 105677 -7Kq9 105678 -IGNoxqFp 105679 -0LfQsNGG0LjQuA== 105680 -INC00ZbRj9C70Yw= 105681 -64Y= 105682 -IG5nYXk= 105683 -4KWC4KSC 105684 -IGlodGl5 105685 -6Zuq 105686 -IOq0gOumrOyekA== 105687 -IGPhu6U= 105688 -IOyniA== 105689 -2YrYqw== 105690 -4bq3cA== 105691 -2YjYp9i5 105692 -44GC44Gj44Gf 105693 -IOec 105694 -IOyasOumrA== 105695 -4LmI4LiH4LiC 105696 -IOet 105697 -KdiM 105698 -w6Bt 105699 -2YTbjNmE 105700 -IOqxuA== 105701 -0LDQu9GM0L3QuNGF 105702 -5pe25YCZ 105703 -dW5kYW4= 105704 -IEfDvG4= 105705 -IHRvcGw= 105706 -INGA0LXQutC+0LzQtdC9 105707 -INin2YbYqtiu2KfYqA== 105708 -w6B1 105709 -xI1rYQ== 105710 -67CA 105711 -INC60YDQsNGB 105712 -0LvQvtC/ 105713 -5by1 105714 -INin2YTZhdi5 105715 -bcOtbg== 105716 -IHZp4bq/dA== 105717 -IOqwmeydgA== 105718 -dXRlxI0= 105719 -IG5lY2g= 105720 -57WC 105721 -44Gq44GM 105722 -YXnEsW4= 105723 -IMSNaW4= 105724 -Y2jDoXrDrQ== 105725 -2KfZgdi4 105726 -0YDQvtCy0LDRgtGM 105727 -4LmE4Lij 105728 -IOOCpA== 105729 -INC30LDQsdC+0LvQtdCy0LA= 105730 -IOWxsQ== 105731 -IGthZMSxbg== 105732 -z4TOt8+C 105733 -0LDQu9C40YHRjA== 105734 -IGjDvGs= 105735 -5ZOl 105736 -INC/0LXRgNC4 105737 -xZnDoWQ= 105738 -IOCkheCkuA== 105739 -INGB0YLQstC+0YA= 105740 -INmI24zaqduM 105741 -IOyh 105742 -IGPhu61h 105743 -IGhp4buDdQ== 105744 -5ri45oiP 105745 -0YzQvtC80YM= 105746 -IGfDsw== 105747 -IHRvaA== 105748 -INCx0LvQsA== 105749 -IOWR 105750 -INC/0LvQvg== 105751 -0LjRiA== 105752 -IMSR4bqldQ== 105753 -c2tvdQ== 105754 -44KI44KK 105755 -4Li54Lib 105756 -IHLhu5Np 105757 -0L7Qv9GA0L7RgQ== 105758 -0L3QvtC70L7Qsw== 105759 -INGC0YDQsNCy 105760 -IFdheWJhY2s= 105761 -IOC5hg== 105762 -INGD0YfQsNGB0YI= 105763 -INC/0YDQtdC/0LDRgNCw 105764 -IGThuqFuZw== 105765 -IMOcbg== 105766 -4LmE4Lil4LiZ 105767 -INiv2KfYrg== 105768 -IHPGoQ== 105769 -IGtveQ== 105770 -65286rOg 105771 -IMSRw7puZw== 105772 -4KWH4KSCLA== 105773 -IGdlw6dpcg== 105774 -INGP0LrRidC+ 105775 -0YHRgtGA0L4= 105776 -0LXQvdGC0L7Qsg== 105777 -0ZbQtg== 105778 -0LrRg9GO 105779 -IGXEn2l0aW0= 105780 -4KWN4KSw4KS4 105781 -INCh0L8= 105782 -2KfYqtuM 105783 -44GR44KL 105784 -z4TPic69 105785 -INC60Lw= 105786 -4paN4paN4paN4paN 105787 -amlzdA== 105788 -0YLQsNC6 105789 -IOWQjeWJjQ== 105790 -6aGU 105791 -0LvRiw== 105792 -IGto4bqjbw== 105793 -4oCZ0Y8= 105794 -INmF2YTbjA== 105795 -bG/Fvg== 105796 -IOyWuA== 105797 -IGfhuqdu 105798 -IOCknOCksA== 105799 -4KSs4KSw 105800 -zpXOow== 105801 -4Liy4Lib 105802 -IG7DoXM= 105803 -Zm9ybWFjZQ== 105804 -IGV0bWVr 105805 -0LLQtdGB0YI= 105806 -7Ja07JqU 105807 -IOCkpOCkpQ== 105808 -INGB0LXQug== 105809 -zr7Otw== 105810 -5q+b 105811 -Qmly 105812 -IOyehA== 105813 -IHZhcmTEsXI= 105814 -2YjYp9mE 105815 -xLBS 105816 -b3ZhbsOp 105817 -0L3QsNGA0L7QtA== 105818 -4LiE4Liz 105819 -ZW1law== 105820 -IM6Vz4A= 105821 -IMWZZQ== 105822 -44G+44Gb 105823 -dXnhu4d0 105824 -IOyWvA== 105825 -csWv 105826 -IG9udQ== 105827 -4LmA4LiV4Lit4Lij 105828 -0L7QtNCw0YA= 105829 -2LLZhw== 105830 -IGthdg== 105831 -0L7QvdGL 105832 -INCy0LXRgQ== 105833 -7IKs7KeA 105834 -INCz0LvQsA== 105835 -w50= 105836 -INmC24zZhdiq 105837 -55Wl 105838 -4LiW4Liy4LiZ 105839 -xI1pbA== 105840 -IOS4hw== 105841 -6L6D 105842 -5YWF 105843 -INGA0LXQtA== 105844 -4Lih4Lir 105845 -YW1pbGlh 105846 -4KWH4KSV4KSw 105847 -IHThu5Fp 105848 -2YHbjA== 105849 -0YDRltGI 105850 -7JWg 105851 -4LiZ4Liq 105852 -4LiI4Lij 105853 -4KWH4KS24KSo 105854 -INmF2YjYttmI2Lk= 105855 -5om5 105856 -IG9ic2Fo 105857 -INC90LDQstGH 105858 -IGRlc3Rlaw== 105859 -IHphcw== 105860 -5ZON 105861 -w7xtw7x6 105862 -IOef 105863 -IOio 105864 -2aw= 105865 -57uI 105866 -IHpkZQ== 105867 -IHrDoXA= 105868 -4KWC4KS44KSw 105869 -7J207KeA 105870 -55qu 105871 -bG9t 105872 -4KWn 105873 -2YTYp9mC 105874 -4LiZ4LiV 105875 -7YyF 105876 -0LvQsNC00LA= 105877 -bWFzxLFuYQ== 105878 -44Gu44Gn 105879 -65Ok7J2E 105880 -INC90LDQsw== 105881 -bWFzxLFuxLE= 105882 -44Kd 105883 -xLFuxLFm 105884 -5Zu0 105885 -IGLDtmzDvG0= 105886 -5aWW 105887 -5qiZ 105888 -2YTYp9it 105889 -INCz0L7RgdGD0LTQsNGA 105890 -2K/Yp9mG2YTZiNiv 105891 -INC/0L7RgtGA0LXQsQ== 105892 -INGA0L7RhtGW 105893 -0L7Qs9Cw 105894 -INGB0LvQtdC00YPQtdGC 105895 -INC/0LDRgNCw 105896 -6bw= 105897 -44GN44Gf 105898 -zq/Otg== 105899 -IGLhu5E= 105900 -0YLRltCy 105901 -77yM5aW5 105902 -ZmFtaWxpYQ== 105903 -6aCF 105904 -INiv2YQ= 105905 -IHNrdXA= 105906 -0LXRh9C10L3QuNC1 105907 -44GT44Go44GM 105908 -4KWA4KSs 105909 -4Li44Lil 105910 -qOu2gA== 105911 -INin2YTYudix2Kg= 105912 -IOe+jg== 105913 -INin2YTZhdmI 105914 -INil2YY= 105915 -IG7DoXNsZWQ= 105916 -IHRvbXU= 105917 -zoQ= 105918 -INC30LDQstC4 105919 -IG5odQ== 105920 -IHDFmWVkc3Rhdg== 105921 -7KCV67O0 105922 -b2tvbA== 105923 -INC60YDQuA== 105924 -YWR1 105925 -INC60LDRgg== 105926 -INGN0YQ= 105927 -0LLQsNC7 105928 -bWF5xLE= 105929 -INGH0LDRgdGC0L4= 105930 -IHRyYW5o 105931 -2KfYptmE 105932 -44KI44GG44Gq 105933 -IHBvaA== 105934 -7IOB7JyE 105935 -IHPhuq9j 105936 -2YPYsw== 105937 -INC80YM= 105938 -Ljo6 105939 -64g= 105940 -wrsK 105941 -INmG2q8= 105942 -2ZDZhg== 105943 -0L3QuNC60L7QvA== 105944 -0YXQsA== 105945 -IM68zr/PhQ== 105946 -IE5ndXnhu4Vu 105947 -INCy0YvRgdC+0Lo= 105948 -INCf0L7QtA== 105949 -INC/0YDQuNGA0L7QtA== 105950 -4KWL4KSn 105951 -4KS/4KSV4KSy 105952 -0LjRgNCw 105953 -64uk6rOg 105954 -IG1hasOt 105955 -IHbDuW5n 105956 -IHRhcmloaW5kZQ== 105957 -INCy0LDRgA== 105958 -0L3QuNGC0Yw= 105959 -zrXOuc+C 105960 -IOWHug== 105961 -ZHnFvg== 105962 -z4TPjs69 105963 -5L2T6IKy 105964 -IOC5gOC4pw== 105965 -IOCkheCkmg== 105966 -INin2Ybar9mE24zYs9uM 105967 -4KWN4KSv4KSu 105968 -IGdlbGnFnw== 105969 -5rmW 105970 -INin2qk= 105971 -INC/0LvQsNC9 105972 -a3l0 105973 -2KfYqNuM 105974 -zrrOuQ== 105975 -IGNodW5n 105976 -4KS+4KSo4KSV 105977 -c8Sx 105978 -IHRpbmg= 105979 -INGB0YLQvtC7 105980 -0YHRgtGA0YM= 105981 -INC70LjRiNC1 105982 -INCy0LjRgNC+0LE= 105983 -aWxtacWf 105984 -INC30ZY= 105985 -57uG 105986 -5YCS 105987 -44K344Oj 105988 -5a2p 105989 -IOC5guC4o+C4h+C5gOC4ow== 105990 -7Zmc 105991 -INCx0YPQtNC1 105992 -IHlha2xhxZ8= 105993 -6Ieq5YiG 105994 -INmB2Yg= 105995 -0KHQog== 105996 -IHNvcnVu 105997 -4LmA4Lig 105998 -IGPDtA== 105999 -0LLQuNGH 106000 -65Ok7J2Y 106001 -IHRyaeG7h3U= 106002 -IHLDtQ== 106003 -IOOBqw== 106004 -xJ9pbQ== 106005 -aXlvcnV6 106006 -6Jw= 106007 -4KWN4KSw4KS1 106008 -INiz2b4= 106009 -IOyEnOyauA== 106010 -zrTOtQ== 106011 -0LXRgNGI 106012 -INij2LM= 106013 -5Lqe 106014 -6K+N 106015 -0L/RgtC+0Lw= 106016 -4Lik4Lip 106017 -INiz2KfYstmF2KfZhg== 106018 -IGx1w7Ru 106019 -2YfZiNix 106020 -Y8O8 106021 -0LDRgtC60YM= 106022 -IG9sYWJpbGly 106023 -IOyXsOq1rA== 106024 -0LXQvdC90L7QuQ== 106025 -IOaIkQ== 106026 -INC90LXQs9C+ 106027 -IC4qKioqKioqKioqKioqKg== 106028 -4Li04LiY 106029 -IOOCtw== 106030 -2KrZgQ== 106031 -0J/RgNC+ 106032 -IGhha2vEsW5kYQ== 106033 -xI1uxJs= 106034 -IE3hu7k= 106035 -6b0= 106036 -IM+Dz4TOv869 106037 -IMOibQ== 106038 -wqfYuA== 106039 -IMWfaXJrZXQ= 106040 -5oOF5Ya1 106041 -INii2YXZiNiy2LQ= 106042 -zrvOtc+F 106043 -2YXZhw== 106044 -6KaP 106045 -44Go5oCd 106046 -INmI2Lk= 106047 -z4jOtw== 106048 -z4HOv8+N 106049 -IMKgCg== 106050 -zrTOtw== 106051 -0YjQvtCy 106052 -5Yik 106053 -IG3huq90 106054 -5ou/ 106055 -4LiZ4LiU 106056 -6ZmE 106057 -4LmJ4Lih 106058 -IMSR4bqhdA== 106059 -IGfDvHplbA== 106060 -bcO8xZ8= 106061 -0J7Qkg== 106062 -54us 106063 -66as66W8 106064 -INC/0LvQsNGC 106065 -IG5naOG7iw== 106066 -INGC0LDQutC40YU= 106067 -0LHQuNGA0LA= 106068 -INC90LXQug== 106069 -0YHRjNC60ZY= 106070 -2LHZitin2LY= 106071 -b251 106072 -4KWL4KSu 106073 -IEdp4bubaQ== 106074 -6J6N 106075 -6bI= 106076 -IEdlbmVs 106077 -5Yq/ 106078 -INCy0ZY= 106079 -5aeQ 106080 -6Kmm 106081 -INC20LjRgtGC0Y8= 106082 -IOyYqA== 106083 -5Ye65p2l 106084 -IHThu5E= 106085 -IGxhbw== 106086 -zq/Ovw== 106087 -IM6gzrE= 106088 -0L3QuNGC0LXQu9GM 106089 -6ZqO 106090 -INCy0LjQutC+0L0= 106091 -INmB2LnYp9mE 106092 -4LmA4Lio 106093 -z4zOsw== 106094 -INC+0YDQs9Cw0L3QuNC3 106095 -INC10LzRgw== 106096 -INmK2Lk= 106097 -INmF2Kg= 106098 -4KS+4KSy4KSv 106099 -IM6cz4A= 106100 -6bg= 106101 -w7lh 106102 -6ri4 106103 -IMSQaeG7gXU= 106104 -zrXOr86/ 106105 -5LqJ 106106 -xrDhu6N0 106107 -0YDQsNC30YM= 106108 -INC+0YLRgNC40Lw= 106109 -INi32Kg= 106110 -IOS7pQ== 106111 -5paX 106112 -67Cx 106113 -4KSH4KS4 106114 -66eM7JuQ 106115 -44CB44Gd44Gu 106116 -IOuVjOusuA== 106117 -INii24w= 106118 -0KHQoA== 106119 -2LbZhA== 106120 -5pON 106121 -a2F6eQ== 106122 -4Liq4Lin 106123 -w6JuZw== 106124 -4KSC4KSt 106125 -0L3RltGH 106126 -4Lix4LiH4LiB 106127 -INio2LHYsdiz24w= 106128 -2LHYr9mH 106129 -IG3huqt1 106130 -4LmI4Lin4LiH 106131 -INiv2KfZhti02q/Yp9mH 106132 -ZMSxxJ8= 106133 -IFThu5VuZw== 106134 -56ys5LqM 106135 -Y8OtbQ== 106136 -IGLDtnlsZQ== 106137 -67aI 106138 -INmF2YbYp9io2Lk= 106139 -4KWD4KS3 106140 -0LXRgtGL 106141 -5Ya3 106142 -5Zut 106143 -INiq2YjYrNmH 106144 -5Yi7 106145 -5p6B 106146 -4KSf4KSo 106147 -0LvQsNC9 106148 -IO2DgA== 106149 -5L2Q 106150 -INC+0LHRiw== 106151 -5bid 106152 -7Luk 106153 -5a6I 106154 -6LW35p2l 106155 -IOODrA== 106156 -546J 106157 -4LmA4Lir4Lil 106158 -0LjQvdC1 106159 -4Lir4Liy4Lij 106160 -6ZqP 106161 -INCz0LDQtw== 106162 -INin2YTYudmF2YQ= 106163 -4KWB4KSd 106164 -z4HOuc6/ 106165 -IHbDoW0= 106166 -INi52YbYrw== 106167 -2YbYr9qv2KfZhg== 106168 -77yM6YKj 106169 -INC90LDRhdC+0LQ= 106170 -w6Fubw== 106171 -24zYp9mG 106172 -INij2Lk= 106173 -INGA0LDQtNC4 106174 -INC80LXQvdC1 106175 -IMO6ZGE= 106176 -z4fOvQ== 106177 -0YPQu9GP0YA= 106178 -4KWA4KSq 106179 -IHBvdcW+w60= 106180 -IOS4 106181 -INmC2KfZhtmI2YY= 106182 -zrnOus6/z40= 106183 -w6F5 106184 -IMOnw7Z6 106185 -z4TPgQ== 106186 -2YbYp9mF 106187 -4Li44LiV 106188 -5ZOq 106189 -2YrYqA== 106190 -5Lmw 106191 -0JTQu9GP 106192 -IOugiOuyqA== 106193 -4Li44Lia 106194 -0L3Rg9GC0Lg= 106195 -6L27 106196 -IM6czrE= 106197 -IOim 106198 -0LDRgtC60L7Qsg== 106199 -IOuIhA== 106200 -IHR1eeG7g24= 106201 -2Y7ZhQ== 106202 -INCy0YvQv9C+0Ls= 106203 -IHN0dWRp 106204 -IHDFmWVr 106205 -INC30LDQvA== 106206 -IG1hdGVyaQ== 106207 -5Y6L 106208 -INCw0Ls= 106209 -IOC4muC4ow== 106210 -2LfYrQ== 106211 -INmF2LHaqQ== 106212 -IOyLrA== 106213 -INmC2KfYqNmE 106214 -INCQ0LvQtQ== 106215 -xLFudMSx 106216 -IOW7 106217 -xLBL 106218 -64WE64+E 106219 -0YvQstCw0YLRjA== 106220 -IGRldmxldA== 106221 -56S+5Lya 106222 -64Kg 106223 -IGtvbGF5 106224 -INGA0LDQt9Cy0LjRgtC4 106225 -0LDQtNC4 106226 -2KbZitiz 106227 -YWTEscSfxLE= 106228 -zpHOmw== 106229 -IGhvYQ== 106230 -IOC4qA== 106231 -xLHFn3TEsXI= 106232 -0YDRjg== 106233 -INC60LDRh9C1 106234 -vOWQiA== 106235 -5YW0 106236 -IOq3uOufrA== 106237 -INC80ZbRgdGC 106238 -INC80L3QtQ== 106239 -44O844K6 106240 -56eA 106241 -INi52YTZitmH 106242 -IOyLnOqwhA== 106243 -IOCkmOCksA== 106244 -INGD0LM= 106245 -5Y+R5bGV 106246 -xLHFn8Sx 106247 -IOyInA== 106248 -IO2ZnA== 106249 -5qGj 106250 -IG5va3Q= 106251 -bMOpbQ== 106252 -0LXQvdC90YvQuQ== 106253 -INio2YU= 106254 -4KWH4KSv 106255 -0L7QtNCw0LI= 106256 -4LmC4Lij 106257 -77yM5pyJ 106258 -2KfZitin2Ko= 106259 -2KfbjNmH 106260 -IOCkieCkquCkrw== 106261 -IHNtxJs= 106262 -2LTYrw== 106263 -0KjQkA== 106264 -INin2YXYp9mF 106265 -5r+A 106266 -IGhv4bqhY2g= 106267 -0L7QsdGA0LDQtw== 106268 -4KWL4KS5 106269 -INGA0LXQsdC10L0= 106270 -0LjRgtC10LvRjw== 106271 -44Gq44GM44KJ 106272 -2LPYp9mE 106273 -IOC4iOC4sw== 106274 -INiu2KfYtQ== 106275 -IGdlcmk= 106276 -4KSY 106277 -IOy6 106278 -4LmB4LiX 106279 -4oCM24w= 106280 -2q/YsduM 106281 -2KfZhdio2LE= 106282 -0YjRgw== 106283 -IHBob25n 106284 -0LjQvNC+ 106285 -0L/QsA== 106286 -IOy1nOqzoA== 106287 -INC90LDQvA== 106288 -b3N0w60= 106289 -aXNpbmk= 106290 -INC00YPQttC1 106291 -0YHQutC+0Lw= 106292 -INC/0YDQvtC00YPQug== 106293 -z4zPhM63z4TOsQ== 106294 -YWxu 106295 -aXNpbmU= 106296 -6L+c 106297 -0LDQu9GM0L3QvtC5 106298 -4KSk4KSw 106299 -dMSxxJ8= 106300 -IOuS 106301 -6L+Y5piv 106302 -INmF2KvZhA== 106303 -7Jyo 106304 -776Y 106305 -5Yi4 106306 -57aa 106307 -2KzYp9iv 106308 -INC60YM= 106309 -5YCR 106310 -b3Z1 106311 -IHPEqQ== 106312 -IOygkA== 106313 -INGD0YDQvtCy 106314 -4KS/4KSa 106315 -b3ZhbGk= 106316 -INmI2YY= 106317 -IOydjA== 106318 -INC60LM= 106319 -4Liy4LiY 106320 -z4TPgc6x 106321 -xb5keQ== 106322 -4LmM4LiV 106323 -IG7Em20= 106324 -INCm0LU= 106325 -bm9obw== 106326 -IOuLpOyLnA== 106327 -IHTDqXRv 106328 -IGJp4buDdQ== 106329 -IFnDtm4= 106330 -IHByw6FjZQ== 106331 -4KWJ4KSw 106332 -IGNow60= 106333 -0L7QstC+0Lk= 106334 -IG3hu58= 106335 -6Kqq 106336 -z47Pgg== 106337 -0LLQvtC70Y8= 106338 -44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 106339 -5a+m 106340 -6bue 106341 -IOCkj+CktQ== 106342 -z4XOvc6x 106343 -5bKh 106344 -a2jDtG5n 106345 -IHDFmcOtcGFkxJs= 106346 -5Zc= 106347 -INio2K/ZiNmG 106348 -z4POus61 106349 -IGRpa2thdA== 106350 -IEFuY2Fr 106351 -IHRp4buHbg== 106352 -6Z2Z 106353 -IOydvOuwmA== 106354 -IMSNbGVu 106355 -7JWF 106356 -4KS+4KSH4KSo 106357 -44Gj44Gm44GE44Gf 106358 -IOydtOyaqQ== 106359 -2YjZhduM 106360 -aW7DoQ== 106361 -4bq3bmc= 106362 -z47Pgc6x 106363 -2YbZitip 106364 -0LLQsNC2 106365 -6I63 106366 -5ama 106367 -IMWfdQ== 106368 -IOOBig== 106369 -INiv2LHYqA== 106370 -IGRp4buFbg== 106371 -xZllYmE= 106372 -YXPEsW7EsW4= 106373 -572R56uZ 106374 -0L3RjNC+0LPQvg== 106375 -INin2YTYo9mI2YQ= 106376 -zrnOus6tz4I= 106377 -IHrDrXNr 106378 -0L7Qu9C+ 106379 -INGN0YLQvtGC 106380 -IHBva3Vk 106381 -6LK7 106382 -0LXRgNGW0LI= 106383 -44OV44Kj 106384 -0LjRgtGD0LA= 106385 -IHZ5ZA== 106386 -0L7Qu9C+0LY= 106387 -0LvRj9GC0Yw= 106388 -2YLZhQ== 106389 -5rSL 106390 -5qeL 106391 -INi624zYsQ== 106392 -IHN0xZllZA== 106393 -2LjYsQ== 106394 -IGhpw6diaXI= 106395 -zrjOtc6v 106396 -em5paw== 106397 -0LTRiw== 106398 -bHV2 106399 -INmF2KQ= 106400 -INqv2LHZiNmH 106401 -IO+8iQo= 106402 -dGVyaQ== 106403 -IM+Fz4DOvw== 106404 -dm9q 106405 -INio2LnYtg== 106406 -IGJpbGlu 106407 -INix2YjYtA== 106408 -INC+0LHRj9C3 106409 -IO+7 106410 -2LPZhg== 106411 -IM+AzrE= 106412 -7Y28 106413 -IHTDrW4= 106414 -IMK0 106415 -7IKs7J207Yq4 106416 -IHBvZG9i 106417 -0YnQtdC1 106418 -IOWNlw== 106419 -IGJ5Y2g= 106420 -0L7Qt9C4 106421 -IFbEg24= 106422 -2K3Zhw== 106423 -5a2m6Zmi 106424 -IMWZZWts 106425 -66a964uI64uk 106426 -INC/0YDQvtGB 106427 -zrrOrA== 106428 -IGJhxZ9sYWTEsQ== 106429 -4buneQ== 106430 -0Y7QtNC2 106431 -4KS+4KSP4KSX 106432 -4KSC4KSa 106433 -IOq0gOugqA== 106434 -INCy0L7Qv9GA0L7RgQ== 106435 -INGB0YLQsNGC0Yw= 106436 -IHlhdMSxcsSxbQ== 106437 -0L3Rg9C70LA= 106438 -2LHYp9mB 106439 -IMOnZcWfaXQ= 106440 -IOCkieCkpg== 106441 -5aSu 106442 -INC/0L7Rj9Cy 106443 -5Zu95a62 106444 -INGB0L7QvtGC0LLQtdGC0YHRgtCy 106445 -7JWh 106446 -INiu2YjYp9mH2K8= 106447 -xaHFocOt 106448 -wqDQvw== 106449 -IE5ow6A= 106450 -JycnJw== 106451 -772o 106452 -w4U= 106453 -IO+6 106454 -INii2YXYsduM2qk= 106455 -bGFyxLFtxLF6 106456 -2KzYpw== 106457 -2YHZgg== 106458 -IOG7 106459 -IOyVoA== 106460 -INiy2KjYp9mG 106461 -INGC0LLQvtGA 106462 -0L3QuNGH0LXRgQ== 106463 -INC60L3QuA== 106464 -2K7Yr9in2YU= 106465 -4Lif4Lij 106466 -IOy5mA== 106467 -4Lin4Liy4Lih 106468 -INmF2YfZhQ== 106469 -IHN0b2w= 106470 -IGVkaWxlbg== 106471 -IHBlaw== 106472 -2KfZhtin2Ko= 106473 -0LDQu9GM0L3Rlg== 106474 -INC90LXQvtCx0YXRltC0 106475 -4LmE4Lin 106476 -IOCktuCksA== 106477 -IO2MkA== 106478 -0pE= 106479 -INC90LjQvA== 106480 -IOC4mA== 106481 -5pig 106482 -5LqS 106483 -IGJhxZ9hcg== 106484 -xb5p 106485 -INC80L3QvtCz 106486 -bGVuZGk= 106487 -w6F2YWrDrQ== 106488 -bmljdA== 106489 -INC00YPQvA== 106490 -6Zmp 106491 -z4PPgw== 106492 -aWt5 106493 -0LDQu9GM0L3Ri9C5 106494 -INmF2YbYqg== 106495 -5a6u 106496 -LdC30LA= 106497 -0LXRgNC6 106498 -5aGU 106499 -IM68zrXPhM6x 106500 -b8SfdW4= 106501 -zpfOnA== 106502 -4KWI4KSC4KWkCg== 106503 -xI1reQ== 106504 -5bmz5Y+w 106505 -4KWL4KS2 106506 -IG9uYQ== 106507 -IGJlYw== 106508 -7KI= 106509 -IGPDonk= 106510 -a8O8bg== 106511 -IOCkiA== 106512 -IHLhu5luZw== 106513 -0LXRgNCx 106514 -5bm4 106515 -776Q 106516 -INC/0ZbQtNC/0YDQuNGU0Lw= 106517 -55Sj 106518 -IM+EzrU= 106519 -INmG2YLYtA== 106520 -0L7QstC40YU= 106521 -INmB2Yk= 106522 -0JrQsNC6 106523 -2Y7YsQ== 106524 -INCp 106525 -0LDQu9GM0L3Ri9GF 106526 -IGvDvMOnw7xr 106527 -6K23 106528 -5ouF 106529 -aWNhcmV0 106530 -INix2YHYqg== 106531 -INC+0LTQvdC+0LPQvg== 106532 -0YjQuNC8 106533 -INCx0ZY= 106534 -IHV5Z3VsYW0= 106535 -IOaL 106536 -5L2b 106537 -dWN1 106538 -ZMOt 106539 -xZg= 106540 -2KbYqQ== 106541 -6rG4 106542 -2Yw= 106543 -IM6gz4HOvw== 106544 -IHllcmluZQ== 106545 -INGW0L3RhNC+0YDQvNCw 106546 -IOWklg== 106547 -5LuV 106548 -0L3QsNCy 106549 -YXJhc8Sx 106550 -4Lit4LiZ4LmE4Lil4LiZ 106551 -2KfYtNiq 106552 -2LLZig== 106553 -5qmL 106554 -IOOCqw== 106555 -6IO95Yqb 106556 -5aWX 106557 -IHByb2g= 106558 -INC/0YDQsNCy0LA= 106559 -4bubcA== 106560 -IOC4guC4reC4hw== 106561 -IOu0 106562 -IGzDumM= 106563 -IOmV 106564 -2KjZiNiv 106565 -cnVwYQ== 106566 -2KfYstmF 106567 -INC60LDQvQ== 106568 -xLFsxLFt 106569 -INmH2K8= 106570 -44CAIOOAgCDjgIA= 106571 -0YvQstCw0LXRgg== 106572 -2K7Yp9mG2Yc= 106573 -0YPQutGC 106574 -IOeZvuW6pg== 106575 -IG7Em2Nv 106576 -0LXQvNC+0L0= 106577 -IOCkheCkqg== 106578 -IM6M 106579 -w7xuw7xu 106580 -5paH5YyW 106581 -5LmO 106582 -5LiK55qE 106583 -2YTZitmF 106584 -IHTEm2No 106585 -2KfYs9io 106586 -4oCZ0ZQ= 106587 -INqv24w= 106588 -IOq3vA== 106589 -IHRy4bq7 106590 -zrzOrc69zr8= 106591 -44GT44Go44KS 106592 -7J2064KY 106593 -5ZaE 106594 -IHRy4bqj 106595 -5YiG5p6Q 106596 -IGTEm2w= 106597 -0YPRgdC60LA= 106598 -INC80L3QvtCz0L4= 106599 -4KWI4KSw 106600 -zrzOsc+Ezr/Pgg== 106601 -IG3DrXN0bw== 106602 -IOqwgQ== 106603 -INC/0YDQvtCz 106604 -YmHFnw== 106605 -0LDQudGC0LU= 106606 -IGPhu5U= 106607 -5b+c 106608 -77yBCg== 106609 -w6fEsQ== 106610 -IGJpcsOnb2s= 106611 -IO2YlQ== 106612 -57WM 106613 -IEV2cm9w 106614 -INGB0L7RhtGW 106615 -5LuW55qE 106616 -IM68z4DOvw== 106617 -5aWI 106618 -INqv2YQ= 106619 -2YjZhNip 106620 -5rWO 106621 -INqp2Yg= 106622 -seS5kA== 106623 -44GX44GP 106624 -57qz 106625 -0YHRgtCy0LXQvdC90L4= 106626 -6Zui 106627 -4KS+Lg== 106628 -IGdlcsOnZWtsZcWfdGly 106629 -IGvEsXI= 106630 -7LM= 106631 -INCz0L7RgdC/ 106632 -5bmV 106633 -7IS8 106634 -wrsuCg== 106635 -0LrRg9GA 106636 -INix24w= 106637 -5pu+ 106638 -2YjYsdmK 106639 -0LvQtdC60YHQsNC90LQ= 106640 -2LXZgQ== 106641 -IGPhuqNuaA== 106642 -5bGC 106643 -44KG 106644 -INiq2LM= 106645 -7LC9 106646 -6riw66W8 106647 -IOC5gOC4hA== 106648 -55+t 106649 -INGB0YLRgNC+ 106650 -IM+Dz4TOuc+C 106651 -4KWN4KSv4KS1 106652 -INi52YTZhQ== 106653 -INGB0LjRgtGD0LA= 106654 -INGJ0L7QtNC+ 106655 -5ZCb 106656 -2YXYsw== 106657 -INC+0YLQutGA0Ys= 106658 -IHNwb2o= 106659 -IMSRxINuZw== 106660 -IHNhdmHFnw== 106661 -4Li14Lij 106662 -c2vDqW0= 106663 -IOihjA== 106664 -6bk= 106665 -INmK2YXZg9mG 106666 -0L7QstCw0L3Qvg== 106667 -INC/0YDQsNCy0LjQu9GM 106668 -IGNoaeG6v2M= 106669 -6Ii5 106670 -6ZO2 106671 -INC+0YLQtA== 106672 -IOydgA== 106673 -7YWU 106674 -IE5lag== 106675 -0L7QvdC1 106676 -IGvEsXo= 106677 -0L7Qu9C+0LPQuNGH0LXRgQ== 106678 -INC60YDQsNGX 106679 -4Lia4Lit4Lil 106680 -5qW8 106681 -INiq2YXYp9mF 106682 -INio24zZhQ== 106683 -INGB0YPQsQ== 106684 -dsO9 106685 -0YHQutC40LU= 106686 -64yA66Gc 106687 -Pz8/Pz8/Pz8= 106688 -YWJpbGlyc2luaXo= 106689 -0LDQvdGB0L7Qsg== 106690 -5Luj6KGo 106691 -IOunpOunpA== 106692 -0L7Qu9C+0LPRltGH 106693 -zrzOsc69 106694 -0LDQutGB0LjQvA== 106695 -44Kk44Or 106696 -IHThuqNp 106697 -2YXZiA== 106698 -5a6X 106699 -bmVt 106700 -IGtob+G6o24= 106701 -INC/0LDRgg== 106702 -0LDQvdGC0LA= 106703 -INC/0L7QvNC+0Yk= 106704 -IHZvZA== 106705 -IGtheW5haw== 106706 -z4PPhg== 106707 -4KWC4KSk 106708 -ZHXEnw== 106709 -0LDRgtC40YHRjw== 106710 -IOelng== 106711 -INGB0LvQvtCy0LA= 106712 -0YDRg9C60YLRgw== 106713 -IG3Em3PDrQ== 106714 -2Y/ZhQ== 106715 -0LfQvdCw0YfQsA== 106716 -IOiJ 106717 -5a2m55Sf 106718 -5rSl 106719 -2Y7Zig== 106720 -6KeI 106721 -IOWuiQ== 106722 -IGfDtnLDvMWf 106723 -w6FsbsSb 106724 -IOuUsOudvA== 106725 -INmF2YjYrNmI2K8= 106726 -IMSR4bup 106727 -IMOnYWzEscWfbWFsYXI= 106728 -INGP0LrQuNGF 106729 -INin2KzYqtmF2KfYuQ== 106730 -zrzOtc69 106731 -6I6J 106732 -56ev 106733 -7LaV 106734 -4KWN4KS24KSo 106735 -IHjDqXQ= 106736 -INCy0YLQvtGA 106737 -546p 106738 -wqDQnQ== 106739 -0YjQuNC1 106740 -0L7RgNC4 106741 -2KPYsw== 106742 -IHRodeG7kWM= 106743 -64uI6rmM 106744 -65WM 106745 -0YDRg9C/ 106746 -0YHRj9GC 106747 -0LfRiw== 106748 -INGB0LzQtdGA 106749 -IHZ5Yg== 106750 -IOydtOyDgQ== 106751 -4KSa4KSo 106752 -IGdlbGRp 106753 -27HbsA== 106754 -zrnOus+Ozr0= 106755 -IMSQ4bupYw== 106756 -INC00L7RgdGC0LDRgg== 106757 -IMO2bmM= 106758 -6Kaq 106759 -IGFkxLE= 106760 -dW5jYQ== 106761 -INin2YTYqtix 106762 -55W2 106763 -INCk0LXQtNC10YDQsA== 106764 -0LvRj9GO0YLRgdGP 106765 -INmD2KfZhtiq 106766 -5o6i 106767 -INGD0LE= 106768 -IM66zr8= 106769 -4KS+4KSH4KSf 106770 -0LfQvQ== 106771 -IG3DtGk= 106772 -IOOCtQ== 106773 -INC90LDQstGW 106774 -57u85ZCI 106775 -INC80LjQvdGD0YI= 106776 -ZMSxaw== 106777 -0YDRg9C0 106778 -5ZyW 106779 -6rCk 106780 -IMSRb8Ogbg== 106781 -6KQ= 106782 -4KWN4KS14KSw 106783 -IMOcbml2ZXJzaXQ= 106784 -0LDQvdC+ 106785 -6Zuo 106786 -IHbFoWVjaG55 106787 -IOuLpOydjA== 106788 -IEN1bWh1cg== 106789 -INC80YPQtw== 106790 -YcWfdMSxcg== 106791 -IOqxsOuemA== 106792 -IOmh 106793 -xb5pdMOt 106794 -IOC4nw== 106795 -IHRodeG6vw== 106796 -INC80YPQtg== 106797 -IM6Rzr0= 106798 -INiv2YjZhQ== 106799 -INGB0LjQvQ== 106800 -IM+Jz4I= 106801 -bWVsZXI= 106802 -IHBvxI0= 106803 -INC60L7Qu9C40YfQtQ== 106804 -IEvEjQ== 106805 -6LO9 106806 -INC+0YHRltCx 106807 -5Y+l 106808 -IELDtmw= 106809 -4LiY4Lij4Lij4Lih 106810 -IGPhuqFuaA== 106811 -5bCH 106812 -INC90L7RgQ== 106813 -6IS4 106814 -IGdlbGly 106815 -0L7RgNC+0L0= 106816 -4KWN4KSw4KSt 106817 -57uH 106818 -4Li44LmJ 106819 -4KS+4KSu4KSy 106820 -IGPDonU= 106821 -0ZHRgg== 106822 -IDp8 106823 -44KM44Gm 106824 -IHBvc2xlZA== 106825 -44K544OG 106826 -0ZbQu9GM0Yg= 106827 -0LXQvdGC0Ys= 106828 -2K7Yr9mF 106829 -INio2KfYtNqv2KfZhw== 106830 -IHRoxrA= 106831 -w6F2w6Fuw60= 106832 -64qQ 106833 -INij2K0= 106834 -2LHYp9iv 106835 -INio2LPbjNin2LE= 106836 -5Yiw5LqG 106837 -Ijsi 106838 -5bCO 106839 -IMO2cg== 106840 -4LiK4Liy4LiV 106841 -Z2VudXM= 106842 -IHlha8Sxbg== 106843 -IMOtdA== 106844 -cmVnbnVt 106845 -IGZpeWF0 106846 -0L3RltGF 106847 -5Zyw5pa5 106848 -IGJpbGdp 106849 -0LrQsNC8 106850 -IHNwb2w= 106851 -2KfYptmK 106852 -INmK2YY= 106853 -4Liy4Lir4Liy4Lij 106854 -INio2q8= 106855 -6ZiF 106856 -INin2YTYtNix 106857 -woE= 106858 -INGW0L3RiNC40YU= 106859 -IHRy4bqhbmc= 106860 -54Gj 106861 -IGPhu7Fj 106862 -0LrQsNC9 106863 -6IuP 106864 -w5Q= 106865 -IGzhu51p 106866 -0Y/Rhw== 106867 -INmI2K0= 106868 -7Iic 106869 -xbg= 106870 -INCy0L7RgdC/ 106871 -7KGM 106872 -xI1uw61jaA== 106873 -2K7YsdmJ 106874 -2KfYptmK2Kk= 106875 -IHN14bqldA== 106876 -5oeJ 106877 -2KfYrduM 106878 -IG7DoXo= 106879 -6L+Z56eN 106880 -INC30LDQsdC10LfQv9C10Yc= 106881 -INCn0LXRgA== 106882 -INC30LTRltC50YE= 106883 -5Y+m 106884 -5ous 106885 -4KWB4KS3 106886 -zrzPhg== 106887 -64OQ 106888 -0JXRgdC70Lg= 106889 -6aw= 106890 -IO2DnA== 106891 -IOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgA== 106892 -INC80Ls= 106893 -5bSO 106894 -2YHYuQ== 106895 -INmC2K/YsQ== 106896 -IHbhu5Fu 106897 -5aa5 106898 -INCd0LDRgQ== 106899 -4KWN4KSr 106900 -44K444Oj 106901 -IG3EsQ== 106902 -0LXQvdGB 106903 -0LHRg9C0 106904 -INit2KrZiQ== 106905 -IOyytA== 106906 -INGW0YHRgtC+0YA= 106907 -IGdp4bqleQ== 106908 -zrPOv8+B 106909 -65CY7Ja0 106910 -IO2C 106911 -INCe0LTQvdCw 106912 -INmG2YXZiNiv 106913 -INCy0LjQv9Cw0LQ= 106914 -IOyekOyLoA== 106915 -IGpzdGU= 106916 -IOuTseuhnQ== 106917 -ZWt0ZW4= 106918 -INGA0LXRhw== 106919 -cm9kbsOt 106920 -2LPYqtix 106921 -xLF0 106922 -5LmF5LmF 106923 -INiu2YTYp9mE 106924 -IOem 106925 -dWx1aw== 106926 -bGVuZW4= 106927 -aWxpcA== 106928 -6LSi 106929 -IOCkheCklQ== 106930 -IFnEsWw= 106931 -IOOAgOOAgOOAgOOAgOOAgA== 106932 -IOCknQ== 106933 -IELDrG5o 106934 -IG9sbXXFnw== 106935 -2KfZhNil2YbYrNmE2YrYstmK2Kk= 106936 -0LzQtdC90L3Qvg== 106937 -YWxuxLF6 106938 -INi02LHZg9ip 106939 -INiz2YbYqQ== 106940 -6LSf 106941 -5L2c5ZOB 106942 -IOyVvQ== 106943 -INC00YDRg9Cz0LjRhQ== 106944 -IGJhxJ9sYW50xLE= 106945 -0L7QtNGD 106946 -55qE5piv 106947 -4Lix4LiZ4LiU 106948 -INC60L7RgtC+0YDRi9GF 106949 -INin2YTZiNmE 106950 -6riA7IOB7JyE 106951 -IM+AzrXPgQ== 106952 -66as7JWE 106953 -aWJhcg== 106954 -IOiD 106955 -44Gf44GE 106956 -w6Fq 106957 -IOychO2VtA== 106958 -P+KAnAoK 106959 -IO2OmA== 106960 -INC90LXQuQ== 106961 -INCX0LDQug== 106962 -INCS0ZbQtA== 106963 -0LXQu9GW 106964 -6K++ 106965 -5Ymv 106966 -bWFkYW4= 106967 -5pyr 106968 -IM+Az4HPjA== 106969 -INC/0YHQuNGF 106970 -INGC0ZY= 106971 -2YPYp9iq 106972 -IHZ5c29r 106973 -6rSA66as 106974 -w7xsdMO8cg== 106975 -IOC5gOC4rQ== 106976 -IO2VqQ== 106977 -552j 106978 -INGA0LjRgQ== 106979 -0LXRgNGM 106980 -INqp2YTbjA== 106981 -IOODng== 106982 -IHBow61h 106983 -5as= 106984 -2Kfarw== 106985 -IOmi 106986 -INmG2YHYsQ== 106987 -INis2KfZhg== 106988 -IHlhcw== 106989 -0LbQtdC90LjRjw== 106990 -INC70YPRh9GI0LU= 106991 -IOe6 106992 -INC80L7QvQ== 106993 -INiq2K4= 106994 -INi024w= 106995 -INC90LXQutC+0YLQvtGA 106996 -0LDQu9GM0L3Ri9C1 106997 -IG9iY2hvZA== 106998 -IO2VqOq7mA== 106999 -IHJpw6puZw== 107000 -44GV44KM44KL 107001 -0L7QutGD 107002 -INCh0KjQkA== 107003 -66eB 107004 -IE7hur91 107005 -IEHEnw== 107006 -INC00LLQtdGA 107007 -4KWL4KS3 107008 -IGtoaeG6v24= 107009 -0L3QtdCz0L4= 107010 -7LGF 107011 -4Lix4LiV4Lij 107012 -bWFsxLE= 107013 -INmK2Kc= 107014 -56eR5oqA 107015 -4Li34LiZ 107016 -4Lir4Lih4Liy4Lii 107017 -INiu2LU= 107018 -5Yac 107019 -w61tZQ== 107020 -INGN0YLQvtC5 107021 -IOyXhQ== 107022 -IOS5 107023 -5Lyv 107024 -J8K0 107025 -2YXZitmE 107026 -4Lit4LiH4LiE 107027 -a292w6E= 107028 -6L+Z5LmI 107029 -44CC5oiR 107030 -7JeQ7ISc64qU 107031 -IOyaqQ== 107032 -67mE7Iqk 107033 -IOymnQ== 107034 -SVRURQ== 107035 -IOuqqOuToA== 107036 -IHNwb2xlxI1ub3N0aQ== 107037 -INCy0LjQug== 107038 -IHTFmcOt 107039 -6bM= 107040 -INiu24w= 107041 -IHBvxb4= 107042 -INC40LzQtdC10YI= 107043 -IGTEm3Q= 107044 -INmF2K/ZhA== 107045 -INC80L4= 107046 -5Y2P 107047 -ZW7DrW0= 107048 -6Yk= 107049 -2KfYuA== 107050 -IHRlxZ8= 107051 -IHZlxZllag== 107052 -TElD 107053 -7KeA64qU 107054 -0YvQstCw0Y7Rgg== 107055 -INC+0YDQs9Cw0L3Rlg== 107056 -bsOtbWk= 107057 -zrjOrQ== 107058 -44Kv44Op 107059 -44O844Oz 107060 -0LvQuNGB0Y8= 107061 -aW1kaQ== 107062 -5oY= 107063 -77qO 107064 -IOyatOyYgQ== 107065 -zrrOsc69 107066 -IOuztQ== 107067 -INCG0L0= 107068 -cGxpY2F0aW9u 107069 -dGFo 107070 -INCQ0LI= 107071 -IGPhu5luZw== 107072 -0LDQu9GM0L3QvtGX 107073 -INiv2YjYsdmH 107074 -4KWN4KSw4KSv 107075 -INiu2Yg= 107076 -INCy0YDQsA== 107077 -2KXZhg== 107078 -6IKJ 107079 -IG95bg== 107080 -IFTGsA== 107081 -INmH2YXYp9mG 107082 -INCx0ZbQu9GM0YjQtQ== 107083 -5oyv 107084 -2KfZhdip 107085 -5bqr 107086 -INGA0LXQtg== 107087 -INiv2KfYsdmG2K8= 107088 -0YDQuNC5 107089 -IOaM 107090 -IHNvbnXDpw== 107091 -IHThuqM= 107092 -4Lix4LiH4LiE 107093 -67Cb 107094 -INC80L7QvA== 107095 -0LLQuNGH0LDQuQ== 107096 -LuC4hA== 107097 -IOCkhuCkiA== 107098 -5YGH 107099 -IHBvc2t5dA== 107100 -INGB0YPQvw== 107101 -xLF5b3JkdQ== 107102 -0LDQu9C1 107103 -0LjRhg== 107104 -IM64zq0= 107105 -44KH44GG 107106 -INGB0LLQvtC5 107107 -4Lih4LiZ 107108 -IG7hu69h 107109 -dm/FmQ== 107110 -2KfYs9mK 107111 -6ZKx 107112 -44GX44Gm44GE44Gf 107113 -IMSR4bqneQ== 107114 -2KfZitix 107115 -IGFyYcWfdMSxcg== 107116 -7KM= 107117 -44Go44Gv 107118 -INGB0L/QvtGA 107119 -IOqwgOyepQ== 107120 -6LyJ 107121 -4pah 107122 -IOyZhA== 107123 -0L7RgNCw0Y8= 107124 -z4HOtc6v 107125 -INGN0YLQsA== 107126 -66m07KCB 107127 -7J207Iqk 107128 -5L2z 107129 -5pma 107130 -IGt2YWw= 107131 -IG7hu5Vp 107132 -0YLQsNC80Lg= 107133 -INC/0L7Qu9GW0YLQuA== 107134 -IMSwbmc= 107135 -0L3RltGB0YLRjg== 107136 -IOC5gOC4gQ== 107137 -IOuvvA== 107138 -6JQ= 107139 -z4HOr86x 107140 -5o6I 107141 -IOeC 107142 -INmG2YXYp9uM 107143 -IOyeoQ== 107144 -5p62 107145 -2KfYqNmC 107146 -0YHQvtC9 107147 -0LXQvdC90L7Qs9C+ 107148 -INmF24zZhNuM 107149 -IGt1cnVt 107150 -4LmM4Liq 107151 -IOy0nQ== 107152 -IG7Em2tvbGlr 107153 -INmA 107154 -INC30LDRgdGC0L7RgQ== 107155 -4LiU4LiZ 107156 -2YbYr9in2YY= 107157 -IEphcA== 107158 -6YOh 107159 -4KWN4KSt 107160 -IOC5gOC4ig== 107161 -IOKAqw== 107162 -6aOe 107163 -b3ZhdGVs 107164 -INGH0LDRgdGC0Yw= 107165 -IGLhu5U= 107166 -44Kv44Oq 107167 -4Li04LmM 107168 -INCy0LjQtNC1 107169 -dmFpbA== 107170 -zIk= 107171 -xJ9pbmRl 107172 -44Go44KC 107173 -4oCM2qnZhtiv 107174 -IOuFhA== 107175 -INin2YLYqti1 107176 -772X 107177 -z4HOuc+D 107178 -0LfQtA== 107179 -6Jm9 107180 -IHRob+G6oWk= 107181 -INmI2LI= 107182 -IG3DrXQ= 107183 -INGF0L7Qu9C+0LQ= 107184 -INC60YPQvw== 107185 -0LDQvdC40YU= 107186 -IG5ow6xu 107187 -44GL44Gq 107188 -INCa0L7QvA== 107189 -z4TOtc+B 107190 -77yM5Y+q 107191 -IG9sdXA= 107192 -IGjhu49p 107193 -65E= 107194 -IG7Em2t0ZXI= 107195 -aXPDrQ== 107196 -INCy0LjQutC+0YDQuNGB0YLQvtCy 107197 -7J6h 107198 -IOCkleCksg== 107199 -IOycoOyggA== 107200 -INC/0YDQuNCx 107201 -6Ium 107202 -INC80L7Qsg== 107203 -IOC4q+C4mQ== 107204 -65CY64qU 107205 -0L7QutC+ 107206 -INC+0LHQtdGB0L8= 107207 -IGtleg== 107208 -0LvRj9GF 107209 -INC/0YDQvtC40YE= 107210 -INC/0L7QstC40L0= 107211 -INCa0L7RgA== 107212 -7LyA 107213 -INGB0Lg= 107214 -IOS5iw== 107215 -IOKAlAo= 107216 -0YHRg9GC0YHRgtCy 107217 -57A= 107218 -IOCkoA== 107219 -0L3QsNGC 107220 -IHN1eQ== 107221 -INGB0Ys= 107222 -INmG2LTYp9mG 107223 -INC90LDQv9GA0LDQsg== 107224 -INGG0YzQvtC80YM= 107225 -5piv5LiA 107226 -IG3DvG0= 107227 -0ZTQvNC+ 107228 -INin2LPZhNin2YXbjA== 107229 -IHphbWFuZGE= 107230 -2YjZhdin2YY= 107231 -2KfZhNit 107232 -xaF0xJtuw60= 107233 -INCa0LDQug== 107234 -pO2UhA== 107235 -INm+2LHYrw== 107236 -Q8OhYw== 107237 -zrXOuc6x 107238 -INis2Yg= 107239 -IMSRb+G6oW4= 107240 -IOCkh+CkpA== 107241 -INC30LDQvQ== 107242 -INmF2YbYt9mC2Yc= 107243 -INmF2LnZhA== 107244 -IGRva29u 107245 -5ZC4 107246 -aWNrb3U= 107247 -5bCB 107248 -INC60LjRgQ== 107249 -4Lix4LiH4Lir4Lin 107250 -aXNwZWNpZXM= 107251 -INC90LDQv9GA0Y8= 107252 -5rqW 107253 -IOCknOCksg== 107254 -4LmA4LiJ 107255 -TEFS 107256 -INGD0YHQu9C+0LLQuNGP 107257 -IFdpa2lzcGVjaWVz 107258 -4Lij4Liw4LiU 107259 -IG1leQ== 107260 -44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 107261 -4LmH4LiI 107262 -5b6S 107263 -dGFjaA== 107264 -dW11eg== 107265 -zrrOtw== 107266 -w4o= 107267 -IMO8bg== 107268 -IEJJVFRF 107269 -INmF2LHYqNi5 107270 -44K344Ol 107271 -4KS/4KS44KSV 107272 -2LfZiNix 107273 -INCy0L7RgQ== 107274 -776f 107275 -IHlhecSxbg== 107276 -44GL44KK 107277 -0LvQuNGP 107278 -INC/0YDQuNC9 107279 -kW5n 107280 -INmG2K4= 107281 -IGx6ZQ== 107282 -4KWN4KS34KSj 107283 -INCx0L4= 107284 -IOq4gA== 107285 -IGdlbGnFn3Rpcg== 107286 -4Lib4Lij4Liw4LiK 107287 -5b2h 107288 -IOOCqg== 107289 -44GI44Gm 107290 -0L3Rg9GC0Yw= 107291 -IOe9 107292 -INC80LDQsw== 107293 -44Gr44Gk 107294 -0L3QvtGB0YLQtdC5 107295 -INmE2Yo= 107296 -5oCq 107297 -0Y/RgtGB0Y8= 107298 -4LiR 107299 -4KS/4KSv4KSu 107300 -IOOAjg== 107301 -0YDRjA== 107302 -IG3huqFuZw== 107303 -dMSxbQ== 107304 -INC/0LXRgNC40L7QtA== 107305 -0L7Qs9GD 107306 -INC60L7RgtC+0YDQsNGP 107307 -66as6rCA 107308 -IOOFoQ== 107309 -INis2KfbjA== 107310 -INC/0L7RgtGA0ZbQsQ== 107311 -xaFlbg== 107312 -4Lit4Liw 107313 -2KjYuQ== 107314 -2J8K 107315 -IOuwqeuylQ== 107316 -INCz0L7RgNC+0LQ= 107317 -INCY0L0= 107318 -INC+0LrQsNC3 107319 -2LHZiNiy 107320 -IGlsacWfaw== 107321 -5a6j 107322 -Zm9ybWFu 107323 -YWRhxZ8= 107324 -2YrZhNip 107325 -INCa0LDRgA== 107326 -IG3huqV0 107327 -5oWL 107328 -0LzQvw== 107329 -4LmC4LiZ 107330 -INit2YLZiNmC 107331 -INC00L3Rjw== 107332 -IOuSpA== 107333 -4KS+4KSV4KSw 107334 -7LKY65+8 107335 -4oCM2KI= 107336 -aGFuZ2k= 107337 -6KGM5pS/ 107338 -YWxpeWV0 107339 -IOyynA== 107340 -IFlhcA== 107341 -4LmC4Lij4LiH 107342 -7KeA64W4 107343 -2Y7ZkQ== 107344 -zpHOmQ== 107345 -w6FuYQ== 107346 -YW5kxLFy 107347 -4Lij4Liw4Lia4Lia 107348 -b8SfbHU= 107349 -4Liy4LiI4Liw 107350 -4bqpeQ== 107351 -2KfZiNmE 107352 -INC80LDRgtC10YDRlg== 107353 -zp/OnQ== 107354 -IGluZm9ybWFjZQ== 107355 -2KrYuQ== 107356 -4Lia4LiZ 107357 -IMSMZXNrw6k= 107358 -IHRlbWVs 107359 -Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo= 107360 -IGNoaWE= 107361 -LdGB 107362 -0L3QtdGA0LM= 107363 -IOywvg== 107364 -0YDQuNC0 107365 -0LvQvtGB0Yw= 107366 -2LLZhA== 107367 -6rCA64qU 107368 -YW7DqQ== 107369 -INC90LDQstGW0YLRjA== 107370 -5LiT5Lia 107371 -IOqyveq4sA== 107372 -IHDFmWV2 107373 -0LXRgtC4 107374 -IO2UjA== 107375 -0L3Rj9GC 107376 -4KWB4KS2 107377 -0LvRjtC0 107378 -0LLQuNGJ 107379 -5bC+ 107380 -55qE5LqL 107381 -IOuQnA== 107382 -2LHZiNmB 107383 -IOWlsw== 107384 -zrrOrg== 107385 -IFR1eQ== 107386 -IOqyg+ydhA== 107387 -IGJ1bnU= 107388 -INGA0LDQt9C70LjRhw== 107389 -IETDvG4= 107390 -44Kt44Oj 107391 -0YDRg9GB 107392 -INC80Lw= 107393 -bG92ZW4= 107394 -IG90ZXY= 107395 -bm9sb2o= 107396 -RVPEsA== 107397 -w7xw 107398 -IOiC 107399 -zrnOus+Mz4I= 107400 -2LbYp9ih 107401 -INC/0LXRhw== 107402 -xZnDrWtsYWQ= 107403 -44GT44KN 107404 -xaF0w60= 107405 -INio2LHarw== 107406 -44GM44GC44KL 107407 -0ZbRgdGC 107408 -4KWJ4KSV 107409 -z4DOtw== 107410 -INin2YTZhdiz2Ko= 107411 -INC30LDQuQ== 107412 -IGNoxrDGoW5n 107413 -0L7RgtGD 107414 -INCh0LDQvA== 107415 -xaFldA== 107416 -IOyeiOyXiA== 107417 -INmB2KfYsQ== 107418 -0ZbQvtC9 107419 -44OX44Ot 107420 -IG5oaeG7h3Q= 107421 -aW5pemk= 107422 -IGNvxb4= 107423 -IOCkhuCkqA== 107424 -IHN5c3TDqW0= 107425 -2LHZiNi5 107426 -YXlldA== 107427 -INmB2LHZh9mG2q8= 107428 -IOi2 107429 -6IG3 107430 -6KeC55yL 107431 -0L3QvtC6 107432 -4LiQ4Liy4LiZ 107433 -6rWQ7Jyh 107434 -a2xh 107435 -44KB44Gm 107436 -zpXOmQ== 107437 -5Z2X 107438 -IHNrdXRlxI0= 107439 -4KWC4KSc 107440 -44GR44Gm 107441 -TkdD 107442 -IOWA 107443 -INGA0L7Qt9C/ 107444 -bsOta8Wv 107445 -44Oz44K5 107446 -INCS0LXRgA== 107447 -IHnDvHpkZQ== 107448 -IOuvuOq1rQ== 107449 -INmF2Yk= 107450 -0LTQtdGA 107451 -0LDQstCw 107452 -IG1lcmtleg== 107453 -jW5n 107454 -IOyCvA== 107455 -INGA0L7QsdC+0YLQuA== 107456 -INC90YzQvtCz0L4= 107457 -INC10LrQvtC90L7QvA== 107458 -INGH0LXQu9C+0LLQtdC60LA= 107459 -IOC4nuC4o+C4sA== 107460 -44OS 107461 -44Gj44Gm44GE 107462 -5LyX 107463 -INC/0YDQvtC00YPQutGC 107464 -IHlhbsSx 107465 -4KWA4KS14KSo 107466 -IGPhuq1w 107467 -IEF2cnVwYQ== 107468 -4KS+4KSt 107469 -IOyghOyaqQ== 107470 -5pWj 107471 -IOychO2VnA== 107472 -0YXQvtC00LjRgtGM 107473 -IHPEsW7EsXI= 107474 -w7xjcmV0 107475 -c3V6 107476 -5qiC 107477 -IOywvQ== 107478 -z4HOr86/z4U= 107479 -5Yia 107480 -2K7ZhA== 107481 -66CH6rKM 107482 -2KzYrw== 107483 -IM68zrHPgg== 107484 -4bqtbQ== 107485 -a2FyYQ== 107486 -44Kr44O8 107487 -IGt0ZXJvdQ== 107488 -7Juo 107489 -0YTQuNGG0Lg= 107490 -b8SfcmFm 107491 -INC90LDQv9GA0Lg= 107492 -44GR44Gp 107493 -IOma 107494 -2KrYqNin2YQ= 107495 -65+9 107496 -7JSo 107497 -7YyM7J28 107498 -z4fOsQ== 107499 -IHV6YWs= 107500 -IGTDsm5n 107501 -INCz0L7Qu9C+0YE= 107502 -z4PPhM6u 107503 -zrnOuw== 107504 -2LfZgQ== 107505 -IOq3uOuFgA== 107506 -44K/44Kk 107507 -2KfZhtqv 107508 -aW5vdQ== 107509 -0LvQvtC9 107510 -4LmH4Lih 107511 -IOCkrOCkpg== 107512 -IGtvbnVzdW5kYQ== 107513 -IG7Dom5n 107514 -44G+44Gb44KT 107515 -0YPRjtGC0YzRgdGP 107516 -5Z+5 107517 -0LXQvdC60L4= 107518 -7KCR 107519 -INGC0L7Qsg== 107520 -IHTFmWViYQ== 107521 -2LLYp9mG 107522 -aXN5b24= 107523 -INCz0LXQvQ== 107524 -IFBva3Vk 107525 -4oCM2KfZhtiv 107526 -INCz0YDRg9C0 107527 -INiu2LHbjNiv 107528 -zrvOu86x 107529 -IHDFmcOtbQ== 107530 -IOazlQ== 107531 -INiy2YbYr9qv24w= 107532 -4bqhcA== 107533 -IO2KuA== 107534 -IMSR4buZYw== 107535 -IOq3uOumrOqzoA== 107536 -0L3QuNC3 107537 -INmK2YI= 107538 -bGHFn3TEsXI= 107539 -INC/0YDQsNCy0L4= 107540 -0YPRgdC6 107541 -5bC9 107542 -IOCkquCkoQ== 107543 -6ZOB 107544 -IOy3qA== 107545 -INin2YTYqNmK 107546 -wrg= 107547 -4Li04Lih4Lie 107548 -IHN2xJs= 107549 -INCx0LDQuw== 107550 -IG3DtG4= 107551 -IEThu68= 107552 -INi02K/Zhg== 107553 -INmB2YQ= 107554 -IHZ6bmlr 107555 -IGNo4bup 107556 -INGB0YLRgNGD0LrRgtGD 107557 -57ij 107558 -IEhvYQ== 107559 -7YyA 107560 -INGA0ZbRiA== 107561 -INCy0L7Qt9C00YM= 107562 -0L7Qu9GM0Yg= 107563 -zr/Phc68zrU= 107564 -4Li54LiZ 107565 -INC/0YDQuNC0 107566 -aWxtZWs= 107567 -INin2YTZgtix 107568 -jJM= 107569 -IHXDpw== 107570 -5aiY 107571 -ZWNla3Rpcg== 107572 -IO2FjA== 107573 -IM61z4U= 107574 -IGjDsmE= 107575 -z4HPhQ== 107576 -4Li24LiB4Lip4Liy 107577 -INGC0LXRhdC90L7Qu9C+0LM= 107578 -w7pp 107579 -IGJpbGdpbGVy 107580 -INmC2KfZhA== 107581 -ZWRs 107582 -em7DoW0= 107583 -w6FseQ== 107584 -5bqU6K+l 107585 -0LDQu9GM0L3QuNC5 107586 -0LDRgtC10LvRjw== 107587 -4LiZ4Lin4LiZ 107588 -INCf0L7Quw== 107589 -4Lie4LiZ 107590 -56S8 107591 -IHRhc2Fy 107592 -INGC0L7QuQ== 107593 -INC80LXRgdGP 107594 -INC40YHQug== 107595 -IOCkquCkpg== 107596 -zrPOrg== 107597 -2KfYrtiq2Yc= 107598 -6L+Z6YeM 107599 -IGNo4buJbmg= 107600 -INmC2LPZhQ== 107601 -2Y7Zhw== 107602 -ZXJsaQ== 107603 -5Zu96ZmF 107604 -aWxpeW9y 107605 -INi02YfYsdiz2KrYp9mG 107606 -IHZlbGs= 107607 -5Zu6 107608 -INCx0ZbQu9GM0Yg= 107609 -44O844OX 107610 -5p+Q 107611 -7Kec 107612 -IMSMUg== 107613 -INC00LXQug== 107614 -2LHYqNuM 107615 -0L7QstC40Yc= 107616 -IGthcHNhbQ== 107617 -INmE2KM= 107618 -INCw0L3RgtC4 107619 -IMO8Y3JldA== 107620 -6rKs 107621 -0L7RgNC+0LY= 107622 -24zZhduM 107623 -6KmV 107624 -IOunng== 107625 -INGA0Y/QtA== 107626 -INmH2YXYsdin2Yc= 107627 -w6Jy 107628 -2KfYqNiq 107629 -INC40YHQv9C+0LvRjNC30L7QstCw0YLRjA== 107630 -0LrRgQ== 107631 -4omh 107632 -IG9sYXk= 107633 -6I2v 107634 -IG9wcmF2 107635 -INiv2LHYqNin2LHZhw== 107636 -IOS4reWbvQ== 107637 -0LjQu9GB0Y8= 107638 -5Y2r 107639 -INin2YTYp9iz2Ko= 107640 -2YjbjNuM 107641 -0YDQtdGI 107642 -INmG2LM= 107643 -44CC5Zyo 107644 -INmE2K0= 107645 -IGtvcnVu 107646 -INmB2LHYrw== 107647 -INC+0LHQvtGA 107648 -0LXRiNGM 107649 -IHBvZG3DrW4= 107650 -IOusuOygnA== 107651 -IGRlxJ9lcmxlbmRpcg== 107652 -5LiN5ZCM 107653 -5ray 107654 -4KS+4KS54KSw 107655 -7ZqN 107656 -4KWN4KSg 107657 -0LjRgtC40YHRjw== 107658 -2KfZhNi5 107659 -IGR2xJs= 107660 -INC/0LXRgNC10Lo= 107661 -IOWFgw== 107662 -IGFyYXM= 107663 -IGFsdMSxbmRh 107664 -INCy0LfQsA== 107665 -5pKD 107666 -IG1pbHlvbg== 107667 -IOWtpg== 107668 -INCy0LDRgNC4 107669 -INin2YTYudin2YTZhQ== 107670 -J9GP 107671 -2YjbjNiz 107672 -INC80L7QttGD0YLRjA== 107673 -44GR44Gf 107674 -7J207JeI64uk 107675 -zr/Pjc69 107676 -IOmf 107677 -IHBvc3R1cA== 107678 -w7x5w7xr 107679 -5YiK 107680 -INmC2Kg= 107681 -INin2LXZhNuM 107682 -2YjZiQ== 107683 -IHJlcHVibGlr 107684 -INCZ 107685 -gW0= 107686 -INCx0LXQuw== 107687 -4KS+LQ== 107688 -0YHQutC+0LU= 107689 -IGN14buRaQ== 107690 -6LK3 107691 -4Li14Lii4Lin 107692 -6YeN6KaB 107693 -4Li54Lih 107694 -INGA0L7Qt9Cy0LjRgtC60YM= 107695 -IOuwsQ== 107696 -5YO5 107697 -IOWJjQ== 107698 -4LmE4LiL 107699 -44CM4oCm4oCm 107700 -4KWM4KSk 107701 -2qnYsdiv 107702 -IHphxZnDrXplbsOt 107703 -4Liq4Liy4Lij 107704 -IGxldGVjaA== 107705 -bGVtZWs= 107706 -5Lq644Gu 107707 -IGTGsOG7oW5n 107708 -2KrZgg== 107709 -IOWT 107710 -5YW7 107711 -IOuPhQ== 107712 -IOujqA== 107713 -2LDZhNmD 107714 -IOydvOuzuA== 107715 -IEF5csSxY2E= 107716 -INm+2pg= 107717 -aXNpbmlu 107718 -IOyLtg== 107719 -2q/bjNix24w= 107720 -2K7Ytdi1 107721 -s+e0sA== 107722 -INC80LDRgtC10YDQuNCw0Ls= 107723 -a292w6k= 107724 -66eJ 107725 -44GV44Gb 107726 -INGC0LDQutC+0Lk= 107727 -IHRy4bqtbg== 107728 -INC70LjRhg== 107729 -IOWbmw== 107730 -0YfRgw== 107731 -IOawtA== 107732 -IGRvbGF5 107733 -5b25 107734 -0YDQuNCy0LA= 107735 -INCz0YDRg9C/0L8= 107736 -IG3DvG1rw7xu 107737 -0LvQtdC90LA= 107738 -652864qU 107739 -5Yip55So 107740 -IHJhaGF0 107741 -77yP77yP77yP77yP 107742 -5oGp 107743 -IO2VrQ== 107744 -IO2S 107745 -IOyKuQ== 107746 -IGNow6Ju 107747 -IOOCqA== 107748 -INC20LjQt9C90Lg= 107749 -55aR 107750 -44CC5LuW 107751 -66as7Iqk 107752 -0YfQuNGF 107753 -IOmmlg== 107754 -xJty 107755 -INC50L7QvNGD 107756 -IHRo4bqtdA== 107757 -IOyVng== 107758 -Y2lo 107759 -2LPZhNin2YU= 107760 -IHNpeWFz 107761 -IO2WiA== 107762 -INC60L7RiA== 107763 -z4POsc69 107764 -2YrYp9mG 107765 -IGTDtg== 107766 -4KS+4KS54KSk 107767 -0L7RgNC+0LQ= 107768 -0L7QstCw0Y8= 107769 -0YbQuNC+0L3QsNC70Yw= 107770 -2KfYptmH 107771 -IOCkluCksA== 107772 -IMSR4budaQ== 107773 -5LiN5Lya 107774 -2YPYsg== 107775 -4Li14LiE4Lin4Liy4Lih 107776 -bMSxeW9y 107777 -4KWL4KSm 107778 -IOy2qQ== 107779 -IGPhu5E= 107780 -4LmC4LiV 107781 -IM61z4DOrw== 107782 -INC/0YDRj9C8 107783 -5rOw 107784 -2KfZhNip 107785 -asOtbQ== 107786 -INCx0Lg= 107787 -xaFlbQ== 107788 -IEjhu5lp 107789 -4LiE4Lij4LiH 107790 -IGh1eeG7h24= 107791 -56+A 107792 -bGnFoQ== 107793 -INis2YfYqg== 107794 -56eL 107795 -INGG0LXQuw== 107796 -INC70ZbRgg== 107797 -IOa3 107798 -0LbRgw== 107799 -44GI44Gf 107800 -67SJ 107801 -IOuouA== 107802 -5aC05ZCI 107803 -6Z2p 107804 -44Oq44Oz 107805 -0LXQs9C00LA= 107806 -IGJlbmlt 107807 -55uf 107808 -44Gu5Lit 107809 -5Z2Q 107810 -IMOcbml2ZXJzaXRlc2k= 107811 -IGtvxZ8= 107812 -INC/0L7Qtg== 107813 -aeG7h3A= 107814 -IHDFmWlq 107815 -656o 107816 -INin2YTYo9iz 107817 -w6FybsOt 107818 -aeG6v20= 107819 -IOiK 107820 -IM60zrU= 107821 -5aix5LmQ 107822 -IMawdQ== 107823 -IOeEoQ== 107824 -INCz0YDQuA== 107825 -INC/0L7RjdGC0L7QvNGD 107826 -IMSRw7NuZw== 107827 -2KzYp9mG 107828 -IG5naGnDqm4= 107829 -INin2YTYp9mG 107830 -0YjQtdC5 107831 -4LmB4Lij4LiB 107832 -INqG2YfYp9ix 107833 -0Y7RidC40Lk= 107834 -z4zPgQ== 107835 -INix2YU= 107836 -7LKg 107837 -INiv2LPYqtqv2KfZhw== 107838 -INiv24zYrw== 107839 -44OD44Kv44K5 107840 -4KS+4KSu4KSo 107841 -IFRow6BuaA== 107842 -IHRo4bqpbQ== 107843 -IGPDoG5n 107844 -IGTDtm7DvMWf 107845 -INC/0YDQuNCz0L7RgtC+0LI= 107846 -IGtpxZ9p 107847 -2K3Yqg== 107848 -IOuylQ== 107849 -6aOb 107850 -IGl0aWJhcg== 107851 -INCz0LvQsNCy 107852 -IG9ydGFt 107853 -IG1hZGQ= 107854 -INC+0YHRgtCw0LI= 107855 -INmB2YjYqtio2KfZhA== 107856 -IGFubGHFnw== 107857 -bGV5ZW4= 107858 -57SA 107859 -IOmj 107860 -L2xv 107861 -2YXZiNmE 107862 -INC00YPRhQ== 107863 -INmE2Kg= 107864 -0LvQtdCz 107865 -IGfDtm5kZXI= 107866 -2YrYtw== 107867 -IOC4quC4sw== 107868 -IHbDoXM= 107869 -INCf0LXRgg== 107870 -0LDQu9C+0YHRjw== 107871 -7L+g 107872 -6Zm9 107873 -5Zau 107874 -6Iie 107875 -0L3Rg9C7 107876 -xJ9pbmU= 107877 -IGdoaQ== 107878 -IOe1 107879 -2YrZhtmK 107880 -xb0= 107881 -IGjDvGvDvG0= 107882 -IETEscWf 107883 -IM6tz4fOtc65 107884 -INGB0LrQsA== 107885 -INGC0LjQvA== 107886 -INC/0L7RgdGC0LDQsg== 107887 -4LiZ4Liy4LiU 107888 -ZMO8bA== 107889 -IGR2YQ== 107890 -IOC4hOC4mQ== 107891 -IGNo4buLdQ== 107892 -IOiP 107893 -4LmB4Liq4LiU4LiH 107894 -5rCj 107895 -IO2IrA== 107896 -INGH0LjQvQ== 107897 -44Gr44GK 107898 -0LXQvdC90L7RgdGC0Lg= 107899 -0JDQnQ== 107900 -IGhlbWVu 107901 -IGFpdA== 107902 -IOCkig== 107903 -5omn 107904 -IEFCRA== 107905 -IM66zrHOuA== 107906 -5rSb 107907 -44Ki44Or 107908 -4LmJ4Liy4LiX 107909 -xZlleg== 107910 -ZMSbamk= 107911 -IHThu4tjaA== 107912 -0LXQvdC90Y/QvA== 107913 -INCy0YHRgtCw0L3QvtCy 107914 -INin2YTYqNix 107915 -2YjZhdiq2LE= 107916 -a8OhY2g= 107917 -5bqK 107918 -0LvRg9C2 107919 -INiq2K8= 107920 -5Li9 107921 -2LHYrg== 107922 -4KSC4KSW 107923 -6Ieq5bex55qE 107924 -5a6Y572R 107925 -LdGP 107926 -4LmH4LiU 107927 -6ISa 107928 -IOeV 107929 -IGnDp2VyaXNpbmRl 107930 -IGJp4buDbg== 107931 -IOC4geC4pQ== 107932 -IHlhxJ8= 107933 -IOa0 107934 -INCx0YDQsA== 107935 -2LnYp9ix 107936 -5oiw 107937 -4KWACg== 107938 -IGzDqcSN 107939 -YWxhcsSxbg== 107940 -IM6W 107941 -0LDRgNGP 107942 -44Gd44KT44Gq 107943 -xYh1amU= 107944 -44CAIA== 107945 -IHNhxJ9sxLFr 107946 -INC00L7RgdC70ZbQtA== 107947 -w63FoQ== 107948 -4KWN4KSw4KS2 107949 -4KWJ4KSo 107950 -IGdp4bqj 107951 -2KjZiNin2LPYt9ip 107952 -5a6B 107953 -IHNvdWQ= 107954 -INC60YLQvg== 107955 -ZXNlbA== 107956 -INC/0LDQvA== 107957 -IMKgIA== 107958 -IMSNbG92 107959 -5re3 107960 -4Lir4LiN 107961 -IE9zbWFu 107962 -5qaC 107963 -IOWL 107964 -77yM5YW2 107965 -IOC4hOC4ow== 107966 -IG3hu4Ft 107967 -INGB0L7RgA== 107968 -54ax 107969 -IHRodcOq 107970 -2LHYrA== 107971 -4LmC4Lil4LiB 107972 -IO2VmOqzoA== 107973 -2YrYr9ip 107974 -IGHFn2HEn8Sx 107975 -IGvhu4M= 107976 -4LiV4Liz 107977 -zrvOtc65 107978 -55qE6K+d 107979 -5rGg 107980 -INGB0YLQtdC9 107981 -IGluY2Vs 107982 -5bqt 107983 -0YLQvtGH 107984 -IHByb2Jsw6lt 107985 -z4TPgw== 107986 -4LmJ4Lit4LiZ 107987 -67O064uk 107988 -IOCkhuCklw== 107989 -zr3Osc+C 107990 -44GE44KL 107991 -IGThu6Vj 107992 -IHRvaG90bw== 107993 -65CY7JeI64uk 107994 -VEo= 107995 -INCy0LjQt9C90LDRhw== 107996 -IEJ1bnVu 107997 -4KSC4KSs4KSw 107998 -INmH2YXahtmG24zZhg== 107999 -INCx0Y7QtNC2 108000 -0YPRgNCz 108001 -5Lqu 108002 -IM68zrXOsw== 108003 -IHRvcGx1bQ== 108004 -44Gj44E= 108005 -0L7RgtC+ 108006 -Onw= 108007 -6Z2e5bi4 108008 -4Li04LiX4LiY 108009 -6YGV 108010 -4oCM2b7Yr9uM 108011 -INC30YDQvtCx 108012 -4LmM4LiU 108013 -INC00L7Qu9C20LXQvQ== 108014 -IG3Em3N0YQ== 108015 -24zYtNmH 108016 -dmF0ZWw= 108017 -IHByb3Zveg== 108018 -IGluYW4= 108019 -4KSC4KSq 108020 -IHBhcsOn 108021 -0YDQsNGB0YI= 108022 -w7xtw7w= 108023 -IGdp4buRbmc= 108024 -5qyi 108025 -2KvZitix 108026 -IEJha2Fu 108027 -IOKIqA== 108028 -INio2KfZhg== 108029 -27HbuA== 108030 -44KC44GG 108031 -bGFuZMSx 108032 -IHllbmlkZW4= 108033 -0YbQtdC90YI= 108034 -INC00LXRj9GC0LXQu9GM 108035 -0Kk= 108036 -IHJvdg== 108037 -5a6M5YWo 108038 -IEvhu7M= 108039 -c2x1 108040 -IGzhuqV5 108041 -6aSQ 108042 -INGH0L7Qu9C+0LI= 108043 -5Lyd 108044 -IGJhxZ92 108045 -5bCI 108046 -6rOh 108047 -44CB44Gd44KM 108048 -IFDFmcOt 108049 -0LTQtdC8 108050 -INC/0YDQvtC10Lo= 108051 -4Lij4LiW 108052 -5bu66K6+ 108053 -INC80L7QttC70LjQsg== 108054 -5q66 108055 -44Gh44KD44KT 108056 -5pWR 108057 -IMSNdHk= 108058 -6aaG 108059 -0L7RgNGD 108060 -IOaE 108061 -IGvDrWNo 108062 -zrvOv8+F 108063 -44GE44Gk 108064 -IGPEg24= 108065 -4bq1 108066 -IGVsZGU= 108067 -6bq7 108068 -xJ9l 108069 -IGRvYsSb 108070 -4KS+4KSv4KSw 108071 -IOODjw== 108072 -0L3QtdC9 108073 -IG3Fr8W+ZXRl 108074 -INC90LDRgdGC0YPQvw== 108075 -7Iuc6rCE 108076 -INGB0LjQvNC/0YLQvtC8 108077 -IM+Dz40= 108078 -INiz2YQ= 108079 -zrXOug== 108080 -4Lij4LiT 108081 -w6F0ZQ== 108082 -ZWtsZXI= 108083 -INCy0YDQtdC80LXQvdC4 108084 -4oCM2YfYp9uM24w= 108085 -44GK44KK 108086 -0LbQuA== 108087 -0YvQstCw0LXRgtGB0Y8= 108088 -2YXYp9mG24w= 108089 -4LiV4Lil 108090 -INi12K8= 108091 -INCy0L7Quw== 108092 -7IqI 108093 -INmD2YXYpw== 108094 -IG5o4bqxbQ== 108095 -6IGv 108096 -b3ZhY8Ot 108097 -IOunjOuTpA== 108098 -2YjZvg== 108099 -IOu4jA== 108100 -2KjZitip 108101 -dXlsYQ== 108102 -0LvQtdC90L4= 108103 -6Iy2 108104 -0YDQtdC5 108105 -IGtsaQ== 108106 -IMO8emVyaW5kZW4= 108107 -0L3QtdGC 108108 -cmHEjQ== 108109 -INC/0YDQsNGG0Y4= 108110 -IGVkaXlvcg== 108111 -44GP44Gg 108112 -IMSNYXN0 108113 -aXlp 108114 -6YqA 108115 -IGTDuQ== 108116 -2Y7YqA== 108117 -2YjZitip 108118 -5ao= 108119 -IHPEsW7EsWY= 108120 -INiz2KfYudiq 108121 -IOC4o+C4suC4og== 108122 -INC30LDRj9Cy 108123 -IGfhurdw 108124 -4Lit4Lin 108125 -INir2YU= 108126 -IFrDoQ== 108127 -INCy0ZbQtNC6 108128 -aXppaw== 108129 -IG3Ds24= 108130 -INC/0L7QstGL0Yg= 108131 -IOC4muC4suC4lw== 108132 -INGB0LjQuw== 108133 -5oOF5aCx 108134 -wqB0 108135 -INCc0L7RgdC6 108136 -IOqyg+ydtOuLpA== 108137 -IOeQ 108138 -INmF2K/bjNix24zYqg== 108139 -0L7QstC+0Zc= 108140 -zqTOvw== 108141 -57qq 108142 -0L3RltGI0LU= 108143 -INCb0Y4= 108144 -zrfPg863 108145 -INmG2LPYqNiq 108146 -bXV6 108147 -4Lij4Lin 108148 -44CB44GC 108149 -INCx0L7Qu9C10Lc= 108150 -IHRyw6FjaA== 108151 -44Om 108152 -4LmA4LiC4Liy 108153 -IOq3uOuKlA== 108154 -2KjYsduM 108155 -5qCq 108156 -65287J20 108157 -IO2MqA== 108158 -7Yq5 108159 -nLQ= 108160 -4KS/4KSh 108161 -0YDQvtC80LU= 108162 -6K6y 108163 -INGC0L7QvQ== 108164 -0YHRlg== 108165 -IOeu 108166 -5Y+W44KK 108167 -7LCw 108168 -INmI2YTbjA== 108169 -INiz2LfYrQ== 108170 -6I+c 108171 -0L3QsNC80Lg= 108172 -VMO8cms= 108173 -5Y6C 108174 -IGZpbmFu 108175 -44Gr44Gq44KL 108176 -IG9ieQ== 108177 -VHJvbmc= 108178 -IHZ5cA== 108179 -4KWB4KSh 108180 -7J6Q6rCA 108181 -IOaJgA== 108182 -0JfQsA== 108183 -dW1sdQ== 108184 -65Od 108185 -INC80LXQvdGW 108186 -0L7Qu9C90LjRgtC10LvRjA== 108187 -IMO6xI1pbg== 108188 -IGJ1bnVu 108189 -INCg0L7RgdGB0LjQuA== 108190 -0LLRgdGP 108191 -INC90ZbQtg== 108192 -4Li04LiU4LiV 108193 -2LrYqQ== 108194 -xJo= 108195 -INiz2YU= 108196 -INCY0Lc= 108197 -4KWH4KSq 108198 -5aSn55qE 108199 -7Lmc 108200 -INC40YHRgg== 108201 -INC60L7QvdGB0YLRgNGD0Lo= 108202 -27Hbsg== 108203 -w6Js 108204 -INGI0LjRgA== 108205 -77yg 108206 -IGFydMSxaw== 108207 -5p+T 108208 -5Lmh 108209 -w610ZQ== 108210 -IE5o4bqtdA== 108211 -IM6Uzrc= 108212 -IMO2bMOn 108213 -6rW0 108214 -0L7Rj9C9 108215 -65Ox66Gd 108216 -IG5nw6Ju 108217 -INCx0YPQtNGM 108218 -zp/OoQ== 108219 -7LQ= 108220 -2YXZiNiv 108221 -zr3Ov869 108222 -zpXOnQ== 108223 -55Ge 108224 -IMWZZWs= 108225 -LeKAkA== 108226 -IE1lcms= 108227 -INC+0L/RgNC10LTQtdC7 108228 -z4HOuc69 108229 -0LvQsNCx 108230 -64Sk7JqU 108231 -INCx0LvQuNC3 108232 -IHBo4buRaQ== 108233 -INC00L7Qu9C20L3Riw== 108234 -INGN0LrRgdC/ 108235 -4Lia4LiX 108236 -4Lib4Lij4Liw4Liq 108237 -INm+2pjZiNmH 108238 -IO2VnOuLpA== 108239 -z4TOv8+N 108240 -2YfZhg== 108241 -INC00L7QtA== 108242 -IGthecSx 108243 -n4E= 108244 -0YHQuNGP 108245 -4KSC4KSk4KSw 108246 -IHBvZG5paw== 108247 -ZXZp 108248 -24zbjNix 108249 -0KLQsNC6 108250 -0LrQvtC/ 108251 -0L3QsNGF 108252 -2KfYs9mH 108253 -4LiT4LiR 108254 -IGtow6E= 108255 -IHlhcmF0 108256 -INin24zZhtqp2Yc= 108257 -2LfYqNmK 108258 -IHPEsXI= 108259 -INii2YXYsduM2qnYpw== 108260 -IOCkrOCksg== 108261 -a2HDpw== 108262 -IOWPrw== 108263 -IOWFtg== 108264 -LioqKg== 108265 -0LvRltC90L3Rjw== 108266 -5Lmx 108267 -b3E= 108268 -5qY= 108269 -44K8 108270 -IGbEsXI= 108271 -IGvDqg== 108272 -IOygnOqztQ== 108273 -IM+Dzrc= 108274 -0LDQvdGL 108275 -0L3QvtCy0LA= 108276 -4LiK4Liy4Lii 108277 -INi32YjZhA== 108278 -4KWI4KSv 108279 -IOy5nA== 108280 -7IK0 108281 -INC/0ZbQsg== 108282 -IGx14bqtbg== 108283 -IOCkieCkrg== 108284 -5bqD 108285 -4LmH4Lit4LiV 108286 -INiz2KfbjNiq 108287 -0LvRj9C9 108288 -IO2VhOyalA== 108289 -IGfDtnLDvGw= 108290 -INGC0LXRgNC40YLQvtGA 108291 -INmG2K0= 108292 -0LXQvNCw 108293 -IG1ub2g= 108294 -IOOBrw== 108295 -2LrZitix 108296 -INGB0LTQtdC70LDRgtGM 108297 -54G1 108298 -INCg0LDQtw== 108299 -INCz0LXRgA== 108300 -zrPOvM6x 108301 -7ZWY66m0 108302 -IGRlxJ9pxZ90aXI= 108303 -44Oz44OG 108304 -5biC5Zy6 108305 -5Liq5Lq6 108306 -7IOI 108307 -7Lmo 108308 -6Im6 108309 -2YLYqg== 108310 -INqv2LHZgdiq2Yc= 108311 -IOeOiw== 108312 -INin2YTYsNmH 108313 -zrvPhQ== 108314 -4KSc4KSw 108315 -INCy0L3QuNC8 108316 -66at 108317 -4Li04LiX 108318 -INi02KfZhw== 108319 -5oqV6LWE 108320 -5p2Q5paZ 108321 -INmG2YE= 108322 -6Kqs 108323 -5oqX 108324 -INCw0LE= 108325 -aXlldGk= 108326 -576F 108327 -0YDRltC3 108328 -IOC4quC4oQ== 108329 -aWPDrQ== 108330 -0LrRg9Cy0LDQvdC90Y8= 108331 -IOyVvA== 108332 -IOi9 108333 -4oCr 108334 -IM60zrnOrA== 108335 -INC00LXQvw== 108336 -44O844K/ 108337 -IG9iamV2 108338 -bcOpbmE= 108339 -IGJlbGc= 108340 -IOal 108341 -IG7hu4Fu 108342 -INCz0L7Quw== 108343 -IHBvc3Rhdg== 108344 -INiq2qk= 108345 -0Ks= 108346 -INC/0ZbQtNGC 108347 -INC+0YLQvdC+0Yg= 108348 -INC/0YDQuNCy 108349 -IOWfug== 108350 -INC90LDQu9C4 108351 -xa/Fvg== 108352 -IHlhdA== 108353 -xZ9h 108354 -z4TOrs+C 108355 -0YbQtdC8 108356 -5qyh5pWw 108357 -IGLDoA== 108358 -2YjZgw== 108359 -IO2UhOuhnA== 108360 -IFBow6Fw 108361 -IOq1sA== 108362 -6LOe 108363 -IG9jaHJhbg== 108364 -IGdlcmVraXI= 108365 -IO2a 108366 -4Lia4Lil 108367 -w6FtZQ== 108368 -INio24zYsQ== 108369 -4LiC4Liy4Lii 108370 -0L7QstCw0L3QuNC5 108371 -IG1vxb5uw6k= 108372 -4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 108373 -w6FsdQ== 108374 -0L3Rgg== 108375 -puaDhQ== 108376 -4LmB4Lij4Lih 108377 -INGE0ZbQvQ== 108378 -IMSww6c= 108379 -4LmI4Lit4Lii 108380 -6rKo 108381 -IGhlZGVm 108382 -INin2YTZhdi0 108383 -4LmJ4Liy4Lih 108384 -5a+E 108385 -IOuLtQ== 108386 -IMO0 108387 -0LvQsNGB0Y8= 108388 -xLBU 108389 -4LiU4Liz 108390 -IGhlcmhhbmdp 108391 -IGdlcmVrZW4= 108392 -0LXRgNC10LY= 108393 -2YjYqQ== 108394 -IHDFmWVzdA== 108395 -56eR5a2m 108396 -0L7RgdGC0LDRgg== 108397 -w7xuZGVu 108398 -5YyF5ous 108399 -INiv2YfYrw== 108400 -0YjQuNGB0Yw= 108401 -0L3QtdGA 108402 -0ZbQtNC+0Lw= 108403 -IGJpw6c= 108404 -7Iut 108405 -IGhvZG5vdA== 108406 -IHplbcSb 108407 -INin24zYrNin2K8= 108408 -IHlpbmU= 108409 -4KS/4KSj 108410 -INin2YTYqNmE 108411 -IE7Emw== 108412 -IHBvbG/Fvg== 108413 -6ZiF6K+7 108414 -5biB 108415 -5byf 108416 -zr7OtQ== 108417 -IE3hu5l0 108418 -56M= 108419 -27Hbs9u5 108420 -INii2LI= 108421 -44Ge 108422 -INC80LXRhQ== 108423 -4Lii4Lih 108424 -IOao 108425 -IG90dXI= 108426 -IGThuqd1 108427 -IOuLpOyatA== 108428 -54yr 108429 -IEPDsw== 108430 -IGxpZMOt 108431 -IGFya2FkYcWf 108432 -IM6xzrvOu86s 108433 -6aG7 108434 -INmH2YXbjNmG 108435 -6Lui 108436 -IOKXiw== 108437 -64+E66Gd 108438 -woM= 108439 -4oCM2LTYr9mH 108440 -INit2YrYqw== 108441 -IG5ow7Nt 108442 -z4PPhw== 108443 -INGC0YDQsNC90YHQvw== 108444 -IHRhbsSxbQ== 108445 -57SN 108446 -IGJhaGlz 108447 -5Li+ 108448 -INC40L3RhNC+0YDQvNCw 108449 -INGB0LvQvtC2 108450 -IGtyYWo= 108451 -INit2YQ= 108452 -IOODlg== 108453 -INmG2YLZhA== 108454 -INCg0L7Qtw== 108455 -IM6Rz4U= 108456 -bGFyZMSx 108457 -INm+2KfYsw== 108458 -IOyLnQ== 108459 -IOyghOyaqeuptOyggQ== 108460 -INin2YTYs9mK 108461 -2KjYp9i02K8= 108462 -4Lio4Liy4Liq4LiV4Lij 108463 -IGvDtnk= 108464 -IHJvaw== 108465 -IOyjvQ== 108466 -INGB0L7Qsw== 108467 -IGNow7o= 108468 -6Ziq 108469 -IMSNw6FzdGk= 108470 -INC30LLQtdGA 108471 -INC90LjQtw== 108472 -IMO2xJ9yZXQ= 108473 -IOODjg== 108474 -0L/QtQ== 108475 -55Kw 108476 -IOiq 108477 -2YjZhNmH 108478 -xLBN 108479 -L1JFQw== 108480 -5aGe 108481 -INCS0Lg= 108482 -L2xvb3Nl 108483 -INC/0L7RhQ== 108484 -IGdlbmnFnw== 108485 -IHRoaeG7h24= 108486 -dGnEn2k= 108487 -0YfQuNC1 108488 -0L7QvdC0 108489 -INC/0YDQuNGB 108490 -w6F6a3k= 108491 -IERldmxldA== 108492 -56aB 108493 -INCw0LM= 108494 -aWxlcmU= 108495 -0LjQvdC60YM= 108496 -IHZhcmTEsQ== 108497 -44CA44CA44CAIOOAgA== 108498 -IOuGkg== 108499 -4KSC4KSq4KSo 108500 -IMO2emVsbGlr 108501 -6Zqc 108502 -7Ja07ISc 108503 -2LHZitmD 108504 -2YjYqNuM 108505 -44Oz44OA 108506 -7Yyo 108507 -IOCkuOCkruCknQ== 108508 -776G776G776G776G 108509 -INmB2YY= 108510 -4KWd 108511 -IHV2ZWRlbg== 108512 -0YjQuNC80Lg= 108513 -IOC5gOC4pQ== 108514 -IOusuOydmA== 108515 -INit2LHZgQ== 108516 -INi52Kg= 108517 -44Os44OT 108518 -IOatow== 108519 -IOuYkOuKlA== 108520 -INqp2YbZhtiv2Yc= 108521 -IM6xz4XPhM+M 108522 -IOq4uA== 108523 -IGlmYWRl 108524 -IHlhcG1haw== 108525 -44OV44Kp 108526 -IG3hurk= 108527 -IHN0csOhbg== 108528 -IHN2b3U= 108529 -IHbFvmR5 108530 -IHRla3Jhcg== 108531 -4Li04LiN 108532 -IOyTsA== 108533 -b8SfdQ== 108534 -INqp24zZhA== 108535 -0LjQstGB0Y8= 108536 -IOunkO2WiOuLpA== 108537 -5Lid 108538 -4KSP4KS4 108539 -INGB0YLRgNCw0YU= 108540 -IHNvdcSNYXM= 108541 -IOq3uOufsA== 108542 -IG3DvMWf 108543 -zrvOv8+N 108544 -zrPPiQ== 108545 -IHTGsOG7n25n 108546 -IOW3pQ== 108547 -INin2LPZhQ== 108548 -0YDRltC8 108549 -4LmA4Lib4Lil 108550 -IMKgwqAgwqDCoA== 108551 -2YfYp9uM24w= 108552 -5a+6 108553 -INiz2LHbjA== 108554 -INC60LLQsNGA 108555 -INi02YXYp9ix2Yc= 108556 -INi12K0= 108557 -0L7RgdGC0LDQsg== 108558 -4KWo 108559 -IOC4hOC4p+C4suC4oQ== 108560 -7YOB 108561 -6YCC 108562 -2KjYrQ== 108563 -IGRlxJ9pxZ9paw== 108564 -6Yyy 108565 -0LXQtNC4 108566 -IG9rb2w= 108567 -INGB0L7Qvw== 108568 -IG9sbWF5YW4= 108569 -562R 108570 -27HbtA== 108571 -IGluY2x1 108572 -IOqyjOyehA== 108573 -24zYs9iq2YU= 108574 -IOep 108575 -INin2YTZiNmE2KfZitin2Ko= 108576 -aWxtZWt0ZWRpcg== 108577 -w4w= 108578 -2Y7YuQ== 108579 -IGHEn8Sxcg== 108580 -6KGb 108581 -IGVza2k= 108582 -6rCd 108583 -66C464uk 108584 -5Lq65ZGY 108585 -2pjbjA== 108586 -IOeo 108587 -INC80LXRgdGC0L4= 108588 -dsWv 108589 -4KWN4KSw4KS5 108590 -INi32LHYrQ== 108591 -INin2KjZhg== 108592 -IGhpc3M= 108593 -0L7RgNGP0LQ= 108594 -INiv2YE= 108595 -0YDQuNGB0YI= 108596 -4LiK4Lih 108597 -0LTQtdGC 108598 -4LmA4Lir4Lih 108599 -66eI7IKs7KeA 108600 -Oi46Ljo= 108601 -6YW4 108602 -IM6xz4HPhw== 108603 -IG7hu68= 108604 -INC/0L7RgdCw0LQ= 108605 -bHVt 108606 -7Lo= 108607 -44Gn44GN44KL 108608 -7Ja1 108609 -INin2YTZhdiv 108610 -0L3RltC8 108611 -2LHYp9mC 108612 -IOODiA== 108613 -IG9kcG92xJs= 108614 -IGJpcmJpcg== 108615 -IGjDo3k= 108616 -0L7QstC40Lk= 108617 -5q6L 108618 -6YO95piv 108619 -6L+q 108620 -IGFyYcOn 108621 -0LXQvdGC0ZbQsg== 108622 -5oqx 108623 -ZMOhbA== 108624 -IMSQw7RuZw== 108625 -IGhlc2Fw 108626 -INin2YbYs9in2YY= 108627 -INmK2YjZhQ== 108628 -INmG2YjYsQ== 108629 -5YmH 108630 -55eb 108631 -INmG2Yo= 108632 -0LDQu9GM0L3QsA== 108633 -2KrYqNin2Lc= 108634 -4KSy4KSs 108635 -IGtvbXVu 108636 -IHNuYWQ= 108637 -5Zuj 108638 -2LHZitiv 108639 -ZWxvcG1lbnQ= 108640 -INC40Y4= 108641 -4KWALg== 108642 -IGvEsXNh 108643 -IGRlxJ9pbGRpcg== 108644 -4LmJ4Liy4Lij 108645 -IHN2w6lobw== 108646 -IG9ibGFzdGk= 108647 -0YjQu9C4 108648 -4LmA4LiX4Lie 108649 -0YDQtdGC0Yw= 108650 -0L7QstC+ 108651 -IO2CpA== 108652 -w6F0a3k= 108653 -INin2YTZgdix 108654 -6Jit 108655 -z4TOv869 108656 -INGB0YLQvtC40YI= 108657 -2YXYrQ== 108658 -IOC5hA== 108659 -INGC0LXQsdC1 108660 -7YG0 108661 -IG3Em2xh 108662 -5o6n5Yi2 108663 -IENo4bun 108664 -7Iqo 108665 -0JDQog== 108666 -2KfYrNi5 108667 -7JmV 108668 -56m/ 108669 -0L7Qu9C10LU= 108670 -4Lir4Lil4Liy4Lii 108671 -IGR2b3U= 108672 -IOOAgOOAgOOAgOOAgOOAgOOAgA== 108673 -4Li44LiC 108674 -IGJveg== 108675 -4Li04LiZ4LiE 108676 -5aSf 108677 -IGZhYWxpeWV0 108678 -IMSNw61z 108679 -44G744Gp 108680 -IDov 108681 -0LrRltGB0YLRjA== 108682 -IOykgA== 108683 -z4HOsc+C 108684 -INC+0LTQvdC+ 108685 -5qKF 108686 -0YPQsdC70Lg= 108687 -0L3QvtC3 108688 -4LmM4Lih 108689 -IHbDvXJvYg== 108690 -IM66z4U= 108691 -xZlldg== 108692 -wqBC 108693 -xa/FvmU= 108694 -5Lya56S+ 108695 -zrnOsg== 108696 -0YDQvtCy0LDQvdC40Y8= 108697 -IGNldg== 108698 -7JuA 108699 -w6FsbsOtY2g= 108700 -INGA0LDQsg== 108701 -57Sn 108702 -5YCf 108703 -INGf 108704 -2YjZhtmK 108705 -0L7Qt9GP 108706 -INC30L7Qsg== 108707 -IGtvbGVt 108708 -66+86rWt 108709 -57+S 108710 -IHphbcSbc3Q= 108711 -IOygkQ== 108712 -INiy2YY= 108713 -INij2YE= 108714 -IOuouQ== 108715 -IHRvbXRv 108716 -IOyyqOu2gA== 108717 -c2FnZQ== 108718 -5LiN6L+H 108719 -0LXQs9C+0LQ= 108720 -0YDQvtC2 108721 -INC/0YDQvtGG0LXQtA== 108722 -4LmM4LiZ 108723 -c2FuxLF6 108724 -4oCe2Lc= 108725 -5rS75Yqo 108726 -0L7Rh9C60Lg= 108727 -67O06riw 108728 -5Z+65pys 108729 -LdGF 108730 -0LvQvtGB0Y8= 108731 -INmH24zahg== 108732 -7JeU 108733 -0YfQvdC+0LPQvg== 108734 -IOCkl+CksA== 108735 -IOCkheCklw== 108736 -44WL44WL44WL44WL 108737 -IOOCuA== 108738 -2KfYs9ip 108739 -5YqH 108740 -4LmJ4LiH 108741 -IOy7pA== 108742 -bsO9bWk= 108743 -44Os44K5 108744 -5YuS 108745 -INC+0LHQu9Cw0YHRgtGW 108746 -INC00ZbRj9C70YzQvdC+0YHRgtGW 108747 -44Os44Kk 108748 -z4fOsc69 108749 -4LmI4Liy4Liq 108750 -INCk0YDQsNC9 108751 -2YfZhA== 108752 -bGFyZMSxcg== 108753 -2K3Yp9iq 108754 -xa9zdA== 108755 -INCy0L7QtNGL 108756 -INiv2YjZhNiq 108757 -INGB0L/QtdGG0ZY= 108758 -IHRo4bqldA== 108759 -4Lit4Liy4Lir4Liy4Lij 108760 -6aCY 108761 -IHRlcmNpaA== 108762 -IM+Az4HOv8+D 108763 -IMWZw616ZW7DrQ== 108764 -6KeJ5b6X 108765 -IGRuZXM= 108766 -0LXRh9C90L4= 108767 -44OY 108768 -INiv2KfYsdin24w= 108769 -IMWfYXJ0 108770 -67Kk 108771 -IOu2gQ== 108772 -0LXRjw== 108773 -0L3Rj9GC0Yw= 108774 -IGt2xJt0 108775 -INiq2LrbjNuM2LE= 108776 -6b6N 108777 -INix2Ybarw== 108778 -77yM5Y+v 108779 -IHBpeWFz 108780 -IHV5Z3VsYW4= 108781 -2Y7YqQ== 108782 -2KjZitix 108783 -0LjQstCw0YLRjA== 108784 -IO2XiA== 108785 -5Li2 108786 -6L+Z5Lqb 108787 -INqv2LE= 108788 -572q 108789 -5LiA5qC3 108790 -IOODqg== 108791 -INCy0L7QuQ== 108792 -IHNvc3lhbA== 108793 -4Li44LiX4LiY 108794 -4Lir4Lih4LiU 108795 -57ud 108796 -INin2YTYrNmF 108797 -INir2KjYqg== 108798 -INis2Ybarw== 108799 -0LvQtdC90LjQuA== 108800 -0LLQsNGP 108801 -INCy0L7Rgg== 108802 -5Lyk 108803 -IOC4q+C4pQ== 108804 -INmF2YLYp9mE2Yc= 108805 -0LzRltC90ZY= 108806 -7Jis 108807 -0YfQuNC5 108808 -INmF2qk= 108809 -4LmC4Lib4Lij 108810 -a3J2 108811 -IMOtY2g= 108812 -z4nPg863 108813 -0LXQutGC0L7RgA== 108814 -0K/Qug== 108815 -IHDDrXM= 108816 -IMOWemVs 108817 -IHTGsOG7m25n 108818 -INCU0L4= 108819 -zrTOuc6/ 108820 -4Li54LiU 108821 -IHTDvGs= 108822 -2LHbjNmC 108823 -LtCS 108824 -IOWQiA== 108825 -5L+C 108826 -IG9iZG9i 108827 -IGlzdGVkaQ== 108828 -0YjQu9Cw 108829 -5pyJ5LiA 108830 -INCy0LrQu9GO0YfQsA== 108831 -INiq2K3ZgtuM2YI= 108832 -INmI2YM= 108833 -IOiI 108834 -xpI= 108835 -zrzOtc+B 108836 -IOWB 108837 -IOyXhuuKlA== 108838 -wqBk 108839 -IELhuq9j 108840 -4LiB4Lil4Liy4LiH 108841 -INGH0YPQsg== 108842 -IGPhuqV1 108843 -IEjhu5M= 108844 -INmB2KfbjNmE 108845 -z4TOt86zzr/PgQ== 108846 -57GN 108847 -INio2Ko= 108848 -INC+0LHRgNCw0LfQvtC8 108849 -5rGJ 108850 -6ISR 108851 -IGdp4bqjbg== 108852 -zrXPgc6z 108853 -INCc0ZY= 108854 -6Jm954S2 108855 -IEtoaQ== 108856 -0YfQuNC90Lg= 108857 -IOCkheCkl+CksA== 108858 -7ZWY66mw 108859 -67KU 108860 -44GB 108861 -0LLQuNGF 108862 -INCy0YHQtdCz0LTQsA== 108863 -IOe2 108864 -0YHRgtCy0LXQvdC90L7QuQ== 108865 -IHnDvGtzZWw= 108866 -5ris 108867 -IHPEsXJhcw== 108868 -IM+Az4HPjg== 108869 -6ICz 108870 -2KfbjNix 108871 -2K/ZiNiv 108872 -IEFsbWFu 108873 -IHZlcmRp 108874 -INin2YTZhdis 108875 -INin2YTYqti5 108876 -2LXYqQ== 108877 -IHPEsXJh 108878 -xI1pbg== 108879 -INC/0LXRgNGI 108880 -5oqY 108881 -56mN 108882 -INGC0L7QsQ== 108883 -IO++iQ== 108884 -4Lis 108885 -5p2A 108886 -aXlkaQ== 108887 -4Li14Lie 108888 -55Om 108889 -INCw0LLRgtC+0LzQvtCx 108890 -5Lit5paH 108891 -4KWC4KSm 108892 -IGLEm2hlbQ== 108893 -IFDFmWVk 108894 -44GT44GG 108895 -4Lix4LiI 108896 -IO+9jA== 108897 -INmH2KfZig== 108898 -IHPhuqFjaA== 108899 -5pa56Z2i 108900 -55Ww 108901 -0YPRgNC9 108902 -IHbDvXNsZWQ= 108903 -IHRo4bqnbg== 108904 -77yM5omA5Lul 108905 -0YPQutCw 108906 -7ZWY64uk 108907 -IOCkrOCksA== 108908 -INC20ZbQvQ== 108909 -xI1uw61obw== 108910 -IOOBjA== 108911 -YWLEsQ== 108912 -dsOhbsOt 108913 -5rSX 108914 -INC40YHRgtC+0YA= 108915 -7J207YSw 108916 -INC10LvQtdC6 108917 -0LDQu9Cw0YHRjw== 108918 -IHpuw6Ft 108919 -INi32LHZgQ== 108920 -IHNla3TDtnI= 108921 -6rmA 108922 -2YjZgti5 108923 -INmF2YM= 108924 -0YDQtdC20LQ= 108925 -IGtuaWg= 108926 -INiq2LnYr9in2K8= 108927 -5Y2g 108928 -0YHRjNC60LU= 108929 -IOeUtQ== 108930 -5Lqs6YO9 108931 -INix2KfbjA== 108932 -Z8Sxbg== 108933 -INmG2LjYp9mF 108934 -IM6gzr/Ouw== 108935 -5LiA6Iis 108936 -IHN0w6FsZQ== 108937 -INC40YHRgdC70LXQtA== 108938 -IHpwcsOhdg== 108939 -INGH0LjRgdGC 108940 -44O844Oe 108941 -0J7RgQ== 108942 -0YHRjNC60L7QvNGD 108943 -IHDFmWlwcmF2 108944 -64yA7ZaJ 108945 -IGhhbGs= 108946 -54iG 108947 -44CB44GK 108948 -77yf4oCdCgo= 108949 -6YCP 108950 -56ue 108951 -0L3QuNGG0Yw= 108952 -55uY 108953 -4LmA4Lit4LiH 108954 -7J+B 108955 -4KWH4KS14KSy 108956 -5LmL5ZCO 108957 -44Or44OI 108958 -IHN0cnU= 108959 -IO+8vw== 108960 -zpXOmw== 108961 -aGxl 108962 -INmG2YjYtA== 108963 -7J21 108964 -INmF2YE= 108965 -5oiW6ICF 108966 -IMO2bGQ= 108967 -6YCU 108968 -44Oz44OX 108969 -7Zi8 108970 -IHXEnw== 108971 -IMSRw6E= 108972 -IHZsYXN0bsOt 108973 -INmF2KzZhNiz 108974 -5Y2U 108975 -z4TOuc66zq7Pgg== 108976 -IHBvdmlu 108977 -xa9s 108978 -INin2YTYrdmK 108979 -IHNtbG91 108980 -44OD44OB 108981 -INmD2YY= 108982 -IGNo4bqlcA== 108983 -6JCs 108984 -2KzYqA== 108985 -P+KAnA== 108986 -0LTQsNCy 108987 -4Lij4Lin4Lih 108988 -2Y7Yrw== 108989 -INin2YTYr9mI2YQ= 108990 -IOuEpOydtO2KuA== 108991 -IOCkhuCkuA== 108992 -2LjZitmB 108993 -44O844Op 108994 -44Gg44KN44GG 108995 -INmI2KfYrdiv 108996 -2LHZiNiz 108997 -IHrDoWtvbmE= 108998 -INC/0LXRgNC10LE= 108999 -4KWALQ== 109000 -4LmI4LmE4LiU 109001 -5Li65LqG 109002 -zpnOnQ== 109003 -IOyblOyEuA== 109004 -4Liq4Lit4LiH 109005 -IOaJiw== 109006 -INCS0YHQtQ== 109007 -4LmC4Lii 109008 -IGthbGTEsXI= 109009 -z4TOrc+C 109010 -IO+/ow== 109011 -IO2WiOuLpA== 109012 -44KB44Gf 109013 -IMSNZXI= 109014 -Y2VsYQ== 109015 -w7xzw7w= 109016 -6rOz 109017 -7JeQ64+E 109018 -2LLYqQ== 109019 -44Gq44KL 109020 -2YjbjNmG 109021 -54mb 109022 -IHZvag== 109023 -IOuKkA== 109024 -INmD2YU= 109025 -5rOJ 109026 -0LfRjw== 109027 -6KOd 109028 -INii2YQ= 109029 -IM6xzr3OrA== 109030 -wqDQkg== 109031 -IHlhcMSxbA== 109032 -5o+b 109033 -INGB0YPRidC10YHRgtCy 109034 -IG7hu5Fp 109035 -2YjYpg== 109036 -IOuEpOydtO2KuOyYqA== 109037 -IHBvbGl0aWs= 109038 -xaFrYQ== 109039 -ZWJpbGlyc2luaXo= 109040 -bGRrZg== 109041 -0YPQsdC70ZY= 109042 -IGVvcQ== 109043 -INmF2K3YtdmI2YQ= 109044 -a3J2bGRrZg== 109045 -IGVvcWtydmxka2Y= 109046 -z4POtc+Jzr0= 109047 -2KjZhNi6 109048 -jJPquIA= 109049 -INGB0YDQvtC6 109050 -IFV5 109051 -IE7Em2s= 109052 -INC00LjQsg== 109053 -44K144Kk 109054 -IOyCrOydtA== 109055 -IOmX 109056 -INCx0LDRgtGM 109057 -INC/0LXRgNGW 109058 -wpY= 109059 -5Lqk6YCa 109060 -0LXQvdC3 109061 -2YjYs9iq 109062 -4Li14Lii4Lia 109063 -IOC4iOC4sA== 109064 -66GA 109065 -w7xmdXM= 109066 -2ZHZkA== 109067 -57i9 109068 -4Lix4LiU4Liq 109069 -6rKA 109070 -INGC0LjRhQ== 109071 -INii2LLZhQ== 109072 -INin2LY= 109073 -7KG0 109074 -2ZLYqg== 109075 -5oi4 109076 -IOyeiOydhA== 109077 -IOeUtw== 109078 -0YnRlg== 109079 -0L7QvNCw 109080 -INin2YHYstin24zYtA== 109081 -IFRow7RuZw== 109082 -INin2KzYqtmF2KfYuduM 109083 -0LXQu9GO 109084 -INGF0L7RgNC+0YjQvg== 109085 -4Lig4Liy4Lip 109086 -IHLDoW0= 109087 -5b6h 109088 -44O844OE 109089 -IEzhu5tw 109090 -INi02Yo= 109091 -IGhp4buDbQ== 109092 -zrjOvQ== 109093 -zr/Phc+D 109094 -5b6p 109095 -IMO6emVt 109096 -4LmB4Lic 109097 -5beo 109098 -4LiI4LiZ 109099 -2q/Ysdin2YY= 109100 -INiq24zZhQ== 109101 -IGlsZXQ= 109102 -4Liy4LiC4Lit4LiH 109103 -INiq2YjYsQ== 109104 -INC00L7Qs9C+0LLQvtGA 109105 -IHRlbnRv 109106 -0LLRgw== 109107 -INC30LDQtNCw 109108 -IHN0b2xldMOt 109109 -wqAg 109110 -4oCM2KfZhA== 109111 -y5g= 109112 -xZ9pdg== 109113 -0L3Rj9GC0Lg= 109114 -44KJ44KM44Gf 109115 -IFNi 109116 -INin2YTZhdi1 109117 -INCj0LrRgNCw0ZfQvdGW 109118 -INi02qk= 109119 -aeG6v25n 109120 -0YzRgtC1 109121 -6LCi 109122 -INmF2KrZhg== 109123 -INGA0LDQtA== 109124 -INmF2YjYp9iv 109125 -7LGE 109126 -6aG2 109127 -IGJvxZ8= 109128 -2KrZiNix 109129 -IMSRw6FuZw== 109130 -IGtpdGFw 109131 -IGhvZGlu 109132 -IHRhcmloaQ== 109133 -44KE44KL 109134 -0YHRgtC10YA= 109135 -INGF0L7QtA== 109136 -0LLQsNC90LjQtQ== 109137 -INC+0YHQstGW 109138 -INGB0LjRgdGC0LXQvNGL 109139 -4KS84KSo 109140 -z4fOvw== 109141 -IOWPsA== 109142 -b8WZ 109143 -57uP5rWO 109144 -IOS9nA== 109145 -IHRodeG6rW4= 109146 -m4g= 109147 -IHlhbG7EsXo= 109148 -YWxldA== 109149 -7Kad6riI 109150 -INC30LDRiQ== 109151 -INC10LrRgdC/ 109152 -4oSW4oSW 109153 -IOOAgCDjgIAg44CAIOOAgCDjgIAg44CA 109154 -INqv2YjYtA== 109155 -44Gr5YWl 109156 -IHVkxJts 109157 -IOG6 109158 -4KSG4KSI 109159 -4oCM2K/Zhw== 109160 -5oKq 109161 -IHRyw7I= 109162 -5pqX 109163 -zrvOu863zr0= 109164 -INC/0YDQuNC30L3QsA== 109165 -INiz24zYs9iq2YU= 109166 -IOCkheCkpA== 109167 -w6hv 109168 -6L+O 109169 -INC30YPQsQ== 109170 -INC30LDRgdC+0LE= 109171 -INiz2YE= 109172 -INmF2KfZhtmG2K8= 109173 -2K7YtA== 109174 -dmFqw60= 109175 -bml0xZk= 109176 -5q+S 109177 -5qSN 109178 -IGdpcmnFnw== 109179 -IMSRw6Fw 109180 -QG4= 109181 -0L7QstCw0YDQuA== 109182 -INiu2K/Ypw== 109183 -IHbEm3TFoQ== 109184 -IM6jz4U= 109185 -2YHYqQ== 109186 -0LDQvdC90Y/QvA== 109187 -INGH0LvQtdC9 109188 -5pSv5oyB 109189 -5aic 109190 -bGFyYXJhc8Sx 109191 -zqHOkQ== 109192 -IHppeQ== 109193 -IOq1kOycoQ== 109194 -IGjhu5Np 109195 -4Liy4LiE4Liy4Lij 109196 -aW1sZXJp 109197 -6LO8 109198 -INis2YfYp9mG 109199 -INGA0L7Qt9C80ZY= 109200 -0YXRltCy 109201 -zrPOtQ== 109202 -5qiq 109203 -zpnOkc6j 109204 -57at 109205 -IGJpcmF6 109206 -INGC0LDQutC+0LPQvg== 109207 -7YOE 109208 -INCx0YPQtNGD0YI= 109209 -INGI0LLQuNC0 109210 -INC90LXRgQ== 109211 -INmF2LnZhNmI2YXYp9iq 109212 -4KWH4KSv4KSw 109213 -INC00LLRg9GF 109214 -5b+F6KaB 109215 -5aeG 109216 -IHBvaGxlZA== 109217 -7Iqk7YSw 109218 -IOWNgQ== 109219 -INij2Kg= 109220 -0LLQtdGA0LTQtg== 109221 -IOCknOCkrg== 109222 -4KSy4KSk 109223 -5Zyw5Yy6 109224 -IHxb 109225 -INCy0LzQtdGB0YI= 109226 -INqp2KfZhQ== 109227 -IOODkA== 109228 -44O844OW 109229 -44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 109230 -IOyDge2SiA== 109231 -4LmA4Lil4Lii 109232 -xI1uw6k= 109233 -INGB0YDQtdC00YHRgtCy0LA= 109234 -INGC0LDQsQ== 109235 -INmF2KfYsQ== 109236 -IGhsZWQ= 109237 -0LTQsNGC 109238 -2YjbjNiv 109239 -IOODqQ== 109240 -INiu2K8= 109241 -6KSH 109242 -56eY 109243 -INio2LHYrw== 109244 -IM+DzrHPgg== 109245 -z47Pg861zrnPgg== 109246 -5p2v 109247 -zrvPjQ== 109248 -5a6/ 109249 -IOuCnA== 109250 -77uf 109251 -IMO2emVsbGlrbGU= 109252 -INC60L7QvdGB 109253 -INmF2Lo= 109254 -2LnZig== 109255 -4LmM4LiB 109256 -INmK2Ko= 109257 -INmF2LTYp9mH 109258 -IFRoYW5o 109259 -4KS+4KSc4KSo 109260 -paQ= 109261 -IHZsw6E= 109262 -INmB2LY= 109263 -zqTOmc6a 109264 -INC90LDRg9C60L7Qsg== 109265 -0LXQu9C10Lw= 109266 -IGTDoG5n 109267 -INCz0L7RgdC/0L7QtNCw0YA= 109268 -wqBT 109269 -0LjRh9C10YHQutC40YU= 109270 -INiq2YbZh9in 109271 -4KSc4KSo 109272 -INC/0LDQvQ== 109273 -5Yag 109274 -IOuCmOuKlA== 109275 -dMOt 109276 -5LiA6LW3 109277 -IGzDo25o 109278 -wqB2 109279 -b3bDvW0= 109280 -2LLYqA== 109281 -INis2YXYuduM2Ko= 109282 -IOa1tw== 109283 -INC+0YHRg9GJ0LXRgdGC0LI= 109284 -w6Np 109285 -2KfYptix 109286 -IOuzkQ== 109287 -4buLbmg= 109288 -IHPhu61h 109289 -4KWH4KSC4KWk 109290 -xJtqxaHDrQ== 109291 -INC00ZbRgg== 109292 -IOaD 109293 -bcSxxZ90xLE= 109294 -2LHYrQ== 109295 -IOyngOq4iA== 109296 -5aa7 109297 -4peL 109298 -IOyngOyXrQ== 109299 -2ZLZhg== 109300 -IHVyxI1pdA== 109301 -2ZLZhQ== 109302 -esOt 109303 -6JU= 109304 -INi02YjYsQ== 109305 -IEtow7RuZw== 109306 -24zYstuM 109307 -INC30LM= 109308 -INCy0L3QtQ== 109309 -IHByw6F2xJs= 109310 -6KuL 109311 -2KfZitiq 109312 -4Lix4LiB4Lij 109313 -IG9sZHVrw6dh 109314 -44KB44KL 109315 -IFTDonk= 109316 -65287J24 109317 -6JmV 109318 -IHPGsA== 109319 -INC90LjQug== 109320 -2aA= 109321 -2KfYtNuM2YY= 109322 -ZWxlcmRl 109323 -7Iuc7JWE 109324 -INGD0LzQvtCy 109325 -IMOnYWzEscWfYW4= 109326 -IOu4lA== 109327 -INGC0LDQutC40Lw= 109328 -0YDQuNC9 109329 -INiu2YQ= 109330 -YXlk 109331 -IOODoQ== 109332 -0LXQudGH0LDRgQ== 109333 -IGRvcHJhdg== 109334 -44GT44Go44Gv 109335 -IOy2lOyynA== 109336 -5bu2 109337 -IGvEsQ== 109338 -5Y+2 109339 -0YDQuNCz 109340 -7YWc 109341 -55Sz5Y2a 109342 -INCy0LXRgg== 109343 -INC/0L7QvNC+0YnRjNGO 109344 -INin2YHYsdin2K8= 109345 -z4DOtc65 109346 -4LmA4Liq4Lij 109347 -IGdpw6Ft 109348 -6Y4= 109349 -aGxhcw== 109350 -bWFuxLF6 109351 -0LDQvdCz0Ls= 109352 -IG11xb4= 109353 -wqBL 109354 -0YDQtdC00LjRgg== 109355 -6K6+5aSH 109356 -zrnPg868 109357 -IGPhuqNp 109358 -IOmAmg== 109359 -INmD2KfYsQ== 109360 -INC/0L7QtNC+0LE= 109361 -INC80LXRgtCw0Ls= 109362 -INGB0LDQvNC1 109363 -0LvRg9GH 109364 -5YKz 109365 -INmI2YfZiA== 109366 -IOmHjQ== 109367 -0LLQuNC5 109368 -5rOB 109369 -IOadjg== 109370 -IGlsacWfa2lu 109371 -IM61zq/Ph861 109372 -54qv 109373 -xZllam3Emw== 109374 -6K2Y 109375 -56ix 109376 -zrzOvM6x 109377 -INmE24w= 109378 -2YfYp9mK 109379 -INC+0L/QuNGB 109380 -2q/Ysdiv 109381 -INCz0YA= 109382 -IEFuaW1hbGlh 109383 -0J/Qvg== 109384 -IGLDs25n 109385 -INC00LXRgtC10Lk= 109386 -IGzDonU= 109387 -IOaVmQ== 109388 -INC/0L7Rj9GB 109389 -INin2YTYog== 109390 -4Lix4LiZ4LiV 109391 -INC00LXQsg== 109392 -INGG0LXQuQ== 109393 -0YzQsg== 109394 -5oOg 109395 -bWFsYXLEsQ== 109396 -aW1sZXI= 109397 -4KWI4KWkCgo= 109398 -INC90L7QvA== 109399 -enY= 109400 -IOC4geC4ow== 109401 -IHBheWxhxZ8= 109402 -wqBz 109403 -4KS/4KS44KSu 109404 -0YHRgtCy0LXQvdC90YvRhQ== 109405 -c3RvdXA= 109406 -0L7QvdGW 109407 -c3TDrQ== 109408 -INit2qk= 109409 -INqv2LHZgdiq 109410 -4Liy4LiE4Liy 109411 -0LTRjw== 109412 -2YTYp9ir 109413 -IHpkcmF2b3Q= 109414 -5LiK44GS 109415 -44G8 109416 -ZWxlcmU= 109417 -2LjZhQ== 109418 -INGB0LLQtdGC 109419 -0L7RgNCz 109420 -56ul 109421 -INC/0LXRgNC10L8= 109422 -IOCkruCkpg== 109423 -0LDQt9Cw 109424 -5aaC5L2V 109425 -0YHRjNC60ZbQuQ== 109426 -IGLGsOG7m2M= 109427 -IGdlcmVrbGk= 109428 -5aSn5a62 109429 -IHRyw6Fp 109430 -6YGp 109431 -5Lit5aSu 109432 -IHBo4bqjbg== 109433 -INi52LHYtg== 109434 -INmD2KrYp9io 109435 -5oup 109436 -0YjQtdCz0L4= 109437 -5biu 109438 -INmG24zYp9iy 109439 -6L+3 109440 -4Li44Lib 109441 -4Li04Lib 109442 -INiv2K4= 109443 -z4TOuc66zq3Pgg== 109444 -IFV6 109445 -INiq2YjZhdin2YY= 109446 -INmI2KfZhNij 109447 -xZllcw== 109448 -0ZHQvA== 109449 -IOW4gg== 109450 -INGC0L7QttC1 109451 -IHlhcGFu 109452 -5b285aWz 109453 -INmF2K/YsQ== 109454 -toE= 109455 -IOaXtg== 109456 -4LmA4LiY 109457 -INmF2KfZhA== 109458 -IELDvHnDvGs= 109459 -INmE2Ko= 109460 -5bCa 109461 -ZGVtZQ== 109462 -w7xi 109463 -INGF0YPQtA== 109464 -IGzDqWth 109465 -55ub 109466 -55u05o6l 109467 -0L3QuNGG0YLQstCw 109468 -INC/0YDQuNGH0LjQvQ== 109469 -0LXRgNCw0L8= 109470 -INGB0L7Qt9C00LA= 109471 -5qKw 109472 -IG3DvHo= 109473 -57O75YiX 109474 -b3V6 109475 -IOCkk+CksA== 109476 -0YDRg9GH 109477 -IOG9 109478 -zrzOrc69zrE= 109479 -INC/0YDQtdC00LzQtdGC 109480 -IOWy 109481 -44Oz44OB 109482 -zrzOrc69zrc= 109483 -0LvRg9Cz 109484 -wqBu 109485 -IFRhcmlo 109486 -IOOAiA== 109487 -IGJhbmE= 109488 -IGPDrQ== 109489 -IHbDvWtvbg== 109490 -5Zug5q2k 109491 -IHTFmWk= 109492 -4Liy4LiL 109493 -dmFpbGFibGU= 109494 -IGlzdGVt 109495 -44Ol44O8 109496 -0JXQnQ== 109497 -INCz0LDRgA== 109498 -zr/Phc67 109499 -4KWb 109500 -INmI2LbYuQ== 109501 -4Liq4Liw 109502 -6Led 109503 -INit2YE= 109504 -4Li04LiX4Lii4Liy4Lil 109505 -5aW555qE 109506 -0L3RltGI 109507 -0LbQtdC90LjQtQ== 109508 -6riw7JeQ 109509 -IOmYvw== 109510 -INmF2KfYsdiz 109511 -IMOnZcWfaXRsaQ== 109512 -IMWfZWhpcg== 109513 -w6F0b3I= 109514 -4LmJ4LiX 109515 -7J2064qU 109516 -IOiy 109517 -6aGN 109518 -55mC 109519 -INC90LjRhw== 109520 -IOqwgOyngA== 109521 -5Lym 109522 -csOhbg== 109523 -b3N0YXQ= 109524 -INmE2YM= 109525 -6Lo= 109526 -IE5nw6BuaA== 109527 -IOCkuOCkpg== 109528 -5pyX 109529 -54S25ZCO 109530 -44K444Kn 109531 -0LvQtdGA 109532 -INCe0L3QsA== 109533 -2LPZiNmG 109534 -z4HOv869 109535 -INiv2LHbjNin2YHYqg== 109536 -4Lit4Lit4LiZ4LmE4Lil4LiZ 109537 -IGTDoWw= 109538 -INC80ZbRgdGG0LU= 109539 -INC00L3QtdC5 109540 -INin2YTYp9iq 109541 -IOCksOCkueCkpA== 109542 -77yM5a+5 109543 -6LOH5paZ 109544 -5Lu75L2V 109545 -6YQ= 109546 -dGFq 109547 -zrLOrA== 109548 -INC90LDQtNC+ 109549 -INGB0YLRg9C0 109550 -IMWfZWg= 109551 -4Lix4LiN4LiN 109552 -4KWL4KSs 109553 -44Op44O8 109554 -27HbtQ== 109555 -ZXB0 109556 -IGJpbGRpcg== 109557 -4Liq4LiW4Liy4LiZ 109558 -0LXRgtGM0YHRjw== 109559 -c2vDvW0= 109560 -INC+0LHQu9Cw0YHRgtGM 109561 -IOyeoA== 109562 -IEfDtnI= 109563 -IGRheWFu 109564 -INuM2KfYrw== 109565 -55Sf5Lqn 109566 -7ZiR 109567 -5b6B 109568 -INin2KzYsQ== 109569 -INC/0YDQtQ== 109570 -5LiJ5LiJ5LiJ5LiJ 109571 -5Z+O5biC 109572 -INC/0YDQuNC80LXRgA== 109573 -xI3DoXN0 109574 -6IGY 109575 -INmF2LHYqNmI2Lc= 109576 -5p6a 109577 -5YiA 109578 -5p+l55yL 109579 -IOuqqOuRkA== 109580 -7J6Q66OM 109581 -Le+9pA== 109582 -IOqwmeydtA== 109583 -IOyhtA== 109584 -0LXQs9C+0YA= 109585 -ZWRpaw== 109586 -0LjQvNGD 109587 -IEFydGg= 109588 -5bqU55So 109589 -bWnFn3Rp 109590 -IGto4buPZQ== 109591 -INGW0LQ= 109592 -zrvOu863 109593 -w6Jo 109594 -0LzQsNCz 109595 -6ZqG 109596 -INCy0L3Rg9GC0YA= 109597 -INio2Lc= 109598 -KOaXpQ== 109599 -xLBZ 109600 -0LvQuNC6 109601 -IELhuqNu 109602 -INiq2YjYsw== 109603 -4KS84KSk 109604 -YW1haw== 109605 -5ZWP6aGM 109606 -INGB0LDQvNC+0YHRgg== 109607 -77y8Cg== 109608 -IOemjw== 109609 -2aE= 109610 -INGE0L7RgNC80Lg= 109611 -INGA0L7Qt9GD0Lw= 109612 -INmF2LfYp9mE 109613 -5Lmf5piv 109614 -576O5Zu9 109615 -65Oc66a964uI64uk 109616 -IGzEqW5o 109617 -INC/0L7RgtC+0LzRgw== 109618 -0Y/QsdGA0Y8= 109619 -5ryr 109620 -IG5nb+G6oWk= 109621 -4Lit4Liz 109622 -2YrZhtin 109623 -IG1sYWQ= 109624 -z4PPhM6s 109625 -2KfYqtix 109626 -7KO87J2Y 109627 -0LXQvdC90ZY= 109628 -0L7Qt9Cw 109629 -2YLYp9iq 109630 -INCS0LDRgQ== 109631 -6K6t 109632 -6ZA= 109633 -0YPRjtGH0Lg= 109634 -INqp2LE= 109635 -IC58 109636 -IGdlbsOn 109637 -6Kmy 109638 -5LuB 109639 -0L7QtNGL 109640 -INij2YjZhA== 109641 -IOyCrO2ajA== 109642 -IOC5gOC4qg== 109643 -IOuVjOusuOyXkA== 109644 -4oCM2Kg= 109645 -INC70LjRiNGM 109646 -INC40LzQtdC90L3Qvg== 109647 -bWFkxLE= 109648 -IOmC 109649 -INmI2KfYsdiv 109650 -IHRha8SxbQ== 109651 -IOC5gOC4qw== 109652 -IOC4reC4og== 109653 -IGtvbnVzdQ== 109654 -2K7ZiA== 109655 -INGB0LjQtA== 109656 -6LWk 109657 -0L7Rj9GC0LXQu9GM 109658 -64u1 109659 -zrXPiQ== 109660 -0ZbRhQ== 109661 -IOCkr+Ckpg== 109662 -INqp24zZgQ== 109663 -zrzOv8+C 109664 -IGFsZMSx 109665 -IO2ZjQ== 109666 -0LrRg9C/ 109667 -INmG2YXYp9uM2LQ= 109668 -44Gl 109669 -IO2VqeuLiOuLpA== 109670 -IOuMk+q4gA== 109671 -0LHQvtGA0LA= 109672 -6YmE 109673 -IOC5gOC4iA== 109674 -4LmJ4LiB 109675 -wqfYtw== 109676 -2LHYqNmH 109677 -INGD0Lc= 109678 -INC80LDRjtGC0Yw= 109679 -IGJ5bGk= 109680 -4Li14LiV 109681 -IOyngOybkA== 109682 -6Ieq54S2 109683 -w7l5 109684 -IMOnYcSf 109685 -0LXQtNC40L0= 109686 -64m0 109687 -5Y2x 109688 -INC/0L7Qt9Cy0L7Qu9GP 109689 -2K3Yp9iv 109690 -INGH0LXQs9C+ 109691 -4Li14Lii4Lij 109692 -IHnDtm50ZW0= 109693 -IGRlcnM= 109694 -INGB0YLQvtGP 109695 -INC60YDRg9C/ 109696 -IPA= 109697 -INC00L7QvNCw0Yg= 109698 -0LXQvdC0 109699 -57un 109700 -IMSRw7Q= 109701 -IGNodMSb 109702 -6K6h5YiS 109703 -zq3OsQ== 109704 -IGRvYsWZZQ== 109705 -4Liq4Lit4Lia 109706 -0LXQu9C10L3QuNC1 109707 -IMSRw7RuZw== 109708 -44G+44KK 109709 -IGJveXVuY2E= 109710 -4KWB4KSX 109711 -INGE0LjQtw== 109712 -44Kz44Oz 109713 -IGRlbmV5 109714 -0YfQtdGB0LrQuNGF 109715 -zrvOv869 109716 -5Lul5Y+K 109717 -2KfZiNiq 109718 -wqDCoMKgwqDCoA== 109719 -IOykhA== 109720 -4KS/4KSr 109721 -INGC0L7Quw== 109722 -IOuCtOqwgA== 109723 -4paP 109724 -IHBow6E= 109725 -INGB0L/RltCy 109726 -INis2YXZiti5 109727 -IGJlenBlxI0= 109728 -IOaXoA== 109729 -IHbFoWU= 109730 -0YHRgtCy0YM= 109731 -ZHVzdA== 109732 -b8Wh 109733 -INiq2KfYsdmK2K4= 109734 -2KfYrdip 109735 -INmF2LTYp9ix2YPYqQ== 109736 -IM6xzro= 109737 -4Lix4LiZ4LiZ 109738 -6YGK 109739 -INGB0L7Rgg== 109740 -INC60LDQtw== 109741 -INGC0LXRh9C10L3QuNC1 109742 -6ri0 109743 -YWNha3TEsXI= 109744 -6rGw64KY 109745 -4Li14Lii4Lih 109746 -INGB0YPRhQ== 109747 -IOuEiOustA== 109748 -44GP44KL 109749 -INC60L7RgtC+0YDQvtC5 109750 -2KfZgtip 109751 -ecSxbA== 109752 -44K744OD44OI 109753 -INGN0LvQtdC8 109754 -5oGQ 109755 -2YbYp9ih 109756 -5YWp 109757 -IHRlxI8= 109758 -5Lil 109759 -IOyniOusuA== 109760 -IOS4ug== 109761 -7Iuc7ZeY 109762 -INC/0YDQvtC6 109763 -dWplbWU= 109764 -w7xjw7w= 109765 -INin2YTZhdi6 109766 -INit2LPYp9io 109767 -44GX44Gm44GE 109768 -0LrQvtCy0LA= 109769 -IMSRw6Bv 109770 -INC/0YDQuNC3 109771 -INmI2YXZhg== 109772 -INC+0YA= 109773 -4LiB4LiV 109774 -0LDRhA== 109775 -IOC4nuC4ow== 109776 -0YbQuNC10Lk= 109777 -5qo= 109778 -IHDFr3NvYg== 109779 -5a2p5a2Q 109780 -IGLDoW5o 109781 -INGE0L7RgNC80YM= 109782 -IOG7lQ== 109783 -INC80LXQvdC10LU= 109784 -4LmJ4Liy4Lir 109785 -0L3QuNGG0LA= 109786 -4Li1Cg== 109787 -INCy0L7Qu9C+0YE= 109788 -INin2LHYp9im2Yc= 109789 -56ys5LiJ 109790 -65CY7JeI 109791 -IGvEsXNt 109792 -44O844OK 109793 -bGVyaW1peg== 109794 -2YbZitmG 109795 -IE5nxrDhu51p 109796 -INC+0YLQtNC10Ls= 109797 -55qE5pe25YCZ 109798 -0L7QvdC+0LI= 109799 -xI1hbg== 109800 -aXpt 109801 -INGB0L7QsdC+0Lk= 109802 -4LmH4LiV 109803 -INGB0LvRltC0 109804 -IOCknOCkuQ== 109805 -77yM5oiR5Lus 109806 -44CC44Gd44Gu 109807 -z4DPic+C 109808 -54af 109809 -4Liv 109810 -64SQ 109811 -5pyL 109812 -IOu5hOuwgA== 109813 -642V 109814 -IG3DoG4= 109815 -7J206rOg 109816 -656c65Oc 109817 -6YKE 109818 -xLHFn8Sxaw== 109819 -IOS4qg== 109820 -IG7DoWQ= 109821 -0LHRgNCw 109822 -5oyH5a6a 109823 -bGFyxLF5bGE= 109824 -INCe0L3QuA== 109825 -IGhyYQ== 109826 -INGA0LXRhtC10L8= 109827 -INCg0L7RgdGB0LjQuQ== 109828 -5b2x5ZON 109829 -IEtkecW+ 109830 -IMO2xJ9yZW5j 109831 -5Ym1 109832 -IGppc3Q= 109833 -6IiI 109834 -6Kem 109835 -5Y+R546w 109836 -4Lih4Liy4Lii 109837 -ZXJrZW4= 109838 -INC30LTQtdGB0Yw= 109839 -INmF2LPYpg== 109840 -QG5hdGU= 109841 -IOuCtOyaqQ== 109842 -IG5hYsOtZA== 109843 -24A= 109844 -INC80L7QvNC10L3Rgg== 109845 -44Gg44GM 109846 -zq/OtM6x 109847 -VGFr 109848 -IOuztOqzoA== 109849 -Ojo6Ojo6Ojo6 109850 -xJ9tZW4= 109851 -INC/0L7QvNC10Yk= 109852 -44Gr44Gk44GE44Gm 109853 -INmB2YjZgg== 109854 -INi52LbZiA== 109855 -INmF24zYp9mG 109856 -IG3DvGM= 109857 -INC/0YDQvtGP0LI= 109858 -0YfQtdGB0LrQuA== 109859 -44Gg44GL44KJ 109860 -6YKm 109861 -IOu2hOyEnQ== 109862 -6Z+p 109863 -jag= 109864 -IERhaGE= 109865 -IM66z4w= 109866 -INC90LDRh9C40L3QsA== 109867 -INCf0L7Rgg== 109868 -z4POus61z4U= 109869 -INGA0LDQvQ== 109870 -2YjZitiz 109871 -Ojo6Ojo6Ojo6Og== 109872 -27Hbudu5 109873 -IGFyZMSxbmRhbg== 109874 -4LmC4LiU 109875 -2KfYsdin2YY= 109876 -2K/Yp9iv 109877 -IHF1w70= 109878 -INij2YPYq9ix 109879 -4peG 109880 -INij2K7YsdmJ 109881 -IOuniOydjA== 109882 -66a0 109883 -INi52YTZiNmF 109884 -IGXEnw== 109885 -0LLQvtGA0Y4= 109886 -IOODlw== 109887 -0YPRh9Cw0YE= 109888 -INio2KM= 109889 -z4bOvw== 109890 -0L3QuNC60LDQvNC4 109891 -4LmD4LiV 109892 -xI1ldG7Emw== 109893 -4Lia4Liy4LiH 109894 -54mZ 109895 -44Oq44Kr 109896 -7ZI= 109897 -5Ye654mI 109898 -zrPOuQ== 109899 -44CC44Gd44KM 109900 -IHlhbmk= 109901 -bGVjaA== 109902 -IEx14bqtdA== 109903 -55qE44Gq 109904 -IG5lZGVuaXlsZQ== 109905 -ZGVq 109906 -INGB0L7QstC10YDRiA== 109907 -IHBo4buV 109908 -xLFzxLFuZGFu 109909 -IGNo4bqvYw== 109910 -ZGXFnw== 109911 -INC60L7QvNCw0L0= 109912 -5pu/ 109913 -IHBsw6Fu 109914 -IGThu68= 109915 -IOq1reqwgA== 109916 -IHRha2lw 109917 -IHRo4buneQ== 109918 -0YHQu9GW0LQ= 109919 -4omn 109920 -IElJQw== 109921 -zrjPhQ== 109922 -w6F2YXQ= 109923 -INGB0L7Qug== 109924 -INCx0LDQs9Cw0YLQvg== 109925 -Ozo7Ojs6Ozo= 109926 -z4HOuc6/z4I= 109927 -aWxtacWfdGly 109928 -IHpuYW0= 109929 -IM6kzrE= 109930 -YW1heg== 109931 -4LmB4Lie 109932 -44OB44Oj 109933 -IGt1bGxhbsSx 109934 -5pS+6YCB 109935 -0LTQvQ== 109936 -INmI2KfYqA== 109937 -IHRy4bqvbmc= 109938 -0YHRj9Cz 109939 -INin2LHYqtio2KfYtw== 109940 -INCy0YXQvtC0 109941 -5bee5biC 109942 -IOCkuOCkpA== 109943 -0YfQsNC10YLRgdGP 109944 -7YyM7Yq4 109945 -IE5o4buvbmc= 109946 -5LiN5Y+v 109947 -5bGK 109948 -IOOCrQ== 109949 -2KfYsdmH2KfbjA== 109950 -IGFyxZ9pdg== 109951 -INin2YTZiQ== 109952 -4KS+4KSv4KSV 109953 -44GX44KH44GG 109954 -IHVsdXM= 109955 -YWxheHk= 109956 -6riw6rCA 109957 -446hKA== 109958 -zrzOrM+Ez4nOvQ== 109959 -w6hu 109960 -w7lp 109961 -INC90LDRgdGC0L7Rjw== 109962 -INCh0LI= 109963 -INC+0YHQvtCx0Lg= 109964 -0LrQvtCy0L4= 109965 -INGA0LXQsdC10L3QutCw 109966 -INGC0Y/Qtg== 109967 -IHh14buRbmc= 109968 -IOq2jA== 109969 -0L7Qs9C+0LQ= 109970 -IOG6pXk= 109971 -6LKg 109972 -4Lin4LiZ 109973 -IHN0YW5vdg== 109974 -IGtyw6Fs 109975 -IOCkh+CkuOCksg== 109976 -ZWJl 109977 -5a6+ 109978 -INC00L7RgdGC0LDRgtC+0YfQvdC+ 109979 -SUlJSw== 109980 -z4DOrA== 109981 -IGJpcmthw6c= 109982 -INin2YTZhdmC 109983 -44O2 109984 -IEJhxZ9rYW7EsQ== 109985 -IOyyqOu2gO2MjOydvA== 109986 -IHlhcmFy 109987 -5Lqh 109988 -IM+Az4w= 109989 -wqDRgQ== 109990 -zrTOrg== 109991 -ZWxlcmluaQ== 109992 -IHN1w6c= 109993 -INC00L7QvNCw 109994 -INC90LDRgNGD0Yg= 109995 -IM6v 109996 -IOq3uOydmA== 109997 -55S15b2x 109998 -2KfYqNmH 109999 -0LrQvtC80YM= 110000 -IOCkpOCkrA== 110001 -4KWI4KSg 110002 -IOuqqOynkQ== 110003 -IOaxnw== 110004 -IOqyg+ydgA== 110005 -zr/Ovc+EzrHOuQ== 110006 -INin2YTYsdmK2KfYtg== 110007 -6Kix 110008 -IGhhbGluZGU= 110009 -INin2LTYp9ix2Yc= 110010 -INC60YDRiw== 110011 -0LvQtdC90LjQuQ== 110012 -bHXEnw== 110013 -IGRvYnU= 110014 -c2lr 110015 -4KWB4KSf 110016 -INC60ZbQvQ== 110017 -44Go44GN 110018 -4KWC4KS4 110019 -5oWi 110020 -IGTEscWfxLFuZGE= 110021 -57eP 110022 -IGLDrQ== 110023 -IENMSUlJSw== 110024 -IElJQ0lJSQ== 110025 -IGhlcms= 110026 -44KP44Gb 110027 -IOOAgOOAgOOAgOOAgOOAgOOAgOOAgA== 110028 -wqDCoMKgwqDCoMKg 110029 -2KfZhNiv 110030 -IGRhdnJhbg== 110031 -xI1lcg== 110032 -INif 110033 -44GY44KD44Gq44GE 110034 -IGRhaXI= 110035 -IO6lpA== 110036 -4Lix4LiH4Liq 110037 -IOuLtA== 110038 -5b6e 110039 -INGN0YLQuNGF 110040 -6K+6 110041 -4bu3 110042 -0LXRgNC40YHRgtC4 110043 -0L7QstGL0YU= 110044 -IOODhw== 110045 -2LbZig== 110046 -IOCkieCkoA== 110047 -IG5hcMWZw61rbGFk 110048 -6LSd 110049 -IMWhaw== 110050 -INio2YjYr9mG2K8= 110051 -dsWvbGk= 110052 -6YGH 110053 -INC30L3QsNC5 110054 -IFRoYW0= 110055 -cmFuaQ== 110056 -2KfYrdiq 110057 -2LTZhw== 110058 -0LzRltC90ZbRgdGC0YDQsA== 110059 -4LmL 110060 -IM6Rzr3OsQ== 110061 -4KWL4KSa 110062 -57uE57uH 110063 -0YHRgtC40YI= 110064 -aW1saQ== 110065 -5ZCN54Sh44GX44GV44KT 110066 -2ZHYqQ== 110067 -zrjOvA== 110068 -0L7Qu9C+0YI= 110069 -4Lii4LiH 110070 -44KJ44KM44KL 110071 -INC70LjRhw== 110072 -0L7QstGL0LU= 110073 -6YCD 110074 -IOW5vw== 110075 -7Iqs 110076 -2YXbjNmG 110077 -IOyghOyytA== 110078 -IM6tz4c= 110079 -IOyxhQ== 110080 -IGhsYXM= 110081 -0LXQutGC0LjQsg== 110082 -IM+AzrvOtw== 110083 -bHXEn3U= 110084 -5aW955qE 110085 -INqG2YjZhg== 110086 -IEJlbGVk 110087 -IGVuZ2Vs 110088 -0L3Rj9GP 110089 -IHlhxZ9hbg== 110090 -0YfQvdC40YU= 110091 -2KfYsdmK2Kk= 110092 -4KSu4KSk 110093 -44OL44OL44OL44OL 110094 -5Yui 110095 -IOWGhQ== 110096 -IO2PrO2VqA== 110097 -INC+0LHRgQ== 110098 -IHRo4bqlcA== 110099 -IGTDonk= 110100 -44OW44Op 110101 -0LDRgtGL 110102 -INGB0LLQvtC10Lk= 110103 -44KJ44Gq44GE 110104 -5Y+R55Sf 110105 -ZXJlY2U= 110106 -IG9kYm9y 110107 -INCy0L3QtdGB 110108 -IMSQ4bqjbmc= 110109 -IOuPjOyVhA== 110110 -xJtsaQ== 110111 -xLFzxLFuZGE= 110112 -IOCkrOCkpuCksg== 110113 -dm7DrQ== 110114 -44Gu44Gr 110115 -INC/0L7RgtC+0Lw= 110116 -aW1kZQ== 110117 -YWxhbWE= 110118 -4oCq 110119 -IHN0ZWpuxJs= 110120 -0LXRgNC1 110121 -6ZKi 110122 -5py65p6E 110123 -IOiz 110124 -5ZSx 110125 -IOuFuOy2nA== 110126 -INC70LjQsdC+ 110127 -4oCK 110128 -IGNleg== 110129 -cm9txJs= 110130 -zq/Pic69 110131 -z4bOrg== 110132 -IO2ZqQ== 110133 -IGRsb3Vo 110134 -6aqo 110135 -5YWs6YeM 110136 -5Ly4 110137 -IOODkQ== 110138 -5LuZ 110139 -IG9sbWFkxLE= 110140 -0LXQu9C40Yc= 110141 -0L7QttC00LXQvdC40Y8= 110142 -IHPDtnlsZWRp 110143 -w6F0ZWs= 110144 -7IO1 110145 -4Lii4Lin4LiB 110146 -IOmbuw== 110147 -INC/0LXQsg== 110148 -INC00YDRg9Cz0LjQtQ== 110149 -w6F0a3U= 110150 -INi52Yg= 110151 -b3bDoW5h 110152 -2LbYsQ== 110153 -IOuBnQ== 110154 -IO2Gte2VtA== 110155 -zpY= 110156 -IHZ1cg== 110157 -5Yay 110158 -INC/0YDQtdC6 110159 -IOCkquCklQ== 110160 -IOC5gOC4lw== 110161 -44Go44GL 110162 -2LnZhg== 110163 -5a6H 110164 -z4TOtg== 110165 -IG7hurFt 110166 -INGB0LLQvtCx 110167 -IM60z40= 110168 -55aX 110169 -LdC5 110170 -6aaZ5riv 110171 -2KrYpw== 110172 -z4POuc68zr8= 110173 -7ZWE 110174 -IOivpuaDhQ== 110175 -5Lih 110176 -2Y7Yp9mE 110177 -IFRyxrDhu51uZw== 110178 -ZW7DqWhv 110179 -INGA0LXQutC+0LzQtdC90LTRgw== 110180 -24zYsdmH 110181 -4Liy4LiW 110182 -INqp2KfZhdmE 110183 -2KjYtw== 110184 -2LLbjNmG2Yc= 110185 -INC00L7Qu9C20L3QsA== 110186 -IOunjuydgA== 110187 -4peP4peP4peP4peP4peP4peP4peP4peP 110188 -bGVwxaHDrQ== 110189 -0LDQu9C+0LM= 110190 -44Kq44Oz 110191 -IOuzhA== 110192 -xLFyxLE= 110193 -INis2KfZhdi52Yc= 110194 -5puc 110195 -b2rDrQ== 110196 -INGI0LvRj9GF 110197 -IGjEsXpsxLE= 110198 -INiu2LXZiNi1 110199 -0JDRgA== 110200 -5ZyY 110201 -INC20LjQstC+0YI= 110202 -6bE= 110203 -IG5n4buv 110204 -IHbDsm5n 110205 -6I6r 110206 -INC30LDRhdC+0LQ= 110207 -7JmE 110208 -INGB0LvQtdC00YPRjtGJ 110209 -6Ze7 110210 -0ZHRgA== 110211 -IGNodsOt 110212 -6IOc 110213 -44Gq44GX 110214 -IHRla25vbG9q 110215 -ZWptw6luYQ== 110216 -IOygiA== 110217 -7LOQ 110218 -5pmu6YCa 110219 -IHbDvXJv 110220 -IGF5csSx 110221 -INC/0YDQtdCy 110222 -IGfDs3A= 110223 -4LmC4LiB 110224 -4LiX4Liz4LmD4Lir 110225 -5Y+O 110226 -5ZiJ 110227 -IHRlbGV2 110228 -44Go44GT44KN 110229 -64+M 110230 -cGh5bA== 110231 -4Lij4Liy4Liw 110232 -IOeI 110233 -0YHRgtC40YLRgw== 110234 -77yM6L+Y 110235 -IM6RzrM= 110236 -xI1rdQ== 110237 -5o+0 110238 -4KS+4KSv4KSk 110239 -5o+P 110240 -44KC44GX 110241 -INC/0LXRgNC10YE= 110242 -IOyYge2ZlA== 110243 -aWRsYQ== 110244 -5Y6F 110245 -77yPOg== 110246 -2KrYsduM 110247 -4Lib4LiP 110248 -INC90LDRgdC10LvQtdC90L3Rjw== 110249 -IGFtYcOn 110250 -IGtkbw== 110251 -INC40LfQstC10YHRgg== 110252 -0YjQuNGA 110253 -7KOg 110254 -xaFpdA== 110255 -IHThu5Fj 110256 -7J6Q7J2Y 110257 -0YfQsNGC 110258 -5Y+D 110259 -6Zu2 110260 -5bC6 110261 -IGluZGly 110262 -INC90LDRhtGW0L7QvdCw0LvRjA== 110263 -IHhhbmg= 110264 -24zYr9uM 110265 -INC40L3RgtC10YDQtdGB 110266 -INii2LPbjA== 110267 -6YKj5Liq 110268 -IGJpbG0= 110269 -0LDQvdC1 110270 -IHTEm2NodG8= 110271 -0YfQuNC6 110272 -INC00L7RhdC+0LQ= 110273 -6IKh5Lu9 110274 -5YWz57O7 110275 -44Gr44Gq44Gj44Gf 110276 -INC/0YDQtdC00L/RgNC4 110277 -IGdlw6dlbg== 110278 -INio2YI= 110279 -IHbDvXpuYW0= 110280 -IOC5gOC4hOC4ow== 110281 -INGF0YLQvg== 110282 -2LTZig== 110283 -5Y+C5Yqg 110284 -0YHRgtCy0LXQvdC90L7Qs9C+ 110285 -0YLRgNC+0L0= 110286 -woDCgMKAwoA= 110287 -5qKd 110288 -0LHQsNCy 110289 -27Hbtg== 110290 -6aG6 110291 -IGpheg== 110292 -INin2YTZhdmE 110293 -INin2KvYsQ== 110294 -INC/0YDQuNCy0L7QtA== 110295 -0LDQvdGD 110296 -4KWB4KSt 110297 -5pen 110298 -0YzQtQ== 110299 -4Liq4Lil 110300 -0LvRj9GO0YI= 110301 -4Lin4LiU 110302 -xrDhu5tp 110303 -2YrZhdip 110304 -44Kv44Ot 110305 -0LvQuNC5 110306 -zrPPgc6s 110307 -IHBlcmZvcm1hbg== 110308 -6K+J 110309 -5L2g55qE 110310 -7IWU 110311 -0L3QtdC90LjRjw== 110312 -4butaQ== 110313 -2YjYstuM 110314 -6Z+/ 110315 -4KWI4KSm 110316 -IOuquA== 110317 -IGVzZXI= 110318 -INmB2LnYp9mE24zYqg== 110319 -0L3RltCy0LXRgA== 110320 -zrrPgc6x 110321 -6Ki8 110322 -IG5lbW9j 110323 -IHlhcmTEsW1jxLE= 110324 -IOeJuQ== 110325 -INC60L7Qvw== 110326 -INCc0L7Qtg== 110327 -4KS84KSV 110328 -IOuc 110329 -INGA0LXQsNC6 110330 -IHBvem9y 110331 -wqDQkA== 110332 -INmK2YM= 110333 -INGB0LDQtA== 110334 -IOWFqw== 110335 -INC/0L7Qu9GM0Lc= 110336 -IHJhxJ9tZW4= 110337 -dGVybsOt 110338 -c2l5b24= 110339 -0YHRj9GH 110340 -b3ZhbsO9 110341 -IOuMgO2VnOuvvOq1rQ== 110342 -INCy0ZbQtNCx 110343 -INCQ0L3QtA== 110344 -c3R2YQ== 110345 -6YyE 110346 -IOuR 110347 -4Li04LiE 110348 -asOtdA== 110349 -IGt1bGxhbsSxY8Sx 110350 -IOafpeeciw== 110351 -2YHZhA== 110352 -INCv0LrRidC+ 110353 -55yL5Yiw 110354 -0YDQtdGF 110355 -INin2YTYudix2KjZitip 110356 -66Gc6re4656o 110357 -IOCkrOCknA== 110358 -INC/0YDQuNC/ 110359 -IHNjaG9w 110360 -INio2KfZhNin 110361 -5a6F 110362 -INin2YTZhdmH 110363 -zrHOvc6x 110364 -4KWL4KS1 110365 -5YG0 110366 -5byA5Y+R 110367 -2YXYp9mE 110368 -IOCkp+CksA== 110369 -IGRhaGls 110370 -44CB44GT44Gu 110371 -4Lix4LiI4LiI 110372 -0YHQv9GW0LvRjA== 110373 -IOCkleCkqg== 110374 -INCy0LXRhw== 110375 -INCy0LjQtNCw 110376 -INmF2LnZhg== 110377 -INC+0YLQu9C4 110378 -aeG7hQ== 110379 -0LvQuNGI 110380 -INCf0L7RgdC70LU= 110381 -44GT44GT 110382 -IGvDvGx0w7xy 110383 -INis2LE= 110384 -IOa8 110385 -6Ie6 110386 -IG1ldmN1dA== 110387 -2b7bjA== 110388 -INin2YTYs9mE2KfZhQ== 110389 -0LjRgtC10LvQtdC5 110390 -INGA0L7RgdGC 110391 -IGVkaWw= 110392 -IOW3sg== 110393 -57K+5ZOB 110394 -5LuF 110395 -4oCZeWU= 110396 -4KWI4KSCLg== 110397 -IOWGhg== 110398 -64iE 110399 -IOyZlQ== 110400 -5pit 110401 -IM6azr8= 110402 -bWVkZW4= 110403 -IG9sYWI= 110404 -INqp2YjYrw== 110405 -4LiE4Liy4Liq 110406 -0LXQvdC90LDRjw== 110407 -5oq8 110408 -eWzDvGw= 110409 -IHNldml5 110410 -IGTEm3Rp 110411 -4oCsCg== 110412 -INi52LI= 110413 -IHXhu5FuZw== 110414 -INiz2LHZhQ== 110415 -0LXQvdC1 110416 -INC80LDQu9C10L3RjA== 110417 -INCy0ZbQtNC+0Lw= 110418 -4Lix4Lia4LiX 110419 -IFRow6Fp 110420 -IOCkhuCkteCktg== 110421 -cm92ZcWI 110422 -55uj 110423 -INGP0LfRiw== 110424 -IE95 110425 -5aOB 110426 -0LLQsNGC0Yw= 110427 -0LvQsNC00YM= 110428 -2KfYtdmE 110429 -b3TFmWVi 110430 -2K/Zitir 110431 -7Y+w 110432 -zr3Ov868 110433 -0LPQvtGA0L7QtA== 110434 -IG11aA== 110435 -4oCZbA== 110436 -0YHRgtCy0L7RgA== 110437 -5YWE 110438 -0JXQoA== 110439 -2LfZhA== 110440 -6ZyH 110441 -2Y7Yqg== 110442 -IGJsw60= 110443 -IGVkaWxkaQ== 110444 -6Z2g 110445 -5LqM5Y2B 110446 -5peX 110447 -IMOnaXo= 110448 -IMSR4bqjbw== 110449 -IG9wYXQ= 110450 -b8SfYW4= 110451 -67KM 110452 -IOmg 110453 -IHNlYmVw 110454 -0YPRgtC4 110455 -5Yi6 110456 -2LfYqA== 110457 -ZXbFocOtbQ== 110458 -Y2hvcA== 110459 -55Sa 110460 -IG5naOG7gQ== 110461 -INC/0LDRgNGC 110462 -4Li44LiE 110463 -2qnbjNmE 110464 -ZHVt 110465 -IG9ydGFr 110466 -44Gf44GX 110467 -IG9ieXZhdGVs 110468 -IHbDvWNo 110469 -IHZlcmVu 110470 -INCy0LXRgdGM 110471 -INCU0LA= 110472 -IO2VmOyngOunjA== 110473 -5aaC5q2k 110474 -IOCkruCkueCkpA== 110475 -4Lix4LiH4LiB4Lik4Lip 110476 -44CC6L+Z 110477 -INCz0LDQuw== 110478 -IHNhbmF0 110479 -6aCG 110480 -INGB0LDQvNC+ 110481 -5Zuw 110482 -4Li14Lit 110483 -IEJhxZ9rYW4= 110484 -z4TOv8+Fz4I= 110485 -IHlhcHTEscSfxLE= 110486 -xZlpdA== 110487 -INGB0ZbQu9GM 110488 -4KS+4KSo4KSk 110489 -INmG2Ko= 110490 -IGtoxINu 110491 -4LiK4LiZ4Liw 110492 -0LzQuNC90Lg= 110493 -44Os44O8 110494 -64Ks 110495 -6YWS5bqX 110496 -INin2YTZitmI2YU= 110497 -5LmX 110498 -4LiE4Lij4LiH4LiB4Liy4Lij 110499 -2YHYp9mC 110500 -IOCkj+CkuA== 110501 -IOah 110502 -2q/YsA== 110503 -IOCkh+Cksg== 110504 -0LXQu9C10L3QuNGP 110505 -4LiB4Lij4LiT 110506 -5Lic6KW/ 110507 -zp/OnA== 110508 -IG3huq10 110509 -IHNuw60= 110510 -wpA= 110511 -4LmA4Lij4Liy 110512 -7ZW07JW8 110513 -IOyEnOu5hOyKpA== 110514 -INiv2KfYrtmE 110515 -IHRo4bqvbmc= 110516 -7YOI 110517 -0LDQstGB0Y8= 110518 -INGW0Lw= 110519 -2KfZhdiq 110520 -INmI2YLYqg== 110521 -4KWC4KSB 110522 -IOiQ 110523 -INiz2YTYp9mF 110524 -IHZ6ZMSbbA== 110525 -5biM5pyb 110526 -5a2Y5qGj 110527 -IOC4l+C4sw== 110528 -INCy0ZbQudGB0Yw= 110529 -0LDRgNCw0L0= 110530 -INGA0ZbQug== 110531 -INC/0LjRgdGM 110532 -IOG8kA== 110533 -6riw64+E 110534 -INC/0L7RgdGC0L7Rj9C9 110535 -IOWMl+S6rA== 110536 -IE7Em20= 110537 -2LTZhtin2YXZhw== 110538 -IGRhbMWhw61jaA== 110539 -INio2KfYuQ== 110540 -IHBvaHk= 110541 -2KfZhNmB 110542 -4Lie4Lin4LiB 110543 -6Ys= 110544 -IGNpaA== 110545 -2aI= 110546 -5Li0 110547 -44Kv44OI 110548 -0L/QvdGP 110549 -INC00LDQuw== 110550 -2ZLYsQ== 110551 -44CA44CAIOOAgCDjgIA= 110552 -5oql5ZGK 110553 -2YjYr9uM 110554 -4bujaQ== 110555 -0YbRltGU0Y4= 110556 -IOODgA== 110557 -INGB0YLQtdC/ 110558 -cmHFvg== 110559 -IFNhxJ8= 110560 -IHR1eeG6v24= 110561 -IGFsbWFr 110562 -INC30LDQsdC+0LvQtdCy0LDQvdC40Y8= 110563 -IM+Dz4c= 110564 -IO2L 110565 -INCy0LjQvA== 110566 -56Gs 110567 -IOS6lA== 110568 -IGlraW5jaQ== 110569 -4Li44LiN 110570 -4Liq4Liy4Lin 110571 -IOyEuOqzhA== 110572 -INmF2K3ZhA== 110573 -4Lij4Liw4Lir4Lin 110574 -IGVsZWt0cm9u 110575 -IGjhuqFp 110576 -5pei 110577 -IO2WpQ== 110578 -IGppbsOp 110579 -IG5naGU= 110580 -5pGp 110581 -INGB0L7QsdGW 110582 -xq8= 110583 -0YLRg9GA 110584 -5rG96L2m 110585 -2LTYp9mH 110586 -IGTDoG5o 110587 -5Li5 110588 -5LuK5pel 110589 -44OQ44O8 110590 -0LLQsNC90LjRjw== 110591 -INiz2KfZhQ== 110592 -546v5aKD 110593 -INin2YTZhdmG2Ko= 110594 -INGB0LXRgNC0 110595 -6YGg 110596 -zrXPhA== 110597 -INCw0LLRgg== 110598 -4Liy4LiH4Lin 110599 -IHZ6dGFo 110600 -cnXFvg== 110601 -0LDQu9GM0L3QsNGP 110602 -INi32LHYp9it24w= 110603 -4LmC4Lij4LiH4LmB4Lij4Lih 110604 -IMSNYXN0bw== 110605 -IOq8 110606 -z4PPhM+M 110607 -IGJ1cmFkYQ== 110608 -IMSweg== 110609 -IOq3uOuemA== 110610 -5bKb 110611 -INi02YjZhtiv 110612 -xaFlaw== 110613 -IOydtOyVvA== 110614 -44KM44Gq44GE 110615 -6re5 110616 -bGFtxLHFnw== 110617 -5LuN 110618 -Y2jDoXpldA== 110619 -INGB0YPRgg== 110620 -5peg5rOV 110621 -5rWm 110622 -xJtsYQ== 110623 -4LmD4LiZ4LiK 110624 -IGPDom4= 110625 -zp/Okw== 110626 -IHp2w70= 110627 -INm+2KfYsQ== 110628 -INC60LvRlg== 110629 -IG5vdsOp 110630 -55SY 110631 -67mg 110632 -bcOh 110633 -INGB0L7Quw== 110634 -4KSV4KSw4KSj 110635 -0L3QvtGH 110636 -IGZpaw== 110637 -IOCknOCklw== 110638 -4LmH4LiZ4LiV 110639 -INmF2KrYrQ== 110640 -IHBoacOqbg== 110641 -IG9sc3Vu 110642 -INC60LDQsQ== 110643 -IGjDunQ= 110644 -6ISx 110645 -IOWW 110646 -IEjhuqNp 110647 -IHTEm8W+ 110648 -IHRow6Fp 110649 -INiq2KfYqA== 110650 -LdCf 110651 -2KvYp9ix 110652 -54aK 110653 -INC90LjQvNC4 110654 -IHpwcmFj 110655 -IOCkpOCkuQ== 110656 -INC80LDQutGB0LjQvA== 110657 -bWV5aQ== 110658 -INGB0L7RhtC4 110659 -5rKS 110660 -IOyViuuKlA== 110661 -77y/Xw== 110662 -5ZWm 110663 -INin2YbZiNin2Lk= 110664 -5pq0 110665 -5LiK5rW3 110666 -5YW35pyJ 110667 -4KWB4KSs 110668 -7JWZ 110669 -IO2BsA== 110670 -IO2emA== 110671 -IHRyw6FuaA== 110672 -4KS/4KSv4KSo 110673 -44G+44G+ 110674 -0L/QvtGH 110675 -bcSbcg== 110676 -5bOw 110677 -INmF2LXYsQ== 110678 -INGN0YTRhNC10LrRgtC40LI= 110679 -IOeP 110680 -bGVyaXlsZQ== 110681 -4oia 110682 -IOy2lQ== 110683 -IOqyjOyLnA== 110684 -7J2R 110685 -IHBvxZnDoWQ= 110686 -INi02KjaqdmH 110687 -2KfZh9i0 110688 -INiu2K/Zhdin2Ko= 110689 -IG5hxaFl 110690 -zr3Ov8+N 110691 -IHnDtm5lbGlr 110692 -IGtvcms= 110693 -2KfZh9mF 110694 -6LCI 110695 -IM68zrc= 110696 -IGRvbGFy 110697 -57Wm 110698 -IM6Vz4U= 110699 -IG9iZG9iw60= 110700 -IM68z4w= 110701 -4LmA4Lit4LiB 110702 -INm+2KfYs9iu 110703 -6KGl 110704 -2KfYudiv 110705 -44KJ44GE 110706 -zq3Ouw== 110707 -0LjRgtGL 110708 -IOuFvA== 110709 -IF57Ww== 110710 -zq/Osw== 110711 -5qCR 110712 -bMSxbmRh 110713 -IOyXrOufrA== 110714 -wqPCow== 110715 -xZlpbA== 110716 -INCw0LLRgtC+0YA= 110717 -z4TOuc66z4zPgg== 110718 -dWR1cg== 110719 -IGPGsA== 110720 -IGvEsXk= 110721 -0YHQtdC8 110722 -INij2KjZiA== 110723 -z4TOuc66z47OvQ== 110724 -27Hbtw== 110725 -6LK4 110726 -INC/0YDQvtC2 110727 -w7xuY8O8 110728 -INC90ZbRhw== 110729 -IOCkruCkpA== 110730 -44GV44KM44Gm44GE44KL 110731 -2KfYtdix 110732 -INi52YI= 110733 -INC60LDRh9C10YHRgtCy0LU= 110734 -INCT0LXRgA== 110735 -5bqG 110736 -2bk= 110737 -YWxhcmRh 110738 -INm+2LHYsw== 110739 -0LjRh9C10YHQutC+0Lk= 110740 -IHBoaW0= 110741 -zq/Ovc63 110742 -5LiH5YaG 110743 -aWxlcmluaQ== 110744 -44CB5aSn 110745 -IG9sc2E= 110746 -5qC55o2u 110747 -4oCM2LM= 110748 -IFRo4bun 110749 -cm9qZQ== 110750 -0L3RjNC+0Zc= 110751 -IHNsb3U= 110752 -4Li14Lis 110753 -xLF5b3J1bQ== 110754 -xJtq 110755 -INiu2KjYsQ== 110756 -6K6K 110757 -IOebuA== 110758 -ZWxlcmluaW4= 110759 -7ZWZ64WE64+E 110760 -0YfQtdGB0LrQuNC1 110761 -IMWfZWts 110762 -INiy2YXYp9mG24w= 110763 -IHhpbg== 110764 -4Lix4LiB4LiH4Liy4LiZ 110765 -IEVraW0= 110766 -5oS/ 110767 -INC+0LTQvdC+0Lk= 110768 -zr3Org== 110769 -5pyA5paw 110770 -h7w= 110771 -INC90LjQtg== 110772 -IOuzvA== 110773 -6LeR 110774 -INC90LDQv9C40YE= 110775 -6IGW 110776 -IOKAjA== 110777 -5qCH5YeG 110778 -IHZyw6F0 110779 -IFbDrA== 110780 -INmB2LHYp9mG 110781 -5p2l55qE 110782 -5ae/ 110783 -0YXRgw== 110784 -INio24zYsdmI2YY= 110785 -INC00YPRiA== 110786 -0LLQsNGO0YI= 110787 -IHNlYmU= 110788 -6buY 110789 -IGthecSxdA== 110790 -z4HOuA== 110791 -44Go44Gu 110792 -INC/0YDQvtGG0LXRgdGB 110793 -5oyB44Gh 110794 -0ZbQvdCw 110795 -INGC0L7Rgg== 110796 -INGC0LDQutC40LU= 110797 -VGhlbw== 110798 -INmG24zYsQ== 110799 -0YbRgw== 110800 -IGF5YWs= 110801 -4LiZ4Lit 110802 -IHNpdGVzaW5kZQ== 110803 -INqp2YbbjNmF 110804 -INGB0L7RhQ== 110805 -IOCkruCknA== 110806 -IG9sdXlvcg== 110807 -572R5Z2A 110808 -INm+2LLYtA== 110809 -IEV5bMO8bA== 110810 -ZMO8xJ8= 110811 -INio2LHYrtuM 110812 -INmF2LnYsdmB 110813 -IG9iZWM= 110814 -IMOnYWzEscWfbWE= 110815 -7IS87YSw 110816 -INGB0LLQvtGU 110817 -0L7RgdGC0LXQuQ== 110818 -Ojo6Ojo6Ojo6Ojo= 110819 -INCw0LvRjA== 110820 -56uf 110821 -INio2KfYtNmG2K8= 110822 -2KfZhNir 110823 -INC90LDQudCx 110824 -INC/0L7QutCw 110825 -zp4= 110826 -INmI2KU= 110827 -INiu2YjYp9mG 110828 -4KWB4KSq4KSv 110829 -IOC5g+C4qw== 110830 -INCx0YvRgdGC0YDQvg== 110831 -IHRo4but 110832 -64G8 110833 -IOWkmg== 110834 -5Lik5Liq 110835 -4Lih4LiV 110836 -2LLYp9ix2LQ= 110837 -IOuf 110838 -4KSv4KS5 110839 -0YnQuNC90LA= 110840 -4bqnbmc= 110841 -772X772X 110842 -4LmA4Lie4Lil4LiH 110843 -dHZydA== 110844 -INGW0L3RiNGW 110845 -zrvOtc6v 110846 -IHZp4buHbg== 110847 -kbg= 110848 -IOeZvQ== 110849 -2Y7ZiA== 110850 -IGNo4bupYQ== 110851 -c3R2bw== 110852 -IGRvxJ9y 110853 -IGlsZXI= 110854 -4KWLLA== 110855 -4LmD4LiZ4Lib 110856 -INix2YjYs9iq 110857 -2YjZhNmI 110858 -xaFsbw== 110859 -0LDQu9C40YHRgg== 110860 -5YWx5ZKM 110861 -4Lie4Lii 110862 -IOyZgA== 110863 -2YTZitmE 110864 -INGP0LrQvtCz0L4= 110865 -0LXRgdGC0Yw= 110866 -INGE0LjQvQ== 110867 -INij2YbZhw== 110868 -IE3DvGTDvHI= 110869 -IM6UzrnOsQ== 110870 -INGC0LXQuw== 110871 -4KS/LA== 110872 -0YPQutC4 110873 -INCg0KQ= 110874 -IE1hecSxcw== 110875 -4LmI4Lit4Lih 110876 -YXJrZW4= 110877 -5oCV 110878 -2KjbjNmG 110879 -0YLQsNGF 110880 -ZWJv 110881 -67O07Kad6riI 110882 -INm+2YQ= 110883 -INCz0YPQsQ== 110884 -INCy0LrQu9GO0Yc= 110885 -5pS/5rK7 110886 -IM61z4DOuc+D 110887 -INmB2KfYsdiz24w= 110888 -6K2J 110889 -z4bOtw== 110890 -KOmHkQ== 110891 -4Lio4Lij 110892 -5Ymn 110893 -4oCZeWE= 110894 -5bm05bqm 110895 -INmG2LHZhQ== 110896 -2YPZiNmF 110897 -6KKL 110898 -IG5lZGVubGU= 110899 -4LmJ4Lit4LiH4LiB4Liy4Lij 110900 -44CM44GC 110901 -INC/0L7RgdGC0YPQvw== 110902 -7JyE7JuQ 110903 -5Y2Y 110904 -6I6x 110905 -IHVtb8W+ 110906 -cG9r 110907 -0YPRgdGC0Lg= 110908 -IOmF 110909 -INGE0ZbQtw== 110910 -5buj 110911 -4Li04Lir4Liy4Lij 110912 -INC20YPRgNC9 110913 -INC00ZbRgtC10Lk= 110914 -0YPRjtGJ0LjQtQ== 110915 -5LuK5aSp 110916 -7J2065286rOg 110917 -57KJ 110918 -6JKZ 110919 -IETDvG55YQ== 110920 -0LXQs9C+0LTQvdGP 110921 -IG1pbW8= 110922 -INCy0LjQvQ== 110923 -44Gd44GT 110924 -5q+V 110925 -INij2K4= 110926 -IOWQjA== 110927 -2LPYp9mG24w= 110928 -IGthaA== 110929 -4KS/4KSv4KSw 110930 -z4DOv8+C 110931 -amV6 110932 -2YrYrA== 110933 -IHNhxJ9sYXk= 110934 -2KfYrNmH 110935 -IOeg 110936 -75w= 110937 -INis2LPYqg== 110938 -IHThu6lj 110939 -xrDGoWk= 110940 -2LTZgQ== 110941 -4Liq4LiV 110942 -INGA0LXRgQ== 110943 -IOWj 110944 -IGJpemlt 110945 -IOq3gA== 110946 -4KS/4KSs 110947 -66Gc7Jq0 110948 -INGB0YLQsNC7 110949 -INGA0YPRgQ== 110950 -IE9jYWs= 110951 -5Zyj 110952 -IMO6xI1hc3Q= 110953 -aXZlcno= 110954 -64KY64qU 110955 -0L7RgNC+0YI= 110956 -0YfQuNC90Ys= 110957 -IGlodGl5YcOn 110958 -0J3Qng== 110959 -INCd0L7Qsg== 110960 -4Li14Lii4LiU 110961 -INC/0L7RgtGA0ZbQsdC90L4= 110962 -2q/Ysg== 110963 -INGB0LrQsNC30LDQuw== 110964 -IEdpYQ== 110965 -bWVzaW5p 110966 -IGJ1bHVudXI= 110967 -5rih 110968 -0LPQvtGC 110969 -IGh1a3U= 110970 -64S3 110971 -44Y= 110972 -INin2YM= 110973 -INiv2YTbjNmE 110974 -INin2LPYp9iz 110975 -7Jew6rWs 110976 -IM6YzrU= 110977 -INiz2YjYsQ== 110978 -IOyigA== 110979 -INin2YTYr9ix 110980 -INGB0YLRgNC+0LjRgtC10LvRjA== 110981 -INGD0Lo= 110982 -IOyZnA== 110983 -0LXQu9C40Lo= 110984 -T1ZJRA== 110985 -IHRlbWl6 110986 -5Lqm 110987 -IHRoaeG6v3U= 110988 -INC/0YPRgg== 110989 -0Y7RidC10Lk= 110990 -IHVyxI0= 110991 -IMSQw6J5 110992 -5qW1 110993 -zrzOv8+F 110994 -IOC5gOC4mQ== 110995 -0LXQstC10YA= 110996 -wqDQlA== 110997 -7LSd 110998 -6Laj 110999 -IOCkheCksuCklw== 111000 -xrDhu51u 111001 -IOODrQ== 111002 -IOqzsw== 111003 -6bKB 111004 -INix2LPbjNiv 111005 -6Lqr5L2T 111006 -4Lix4LiT4LiR 111007 -eW7DrQ== 111008 -2KzYp9iq 111009 -7KeA66W8 111010 -4KSo4KSy 111011 -7JWM 111012 -0ZbQvw== 111013 -IHbDoG5n 111014 -INC/0LvQvtGJ 111015 -0L7Qt9C80L7Qtg== 111016 -5Ymy 111017 -IHRo4bqjbw== 111018 -0LvQsNC00Lg= 111019 -IOWd 111020 -INCc0Lg= 111021 -INC00LXQu9Cw0YLRjA== 111022 -6ZE= 111023 -IGh1eQ== 111024 -2KfbjNi3 111025 -INC/0L7QstGC0L7RgA== 111026 -w7xsZW4= 111027 -INmI2YE= 111028 -INmK2KrZhQ== 111029 -INGA0LXQttC40Lw= 111030 -IOy6kA== 111031 -IMOHw7xua8O8 111032 -2LnYr9iv 111033 -0L3QuNCy0LXRgA== 111034 -INCd0LjQug== 111035 -5biW 111036 -z43PgA== 111037 -YW5sYXI= 111038 -2LPYqtuM 111039 -IGJ1bHVubWFrdGFkxLFy 111040 -4LmB4Lia 111041 -dmVr 111042 -INCz0LvQsNC30LA= 111043 -5bmF 111044 -IMO6ZGFq 111045 -INCz0YDQvg== 111046 -INC60L7QvdC60YPRgA== 111047 -IGTFr2xlxb5pdA== 111048 -INi32YjYsQ== 111049 -4LiY4Liy4LiZ 111050 -INmE2YPZhg== 111051 -2LHZgg== 111052 -0JrQkA== 111053 -IOmdkg== 111054 -IOyCrOuekQ== 111055 -INGF0LLQvtGA 111056 -c3VudXo= 111057 -INmF2LTYrti1 111058 -6Zm4 111059 -IOCkog== 111060 -IHZheg== 111061 -5Lqk5piT 111062 -INGC0LXRgNGA0LjRgg== 111063 -0YfQtdGB0LrQvtC5 111064 -4Li14LmC 111065 -cm9wb2Rh 111066 -xLFsZMSxxJ/EsQ== 111067 -IOuJtA== 111068 -7ZWZ6riw 111069 -67O07ZeY 111070 -INC30LDRgtC10Lw= 111071 -wqDQsg== 111072 -44O844OG 111073 -INCe0YHQvdC+0LI= 111074 -44aN 111075 -INiv2Lk= 111076 -0J/QvtGB 111077 -5rKJ 111078 -INC70L7Qtg== 111079 -55S15a2Q 111080 -INix2K8= 111081 -INGB0YDQsNC30YM= 111082 -ZWp0ZQ== 111083 -IOCkkeCkqw== 111084 -IHTDoHU= 111085 -w61r 111086 -bGFubWFzxLE= 111087 -0LrQsNGC 111088 -4Liy4LiB4Liy4Lio 111089 -44Ki44Kk 111090 -z4TOuc6/ 111091 -IOWn 111092 -4KSq4KSk 111093 -RVk= 111094 -IGptw6k= 111095 -IG9ka2F6eQ== 111096 -IOqwnOyduA== 111097 -6YG/ 111098 -YsSbaA== 111099 -0KDQng== 111100 -54OI 111101 -IHphcmFy 111102 -2q/ZiNmG2Yc= 111103 -IHRyw6w= 111104 -IG3huqFp 111105 -0LXQvdC90YvQvA== 111106 -INGN0LrQvtC90L7QvA== 111107 -6Zuj 111108 -IO2E 111109 -5o6J 111110 -IHNvcnU= 111111 -INCk0LXQtNC10YDQsNGG0LjQuA== 111112 -INGB0LjRgdGC0LXQvNC4 111113 -5paZ54Sh5paZ 111114 -IOCkleCkrQ== 111115 -INmH2YbYrw== 111116 -4Li44LiH4LmA4LiX4Lie 111117 -IE9zbWFubMSx 111118 -INC/0YDQvtC00L7Qu9C2 111119 -INmI2YTYpw== 111120 -IMSNbMOhbmt1 111121 -IGFkxLFt 111122 -IM+AzrHPgc6s 111123 -IHrDocWZw60= 111124 -IOC4iOC4s+C4gQ== 111125 -INC/0LXQvQ== 111126 -bWVuaW4= 111127 -IOyYpOuKmA== 111128 -ZW1peg== 111129 -zr/Pjc+C 111130 -LeCkuA== 111131 -7ZWY7Iuc 111132 -INGF0LLQuA== 111133 -44Kw44Op 111134 -INC/0L7RiA== 111135 -INCe0LTQvdCw0LrQvg== 111136 -0ZbQtNC90L4= 111137 -7Zic 111138 -0YnQuNC80Lg= 111139 -6IO4 111140 -IMSwbGs= 111141 -bWV5 111142 -INC30LTQsA== 111143 -zrrOu863 111144 -0LDQu9C+0Lw= 111145 -4LmA4Lio4Lip 111146 -2KfZhtin 111147 -IM6fzrk= 111148 -IOWPjA== 111149 -4Li14LiC 111150 -INio2LM= 111151 -6KeE5a6a 111152 -aXNheQ== 111153 -dWthcsSx 111154 -5rWB6YeP 111155 -dsOtbQ== 111156 -zrvPjg== 111157 -5LmZ 111158 -IOCksuCkoQ== 111159 -INmG2K/Yp9ix2K8= 111160 -0LXRgNC+0Lw= 111161 -IHPEsXJhc8SxbmRh 111162 -IHLEg25n 111163 -xqFt 111164 -IGzhuqFuaA== 111165 -4KSD 111166 -4KWB4KSj 111167 -dXpleQ== 111168 -INGD0LLQsA== 111169 -dsSbZA== 111170 -0YvRgQ== 111171 -IM66zrk= 111172 -0ZU= 111173 -24zYpw== 111174 -4LiH4LiE 111175 -cGh5bHVt 111176 -IGJlcmFiZXI= 111177 -4Li14LiU 111178 -5rWu 111179 -4KS+4KS44KSo 111180 -b3ZpY2U= 111181 -6Kan 111182 -IOCkuOCkqw== 111183 -5bCR5aWz 111184 -0LDQvdGC0Lg= 111185 -6aiT 111186 -IHNvw6F0 111187 -6ay8 111188 -bGFubcSxxZ8= 111189 -IGLhur9w 111190 -2ZDZhA== 111191 -IHNhecSxc8Sx 111192 -INmC2K/ZhQ== 111193 -4KWI4KSu 111194 -4KS54KSu 111195 -INGA0YPQutC4 111196 -INi12YHYrdmH 111197 -xaFreQ== 111198 -6buS 111199 -6IGa 111200 -44GL44Gr 111201 -IHPDonU= 111202 -0LXQtNCw0LM= 111203 -INGB0YLQvtGA0L7QvdGL 111204 -IHJ1aw== 111205 -4oCM4oCM 111206 -INii2YjYsQ== 111207 -INi52K/ZhQ== 111208 -w7Vp 111209 -44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 111210 -INio2KfYstin2LE= 111211 -IGVkZWI= 111212 -IHbEjWV0bsSb 111213 -0L7Qv9Cw0YE= 111214 -INC90LXQsw== 111215 -bWF5YW4= 111216 -0LrQvtGB0YLRjA== 111217 -IHN2xa9q 111218 -xJ/EsW5kYQ== 111219 -2LDbjNix 111220 -TeG7mXQ= 111221 -0IQ= 111222 -IHlhcHTEsQ== 111223 -4KS/4KSl 111224 -INmF2YfYsQ== 111225 -INC00L7RgdGC0Lg= 111226 -INi12YjYsQ== 111227 -bWVzaW5l 111228 -IETDom4= 111229 -5LiA5LiL 111230 -542O 111231 -INCc0LjRhQ== 111232 -INC+0YfQuA== 111233 -44Km44Kn 111234 -INGW0YE= 111235 -IGdpw6Fj 111236 -5Zyo57q/6KeC55yL 111237 -INin2K/Yp9mF2Yc= 111238 -0YbQvtCy 111239 -INC60L7QvNGD 111240 -IMSwbmdpbGl6 111241 -INCz0YDQsNC2 111242 -44Gm44KC 111243 -IGNo4buv 111244 -0L7Qu9GM0LrRgw== 111245 -bcSbdA== 111246 -0Y/Qs9C+0Lw= 111247 -0YfQsNGB0YI= 111248 -7Ja8 111249 -IGtow7Nh 111250 -INCQ0LQ= 111251 -INii2YI= 111252 -IGt1cnVsdcWf 111253 -zqzOtg== 111254 -INC20L7Qsg== 111255 -INCy0YHRgtGA0LU= 111256 -INmI2YTZgw== 111257 -IHR1eeG7h3Q= 111258 -ecSx 111259 -INCS0L4= 111260 -IHbhu41uZw== 111261 -2LnZitip 111262 -IG9wxJt0 111263 -2KfZitiv 111264 -4KWILgo= 111265 -INGB0LDQvNC4 111266 -5aqS 111267 -IHN2w71jaA== 111268 -IOuCmO2DgA== 111269 -7IaQ 111270 -INmE2Lk= 111271 -IGV0a2lu 111272 -IE7DoQ== 111273 -IHNvdXTEmw== 111274 -7Li17J2Y 111275 -IOetiQ== 111276 -INix2LPZhQ== 111277 -INiu2KfZhtmH 111278 -IOWutg== 111279 -aeG7gW0= 111280 -64WQ 111281 -6rCI 111282 -7LCp 111283 -xb5pbA== 111284 -0YHRgtC40YLRg9GC 111285 -b3J1xI0= 111286 -INil2LDYpw== 111287 -4LmE4LiC 111288 -4Li14LiK 111289 -0YDQsNCx 111290 -7ZWZ7IOd 111291 -IOyJ 111292 -cm5law== 111293 -INin2LPYqtiu2K/Yp9mF 111294 -44CAIOOAgCDjgIAg44CA 111295 -INCy0YHQtdC8 111296 -IOygleuPhA== 111297 -IHZ5ag== 111298 -6YCx 111299 -0LDQu9GM0L3QvtC1 111300 -IGNodXnhu4du 111301 -7KeA7JuQ 111302 -aWxlcmluZQ== 111303 -IOyVhOustA== 111304 -INC+0LrQvtC70L4= 111305 -4KS+4KS14KSo 111306 -4LiZ4Liy 111307 -0L7Qv9GA0Lg= 111308 -ZHLFvg== 111309 -INGB0YPRgdC/0ZbQu9GM 111310 -INio2YM= 111311 -dWt5 111312 -IM+Hz4k= 111313 -IHR14bqnbg== 111314 -bmljdHbDrQ== 111315 -INmH2K/ZgQ== 111316 -IGNoaeG7gXU= 111317 -zpfOnQ== 111318 -5bCP5aeQ 111319 -7ZWY7JiA 111320 -IGtsYXM= 111321 -4buZbg== 111322 -IOydtO2bhA== 111323 -2YbYp9mF2Kw= 111324 -xI1hc3Q= 111325 -INin2YTYrtin2LU= 111326 -bMSxxZ8= 111327 -INi52YXYsQ== 111328 -44CNCg== 111329 -0LjQsdC+0LvQtdC1 111330 -44KK44Gu 111331 -44Wg 111332 -5Lmf5LiN 111333 -0LrRgNC10YI= 111334 -IOyU 111335 -z4TOuc6x 111336 -INGD0L/RgNCw0LLQu9GW0L3QvdGP 111337 -5rKi 111338 -IGtlc2lu 111339 -7KGM64uk 111340 -66i464uI 111341 -55yf55qE 111342 -IGJha8SxbQ== 111343 -5p2x5Lqs 111344 -vrg= 111345 -2YXZhNmD2Kk= 111346 -0L7RgtGA0LXQsQ== 111347 -ZMSxbg== 111348 -IFDFmWk= 111349 -IG3Em2xp 111350 -IM60zrfOvM6/ 111351 -5a+4 111352 -INmI2YPYp9mG 111353 -IOCkquCkog== 111354 -INCy0LXRgNGF 111355 -INC10ZE= 111356 -Q8OhY2g= 111357 -5L2c5Li6 111358 -INCa0L7Quw== 111359 -INCy0LU= 111360 -INC00LXRgNC2 111361 -ZW1vYw== 111362 -44G444Gu 111363 -INCw0YDRhQ== 111364 -IGtp4bq/bQ== 111365 -IOaYjg== 111366 -INC70Y7QtNC40L3QuA== 111367 -67c= 111368 -INmI2KfZhNiq 111369 -IOiw 111370 -54Gv 111371 -7ZmV 111372 -IOq1rOunpA== 111373 -IOenkQ== 111374 -aXRuw60= 111375 -0LjRh9C10YHQutC40LU= 111376 -INmG2YHYsw== 111377 -INiq2YTZgQ== 111378 -2KfZgduM 111379 -INit2LPZhg== 111380 -4pah4pah 111381 -w712w6E= 111382 -xJ/EsW4= 111383 -xLF5b3J1eg== 111384 -IENow60= 111385 -INm+2pjZiNmH2LQ= 111386 -IM+Ezq0= 111387 -IM+Dz4fOtQ== 111388 -0L7Qu9C10YI= 111389 -zrHOuc60 111390 -IGjhuqF0 111391 -4Lig4Liy4LiE 111392 -5Yaw 111393 -IHJ5Y2hsZQ== 111394 -aXRlbGk= 111395 -wqB6 111396 -4Lii4LiB 111397 -5qi5 111398 -INis2YjYp9mG 111399 -5piM 111400 -IMO8cmV0aW0= 111401 -4Lij4Liw4Lia 111402 -4Lib4Lij4Liw4Lih 111403 -zqzPgw== 111404 -5bKp 111405 -INGD0YHRgtGA0L7QuQ== 111406 -IHZlcmlsZW4= 111407 -aWNobmk= 111408 -IHDFmcOtbW8= 111409 -INin2YTYsNmH2KfYqA== 111410 -7L2c 111411 -5pyx 111412 -INiz2K4= 111413 -0ZbQu9Cw 111414 -0YPQvNCw 111415 -4Lir4Liy 111416 -24zYr9in 111417 -5bK4 111418 -5LiA5a6a 111419 -IOS8mg== 111420 -INCf0ZbQtA== 111421 -INGH0LjRgg== 111422 -0LjRjg== 111423 -INCX0LDQvw== 111424 -0YLQuNGP 111425 -IOqwnOuwnA== 111426 -INGC0LXQvtGA 111427 -0Y/RgdGM 111428 -IHDFmcOtcHJhdg== 111429 -KOWcnw== 111430 -2YXZig== 111431 -IHDFmWVkZXbFocOtbQ== 111432 -IFRlbW11eg== 111433 -INC/0L7QtNC00LXRgNC2 111434 -INC90LXQtNC+0YHRgtCw0YI= 111435 -IOydtOycoA== 111436 -IGto4buPaQ== 111437 -INin2YTYqtit 111438 -INmF2YXaqdmG 111439 -IHZob2Q= 111440 -0LXQstC+0Lk= 111441 -0L7QstCw0Ls= 111442 -INC90LDQu9C10LY= 111443 -77y8Og== 111444 -4Lii4Liw 111445 -INmF2KfYtNuM2YY= 111446 -IGfhu61p 111447 -YWzEsW0= 111448 -IOy1nOyggA== 111449 -2ZHZhw== 111450 -4buZcA== 111451 -4KWA4KWkCg== 111452 -INC/0LjRgQ== 111453 -INCy0YHRjw== 111454 -0YfQtdC8 111455 -b3plbsOt 111456 -IOS6mua0sg== 111457 -0LXRgNCw0LvRjA== 111458 -6riw64qU 111459 -INC/0YDQtdC3 111460 -INi52YXZiNmF24w= 111461 -0LjRh9C90LjRhQ== 111462 -IOaysw== 111463 -b2Ruw60= 111464 -5Y+q5piv 111465 -IHBvZHA= 111466 -4LmJ4Lit4LiH4Lie 111467 -4KS+4KSv4KSm 111468 -4KS+4KSH4KSy 111469 -4Lil4LiU 111470 -INGA0ZbRiNC10L3QvdGP 111471 -INGC0YPRgA== 111472 -0YHRjNC60YM= 111473 -IHNhbGTEsXI= 111474 -INCb0YzQsg== 111475 -44CBCg== 111476 -INm+24zZiNmG2K8= 111477 -5a2m5Lmg 111478 -zrvPiQ== 111479 -b3ZpdA== 111480 -w7xsZQ== 111481 -5aWz5oCn 111482 -wp8= 111483 -ZW1leg== 111484 -IGhhbGU= 111485 -4omm 111486 -IM6Vzro= 111487 -z4TOt86zzr/Pgc6vzrE= 111488 -a8O9 111489 -7ISx7J2E 111490 -IHTDvW0= 111491 -4KWHLQ== 111492 -IHplam3DqW5h 111493 -5pm2 111494 -IG5nb24= 111495 -44CPCgo= 111496 -6L2v5Lu2 111497 -6YKj5LmI 111498 -INC60LLQsNGA0YLQuA== 111499 -INmF2YbYuA== 111500 -b25lYw== 111501 -INCz0LvQuA== 111502 -4KWB4KSw4KSV 111503 -IFNva29s 111504 -IOS/nQ== 111505 -0LTQuNCy 111506 -w6FsbsOtbQ== 111507 -YWNhxJ/EsQ== 111508 -YcWfYQ== 111509 -INmF2KfZhNuM 111510 -IMOWbg== 111511 -0LjRgtC10LvQuA== 111512 -INiu2LHYrw== 111513 -IGt1bGxhbsSxbA== 111514 -INmF24zZhA== 111515 -IO2aqA== 111516 -w6Nu 111517 -IHJvc3Q= 111518 -IOuWoA== 111519 -dWJhdA== 111520 -IOWPgg== 111521 -INio2LHYp9mK 111522 -INC80LXQvdGM 111523 -4Lix4LiE4Lij 111524 -INC/0L7QvNC+0LM= 111525 -INit2LbZiNix 111526 -IHRo4buLdA== 111527 -5Lmz 111528 -IOyLoOyyrQ== 111529 -IO2YhOyerA== 111530 -IOu5oA== 111531 -0LLRgNC+0L/QtdC5 111532 -IG5lamVu 111533 -0ZbQutCw 111534 -IOyauA== 111535 -INmF2KjYp9ix 111536 -IMSNZWs= 111537 -IGthbGs= 111538 -IGFtYWM= 111539 -2KfYr9iq 111540 -INmF2KfYs9mH 111541 -IGFyYXPEsW5kYWtp 111542 -INCx0LXRgQ== 111543 -INC+0YLQtNC10LvRjA== 111544 -4b22 111545 -IM6kzrY= 111546 -dnlr 111547 -2KzZhg== 111548 -u+qyjA== 111549 -INC90LjRh9C10LPQvg== 111550 -INi02KfZhdmE 111551 -INGD0YHQu9C+0LLQuNGP0YU= 111552 -bGFtYXPEsQ== 111553 -6L2J 111554 -5769 111555 -INC20LjQtA== 111556 -INC+0YLQvdC+0YE= 111557 -INC30LTRltC50YHQvdGO 111558 -IFbhu5tp 111559 -2YjZhNuM 111560 -IHRpc8Ot 111561 -IM+Hz4HPjA== 111562 -IHByYWNvdm7DrQ== 111563 -INmK2YPZiNmG 111564 -IGJlxZ8= 111565 -2KzYsg== 111566 -4Lix4Lia4Lij 111567 -IFnDtm5ldA== 111568 -INi02LHYp9uM2Lc= 111569 -INiq2YjYs9i52Yc= 111570 -55eH 111571 -4LiH4LmA4Lib 111572 -5LiA5qyh 111573 -INCg0L7RgdGB0LjQudGB0LrQvtC5 111574 -5pyA6auY 111575 -IHNwb2x1 111576 -0LTQsNC10YLRgdGP 111577 -0ZbRgtGD 111578 -INC+0LHRgNCw0YI= 111579 -ZW5law== 111580 -IG1law== 111581 -5aaI 111582 -INC00L7Qv9C+0LvQvdC40YLQtdC70Yw= 111583 -IOey 111584 -INmE2YTYqg== 111585 -IEhhemlyYW4= 111586 -5riI 111587 -4LmM4LiC4Lit4LiH 111588 -INGE0L7QvQ== 111589 -IOqyg+ycvOuhnA== 111590 -IG5ow6k= 111591 -IGJ1Z8O8bg== 111592 -b3bDqW0= 111593 -INC30LDQstC10YA= 111594 -INC00LLQuNCz 111595 -5LyZ 111596 -IG51w7Rp 111597 -0LzQtdGA0LjQug== 111598 -INmG2YXZiNmG2Yc= 111599 -6I23 111600 -0YPQstCw0LvQsA== 111601 -57+7 111602 -IHPDom4= 111603 -0L7Qs9C+0Y4= 111604 -2KfYs9mK2Kk= 111605 -0YPQvdC60YI= 111606 -w6Fuw61t 111607 -0LXQvdC90L7QtQ== 111608 -IHBow7p0 111609 -IOCkruCksA== 111610 -INin2YTZiNi3 111611 -INC70LXQs9C60L4= 111612 -IOOAiw== 111613 -66Gc65Oc 111614 -IEthc8SxbQ== 111615 -2YrZhNmK 111616 -IGJhxJ9sYW50xLFsYXI= 111617 -INGC0YDRg9C0 111618 -2LfZhw== 111619 -IGt2xa9saQ== 111620 -0YHRgtC+0Y8= 111621 -IHNhdMSxxZ8= 111622 -IGjhuq11 111623 -INio2YfYqtix24zZhg== 111624 -INGB0LXQu9GM 111625 -4Lix4LiZ4Lin 111626 -b3N1 111627 -4KSv4KSo 111628 -5Zuz 111629 -zrnOtA== 111630 -24zYqtuM 111631 -IFF14bqtbg== 111632 -INC10Lk= 111633 -4LmA4Lin4Lil4Liy 111634 -7Iqk7YOA 111635 -7IKs66W8 111636 -INin2YfZhA== 111637 -zrfOsw== 111638 -IGvhu7c= 111639 -INC90LDRgg== 111640 -4oCh 111641 -0ZbRh9C90LjRhQ== 111642 -INGA0LDQt9Cy0LjRgtC40Y8= 111643 -ZWNpYWw= 111644 -INGF0L7Qt9GP 111645 -0LLQsNC10YI= 111646 -IMSQ4buZ 111647 -IOmT 111648 -IG9rYW0= 111649 -INCy0YHRltGF 111650 -IFByYXpl 111651 -66Wg 111652 -zrnOus6x 111653 -5qyy 111654 -IGdlcsOnZWtsZcWf 111655 -56WW 111656 -INC+0LTQvdC40Lw= 111657 -wqBN 111658 -IHJlbms= 111659 -IOCksuCklQ== 111660 -44OV44Kn 111661 -INmG2LLYrw== 111662 -5bm7 111663 -IMO6emVtw60= 111664 -5o+h 111665 -0LDQu9C40YHRjw== 111666 -IMOU 111667 -IHlvcnVt 111668 -IM+Az4HPiQ== 111669 -44Oz44OH 111670 -6ZaL5aeL 111671 -44O844Oq 111672 -IOyWvOq1tA== 111673 -27HbsQ== 111674 -bMO8xJ/DvA== 111675 -2YbYtA== 111676 -4LmI4Liz 111677 -6JuL 111678 -INij2K8= 111679 -IFdpbGxp 111680 -6Kqy 111681 -IHPDvHJkw7xy 111682 -IEV4dGVybsOt 111683 -IHDFr3ZvZA== 111684 -INiu2KfZhtmI 111685 -INC60L7RgtC+0YDQvtC1 111686 -IG1vaGw= 111687 -IHN0xJs= 111688 -5YeP 111689 -7IK8 111690 -YWJhbmPEsQ== 111691 -4LmB4LiZ 111692 -4Liq4Liz4LiE 111693 -5oKj 111694 -YWJpbGVjZQ== 111695 -6Ziz5Z+O 111696 -zpHOmg== 111697 -IGNo4buvYQ== 111698 -IOyVhOuL 111699 -2LfYqNmK2YI= 111700 -zpnOn86l 111701 -0YDQvtCy0LDQvdC40LU= 111702 -5Ye9 111703 -IOy8 111704 -0YDQvtGE 111705 -4LmH4LiZ4Liq 111706 -IOOCpg== 111707 -77ya44CM 111708 -4buLYQ== 111709 -IGhQYQ== 111710 -bWFuxLE= 111711 -w6FsbsOtaG8= 111712 -2YjYqtuM 111713 -INC70LXRh9C10L3QuNGP 111714 -anRl 111715 -LdC0 111716 -5YWo5Zu9 111717 -INCx0YPQtNGW0LI= 111718 -IHphdMOtbQ== 111719 -IMO2eWxl 111720 -7J206rCA 111721 -c3RhbA== 111722 -aXZhdGVs 111723 -IOacqg== 111724 -IHBvxb5hZA== 111725 -INGB0L3QuA== 111726 -IHBvc2xlZG7DrQ== 111727 -INGB0YLQsNC90LQ= 111728 -4KWA4KSP4KSu 111729 -INi52qnYsw== 111730 -0YDQuNGP 111731 -w6N5 111732 -4buLcA== 111733 -IG9rdWw= 111734 -4LiH4Lir4Lih4LiU 111735 -INCy0L7Qt9C90LjQug== 111736 -bcOt 111737 -56ef 111738 -IMSR4buRYw== 111739 -IHBvZMOt 111740 -IMWZw61q 111741 -INGC0LDQutGW 111742 -4Lia4Liy4LiX 111743 -IOuztOq4sA== 111744 -4Lil4Liy 111745 -0LXRgdGC0L4= 111746 -IOeUqA== 111747 -0LjQvdGL 111748 -INGA0YPRhQ== 111749 -INGA0LDRgdC/0L7Qu9C+0LY= 111750 -0YnQtdC90L3Rjw== 111751 -IGPhu60= 111752 -4LmJ4Lia4Lij 111753 -4KWN4KSv4KS14KS4 111754 -776a 111755 -INC00LDQu9GM 111756 -INi22K8= 111757 -2YTZitip 111758 -INC60L7RgtC+0YDQvtCz0L4= 111759 -IGR2ZQ== 111760 -IG5o4bqhYw== 111761 -0YTRltC60LA= 111762 -4KWI4KSf 111763 -6Ieq55Sx 111764 -INC/0L7RgNGD0Yg= 111765 -5pyL5Y+L 111766 -IGTDtnJ0 111767 -INGA0LDRgdC/0YDQvtGB0YI= 111768 -44Gn44Gv44Gq44GE 111769 -INC/0LXRgNC10LM= 111770 -IMOhbmg= 111771 -IFbDrQ== 111772 -2LjZuQ== 111773 -4KWN4KSw4KSj 111774 -IGJpbGlt 111775 -IGxpZMOp 111776 -IGTDrWt5 111777 -IMSQ4buTbmc= 111778 -IM61z4HOsw== 111779 -IHpub3Z1 111780 -z4POuc6x 111781 -0Z4= 111782 -4KS44KSt 111783 -ZWtr 111784 -IM68zrXPhM6s 111785 -0YHRgtC40Yc= 111786 -24zZhtqv 111787 -INGP0LLQu9GP0Y7RgtGB0Y8= 111788 -IOW7ug== 111789 -z4PPg86x 111790 -0LDQstC70LjQstCw 111791 -4LiB4Lij4Lih 111792 -56yU 111793 -INCz0LU= 111794 -INix2Yc= 111795 -INC80LXQuw== 111796 -INC90LDQv9GA0LjQvNC10YA= 111797 -INC80LjQug== 111798 -INin2YTYs9mD2KfZhg== 111799 -5qSc 111800 -INCa0YDQsA== 111801 -IHbDoGk= 111802 -2KfYptmF 111803 -IM+Hz4HOrg== 111804 -bGXFn21l 111805 -IGphcw== 111806 -6rKM7J6E 111807 -IG1hw6c= 111808 -IOynhO2WiQ== 111809 -4KWH4KSm4KSo 111810 -IHbFr2JlYw== 111811 -INmE2YY= 111812 -6KuH 111813 -4omh4omh 111814 -0LvQtdC90LjQtdC8 111815 -2LnZhtuM 111816 -44Oe44Oz 111817 -xLBa 111818 -IMOWxJ8= 111819 -IOyXrOyekA== 111820 -ecWh 111821 -INGB0YLQsA== 111822 -IOC4quC4s+C4q+C4ow== 111823 -IOCkqOCktQ== 111824 -44CC5L2G 111825 -0L7Qu9GM0L3Qvg== 111826 -IHlhbsSxbmRh 111827 -6LK0 111828 -IGplZG5vdGxpdg== 111829 -IOWOnw== 111830 -6aCF55uu 111831 -IOCkruCkpuCkpg== 111832 -66as7JeQ 111833 -INmF2KfZig== 111834 -INGH0LXRgNCy 111835 -IGTDoXY= 111836 -2YTbjNmH 111837 -PyM= 111838 -xI1uw61t 111839 -0YDQtdCz 111840 -INC/0YDQuNC80LXQvdGP 111841 -44KK44Go 111842 -6rCZ 111843 -IHRvcGxhbQ== 111844 -aWxlxZ8= 111845 -IGthdGVnb3I= 111846 -0YLQsNC7 111847 -44Gr44KI44KL 111848 -IGRvbcOhYw== 111849 -IOq3nA== 111850 -INmH2LLYp9ix 111851 -IHDFmcOtc3R1cA== 111852 -xLFsxLF5b3I= 111853 -0LbQtNC4 111854 -IETGsMahbmc= 111855 -IFBo4bqtdA== 111856 -IMOnw7xua8O8 111857 -6rWs6riA7IOB7JyE 111858 -b3ZhbsO9Y2g= 111859 -INi52LQ= 111860 -IOCkleCksOCklQ== 111861 -xb7DrXQ= 111862 -IHbEm3TFocOt 111863 -INin2YXaqdin2YY= 111864 -IG7DtG5n 111865 -IHrDoW0= 111866 -4KWM4KSo 111867 -0LXQutCw0YA= 111868 -wqDQog== 111869 -a2FtaQ== 111870 -INGA0LXRgdGD0YA= 111871 -0L/QvtGB 111872 -2Y7Zgg== 111873 -zq/Ouw== 111874 -INiz2KfYstuM 111875 -IMOnxLFrYW4= 111876 -IGTDrXTEmw== 111877 -INiq2LXZiA== 111878 -56+H 111879 -0L3QtA== 111880 -IHLDoW1jaQ== 111881 -aG9uZw== 111882 -INGB0ZbQvA== 111883 -c2Fr 111884 -0LrQtdGC 111885 -0LTRltC7 111886 -57mU 111887 -IHRoxrDhu59uZw== 111888 -INC90LXRlw== 111889 -0LfRlg== 111890 -xZnDrWQ= 111891 -4KS/4KSk4KSo 111892 -4KSP4KSV 111893 -IHPhu69h 111894 -INmF2LHYrQ== 111895 -6Z4= 111896 -IGPGsOG7nW5n 111897 -Oi46 111898 -0YLQtdC9 111899 -6Imm 111900 -IGto4bufaQ== 111901 -IOq4sOykgA== 111902 -bGFuxLFy 111903 -5b2p56Wo 111904 -2LbbjA== 111905 -IHV6YXY= 111906 -IGJvaA== 111907 -w6ht 111908 -IOaj 111909 -bmljaQ== 111910 -KOeBqw== 111911 -5YWz5LqO 111912 -0ZbRh9C90ZY= 111913 -4LiB4Liy4Lij4LiT 111914 -IOyyqw== 111915 -0YDRg9C10YI= 111916 -IGFyxZ9pdmxlbmRp 111917 -0YLQuNC8 111918 -4Liy4Lig 111919 -INio2LHYp9io2LE= 111920 -IOC5gOC4iw== 111921 -IMSRw6pt 111922 -6Lez 111923 -IHnDtm5ldGlt 111924 -IOmVtw== 111925 -44OG44Os44OT 111926 -0LzQsNGC0Lg= 111927 -6LSj5Lu7 111928 -aWNrw71t 111929 -6Lg= 111930 -4LmA4Lir4LiV 111931 -66CM 111932 -INix2Yo= 111933 -INCy0YvQtNC10Ls= 111934 -5Ye6546w 111935 -INC/0LXRgQ== 111936 -IOyii+ydgA== 111937 -IOCkieCkuOCkqA== 111938 -IEFyYWzEsWs= 111939 -INGH0LDRgdGD 111940 -bGF2YQ== 111941 -IO+9ng== 111942 -5oGL 111943 -2K/bjNiv 111944 -4oCZZGVu 111945 -IOWInQ== 111946 -2YjYr9ip 111947 -0YfQuNC70Lg= 111948 -INGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuA== 111949 -2KfYs9iq2KfZhg== 111950 -4KSm4KSw 111951 -INio2YjYr9mG 111952 -INC/0LDQu9GM 111953 -INGC0YDQsNC00Lg= 111954 -INC00LXRjw== 111955 -INiu2LQ= 111956 -IHBva3JhxI0= 111957 -IOq1rOq4gA== 111958 -0LrQvtCy0ZY= 111959 -IHTEsWs= 111960 -IGjhuqVw 111961 -IHphbG/Fvg== 111962 -4KWn4KU= 111963 -IOuLteuzgA== 111964 -0LzQtdGI 111965 -7Zqo 111966 -IHNwb2x1cA== 111967 -y4Y= 111968 -6L6m 111969 -IGfhu5c= 111970 -IOWumg== 111971 -k24= 111972 -YXPEsW5kYW4= 111973 -LcSx 111974 -INCx0LXRgNC10Lc= 111975 -5aSn5a24 111976 -INC30L3QvtCy 111977 -IEhvw6BuZw== 111978 -INiv2YjZhg== 111979 -IGFubGF5 111980 -INmI2LLYp9ix 111981 -INi52YTZhduM 111982 -6KOc 111983 -IGTDvG55YQ== 111984 -INC30LDQu9C40Yg= 111985 -0LTQsNC10YI= 111986 -zr3OtQ== 111987 -0LjRh9C10YHQutC+0LPQvg== 111988 -7Iqk7YWc 111989 -INCR0LXRgA== 111990 -INC00LY= 111991 -INC+0L/QsNGB 111992 -z4bOsQ== 111993 -IHp2bMOh 111994 -IHTDtA== 111995 -0LHQtdGA 111996 -IM6czrHPgQ== 111997 -dGnEn2luaQ== 111998 -44Os44Oz 111999 -IEtobw== 112000 -INGW0L3RiA== 112001 -IO+/pQ== 112002 -7LCs 112003 -772h 112004 -INC90L7Rhw== 112005 -6KiK 112006 -xJt0aQ== 112007 -5b+Z 112008 -INqp2LHYr9mG2K8= 112009 -IMSR4bqpeQ== 112010 -INGB0LrQsNC30LDQsg== 112011 -64Ol 112012 -5bGs 112013 -IOCktuCkueCksA== 112014 -INqp2YXaqQ== 112015 -wqDQnw== 112016 -xLFuY2E= 112017 -0L3RltCy0LXRgNGB0LjRgg== 112018 -INqv2YjZhtmH 112019 -IFRvcGxhbQ== 112020 -IGnFn2FyZXQ= 112021 -5L2g5Lus 112022 -IGRlcmVjZQ== 112023 -IOyCrOyLpA== 112024 -IOyekOq4sA== 112025 -5a6e546w 112026 -55Sf54mp 112027 -44Gu5LiA 112028 -INGA0L7QvA== 112029 -2YjYstmH 112030 -IOOBqA== 112031 -7ZmN 112032 -2YrZgg== 112033 -IOWQjeeEoeOBl+OBleOCkw== 112034 -INm+24zYsQ== 112035 -INC/0L7Qu9C10Lc= 112036 -7Lap 112037 -INC60L7RgNC/ 112038 -kOuLpA== 112039 -4burYQ== 112040 -zpXOpA== 112041 -INC20LXQu9C10Lc= 112042 -44Gj44Gx 112043 -IHh1ecOqbg== 112044 -IOul 112045 -4KWH4KWkCg== 112046 -INGB0YLQsNC70Lg= 112047 -IHBvbW9jw60= 112048 -IGR1cnVtZGE= 112049 -INC/0YDQvtGI 112050 -bGVuw60= 112051 -zrLOv867 112052 -IOaWh+eroA== 112053 -dMSbeg== 112054 -ZMOtbA== 112055 -IGRydWjDqQ== 112056 -INGC0L7Qs9C00LA= 112057 -IGhyw6E= 112058 -0L7RgtGM 112059 -4Liy4LiB4Lij 112060 -INiq2LXZhQ== 112061 -INmF2K/Yqg== 112062 -0LrQsNC00LXQvA== 112063 -IHBhdMWZw60= 112064 -5LmL5YmN 112065 -2LPYqNip 112066 -INC/0L7QutGA0Ys= 112067 -IG7DoXA= 112068 -IF97fQ== 112069 -65Ox7ZWZ6rWQ 112070 -INil2YTZig== 112071 -IMO2emc= 112072 -55qG 112073 -IGhheXZhbg== 112074 -IE5pc2Fu 112075 -2LrYp9iy 112076 -INiq2Ko= 112077 -INC00YPRhdC+0LI= 112078 -INCf0L7RjdGC0L7QvNGD 112079 -0YzQvtCz0L7QtA== 112080 -IGt1xZ8= 112081 -IOCkh+CkuOCkrg== 112082 -2KzbjA== 112083 -IOOCvw== 112084 -INCy0LrRg9GB 112085 -54A= 112086 -INCy0YvRiNC1 112087 -4oCZZGFu 112088 -INin2K3Zhdiv 112089 -IHRhbGVw 112090 -IM+I 112091 -IGRvbGF5xLE= 112092 -INqv2LLYp9ix2LQ= 112093 -0LHQvtC7 112094 -INin24zZhtiq2LE= 112095 -0YDQvtGH 112096 -KeKAjw== 112097 -IOuQoA== 112098 -IGtvdXA= 112099 -KOaciA== 112100 -6bG8 112101 -INC+0LPRgNCw 112102 -INGA0LDQt9C8 112103 -INiq2LPYqg== 112104 -IHDFmcOtc2x1 112105 -7ZuI 112106 -IOuMgO2VtA== 112107 -4LmB4Lib 112108 -0LDQvdC90YvQtQ== 112109 -IOyduO2EsA== 112110 -IGt1bGxhbsSxbGFu 112111 -IHp0cg== 112112 -5oqA6KGT 112113 -4KS/4KSb 112114 -INin2YTZhdik 112115 -b3ZhbHk= 112116 -dXN0b3M= 112117 -IMO2cmc= 112118 -IOWkqg== 112119 -zrXOuc6/ 112120 -IHXEjQ== 112121 -INi02qnZhA== 112122 -5bu6562R 112123 -IGNo4bqheQ== 112124 -IM+Hz4HOtw== 112125 -0L3Rg9GC 112126 -INio2KfYudir 112127 -IE7Em2t0ZXI= 112128 -0YPRgtGC0Y8= 112129 -44Gn44GZ44GL 112130 -IHNhecSxbMSx 112131 -0LjQvNC+0YHRgtGM 112132 -INC/0LjRgtCw0L3QvdGP 112133 -IGvDrW5o 112134 -IGhyYW4= 112135 -b2tyYXQ= 112136 -IGVkaWxpcg== 112137 -IOCkleCkueCkpA== 112138 -IHBhY2k= 112139 -4KS+4KSy4KSo 112140 -INC40LTQtQ== 112141 -IFplbQ== 112142 -IHNsdcW+Ynk= 112143 -0YHRgtCy0LXQvdC90YvQuQ== 112144 -INii2YbYp9mG 112145 -INGC0L7QstCw0YDQuA== 112146 -INiq2K3ZhdmK2YQ= 112147 -IFnDvGs= 112148 -INC60LDRgtC10LPQvtGA 112149 -7YuA 112150 -INC60L7RgQ== 112151 -INC+0LHQvtCy 112152 -IHByb3N0xZllZMOt 112153 -INGB0L7RgQ== 112154 -INCQ0LvQtdC60YHQsNC90LQ= 112155 -IOC5gOC4guC4lQ== 112156 -5b+F6aG7 112157 -4Lix4LiK 112158 -INmE2K8= 112159 -44CB5LiA 112160 -IM6czq0= 112161 -0YPQstCw0YLQuNGB0Y8= 112162 -5pWP 112163 -44O844OQ 112164 -2KfZhNmE2Yc= 112165 -INio2YfYpw== 112166 -5Za2 112167 -6LS1 112168 -5pa55ZCR 112169 -IOy4 112170 -INmG2KfZhdmH 112171 -0YzQutC+ 112172 -IHZvZHk= 112173 -dsOtYw== 112174 -4LmB4LiI 112175 -INi52YTbjNmH 112176 -4LmB4Lij4LiH 112177 -zq/Ovc6x 112178 -44Gs 112179 -INCe0L8= 112180 -IHNheWY= 112181 -77yM55Sx 112182 -5Ly0 112183 -INGD0LTQvtCx 112184 -44G+44Gg 112185 -INC90LXQv9GA0Lg= 112186 -wo4= 112187 -4KS+4KSc4KSq 112188 -cGxuxJs= 112189 -IOyXhA== 112190 -IHLFr3pu 112191 -IHjhur9w 112192 -44OW44Or 112193 -INC30LDRhdC40YHRgg== 112194 -INmF2LXYsdmB 112195 -IHbFoWVjaG5v 112196 -44Gu44GK 112197 -IFRo4buL 112198 -IG3DuWE= 112199 -v5A= 112200 -INC/0YDQuNC90YbQuNC/ 112201 -INin2YbZgtmE 112202 -0LPQsNGA 112203 -IG1vxb5ub3N0 112204 -2YLZitmC 112205 -IG90ZXbFmQ== 112206 -IGZhaw== 112207 -IG5ndXk= 112208 -0LHQvtCy 112209 -bGFjYcSf 112210 -2KfYt9ix 112211 -44Gr44KI44KK 112212 -5piv5Zyo 112213 -IHThuqduZw== 112214 -7J247J20 112215 -YcWZ 112216 -56Kw 112217 -z4zOvM61 112218 -IOqwiA== 112219 -INij2K3Yrw== 112220 -2LrYsdin2YE= 112221 -INmK2K0= 112222 -772n 112223 -INin2YTYrdmK2KfYqQ== 112224 -IGxlcA== 112225 -IOC4rg== 112226 -dGFl 112227 -IGzGsMahbmc= 112228 -6L2u 112229 -INC30LzRltC9 112230 -INCa0LjRl9Cy 112231 -INC80ZbRgdGP 112232 -0LrQsNCy 112233 -4LiV4Liw 112234 -IG1ub2hv 112235 -IE5naOG7iw== 112236 -6JmO 112237 -IOODnw== 112238 -IHByw6FjaQ== 112239 -IGfhu5Fj 112240 -IFllbmk= 112241 -2KfYttmK 112242 -IOiR 112243 -INC60LvQsA== 112244 -j25n 112245 -z4TOtc6v 112246 -IGJlbmk= 112247 -INi52K8= 112248 -IGFrdHU= 112249 -INmI2YLYrw== 112250 -INC/0L7QtNCz0L7RgtC+0LI= 112251 -IGdpYWk= 112252 -KOawtA== 112253 -IHNhw6c= 112254 -INmF2YbYp9iz2Kg= 112255 -4paL 112256 -2ZDZhw== 112257 -6Y0= 112258 -4Lit4LiX 112259 -INiz24zYp9iz24w= 112260 -b2xpdA== 112261 -INin2YTYrNiy 112262 -2LfZhNio 112263 -IHNleQ== 112264 -ZXJlbmNl 112265 -7LSM 112266 -INCy0L3Rg9GC0YDQtdC9 112267 -IOC4meC4suC4og== 112268 -IOyViuyVmOuLpA== 112269 -b2xpaw== 112270 -5pyA5ZCO 112271 -5Luq 112272 -INGA0ZbQtA== 112273 -6LyD 112274 -INio2KfYqA== 112275 -0YPQtNC4 112276 -INGB0YLRg9C/ 112277 -IMSR4bupbmc= 112278 -IMWfw7Z5bGU= 112279 -IO2VmeyDnQ== 112280 -INCy0LvQsNGB0YLQuA== 112281 -IGjDo25n 112282 -4LmJ4Liy4Lin 112283 -INqp2KfZh9i0 112284 -IOuTrw== 112285 -INis2YXZhNmH 112286 -INiv2qnYqtix 112287 -YWRvbHU= 112288 -INiq2KjYrw== 112289 -2LjYp9mF 112290 -IHpuYcSN 112291 -INiv2YbbjA== 112292 -IHPhuqFu 112293 -5byx 112294 -z4DOuQ== 112295 -IOeQhg== 112296 -INmB2LXZhA== 112297 -0LjQvdCz 112298 -0JrQng== 112299 -INCh0L7Qsg== 112300 -IHppeWFyZXQ= 112301 -INiv2YU= 112302 -56u5 112303 -IHNhaGliaQ== 112304 -aXNheWFy 112305 -xJ9h 112306 -INC/0LXRgNGW0L7QtA== 112307 -IHNuYQ== 112308 -KOacqA== 112309 -INC90LXQtQ== 112310 -INGE0LDQutGC0L7RgA== 112311 -0LzQtdC2 112312 -5bqE 112313 -csOhxb4= 112314 -0L7QutGA0LXQvA== 112315 -IMW+YWw= 112316 -4Li04LmA4Lio4Lip 112317 -6LGq 112318 -b3Vjw60= 112319 -IFVsdXM= 112320 -IHRha8W+ZQ== 112321 -2KfZiNmG 112322 -0L3QuNGC0Lg= 112323 -0L3RjNC+ 112324 -6424 112325 -INmD2LHYqQ== 112326 -5Zyz 112327 -IEFydGhyb3BvZGE= 112328 -INGC0L7QtNGW 112329 -INiv2LHYtdiv 112330 -4Li44Lij4LiB 112331 -INGB0LLQvtCz0L4= 112332 -6K+06YGT 112333 -IGPDoW5o 112334 -5pOK 112335 -IOS4i+i9vQ== 112336 -6Im+ 112337 -IG5pa2R5 112338 -2K7Ytw== 112339 -INGB0LXQudGH0LDRgQ== 112340 -2YjZitmE 112341 -YW1ldA== 112342 -66y47J2Y 112343 -IEXEn2l0aW0= 112344 -5aSn5Lya 112345 -IGLFmWV6 112346 -0LfQsNGG0ZbRjw== 112347 -IHR5dG8= 112348 -0L3QsNC5 112349 -2LrZhQ== 112350 -IOmp 112351 -6K6h566X 112352 -VMO8cmtpeWU= 112353 -IG1ub8W+ 112354 -5ZCI5L2c 112355 -5pyN5YuZ 112356 -IGthxb5kw70= 112357 -INGO0YDQuNC0 112358 -IM6yzrE= 112359 -4KWC4KSa 112360 -5ZCM44GY 112361 -IOeL 112362 -zq/PhA== 112363 -2YjbjNmG2Ko= 112364 -2KfZhtiz 112365 -5pyA5aSn 112366 -IFThu6s= 112367 -6a2U5rOV 112368 -INCx0LvQuA== 112369 -INGC0LDQutC+0LU= 112370 -44Gc 112371 -44CAIOOAgCDjgIAg44CAIOOAgA== 112372 -7J2066mw 112373 -INmC2LPZhdiq 112374 -INC+0YbRlg== 112375 -0L3QuNC60YM= 112376 -IELhuqFu 112377 -INC+0YDQs9Cw0L3RltC3 112378 -w7xwaA== 112379 -IGl6aW4= 112380 -IO++ig== 112381 -zrXOr8+C 112382 -4LiH4LmB4LiV 112383 -44Gh44KJ 112384 -0LLQsNC20LA= 112385 -IOaspw== 112386 -zrnPjg== 112387 -z4DOrQ== 112388 -INC60YDQtdC/ 112389 -INGG0LjRhQ== 112390 -5oSf44GY 112391 -55Wr 112392 -2YPZiA== 112393 -0LXQvNC+ 112394 -xb5lbg== 112395 -5bmz5pa5 112396 -INmF2KzZhdmI2LnZhw== 112397 -INGB0LLQvtC4 112398 -IOOE 112399 -4Lib4Lij4Liw4LiB4Lit4Lia 112400 -INC/0YDQvtGC0Lg= 112401 -2YjbjNmH 112402 -6K6k5Li6 112403 -z4bOrQ== 112404 -0LjRh9C10YHQutC40Lk= 112405 -5qWa 112406 -INC/0LDQvw== 112407 -zrTPgc6/ 112408 -IGt1bGxhbsSxbQ== 112409 -IHpibw== 112410 -IMO6c3DEmw== 112411 -INmF2LI= 112412 -IEZhaw== 112413 -0LXQu9GM0LfRjw== 112414 -5rS75YuV 112415 -INCf0YDQsNCy 112416 -pnk= 112417 -5YOV 112418 -5pGY 112419 -INix2KY= 112420 -IM+Gzr/PgQ== 112421 -0LzQuNGC 112422 -IHRpY2FyZXQ= 112423 -5rOV5b6L 112424 -5bm05Luj 112425 -7IiZ 112426 -5b+g 112427 -4LmH4LiZ4LiX 112428 -INGD0LY= 112429 -INmF2KrYrdiv2Yc= 112430 -IHRy4budaQ== 112431 -INix2K0= 112432 -INqp2Yjahg== 112433 -INC+0L/RgNC10LTQtdC70LXQvQ== 112434 -INiy2YXbjNmG2Yc= 112435 -IG7Ds25n 112436 -IG5n4bun 112437 -Tmjhu69uZw== 112438 -INC60LjRiA== 112439 -IGpkZQ== 112440 -IOS4iua1tw== 112441 -5YuH 112442 -IHRhbsSx 112443 -4LmM4LmB4Lil4Liw 112444 -INGA0LDRgdGC0LLQvtGA 112445 -INGB0YDQtdC00YHRgtCy 112446 -IGPDoW4= 112447 -IHN5c3TDqW11 112448 -24zYtw== 112449 -INGB0LjRgdGC0LXQvNCw 112450 -IOue 112451 -INGH0LXRgg== 112452 -6YOo6Zeo 112453 -5biw 112454 -IG1pbGxldA== 112455 -IM6VzrvOu86s 112456 -4KWH4KSW4KSo 112457 -IHJlcHVibGlreQ== 112458 -0YDQsNC80Lg= 112459 -IOCkuOCkruCkuA== 112460 -IGHDp8Sxc8SxbmRhbg== 112461 -2KfYr9mE 112462 -INCx0LXRgdC/ 112463 -44O74pSB 112464 -5Zyt 112465 -b2N1 112466 -a8OhbsOt 112467 -2YjYsdi0 112468 -6561 112469 -IOeB 112470 -6LCB 112471 -IHPDoW0= 112472 -IM69zrXPhg== 112473 -YmlsaXI= 112474 -IG3DrXN0xJs= 112475 -IMW+ZW4= 112476 -IGlsw6c= 112477 -IOungQ== 112478 -44CRCg== 112479 -INmF2YjYp9ix2K8= 112480 -INin2YTYtNmK 112481 -IOq4sOuhnQ== 112482 -IHRhZHk= 112483 -4Lit4Liy4LiI 112484 -INGB0YQ= 112485 -IHNwb2xlxI1ub3N0 112486 -IHTDqW1hdHU= 112487 -2YXYp9mF 112488 -2YXYuQ== 112489 -INC70LXQtg== 112490 -INqG2LTZhQ== 112491 -IGnFn2xldA== 112492 -INmG2LPYrg== 112493 -5Lyw 112494 -44GN44Gq 112495 -44CD 112496 -5bKX 112497 -IOWtkA== 112498 -IGLhuqNuZw== 112499 -54yu 112500 -IGPhu6luZw== 112501 -INC60YDQsNC5 112502 -IOiLseivrQ== 112503 -0KDQkA== 112504 -2LLZhg== 112505 -6IOe 112506 -IHPDvHJlw6c= 112507 -44OV44OI 112508 -INC60ZbQu9GM0LrQsA== 112509 -bmXEn2lu 112510 -b3bDoW55 112511 -0LvRltC9 112512 -IHbDvXJheg== 112513 -INGB0YfQuNGC0LA= 112514 -INC/0YDQsNCy0LjQu9C+ 112515 -INC40YHQv9C+0LvRjNC30YM= 112516 -IGvDqW8= 112517 -IHlha2xhxZ/EsWs= 112518 -INmI2KfYqNiz2KrZhw== 112519 -0L7QstCw0YLQtdC70Yw= 112520 -IOyyoA== 112521 -INin2YTYudin2YU= 112522 -5Z2P 112523 -IOC4iQ== 112524 -IFPGoW4= 112525 -zrvOuc6/ 112526 -7LaU7LKc 112527 -IHNsdcW+ZWI= 112528 -INC00LXRj9GC0LXQu9GM0L3QvtGB0YLQuA== 112529 -0LfQvA== 112530 -INC/0L7Qt9C4 112531 -LjsuOw== 112532 -INC/0YDQvtC40YHRhdC+0LTQuNGC 112533 -4Liy4Lii4LmD4LiZ 112534 -55qE44Gr 112535 -IOCkh+CkuOCkuA== 112536 -0L7QvNC10YI= 112537 -IM6xz4E= 112538 -4KS+4KSX4KSw 112539 -aWPDrWNo 112540 -IHBvbG/Fvmt5 112541 -6rOo 112542 -5oOK 112543 -IMO2bmVy 112544 -IHjhuqN5 112545 -INmG2LjYsduM 112546 -IG5naOG7iQ== 112547 -IOC4nOC4pQ== 112548 -INGA0L7Qu9GM 112549 -INGA0LXQvNC+0L0= 112550 -2LXZiNix 112551 -VsO9 112552 -IFPhu5E= 112553 -INGB0YPRh9Cw0YE= 112554 -4Lir4Lii 112555 -INin2YLYr9in2YU= 112556 -IGVya2Vr 112557 -IOiN 112558 -IMSRw7Rp 112559 -INC60L7QvdC60YDQtdGC 112560 -5qyK 112561 -IOebrg== 112562 -2YjaqQ== 112563 -bMSxa2xh 112564 -IHBhemFy 112565 -zqzOvc+J 112566 -0YPRgdGC0LA= 112567 -44Gq44Gf 112568 -INmH2Ybarw== 112569 -0K7Qmw== 112570 -INCy0LXQu9C40Lo= 112571 -IG5o4bub 112572 -IOyLnO2XmA== 112573 -KeydmA== 112574 -2YPZhw== 112575 -IOC5geC4pQ== 112576 -27LbtQ== 112577 -INin2LHYs9in2YQ= 112578 -INC+0LrRgNC10Lw= 112579 -zqzPgg== 112580 -INCy0YvRhdC+0LQ= 112581 -dsSbdMWhw60= 112582 -INi32LHbjNmC 112583 -INC60L7RgNC+0YI= 112584 -0L3RlA== 112585 -44KK44Gr 112586 -IOS5nw== 112587 -2K3YtQ== 112588 -2LnZhdin2YQ= 112589 -b2xvamlr 112590 -INix2KfYqNi3 112591 -56qX 112592 -IGdpeg== 112593 -IGNo4bq/dA== 112594 -5qij 112595 -4Liq4LiH 112596 -2YjYqtix 112597 -INGP0LrRgw== 112598 -54++5Zyo 112599 -INC+0YLRgdGD0YLRgdGC0LI= 112600 -IOq0keqzoA== 112601 -0ZbQutC4 112602 -5YCk 112603 -6K6i 112604 -IGRsZQ== 112605 -IOWg 112606 -5qip 112607 -6K6v 112608 -5ZSQ 112609 -IOKWsg== 112610 -IGxpc3RvcA== 112611 -IGRhdG92w6k= 112612 -z4TPjM+C 112613 -INC+0Lc= 112614 -zrTPjA== 112615 -6JKC 112616 -27PbsA== 112617 -44Oq44O844K6 112618 -INmF2LHaqdiy 112619 -INC/0ZbQtNGC0YDQuNC8 112620 -INGB0LXQtw== 112621 -6aGY 112622 -IG9sYWNha3TEsXI= 112623 -5rqA 112624 -IM+AzrXPgc65zr8= 112625 -0YTQsA== 112626 -z4TOt8+Dzrc= 112627 -57uD 112628 -0J7QtA== 112629 -zrTPhQ== 112630 -4oSD 112631 -IGzhuq9w 112632 -IOuEmA== 112633 -2LfYp9mG 112634 -INm+2YbYrA== 112635 -2KrYp9mG 112636 -aWxlcmluaW4= 112637 -w4g= 112638 -INiu2YjYtA== 112639 -IOyKrA== 112640 -INin2YTYsdim2YrYsw== 112641 -4bq1bg== 112642 -INi02KfYsQ== 112643 -ZXJ1 112644 -0LbQuNCy 112645 -4LiZ4Liy4Lii 112646 -IHPhurs= 112647 -IOCkieCkmg== 112648 -44Gr44GL 112649 -56GA 112650 -IHnDvHLDvHQ= 112651 -INCh0LXRgNCz 112652 -INC60LDRgQ== 112653 -INCR0L7Qsw== 112654 -IOyWtOuWu+qyjA== 112655 -IOefsw== 112656 -IMO2bGTDvHI= 112657 -0LvRltCy 112658 -IGhvw6BuZw== 112659 -IGLhu5l0 112660 -556s 112661 -IOy5qA== 112662 -TuG6v3U= 112663 -IG5ldnk= 112664 -IOycpA== 112665 -IHNvdcSNw6FzdA== 112666 -xLFzxLF5bGE= 112667 -IHTDvGtldA== 112668 -Ym91 112669 -INC00LLQvg== 112670 -2LPYtw== 112671 -5b2T54S2 112672 -44Oo 112673 -INiy2KfYr9mH 112674 -IOmDqA== 112675 -INix2YjYrQ== 112676 -IO+8jQ== 112677 -INC80ZbRgdGG0LXQsg== 112678 -zrjOtc69 112679 -4LiG 112680 -0LvQtdC90ZY= 112681 -542y 112682 -IEhPSA== 112683 -c8Sxbg== 112684 -4Li04LiV4Lij 112685 -6LKh 112686 -IHDFmWlk 112687 -4LmA4Lir4LiZ 112688 -bMO9 112689 -6KiA6JGJ 112690 -4KST 112691 -4paN4paN4paN4paN4paN4paN4paN4paN 112692 -2KjYp9io 112693 -44O844OV 112694 -0LzQvtGA 112695 -6L+H56iL 112696 -IOODmw== 112697 -IEtpbmg= 112698 -7ZWc6rWt 112699 -IOyWtOuWpA== 112700 -INCy0LvQuNGP 112701 -IGZheWQ= 112702 -INi12YbYuQ== 112703 -IGFsxLFy 112704 -IGV0dGnEn2k= 112705 -zqzOug== 112706 -aW1pemlu 112707 -4Lix4Lia4Lic 112708 -INC30LXQvNC10LvRjA== 112709 -2YrZhNin2K8= 112710 -5rao 112711 -54+g 112712 -INij2Lo= 112713 -IHprdQ== 112714 -4oCeQQ== 112715 -4Liy4LiV4Lij 112716 -YXlp 112717 -44Op44K5 112718 -0LjQu9C+ 112719 -IMSR4buN 112720 -Ls6V 112721 -65w= 112722 -IM68z4DOv8+BzrXOrw== 112723 -5bi2 112724 -IGFydMSxcg== 112725 -4Liy4LiN 112726 -5b+Y 112727 -dGFseWE= 112728 -IHBvemTEm2pp 112729 -IG5lcMWZ 112730 -IOa5 112731 -2KfZh9uM 112732 -IHNhdMSxbg== 112733 -IOuyjA== 112734 -2KzZiA== 112735 -5LiA55u0 112736 -7JWE7JqU 112737 -wqBQ 112738 -INib 112739 -INC/0LDQuw== 112740 -6KGo5oOF 112741 -IGNhbmzEsQ== 112742 -5oiQ5Li6 112743 -2YjZhtin 112744 -IOKArw== 112745 -4LiB4Liz4Lil 112746 -5Y2W 112747 -IM6xz4M= 112748 -0LjQvdC+0Lo= 112749 -0LDQvNC/ 112750 -4Lil4Lit4LiH 112751 -2YLZgg== 112752 -INC/0YDQvtGF0L7QtA== 112753 -44KE44KL5aSr 112754 -z4fOtw== 112755 -6LKo 112756 -INmB2YrZhw== 112757 -2YrYsdmK 112758 -INCy0L3QtdGI 112759 -IGthcmFr 112760 -2KvZhA== 112761 -2YfZiNix24w= 112762 -2KfZiNix2b4= 112763 -IMSR4buP 112764 -amnFoXTEm27DrQ== 112765 -2KrYqNix 112766 -IOq3uOqygw== 112767 -IGfDvGw= 112768 -INC/0L7QutGD0L8= 112769 -bGlsaWs= 112770 -IHpkYQ== 112771 -5YmN44Gr 112772 -INmF2YfZhtiv 112773 -IM6Rzp0= 112774 -INqp24zZhNmI2YXYqtix 112775 -IHDFmWVo 112776 -0LDQu9C10LY= 112777 -IGtheW4= 112778 -6K6/ 112779 -IOykkeq1rQ== 112780 -INGI0LjRgNC+0Lo= 112781 -INmF2LTYp9ix2qnYqg== 112782 -4oCC 112783 -IO2XpA== 112784 -IOygnO2SiA== 112785 -INi024zYsQ== 112786 -ZXNpbmRlbg== 112787 -0YDRltGH 112788 -6I+y 112789 -0YHQutC+0YA= 112790 -ZXRpaw== 112791 -4Liy4Lic 112792 -INi32KjbjA== 112793 -zrrOrQ== 112794 -IOyeiOyWtA== 112795 -IGRlaw== 112796 -0YDRltC5 112797 -5YaS 112798 -bsOtY2k= 112799 -rqQ= 112800 -INmF2LHYqtio 112801 -IHlhesSx 112802 -w7xzbMO8 112803 -7Jy864KY 112804 -ZWxlcmluZQ== 112805 -IHlvxJ91bg== 112806 -INCx0LDQug== 112807 -zpnOnw== 112808 -zqzOu8+F 112809 -57SZ 112810 -INGA0YPQutCw0LzQuA== 112811 -IMOnw7Z6w7xt 112812 -7KCV7J2E 112813 -IGfDvMOnbMO8 112814 -zrvPjA== 112815 -IGJlbGxp 112816 -w63FoWU= 112817 -IM+Mz4DPic+C 112818 -IG5hxaE= 112819 -IHDDoXI= 112820 -0YjRgg== 112821 -IOyGoQ== 112822 -4KWC4KSw4KSk 112823 -IM+Azr/Ou8+N 112824 -57Ch 112825 -6IKv 112826 -5rm+ 112827 -IOS6iw== 112828 -IOCkrOCkuA== 112829 -IOustOujjA== 112830 -0LTQuNC90LA= 112831 -6Kqw 112832 -0LvQtdC2 112833 -IMO6xZlhZA== 112834 -INC+0YHQstGW0YLQuA== 112835 -INCy0ZbQtNGH 112836 -INC/0YDQuNC30L3QsNGH 112837 -55Sz6K+3 112838 -J3lh 112839 -5L+K 112840 -INmK2YjZhg== 112841 -INiz2Lk= 112842 -INCU0LDRgtCw 112843 -6KiA44GG 112844 -INit2KrbjA== 112845 -IEppxZnDrQ== 112846 -INCl0LDRgA== 112847 -6ZmI 112848 -4LmI4Liy4LiI4Liw 112849 -IHNheWVzaW5kZQ== 112850 -INGC0YDQtdCx0LA= 112851 -6rCA7KeA 112852 -IHllbWVr 112853 -6Kaa 112854 -4bq3bg== 112855 -44CA44CA44CA44CAIOOAgA== 112856 -IOS4nA== 112857 -INmI2Kc= 112858 -INmF2YjYsw== 112859 -INC60L7QvNCw0L3QtA== 112860 -IHNlw6dpbQ== 112861 -0YfQtdC90L3Rjw== 112862 -IHRvdGnFvg== 112863 -IHLhu61h 112864 -j2E= 112865 -2KLZhQ== 112866 -0YbRltC+0L0= 112867 -Ojo6Ojo6Ojo6Ojo6 112868 -0J3QkA== 112869 -xLF6YQ== 112870 -aGVuZA== 112871 -IOCkq+CksA== 112872 -4Lix4LiU4LiB4Liy4Lij 112873 -IEPDoWNo 112874 -INC/0L7RgtGW0Lw= 112875 -IOG8gA== 112876 -2KfZhNin 112877 -4buh 112878 -2LHbjNmF 112879 -5a6r 112880 -INiy2YXbjNmG 112881 -0YDQtdGB0YI= 112882 -0LHQsNGH 112883 -2YfYsdiz2Ko= 112884 -0L3QvtCz 112885 -77yM5aSn 112886 -IOuYkO2VnA== 112887 -IHrFr3N0 112888 -INCS0L7QvdCw 112889 -5aSH5Lu9 112890 -INin2YHYqg== 112891 -b2pl 112892 -0YHQutGW0LvRjNC60Lg= 112893 -IG5o4bq5 112894 -INC60LXRgNGW0LI= 112895 -4b+m 112896 -5pa55qGI 112897 -0LfQsNGG0LjRjw== 112898 -INCy0ZbQtNC/0L7QstGW0LTQvdC+ 112899 -44Kk44K5 112900 -0LPQsNC7 112901 -INC+0LHRi9GH0L3Qvg== 112902 -2KfZiNix2b7ZiNuM2YbYqg== 112903 -5a6c 112904 -bG9zdGk= 112905 -6L+b5YWl 112906 -dXlvcmR1 112907 -67Kk7Yq4 112908 -5omL44KS 112909 -0J/QvtC0 112910 -INmF2K3Yr9mI2K8= 112911 -INii2YXYrw== 112912 -YXJha3Rlcg== 112913 -55qE5aSn 112914 -IHPEsWNhaw== 112915 -bGFudA== 112916 -IGThuqV1 112917 -INmG2qk= 112918 -6ICF44Gu 112919 -IGtlbmRpbmk= 112920 -INC/0LDRhtC4 112921 -IOq4sO2DgA== 112922 -INCy0LzQtdGB0YLQtQ== 112923 -0LLQsNC10YLRgdGP 112924 -IOuniQ== 112925 -IGNodsOtbGk= 112926 -2K7bjA== 112927 -2YTYuQ== 112928 -bsOta3k= 112929 -772kOg== 112930 -65Cc64uk 112931 -7KeV 112932 -INC60LLRltGC 112933 -qOyWtA== 112934 -bGnFvg== 112935 -IOu5hOuwgOq4gA== 112936 -IGto4buRaQ== 112937 -IOuwqeyGoQ== 112938 -ZWNoYW4= 112939 -INC30LDQutC+0L3QvtC00LDQsg== 112940 -INCw0LrRgg== 112941 -66y47KCc 112942 -IE7Dsw== 112943 -IOeCuQ== 112944 -aGxlZGVt 112945 -INGB0LLQvtGX0YU= 112946 -INix2YLZhQ== 112947 -5pu8 112948 -4KS/4KS14KSw 112949 -5Y6a 112950 -INCa0L7QtA== 112951 -4KSt4KSX 112952 -7J6Q64qU 112953 -4LiZ4Lih 112954 -0YPRgdCw 112955 -IGfDvG7DvA== 112956 -IMSRw61jaA== 112957 -IHRy4buv 112958 -5be7 112959 -6ZO26KGM 112960 -2K3Zhg== 112961 -6K6o 112962 -zrPPhw== 112963 -4b24 112964 -YWxhcsSxbmRh 112965 -IGthZg== 112966 -2YjYp9is 112967 -INC40YHQutC70Y7Rhw== 112968 -IG5oaeG7hQ== 112969 -4buNdA== 112970 -IOybuQ== 112971 -IOmdog== 112972 -44Gu44GM 112973 -INC80LDQu9C+ 112974 -0ZbQu9GW 112975 -IGJpw6pu 112976 -bsOpbXU= 112977 -0L/RgNC40LzQtdGA 112978 -4pag4pag 112979 -IGthbXA= 112980 -INCy0LXRiQ== 112981 -xI1lbQ== 112982 -4KWB4KSn 112983 -5p+7 112984 -2KrZiNmG 112985 -5Y+q5pyJ 112986 -44Gv44GE 112987 -IOC4o+C4p+C4oQ== 112988 -44Ke 112989 -44GZ44KL44Go 112990 -5b6I5aSa 112991 -4LmI4LiV 112992 -IHN2xJt0YQ== 112993 -IOqwgOqyqQ== 112994 -2q/Zhw== 112995 -YW5kYcWf 112996 -44Oq44K5 112997 -z4nOvM6x 112998 -INiu2YjYqA== 112999 -57SF 113000 -0YfQuNGB 113001 -7KKM 113002 -INit2LbYsdiq 113003 -INCy0LjRgNGW0Yg= 113004 -2b7YsQ== 113005 -IHTDvWQ= 113006 -IGtvbnRybw== 113007 -0LTQtdC50YHRgtCy 113008 -44Gf44KB44Gr 113009 -7Ik= 113010 -0LzQuNC90LjRgdGC0YDQsA== 113011 -4oCv 113012 -5YmR 113013 -0L3QuNGG0ZY= 113014 -5aaH 113015 -INC70LjRiA== 113016 -44Gj44Gm44KL 113017 -0L3QsNGA0YPQtg== 113018 -0YnQuNGF 113019 -z4TOv866 113020 -b3bDoW5v 113021 -2KrYsdmE 113022 -0YDQtdC6 113023 -2LrYp9iq 113024 -IG9tZXo= 113025 -7JOw 113026 -IMOcbA== 113027 -772S 113028 -bMSxxJ/EsW7EsQ== 113029 -IHbGsOG7o3Q= 113030 -IGLEm8W+ 113031 -w5xS 113032 -IOODvg== 113033 -IGRvxJ9hbA== 113034 -IGhhdMSxcg== 113035 -IHN2w71t 113036 -7KeA64+E 113037 -4LmA4Lig4LiX 113038 -IHZheQ== 113039 -IOaZgg== 113040 -4KWN4KS14KSq 113041 -IHBsbw== 113042 -6aKE6KeI 113043 -IMOnxLFrdMSx 113044 -INiv2YY= 113045 -bsOhbsOt 113046 -6reA 113047 -7ZiA 113048 -4Lie4Lia 113049 -bXXFn3R1cg== 113050 -5a6Y5pa5 113051 -IO2UhOuhnOq3uOueqA== 113052 -6YCf5bqm 113053 -bGVyZGly 113054 -0YfQtdGB0LrQvtCz0L4= 113055 -IMSwbnNhbg== 113056 -4pSD 113057 -IOCkh+CkpOCkqA== 113058 -0KHQodCg 113059 -INin2YXYsQ== 113060 -IGvDtnTDvA== 113061 -2YHYtA== 113062 -IGJvag== 113063 -INGG0ZbRlNGX 113064 -IHPDtnlsZW0= 113065 -0L3QuNGG0Ys= 113066 -44CC5aW5 113067 -4oCdLgo= 113068 -IG1pbGlvbg== 113069 -IHNvbnVuZGE= 113070 -0LfRgw== 113071 -4KWN4KSu4KSV 113072 -5Lq65Y+j 113073 -bsSbxb4= 113074 -INGB0LzQvtGC 113075 -INC60L7QvNC/0LvQtdC60YE= 113076 -INC30LDQstC40YHQuNC8 113077 -INC40LzQtdGO0YI= 113078 -IGzhuqFj 113079 -IGhhbmdp 113080 -65Sp 113081 -5Yqz 113082 -IHbEm2Np 113083 -0LXRgNC+0LI= 113084 -zrrPgc65 113085 -IGR1cnVtdQ== 113086 -INio2YjYp9iz2LfYqQ== 113087 -INij2KjZig== 113088 -IEHEn3VzdG9z 113089 -zrXPhw== 113090 -INC00LjRgtC4 113091 -0YTQuNC60LA= 113092 -IE7Eg20= 113093 -IOq4sOyIoA== 113094 -IGhsYXZuw60= 113095 -5L+D 113096 -IOCksuCkl+CkpA== 113097 -IE9icg== 113098 -LuC4og== 113099 -0LrQvtCy0L7QtA== 113100 -b3Bpcw== 113101 -IOODiQ== 113102 -INio2LTZg9mE 113103 -0L3QuNC10Lw= 113104 -IHTDqW3Em8WZ 113105 -INin2YTYrdix 113106 -INmE2KfYstmF 113107 -IG3DoWk= 113108 -aWxpxJ9p 113109 -67O8 113110 -IHnEsWs= 113111 -572y 113112 -0YDQsNCy0LA= 113113 -0YnQuNC9 113114 -44Gr5a++ 113115 -57K+56We 113116 -4LmJ4Liq 113117 -IHRlbXNpbA== 113118 -w4Y= 113119 -7JWU 113120 -INC/0YDQsNCy0LjQu9GM0L3Qvg== 113121 -0YDQvtGO 113122 -27Hbs9u4 113123 -6Kme 113124 -2KfYodip 113125 -2YjYp9ix2Yc= 113126 -77yF 113127 -INCc0LjQug== 113128 -5oG2 113129 -5o+S 113130 -4KS+4KSq4KSo 113131 -INqp24zZgduM2Ko= 113132 -IFTDoGk= 113133 -IHRp4buDdQ== 113134 -b3ZhbG8= 113135 -552h 113136 -0YfQuNC7 113137 -INC70LjRgg== 113138 -zrvOtc+Fz4TOsQ== 113139 -INC+0LrQvtC9 113140 -Ojp8 113141 -0LLQsNC70LA= 113142 -INmF2LHaqdiy24w= 113143 -IGFsxLHFnw== 113144 -INC00L7Qu9C20L3Qvg== 113145 -5pmC5Luj 113146 -IHNlcnQ= 113147 -0LXRgtC+0Lw= 113148 -4Lix4LiZ4Lii 113149 -5YG3 113150 -IHbDrWM= 113151 -INGF0L7RgtGP 113152 -YWxhcsSxbsSx 113153 -bGVubWVzaQ== 113154 -44Oz44OQ 113155 -IOuqhw== 113156 -IOG7pnk= 113157 -INin2YTaqdiq2LE= 113158 -dnnFocWhw60= 113159 -6LKs 113160 -7KO87Iuc 113161 -w6HFmWU= 113162 -IHllcmU= 113163 -44Ki44Oz 113164 -INin2YTYs9i52YjYrw== 113165 -INii2LQ= 113166 -IGNow7NuZw== 113167 -IOi7 113168 -0LPQsNGU 113169 -IOOBgg== 113170 -56iz 113171 -zrTOtc+C 113172 -55uu55qE 113173 -IGNldmFw 113174 -0YHRgtC1 113175 -6aG/ 113176 -4KSu4KSo 113177 -6aG+ 113178 -INC60YDQtdC00LjRgg== 113179 -INmF2LPYqtmC 113180 -INC80LjRgg== 113181 -IHThu5Nu 113182 -INis2YQ= 113183 -xKlh 113184 -INin2YTYudmE2YU= 113185 -w6Frxa8= 113186 -IO2Vmeq1kA== 113187 -4LiX4Lit4LiH 113188 -4Lir4LiZ4LiU 113189 -INC70ZbRgtC10YDQsNGC0YM= 113190 -65Cg 113191 -zqzPgc+H 113192 -INmC2K/Ysdiq 113193 -4LiZ4Liy4LiH 113194 -IGFyYWM= 113195 -IGrDrWQ= 113196 -IHTDvHJsw7w= 113197 -7ZS9 113198 -ZXJzaXo= 113199 -0LXQvdC40Lw= 113200 -IHnDvHp5xLFs 113201 -IOOBhA== 113202 -IM6az4U= 113203 -IOaa 113204 -IHDFr2o= 113205 -IHThu5lp 113206 -IHRoacOqbg== 113207 -xLBT 113208 -IHRow7pj 113209 -5peB 113210 -7J6Q7J24 113211 -IMO2bMO8bQ== 113212 -2LHbjNmB 113213 -0YDQtdC2 113214 -2LXYp9mE 113215 -2LHZgdip 113216 -aeG6v3A= 113217 -0Y/RgtC40Y8= 113218 -IHBvdcW+aXQ= 113219 -w6F0dQ== 113220 -5Li65LuA5LmI 113221 -7IE= 113222 -IGtyw6F0 113223 -INm+2LHZiNqY2Yc= 113224 -IHJvemhvZG51dMOt 113225 -INGD0L3QuNCy0LXRgA== 113226 -0ZbQudC90L4= 113227 -IOWRqA== 113228 -IGtp4buDdQ== 113229 -55uu5YmN 113230 -5L+E 113231 -z4TOv865 113232 -0YTQtdGA0LXQvQ== 113233 -dcWfdHVy 113234 -IG7DrW0= 113235 -4oCM2K4= 113236 -IOG7p3k= 113237 -INGB0YLQsNGC0Lg= 113238 -0YfQtdGB0LrQuNC5 113239 -IGplc3RsaQ== 113240 -INm+2YY= 113241 -IG9iY2U= 113242 -INis2YfYp9mG24w= 113243 -0LXQtNCw0LPQvtCz 113244 -44Gn44Gu 113245 -IGJ14buZYw== 113246 -7Lm07KeA64W4 113247 -4LmH4LiE 113248 -IMSNdHZydA== 113249 -INC90LjQutCw 113250 -INCy0L/Qu9C40LI= 113251 -INC00LjRgA== 113252 -INGB0L7QsdGB0YLQstC10L0= 113253 -IOunjuydtA== 113254 -5r6z 113255 -0YDRg9Cx 113256 -5qOL 113257 -5aOw6Z+z 113258 -5LmD 113259 -2KrbjNis2Yc= 113260 -5bm8 113261 -b255YQ== 113262 -IFBsYW50YWU= 113263 -0KfRgtC+ 113264 -5pCt 113265 -5L2c55So 113266 -7IWo 113267 -INC60YDRg9Cz 113268 -INmI2YHZig== 113269 -IO+8ng== 113270 -0YjQutC4 113271 -wqDQnA== 113272 -2KfYtNuM 113273 -IMWedWJhdA== 113274 -INi52LTYsQ== 113275 -bGlm 113276 -IHBvdcW+aXTDrQ== 113277 -7Yah 113278 -INCx0LvQvtC6 113279 -6IC2 113280 -4Li54Lij 113281 -IHbDvGM= 113282 -2LTZiNiv 113283 -0LjQvNCw 113284 -0L3QuNGG0LjQvw== 113285 -7J2065Oc 113286 -IOKAkA== 113287 -INC90LDQt9C90LDRhw== 113288 -IHN0cmFueQ== 113289 -5q6/ 113290 -INin2YTYsdmI 113291 -57q4 113292 -5YiR 113293 -77yM5LuO 113294 -IOuptA== 113295 -INC/0YDQvtCy0LXQtNC10L3QvdGP 113296 -IGhhdmE= 113297 -IOyXhuyXiOuLpA== 113298 -5aKe5Yqg 113299 -2r4= 113300 -57y6 113301 -INi52KjYp9ix 113302 -IHThuq9j 113303 -IGluxZ9h 113304 -ZXJzZQ== 113305 -2LHZitio 113306 -IOG7lW4= 113307 -2KPYqQ== 113308 -IM+Azr/Ou865 113309 -IG3huq9j 113310 -0YHQvtC7 113311 -5rSe 113312 -LdCz0L4= 113313 -56iL5bqm 113314 -INCy0LjQutC+0YDQuNGB0YLQsNC90L3Rjw== 113315 -4oCe2Lg= 113316 -ZWxlcmluZGU= 113317 -IE5oxrBuZw== 113318 -c3TFmWVk 113319 -IGhhc3RhbMSxaw== 113320 -4LmJ4LmA4Lib 113321 -IGRlZmE= 113322 -INiy2Yo= 113323 -2KfYt9mC 113324 -INC/0YDQvtC5 113325 -INC+0LrRgNGD0LM= 113326 -zr3Ouc6x 113327 -bGFkdQ== 113328 -a29saQ== 113329 -IG/Enw== 113330 -INCy0LjRgdC+0Lo= 113331 -0Ic= 113332 -55uW 113333 -44KP44GR 113334 -44O844OB 113335 -5qGl 113336 -IMWha29seQ== 113337 -aXRvbQ== 113338 -INiq2K3YtQ== 113339 -YWxhcmE= 113340 -INC60LDQuw== 113341 -INC/0YDQuNGF0L7QtA== 113342 -IOmmlumhtQ== 113343 -wo0= 113344 -INuM2LnZhtuM 113345 -IHTDuXk= 113346 -gOuhnA== 113347 -66Ck6rOg 113348 -w6F6ZQ== 113349 -INC10Lo= 113350 -6IW5 113351 -IEZha2F0 113352 -0L/Qvg== 113353 -IMSR4buNYw== 113354 -5YiY 113355 -w6F6YWw= 113356 -0YLQvtC9 113357 -2q/ZiA== 113358 -5LiI 113359 -7Je8 113360 -INmE2YTYow== 113361 -IEXEn2Vy 113362 -5YWx5ZKM5Zu9 113363 -2LDYsQ== 113364 -IGRhxJ8= 113365 -6KGM5Lia 113366 -6rGw656Y6rCA 113367 -6LSf6LSj 113368 -Q8O0bmc= 113369 -INGE0LjQu9GM 113370 -INCw0YE= 113371 -IGNo4bqzbmc= 113372 -0L3QuNC80LDRgtGM 113373 -IGlmYWQ= 113374 -IOyF 113375 -54i1 113376 -IMWZZcWhZW7DrQ== 113377 -5Zu95Lqn 113378 -INC60LDQutC+0Lk= 113379 -IOCkruCkpw== 113380 -IFlhcg== 113381 -b2JyYXo= 113382 -IG9uZW1vYw== 113383 -IOKC 113384 -5Y6f5Zug 113385 -INmD2LHYrw== 113386 -INii2LLYp9iv 113387 -IGFkbMSx 113388 -IEhpem1ldA== 113389 -44O844OR 113390 -2YbYs9mK2Kk= 113391 -INCy0L3Rg9GC 113392 -IGTDoWxl 113393 -zpXOpQ== 113394 -INGD0YU= 113395 -INGA0LXQsg== 113396 -INC80LXRiA== 113397 -IGtvxZ91bA== 113398 -INin24zYsdin2YbbjA== 113399 -6Zi1 113400 -IOuPmeyViA== 113401 -4LmA4Lif 113402 -66CI67Ko 113403 -6Kit6KiI 113404 -cHJhaw== 113405 -cG/EjQ== 113406 -2KfYudiv2Kk= 113407 -IGFza2Vy 113408 -INmI24zamNmH 113409 -INCi0LXRgA== 113410 -bWFrdGE= 113411 -IMSNdHnFmQ== 113412 -wqDQoQ== 113413 -4oCM2qnZhtmG2K8= 113414 -77yM5Lim 113415 -INGA0L7RgdGW0Lk= 113416 -IHVudXQ= 113417 -6L+Z5LiA 113418 -b3Bhaw== 113419 -6ICQ 113420 -INC30LDQvNC10YI= 113421 -4LmM4Lil 113422 -2KjZhg== 113423 -IOuqsA== 113424 -IGluc2FubGFy 113425 -5Y+v5piv 113426 -5qKm 113427 -0LrQvtC0 113428 -6Jub 113429 -a2xhZG7DrQ== 113430 -0YDQvtCy0L7QtA== 113431 -INC80ZbRgdGC0LA= 113432 -5Ye65LqG 113433 -INC/0LDRgQ== 113434 -0L7QsdC+0LI= 113435 -2q/Yp9mH24w= 113436 -0LLQuNC9 113437 -4KWN4KSw4KSn 113438 -INC60L7QvNC/0L7QvQ== 113439 -INCw0YI= 113440 -IGFkZXQ= 113441 -IOODgQ== 113442 -INiw2KfYqg== 113443 -INit2Yg= 113444 -IHRyb2NodQ== 113445 -4LmB4Lir4LiZ 113446 -INC30LDQstC20LTQuA== 113447 -IFBhcnRpc2k= 113448 -IFNhdmHFnw== 113449 -IHPDrWQ= 113450 -INGB0L7QvQ== 113451 -2LHZitmB 113452 -IHpjZWxh 113453 -5Zi0 113454 -INGE0YPRgg== 113455 -aWxlcmVr 113456 -bWFsxLFkxLFy 113457 -IGThu7Fh 113458 -4LiX4Liz4LiH4Liy4LiZ 113459 -INmI2YTZg9mG 113460 -44Gq44KT44Gg 113461 -INqp2YXbjA== 113462 -IGzDqWthxZk= 113463 -z4HPjQ== 113464 -2KzZhdi5 113465 -xLFuxLF6xLE= 113466 -IEFuYWRvbHU= 113467 -44Gr44KI44Gj44Gm 113468 -IOq3uOufrOuCmA== 113469 -IO2MlA== 113470 -0ZbRgtGM 113471 -IMKm 113472 -5LiN6KaB 113473 -4LiW4Lih 113474 -INmK2K8= 113475 -IHDFmWVw 113476 -IOimgQ== 113477 -INC/0YDQvtC10LrRgg== 113478 -INGA0LXQs9C4 113479 -IGThuqF5 113480 -0LrQvtCy0L7Qs9C+ 113481 -IMSxcw== 113482 -IEvEsQ== 113483 -INmB2YrZh9in 113484 -24zYp9iq 113485 -INGB0YLQsNC70LA= 113486 -5oqc 113487 -0YPRgNCw 113488 -INm+2KfbjNin2YY= 113489 -IGl0aWJhcmVu 113490 -0LDQvdGW0Zc= 113491 -INC+0YTQvtGA0Lw= 113492 -0LvQtdGH 113493 -zrXOvg== 113494 -5pS/562W 113495 -IOe9kQ== 113496 -5YKs 113497 -IOydtOufsA== 113498 -IGthcmRlxZ8= 113499 -0Y7RidC10LPQvg== 113500 -0LvQutC4 113501 -INin24zYp9mE2KfYqg== 113502 -2KrZh9in 113503 -INC/0L7QtNGF0L7QtA== 113504 -INit2YjZhA== 113505 -INGB0L7QstGA0LXQvA== 113506 -7Z2l 113507 -IOips+e0sA== 113508 -xLF5xLE= 113509 -INiq2YLZiA== 113510 -5q+U6L6D 113511 -IM6xzr3PhM65 113512 -IM6jzqQ= 113513 -amnFocWl 113514 -eW7EsQ== 113515 -IHBvY2jDoXpldA== 113516 -LdCa 113517 -INC30LDQstC0 113518 -2Y7Ysw== 113519 -57uT5p6E 113520 -2YXYp9ix 113521 -zr3Ov865 113522 -IM6gzrXPgc65 113523 -6Iej 113524 -IG5hY2jDoXrDrQ== 113525 -z4TPjg== 113526 -4KWN4KSv4KSk 113527 -dXl1 113528 -5pWX 113529 -ZWJp 113530 -IOuwlOuhnA== 113531 -INCz0YDQvQ== 113532 -INin2YTYp9iz 113533 -IG9yZ8Ohbg== 113534 -IGVkaW4= 113535 -5Z+D 113536 -4LmB4LiE 113537 -INit2K/ZiNiv 113538 -INC00YDRg9Cz0L7QuQ== 113539 -0L7RgdC60L7Qsg== 113540 -IFPhu58= 113541 -IHDFmWli 113542 -5L+d5oqk 113543 -2YXYqNix 113544 -IOODhg== 113545 -IGRveg== 113546 -b3B0ZXJh 113547 -4Li04Lil4Lib 113548 -2K/Yp9ix24w= 113549 -5oSf6KeJ 113550 -5Luj55CG 113551 -2YbYr9in 113552 -2KfZitin 113553 -2LXZhg== 113554 -IGNlbMOp 113555 -IOiplQ== 113556 -4LiH4LiZ 113557 -IGxlaA== 113558 -6I635b6X 113559 -44CA776J 113560 -IOyEoOyImA== 113561 -66W064qU 113562 -4KSG4KSw 113563 -5aeU5ZGY 113564 -5peg56CB 113565 -IOi3 113566 -IHphasOtbQ== 113567 -ZWNrw6k= 113568 -5rWc 113569 -INGD0L3RltCy0LXRgNGB0LjRgg== 113570 -INCx0Y7QtNC20LXRgg== 113571 -4KWHLg== 113572 -IHZzdHVw 113573 -INC+0Yk= 113574 -IOWciw== 113575 -5LiB55uu 113576 -INCy0LXQtNGM 113577 -IOunkOydhA== 113578 -IHRla25paw== 113579 -44CA772M 113580 -INC/0ZbQtNCy0LjRiQ== 113581 -INGB0LLRj9C30Lg= 113582 -INiq2LHYrNmF 113583 -wok= 113584 -IMSRw6J1 113585 -0ZbRh9C90L7Qs9C+ 113586 -5bCR5bm0 113587 -ZWN0YQ== 113588 -4KS/4KSy4KSk 113589 -zrnOv8+C 113590 -44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 113591 -dGVn 113592 -4buJbmg= 113593 -r78= 113594 -IG5lYnU= 113595 -2YrZitmG 113596 -0L7Rj9GC 113597 -6aSK 113598 -INin2YLYqti12KfYr9uM 113599 -4oCZbnVu 113600 -INCS0ZbQug== 113601 -IG5nxINu 113602 -64yA7ZWZ6rWQ 113603 -6Y8= 113604 -4KS84KSw 113605 -2KfYqNin2YY= 113606 -2Y7Zgw== 113607 -IGV0a2ls 113608 -IGNo4bqvbg== 113609 -IOuwnOyDnQ== 113610 -IHRhbWFtZW4= 113611 -INmF2K3bjNi3 113612 -w7xsw7w= 113613 -5YGl5bq3 113614 -INGA0LDRgdGC0LXQvdC40Y8= 113615 -z4DOv86v 113616 -IOi2hQ== 113617 -w6HEjQ== 113618 -IOyZuOu2gA== 113619 -INiu24zZhNuM 113620 -INiv2YjYs9iq 113621 -4LmA4LiC4LiV 113622 -IGthbGFu 113623 -66i8 113624 -YXbEmw== 113625 -66y47ZmU 113626 -INC00LjQsNCz 113627 -INmG2YjZitiz 113628 -7ZWR 113629 -4Lie4Liy4Liw 113630 -64uk6rCA 113631 -IG5p4buHbQ== 113632 -INiz2YjZhQ== 113633 -LdC8 113634 -4LiU4Liz4LmA4LiZ 113635 -4LmH4Lin 113636 -44CC44GT44Gu 113637 -56+J 113638 -V2lkdGhTcGFjZQ== 113639 -WmVyb1dpZHRoU3BhY2U= 113640 -2KfYptmF2Kk= 113641 -4LmE4LiL4LiV 113642 -5LiL6L295qyh5pWw 113643 -5Ly85LmO 113644 -INGC0LI= 113645 -IHrDoWtheg== 113646 -INis2K/Ypw== 113647 -IGdpZGVy 113648 -44O844OT 113649 -bsWv 113650 -IOunge2BrA== 113651 -IGTDvMWfw7xr 113652 -0YPQvdC+0Lo= 113653 -IHTDs2M= 113654 -INGC0YDRg9Cx 113655 -0L7QutGB 113656 -IHRy4bqjaQ== 113657 -IG1p4buFbg== 113658 -IHRoxrDhu5tj 113659 -IG5o4bqtdA== 113660 -wqBE 113661 -bWFzxLFuxLFu 113662 -6Lyq 113663 -IM6dzr8= 113664 -ZXLDpw== 113665 -IGRva29uY2U= 113666 -IEfDvHZlbg== 113667 -b3ZhbsOh 113668 -0LXQt9C0 113669 -0ZbQvdGM 113670 -6IGy 113671 -2KfZhNij 113672 -77yM5L2G5piv 113673 -INC/0L7Qu9C90L7RgdGC0YzRjg== 113674 -UG9ydMOhbHk= 113675 -INit2KfZgdi4 113676 -4KWC4KSV 113677 -0YDRg9C9 113678 -5Lq654mp 113679 -IGHDp8Sx 113680 -IHBvcnU= 113681 -ZXJpb2Q= 113682 -IEFtZXJpa2E= 113683 -54ef 113684 -INix2YjYrw== 113685 -INC60YDQvtCy0Lg= 113686 -2YjZgtiq 113687 -6Zi2 113688 -44O74pSB44O74pSB 113689 -2LHZitmF 113690 -5Y6G5Y+y 113691 -5Li4 113692 -INC30L3QvtCy0YM= 113693 -INGB0LLQvtC10LPQvg== 113694 -0LHRg9C00Yw= 113695 -INit2KzZhQ== 113696 -IM60z43Ovw== 113697 -7JWI64K0 113698 -IOOBpw== 113699 -4LmI4Liw 113700 -2ZHZjw== 113701 -57WQ5p6c 113702 -4oCZaQ== 113703 -4LmMLA== 113704 -5a2Y5LqO 113705 -IOCksOCkluCkqA== 113706 -INiz2LHZhdin24zZhw== 113707 -INCz0LvRg9Cx 113708 -INGA0LDQt9GW 113709 -0YfQvdGW 113710 -77yM5Y+I 113711 -Y8Sxc8Sx 113712 -5pyJ5YWz 113713 -44K744Oz 113714 -6JCo 113715 -IEdpw6Fv 113716 -INin2YTYq9in2YbZig== 113717 -INGA0LDQt9C+0Lw= 113718 -INGC0YDQvg== 113719 -IGHDp8Sxa2xhbQ== 113720 -5Yaz5a6a 113721 -4Lit4Lib 113722 -5ZSv 113723 -IMWfYXJr 113724 -IHNpc3RlbWk= 113725 -IHRvcHJhaw== 113726 -6ICD44GI 113727 -INC/0L7Qv9GD0LvRj9GA 113728 -IOuGjQ== 113729 -2KfZitmG 113730 -4KS44KSu 113731 -IMKA 113732 -IGVkZXJlaw== 113733 -IGdlYw== 113734 -7IKs7JeF 113735 -INGA0L7QutC4 113736 -INCx0LXRgNC10Lw= 113737 -INiu2KfZhtmI2KfYr9mH 113738 -IOi1tw== 113739 -INCn0YLQvg== 113740 -IG9ixJs= 113741 -0LjQvdGW 113742 -7J207JeI 113743 -IEluZGk= 113744 -INC00LjRgg== 113745 -44O25pyI 113746 -INC90LXQvNC90L7Qs9C+ 113747 -IHrDoWtsYWTEmw== 113748 -4LmC4LiE 113749 -INGB0LDQvNC+0LPQvg== 113750 -INio2K3Yqw== 113751 -IOa2 113752 -0L7QstC2 113753 -INC+0LHRgNCw0Yk= 113754 -w5I= 113755 -4Lin4Lij4Lij 113756 -4KSC4KS2 113757 -INC+0YfQtdGA0LXQtA== 113758 -INmB2LHYsg== 113759 -64yA7ZWc 113760 -IHNpemlu 113761 -2LHZgdiq 113762 -0Y7RidC40Lw= 113763 -5ruR 113764 -YXZpcg== 113765 -INmI2LXZhA== 113766 -IHF1YXk= 113767 -INCz0LjQvw== 113768 -0YDQtdC90LjRjw== 113769 -4KWN4KS14KSk 113770 -zrnOvc+Jzr0= 113771 -4KSc4KS5 113772 -IGjGoWk= 113773 -IHBvdmHFvg== 113774 -INi52LHYqA== 113775 -0LzQtdC90YLQsA== 113776 -INC+0YHRgtCw0L0= 113777 -5LmL6Ze0 113778 -YWPDrWNo 113779 -INGB0LrQsNC30LDQu9Cw 113780 -7J20652864qU 113781 -INi02KfYrg== 113782 -IOuLueyLoA== 113783 -YXJsYXI= 113784 -INC80LvQvQ== 113785 -5Yas 113786 -LjouOi46 113787 -IM64zrU= 113788 -IGhlcmtlcw== 113789 -0LvRj9C0 113790 -2KfZhdin 113791 -IOutkA== 113792 -z4POuc68zr/PgM6/zrk= 113793 -IG9icmF6 113794 -2LrYp9mE 113795 -Qsaw4bubYw== 113796 -5bCK 113797 -7J6Q66W8 113798 -5oCS 113799 -zr/Phc+BzrM= 113800 -5byV44GN 113801 -IGtvbnVkYQ== 113802 -INin2YTYqtis 113803 -IGtyaXQ= 113804 -5b+N 113805 -IOyghOyEuOqwgA== 113806 -0LPQvtCy0L7RgA== 113807 -IGlzdGl5b3I= 113808 -0L7QutC4 113809 -INC+0LHQtdGB0L/QtdGH 113810 -IGF5csSxY2E= 113811 -4LmA4Lic 113812 -0LDRgNC+0LQ= 113813 -xLDFng== 113814 -INis2YXZh9mI2LHbjA== 113815 -INGB0LLQvtC40YU= 113816 -IHByb3bDoWQ= 113817 -INGA0LDQvA== 113818 -INmC2LY= 113819 -0LvQuNGC0LXQu9GM 113820 -44Kx44OD44OI 113821 -0L7RgdC+0YQ= 113822 -IOCksOCkueCkqA== 113823 -a292w70= 113824 -7LC4 113825 -zrPOus6x 113826 -zrvOv865 113827 -zrzPgM6/ 113828 -IMSRYXU= 113829 -0L3QuNGO 113830 -IG1hbsW+ZWw= 113831 -IO2YvA== 113832 -INGC0LjRgQ== 113833 -44OG44Or 113834 -YWJpbGVjZWs= 113835 -0L3QuNC9 113836 -4LiB4Lij4Lij4Lih4LiB4Liy4Lij 113837 -6aCQ 113838 -IHBow6o= 113839 -amVkbg== 113840 -5Lqk5rWB 113841 -INCy0L3QuNC80LDQvdC40LU= 113842 -0L7QsdGA0LXRgg== 113843 -INC20LjQt9C90Yw= 113844 -0YDQuNGB0YLQuA== 113845 -4KWI4KSa 113846 -IHnDvHpkZW4= 113847 -IGdpeQ== 113848 -6ZqU 113849 -5Luy 113850 -IOiZ 113851 -IFBhcnRp 113852 -IOmWog== 113853 -4Lix4Lia4Liq 113854 -IG5lamxlcMWhw60= 113855 -2Y7ZiQ== 113856 -IOydtOygnA== 113857 -IGPhuq90 113858 -0YDQvtC30YPQvA== 113859 -IG5lanNvdQ== 113860 -bMOtZA== 113861 -zrjOvw== 113862 -4LmH4LiH 113863 -INGB0L/RgNC+0YE= 113864 -bWFtxLHFnw== 113865 -IOyqvQ== 113866 -2KfZgdmC 113867 -0YbRltC50L3QuNGF 113868 -IOmmmQ== 113869 -INmF24zZhNuM2YjZhg== 113870 -5aSi 113871 -INmB2YfYsdiz2Ko= 113872 -csO9 113873 -INC/0L7QstGW0LTQvtC8 113874 -ZWNlxJ9p 113875 -INC30LDQsdC10LfQv9C10YfQtdC90L3Rjw== 113876 -wpQ= 113877 -44GX44Gq44GE 113878 -5Z+656GA 113879 -INqG2YbbjNmG 113880 -INGA0L7Qt9GA0L7QsQ== 113881 -5LiA5Lqb 113882 -44Oz44Gu 113883 -INC/0YDQsNGG0ZbQsg== 113884 -5b6X5Yiw 113885 -IHThuqVu 113886 -5a2Y5qGj5aSH5Lu9 113887 -IO2ZiA== 113888 -IOC4lOC4suC4pw== 113889 -7Iux 113890 -0LvQuNC90LA= 113891 -INCy0L7RgdC/0LDQuw== 113892 -xJ9pbmRlbg== 113893 -0LDRgtC10LvQtdC5 113894 -csW+ 113895 -INGE0YPQvQ== 113896 -INCQ0Ls= 113897 -INC/0L7Rh9GC0Lg= 113898 -0L7QstGW0LQ= 113899 -2KfYudio 113900 -4Liy4Liw4Lir 113901 -INCy0L7Qt9GA0LDRgdGC 113902 -4Li04LiH4Lir 113903 -INmB2YTYsw== 113904 -IMWhZXN0 113905 -4LiK4Liy4Lin 113906 -IOqzqA== 113907 -IG/EjQ== 113908 -44K444On 113909 -0LrQvtGB0YLQuA== 113910 -6ZuG5Zui 113911 -5rGH 113912 -IHDFmcOtbGnFoQ== 113913 -IOydkQ== 113914 -0LTQuNCy0Lg= 113915 -INC00L7QutGD0LzQtdC90YLQsA== 113916 -IENow6J1 113917 -IG3DoXU= 113918 -IGtow7Q= 113919 -w5U= 113920 -0YnQuNC5 113921 -IHPhurVu 113922 -INC60L7QvdGE 113923 -INC30YPRgdGC 113924 -5Zue562U 113925 -INC60L7RgNC40YHRgg== 113926 -IM+AzrXPgc6v 113927 -5Liw 113928 -IG3huqFjaA== 113929 -0LDQvdC6 113930 -5LiL5p2l 113931 -6LWE5paZ 113932 -4Lii4Lit4LiU 113933 -IM+AzrnOvw== 113934 -4LmJ4LiH4Liy4LiZ 113935 -IHVtw61zdA== 113936 -5r2u 113937 -56qB54S2 113938 -IGt1bHR1cg== 113939 -INin2YTYtdmB 113940 -YWxhcsSxbsSxbg== 113941 -IM6UzrfOvM6/ 113942 -INCy0LjQutC+0L3QsNC90L3Rjw== 113943 -772/ 113944 -INCx0LXQt9C+0L/QsNGB 113945 -INGB0LDRhQ== 113946 -IG5vaA== 113947 -4LmD4Lia 113948 -6YO95biC 113949 -xZ9hbQ== 113950 -0LHRg9GC 113951 -IOuqqOyKtQ== 113952 -INCy0LDQsw== 113953 -55CG6Kej 113954 -IGVrb25vbWlr 113955 -IGto4bqvYw== 113956 -IHN2YXQ= 113957 -0LvQuNGI0LrQvtC8 113958 -4Lix4LiH4LiI4Liy4LiB 113959 -aXp5b24= 113960 -6IO95aSf 113961 -zq/Ovc61zrk= 113962 -woo= 113963 -7KaM 113964 -INmH2KfbjNuM 113965 -IGtpxZ9pbGVy 113966 -INC60LvQtdGC 113967 -7ZiB 113968 -4KWD4KSm 113969 -acWh 113970 -65SU7Jik 113971 -2YrYsdin2YY= 113972 -INCd0YM= 113973 -4Lit4LiZ4LiX 113974 -INGB0L7Rhw== 113975 -IGlzdGV5ZW4= 113976 -IFNleg== 113977 -IOOCuw== 113978 -IEHDpw== 113979 -4oCM2YY= 113980 -INGC0L7Qvw== 113981 -INGC0LXRgNGA0LjRgtC+0YA= 113982 -YWPEsWzEsWs= 113983 -INC+0LTQvdGD 113984 -IHZlcmk= 113985 -INqp2K8= 113986 -INqv2YHYqtmH 113987 -IGNpbnNlbA== 113988 -0L7Qu9C+0LPQuNC4 113989 -IHDFmWVkbcSbdA== 113990 -4KSC4KSY 113991 -IOepug== 113992 -zrPOsQ== 113993 -J3ll 113994 -2KrYsdip 113995 -IGTFmcOt 113996 -IEjDoG4= 113997 -INix2LTYqtmH 113998 -IHZpZGVh 113999 -INC90L7Qsw== 114000 -5re7 114001 -6L+Y5pyJ 114002 -2YbYr9ix 114003 -IHllcmRl 114004 -IGtlbnQ= 114005 -4Lia4Liy4Lil 114006 -INC00LXRgdGP 114007 -5Lia5Yqh 114008 -INC+0LHRitC10Lo= 114009 -INCy0L3Rg9GC0YDRltGI 114010 -a29sYQ== 114011 -ZWJuw60= 114012 -4Li14Lil 114013 -ICwu 114014 -INC80ZbQttC90LDRgNC+0LQ= 114015 -44Gq44KT44Gm 114016 -IFPDtno= 114017 -IGNob2Q= 114018 -IHRyw7pj 114019 -7JqU7J28 114020 -IHBo4bqtbg== 114021 -0YHQutCw 114022 -INGF0LvQvtC/ 114023 -0YHQutC40Lw= 114024 -IGthcGl0 114025 -65Ok7JeQ6rKM 114026 -IGLDoG8= 114027 -bMSxxJ/EsW4= 114028 -xLDFnw== 114029 -xI1uw61r 114030 -IE5nb8OgaQ== 114031 -INio24zYp9mG 114032 -IHByb8SN 114033 -INC/0YDQvtGC0Y/Qs9C+0Lw= 114034 -5YCJ 114035 -0LXRjg== 114036 -IM69zr8= 114037 -652864+E 114038 -7Leo 114039 -INCy0LjRj9Cy 114040 -INC/0L7QvdCw0LQ= 114041 -INC20L7QstGC 114042 -IOavlA== 114043 -IGRvYnk= 114044 -0LvQsNC8 114045 -0ZHQuw== 114046 -INGA0LDRhQ== 114047 -INCy0L7Qt9C90LjQutCw 114048 -0L3QuNGG0YLQstC+ 114049 -5bGk 114050 -INC+0YLQu9C40Yc= 114051 -54KO 114052 -6aOv 114053 -IMW+aXZvdGE= 114054 -YXTDtnI= 114055 -IGNlbMO9 114056 -IGFkYXk= 114057 -2LHZitmD2Yo= 114058 -INio2LU= 114059 -bWV5ZW4= 114060 -7Jqw7Iqk 114061 -2KjZiNmE 114062 -INC+0LfQvdCw 114063 -6bq8 114064 -5pOa 114065 -IHprb3U= 114066 -64KY7JqU 114067 -IGtyeQ== 114068 -IG5lbW9o 114069 -IHZ5dcW+w60= 114070 -IOacqA== 114071 -INCw0LTQvNGW0L3RltGB0YLRgNCw 114072 -2KfZh9in 114073 -4LmD4LiB4Lil 114074 -77y/77y/77y/77y/77y/77y/77y/77y/ 114075 -INCz0L7Rgg== 114076 -INiv24zar9ix24w= 114077 -INC70LXQutCw0YA= 114078 -6KeA 114079 -IO2YkQ== 114080 -IELDtnlsZQ== 114081 -aXN0cm92 114082 -5aWz5a2Q 114083 -INC/0L7Qv9C10YDQtdC0 114084 -INmG2YjZitiz2YbYr9mH 114085 -2ZLZhA== 114086 -INCf0LDQsg== 114087 -IMO2cm5law== 114088 -INC/0YDQuNC6 114089 -INGI0Lg= 114090 -w7xzbMO8bWFu 114091 -INmF2YLYp9io2YQ= 114092 -5Y2B5LqM 114093 -IGJla2w= 114094 -IHZlcmly 114095 -2YjYsA== 114096 -2LbYqQ== 114097 -0YDQvtGC0LjQsg== 114098 -5oyR 114099 -Li46 114100 -INiu2KfYsdis2YrYqQ== 114101 -YWTEsWs= 114102 -INCf0L7Rhw== 114103 -INGF0YPQtNC+0LY= 114104 -5a6i5oi3 114105 -zrzOv869 114106 -ZWt0aXY= 114107 -IHR2w6E= 114108 -27Lbsg== 114109 -IGzhu41j 114110 -INC+0L3Qvg== 114111 -0YbQuNGC 114112 -INCS0YE= 114113 -IOWi 114114 -5rWq 114115 -0LDRgNGW 114116 -IHPDvHJla2xp 114117 -IHN0cmE= 114118 -IGJpemU= 114119 -IHRlc3BpdA== 114120 -IGNow6J1 114121 -INin2YTYtg== 114122 -4LmJ4Lit4LiH4LiB 114123 -IOiAhQ== 114124 -IEjhuw== 114125 -INC60LDQttC00YvQuQ== 114126 -0LDRjg== 114127 -4LiZ4LiE4Lij 114128 -4LiX4Liw 114129 -INmF2LHYp9is2Lk= 114130 -IGhhbGluZQ== 114131 -zrTOv8+C 114132 -ZcSfaQ== 114133 -INmF24zYstin2YY= 114134 -INmH2YQ= 114135 -IGJvbGVzdA== 114136 -IOWcnw== 114137 -IHV6bWFu 114138 -0YDQvtCz 114139 -56K66KqN 114140 -INGA0ZbQt9C90LjRhQ== 114141 -INC30LDQutGA0Ys= 114142 -0LvRg9Cz0Lg= 114143 -INGB0L7QstC10YI= 114144 -aWRkaQ== 114145 -5ZCI44KP44Gb 114146 -IOWQiQ== 114147 -IGtp4buHbQ== 114148 -67K9 114149 -INmF2LnZhdmI2YQ= 114150 -INC+0L/RgNC10LTQtdC70Y8= 114151 -IG1pa3Rhcg== 114152 -IOyekOuPmQ== 114153 -IGlsYcOn 114154 -0LvQvtGH 114155 -IHnEsWzEsQ== 114156 -IMSQ4buD 114157 -IGFieWNo 114158 -IHJla2xhbQ== 114159 -IHZ5cGFk 114160 -INC90LDRg9GH 114161 -4LmA4LiE4Lij4Liy4Liw4Lir 114162 -IOS7lg== 114163 -cG92xJs= 114164 -77yM6K6p 114165 -56Wd 114166 -2KfZiNmG2K8= 114167 -IDp8Og== 114168 -IHJlxb4= 114169 -IHZ5YmF2 114170 -7Jyk 114171 -5q20 114172 -0L7Qs9GA0LDRhNC40Y8= 114173 -ZXpwZcSN 114174 -wrFu 114175 -0L7QstGD 114176 -INC00YPQvNCw 114177 -IGplZG5vZHU= 114178 -0L7RidC4 114179 -INmF2LTYqtix 114180 -6Kaz 114181 -IHlva3R1cg== 114182 -IG9ixI1hbg== 114183 -IFRy4bqnbg== 114184 -xLFtc8Sxeg== 114185 -zrHOuc69 114186 -wow= 114187 -2LHbjNin2YY= 114188 -IEplaG8= 114189 -INin2YTYotmG 114190 -0YHRjNC60LjQvA== 114191 -IGtkeWJ5 114192 -IGJhxZ/EsW5h 114193 -IHByZXppZGVudA== 114194 -IFZp4buHYw== 114195 -5YW8 114196 -4KWM4KSc 114197 -IOunpOunpOqwgA== 114198 -5qih5byP 114199 -bsOtbXU= 114200 -IOWC 114201 -IGRlbml6 114202 -mOibmw== 114203 -IOiAjA== 114204 -2YjYrQ== 114205 -0YvQvw== 114206 -IOKWvA== 114207 -bnVs 114208 -IFNldg== 114209 -IHJ1aA== 114210 -IGjhuqE= 114211 -INGP0L0= 114212 -IOq4sOuzuA== 114213 -IHZlbGlr 114214 -IFTDom4= 114215 -0LjQu9C40YHRjA== 114216 -INGF0YDQsA== 114217 -5YK3 114218 -IOCkhuCkjw== 114219 -IG55bsOt 114220 -wrvYjA== 114221 -INi02Lk= 114222 -5p2C 114223 -INC80YvRiA== 114224 -44GZ44GQ 114225 -IOqzteyngA== 114226 -IHThu5lj 114227 -44O844OH 114228 -INGB0LXQu9C+ 114229 -INin2LnZhNin2YU= 114230 -IMWfaW1kaQ== 114231 -INin2YTZhdmK2YTYp9iv 114232 -INin2YbZgtmE2KfYqA== 114233 -INi02K7YtdmK2Kk= 114234 -IEvDvHI= 114235 -INCy0ZbRgg== 114236 -INin2YbYr9in2LLZhw== 114237 -INC80L7RiQ== 114238 -dGVybmV0 114239 -IM6xz4XPhM6u 114240 -INGA0L7Qt9GC0LA= 114241 -INCy0LjQsg== 114242 -bGVq 114243 -IOihqA== 114244 -z4PPg8+Mz4TOtQ== 114245 -INmK2LPYqg== 114246 -INC80LDRiA== 114247 -5Z2a 114248 -INC60L7QvNC90LDRgg== 114249 -4Liy4Lir4Lil 114250 -IOeZvA== 114251 -INin2YjZhNuM2YY= 114252 -6L+Q5Yqo 114253 -INC/0YPQvdC60YI= 114254 -INC+0YHQvtCx0LXQvdC90L4= 114255 -INC80LDQvA== 114256 -57up 114257 -77+j77+j77+j77+j77+j77+j77+j77+j 114258 -0LDQu9GM0L3Ri9C8 114259 -INCm0LXQvdGC 114260 -LdCc 114261 -57eS 114262 -IOCkueCknA== 114263 -0L7RgtGL 114264 -44Kk44OJ 114265 -2K/Yp9ix2Kk= 114266 -44Go44GX44Gf 114267 -4Lix4Lie4Lii 114268 -IG90w6F6 114269 -INC00L7Qv9C+0LzQvtCz0L7Rjg== 114270 -4LmB4Lil4Liw4LiB4Liy4Lij 114271 -INGC0YDQsNC90YHQv9C+0YDRgg== 114272 -INmC2LHYotmG 114273 -IOesrOS4gA== 114274 -INC80LjQuw== 114275 -IG5nw7Rp 114276 -IGxpbmg= 114277 -IE5ow6Ju 114278 -0YzQvtCz0L7QtNC90ZY= 114279 -5oCA 114280 -4LmJ4Liy4Liq 114281 -Ljo6Ljo6 114282 -IGJpcmV5 114283 -5oCd44GE 114284 -4LmD4LiU 114285 -0LLQtdGA0LQ= 114286 -IGxpc3RvcGFkdQ== 114287 -IOC5geC4oQ== 114288 -0LPQtQ== 114289 -INC60YPRhQ== 114290 -IO2ZnOuPmQ== 114291 -IOiO 114292 -INCQ0LvRjA== 114293 -7ZqM7J2Y 114294 -IM+Az4HOsQ== 114295 -IHZ1aQ== 114296 -4Lin4Lij 114297 -4KSC4KS1 114298 -IGdlY2U= 114299 -56u2 114300 -IGt1dg== 114301 -0LzQtdGJ 114302 -INGC0LXQv9C10YDRjA== 114303 -4Lit4LmA4Lih 114304 -5Yi25bqm 114305 -INGC0YDQtdGC 114306 -INmG2KrbjNis2Yc= 114307 -5LuY44GN 114308 -IO++ng== 114309 -INGH0L7Qs9C+ 114310 -4oCQLQ== 114311 -IMWZw61rw6E= 114312 -4LiH4LmD4LiZ 114313 -IG7Em2tvbGlrYQ== 114314 -IGJ1bmE= 114315 -77yM5a2Y5LqO 114316 -4Lil4Liz 114317 -44CB44Go 114318 -IG7hu5lw 114319 -INin2YTYrNmG 114320 -IM6gzrHOvQ== 114321 -0J7QoA== 114322 -INiv2K7Yqtix 114323 -IMO6ZGFqZQ== 114324 -IOW8oA== 114325 -cmV0aW0= 114326 -c8SxbsSxeg== 114327 -INmH2YbYp9mD 114328 -0JvQrA== 114329 -5pWs 114330 -zpHOnA== 114331 -6aG16Z2i5a2Y5qGj5aSH5Lu9 114332 -7IKs6rCA 114333 -IHRyZXN0 114334 -dmnEjQ== 114335 -INm+24zYr9in 114336 -zrbOtQ== 114337 -INCf0L7Qsg== 114338 -2YTZhdin2Ko= 114339 -b3JleA== 114340 -6Kyb 114341 -INCy0ZbQtNC60YDQuNGC 114342 -0LzQsNGF 114343 -INGH0LjRgdC70LU= 114344 -2KrYqNin2LE= 114345 -IM6tzro= 114346 -7JWE7YyM7Yq4 114347 -cmF2ZWw= 114348 -zrHPg86vzrE= 114349 -YcSN 114350 -IOCkj+CkqA== 114351 -4Lil4Liw4LmA4Lit 114352 -INC30LDQu9C10LY= 114353 -IOaB 114354 -INC80L7QttC10YLQtQ== 114355 -INC/0L7QstC10LQ= 114356 -INio2LPbjNin2LHbjA== 114357 -IHBvxI1ldA== 114358 -2LHYqNi5 114359 -ZWxleg== 114360 -2KfZiNix24w= 114361 -IGJhxZ9r 114362 -5bCC 114363 -IGhhbGRl 114364 -5ouf 114365 -U2F1 114366 -0L7RhtC4 114367 -4Li14LiE 114368 -INCy0LvQsNC00Lg= 114369 -2ZDZhQ== 114370 -a3Vk 114371 -4KWC4KSs 114372 -5aeU5ZOh 114373 -4Liy4Lij4LiT 114374 -b3LFrw== 114375 -INmF2YjZhA== 114376 -IGJ5dA== 114377 -IHDFmcOtc2x1xaE= 114378 -6Iux6K+t 114379 -6YCQ 114380 -IHZlbGvDqQ== 114381 -IOCkhuCktg== 114382 -IHBoaeG6v3U= 114383 -4LmD4Liq 114384 -INin2LPZvg== 114385 -IHpib8W+w60= 114386 -44GT44KT44Gq 114387 -INmI2YfZig== 114388 -INGD0YfQsNGB0YLRjA== 114389 -4LiI4Liz4LiZ4Lin4LiZ 114390 -INiq2LHaqQ== 114391 -5Y2B5YiG 114392 -zp/OoA== 114393 -zrrOv867 114394 -IGZha2F0 114395 -IGNo4buX 114396 -6YCa55+l 114397 -INCy0L7QtNGD 114398 -IM6azrHPhM63zrPOv8+Bzq/OsQ== 114399 -YWNhxJ/EsW7EsQ== 114400 -0LvQvtCz0L4= 114401 -IG3DvMWfdGVy 114402 -IGplZG5vdQ== 114403 -INCx0LDRgA== 114404 -aWRhZQ== 114405 -ZMSxbQ== 114406 -6L6y 114407 -5ZC5 114408 -65Cp64uI64uk 114409 -IMWfZWtsaW5kZQ== 114410 -ZW7DvW0= 114411 -65Ov 114412 -aXTEmw== 114413 -INC60L7Qu9GM 114414 -64yA7ZWZ 114415 -IMOWcg== 114416 -IOq9 114417 -IFVCTkQ= 114418 -IGhpaw== 114419 -44KJ44GX44GE 114420 -5Ye65ZOB 114421 -Q8Oz 114422 -IM6e 114423 -IOWFpQ== 114424 -IE5ndXnDqm4= 114425 -INm+2YjYtA== 114426 -0LvRj9GU 114427 -INii2LrYp9iy 114428 -IG5oaeG7hW0= 114429 -ZGl2aWQ= 114430 -55g= 114431 -2KfZgdiq2Yc= 114432 -0LDQvNC10YI= 114433 -0L3Rg9C70YHRjw== 114434 -5LyB5qWt 114435 -0YDQvtCx0ZbRgg== 114436 -ZMO8xJ/DvA== 114437 -INqp2KfZhg== 114438 -4Lit4LiH4LiX 114439 -0LnQvQ== 114440 -IHBvaHli 114441 -IGJp4buHbg== 114442 -IO+8mw== 114443 -2YXZhtiv 114444 -IOCkhuCklQ== 114445 -IMSNbG92xJtr 114446 -44KS6KaL44KL 114447 -67ew 114448 -INGD0LLQtdC70LjRhw== 114449 -IOq0 114450 -IHlhbmzEscWf 114451 -6bqm 114452 -IOWklumDqA== 114453 -z4TOv8+Fz4HOsw== 114454 -INC/0YDQvtGH 114455 -INGA0YPQutC+0LLQvtC0 114456 -55uk 114457 -6JyY6Jub 114458 -5a6J6KOF 114459 -INCj0LrRgNCw 114460 -IHRhcnTEscWf 114461 -0YLQsNC2 114462 -IG9sdcWfYW4= 114463 -IFJ1c3lh 114464 -INC60LvRg9Cx 114465 -IM6gzqE= 114466 -YWzEsWTEsXI= 114467 -a8Sxbg== 114468 -INC30LzRltC90Lg= 114469 -bGXFn2lr 114470 -0LXRgNC/ 114471 -0L7QsdGJ0LU= 114472 -IHF14bqtbg== 114473 -IOCkquCktg== 114474 -44KS5Y+X 114475 -4LmA4Lil4LiC 114476 -2KfYttix 114477 -IHXFvml2YXRlbA== 114478 -zrvOr86x 114479 -INCS0L7QvdC4 114480 -4Li44LiU4LiX 114481 -IFbDoA== 114482 -44Oz44K/ 114483 -KeuKlA== 114484 -5rib 114485 -IM68z4A= 114486 -5ben 114487 -INGI0LrQvtC7 114488 -IOyymOydjA== 114489 -4Lix4LiB4LiU 114490 -5q6K 114491 -IG5o4bud 114492 -IM6/z4DOv86vzrE= 114493 -4LmB4LiZ4Lin 114494 -0LzQtdGA0LjQutCw0L0= 114495 -bsOta2E= 114496 -IO2YuO2FlA== 114497 -2LPYqNio 114498 -4LiH4Lih 114499 -7J6I64qU 114500 -2LrYtw== 114501 -2Y/ZhA== 114502 -ueaenA== 114503 -0YfRltCy 114504 -0YjQsNGP 114505 -INil2YTYpw== 114506 -2K7YtdmI2LU= 114507 -bGxsbA== 114508 -INGN0YLQuNC8 114509 -IHp2w60= 114510 -IHF1w6Fu 114511 -4LiZ4LiB 114512 -INC/0L7Qu9C+0LI= 114513 -IOa3sQ== 114514 -IG1p4buBbg== 114515 -5Lq66ZaT 114516 -INC30LjQvA== 114517 -IG1leWRhbmE= 114518 -0LXRhA== 114519 -IGLhu4Fu 114520 -2LLZitiv 114521 -INCg0LXRgdC/ 114522 -zpnOo86k 114523 -IOaUtg== 114524 -cmF5YQ== 114525 -INiq2YjYp9mG2K8= 114526 -IGlzdGVy 114527 -IOuwgA== 114528 -INC80LXRhdCw0L3QuA== 114529 -IOC4leC4sw== 114530 -INC00LXQutCw 114531 -4KSC4KSX4KSy 114532 -44O844Kr44O8 114533 -IG5lcMWZw60= 114534 -INGB0YfQuNGC 114535 -IM6/zrzOrA== 114536 -IMOnaWZ0 114537 -2KjbjNmG24w= 114538 -bWVsZXJp 114539 -INCy0L7Qt9C00LXQudGB0YLQsg== 114540 -ZG91 114541 -7IOB7J2E 114542 -INCS0L7Qu9C+0LQ= 114543 -zrXOsg== 114544 -0J3QmA== 114545 -0Y/Qug== 114546 -z43PhM61 114547 -0LfQsNC90L4= 114548 -bGVuaXI= 114549 -Y2VsaWs= 114550 -INGB0L7RgdGC0LDQstC70Y/QtdGC 114551 -zrnOsc+C 114552 -INCT0L7RgA== 114553 -5LmL5LiA 114554 -z4POvM+Mz4I= 114555 -44Gr6Zai 114556 -INCy0Yc= 114557 -INC/0L7RgdC6 114558 -6Lyv 114559 -4KWA4KS2 114560 -INii2KvYp9ix 114561 -4LiE4Lin4Liy4Lih4Lij 114562 -INC10LTQuNC9 114563 -7YWQ 114564 -5bmz5oiQ 114565 -IGtpxZ9pbmlu 114566 -44Ky44O844Og 114567 -4KWN4KSk4KS1 114568 -IGthcHNhbcSxbmRh 114569 -IGFrdGFy 114570 -IHRy4bur 114571 -INix2LTYrw== 114572 -INC90LDQutCw0Lc= 114573 -2LHZitmE 114574 -4Lit4LiE 114575 -INqv2LDYtNiq2Yc= 114576 -IOawkQ== 114577 -INGC0LXQsdGP 114578 -c3Bvcg== 114579 -0Y7RidCw0Y8= 114580 -0L7QutGA0LXQvNCw 114581 -0LLQsNC0 114582 -IENow7puZw== 114583 -INiy24zYp9iv24w= 114584 -0LXQvdC+0LPQvg== 114585 -INqp2LPbjA== 114586 -w54= 114587 -IGFkxLFuYQ== 114588 -0YPQtNCw 114589 -0ZbRlA== 114590 -0LDRgtC10LvQuA== 114591 -IG7DoXbFoXTEmw== 114592 -55So5LqO 114593 -INm+2LHZiNmG2K/Zhw== 114594 -INmG2KjZiNiv 114595 -2LPYp9iq 114596 -7JeY 114597 -44Gj44Gm44KC 114598 -IOeJqQ== 114599 -0JjQtw== 114600 -5Yi3 114601 -IO2ctA== 114602 -INC+0YHQvtCx0LvQuNCy 114603 -44GX44G+44Gj44Gf 114604 -YXlkxLE= 114605 -5Ye655qE 114606 -IOyVhOuLiOudvA== 114607 -xLFzxLFuxLE= 114608 -4LiX4Liy4LiH4LiB4Liy4Lij 114609 -IHp2dWt5 114610 -IOeuoQ== 114611 -4paL4paL 114612 -INGC0LXQu9C10YQ= 114613 -INC90LXQu9GM0LfRjw== 114614 -44Or44Gu 114615 -z4PPgA== 114616 -IOez 114617 -5aCh 114618 -0YbRg9C3 114619 -2LHZitmC2Kk= 114620 -4KS/4KSb4KSy 114621 -6LKp 114622 -INCj0LrRgNCw0ZfQvQ== 114623 -INmF2LPYptmI2YQ= 114624 -INC+0YfRlg== 114625 -5pyA5b6M 114626 -INC30L3QsNGO 114627 -4LmJ4LiZ4LiX 114628 -INGC0LXRgNCw0L8= 114629 -INGB0L/QvtC6 114630 -INiu2YjYr9ix2Yg= 114631 -6Zi7 114632 -IGTDvHpleQ== 114633 -5LiA5YCL 114634 -2KfZgdmH 114635 -4KSC4KSv 114636 -6LWE5Lqn 114637 -57un57ut 114638 -INGB0LvQsNCx 114639 -5oSP5oCd 114640 -IO2ZmOyCsA== 114641 -INGP0YA= 114642 -IGTFr3ZvZA== 114643 -552b 114644 -2KrbjNio 114645 -INmI24zYsQ== 114646 -INmH2LLbjNmG2Yc= 114647 -IGJlbnplcg== 114648 -INmF2KfYr9mH 114649 -4KWM4KSV 114650 -IOC5gOC4lQ== 114651 -44KI44GP 114652 -0LjQtNC10L3Rgg== 114653 -6Iux6Kqe 114654 -0LXRgNGL 114655 -IOq4iOyVoQ== 114656 -IOODvA== 114657 -IOuNpO2UhA== 114658 -0YDQsNGC0Yw= 114659 -IOWNlQ== 114660 -4LmA4LiJ4Lie4Liy4Liw 114661 -IOaUvw== 114662 -IOCkhuCkrg== 114663 -INC30L3QuA== 114664 -IOudvOydtA== 114665 -5o6M 114666 -55CG55Sx 114667 -INin2Lo= 114668 -INGB0LjQsw== 114669 -INC10YTQtdC60YLQuNCy 114670 -INCf0YDQtdC0 114671 -44O044Kj 114672 -INCy0LjQutC+ 114673 -IHR2cmQ= 114674 -64K06riw 114675 -44OL44Ki 114676 -INmF2LTYp9mH2K/Zhw== 114677 -IOCkuOCkmg== 114678 -bMO8xJ8= 114679 -6K+B5Yi4 114680 -IHNpw6p1 114681 -INC+0YLQsg== 114682 -IHZ5dHZvxZk= 114683 -INit2YXZhA== 114684 -INGE0YDQsNC9 114685 -4LmJ4LiU 114686 -5Yy76Zmi 114687 -INCy0LvQsNC0 114688 -2LrZhA== 114689 -5bu656uL 114690 -b3Nsb3Zlbg== 114691 -0LjQu9Cw0YHRjA== 114692 -2LnZhNmI2YXYp9iq 114693 -INiq2LHbjNmG 114694 -zq3Pgc61zrk= 114695 -IGLhuq10 114696 -INmF2LTaqQ== 114697 -INix2KbZitiz 114698 -IOygnOyekQ== 114699 -zrPOtw== 114700 -INC90ZbQug== 114701 -IOq1rOyEsQ== 114702 -IMSRZW4= 114703 -IOCkmuCksA== 114704 -IGdlw6dtacWf 114705 -5LqG6Kej 114706 -INC70LXRgQ== 114707 -IHF1YW5o 114708 -44CM5oiR 114709 -IE7Em2t0ZXLDoQ== 114710 -656N 114711 -w4XFuA== 114712 -4KSC4KSm4KSw 114713 -7JWE7J20 114714 -5bCR44GX 114715 -INi02YfYsduM 114716 -zrrPhM63 114717 -IOKXhA== 114718 -INmD2LM= 114719 -6LeM 114720 -w48= 114721 -5bel5YW3 114722 -5YqD 114723 -cG9t 114724 -INC90LDQstGH0LDQvdC90Y8= 114725 -INix2Kw= 114726 -0YDRg9C10YLRgdGP 114727 -IM69zq0= 114728 -24zZhtqp 114729 -4LmC4LiL 114730 -5Yuk 114731 -44GX44G+44GG 114732 -INGB0L7Qs9C70LDRgQ== 114733 -6YeR6J6N 114734 -57u/ 114735 -INCh0LDQvQ== 114736 -5pW1 114737 -INC/0L7QstGW0YI= 114738 -INC/0L7QvNC+0YnQuA== 114739 -44Oh44Oq44Kr 114740 -44K344Ki 114741 -IM+Az4HOv8+C 114742 -6Iiq56m6 114743 -INCy0LDRgNC40LDQvdGC 114744 -IHlhbG7EsXpjYQ== 114745 -57O757Wx 114746 -INmB2YjYsQ== 114747 -0L7Rh9C90L7QuQ== 114748 -4LmA4Lin4Lit4Lij 114749 -INC60YPQu9GM0YLRg9GA 114750 -z4fOuQ== 114751 -xI3DrXRh 114752 -wpM= 114753 -5Lq644GM 114754 -zrrOv8+N 114755 -INGA0LXRlA== 114756 -INCy0YHRjg== 114757 -6bqX 114758 -INiy2YbYp9mG 114759 -54uC 114760 -IOC4q+C4oQ== 114761 -IHjDumM= 114762 -5YWS 114763 -xJ9pbmlu 114764 -5Zac5qyi 114765 -INGB0YLQsNC0 114766 -aXllc2k= 114767 -7Jqx 114768 -6J0= 114769 -IGt1cw== 114770 -z4TOv867 114771 -0LPRltCy 114772 -0ZbQu9C4 114773 -44GE44KE 114774 -6amX 114775 -b250cm9s 114776 -2KfZhNmD 114777 -0LrQvtCy0LjRhQ== 114778 -INGB0YLQsNC70L4= 114779 -IM6gzrHPgc6x 114780 -IGNoeQ== 114781 -IGNpaGF6 114782 -h7Q= 114783 -7J6l7J20 114784 -YWNlYWU= 114785 -2LTZh9ix 114786 -0LjQu9Cw0L3QvdGP 114787 -55qE5bCP 114788 -IHRo4bul 114789 -2YjZhtiq 114790 -0LvQvtGA 114791 -44KS5oyB 114792 -IM6Uzrk= 114793 -IOecnw== 114794 -0JvQng== 114795 -6b2Q 114796 -546E 114797 -2KfZiNmH 114798 -INC40L3Rgg== 114799 -4KWA4KSf4KSw 114800 -INC+0LHRidC1 114801 -INC00LXQv9GD0YI= 114802 -zrzOrc69zrXPgg== 114803 -INmD2YrZgQ== 114804 -2LnZhdmE 114805 -77yM5aaC5p6c 114806 -INC40L3RhNC10Lo= 114807 -aXRlbGU= 114808 -IOOAgOOAgCDjgIA= 114809 -44Kk44Oz44OI 114810 -0LvRltGC 114811 -INGB0Y4= 114812 -IHphc2U= 114813 -ZGVjaA== 114814 -0LXQutC+ 114815 -6K6T 114816 -5Y+s 114817 -0LfQtdC8 114818 -zqDOkQ== 114819 -IHZ6ZHU= 114820 -4Liy4LiI4Liy4LiB 114821 -a29saXY= 114822 -emt1bQ== 114823 -6IGK 114824 -IOyxhOyaqQ== 114825 -4LmN 114826 -IGFzcA== 114827 -27LbtA== 114828 -7J24642w 114829 -IGthcsWfxLFsYcWf 114830 -77yM5Y+v5Lul 114831 -IOCkh+CkqOCklQ== 114832 -IOyKpO2DgA== 114833 -6YOo5bGL 114834 -5Yi25L2c 114835 -44O844K344On44Oz 114836 -zr/Ovc+EzrHPgg== 114837 -zrPOvw== 114838 -IOyekeyEsQ== 114839 -6JGj 114840 -b3rFmWVqbcSb 114841 -INGA0LXQt9GD0LvRjNGC0LDRgtC1 114842 -IEluc2VjdGE= 114843 -IHNrb24= 114844 -b3R1 114845 -IHDEm3Q= 114846 -0YHRjNC+0LPQvg== 114847 -IMSwc2xhbQ== 114848 -IGzhu4U= 114849 -5Lit5ZyL 114850 -INCc0ZbQvdGW0YHRgg== 114851 -5ZCI5ZCM 114852 -YXN5b251 114853 -0L7QttC10YI= 114854 -6Ieq5Yqo 114855 -0YHRjNC60L7Rjg== 114856 -IGtpxZ9pc2Vs 114857 -z4TOuc66zr/PjQ== 114858 -INGD0YfQsNGB 114859 -xLFsbcSxxZ90xLFy 114860 -INGP0LrQtQ== 114861 -0YnQuNC90Ys= 114862 -0LzQsNGA 114863 -IHNvdWR1 114864 -wqDQrw== 114865 -INC00YDRgw== 114866 -44Gh44KH 114867 -4KWL4KWc 114868 -776R 114869 -IM+Ez4w= 114870 -INi22LE= 114871 -bMOhxaE= 114872 -INC00ZbQsg== 114873 -INis2K/Zitiv 114874 -INC90LXQsdC+0LvRjNGI 114875 -6YGt 114876 -57uN 114877 -IEt1cnVsdQ== 114878 -0YHRgtGA0YPQvNC10L3Rgg== 114879 -6L+Z5piv 114880 -7JmU64uk 114881 -0LzQtdC70Yw= 114882 -IOS8ig== 114883 -4bunbmc= 114884 -INC30LDQstC40YHQuNC80L7RgdGC0Lg= 114885 -642k7ZSE 114886 -54eD 114887 -6L+H5Y67 114888 -INC30LDRgdGC0L7RgdGD0LLQsNC90L3Rjw== 114889 -INiv2KfYrtmE24w= 114890 -0YnRkQ== 114891 -IMKgIMKgIMKgIMKgIMKgIMKg 114892 -77qu 114893 -INin2YTZhdmF2YTZg9ip 114894 -c8SxbmRh 114895 -6LOA 114896 -5bGP 114897 -IOq/ 114898 -IGRva3Rvcg== 114899 -INmC2KfYqA== 114900 -IFNpc3Q= 114901 -INC80LXRgdGC0LU= 114902 -INGB0L7RhdGA0LA= 114903 -2KfYtNiq2Yc= 114904 -IOacnw== 114905 -INC/0L7RgdC60L7Qu9GM0LrRgw== 114906 -IHBldg== 114907 -2Kfar9ix 114908 -2YXYsg== 114909 -INi22YXZhg== 114910 -4KWp 114911 -Z2VzaQ== 114912 -YcSfYQ== 114913 -6Kej5Yaz 114914 -64W47Lac 114915 -IGx1eeG7h24= 114916 -INC60L7QvdGC0LDQug== 114917 -4Li6 114918 -IE5nw6B5 114919 -IHbDvXN0YXY= 114920 -IHRodXnhur90 114921 -2KfbjNi5 114922 -IDovOg== 114923 -IHBo4bqhdA== 114924 -IM6Rz4DPjA== 114925 -IG11eg== 114926 -IOyDiQ== 114927 -IMOHaW4= 114928 -INqp2KfYsdio2LHYrw== 114929 -2KfYptiv 114930 -2KjYp9iv 114931 -4KWN4KSk4KSu 114932 -IOuRmA== 114933 -INC80L7Qtw== 114934 -xaHDrWNo 114935 -IOC4oeC4qw== 114936 -INii2LM= 114937 -INGB0LvQuNGI0LrQvtC8 114938 -6IOh 114939 -6KOB 114940 -5oi7 114941 -IOyEpOuqhQ== 114942 -IG90b20= 114943 -IOCksuCkl+CkreCklw== 114944 -4LiH4LiB 114945 -2KfYqNiv 114946 -4LiZ4Liy4Lih 114947 -6IKp 114948 -INi02K/Zhtiv 114949 -44Gd44Gu5LuW 114950 -YWRsbw== 114951 -xJtu 114952 -INmE2YfYpw== 114953 -INC80LjQvdC40Lw= 114954 -IGTFmWV2 114955 -IFRoacOqbg== 114956 -656Z 114957 -ZW5naW4= 114958 -4KWA4KSu4KSk 114959 -INGD0L/QvtGC0YDQtdCx 114960 -4oCM2KrYsQ== 114961 -IOelnumprA== 114962 -b3bDoW7DrW0= 114963 -INC00LXQu9C+ 114964 -IOe8lg== 114965 -INin2YTYuA== 114966 -INCy0LjQuQ== 114967 -0LDRgtC+0Lw= 114968 -5YWs5ZGK 114969 -IMSRZW0= 114970 -44K344Oq44O844K6 114971 -5LiL55qE 114972 -bGFzxLE= 114973 -INCy0YvQsdC+0YA= 114974 -0YLQvtGC 114975 -64+E67OE 114976 -INGD0YHRgtCw0L0= 114977 -IO2eiA== 114978 -0LvRg9Cw0YLQsA== 114979 -IHRow6Fj 114980 -0LDQvdC40LXQvA== 114981 -0L7QstCw0YLRjNGB0Y8= 114982 -0YLRlA== 114983 -0K3RgtC+ 114984 -77yM6KaB 114985 -IFZ6 114986 -INit2YjYstmH 114987 -LdC6 114988 -VuG7m2k= 114989 -ZW50xa8= 114990 -IGJ1bHVuZHXEn3U= 114991 -2LHZiNi3 114992 -INGX0Lk= 114993 -IMOnZXZy 114994 -IMWZZWQ= 114995 -INiz2KfYrtiq2Yc= 114996 -5Yqe5rOV 114997 -INmC2YQ= 114998 -acWfaQ== 114999 -77yd77yd 115000 -2LPYp9iz 115001 -IMO6ZGFqxa8= 115002 -5aw= 115003 -5o2f 115004 -w6FjdA== 115005 -IM6Rz4A= 115006 -54i3 115007 -IMWZw6Fk 115008 -IGzhu5dp 115009 -b250ZW50 115010 -INmF2LA= 115011 -b2xvamk= 115012 -INm+2LHYr9in2K7Yqg== 115013 -4LmJ4Liy4Lie 115014 -INC00LXQudGB0YLQstC40Y8= 115015 -IG1ub8W+c3R2w60= 115016 -7JWI66eI 115017 -5YG2 115018 -IMOUbmc= 115019 -IGRha2lrYQ== 115020 -aGVuZGlz 115021 -IGLDoWM= 115022 -5a+2 115023 -4LmH4LiB4Lir4LiN 115024 -bm9jZW7DrQ== 115025 -IEVyZG/En2Fu 115026 -Ojo6Ojo6Ojo6Ojo6Og== 115027 -0LDRgtC10Lw= 115028 -ZMSxeg== 115029 -INij2YrYttin 115030 -INGN0YTRhNC10Lo= 115031 -44KM44Gm44GE44KL 115032 -IGJhxZ92dXJ1 115033 -zqzOvc61zrk= 115034 -IM+EzrXOu861z4XPhM6x 115035 -IOqygOyDiQ== 115036 -INqp2YbYqtix2YQ= 115037 -IOCktuCklQ== 115038 -5by5 115039 -IG9sbXXFn3R1cg== 115040 -INCy0YHRgtGD0L8= 115041 -0YfQuNC70LA= 115042 -4Lii4Liy 115043 -INij2K3Zhdiv 115044 -b3NsYXY= 115045 -INGH0LDRgdC+0LI= 115046 -IHrDoWtsYWRuw60= 115047 -IOCkuOCktQ== 115048 -0LTQvtC9 115049 -IMWZw61qbmE= 115050 -zrrOv8+F 115051 -6YCB5paZ54Sh5paZ 115052 -z4POr86xz4I= 115053 -44K044Oq 115054 -INCy0LjQsQ== 115055 -5b2S 115056 -INC90LDQt9Cw0LQ= 115057 -IOeZvuW6puaUtuW9lQ== 115058 -4buG 115059 -IGthbGTEsQ== 115060 -7Lyc 115061 -IO2PrQ== 115062 -INGH0LjQvdC+0Lw= 115063 -6Lk= 115064 -0Y/Quw== 115065 -INGA0LDQt9C00LXQuw== 115066 -ZEc= 115067 -IFRlbnRv 115068 -0Y/RgtGM0YHRjw== 115069 -6Z2i55qE 115070 -IM6Vz4DOuQ== 115071 -6rCR 115072 -IGvDqG0= 115073 -0L3QuNGG0Y8= 115074 -55ar 115075 -6ZuZ 115076 -INmF2LHZg9iy 115077 -INC90LDRg9C6 115078 -5aKX 115079 -INGC0LXQv9C10YA= 115080 -4KS+4KSg 115081 -4LmH4Lia4LmE4LiL4LiV 115082 -zrzOss+Bzq/Ov8+F 115083 -INGE0ZbQvdCw0L3RgdC+0LI= 115084 -0ZbRlNGO 115085 -z4HOr862 115086 -7KSE 115087 -INio2KfZhtqp 115088 -dHVs 115089 -bGnEn2luaQ== 115090 -INC/0L7Qt9Cy0L7Qu9GP0LXRgg== 115091 -z4POrw== 115092 -IOybgw== 115093 -4LmM4LiE 115094 -IHBvbG92 115095 -7J6l7J2E 115096 -aXN0w6k= 115097 -INCh0KHQodCg 115098 -w6FobA== 115099 -6KU= 115100 -INC60L7QvNC/0LvQtdC6 115101 -4LiC4LiZ4Liy4LiU 115102 -4Lix4Lio 115103 -zr3Osc69 115104 -IOelnumprOaUtuW9lQ== 115105 -7Iuc7Jik 115106 -IOmmlumhteesrA== 115107 -IOeZvuW6pua1gemHjw== 115108 -5ZGo5pS25b2V 115109 -IGhhdHRh 115110 -0JLRltC0 115111 -INCy0YvRgdGC0YPQvw== 115112 -2qnYp9ix24w= 115113 -S2hp 115114 -IOywvuyVhA== 115115 -IG7hurduZw== 115116 -6Yar 115117 -IFbFoQ== 115118 -INC/0LXRgNC10L0= 115119 -0LvQsNCy0LA= 115120 -2YrZhdmK 115121 -IHZhdGFuZGHFnw== 115122 -IM65z4PPhM6/ 115123 -IOC4kw== 115124 -4KS44KSy 115125 -0LPQtdC9 115126 -INio2YjYsQ== 115127 -4oCM2K/Zh9iv 115128 -bMSxa2zEsQ== 115129 -IHN0cmF0ZQ== 115130 -2KjZiNix 115131 -44CB44Ki 115132 -IHNvbnVj 115133 -INC90LDQuNCx0L7Qu9C10LU= 115134 -LdCy 115135 -INCy0L7QtNC+0Lk= 115136 -b2plbsOt 115137 -INi62LHYqA== 115138 -IGJlcmk= 115139 -YWTEmw== 115140 -IGRvdm9s 115141 -4oCM2qnZhtmG2K/ar9in2YY= 115142 -44GV44KJ 115143 -44Oz44K6 115144 -44Kr44Or 115145 -b21ldHI= 115146 -5YeA 115147 -INmB2YjZhA== 115148 -INmF2YjYs9uM 115149 -INin2YTZhdi62LHYqA== 115150 -ZWNrbw== 115151 -2YDZgNmA2YDZgNmA2YDZgA== 115152 -6rCA6rKp 115153 -0YDRg9GC 115154 -IOu2gOu2hA== 115155 -IHDFmWVkcGlz 115156 -IG9wcmF2ZHU= 115157 -0LXRgtC40Yc= 115158 -4LmC4LiE4Lij4LiH4LiB4Liy4Lij 115159 -5oWn 115160 -5ouc 115161 -2LPZgw== 115162 -7J6h64u0 115163 -4Lib4Lij4Liw4Lih4Liy4LiT 115164 -6LSo6YeP 115165 -INCz0L7Qu9C+0LLRgw== 115166 -0LvQtdC90LjRjg== 115167 -IOCkqOCkjw== 115168 -IHByb2pla3R1 115169 -2KfZgdix 115170 -YXRpdm7DrQ== 115171 -zq3Ovc+E 115172 -44OJ44Op 115173 -IHRlZGF2 115174 -6rw= 115175 -4Lib4Lij4Liw4LiB4Liy4Lio 115176 -IHR1dG8= 115177 -IGNoaeG6v3U= 115178 -IHZ5eg== 115179 -0YDQvtGI 115180 -5Y+W5b6X 115181 -INC80LjRgdGC 115182 -INGB0LvRg9GH0LDRj9GF 115183 -INi62LA= 115184 -INGD0LrQu9Cw0LQ= 115185 -INGD0YHRgtCw0L3QvtCy0LvQtdC9 115186 -IHRlc2xpbQ== 115187 -IOOAjQ== 115188 -IOij 115189 -5q+r 115190 -6YqA6KGM 115191 -ZWN0cw== 115192 -a2VtaXo= 115193 -zr3Ot8+C 115194 -6L66 115195 -INC/0YDQtdC8 115196 -IHNvbnVjdQ== 115197 -UG9rdWQ= 115198 -INCe0YHQvtCx 115199 -6L6b 115200 -6Ly4 115201 -67O06rOg 115202 -4Lia4LiE 115203 -44CC44CN 115204 -4KS+4KWkCgo= 115205 -INGB0LDQvNC+0YHRgtC+0Y/RgtC10LvRjA== 115206 -2YTbjNiq 115207 -zrvOtc66 115208 -INGA0LDQudC+0L3QsA== 115209 -0YzQuA== 115210 -4LmI4Liy4LiX 115211 -IOC4m+C4o+C4sOC5gOC4l+C4qA== 115212 -4Lih4Lit 115213 -2KfZh9ix 115214 -INCy0LjQsdC+0YA= 115215 -0Y7Rh9C40YHRjA== 115216 -IHBvdm9s 115217 -YWJhc2U= 115218 -4oCzTg== 115219 -2qnZiA== 115220 -INCj0LrRgNCw0ZfQvdCw 115221 -c3Rhbm92 115222 -INGD0YfQsNGB0YLQuA== 115223 -IGhsYWQ= 115224 -INGA0LDRgdGB0LrQsNC3 115225 -44G/44Gf44GE 115226 -4b2w 115227 -IOWbng== 115228 -IMawxqFuZw== 115229 -zrHPgc6s 115230 -2K7YqA== 115231 -5o2V 115232 -w63FmQ== 115233 -INiz24zZhg== 115234 -wqBpbg== 115235 -IE3Em3N0 115236 -5pWZ5a2m 115237 -INC+0YHQvtCx0LjRgdGC 115238 -dWpp 115239 -55S75YOP 115240 -INiv2KfZhti02YbYp9mF2Yc= 115241 -7J207JW8 115242 -INC30LDQv9C40YI= 115243 -INGB0LLQvtC40LzQuA== 115244 -27LbsNuy 115245 -77yM5bCG 115246 -44O844Gu 115247 -IHRow60= 115248 -INmF2KrZiNiz2Lc= 115249 -4KWHCg== 115250 -5aSa5bCR 115251 -77yM54S25ZCO 115252 -7ZeI 115253 -IOCkreCklw== 115254 -IOWPtw== 115255 -IHRlb3I= 115256 -5YKo 115257 -INGA0ZbRhw== 115258 -INGB0YLQsNGC0YLRlg== 115259 -INix2KfYqNi32Yc= 115260 -IO+8nA== 115261 -2KjYp9it 115262 -4Li04LiZ4LiX4Liy4LiH 115263 -4KWH4KSCCg== 115264 -2KfYptmC 115265 -INin2YTYrNiv2YrYrw== 115266 -bGnEjQ== 115267 -2KfYrdmE 115268 -bcOpbsSb 115269 -IGLhuqd1 115270 -INCS0LDQuw== 115271 -INCx0LvQsNCz0L7QtA== 115272 -0LXRgtC10LvRjA== 115273 -5bmz5Z2H 115274 -0LzQuNC9 115275 -IHPDvHJlYw== 115276 -INC30LDQstC+0LQ= 115277 -6I2Q 115278 -0YLQuNC5 115279 -0LvQvtCx 115280 -INCy0L7Qug== 115281 -bGFkxLHEn8Sx 115282 -2KfZitmK 115283 -6rKg7Iq164uI64uk 115284 -IGFtYWPEsXlsYQ== 115285 -77yM5Zug5Li6 115286 -44Gn44GC44Gj44Gf 115287 -INi02LHZiNi5 115288 -5p+U 115289 -J251bg== 115290 -0L7QutC+0Ls= 115291 -IGNpZGRp 115292 -IGLhu6U= 115293 -IHlhcMSxbGFjYWs= 115294 -INGH0YPQstGB0YLQsg== 115295 -7IKs7J2Y 115296 -4Lit4LiZ4LiU 115297 -zpfOpA== 115298 -IOuLpOyWkQ== 115299 -64uk66m0 115300 -aW1pemk= 115301 -5LmC 115302 -44Gy44Go 115303 -IOmdng== 115304 -4oCM2b7Yr9uM2Kc= 115305 -5LmY 115306 -44OK44Or 115307 -INC/0ZbQtNC/0YDQuNGU0LzRgdGC0LLQsA== 115308 -4LmR 115309 -6L+d 115310 -INmF2YbZhw== 115311 -0YDQuNC6 115312 -0LDRgNGW0LI= 115313 -INC60L7Qs9C+ 115314 -INmC2LU= 115315 -IOadpQ== 115316 -IFBow7JuZw== 115317 -INC+0LLQvg== 115318 -INC/0LXRgNC10LLQsA== 115319 -6aOy 115320 -4KSC4KSf4KSw 115321 -2YrYsdin 115322 -aWxkacSfaQ== 115323 -ZXRpbg== 115324 -z4fOtc6vzrE= 115325 -IHphaHJhbmk= 115326 -2YjYrNiv 115327 -IOev 115328 -4Liy4Lij4Lii 115329 -INC30LDQutC+ 115330 -INiq2YLYsw== 115331 -44K544K/44O8 115332 -5p2w 115333 -IOOCsA== 115334 -IOm7hA== 115335 -INCa0L7Qs9C00LA= 115336 -4KWr 115337 -IOasoQ== 115338 -INCy0YvRgNCw0LY= 115339 -IGNoxINt 115340 -0LvRj9GU0YLRjNGB0Y8= 115341 -2K/Zh9mF 115342 -IHZyY2g= 115343 -57qM 115344 -0L/QvtGA 115345 -IG1hxJ8= 115346 -5b6S5q2p 115347 -cG9kb2I= 115348 -4Liw4LmB 115349 -6YG45omL 115350 -5biv 115351 -IHNlYm91 115352 -aW5pemU= 115353 -INCc0LDQug== 115354 -IOaZrg== 115355 -IM+Fz4DOrM+Bz4c= 115356 -IMSQw6A= 115357 -IEJybm8= 115358 -IMWhw60= 115359 -2KfZhNi1 115360 -IG5naGnDqm0= 115361 -IG9ubGFyxLE= 115362 -IHXFvsOt 115363 -6Ieq5YiG44Gu 115364 -INC90LDRhdC+0LTQuNGC0YHRjw== 115365 -IGpzaQ== 115366 -IOCkuOCkruCksA== 115367 -IM+Gz4k= 115368 -27Hbudu4 115369 -IOCknOCkl+CkuQ== 115370 -6a2a 115371 -7J246rCA 115372 -xJBp4buBdQ== 115373 -INij2LnZhNin2YU= 115374 -4KWH4KSC4KWkCg== 115375 -5b2i5oiQ 115376 -IGlrdA== 115377 -IHpkcm9q 115378 -IEFtZXJpaw== 115379 -zqHOkw== 115380 -4LiH4Liq 115381 -IO2SgA== 115382 -0YHQvtC70Y7Rgg== 115383 -2YjZitiq 115384 -IGfDtnLDvG50w7w= 115385 -0LDQvdC90YvRhQ== 115386 -INij2YI= 115387 -INC80LjRgA== 115388 -5auM 115389 -IG3hu5Fp 115390 -IGRlcmlu 115391 -6ZKI 115392 -INC80LDRiNC4 115393 -7Lih 115394 -INis2YbZiNio 115395 -INGB0LvQvg== 115396 -44CC5LiA 115397 -0LXQvdC40Y/RhQ== 115398 -INGH0L7Qu9C+0LLRltC6 115399 -IHlhbmE= 115400 -INC+0LrRgg== 115401 -INC90LXRgA== 115402 -5oi2 115403 -0L3RjNC+0LzRgw== 115404 -INGW0LzQtdC9 115405 -44KP44Gf44GX 115406 -IM6TzrnOsQ== 115407 -44CB56eB 115408 -IGtvdQ== 115409 -INGG0LXRgNC6 115410 -bGF5YXJhaw== 115411 -44CH 115412 -2KfZhNiz 115413 -wqBU 115414 -INC00YDRg9C2 115415 -INC00LLQvtGA 115416 -zrvOrw== 115417 -IOuGgA== 115418 -IHRlcGxvdA== 115419 -2YHYp9iq 115420 -0LHRlg== 115421 -IGfDvHZlbmxpaw== 115422 -bsSbbg== 115423 -6Kmp 115424 -IGluc2FubGFyxLFu 115425 -IOyEpOy5mA== 115426 -6JOd 115427 -YXZhdGVs 115428 -amV2 115429 -INqG2LHYpw== 115430 -IGdlcmVraXlvcg== 115431 -44OD44Kw 115432 -IMOHb2s= 115433 -INmI2KzZhw== 115434 -INGD0LvQuA== 115435 -wpE= 115436 -5ZGA 115437 -INC+0YDQs9Cw0L3QuNC30LDRhtC40Lg= 115438 -INGW0YHQvdGD 115439 -IG5lYnVkZQ== 115440 -IOuwpA== 115441 -5LiK44GM 115442 -IOCkp+CkqA== 115443 -INix2YjYp9io2Lc= 115444 -zrPOs861zrs= 115445 -INC00L7RgdGP0LM= 115446 -INin2YTZgtiv2YU= 115447 -INC30L3QsNGF0L7QtA== 115448 -IMSNw61zbG8= 115449 -xZ9r 115450 -INin2YTYr9mK2YY= 115451 -IGfDvG5sw7xr 115452 -2YPZitmK2YE= 115453 -zq3Pgc6x 115454 -4LiV4Lij4Lin 115455 -INC90LDQu9C40YfQuA== 115456 -2KfZhduM2YY= 115457 -IM68zrnOug== 115458 -IGTDtm5lbWRl 115459 -4LmI4LiX 115460 -5oOR 115461 -4KWL4KSCLA== 115462 -0YfRjw== 115463 -44G+44KL 115464 -INin2YTYqtmG 115465 -0YDQsNCz 115466 -65Ok6rO8 115467 -rZQ= 115468 -INmF2YbZh9in 115469 -IFRo4bq/ 115470 -6ZC1 115471 -IO++hA== 115472 -INin2YTYpdiz2YTYp9mF 115473 -44Km44K5 115474 -2YrYr9mK 115475 -IOW+lw== 115476 -INC30LDRgNCw0Lc= 115477 -44K444Ol 115478 -INiq2LnYrw== 115479 -acOt 115480 -IMOnb2N1 115481 -b3ppY2k= 115482 -IOuylA== 115483 -INii2YXYr9mH 115484 -0YTQuNC6 115485 -INC/0L7RgdGC0LDQvdC+0LI= 115486 -IGtyw6Fsb3Y= 115487 -wqjCqA== 115488 -IOykkeyalA== 115489 -IEdXZWk= 115490 -IHbDvXZvag== 115491 -IGJveXV0 115492 -IG5law== 115493 -2KfZh9in24w= 115494 -IHN0cmFuxJs= 115495 -0LjQtdC8 115496 -INC/0L7RgNCw0LY= 115497 -4KWN4KSw4KSm4KSw 115498 -6aGU44KS 115499 -IFnDvHo= 115500 -INC+0LfQvdCw0YfQsA== 115501 -4LmB4Lil4LiZ4LiU 115502 -INio2YfYsdmH 115503 -0LXQvdGC0YM= 115504 -INCd0LDQtA== 115505 -INCf0L7Qu9GM 115506 -44OX44Oq 115507 -4b+2 115508 -4oCM2b7Yr9uM2KfbjA== 115509 -INm+2KfZiNix2b7ZiNuM2YbYqg== 115510 -4Li04LiB4Liy 115511 -IM61zr3Pjg== 115512 -INiz2KfbjNix 115513 -6YG6 115514 -44CB5LuK 115515 -IEzDqg== 115516 -5LqL5oOF 115517 -IFllcg== 115518 -6IWw 115519 -INin2YTYsdiz2YU= 115520 -INin2YTZhdmI2YLYuQ== 115521 -IGjDoG0= 115522 -INC00YDQtdCy 115523 -w6F0ZWw= 115524 -INCy0YHRkQ== 115525 -7Jil 115526 -IE1lYw== 115527 -44Kb 115528 -INi12KfYrw== 115529 -INqv2LHYr9iv 115530 -IGtyw6Fz 115531 -6IyD5Zu0 115532 -YWxhcsSxbmE= 115533 -6Jma 115534 -INii2YjYsdiv 115535 -57yT 115536 -4Li04Lie 115537 -IOODiw== 115538 -IOaApw== 115539 -INmF2YbYsA== 115540 -57e0 115541 -IOq2gQ== 115542 -0LLQsNC10Lw= 115543 -IM62z4k= 115544 -IG5hdnI= 115545 -z4PPhM6xz4POtw== 115546 -INix2KM= 115547 -IGRvcGw= 115548 -77y/77y/77y/ 115549 -55Sa6Iez 115550 -xI1lbA== 115551 -5oSP5ZGz 115552 -56Wt 115553 -w5g= 115554 -0YHRgtCy0LXQvdC90YvQtQ== 115555 -6KOh 115556 -IOOAiQ== 115557 -IOOAgCDjgIAg44CAIOOAgCDjgIAg44CAIOOAgA== 115558 -INCy0LDQuw== 115559 -IOG6qW0= 115560 -IGRpeW9y 115561 -4Lit4LiH4LiI4Liy4LiB 115562 -IFBow7M= 115563 -INCT0LU= 115564 -INCy0LXRgNC10YE= 115565 -IGtvbno= 115566 -2LHYsg== 115567 -INGB0L7QsdC+0Y4= 115568 -IM61zrrOtc6v 115569 -7JiB7Ja0 115570 -aWFn 115571 -INGB0LXQvdGC 115572 -IG7huqV1 115573 -IGpha8Op 115574 -IHJvemg= 115575 -INCx0L7Qsw== 115576 -2YbYp9iv 115577 -INin2YXZiNix 115578 -4LmM4LiB4Liy4Lij 115579 -IFlhxZ8= 115580 -6Yg= 115581 -5ZWq 115582 -IG9uYXk= 115583 -7JeH 115584 -b211 115585 -0YbRltC50L3QvtCz0L4= 115586 -INGB0LDQuw== 115587 -IM6jz4XOvQ== 115588 -IHNhdnVu 115589 -5aaZ 115590 -4LiI4Liw4Lih 115591 -44K544Kv 115592 -IGRvc3k= 115593 -nJg= 115594 -66i5 115595 -IG1pbnVs 115596 -44CLCg== 115597 -5YGP 115598 -INCa0LDRgg== 115599 -IGVkaWxtZXNp 115600 -0YbRltGU0L0= 115601 -7ISx7J20 115602 -5ZaU 115603 -INCy0ZbRgA== 115604 -6K+R 115605 -4KS+4KSH4KSh 115606 -INmI2YLYqtuM 115607 -xJDhu4M= 115608 -IHZ5xaHFocOt 115609 -xI1pbGE= 115610 -0LDQtNGD 115611 -54m55Yil 115612 -IOyduOq4sA== 115613 -dWrDrWPDrWNo 115614 -IFBvZGxl 115615 -IHlhdmHFnw== 115616 -meaxnw== 115617 -IGtheWI= 115618 -5Yqq 115619 -57S5 115620 -INC+0LHRgNCw0LHQvtGC 115621 -INC80LDRjw== 115622 -IOWPig== 115623 -5o6l5Y+X 115624 -2YbYqtuM 115625 -IM+Hz44= 115626 -0YLRgNC+ 115627 -IHV5YXI= 115628 -INi52YXZhNqp2LHYrw== 115629 -INC+0YbQtdC9 115630 -INC80LXRgdGC0LA= 115631 -4LiV4Lil4Liy4LiU 115632 -2YXZgg== 115633 -aWxkcmVu 115634 -INC30LDQstC40YHQuNGC 115635 -wqAgwqA= 115636 -IG1vxb5uw6E= 115637 -5pit5ZKM 115638 -xLFya2Vu 115639 -0LrQuNC9 115640 -5Z2C 115641 -z4TPg865 115642 -INGH0YPQtA== 115643 -0JrQvtC9 115644 -aXNsYXY= 115645 -INCa0YDQsNGB 115646 -TmVq 115647 -wqBi 115648 -cm9m 115649 -IGlsZXJp 115650 -INCe0YA= 115651 -IENo4buJ 115652 -IG7DvGZ1cw== 115653 -INGW0L3Rgg== 115654 -IeKAnA== 115655 -IOCkqOCksA== 115656 -5Li75LmJ 115657 -INiq2YbYuA== 115658 -xa92b2R1 115659 -INCz0L7RgNC+0LTQsA== 115660 -IGt1cmFs 115661 -IGplZGlu 115662 -0YDQsNGC0LXQsw== 115663 -5YC6 115664 -IHpwxa9zb2JlbQ== 115665 -7J247J2Y 115666 -INmG2Kg= 115667 -IE5nYQ== 115668 -INCd0LDQuQ== 115669 -INin2YHYstin2LE= 115670 -0L3Rg9Cy0YHRjw== 115671 -INC00LLQvtGF 115672 -IHJvenA= 115673 -zrXOr86/z4U= 115674 -IM6/zrnOus6/ 115675 -IEdlw6c= 115676 -wpc= 115677 -IGNoaeG6v20= 115678 -INGA0LDRgdC/0YDQvtGB0YLRgNCw0L0= 115679 -IGjGsMahbmc= 115680 -6Ieq5YuV 115681 -INmF2YjZgdmC 115682 -5oyl 115683 -77yB4oCdCgo= 115684 -z4HOv8+Gzr/PgQ== 115685 -6I+M 115686 -44O044Kh 115687 -5qyn576O 115688 -INGC0LXQv9C70L4= 115689 -44GC44GC 115690 -44Km44Oz 115691 -IMWfZXlp 115692 -IHPDvHQ= 115693 -44G544Gm 115694 -44Oz44OR 115695 -zrzOrc69z4nOvQ== 115696 -IGdlbmVsbGlrbGU= 115697 -INiv2LHZhdin2YY= 115698 -2ao= 115699 -IGFrxLFs 115700 -INCc0Ys= 115701 -IGV0bWnFnw== 115702 -xaFsYQ== 115703 -INCy0L7Qt9C80L7QttC90L7RgdGC0Yw= 115704 -IGfDvG5jZWw= 115705 -IG7DoXJv 115706 -5b2i5byP 115707 -IM6xz4DOv8+EzrU= 115708 -INC80ZbRgdGG0Y8= 115709 -INix2LY= 115710 -5LiN55+l6YGT 115711 -cmF2YQ== 115712 -IM6azqw= 115713 -4Li04LiZ4LiX4Lij 115714 -INC70LjRgdGC0Yw= 115715 -6Iac 115716 -44Gr44Gq44KK 115717 -IOadvg== 115718 -5a6P 115719 -INC80LjRgQ== 115720 -w6F0bsOt 115721 -IHnEsWxsxLFr 115722 -IE1lcmtlemk= 115723 -IGnDp2VyaQ== 115724 -xZnDrcW+ 115725 -IHDFmWU= 115726 -z4fPgc65 115727 -IOWNgw== 115728 -IHNycA== 115729 -4LmC4LiX4Lij 115730 -IEtyw6Fs 115731 -Ls6j 115732 -w6F2YWw= 115733 -bMOpZA== 115734 -IM67zrE= 115735 -4Li14Lii4Lin4LiB 115736 -44GP44Gq 115737 -IHbFoWljaG5p 115738 -INC/0YDQtdC00L7RgdGC0LDQsg== 115739 -7L8= 115740 -IOq1rOq4gOyDgeychA== 115741 -IOCkieCkquCksuCkrA== 115742 -0LLQvtC3 115743 -IOuFhOuPhOuzhA== 115744 -772kXw== 115745 -4Lia4Lij4Lij 115746 -INGB0LLRltGC0YM= 115747 -INGA0YPQsdC70LXQuQ== 115748 -bGVubWU= 115749 -bMOtxI0= 115750 -z4TOtc65 115751 -IOWPpA== 115752 -IE9icsOhemt5 115753 -IOyYge2WpQ== 115754 -INCz0YDQsNC20LTQsNC9 115755 -7YK5 115756 -IHNhaGlwdGly 115757 -INC/0L7Rh9Cw0YLQutGD 115758 -INij2YrYtg== 115759 -INGC0L7RgNCz0L7Qsg== 115760 -IGdlbGVjZWs= 115761 -IOusuO2ZlA== 115762 -aWtsZXJp 115763 -INC90LXQvtCx0YXRltC00L3Qvg== 115764 -IOS6kQ== 115765 -b3ZvbA== 115766 -IOCkpuCksg== 115767 -IOyViuqzoA== 115768 -INC80LM= 115769 -IHpqaXN0 115770 -YW5sxLE= 115771 -4Lix4LiH4LiZ 115772 -0YDQsNGF0L7Qsg== 115773 -zrnOvc63 115774 -INC/0LvQvtGC 115775 -IG5pdGVs 115776 -7Iqk7YGs 115777 -IFNvbnJh 115778 -INGB0LHQvtGA 115779 -IM+Dzr/PhQ== 115780 -IG9sbWFt 115781 -IGFuYWxpeg== 115782 -4LmM4Lin 115783 -IG3hu7k= 115784 -Y2VhZQ== 115785 -INC00LXQvQ== 115786 -0LLQtdGA0LbQtA== 115787 -4bqi 115788 -44GT44Go44KC 115789 -7IKs7ZWt 115790 -6KiA44Gj44Gf 115791 -IOy5tOyngOuFuA== 115792 -0YDQuNGC0Lg= 115793 -IGNoY2U= 115794 -IMOnZXZpcg== 115795 -24zbjNmG 115796 -5Lya6K6u 115797 -4Lix4Lih4Lie 115798 -IOWE 115799 -INm+2K/YsQ== 115800 -5byP5Lya56S+ 115801 -INGG0LXQvQ== 115802 -4Li04LiW 115803 -IGppbmFr 115804 -INCx0LvRjg== 115805 -0LjRhtC40L0= 115806 -2ZLZhw== 115807 -2qnZiNix 115808 -IOyVhQ== 115809 -ZWtzaXlvbg== 115810 -INGB0LLQtdGA 115811 -INC+0LHRgNCw0LfQvtCy0LDQvdC40Y8= 115812 -IOODmQ== 115813 -5pyJ5Lq6 115814 -IGJpbGdpbGVyaQ== 115815 -IGjhuqd1 115816 -0LXRgNGW0LM= 115817 -IHZhxaFl 115818 -IG5lZGly 115819 -5LiN5b6X 115820 -IGJhxZ9hcsSxbMSx 115821 -IGtheWJldA== 115822 -5am3 115823 -INCd0LDQsg== 115824 -IOq0gO2VnA== 115825 -0YHRgtGO 115826 -5a6e6ZmF 115827 -a2xhZHk= 115828 -0LTQsNGC0Yw= 115829 -cmHDpw== 115830 -IGt1dnZldA== 115831 -4LiB4Liy4Lij4LiX 115832 -5Zo= 115833 -INGA0LXQvw== 115834 -IOC4nQ== 115835 -IERpxJ9lcg== 115836 -7ZSE7Yq4 115837 -IG5lanbEm3TFocOt 115838 -IOyggeyaqQ== 115839 -IG9uZW1vY27Em27DrQ== 115840 -0LDQutCw 115841 -0KDQsNC3 115842 -INmB2KXZhg== 115843 -44K144Kk44K6 115844 -IHZsw6Fk 115845 -IHJhZHk= 115846 -44CB44GT44KM 115847 -0YHRgtCy0LjQtQ== 115848 -bMSxxJ9h 115849 -5a2U 115850 -IMOhbw== 115851 -4Lit4Liy4LiB4Liy4Lio 115852 -IOCkj+Ckrg== 115853 -zrTOsc+C 115854 -INCw0L/RgA== 115855 -5o6b 115856 -IOeriw== 115857 -4paP4paP 115858 -INCh0Lw= 115859 -IG5lbcOh 115860 -IOii 115861 -zr3Ov868zrE= 115862 -INmB2LHZiNiv 115863 -IMO8bGtl 115864 -IOaYnw== 115865 -4Lix4LiZ4LiB 115866 -44GV44KT44Gu 115867 -ZcWfaWw= 115868 -xJ9peg== 115869 -INCR0L7RgA== 115870 -IHThuqdt 115871 -zrXOuc+Ezr/Phc+BzrM= 115872 -IM6zz4HOsQ== 115873 -4KWN4KS34KSV 115874 -IHbhurs= 115875 -IGtlbmRpc2luZQ== 115876 -IOyVjOqzoA== 115877 -IOq1reygnA== 115878 -IG7Em2tkbw== 115879 -INuM2Yc= 115880 -INqp2KfYsdio2LE= 115881 -44OZ44Or 115882 -77u0 115883 -IHR1ecOqbg== 115884 -IMOnYXQ= 115885 -4oCQ4oCQ 115886 -wo8= 115887 -IOyCrOyXhQ== 115888 -6YaS 115889 -5o+Q6auY 115890 -5reh 115891 -IMSf 115892 -6Jam 115893 -44CL77yI 115894 -5qGD 115895 -7JeE 115896 -IOaelw== 115897 -xII= 115898 -IMSMZWNo 115899 -zrHOuc6/ 115900 -INi32LHZitmC 115901 -INC30LDQstC10YDRiA== 115902 -2KrZiNio2LE= 115903 -INit2Kw= 115904 -IM6tz4fOv8+Fzr0= 115905 -wr/Dgg== 115906 -IGTEm3TDrQ== 115907 -IGnDp2luZQ== 115908 -IENow7ph 115909 -0LDQvdC90YvQuQ== 115910 -INmI24zamA== 115911 -IG5hc3Rhdg== 115912 -xLFzxLFuYQ== 115913 -INGX0Lw= 115914 -0L/QvtC9 115915 -0LXQvdGP 115916 -INmI2Lg= 115917 -2q/ZhA== 115918 -4Lir4Lil4Lin4LiH 115919 -IHphc3Rhdg== 115920 -0LDQutC+0L0= 115921 -wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA== 115922 -IEvEsXI= 115923 -57W2 115924 -INC+0YDQs9Cw0L3RltC30LDRhtGW0Zc= 115925 -44Gf44KK 115926 -2LDZig== 115927 -IOCksOCklQ== 115928 -YW1waXlvbg== 115929 -IOa4hQ== 115930 -55y8552b 115931 -IOyViuydgA== 115932 -6bm/ 115933 -IOW/gw== 115934 -INC/0YDQtdC60YDQsNGB 115935 -INGB0LXQs9C+0LTQvdGP 115936 -IOCkuOCksg== 115937 -IM+Fz4DPjA== 115938 -INCV0LPQvg== 115939 -INCb0Lg= 115940 -44Ko44Or 115941 -INC70Y7Rgg== 115942 -6aWw 115943 -IHZ6ZMOhbA== 115944 -wq/Dgg== 115945 -INC90LDRj9Cy 115946 -INiq2LTaqduM2YQ= 115947 -INiz2YjbjA== 115948 -IHTDoWk= 115949 -IGthcMSx 115950 -IHN2xJt0xJs= 115951 -zrTPjM69 115952 -5ryi 115953 -7I2o 115954 -IGJhxZ92dXI= 115955 -0YDQuNC90LA= 115956 -IGtlbGlt 115957 -0LDRgtC+0Lo= 115958 -IM66zqzOuM61 115959 -IFnDvGtzZWs= 115960 -4LmH4LiZ4Lic 115961 -6aCC 115962 -5ZCM5pmC 115963 -xZ90xLFy 115964 -4Lin4LiH4Lio 115965 -b3R5 115966 -INin2LHYrw== 115967 -IOyekOyLoOydmA== 115968 -INGP0L3QstCw 115969 -w7x5b3JkdQ== 115970 -5p2o 115971 -IOKAkwo= 115972 -77yM5a6D 115973 -0LXQudC9 115974 -INC/0LXRgNC10YI= 115975 -IGRlxJ9pxZ9pa2xpaw== 115976 -INC+0LPRgNCw0L3QuNGH 115977 -7ISc7Jq4 115978 -IGdlbGl5b3I= 115979 -INm+2LDbjNix 115980 -5ZOy 115981 -ZXlpbg== 115982 -IOuPiA== 115983 -IHVuaXZlcno= 115984 -IGhuZWQ= 115985 -IHThuq1u 115986 -dm/FmcOt 115987 -IG5pw6pu 115988 -ZMSbcG9kb2I= 115989 -7IKs7ZqM 115990 -44GM44GC44KK 115991 -INGB0ZbRhw== 115992 -Jyci 115993 -IHRvcGxhbnTEsQ== 115994 -INGB0YfQtdGC 115995 -5YeG5aSH 115996 -0LDQvdGW0Y8= 115997 -IHplbA== 115998 -dmFsYQ== 115999 -INCw0L/Qvw== 116000 -INin2YTZhdmE2YM= 116001 -IGhvxZ8= 116002 -INCT0LXQvQ== 116003 -0YLQsNCx 116004 -IMSMZXNrbw== 116005 -INC80LDQudC20LU= 116006 -IG3Em3N0bw== 116007 -eW9uZWw= 116008 -6rGw66as 116009 -IOyYqOudvOyduA== 116010 -57Sv 116011 -IGRlcmVj 116012 -INC+0LrRgNGD0LY= 116013 -IHlhYmFuY8Sx 116014 -IO2EsA== 116015 -IOi1hA== 116016 -zpnOms6X 116017 -INC/0Ys= 116018 -IHbEm24= 116019 -0LjQvdC60Lg= 116020 -4bulcA== 116021 -5py65qKw 116022 -IOyVjOugpA== 116023 -64WV 116024 -IM67z4zOsw== 116025 -ZXlu 116026 -IOuQmOyXiOuLpA== 116027 -5rGh 116028 -IHZlZGxl 116029 -INmD2KrYqA== 116030 -66eo 116031 -INmF2YLYp9mI 116032 -5bm044Gr 116033 -4KS+4KSH4KSV 116034 -INGB0YLQvtGB 116035 -IM+Dz4TOv8+Fz4I= 116036 -0LzQtdGC0Yw= 116037 -IGVzYXM= 116038 -65CY6rOg 116039 -IGt2xJt0bmE= 116040 -IOmc 116041 -ZMO8aw== 116042 -5Z+3 116043 -6KqM 116044 -IG1sdXY= 116045 -INC/0YDQuNC90Y8= 116046 -IHBvdMOp 116047 -INqp2YbZhQ== 116048 -INC/0YDQtdC00LvQvtC2 116049 -INCc0L7RgdC60LLQsA== 116050 -77yM5aaC 116051 -IHN2w6lt 116052 -INin2YXZhg== 116053 -4Liq4Liy4Lii 116054 -INGD0LzQtdC90Yw= 116055 -IOOBk+OBrg== 116056 -5YmC 116057 -INGB0LXRgNGM 116058 -IG3hu4c= 116059 -IOS5nQ== 116060 -INC30LDQutGW0L0= 116061 -INCy0LXQu9C40Yc= 116062 -INC60L7QvdGC0YDQsA== 116063 -IFNvc3lhbA== 116064 -IHl1a2FyxLE= 116065 -INiv2YjYqA== 116066 -5L6n 116067 -INC30LDQvNC10L0= 116068 -77uu 116069 -IHNvYsSb 116070 -INCi0LDQutC20LU= 116071 -0I4= 116072 -zrXOtA== 116073 -2YXYp9ix24w= 116074 -zr7OuQ== 116075 -7Lmt 116076 -INC/0LvQsNGB0YLQuA== 116077 -z4POv8+Fzr0= 116078 -6JyY6Jub6K+N 116079 -2YjbjNiy24w= 116080 -IG5hcMWZ 116081 -INGC0LjQv9Cw 116082 -4KWC4KSb 116083 -IMWfYWg= 116084 -0LvRj9GC0Lg= 116085 -2KjbjNix 116086 -4Lij4Liw4Lii4Liw 116087 -INCx0L7Qu9GM0YjQuNC9 116088 -z4TOt8+EzrE= 116089 -IO2PieqwgA== 116090 -IHByb2pldg== 116091 -w7Jp 116092 -INC60L3Rjw== 116093 -z4bOtc+B 116094 -0LXRgNGD 116095 -0Y3QvQ== 116096 -INi52YXZhNuM 116097 -4KSg4KSo 116098 -44Oz44Kv 116099 -IOyVhOuemA== 116100 -zog= 116101 -INio2KfYs9iq 116102 -INiq2YM= 116103 -YcSNbsOt 116104 -INC70ZbQutGD0LLQsNC90L3Rjw== 116105 -4LiE4LmC4LiZ 116106 -IOiDvQ== 116107 -zrjOu863 116108 -bGVubWnFnw== 116109 -IGzhu5k= 116110 -IHNpbGFo 116111 -IEF1c3Ry 116112 -2K3Zgg== 116113 -LioqKi4qKio= 116114 -7Kk= 116115 -IGfDoA== 116116 -INio2KfYstio24zZhtuM 116117 -IMSRw6Bu 116118 -w61reQ== 116119 -IM6Vzr0= 116120 -2LbZhQ== 116121 -5aeT 116122 -INmG2YjbjNiz 116123 -IHNrdXBpbnk= 116124 -INiz24zYrw== 116125 -IGFsZMSxxJ/EsQ== 116126 -bWVsaQ== 116127 -0LLQuNC2 116128 -7LmY64qU 116129 -0L7QstCw0YU= 116130 -IOap 116131 -2LTZhtin2LPbjA== 116132 -IG5pbWk= 116133 -INCT0YDQuA== 116134 -7ZeM 116135 -INC60LI= 116136 -6Z+T 116137 -IO2bhOq4sA== 116138 -IHN0xZnDrQ== 116139 -INC60ZbQu9GM0LrRltGB0YLRjA== 116140 -IEJha2FubMSxxJ/EsQ== 116141 -INC80LXQvdGM0YjQtQ== 116142 -2KfZiNuM 116143 -INin2LHZiNm+ 116144 -IOiJsg== 116145 -INqp2Yjahtqp 116146 -IEF5bsSx 116147 -IOS6hg== 116148 -INiz2YHYsQ== 116149 -INGC0LXQsNGC 116150 -IHbEm2Q= 116151 -0LDRgNC+0LI= 116152 -INC+0LHQvNC10LY= 116153 -IOyViuyVmA== 116154 -6L+95Yqg 116155 -6aCI 116156 -ZMSbbGVuw60= 116157 -IGtpbXM= 116158 -IOiPsg== 116159 -INCz0YDRg9C9 116160 -INii2YTZhdin2YY= 116161 -INCw0LLQsw== 116162 -INGJ0L7RgdGM 116163 -IOW+tw== 116164 -INCd0LDRhtGW0L7QvdCw0LvRjA== 116165 -5oiQ56uL 116166 -4Li54LiZ4Lii 116167 -44O844Or44OJ 116168 -6Zuy 116169 -IFThu5U= 116170 -Y8SxbMSxaw== 116171 -IEFsbWFueWE= 116172 -IG92xaFlbQ== 116173 -wos= 116174 -IM+Hz4HOt8+DzrnOvM6/z4DOv865 116175 -IMO2cmfDvHQ= 116176 -4KS/4KS44KS4 116177 -6Jed 116178 -IEdp4bqjaQ== 116179 -IHN2b2I= 116180 -IHLFr3puw71jaA== 116181 -IHNtbG91dnk= 116182 -0YDQtdGB0YE= 116183 -4Li14LmA4LiU 116184 -INin2YXYsdmI2LI= 116185 -44KF 116186 -5Z2m 116187 -4LmJ4LiE 116188 -INC60LDQtg== 116189 -5byX 116190 -0YfQvdC+0Zc= 116191 -5ZyI 116192 -INii2YfZhtqv 116193 -66qw 116194 -IOa6 116195 -IOiE 116196 -5LiA5q2l 116197 -0L7Rh9C60LA= 116198 -IHByb3N0b3I= 116199 -IG5n4bqvbg== 116200 -IOe3 116201 -0L3QsNGA 116202 -IOCknOCktQ== 116203 -INC90LDRh9Cw0LvRjA== 116204 -INC90LXQtNC10Ls= 116205 -INGB0LjRgdGC0LXQvNGD 116206 -2KzZig== 116207 -2KfYr9in2Ko= 116208 -IOai 116209 -INis2KfZhdi52Kk= 116210 -IOS7jg== 116211 -IOCkheCkqw== 116212 -6JaE 116213 -INio2KfZgg== 116214 -2KjZiti5 116215 -44GV44KM44Gm 116216 -IMOHYWzEscWf 116217 -2K7ZiNin2LPYqg== 116218 -44OD44K344Ol 116219 -INit2LPbjNmG 116220 -INC+0LHQvdCw0YDRg9C2 116221 -0LLRltC00L7QvA== 116222 -IGjDtG0= 116223 -0LvQsNC90LQ= 116224 -IOCkteCknOCkuQ== 116225 -2LPZitmG 116226 -5qCP 116227 -IG5hdsOtYw== 116228 -44K144Kk44OI 116229 -INGP0LrQvtC80YM= 116230 -IO2b 116231 -IFlhbmk= 116232 -44KT44Gn44GZ 116233 -INCz0YDRg9C/ 116234 -xI1uw70= 116235 -0YbQuNC6 116236 -2YjZitix 116237 -IFjDow== 116238 -IGZ5eg== 116239 -IO+9iQ== 116240 -4oCM2KrYsduM2YY= 116241 -4KSf4KSV 116242 -0YTQvtGA0LzQuA== 116243 -IE95dW4= 116244 -5aC05omA 116245 -2K3Yqw== 116246 -IOyVjOyVhA== 116247 -0YDQsNCy0LjQu9GM 116248 -77yM4oCd 116249 -Ym9ydQ== 116250 -IEt1bGxhbg== 116251 -IEtheW5haw== 116252 -IOqwlg== 116253 -57SU 116254 -77yM5q+P 116255 -zpfOoQ== 116256 -IHDFr2w= 116257 -INCz0L7RgdGC 116258 -2LHZiNmF 116259 -77yM5Y2z 116260 -27Lbsw== 116261 -INmG2K7Ys9iq 116262 -INqp2LPYqA== 116263 -IOC5gOC4mg== 116264 -IHlhemFy 116265 -amVrdA== 116266 -4LmC4Lil4Lii 116267 -INC00L7QsdGA0LU= 116268 -INm+2LLYtNqp24w= 116269 -INiq2YfbjNmH 116270 -576O5ZyL 116271 -0L3QvtGB0Y/Rgg== 116272 -66CI7Iqk 116273 -5Zev 116274 -IHLDoG5n 116275 -IM6Vzr4= 116276 -0LDRgtCw0YA= 116277 -a292YQ== 116278 -IMWfZXlsZXI= 116279 -2K7Yp9i1 116280 -IOyViOyghA== 116281 -0YnQtdC5 116282 -IOuwnQ== 116283 -4oCM2KrZiNin2YbYrw== 116284 -44GI44Gw 116285 -IHbhu68= 116286 -INGB0LDQvNCw 116287 -INC+0LHQvtGA0YPQtA== 116288 -4oCM2KjYp9i02K8= 116289 -4LmM4Lit 116290 -IGRldGF5 116291 -5oKy 116292 -wog= 116293 -44Km44Kj 116294 -INC/0YDQsNCy0LjQu9Cw 116295 -a3LDqXQ= 116296 -4LmM4Lij 116297 -5Yy5 116298 -IOWFjQ== 116299 -INGB0LjQu9GM0L3Qvg== 116300 -INC40YHRgtC+0Yc= 116301 -IHNhxJ9sYXI= 116302 -IOatpg== 116303 -7ZaI7Iq164uI64uk 116304 -S2jDtG5n 116305 -4LmI4Liy4LiH4LmG 116306 -27DbsNuw 116307 -INix2YI= 116308 -4oCZ0Y/Rgg== 116309 -5Zuy 116310 -4LmB4LiU4LiH 116311 -IMW+w6FkbsOp 116312 -Y291eg== 116313 -w4s= 116314 -INC/0ZbQtNCz0L7RgtC+0LI= 116315 -IOuMgO2VmQ== 116316 -IGTDvG55YW7EsW4= 116317 -6ICB5biI 116318 -6IGM5Lia 116319 -IHllcmk= 116320 -4KWL4KSV4KSw 116321 -INio2YfYqtix 116322 -64uI7JWE 116323 -7J2M7J2E 116324 -IOaMhw== 116325 -44CN77yI 116326 -INGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuA== 116327 -5oqT 116328 -4LmC4LiX 116329 -IHRy4buTbmc= 116330 -INC/0YDQsNGG0ZY= 116331 -IOuGkw== 116332 -4KSH4KSo 116333 -IOygleunkA== 116334 -44CV 116335 -IGPhuq1u 116336 -5Zad 116337 -IOqzhOyGjQ== 116338 -IOS4jg== 116339 -5aWP 116340 -INi52KfZhNmF 116341 -IHZ5c3bEm3Q= 116342 -INC00L7RgNC+0LM= 116343 -INC90LXRgNCy 116344 -INCx0LXRgg== 116345 -INC/0YDQuNGC 116346 -0L7QstGL0Lk= 116347 -5beh 116348 -2YHYp9i5 116349 -0JrQmA== 116350 -4LiV4Lij4Lin4LiI 116351 -INCc0LDQuQ== 116352 -64+E66Gc 116353 -IHpsYXQ= 116354 -IHNhxJ9sYW0= 116355 -z4HOsc69 116356 -4LiK4Lij 116357 -5bm044Gu 116358 -4LiE4Lij4Lit4LiH 116359 -woU= 116360 -IGhvw6E= 116361 -INC00L7QstC+0LvRjNC90L4= 116362 -IG9sbWF6 116363 -IHBvZG3DrW5reQ== 116364 -INGF0L7Qt9GP0Lk= 116365 -5pm0 116366 -0YDQvtCy0LA= 116367 -IGzGsOG7o2M= 116368 -4KS+4KSo4KSo 116369 -INC60LDQv9C40YI= 116370 -INqY2KfZhg== 116371 -5pyJ5Lqb 116372 -INC/0L7QstC10YDRhdC90L7RgdGC0Lg= 116373 -INGG0ZbQvQ== 116374 -w7x5bGU= 116375 -IGphenk= 116376 -IFBow7o= 116377 -IOCkuOCkqA== 116378 -5Ye65ZSu 116379 -wqDQtA== 116380 -IOOCrw== 116381 -55Sx5LqO 116382 -4KWN4KSq4KSk 116383 -INin2YTYrtin2YU= 116384 -INin2LXZhNin2K0= 116385 -INiq24w= 116386 -IHRhdG8= 116387 -5bm5 116388 -5rO9 116389 -4Lit4LiB4LiI4Liy4LiB 116390 -0YPQu9GO 116391 -INCy0YHQvw== 116392 -bWVrdGU= 116393 -4KWA4KSr 116394 -INqY2YjYpg== 116395 -IGzhu4duaA== 116396 -4oCM2qnYsdiv 116397 -7Y+s7Lig 116398 -YW5raQ== 116399 -IOuTseuhneuMgO2WiQ== 116400 -IOOCnQ== 116401 -INin2LHYsti0 116402 -IHRow7o= 116403 -IOG6pW4= 116404 -6KGM5Li6 116405 -INGB0L3QvtCy0LA= 116406 -6r64 116407 -IHNvdWhsYXM= 116408 -INCy0L7Qt9Cy 116409 -z4HOrc+AzrXOuQ== 116410 -INC90ZbRh9C+0LPQvg== 116411 -0L3QvtC2 116412 -0YLQuNC6 116413 -44Gp44GT 116414 -INC+0YHQvdC+0LLQtQ== 116415 -44Kl 116416 -4Lib4Lij4Liw4LiI4Liz 116417 -IOC4l+C4reC4hw== 116418 -IGVrc2lr 116419 -INmE2KU= 116420 -44GL44Gu 116421 -IOOBqg== 116422 -LeCkqg== 116423 -z4HOtc65 116424 -IOyghOusuA== 116425 -4Liy4LiB4Lil 116426 -zrLOtQ== 116427 -7Yq567OE 116428 -7ZWY66m07ISc 116429 -4LiE4LmC4LiZ4LmC4Lil4Lii 116430 -IOWlvQ== 116431 -IHlhecSxbQ== 116432 -66eM64Ko 116433 -INC60LjRgdC70L7Rgg== 116434 -INGN0L3QtdGA0LM= 116435 -55a+ 116436 -INiv2LQ= 116437 -IHNvcnVtbA== 116438 -INC30LDQutC70LDQtA== 116439 -4LiK4Lit4Lia 116440 -INmB2LHZh9mG2q/bjA== 116441 -IOCkj+Cksg== 116442 -IOu5hOq1kA== 116443 -bGVyY2U= 116444 -INi32YTYqA== 116445 -44Gr44GX44Gm 116446 -INGP0LrQvtGX 116447 -INin2YTYqNiq2Yc= 116448 -INCc0LDRgg== 116449 -5Y2T 116450 -IOWFrOWPuA== 116451 -IHPDtnlsZXk= 116452 -IOyDiOuhnOyatA== 116453 -INGE0LDRgA== 116454 -IGFsdMSxbmE= 116455 -IHN0YXZ1 116456 -4oCZxLE= 116457 -YWxpemFjZQ== 116458 -INCy0LjRgdGC0YPQvw== 116459 -5pWZ5biI 116460 -4KWA4KSP4KS4 116461 -b2TEmw== 116462 -INGG0ZbQuw== 116463 -IOuMgOyDgQ== 116464 -INC60L7RgtC+0YDQvtC8 116465 -INi42LHZgQ== 116466 -6Y6u 116467 -2KfZgdmK2Kk= 116468 -IOyXhuydtA== 116469 -IM68z4zOvc6/ 116470 -IEPGoQ== 116471 -5a+7 116472 -z4TOuc+D 116473 -IOOChA== 116474 -IGplZG5vaG8= 116475 -2KfYpw== 116476 -ZXRsZXI= 116477 -IOCkteCkuA== 116478 -INGA0LDQt9C70LjRh9C90YvRhQ== 116479 -INis2LrYsdin2YE= 116480 -IHRo4burYQ== 116481 -INCz0YDQvtC80LDQtNGP0L0= 116482 -4KWw 116483 -INin2YTYo9iu 116484 -INC90LDQs9GA0YPQtw== 116485 -57i+ 116486 -4KWC4KS5 116487 -INC/0YDRj9C80L4= 116488 -4oo= 116489 -INin2YTYo9mI2YTZiQ== 116490 -5paw6IGe 116491 -IOyDge2ZqQ== 116492 -aXRlc2k= 116493 -642w7J207Yq4 116494 -5q23 116495 -77yM6ICM5LiU 116496 -44Gv44Ga 116497 -5Lqn55Sf 116498 -5rCX44GM 116499 -eXNsdQ== 116500 -7Ja064KY 116501 -2KfaqdmF 116502 -4oCD 116503 -KeydgA== 116504 -INis2LPYqtin2LHZh9in24w= 116505 -2YjYqw== 116506 -44WO 116507 -IGthdnJhbQ== 116508 -dsOhbA== 116509 -5pyt 116510 -5oKg 116511 -7IWA 116512 -aHJhZA== 116513 -INiq2YPZiNmG 116514 -IEjDsmE= 116515 -5bm055qE 116516 -IMOnYXJw 116517 -IHlvbHU= 116518 -IGR1Ym5h 116519 -INCS0LXQu9C40Lo= 116520 -IHTDtG4= 116521 -5pWM 116522 -IGNvaQ== 116523 -IG5ha29uZWM= 116524 -INGN0YLRgw== 116525 -7Ya166C5 116526 -0YjQtdC7 116527 -IG5lYnls 116528 -aW7Dpw== 116529 -2KjYp9mE2KXZhtis2YTZitiy2YrYqQ== 116530 -77yh 116531 -0L7QvdGM 116532 -INC90LXQvNCw0ZQ= 116533 -IOqzoOqwnQ== 116534 -INmC2LfYuQ== 116535 -INGC0LXRgNC40YLQvtGA0ZbRlw== 116536 -5Lq644Gv 116537 -IM6jzrE= 116538 -6YKj5Lqb 116539 -44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 116540 -aW9zcGVy 116541 -7YKo 116542 -cmFraQ== 116543 -2KfbjNis 116544 -wqBD 116545 -INCw0L3QsNC70ZbQtw== 116546 -44KP44KK 116547 -IOyVhOuLjA== 116548 -INin2YTYudmF2YTZitip 116549 -bGFtZW50 116550 -6buo 116551 -dWrDrWPDrW0= 116552 -IHLhurs= 116553 -5LiN5Yiw 116554 -IHJlemVydg== 116555 -INin2YTYsNmK2YY= 116556 -5oul 116557 -0JjQvQ== 116558 -IOCkpOCkueCkpA== 116559 -cmVzaQ== 116560 -IOODog== 116561 -0LvQtdCy 116562 -44CAcg== 116563 -IOS7ig== 116564 -IMO2ZGVt 116565 -IHBvdHJhdg== 116566 -IOq1kOyImA== 116567 -0YDQtdC00Lg= 116568 -IM6azpHOmQ== 116569 -INC90LDRh9Cw0LvQsA== 116570 -INC40LfQsQ== 116571 -IGLFmWV6bmE= 116572 -IGxlZG5h 116573 -0YDRg9GO0YI= 116574 -INC80L7Rgg== 116575 -5Y+X5Yiw 116576 -INGA0YPQutGD 116577 -4bubbQ== 116578 -YWRlbGU= 116579 -INGA0L7Qt9Cz0LvRjw== 116580 -5YWQ 116581 -INix2YjYp9mG 116582 -0LDQutC+0LI= 116583 -0YPRgNGL 116584 -IGF6YWw= 116585 -INGD0LrRgNCw 116586 -0L/QuNC+0L0= 116587 -IMSNbG92xJs= 116588 -5LqM5LqM5LqM5LqM 116589 -2KfYqNmK 116590 -IGFzbMSxbmRh 116591 -67mI 116592 -INCy0YDQsNGH 116593 -66O5 116594 -INCz0LXQvdC10YDQsA== 116595 -4LiB4Liy4Lij4Liq 116596 -INGB0L7QstGB0LXQvA== 116597 -2YjZhNin 116598 -IOCktuCkrA== 116599 -4KS+4KSW4KSj 116600 -2LPYqtin2YbbjA== 116601 -5oq9 116602 -IHLFr3o= 116603 -IO2MkOunpA== 116604 -4LiB4Liy4Lij4LiV 116605 -2KfYptuM 116606 -YXNhbA== 116607 -INGA0LDQsdC+0YLRgw== 116608 -4KWL4KSy4KSo 116609 -IOmprA== 116610 -IGxhaQ== 116611 -w7Np 116612 -dmFw 116613 -64WE7JeQ64qU 116614 -INC/0LXRgNC10LTQsdCw0Yc= 116615 -INC/0LvQtdGH 116616 -aWRkZXQ= 116617 -INGH0L7RgA== 116618 -aXlhbg== 116619 -44CA44CA44CA44CA44CAIOOAgA== 116620 -INit2LHZgdmH 116621 -5aSn6Ziq 116622 -0YfQvtCz0L4= 116623 -INC60Lg= 116624 -2KfZiNmK 116625 -IGJhxZ9sYW4= 116626 -IG1lcmtlemk= 116627 -wqnCqQ== 116628 -INix2KfYs9iq 116629 -IOuKlA== 116630 -INGB0YDQsNCy 116631 -INCy0L3Rg9GC0YDQuA== 116632 -44CA44OO 116633 -5Z2b 116634 -INCy0YI= 116635 -Ojov 116636 -IHPDtnpsZcWf 116637 -IHZlcmRpxJ9p 116638 -4Li04Lii4Lih 116639 -INCf0YDQvtGC 116640 -2YPYp9ix 116641 -INio2YbYr9uM 116642 -2Y/ZiA== 116643 -55u05pKt 116644 -INmF2YTZig== 116645 -IG51dG7DqQ== 116646 -4Liw4LmB4LiZ4LiZ 116647 -IE3Dow== 116648 -IOy0 116649 -4LmI4Liy4Lih 116650 -0LzQvtGB 116651 -INC/0L7Rj9Cy0Lg= 116652 -IG5naGk= 116653 -IOuQmOuKlA== 116654 -0YHQutC70LDQtA== 116655 -4KSX4KSy 116656 -IEPhu5luZw== 116657 -55+l6K+G 116658 -IHRhag== 116659 -INi52KjYsQ== 116660 -6ZmE6L+R 116661 -w7zEnw== 116662 -IOqzteqzoA== 116663 -6KOV 116664 -4oCM2LTZhg== 116665 -IGdlcsOnZWt0ZW4= 116666 -bnVu 116667 -2YXYtA== 116668 -6rCA64ql 116669 -44Op44Oz44OJ 116670 -YXlhY2Fr 116671 -5Y2B5LiA 116672 -IELhuqNv 116673 -IHlldGVybGk= 116674 -xb5pdg== 116675 -INmK2YbYp9mK2LE= 116676 -IGLDvXZhbA== 116677 -7JuU6rmM7KeA 116678 -IG7hu6M= 116679 -IOq0gOqzhA== 116680 -IO2drA== 116681 -0LDRjtGC0Yw= 116682 -IGfDtnTDvHI= 116683 -INCy0LDQttC90L4= 116684 -5rWp 116685 -IOydvOu2gA== 116686 -0YbRltC50L3QuNC5 116687 -66Cl7J2E 116688 -INC70LXRh9C10L3QuNC1 116689 -6Zai5L+C 116690 -IFTDvG0= 116691 -7JmU 116692 -6YGX 116693 -IETDtm4= 116694 -INGB0L/RltC70Yw= 116695 -44OB44Kn 116696 -0L3Rj9C10YLRgdGP 116697 -aWx0ZXJl 116698 -IO2MgA== 116699 -6Kit5a6a 116700 -IHJvZGlu 116701 -INin2YLYqti12KfYrw== 116702 -0LDQu9GM0L3QtQ== 116703 -4KWN4KSV4KSw 116704 -IHbDvWLEmw== 116705 -IHRlaGxpaw== 116706 -4pSQ 116707 -IOeUsA== 116708 -z4HOr8+C 116709 -aXllbA== 116710 -IHRoaeG7h3U= 116711 -z4jOt8+C 116712 -INC00LLQtQ== 116713 -IEVsZWt0 116714 -4LiB4LiO 116715 -0L7RgNGD0LY= 116716 -YcWfxLE= 116717 -6Kmz57Sw 116718 -INin2KrZgdin2YI= 116719 -IGfhuq9u 116720 -5rKS5pyJ 116721 -INmF2LfYp9mE2LnZhw== 116722 -z4TOuc69 116723 -IG9rcmVz 116724 -0Zw= 116725 -6rCU64uk 116726 -0KDQvtC3 116727 -5b6L5a6+ 116728 -77yJ77yI 116729 -IOyatOyYgeyekA== 116730 -44Kr44OG 116731 -bGHEjQ== 116732 -4KWH4KSs4KS4 116733 -IG/EjWk= 116734 -LdCx 116735 -ZWxlcmRlbg== 116736 -a292w71jaA== 116737 -IMSwem1pcg== 116738 -4Liq4Lih4Liy4LiK 116739 -bGFkYXRlbA== 116740 -IOa7 116741 -6ZSA5ZSu 116742 -INC00L7RgdC70ZbQtNC20LXQvdC90Y8= 116743 -INC70ZbQutCw0YA= 116744 -INC+0LTQvdCw0LrQvg== 116745 -IFbDoWM= 116746 -IOir 116747 -6YCy6KGM 116748 -5Lul5aSW 116749 -6bOl 116750 -INmG2Kw= 116751 -IGJhxZ9rYW4= 116752 -IG9wYXTFmWVuw60= 116753 -2KfYsdi0 116754 -2LbYp9mB2Kk= 116755 -44K544Os 116756 -zq7OvQ== 116757 -xJt0w60= 116758 -4Lin4Lii 116759 -INix2LPZiNmE 116760 -xZlpY2g= 116761 -IHDFmWlo 116762 -0YzQvNC4 116763 -54S26ICM 116764 -IHRo4bqzbmc= 116765 -bGFtYXo= 116766 -2YDZgNmA 116767 -IOywuOyXrA== 116768 -INmG2YjYtNiq2Yc= 116769 -INGB0YLQtdC6 116770 -44Gu44G/ 116771 -INmI2KfZhNi5 116772 -5pWi 116773 -4KWA4KSCLA== 116774 -0J7RgdC90L7Qsg== 116775 -0LjQvNC+0YHRgtC4 116776 -IMSMZXNrw6E= 116777 -0ZbRh9C90LjQuQ== 116778 -4Liy4Lih4Liy4Lij4LiW 116779 -ZWtrw7xy 116780 -wqBo 116781 -zrnOus63 116782 -INiq2LnbjNuM2YY= 116783 -0LrQvtGB0YLRlg== 116784 -IE11c3RhZmE= 116785 -IOymiQ== 116786 -44Gn44GC44KK 116787 -5bel5Lia 116788 -b3bDrWQ= 116789 -0J3Qvg== 116790 -INiz2b7Ysw== 116791 -2q/bjNix2K8= 116792 -INC/0LXQtNCw0LPQvtCz 116793 -INqp2KfYsduM 116794 -INGI0YLRgw== 116795 -5oyC 116796 -2KLZhdiv 116797 -55yf5piv 116798 -INin2KjYqg== 116799 -INix2KbbjNiz 116800 -INiv24zZhg== 116801 -z4jOtQ== 116802 -IHNlem9u 116803 -IOeG 116804 -4KS44KSo 116805 -44O744Ki 116806 -IOWFrQ== 116807 -IOix 116808 -IOygnOuqqQ== 116809 -INmF2LnYrw== 116810 -INmB2YLYrw== 116811 -6YKK 116812 -zqnOow== 116813 -IOWh 116814 -IG9idnlr 116815 -IOydtOugh+qyjA== 116816 -INCx0L7RgNC+0YLRjA== 116817 -27LbsQ== 116818 -IOG7kW5n 116819 -6K+X 116820 -IMSQ4buRaQ== 116821 -INCx0LXRgNC10LfQvdGP 116822 -IHNvxJ8= 116823 -IO++jQ== 116824 -44KS44Gk 116825 -44GX44KD 116826 -0LXRgNC10Yc= 116827 -44CA44CAIOOAgCDjgIAg44CA 116828 -5oiq 116829 -INin2YTYs9i52YjYr9mK2Kk= 116830 -IOuCqOyekA== 116831 -IEFuZ2lvc3Blcg== 116832 -Pz8/Pz8/Pz8/Pz8/Pz8/Pw== 116833 -IHByxa9t 116834 -INC/0LvQvtGJ0LDQtA== 116835 -IM+Ez4HOsQ== 116836 -0LTQsNGO0YI= 116837 -IHPEsW5hdg== 116838 -IG3hurdj 116839 -5rC05bmz 116840 -INCy0LjQs9C70Y8= 116841 -IG7DoXN0 116842 -INC+0LHRi9GH 116843 -IOydtOyVvOq4sA== 116844 -67mb 116845 -IEJhxJ8= 116846 -INin2YTYq9in2YTYqw== 116847 -IHNlcnZpcw== 116848 -IOufrA== 116849 -0L7QvNC40L3QsA== 116850 -zq/OuA== 116851 -IOG6pA== 116852 -6rK96riw 116853 -IOyhuA== 116854 -4Li14Lia 116855 -IOCkmOCkn+CkqA== 116856 -IOC4meC4suC4hw== 116857 -Ls6g 116858 -7JWV 116859 -csO8bg== 116860 -IG9ubGFyxLFu 116861 -INC30LHRltC70YzRiA== 116862 -4LmB4Lif 116863 -IOyXrOq4sA== 116864 -IOuMgO2RnA== 116865 -INGB0LjQu9GD 116866 -4LmC4Lib 116867 -INiq2YLYrw== 116868 -INCf0L7QvA== 116869 -INC80LDRgdC70LA= 116870 -IOyYgeyDgQ== 116871 -0L3QtdC90LjQtQ== 116872 -zrvOsc68zrI= 116873 -IEJ5bA== 116874 -5oq1 116875 -5o6q 116876 -IM66zrHOuM+Oz4I= 116877 -bcSxesSx 116878 -5paw55qE 116879 -6YeN6KSH 116880 -4Lix4Lib 116881 -562G 116882 -INGC0LrQsA== 116883 -INC30L3QsNGH0LXQvdC90Y8= 116884 -0LvQsNGC0Lg= 116885 -IHZsaXY= 116886 -0JDQvQ== 116887 -INqG2KfZvg== 116888 -INC/0LjRgtCw0L3RjA== 116889 -Ou+9iQ== 116890 -5pWZ5o6I 116891 -IOy5nOq1rA== 116892 -IHRyYW8= 116893 -4KWN4KSv4KSV4KSk 116894 -4Li44LiE4LiE4Lil 116895 -INix2YjYtNmG 116896 -INi52YTZitmH2Kc= 116897 -44CB44GE 116898 -64WE7JeQ 116899 -6YCG 116900 -INC80LDQs9Cw0Lc= 116901 -776e776e 116902 -IHNpY2U= 116903 -4oCZdGU= 116904 -INin2YTZhNi62Kk= 116905 -w6F1 116906 -6Ieq6Lqr 116907 -IG5nxak= 116908 -INGB0LrQu9Cw0LTRgw== 116909 -IHpydQ== 116910 -IHRydXk= 116911 -IGlsYW4= 116912 -INm+2KfbjNmH 116913 -Ojo6Ojo6Ojo6Ojo6Ojo= 116914 -ZmFr 116915 -0YLQtdGF 116916 -IHRha3k= 116917 -IOyWuOyWtA== 116918 -ZWRlbsOt 116919 -IOCkmuCksuCkpA== 116920 -IOuwsOyasA== 116921 -IGptw6lubw== 116922 -INmE2KPZhg== 116923 -zrHOvc6s 116924 -0LrRg9C70Yw= 116925 -INit2YHYuA== 116926 -INii2LLZhdmI2YY= 116927 -0LjRgtC10LvRjNC90YvQtQ== 116928 -INCe0LvQtdC60YHQsNC90LQ= 116929 -6I2j 116930 -IOCknOCkrOCklQ== 116931 -IHJvZGk= 116932 -INio2LHYrtmI2LHYrw== 116933 -IGhhZnRh 116934 -zrvOuc66zqw= 116935 -4LiV4LiZ 116936 -INCx0LXRgNC10LM= 116937 -zrHOvc60 116938 -LdCh 116939 -IHByYXZpZGVs 116940 -INCx0ZbQu9GP 116941 -7ZKN 116942 -INC/0YDQtdC00YPRgQ== 116943 -INC80YPQvdC40YbQuNC/ 116944 -5YyW5a2m 116945 -INiq2YXYp9iz 116946 -IOCkieCksg== 116947 -0JPQng== 116948 -2LrYsQ== 116949 -cmFkYW4= 116950 -IOuCmOyYpA== 116951 -6KiC 116952 -4LmA4LiY4Lit 116953 -4oCM2LPbjA== 116954 -INC+0LHRj9C30LDRgtC10LvRjNC90L4= 116955 -0L7RgtC1 116956 -4LmM4LiK 116957 -55So55qE 116958 -IGFsdMSxbg== 116959 -INGB0L7RgtGA0YPQtA== 116960 -0ZbQvdC60Lg= 116961 -0L7Qt9C80L7QttC90L4= 116962 -zpA= 116963 -67mM 116964 -wpU= 116965 -INGC0L7Rh9C90L4= 116966 -IGptZW4= 116967 -2KfZhNuM2Kc= 116968 -6IiN 116969 -Y2hvZHU= 116970 -6rOk 116971 -aWNrw6lt 116972 -INmF2YjYsQ== 116973 -44Oq44Oz44Kv 116974 -IGHFn2Ft 116975 -INC40YI= 116976 -IOCkqOCkrw== 116977 -IM68zr8= 116978 -6ZWc 116979 -INio2YbYp9io2LE= 116980 -INiq2K7Ytdi1 116981 -IOC4quC4ng== 116982 -INC/0YDQvtGE0LXRgdGB0Lg= 116983 -IHB1YW4= 116984 -INmB2LHZhdin2YY= 116985 -64yA7ZqM 116986 -INC/0Y/Rgg== 116987 -INmF2YjYqA== 116988 -IHbEm2t1 116989 -IOuD 116990 -ZWNrw70= 116991 -IOyImOuPhA== 116992 -IHRoYW8= 116993 -IGthcGF0 116994 -INC30LDRhdCy0L7RgNGO 116995 -IOWFiQ== 116996 -2LHYp9mG24w= 116997 -6YCg5oiQ 116998 -INGB0LLRltC5 116999 -INC00L7RgdC40YLRjA== 117000 -IG1pbHlhcg== 117001 -IGVuZXJqaQ== 117002 -INC60LjQvw== 117003 -IOyii+yVhA== 117004 -INio2KU= 117005 -6rKM7Iuc 117006 -IEzGsHU= 117007 -INmF2YbYuNmI2LE= 117008 -z4nOvM6s 117009 -zrbOrw== 117010 -xLFtZGE= 117011 -IOydtOulvA== 117012 -4LmS 117013 -INCy0LLQsNC2 117014 -IGdhemV0 117015 -4KWN4KSk4KSo 117016 -4LmJ4Liz4Lir4LiZ 117017 -5Zyf5Zyw 117018 -IOCkuOCkpuCkuA== 117019 -2KrYqNip 117020 -IHBvxI3DrXRh 117021 -IOyLnOyKpO2FnA== 117022 -4Lij4LiE 117023 -IGVkZWNlaw== 117024 -INiq2K3ZhNuM2YQ= 117025 -5oyJ54Wn 117026 -5Z2q 117027 -IOq3uOqwgA== 117028 -2KrZh9mF 117029 -INCx0LDQtg== 117030 -2KfZgdi5 117031 -6YCa5bi4 117032 -INCi0Lg= 117033 -zrPOvc+J 117034 -7LmZ 117035 -IHpuYW1lbsOh 117036 -77y877y8 117037 -zrHPgM+M 117038 -5YaZ55yf 117039 -IO+8vAo= 117040 -5Yqg5bel 117041 -6IKh5Lu95pyJ6ZmQ5YWs5Y+4 117042 -0Y/RgtC40Lk= 117043 -IGjDomw= 117044 -IMOnYWI= 117045 -INit2KfYttix 117046 -UMWZ 117047 -INin2YTYqtmC 117048 -zr7Ot8+C 117049 -0LHQtQ== 117050 -IGtow6Ft 117051 -IOKMkg== 117052 -IOmVvw== 117053 -IOKApgo= 117054 -4KSm4KSu 117055 -IFN0dWRp 117056 -IGtvZHU= 117057 -IGtvbXVuaWs= 117058 -IGthdGvEsQ== 117059 -bmV0ZQ== 117060 -IHJhcG9y 117061 -6Ya0 117062 -44KJ44Gb 117063 -INC90LXRgdC60L7Qu9GM 117064 -IGjhu41w 117065 -77+j77+j77+j 117066 -urw= 117067 -6KOC 117068 -0LXQtNGM 117069 -INin2YTYp9it 117070 -bGFkxLFr 117071 -IGZvdG/En3JhZg== 117072 -5pel44Gu 117073 -INit2KfZhNiq 117074 -INir2YTYp9ir 117075 -0LDRgtC+0LI= 117076 -ZXlzZQ== 117077 -IOqwkOyCrA== 117078 -w6HFvmU= 117079 -INC90LDQtNCw 117080 -IOCkleCkueCkqA== 117081 -IOODnQ== 117082 -44Gr44GC44KL 117083 -44Gr44Gq44Gj44Gm 117084 -2YjYr9mH 117085 -IHBvxaFr 117086 -5aSq6Ziz5Z+O 117087 -57uP6aqM 117088 -5pKt5pS+ 117089 -IG1hamV0 117090 -0YXQvg== 117091 -INGC0LXRgdGC 117092 -77yPCg== 117093 -z4POtc+EzrU= 117094 -INCi0L7QvNGD 117095 -2Y7YrQ== 117096 -IOyeiOycvOupsA== 117097 -INC30LDQt9C90LDRhw== 117098 -6ZqQ 117099 -INC00ZbRlw== 117100 -0LrRgtC40LI= 117101 -2YjZgdmK 117102 -IHThu50= 117103 -4Li54Lib4LmB4Lia4Lia 117104 -INGA0LXQtNCw0Lo= 117105 -IGF0ZcWf 117106 -IGtoaeG7g24= 117107 -w7xueQ== 117108 -4Li14Lii4LiB 117109 -INGH0LDRidC1 117110 -IHR1eQ== 117111 -zrPPic69 117112 -4Lij4Lit4Lia 117113 -IHRyw7luZw== 117114 -4LmB4LiX4LiZ 117115 -IM6xzrrPjA== 117116 -INCS0LXRgNGF0L7Qsg== 117117 -4LmD4LiZ4Liq 117118 -44CB5L2V 117119 -5Yem 117120 -IOe7jw== 117121 -5qiT 117122 -2KfZhtqv2YTbjNiz24w= 117123 -IGxlcMWhw60= 117124 -IOW8gOWniw== 117125 -6Zm6 117126 -INGH0LXRgtGL 117127 -INCh0LXRgA== 117128 -0L7RjtC3 117129 -IHh1bmc= 117130 -5ZOB54mM 117131 -IOyDge2DnA== 117132 -INmG2LXYqA== 117133 -INGH0L7QvNGD 117134 -INiq2LHaqduM 117135 -LdC70Lg= 117136 -b3bDrQ== 117137 -INin2YbYrA== 117138 -57Wh 117139 -INiq2YjYtQ== 117140 -IOy/oA== 117141 -IHZhcnNh 117142 -INGA0LDQt9GA0LDQsdC+0YI= 117143 -4LiC4Lit4LiH4LiE 117144 -6a2C 117145 -IOCkiuCkquCksA== 117146 -5p2l6K+0 117147 -INGG0LXQvdGC0YDQsNC70Yw= 117148 -IFRha8SxbQ== 117149 -IG9ubGFy 117150 -INiz2LHYudiq 117151 -5aW95YOP 117152 -IGJ14buVaQ== 117153 -INCR0LXQuw== 117154 -wqBj 117155 -2KPYqg== 117156 -4LiC4LiT4Liw 117157 -44Gr5Ye6 117158 -ICsqKioqKioqKioqKioqKg== 117159 -z4TOt866zrU= 117160 -2KfYrNix 117161 -IOKAsg== 117162 -44O844Os 117163 -6aWt 117164 -INis2YTYsw== 117165 -INio2LPYqtmH 117166 -4Lin4Liy4LiH 117167 -IM6yzqw= 117168 -INCw0LzQtdGA0LjQutCw0L0= 117169 -IFByZW1p 117170 -bWFl 117171 -INGB0YDQtdC00Lg= 117172 -4bqg 117173 -INCy0YDQtdC0 117174 -44CC6ICM 117175 -5ZKy 117176 -IOqzteqwnA== 117177 -6IKl 117178 -0LfQstC40YfQsNC5 117179 -IHByb2NlbnQ= 117180 -0LjQu9C+0YHRjA== 117181 -4KS24KSo 117182 -6aCB 117183 -0LXQutGC0Lg= 117184 -2K/Yp9i02Ko= 117185 -7ZWZ7ZqM 117186 -44CA44CA44CAIOOAgCDjgIA= 117187 -INmF2K/ZitmG2Kk= 117188 -4KS/4KSy4KSo 117189 -IOiX 117190 -0LzQuNGA 117191 -INC90L7RgA== 117192 -IO2VmOyngA== 117193 -0LLQtdGJ 117194 -bsSbbQ== 117195 -0LXRgNCw0LzQuA== 117196 -IHByYWNvdg== 117197 -INio2YrYp9mG2KfYqg== 117198 -IM+Dz43OvQ== 117199 -INis2LA= 117200 -44GE44Gn 117201 -IELDrQ== 117202 -6LGG 117203 -IGhtb3Q= 117204 -aWxlY2XEn2k= 117205 -INiq2KfYqw== 117206 -6LS0 117207 -IOq4iQ== 117208 -IG15c2w= 117209 -IOydtO2VtA== 117210 -IOq4sOuKpQ== 117211 -INCi0LDQvA== 117212 -INC90LDRgdC10LvQtdC90LjRjw== 117213 -IE1leg== 117214 -IOuqqOultA== 117215 -7ZmU66W8 117216 -INmG2LPYrtmH 117217 -INiq2YTZiNuM2LLbjA== 117218 -IMSNZXJ2bmE= 117219 -xrDhu6FuZw== 117220 -2LXYrQ== 117221 -INGC0YDQtdC9 117222 -1aE= 117223 -IGNlbG91 117224 -xalp 117225 -7JeG7J20 117226 -bsOta3U= 117227 -IHByb2dyYW11 117228 -4KWN4KSq4KSo 117229 -INC/0YDQtdC2 117230 -2KfYsdio 117231 -5pyf6ZaT 117232 -IM68zqw= 117233 -642U64uI 117234 -4bulbg== 117235 -INC/0LXRgNC10YHRgg== 117236 -5a+55LqO 117237 -6L+Q6KGM 117238 -INGC0LDQvQ== 117239 -IOyCrOydtO2KuA== 117240 -IFF14bqjbmc= 117241 -IHN0b2rDrQ== 117242 -44Ot44O8 117243 -2q/Yp9ix 117244 -INC10L3QtdGA0LM= 117245 -IGt0ZXLDvW0= 117246 -INC/0YDQuNC80ZY= 117247 -INC60LDRgNGC0Lg= 117248 -IHplbmdpbg== 117249 -77yM5YaN 117250 -INiq2LHYqA== 117251 -INGG0LXQvdGC0YA= 117252 -IHNhxJ9sYW1haw== 117253 -64ud 117254 -44Gu5a2Q 117255 -IOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgA== 117256 -IHPGoW4= 117257 -esSx 117258 -0YLQsNC60Lg= 117259 -xJtzdMOt 117260 -IOCl 117261 -6a4= 117262 -5Z+56K6t 117263 -IOyUqA== 117264 -IGJlbGtp 117265 -IOydtOuypO2KuA== 117266 -65SU7Ja0 117267 -IHPDoG4= 117268 -0L3QuNC60LDQvA== 117269 -YWxpbQ== 117270 -5a++5b+c 117271 -IFPhu7E= 117272 -6YGT6Lev 117273 -6auY5riF 117274 -IGTDtWk= 117275 -INmE2YA= 117276 -IOiCoQ== 117277 -zr3OuQ== 117278 -4oCeSg== 117279 -J25kZQ== 117280 -zpHOkw== 117281 -44Go44Gq44KL 117282 -54i4 117283 -2LnZhNuM 117284 -z4HOuc+Dz4Q= 117285 -IGXEn2l0 117286 -INC30L7QstC90ZbRiA== 117287 -INC/0YDQuNC8 117288 -2LPZhdio2LE= 117289 -IG3Em3N0xJs= 117290 -IM+AzrXPgc65z4PPg8+Mz4TOtQ== 117291 -0JDQoA== 117292 -5oSf5Yiw 117293 -IOusuOyEnA== 117294 -44GL44KL 117295 -2YLZitmC2Kk= 117296 -INCy0YLRgNCw 117297 -IOC4reC4sw== 117298 -0YHQutGD0Y4= 117299 -2K/Zh9in24w= 117300 -IMSwc3Q= 117301 -INCX0LDQsg== 117302 -IOmDvQ== 117303 -0YjQtdC8 117304 -INC10YnRkQ== 117305 -INCc0LjRhdCw0Lk= 117306 -INGD0L/RgNCw0LLQu9C10L3QuNGP 117307 -0LvQtdC90L3Ri9C1 117308 -IHphxI1hbA== 117309 -5qGM 117310 -INC/0ZbQtw== 117311 -0LvRj9GC0YzRgdGP 117312 -IOyekOujjA== 117313 -44CA44CAIA== 117314 -IEtyYWw= 117315 -6IiJ 117316 -IOCkreCktQ== 117317 -INiu2YU= 117318 -INCw0LrQsNC00LXQvA== 117319 -IGlzdGVu 117320 -INC40YHQutGD0YE= 117321 -INi52YbYr9mF2Kc= 117322 -INin2YTYp9mF 117323 -aXNtdXM= 117324 -IGF5csSxbnTEsQ== 117325 -INCp0L4= 117326 -INmH2YjYtA== 117327 -2K/ZiNin2Kw= 117328 -0LvQsNC2 117329 -INqp2YbYp9ix 117330 -wqBS 117331 -5oCn55qE 117332 -0YHRltC8 117333 -IE3DvHo= 117334 -0YDQvtCy0LjRhw== 117335 -IM6p 117336 -IOyWtOuUlA== 117337 -2LPZhdip 117338 -INGA0Y8= 117339 -IHTGsMahaQ== 117340 -INGA0LDRgdGF0L7QtA== 117341 -5Y+w54Gj 117342 -INin2YTZiNmC2Ko= 117343 -2KjYsdin24w= 117344 -INC30YDQvtCx0LjRgtC4 117345 -INCx0YPRgA== 117346 -IMSNaW5ub3N0aQ== 117347 -INi12KfYrQ== 117348 -INi12YbYudiq 117349 -INi32YQ= 117350 -zr7PjQ== 117351 -IHRpc8OtYw== 117352 -IEZyYW5zYQ== 117353 -7KaY 117354 -6Lu9 117355 -0Zg= 117356 -z4zPhM63z4TOsc+C 117357 -IE1pbGxldA== 117358 -44CA44O+ 117359 -INC/0YDQuNC10Lw= 117360 -INiq2LHYrNmF2Yc= 117361 -INiz2YjYrw== 117362 -IHNvdcSNw6FzdMOt 117363 -0JTQvg== 117364 -IHRy4bul 117365 -6Laz55CD 117366 -4Lib4LiB 117367 -IHVzdGFub3Y= 117368 -zp/OmQ== 117369 -0J7QvQ== 117370 -INC90LXQtg== 117371 -0LrQvtCz 117372 -5LiA54K5 117373 -INiv2YjYsdin2YY= 117374 -5b2x6Z+/ 117375 -ZWxpZGly 117376 -4oCeTg== 117377 -ZXNpeWxl 117378 -0YDQtdC80LXQvdC90L4= 117379 -IGlsZXRpxZ9pbQ== 117380 -4Lih4LmA4LiV 117381 -5Lul5YmN 117382 -44OL44O8 117383 -6Zu76Kmx 117384 -4LmC4Lie 117385 -b3ZreQ== 117386 -INC30LDQvNGW 117387 -IOCkteCklQ== 117388 -wpk= 117389 -INCy0ZbQudC90Lg= 117390 -IG9sbWFkxLHEn8Sx 117391 -5qKB 117392 -INCi0LXQvw== 117393 -bsSbdGU= 117394 -6IWV 117395 -7IKs64qU 117396 -bWFtYWs= 117397 -IGNpeg== 117398 -5qOS 117399 -IO+8jzo= 117400 -6YGL5YuV 117401 -INmH2YbYpw== 117402 -IOqwkQ== 117403 -INmH2Ybar9in2YU= 117404 -IHXEn3Jh 117405 -5b2m 117406 -IG9iamVrdA== 117407 -44Go44GZ44KL 117408 -5Zu95YaF 117409 -INC00LXRgNC20LDQstC4 117410 -IOiM 117411 -IHVsdXNsYXJhcmFzxLE= 117412 -2aM= 117413 -IG11dGxhaw== 117414 -INC30L7QsdC+0LI= 117415 -IM6zzrXOvQ== 117416 -4LmE4Lif4Lif 117417 -IMO2emfDvHI= 117418 -7YS4 117419 -INCy0LjQv9Cw0LTQutGD 117420 -IOCkleCkrA== 117421 -INin2YTYrti3 117422 -zrjOt866zrHOvQ== 117423 -77yM5oqK 117424 -0Y/RgtGC0Y8= 117425 -IG9sbWFkxLHEn8SxbsSx 117426 -wqBrVw== 117427 -IG7Em2t0ZXLDvWNo 117428 -44OH44Or 117429 -5qSN54mp 117430 -zrzOuc67zr/Pgg== 117431 -0JDRgNGF0ZbQsg== 117432 -INCi0L4= 117433 -6Jas 117434 -0YHRgtCy0LjRjw== 117435 -INiu2YjYp9iz2Ko= 117436 -0L7Qu9C+0LPRltGX 117437 -2YjYp9mH2K8= 117438 -INC90LDQug== 117439 -INC60L7RgtC+0YDRg9GO 117440 -IOCkpuCklQ== 117441 -4oCeTQ== 117442 -zrvOuc6x 117443 -5q2y 117444 -56ys5Zub 117445 -4KS+4KSc4KS4 117446 -ICjCqw== 117447 -IHRo4bq7 117448 -772kCg== 117449 -56OB 117450 -INmE2YI= 117451 -IOyVlA== 117452 -INC90L7QstC+0LPQvg== 117453 -IOyVhOyjvA== 117454 -IOuQmOyWtA== 117455 -IG9sdW4= 117456 -w74= 117457 -IGthcml5 117458 -INit2LPYqA== 117459 -IOydmOuvuA== 117460 -LtCc 117461 -IG96bmHEjQ== 117462 -2YTYs9mE 117463 -INCS0LjQtA== 117464 -66Gc64KY 117465 -4KWN4KSf4KSu 117466 -7Zy0 117467 -IGJpbGdpc2F5YXI= 117468 -7J247KeA 117469 -INCy0L7Qsg== 117470 -bmljdHbDrW0= 117471 -4Liy4Lit4Lii 117472 -INi02K7YtduM 117473 -0L/RltC+0L0= 117474 -5pys5b2T 117475 -INio2YA= 117476 -INC80LDRgdC70L4= 117477 -IFBow6F0 117478 -INCx0LA= 117479 -0LDQu9GM0L3QvtC80YM= 117480 -56S+5Yy6 117481 -INI= 117482 -Ojo6fA== 117483 -6rQ= 117484 -IOS4gw== 117485 -INmI2KfZhNiv 117486 -0L3QuNC60LU= 117487 -4Lit4Lil4Lil 117488 -IHllcmxlxZ8= 117489 -IGtvbWJpbg== 117490 -dcWh 117491 -INC+0YLRgNC4 117492 -5LmM 117493 -acWfdGk= 117494 -IHPDs25n 117495 -zrvOt8+C 117496 -INC60YPRgNGB 117497 -4LmI4Liy4LiE 117498 -INmK2LM= 117499 -INiv2KfZhQ== 117500 -55Kw5aKD 117501 -0YfQtdC90LrQvg== 117502 -44CN44Gu 117503 -IG3DrXN0YQ== 117504 -INGE0L7Rgg== 117505 -IHDFmcOtem4= 117506 -INGA0LDQt9Cw 117507 -57Sr 117508 -bMOhZGE= 117509 -INGB0L/QtdGG0LjQsNC70LjRgdGC 117510 -INio24zZhdin2LHbjA== 117511 -IOuTow== 117512 -54uX 117513 -2YjZiA== 117514 -0LDQvdGW0YI= 117515 -INiv2YbYqNin2YQ= 117516 -INmF2KzZhdmI2LnYqQ== 117517 -w61uYQ== 117518 -IEhhbGs= 117519 -w6FqZW0= 117520 -ZW7DrXpl 117521 -IGlteg== 117522 -q25n 117523 -IM6VzqA= 117524 -INmF2YfYrw== 117525 -7JyE7JuQ7ZqM 117526 -IOycoO2YlQ== 117527 -4KS+4KSq4KS4 117528 -IGplxb4= 117529 -0LDQvdGW0Lc= 117530 -0LjRgtCw0Lk= 117531 -4b+W 117532 -aXJsZXI= 117533 -6riw6rCE 117534 -INCy0L7RgA== 117535 -IM+O 117536 -IHBvem4= 117537 -INiz2KfZhg== 117538 -5a+/ 117539 -5pav54m5 117540 -IHR1cmlzdA== 117541 -IOyekOycoA== 117542 -4KWA4KSW 117543 -zrzOvM61 117544 -YW5zxLE= 117545 -7IaM64WE 117546 -IHRlZGF2aQ== 117547 -0YfQtdGB0YLQstCw 117548 -5aOT 117549 -0L7QstC1 117550 -77yM55yL 117551 -INC/0L7RgdC70YPQsw== 117552 -INGC0YDQsNC90YE= 117553 -IHrDoXo= 117554 -5oi0 117555 -INC80L7QvdCw 117556 -4Li04LmA4LiE4Lij4Liy4Liw4Lir 117557 -INmG24zZhQ== 117558 -IOyCrOuejOydtA== 117559 -YWhhdA== 117560 -z4XOug== 117561 -INC+0YLQutCw0Lc= 117562 -INCS0L7Qu9C+0LTQuNC80Lg= 117563 -INCh0Lo= 117564 -4KS/4KSV4KSk 117565 -5aaW 117566 -IOuLpOyatOuhnOuTnA== 117567 -7JiB7IOB 117568 -IOCkqOCkiA== 117569 -Y2V0ZQ== 117570 -INCz0YDQuNCx 117571 -ZWNlxJ9pbmk= 117572 -IMOnb8SfdQ== 117573 -INC80LDRgtC10YDQuNCw0LvQsA== 117574 -4bupdA== 117575 -IHphdGVu 117576 -IEZSQQ== 117577 -IEJpcmxpxJ9p 117578 -IHNpdGVzaQ== 117579 -IOWU 117580 -INCS0L7Quw== 117581 -wqBQUw== 117582 -4KS+4KSy4KSk 117583 -INCx0LDRhw== 117584 -0LDQu9GW0LfQsNGG0ZbRlw== 117585 -IFNsb3Y= 117586 -57OW 117587 -INCz0L7QstC+0YDQuNGC 117588 -INCy0LLQtdC0 117589 -4Li44LiV4Lia4Lit4Lil 117590 -44GG44Gh 117591 -IHlhcHTEsWs= 117592 -IOygley5mA== 117593 -6rCc66W8 117594 -4KWI4KS44KSy 117595 -2KzZitmE 117596 -INC30LDRgdGC0L7RgdC+0LI= 117597 -6L+r 117598 -IEt1cnVs 117599 -IE5hc8SxbA== 117600 -INC90LDQv9GA0Y/QvA== 117601 -IOS9jQ== 117602 -4LmM4Lia 117603 -IOmBkw== 117604 -INC90LjQttC1 117605 -INC60L7RgdGC 117606 -2LjZh9ix 117607 -0KLQsA== 117608 -7Ked 117609 -IMO2bsO8bmRl 117610 -0LbRlg== 117611 -INin2KzYsdin24w= 117612 -INC+0YDQs9Cw0L3RltCy 117613 -dmlzZQ== 117614 -IOydhA== 117615 -4LiV4Lij4LiH 117616 -2qnZhtmI2YY= 117617 -IGRsb3Vobw== 117618 -0J7QnQ== 117619 -IOycoQ== 117620 -55uu5qCH 117621 -66+A66Gc 117622 -77yP77yP77yP77yP77yP77yP77yP77yP 117623 -INC/0L7Rh9C10LzRgw== 117624 -5pWF5LqL 117625 -0YLQtdGB0Yw= 117626 -INmC2YTYqA== 117627 -INiq2KzZhw== 117628 -aWxlbmRpcg== 117629 -INC40LPRgNCw 117630 -INCU0L7QvQ== 117631 -IHDFmcOtamVt 117632 -6KaG 117633 -0KHQvw== 117634 -LdC90Lg= 117635 -b25zZQ== 117636 -0LjQvdC+0Lk= 117637 -0L7Rh9C90L7Qs9C+ 117638 -2KfYs9in2YY= 117639 -INC/0L7Qu9GD0YfQuNGC0Yw= 117640 -0YLQsNC/ 117641 -IEzDvQ== 117642 -IMOCdQ== 117643 -IGjDvGM= 117644 -ZWJlaw== 117645 -IFlhecSxbg== 117646 -5peL 117647 -4Lix4LiZ4LiX4Lij 117648 -INCy0LjQutC+0L3QsNCy 117649 -IHPDtG5n 117650 -4KWB4KSc 117651 -INCX0LDQsw== 117652 -pOuLpA== 117653 -IGPFqQ== 117654 -INqv2LHZhQ== 117655 -5LyP 117656 -44Gr44GZ44KL 117657 -LdCk 117658 -INmC2YU= 117659 -IG9sYWNhxJ8= 117660 -5p2l5LqG 117661 -5oub6IGY 117662 -INCd0LDRgdC10LvQtdC90L3Rjw== 117663 -IOyYgeyWtA== 117664 -IOatpA== 117665 -INio2K/Zhg== 117666 -27LbuA== 117667 -0L7RgNCw0YLQuNCy 117668 -77yz 117669 -IG5lYnlsbw== 117670 -INGD0YfQuNGC 117671 -5p2c 117672 -INC00LDQvdGW 117673 -IHNwb3TFmWVi 117674 -44O844OG44Kj 117675 -0LXQvdC90YPRjg== 117676 -6rmM7JqU 117677 -dmVt 117678 -UMWZw60= 117679 -IHlhbmRhbg== 117680 -6byT 117681 -INiv2LPYqtmI2LE= 117682 -IGhhZmlm 117683 -aMWv 117684 -IHbDocW+ 117685 -IOyVhOyngQ== 117686 -2Y/YsQ== 117687 -INC70LA= 117688 -66CJ 117689 -4Liy4Lib4Lij4Liw 117690 -bMSxa2xhcg== 117691 -INGB0YLQsNC90LTQsNGA0YI= 117692 -4Lit4LmD4Lir 117693 -5aW0 117694 -INC+0YLQvw== 117695 -4oig 117696 -44O844OA 117697 -Y2jDoXpl 117698 -IOq3uOugh+qyjA== 117699 -b3N0ZWw= 117700 -INCz0LDQu9GD0Lc= 117701 -w6Jr 117702 -0LXRhtGC 117703 -656R7Iqk 117704 -IMSNaXN0 117705 -0YDQsNC90LA= 117706 -IHbhu69uZw== 117707 -IHNlbmk= 117708 -IGfDs2M= 117709 -z4bPjA== 117710 -w6FudQ== 117711 -IMO2dA== 117712 -IHPDs2M= 117713 -44GE44Gu 117714 -INGB0LrQu9Cw0LTQsA== 117715 -0JDRgNGF0ZbQstC+0LLQsNC90L4= 117716 -IOydtOuyiA== 117717 -44K544Gu 117718 -aWxlYmlsaXI= 117719 -772A44O9 117720 -4Li14Lii4LiN 117721 -IM66zrHhvbY= 117722 -IOuvvw== 117723 -5pu05aSa 117724 -xLFzxLFuxLFu 117725 -IEdpw6Ft 117726 -5q2j5byP 117727 -z4POvM+M 117728 -IGFyY2hpdA== 117729 -IO+9sg== 117730 -0YfQsNGO0YLRgdGP 117731 -67KE7KeA 117732 -44Kk44Ok 117733 -6auY5qCh 117734 -6Kiz 117735 -INmF24zaqQ== 117736 -IOaDhQ== 117737 -IHBoYQ== 117738 -5aSq6YOO 117739 -4Lie4Lij4Liw4Lij4Liy4LiK 117740 -2YLZitip 117741 -INGD0LvRg9GH 117742 -0YHRgtCy0YPQtdGC 117743 -IGtlxZ8= 117744 -6auY562J 117745 -IHPhu5tt 117746 -z4HOus61 117747 -zrzOv8+B 117748 -IHrDoXN0dXA= 117749 -b3rDrQ== 117750 -IG1pbGk= 117751 -INC80L7Qs9C70Lg= 117752 -INC30YDQvtC30YPQvA== 117753 -INio2KfYtNuM2K8= 117754 -IGFrY2k= 117755 -INC00YDQsA== 117756 -IM6xz4HOuQ== 117757 -44GL44KJ44Gu 117758 -5a+S 117759 -IFphbWFu 117760 -INGW0LTQtQ== 117761 -IOOAgCA= 117762 -IGtsdQ== 117763 -YWtsxLE= 117764 -4KWH4KSa 117765 -INGB0LLQvtCx0L7QtA== 117766 -2LPYp9mF 117767 -INC+0LI= 117768 -IHVieXQ= 117769 -6YeH55So 117770 -IGRhdnJhbsSxxZ8= 117771 -IG5hYsOtesOt 117772 -INCR0YPQtA== 117773 -IM+J 117774 -INin2YTYsdit 117775 -4Lix4LiV4LiZ 117776 -0LjQvNC1 117777 -INiq2YTZgw== 117778 -2KrZhdi5 117779 -INCw0LTQvNC40L3QuNGB0YLRgNCw 117780 -IHpvcnVuZGE= 117781 -INmG2LPYqNip 117782 -INi12YbYudiq24w= 117783 -INGE0YPQvdC00LA= 117784 -6Y+h 117785 -IHBvdG9t 117786 -INC/0YDQtdGB0YI= 117787 -IHPEsXJhZGE= 117788 -IGF5YXI= 117789 -2KfZgtmE 117790 -5rqq 117791 -INii2YLYp9uM 117792 -INC/0LXRgNC10YXQvtC0 117793 -INC/0YDQsNC60YLQuNGH0LXRgdC60Lg= 117794 -6buD 117795 -INGD0YXQvtC0 117796 -INmF2KrZgQ== 117797 -IHNpeWFzaQ== 117798 -INC/0L7RgtC10L0= 117799 -2Y7ZgQ== 117800 -INCb0YM= 117801 -INC60L7QvdGC0YDQvtC70Yw= 117802 -INGB0LrQsNC30LDRgtGM 117803 -4KWA4KSV4KSw4KSj 117804 -5YWo55CD 117805 -27Lbtg== 117806 -IHRvdG8= 117807 -INmI2K8= 117808 -44K/44Kk44OX 117809 -5ZyN 117810 -5byV55So 117811 -77yj 117812 -6Iq4 117813 -5LuL57uN 117814 -INGC0LXRgNGA0LjRgtC+0YDQuNC4 117815 -5pel44Gr 117816 -bcOtdA== 117817 -YW3EsXo= 117818 -7J207Ja0 117819 -IHlhcsSxxZ8= 117820 -IGfDvGM= 117821 -IM+HzrE= 117822 -4Lix4LiZ4Lii4Liy4Lii4LiZ 117823 -44KS6KGM 117824 -IG1pbGxp 117825 -IOePvg== 117826 -S2R5xb4= 117827 -bWF6b24= 117828 -67O064K06riw 117829 -INGC0YDRg9C00L7Qsg== 117830 -6aO+ 117831 -INCy0LjQvdC40Lo= 117832 -INmI2LLYp9ix2Ko= 117833 -6YeM55qE 117834 -0LzQsNC3 117835 -IFJVUw== 117836 -0LXQutGC0YM= 117837 -INi52KfYtA== 117838 -IGtvbmNl 117839 -44KI44GG44Gn44GZ 117840 -INC80LDQu9GL0Yg= 117841 -bWVuaQ== 117842 -0LXRgdCw 117843 -2KfYttuM 117844 -IGJyYXQ= 117845 -INCy0ZbQtNC90L7RgQ== 117846 -zrjOtc+B 117847 -INCn0LXQvA== 117848 -5pGH 117849 -INmF2KfYr9ix 117850 -55So5ZOB 117851 -INmF2K3Yp9mB2Lg= 117852 -IG15xaE= 117853 -2KzYuQ== 117854 -IGlzaW0= 117855 -5rOK 117856 -xLFsbWF6 117857 -IM6bzrE= 117858 -5a+p 117859 -IGF5xLFy 117860 -0LXQvdC40LzQuA== 117861 -4KWH4KS54KSk4KSw 117862 -5ZyG 117863 -44G+44Gj44Gf 117864 -55Si5ZOB 117865 -INGW0L3RhNC+0YDQvNCw0YbRltGX 117866 -IHThu6c= 117867 -4Liq4Lih4Lia 117868 -IHN0xZk= 117869 -IOuwnO2RnA== 117870 -0LDRgNGM 117871 -IENhbw== 117872 -zqHOmQ== 117873 -4LiB4Liy4Lij4LiI 117874 -INC/0L7QtNGD0Lw= 117875 -5LuV5LqL 117876 -INCa0YDQvtC80LU= 117877 -IOyXlA== 117878 -INGD0LTQsA== 117879 -INCw0LLRgtC+0LzQsNGC0Lg= 117880 -IOC4hOC4k+C4sA== 117881 -IEtpxZ8= 117882 -INGB0L7RgdGC0L7Rj9C90LjQtQ== 117883 -bGlzaQ== 117884 -IOuWqOyWtA== 117885 -b290YmFsbA== 117886 -IO2NvA== 117887 -INC70LjQvA== 117888 -IMOnZXLDpw== 117889 -2YjZhNmK2Yg= 117890 -IHNsb8W+ 117891 -IOuovA== 117892 -4Lij4Lit4LiH 117893 -0YjQtdC1 117894 -4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm 117895 -44GT44Gh44KJ 117896 -0L7RgNGL 117897 -54Of 117898 -wqBG 117899 -0LDQvdC+0LPQvg== 117900 -2KvbjNix 117901 -54+N 117902 -5biC5aC0 117903 -dsSbZG9t 117904 -7LKo67aA 117905 -IOyCrOqxtA== 117906 -776M 117907 -4LmD4LiZ4Lin 117908 -IHp2bMOhxaF0 117909 -z4TOtc+F 117910 -INC60LDQutC40LU= 117911 -z4bOv8+Bzqw= 117912 -5YSE 117913 -IHpwxJt0 117914 -7ZWc7YWM 117915 -IHp2b2w= 117916 -IOeX 117917 -0YDQsNC90LXQvdC40Y8= 117918 -INiz24zYp9iz2Ko= 117919 -INCa0L7Qu9C4 117920 -INC+0YDQs9Cw0L3QuNC30LzQsA== 117921 -INGP0L3QstCw0YDRjw== 117922 -INiv2KfYr9mG 117923 -0L/RgNCw 117924 -77yM5LuW5Lus 117925 -5pGY6KaB 117926 -IHF14bqnbg== 117927 -2YrZiNmG 117928 -INCy0LjRhdC+0LI= 117929 -wqDguYDguJQ= 117930 -INC10LvQtdC8 117931 -ZWJpbGVjZWs= 117932 -INC00L7Rhw== 117933 -INCx0LvQsNCz 117934 -INGP0Lk= 117935 -YWRuw60= 117936 -IHrDoXJvdmXFiA== 117937 -ZW5zdHbDrQ== 117938 -4oCM2KfZhg== 117939 -44GV44KT44Gv 117940 -L3w= 117941 -INin2YTYudin2YXYqQ== 117942 -6aC8 117943 -INiu2K/Yp9mI2YbYrw== 117944 -0L3QsNC8 117945 -INGB0LvQuNC3 117946 -5raJ 117947 -4Lij4Lip 117948 -ZcWfdGly 117949 -INmG2K/Yp9ix 117950 -4Lij4Liy4LiE 117951 -6KiA44KP 117952 -IOit 117953 -INC60YDQuNGC 117954 -INCy0L7Qt9C00YPRhdCw 117955 -IOCkl+CkpA== 117956 -IHByw6F2bw== 117957 -4KWL4KS34KSj 117958 -IHPhuq9w 117959 -7Y+t 117960 -INi12LHZgQ== 117961 -INix2KfbjNqv2KfZhg== 117962 -INC+0YLQug== 117963 -64aT 117964 -INGB0LXQutGA0LXRgg== 117965 -xLBu 117966 -b25hdmly 117967 -IFZ5cw== 117968 -IGJhxZ9sYXQ= 117969 -IE11aGFt 117970 -INC70LjRgdGC0L7Qvw== 117971 -IFRpY2FyZXQ= 117972 -IGFkbGFuZMSxcg== 117973 -INCU0LzQuNGC 117974 -z4POvM6/z40= 117975 -5L61 117976 -7Iuc64qU 117977 -4LmB4Lib4Lil4LiH 117978 -xLFuxLF6YQ== 117979 -LdCz 117980 -0LjRh9C90L7Rlw== 117981 -0YPRgNC4 117982 -VVo= 117983 -7Jug 117984 -INiq2KjYr9uM2YQ= 117985 -5rqr 117986 -INGA0LDQvNC60LDRhQ== 117987 -IG7DqXQ= 117988 -5rK/ 117989 -IHJvesWhw60= 117990 -IOCkuOCkqg== 117991 -INGC0LDQutC1 117992 -0YDQsNGH 117993 -INin2YTZgtiv 117994 -7ZWZ6rO8 117995 -0YPQstCw0L3QvdGP0Lw= 117996 -IG3DoW0= 117997 -66Gv 117998 -4b2Q 117999 -IGV0a2lsaQ== 118000 -INin2LHYqtmB 118001 -IHRlY2hub2xvZw== 118002 -IOy9mA== 118003 -INiq2YPZitmK2YE= 118004 -IHDFmWVjZQ== 118005 -5a625bqt 118006 -IOOBjw== 118007 -4pS0 118008 -7YG8 118009 -IM6czqw= 118010 -4LmA4LiV4Lij 118011 -INGB0YLQsNC90L7QstC40YLRgdGP 118012 -56uL44Gh 118013 -IOmWiw== 118014 -IMSweWk= 118015 -IG7Em2t0ZXLDqQ== 118016 -INGA0L7QsdC+0YI= 118017 -IMSQxrDhu51uZw== 118018 -INin2YTYp9is 118019 -IHNwZWNp 118020 -54m55Yir 118021 -5a2d 118022 -4oCM2q/YsA== 118023 -YWzEscSfxLE= 118024 -INC80LjRgNCw 118025 -7Y6Y7J207KeA 118026 -2K7ZgQ== 118027 -44Kq44Oq 118028 -INiz24zZhQ== 118029 -IOyWtOuKkA== 118030 -0LDQu9GM0L3Rgw== 118031 -0YfQvdC40Lk= 118032 -w7xtw7x6ZGU= 118033 -5pm66IO9 118034 -w71u 118035 -INiq2YLZiNuM2Ko= 118036 -INC/0YDQuNCz 118037 -INCz0YDRg9C/0L/Riw== 118038 -YW3EsQ== 118039 -zrPOv8+N 118040 -0L7RgNGC0YM= 118041 -IEdpYW5n 118042 -xZllbg== 118043 -IG9rb2zDrQ== 118044 -5Lqn5Lia 118045 -INC30Lw= 118046 -IOm+ 118047 -2YrYp9ix 118048 -INin2YTYtNmK2K4= 118049 -0LjRgtC10LvRjNC90YvQuQ== 118050 -INin2YfZhQ== 118051 -INio2KfZhNix2YrYp9i2 118052 -INm+24zYp9mF 118053 -IGtyZWRp 118054 -IEFyYXA= 118055 -INGA0LDQsQ== 118056 -INC90LXQutC+0YLQvtGA0YvRhQ== 118057 -INit2KfZgdi42Yc= 118058 -0LjRgtC10LvRjNC90L7Qs9C+ 118059 -IGdlcmVrbWVrdGVkaXI= 118060 -IERlbml6 118061 -INiq2YTYp9i0 118062 -c3RhZ3JhbQ== 118063 -w6F2a3k= 118064 -5Yqg5YWl 118065 -b3pvcg== 118066 -IGR1cnVtdW5kYQ== 118067 -IO2PieuLuQ== 118068 -IOu0iQ== 118069 -IHBlbsSb 118070 -2q/Yp9mG24w= 118071 -IEt1cA== 118072 -INGG0LXRgA== 118073 -dWxtYXPEsQ== 118074 -4pGg 118075 -INGB0ZbRh9C90Y8= 118076 -xLFtxLF6YQ== 118077 -5a6a55qE 118078 -wqDRgg== 118079 -5Yqe5YWs 118080 -7Jy864uI 118081 -INin2YTYpdmG 118082 -IOeD 118083 -44CN77yM 118084 -0ZfQvdCw 118085 -INC/0YDQuNCz0L7RgtC+0LLQu9C10L3QuNGP 118086 -0IU= 118087 -INGB0L7Qu9C9 118088 -IOu2gOyCsA== 118089 -5oW2 118090 -44K+ 118091 -dm9qZQ== 118092 -24zYr9mG 118093 -7IOd64uY 118094 -57mB 118095 -w6FkdQ== 118096 -Ojo6Ojo6Ojo6Ojo6Ojo6 118097 -2LPZhtqv 118098 -6ZSL 118099 -INC30LLQuNGH0LDQuQ== 118100 -5aeU5ZGY5Lya 118101 -IM68zq3Pg86x 118102 -INGA0L7QttC00LXQvdC40Y8= 118103 -5oiQ5Lq6 118104 -IGTDrWw= 118105 -INCU0L7QsQ== 118106 -IOC5g+C4ig== 118107 -z4DOrw== 118108 -Z2FtYmVy 118109 -INmI24zamNqv24w= 118110 -IOiKsQ== 118111 -IGLDoHk= 118112 -INC20L7QstGC0L3Rjw== 118113 -5YWs5byA 118114 -INGC0L7Rh9C60Lg= 118115 -44GC44Gu 118116 -0LDQu9GW0LI= 118117 -IGNoYXJha3Rlcg== 118118 -IM6SzrE= 118119 -IHprdcWhZW4= 118120 -IOCkreCkl+CktQ== 118121 -0YfQuNC60LA= 118122 -4KWA4KSC4KWk 118123 -6KOP 118124 -5ZGK6K+J 118125 -aXlhdMSx 118126 -INGG0LXQu9GM 118127 -IOyKiA== 118128 -0LDRgNC0 118129 -IMOcbGtl 118130 -IHByb3NpbmNl 118131 -INmG2q/Yp9mH 118132 -44CM44GK 118133 -zp/OpA== 118134 -7ISc64qU 118135 -2Yjar9ix 118136 -2LbYp9mG 118137 -IGTFr3NsZWQ= 118138 -55C0 118139 -4LiV4Liz4LmB4Lir4LiZ 118140 -0LrRgtGW0LI= 118141 -bMOhZMOh 118142 -4b+G 118143 -IERvxJ91 118144 -44GR44KM44Gw 118145 -55uu44KS 118146 -IOebtA== 118147 -5puw 118148 -INCy0YLQvtGA0L7QuQ== 118149 -INCz0LvRgw== 118150 -IOydvQ== 118151 -6riw7KSA 118152 -IG1hZGRl 118153 -IGplZG7DqQ== 118154 -INC+0YTRlg== 118155 -7Iud7J2E 118156 -IGNow7p0 118157 -5Ye644GX44Gf 118158 -0LjRh9C10YHQutCw0Y8= 118159 -INC70L7Qug== 118160 -IGFsdMSx 118161 -65Oc64qU 118162 -ZXlnYW1iZXI= 118163 -INGB0LLQvtC1 118164 -IHRhxZ/EsW0= 118165 -INGC0L7RidC+ 118166 -IGdlw6d0aQ== 118167 -IHByZW1p 118168 -IE1laG1ldA== 118169 -77yM5Zug5q2k 118170 -zq/Ous63 118171 -IMO2bmNla2k= 118172 -IOCkleCkqA== 118173 -INGC0LXQvNC/0LXRgNCw0YLRg9GA0LA= 118174 -6Zi0 118175 -IOyWvOuniA== 118176 -2LTYqA== 118177 -w6FreQ== 118178 -44CAVg== 118179 -0LLQvtGA0LXQvdC90Y8= 118180 -bGFzeW9u 118181 -INC00L7QutCw0Lc= 118182 -IOucuw== 118183 -INC+0LHQu9C40Yc= 118184 -zpnOkc6a 118185 -INGA0LDQt9C0 118186 -77yM5Li6 118187 -5a69 118188 -IGtvcnVt 118189 -5ZWK5ZWK 118190 -IMWZZWtsYQ== 118191 -44OX44Os 118192 -INCy0LDRgNGC 118193 -INC/0YDQvtCx0LvQtdC80Ys= 118194 -IOS9oA== 118195 -IHRoxqFt 118196 -IHRha292w6k= 118197 -0LvQtdC90Ys= 118198 -IOWItg== 118199 -IGppbsO9Y2g= 118200 -INmG2LU= 118201 -INCz0YDRg9C00L3Rjw== 118202 -IOOBlw== 118203 -0LjRgtC10LvRjNC90L7QuQ== 118204 -INin2K3YqtmF 118205 -0Y7RgA== 118206 -z4bPhQ== 118207 -INi02YXYp9mE24w= 118208 -IOy7tA== 118209 -YWNhxJ/EsXo= 118210 -7KeA66eJ 118211 -INGE0LjQvdCw0L3RgdC+0LI= 118212 -IOq3uQ== 118213 -INqG24zYstuM 118214 -4KWA4KSb 118215 -2LXYp9iq 118216 -4KS+4KSo4KSu 118217 -INCy0L7Qt9C80L7QttC90L4= 118218 -6KiO 118219 -54Sm 118220 -INin2YTYqNmE2K8= 118221 -IOeUs+WNmg== 118222 -56Wl 118223 -IOuwlOudvA== 118224 -2q/bjNix 118225 -27XbsA== 118226 -zrzOuc6/z4XPgc6z 118227 -IHDFmWVkc2Vk 118228 -57uP6JCl 118229 -5aeR 118230 -ZW1leQ== 118231 -INmG2YjZgQ== 118232 -5b69 118233 -IHByw6F2YQ== 118234 -INCy0L7QvtCx0YnQtQ== 118235 -IO2LsA== 118236 -INio2KPZhg== 118237 -IEZyYW50aQ== 118238 -IFBhxZ9h 118239 -INm+2LPYqg== 118240 -a8Oibg== 118241 -INGB0LjQs9C9 118242 -IGThuqdu 118243 -5pCc 118244 -IHJva3k= 118245 -2YPZiNix 118246 -IM6Uzq4= 118247 -0LDQu9C40LfQsNGG0LjQuA== 118248 -5Lyg5aWH 118249 -xLFkYQ== 118250 -bMOtYg== 118251 -INGA0ZbQstC90Y8= 118252 -INC90L7Rjw== 118253 -YsSbaHU= 118254 -4Li04LiH4Lir4Liy4LiE4Lih 118255 -77yM5Y20 118256 -INGH0LXRgQ== 118257 -bGFubcSxxZ90xLFy 118258 -IMaw4bubYw== 118259 -w6F2YWPDrQ== 118260 -4Li14Lis4Liy 118261 -zrTOrQ== 118262 -4oCM2LTZiNmG2K8= 118263 -INGA0L7QsdGW0YI= 118264 -IOW3tA== 118265 -IE1ldg== 118266 -INmF2LHYrdmE2Yc= 118267 -INCy0LfRgNC+0YE= 118268 -572a 118269 -INio2KfZhNmF 118270 -INC40LfQs9C+0YLQvtCy 118271 -IFNwb3I= 118272 -5YSA 118273 -INin2YTYo9mG 118274 -4LmI4Liy4LiH4LiB 118275 -0LvQsNGB0YLQuA== 118276 -zp/Omg== 118277 -INqp24w= 118278 -5ZG95Luk 118279 -2K3Yr9ir 118280 -2YrZg9mK 118281 -INC/0LXRgNCy0YvQuQ== 118282 -44K544Kz 118283 -IMWhcGF0 118284 -IG5pa2Rv 118285 -4Lix4LiH4Lih 118286 -6LWr 118287 -5pio 118288 -INCy0YPQu9C4 118289 -INCa0LA= 118290 -4LmI4Lil4Liw 118291 -IHNhbW90 118292 -INC+0LHQtdGB0L/QtQ== 118293 -INmF2LnYsdmB24w= 118294 -INmF2K3YtdmI2YTYp9iq 118295 -0LLQsNC90L7Qsg== 118296 -INmF2LPYqtmC24zZhQ== 118297 -5aKZ 118298 -wqDQmg== 118299 -INC00L7Rgg== 118300 -emlt 118301 -2ZDYsQ== 118302 -INi02Yg= 118303 -5Zyo5Zyw 118304 -IOeOsA== 118305 -IOWMlg== 118306 -2LLZiA== 118307 -IHlheWfEsW4= 118308 -INC+0YDQuNCz 118309 -2Y/Zhg== 118310 -IGV2cm9w 118311 -IO+9nA== 118312 -IOuFuOy2nOuTseuhnQ== 118313 -5Yed 118314 -0LvQtdC90L3Ri9GF 118315 -IGplbm9t 118316 -INCn0YLQvtCx0Ys= 118317 -IOyXhuuLpA== 118318 -IOyXrOyEsQ== 118319 -IHJlc21p 118320 -aW3DoWxuw60= 118321 -55uu44Gu 118322 -c2lhbg== 118323 -LdC90LjQsdGD0LTRjA== 118324 -zr/Oug== 118325 -54us56uL 118326 -xZ9laGly 118327 -5ZCQ 118328 -5Yi26YCg 118329 -IM6UzrXOvQ== 118330 -44OL44Ol 118331 -0LjRgtC10LvRjNC90YvRhQ== 118332 -INmD2KfZhQ== 118333 -z4HOug== 118334 -IHJhdQ== 118335 -INGB0LzQtdGA0YLQuA== 118336 -IM+Mz4TOsc69 118337 -IFThuqFp 118338 -INix2Kg= 118339 -zrXOvc6/ 118340 -2LHYr9iv 118341 -IOC4geC4o+C4sA== 118342 -z4POvM6/ 118343 -IOa8lA== 118344 -4Li04LiI4LiB4Lij4Lij4Lih 118345 -INGA0LDQt9Cy0Lg= 118346 -44K544Oa 118347 -0ZbRh9C90L7Rlw== 118348 -bMOhxaFlbsOt 118349 -2KfYqNi52Kk= 118350 -b3bDvW1p 118351 -0LDQvdCz 118352 -INC60LDQv9GW0YI= 118353 -44CB4oCL 118354 -7ZaI642Y 118355 -INGD0YHRlg== 118356 -4Lii4Liy4Lin 118357 -2KPZhQ== 118358 -44Op44OD44Kv 118359 -IOuV 118360 -INiz2YbZiNin2Ko= 118361 -INGB0YLQsNGC0YzQuA== 118362 -0ZfRhQ== 118363 -z4HOv8+Hzq4= 118364 -INij2YPYqtmI2KjYsQ== 118365 -bGFubWE= 118366 -IG1hbHplbQ== 118367 -56Oo 118368 -INCx0L7QutGD 118369 -5a2X5bmV 118370 -INC+0YDQs9Cw0L3RltC30LA= 118371 -44Op44Kk44Oz 118372 -INmF2LnYr9mG 118373 -55S35a2Q 118374 -IOaC 118375 -4bq+ 118376 -IG1lemluw6E= 118377 -0LjQstCw0Y7Rgg== 118378 -INi32KjbjNi524w= 118379 -6JmR 118380 -4KSf4KSw 118381 -INC/0L7QtNGB 118382 -IMWfYcWf 118383 -4LiZ4LmG 118384 -IMWhcA== 118385 -dsSbxZk= 118386 -0LfRjA== 118387 -652866eI 118388 -4Li44LiY 118389 -4oCm2Lc= 118390 -66as7KeA 118391 -4oSW4oSW4oSW4oSW 118392 -IGLhu6lj 118393 -IFNwb2o= 118394 -INC40YHQv9C+0LvRjNC30L7QstCw0L3QuA== 118395 -5bem5Y+z 118396 -ZW5sZXI= 118397 -INC+0YnRg9GJ 118398 -INC+0LHQu9GW 118399 -2LjLhg== 118400 -2YTbjNiz 118401 -5o+Q5Y2H 118402 -INCz0L7QstC+0YDQuNGC0Yw= 118403 -IGvDvHI= 118404 -IM67zrXOuc+Ezr/Phc+BzrM= 118405 -0LvQsNCz0LA= 118406 -INGB0YPQtNGD 118407 -IOy4oQ== 118408 -zrjOtc+Dzrc= 118409 -INC90LXQvQ== 118410 -IGJpw6dpbWRl 118411 -0YbRltC50L3QvtGX 118412 -4LmA4LiE4Lii 118413 -IERhbMWhw60= 118414 -INC40LzQtdGC0Yw= 118415 -6IuX 118416 -INmF2LnYsdmI2YE= 118417 -IHThuqFw 118418 -IG1lxZ8= 118419 -wqBO 118420 -0L7RgNC+0L3QuA== 118421 -2LnZgQ== 118422 -4LmC4Lij4LiH4LmA4Lij 118423 -4pSs 118424 -IOC5gOC4nuC4o+C4suC4sA== 118425 -IOiPsuW+i+Wuvg== 118426 -0YHRgtCy0LXQvdC90L7QtQ== 118427 -INin2LLYr9mI2KfYrA== 118428 -INGE0LXQsg== 118429 -6aC7 118430 -IOC4quC4pQ== 118431 -4LiV4Lit4LiZ 118432 -IOq4sOqwhA== 118433 -5L2p 118434 -z4TOt869 118435 -64Ks64uk 118436 -IFF1eQ== 118437 -IOu2mQ== 118438 -INCh0YPQtA== 118439 -0LjQtg== 118440 -IOC5gOC4geC4oQ== 118441 -INGB0LLRj9GC 118442 -ZXRvb3Ro 118443 -zrXPgc6/ 118444 -2YTZhdip 118445 -2LTZiNix 118446 -IGRvbXU= 118447 -6I2S 118448 -bcOu 118449 -64+E66W8 118450 -INGA0LXQutC+0LzQtdC90LTRg9C10YLRgdGP 118451 -IHNvbnJhc8SxbmRh 118452 -INC00L3RltCy 118453 -IMOnYWw= 118454 -44Kr44OG44K044Oq 118455 -INC10LY= 118456 -IOyViQ== 118457 -6Imy55qE 118458 -4oCZbmRl 118459 -IM+Az4nPgg== 118460 -INGH0LXRgtCy0LXRgA== 118461 -a2lsaQ== 118462 -5oCn6IO9 118463 -2KfYr9mK2Kk= 118464 -57qv 118465 -INin2YTYqti0 118466 -INGC0LXQu9Cw 118467 -INC+0LHRitC10Lw= 118468 -5bKX5L2N 118469 -IGtvbmtyw6l0 118470 -IGFyYWRh 118471 -7Iuc7JeQ 118472 -IG9yYW7EsQ== 118473 -2LHZgw== 118474 -0JvQkA== 118475 -IG3DqW7Emw== 118476 -2KzZiNuM 118477 -IHbhu6M= 118478 -IEFuZ2lvc3Blcm1hZQ== 118479 -6IOO 118480 -IGjDtG4= 118481 -5LqL5qWt 118482 -INC+0YLQstC10YA= 118483 -IHNyZA== 118484 -xaFsaQ== 118485 -4Liq4LiB 118486 -5ryP 118487 -INi02LHYrQ== 118488 -0YbRj9C80Lg= 118489 -IHNsYXY= 118490 -IGNlbnk= 118491 -4Lit4LmA4Lij 118492 -INmI2YTYrw== 118493 -INC60L7RgNCw 118494 -INCx0YDQvtC9 118495 -Oi46LjouOi46 118496 -IG5lbXVz 118497 -6L+Z5qC355qE 118498 -INio2LHZhtin2YXYrA== 118499 -IMO6cGxuxJs= 118500 -4Li14LiZ4Liy4LiE4Lih 118501 -IOuwm+yVhA== 118502 -zrzOtc+BzrE= 118503 -57yp 118504 -IG7huq9t 118505 -INC+0LHRitGP0YE= 118506 -INC60L7QvdGC0YDQvtC70Y4= 118507 -w6F2YWrDrWPDrQ== 118508 -IGt1bQ== 118509 -55S35Lq6 118510 -IHZuaXTFmQ== 118511 -INio2K/Zhw== 118512 -INij2KjYsdmK2YQ= 118513 -5Lq65rCR5YWx5ZKM5Zu9 118514 -IHlhcMSxbMSxcg== 118515 -IG5hxaHDrQ== 118516 -44O844Ot 118517 -IHThuqFt 118518 -IGhlbsO8eg== 118519 -IHplbWk= 118520 -IGtow6FuZw== 118521 -5YWs5YWx 118522 -IOiAgQ== 118523 -INi52YjYp9mF2YQ= 118524 -wqBW 118525 -4LmJ4LmB4LiB 118526 -zqzOvc+EzrE= 118527 -INGC0YDQsNCy0L3Rjw== 118528 -IM63zrzOrQ== 118529 -6LS4 118530 -4Liq4LiU 118531 -INiz2YXYqg== 118532 -INiu2KfaqQ== 118533 -INGC0LDQutC40Lk= 118534 -IGV0dGlr 118535 -IM+Mzrs= 118536 -INC/0L7Qu9C4 118537 -INC90L7Qtg== 118538 -2LrYp9mG 118539 -2YbYr9mK 118540 -IMSNdHnFmWk= 118541 -IFBoxrDGoW5n 118542 -INmI2LHYsti0 118543 -44GE44GL 118544 -cnbDqQ== 118545 -IOCkpOCksOCkqw== 118546 -IOCkqOCkl+CksA== 118547 -bWFzxLFuZGE= 118548 -0LXQstC40Yc= 118549 -dmXFmWVq 118550 -5L+d5oyB 118551 -5oqA6IO9 118552 -5o6o6I2Q 118553 -bMOibQ== 118554 -IM+N 118555 -5aKe6ZW/ 118556 -INin2LXZgdmH 118557 -INCX0LDQutC+0L3Rgw== 118558 -INCf0YDQtdC3 118559 -IHBvZHBvcg== 118560 -6riw7YOA 118561 -IO2PkA== 118562 -IOuLiA== 118563 -bGFyxLFuxLF6 118564 -44OW44Ot 118565 -INGE0YDQsNC90YbRg9C3 118566 -44OK44O8 118567 -IGJlbGVk 118568 -4Lix4LiZ4Lin4Liy4LiE4Lih 118569 -INmB2LHZiA== 118570 -0YTRgNC+0LI= 118571 -IOydtOufrA== 118572 -xrDhu6N1 118573 -IOqzteyLnQ== 118574 -IGJpcmRlbg== 118575 -INC30LXQu9C10L0= 118576 -55KD 118577 -IGjhu5NuZw== 118578 -IMWha29sYQ== 118579 -INGB0LDQvNC+0Lw= 118580 -YW5sxLFr 118581 -56m66Ze0 118582 -5Y2X55yB 118583 -0LvQtdGA0LM= 118584 -0ZbQt9C90LXRgQ== 118585 -wqBB 118586 -44CN44KS 118587 -IGtlbmRpbmU= 118588 -INin2YjZhg== 118589 -44CU 118590 -IM6jz40= 118591 -4LmA4LiE4Lil 118592 -5aW2 118593 -44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA 118594 -IMO6xI1ldA== 118595 -0YPQu9Cw 118596 -6YCa5L+h 118597 -IOymkA== 118598 -Lg0KCg== 118599 -INCc0LXQtA== 118600 -2KfYudmK 118601 -IGplaG/Fvg== 118602 -IEfDvG5leQ== 118603 -IM6Rz4DOvw== 118604 -INC/0L7Qu9GW 118605 -w7xtZQ== 118606 -aG9kb2I= 118607 -IM6dzrE= 118608 -INii2YTYp9iq 118609 -IHDFmWl6 118610 -IHRhdnM= 118611 -INiq2KjZhNuM 118612 -44Oz44OU 118613 -2K7Ysdis 118614 -INCw0LrQutGD 118615 -IMO6cHJhdg== 118616 -INin2K3Ys9in2LM= 118617 -7Lm06528 118618 -xLFtxLF6xLE= 118619 -INC00L7QutGD0LzQtdC90YI= 118620 -INin2LXZhA== 118621 -2LjZhw== 118622 -IOyduOqwhA== 118623 -INis2LHbjNin2YY= 118624 -zqXOnQ== 118625 -0YfQtdGB0LrQsNGP 118626 -2YrZhtmK2Kk= 118627 -5ZKo 118628 -5peF5ri4 118629 -IOC4iOC4s+C4meC4p+C4mQ== 118630 -INCw0L3Qsw== 118631 -z4XPhw== 118632 -6Jmr 118633 -INmF2YLYsQ== 118634 -INmF2YjYs9uM2YLbjA== 118635 -dXR1dA== 118636 -INCb0LU= 118637 -INCf0ZbRgdC70Y8= 118638 -44Kt44O8 118639 -4Li44Lil4Liy4LiE4Lih 118640 -5Yeh 118641 -z4DOv8+N 118642 -IMOWZMO8bA== 118643 -z4POug== 118644 -INGG0Y4= 118645 -0YvQstCw0Y8= 118646 -772e772e 118647 -INi02YXYp9mE 118648 -6L+F 118649 -INio2YTaqdmH 118650 -546b 118651 -IOyngOuCmA== 118652 -INmB2qnYsQ== 118653 -INGB0YLQtdC/0LXQvdC4 118654 -INC90LDRg9C60Lg= 118655 -54mp55CG 118656 -xJtsZQ== 118657 -INC+0YHQutGW0LvRjNC60Lg= 118658 -INC60YPQu9GM0YLRg9GA0Lg= 118659 -6ICD6K+V 118660 -IG1hdGVyacOhbA== 118661 -INGB0YLQstC+0YDQtdC90L3Rjw== 118662 -IOCkheCkpg== 118663 -5o+Q5Ye6 118664 -IOipleS+oQ== 118665 -2ZLYrw== 118666 -IOunjOuTpOyWtA== 118667 -ZHXEn3VudQ== 118668 -2YrZhtmH 118669 -5ZOm 118670 -0L7Rh9C90YvRhQ== 118671 -INmF2LY= 118672 -aXNtdQ== 118673 -INGH0LDQuQ== 118674 -2YjYsdmI2Kg= 118675 -INCw0L3Qs9C7 118676 -b8SfdW5sdWs= 118677 -INC/0YDQtdC00L/QvtC7 118678 -IM6tz4nPgg== 118679 -4Liq4LiW 118680 -IM6VzrvOu86szrTOsQ== 118681 -IEJpbGc= 118682 -INio2KfYqg== 118683 -INCb0YzQstGW0LI= 118684 -IHlhcMSxbG1hc8Sx 118685 -5qOA5p+l 118686 -5pWw5a2m 118687 -IDouOg== 118688 -IOeOqQ== 118689 -zprOsQ== 118690 -4LmA4LiX4LiE4LmC4LiZ4LmC4Lil4Lii 118691 -INiz2KfYrtiq2YXYp9mG 118692 -IOyGjOumrA== 118693 -6by7 118694 -IHNtcg== 118695 -IOuLpOyWke2VnA== 118696 -IGplZG7DoW7DrQ== 118697 -IHNlcnZpc2k= 118698 -IGV5bGVt 118699 -INC80LDQu9C4 118700 -IHbDvWhvZA== 118701 -6Zmk5LqG 118702 -INC/0L7RgNGP0LTQutGD 118703 -IG5vdsO9 118704 -5aSV 118705 -INC90LXQutC+0YLQvtGA0YvQtQ== 118706 -IF57fQ== 118707 -zrPPic6z 118708 -0YPRiNC60Lg= 118709 -IHBzaWs= 118710 -IO2UhOumrA== 118711 -2LTYp9ih 118712 -INCy0LDQvQ== 118713 -INiz2YPYp9mG 118714 -56K8 118715 -IM6czrc= 118716 -INGD0YDQvtCy0LXQvdGM 118717 -44K144O8 118718 -INin2YTYqNit2LE= 118719 -IGRuw60= 118720 -4LiB4Liy4Lij4Lio 118721 -ZWRpxJ9p 118722 -IGJlbGlybGk= 118723 -2YvYjA== 118724 -IHphbcSbc3RuYW4= 118725 -5p+x 118726 -2KfZgdmK 118727 -IGjhuqNp 118728 -5oCd5oOz 118729 -IG5lbGVy 118730 -INix2LPZhduM 118731 -0YHQtdGA 118732 -44GT44Go44Gn 118733 -IFrDoWtsYWRuw60= 118734 -0LvQvtCy0LA= 118735 -0LrRgtGD 118736 -2YjYs9mB 118737 -0ZbQsdC70ZY= 118738 -zII= 118739 -0YDQtA== 118740 -6Zmz 118741 -5o23 118742 -IHlhxZ9heWFu 118743 -4KWB4KSa 118744 -0ZbRgtGC0Y8= 118745 -IGLhu4E= 118746 -64KY6528 118747 -INC80Y/RgQ== 118748 -IHtbJQ== 118749 -zrjOsQ== 118750 -INC00L7Qt9Cy0L7Qu9GP 118751 -IOWQhA== 118752 -INCf0LXRgNCy 118753 -IFNhxJ9sxLFr 118754 -0YHRgtC+0YDQuNGP 118755 -IGJ1bmxhcg== 118756 -IHPhu5U= 118757 -4KS84KWN 118758 -IOWIqQ== 118759 -INGB0L/QvtGB 118760 -IHlhcHTEsXI= 118761 -IHTGsOG7nW5n 118762 -2YjZhtip 118763 -INC10L8= 118764 -44Gn44GN44Gq44GE 118765 -2YHYqtmF 118766 -INCT0L7Quw== 118767 -7ZWY7KeA66eM 118768 -IOynhOynnA== 118769 -IG9iamVkbg== 118770 -INC40LfQvNC10L3QtdC90LjRjw== 118771 -5aWz5Lq6 118772 -INC/0LvQsNC90Lg= 118773 -IEZha8O8bHQ= 118774 -IHR6dg== 118775 -INC+0LHRj9C30LDRgtC10LvRjA== 118776 -INCx0LvQuNC30YzQutC+ 118777 -cmFzxLE= 118778 -IM61z4DOr8+DzrfPgg== 118779 -INGE0LDQutGC0Lg= 118780 -IMSQ4bq3Yw== 118781 -IEFsdMSxbg== 118782 -0LvQuNGC 118783 -INC70ZbRgQ== 118784 -54mn 118785 -INC/0YPRgdGC 118786 -INC60L7QvNGW0YE= 118787 -5L+d6Zqc 118788 -5YW35L2T 118789 -LdGC 118790 -IHRyaHU= 118791 -IOKJiA== 118792 -INC00LXQutCw0LHRgNGP 118793 -INGE0L7RgNC80Ys= 118794 -Tmdvw6Bp 118795 -IGRvaG9k 118796 -2LHZitmD2YrYqQ== 118797 -INii2YXZiNiy2LTbjA== 118798 -IHphasOtbWF2 118799 -IGthdMSxbMSxbQ== 118800 -5LiY 118801 -IGtvbnVt 118802 -INC80L7Rhw== 118803 -44Oz44OV 118804 -0LTQuNCy0LjQtNGD 118805 -IOS6mg== 118806 -IOaS 118807 -zrPPgc6sz4Y= 118808 -44OQ44K5 118809 -INC/0YPQvdC6 118810 -IEJpcmxlxZ9paw== 118811 -IHF1ZW4= 118812 -INCy0LrQsNC3 118813 -4KWH4KS24KSV 118814 -IFl1bmFu 118815 -44Gg44Go 118816 -27Hbudu3 118817 -w6F0eQ== 118818 -INmI2LU= 118819 -INC90LXQs9Cw0YLQuNCy 118820 -44Gk44Gu 118821 -IOWKqA== 118822 -44ON44OD44OI 118823 -INC00ZbQuQ== 118824 -IGJhxZ/EsW5kYQ== 118825 -IHRyxrBuZw== 118826 -IG1ha2lu 118827 -IOaEmw== 118828 -0LzQtdGH 118829 -IOi/kQ== 118830 -2YLYr9ix 118831 -INin2LPYqtin2YbYrw== 118832 -IGluZm9ybWFjw60= 118833 -4KS+4KSw4KSV 118834 -6Kyd 118835 -0YDQsNCx0LDRgg== 118836 -IOetlA== 118837 -IOiHsw== 118838 -INC/0L7Qu9GM 118839 -INmH2YbYsQ== 118840 -64yA67mE 118841 -INiu2KfYsdis24w= 118842 -cmFjdA== 118843 -44CC44GT44KM 118844 -INi02YjYsdin24w= 118845 -0LvQtdC90L3Qvg== 118846 -IGhpc3NldA== 118847 -IGPDoGk= 118848 -INGE0L7RgtC+ 118849 -5oGS 118850 -INC80LXQtNC40YbQuNC9 118851 -0YHRgtCy0ZY= 118852 -INin2YTYudmE 118853 -INC/0LjRgdGM0LzQtdC9 118854 -44CC44G+44Gf 118855 -IHZsYXN0bsSb 118856 -INC/0L7QtNCw 118857 -z4HOv865 118858 -IOyEnQ== 118859 -IOydvOydtA== 118860 -IOybjA== 118861 -0L7QutGB0Lg= 118862 -IG9zb2J5 118863 -0J/QvtGB0LvQtQ== 118864 -INGW0YHRgtC+0YDRltGX 118865 -2LnZhNmJ 118866 -0L3QutCw 118867 -2KrZhdio2LE= 118868 -4KWH4KS54KSw 118869 -IEphbmE= 118870 -2YTZitin2Ko= 118871 -INC80LDRgNGC0LA= 118872 -INCa0LjRlA== 118873 -INGA0L7QsdC+0YLRgw== 118874 -IG5o4bqlbg== 118875 -0LjRgdC70L7Qsg== 118876 -65+t 118877 -IG9kdg== 118878 -IFThu4luaA== 118879 -4oCc6re4 118880 -44G744GG 118881 -6bKc 118882 -0LzQtdGG0Yw= 118883 -4Liy4Lio4Liy4Liq4LiV4Lij 118884 -4KWB4KST 118885 -4Li04LiZ4LiX 118886 -bWFkYQ== 118887 -2LLYp9mF 118888 -INmD2KjZitix 118889 -5a6e5pa9 118890 -emXFiA== 118891 -IGzDoWk= 118892 -z4POvM6x 118893 -2KfYs9in2Ko= 118894 -0YTRgg== 118895 -6LCx 118896 -54yc 118897 -IHByb2LDrQ== 118898 -5pyA6L+R 118899 -0YDQsNC0 118900 -44K944Oz 118901 -INC60LvQsNC0 118902 -4KWc4KSV 118903 -w6l2 118904 -4Lil4Liy4Lii 118905 -6I6O 118906 -IM68zq3Ph8+Bzrk= 118907 -INC60YPRgQ== 118908 -IO2ZmOqyvQ== 118909 -0YfQvtGX 118910 -5Y+Y5YyW 118911 -INio2KrZiNin2YY= 118912 -IHThuq90 118913 -IGfDtnN0ZXJlbg== 118914 -0LDQu9GO 118915 -INC60L7QvNCw0L3QtNC4 118916 -IOy7qA== 118917 -0YPQvdC0 118918 -INis2YTZiA== 118919 -5a2Q55qE 118920 -INGB0LE= 118921 -INCg0LDRgQ== 118922 -UENQ 118923 -IEN1bWh1cmJhxZ8= 118924 -0L7QtNCw0YLQtdC70Yw= 118925 -w61zdG8= 118926 -IG96bsOhbQ== 118927 -44O844OL 118928 -IG9rdXk= 118929 -b3BoeQ== 118930 -4Liy4LiZ4LiE4Lij 118931 -IM6VzrjOvQ== 118932 -YXnEsW0= 118933 -2Y7Yow== 118934 -5o6h 118935 -IGZ1bmtjZQ== 118936 -5pqW 118937 -2LfYp9ix 118938 -INCd0LDQsw== 118939 -IOS4h+WGhg== 118940 -IO2SjQ== 118941 -IOS9jw== 118942 -IO+8jg== 118943 -0YvQstCw0Y7RgtGB0Y8= 118944 -IFBsYQ== 118945 -2KfZitmE 118946 -IOustOyXhw== 118947 -INC60L7QvdC10YfQvdC+ 118948 -0LrQvA== 118949 -4KSC4KSq4KSw 118950 -IOygleu2gA== 118951 -IOuCtOugpA== 118952 -44Kw44Or 118953 -54Gw 118954 -IGN5aw== 118955 -INC20LXQu9GD0LQ= 118956 -IOuGkuydgA== 118957 -55Sf5ZG9 118958 -5rW0 118959 -IGFydMSxxZ8= 118960 -INCH 118961 -77yy 118962 -ZWtpbQ== 118963 -INGE0LXQtNC10YDQsA== 118964 -INCy0LXRgNC10YHQvdGP 118965 -0L3QuNGC0LU= 118966 -IMSwxZ90ZQ== 118967 -INmI2LbYuduM2Ko= 118968 -44GV44G+ 118969 -IHTFmWV0w60= 118970 -dWx1xJ8= 118971 -IEN1bWh1cml5ZXQ= 118972 -5Lyf 118973 -IOunnQ== 118974 -IHZlcm1law== 118975 -IG5hbGV6 118976 -55O2 118977 -IGRpxZ8= 118978 -IEjhu5NuZw== 118979 -2LrZitix2Kk= 118980 -5amG 118981 -0L3QuNCy 118982 -IHLDunQ= 118983 -J25kYQ== 118984 -IGhyb3o= 118985 -4KWJ4KSq 118986 -INC30LDQutC+0L3QvtC8 118987 -IGplZG51 118988 -IEthZMSxbg== 118989 -aW5kaXI= 118990 -2LPYp9iy24w= 118991 -5Yy65Z+f 118992 -IGtvbnXFn3R1 118993 -INiy2YbYrw== 118994 -4KS+Cgo= 118995 -INCQ0Lc= 118996 -4LiH4LiC4Lit4LiH 118997 -INGB0LLQvtC50YHRgtCy0LA= 118998 -IOyeke2SiA== 118999 -0L/QtdC60Lg= 119000 -IOWwsQ== 119001 -0LXQstC+0LPQvg== 119002 -IHRhxZ/EsXk= 119003 -INmF2YbYt9mC2Kk= 119004 -IMOHb2N1aw== 119005 -27Lbtw== 119006 -IM+Dz4XOvM+A 119007 -6aOf5ZOB 119008 -aMOh 119009 -77yv 119010 -2YTZhdmH 119011 -44Go44Gq44Gj44Gf 119012 -0L7RgNGW 119013 -wrB9 119014 -IHRhxZ/EsW4= 119015 -55+/ 119016 -INGH0LDRgdGC0LjQvdC4 119017 -INiv2YrYs9mF2KjYsQ== 119018 -IOiJrw== 119019 -c3TFmcOt 119020 -INGG0LjQug== 119021 -4oCV4oCV4oCV4oCV 119022 -IMSwbmdpbHRlcmU= 119023 -INGB0YLRgNCw0YLQtdCz 119024 -w4TFuA== 119025 -0LjRh9C90L7Qs9C+ 119026 -w61yaw== 119027 -IM6Rz4E= 119028 -IeKAnAoK 119029 -IOq5qA== 119030 -4KWB4KSG4KSk 119031 -INiv2YbbjNin 119032 -bMOtbg== 119033 -IOCkleCkoQ== 119034 -INmF2KjYqg== 119035 -0LXQvNGL0YU= 119036 -0L7QsdC4 119037 -4Lii4LiZ4LiV 119038 -4KSC4KSn4KSo 119039 -2obbjA== 119040 -IOefpQ== 119041 -IFh1w6Ju 119042 -YWRha2k= 119043 -IG9ydGE= 119044 -5qC55pys 119045 -5YWx5ZCM 119046 -0L3QtdC90LjQuQ== 119047 -2KjZitix2Kk= 119048 -562L 119049 -77qU 119050 -4oCM2YfYp9mK 119051 -IMO2ZGVtZQ== 119052 -INii2YbahtmH 119053 -INC30LDRj9Cy0Lg= 119054 -INmG2YLYtNmH 119055 -IOezuw== 119056 -4KWL4KWk 119057 -IOyngOyglQ== 119058 -IGluc3A= 119059 -INGC0LXQvQ== 119060 -INiq2Lc= 119061 -IHF14bqjbmc= 119062 -5Ymj 119063 -44GP44Gu 119064 -INGG0LjQvA== 119065 -a292aQ== 119066 -aXlhaA== 119067 -IOuQnOuLpA== 119068 -2LXZhw== 119069 -IMSRdQ== 119070 -IHN14buRdA== 119071 -xLFtYQ== 119072 -7KeA6rOg 119073 -zIM= 119074 -4Lia4Liy4Lii 119075 -IENlcnRpZg== 119076 -INGD0YHRltGF 119077 -4LiV4Liw4Lin 119078 -zrXOr8+EzrU= 119079 -IA0= 119080 -INC80L7QttC70LjQstGW0YHRgtGM 119081 -IC3igJA= 119082 -IO2YuQ== 119083 -7IKs7KeE 119084 -INC00LDQvdC40YU= 119085 -IHphaMOhag== 119086 -7KO864qU 119087 -INCz0LjQtA== 119088 -bmnFvg== 119089 -IF57wrB9 119090 -IGtybw== 119091 -xI1lbg== 119092 -z4bOuQ== 119093 -xLFtxLF6ZGE= 119094 -IOa5lg== 119095 -INC/0L7QstGA0LXQttC0 119096 -IOyhtOyerA== 119097 -4LiZ4Liy4LiZ 119098 -zrzOrc69zr/Pgg== 119099 -5r2c 119100 -77yM5L2/ 119101 -IGRvc3A= 119102 -IGxp4buBbg== 119103 -4Lix4Lia4LiE4Lin4Liy4Lih 119104 -INGA0LDQsdC+0YLQtQ== 119105 -INC80LDQudCx0YPRgg== 119106 -4LmA4LiB4Lip 119107 -QmHFnw== 119108 -IOadseS6rA== 119109 -0L3QsNGH0LDQu9Cw 119110 -zrTOtc65 119111 -4KWI4KSq 119112 -0ZbQvNGW 119113 -IGZpemlr 119114 -4Lin4Lil 119115 -5LyN 119116 -IOC4iuC4meC4sA== 119117 -J9GP0YI= 119118 -0L3QuNC7 119119 -0LjQvdC+0LI= 119120 -IMSRb8Ohbg== 119121 -4Lij4Lin4LiI 119122 -ZmV0 119123 -4LmM4LmC 119124 -INC80LDRgtC4 119125 -6aiO 119126 -0JrQog== 119127 -4LmA4Liq4LiZ4Lit 119128 -INC80LDQsg== 119129 -bMSxxJ/EsW5h 119130 -INC/0L7Rh9C40L3QsA== 119131 -4Li54LiV4Lij 119132 -0YbQtdGA 119133 -dWpldGU= 119134 -IHRhaG1pbg== 119135 -INCy0LjQvNC+0LM= 119136 -4Liy4Lif 119137 -0LXQtNC2 119138 -z4TOtc+N 119139 -YWRsYQ== 119140 -IMSRxrDGoW5n 119141 -INiv2KfYs9iq2KfZhg== 119142 -IGJhc8Sxbg== 119143 -INGF0LI= 119144 -IHJlYWs= 119145 -INC+0YLQvNC10YI= 119146 -5rOl 119147 -IG3DoXRl 119148 -IHpvcnVu 119149 -44Go5oCd44GG 119150 -INiv2LHYrNip 119151 -INCy0ZbQtNGB0YPRgg== 119152 -INi52KfZhdmE 119153 -6JS1 119154 -IHNvbnJha2k= 119155 -IG1vaGxp 119156 -0LjQstCw0LXRgg== 119157 -INC/0ZbQtNGB0YLQsNCy 119158 -IG9zdHJvdg== 119159 -4KS+4KSo4KS1 119160 -4oCeUA== 119161 -INCy0LjQt9C90LDRh9Cw 119162 -IHByYXZkxJtwb2RvYg== 119163 -IHpheg== 119164 -7J2066W8 119165 -INC00LbQtdGA 119166 -INCg0LDQtA== 119167 -INGB0LXRgNGM0LXQtw== 119168 -INC00LXQvA== 119169 -z4DOrg== 119170 -INCE0LLRgNC+0L8= 119171 -IMSNZXNrw6k= 119172 -776P 119173 -INit2Yo= 119174 -7LyA7J20 119175 -INiu2YjZhg== 119176 -wqBM 119177 -44GE44Gr 119178 -0LjQt9C90LXRgQ== 119179 -INmF2YLYp9mF 119180 -INin2YTYrdmE 119181 -64aN 119182 -INii24zYpw== 119183 -57+8 119184 -77y9 119185 -5riQ 119186 -0LvQuNCy0ZY= 119187 -44GE44Gm44GE44KL 119188 -IM6RzqA= 119189 -INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjw== 119190 -IG3DoXQ= 119191 -IM68zrXOs86s 119192 -64W8 119193 -5rW36YGT 119194 -INmF2LTaqdmE2KfYqg== 119195 -0YfQvdCw 119196 -JzsnOw== 119197 -IM68zq/OsQ== 119198 -z4HPjs69 119199 -IGJ5c3Rl 119200 -INGN0LvQtdC60YLRgNC4 119201 -IFlhcmTEsW0= 119202 -IGjDoXQ= 119203 -INCU0LXRgNC20LDQsg== 119204 -LtCh 119205 -IG9yYWRh 119206 -IGFsYW7EsQ== 119207 -5Zyw5Z+f 119208 -INiv2YfZhtiv 119209 -0LzQtdC90Yg= 119210 -INC+0YDQs9Cw0L3QvtCy 119211 -INi52LU= 119212 -4Li54LiH4Liq 119213 -INi02LnYsQ== 119214 -IOyWuw== 119215 -IM6szrvOuw== 119216 -IGfDs2k= 119217 -INmG2KfYrQ== 119218 -5byY 119219 -4KWN4KSl4KSy 119220 -aWxpbQ== 119221 -65CY7KeA 119222 -INC60L7QvdGG0LU= 119223 -IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg 119224 -IOykgOu5hA== 119225 -IG9zdGF0bsOt 119226 -IHZsw6FkeQ== 119227 -INGB0L7QsdC40YDQsA== 119228 -IOyXreyCrA== 119229 -4LmB4LiB4Lij4Lih 119230 -Lu+8jw== 119231 -2Y/ZiNmG 119232 -2b7Ysw== 119233 -IFdpa2lw 119234 -IOa+ 119235 -INC20LDRgA== 119236 -5a655piT 119237 -IHByb3N0xZllZG5pY3R2w61t 119238 -IMW+ZW55 119239 -IOiPsuW+i+WuvueUs+WNmg== 119240 -0LDRjtGC0YHRjw== 119241 -IG1pw6p1 119242 -IHBlbsOtemU= 119243 -zrTOuc6s 119244 -b2xkdXI= 119245 -INC/0YDQuNC80LXRgNC90L4= 119246 -IOyeiOqzoA== 119247 -4LiH4Lit4Lii 119248 -0LrQvtCy0LjQuQ== 119249 -Ls6f 119250 -4LmD4LiE4Lij 119251 -54ug 119252 -INCf0ZbQsg== 119253 -5pS56Z2p 119254 -INCd0LDRgdC10LvQtdC90LjQtQ== 119255 -xaFldMWZ 119256 -2ZLYqA== 119257 -IOKUgA== 119258 -2LrZitmE 119259 -INC00ZbRj9C70YzQvdGW0YHRgtGM 119260 -INmE2YrYsw== 119261 -IOyLnOyepQ== 119262 -44Of44Ol 119263 -INqp2YjYqg== 119264 -IM6Tzrk= 119265 -4Li04LmA4Lin 119266 -ZWt0b3I= 119267 -INCx0YPQtNGD 119268 -0L3QvtCy0LDQtg== 119269 -0YnQsNC10YLRgdGP 119270 -IG5nw7Ru 119271 -IHbEm2M= 119272 -5b6Q 119273 -4Lit4LmA4Lih4Lij 119274 -4Lix4LiN4LiK 119275 -INC40YHQv9C+0LvRjNC30YPRjtGC 119276 -cnVidQ== 119277 -IG5o4buxYQ== 119278 -44GM44GK 119279 -INCT0LDRgA== 119280 -0L7RgNC1 119281 -INC30L7Qu9C+0YI= 119282 -5p+z 119283 -INmK2LQ= 119284 -INC/0L7QstC40L3QvdGW 119285 -2KfZgtiq2LU= 119286 -2YTYrQ== 119287 -INC+0LrRgtGP0LHRgNGP 119288 -IG7Em2tkeQ== 119289 -INC+0LHRgNCw 119290 -2LPYqtqv24w= 119291 -56ym5ZCI 119292 -IHRoaeG7g3U= 119293 -5piv5LuA5LmI 119294 -IHJvenM= 119295 -7L2c6rG4 119296 -INC60LDRhA== 119297 -5ZCM5q2l 119298 -7LyT 119299 -z4DPhM+F 119300 -4Lig4Liy4Lii4LmD4LiZ 119301 -zrnPg8+Ezq4= 119302 -INiv2YjZhNin2LE= 119303 -INmF2KfZitmI 119304 -IHBlxI0= 119305 -4Lix4Lia4Lih 119306 -zpnOlA== 119307 -xLF5ZMSx 119308 -4Lix4LiB4LiX 119309 -4Lib4Lij4Liw4LiW4Lih 119310 -zrrOsc65 119311 -IHByb2Rlag== 119312 -INC40Y7Qu9GP 119313 -IHbFqQ== 119314 -6amx 119315 -IGh2xJs= 119316 -5oOz6KaB 119317 -56+E 119318 -w6dhaw== 119319 -INC80Y/Qsw== 119320 -xLFtxLFu 119321 -IGRpc3BvemljaQ== 119322 -IHVrYXo= 119323 -cmFjYWs= 119324 -INCx0L7Qu9C10LfQvdC4 119325 -4Lin4LmC4Lih 119326 -INC30LXQuw== 119327 -INCS0LjQutC4 119328 -INCg0L7QtA== 119329 -4Li54LiB4LiE 119330 -7ZG4 119331 -IHRo4bqjaQ== 119332 -IGJhxJ/EsW1zxLF6 119333 -INGA0L7RgdGB0LjQuQ== 119334 -INCa0LDQvA== 119335 -INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGP 119336 -INit2LA= 119337 -wqDCoMKgwqDCoMKgwqDCoMKg 119338 -INin2YbYqtmC2KfZhA== 119339 -INCw0LHRgdC+0LvRjtGC 119340 -IMSxxZ/EsWs= 119341 -z4TOv86zz4HOsc+G 119342 -INCx0L7Qu9GM0YjQvtC5 119343 -INi52KjYp9ix2Ko= 119344 -w63Fvg== 119345 -INiv2LHYs9iq 119346 -INGB0LvQvtCy0L4= 119347 -4KWICg== 119348 -2KjZiNio 119349 -INCS0L7Rgg== 119350 -4Lin4LmE4Lib 119351 -IGJpbGluZW4= 119352 -INmC2Yo= 119353 -IGJ1bmxhcsSxbg== 119354 -2ZHYqg== 119355 -IGJhc2l0 119356 -66a/ 119357 -2KfYptix2Kk= 119358 -IHDFrw== 119359 -IGVkaWxtacWf 119360 -IOS9kA== 119361 -IFnDtm5ldGlt 119362 -2YXbjNix 119363 -IHNwb3U= 119364 -5rex5Zyz 119365 -INCy0LfQsNGU0Lw= 119366 -zpnOmw== 119367 -0IM= 119368 -INC00LXRgNC20LDQstC90L7Rlw== 119369 -IG1ydA== 119370 -IERlbWly 119371 -6buO 119372 -INGA0LXQs9GD0LvRj9GA 119373 -INC90LjQutC+0LPQtNCw 119374 -5by+ 119375 -4KWJ4KSh 119376 -INCz0LvQsNC3 119377 -INmF24zaqdmG 119378 -6ZmQ5a6a 119379 -INC90LDQstC6 119380 -INC/0L7QtNGC 119381 -INiq2LXZiNuM2LE= 119382 -INin2YTYrdiv2YrYqw== 119383 -IGRvxaFsbw== 119384 -0L3RjtGO 119385 -INGB0YXQvtC0 119386 -2LfZgtip 119387 -INGB0LXQvdGC0Y/QsdGA0Y8= 119388 -54m55q6K 119389 -4LiB4Liy4Lij4LmB4LiC 119390 -w6F6ZA== 119391 -0ZTRgtC1 119392 -IM6jzrU= 119393 -INmE2YPZhA== 119394 -5ZCN5a2X 119395 -2KfZhtuM2Kc= 119396 -IGNpbnM= 119397 -6riw7JeF 119398 -IOmfsw== 119399 -6aCD 119400 -4Lii4Liy4Lii 119401 -7JqV 119402 -IHbDrXTEm3o= 119403 -4KWN4KSw4KSs 119404 -INi02LHZgtuM 119405 -IGJlenBlxI1ub3N0 119406 -IMOnZXLDp2V2 119407 -IOunmw== 119408 -Y2t5 119409 -k6g= 119410 -INGD0LzQvtCy0LDRhQ== 119411 -0LvQuNGF 119412 -bWVuaXo= 119413 -INio2q/bjNix 119414 -2YbZiQ== 119415 -IOC4geC4suC4o+C5geC4gg== 119416 -zrnPg861 119417 -4oCzRQ== 119418 -IGTDtm5lbWluZGU= 119419 -66as7Lm0 119420 -IOWIsA== 119421 -IGh1a3Vr 119422 -0LDRgtC+0YDQsA== 119423 -INin2YTYudmG 119424 -77qY 119425 -w7xuw7x6 119426 -0YHQvtGC 119427 -4Li44Lip 119428 -IGTGsMahbmc= 119429 -b3ZueQ== 119430 -INGE0L7RgNC80LA= 119431 -44GX44Gu 119432 -2LLZitiy 119433 -INin2YTZhtin2LM= 119434 -INGH0LjQvA== 119435 -5aSn5Lq6 119436 -2q/Zig== 119437 -INCT0L7RgdC/ 119438 -6aKG5a+8 119439 -IG5pbmg= 119440 -IOC4o+C4suC4hOC4sg== 119441 -2YLYp9ih 119442 -7Ims 119443 -IOydtOyghA== 119444 -IMO2xJ9yZXRtZW4= 119445 -INGG0LLQtdGC0LA= 119446 -0LXQvdC90L7RgdGC0Yw= 119447 -5aSn44GN 119448 -INC80LjRgdGC0LXRhtGC 119449 -2LHZiNiq 119450 -cG/FiA== 119451 -IMWeaXJrZXQ= 119452 -INC60YDQsNGB0LjQsg== 119453 -INGA0LXRgdGD0YDRgQ== 119454 -5Lm+ 119455 -INmB2Yc= 119456 -IFnDlg== 119457 -6Iqz 119458 -zrzPic+C 119459 -xJtqaQ== 119460 -INCy0LvQsNC2 119461 -INGD0LLQtdC70Lg= 119462 -2KfYsNin 119463 -44CC5aaC5p6c 119464 -INC/0YDQuNGB0YPRgtGB0YLQsg== 119465 -IOG6pG4= 119466 -5oCW 119467 -INCc0LXRgg== 119468 -IGplZG5h 119469 -IGPhu6Vj 119470 -INin2YbYqti02KfYsQ== 119471 -INC30L7QutGA0LXQvNCw 119472 -0LjRh9C10YHQutC4 119473 -INC60YDQsNGX0L3QuA== 119474 -0LjRgNGD 119475 -INGW0L3RgtC10YA= 119476 -INCw0L3QsNC70L7Qsw== 119477 -0Zs= 119478 -4Li14LiL 119479 -0L3Rg9C70Lg= 119480 -IE5pbmg= 119481 -0LXRgNCw0YLQvtGA 119482 -IHJ1Y2U= 119483 -INGI0LrRlg== 119484 -2KrYsdmG2Ko= 119485 -IHNvbnJhc8Sx 119486 -IOaN 119487 -0YbQtdC90YLRgNCw 119488 -IOC4reC4s+C5gOC4oA== 119489 -2LfZig== 119490 -77yM5b2T 119491 -INGC0YDQtdGF 119492 -wqBI 119493 -5rSq 119494 -44Oz44OE 119495 -INCy0ZbQtNC/0L7QstGW0LTQsNC70Yw= 119496 -4oCZZGFraQ== 119497 -w6HFmWk= 119498 -IHDFmWVt 119499 -dHVr 119500 -INmB2LHZhdmI2K8= 119501 -IOyduOymnQ== 119502 -4Liq4Liz4LiZ 119503 -7IOB7J2Y 119504 -xZnDrW0= 119505 -5r6k 119506 -INGA0LXQuQ== 119507 -INC70Y7QsdC+0Lk= 119508 -dWp0ZQ== 119509 -67O17KeA 119510 -INiv2LHYsw== 119511 -INCS0LvQsNC00Lg= 119512 -INGB0LLQvtC40Lw= 119513 -IOyduO2EsOuEtw== 119514 -6LGK 119515 -INC90LDQu9C+0LM= 119516 -44KI44Gz 119517 -INiu2KfYt9ix 119518 -IOyeheuLiOuLpA== 119519 -44CC44GX44GL44GX 119520 -0LvQsNCz 119521 -5bCW 119522 -64ul 119523 -7Iqk64qU 119524 -7Iug7LKt 119525 -44OH44O844K/ 119526 -INGD0YDQvtCy0L3Rjw== 119527 -IOustOyKqA== 119528 -INin2YTYo9ix2LY= 119529 -4LmJ4LiV 119530 -4bubdA== 119531 -INmG24zYsdmI 119532 -5aKo 119533 -44K244O8 119534 -cnViYQ== 119535 -INmG2LTYr9mH 119536 -0LjQu9GP 119537 -YWPDrW0= 119538 -44Op44Kv 119539 -WEg= 119540 -INiz2LHYrw== 119541 -IOCkpuCkuA== 119542 -dGVtYmVy 119543 -IERvxJ91bQ== 119544 -INC/0YDQvtGA 119545 -zrjOv8+C 119546 -IGnFn2U= 119547 -4Lit4Lif 119548 -0LvQsNGI 119549 -2KfYtdmE2Yc= 119550 -bGl2xJs= 119551 -67aA67aE 119552 -0L3QsNC6 119553 -5Y2B5LiJ 119554 -4Liq4Liy4Lir 119555 -4Lib4Lij4Liw4LmA4LiX4Lio4LmE4LiX4Lii 119556 -44Kt44Oz44Kw 119557 -INC80LXRgtC+0Y4= 119558 -IGt1bGxhbmFyYWs= 119559 -4pGh 119560 -24zYstin2Ko= 119561 -INmF2YjYqNin24zZhA== 119562 -INC30L3QsNGH0LjRgg== 119563 -IG9yZ2FuaXphY2U= 119564 -0YDQuNC4 119565 -b3ZuYQ== 119566 -IOqyveygnA== 119567 -44CB5b28 119568 -IOCkruCkuA== 119569 -IOC5guC4m+C4ow== 119570 -TEFSSQ== 119571 -5oeC 119572 -INCy0LA= 119573 -INmD2YbYqg== 119574 -INGA0LDQsdC+0YLQsA== 119575 -wqAgwqAgwqA= 119576 -5aW95LqG 119577 -IHphbcSbc3Ru 119578 -0LbQtdC90Yw= 119579 -IHVrb24= 119580 -bsSbbsOp 119581 -IOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgA== 119582 -INin2YTYrtin2LXYqQ== 119583 -IMSNYXN1 119584 -5bCP6K+0 119585 -INit2LHaqdiq 119586 -5pGE 119587 -z4fPiQ== 119588 -INGB0LLQtdC2 119589 -5paw6Ze7 119590 -IOyLsQ== 119591 -IGXEn2Vy 119592 -IHNpdHVhY2U= 119593 -IOe3qA== 119594 -Zmlr 119595 -66eI64uk 119596 -zpXOmg== 119597 -IOqwnOy1nA== 119598 -IGPDoA== 119599 -2KfYr9ir 119600 -IHNhecSxZGE= 119601 -INij2YHYttmE 119602 -5rOV6Zmi 119603 -IC4s 119604 -IFRoxrDGoW5n 119605 -z4HPjM+C 119606 -44GX44KI44GG 119607 -x44= 119608 -5pG4 119609 -IOmZsw== 119610 -pZA= 119611 -4Lik4LiU 119612 -IGdp4bqjbmc= 119613 -INC70Y7QsdC+0LI= 119614 -IGVrcmFu 119615 -0L7Qv9C40YE= 119616 -0LXQttC00YM= 119617 -INC90LDQt9Cy0LA= 119618 -5ouT 119619 -xLFm 119620 -4LmI4LiB 119621 -0LjRh9C90ZY= 119622 -IOqzhO2ajQ== 119623 -4Lig4Liy4LiE4Lih 119624 -INin2b4= 119625 -66as7J2Y 119626 -44Gn44GZ44GM 119627 -IGtvbmNp 119628 -INqp2KfYsdiu2KfZhtmH 119629 -IOS9lQ== 119630 -INGC0LLQsA== 119631 -INCf0L7RgdGC 119632 -INCw0L/RgNC10LvRjw== 119633 -INin2YTYudix2KfZgg== 119634 -5Lit5Y2O 119635 -4LmH4Lit4LiB 119636 -4KWN4KSk4KSV 119637 -IHrDoWplbQ== 119638 -INiv2LHYrNmH 119639 -IOCkrOClnA== 119640 -INGB0YLRgNCw0L0= 119641 -6K2m5a+f 119642 -IHllcmxlxZ90aXI= 119643 -IFbFqQ== 119644 -576O5YWD 119645 -IOyhsOq4iA== 119646 -IOC4o+C4reC4hw== 119647 -IGFrYWRlbQ== 119648 -4LiE4LiT4Liw 119649 -IHBveml0 119650 -IGtvbmXEjQ== 119651 -6LCD5p+l 119652 -IOOBiw== 119653 -IMSNZXJ2ZW5jZQ== 119654 -IE9ka2F6eQ== 119655 -IOuPhOyLnA== 119656 -4Lix4Liq4LiU 119657 -IGfDoWk= 119658 -INCg0L7QsQ== 119659 -INCx0L7Rjw== 119660 -5omp 119661 -5byA5bGV 119662 -YW5paw== 119663 -IHZ5xb4= 119664 -IGJhxZ9sYXk= 119665 -IGJha8SxxZ8= 119666 -ZWtjZQ== 119667 -0YHRgtC40LrQsA== 119668 -0LXRgNCw0YLRg9GA0LA= 119669 -IOu2hOulmA== 119670 -IFBvxI1ldA== 119671 -b2TDocWZ 119672 -64uY7J2Y 119673 -IGtsaWQ= 119674 -27LbuQ== 119675 -INqG24zYsg== 119676 -bcO8cg== 119677 -IHPhu6k= 119678 -2YrYp9mG2Kk= 119679 -5Yqx 119680 -IG9rdQ== 119681 -INCy0L7QtNC4 119682 -INiy24zYsdin 119683 -5aSn5Yip 119684 -INmE24zZhtqp 119685 -INmK2KzYqA== 119686 -2YXbjNmE 119687 -IM+Dz4TPgc6x 119688 -5pmT 119689 -4Li04Liq4LiV 119690 -IMWfaWRkZXQ= 119691 -INGA0LXQutC+0LzQtdC90LTQsA== 119692 -IHBvxb5hZGF2 119693 -INC/0ZbRgQ== 119694 -5YWs5byP 119695 -INqv24zYsduM 119696 -0LrRgtCw 119697 -INmF2YbYp9i32YI= 119698 -IGZpcm15 119699 -IOC5hOC4mw== 119700 -IM6tz4HOsw== 119701 -5b+r6YCf 119702 -44GM44Gq44GE 119703 -0L3QtdGB0YLQuA== 119704 -IOeyvg== 119705 -0YDQsNC00Lg= 119706 -44KS44GL 119707 -77qq 119708 -a3luxJs= 119709 -IOCkueCkpA== 119710 -dGFr 119711 -INmK2YjZhtmK2Yg= 119712 -w7bEnw== 119713 -INGA0YPQug== 119714 -5ZyL6Zqb 119715 -0Y7RgdGM 119716 -INC00LDQstC90L4= 119717 -IHBvcGlz 119718 -IELEsEw= 119719 -INmG2YLYrw== 119720 -INGB0L/QvtC2 119721 -0YbQuNC+0L3QvdGL0YU= 119722 -INGI0L8= 119723 -0YPRjtGJ0LjRhQ== 119724 -INCy0L7Qt9C00YPRhQ== 119725 -0YLQuNC1 119726 -IFXFvg== 119727 -z4zOtA== 119728 -4LiB4Lij4Liy4LiE4Lih 119729 -IGFsYW7EsW5kYQ== 119730 -IHPhuq90 119731 -44OQ44Kk 119732 -TmfDoHk= 119733 -IOu5jA== 119734 -77yJ44Gv 119735 -IOS/oQ== 119736 -0JXQoQ== 119737 -IFRhdG8= 119738 -IMO6bm9yYQ== 119739 -ZXJhcA== 119740 -xKA= 119741 -IFThuq1w 119742 -INC60L7QvNC/0LDQvdC40Lg= 119743 -44Op44Kk44OI 119744 -6ZyA5rGC 119745 -INiq2YjZgg== 119746 -4oCZ4oCZ 119747 -656N64uI64uk 119748 -INC60LLRltGC0L3Rjw== 119749 -IG95dW5jdQ== 119750 -woDCgMKAwoDCgMKAwoDCgA== 119751 -5YaK 119752 -IHlhcG3EscWf 119753 -4Lix4LiH4LmE4Lih 119754 -INC30LDQv9Cw0YU= 119755 -w6FsYQ== 119756 -INGC0LXRhdC90LjRh9C10YE= 119757 -INit2LU= 119758 -4Lij4LiU 119759 -5byE 119760 -INqv24zYp9mH 119761 -2KfZh9ix2Kk= 119762 -IOCkj+CkoQ== 119763 -0L3QuNC80LDQtdGC 119764 -2KfYr9mG 119765 -zpzOkQ== 119766 -IOekvg== 119767 -0LDRgNGH 119768 -2KrYsg== 119769 -5ram 119770 -aW5pemlu 119771 -IGJleWF6 119772 -INio2YjZhA== 119773 -5Z2h 119774 -44Gu44KI44GG44Gr 119775 -IHlhcHTEscSf 119776 -IGRhxJ/EsQ== 119777 -IGJhxZ9hcsSx 119778 -IM+Azqw= 119779 -INC/0YDQvtC00LDQtg== 119780 -QuG7mQ== 119781 -IOCkpOCkpA== 119782 -IHBvZHN0YXQ= 119783 -IOa1gQ== 119784 -IHpkcmF2w60= 119785 -IOeh 119786 -IG9wYWs= 119787 -IGjhu41h 119788 -5ouU 119789 -0YPQttC0 119790 -IHRy4bupbmc= 119791 -2YjYsdmK2Kk= 119792 -0YvQuw== 119793 -dW1zdXo= 119794 -INiz2KjYqA== 119795 -6K645aSa 119796 -5a6e6aqM 119797 -INCx0L7Qu9C4 119798 -IGR1eeG7h3Q= 119799 -4bqtYw== 119800 -INCR0LXQtw== 119801 -INio2YTZhtiv 119802 -0LzQvA== 119803 -0YDQtdC7 119804 -TsSw 119805 -IOODrw== 119806 -6Yu8 119807 -INGB0LLRjw== 119808 -IOWQjg== 119809 -IG11aHQ= 119810 -INC/0YDQvtCx0LvQtdC80Lg= 119811 -INGC0Y/QttC10Ls= 119812 -INCh0LXQvA== 119813 -4Lik4Lip4Lig4Liy4LiE4Lih 119814 -4LmI4Liy4LiV 119815 -w7Zyw7w= 119816 -w7x5b3J1bQ== 119817 -INin2YTYo9it 119818 -INGB0YLRgNCw0Yg= 119819 -aG9v 119820 -4KSn4KSw 119821 -IHRsYWs= 119822 -IHNycG5h 119823 -aWZpa2FjZQ== 119824 -IHJlaA== 119825 -INC80LjQvdGD 119826 -44CAag== 119827 -INCz0YDRg9C/0Lg= 119828 -IM6szrs= 119829 -IG9sdXJzYQ== 119830 -zrvOv86zzq/OsQ== 119831 -INCS0LjQug== 119832 -IG3DvGNhZGVs 119833 -IHrDoXbEmw== 119834 -INGE0LXQstGA0LA= 119835 -xI1uw6E= 119836 -4LmM4LmA4LiL 119837 -INmE2YTYrQ== 119838 -0YDQuNC/ 119839 -INCx0YPQug== 119840 -44GI44Gq44GE 119841 -IHBvcmFk 119842 -IHNhbW9zdGF0 119843 -IHRlc2lz 119844 -2KfYqNmC2Yc= 119845 -INis2K/Zitiv2Kk= 119846 -6YCS 119847 -4pSB4pQ= 119848 -2LPbjNmG 119849 -IGdlcmVrdGnEn2luaQ== 119850 -4Li14Lii4LiZ4Lia 119851 -6KiA44Gj44Gm 119852 -INGW0L3RgtC10YDQtdGB 119853 -INGP0LrQuNC8 119854 -IOaAuw== 119855 -a292b3U= 119856 -IGRlbWVr 119857 -2KfZhtmK2Kc= 119858 -IGRvbcWv 119859 -xaFuw60= 119860 -YXRlxZk= 119861 -5YCr 119862 -zrTOv8+Dzrc= 119863 -IOq4sOyXhQ== 119864 -5ZSH 119865 -7Lmg 119866 -0ZbQtNGD 119867 -66aw7J20 119868 -5pyA5Yid 119869 -6LiP 119870 -5oOz5Yiw 119871 -4KWN4KSs4KSw 119872 -IOyelA== 119873 -INGA0LDQt9C90YvRhQ== 119874 -a3JvbQ== 119875 -zrnOsc69 119876 -INC00YDRg9C3 119877 -5Lu/ 119878 -IOq3uOughw== 119879 -INC00LDQu9GW 119880 -5pWI5p6c 119881 -IOCkueCktQ== 119882 -6Lyd 119883 -IOywuOqzoA== 119884 -IOyGlA== 119885 -IHpuYWw= 119886 -INC/0LXRgNGB 119887 -2ZDZkQ== 119888 -INGC0LXQtg== 119889 -5Yuf 119890 -zrnOuA== 119891 -xI3Frw== 119892 -IGVraXA= 119893 -IGtodW5n 119894 -6ZeY 119895 -INiq2LXZhduM2YU= 119896 -0L7QuNGC 119897 -INGF0L7Quw== 119898 -5oqe 119899 -YW1hbQ== 119900 -IOKWsw== 119901 -44GH 119902 -INi52YbZhw== 119903 -IOywuOqwgA== 119904 -IM6az4w= 119905 -5Y+k5bGL 119906 -0LrQvtCy0L7Rlw== 119907 -4Lio4LiI 119908 -0L7Qu9C+0LPQuNGP 119909 -INmF2KvYqNiq 119910 -INCa0YDQsNGX0L3QsA== 119911 -INC80LXRgdGP0YbQtdCy 119912 -IGFsxLFuYW4= 119913 -IM+Az4HOsc6zzrzOsQ== 119914 -IOyeoeuLtA== 119915 -INC/0LvQvtC0 119916 -INGC0LrQsNC90Lg= 119917 -0YHRi9C70LrQuA== 119918 -2LPYt9iz 119919 -cmFuxJs= 119920 -0LrQsNC2 119921 -0LXQvNCw0YLQuA== 119922 -INiy24zYs9iq 119923 -5r+f 119924 -IHBvcGxhdA== 119925 -zrPOrc69 119926 -7Yag7Yag 119927 -IHTDonk= 119928 -IOy1nOq3vA== 119929 -44Op44Oz44K5 119930 -IGfDvG5lxZ8= 119931 -INmB2YI= 119932 -IHNhxJ9sYXlhbg== 119933 -INit2LLYqA== 119934 -4KWB4KSy4KSo 119935 -IEJpbGlt 119936 -IEJhdMSx 119937 -5qC355qE 119938 -zrTOuc66 119939 -zrHPgc6vzr/PhQ== 119940 -IOybgA== 119941 -IGzhu61h 119942 -2YbZiNi5 119943 -546y 119944 -0LDQvdC+0Lw= 119945 -IHN0w6F0bsOt 119946 -IOS6jg== 119947 -IG3DuWk= 119948 -IMSR4buZdA== 119949 -5rKD 119950 -5YWs5ZyS 119951 -INGB0YzQvtCz0L7QtNC90ZY= 119952 -0L3QvtGB0Lg= 119953 -WmE= 119954 -INC00LvQuA== 119955 -IM+Dz4XOvc6t 119956 -IFbhu4s= 119957 -bWF2 119958 -IE3DvHNsw7xtYW4= 119959 -L++8jw== 119960 -INC30LDRidC40YI= 119961 -6ZaJ 119962 -IOeBqw== 119963 -IOW3nQ== 119964 -INCw0LY= 119965 -6L+H5p2l 119966 -4LiX4Liy4LiZ 119967 -IEFyYcWfdMSxcg== 119968 -1aHV 119969 -IHBvbcSbcg== 119970 -IGTFr20= 119971 -5aau 119972 -IGhsYXZuxJs= 119973 -IGZpbmFucw== 119974 -IM6zzr3PiQ== 119975 -z4PPhM63zrzOsQ== 119976 -77yM55So 119977 -7Iut7Iuc7Jik 119978 -INmF2KvYp9mE 119979 -LdCR 119980 -0YbRltC50L3Rlg== 119981 -INiv2LPYqtmH 119982 -4KWJ4KS4 119983 -0YDRltC/ 119984 -IHDFmWlwb20= 119985 -INmI2YTZig== 119986 -INmI2LLZhg== 119987 -IGVsZWt0cmlr 119988 -IFF1w6Ju 119989 -aXbDqQ== 119990 -IGzhur0= 119991 -566A5Y2V 119992 -IG9ubGFyYQ== 119993 -0L7RgdC70LDQsg== 119994 -7Iuc7YKk 119995 -66qs 119996 -INmF2YLYr9in2LE= 119997 -IE9ydGE= 119998 -IFNlw6c= 119999 -INmG2YjZgdmF2KjYsQ== 120000 -4Li44LiZ4Liy4Lii4LiZ 120001 -INGD0LzQvtCy0Lg= 120002 -IOCkquCksOCkrg== 120003 -IHN0cm9t 120004 -INC60YDQsNGJ0LU= 120005 -56em 120006 -55u45omL 120007 -6Zu76KaW 120008 -IHV5Z3VsYW1h 120009 -INGA0LjQtw== 120010 -5oiy 120011 -4KSv4KSw 120012 -IEhsYXY= 120013 -IOyLuA== 120014 -INC70LjQv9C90Y8= 120015 -xYh1asOt 120016 -0YDQuNC3 120017 -6auY6YCf 120018 -55u45b2T 120019 -a2VuaW4= 120020 -INC+0YHRgtCw0L3QvtCy 120021 -IGJpdGs= 120022 -b3ZhbsOpaG8= 120023 -INCc0LDRgNC4 120024 -6LW2 120025 -7L2p 120026 -IMO2bMOnw7w= 120027 -INCh0LXRgNC10LQ= 120028 -IFRo4budaQ== 120029 -z4nOvc6x 120030 -2YjYqNip 120031 -IGNo4bulcA== 120032 -4oCM2K8= 120033 -IGNow6F5 120034 -INCS0LXQu9C4 120035 -INC+0LHRgdGC 120036 -IOyLnOymjA== 120037 -2K/Zhdip 120038 -0L/QvtC0 120039 -bHVl 120040 -INC00ZbQu9GP0L0= 120041 -INm+2YjYs9iq 120042 -INin2YTZhtiz 120043 -6IKM 120044 -7IiY66W8 120045 -IMO6cm92 120046 -INmF2LTaqdmE 120047 -6YeN6KSH6YeN6KSH 120048 -0L3QtdC3 120049 -IGRvcG9ydcSN 120050 -IHRhc2FyxLFt 120051 -7YGs6riw 120052 -7J207IWY 120053 -IGRlc2V0 120054 -INmF2LHYqtio2Lc= 120055 -4Lix4LiS4LiZ4Liy 120056 -J8Sx 120057 -0YfQutC4 120058 -IOyeiOuNmA== 120059 -0YjQutCw 120060 -bsOhbQ== 120061 -0YHRgtGA0L7Qsg== 120062 -4KWN4KS44KSw 120063 -0L3Rg9C70LDRgdGM 120064 -44Gh44KH44Gj44Go 120065 -IOWm 120066 -zrPPjA== 120067 -IOm7kQ== 120068 -WGVt 120069 -IHThu4c= 120070 -IOuMgO2GteuguQ== 120071 -6riw6rSA 120072 -5omN6IO9 120073 -6K+t6KiA 120074 -ZWRleXNl 120075 -INCi0Ys= 120076 -INGB0L7QtdC00LjQvQ== 120077 -IOyXhuyKteuLiOuLpA== 120078 -0Y/RjtGC 120079 -4LmB4Lir4Lil 120080 -IOyngOuwqQ== 120081 -IG9zb2Juw60= 120082 -24zZhNuM 120083 -INCw0LLQs9GD0YHRgtCw 120084 -0YnQuNC6 120085 -IHbDvcWhZQ== 120086 -Z3Ro 120087 -IM+AzrHOvQ== 120088 -2KzYp9ix 120089 -INCy0LjQtNC+0LI= 120090 -7J207IqI 120091 -INCR0LDRgA== 120092 -IM+Mz4DOv8+F 120093 -5qSF 120094 -INi52KfZhNuM 120095 -IFF1eeG6v3Q= 120096 -w5xN 120097 -44Od44Kk44Oz44OI 120098 -IOq5jA== 120099 -INC60LDQvdC00Lg= 120100 -a292w6lobw== 120101 -IE1lcmtleg== 120102 -IHlpeQ== 120103 -IHDFmcOtc3DEmw== 120104 -INGC0LXQvNC/0LXRgNCw0YLRg9GA0Ys= 120105 -INm+2Yo= 120106 -4Lik4Lio4LiI 120107 -6LCD55So 120108 -INGB0YLQvtGA0L7QvdGD 120109 -4LmJ4LiK 120110 -5aW944GN 120111 -LsWe 120112 -INC/0YDQvtC3 120113 -2YbYqtin2Kw= 120114 -6Zu75a2Q 120115 -LjouOi4= 120116 -6KiT 120117 -0LjRh9C10YHQutC+0LU= 120118 -INC90L7Qs9C4 120119 -IM67zq0= 120120 -IHPEsWvEsW50xLE= 120121 -IOqwgOyhsQ== 120122 -INiq2YbYuNmK2YE= 120123 -IMO2ZMO8bA== 120124 -IGHFn2HEn8SxZGFraQ== 120125 -IMW+ZWxleg== 120126 -INin2YTYudiv2YrYrw== 120127 -2LrZhg== 120128 -INC+0LrQvtC90Yc= 120129 -0YDQtdC80Y8= 120130 -TMSw 120131 -IG5lamQ= 120132 -IM+AzrvOsQ== 120133 -0YHQutC+ 120134 -IOyImQ== 120135 -INm+2YjZhA== 120136 -zrjOtc69zq7Pgg== 120137 -IOyjvOyalA== 120138 -IOaKpQ== 120139 -INmF2YXYpw== 120140 -0KDQodCg 120141 -INGA0LDQtNGW 120142 -5LiA56eN 120143 -6b6E 120144 -IHPDtnls 120145 -z4HOus61zrnOsQ== 120146 -INC30LXQvNC70ZY= 120147 -IHZlxI1lcg== 120148 -Z2XDpw== 120149 -2LPYqtmF 120150 -IHNlZmVy 120151 -INGB0LLRltC0 120152 -77uf77s= 120153 -0LDQu9C+0LI= 120154 -7Iqk66W8 120155 -4oml 120156 -INiq2YTZgdmG 120157 -5Y675LqG 120158 -4KS84KWL4KSC 120159 -INGE0L7RgNC80LU= 120160 -ZMO8bQ== 120161 -5YWB 120162 -0YDQsNC/ 120163 -IFbGsMahbmc= 120164 -4Lit4Liw4LmE4Lij 120165 -4Lix4LiB4Lip4LiT 120166 -IOWNsw== 120167 -INin2YTYsdmF 120168 -INC30LDRhdC40YHRgtGD 120169 -wrBF 120170 -b2TDrQ== 120171 -IOCkteCkqA== 120172 -IMSRw6hu 120173 -IOWPlw== 120174 -6JC944Gh 120175 -IHppbQ== 120176 -66as7KaI 120177 -6IiS 120178 -INC30LHRltGA 120179 -IOS7t+agvA== 120180 -INC70Y7QtNC40L3QsA== 120181 -INCf0L7RgdC40LvQsNC90L3Rjw== 120182 -0LjRiQ== 120183 -IM6o 120184 -4Li04LiB4Liy4Lii4LiZ 120185 -IGJ1ZGV0ZQ== 120186 -INC30YDQvtGB0YI= 120187 -IHZ5aw== 120188 -INCX0LXQvA== 120189 -INC40Y7QvdGP 120190 -IG3Em2xv 120191 -2YTYp9mB 120192 -INmI2LQ= 120193 -INGB0L/RgNCw0LLQuA== 120194 -44GZ44GO 120195 -INCz0YDQsNC00YM= 120196 -Um96 120197 -zrnOvc6u 120198 -IGNo4buTbmc= 120199 -5LiA5Y23 120200 -IFhlbQ== 120201 -INGB0LjQvNCy0L7Quw== 120202 -IG9kbcOtdA== 120203 -INGA0Y/QtNC+0Lw= 120204 -INGH0LXRgNCy0L3Rjw== 120205 -4LiB4Lij4Liw4LiX 120206 -5Lq65Lq6 120207 -5rCX5oyB44Gh 120208 -dW5kYWtp 120209 -5ZyL5a62 120210 -zrXPgc68zrHOvQ== 120211 -INC70Yw= 120212 -IE7DvGZ1cw== 120213 -INC80LXRgNC1 120214 -2KjYsdin2YrYsQ== 120215 -0L3QsNC90L3Rjw== 120216 -INC90LDRgA== 120217 -IHThuqVt 120218 -5pa95bel 120219 -6aGv 120220 -IGjDqA== 120221 -5piO55m9 120222 -INC00L7Qs9C+0LI= 120223 -INmB2LHZhQ== 120224 -6ICX 120225 -7Iqk7J2Y 120226 -7IS464yA 120227 -6K+a 120228 -INC90LXQsdC+0LvRjA== 120229 -IOC4m+C4o+C4sOC4gQ== 120230 -IOy5vA== 120231 -IG92bGl2 120232 -IE5HQw== 120233 -44CC5LiN 120234 -2KfZhNmJ 120235 -5omj 120236 -LtCQ 120237 -0YDQsNGB0YLQsA== 120238 -IMOHZXY= 120239 -44Gj44Gh 120240 -77yM6YO9 120241 -IHJvdm7Em8W+ 120242 -IM+Hz4HPjM69zrnOsQ== 120243 -IOyhsOyEoA== 120244 -INii2KjYp9iv 120245 -INCc0LDRgQ== 120246 -55m85bGV 120247 -5LuU 120248 -IGtlbmRpc2luaQ== 120249 -4LmI4Lit4LiH4LmA4LiX 120250 -IFbEmw== 120251 -IHLGsOG7o3U= 120252 -IG3DoW1l 120253 -INC+0YfQtdGA0LXQtNGM 120254 -INiz2KjYqtmF2KjYsQ== 120255 -INCx0L7Qug== 120256 -7KeA7Jet 120257 -INiq2KfYq9uM2LE= 120258 -IGxpc2Fucw== 120259 -IGdlcmVrdGly 120260 -IHNpemk= 120261 -0ZbQvdC+ 120262 -IE3DvMWf 120263 -44GP44KJ44GE 120264 -INC30LDQutC70Y7Rhw== 120265 -44GT44Go44Gr 120266 -6KiA44GE 120267 -44CB5bCP 120268 -IGV0bWVrdGVkaXI= 120269 -5aCx5ZGK 120270 -IGthcsSxxZ8= 120271 -INC+0LHQu9Cw0LQ= 120272 -5aWR 120273 -cmFjYXQ= 120274 -INin2LHYqtmB2KfYuQ== 120275 -zrzOsc65 120276 -7ZSI 120277 -INmI2YTZhQ== 120278 -64qU7KeA 120279 -bG9tb3U= 120280 -INC70LjRhtCw 120281 -IOydjOyVhQ== 120282 -IGhvZG7Emw== 120283 -6Iux5paH 120284 -woQ= 120285 -4LmJ4Liy4LiC4Lit4LiH 120286 -IOqzhOyVvQ== 120287 -5ZCE56eN 120288 -INmF2LHarw== 120289 -6ZSB 120290 -IOCkqOCkpg== 120291 -44OL44Oh 120292 -INC10Lw= 120293 -IGVsZcWfdGly 120294 -IO2KueuzhA== 120295 -IM6lz4DOvw== 120296 -xaFrZXI= 120297 -TEVSxLA= 120298 -5rKI 120299 -bGlrbGVyaQ== 120300 -INmF2YfZhtiv2LPbjA== 120301 -IGJhxJ/EsXI= 120302 -ZMSxxJ/EsW7EsQ== 120303 -INin2YTYqtiv 120304 -4Li44Lib4LiB4Lij4LiT 120305 -INGB0LvQtdC00YPRjtGJ0LjQtQ== 120306 -IOyngeygkQ== 120307 -5bCk 120308 -INC+0YHQvdC+0LLRlg== 120309 -IHTEm2xh 120310 -INC/0LDQug== 120311 -aXphY2U= 120312 -IG7DoXJvZA== 120313 -YW7DvQ== 120314 -INGN0L8= 120315 -IMO8w6fDvG5jw7w= 120316 -zqXOoQ== 120317 -6Ya06Ya0 120318 -4LmA4LiB4Lit4Lij 120319 -4oCM2KfZhtio2KfYsQ== 120320 -57aZ 120321 -zpHOoA== 120322 -xLFsxLHEn8Sx 120323 -IMOccsO8bg== 120324 -INC00L7Qt9Cy0L7Quw== 120325 -IO2DiA== 120326 -IOCkk+CkteCksA== 120327 -6Ku4 120328 -6JiH 120329 -INC/0YDQvtGB0YLRgNCw0L0= 120330 -6Z2S5bm0 120331 -44Gu5pa5 120332 -INqG2q/ZiNmG2Yc= 120333 -2YTYtw== 120334 -4oCc5oiR 120335 -IOuLpOyatOuwmw== 120336 -4KS+Lgo= 120337 -IG3DvGNhZGVsZQ== 120338 -IGPDrXQ= 120339 -4LmI4Lin4Lih4LiB 120340 -xJ/EsW5h 120341 -6rCc67Cc 120342 -IM+AzrHOuc60 120343 -2LbYp9uM 120344 -IGJvcsOn 120345 -7Yqc 120346 -INiu2K/Zhdiq 120347 -IHVkw6Fs 120348 -INCy0LjQsw== 120349 -IOuwsOyGoQ== 120350 -5bm+ 120351 -2Y7YrA== 120352 -IOyXmA== 120353 -54Cs 120354 -74A= 120355 -IM6RzrjOrg== 120356 -0L/RgNC40LrQu9Cw0LQ= 120357 -INC/0YDQuNGH0LjQvdCw 120358 -INmB2LTYp9ix 120359 -5ru/ 120360 -IGRvc3RhdA== 120361 -IOyhuOyXhQ== 120362 -INin2LHYsg== 120363 -2YjZhNmI2Kw= 120364 -2LPZiA== 120365 -5pig55S7 120366 -IHRow7Rp 120367 -IMKgwqDCoA== 120368 -4LmB4LiZ4Liw 120369 -6Kit5YKZ 120370 -INC80L3QvtCz0LjQtQ== 120371 -0YLQvtGE 120372 -acWhdMSb 120373 -4KSX4KSi 120374 -INC40L3QtNC40LLQuNC00YM= 120375 -IOyDne2ZnA== 120376 -INC30L7QstGB0ZbQvA== 120377 -7YOV 120378 -55yg 120379 -IOq1reuCtA== 120380 -ZXB0YWw= 120381 -cmFjaQ== 120382 -6KGh 120383 -44S3 120384 -IFN0xZllZA== 120385 -2KfZhNmK2Kc= 120386 -zqPOpA== 120387 -m7A= 120388 -44OJ44Or 120389 -w6F6w60= 120390 -INCw0YHQvw== 120391 -IGTEscWfYXLEsQ== 120392 -INCy0LjRgNC+0LHQvdC40YbRgtCy0LA= 120393 -ZXph 120394 -77yM5LiN6L+H 120395 -54Om 120396 -44Oz44Kw44Or 120397 -IHJvenZvag== 120398 -INmF2YbYqti02LE= 120399 -INGD0YLQtdC/ 120400 -INiv2YrZhg== 120401 -INC30LDRgdC+0LHRltCy 120402 -TmfGsOG7nWk= 120403 -44K344O8 120404 -IEZyYW5zxLF6 120405 -zpnOpA== 120406 -2KfYptmB 120407 -zrnPhw== 120408 -4Li14LmA4Lih 120409 -4KWN4KSu4KSo 120410 -4KWN4KSu4KSa 120411 -INiz2LnYsQ== 120412 -776d 120413 -67Cp67KV 120414 -INCh0L4= 120415 -IOCkluCkrOCksA== 120416 -7IaM6rCc 120417 -IHNsb3Zh 120418 -UVBDUA== 120419 -IEvEsXo= 120420 -2LfZgdin2YQ= 120421 -INC60L7RgNC8 120422 -IOyXheuNsOydtO2KuA== 120423 -ZXNwb8WI 120424 -4LiU4Liy4Lin 120425 -0L7RgNC+0Lw= 120426 -INCz0YDQsNGE 120427 -INC/0ZbRiA== 120428 -IOu/kA== 120429 -w712 120430 -0KHQsNC8 120431 -IGtyZXY= 120432 -IEJ1bnU= 120433 -IHpvYnJheg== 120434 -INiz2K7Zhg== 120435 -IOaUrw== 120436 -0LvRjtCx 120437 -2Y7Yp9mG 120438 -0LzQsNGC0YDQuNCy0LA= 120439 -zrvOtc+N 120440 -INC/0L7RhdC+0LQ= 120441 -INCz0YDQtQ== 120442 -55yL552A 120443 -4LiI4Liz4LiB 120444 -4Lix4LiH4LiE4Lih 120445 -IHNlw6dlbmVr 120446 -xLBzdGFuYnVs 120447 -INCy0ZbQtNC80L7Qsg== 120448 -bWl5b3I= 120449 -IG3hu6Vu 120450 -7J207JeQ 120451 -IE5oxrA= 120452 -wqB0b20= 120453 -bMSxa2xhcsSx 120454 -wqDEkQ== 120455 -44O744Oe 120456 -INmB2Ko= 120457 -IEZha8O8bHRlc2k= 120458 -7KCE7Z6I 120459 -6aqR 120460 -IOyekeydgA== 120461 -57yY 120462 -7LqQ 120463 -IG3DvHppaw== 120464 -0LDQu9GL 120465 -IHBvemVt 120466 -54On 120467 -IOW4uA== 120468 -xaFpbA== 120469 -4KSG4KSq 120470 -4LiB4Liz4Lir4LiZ4LiU 120471 -INqv2LHYr9i0 120472 -zrvOuc6s 120473 -IMO2ZGVu 120474 -5Y+q6KaB 120475 -IMSQbw== 120476 -IHN0cmF0ZWo= 120477 -INmH2KrZhA== 120478 -2YLZgQ== 120479 -IGt1bGxhbsSxbMSxcg== 120480 -INGB0L/QvtGB0YI= 120481 -IG7Em2hv 120482 -INCf0LXRgNC10LQ= 120483 -INC40LfQvNC10YA= 120484 -XV0+ 120485 -INC90ZbQutC+0LvQuA== 120486 -IGhheWFs 120487 -INC00L7QtNCw0YLQutC+0LI= 120488 -IOCkqOCklQ== 120489 -IGluc2FuxLFu 120490 -4Li44Lih4Lig4Liy4Lie 120491 -b2dyYWZpZQ== 120492 -0LLQvtCx 120493 -INin2YbYs9in2YbbjA== 120494 -IG3DvGs= 120495 -INGD0LzQtdGA 120496 -0L7Rh9C90YvQtQ== 120497 -64+E7J2Y 120498 -IGFyYQ== 120499 -IOu5qA== 120500 -IM66z40= 120501 -0LvQvtC5 120502 -0YHQuNC+0L0= 120503 -IHJvemTDrWw= 120504 -YXnEsWY= 120505 -INmI2KfYrdiv2Kk= 120506 -0L7RgNCw0LvRjA== 120507 -IHBvY2hvcA== 120508 -6Zqo 120509 -4LmJ4Lit4LiH4LiZ 120510 -INmI2KfZhg== 120511 -zpzOtQ== 120512 -IM68zr/OvQ== 120513 -0YPRiNC60LA= 120514 -b3JkdW0= 120515 -5riF5qWa 120516 -IERlxJ8= 120517 -z4DPgc6/ 120518 -INmI2KfZhNiq2Yo= 120519 -IHBva3Vz 120520 -7ZuE6riw 120521 -6aWu 120522 -5peF6KGM 120523 -INC20LXQvdGJ0LjQvQ== 120524 -IGRvxJ9ydWRhbg== 120525 -INGP0LE= 120526 -IHphxI3DrQ== 120527 -IOuztOyXrA== 120528 -LUNQ 120529 -5ZCo 120530 -4KWL4KSW 120531 -0YDQvtCz0YDQsA== 120532 -bGVyZGk= 120533 -7Iq0 120534 -2Y/ZiNin 120535 -IHVzdGFub3ZlbsOt 120536 -INC00L7RgdGC0LDQsg== 120537 -IGbEsXJzYXQ= 120538 -INin2YTZhdmH2YbYqQ== 120539 -INCy0LXRidC10YHRgtCy0LA= 120540 -INC90LXRgdC/ 120541 -INin2YTaqdiq2LHZiNmG 120542 -dGHFnw== 120543 -5oiS 120544 -IHl1cnQ= 120545 -IGdpcmRp 120546 -INCa0YPQsQ== 120547 -IOulvA== 120548 -4Li44LmM 120549 -44Gd44GG44Gq 120550 -4LmJCg== 120551 -INCy0YvQsdGA0LA= 120552 -a292xJs= 120553 -IFNpeg== 120554 -INqv2KfZhw== 120555 -INCn0LDRgQ== 120556 -INC30LPRltC00L3Qvg== 120557 -LtCf 120558 -5aeK 120559 -INCa0YPRgA== 120560 -IOydmO2VtA== 120561 -IGV0cmFm 120562 -INC60LDRiA== 120563 -INi324w= 120564 -zr7Otc65 120565 -57KS 120566 -INii2LA= 120567 -IGLDtmxnZQ== 120568 -IOCkruCknOCkrA== 120569 -2ZDZgw== 120570 -IHbDoWxreQ== 120571 -44Gg44KI 120572 -IG1lc2Fq 120573 -IHDFmWlzdA== 120574 -IHR5cHU= 120575 -INC60LjRiNC10Yc= 120576 -44KJ44Gu 120577 -IGtlbmRpc2k= 120578 -INCy0ZbQtNCx0YPQstCw 120579 -5L6v 120580 -INC00LjQt9Cw 120581 -44CACg== 120582 -INC/0YDQvtGG0LXRgdGD 120583 -INGN0LvQtdC60YLRgA== 120584 -X1BVUw== 120585 -INC80L3QvtCz0LjRhQ== 120586 -IGvDqW0= 120587 -5p6q 120588 -546w5Luj 120589 -IOmFjQ== 120590 -66Gt 120591 -0YLQuNGB0Y8= 120592 -IGzhu6Vj 120593 -INmI2KfZhNit 120594 -cHRhbA== 120595 -4bq1bmc= 120596 -z4DOuw== 120597 -IGRvbHU= 120598 -IHTDsmE= 120599 -INC40L3QvtCz0LTQsA== 120600 -INC/0L7RgNGP0LTQvtC6 120601 -0K/QutGJ0L4= 120602 -4pSY 120603 -INi62LHYqNuM 120604 -56e75Yqo 120605 -4Lii4LiZ4LiV4Lij 120606 -SERBVEE= 120607 -X1BVU0hEQVRB 120608 -INir2KfYqNiq 120609 -5YyF5ZCr 120610 -IM+Az4HOrc+AzrXOuQ== 120611 -4KS84KWL 120612 -5ZCN5YmN 120613 -0YLQtdGA0Lg= 120614 -772v 120615 -IOWFiA== 120616 -0L3QtdC0 120617 -z4HOv8+Nzr0= 120618 -0LLQtdC5 120619 -6IKW 120620 -IMWZZWRpdGVs 120621 -IHRow6lw 120622 -INmH2YHYqtmH 120623 -INC00YDRg9Cz0LA= 120624 -RVLEsA== 120625 -IOG6og== 120626 -INC/0LXRgNC10YA= 120627 -INC20LXRgdGC 120628 -IMSR4bqzbmc= 120629 -56au 120630 -0LDQu9GM0L3QvtC8 120631 -4KS/4KS34KSv 120632 -0LjQtNC10L3RgtCw 120633 -INii2K7YsduM2YY= 120634 -IOaT 120635 -IOC4oeC4q+C4suC4pw== 120636 -INC70Y7RgtC+0LPQvg== 120637 -INCx0ZbQt9C90LXRgQ== 120638 -Z8Sxw6c= 120639 -IG5n4buTaQ== 120640 -0L7Rh9C90YvQuQ== 120641 -IG/EjWVr 120642 -INmF2LHYqQ== 120643 -IHR2YXI= 120644 -IHNhbW96xZllam3Emw== 120645 -IEJlbGVkaXll 120646 -INCy0L7QtNCw 120647 -INqv24zYsdiv 120648 -INCz0L7QtNGL 120649 -44Gr6KGM 120650 -5piv5oiR 120651 -0YjQuNC70Lg= 120652 -IOWbveS6pw== 120653 -4bunaQ== 120654 -INCx0YPQtNGD0YLRjA== 120655 -INGA0LDQudC+0L3Rgw== 120656 -IOyT 120657 -INmI2KfYsw== 120658 -INin24zYtNin2YY= 120659 -zrXOvc6/zrTOvw== 120660 -INC90LXQt9Cw0LvQtdC2 120661 -INm+2LTYqg== 120662 -IGdpcmnFn2lt 120663 -INC00LXQu9C1 120664 -INin2LXZgdmH2KfZhg== 120665 -4LiU4Lin4LiB 120666 -INin2YTZgtmK 120667 -4LmM4LiI 120668 -66q7 120669 -IGRydQ== 120670 -6L+5 120671 -0LDQtNC20LXQvdC90Y8= 120672 -2YHZhg== 120673 -z4fOv8+C 120674 -4LmC4LiI 120675 -ZXlsZQ== 120676 -5aGR 120677 -IHVwcmF2 120678 -INC30LTQsNGC 120679 -IHZpZMSbdA== 120680 -IOC4m+C4ow== 120681 -INGE0LXRgA== 120682 -0IbQvQ== 120683 -IOy1nOyLoA== 120684 -bG9oYQ== 120685 -INC40YHQv9GL0YI= 120686 -IGF2YW4= 120687 -zrPOv8+F 120688 -IEdp4bqleQ== 120689 -44K744Oz44K/44O8 120690 -6YGN 120691 -0LXRgNCw0YU= 120692 -IOqwgOyngOqzoA== 120693 -INC40LQ= 120694 -IG1ub2hlbQ== 120695 -5qOA5rWL 120696 -IGV0bWU= 120697 -INiq2YXYsQ== 120698 -IGJhxZ9sYXlhbg== 120699 -44GP44KM 120700 -4LmH4LiZ4LiB4Liy4Lij 120701 -INGF0LDRgNCw0LrRgtC10YDQuNC3 120702 -IGFubGFtxLFuYQ== 120703 -2Y/Zhw== 120704 -INGB0LXRgNC/0L3Rjw== 120705 -55Wq57WE 120706 -IG1zZ2lk 120707 -IHp2w63FmQ== 120708 -IO2ajOybkA== 120709 -IHlhcGFy 120710 -5LyY5Yq/ 120711 -0LXQvdC90YvQvNC4 120712 -INij2Ks= 120713 -7LKZ 120714 -IGppbsOpaG8= 120715 -INiv2YHYp9i5 120716 -INit2qnZiNmF 120717 -IHJpemlr 120718 -zqzOu865 120719 -4LiH4LiC 120720 -6LWi 120721 -IM6Vzps= 120722 -IG9rdW0= 120723 -5pS25YWl 120724 -INqG24zZhg== 120725 -5pyJ55qE 120726 -0YbQsNC80Lg= 120727 -ZMSbbsOt 120728 -INC60L7RgNCw0LE= 120729 -IGFsYW5kYQ== 120730 -4Liq4LiZ4Liy4Lih 120731 -77yJ44Gu 120732 -xLFzxLF6 120733 -2YrZitix 120734 -2YPZitip 120735 -IG5lYm/FpQ== 120736 -IGJpdGly 120737 -IOODnA== 120738 -2ZHYpw== 120739 -77yG 120740 -INin2YTYqtin2LHZitiu 120741 -4Lih4Lir4Liy4LiZ4LiE4Lij 120742 -YXTDvHJr 120743 -44K544OG44Og 120744 -zrjOrs66zrc= 120745 -IM66zrHOvQ== 120746 -IFPDvHI= 120747 -IGTEscWfxLE= 120748 -IGthbmNlbA== 120749 -INm+2K7YtA== 120750 -aFBh 120751 -IMSNdA== 120752 -INC/0YDQvtGF 120753 -4LmJ4LiI 120754 -IOqxsOyVvA== 120755 -INC00LXRgNC20LDQstC90L7Qs9C+ 120756 -6IKh5Lic 120757 -7J207YGs 120758 -2YPYqtmI2LE= 120759 -IOOAgCDjgIAg44CAIOOAgCDjgIAg44CAIOOAgCDjgIA= 120760 -6Ki6 120761 -INio2YXYpw== 120762 -INC90L7RgNC80LDRgtC40LI= 120763 -w6dpbGVy 120764 -4LiH4Lio 120765 -6ZuG5Lit 120766 -0YDQuNGB 120767 -0YfQsNGU 120768 -bGnEn2lu 120769 -44O844K/44O8 120770 -0LDRgNCw0YI= 120771 -5Yqb6YeP 120772 -INGB0YXQtdC8 120773 -5YWl5Y+j 120774 -56a75byA 120775 -z4HOv8+Gzr/Pgc6vzrXPgg== 120776 -INCX0LDRgtC10Lw= 120777 -IGthcsWfxLFzxLFuZGE= 120778 -INin2YbYqti4 120779 -772K 120780 -IGXFn2l0 120781 -IHlhesSxbMSx 120782 -0JrQvtC8 120783 -2KfYstmK 120784 -IGtpbXNl 120785 -0YDQsNGJ0Lg= 120786 -4Lix4LiB4Liq 120787 -IGthbnVu 120788 -IOuQmOyXiA== 120789 -IM65z4PPhw== 120790 -INC80LXQtNC4 120791 -5rCn 120792 -77yM5YW25Lit 120793 -IHlva3R1 120794 -IOOCvQ== 120795 -INC/0YDQuNC+0LHRgNC10YI= 120796 -2YjbjNi0 120797 -44Wg44Wg 120798 -INqp2LHYr9mF 120799 -IGR1dmFy 120800 -IOe4 120801 -xLFzxLFy 120802 -IO+6jQ== 120803 -INCg0L7RgdGB0LjRjw== 120804 -4LmJ4LmD4LiZ 120805 -IGnFn2k= 120806 -ZG9s 120807 -INmF2K3ZhdmI2K8= 120808 -INGB0LDQvNGL0YU= 120809 -INio2YbYp9io2LHYp9uM2YY= 120810 -44KM44Gp 120811 -4Li44LiV4Liq4Liy4Lir 120812 -LsK7 120813 -4Li54LiK 120814 -IFRlcA== 120815 -44GP44KT 120816 -IOW4gw== 120817 -IOCkpOCksg== 120818 -IHNlcm0= 120819 -zrvPjM6z 120820 -IMWeaW1kaQ== 120821 -IOCknOCkqOCkpA== 120822 -LdCS 120823 -6Kiq 120824 -INCy0ZbQtNC/0L7Qsg== 120825 -4Li04LiZ4LiU 120826 -zrnPg868z4zPgg== 120827 -zqnOpA== 120828 -4oaS4oaS 120829 -zrnOus6/zq8= 120830 -INGB0L/RgNCw0LLQsA== 120831 -5py65YWz 120832 -IMOd 120833 -INC80L7QstCw 120834 -INC80L7Qs9C70LA= 120835 -INC00LvQuNGC0LXQu9GM 120836 -44GX44Gm44KC 120837 -IM6yz4HOrw== 120838 -INC20L7QtA== 120839 -6Zeq 120840 -INC80ZbRgdGM0LrQvtGX 120841 -zrfPgc61 120842 -56CC 120843 -IGt0ZXLDvWNo 120844 -INCT0L7Qu9C+0LI= 120845 -IGjhu5lw 120846 -IHBhbsOt 120847 -2KrZhdin2K8= 120848 -wpw= 120849 -5Y2B5YWt 120850 -zrrOv8+C 120851 -0LXQstGL0YU= 120852 -5ouS 120853 -INGB0YLQvtGA0L7QvQ== 120854 -IHBow7NuZw== 120855 -INGD0LvRg9GH0Yg= 120856 -bXJ0 120857 -bXBhcg== 120858 -IFNsYXY= 120859 -IGtvdg== 120860 -7J247J2A 120861 -IOW6lA== 120862 -4Lix4Lia4LiE 120863 -IGvDrA== 120864 -IGHFpQ== 120865 -xZnDrXQ= 120866 -7LCM 120867 -2YXZhtiq 120868 -xLF5b3JsYXI= 120869 -5q2j5bi4 120870 -0L3Rj9GC0YLRjw== 120871 -cmFjw60= 120872 -INC/0LjRgtCw0L3QuNGP 120873 -4LiI4Liw4LmA4Lib 120874 -INin2YTZh9mG2K8= 120875 -IERvc3Q= 120876 -INCS0LDRgdC40LvRjA== 120877 -IO2DhA== 120878 -IG7huqFu 120879 -4LmI4Lit4LmE4Lib 120880 -2LHZiNi2 120881 -wrHYuA== 120882 -IGJ5Y2hvbQ== 120883 -4LiZ4Lin4Lii 120884 -44Gg44Gj44Gm 120885 -INCY0YHQvw== 120886 -4LiE4Lij4Lia 120887 -IOC4quC4luC4suC4mQ== 120888 -IOuCrg== 120889 -amnFoXTEmw== 120890 -INmB2YjYqg== 120891 -IENoxrDGoW5n 120892 -IOydtOujqA== 120893 -IHDFmcOtdG9t 120894 -dHVhbA== 120895 -YmV0dGU= 120896 -IHNhYmFo 120897 -zrzOrw== 120898 -IG3hu4duaA== 120899 -44Gu44Gg44KN44GG 120900 -IHphbcSbxZk= 120901 -5Y2B5LqU 120902 -IOyViuydhA== 120903 -2KfZhtmI 120904 -0LXQvdGD 120905 -INGD0LPQvtC0 120906 -IFbGsOG7nW4= 120907 -IOuTseydhA== 120908 -IGJlbGlydGlsZW4= 120909 -5p+E 120910 -IHRla2xpZg== 120911 -rII= 120912 -INC/0L7QtNCw0YLQutC+0LI= 120913 -INin2YTZhtmH 120914 -77y0 120915 -7JuD 120916 -IOCkueCksg== 120917 -INC40LzRgw== 120918 -INC60L7RgtC+0YDRi9C8 120919 -77yM5Lul5Y+K 120920 -INGC0LDQsdC70Lg= 120921 -4KS+Og== 120922 -INio2LHYrA== 120923 -IM6tzr3Osc69 120924 -INmK2YjZhNmK2Yg= 120925 -w73FoQ== 120926 -INmK2Kw= 120927 -INGC0YDQvtGF0Lg= 120928 -5p6d 120929 -IGTDoHk= 120930 -IEJ1cmFkYQ== 120931 -IM+Dz4XOvM6y 120932 -IM6Rz4HPhw== 120933 -IHNvY2nDoWxuw60= 120934 -INqv2Yg= 120935 -IHlhbsSxdA== 120936 -44Gv44Gq44GE 120937 -44Gu5LiK 120938 -IG7Dumk= 120939 -INix2YHYqtin2LE= 120940 -INmF2LHYp9iq 120941 -2LLZhdin2YY= 120942 -4Liy4LiI4Liy4Lij4Lii 120943 -INGH0LjRgdC70ZY= 120944 -INiz2YbYqg== 120945 -IMOWemVsbGlrbGU= 120946 -7Ie8 120947 -IMSNw61t 120948 -QURERQ== 120949 -44Gu44KI44GG44Gq 120950 -2YjZhNmI2pjbjA== 120951 -IO2ZnOyaqQ== 120952 -44CB44Gp44GG 120953 -IM6gz4HPiQ== 120954 -55m75aC0 120955 -INC90LDQtNCw0L3QvdGP 120956 -INC80LXRgNC10LY= 120957 -IOydtQ== 120958 -asOtY8OtY2g= 120959 -aXRvdQ== 120960 -2YLZiNmE 120961 -2YXYrA== 120962 -INio2YbYrw== 120963 -IMO2bsO8bmU= 120964 -IO+9sA== 120965 -0LfQsg== 120966 -INC10YHRgtC1 120967 -0KDQmA== 120968 -0YDQvtC7 120969 -YXlsYQ== 120970 -INC60LvRgw== 120971 -5o6o6Jam 120972 -INGA0L7Qt9GA0LDRhQ== 120973 -IOyDgeuLtA== 120974 -INmG2LPZhdip 120975 -INCy0LjRhdC+0LQ= 120976 -4KWA4KSG4KSI 120977 -INC/0YDQuNGB0YLRg9C/ 120978 -2ZLYuQ== 120979 -IHRlxZ9la2vDvHI= 120980 -0LTRj9C60Lg= 120981 -IGZpa2ly 120982 -4Lix4Lio4LiZ 120983 -INii2LLZhdin24zYtA== 120984 -IGJpemk= 120985 -z4bOsc+B 120986 -5pyq5p2l 120987 -5pC6 120988 -IM60z4XOvc6x 120989 -INix2YjZhQ== 120990 -IGJ1bmRhbg== 120991 -INmC2KfZhNio 120992 -IGhhZnQ= 120993 -5b+9 120994 -INCc0L7RgA== 120995 -IHrDoXBhcw== 120996 -IOu5mw== 120997 -5bu3 120998 -5LqI57SE 120999 -IGtodXnhur9u 121000 -IM6RzpM= 121001 -IOyekeyXhQ== 121002 -4KSh4KSw 121003 -IGplZG5vZHVjaA== 121004 -4KWJ4KSu 121005 -IGRlxJ9pbGRp 121006 -IGtvbG8= 121007 -INiv2YLbjA== 121008 -0LvQsNC80Lg= 121009 -IEjhu41j 121010 -IOCkquCkuA== 121011 -IM6gz4HPjA== 121012 -IOKXkQ== 121013 -INC90LDRgdC70ZbQtA== 121014 -INC00LjQstC4 121015 -IHDFmWVzbsSb 121016 -INCi0LDQutC40Lw= 121017 -IHJ1a291 121018 -5LiA5YiH 121019 -INGB0L/RgNC4 121020 -ZW5za8Op 121021 -5pem 121022 -INmC2YY= 121023 -IMO6c3Rhdg== 121024 -4KS/4KS24KSk 121025 -4LmMKQ== 121026 -IFRyYW5n 121027 -IG1vaGxh 121028 -IM6VzrvOu863zr0= 121029 -INC/0L7QutC4 121030 -INii2YXYp9ix 121031 -5ZC+ 121032 -INGA0LXRgdC/ 121033 -IHRha2Rpcg== 121034 -IHJhaGF0c8Sxeg== 121035 -6Z+z5LmQ 121036 -IOKUgw== 121037 -aWxpcw== 121038 -INmI2KfZhNil 121039 -5a6Z 121040 -0YPQvNC+0LI= 121041 -INCb0LjRgg== 121042 -Ojo6Onw= 121043 -5YW9 121044 -INmG2LLYr9uM2qk= 121045 -0LXQu9GW0LI= 121046 -zrjOv8+Nzr0= 121047 -7JeQ7ISc64+E 121048 -6LWE5qC8 121049 -55CG6K66 121050 -IEtlbWFs 121051 -INC60LXRgA== 121052 -4Lip4Liy4Lii4LiZ 121053 -IOWNjg== 121054 -KeyXkA== 121055 -IOuKmA== 121056 -44Od44O844OI 121057 -INCX0LQ= 121058 -2KfYtdmK2YQ= 121059 -IGthdMSx 121060 -44KC44GX44KM44Gq44GE 121061 -INC60LDQttC00L7Qs9C+ 121062 -INC00YA= 121063 -IGZ1dGJvbA== 121064 -2YTZitmB 121065 -IOyngOuCnA== 121066 -INm+24zYtNmG2Yc= 121067 -w7xsw7xr 121068 -IOC4leC4s+C4muC4pQ== 121069 -IGLhuq1j 121070 -IOWboA== 121071 -aWtsZXI= 121072 -z4HOuc6s 121073 -INCy0LLQsNC20LA= 121074 -IHZ5cGw= 121075 -INCy0L3QuNC3 121076 -7YA= 121077 -55y+ 121078 -INGB0LjQu9Cw 121079 -INC90LDQu9C40YfQuNC4 121080 -INi52LHYp9mC 121081 -INin2YTZhdmD 121082 -5bCx5Lya 121083 -INC80ZbQsw== 121084 -IM6MzrzOuc67zr/Pgg== 121085 -0YnQtdCz0L4= 121086 -IO2WieyglQ== 121087 -wqBtcGg= 121088 -IG1hbMOp 121089 -INuM2KfZgdiq2Yc= 121090 -IG1ub2hh 121091 -zrPOrA== 121092 -INC/0L7RgdGC0YDQvg== 121093 -INin2YTZhdmI2LM= 121094 -IG9sbWE= 121095 -64m07Iqk 121096 -IHR1dGFy 121097 -44O844OT44K5 121098 -4KWN4KSl4KSo 121099 -LdC70LjQsdC+ 121100 -5qWt5YuZ 121101 -INC+0YHQvtCx0LvQuNCy0L4= 121102 -6K6A 121103 -2YHZh9mI2YU= 121104 -IGvhurs= 121105 -IMWhdMSb 121106 -IGPhuqdt 121107 -IMSNbMOhbmt5 121108 -IMSQaeG7h24= 121109 -KD0= 121110 -T1bDgQ== 121111 -dWxkdQ== 121112 -YWZ0 121113 -IGzDo2k= 121114 -IGRvbGR1cg== 121115 -wqDCoMKgwqDCoMKgwqDCoMKgwqDCoA== 121116 -zrLOuQ== 121117 -44Gj44Gm44GN44Gf 121118 -7Lac7J6l7JWI66eI 121119 -5a+d 121120 -IOu2gO2DgQ== 121121 -INin2YTYp9iu 121122 -IM6zz4XOvc6x 121123 -4KSP4KSu 121124 -4KWM4KSy 121125 -2LnYp9iv2Kk= 121126 -IM66zr/PhQ== 121127 -INmF2LfYsdit 121128 -INGH0LXQu9C+0LLQtdGH 121129 -IG51bWFy 121130 -INC00LjQvdCw 121131 -z4TPgc6t 121132 -zrvOuc66 121133 -INC00L7Qu9Cz0L4= 121134 -IG5oacOqdQ== 121135 -INCy0L7RgdGB0YLQsNC90L7Qsg== 121136 -YXDEsQ== 121137 -IGthbsSx 121138 -IEvhur8= 121139 -44KJ44Ga 121140 -IGhhcmVr 121141 -44Gg44GR44Gn 121142 -5ruF 121143 -IG9obGVk 121144 -0LXRgNC40Lw= 121145 -INit2YrZhg== 121146 -INmC2YfYsQ== 121147 -IOCkrOClnQ== 121148 -2KfZvtuM2YU= 121149 -6LaF6L+H 121150 -IOaF 121151 -INiq2YHYsw== 121152 -YXPEsXlsYQ== 121153 -0LHQuNGC 121154 -INit2KfYrA== 121155 -INGC0YDQtdCx0L7QstCw0L3QuNGP 121156 -IOaOqA== 121157 -IOexsw== 121158 -44Kz44O844OJ 121159 -INGD0YHQuA== 121160 -INin2K7ZhNin2YI= 121161 -IGRvc3R1cA== 121162 -INi52YTYp9mC 121163 -4KS/4KS14KS4 121164 -INC+0LTQuA== 121165 -dGVq 121166 -IHRo4buPYQ== 121167 -4Lix4LiB4Lip4LiT4Liw 121168 -INGA0LDRgdC6 121169 -INCd0LDRgNC+0LQ= 121170 -INC30LDQutGD0L8= 121171 -b8W+ZQ== 121172 -INin2KzYsdin 121173 -6rSR6rOg 121174 -0LDRgNGC0LDQvA== 121175 -INC/0LXRgNC10LY= 121176 -6JGj5LqL 121177 -INGP0LrQvtGB0YLRlg== 121178 -INCy0YPQuw== 121179 -0LzQvtC9 121180 -IGNobGFw 121181 -INGN0YLQvtC80YM= 121182 -0LDRgtGW 121183 -IO2SiA== 121184 -6KGX6YGT 121185 -2LPYrw== 121186 -2YjYsdmH 121187 -INiy24zYp9iv 121188 -5Zyo57q/6KeG6aKR 121189 -2KfZiNmK2Kk= 121190 -77yM5bCx5piv 121191 -ZWxlcmluZGVu 121192 -0YDQsNC20LQ= 121193 -INC/0L7Qt9C0 121194 -INC30L3QsNGC0Yw= 121195 -4Lix4Lia4Liq4LiZ 121196 -4KWH4KSW4KSk 121197 -IOabsA== 121198 -6rO87KCV 121199 -6a6u 121200 -IFZp4buHbg== 121201 -IGR2b2o= 121202 -zq/Ovc61z4TOsc65 121203 -IG9zb2Juw61jaA== 121204 -IOKAqg== 121205 -6Zm1 121206 -INiu2YjYr9i0 121207 -INin2YbYsQ== 121208 -INC/0YDQvtGE0LXRgdGB0LjQvtC90LDQu9GM 121209 -a8OhbQ== 121210 -INmF2YPYp9mG 121211 -INin2YTYo9iv 121212 -IOqzteu2gA== 121213 -IMSR4bupYw== 121214 -IEN1bWh1cml5ZXRp 121215 -5Ye644GX 121216 -0LTQsNC80Lg= 121217 -IOyImOyDgQ== 121218 -INmB2KjYsdin2YrYsQ== 121219 -IHPDvHJlc2k= 121220 -INio2Kw= 121221 -IOaUvg== 121222 -2K3bjA== 121223 -56CU56m25omA 121224 -5Ye654mI56S+ 121225 -INmF2YjYqtmI2LE= 121226 -JiYmJg== 121227 -INC/0LXRgNC10Lk= 121228 -IOyEoOqxsA== 121229 -IMO6c3DEm8Wh 121230 -2KfYsdqp 121231 -IGV0dGly 121232 -IOy2nOyepQ== 121233 -IEthbnVu 121234 -INGD0LzQtdC90YzRiA== 121235 -INC30LDRgtCy0LXRgNC00LY= 121236 -INin2YTYr9mI2YTZig== 121237 -IOODkw== 121238 -IEJhesSx 121239 -5a2Q44Gu 121240 -5Yev 121241 -IHNlYmVi 121242 -IOWFsQ== 121243 -IGRuxa8= 121244 -5L2N5LqO 121245 -IFpk 121246 -5omx 121247 -INiq2KzYsdio2Yc= 121248 -w5RORw== 121249 -IOyYrOudvA== 121250 -z4nPhM61z4E= 121251 -INGB0LLQuNC0 121252 -5q+U6LWb 121253 -44Gr5ZCR 121254 -7JyE66W8 121255 -44GX44G+44GX44Gf 121256 -IGThu4s= 121257 -INCg0YPRgQ== 121258 -IHbhu48= 121259 -4KSC4KSh4KSy 121260 -INC/0LjRiQ== 121261 -IHNtcnRp 121262 -4LiI4Liy4LiB4LiB4Liy4Lij 121263 -INGB0LDRhdCw0YA= 121264 -IHRob8OhdA== 121265 -2KzZhdip 121266 -INC/0L7Qt9Cy0L7Quw== 121267 -INin2YTYq9in2YbZitip 121268 -2LLYp9iv2Yc= 121269 -44CB5Lit 121270 -zq7OvM61z4HOsQ== 121271 -5qac 121272 -bGFjYcSfxLE= 121273 -INC90LDRiNC40YU= 121274 -7JSA 121275 -INCY0YHRgtC+0YDQuNGP 121276 -w7xuZGVraQ== 121277 -INC/0LXRgNC10Ls= 121278 -IOuqqeyGjA== 121279 -INGB0YLQsNGC0YPRgQ== 121280 -0L7QstCw0LvQuA== 121281 -xZlheg== 121282 -INC00YDRg9Cz0L7Qs9C+ 121283 -2YPZiNmF2Kk= 121284 -0YfQuNGB0YI= 121285 -zrzOvA== 121286 -5Y+N5bqU 121287 -aWNhcmk= 121288 -INm+2KfaqQ== 121289 -0LDQu9GM0L3QuNC8 121290 -IEJ1bmE= 121291 -0LjRgtC40LI= 121292 -0YTRgNCw 121293 -44O844OW44Or 121294 -INGC0L7QsdGC0L4= 121295 -65+s7Iqk 121296 -INin2YTYp9i5 121297 -5YWs6ZaL 121298 -5aWJ 121299 -2YjZhNiv 121300 -5ZCN54Sh44GX 121301 -5rCR5Li7 121302 -4KWB4KSc4KSw 121303 -7IKs66y0 121304 -IMO2bmNlbGlr 121305 -IOWo 121306 -0Y/QsQ== 121307 -55yJ 121308 -4KWN4KS14KSv 121309 -IEjDrG5o 121310 -55qE5Zyw5pa5 121311 -INin2YTYqtiz 121312 -5LiI5aSr 121313 -INC/0YPQsdC70ZY= 121314 -IG7Em2pha8Op 121315 -xJDhu5Fp 121316 -INGB0L7RgdGC0L7Rj9C90LjRjw== 121317 -4KWAKQ== 121318 -IMSR4bqtdQ== 121319 -amVk 121320 -6raB 121321 -IHNlbmlu 121322 -IEjDs2E= 121323 -4pmg 121324 -0LvRj9GO0YLRjA== 121325 -6Zey 121326 -7J247Yq4 121327 -2KrYqNmH 121328 -IOCksOCkluCkpA== 121329 -INGB0LvQvtCy0LDQvNC4 121330 -INi32KjZgg== 121331 -IHV5ZHU= 121332 -4Li44LiH4LmA4LiX4Lie4Lih4Lir4Liy4LiZ4LiE4Lij 121333 -IFNhbmF0 121334 -4LmJ4Liy4LiK 121335 -INC60L3QuNC2 121336 -zIFj 121337 -2KfZhdis 121338 -zrTPjg== 121339 -xa4= 121340 -IGJpbmg= 121341 -6L6G 121342 -bmXEn2k= 121343 -2LfZhg== 121344 -5biV 121345 -IOyHvA== 121346 -0L7RgdGA0LXQtA== 121347 -IM6/z4DOv86vzr8= 121348 -a8Sxcg== 121349 -4KWI4KS2 121350 -IOC4h+C4suC4mQ== 121351 -IGRydcW+ 121352 -ZW1hdGlr 121353 -YWTEscSf 121354 -6L6e 121355 -IHBvdcW+w612w6E= 121356 -IGt1cnRhcg== 121357 -IHNhxJ9sYW4= 121358 -44CP77yI 121359 -IG3Fr8W+ZW1l 121360 -INio2KfYrw== 121361 -5pyf6Ze0 121362 -2KfYqtmB 121363 -IHlhesSxbMSxbQ== 121364 -IOyXsOqysA== 121365 -2YrZgdip 121366 -IGVtaW4= 121367 -INC90LXRgdC60L7Qu9GM0LrQuNGF 121368 -27TbsA== 121369 -5a+n 121370 -zq/Ots61zrk= 121371 -IGTDqWw= 121372 -dmVyacWf 121373 -5L6h5qC8 121374 -INin2LPYqtin2K8= 121375 -INCw0LvQutC+0LM= 121376 -LkhDTQ== 121377 -zq/Ov8+C 121378 -zrHOug== 121379 -2LfYuQ== 121380 -44Gj44GN 121381 -0Y/QtdGC0YHRjw== 121382 -0LvQuNC60LA= 121383 -INGG0Y8= 121384 -IOuniOyngOuniQ== 121385 -INCw0YDQvNC4 121386 -IM6zzrvPjg== 121387 -RU7DjQ== 121388 -666k 121389 -rZDvuI8= 121390 -IOavjw== 121391 -IOaWvA== 121392 -IM66zrHOu8+N 121393 -INCi0L7QvA== 121394 -dWx1cg== 121395 -IGFrY2U= 121396 -INmF2YjYrNio 121397 -ZXNpeg== 121398 -0L3Rj9Cy 121399 -0LDQu9GM0L3Rg9GO 121400 -0LDQu9GW0YHRgg== 121401 -INCy0LDRgNGW 121402 -INmF2KTYsw== 121403 -INmF2KfbjNmE 121404 -IM68zrXPhM6xzr7PjQ== 121405 -5Ye644GZ 121406 -IHbhu51p 121407 -65+0 121408 -77yL 121409 -5q+O 121410 -IHRhYmk= 121411 -4oKD 121412 -5qOL54mM 121413 -IMOQ 121414 -INC/0YDQvtGE0LXRgdGW0Lk= 121415 -0YPQstCw0L3QvdGW 121416 -zpzOoA== 121417 -INC20LjQuw== 121418 -2pjZhg== 121419 -0LvRg9GI 121420 -4b20 121421 -0L7QstC10YA= 121422 -6L6844G/ 121423 -INCc0LDQutGB0LjQvA== 121424 -INCy0LfQs9C70Y/QtA== 121425 -INC90LDRgtGD 121426 -4KSu4KSV 121427 -INGF0LjQvNC4 121428 -INGA0L7Qt9GC0LDRiA== 121429 -2YjYsdin2YY= 121430 -INi02YfYsdmH2KfbjA== 121431 -5qmf6IO9 121432 -2K7YsA== 121433 -INGB0LLQvtGU0Zc= 121434 -0L3Rj9C10YI= 121435 -IGdo4bq/ 121436 -IHDFmWVkY2g= 121437 -0ZTRiA== 121438 -0L7Qs9GA0LDRhNGW0Y8= 121439 -IOC4l+C4s+C5g+C4qw== 121440 -5Z2K 121441 -z4HPic69 121442 -4Liy4Lij4Liw 121443 -IEvhur90 121444 -IGNo4bq3dA== 121445 -IOmZiA== 121446 -IGTEm2xhdA== 121447 -INCx0YPQtNGD0Yk= 121448 -IEHDp8Sxaw== 121449 -5qCq5byP5Lya56S+ 121450 -INCf0LDRgA== 121451 -IEtodQ== 121452 -44CB5paw 121453 -INCx0L7QuQ== 121454 -66eI7Yq4 121455 -INGB0L7Qv9GA0L7Qsg== 121456 -2LPYp9io 121457 -0L3QuNGB0YI= 121458 -5byD 121459 -INi02YbYp9iz 121460 -0LXQvdC90L7QvA== 121461 -IOmhuQ== 121462 -6Im65pyv 121463 -0L7Qt9C10Lw= 121464 -INGA0LXRiNC10L3QuNGP 121465 -bGFkeQ== 121466 -INCy0YHQtdC5 121467 -5pS75Ye7 121468 -IOqysOyglQ== 121469 -44CA776e 121470 -IOqwkOuPhQ== 121471 -LdCQ 121472 -IG3DrXI= 121473 -4KWB4KSq4KSP 121474 -0L3RltGG0LjQvw== 121475 -0LHQvtC8 121476 -IMWhdA== 121477 -6ZyN 121478 -INGA0LXRiNC10L3QuNC1 121479 -INC00LjQsNCz0L3QvtGB0YLQuA== 121480 -aXBhcg== 121481 -2KfbjNiy 121482 -w6NuZw== 121483 -4Lix4Lin4Lij 121484 -INGG0LDRgA== 121485 -IHNseQ== 121486 -zr3Pjg== 121487 -IEt1emV5 121488 -2LHbjNio 121489 -IGNlbnU= 121490 -IGNlcnRpZg== 121491 -INGC0YDQtdGC0Yw= 121492 -4Li04LiU4LiC 121493 -INC/0LDRhtGW0ZTQvQ== 121494 -xZlpdg== 121495 -6ISC 121496 -orA= 121497 -IFBo4bqnbg== 121498 -INC80LXRgtC+0LTQuA== 121499 -4bqk 121500 -7IaU 121501 -5ZCM5a2m 121502 -IOWAiw== 121503 -0LzQvtGC0YDRjw== 121504 -IHV2w6Fk 121505 -27Hbudu2 121506 -6YG45oqe 121507 -IcK7 121508 -65iQ 121509 -INuM2YjYqtuM 121510 -INin2YTYrdix2Kg= 121511 -0L7Qu9C+0LPRltGP 121512 -bmlsYQ== 121513 -IMSR4bqjbmc= 121514 -w6F6aQ== 121515 -0YDQvtGJ 121516 -IG9ydGFkYW4= 121517 -INin2K7YqNin2LE= 121518 -IOCkheCknA== 121519 -IOunpOyasA== 121520 -INC/0L7QuQ== 121521 -INis2Yo= 121522 -0LrRg9Cy0LDRgtC4 121523 -IOG7ng== 121524 -INio2LTYsQ== 121525 -INmD2YrZhA== 121526 -0YnQtdGB0YLQstC+ 121527 -IOyXrO2WiQ== 121528 -2KfZhdmK 121529 -0LLRltC70Yw= 121530 -IFBydm7DrQ== 121531 -INmI2LPbjA== 121532 -IMSQ4bs= 121533 -5oi/6Ze0 121534 -5Zyo57q/6ZiF6K+7 121535 -5pW3 121536 -IHRyYWk= 121537 -5L+X 121538 -INGB0LDQvNC+0YHRgtC+0Y/RgtC10LvRjNC90L4= 121539 -INGC0YDQtdCx0YPQtdGC0YHRjw== 121540 -zrTPgc6x 121541 -INGA0LXRh9C+0LI= 121542 -INCy0ZbQug== 121543 -INGA0YPRhw== 121544 -5aWn 121545 -IG9sZHXEn3VuYQ== 121546 -0LXQstGL0LU= 121547 -IOC4hOC4pQ== 121548 -2KfZhNmC 121549 -INGW0LzQtdC90ZY= 121550 -5pS75pKD 121551 -INGD0L3QuNCy0LXRgNGB0LjRgg== 121552 -IHRoxINt 121553 -INC70LjRgdGC0L7Qv9Cw0LTQsA== 121554 -4KWo4KWm 121555 -2K7Zig== 121556 -zpXOoA== 121557 -IGFydHTEsXI= 121558 -INiz2K7Yqg== 121559 -77yI5pit5ZKM 121560 -IM6fz4U= 121561 -0LjQstCw0L3QuNGP 121562 -IHN0YXZlYg== 121563 -4oWl 121564 -zrPPic6zzq4= 121565 -2ak= 121566 -INC40YHRgdC70LXQtNC+0LLQsNC90LjRjw== 121567 -5YCL5Lq6 121568 -IOuLpOyatOuwm+q4sA== 121569 -IM+EzrXOuw== 121570 -wrBO 121571 -INio2KfZhNmG 121572 -4LmM4Lie 121573 -IG5lbcWvxb5l 121574 -INCz0L7Qu9C+0LLQsA== 121575 -4LmM4LmB 121576 -5qKv 121577 -wpg= 121578 -zrTOt8+C 121579 -7J247Kad 121580 -bGF5xLFu 121581 -4b23 121582 -INmG2KrYp9uM2Kw= 121583 -INGB0L7QsdC70Y7QtA== 121584 -INC00LLQuNC20LXQvdC40Y8= 121585 -7Iw= 121586 -IHBvdsSb 121587 -IOyghOyXkA== 121588 -5aaC5LiL 121589 -INin2YTZhdiv2LE= 121590 -77yM5oiW 121591 -2KfYsdin 121592 -5rCR5peP 121593 -INio2LHZgg== 121594 -INC30LDQv9Cw0YE= 121595 -4LiZ4LmD4LiI 121596 -w6lm 121597 -IOC4n+C4ow== 121598 -IOuztOuCtA== 121599 -IOasp+e+jg== 121600 -LdGC0LDQutC4 121601 -6ama 121602 -0YDRltGP 121603 -5p+P 121604 -INC/0L7QstGW0YLRgNGP 121605 -57WE57mU 121606 -ZGHFnw== 121607 -IOCkueCkruCksg== 121608 -INGA0LXRlNGB0YLRgNCw 121609 -zqzOsg== 121610 -IM6gzr8= 121611 -IOq3uOumvA== 121612 -0YfQsNGO0YI= 121613 -4LiH4LiV 121614 -7YOA7J20 121615 -5oms 121616 -IHBvamlzdA== 121617 -IOeglA== 121618 -IOWPlg== 121619 -IMO8emVyaW5kZWtp 121620 -asWhw61jaA== 121621 -4KWA4KSm4KS1 121622 -5qqi 121623 -INC80LDRgtC10YDQuNCw0LvQvtCy 121624 -0LjQstCw0L3QvdGP 121625 -IOWwhg== 121626 -0LvQuw== 121627 -INC90LDQsdC70Y7QtA== 121628 -IEfDtno= 121629 -INCy0LfRjw== 121630 -55S16KeG 121631 -INCy0LDQug== 121632 -57+U 121633 -INCy0LfQsNC40Lw= 121634 -IGdpdHRp 121635 -aXRlbGVyaQ== 121636 -5Lu35YC8 121637 -INin2YTYqti1 121638 -4KS/4KSo4KSV 121639 -6YCa44KK 121640 -INGB0YTQtdGA 121641 -55m65aOy 121642 -4p2k 121643 -INqv2YjYtNuM 121644 -0LDQs9Cw0YLQvg== 121645 -IM+Dz4XOs866 121646 -0LDQstC40YE= 121647 -5oKj6ICF 121648 -INiu2KfZhQ== 121649 -zpnOms6XzqM= 121650 -xLFuxLF6ZGE= 121651 -cGFuxJts 121652 -IMSQ4buLYQ== 121653 -4LmB4Lil4Liw4Liq 121654 -IOOCgg== 121655 -IHNvbnVjdW5kYQ== 121656 -7J2N 121657 -ZWxlc3M= 121658 -IE5oYQ== 121659 -IHpha8Oheg== 121660 -INCy0L7RgdGC 121661 -IHZ6ZMSbbMOhdsOhbsOt 121662 -LeC4oQ== 121663 -IG1ldHLFrw== 121664 -INm+2KfbjNuM2YY= 121665 -INGA0LDRgdGC0LXQvdC40LU= 121666 -IG114buRaQ== 121667 -6LWE6YeR 121668 -IMWfw7xwaA== 121669 -2YrZhNmF 121670 -IGTDvMWfw7xuYw== 121671 -INC60ZbQvA== 121672 -IM+Hz4nPgc6vz4I= 121673 -w6F6ZXY= 121674 -IERlxJ9lcg== 121675 -5bel5qWt 121676 -INix2YXYsg== 121677 -IGFsZXNwb8WI 121678 -INC/0YDQtdGB0YLRg9C/ 121679 -INi52YTYp9mI2Yc= 121680 -IG1lcmFr 121681 -4LmMOg== 121682 -546w5Zy6 121683 -0YbQstC10YI= 121684 -IOCkquClnA== 121685 -IOuLpOydjOqzvA== 121686 -dWRpYw== 121687 -IExlcA== 121688 -INC+0LTQvdGW 121689 -IGFsYXJhaw== 121690 -5a6J5o6S 121691 -IOC4guC4meC4suC4lA== 121692 -cmV6ZW50 121693 -aXNpbmRlbg== 121694 -2LHZiNuM 121695 -IHBsdQ== 121696 -56uL44Gm 121697 -0YvQstCw0L3QuNGP 121698 -IHJhc3Q= 121699 -IGTDvHplbmxlbQ== 121700 -amV6ZA== 121701 -INCy0LXRidC10YHRgtCy 121702 -INC00LjRgNC10LrRgtC+0YA= 121703 -0YTRhA== 121704 -dGFpbm1lbnQ= 121705 -INin2YTZiNiy 121706 -bGFuZGE= 121707 -INmG2q/Zh9iv 121708 -INC/0YDQvtGC0LjQstC+0L8= 121709 -44Gj44GP 121710 -44Go44Gq44KK 121711 -IOuwnOqyrA== 121712 -aWN0b3I= 121713 -44K444Kq 121714 -zp/Opg== 121715 -INGB0LrQu9Cw0LTRlg== 121716 -IG9ic2FodWpl 121717 -IFVrcmE= 121718 -5pWm 121719 -IM+HzrHPgc6x 121720 -INGA0LXQs9GD0LvQuA== 121721 -5L+644Gv 121722 -4Lix4LiV4Lin 121723 -6YSJ 121724 -INio2KfbjA== 121725 -6Yq3 121726 -IE7hurVuZw== 121727 -0LvQvtC0 121728 -2KfYsdmB 121729 -5rSB 121730 -IOuPmeydvA== 121731 -0YLQuNCy0L3QvtCz0L4= 121732 -4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB4pSB 121733 -IC06LQ== 121734 -7Lus 121735 -INGI0LDQsw== 121736 -7KCE7J6Q 121737 -55qE5LqL5oOF 121738 -INGA0LXQs9GW 121739 -4KS/4KSv4KSy 121740 -INCd0LDQtw== 121741 -INCZ0L7Qs9C+ 121742 -INCg0L7QvA== 121743 -IMOWcm5lxJ9pbg== 121744 -INC/0YDQtdGB 121745 -dWx1xJ91 121746 -INC30LDQtNC+0LI= 121747 -xZllaA== 121748 -5q+V5Lia 121749 -IHRo4bqtcA== 121750 -64K4 121751 -IGRsb3Vob2RvYg== 121752 -0LTRltC70YM= 121753 -YWxhdA== 121754 -5Luw 121755 -0L7QutC+0Lw= 121756 -INGE0ZbQu9GM 121757 -IE5nw6Ju 121758 -INiq2LHZgw== 121759 -INGC0Yk= 121760 -2LHZiNiv 121761 -w6d1aw== 121762 -cmFuw60= 121763 -IGRvbGHFnw== 121764 -IFF1YW5n 121765 -IHDFmWVkcG9r 121766 -IG7DoW3Em3N0w60= 121767 -0L7QudGH0LjQsg== 121768 -54uA 121769 -INCx0LjQt9C90LXRgQ== 121770 -44Gf44GP 121771 -IOyduOyynA== 121772 -0L7RgNC+ 121773 -IEvDvHJ0 121774 -6re465+s 121775 -0YbQsNGC0Yw= 121776 -IELDqm4= 121777 -IGFjxLE= 121778 -2qnYtA== 121779 -77yI5bmz5oiQ 121780 -IOiBlA== 121781 -KeOAgQ== 121782 -ZGlsZXI= 121783 -0YfQuNGC0Yw= 121784 -xq/huw== 121785 -6Zm2 121786 -aWxlY2XEn2luaQ== 121787 -IHbFoWVt 121788 -5byA5aWW 121789 -6KeE5qih 121790 -dWxtdcWf 121791 -IOWImA== 121792 -0LXQvg== 121793 -INC/0LXRgNC10LLRltGA 121794 -5YiG5Yir 121795 -IGplZG7DoQ== 121796 -bGnEn2U= 121797 -INix2YXYttin2YY= 121798 -xLFrbMSx 121799 -2YfZgA== 121800 -6YeN54K5 121801 -0YfQuNCy0LDQtdGC0YHRjw== 121802 -66Gc7ISc 121803 -z4TOtc+Bzr8= 121804 -5Zyw5LiL 121805 -0LTQvdCw0L3QvdGP 121806 -IG5nxrDhu6Nj 121807 -4KWq 121808 -IM6Rzrs= 121809 -IGFsYWNhaw== 121810 -IOC5gOC4hw== 121811 -2KfbjNmG2K8= 121812 -IGjDoGk= 121813 -0YDQvtC40Lc= 121814 -INCn0Lg= 121815 -INGP0YE= 121816 -2K7YsduM2K8= 121817 -IGh1ZGVi 121818 -5Zyn 121819 -IOyEvA== 121820 -5ZSv5LiA 121821 -INCy0ZbQu9GM 121822 -INio2KfZhNin2KrYsQ== 121823 -4Lit4LiB4Liy4Liq 121824 -IFTDtGk= 121825 -4Lih4LiC 121826 -b21vcg== 121827 -IE9sb21vdQ== 121828 -IHhvbmc= 121829 -IGRvbcOhY8Ot 121830 -INin2K7YqtuM 121831 -INGC0LXRhdC90ZbRhw== 121832 -IGnFn3Rl 121833 -4KWM4KSm 121834 -INC90LDQtNC10LY= 121835 -2K7bjNi1 121836 -5Yqq5Yqb 121837 -INiq2KzZh9uM2LLYp9iq 121838 -IHZvbGU= 121839 -a2luY2k= 121840 -IGhlc2Fi 121841 -INGB0LXRgdGC 121842 -2qnYpw== 121843 -0YLQtdGA0L0= 121844 -4Lij4Lij4LiE 121845 -5Y+C6ICD 121846 -INCa0LDQsQ== 121847 -IMSwbXBhcg== 121848 -IG7DoXZyaA== 121849 -5ZKo6K+i 121850 -4LiW4Liy4Lih 121851 -IHllcmVs 121852 -IMOWbA== 121853 -54yb 121854 -INin2YTZiNi32YbZig== 121855 -IOydtOyWtA== 121856 -4Li04LiX4Lii4Liy4Lio4Liy4Liq4LiV4Lij 121857 -IEHFnw== 121858 -INC30LXQvNC70Y4= 121859 -INC00L7QvNCw0YjQvdC40YU= 121860 -INGD0LLQtdGA 121861 -QUxJ 121862 -0LPQsNC9 121863 -IOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgA== 121864 -IGRvc3Rhbg== 121865 -ZXpwZQ== 121866 -44GL44GE 121867 -2LHZgdiq2Yc= 121868 -INC80YPRgQ== 121869 -4LmM4Lif 121870 -6Ka6 121871 -0LDQu9C40LfQsA== 121872 -INGD0YfRgNC10LbQtA== 121873 -INqp2KfZhA== 121874 -IGV0a2lzaQ== 121875 -5L2G5piv 121876 -IHNvdXZpcw== 121877 -IFNhdmHFn8Sx 121878 -INio2LPYqNio 121879 -zp/OuQ== 121880 -6Jo= 121881 -IOau 121882 -IOyYgeq1rQ== 121883 -2KfYs9uM2YjZhg== 121884 -INin2YTYp9iq2K3Yp9iv 121885 -INCz0LvRjw== 121886 -4LmH4LiB4LiL 121887 -INis2YjZhg== 121888 -INin2YTYsdiz2YXZig== 121889 -wqBH 121890 -INGC0L7QsdGW 121891 -woc= 121892 -IOuMgO2WiQ== 121893 -54q25oWL 121894 -IOq3uOuDpQ== 121895 -INC40LzQvw== 121896 -INiq2YbYuNuM2YU= 121897 -2YTYp9uM2YY= 121898 -0YHRgtCy0LXQvdC90YvQvA== 121899 -0L7Qv9C+0Ls= 121900 -2LHZiNis 121901 -IOC4hw== 121902 -IOeCug== 121903 -IFVsdXNsYXJhcmFzxLE= 121904 -4KWM4KSC 121905 -44CB44Gd44GG 121906 -INiz2KfYr9mH 121907 -zq3Osc+C 121908 -IOCkhuCksg== 121909 -LdGE 121910 -IM6gzr/Ou865 121911 -INC90L7Rj9Cx0YDRjw== 121912 -2YjZhNmK 121913 -5puc5pel 121914 -5oyB57ut 121915 -IOq8rQ== 121916 -ZWNlxJ9peg== 121917 -INuM2KfZgdiq 121918 -IOWPuA== 121919 -4KS+4KSX4KSk 121920 -IOaVhQ== 121921 -INCw0LvQu9C10YDQsw== 121922 -IHR1eg== 121923 -0LXRgNGC0Lg= 121924 -IHRo4bqndQ== 121925 -44CA44CA44CA44CA44CA44CAIOOAgA== 121926 -LeCkhQ== 121927 -INC40LzQvNGD 121928 -0YDQsNC5 121929 -5Li7576p 121930 -IGJhxZ9sYXI= 121931 -IOS4iua2qA== 121932 -2LnYpw== 121933 -IM6Zz4k= 121934 -4Li14Lii4LiH4LmD4Lir4Lih 121935 -INin2YTZhdiv2YrZhtip 121936 -0YHRjNC60L4= 121937 -INiq2KfYsduM2K7bjA== 121938 -YXTDrW0= 121939 -4oCa2Lc= 121940 -2KLYrtix 121941 -IOuEow== 121942 -INmG2YXYp9uM2K8= 121943 -44GV44KT44GM 121944 -IGLDsg== 121945 -IOC4leC4suC4oQ== 121946 -67O07JWY64uk 121947 -0LDRgtGW0LI= 121948 -INGE0LjQuw== 121949 -IGvEsXNtxLE= 121950 -aeG7h25n 121951 -IGF5ZMSxbg== 121952 -6YGV44GE 121953 -0LXQstC4 121954 -IOW+rg== 121955 -KO2BrOq4sA== 121956 -INqv24zYsQ== 121957 -7JWE7ISc 121958 -IM60zrfOvM65zr/Phc+BzrM= 121959 -44Gr44GK44GE44Gm 121960 -IMOcTsSw 121961 -0LjRgtC+0Lw= 121962 -2LnZhNin2YU= 121963 -5ZCO55qE 121964 -IHBsw6E= 121965 -4Lib4Lij4Liw4LmC4Lii 121966 -56KO 121967 -IOmYsg== 121968 -64qU64uk 121969 -IOaXpeacnw== 121970 -IGdlw6dlcmxp 121971 -0LvQsNGC0Ys= 121972 -IG11dGxha2E= 121973 -2YjYug== 121974 -4LmA4Liu 121975 -IO+7ow== 121976 -ZWRla2k= 121977 -4LmM4LmA4LiZ 121978 -INC90LDQudCx0ZbQu9GM0Yg= 121979 -77yK 121980 -IOC5guC4o+C4hw== 121981 -IGZvdGJhbA== 121982 -IOmAgQ== 121983 -4oCM2KfZhNmF2YQ= 121984 -z4nOvM6sz4TOuc6/ 121985 -IMO6a29s 121986 -5Y2a5aOr 121987 -ZHVi 121988 -xLFsxLHEnw== 121989 -65Oc66W8 121990 -54uQ 121991 -zrHOu867 121992 -5q275Lqh 121993 -INC/0YDQtdC00L/QvtGH 121994 -57W1 121995 -INC80YPQt9GL 121996 -0LXRgNGC0LI= 121997 -INmD2YbYrw== 121998 -IHVsb8W+ 121999 -zp/Opc6b 122000 -Z2lsaQ== 122001 -w7xzdMO8 122002 -0L3QutC4 122003 -INmC2YjYp9mG 122004 -zrnOsc66 122005 -IMWfZXI= 122006 -INC60LjRgdC7 122007 -2YHYttmE 122008 -INCQ0YQ= 122009 -zrPOtc69 122010 -IGRvc3RhbA== 122011 -IHNhxJ9sxLFrbMSx 122012 -5a625peP 122013 -xJBU 122014 -0LXRgNC40L0= 122015 -IOydtOufrO2VnA== 122016 -IGTDvG55YWRh 122017 -IG5o4bqvYw== 122018 -wqDCoAo= 122019 -zr3Ot8+Dzrc= 122020 -zrPPgc6xzrzOvM6x 122021 -IHRha3Nvbg== 122022 -IFTDvHJrw6dl 122023 -INmB2LHYp9mG2LPZhw== 122024 -5aSp5aCC 122025 -5rq2 122026 -IG90bw== 122027 -6LW1 122028 -Y2h5Yg== 122029 -IOW+kg== 122030 -z4TPjQ== 122031 -w6Fobm91dA== 122032 -4KWN4KSq4KSw 122033 -IHZsYXM= 122034 -IO2aqOqzvA== 122035 -IHRoYW5n 122036 -IG9sbWFzxLFuYQ== 122037 -INC/0L7RgNGD0YjQtdC90L3Rjw== 122038 -IHF14bu5 122039 -IO2dkA== 122040 -IOyIqA== 122041 -IOuyiOynuA== 122042 -4bq5bg== 122043 -INC30LPQvtC0 122044 -INiq2LI= 122045 -INin2K7Yqti1 122046 -INC30YPRgdGC0YDRlg== 122047 -IHThurduZw== 122048 -4b+2zr0= 122049 -IOy9nA== 122050 -0L7QstCw0L3QuNGF 122051 -4oCM2LTYrw== 122052 -IGFyYXlh 122053 -cm92w6k= 122054 -INin2K7YqtmE 122055 -0LvQuNCy0LjQuQ== 122056 -INin2KrYrdin2K8= 122057 -IGFrxZ9hbQ== 122058 -INqp2YTYp9iz 122059 -44Ki44OD44OX 122060 -IHppaA== 122061 -5YeM 122062 -5bGx5biC 122063 -IMOnZXZyZXM= 122064 -INC+0LPRgNC+0Lw= 122065 -INii2K/ZhQ== 122066 -IHTEm2xv 122067 -77yM5pys 122068 -INqY2KfZhtmI24zZhw== 122069 -IGtyYWpl 122070 -zrzOr86x 122071 -6IW/ 122072 -4oCeVG8= 122073 -5rG65a6a 122074 -7Ic= 122075 -IOmS 122076 -IM6jz4TOsQ== 122077 -INis2YXZh9mI2LE= 122078 -IEdlbsOn 122079 -csOhbQ== 122080 -INCg0LXQtw== 122081 -IHZ5dHbDoQ== 122082 -INC/0YDQvtC40LfQstC+0LTRgdGC0LLQsA== 122083 -INmF2LDZhw== 122084 -IGlodGl5YWM= 122085 -44Kv44K7 122086 -IG7DqnU= 122087 -5b6z 122088 -IOuTnQ== 122089 -0L3QsNGH0LU= 122090 -IM+Dz4XOvM68zrU= 122091 -z4bPic69 122092 -0LLQsNCy0YHRjw== 122093 -INCy0LjRgtCw0LzQuA== 122094 -zIF0 122095 -IGZpbmFuxI1uw60= 122096 -5Y+K5YW2 122097 -4oCF 122098 -54u8 122099 -4Lix4Lia4LiV 122100 -44Gb44KL 122101 -zpnOms6f 122102 -zrvOu865 122103 -0YLQvtGO 122104 -2KfYudmK2Kk= 122105 -dsOtY2U= 122106 -0L7QvdGW0LI= 122107 -7KOE 122108 -5bug 122109 -INi02YrYoQ== 122110 -INCi0LXQvA== 122111 -INin2KjYstin2LE= 122112 -IFRIUFQ= 122113 -zrPOs8+BzrHPhg== 122114 -IOuMgO2VtOyEnA== 122115 -IFBo4bqhbQ== 122116 -0YbQuNC+0L3QvdC+0Lk= 122117 -fC8= 122118 -IOOCuOODow== 122119 -0YzRjtGC 122120 -0YPQt9GL 122121 -INmF2KfYrw== 122122 -IG3Em2x5 122123 -IOeIsQ== 122124 -IHLDoWQ= 122125 -4LiE4Lin4Lia4LiE 122126 -4KWIPw== 122127 -IGxpZGk= 122128 -bWFtxLF6 122129 -IOC5geC4gQ== 122130 -44Kv44K344On44Oz 122131 -4Lit4Liz4LiZ4Lin4Lii 122132 -ZXPDoXQ= 122133 -IHZpw6pt 122134 -6KGM5Yqo 122135 -4Lih4Liy4LiB4LiB4Lin 122136 -INiu2YjYp9io 122137 -IHNlcmJlc3Q= 122138 -xZnDrXo= 122139 -IO2YhOuMgA== 122140 -44CM44Gd44GG 122141 -54K4 122142 -b21paw== 122143 -IMSwcmFu 122144 -IGVyacWf 122145 -INGB0LXQu9Cw 122146 -INin2LHYstuM 122147 -44OI44Oq 122148 -IELEmw== 122149 -0LXQutGD 122150 -0KfRgtC+0LHRiw== 122151 -IGFubGFtZGE= 122152 -zpHOmA== 122153 -IExJTkVBUg== 122154 -5pyJ54K5 122155 -0YLQsNGA 122156 -aXRsZXI= 122157 -IG7DrcW+ 122158 -INCh0YHRi9C70LrQuA== 122159 -5bY= 122160 -INCy0L/QvtC7 122161 -INiv2YLbjNmC2Yc= 122162 -IOS9kw== 122163 -2LHZiQ== 122164 -65Sw 122165 -IOCkleCktQ== 122166 -INC20LjRgA== 122167 -5pGG 122168 -IOykkeyLrA== 122169 -INC60YPQsQ== 122170 -IHpsZXA= 122171 -INGA0YvQsQ== 122172 -6bO0 122173 -4LmB4Lic4LiZ 122174 -IO2A 122175 -INCd0LXRgg== 122176 -xb5pdMSb 122177 -IGLEg25n 122178 -IEhhdmE= 122179 -IOuqqOuNuA== 122180 -IEjDo3k= 122181 -IOydtOqygw== 122182 -IOyDgeyEuA== 122183 -bWVtacWf 122184 -IM64zq3Pg863 122185 -4KSj4KSo 122186 -IHNrdXRlxI1uxJs= 122187 -IFRhcmloaQ== 122188 -IHRleHR1 122189 -77yM6YCZ 122190 -INin24zZhtiq2LHZhtiq24w= 122191 -INm+2KfYrw== 122192 -4Li04LiZ4LiB4Liy4Lij 122193 -IE5n4buNYw== 122194 -INGA0L7QsdC40YLQuA== 122195 -7ZaI6rOg 122196 -IOCkruCkow== 122197 -0JvQmA== 122198 -INC/0L7RgtC10YA= 122199 -0YHQvtC8 122200 -INin2YjZhNuM2Yc= 122201 -6ZuR 122202 -IEdpw6E= 122203 -IGthbmFs 122204 -IGF2YW50YWo= 122205 -IHJ5Yg== 122206 -2K7YqtmH 122207 -INmI2LHZiNiv 122208 -0JLRgg== 122209 -z4nPg861 122210 -6riw66Gc 122211 -INCb0ZY= 122212 -IHThuqNuZw== 122213 -INi12YTZiQ== 122214 -INGD0LvRiw== 122215 -IGN14buRbg== 122216 -INCQ0L3Qsw== 122217 -INiv2KfZiA== 122218 -INGI0LvRj9GF0L7QvA== 122219 -IMSNbG92xJtrYQ== 122220 -ZGV0ZQ== 122221 -0YrQtdC8 122222 -4LmM4LmD4LiZ 122223 -4KSV4KSo 122224 -5Yik5pat 122225 -luyXkA== 122226 -z4TPic+Dzrc= 122227 -INmB2YbYp9mI2LHbjA== 122228 -IHlhxZ/EsW5kYQ== 122229 -IM+Dz4fOrQ== 122230 -IHnEsQ== 122231 -IHDFmWVu 122232 -INGE0L7RgNC80YPQstCw0L3QvdGP 122233 -w7xtw7zFnw== 122234 -IM60zr8= 122235 -xLFtxLF6xLFu 122236 -IOmihA== 122237 -0L7RgdGC0YzRjg== 122238 -INC+0YLQutGA0YvRgg== 122239 -INij2LrYs9i32LM= 122240 -IEFzcA== 122241 -INGD0LfQvQ== 122242 -INmI2KfYs9iq 122243 -ZWxlcmxl 122244 -6JWJ 122245 -INiq2qnZhg== 122246 -0YPQvNGD 122247 -4LmM4LiL 122248 -4KS+4KSm4KSo 122249 -IOKAi+KAi+KAiw== 122250 -IGFsxLF5b3I= 122251 -IO6h 122252 -2YXYr9ip 122253 -IM+DzrXOuQ== 122254 -IOi/mQ== 122255 -IMWeZWhpcg== 122256 -0LXQvdGC0LDQvNC4 122257 -44K/44Or 122258 -4Lir4Liy4Lii 122259 -0LDQudGC 122260 -IGhhcmM= 122261 -44CC44GK 122262 -INiq2KPYq9uM2LE= 122263 -4Liy4LiK4LiZ 122264 -IHRo4bqtbQ== 122265 -IOa/ 122266 -IG3FqWk= 122267 -IHBydm7DrW0= 122268 -INCx0LDQs9Cw0YLRjA== 122269 -44GV44KJ44Gr 122270 -YmnDqm4= 122271 -5bqU5b2T 122272 -7J2067KE 122273 -IHBvdcW+w610 122274 -IG9rYW3Fvg== 122275 -ZXNpbg== 122276 -dsSbbA== 122277 -INi22Yg= 122278 -6Luf 122279 -LdC3 122280 -4KWI4KSk 122281 -6KiI566X 122282 -cmFiaWxpcg== 122283 -INCg0L7RgdGW0Zc= 122284 -IHBsYXTDrQ== 122285 -IGRvc3DEm2w= 122286 -INix2LbYpw== 122287 -IG5vdsOpaG8= 122288 -INC90LDRhtC40L7QvdCw0LvRjA== 122289 -INCQ0LE= 122290 -44GM44GC44Gj44Gf 122291 -IOu5iA== 122292 -4oCM2YU= 122293 -5bGe5LqO 122294 -IHRhbmU= 122295 -2YrYp9mH 122296 -IM6yzr8= 122297 -IOuKpQ== 122298 -44OH44Kj44O844K5 122299 -INiw2YPYsQ== 122300 -IG9idnlrbGU= 122301 -IGJpcmluY2k= 122302 -INin2YTYstix 122303 -7J2067mE 122304 -INil2K8= 122305 -IEVrb24= 122306 -0J/QvtC7 122307 -INCy0LXRgNC+0Y/Rgg== 122308 -IHlhcmFybGFu 122309 -INCw0YDQvtC8 122310 -IOmE 122311 -IGlkZGk= 122312 -acSNa2E= 122313 -c3RydWtjZQ== 122314 -bcO8xZ90w7xy 122315 -z4XPhM+M 122316 -66Gx 122317 -IGFsbWFrdGFkxLFy 122318 -0LXQvdC40Y/QvNC4 122319 -4Li14Lii4LiZ4Lij 122320 -4LmH4LiZ4Lin 122321 -0LjQutGD 122322 -0LXQvdC60LA= 122323 -4oCZeWk= 122324 -IHBvaG9k 122325 -INiy2LE= 122326 -IHjhuqV1 122327 -IOC4oOC4suC4qQ== 122328 -wqDQng== 122329 -IM60zrnOug== 122330 -INC90LDQt9C40LLQsA== 122331 -5Y+q6IO9 122332 -5aSn6YeP 122333 -IMSR4bq/ 122334 -IOesrOS6jA== 122335 -IGtpxZ9pbGVyaW4= 122336 -IGRvYnLDqQ== 122337 -6am+ 122338 -IGTFr2xlxb5pdMOp 122339 -66Gk 122340 -zrzOrc69zr/PhQ== 122341 -IHRyw7o= 122342 -IGJpw6dpbQ== 122343 -INCd0JA= 122344 -IOW+jA== 122345 -IGR1eWc= 122346 -5Z6C 122347 -0IbQhg== 122348 -IGV0bWV5ZQ== 122349 -INmE2KjYp9iz 122350 -INC00LLRlg== 122351 -IOq4tA== 122352 -0YbRltC50L3Qvg== 122353 -zrrPhM6u 122354 -772d 122355 -INGE0LXQstGA0LDQu9GP 122356 -5a+r 122357 -IOqyqA== 122358 -IHnEsWxsYXJkYQ== 122359 -INC30YPQvw== 122360 -IG9iY2hvZG7DrQ== 122361 -INin2LbYp9mB2Yc= 122362 -0LLQtdGA0LY= 122363 -IOaghw== 122364 -2KzYp9is 122365 -INix2YjYs9uM 122366 -IHN0YW5kYXJ0 122367 -w6lydQ== 122368 -KeydhA== 122369 -0LTQtdC60YE= 122370 -IOKImg== 122371 -IMSwbmdpbGl6Y2U= 122372 -6Iqd 122373 -6Lqr5LiK 122374 -2J/Ynw== 122375 -IG3hur0= 122376 -zpHOlA== 122377 -0LXQvdGB0LjQsg== 122378 -4oCZdGE= 122379 -4LmJ4Liy4LiB 122380 -zp/Om86fzpM= 122381 -5LuY44GR 122382 -IHPDoG5n 122383 -IOCkueCknw== 122384 -0YvRiNC70LXQvQ== 122385 -INiu2LfYsQ== 122386 -INC90LDQudGC0Lg= 122387 -55u45L+h 122388 -z4nOtA== 122389 -4KSU 122390 -IGRvcGFk 122391 -4LmE4Lif4Lil 122392 -5oG1 122393 -7YKs 122394 -xLHFn21h 122395 -44GP44KM44Gf 122396 -IG5hcHJvc3Q= 122397 -INGB0L7RgdGC0LDQstC1 122398 -INmI2LPYtw== 122399 -4LmV 122400 -6ZaL55m6 122401 -INC00LXRgNC10LLQsA== 122402 -LdCU 122403 -4LiH4LiK 122404 -4Li04LiV4Lii 122405 -INin2YTZgtin2YbZiNmG 122406 -44K544Kr 122407 -bMOtxb4= 122408 -INCw0L3QsNC70LjQtw== 122409 -IHByb2Jsw6lteQ== 122410 -5paH5a2m 122411 -55eF6Zmi 122412 -0YHQtdC0 122413 -77yM5bCP 122414 -INi52LTZgg== 122415 -44Gw44GL44KK 122416 -INi52YLYrw== 122417 -2K3Zitip 122418 -IOuwlOuejeuLiOuLpA== 122419 -aW5jbHU= 122420 -IOuTnOumveuLiOuLpA== 122421 -5Y2r55Sf 122422 -INCy0LjQtNGD 122423 -4Li44Lia4Liy4Lil 122424 -0YDRg9C60YI= 122425 -INC+0YHQstGW0YI= 122426 -IHZlbGvDvQ== 122427 -IGNodMSbbA== 122428 -5omT5byA 122429 -INC30LDQutC+0L3QvtC00LDRgtC10LvRjA== 122430 -0LDQvdGB0Lg= 122431 -7LaY 122432 -INmF2LHYp9is 122433 -5YGc5q2i 122434 -INCy0L7QvdC+ 122435 -7KCV7J20 122436 -IHJvenNhaA== 122437 -IOaZtA== 122438 -IHphamlzdA== 122439 -wqDQvA== 122440 -dMSxxJ/EsW7EsQ== 122441 -IGhpem1ldGk= 122442 -Ls6R 122443 -INmF2LnZhdmI2YTYpw== 122444 -IMW+aQ== 122445 -IGfhu41u 122446 -6IyC 122447 -IGh1eg== 122448 -zrbOtc65 122449 -4KWJ4KSf 122450 -INC40LfQtNC10Ls= 122451 -7J6W 122452 -IOuUsOuluA== 122453 -IGtpYQ== 122454 -IHpuxJtuw60= 122455 -INC+0YDQs9Cw0L3QuNC30LA= 122456 -2KfYstin2Ko= 122457 -IHJlxb5pbQ== 122458 -INCy0LXQvdGC0Lg= 122459 -YsOhY2g= 122460 -INC+0LTQvdC+0LzRgw== 122461 -IGtpdGFi 122462 -IGZyYW5jb3V6 122463 -INij2YQ= 122464 -INiz2LHZiA== 122465 -2ZHZhA== 122466 -INC80LDQvQ== 122467 -67CN 122468 -INC60YPQtNCw 122469 -2Y/Ysw== 122470 -44CC5q2k 122471 -2KfYtNip 122472 -4LiC4Lit4LiH4Lic 122473 -5Li75Lu7 122474 -0LjQstGI0Lg= 122475 -IOC4geC4o+C4gQ== 122476 -0LXQutGB0Lg= 122477 -0LjRgtC10YI= 122478 -INij2YTZgQ== 122479 -0LDQvdC40LzQuA== 122480 -44Oa44O844K4 122481 -INC/0YDQsNCy0LjQuw== 122482 -5aqS5L2T 122483 -0Y7RidC10LU= 122484 -5LiA5Lq6 122485 -zrLOvw== 122486 -7Iu4 122487 -0L7Qt9C90LA= 122488 -5aSJ5pu0 122489 -INmF2LTZh9iv 122490 -5rOV5Lq6 122491 -IEJha2FuxLE= 122492 -INGF0L7Rh9Cw 122493 -IM6xzr4= 122494 -IHZlcmlsbQ== 122495 -IGtvbnVz 122496 -zrzOtc69zrc= 122497 -IOmmrA== 122498 -IOyLpOygnA== 122499 -IGplZG5v 122500 -INCx0LDQsQ== 122501 -5YON 122502 -5piv5LiA5Liq 122503 -LdC1 122504 -IHDFmWVrdmFw 122505 -4Lit4Lie 122506 -IFlvbA== 122507 -INGD0YHRgtCw0L3QsNCy0LvQuNCy0LA= 122508 -6rK8 122509 -IOS7tg== 122510 -2KfZhNi0 122511 -INC+0LHRg9GH 122512 -5Zib 122513 -INGF0L7Rh9GD 122514 -INCV0LI= 122515 -0YTQvtGA0YI= 122516 -IOCksOCkqA== 122517 -4oCeVg== 122518 -6Jyc 122519 -IGRvbWE= 122520 -5pSv5o+0 122521 -INin2K7Yqg== 122522 -5b6q 122523 -4KWC4KSa4KSo 122524 -4KS+4KS54KSo 122525 -IOWkjw== 122526 -INin2YTYo9mF2LE= 122527 -INCx0LXRgNC10LzQtdC90L3QvtGB0YLQuA== 122528 -IFRo4buxYw== 122529 -6aOO6Zmp 122530 -IMO8bGtlbWl6 122531 -55Wq5Y+3 122532 -0YHRgtGA0LU= 122533 -0YjQu9C+ 122534 -INi12KfYrdio 122535 -zrnOvc61 122536 -IEvEsXM= 122537 -IFByYWh5 122538 -5rm/ 122539 -IHbDvW0= 122540 -55uS 122541 -zp/OlA== 122542 -44Gg44Gq 122543 -IHDFmcOtbGXFvml0 122544 -IOyWuOygnA== 122545 -INGI0LLQuNC00LrQvg== 122546 -IHNpdHVhY2k= 122547 -5YWD57Sg 122548 -xLBURVPEsA== 122549 -IFZhaw== 122550 -IG5lcmVkZXlzZQ== 122551 -aWlpaQ== 122552 -0YDQsNC30LQ= 122553 -INC/0L7Qu9C40YI= 122554 -INC/0L7Qs9C+0LQ= 122555 -INC/0YDQvtGG0LXRgdGB0LU= 122556 -INC80LXQvdGI0LU= 122557 -5LqM5Lq6 122558 -INmF2YjYp9i3 122559 -IHDFmWlr 122560 -6Leh 122561 -IHNlcmc= 122562 -INGA0LDRgdGB0YLQvtGP 122563 -0LjRh9C90L4= 122564 -IM6UzpfOnA== 122565 -wqjYtw== 122566 -2LXYqNit 122567 -4Liq4Liw4LiU4Lin4LiB 122568 -2K/YsduM 122569 -a8WvbQ== 122570 -56eB44Gv 122571 -IHR2b3I= 122572 -4KWN4KS14KS1 122573 -IHDFmWl2 122574 -IO2PtA== 122575 -IHN0w6F0dQ== 122576 -IGVkaWxtacWfdGly 122577 -2K3ZhQ== 122578 -INCx0YPRhQ== 122579 -4Liq4Liz4LmA4Lij 122580 -INiq2YjYttuM 122581 -44Gd44KM44Gv 122582 -IOCkheCkteCkpw== 122583 -6Z6L 122584 -4oKsCg== 122585 -IOm6 122586 -IMSMZXM= 122587 -IHBvcHJ2w6k= 122588 -77yM5Zug 122589 -IGFsbcSxxZ8= 122590 -bGFs 122591 -INiu2YjYqNuM 122592 -IM66zr/PgQ== 122593 -7Jq064+Z 122594 -bWF5xLFu 122595 -IGFrdGlm 122596 -INin2YbYrNmF2YY= 122597 -INGB0YLQsNC6 122598 -INGB0YLQsNGA0LA= 122599 -2YTZgdip 122600 -IHBhcsOnYXPEsQ== 122601 -INC60L7RgNC/0YPRgQ== 122602 -44CB6auY 122603 -IS4u 122604 -IM6gzpHOnQ== 122605 -INmH2YbZiNiy 122606 -aW9uw6FsbsOt 122607 -IHByw6F2bsOt 122608 -wp0= 122609 -INiq24zYsQ== 122610 -IOWfjg== 122611 -INC30LPQsNC0 122612 -IHNhbGTEsXLEsQ== 122613 -5p+l55yL5pGY6KaB 122614 -6auq 122615 -2YHYtdmE 122616 -44GZ44G544Gm 122617 -0LXQstC+ 122618 -6rSA66as7J6Q 122619 -IOyYhg== 122620 -dWRpY290cw== 122621 -2YjYsdmG 122622 -IGNlbGtlbQ== 122623 -44Kk44K6 122624 -7Iqk6rCA 122625 -6LKp5aOy 122626 -IO2MjOydvOyyqOu2gA== 122627 -66Kw 122628 -IGVuZXJnaWU= 122629 -ZXNpZGly 122630 -IG1p4buHbmc= 122631 -6Zm3 122632 -INCz0LDRgNCw 122633 -IGJpbGl5b3I= 122634 -542y5b6X 122635 -0LXRgtC10YDQsQ== 122636 -4LmI4Liy4LmA4Lib 122637 -IM68zrHOts6v 122638 -IHpwcmFjb3bDoW7DrQ== 122639 -0YHQvA== 122640 -IGhhbGE= 122641 -INiy2YjYrA== 122642 -INCy0ZbQtNC90L7Qsg== 122643 -4LmA4Lir4Lih4Liy4Liw 122644 -INCg0LXRgdC/0YPQsdC70Lg= 122645 -5Ye65ZOB6ICF 122646 -0YnQuNC90Lg= 122647 -4Lix4LiZ4LmA4Lib 122648 -IHTDvWRlbg== 122649 -INio2YrYqg== 122650 -0YHQutC+0LzRgw== 122651 -INmH2YjYp9m+24zZhQ== 122652 -0L7RgdC90L7Qsg== 122653 -6bif 122654 -IHNvdWtyb20= 122655 -IGZhaXo= 122656 -IGRlbW9r 122657 -IGt0ZXLDqW0= 122658 -IOuFuQ== 122659 -0LvQsNGH 122660 -INC+0YLQstC10YLRgdGC0LLQtdC9 122661 -IO+8vDo= 122662 -IM67zr8= 122663 -xIxlc2s= 122664 -6rCA7JqU 122665 -IOODig== 122666 -IG5odeG6rW4= 122667 -INGB0LjQu9C4 122668 -INCc0L7QvQ== 122669 -IMOnYXA= 122670 -IFJvd0JveA== 122671 -INC80LDRgdGC 122672 -INCc0LA= 122673 -INC00YDRg9Cz0L4= 122674 -INij2LQ= 122675 -67Cp7Iah 122676 -INC/0ZbQtNC/0LjRgQ== 122677 -6Ieo 122678 -5Ymp 122679 -IGhp4buDbg== 122680 -INmC2LHYp9ix2K8= 122681 -aXN0cmF0 122682 -0J/RltC0 122683 -z4TOtc+BzrE= 122684 -IHBvemTEmw== 122685 -IGJhxZ90YQ== 122686 -5aSr5Lq6 122687 -0LvQuNC90Lg= 122688 -INC60LDRh9C10YHRgtCy0LA= 122689 -IGt1cnR1bA== 122690 -IOyijA== 122691 -44Gr44GK44GR44KL 122692 -5Zyw5Y2A 122693 -INGH0LDRgdC+0Lw= 122694 -7LWc6rOg 122695 -IG5nYW5n 122696 -2KfZh9iv 122697 -INCo0LXQsg== 122698 -IHDFmWl0b20= 122699 -IGNo4bqlbQ== 122700 -INCc0LXRgdGC0L4= 122701 -INGB0L7QstC10YDRiNC10L3QvdC+ 122702 -w61jw60= 122703 -reW3ng== 122704 -5Yib5paw 122705 -5LqU5pyI 122706 -INin2LnZhdin2YQ= 122707 -INCy0L7Qt9C80L7QttC90L7RgdGC0Lg= 122708 -INC/0YDQvtC00L7QstC2 122709 -bsSbdA== 122710 -INCd0LDQv9GA0LjQvNC10YA= 122711 -INin2YTYr9mF 122712 -IOC5geC4muC4mg== 122713 -55Sf55qE 122714 -INGF0LDRgNGH 122715 -IFNvbnXDpw== 122716 -IHLFr3puw6k= 122717 -INin2LA= 122718 -4LiV4Lit4Lia 122719 -UMWZZWQ= 122720 -INC00LXRgNC10LLRj9C9 122721 -67SQ 122722 -IOuKkOuC 122723 -2KzZhdmK2Lk= 122724 -IELDtnlsZWNl 122725 -6LWP 122726 -INio2LPZig== 122727 -IMOHYcSf 122728 -INiq2KfbjA== 122729 -IG5lanZ5xaHFocOt 122730 -6Jap 122731 -z4fOtc60z4zOvQ== 122732 -IOuTseydmA== 122733 -ZXlo 122734 -5paZ55CG 122735 -2KfYqtmH 122736 -5omr 122737 -IOWp 122738 -INC/0YDQuNCy0LXQtA== 122739 -5om2 122740 -IOqyrA== 122741 -INin2YXbjNix 122742 -4KS+4KSv4KSy 122743 -5qGR 122744 -4LiZ4LmA4LiV 122745 -0LjQu9Cw0LrRgtC4 122746 -5a625LyZ 122747 -IGJ1bHVudXlvcg== 122748 -eXNh 122749 -woY= 122750 -IELEsFI= 122751 -7Yak 122752 -4KSC4KSX4KSg4KSo 122753 -zpTOtc69 122754 -4KWM4KSV4KSw 122755 -6ZaT44Gr 122756 -INC80L7QsQ== 122757 -IE1vcmF2 122758 -6KeE5YiS 122759 -INGB0LLRltGC0ZY= 122760 -dWx0cw== 122761 -IHplbcOt 122762 -wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA= 122763 -INCf0L7Qvw== 122764 -44GC44GS 122765 -IHBvbW9jaQ== 122766 -INC30LzRltGB0YI= 122767 -5Li75Lq6 122768 -IFPEsQ== 122769 -44Ob44OG44Or 122770 -INGD0LLQsNCz0YM= 122771 -5buz 122772 -4LmA4Lih4LiV4Lij 122773 -ZXN0bGk= 122774 -IGxv4bqhdA== 122775 -44Ki44O8 122776 -IM6UzrU= 122777 -IGJ1bmxhcsSx 122778 -IOeCueWHuw== 122779 -IELDoGk= 122780 -IOS4lg== 122781 -IOqzoOqwnOulvA== 122782 -INCt0YLQvtGC 122783 -IG1lbW51bg== 122784 -IOClpAo= 122785 -INC40YHRgtC+0YDQuNC4 122786 -IOywqQ== 122787 -4KWn4KWv 122788 -INCe0LTQvdCw0Lo= 122789 -IHZlZGU= 122790 -z4bOrc+BzrXOuQ== 122791 -w6Ji 122792 -54q25Ya1 122793 -5Y2P6K6u 122794 -IOqwnQ== 122795 -0LXQstC40LQ= 122796 -am11 122797 -INC60L7Qu9C40YfQtdGB0YLQstCw 122798 -w5s= 122799 -acSNZQ== 122800 -IGZpcm1hbGFy 122801 -6ICA 122802 -0LrRltC9 122803 -IOq1reuvvA== 122804 -IOuqqeuhnQ== 122805 -IM6azrHPgQ== 122806 -IGhpc3NlZA== 122807 -77yr 122808 -IFTDqm4= 122809 -INGC0YvRgdGP0Yc= 122810 -2K3Zitit 122811 -INCy0L/QvtC70L3QtQ== 122812 -IFPEsW7EsWY= 122813 -IM68zrfOvQ== 122814 -IO2RuA== 122815 -INin2YTYt9io2Yo= 122816 -INiy24zYqA== 122817 -INC/0YM= 122818 -IHByYcW+ 122819 -7JeG64qU 122820 -zrjPgc+J 122821 -IGnDp2k= 122822 -INCx0ZbQuw== 122823 -0KDRkQ== 122824 -IOy2leq1rA== 122825 -IGzhuqE= 122826 -IOODleOCoQ== 122827 -IOiW 122828 -zrzOsc+Ezr8= 122829 -6YeR5bGe 122830 -w6FsaQ== 122831 -INmB2KM= 122832 -IEthcmxvdg== 122833 -IFrDoXA= 122834 -44Oq44Oz44Kw 122835 -YWJpbG1law== 122836 -INCh0Lg= 122837 -IGPDrXJr 122838 -IGvhu4tw 122839 -IOCkkeCkqOCksg== 122840 -INmI2K3Yr9ip 122841 -44OL44OD44Kv 122842 -IG7GsOG7m25n 122843 -INCw0LrRgtGD 122844 -5bid5Zu9 122845 -IG7DoXpldg== 122846 -INGA0LXQvNC+0L3Rgg== 122847 -INGA0LjQvdC60YM= 122848 -IM+AzqzOvc+J 122849 -z4TOuc66zr8= 122850 -IOyCvOyEsQ== 122851 -INGB0LjQvNC/0YLQvtC80Ys= 122852 -INGA0LDQvdGW0YjQtQ== 122853 -IErDoQ== 122854 -INGB0YfQuNGC0LDQtdGC0YHRjw== 122855 -INC/0L7RgNGW0LI= 122856 -INCc0LDQuw== 122857 -6Z2i56ev 122858 -INmE2Lo= 122859 -INis2LTZhg== 122860 -INC90LXQtNC10LvQuA== 122861 -IOymneqwgA== 122862 -44aN64+Z 122863 -IGzGsOG7o3Q= 122864 -IMSQ4buLbmg= 122865 -IOC4reC4reC4meC5hOC4peC4mQ== 122866 -IHlhcGFyYWs= 122867 -IMSRYWk= 122868 -INC+0YTQuNGG0Lg= 122869 -IM61zrzPgA== 122870 -zr7Otc65z4I= 122871 -INC60L7QvdGE0LXRgNC10L0= 122872 -IGFyYXPEsQ== 122873 -4LiV4Liy 122874 -IOu0kA== 122875 -0L7QstCw0L3QsA== 122876 -7KeA6rCA 122877 -IFbDoW0= 122878 -4KS/4KSc4KSo 122879 -IOe8lui+kQ== 122880 -zrbPjA== 122881 -IM+Ez4HPjA== 122882 -IMO8Y3JldHNpeg== 122883 -INqp2KfZhdmE2Kc= 122884 -Ojo6Lw== 122885 -4LmMCgo= 122886 -IOmWoumAow== 122887 -IGthcmE= 122888 -INCx0LXQt9C/0LXQutC4 122889 -IHptxJtueQ== 122890 -IOq/iA== 122891 -dnJk 122892 -bGnEn2luZQ== 122893 -INin2YbYqtiu2KfYqNin2Ko= 122894 -INC00L7RgdCy0ZbQtA== 122895 -IGt0ZXLDqWhv 122896 -0LXQvdGC0L7QvA== 122897 -6rO167aA 122898 -7KCd 122899 -IOunjOyhsQ== 122900 -IOaR 122901 -5Ye65Y+j 122902 -5bu66K6u 122903 -0L7RgtGP 122904 -INKR 122905 -7ZSE66Gc 122906 -IGdpw7M= 122907 -44K344Kn 122908 -IM67zrXPgA== 122909 -7ZWY66Ck 122910 -IHlva3Nh 122911 -IGlzdGlo 122912 -77y2 122913 -INin2YTYudmF 122914 -INqp2KfYsdqv2LHYrw== 122915 -4LmA4Lie4Lij4Liy4Liw 122916 -IG5vdsO9Y2g= 122917 -INGB0L3QsA== 122918 -IHNhbmE= 122919 -4KS14KSk 122920 -xLHFn21hbg== 122921 -5Y+m5aSW 122922 -7Lac7J6l7IO1 122923 -5amm 122924 -INC60L7RiNGC0ZbQsg== 122925 -INmI2KfZhNmG 122926 -INio2KfZhNil 122927 -IOaKgA== 122928 -INC80L3QvtC20LU= 122929 -4KWC4KSh 122930 -IEPhu6Vj 122931 -IGV2ZXQ= 122932 -6IGU5ZCI 122933 -IMKgwqAgwqDCoCDCoMKgIMKgwqA= 122934 -55qE5b+D 122935 -IGTDoW5n 122936 -2KfbjNiz2Yc= 122937 -IGVya2Vu 122938 -5rOh 122939 -2KfYptio 122940 -IHlhcMSxbGTEsQ== 122941 -IFF14bqjbg== 122942 -5pe25Luj 122943 -7Juo7Ja0 122944 -INCz0ZbRgA== 122945 -b2tvag== 122946 -2YPYsdip 122947 -0Y7Qug== 122948 -IHbDvWo= 122949 -IGhvZGlueQ== 122950 -INC10LvQtdC60YLRgNC+0L0= 122951 -bcSxeW9y 122952 -IOyeiOuLpOuKlA== 122953 -4LmJ4LmJ 122954 -0LjRgtC10LvRjNC90L7QtQ== 122955 -IHnEsWxsYXI= 122956 -xI90ZQ== 122957 -IMSNaW5ub3N0 122958 -4Li44LiT4Lig4Liy4Lie 122959 -7ZOo 122960 -0L3Qsw== 122961 -4Li54Lij4LiT 122962 -INC/0L7RgNGP0LTQutC1 122963 -IOuLueyLnA== 122964 -INCc0L7RgdC60L7Qsg== 122965 -IGtyZWQ= 122966 -dXJ1bQ== 122967 -INGC0Y8= 122968 -2qnZhtin2YY= 122969 -0LTQuNC4 122970 -0YDQuNC80ZbQvQ== 122971 -INC+0YDQs9Cw0L3QuNC30Lw= 122972 -IOmbhg== 122973 -zrnPg8+Ezr8= 122974 -5L+h55So 122975 -5Y2B5Zub 122976 -4LmI4LmD4LiK 122977 -INGD0LLQuNC0 122978 -4Lix4LiH4LiB4Lil 122979 -5Y+m5LiA 122980 -44Or44OV 122981 -4Lix4Lia4Lib4Lij 122982 -IMOcc3Q= 122983 -6Kqs5piO 122984 -0LLQsNC5 122985 -0LDRh9C1 122986 -5qyj 122987 -IGthdMSxbA== 122988 -IENlbQ== 122989 -INin2YTYrNmH 122990 -INCz0YDRg9C3 122991 -INC30LDRgdGC0LDQsg== 122992 -Y8SxbGFy 122993 -INGF0L7RgtC10Ls= 122994 -IHNuw61t 122995 -77yM6KKr 122996 -INCy0LjRiQ== 122997 -IGRlbW9rcmF0 122998 -4KWH4KSf4KSw 122999 -5ZGo5bm0 123000 -IG9kcGFk 123001 -IGRhxYg= 123002 -IOS7ow== 123003 -4LmH4LiZ4Lit 123004 -INGB0LrQvtC70YzQutC+ 123005 -IM6xz4Y= 123006 -IHDFmWVzdsSbZA== 123007 -IOWTgQ== 123008 -INC40L3RhNC+0YDQvNCw0YbQuNC4 123009 -55uX 123010 -44G+44Go 123011 -INGB0LDQvNC+0LI= 123012 -IHBvY2l0 123013 -IO2OuOynkQ== 123014 -INGB0LzQtdGB0Yw= 123015 -IHBvamnFoXTEm27DrQ== 123016 -44Gu44KC 123017 -4LmI4Liy4LiB4Liy4Lij 123018 -INuM2YjZhg== 123019 -IOq4sOyWtQ== 123020 -aWNrw71taQ== 123021 -YWxhY2U= 123022 -6Zu75b2x 123023 -0Y7QstCw0L3QvdGP 123024 -55u45ZCM 123025 -IOOAgw== 123026 -INC00L7QutGD0LzQtdC90YLRltCy 123027 -77y5 123028 -5Yiw5bqV 123029 -w7N6 123030 -IEFobWV0 123031 -INmF2LPYp9it2Ko= 123032 -IGhsYXZvdQ== 123033 -w7xsZWJpbGly 123034 -44CC5L2g 123035 -4LmH4LiB4LiK4Liy4Lii 123036 -wqTCpA== 123037 -IOaEjw== 123038 -IGNo4bqtbQ== 123039 -LtC0 123040 -IGNjYQ== 123041 -IG9sdW1zdXo= 123042 -wp4= 123043 -54qs 123044 -INC/0L7RgdGC0L7Rj9C90L3Qvg== 123045 -IC4qKioqKioqKioqKioqKgo= 123046 -INin2LPYqtix 123047 -INC00LDQu9GM0L3QtdC5 123048 -xa9y 123049 -5L+d6K23 123050 -0LHQvtGA0LDRgtC+0YA= 123051 -w7c= 123052 -z4PPhM6xzr0= 123053 -INmB2YrZhNmF 123054 -w6dlaw== 123055 -7J6Q6riw 123056 -IOalrQ== 123057 -0L3RltC/ 123058 -6ImH 123059 -IG1vY2k= 123060 -7Jy1 123061 -66as6re4 123062 -INCa0L4= 123063 -6YKj6YeM 123064 -INCh0YLQsNGA 123065 -INiq2YjYp9mG24zYrw== 123066 -IG5ndXnhu4du 123067 -IOC4quC4suC4oeC4suC4o+C4lg== 123068 -0ZbRh9C90LA= 123069 -IOiiqw== 123070 -4Li44LiV4Liq4Liy4Lir4LiB4Lij4Lij4Lih 123071 -INi52LXYsQ== 123072 -IMOcTsSwVkVSUw== 123073 -IHRlaGR5 123074 -INmI2LXZhNin2Ko= 123075 -5L+d6K+B 123076 -IEV1ZGljb3Rz 123077 -IM6gzq0= 123078 -5bu66Kit 123079 -IOyghOq1rQ== 123080 -INit24w= 123081 -44Kk44OE 123082 -INit2KfYtdmE 123083 -INis2YbZiNio24w= 123084 -44CB5pel5pys 123085 -w5k= 123086 -IOC4l+C4suC4hw== 123087 -INmG2K3ZiA== 123088 -2KfZh9mK2YU= 123089 -5b6M44Gr 123090 -4LiI4Liw4LmE4LiU 123091 -5Yeg5Liq 123092 -4KWB4KSB 123093 -64yA7J2Y 123094 -IGzDoG4= 123095 -7JuU67aA7YSw 123096 -xqA= 123097 -INC10LTQuA== 123098 -IHNwaXM= 123099 -5pyJ5LuA5LmI 123100 -IG5lYnlsYQ== 123101 -IO2VtOyZuA== 123102 -66Gc67aA7YSw 123103 -0LDRgNGF 123104 -bGlsaQ== 123105 -IO2VmOujqA== 123106 -bWFtYXPEsQ== 123107 -0YfQsNC10YI= 123108 -INit2KfZhNip 123109 -IELDtmzDvG0= 123110 -55u46Zec 123111 -INC00YDRg9Cz0LjQvNC4 123112 -55uj552j 123113 -4KWI4KSc 123114 -INi52KjYr9in2YTZhNmH 123115 -IOi/ng== 123116 -INCc0LjQvQ== 123117 -IOq4sOuLpA== 123118 -IOqzteqyqQ== 123119 -6KGM5YuV 123120 -4KS+4KSu4KSV 123121 -5rGC6LSt 123122 -5qih5Z6L 123123 -0YHQvtGA 123124 -cmFuZQ== 123125 -4LmH4LiI4Lie4Lij4Liw 123126 -INmF2LPbjNix 123127 -6KOF572u 123128 -7JWk 123129 -bsSbasWhw61jaA== 123130 -zrHOu8+Nz4TOtQ== 123131 -IEhha2s= 123132 -6K6/6Zeu 123133 -INGC0LXRhw== 123134 -IEzhu4tjaA== 123135 -INiv2LTZhdmG 123136 -zow= 123137 -IM+AzrU= 123138 -INC30LDQvNC+0LI= 123139 -IGJpcmlt 123140 -44K344K544OG44Og 123141 -IM+Az4HOv8+K 123142 -iuydgA== 123143 -0LLQuNCz 123144 -IOuPheydvA== 123145 -INGA0LXQstC+0LvRjg== 123146 -IOmmmea4rw== 123147 -IGxleg== 123148 -INio24zZhdin2LE= 123149 -IGR1eWd1 123150 -IOubsA== 123151 -IGFtYWPEsQ== 123152 -4KWN4KSv4KSq 123153 -IOyekOyEuA== 123154 -2KfZiNuM2LE= 123155 -IHNwb2xl 123156 -w5ZM 123157 -INis2Lk= 123158 -2YTbjNmF 123159 -44Gq44Gp44Gu 123160 -4Lib4Lij4Liw4Liq4Lia 123161 -IG5hxaFpY2g= 123162 -INC/0YDQtdC00YHRgtCw0LLQu9GP0LXRgg== 123163 -INC30LTQvtCx 123164 -IG9ib3U= 123165 -2K7ZiNin2YY= 123166 -44Os44OD44OI 123167 -0L7QtNC10LnRgdGC0LI= 123168 -2qnYsduM 123169 -INin2KrYp9mC 123170 -INGN0LrRgdC/0LvRg9Cw0YLQsA== 123171 -772i 123172 -INmE2YTYpQ== 123173 -INin2YTZhti42KfZhQ== 123174 -IO2UhOuekeyKpA== 123175 -xLFzxLF0 123176 -5a2Z 123177 -IMW+w6FkbsO9 123178 -2YLZiQ== 123179 -4Lix4LiB4LmA4Lij 123180 -IOuyoOyKpO2KuA== 123181 -IOODqw== 123182 -5Y+U 123183 -bmlja8Op 123184 -IM61zrnPgw== 123185 -44Or44OJ 123186 -INiv2KfYsdmF 123187 -INCz0LXQvA== 123188 -IOWtuA== 123189 -4KS+4KSo4KS44KSt 123190 -0LDQu9C40LfQuA== 123191 -0L7QstCw0L3Rlg== 123192 -INC+0LHQvg== 123193 -7KCE7JeQ 123194 -IFNpbmg= 123195 -INmG2Lk= 123196 -INC+0LHQu9Cw0YE= 123197 -z4XPgA== 123198 -6IO2 123199 -IGF6YWx0 123200 -5YWo6Z2i 123201 -IEtyb23Emw== 123202 -IEN6 123203 -5oql5ZCN 123204 -IG7DoXNsZWR1asOtY8Ot 123205 -INC90LDQv9GA0LjQutC70LDQtA== 123206 -44Gq44GR44KM44Gw 123207 -4Lit4Liy4Lii 123208 -55yL55yL 123209 -IOC4geC4o+C4geC4jg== 123210 -ZWRub3U= 123211 -2KfYstmE 123212 -44CB5pys 123213 -0LXRgdC4 123214 -IHRhcno= 123215 -44CA776K 123216 -IHJvenVt 123217 -44Kr44O844OJ 123218 -IOCkh+CklQ== 123219 -IHByb3N0xJs= 123220 -IM6Tzro= 123221 -56m0 123222 -IEjDvGs= 123223 -bGF2w60= 123224 -6r8= 123225 -6bih 123226 -INCy0L7Qt9C90LjQutCw0LXRgg== 123227 -0Z/Rn9Gf 123228 -INC/0L7QvdC40LzQsA== 123229 -0J/Qng== 123230 -44GU44GW44GE44G+44GZ 123231 -44GF 123232 -IHRydmFs 123233 -INC00LDQu9C10LrQvg== 123234 -INmG2YrYsg== 123235 -INCy0YvRj9Cy 123236 -4Li04LiX4Lii4Liy 123237 -IGzhu5c= 123238 -4LmA4Liq4LiZ 123239 -INGB0YLQtdC90Ys= 123240 -4KWN4KSh4KSy 123241 -IGplZG5vdGxpdsO9Y2g= 123242 -INC/0YDQuNCx0LvQuNC3 123243 -aWthdA== 123244 -INC/0L7QtNCw0LI= 123245 -2LHbjNiy 123246 -INii2YbYrNin 123247 -56S+5pyD 123248 -IOCknOCkqOCkteCksA== 123249 -IGFpbGU= 123250 -4Li14Lib 123251 -IOiF 123252 -44Gn44GX44KH44GG 123253 -0KHQng== 123254 -44CB44CK 123255 -7J2867O4 123256 -b3Zhbm91 123257 -zr3PjA== 123258 -5bGl 123259 -2LnZhNmC 123260 -IOyJvQ== 123261 -INCz0LvQuNCx 123262 -IOqyg+yeheuLiOuLpA== 123263 -INC90LXQvtCx0YXQvtC00LjQvNC+0YHRgtC4 123264 -INiq2K7Ytdi124w= 123265 -2KfYs9ix 123266 -77yM6K+0 123267 -INCd0ZY= 123268 -IHZ5cm9i 123269 -0YjRg9GO 123270 -5oi/5bGL 123271 -wqDQlw== 123272 -4LmA4Lie4Lil 123273 -5YaF6YOo 123274 -INiv2YTYp9ix 123275 -INC/0YLQuA== 123276 -xaF0aQ== 123277 -IGFyYcWfdMSxcm1h 123278 -INC30L3QsNC60L7QvA== 123279 -IM61zrvOu863zr0= 123280 -IOG6pW0= 123281 -0YDQsNC6 123282 -44Kt44Ol 123283 -IHRo4bqtbg== 123284 -6K2c 123285 -66qF7J2Y 123286 -IHlldGVy 123287 -INC90LDRgdC70LXQtA== 123288 -INCa0LDQvQ== 123289 -INCy0YvQsdC40YDQsA== 123290 -IM6jz4c= 123291 -INGC0LXRgNC80ZbQvQ== 123292 -IOa0uw== 123293 -INin2YTYqtmB 123294 -IEphcG9u 123295 -6YKq 123296 -67aE7ISd 123297 -INC70LjRhtC+ 123298 -IG3Dqg== 123299 -4LiE4Lin4Lij 123300 -IOCkheCkl+Cksg== 123301 -INmH2Kw= 123302 -65+s7Jq0 123303 -INCy0L7QudC90Ys= 123304 -2KfZiNix2LLbjA== 123305 -INGB0L/RgNGP 123306 -54S8 123307 -6KKW 123308 -IGnDp2VyZW4= 123309 -IOuFuOuemA== 123310 -INCn0LXRgNC10Lc= 123311 -2YjYrNmI2K8= 123312 -0Y/RgtC40LU= 123313 -4Lit4Lil4Lil4Liy4Lij 123314 -6Leo 123315 -IE1pbGxp 123316 -5Lu25LqL 123317 -IOacnQ== 123318 -zrLOv867zq4= 123319 -INC60L7Qsg== 123320 -INi02YfbjNiv 123321 -5LiL5Y67 123322 -IOygleyLoA== 123323 -0L7Rh9C60YM= 123324 -77yM5L6/ 123325 -zrPOus61 123326 -INmF2KjYp9i0 123327 -IGF5xLFuZGE= 123328 -IOS7uw== 123329 -0YHRgtC+0YDRltGP 123330 -5Lit5a2m 123331 -57iu 123332 -INGE0ZbQuw== 123333 -44CB44KE 123334 -IOaYpQ== 123335 -IHRlcsO2cg== 123336 -INC/0L7QstC40L3QtdC9 123337 -IG1pbGlvbsWv 123338 -INmB2KfYsdiz 123339 -INCy0LLQvtC0 123340 -2LfYp9mE 123341 -IOq2geq4iA== 123342 -IHVrw6F6 123343 -55Sc 123344 -5pqC 123345 -2LXYqg== 123346 -0JrQvtCz0LTQsA== 123347 -IOCkruCksg== 123348 -zqzOvc6x 123349 -INC00L7QutGC0L7RgA== 123350 -INC60L7QvNC80YM= 123351 -INC/0ZbQtNGB 123352 -IOC4geC4o+C4geC4juC4suC4hOC4oQ== 123353 -wqDQsw== 123354 -IMO2bmU= 123355 -IMSQ4buB 123356 -5LqL5YuZ 123357 -IHNyb3Y= 123358 -IM6szr0= 123359 -64+E6rCA 123360 -YWNhxJ/EsW0= 123361 -0LrQvtC7 123362 -IGLhu5Np 123363 -INm+2LHYr9in2LI= 123364 -IOS4mg== 123365 -64uk7Jq0 123366 -INC/0YDQtdC00LXQuw== 123367 -INGE0LXQtNC10YDQsNC70Yw= 123368 -INin2YTYo9mD 123369 -44CA44CA44CA44CAIOOAgCDjgIA= 123370 -IHRy4bqlbg== 123371 -INC00LvQuNC9 123372 -INGW0LzQvw== 123373 -IHNtxJtyZW0= 123374 -sOuLpA== 123375 -IHLhu6tuZw== 123376 -aWNpw6FsbsOt 123377 -6KGG 123378 -zrzOuc6/ 123379 -INin2K/Yp9ix2Yc= 123380 -INGC0YDRjA== 123381 -IMSwbGk= 123382 -4Lih4LiZ4LiV4Lij 123383 -4KWN4KS14KSa 123384 -0LXRgNC+ 123385 -IEtVUg== 123386 -c2vDvW1p 123387 -zrTOrw== 123388 -dXRpbg== 123389 -IHZlcmlsZXI= 123390 -4Liq4LiW4Liy4LiZ4LiX 123391 -INC30LDRhdC+0LTRltCy 123392 -INmB2LHZiNiv2q/Yp9mH 123393 -IOeUsQ== 123394 -4Li54LmB4Lil 123395 -6YOR 123396 -IEpha28= 123397 -INGA0LDQt9Cy0LjRgtC40LU= 123398 -4KSJ4KSo 123399 -2YrYr9in 123400 -IOC4nuC4pOC4qeC4oOC4suC4hOC4oQ== 123401 -66y87J2E 123402 -66CA 123403 -LdCb 123404 -44CC44GC 123405 -INC/0L7QtNCy 123406 -77yJ77ya 123407 -6K665Z2b 123408 -2KfYpti5 123409 -44KS44GZ44KL 123410 -INij2LU= 123411 -0YfQuNC60Lg= 123412 -INGB0YLQuNC7 123413 -bGV5aWNp 123414 -0YHQuNC70Yw= 123415 -IGJ1bHVuZHU= 123416 -INGB0LXRgNC10LTQvtCy0Lg= 123417 -4KSC4KSw 123418 -INin24zZhtis2Kc= 123419 -5Zyt5Zyt 123420 -IG15xaFsZW4= 123421 -INGA0L7Qt9Cy0LjRgtC+0Lo= 123422 -IGl5aWxlxZ8= 123423 -INCy0ZbQtw== 123424 -64KY66y0 123425 -5oSP6KeB 123426 -zrnPg8+Ezrc= 123427 -44OD44OE 123428 -5LqL5pWF 123429 -bWFkxLHEn8Sx 123430 -IOCkheCkquCksA== 123431 -INqG2LHYrg== 123432 -INC/0LvQsNCy 123433 -5Lul5p2l 123434 -IOupgA== 123435 -VHV5 123436 -44O844ON 123437 -INC40LfRg9GH 123438 -IHN0xZllZG7DrQ== 123439 -6K++56iL 123440 -IOq3uOuFgOuKlA== 123441 -INC00L7Qs9C+0LLQvtGA0YM= 123442 -IMSR4buLY2g= 123443 -IGthcmFyxLE= 123444 -5ZC0 123445 -2YPYp9mF 123446 -INC/0L7RgtC+0Ls= 123447 -0LLQvtC6 123448 -IETDvHo= 123449 -zqTOsQ== 123450 -5bU= 123451 -4oCZbmE= 123452 -0LDQtNC2 123453 -IGTFmcOtdmU= 123454 -5qKo 123455 -IEF2dXN0 123456 -5Yqb44KS 123457 -4LmA4LiB4Lil 123458 -INC/0L7QsdC10LQ= 123459 -INC/0YDQuNGH 123460 -INCR0ZY= 123461 -5a2k 123462 -INCg0LXQsw== 123463 -IHlldGnFnw== 123464 -INC90LXRjg== 123465 -IGLDrWw= 123466 -7JeG7J2M 123467 -IMSwdGFseWE= 123468 -0JLRgdC1 123469 -5b6M44Gu 123470 -IGplasOtbQ== 123471 -INCy0LjQs9C70Y/QtNGW 123472 -0L7Qs9GA0LDQtA== 123473 -IGJvaGF0 123474 -IOWFiw== 123475 -INC00LjRgtC40L3QuA== 123476 -0LvRj9GC0L7RgA== 123477 -0LzQsNCz0LA= 123478 -64uI7Iqk 123479 -INCg0LDQtNC4 123480 -z4DOv8+Fz4HOsw== 123481 -Jlplcm9XaWR0aFNwYWNl 123482 -IHN0cnVr 123483 -5pCe 123484 -IOOBneOBruS7lg== 123485 -7J247J2E 123486 -INC/0YDQvtCy0LXRgdGC0Lg= 123487 -5ryr55S7 123488 -IOeOqeWutg== 123489 -INmI2LHYsg== 123490 -INGB0LLQvtGX0Lw= 123491 -IExSVg== 123492 -4Li04LiV4Lig 123493 -4KS44KSk 123494 -IO2dlA== 123495 -4peP4peP4peP4peP4peP4peP4peP4peP4peP4peP4peP4peP4peP4peP4peP4peP 123496 -IHR2b8WZw60= 123497 -INCf0J4= 123498 -6auY5bqm 123499 -Lmh3cA== 123500 -4LiV4Liz4Lia4Lil 123501 -INiv2LM= 123502 -7IiY6rCA 123503 -7JSp 123504 -77yJ44CCCg== 123505 -5ouz 123506 -IGzDtA== 123507 -IEvDvGx0w7xy 123508 -2KfYt9i52Kk= 123509 -IGt1Y2h5 123510 -IHN0cm9q 123511 -zrzOtc69zr8= 123512 -INC60L7QvdGB0YLRgNGD0LrRhtC40Lg= 123513 -5bCP5a2m 123514 -IOWNmg== 123515 -IOiAgw== 123516 -IGFzxLFs 123517 -5oiR5YCR 123518 -2K7Ysdin2Kw= 123519 -IE9udW4= 123520 -IOe+juWbvQ== 123521 -4KWC4KSs4KSw 123522 -IG11xb5p 123523 -5aer 123524 -INCy0LE= 123525 -INC00L7QvNC1 123526 -INCw0Lw= 123527 -IGt1cnU= 123528 -5rGX 123529 -bGVkacSfaQ== 123530 -IHbhur0= 123531 -5b6T 123532 -INCz0YPQsdC10YA= 123533 -INGB0YLQsNC90L7QstC40YLRjA== 123534 -IHplbcSbZMSbbA== 123535 -2YTZhA== 123536 -IHJhbWVu 123537 -IHByxa9ixJtodQ== 123538 -IGJsb2s= 123539 -w712YWw= 123540 -dm91 123541 -zr3OrA== 123542 -65SU7Iuc 123543 -0YbQuNC+0L3QvdGL0LU= 123544 -IOqyjOyLnO2MkA== 123545 -44Oz44OH44Kj 123546 -5LiA57qn 123547 -0LjRh9Cw 123548 -INiz2LHbjNin2YQ= 123549 -aWxpbg== 123550 -4KS+4KSv4KSo 123551 -2YbZiNuM2LM= 123552 -INCU0Lg= 123553 -INin2K/YqNuM 123554 -INGD0LTQvtCy 123555 -INCX0LDQvA== 123556 -4KWB4KSt4KS1 123557 -0YHQvtC6 123558 -INGA0LDQudC+0L3QtQ== 123559 -IEVL 123560 -5oKJ 123561 -IHNvcnVtbHU= 123562 -IHp2ecWh 123563 -4LmA4LiL4Lit4Lij 123564 -aW7DocWZ 123565 -IHVkcsW+ 123566 -0L3QvtCy0LjQtA== 123567 -IHNwb2xlxI1uxJs= 123568 -5oiQ5LqG 123569 -77yk 123570 -4Lix4Lie4LiX 123571 -0LDRiNCw 123572 -INmG2KfYr9mK 123573 -4LmD4LiZ4LiX 123574 -5aGa 123575 -INiz2qk= 123576 -44OB44Ol 123577 -INC80LDRgNGI 123578 -0LDQu9C10L3QvdGP 123579 -INit2YXYp9uM2Ko= 123580 -44Oz44K4 123581 -4Lij4Lip4LiQ 123582 -INC60YDQtdC8 123583 -IEthxb5k 123584 -6r0= 123585 -IHBhcmxhbWVudA== 123586 -IMWfdW4= 123587 -IGt5cw== 123588 -z4TPgg== 123589 -6rCc7J2Y 123590 -IHZlbGljZQ== 123591 -IGNlc3R1 123592 -2LjYqQ== 123593 -6K+K 123594 -IMO6dA== 123595 -INiu2YjYsQ== 123596 -INCi0LU= 123597 -INC+0LHQu9Cw0YHRgg== 123598 -4LmI4Lit4LiV 123599 -IEFjYWRlbQ== 123600 -44CC5pys 123601 -IOmiqA== 123602 -0YHQtdC9 123603 -44Oi44OH44Or 123604 -INC30LDQstC00LDQvdC90Y8= 123605 -44G+44KM 123606 -0LzQvtGC0YDQtdGC0Yw= 123607 -IGto4buV 123608 -4LmI4Lij 123609 -2K/Ysdiz 123610 -IMSMZXNrb3Nsb3Zlbg== 123611 -IOiuoQ== 123612 -INGC0LDQutC+0Lw= 123613 -INmE2KfYudio 123614 -IE11aGFtbWVk 123615 -INmF2YTZgQ== 123616 -INmI2LPZhNmF 123617 -44K344Oj44Or 123618 -INC+0LrRgNCw 123619 -4KWB4KSu4KSk 123620 -IOuIhOq1rA== 123621 -IG5lZGVuaQ== 123622 -IOuCoOynnA== 123623 -L2tt 123624 -INC00LXQvNC+0L0= 123625 -INi12YbYp9uM2Lk= 123626 -bWFzxLFuZGFu 123627 -5YmN44Gu 123628 -5oiQ57up 123629 -4KSy4KSX 123630 -IOWMhQ== 123631 -4Lit4LiB4LiI4Liy4LiB4LiZ 123632 -2KfYr9in 123633 -IGF5bMSxaw== 123634 -INmF2YLYrw== 123635 -IMO2bmVtbGlkaXI= 123636 -IOyInOqwhA== 123637 -IGRpbmg= 123638 -IG7DoWt1cA== 123639 -aXN0aWNrw6k= 123640 -5bqf 123641 -7Iqk7Yag 123642 -IGRueQ== 123643 -IOyeiOuPhOuhnQ== 123644 -7JuQ7J2Y 123645 -44OV44Os 123646 -cG96 123647 -INC10LI= 123648 -IGTDvMWfw7xy 123649 -4KWN4KSw4KSa 123650 -IOqysO2YvA== 123651 -INGG0LXQvdGC0YDQsA== 123652 -5Z+L 123653 -77+j772A 123654 -5q2m5Zmo 123655 -4LmI4Liy4LiZ4Lih4Liy 123656 -IOCksOCktQ== 123657 -2ZHYrw== 123658 -zrzOrc69zr/OuQ== 123659 -IOunkOyUgA== 123660 -IHBvxZlhZA== 123661 -INio2Lo= 123662 -IM+MzrvOsQ== 123663 -4LmJ4LmE4LiC 123664 -4LmA4LiB4Liy4Liw 123665 -IGLhuqFj 123666 -IGTDoQ== 123667 -ZMSbbGE= 123668 -IHRlYg== 123669 -IGvDqG8= 123670 -44KP44KM 123671 -IGlzdGl5b3J1bQ== 123672 -zrvOrs+C 123673 -0JDQsg== 123674 -IGFzbGE= 123675 -IHBlcmZvcm1hbnM= 123676 -IFbDoWNsYXY= 123677 -z4HOr86xz4I= 123678 -IHTEm2w= 123679 -5oyZ 123680 -0L7QsdCw 123681 -44GR44KM44Gp 123682 -IOuUuA== 123683 -2YjYp9ih 123684 -INqp2YjYr9qp2KfZhg== 123685 -INC/0LvQuNGC 123686 -IGJpbGly 123687 -0YPQttC1 123688 -z4TOrc67zrU= 123689 -IOCkhuCkleCksA== 123690 -INGC0YDRg9C00LA= 123691 -INiv2LHbjNin 123692 -zKc= 123693 -IG5n4buNdA== 123694 -2YbYs9in 123695 -0LDRgdGC0Lg= 123696 -772j 123697 -wqDQvdCw 123698 -0LXQvNGL0LU= 123699 -INiz2LnZiNiv 123700 -IGFsxLFt 123701 -6LSr 123702 -5Yiw55qE 123703 -IGtlc2lubGlrbGU= 123704 -IHrDoXNhZA== 123705 -IOyKpO2KuA== 123706 -IGRhaGk= 123707 -dMOp 123708 -5Y2B5YWr 123709 -IHphecSxZg== 123710 -2LDYp9ix 123711 -INin2YrYsdin2YY= 123712 -IGhvZG5vY2Vuw60= 123713 -RFNU 123714 -IOyWmA== 123715 -5piH 123716 -6Zmj 123717 -INC60LvQtQ== 123718 -IHVwbGF0 123719 -INin2YTYqti52YTZitmF 123720 -z4DOv86vzrfPg863 123721 -0LXQutGC0L7RgNCw 123722 -IOunkOydtA== 123723 -INmB2LHZitmC 123724 -5biu5Yqp 123725 -55Sf44GN 123726 -5YaF44Gu 123727 -6IGU55uf 123728 -0LPRgNCw0LQ= 123729 -IGNodXnhur9u 123730 -44KC44KK 123731 -INGH0LDRgdGC0LjQvdCw 123732 -44Gq44GP44Gq 123733 -0ZTQsg== 123734 -INGE0LDRhQ== 123735 -a3Vr 123736 -55S35oCn 123737 -INmF24zZhNin2K/bjA== 123738 -IGJlZGVu 123739 -6rCA66W8 123740 -4KSu4KSw 123741 -IOyWtOuouOuLiA== 123742 -6IGU572R 123743 -wqBtaQ== 123744 -IHphaHJu 123745 -5rKW 123746 -IGtodeG6qW4= 123747 -IG9wcsOhdg== 123748 -4KS+4KS54KSV 123749 -INqp2YjYqtin2Yc= 123750 -INC+0LHQvtC7 123751 -IHBow7pj 123752 -csOhbsOt 123753 -4KWN4KSw4KSl 123754 -5o6q5pa9 123755 -INCy0L7Qu9C+0LQ= 123756 -IHNww63FoWU= 123757 -IG3GoQ== 123758 -0YrQtdC6 123759 -bmfDtnI= 123760 -4KSJ4KSk 123761 -a3NpeW9u 123762 -0LDRgtC1 123763 -INis2LLYoQ== 123764 -w6F2a2E= 123765 -0JLQoQ== 123766 -bGHFn21h 123767 -IOe/ 123768 -4Lit4Liy4LiK 123769 -0L3QuNGG0YM= 123770 -IOC4q+C4suC4gQ== 123771 -44GL44GX 123772 -7Y+0 123773 -INCz0LDRgNCw0L0= 123774 -IM+DzrHOvQ== 123775 -INC00L7QsdCw0LLQuNGC0Yw= 123776 -INGA0LDQt9GA0LXRiA== 123777 -4b4= 123778 -5piv5Liq 123779 -zrzOrc+C 123780 -IMSwbXBhcmF0b3I= 123781 -5qiZ5rqW 123782 -0YHRgtGL 123783 -IGfDvGPDvA== 123784 -IO2DgOydtA== 123785 -IOWFtuS7lg== 123786 -IHTDtG5n 123787 -IHZlZGVuw60= 123788 -65Oc66Gc 123789 -IG1lc2Vs 123790 -IMSNZQ== 123791 -amRl 123792 -z4HOtc65zrE= 123793 -44KI44Gt 123794 -0KDQnQ== 123795 -6Led56a7 123796 -INmC2KfYptmF2Kk= 123797 -4Liy4Lia4Liy4Lil 123798 -INGB0LDQudGC0ZY= 123799 -IOCksOCkuA== 123800 -INmC2LHZhg== 123801 -IG7DoXZy 123802 -2qnZhQ== 123803 -55qE5omL 123804 -IHNvcnVudQ== 123805 -L07EkA== 123806 -bnV0w61t 123807 -INiu2YjYsdiv 123808 -IG5n4bud 123809 -IDoufA== 123810 -IGJ1ZG91Yw== 123811 -acSNa3k= 123812 -INiv2LHYrw== 123813 -0YDQvtC90LjRh9C10YE= 123814 -576K 123815 -IOyVhOuyhOyngA== 123816 -IEthbnVudQ== 123817 -INC/0YDQuNCy0L7QtNC40YI= 123818 -zqzOu8+Fz4jOt8+C 123819 -IFZsYWRpbQ== 123820 -IGFsxLFw 123821 -INC10YLQsNC/ 123822 -IOCkl+CksuCkpA== 123823 -INix2KfZh9mG2YU= 123824 -IHBvemlzeW9u 123825 -IGfDtsOn 123826 -6LWe 123827 -INC80L7QuQ== 123828 -IM6gzqw= 123829 -IOyIoA== 123830 -INii24zZhtiv2Yc= 123831 -YW7DoQ== 123832 -5Lic55yB 123833 -INmF2KrYudiv2K8= 123834 -IOWNig== 123835 -44CA44CAIOOAgCDjgIAg44CAIOOAgA== 123836 -IHRo4bud 123837 -INCy0LTRgNGD0LM= 123838 -0L/QsNGC 123839 -INC/0YDQvtCy0LXQtNC10L3QuNGP 123840 -2YbYsg== 123841 -INin2YTYqNit2Ks= 123842 -5oGi 123843 -IGJha3TEsQ== 123844 -IOi3rw== 123845 -INC30LDQsdC+0LvQtdCy0LDQvdC40Lk= 123846 -INCV0LLRgNC+0L8= 123847 -IHRhcmlobGk= 123848 -6rmo 123849 -INqp2YjZhw== 123850 -IOyWtOugpA== 123851 -IHRpdHVs 123852 -IHZ5ZMOhbsOt 123853 -6Zi25q61 123854 -4LiI4Liw4LiV 123855 -INC80L7Rjw== 123856 -INC60L7RgNC+0Ls= 123857 -INCx0LDQvdC6 123858 -4Lin4Lij4Lij4LiT 123859 -INmD2LPYp9ix2Kk= 123860 -IEtob2E= 123861 -INGD0L3RltCy0LXRgNGB0LjRgtC10YI= 123862 -44Gr6Zai44GZ44KL 123863 -cnVhcnk= 123864 -IOC4guC4suC4og== 123865 -IHN2YXo= 123866 -INi02LHZgg== 123867 -INC00YvRhQ== 123868 -INC40LfQsdCw0LI= 123869 -INGP0LrRltC5 123870 -IM6czr/OvQ== 123871 -IGfDtm4= 123872 -IFVrcmFq 123873 -4Lix4LiZ4Lit4Lit4LiB 123874 -IOC4oeC4geC4o+C4suC4hOC4oQ== 123875 -0LjRgtC+0LI= 123876 -IGFuYWzDvQ== 123877 -INC+0YLQvNC10Yc= 123878 -INio2LHYp9mJ 123879 -4oiP 123880 -4Lix4LiB4LiB 123881 -5oul5pyJ 123882 -INGW0L3RiNC+0LPQvg== 123883 -INC60L7QvNC/0LDQvdGW0Zc= 123884 -IGvFmWVz 123885 -INGA0LDQsdC+0Yc= 123886 -YWTDrQ== 123887 -7KCg 123888 -4LmE4Lir4LiZ 123889 -4KWB4KSs4KS5 123890 -4oCZZGVraQ== 123891 -54Wk 123892 -INC/0LDRgNGD 123893 -7ISt 123894 -INC90LXQv9C+0YHRgNC10LQ= 123895 -IMSwYg== 123896 -IOC4nuC4pOC4qOC4iA== 123897 -7Yu0 123898 -IOugiOydtA== 123899 -IFRo4buV 123900 -0Y/QtdGC 123901 -2KfYptis 123902 -u+eSgw== 123903 -0JLQng== 123904 -5ZaK 123905 -IOesrOS4iQ== 123906 -INCy0L7QutGA0YPQsw== 123907 -0YfQtdC90Yw= 123908 -IG9sYW5haw== 123909 -dHVyYQ== 123910 -INmF2YrZhA== 123911 -ZXlkaQ== 123912 -INmF2K/Zitix 123913 -IG5lbHpl 123914 -4Lix4Lin4Lit4Lii 123915 -7IWc 123916 -IGhsYXZ1 123917 -IGtvcnV5 123918 -0YbQuNC9 123919 -INC00LjRgdGG0LjQvw== 123920 -INmF2KfZhtiv 123921 -INC/0L7QtNGA0L7QsQ== 123922 -0KLQng== 123923 -2YLYsdin2LE= 123924 -4LmB4LiZ4Liw4LiZ4Liz 123925 -66y47J2E 123926 -5oyv44KK 123927 -UMWZaQ== 123928 -IHnDqm4= 123929 -4KS24KSV 123930 -wqBqZQ== 123931 -INCa0L7QvdGB0YLQuNGC0YM= 123932 -4KWB4KS5 123933 -INm+2Kc= 123934 -7IaM66W8 123935 -INC00LXQu9Cw 123936 -0LrQuNC0 123937 -4LmC4LiK 123938 -7Luk7Iqk 123939 -ZMSbbGVu 123940 -4KSU4KSw 123941 -5LqO5piv 123942 -INmH2YXbjNi02Yc= 123943 -IGJhxZ9sYW0= 123944 -IOybqA== 123945 -IGRlbmV5aW0= 123946 -IMO8eWU= 123947 -IM69z4w= 123948 -IOCkluCkoQ== 123949 -bsSbbA== 123950 -INGB0YTQtdGA0ZY= 123951 -4Lit4LiU4Lig 123952 -5LiA5bm0 123953 -IHZ1cmd1 123954 -xJ7EsA== 123955 -4oCZCg== 123956 -INGW0L3RiNC40LzQuA== 123957 -INC30LzQtdC90Yg= 123958 -IOCkiw== 123959 -INCy0LXQutCw 123960 -INit2qnZiNmF2Ko= 123961 -INiq2YXYp9mF24w= 123962 -IHNtcnQ= 123963 -IGjhu6d5 123964 -IHlhcMSxbG3EscWf 123965 -4LmJ4Lic 123966 -IFllbg== 123967 -INGD0Ls= 123968 -IFN2xJt0 123969 -4Lix4LiE 123970 -IG3Em3PDrWPFrw== 123971 -0LTQtdC90YLQuA== 123972 -IO++mA== 123973 -INC/0L7Qu9C40YLQuA== 123974 -c2t5dA== 123975 -5Lmf5pyJ 123976 -IOqwmeyKteuLiOuLpA== 123977 -IOq3uOuemOyEnA== 123978 -z4TOtc+Bzrc= 123979 -0YfQtdGA 123980 -IMOcTsSwVkVSU8SwVEVTxLA= 123981 -4Liq4Lig 123982 -IOC4quC4ow== 123983 -4KS+4KSo4KSm 123984 -IGHFn8SxcsSx 123985 -zrvOr86/z4U= 123986 -INmE2YE= 123987 -w61udQ== 123988 -4Lit4Liy4Lij 123989 -0YLRg9GA0LA= 123990 -IMSNZXNrw71jaA== 123991 -IHBo4bupYw== 123992 -5Lul5Li6 123993 -z4HPic+AzrE= 123994 -INin2YbYsdqY24w= 123995 -wrsp 123996 -YWxhcmRhbg== 123997 -INGB0YLQstC+0YDRjg== 123998 -IHRyw6F2 123999 -4KWs 124000 -44GK44KI44Gz 124001 -75yL 124002 -YWRpbA== 124003 -IM6kzrk= 124004 -IOuQqeuLiOuLpA== 124005 -IM61zrzPhg== 124006 -IOq1rOyhsA== 124007 -7Jet7Iuc 124008 -INin2YTYrNin2YU= 124009 -5Li76aKY 124010 -44K544Od 124011 -IOyXreyLnA== 124012 -INqp2YXYqtix 124013 -IFNwb2xlxI0= 124014 -0L7Qu9C+0Yg= 124015 -IFN1cml5ZQ== 124016 -0KfQtdGA 124017 -5oiY5paX 124018 -IHrDoXZpcw== 124019 -5pu46aSo 124020 -IG11c2Vs 124021 -IOed 124022 -2YXZhQ== 124023 -INin2YTYrtin2LHYrA== 124024 -INCT0J4= 124025 -INCy0LDRgNGC0L4= 124026 -z4HOsc6y 124027 -IOCkquCkueCkmg== 124028 -dWJsaWNl 124029 -0YbQuNC+0L3QvdC+0LPQvg== 124030 -6Iyo 124031 -INiv2YHYqtix 124032 -INmB2LM= 124033 -IOCkqOCknOCksA== 124034 -dGFyxLE= 124035 -INC+0LHRgNC+0LE= 124036 -INCg0LA= 124037 -INin2YTYtdmG 124038 -2LTYqQ== 124039 -IOyXhuyXiA== 124040 -b8W+bsOh 124041 -5pyA57WC 124042 -2aU= 124043 -cmVjaA== 124044 -INin2YTYo9iz2LE= 124045 -INC80L7QstC4 124046 -IOyhsOq1kA== 124047 -0ZbQvNC10Yc= 124048 -44Ov44O8 124049 -0LHRg9GA0LM= 124050 -INiz2YTYsw== 124051 -5a2m5Lya 124052 -IOum 124053 -5YWL5pav 124054 -5paH54yu 124055 -IHjGsMahbmc= 124056 -IHlvbGM= 124057 -IOyCrOustA== 124058 -44KP44Ga 124059 -INGA0LDRgdGC0LXQvdC40Lk= 124060 -INmB2LbYp9uM 124061 -IG5hb3Bhaw== 124062 -INC/0YDQuNCy0Ys= 124063 -INiv24zYr9mH 124064 -4LiB4Liy4Lij4LmD4LiK 124065 -IOWe 124066 -55Gf 124067 -5Lul5ZCO 124068 -IHDFmWlibGnFvg== 124069 -IGTDvMWfbWFu 124070 -IHRlbWlu 124071 -INGD0YHQu9GD0LM= 124072 -IOCkpuCkrA== 124073 -IOyDiOq4gA== 124074 -INGD0YHRgtGA0L7QudGB0YLQstCw 124075 -INCi0YPRgg== 124076 -z4TOr86/z4U= 124077 -IMSwc2zDom0= 124078 -2aQ= 124079 -5Y+C5LiO 124080 -INC60YPRgdGC 124081 -6ZmQ5Yi2 124082 -2KrZitmG 124083 -INC+0YHRgtCw0L3QvdGW 124084 -aWNhdGlvbnM= 124085 -2KfaqduM 124086 -0L3QvtGB0Y8= 124087 -xJ9hbg== 124088 -44GP44KM44KL 124089 -IHlhcMSxeW9y 124090 -IOqwleuCqA== 124091 -2YXZitmF 124092 -5q2Q 124093 -INix2Lk= 124094 -IGJvxJ8= 124095 -INC40YHRhdC+0LQ= 124096 -6Kqg 124097 -5qC35a2Q 124098 -IGJ1ZGVtZQ== 124099 -INGB0LXRgg== 124100 -zrnPg868zr/PjQ== 124101 -IOW+kuatqQ== 124102 -dcOhbG7DrQ== 124103 -INin2YTYudmC 124104 -INiz2KjaqQ== 124105 -INin2YTYo9iu2LHZiQ== 124106 -RUZB 124107 -5Zu65a6a 124108 -IOOCrA== 124109 -IOyekOyXsA== 124110 -4Lii4Lin4LiC 124111 -2KjYsw== 124112 -dW5tYQ== 124113 -INC30LDQvdC40Lw= 124114 -4LmD4LiZ4Lij 124115 -6ICD6JmR 124116 -5re35ZCI 124117 -5bCL 124118 -IMOnxLFrxLHFnw== 124119 -IG1hbGl5ZXQ= 124120 -6ZyK 124121 -44Gf44KB44Gu 124122 -INm+2LQ= 124123 -INC30LvQvtGH 124124 -IHbDvcWhaQ== 124125 -IHNjaHbDoWw= 124126 -INmG2YXZiNiv2Yc= 124127 -zoY= 124128 -IHrDoWNo 124129 -IM+Dzro= 124130 -44K544Oe 124131 -INmF2LPYp9im2YQ= 124132 -INin2YTYp9is2KrZhdin2Lk= 124133 -5Zyw54K5 124134 -2KfbjNin2YY= 124135 -INCe0Lo= 124136 -6riU 124137 -ZWxlYXNl 124138 -INi32KjZgtmH 124139 -6ZGR 124140 -IOy9lOuhnOuCmA== 124141 -6byg 124142 -5aSn5YWo 124143 -INC/0YDQuNCy0LXRgdGC0Lg= 124144 -INin2KjYqtiv 124145 -66as66Gc 124146 -INGB0YLRgNCw0L3Riw== 124147 -IHphdMOtbWNv 124148 -IGh1eeG6v3Q= 124149 -2LPbjNmI2YY= 124150 -IHNvcmR1 124151 -4oCM2LHYsw== 124152 -INGE0YDQvtC9 124153 -IGVkaXA= 124154 -2Ybar9uM 124155 -INC60LjRgA== 124156 -IO2VtOyVvA== 124157 -7Lu0 124158 -0YbQuNC60LvQvtC/ 124159 -INC/0YDQuNC80LXQvdC10L3QuNGP 124160 -INC+0LHQuw== 124161 -6Zqq 124162 -IGtyb23Emw== 124163 -5qC45b+D 124164 -cmFoaW0= 124165 -0L7RgNC0 124166 -IGzDoG5o 124167 -INC+0YHRgtGA0L7Qsg== 124168 -O3w= 124169 -YnV6 124170 -IM+Ez4HOvw== 124171 -INCS0LDRgA== 124172 -5omO 124173 -xLFsxLHFnw== 124174 -6Z2i56mN 124175 -6Lqr5Lu9 124176 -6aKG5Z+f 124177 -INin2YTZgtix2YY= 124178 -INC/0YDQuNC60LvQsNC0 124179 -44OB44O844Og 124180 -IOC4quC4nuC4mw== 124181 -INC+0YfQuNGB0YI= 124182 -INC80LjQu9C70Lg= 124183 -0LDRhtGW0Zc= 124184 -4Li14LmA4Lit 124185 -IHRhbsSxbg== 124186 -54i25Lqy 124187 -IG1zZ3N0cg== 124188 -INi024zZhduM 124189 -INmB2LHYp9mH2YU= 124190 -IOunpQ== 124191 -44CC5b2T 124192 -INC60L7QvdGG0LXQvdGC0YDQsA== 124193 -6rWQ7ZqM 124194 -44KJ44KM44Gm 124195 -IHlhc2Fr 124196 -INCR0L7Quw== 124197 -IOa+sw== 124198 -54eV 124199 -INis2Kc= 124200 -65GY 124201 -INiv2LHYrtmI2KfYs9iq 124202 -IG3DrXN0bsOt 124203 -woLDjA== 124204 -IGJhc2vEsQ== 124205 -IHXDp2Fr 124206 -5LuT 124207 -IOycoOyngA== 124208 -INC/0L7QsdCw 124209 -IHplcHRhbA== 124210 -57uZ5oiR 124211 -IEF0YXTDvHJr 124212 -INmF2YbYp9iz 124213 -0ZI= 124214 -IGFyYWPEsQ== 124215 -0LvRjtGU 124216 -IG5pdGVsaWs= 124217 -IE1lemk= 124218 -IM6tzr3Osc+C 124219 -z47Ovc+EzrHPgg== 124220 -dmHFvg== 124221 -IGt1emV5 124222 -IM+Oz4HOsQ== 124223 -INGA0L7Qt9C/0L7Qsg== 124224 -4LmI4Liy4LiB 124225 -44CB5LiJ 124226 -INGB0YLQsNGA0Lg= 124227 -IGhha2vEsQ== 124228 -INii2YXYp9iv2Yc= 124229 -7YyU 124230 -0L7QvNGW 124231 -IOKAoA== 124232 -44GL44KP 124233 -44CM5L2g 124234 -5rOV5Zu9 124235 -2ZDZitmG 124236 -5omV 124237 -0L3QuNC70Lg= 124238 -INGD0YHRgtCw0L3QvtCy0LrQuA== 124239 -IGzDtG5n 124240 -4KSk4KSu 124241 -2YjZhtmK2Kk= 124242 -2YrYqtmK 124243 -IOqyjOyLnOusvA== 124244 -IHZlxaFrZXI= 124245 -zq3Pgc6z 124246 -INGD0YHQtQ== 124247 -IGvEsWw= 124248 -IGlsZ2k= 124249 -zrzPic69 124250 -INC30LLRltC70Yw= 124251 -IMO2bmxlbQ== 124252 -4LiB4LiO4Lir4Lih4Liy4Lii 124253 -IEhp4buHcA== 124254 -INCz0L7RgNC8 124255 -0LvRj9GO0YLRjNGB0Y8= 124256 -bGFtYXlh 124257 -INGB0L/QvtGB0L7QsdC+0Lw= 124258 -44G444Go 124259 -56aB5q2i 124260 -INGA0LDRhdGD0L3QvtC6 124261 -INC+0YLQstC10YDRgdGC0Lg= 124262 -LjouOi46Lg== 124263 -IG3DvGRh 124264 -0L7QvdCw0YU= 124265 -zKNj 124266 -IHlhcGFjYWs= 124267 -INC90LDQt9Cy0LDQvdC40LU= 124268 -5a+55pa5 124269 -64yA7ZGc 124270 -54it 124271 -0LLQsNC90LA= 124272 -4KS54KSo 124273 -INC/0YDQvtCx0LvQtdC80LA= 124274 -INC20LXQvdGJ0LjQvdGL 124275 -6J66 124276 -IGhvc3BvZMOhxZk= 124277 -INCh0YLQtdC/ 124278 -IG9kcG92xJtk 124279 -IFPhu60= 124280 -ZXZpZXc= 124281 -5Yeg5LmO 124282 -55+i 124283 -5p2l44Gf 124284 -INC/0L7Qu9C+0YE= 124285 -INGB0LXQuw== 124286 -5bGG 124287 -INC/0LXRgNCy0L7QuQ== 124288 -INC/0YDQvtGG0LXRgdGB0LA= 124289 -44CA44Kd 124290 -2KrYp9mF2KjYsQ== 124291 -0LjQu9Cw0YHRjw== 124292 -77yM5peg 124293 -INCy0LvQsNGB0L3QvtGB0YLRlg== 124294 -7ZWY7J6Q 124295 -0LDRgtC60Lg= 124296 -IELDoA== 124297 -IEthcmVs 124298 -6Le1 124299 -2LHbjNmH 124300 -IOuCmOulvA== 124301 -INC+0LHQtdGB0L/QtdGH0LjQstCw 124302 -4KWN4KSw4KSq4KSk 124303 -44GX44KH 124304 -5Y2S 124305 -IOWlpQ== 124306 -INC/0YDQvtGC0LU= 124307 -IOaLmw== 124308 -INCh0YLRgNCw0L3QsA== 124309 -INGA0LDQsdC+0YLQsNGC0Yw= 124310 -INiq2LTYrtuM2LU= 124311 -0LXQutGB0YM= 124312 -IOumrOq3uA== 124313 -INi12KfZhNit 124314 -IGJhxZ9sYW3EscWf 124315 -INm+24zYp9mF2KjYsQ== 124316 -2LLYpw== 124317 -INC80LDRgdGB 124318 -IM6gzrHPgQ== 124319 -65287ZS8 124320 -IHlhcsSx 124321 -INGC0LjQv9GD 124322 -0J7Qvw== 124323 -44GR44Gq44GE 124324 -ZW1lbQ== 124325 -IG7Em211 124326 -INmG2LTYsQ== 124327 -IM6RzrjOrs69zrE= 124328 -2YHYsdin2YY= 124329 -IOe2sg== 124330 -INC/0YDQvtC80LjRgdC70L7Qsg== 124331 -IEJ1Z8O8bg== 124332 -7J6U 124333 -INC20ZbQvdC+0Lo= 124334 -IOC4m+C4o+C4sOC5gOC4oOC4lw== 124335 -INCy0LjQutC+0YDQuNGB0YLQvtCy0YPQstCw0YLQuA== 124336 -INCi0LjQvA== 124337 -KeulvA== 124338 -0LXQttCw0YLRjA== 124339 -IHNvbmE= 124340 -2LTZhtio2Yc= 124341 -IG5pY2jFvg== 124342 -5Ymb 124343 -INmB2KrYrQ== 124344 -INmF2YLYr9mF 124345 -IEfDvHZlbmxpaw== 124346 -ZXVt 124347 -57uP6L+H 124348 -6Led6Zui 124349 -wqDQvdC1 124350 -INin2LXZiNmE 124351 -IHphxI3DoXRrdQ== 124352 -4Li04LmA4Lin4LiT 124353 -IOCkleCknw== 124354 -IGtyaXo= 124355 -IHDDoW4= 124356 -INCx0L7RgNGM 124357 -2LjZhdip 124358 -IOqyveu2gQ== 124359 -INin2YTZitmF2YY= 124360 -INin2YTYudix2KjZig== 124361 -IGhsdWI= 124362 -IGNo4bud 124363 -6KWy 124364 -65Oc66as 124365 -44OW44Oq 124366 -INGB0YLQvtC70ZbRgtGC0Y8= 124367 -2LHYqNmK2Kk= 124368 -IOawuA== 124369 -IOqxsOydmA== 124370 -IM6yzrHPgw== 124371 -IGFyeg== 124372 -44Oi44Oz 124373 -INGA0ZbQstC10L3RjA== 124374 -5LiN55+l 124375 -5a+86Ie0 124376 -2KfZiti0 124377 -INC/0YDQtdCy0YvRiA== 124378 -INC/0L0= 124379 -IM6Sz4HOv8+Hzq4= 124380 -IOi6qw== 124381 -IMSQ4bqndQ== 124382 -IM+MzrzPic+C 124383 -asOtxb4= 124384 -IM67zq/Osw== 124385 -INGI0LrQvtC70Lg= 124386 -44Gj44Gx44GE 124387 -emR5 124388 -IOqzpw== 124389 -dGXFnw== 124390 -0YDQtdGJ 124391 -zrrOtc65 124392 -c2FodWpl 124393 -IOCkieCkuOCkuA== 124394 -IFRhbnLEsQ== 124395 -5LiN5aW9 124396 -6YOt 124397 -INCy0YvQs9C70Y/QtA== 124398 -IMOnb8Sf 124399 -INC40L3RgdGC0YDRg9C80LXQvdGC 124400 -cmVq 124401 -6IiM 124402 -44GL44KJ44Gq44GE 124403 -INC90LXQv9GA0LjRj9GC 124404 -INC60YDQvtC80LU= 124405 -zrbOtw== 124406 -INC70L7Qsw== 124407 -4KS+4KS14KSw 124408 -64WV7ZWY7IS47JqU 124409 -4KS+4KS54KSw4KSj 124410 -IGfDvHZlbmlsaXI= 124411 -VOG6oWk= 124412 -INi02YfYsdiv 124413 -IM6kzrU= 124414 -0L7RgNCw0Lc= 124415 -IGzDoG5n 124416 -77yp 124417 -5oqV5rOo 124418 -IHNpeWFzZXQ= 124419 -0JvRjg== 124420 -IHTFmWV0 124421 -IM+Az4HPjs+Ezrc= 124422 -INGD0LvRi9Cx 124423 -IEzDom0= 124424 -0YPQu9GM0YLQsA== 124425 -5Z+65Zyw 124426 -IHNrdXBpbmE= 124427 -5rC45LmF 124428 -0LvRg9Cz0L7Qsg== 124429 -INGG0ZbQuQ== 124430 -IFBvaA== 124431 -adC0 124432 -IFRydXk= 124433 -55qE5LiA5Liq 124434 -67KE7KCE 124435 -IHjhu6k= 124436 -4LiH4LmB4Lij4LiB 124437 -4LiE4Lit4Lih 124438 -IGVsZWt0cm9uaWs= 124439 -IGHEn2HDpw== 124440 -IOCknOCkrw== 124441 -INC/0L7QstC10YDRhdC90L7RgdGC0Yw= 124442 -INin2YfZhduM2Ko= 124443 -0LvQuNCy0LjRhQ== 124444 -IG9sZHXEn3VuZGFu 124445 -77yJOg== 124446 -0YbQuNGP0YU= 124447 -6KO95L2c 124448 -4LiX4Lij4LiH 124449 -ZXlpbQ== 124450 -IG7DoWtsYWQ= 124451 -Y2lsaWs= 124452 -INCT0LvQsNCy 124453 -IFV5Z3U= 124454 -INGA0LXQs9GD0LvRjg== 124455 -4KSC4KSc4KSo 124456 -IGtheW5hxJ/EsQ== 124457 -4LmJ4Liy4Lit 124458 -IGfDtnJtZWs= 124459 -IO2MrA== 124460 -IOWujA== 124461 -2KvZhdin2YY= 124462 -INGC0LDQutCw0Y8= 124463 -INC90LXQuNC3 124464 -IHpwcsOhdnk= 124465 -INin2YTYtNiu2LU= 124466 -IOyYpO2bhA== 124467 -INin2YTYt9io 124468 -YXTEsXLEsW0= 124469 -2LHZitix 124470 -INmF2LnZhdin2LHbjA== 124471 -w5xSSw== 124472 -INKQ 124473 -IOyErA== 124474 -5omL44Gr 124475 -IOuzgO2ZlA== 124476 -dWxhY2U= 124477 -IHPhu6M= 124478 -0YDQuNGH 124479 -4Lih4Lir4Liy4Lin 124480 -IGvDog== 124481 -INGB0L/RgNC+0LE= 124482 -2YfYsdmH 124483 -4KS+4KSn4KSo 124484 -IM+AzrHOuQ== 124485 -2KjYudiv 124486 -INin2YTYqtmI 124487 -57uP55CG 124488 -cMWvc29i 124489 -5qyg 124490 -INC30LDRhdCy0L7RgNGO0LLQsNC90L3Rjw== 124491 -2K7YqQ== 124492 -2obYp9ix 124493 -IGJvenVr 124494 -XeKAjw== 124495 -IFNvY29ycm8= 124496 -IGhyYWQ= 124497 -0L3QsNC00LvQtdC2 124498 -INGD0YfQsNGB0YLQuNC1 124499 -5aSJ44KP 124500 -IHlhbnM= 124501 -INil2YQ= 124502 -2K7YqNix 124503 -0YbQuNC60LvQvtC/0LXQtA== 124504 -zrnPjs69 124505 -z4PPhM+Bzr8= 124506 -IGJhbmth 124507 -IHNvxJ91aw== 124508 -IMO8bmzDvA== 124509 -6aKc 124510 -INix2YHYuQ== 124511 -55Cz 124512 -INGB0L7RgdGC0L7Rj9C90LjQuA== 124513 -zr3Ov869z4TOsc+C 124514 -INCw0LrRgtC4 124515 -IM+Azr/Ou8+F 124516 -INC80L7Rlw== 124517 -IOagvA== 124518 -57KX 124519 -INGB0LvRg9GH0LDQuQ== 124520 -7J287JeQ 124521 -INGC0YDQtdCx0YPQtdGC 124522 -IOWPguiAgw== 124523 -YW5nbA== 124524 -YW1paw== 124525 -IMSwxZ4= 124526 -5rmv 124527 -IMSRw6Fv 124528 -4Lil4Liw4LiE4Lij 124529 -0YHQvg== 124530 -wqBvYg== 124531 -IGtsaW0= 124532 -6IOG 124533 -7IOd7Zmc 124534 -44OR44Oz 124535 -LeCkrA== 124536 -INC60LDQtA== 124537 -4LmI4Liq4Liy4Lih4Liy4Lij4LiW 124538 -INmF2LPZhNmF2KfZhg== 124539 -57+w 124540 -IELDvHTDvG4= 124541 -IEtyYWo= 124542 -INC/0LXRgNGB0L8= 124543 -IGVuZXJq 124544 -44GV44Gb44KL 124545 -6L6+5Yiw 124546 -4KS+4KSK 124547 -INqv2LHZgdiq2YY= 124548 -0YjQutGD 124549 -INCf0LvQvg== 124550 -w61ueQ== 124551 -IEhyYQ== 124552 -INqG2YbYp9mG 124553 -IOC5hOC4l+C4og== 124554 -dmlzZWrDrWPDrQ== 124555 -27Pbsw== 124556 -INCc0ZbQvdGW0YHRgtC10YA= 124557 -4LmC4Lit 124558 -INiv2YfbjNiv 124559 -5q+U5L6L 124560 -z4POuc61z40= 124561 -x5A= 124562 -44CB44Gq 124563 -IOCkpOCkuA== 124564 -IMSwdA== 124565 -IOyghOyfgQ== 124566 -4LmA4LiI4Lij 124567 -IGVsZWt0cg== 124568 -IGTGsA== 124569 -4pSU 124570 -IOyDpA== 124571 -5Luu 124572 -4LiB4Liy4Lij4LmA4Lil 124573 -INC80YPQu9GM 124574 -IOW6pg== 124575 -IEh1eeG7h24= 124576 -0LLQtdC9 124577 -IGzGsOG7m2k= 124578 -IHByb3ZvenU= 124579 -0YPRgNGD 124580 -0YDRltGX 124581 -IMOnb2N1xJ8= 124582 -4Lix4LiQ4Lia4Liy4Lil 124583 -2YTZitmH 124584 -IFvigKZdLi4uCg== 124585 -5Y6f5aeL 124586 -IHNrbGFk 124587 -INiz2b7Yqtin2YXYqNix 124588 -IFRvbcOhxaE= 124589 -INiz2YjYp9mE 124590 -54Gt 124591 -44KT44Gp 124592 -0L3QsNC30L3QsNGH 124593 -IMSRxKlh 124594 -IHVkxJtsYXQ= 124595 -IOCkhuCkpuCkrg== 124596 -77ys 124597 -zrnOvc+M 124598 -acWfbGVyaQ== 124599 -xJDDonk= 124600 -INix2LPYp9mG2Yc= 124601 -2LnYp9mF 124602 -44O844OR44O8 124603 -IGRvcHJvdg== 124604 -INC80ZbRgdGC0L4= 124605 -77yl 124606 -0LXQu9GW0LM= 124607 -2KfYptiy 124608 -5LiN5LqG 124609 -INCQ0LvQtdC60YHQsNC90LTRgA== 124610 -INCy0YDQtdC80LXQvQ== 124611 -IGR2ZcWZZQ== 124612 -IGNo4bqjeQ== 124613 -IG90ZWw= 124614 -6IKv5a6a 124615 -INGD0YLQstC10YDQttC0 124616 -INCa0L7QvNC/ 124617 -IOuCmOudvA== 124618 -INCy0ZbQtNCx0YPQstCw0ZTRgtGM0YHRjw== 124619 -44CB44CO 124620 -IGthcsWfxLFsxLFr 124621 -IGzhuqtu 124622 -54WZ 124623 -2Lnaqdiz 124624 -5byl 124625 -IHRlY3I= 124626 -IG5lb2Q= 124627 -5oiQ54K6 124628 -5YWl44KK 124629 -INCf0YDQvtC0 124630 -IM+Az4HOrA== 124631 -4Li34Lit4LiU 124632 -0YHRgtCw0YLQuA== 124633 -0LXQvdC+0Zc= 124634 -0YfQuNGB0Ls= 124635 -55yf5q2j 124636 -IOC4o+C4suC4hA== 124637 -0YPRgNC1 124638 -INi02KfZh9iv 124639 -2KfYudix 124640 -IOqyve2XmA== 124641 -4LiZ4LiE 124642 -44ON44Or 124643 -z4DOv8+FzrvOv8+C 124644 -IOCkruCkiA== 124645 -7Iqk7L2U 124646 -aXRlbG7DqQ== 124647 -5byA5pS+ 124648 -542o 124649 -IHDFmWVjaA== 124650 -w7rEjWFzdA== 124651 -5aKT 124652 -IOW9sQ== 124653 -2YbYs9in2YY= 124654 -INC00LLQsNC0 124655 -INC40LTQtdGC 124656 -INC/0L7QtNC60LvRjtGH 124657 -7Yq567OE7Iuc 124658 -QsOgaQ== 124659 -xaFrdQ== 124660 -aWxlcmRlbg== 124661 -5Y+Y5b6X 124662 -64+Z7JWI 124663 -IHBvc3R1cG7Emw== 124664 -INC40YLQvtCz 124665 -IGTFr3ZvZHU= 124666 -c2l6bGlr 124667 -2YTYp9mG 124668 -6YKj56eN 124669 -INGH0LDRgdCw 124670 -5LiN5pat 124671 -INiu24zYp9io2KfZhg== 124672 -INin2YTYr9in2K4= 124673 -INGB0YLQvtGA0ZbQvQ== 124674 -IOy2nOyXsA== 124675 -5rKf 124676 -IGhyeQ== 124677 -IEfDnA== 124678 -IOyduOq1rA== 124679 -bGllZA== 124680 -INi52KfZhNmK2Kk= 124681 -INC/0YDQtdC00LLQsNGA 124682 -0LDQvdC90L7QuQ== 124683 -5Y+l6K+d 124684 -6aCT 124685 -67CU7J28 124686 -77yPLw== 124687 -INmF2K7Yqti12KfYqg== 124688 -656r 124689 -IMOnYWzEscWfbWFsYXLEsQ== 124690 -IHJlcHVibGlrYQ== 124691 -IOyz 124692 -4KS+KQ== 124693 -IOqxtOqwlQ== 124694 -IOqzteuPmQ== 124695 -6IWm 124696 -IOyEnOuhnA== 124697 -INC/0YDQvtCy0L7QtNC40YLRjA== 124698 -INC00LXQudGB0YLQstC40YLQtdC70YzQvdC+ 124699 -dmXDpw== 124700 -2KvYp9mE 124701 -IGfDtnN0ZXJpcg== 124702 -xLFybGFy 124703 -INGB0LDQvNGL0Lw= 124704 -w6Fsbw== 124705 -6aKR5qyh 124706 -4KWI4KSX 124707 -2KfYr9mF 124708 -54yq 124709 -IFPhuqNu 124710 -IMOnxLE= 124711 -IGxldHk= 124712 -IHJlcHVibGljZQ== 124713 -5p2l6Ieq 124714 -IHbhur90 124715 -IGJpcmlr 124716 -IG1la3Q= 124717 -INin2YTZiNmB 124718 -IGppY2g= 124719 -5LiA6Kan 124720 -6Zyy5Ye6 124721 -IEhp4buHbg== 124722 -IGRp4buHdA== 124723 -INGF0YDQuNGB0YLQuA== 124724 -5Yia5omN 124725 -a2F0ZQ== 124726 -IGJhemVu 124727 -IHVyxI1pdMSb 124728 -IHVtb8W+xYh1amU= 124729 -6aGY44GE 124730 -L1HEkA== 124731 -IG1lbsWhw60= 124732 -z4POus61z4XOrg== 124733 -INGG0LXRgNC60L7Qsg== 124734 -IOi0rQ== 124735 -0L7QutGA0LDRgtC4 124736 -INGA0L7Qt9C6 124737 -zrHOvc6/z4U= 124738 -IHnDtm5ldGlj 124739 -IG9sbWFkYW4= 124740 -5Yac5Lia 124741 -IOuwlOuejA== 124742 -55Oc 124743 -0YjQsNC10YLRgdGP 124744 -INCa0L7RgdGC 124745 -INmF2LnYqg== 124746 -IOC4nuC4pQ== 124747 -INmF2KrZgdin2YjYqg== 124748 -44KJ44GP 124749 -6IiX 124750 -INiq2LnYsduM2YE= 124751 -6YmE6YGT 124752 -IHDDqcSNZQ== 124753 -7Lu1 124754 -INC/0L7QtNGA0LDQtw== 124755 -INCx0LDQvdC60YM= 124756 -xLBTxLA= 124757 -5qGQ 124758 -4LmC4Lij4LiE 124759 -INit2LDZgQ== 124760 -IOuj 124761 -0LvQuNC2 124762 -IOyCsOyXhQ== 124763 -INC/0YDQuNGH0LjQvdGL 124764 -INC90LDQt9C90LA= 124765 -44Oq44K544OI 124766 -7KCV67aA 124767 -z4PPhs6x 124768 -5aaD 124769 -INCz0L7Qu9C+0LLQuA== 124770 -65CY7JeI7Iq164uI64uk 124771 -IM61zr3PjM+C 124772 -44Kk44Oz44K/ 124773 -IHNsdW4= 124774 -66C0 124775 -INGB0YPRidC10YHRgtCy0YPQtdGC 124776 -0LfQsNCx 124777 -5pu05Yqg 124778 -INCx0LvQsNCz0L7QtNCw0YDRjw== 124779 -IOuMgOq1rA== 124780 -6L6F 124781 -4Lir4Liy4LiB 124782 -IOaOpQ== 124783 -64yA66W8 124784 -5Lq657G7 124785 -amVtZQ== 124786 -5YiG5biD 124787 -7J6l7J2A 124788 -INC00L7Qv9C+0LzQvtCz0Lg= 124789 -7JmE66OM 124790 -b3N5 124791 -6Iux6ZuE 124792 -INmE2LM= 124793 -4KSu4KS5 124794 -IOC4geC4sw== 124795 -INiv2KfYtNiq2YY= 124796 -reygnA== 124797 -xLBuZw== 124798 -IFRoxrDhu51uZw== 124799 -7ZmA 124800 -0Y3RhA== 124801 -7ZW07JqU 124802 -INCc0ZbQtg== 124803 -0LXRgNGW0LPQsA== 124804 -IM614bw= 124805 -4LmB4Liq4LiH 124806 -44OA44Kk 124807 -IGNlc3R5 124808 -IHByw6F6ZA== 124809 -56ys5LiA5qyh 124810 -INmH2YXYs9ix 124811 -IHpldg== 124812 -wqBF 124813 -IEJlbGVkaXllc2k= 124814 -INC/0YDQvtC/0L7Qt9C4 124815 -IGFubGF5xLHFnw== 124816 -wqDZhQ== 124817 -INGA0LDRgdGB0YfQuNGC 124818 -INin2YTYo9mF2LHZitmD2YrYqQ== 124819 -IMW+ZW5h 124820 -ZGVuaXo= 124821 -IG5vY2k= 124822 -IHN0w6Fs 124823 -4Li44Lii 124824 -7KO87IaM 124825 -INC30LXRgA== 124826 -IOyGjOqwnA== 124827 -IGto4bqzbmc= 124828 -YXTEsWPEsQ== 124829 -xJvFvg== 124830 -INGH0YPRgtGM 124831 -IGPhuq11 124832 -INin2LfZhNin2Lk= 124833 -5rWF 124834 -IHN0cmF2 124835 -IFNhbmF5aQ== 124836 -INi32KjZig== 124837 -IGjEsXpsYQ== 124838 -z47Ovc6x 124839 -4KS/4KSc4KSy 124840 -2YXYrdmF2K8= 124841 -4Lia4LiB 124842 -IHZ6ZMOhbGVu 124843 -INGC0LDQutC40LzQuA== 124844 -44CC44Gd44GX44Gm 124845 -IGthbHA= 124846 -INC60L7QttC90L7Qs9C+ 124847 -0KDCtQ== 124848 -2YTYudin2Kg= 124849 -INmF2YjZhg== 124850 -IOydvOydhA== 124851 -IOuwlOydtA== 124852 -IG1la2Fu 124853 -INis2KfZhdi5 124854 -INmG2YHYqg== 124855 -INin2YTYs9mF 124856 -0LvRi9GF 124857 -6IOM5pmv 124858 -IOqyg+uPhA== 124859 -IOyCtOyVhA== 124860 -eWTEsQ== 124861 -INC90LDQstC10YA= 124862 -5a2Q44Gv 124863 -bHVsdWs= 124864 -IGjhu5du 124865 -INi02YE= 124866 -INi52YTYqg== 124867 -4LiE4Lij4Liy4Lih 124868 -IM6az43PgA== 124869 -IOC5gOC4oeC4qeC4suC4ouC4mQ== 124870 -2YbYr9mC 124871 -INGD0YHRgtGA0LA= 124872 -IM6TzrXOvQ== 124873 -INCG0LLQsNC9 124874 -IFBob25n 124875 -5a6255qE 124876 -INCQ0LvQtdC60YE= 124877 -INC30LHQtdGA0ZbQsw== 124878 -IMWfYXJrxLE= 124879 -INi42LHZgduM2Ko= 124880 -INmF2LnZhtuM 124881 -INC70L7Qsg== 124882 -IOyCtg== 124883 -6IWQ 124884 -IOWvjA== 124885 -RVJH 124886 -INGB0YLQvtC40LzQvtGB0YLRjA== 124887 -xZlldA== 124888 -4KWJ4KSv 124889 -4LmI4Liy4Lij 124890 -INin2LHZiNm+2Kc= 124891 -INCx0YDQvtGB 124892 -INC+0YLQvdC+0YHRj9GC 124893 -IM6fzro= 124894 -0YbRjNC60LjQuQ== 124895 -z4rOug== 124896 -44GC44KK44G+44Gb44KT 124897 -INGD0L3QuNC6 124898 -IMSRaeG7g24= 124899 -IHbDvXprdW0= 124900 -IGjhu6k= 124901 -INmI2KfYqg== 124902 -IOW5s+aWuQ== 124903 -z4XOvA== 124904 -44KS5L2/ 124905 -zrXOr8+EzrHOuQ== 124906 -5Lik5Lq6 124907 -IOWMuw== 124908 -0YDQsNGC0LjRgtGM 124909 -INin2YTYp9mG2Ko= 124910 -44Gu5Lq6 124911 -2LHYtA== 124912 -INCi0YPRgA== 124913 -cm7Emw== 124914 -5aSp5aSp 124915 -4Lih4Liy4Lij 124916 -IG9ydGFsYW1h 124917 -INC/0LXRgNC10L/QuNGB 124918 -IOyDneyCsA== 124919 -5b+G 124920 -7Ye0 124921 -77yM6K+l 124922 -6Yyi 124923 -z4DOsc6vzrQ= 124924 -INC80LXRgNC+0L/RgNC4 124925 -INCz0YDQsNCy 124926 -w5RuZw== 124927 -IOak 124928 -INin2YTYr9mI2YTYqQ== 124929 -INC+0YHRjA== 124930 -5aWU 124931 -IGfDvHZlbmxp 124932 -7ZWY7Iug 124933 -IOmK 124934 -6Z+z5qiC 124935 -IG1lZHlh 124936 -INio2YbYpw== 124937 -0LDQvNCw 124938 -IOOCreODow== 124939 -6Jel 124940 -bGFyxLFt 124941 -IFRp4bq/bmc= 124942 -aXlvcmxhcg== 124943 -77yi 124944 -5pSd 124945 -0ZbQudGB0YzQutC+0Zc= 124946 -IHlldGnFn3Rpcg== 124947 -INm+2LPYsQ== 124948 -44KJ44GX 124949 -wpo= 124950 -7IOk 124951 -4LiU4Liy4Lir 124952 -INiq2K3YtduM2YQ= 124953 -INCx0LXQvdC3 124954 -6YGj 124955 -INC90LDQsdC70Y4= 124956 -5L2T57O7 124957 -44Ov44Kk44OI 124958 -wqDCoCA= 124959 -5Lmm6K6w 124960 -IE3DvGhlbmRpcw== 124961 -cGxvcg== 124962 -bGF6 124963 -0LvRj9C70Lg= 124964 -IHBvbcOhaA== 124965 -INCx0LvQuNC2 124966 -INGH0LjRgdC70LA= 124967 -IHVieXRvdsOhbsOt 124968 -0YDQsNGC0L3Qvg== 124969 -IHRyxINt 124970 -INin2KjYsdin2Yc= 124971 -w6F0a2E= 124972 -IGnDp2luZGVraQ== 124973 -4Lix4Lia4LiZ 124974 -INin2YXbjNiv 124975 -bmF2ZQ== 124976 -ZWN1dA== 124977 -5bCx5Zyo 124978 -IHRyYWRp 124979 -2LfZhNmC 124980 -44Km44Kp 124981 -IGtodcO0bg== 124982 -7Iqk66Gc 124983 -z4TOrc+BzrE= 124984 -IM+DzrrOvw== 124985 -66eb 124986 -INmB2YbbjA== 124987 -4LmM4LmA4Lie 124988 -INin2YTYudi4 124989 -IHRow7Ru 124990 -6riw7J2Y 124991 -IOC4vw== 124992 -0YPRjtGC0YHRjw== 124993 -INmF2qnYp9mG 124994 -IOKXjg== 124995 -IOecgQ== 124996 -IOWNoQ== 124997 -INC/0LXRgNGI0LjQuQ== 124998 -IO2bhOuztA== 124999 -INii2LHYp9mF 125000 -44GM44GE 125001 -4Lii4Liy4LiZ 125002 -zrzOtc65 125003 -IE3DoXk= 125004 -IHrFrw== 125005 -IHBvZHBvcnU= 125006 -7Luo 125007 -0YHRgtGA0Lg= 125008 -z4DPhM+Jz4POtw== 125009 -0KTQmw== 125010 -5ZOq6YeM 125011 -INC/0LXRgNCy0YPRjg== 125012 -IHllcmluZGU= 125013 -INiy24zYqNin 125014 -IG9kc3RyYW4= 125015 -4KWA4KSX 125016 -INGA0ZbQt9C90ZY= 125017 -z4HOt8+Dzrc= 125018 -4oCM2KfZhNmF2YTZhNuM 125019 -2LnYp9iv 125020 -4KWN4KSq4KS3 125021 -0Z9O 125022 -772b 125023 -44O844Oc 125024 -6LSt5Lmw 125025 -IOyduOq4sOq4gA== 125026 -INmF24zYtNmI2K8= 125027 -INCx0LXQt9C+0L/QsNGB0L3QvtGB0YLQuA== 125028 -IM69zrXPhs6/zro= 125029 -44Gr44Go 125030 -INGG0LXRgNC60LLQuA== 125031 -2KrZgw== 125032 -IEjDoG5n 125033 -INmE2YTYsw== 125034 -IM69zrXPhs6/zrrOrM67z4XPiM63z4I= 125035 -cmFtYW4= 125036 -IHZ5dm9s 125037 -bmnEjQ== 125038 -2LHYp9mG2Yc= 125039 -IHBlxZ8= 125040 -44Or44Kv 125041 -5bSH 125042 -IGlta8Oibg== 125043 -5Yy755aX 125044 -IOCkquClnQ== 125045 -zqzOvc69zrfPgg== 125046 -INis24w= 125047 -IHByb2pl 125048 -IMO8bGtlbmlu 125049 -IEtldw== 125050 -INin2YTZhdmB 125051 -2KPZgw== 125052 -55m66KGo 125053 -IM60z4U= 125054 -IOWbveWutg== 125055 -IEtpxZ9pc2Vs 125056 -44Oz44Ks 125057 -IHpwcsOhdmE= 125058 -Vmnhu4dj 125059 -ZXJpZg== 125060 -IHN0csOhbmt5 125061 -6Zqg 125062 -6LyV 125063 -0LrQvtC3 125064 -IOCkuOCknA== 125065 -2YfYr9in2YE= 125066 -bG91Yg== 125067 -4Lig4Liy4Lie4Lii4LiZ4LiV4Lij 125068 -IO2VoOyduA== 125069 -IMSQw6Bv 125070 -INmG2KfYrduM2Yc= 125071 -KD0p 125072 -IMWeYW1waXlvbg== 125073 -IHBpxZ8= 125074 -INiw2Yc= 125075 -4KWv 125076 -INGB0YDQtdC00YHRgtCy0L4= 125077 -IOC5gOC4p+C4peC4sg== 125078 -INGH0YPQtg== 125079 -IHZlcmlsZXJp 125080 -INqp2KfYsdiq 125081 -0LDQstC4 125082 -IOCkleCksOCktQ== 125083 -IHJlc3RhdQ== 125084 -6rCc7JuU 125085 -INC80LjRgNC+0LI= 125086 -7LCu 125087 -IG7Em2pha8O9 125088 -IHNlc3Npeg== 125089 -2KfYodin2Ko= 125090 -INCX0LDRhQ== 125091 -0Y/RidC40YU= 125092 -0L/RgA== 125093 -INC/0L7QtNCw0LvRjA== 125094 -INC+0L/RgNC10LTQtdC70LjRgtGM 125095 -4KWt 125096 -INix2YE= 125097 -5bm456aP 125098 -4Ls= 125099 -IHbEm2RvbQ== 125100 -INGB0LLQuNC00LXRgtC10LvRjA== 125101 -IM6Tzr/PhQ== 125102 -xLFsxLHEn8SxeWxh 125103 -55m76Yyy 125104 -IOS4i+i3jA== 125105 -INC/0LvRjg== 125106 -0L3QvtC0 125107 -INij2KzZhA== 125108 -IOCkleCkpQ== 125109 -6YO95LiN 125110 -IHNlbmU= 125111 -IHDEmw== 125112 -6KiI5YqD 125113 -INCw0YPQtA== 125114 -INC+0LTQvdC+0Lw= 125115 -IOS4h+WFgw== 125116 -INmI2YXYpw== 125117 -INCU0YDRg9Cz 125118 -6LW344GT 125119 -0LLQsNGO0YLRgdGP 125120 -0LvQsNGC0YM= 125121 -INiq2YjZhg== 125122 -0YnQsNGP 125123 -zq7Ouw== 125124 -INCf0YDQsA== 125125 -INin2LPYqtix2KfYqg== 125126 -4Li04LiZ4LmA4LiU 125127 -4KWN4KSX4KSk 125128 -wqDQtw== 125129 -INC/0L7Qu9C+0YI= 125130 -5q6W 125131 -5qGG 125132 -IFNpc3RlbQ== 125133 -IHJ1a3U= 125134 -44OD44Kr44O8 125135 -INC+0LHRj9C30LDQvQ== 125136 -IGvDtsWf 125137 -IGFkxLFuxLE= 125138 -2LTZhdin2YTbjA== 125139 -bmHEjWVuw60= 125140 -IC7vvI8= 125141 -IOWumA== 125142 -IHRvcGx1bXNhbA== 125143 -6Kqk 125144 -INio2YfYqNmI2K8= 125145 -0YHRgtCy0LXQvdC90LDRjw== 125146 -INii2b4= 125147 -INis2YTYs9mH 125148 -44CA770= 125149 -5ZOt 125150 -5omA5bGe 125151 -5pKu 125152 -7KKA 125153 -IM61zrk= 125154 -7LmY66W8 125155 -IOqzvOyglQ== 125156 -dXVtbA== 125157 -zrTOrA== 125158 -INiy2K8= 125159 -7JuQ7J2E 125160 -IHbEm2PDrQ== 125161 -2K/Yqw== 125162 -IHNhbmtp 125163 -5YOP5piv 125164 -0LvQsNGA0LA= 125165 -7IKs7J20 125166 -44KP44KM44Gf 125167 -IMSRw7Nu 125168 -5ZCv5Yqo 125169 -IGdpw6BuaA== 125170 -IGvEsXJtxLF6xLE= 125171 -2K7ZhQ== 125172 -5pCN 125173 -5YiH44KK 125174 -44K144O844OT44K5 125175 -2YfYp9ix 125176 -2LDZg9ix 125177 -0L7RgNC+0Lc= 125178 -4KWI4KSC4KWkCgo= 125179 -IO2ZiO2OmOydtOyngA== 125180 -INmD2KjZitix2Kk= 125181 -0L3QuNC90LA= 125182 -7ZWY7Jqw 125183 -5byV55So6aKR5qyh 125184 -4KWu 125185 -INCx0LDRgtGM0LrRltCy 125186 -4Lif4Lit4Lij 125187 -4Li1Lg== 125188 -7KCd7Yq4 125189 -6ZiF6K+75qyh5pWw 125190 -IGl0aXI= 125191 -0YjQuNC9 125192 -IFbhuq15 125193 -54Ku 125194 -0LvQsNCz0L7QtA== 125195 -2LTZhtin2LM= 125196 -4buQ 125197 -INGP0LPQvtC0 125198 -IOykkeyVmQ== 125199 -2LHZiti3 125200 -IOyImO2WiQ== 125201 -IOS4gOiIrA== 125202 -INGF0LLQuNC70LjQvQ== 125203 -INCc0L7QttC90L4= 125204 -INC90LDRh9Cw0LvQtQ== 125205 -INC+0LTQvdC+0LI= 125206 -IMOcw6c= 125207 -0YbQuNC+0L3QvdGL0Lk= 125208 -IOyalQ== 125209 -5ryC 125210 -5bKz 125211 -2KrYr9mJ 125212 -zrrOt8+C 125213 -4oCZbmRh 125214 -77yQ77yQ 125215 -6KqJ 125216 -6aeF5b6S5q2p 125217 -INmB2LHYstmG2K8= 125218 -5YWs6Lev 125219 -zrHPg86vzrHPgg== 125220 -4Liy4LiT4Liy4LiI 125221 -65Gl 125222 -IM+Azr/OuQ== 125223 -INio2K/Yp9mG 125224 -0LrQsNC/ 125225 -IOyeiOuKlOuNsA== 125226 -77yM5q2k 125227 -4Lib4Lij4Liw4LmC4Lii4LiK4LiZ 125228 -INqp2LTZiNix2YfYp9uM 125229 -4Li44Liq 125230 -44G544GN 125231 -INGB0LDQvNGL0Lk= 125232 -INC/0LvRjw== 125233 -INCx0LXQtA== 125234 -5Lq65omN 125235 -4Liq4Lir4Lij 125236 -4Li54LiV 125237 -IGt1bGxhbsSxbcSx 125238 -7ZWZ64WE 125239 -5rK755aX 125240 -44CC5LiN6L+H 125241 -5qOa 125242 -64Ko64+E 125243 -INii2KrYtA== 125244 -z4fOrc+C 125245 -IGZ1bmtjaQ== 125246 -0L3QvtC+0LHRgNCw0Lc= 125247 -4KWL4KSr 125248 -IGthcHM= 125249 -4Liy4Lip4LiO 125250 -KNi5 125251 -77yM5Yqg 125252 -4LmK4LiB 125253 -INmH2LQ= 125254 -INiv2LHZiNmG 125255 -INC80LXRhw== 125256 -INC/0YDQtdC20LTQtQ== 125257 -4LmI4Lii 125258 -INin2LHYtNiv 125259 -4Liy4LmA4Lil 125260 -5q+U6LyD 125261 -INiw2qnYsQ== 125262 -IOadoQ== 125263 -0Io= 125264 -0YPQutGA0LDRl9C9 125265 -2YrZhtin2Ko= 125266 -7KKL 125267 -0LTQuNGP 125268 -z4TPgc65 125269 -INCa0LDQtw== 125270 -2YLZhNin2YQ= 125271 -Xyws 125272 -INqG2Ko= 125273 -IOydvOyglQ== 125274 -INCf0YDQvtGE 125275 -5rOb 125276 -IGRydWjDvQ== 125277 -0YfRg9C6 125278 -bGVkaWs= 125279 -IGhleWVj 125280 -0YvQstCw0Ls= 125281 -IETDvG55 125282 -IOeZug== 125283 -IHDFmcOhdGVs 125284 -zrLOrM67 125285 -INi62LE= 125286 -64uo7LK0 125287 -7Juo65SU7Iuc 125288 -0YDQsNGJ0LXQvdC40Y8= 125289 -0L3RhtC40LrQu9C+0L/QtdC0 125290 -IHBvZG5pa2F0ZWw= 125291 -IOyLoOyehQ== 125292 -INmB2LHYog== 125293 -0LjQu9C40YHRjw== 125294 -IG9sdW1sdQ== 125295 -4KWN4KS34KSu4KSk 125296 -INmF2KrYrti12LU= 125297 -0LnQvtC8 125298 -2KTYp9mE 125299 -INCd0LDRgg== 125300 -7Jik64qU 125301 -IE3DvGTDvHJsw7zEn8O8 125302 -IEjDoG5o 125303 -INiz2KfYqNmC 125304 -77yJ55qE 125305 -IFF1w70= 125306 -bMOhZMOhbsOt 125307 -IOyatOuPmQ== 125308 -INCY0YU= 125309 -6Ku+ 125310 -bMSxxJ/EsW7EsW4= 125311 -bGls 125312 -dcSN 125313 -INGH0LXQvNC/0ZbQvtC9 125314 -0YLQvtC2 125315 -IOS9mw== 125316 -0L3QuNGG0LU= 125317 -INC/0LXRgNCy0L7Qs9C+ 125318 -INGB0L7QvA== 125319 -z4fPjg== 125320 -xZlpaw== 125321 -0LjRgtC10LvRjNGB0YLQstCw 125322 -IMSwa2k= 125323 -IGFza2VyaQ== 125324 -Y2lzaQ== 125325 -IGplZG7DrW0= 125326 -IHN0YW5pY2U= 125327 -6IKh56Wo 125328 -4Lic4Lih 125329 -VOG7qw== 125330 -xaFhaw== 125331 -z4TOr86x 125332 -0LzQsNC80Lg= 125333 -44GM5Ye6 125334 -zrzOv86v 125335 -0LzQsNGU 125336 -66Cl7J20 125337 -44KE44Gj44Gm 125338 -IOW8tQ== 125339 -2IwK 125340 -IMK7Cg== 125341 -2KfYrNin2Ko= 125342 -4b2z 125343 -5pmC44Gu 125344 -INC/0L7QutC+0Ls= 125345 -0ZbRgtC10YI= 125346 -IO2VtOqysA== 125347 -IGRlZGlt 125348 -INGC0LLQtdGA0LQ= 125349 -INC20LXQvdGJ0LjQvdCw 125350 -0LXQtNC40L3QuA== 125351 -INm+24zaqQ== 125352 -aXZlcnNpdGU= 125353 -INii2LPbjNin2Kg= 125354 -INGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lg= 125355 -INij2YbZh9in 125356 -INGD0LrRgNCw0ZfQvdGB0YzQutC+0Zc= 125357 -INin2K7YqtmE2KfZgQ== 125358 -IHRleg== 125359 -z4HOtc+F 125360 -IGtvbnVtdQ== 125361 -INGC0LXRhdC90ZY= 125362 -0LzRltCy 125363 -6Iqv 125364 -IM+DzrXOuw== 125365 -xKI= 125366 -zrzOuc+D 125367 -4Li14LmJCg== 125368 -IG1uZQ== 125369 -INC+0YLQstC10Yc= 125370 -IM6J 125371 -IOmHjg== 125372 -IGfhuqVw 125373 -INC/0YDQvtC00YPQutGC0Ys= 125374 -INCh0YDQtdC0 125375 -0ZbQu9C70Y8= 125376 -4Lia4Lit4LiB 125377 -IHTFmcOtZHk= 125378 -IHRo4buV 125379 -44OH44Kj44Ki 125380 -z4DOv865zrc= 125381 -zr3Otc65 125382 -5oiR5Lus55qE 125383 -IHByb2Zlc3lvbmVs 125384 -IFJha291 125385 -INCy0LjQtNC90L4= 125386 -IHpieQ== 125387 -INit2KfZhNuM 125388 -IOmjnw== 125389 -IEzDoG0= 125390 -INqv2LPYqg== 125391 -INCi0LjQvw== 125392 -zrjOuQ== 125393 -w6F2aXM= 125394 -2ZDYqA== 125395 -5Y+v6IO95oCn 125396 -INGB0LXQvNC10Lk= 125397 -44KJ44KM44Gm44GE44KL 125398 -7IOB7ZKI 125399 -IM6/z4U= 125400 -IOCkheCkl+CkuA== 125401 -0L7Qu9C+0Lw= 125402 -zrPOv869 125403 -INGB0LLRj9GJ 125404 -5pOm 125405 -z4PPhM63zrrOtQ== 125406 -6ICF55qE 125407 -LeCklQ== 125408 -0YLQuNC4 125409 -INCy0LjQt9C90LDRh9C10L3QvdGP 125410 -5Y+R5Ye6 125411 -0LTQsNGF 125412 -INC80L7RgNGP 125413 -5om+5Yiw 125414 -2YTZiNio 125415 -6IqZ 125416 -INGE0LDQutGC 125417 -5q+N5Lqy 125418 -aWRsbw== 125419 -IFN0YWQ= 125420 -0Y3QuQ== 125421 -7JuQ7J20 125422 -4KSP4KSo 125423 -5pW05Liq 125424 -IGbEsWs= 125425 -INmF2KfYqg== 125426 -z4DOv869 125427 -IOqyveq4sOuPhA== 125428 -IM6xzrQ= 125429 -IHZ6cG9t 125430 -IG7hu5Np 125431 -INmG2YLYp9i3 125432 -0L7QttC00LXQvdC40LU= 125433 -INC30LDQu9GW0Lc= 125434 -IHLhu6dp 125435 -6L6w 125436 -LjouOi46LjouOi46LjouOi46LjouOi46LjouOi46Ljo= 125437 -IE3DnA== 125438 -IGthcmk= 125439 -INGB0L7QsdGL 125440 -7Ja07KeE 125441 -2LHZitiz 125442 -dWJ1 125443 -INiu2YTZgQ== 125444 -2LjZudi3 125445 -5p2J 125446 -IOaZrumAmg== 125447 -INmF2YjYp9i32YbYqQ== 125448 -INGB0YLQsNC90YM= 125449 -IOq3uOuFgOydmA== 125450 -INmE2YPYsdip 125451 -IG9zbQ== 125452 -INGD0YDQvtC2 125453 -0LXQs9Cw 125454 -IGZlbHNl 125455 -5oCd6ICD 125456 -44CM44GI 125457 -INC90L7QstC40YU= 125458 -4LmQ 125459 -w7xtbA== 125460 -IO2UvO2VtA== 125461 -7J2867CY 125462 -IHTDvHLDvA== 125463 -INC80ZbRgdGC0ZY= 125464 -IGthxb5kw6k= 125465 -INmF2LPYrNiv 125466 -4bqlYw== 125467 -INmB2qnbjA== 125468 -IHlhc2Fs 125469 -5bCx566X 125470 -INC+0LHQu9C40YfRh9GP 125471 -INmE2K/Zig== 125472 -2KfYqNin2Ko= 125473 -INGB0L/QsNGB 125474 -6rWw7JqU 125475 -INC/0LDQtA== 125476 -INCx0YDQsNGC 125477 -6YeN5aSn 125478 -IGTDvHplbmxlbmVu 125479 -R8O8bg== 125480 -IGFwbGlrYWNl 125481 -4Lit4Lir 125482 -IOeF 125483 -INGB0L7RgdGC0L7QuNGC 125484 -6K+E5Lu3 125485 -IER1eQ== 125486 -2LfYp9mC 125487 -INC/0YDQuNC00LXRgtGB0Y8= 125488 -IHRvbGlr 125489 -IG9icm92 125490 -IHDFmWlwb2o= 125491 -IMSxxZ/EsQ== 125492 -2q/ZiNuM 125493 -5pyf5b6F 125494 -0LjQv9C70L7QvA== 125495 -IGluY2U= 125496 -INCh0L7QsQ== 125497 -0LXQvdGM0Y4= 125498 -6KeS6Imy 125499 -IOC4leC4ow== 125500 -IGLhuqFp 125501 -IOqwgOuKpe2VnA== 125502 -IGJsw616aw== 125503 -IHTDoWNo 125504 -INCy0LjQtNGL 125505 -0LjRh9C90LA= 125506 -IHZ5xb5hZA== 125507 -IOyGkOydhA== 125508 -INCd0ZbQvNC10Yc= 125509 -5Z+65LqO 125510 -INCa0YDQuA== 125511 -INi52LLbjNiy 125512 -dGlsZXI= 125513 -0LXQstGW 125514 -IG1vxb5ub3N0aQ== 125515 -2KjYp9iy 125516 -IOyCrOunnQ== 125517 -IHrFmWVqbcSb 125518 -7Zek 125519 -IMO8csO8bmxlcmk= 125520 -IM6gzrvOtw== 125521 -0LDQutC4 125522 -44KS6ZaL 125523 -YW5vdQ== 125524 -5Zu944Gu 125525 -IHlhxZ9hbmFu 125526 -INGB0LXQstC10YA= 125527 -IOapnw== 125528 -4Lih4Liy4LiB4Lih4Liy4Lii 125529 -IO2RnO2YhA== 125530 -4Lij4Liq 125531 -INi22LHYqNmH 125532 -IEV2ZXQ= 125533 -5oa2 125534 -INiv2YLbjNmC 125535 -INCy0L7Qt9C90LjQutC90L7Qsg== 125536 -7Jyg66i4 125537 -IO2RnOyLnA== 125538 -24zYtNmG 125539 -44OX44Op 125540 -0YLRjg== 125541 -2YjYs9uM 125542 -KeydtA== 125543 -6K+B5piO 125544 -44Gn44GN44G+44GZ 125545 -7IiY7J2Y 125546 -55aG 125547 -INmF2YHZh9mI2YU= 125548 -0L7Rh9Cw0YLQutGD 125549 -4KS+4KSy4KSV 125550 -5qGC 125551 -INC+0YXQvtGA0L7QvdC4 125552 -INin2LHYstuM2KfYqNuM 125553 -IOy1nOuMgA== 125554 -IHRob+G6o2k= 125555 -INCm0LXQvdGC0YDQsNC70Yw= 125556 -IOeVmQ== 125557 -4Lib4Lij4Liw4LmA4Lig4LiX 125558 -5rW35aSW 125559 -IMWedQ== 125560 -7Zmc64+Z 125561 -IGR2xJttYQ== 125562 -aXN0cm92c3R2w60= 125563 -IGFyYWPEsWzEscSfxLF5bGE= 125564 -IHRy4buZbg== 125565 -wrs6 125566 -7Yux 125567 -INmE24zarw== 125568 -LtCa 125569 -INmF2YLYp9uM2LPZhw== 125570 -INCy0LzRlg== 125571 -2LHZiNio 125572 -INin2YTYtNmF 125573 -IGRlbm7Emw== 125574 -0YPRh9Cw 125575 -5YW5 125576 -0YnQuNC8 125577 -IO2Kue2eiA== 125578 -INin2LPYqtin2YbYr9in2LHYrw== 125579 -4KWA4KSn 125580 -44K444Ki 125581 -4LmH4LmH 125582 -0LjRgdGB 125583 -IGthemFuw6c= 125584 -IHrDrXNrYWw= 125585 -5Zue5p2l 125586 -INC/0Y/RgtGM 125587 -IMSRw6Np 125588 -INmI2LHYrw== 125589 -IOyVlQ== 125590 -4Li44LiX4Lij 125591 -5Yqo54mp 125592 -IHB1Ymxpaw== 125593 -5oiQ5pys 125594 -5oiQ5ZGY 125595 -44Kk44Kv 125596 -2LTYsdmD2Kk= 125597 -4b+Gz4I= 125598 -IHlvbGE= 125599 -w7x5b3J1eg== 125600 -INC60YPRgNC4 125601 -INC/0L7RhdC+0LY= 125602 -IOygnOqwgA== 125603 -4KS/4KSv4KSk 125604 -2KfYptmE2Kk= 125605 -IOOBvg== 125606 -4KS84KWH4KSC 125607 -0YHRjNC60LjQvNC4 125608 -4oCc5L2g 125609 -aW1pemRl 125610 -7LWc7Iug 125611 -4bqs 125612 -6J8= 125613 -4LiE4Lij4Lit4Lia 125614 -44CA44CA44CAIOOAgCDjgIAg44CA 125615 -2KrYug== 125616 -IFbFoWVjaA== 125617 -4Lix4Lib4LiU4Liy4Lir 125618 -IGF0ZA== 125619 -0LLQvtGO 125620 -IHlhcMSxbQ== 125621 -b2xvZ2lja8Op 125622 -INC/0LvQtdC9 125623 -IGxhesSxbQ== 125624 -cnVuZw== 125625 -7ISc6rSA 125626 -IGppbsO9 125627 -IHRyw7Ju 125628 -INC/0L7Qu9GW0YLQuNC60Lg= 125629 -2KfZg9mF 125630 -2K/bjNqv2LE= 125631 -4KWI4KSCLgo= 125632 -INin2YfYrw== 125633 -IOODjQ== 125634 -INC/0YDQvtC00YPQutGC0L7Qsg== 125635 -5oKf 125636 -IHDFmcOtcGFkZWNo 125637 -IHphxI1hbGE= 125638 -5YWl44KM 125639 -INGA0ZbQstC90ZY= 125640 -5oSf5oOF 125641 -IM6nzrE= 125642 -7KO9 125643 -4Li04LiI4Liy4Lij4LiT 125644 -wqDQsQ== 125645 -0ZbRl9Cy 125646 -2KjYtA== 125647 -55qE6Zeu6aKY 125648 -IHphc3R1cA== 125649 -66Ck7JqU 125650 -44Gn44GZ44Gt 125651 -4oCM2K/Yp9mG 125652 -77yM5oKo 125653 -IHV2xJtkb20= 125654 -44Gm44KL 125655 -7IKs656M 125656 -bHVu 125657 -6ZuG5ZCI 125658 -66e5 125659 -IMW+aWQ= 125660 -4KSK 125661 -IHRycA== 125662 -0LvQtdC90LjRhQ== 125663 -77y/X18= 125664 -0JzQng== 125665 -5byL 125666 -zrvOrc6/zr0= 125667 -IMSRw7Jp 125668 -INC60YDQvtC6 125669 -bGF5xLFjxLE= 125670 -7Lac7J6l66eI7IKs7KeA 125671 -5ZGI 125672 -6Zye 125673 -INC/0L7Qs9C70Y/QtA== 125674 -2KrYsdmD 125675 -INiq2YHYp9mI2Ko= 125676 -IOWurg== 125677 -INiv2YjYsdio24zZhg== 125678 -5pS+5Zyo 125679 -INGB0LvRg9GH0LDQtdCy 125680 -IM+Fz4DOt8+BzrU= 125681 -66ee 125682 -44GZ44GZ 125683 -6rKg64uk 125684 -4Lij4Liy4Lii4LiB4Liy4Lij 125685 -IM+Az4HOuc69 125686 -INGB0LzQtdGI 125687 -5aeJ 125688 -IHbDvXNsZWRreQ== 125689 -IHBvdHZy 125690 -5Y+R6KGM 125691 -IHTDumk= 125692 -IOyCrOudvA== 125693 -56uZ5Zyo 125694 -IGpha8O9 125695 -IOC4muC4suC4hw== 125696 -IGRpa2thdGU= 125697 -INiv2LHYotmF2K8= 125698 -5o6S5ZCN 125699 -csOhbG7DrQ== 125700 -6rO87J2Y 125701 -5L21 125702 -0L7Qu9Cw0LM= 125703 -aXNpeWxl 125704 -IOa9 125705 -IOCkpOCkrg== 125706 -IGRpag== 125707 -IG5ow6FuaA== 125708 -IFJlaw== 125709 -6K6+5pa9 125710 -IHBvZG3DrW5law== 125711 -5bm25LiN 125712 -0LrRg9GC 125713 -IOqzoOugpA== 125714 -55qE5aOw6Z+z 125715 -5oiY5LqJ 125716 -0LTQsNGP 125717 -IOq0gOyLrA== 125718 -INGE0ZbQvdCw0L3RgQ== 125719 -IEvDtnk= 125720 -INC20LDQuw== 125721 -INGB0LvRg9C20LHQuA== 125722 -0LzQtdC90LA= 125723 -2KrZitin2LE= 125724 -INGH0LXQvNC/0LjQvtC9 125725 -z4DOuc+D 125726 -bGFuZMSxcm1h 125727 -bWFrdGFu 125728 -IOS4tg== 125729 -4LmI4Lit4Liq 125730 -IG3DvMWfdGVyaQ== 125731 -INi12YbYrw== 125732 -IGV0bWVzaQ== 125733 -INC/0L7RgNGC 125734 -zr3Ov869z4TOsc65 125735 -IOOFi+OFiw== 125736 -IEtBUg== 125737 -IHVjaA== 125738 -INiu2YTZgg== 125739 -4Liy4Lip4LiO4Lij 125740 -5q2h 125741 -INC40LzQtdC90Lg= 125742 -44Gg44GR44Gp 125743 -IOyLpOyLnA== 125744 -z4PPic+A 125745 -IOyj 125746 -dMSbxb4= 125747 -IMO2emVsbGlrbGVyaQ== 125748 -INio2b4= 125749 -INC40LfQvtCx0YDQsNC2 125750 -2YrZhdmD2YY= 125751 -IOODlA== 125752 -INCU0LjQsg== 125753 -INil2Yo= 125754 -2YPZitmE 125755 -IMWfaWs= 125756 -IOCkhuCklg== 125757 -bGFyxLFuxLF6xLE= 125758 -INCy0ZbQtNGA0ZbQtw== 125759 -INGA0L7QsdC+0YLQsA== 125760 -IHRhcmlm 125761 -INin2YjYqg== 125762 -xLFubWE= 125763 -6aOf44G5 125764 -IHV6YXbFmQ== 125765 -66O4 125766 -55uR552j 125767 -IDrvvLw= 125768 -zrjPhc69 125769 -4LiU4Lij 125770 -YWxhcsSxbmRhbg== 125771 -6Ieq5ouN 125772 -IHJvxI1uw60= 125773 -4KS+4KSH4KS1 125774 -INmD2YjYsQ== 125775 -IM+EzrHOuc69 125776 -INGW0L3QtNC40LI= 125777 -cnZl 125778 -IM69zrXPhs+Oz4POtc65z4I= 125779 -IGLhu5Fu 125780 -IOW/qw== 125781 -INGB0L7Qu9GM 125782 -bGnEn2luZGU= 125783 -4KS/4KSo4KSf 125784 -YWh0YXI= 125785 -IG5lYmV6cGXEjQ== 125786 -5pei54S2 125787 -IOuMgOyghA== 125788 -INmG2q/Zh9iv2KfYsduM 125789 -IHrDrXNrYXQ= 125790 -INC90LDQu9C40YfQuNC1 125791 -IGFrcw== 125792 -77yJ44CCCgo= 125793 -IHJvZGlueQ== 125794 -INC30LDRhdGW0LQ= 125795 -5b6u56yR 125796 -wqDQlNCw 125797 -cmFkdQ== 125798 -iW5o 125799 -cGxlcw== 125800 -IEtvbnM= 125801 -4Li04LmC4Lil 125802 -INin2YTZiNi1 125803 -5ZCs5Yiw 125804 -INGB0L/QvtGA0YLQuNCy 125805 -INGB0LDQudGC0LU= 125806 -INin2Lg= 125807 -bGFyxLFuZGFraQ== 125808 -IHThu5Vu 125809 -0J3Qhg== 125810 -IG5lZG9zdA== 125811 -INGC0L7RgNCz0ZbQsg== 125812 -INin24zYqg== 125813 -INin2K7Yqti12KfYtQ== 125814 -IMOceQ== 125815 -IFNhZGVjZQ== 125816 -INmF2K7YsdmI2Lc= 125817 -xIFu 125818 -w6dlc2k= 125819 -IOeK 125820 -44KC44Gj44Go 125821 -IOmfkw== 125822 -6LWW 125823 -INC/0L7Qu9GD0YfQtdC90LjRjw== 125824 -IOuY 125825 -4oCZ0Zc= 125826 -YsOtcg== 125827 -INCx0ZbQsdC70ZY= 125828 -IEThu7E= 125829 -0LbQtdC90LXRgA== 125830 -572R5YiK 125831 -IOCksuClnOCklQ== 125832 -INGD0YfQvdGW0LI= 125833 -6Iiw 125834 -IMOWxJ9yZW4= 125835 -IG9sYQ== 125836 -IOClpOKAnQoK 125837 -4Lij4Liw4LmA4Lia 125838 -4b2y 125839 -INix2LI= 125840 -0LXQuA== 125841 -0Y/Rh9C4 125842 -2K3YqA== 125843 -5pKk 125844 -44G+44Gf44Gv 125845 -0LHQuNC90LA= 125846 -IM6gzrXPgQ== 125847 -INC+0YLQvdC+0YHQuNGC0YHRjw== 125848 -5YmN55qE 125849 -IMWhxaU= 125850 -IHnEsWxkYQ== 125851 -Ojo6Ojp8 125852 -dXN0aWw= 125853 -2KfZhNil 125854 -IHNvdcSNYXNuw6k= 125855 -INmG24zYsdmI24w= 125856 -0YfQtdGB0LrQvtC1 125857 -2LjZgQ== 125858 -INm+24zYtNuM2YbZhw== 125859 -INi52YHYtA== 125860 -IHJvc3RsaW4= 125861 -572R5YiK5LiL6L295qyh5pWw 125862 -INC/0YDQuNCz0L7RgtC+0LLQuNGC0Yw= 125863 -44OM 125864 -INmI2YXYuQ== 125865 -IGJlY2Vy 125866 -IOOCsQ== 125867 -z4fOrs+C 125868 -0L7RgdGC0YPQvw== 125869 -IOuwnOunpA== 125870 -0ZbQudC90L7Qs9C+ 125871 -IGhyZA== 125872 -INC/0YDQtdC/0LDRgNCw0YLRiw== 125873 -INmB2LHYtg== 125874 -IFR5dG8= 125875 -INC60YDQsNGX0L0= 125876 -INiy2KfYrw== 125877 -IGlrdGlkYXI= 125878 -7KeT 125879 -2ZHYsQ== 125880 -0YDRj9C00YM= 125881 -0LrRltC5 125882 -4pSj 125883 -INC60L7QttC4 125884 -INiq2KfYstmH 125885 -b2JlYw== 125886 -aW5hZQ== 125887 -IHZ5asOhZA== 125888 -INix2YHYqtmH 125889 -0KnQvg== 125890 -IEJ5bG8= 125891 -0L7RgtCy 125892 -INC00LXQvdGM0LPQuA== 125893 -6aeG 125894 -INC80LDRiNC40L0= 125895 -INij2Kw= 125896 -7LSI65Ox7ZWZ6rWQ 125897 -ZMSxxJ/EsW5kYQ== 125898 -0LHQsNGB 125899 -IOaguQ== 125900 -zpHOnc6k 125901 -2ZLYrQ== 125902 -IGplamljaMW+ 125903 -7JeQ7ISc7J2Y 125904 -INCw0LTQttC1 125905 -IOyP 125906 -z4POv8+F 125907 -ZXRsZXJp 125908 -INio2LnYr9uM 125909 -IOyekOuPmeywqA== 125910 -4Li04LiN4LiN 125911 -IHRpc2s= 125912 -44O844K544OI 125913 -IOCkruCkpOCksuCkrA== 125914 -6rOE7ZqN 125915 -44Km44OI 125916 -IOC5gOC4oeC4leC4ow== 125917 -IG9wc2l5b24= 125918 -INGA0LDQstC90L4= 125919 -INio24zZhdmH 125920 -IOuovOyggA== 125921 -0LjRgtC10LvRjNC90YvQvA== 125922 -INC90ZbQsdC4 125923 -INC00LXRgdGP0YI= 125924 -INGB0LjRgtGD0LDRhtC40Lg= 125925 -0LXRgNGI0LU= 125926 -xL4= 125927 -4Li44LiV4Lij 125928 -IHnDtm5ldGltaQ== 125929 -6ZCY 125930 -INmF24zYqtmI2KfZhg== 125931 -INiy2YbYr9mH 125932 -44Ot44Oz 125933 -IEtCUw== 125934 -7ISc67mE7Iqk 125935 -77ug 125936 -ZWNrw6lobw== 125937 -INmC2KfYqNmE24zYqg== 125938 -44CC5LuK 125939 -w61uxJs= 125940 -INGB0LzQvtCz 125941 -INGB0LvRi9GI 125942 -2ZLZgQ== 125943 -cG/FmcOhZA== 125944 -0LXQu9GM0L3Qvg== 125945 -IM61zq/Ph86xzr0= 125946 -LdCf0LXRgtC10YDQsQ== 125947 -IENoaeG6v24= 125948 -w6lyeQ== 125949 -INGW0L3RgdGC0LjRgtGD0YI= 125950 -57uG6IOe 125951 -0YvRn04= 125952 -IHZ1YQ== 125953 -IOCkheCktg== 125954 -0YDQvtGB0YLQvg== 125955 -IHbFr8SNaQ== 125956 -67+Q 125957 -IGxp4buHdA== 125958 -IO2VtQ== 125959 -INin2YHYsQ== 125960 -IFRla25paw== 125961 -IHJvbGk= 125962 -INC/0L7Qv9GL0YI= 125963 -0LDRgtC60ZbQsg== 125964 -IMO8bml2ZXJzaXQ= 125965 -0LDRgtC+0YDRiw== 125966 -0Y7RidC40YXRgdGP 125967 -INiq2LY= 125968 -0LvRjtGH0LDQtdGC0YHRjw== 125969 -IO2WieuztQ== 125970 -IGF5csSxbnTEsWzEsQ== 125971 -INC60LjRgNC/ 125972 -5ou8 125973 -64GU 125974 -0LvQsNGC0LA= 125975 -IGtob8Ohbg== 125976 -IGjDomzDog== 125977 -z4PPhQ== 125978 -0L7Qs9C70LDRgQ== 125979 -5o6l552A 125980 -6Z2p5ZG9 125981 -IHDFmWVi 125982 -4LmA4LiJ4Lil 125983 -INin2YTZhdmE2YTbjA== 125984 -5aCG 125985 -7Y+Q 125986 -4LiV4Lil4Lit4LiU 125987 -wrDQoQ== 125988 -7IKs656R 125989 -INCz0LjQsQ== 125990 -67KI7Ke4 125991 -5pS55Y+Y 125992 -6KGo546w 125993 -0LjRh9C10YHQutC40Lw= 125994 -4Liq4Lih4LmA4LiU 125995 -5bGF5rCR 125996 -wps= 125997 -IOyVhOydtOuUlA== 125998 -INC80LXQttC00YPQvdCw0YDQvtC0 125999 -IHllbQ== 126000 -IG3DvGw= 126001 -INin24zYs9iq 126002 -IOODtA== 126003 -4Lix4LiZ4LmE4LiU 126004 -4KWA4KSj 126005 -5YW25a6e 126006 -IGdlbGVuZWs= 126007 -67aB64+E 126008 -4LmJ4Liy4LiV 126009 -IOyJrA== 126010 -IM+Azq0= 126011 -INmD2KfZhdmE 126012 -INiq2LnZhduM2LE= 126013 -6Ki0 126014 -67mZ 126015 -aXlpbQ== 126016 -5bC/ 126017 -6YKj5qC3 126018 -6rWt7J2Y 126019 -44GX44Gm44GK44KK 126020 -IG5pxb4= 126021 -IM66zr/OvQ== 126022 -4LmI4Liy4Lit 126023 -IM6zzrU= 126024 -INCh0LXQstC10YA= 126025 -ZWRpw6FsbsOt 126026 -44Gf44Gh44Gu 126027 -bWF5YWNhaw== 126028 -0Zk= 126029 -INGD0LPQuw== 126030 -IGthcGFz 126031 -0YPQstCw0LvQuNGB0Y8= 126032 -INC80LXRgdGP0YbQsA== 126033 -4buvdQ== 126034 -4Li04Lil4Lil 126035 -44KI44KK44KC 126036 -4KWH4KSj 126037 -IOWuog== 126038 -IGRlxJ9lcmxp 126039 -2YjYp9iy 126040 -4Li14Lit4Lii 126041 -IOWPiA== 126042 -IOC4lOC4ow== 126043 -INmG2KfYqA== 126044 -INiq2YTZiNuM2LLbjNmI2YY= 126045 -IG9sYW5sYXI= 126046 -5LyY56eA 126047 -2YPYp9mE 126048 -INC00LXRgdGP0YLQuA== 126049 -bcOhbg== 126050 -INGA0LDQvdGM 126051 -IOygnOy2nA== 126052 -6LOi 126053 -0LDQsdC+ 126054 -IHRlY2huaWs= 126055 -IEtp4buDbQ== 126056 -dGVraQ== 126057 -4bk= 126058 -IG1uxJs= 126059 -IOqzteqwhA== 126060 -IE1law== 126061 -INin2LnYqtmF2KfYrw== 126062 -4LmM4LmE4LiU 126063 -zrXPgc+M 126064 -INGD0LTQsNGA 126065 -0L7Rh9GM 126066 -5qaC5b+1 126067 -0YDQsNC7 126068 -0LDQu9GM0L3Ri9C80Lg= 126069 -4KWB4KSw4KS4 126070 -csOhY2k= 126071 -INmC2YjZhA== 126072 -IOCkpuCktQ== 126073 -INC/0YDQsNCy0LTQsA== 126074 -IOW/hQ== 126075 -IGRvc3Vk 126076 -0L3Rg9GC0YzRgdGP 126077 -TsSDbQ== 126078 -4LiY4LiZ 126079 -IGRva3Vu 126080 -IOWcqOe6vw== 126081 -4Li54LmE 126082 -4buleQ== 126083 -INC90L7QstGL0YU= 126084 -IG1lenVu 126085 -IEPhuqdu 126086 -4LiB4Liy4Lij4Lie 126087 -IOyYiOyglQ== 126088 -z4POrg== 126089 -4LmI4LiZ4LmA4LiB4Lih 126090 -INmI2KfZhNiz 126091 -44Oz44OG44Kj 126092 -55yL6KeB 126093 -INiz2KfZhNmF 126094 -INCx0LDQs9Cw0YLRjNC+0YU= 126095 -IMSRw6Bp 126096 -INiv2LPYqtuM 126097 -4Lie4Lit 126098 -0LXQv9GC0Lg= 126099 -IOyghO2ZlA== 126100 -5pmC44Gr 126101 -IFNlem5hbQ== 126102 -0LzRltC90YM= 126103 -Oz8j 126104 -4KWA4KS44KSw 126105 -INqG24zYs9iq 126106 -zr3Ov865zrE= 126107 -4Lix4LiZ4Lit 126108 -IOC4hOC4sw== 126109 -IOuztO2YuA== 126110 -IGlkZGlh 126111 -IM6yzrnOsg== 126112 -6auY5Lit 126113 -2ag= 126114 -0JLQsNC2 126115 -INC40YHQv9C+0LvQvQ== 126116 -0YjRgtC+0LI= 126117 -IFRhxZ8= 126118 -7JuF 126119 -5Yq5 126120 -IOWPgw== 126121 -IHByb3N0b3J1 126122 -INGB0L/QsNC0 126123 -0LXRgNC40L3QsA== 126124 -IHDFmWVrbGFk 126125 -xaFvdg== 126126 -INmB2YfZhQ== 126127 -5oqR 126128 -INin2KjYqtiv2Kc= 126129 -44KS44GK 126130 -bGlrbGVy 126131 -INmF2KfZgw== 126132 -IGtvbnV0 126133 -INiv2KfZhti02KzZiNuM 126134 -INC+0L/RgtC40Lw= 126135 -INCx0YPQvNCw 126136 -INC70Y7QtNGP0Lw= 126137 -INC70ZbQutCw 126138 -INGA0L7Qt9C/0L7QstGW0LQ= 126139 -bmVzZW7DrQ== 126140 -IOC4oOC4suC4ng== 126141 -0LjRh9C90LjQuQ== 126142 -2KfYt9mE 126143 -0Y7RidC40LzQuA== 126144 -44GP44Go 126145 -6a2v 126146 -INis2YbYs9uM 126147 -0JjQog== 126148 -4KSw4KSy 126149 -INqp2YjYr9qp 126150 -0L7Qu9C40YI= 126151 -INGB0YLRgNGD0LrRgtGD0YA= 126152 -dmVraWxp 126153 -IOCkrOCkrw== 126154 -IGdlbG1pxZ8= 126155 -4KS/4KSw4KSr 126156 -INC90LDQudC60YDQsA== 126157 -INCU0LbQvtC9 126158 -IOODl+ODrQ== 126159 -IHlhxZ9sxLE= 126160 -IGthcsSxxZ90xLFy 126161 -IHbEm3TFoWlub3U= 126162 -IHZhemdlw6c= 126163 -4LmJ4Liy4LiE 126164 -bGVuZGlybWU= 126165 -IOeoiw== 126166 -6K+06K+d 126167 -IO2VhOyalO2VnA== 126168 -YcWZaWxv 126169 -IGxlxb7DrQ== 126170 -IEFtZXJpa2Fu 126171 -44KE44GZ 126172 -dmFqw61jw60= 126173 -0J3Qrw== 126174 -IOyXhOuniA== 126175 -IOWD 126176 -csOhbA== 126177 -IMOnYXk= 126178 -dHXEnw== 126179 -4Li44LiN4Liy4LiV 126180 -INGB0LvQuNCy 126181 -zr3Ov8+F 126182 -IE92 126183 -IENIUA== 126184 -IFplbcSb 126185 -IMSNZXNrw70= 126186 -IFRow6FuaA== 126187 -0LjRgtC10LvRjNC90L7RgdGC0Yw= 126188 -5oSP5LmJ 126189 -4KWN4KSw4KSu4KSj 126190 -INC00LjQsNC80LXRgg== 126191 -IGtsaW4= 126192 -INqp2LHbjA== 126193 -44Gn44Gv44Gq44GP 126194 -6aOv5bqX 126195 -IGvDqm5o 126196 -INGA0LDQvdGM0YjQtQ== 126197 -44KS44GX44Gf 126198 -INC/0YDQuNCx0L7RgA== 126199 -IOCkluCkpOCksA== 126200 -IHl1 126201 -6aeQ 126202 -INGA0LDQsdC+ 126203 -INCh0KDQodCg 126204 -6Iqs 126205 -xb5pbGE= 126206 -0LXRgNGC0LA= 126207 -0LjRgdGC0YDQsA== 126208 -INC60L3QuNCz0Lg= 126209 -IEZyYW5jaWU= 126210 -INqY2KfZvg== 126211 -IM6azr/PhQ== 126212 -4Lix4Lin4LmA4Lit4LiH 126213 -IGzhuq9uZw== 126214 -INC90LDQvNC4 126215 -INC/0L7QtNC+0Lk= 126216 -0LTRgNC+0Lw= 126217 -b2J1cw== 126218 -0JLRltC9 126219 -IHN0YWxv 126220 -IOCkj+CknA== 126221 -IExpbmg= 126222 -ZWJpbGlyaXo= 126223 -INC30LDQstGC0YDQsA== 126224 -zrzOtc+Bzr8= 126225 -IM6tzr0= 126226 -0Y/RgtC90L4= 126227 -INC00L7RgNC+0LY= 126228 -5Y+C54Wn 126229 -z4POuc6/ 126230 -4LmJ4LmA4LiB 126231 -YW7DvWNo 126232 -57eg 126233 -IOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgOOAgA== 126234 -5Yqb55qE 126235 -IFPEsXI= 126236 -IOyngOuPhA== 126237 -57eK 126238 -IHBvxI10dQ== 126239 -77yM5LiO 126240 -5LiW57SA 126241 -0LXQvNC+0LPQvg== 126242 -IGh1c3Vz 126243 -IMO2bMOnw7xkZQ== 126244 -IHRy4bulYw== 126245 -4Lib4Lil4Lit4LiU4Lig 126246 -wqBwxZnDrQ== 126247 -IELDtmxnZXNp 126248 -0LzQvtC8 126249 -44Gr44Gm 126250 -IOyqveyngA== 126251 -xJt0xaE= 126252 -IOyEseqztQ== 126253 -4KSw4KSk 126254 -dXJkdQ== 126255 -IOybgOyngQ== 126256 -0Z/QrQ== 126257 -bsOta2Vt 126258 -IHNrdXRlxI1ub3N0aQ== 126259 -INC00LDRgg== 126260 -bmV1bQ== 126261 -INGC0LDQsdC70LXRgg== 126262 -anZ1 126263 -IHNlZG0= 126264 -2LPZitip 126265 -INC60L7RgNC+0LE= 126266 -ZW1tZWw= 126267 -44Gk44GR 126268 -6aaZ6JWJ 126269 -INi02K7YtduM2Ko= 126270 -5LiK5LqG 126271 -2YjYsdin 126272 -INCw0YLQvNC+0YE= 126273 -INC70LXQuQ== 126274 -IHpwcmF2 126275 -IOuVhQ== 126276 -4Li54LiX 126277 -INin2LPYsQ== 126278 -IEF5ZMSxbg== 126279 -INi52YXZhNmK2Kk= 126280 -INC00ZbRlA== 126281 -IGTDtms= 126282 -IOCkq+Cksg== 126283 -IOyCrOuejOuTpOydtA== 126284 -INC90LDRgtGD0YDQsNC70Yw= 126285 -5p+c 126286 -5rip5bqm 126287 -IGtsZXM= 126288 -INC40L3QstC10YHRgtC4 126289 -c8O8eg== 126290 -5pKw 126291 -IOOCouODqw== 126292 -IOiS 126293 -0LDQtNC60Lg= 126294 -IGtsw63EjQ== 126295 -z4fOtc6v 126296 -IFRoaeG6v3Q= 126297 -INiz2LHbjNi5 126298 -IM+AzrXPgc65zr/Ph86u 126299 -2YjZgtmB 126300 -z4HPic+Dzrc= 126301 -INiz2YTYp9mF2Ko= 126302 -65Ok64+E 126303 -IHZlxZllam7DqQ== 126304 -IHZpdGFt 126305 -INio2KfYstuM2q/YsQ== 126306 -INGA0LXRhtC10L/Rgg== 126307 -IOychO2VtOyEnA== 126308 -INij2YPYqNix 126309 -IGvDvHQ= 126310 -66+87KO8 126311 -IHTDqcW+ 126312 -IOW8lQ== 126313 -0YfQsNGB0L3Qvg== 126314 -55qE5Zyw 126315 -IGFyY2hpdGVrdA== 126316 -INCx0LDQutGC0LXRgA== 126317 -IOOBjQ== 126318 -INC+0LTQtdGA0LY= 126319 -INiq2KzYp9ix24w= 126320 -6Z2I 126321 -IHJlY2Vw 126322 -6am2 126323 -INiv2YfZhw== 126324 -6LKM 126325 -57WQ5ama 126326 -xLFsxLHDpw== 126327 -44GL44KJ44Gv 126328 -5b+D6YeM 126329 -5oqV6LOH 126330 -6LKd 126331 -INC60YPQu9GM0YLRg9GA0Ys= 126332 -IOWwkQ== 126333 -4LmB4Lie4Lij 126334 -zrPOus+M 126335 -YXLEsW0= 126336 -INin2LPYp9iz24w= 126337 -IHBvc2xlZG7DrWNo 126338 -INmF2YXZhg== 126339 -INC/0L7Qt9C40YLQuNCy 126340 -7KCk 126341 -0YPQstCw0LLRgdGP 126342 -INis2LLYpg== 126343 -7J207J6Q 126344 -INC40L3RgdGC0YDRg9C6 126345 -IM63zrvOtc66 126346 -IGRlbWly 126347 -5Lit5paH5a2X5bmV 126348 -INi52KfYtNmC 126349 -INio2KfZhNmC 126350 -IG1heg== 126351 -zqzOvc65 126352 -IGTDvMSf 126353 -IM66z4HOsQ== 126354 -INCx0YPQtNGC0L4= 126355 -56aP5Yip 126356 -INC/0YDQtdC00L3QsNC30L3QsNGH 126357 -2YXZhNip 126358 -INCx0YPQtNC40L3QutGD 126359 -xaVhbg== 126360 -7ZWA 126361 -57S55LuL 126362 -2qnYsg== 126363 -INC60LDRhNC10LQ= 126364 -44Gr6KaL 126365 -4Liy4LiV4Lij4LiQ4Liy4LiZ 126366 -66Gc64qU 126367 -aXbEmw== 126368 -6IO95rqQ 126369 -77yM5YWo 126370 -INGD0LTQuNCy 126371 -IOunjOuCmA== 126372 -0JLQkA== 126373 -IEfDvHI= 126374 -INC00YDRg9Cz0LjQvA== 126375 -z4PPjQ== 126376 -IG/En2x1 126377 -IOqwgOq5jA== 126378 -INC30L3QsNGH0LjRgtC10LvRjNC90L4= 126379 -0L7Qt9GW 126380 -IG3hu7Fj 126381 -IEJlxZ8= 126382 -IGplemQ= 126383 -w6F2xJs= 126384 -z4TOt8+DzrU= 126385 -44Gm44GE44Gq44GE 126386 -INCh0LLRj9GC 126387 -IOCkruCktg== 126388 -IM6kzr/PhQ== 126389 -5aOw44KS 126390 -INGB0LDQvNC+0LU= 126391 -IOWMug== 126392 -IOyCrOuejOydgA== 126393 -INmF2YTYqg== 126394 -IGpva2Vy 126395 -IG5lb2I= 126396 -INGC0LDQutCw 126397 -INmH2YHYqg== 126398 -IM60zrXOtM6/ 126399 -INC30LDRhdC+0L8= 126400 -INin2YTZhdiu2Ko= 126401 -0LXQt9C00LA= 126402 -IO2VnOuyiA== 126403 -INi52KfZhdip 126404 -IGRvc3RhdGU= 126405 -IHBsYXY= 126406 -5qW944GX 126407 -LjsuOy47Ljs= 126408 -0LLQsNGU 126409 -IGLhu6Vp 126410 -IMSR4buh 126411 -IG15c2zDrQ== 126412 -INmG2KfYsQ== 126413 -IG7DunQ= 126414 -INC80LDQu9Cw 126415 -zqTOoQ== 126416 -INin2YTYsdmF2LLZitip 126417 -bGFkxLFt 126418 -5LiA57eS 126419 -IGnFn8On 126420 -bGl2w6k= 126421 -66W06rKM 126422 -0LDQvdC90LDRjw== 126423 -2LjLhti3 126424 -IGThu6tuZw== 126425 -2YTZg9iq2LE= 126426 -562U5qGI 126427 -INmF2YjZgti524zYqg== 126428 -INGW0L3QvtC30LXQvA== 126429 -INC40YHRhw== 126430 -INC90LXQv9GA0LDQstC40LvRjA== 126431 -YmFrYW4= 126432 -IOeJiA== 126433 -0LXQvdC90Y4= 126434 -4LiH4LmA4Lio 126435 -4LiE4Lin4Liy4Lih4LiE 126436 -JS4K 126437 -4LmI4LmA4Lib 126438 -INii2KjbjA== 126439 -IHN0w6F0eQ== 126440 -INiq2LHYqtuM2Kg= 126441 -xI1lbcW+ 126442 -IOm5 126443 -INmB2KfZhA== 126444 -IGJlbGlybGVu 126445 -IOKGmA== 126446 -6Iez5bCR 126447 -IEJ1bmxhcg== 126448 -IOS4kw== 126449 -INmF2K3Yp9iz 126450 -IOyEnOuyhA== 126451 -IGNhbmg= 126452 -INC/0YDQvtGC0Y/Qtg== 126453 -INC90ZbQvNC10YbRjA== 126454 -4KWI4KSg4KSV 126455 -64uJ 126456 -INC90LDQvdC10YE= 126457 -INCy0L7Qt9GA0LDRgdGC0LA= 126458 -IFvigKZdCg== 126459 -LuC4ng== 126460 -4Li04Lio4Liy4Liq4LiV4Lij 126461 -54G9 126462 -6rCZ7J2A 126463 -4Lil4LiH4LiX 126464 -44Kx44O844K5 126465 -IOOCouOCpA== 126466 -0YHRjg== 126467 -INmE2LE= 126468 -44GL44Gj44Gm 126469 -IOq4sOuwmA== 126470 -ICE6 126471 -INGB0Yo= 126472 -INi02YbYp9iz24w= 126473 -IOyVhOy5qA== 126474 -INi52KjYp9iz 126475 -IOC4leC4reC4mQ== 126476 -INC80LXRgtCw0LvQu9C4 126477 -0YjQuNC70LA= 126478 -IHBvZHJvYg== 126479 -0ZbRgdC90L4= 126480 -IOi1pA== 126481 -Y2lsZXI= 126482 -b3plbQ== 126483 -INC+0YHQvdC+0LLQvdGL0YU= 126484 -wqDgpJU= 126485 -4LiW4LiZ4LiZ 126486 -0LDQvdGC0LDQtg== 126487 -IETDrWt5 126488 -INqv2LDYp9ix24w= 126489 -5py65Lya 126490 -zr/Phc67zq/Ov8+F 126491 -0L7Rh9C10Lo= 126492 -INC90LDQv9C40YI= 126493 -INio24zYtNiq2LHbjA== 126494 -5L6N 126495 -INin2YTZhdmF 126496 -2YjYstmK2Lk= 126497 -IGfDtnpsZW0= 126498 -6LCD5pW0 126499 -wqBtaWxlcw== 126500 -IGtvYw== 126501 -4Lix4LiN4Lir 126502 -5rOz 126503 -IM6RzrPOsw== 126504 -INmG2YXYp9iy 126505 -4Li44LiX 126506 -44OP44Kk 126507 -IHRow7k= 126508 -0LrRg9C70Y8= 126509 -INC/0YPRgtC10Lw= 126510 -6Ie654Gj 126511 -IHZlcmdp 126512 -5aC05ZCI44Gv 126513 -INGC0YDRjNC+0YU= 126514 -IOuztOuptA== 126515 -4pay 126516 -z4XOsw== 126517 -INC00L7RgtGA0LjQvA== 126518 -5py1 126519 -IHVtxJtuw60= 126520 -6Imv44GE 126521 -wqDguJnguLLguIc= 126522 -0I7Ri9GfTg== 126523 -5LiJ5Liq 126524 -4Li14Lii4Lij4LiV 126525 -77yM5ZCM5pe2 126526 -INGA0L7Qt9GA0LDRhdGD0L0= 126527 -IERlcnM= 126528 -44Gq44Gu 126529 -IOq3uOulvA== 126530 -ZGlrbGVyaQ== 126531 -IGhheWF0YQ== 126532 -6KeE6IyD 126533 -57uT5ZCI 126534 -IHNjw6k= 126535 -IGPGoW0= 126536 -5a246Zmi 126537 -INCE0LI= 126538 -IMSNbMOhbmVr 126539 -INC00L7RgdGC0LjQsw== 126540 -4KS+4KSH4KS4 126541 -zrXPhc+Dzrc= 126542 -6YGp55So 126543 -z4POv869 126544 -xLFsbWFrdGFkxLFy 126545 -66qF7J2E 126546 -xLFi 126547 -IHN0YXLFocOt 126548 -IGNow61u 126549 -5LiA5Liq5Lq6 126550 -IEZyYW50acWhZWs= 126551 -bsSbamk= 126552 -77uo 126553 -INmE2YTYrw== 126554 -IHBva29q 126555 -IGppaA== 126556 -44CN44CC 126557 -INi52KjYr9in2YQ= 126558 -44KT44Gn44GE44KL 126559 -INC80L7QtNC10LvRjA== 126560 -IHRlxZ9raWw= 126561 -IMSMZXI= 126562 -4LmA4LiU4Lit4Lij 126563 -J25h 126564 -zrvOv86zzq4= 126565 -IGtvbGE= 126566 -44OA44O8 126567 -0LjRgtC10LvQtdC8 126568 -IM+Dz4XOvc6/ 126569 -IEt1cnVt 126570 -IHNuYWRubw== 126571 -INin2YTZgtix2KLZhg== 126572 -IFbhu4E= 126573 -6auY44GE 126574 -IHnEsWxkxLF6 126575 -IGJpcmlzaQ== 126576 -IGtow7pj 126577 -2YjbjNmE 126578 -5pyA5L2z 126579 -IOC4quC4suC4gg== 126580 -INCf0L7Qug== 126581 -4omg 126582 -4LmC4Lib4Lij4LmB4LiB4Lij4Lih 126583 -4KWN4KSv4KSv4KSo 126584 -6JGh 126585 -IG5vdsSb 126586 -YXnEsXA= 126587 -IFNpbmdhcA== 126588 -6LCT 126589 -44K244Kk44Oz 126590 -INC90L7QstGL0LU= 126591 -IGjhuqNv 126592 -IOiXpA== 126593 -44Oz44OW 126594 -wqAKCg== 126595 -zrjOtc65zrE= 126596 -INC/0L7Qv9Cw0LTQsA== 126597 -IOuUlOyekOyduA== 126598 -INiv2KfYtNiq2YbYrw== 126599 -INi02YbYp9iu2KrZhw== 126600 -z4POvM6xz4TOsQ== 126601 -5bmz5pa55YWs6YeM 126602 -IGfDtmw= 126603 -0LXQutC+0YLQvtGA 126604 -IG3DoWxv 126605 -INin2KzYp9iy2Yc= 126606 -2qnYp9ix2KfZhg== 126607 -INC/0ZbQtNC/0YDQuNGU0LzRgdGC0LI= 126608 -5LiJ5bm0 126609 -INiz2YHbjNiv 126610 -IM68zq3Pgc6/z4I= 126611 -0JnQmQ== 126612 -IGjGsA== 126613 -2LPZiNio 126614 -INmE2LDYpw== 126615 -IG5lbW92aXQ= 126616 -IGTDrXY= 126617 -xLBz 126618 -wrbCtg== 126619 -IHBoxrDhu51uZw== 126620 -INmG2K3ZiNmH 126621 -0Is= 126622 -IHpieXQ= 126623 -ZWRpaQ== 126624 -bmVjaA== 126625 -INCw0LTQvNGW0L3RltGB0YLRgNCw0YLQuNCy 126626 -IG5ldsSb 126627 -INC+0LY= 126628 -IMSQw7M= 126629 -4Lib4Lij4Liw4Lin 126630 -IHZob2Ruw6k= 126631 -IHVtxJts 126632 -INGA0LDQt9C70LjRh9C90YvQtQ== 126633 -IHDFmWlyb3o= 126634 -INio2K7YtNuM 126635 -44Gu5aSn 126636 -INin2YTZg9mH 126637 -ZWNrw6E= 126638 -IHpvcnVubHU= 126639 -INCc0LjQutC+0LvQsA== 126640 -IGFtZWw= 126641 -0LrQvtCy0YvQtQ== 126642 -Ojo6Oi8= 126643 -5LiN5ZCM55qE 126644 -INmI2YPYp9mG2Ko= 126645 -4Lit4Lit 126646 -bMOhc2ls 126647 -INC/0YDQtdC00L/QvtC70LDQsw== 126648 -772x 126649 -IM69zrU= 126650 -INC90L7QstGL0Lk= 126651 -IOyYge2WpeydhA== 126652 -IOqwgOynhA== 126653 -5YOF 126654 -WUQ= 126655 -INio2KfYug== 126656 -INi02qnYs9iq 126657 -IGfDvG5leQ== 126658 -0LjRgdGM 126659 -44GL44Gq44GE 126660 -IFTDsmE= 126661 -INqv2LHYr9uM2K8= 126662 -2K3ZhA== 126663 -bHV2w60= 126664 -dsOpZA== 126665 -IOyYtw== 126666 -IM61z4DOsQ== 126667 -INGC0LjRgdGP0Yc= 126668 -IOq9gw== 126669 -IFBVUw== 126670 -INC00YPQvNC60YM= 126671 -IOKAnQo= 126672 -IOyKpO2PrOy4oA== 126673 -2YfZhw== 126674 -IGfhuq9uZw== 126675 -4Li04Lig4Liy4Lie 126676 -6YeM6Z2i 126677 -YnLEsXM= 126678 -IHrDoWI= 126679 -zrrOsc+C 126680 -IOWPjOe6vw== 126681 -4Lil4Lil 126682 -IMSQw6Bp 126683 -5a245qCh 126684 -INGA0LDRgdC/0YDQtdC0 126685 -INGB0YLQsNC90LXRgg== 126686 -INC70LDQug== 126687 -INC/0L7QtNC6 126688 -IGfDtnJlbg== 126689 -66W06rOg 126690 -INGE0YDRg9C60YI= 126691 -7ZOo7YSw 126692 -44GZ44KM44Gw 126693 -44KS5L2c 126694 -4Lit4Lit4LiB4LmB4Lia4Lia 126695 -IGt1bGFr 126696 -IO2UjOugiOydtA== 126697 -INit2K/Zitir 126698 -44GG44KT 126699 -INC80ZbQug== 126700 -4KSH4KS44KSV 126701 -INGD0YLQvtGH 126702 -INmD2KvZitix 126703 -IFlpbmU= 126704 -4Lix4Lin4Lir4LiZ 126705 -0L3RltGX 126706 -5Y2i 126707 -0YPRgdC70L7Qsg== 126708 -7JuM7YGs 126709 -IOCkheCklg== 126710 -INGG0ZbQutCw 126711 -7ISg7J2E 126712 -INij2LE= 126713 -0LPQsNC70YLQtdGA 126714 -YW5nbGlja3k= 126715 -INGB0L7RgdGD0LQ= 126716 -INGD0Y/Qsg== 126717 -INC/0YDQvtC00YPQutGG0ZbRlw== 126718 -IGNodWE= 126719 -IGTDoW4= 126720 -4KS+4KSu4KSX 126721 -2KbYqg== 126722 -INCk0LXQtA== 126723 -IGhyb20= 126724 -7ZW067O0 126725 -INii2YbZhNin24zZhg== 126726 -LdC/0YDQsNCy 126727 -IOykkeyalO2VnA== 126728 -INCy0LrRgw== 126729 -IOWkp+mYqg== 126730 -IHRlcms= 126731 -INC/0L7QtNGW0LE= 126732 -INCy0ZbQtNCy0ZbQtA== 126733 -4KWM4KSf 126734 -6LOj 126735 -INio2KrZhg== 126736 -INio2LnYttuM 126737 -44Gq44GK 126738 -5LuW5YCR 126739 -IHRhdnNpeWU= 126740 -IE3EsXPEsXI= 126741 -INil2LA= 126742 -IOaQ 126743 -7ZWY64KY 126744 -INmI2K4= 126745 -44CAIOOAgCDjgIAg44CAIOOAgCDjgIA= 126746 -IHRha292w70= 126747 -IOCkrOCkqOCkqA== 126748 -INC30YDQtdC90LjRjw== 126749 -INmI2YHZgg== 126750 -67mE7JWE 126751 -INC/0L7QvNC+0LbQtdGC 126752 -5YyX5biC 126753 -ZMSxa2xhcsSx 126754 -IOmTgQ== 126755 -IGFrdHXDoWxuw60= 126756 -INCy0LI= 126757 -44KC44Gq44GE 126758 -7Ya17Iug 126759 -z4TOsc+Dzrc= 126760 -IOyDgeuMgA== 126761 -IOagoQ== 126762 -44CC6YKj 126763 -INix2YjYs9uM2Yc= 126764 -IHRlbGV2aXp5b24= 126765 -5bm06b6E 126766 -INCR0L7RgNC40YE= 126767 -66as7Ja0 126768 -IHp2ZcWZZWo= 126769 -0LbQvdC+ 126770 -INCe0YHRgg== 126771 -INC80YPQttGH0LjQvQ== 126772 -IHllxZ9pbA== 126773 -INCh0L7QstC10YI= 126774 -IELDlkw= 126775 -INCi0LDQutC+0LY= 126776 -IG9ibm92 126777 -INC/0YDQuNC90LDQtNC70LXQtg== 126778 -INCy0LjRgdC90L7Qsg== 126779 -2LfZhQ== 126780 -IOyXhuyWtA== 126781 -IE3DuWE= 126782 -5L2P5a6F 126783 -5Yy75a2m 126784 -INC90LDRgNC10Lc= 126785 -44OL776G 126786 -IE3hurd0 126787 -IHZ1w7RuZw== 126788 -5LiA5Yy6 126789 -IOG6om5o 126790 -0YDQuNGE 126791 -5L+d6Zmp 126792 -IM+Hz4HOrs+Dzrc= 126793 -5ZCM5oSP 126794 -IOaJkw== 126795 -ZXTEmw== 126796 -INmI2LDZhNmD 126797 -INGC0LjQtg== 126798 -IM6fzrnOus6/ 126799 -INC80ZbRgdGG0ZY= 126800 -INGA0LXQsdC10L3QvtC6 126801 -IMWeYWg= 126802 -2LnZhNmI2YU= 126803 -bGFkxLHEnw== 126804 -IGdpZGVu 126805 -0LvQuNCy0L7RgdGC0ZY= 126806 -2ZLYsw== 126807 -IFRIQg== 126808 -IG1lc2xlaw== 126809 -wqDQndC1 126810 -zrzPhs+Jzr3OsQ== 126811 -INmI2KfYrA== 126812 -0L3QsNGB0LvRltC0 126813 -5pif5pyf 126814 -0JTQtg== 126815 -INGA0LDQsdC+0YLQsNC10YI= 126816 -IHPDoW5o 126817 -7Jqw66as 126818 -INin2KjZiA== 126819 -55qE5oOF 126820 -IOyZuOq1rQ== 126821 -IGthYmls 126822 -0LXRgNCy0YvQtQ== 126823 -IGdpw6B1 126824 -IHThu48= 126825 -wqDQkQ== 126826 -5a6M5pW0 126827 -IG11xb7Frw== 126828 -IHBvbcSbcm7Emw== 126829 -INmF2K7YtdmI2LU= 126830 -INCU0LXQvA== 126831 -44KP44KM44KL 126832 -INC/0YDQuNCx0Ys= 126833 -INqp2KfZhdm+24w= 126834 -77yt 126835 -IHRyaA== 126836 -INCR0L7Qu9GM0Yg= 126837 -wrQ6 126838 -0LjQstCw0LXRgtGB0Y8= 126839 -IOyCrO2VrQ== 126840 -6L+b5LiA5q2l 126841 -0YbQtdC5 126842 -44G+44Ga 126843 -0LDRgtC10LvQtdC8 126844 -6Yyv 126845 -IMW+YWxvYg== 126846 -0YbQtdC3 126847 -0LjQvdGD0LI= 126848 -IHZlcnpl 126849 -5Zue5Yiw 126850 -IGTGsOG7o2M= 126851 -2KfYptmK2YQ= 126852 -c3RvdXBpbA== 126853 -6K665paH 126854 -INCf0LDRgNC4 126855 -INC00LXQutC+0YDQsNGC0LjQsg== 126856 -2KfYrtiq24w= 126857 -INGB0YLRgNC10Lw= 126858 -44O74pSB44O74pSB44O74pSB44O74pSB 126859 -INGB0LDQvNC+0Lk= 126860 -0YfRgtC+ 126861 -7IOB64u0 126862 -4omk 126863 -0YLQvtCz0L4= 126864 -65Co 126865 -xLFsYWNhaw== 126866 -5Lit44Gr 126867 -IM+Fz4DOrM+Bz4fOv8+Fzr0= 126868 -INCy0ZbQtNCx0YM= 126869 -546755KD 126870 -INCy0L/QtdGA0LXQtA== 126871 -IFBsemXFiA== 126872 -2q/Yp9io 126873 -4LmA4Lio4Lij4Lip4LiQ 126874 -77yM5pyA 126875 -2YXZhtuM 126876 -54Wn54mH 126877 -55uu5b2V 126878 -0YDQuNGC0YLRjw== 126879 -4oCM2KfYtA== 126880 -IOuMgO2ajA== 126881 -IMWZYWR1 126882 -LdGC0LXRhQ== 126883 -INmK2Yg= 126884 -IOC5geC4ng== 126885 -2KfZg9mG 126886 -IOq4sOyekA== 126887 -INCz0ZbQtA== 126888 -IOyasOumrOuKlA== 126889 -2LTZhdin2LHbjA== 126890 -IHRpY2FyaQ== 126891 -4pGi 126892 -INin2YTYqNiv 126893 -INGA0LDRgdGH 126894 -INin2YTbjA== 126895 -IHPDvHJlZGU= 126896 -INin2LnYqtix 126897 -INC/0L7QvdGP0YLRjA== 126898 -zrPOus6/ 126899 -77yM5q+U 126900 -IFNlYg== 126901 -IOyLoOq3nA== 126902 -5pS255uK 126903 -INm+24zYtNmG2YfYp9iv 126904 -zpzOkc6k 126905 -67CU7J20 126906 -5L6b5bqU 126907 -0LHQuNC9 126908 -5Lq65rCX 126909 -44GP44KJ 126910 -IHNrdsSbbA== 126911 -IOuTseyepQ== 126912 -5ouF5b2T 126913 -IGlta2Fu 126914 -5pmo 126915 -77yM546w5Zyo 126916 -IHNyZGNl 126917 -7IKw7JeF 126918 -INC80L7QtNC10LvQuA== 126919 -5pys5b2T44Gr 126920 -0LDQvdC60LA= 126921 -IHnDvHLDvHk= 126922 -INC+0YfQtdCy0LjQtA== 126923 -INit2LPZitmG 126924 -0YnQsNGO0YI= 126925 -bMOpZGw= 126926 -0YbQvg== 126927 -IGPDrXNh 126928 -44GL44GR 126929 -6JeN 126930 -INiu2YjYp9mH2YbYrw== 126931 -IG11xb5l 126932 -INC90LDQutC+0L8= 126933 -ZGnEn2luaQ== 126934 -ZXJzZW5peg== 126935 -INC/0YDQsNGG0ZbQstC90LjQutGW0LI= 126936 -0LTQu9GP 126937 -IM6xz4PPhA== 126938 -5raI6LS5 126939 -IOiogA== 126940 -IGLDoXQ= 126941 -INi02YPZhA== 126942 -INGB0L/QuNGA 126943 -z4DOv8+EzrU= 126944 -INiz2KfZhNmH 126945 -ZWtpbA== 126946 -4LmB4LiK4Lih 126947 -IM+Dz4TOuQ== 126948 -INmF2LfZhNio 126949 -IOygleyxhQ== 126950 -6rSA6rOE 126951 -5bm557ea 126952 -IOS6rA== 126953 -6YCa6YGO 126954 -INiv24zar9ix2KfZhg== 126955 -INij2YXYpw== 126956 -5piv5LiN 126957 -IOuMgOuLtQ== 126958 -IEVyaw== 126959 -cGVydHk= 126960 -INC90LDRh9C40L3QsNC10YI= 126961 -IOq3uOumrA== 126962 -66Oh 126963 -IOybueyCrOydtO2KuA== 126964 -4KS+4KSw4KSo 126965 -5oSP6K+G 126966 -INCh0J8= 126967 -INio2KfZitiv 126968 -IGJha8SxbcSxbmRhbg== 126969 -L1RU 126970 -INmB2KfYtdmE2Yc= 126971 -INmF2KvZhNin 126972 -INC60LLQsNC0 126973 -INi02KfbjNiv 126974 -IHXEjWl0ZWw= 126975 -54i9 126976 -INi52LHYttmH 126977 -IOS6pA== 126978 -INGH0LXRgdGC0Yw= 126979 -4KWIPwo= 126980 -INiu2KfZhtmF 126981 -ZXRpeWxl 126982 -IM61zrPOus6x 126983 -INGB0YPRidC1 126984 -IOydvOyWtA== 126985 -INCb0LXQvdC4 126986 -IOWjsA== 126987 -w6FsaWU= 126988 -44Oh44O844K4 126989 -4KWA4KSk4KSw 126990 -0LPQsNC70ZY= 126991 -INC80ZbQvdGW0Lw= 126992 -IEXFnw== 126993 -INC/0YDQvtC40LfQvtGI 126994 -0J3QsNGB 126995 -INio2YbbjA== 126996 -6K6p5oiR 126997 -INC/0L7RgdGC0LXQvw== 126998 -IOyalOq1rA== 126999 -xLFsxLFw 127000 -INis2YjYsQ== 127001 -IOuMgOu2gOu2hA== 127002 -4LmH4LiV4Liy4Lih 127003 -INGE0LDRgQ== 127004 -IOygleq3nA== 127005 -0LvQsNC80LXQvdGC 127006 -xJ9lbg== 127007 -4KWH4KSCCgo= 127008 -INCY0LLQsNC90L7Qsg== 127009 -INit2qnZhQ== 127010 -IO++mg== 127011 -77y7 127012 -IG5ldmlk 127013 -INC70LDQsdC+0YDQsNGC0L7RgA== 127014 -4Lie4Lii4Liy4Lia4Liy4Lil 127015 -IGVkaXlvcnVt 127016 -IGhsYXZ5 127017 -IEV2cm9wc2vDqQ== 127018 -IHBow6Fp 127019 -44OT44O8 127020 -6rSR7Jet7Iuc 127021 -5Lqc 127022 -2K3Yr9in2Ks= 127023 -INC/0YDQvtGE0LjQu9Cw0LrRgtC4 127024 -cm9zdMWZZWQ= 127025 -INC80LDQu9GM 127026 -IG3DvGTDvHI= 127027 -2KfYs9in2LM= 127028 -INCz0LDQu9GD0LfRlg== 127029 -4Li14Lif 127030 -INi62LDYp9uM24w= 127031 -5a2Q5L6b 127032 -IGJhaHNlZA== 127033 -IEtyw6Fsb3bDqQ== 127034 -5Y27 127035 -ICUs 127036 -572X5pav 127037 -65o= 127038 -IOeR 127039 -IM6czrXPhM6x 127040 -INCt0YLQuA== 127041 -IO2Gte2VqQ== 127042 -INin2qnYqtio2LE= 127043 -IG3Em3PDrWNl 127044 -7IiY66Gc 127045 -0YTRltC6 127046 -INCS0L7Qtw== 127047 -0YfQtdGB0LrQuNC8 127048 -7Jq065Oc 127049 -IG7DoWtsYWR5 127050 -INC/0L7RgtGA0LDQvw== 127051 -INGA0YPQutCw0YU= 127052 -zrnOu86/ 127053 -IEfDvGw= 127054 -66mY 127055 -4LmJ4Lii 127056 -bWFrdA== 127057 -44Oz44OQ44O8 127058 -INC90ZbRjw== 127059 -INC+0YLRgtC10L0= 127060 -bWVzaW5pbg== 127061 -INCy0YHQv9C+0Lw= 127062 -IOydtOuKlA== 127063 -ZHlieQ== 127064 -44K/44Oz 127065 -4peO 127066 -4LmJ4Liy4Lir4LiZ 127067 -2KfYr9qv24w= 127068 -z4fOr86x 127069 -IHNuYcW+w60= 127070 -IOCkmuCklQ== 127071 -zrzOrs68zrE= 127072 -INmD2LE= 127073 -IM66zr/OuQ== 127074 -6YC4 127075 -IG5ldXN0 127076 -INmG2LjYp9mF24w= 127077 -5Y2a54mp 127078 -IOuyvQ== 127079 -4b2x 127080 -IOy2nOyLnA== 127081 -IGFybcOh 127082 -INmH2YXaqdin2LHbjA== 127083 -55qE5oOF5Ya1 127084 -2YLYp9mF 127085 -2YLYqA== 127086 -IOmCow== 127087 -IOunoQ== 127088 -IG9sYXPEsQ== 127089 -zrLOrc+B 127090 -5L2V44GL 127091 -INGD0YfQtdCx 127092 -INCy0YPQtw== 127093 -INio2LHar9iy 127094 -J3lp 127095 -INC/0YDQsNC30LQ= 127096 -INCe0YDQsw== 127097 -IOW5tg== 127098 -INGB0LLQuA== 127099 -INmF24zYr9in2YY= 127100 -IG5hxaFlaG8= 127101 -IEJBxZ4= 127102 -5buK 127103 -zIg= 127104 -44GT44Gd 127105 -4LmH4LiZ4Lie 127106 -zr/Pgc61zrnOvw== 127107 -INCx0LDQs9Cw0YI= 127108 -zrPOtc65 127109 -zrzOtc6vzr8= 127110 -4LmI4LiH4LiK4Liy4LiV 127111 -IEhpem1ldGxlcmk= 127112 -IEFmcmlrYQ== 127113 -IHRlZGJpcg== 127114 -LO+9pA== 127115 -5LiJ57qn 127116 -0I7Ri9GfTtCO0YvRn04= 127117 -INCa0YDRltC8 127118 -IGFyYXk= 127119 -IGLDtnlsZWNl 127120 -0LrQvtGC 127121 -6Zmw 127122 -5Zu96Zqb 127123 -dMSbbA== 127124 -IHBvbGlz 127125 -IHV2b2w= 127126 -IOyImOqwlQ== 127127 -55S16ISR 127128 -IHNhbWk= 127129 -INi02KfYrtmH 127130 -INCy0YHRjNC+0LPQvg== 127131 -INit2K/Yp9mC2YQ= 127132 -IGlrZW4= 127133 -44Kv44Op44OW 127134 -IHrDoXZvZA== 127135 -4KSs4KSy 127136 -67Cw7Iah 127137 -6YeH6LSt 127138 -66Cs 127139 -IOClpAoK 127140 -IOqwgeqwgQ== 127141 -INC80LDQug== 127142 -z4HOsc+Dzrc= 127143 -IGnFn2xlbWk= 127144 -44GX44Gm44GE44G+44GZ 127145 -IFBlaw== 127146 -0Y7QvQ== 127147 -IHZlbGtvdQ== 127148 -5Yqe55CG 127149 -5a6D5Lus 127150 -IOiQrA== 127151 -INC90LDRgNC+0LTRgw== 127152 -IGNow7M= 127153 -IEhpw6c= 127154 -27PbtQ== 127155 -IOC4o+C4reC4mg== 127156 -27Pbtg== 127157 -4LiC4Lin 127158 -5L2N5pa8 127159 -INCh0YLQsA== 127160 -4Lix4LiZ4Lih 127161 -4KS+4KSq4KSV 127162 -INGD0YDQvtC6 127163 -44Ki44Oh44Oq44Kr 127164 -INC30LzQvtC2 127165 -c2vDqW11 127166 -IOi7ig== 127167 -INin2K7YqtuM2KfYsQ== 127168 -IFDFmA== 127169 -0LvRj9Cy 127170 -INC80LDQtw== 127171 -IMO2emVsbGnEn2k= 127172 -5ZG844Gw 127173 -IGJpcmluaW4= 127174 -INC+0LTQvdC1 127175 -zIY= 127176 -5LuW44Gu 127177 -5bu656+J 127178 -0L/QvtGB0LXRgNC10LQ= 127179 -4Lir4Lil4LiU 127180 -5aSa44GE 127181 -z4TOrs+DzrXOuc+C 127182 -INix2YjZhtiv 127183 -6IG9 127184 -7KSR7JeQ 127185 -7Iqk7Yuw 127186 -INC30LLRltGC 127187 -INCw0YDRgtC4 127188 -IGPGsOG7nWk= 127189 -xLFuZMSxcg== 127190 -INCz0L7Qu9C+0LQ= 127191 -2KfYstiv 127192 -4LmI4Liy4Lin4Lin 127193 -44Oh44Op 127194 -2LnZhtmI2KfZhg== 127195 -JSkK 127196 -INGF0L7Qu9C+0LTQuNC70Yw= 127197 -5Lq65Lus 127198 -Q8Sw 127199 -0JfQsNC/ 127200 -IHDFmWlzcA== 127201 -IGR1cnVtbGFyZGE= 127202 -0YDRltC0 127203 -wqDQow== 127204 -IM61z4bOsc+B 127205 -IHNwcmF2 127206 -INC+0YLRgNC40LzQsNC90L3Rjw== 127207 -77yM5rKh5pyJ 127208 -0L7QstCw0LvQsA== 127209 -IG5n4bqhaQ== 127210 -44CC5aSn 127211 -INC00LDQtdGC 127212 -IHDDrXNlbQ== 127213 -0YbRj9GC0Yw= 127214 -b3ZuxJs= 127215 -66aJ 127216 -IOqygQ== 127217 -0YHRgtC40L0= 127218 -IFNhecSx 127219 -44CL55qE 127220 -IHlvbHV5bGE= 127221 -0LXQu9C10YTQvtC9 127222 -IHLDoW5v 127223 -IO2WieuPmQ== 127224 -INin2YTYrtin2YXYs9ip 127225 -INC/0L7QstC40L3QvdCw 127226 -xZlpbGE= 127227 -IOCkmuCksOCkow== 127228 -INio2LHar9iy2KfYsQ== 127229 -7Jq0642w 127230 -4LmA4Lib4Lit4Lij 127231 -IGRhbGVrbw== 127232 -bGVkbsOt 127233 -5ZCN56ix 127234 -0LvQuNCy0ZbRgdGC0Yw= 127235 -IOuquOydhA== 127236 -0L7RgNGW0LI= 127237 -0KbQtQ== 127238 -2KjYr9ij 127239 -67CY6riw 127240 -a3LDoXQ= 127241 -5LiN6Laz 127242 -IG9sZHVrbGFyxLE= 127243 -bGVuaXlvcg== 127244 -IOyLnO2WiQ== 127245 -INC/0YDQuNC90LjQvNCw0YLRjA== 127246 -4LiC4Lit4LiH4Lij 127247 -z4jOtc65 127248 -IOG6qW4= 127249 -2KrYsw== 127250 -INGC0LDQuQ== 127251 -INC90LXQstC+0LfQvNC+0LbQvdC+ 127252 -5Y+K44Gz 127253 -cm90aQ== 127254 -772t 127255 -0LTQvtC8 127256 -0L7QudC90L4= 127257 -5aOK 127258 -6K+055qE 127259 -IHNrb3Jv 127260 -bmnEjW7DrQ== 127261 -IFByb2Zlcw== 127262 -INGF0YDQvtC90LjRh9C10YE= 127263 -IOyjvOusuA== 127264 -IFpu 127265 -INGB0LvQvtC5 127266 -zqDPgc6/ 127267 -5oyH5pWw 127268 -INC/0LXRgNC10Yg= 127269 -4KWB4KSV4KS4 127270 -IOqwgOyglQ== 127271 -IO2VmOuptA== 127272 -27Hbudu0 127273 -0LrRg9C7 127274 -2YrZhNin 127275 -INiv2YjYqNin2LHZhw== 127276 -fGw= 127277 -INCc0YM= 127278 -0L3QuNC70LA= 127279 -44Gm44GE44G+44GZ 127280 -bWFjxLE= 127281 -44Gf44Gh44Gv 127282 -INin2YTZg9iq2KfYqA== 127283 -56e75YuV 127284 -zrvOvA== 127285 -X++8jw== 127286 -IOqwgOyehQ== 127287 -6IW+ 127288 -INC/0YDQtdC30LjQtNC10L3Rgg== 127289 -IOu2hOyVvA== 127290 -YWh5 127291 -xaFldMWZZW7DrQ== 127292 -6ZO6 127293 -IHDFmcOtcm8= 127294 -0JXQog== 127295 -IOyalOyyrQ== 127296 -IG1vaGxv 127297 -5b+D55CG 127298 -IHZ5c29rw6k= 127299 -JnV1bWw= 127300 -z4TOuc66zrE= 127301 -7JeF7LK0 127302 -44Gn44GC 127303 -4Lij4Liy4Lii4LiH4Liy4LiZ 127304 -IHDFmcOtc3DEm3Y= 127305 -IGV0bWnFn3Rpcg== 127306 -5aW55Lus 127307 -z4DOu86x 127308 -4bupYQ== 127309 -IOivtA== 127310 -INGB0L7RgdC10LQ= 127311 -5YeJ 127312 -INCg0LU= 127313 -5Y6f5p2l 127314 -INCQ0YDRhQ== 127315 -2KjZitmG 127316 -5Zyw6K+0 127317 -IMO2cnQ= 127318 -IM6jzrXPgA== 127319 -wq3Zh9in24w= 127320 -INin2YTYp9mC2KrYtQ== 127321 -5bC9566h 127322 -0YLRi9C5 127323 -dGFpbnM= 127324 -2YDZhA== 127325 -56eR5oqA5pyJ6ZmQ5YWs5Y+4 127326 -5o+u 127327 -4Lix4LiV4LiW 127328 -4buXbmc= 127329 -4Lil4Liy4LiU 127330 -5pqu 127331 -INmG2YHYs9mH 127332 -IOeciw== 127333 -IOOBvw== 127334 -IHRhcsSxbQ== 127335 -27Hbudu1 127336 -IM6K 127337 -IGtvbXBsZXg= 127338 -IE5oxKk= 127339 -6LS555So 127340 -INqp2KfYsdio2LHYp9mG 127341 -xYhvdsOhbsOt 127342 -IGvFrw== 127343 -0LTQsNC/ 127344 -zpXOpw== 127345 -6re4656Y 127346 -IGTDtm5kw7w= 127347 -5Lq65ZOh 127348 -IFRp4buDdQ== 127349 -INmI24zYsdin24zYtA== 127350 -IMO2bmfDtnI= 127351 -INmI2LrZitix 127352 -INGB0LrRgNGL 127353 -4oCQJw== 127354 -INC90LXQvNGD 127355 -IEjhu4c= 127356 -IGTDvHplbmxp 127357 -IHNvdXTEm8W+ZQ== 127358 -44CB44Oe 127359 -z4TOv868zrE= 127360 -xJtsw60= 127361 -INij2YTZhdin2YY= 127362 -56Cy 127363 -IHRyw6A= 127364 -IOS4lueVjA== 127365 -YXnEsXo= 127366 -xLFtbMSx 127367 -INin2YTYo9mB 127368 -7ZWY64qU642w 127369 -0LLQsNC90L4= 127370 -IHDFmWnEjWVtxb4= 127371 -2YPZitio 127372 -INC80LDRgtC10LzQsNGC0Lg= 127373 -0LzQtdC90Lg= 127374 -INC/0YDQvtC10LrRgtGD 127375 -4Li14LmC4Lit 127376 -0L7Rgw== 127377 -INin2YTYtNix2YPYqQ== 127378 -5rOj 127379 -2YjZgtmK2Ko= 127380 -0YjQuNCy 127381 -IHBlcnNvbmVs 127382 -2LTYqtix 127383 -4LiU4Liy 127384 -IOuqvQ== 127385 -5Z2Q5Zyo 127386 -0L7QutC1 127387 -IOuniOuylQ== 127388 -INij2YbYpw== 127389 -66C1 127390 -INmF2KjYp9mG24w= 127391 -6Iu55p6c 127392 -IOC4qOC4ow== 127393 -INCb0YPRhw== 127394 -zp/Opc6j 127395 -IMSNw6E= 127396 -44Gb44Gm 127397 -IGvEscWf 127398 -0YjQtdCy 127399 -5oyH5a+8 127400 -4LmB4Lil4Liw4Lih 127401 -IHZvbGVi 127402 -INGB0LjQu9GL 127403 -IGRydWhvdQ== 127404 -IOywrA== 127405 -IOyeiOydjA== 127406 -zqXOow== 127407 -5LiN5a6J 127408 -IOyXhuydjA== 127409 -IGRldGVybQ== 127410 -INin2YTZhdi52YTZiNmF2KfYqg== 127411 -7Zi5 127412 -4pmh 127413 -4KWN4KSs4KSo 127414 -INiu2LTaqQ== 127415 -IE5vdsOh 127416 -INGE0YPQvdC00LDQvNC10L3Rgg== 127417 -INC/0YDQvtCz0YDQsNC80Lg= 127418 -INi52YTZitmD 127419 -4KWkCgo= 127420 -IHZlcml5b3I= 127421 -INGU0LI= 127422 -IOyeiOuLpOqzoA== 127423 -INin2YTYo9mF2LHZitmD2Yo= 127424 -IOWklumDqOODquODs+OCrw== 127425 -IOS/rg== 127426 -INC/0YPRgtC4 127427 -IM6/z4HOsw== 127428 -INC+0YHQvdC+0LLQvdC+0Lw= 127429 -INC90LDRgNGD0LY= 127430 -INC80LjRgNC1 127431 -b3bEm3Q= 127432 -IO2DkA== 127433 -IHNva2Fr 127434 -IHNwb2x1cHLDoWNp 127435 -0JTQmg== 127436 -IOWY 127437 -4paN4paN4paN4paN4paN4paN4paN4paN4paN4paN4paN4paN4paN4paN4paN4paN 127438 -IMKgwqDCoMKg 127439 -IGhhecSxcg== 127440 -IOyZlA== 127441 -5oKo55qE 127442 -5oy6 127443 -IOuvvOyjvA== 127444 -IGhvdGVsdQ== 127445 -4Li14Lic 127446 -7J6Q64+Z 127447 -5Ly855qE 127448 -zq3Ovc+Ez4HOvw== 127449 -2LTZiA== 127450 -IOmk 127451 -IM67zrk= 127452 -IG9sbWFrdGFkxLFy 127453 -INC+0YHQstC10Yk= 127454 -INCy0LjQvdCw 127455 -INiu2KfYtdip 127456 -cmFuYQ== 127457 -zrPPgc6xz4bOrg== 127458 -0YbQtdGB 127459 -IGRvxJ9ydWx0 127460 -INmC2LHYp9ix2K/Yp9iv 127461 -INCa0LDQuw== 127462 -6rK97KCc 127463 -z4fPjA== 127464 -0YPRjtGJ0LjQuQ== 127465 -64uY7J20 127466 -64w= 127467 -0LvQsNC3 127468 -IG5n4burbmc= 127469 -aXNrdQ== 127470 -7ISg6rGw 127471 -INGN0LvQtdC60YLRgNC+0L0= 127472 -IFZvag== 127473 -0L3Rj9C80Lg= 127474 -INmI2KPZhg== 127475 -5Lqt 127476 -57uf6K6h 127477 -IMWfacWf 127478 -44CN55qE 127479 -5q2v 127480 -INC60L7Qu9C70LXQug== 127481 -INC00LLQuNC2 127482 -IG7hu61h 127483 -xI1hc8Ot 127484 -IHNvbnU= 127485 -INC80LXRhdCw0L3RltC3 127486 -xb5lbsO9 127487 -INC30LDRgdGC0YPQvw== 127488 -6rSA66Co 127489 -INGC0L7QstCw0YDRltCy 127490 -IOy8gOydtA== 127491 -4KWB4KSX4KSk 127492 -IHrDoXNvYg== 127493 -0LzQvtCy0ZbRgA== 127494 -dWZhYw== 127495 -xa9sZcW+aXQ= 127496 -INCy0LjQs9C+0YLQvtCy 127497 -INin2YTZhtmI 127498 -INi52KfZhdin 127499 -5oGo 127500 -IOydtOuvuOyngA== 127501 -IHR2b8WZ 127502 -IHZ5dcW+aXTDrQ== 127503 -IGdlbGnFn2lt 127504 -7LOk64uk 127505 -4Lir4LiZ4Lit4LiH 127506 -IOyduOyglQ== 127507 -4KWN4KSm4KSw 127508 -INC/0LXRgNC10LTQsA== 127509 -INC30LTRltC50YHQvdC10L3QvdGP 127510 -2YbYuQ== 127511 -6KGj5pyN 127512 -IGxvYQ== 127513 -7ZmI 127514 -6Iux5Zu9 127515 -IERydWg= 127516 -2K7Yp9mG 127517 -0LTQsNC8 127518 -0LDRgtC10LvRjNC90YvRhQ== 127519 -zrjPgc+O 127520 -INij2YXYsQ== 127521 -IMWZYWRh 127522 -IGJ1bHXFnw== 127523 -INGC0YDQsNC90YHQv9C+0YA= 127524 -INmC2KrZhA== 127525 -IFRhcmlm 127526 -UnVz 127527 -INC30LDRgdGW0LQ= 127528 -IMSwaA== 127529 -bGV5aW4= 127530 -IHZ5csOh 127531 -IETEmw== 127532 -0LjQsdC70Lg= 127533 -YXZvdQ== 127534 -INCT0LXRgNC8 127535 -0L3QtdC80YM= 127536 -INC60L7QvdGG0LXQvw== 127537 -INmC2KfYr9ix 127538 -IHNvdWJvcg== 127539 -IGzhu5Fp 127540 -IOe1kA== 127541 -0LvQtdC90L3Ri9C5 127542 -zrrPhQ== 127543 -INC00L7Qv9C+0LzQsNCz 127544 -4Lie4Lin4LiB4LmA4LiC 127545 -IHF1YW5n 127546 -INi32YTYpw== 127547 -IOmHjA== 127548 -INmG2YXZiNiv2KfYsQ== 127549 -IMWfYXI= 127550 -INGB0L/RltC7 127551 -wq1u 127552 -7KeA7JqU 127553 -5YmN5b6A 127554 -5YWz6ZSu 127555 -5a6e5Zyo 127556 -6Z+z5qW9 127557 -INmF2LPYptmE2Yc= 127558 -IHllbWU= 127559 -INGI0LDRhQ== 127560 -6riw7Iig 127561 -IOC4quC4s+C4mQ== 127562 -INmI2LHYsti024w= 127563 -44GX44Gf44KJ 127564 -zq/Pg8+J 127565 -0L7QutC+0L0= 127566 -44Gf44KJ 127567 -INil2YTZitmH 127568 -INii2LDYsdio 127569 -IHLhu51p 127570 -IG9kYWs= 127571 -INC80L7Qs9GD 127572 -INqv2YY= 127573 -6LK8 127574 -ZWRsYQ== 127575 -INC+0L/Ri9GC 127576 -bGFtYWt0YWTEsXI= 127577 -5bC85Lqa 127578 -6YO95Lya 127579 -IM6YzrXPg8+DzrE= 127580 -INCy0L7Qsw== 127581 -57uI5LqO 127582 -INGD0YDQvtCy0L3QtQ== 127583 -IHZsYWs= 127584 -INii2YTYqQ== 127585 -IM61zrnOtA== 127586 -4oc= 127587 -0LTRg9GC 127588 -0ZbQvdCz 127589 -INij2YXYsdmK2YPZig== 127590 -2KfYstmG2K8= 127591 -INio2KfZhNij 127592 -IOCkpOCkqA== 127593 -IGtheWRldA== 127594 -65+s66as 127595 -IGRyxb4= 127596 -INC/0LXQvdGB 127597 -IHDFmcOtxI0= 127598 -INCi0L7Qu9GM0LrQvg== 127599 -INCx0LDRgtCw0YA= 127600 -6ZOB6Lev 127601 -INm+24zahg== 127602 -IM6TzrXPiQ== 127603 -IM6xz4XPhM6s 127604 -xJ5J 127605 -INCw0LrRgtC40LLQvdC+ 127606 -zpfOnM6R 127607 -IHZhcmzEsWs= 127608 -IOWPqg== 127609 -INC30LDRidC40YLRiw== 127610 -0LvQuNC8 127611 -INmF2LTYp9mH2K/YqQ== 127612 -0LjQutC+0Lw= 127613 -IOyhsOyCrA== 127614 -0L7Qs9C10L0= 127615 -IG3huqV5 127616 -Z2lp 127617 -6JuH 127618 -INiu2YjbjNi0 127619 -IG5vdsOh 127620 -0LrQvtCy0L7QuQ== 127621 -IGthbsSxdA== 127622 -6Z2i6K6u 127623 -INix2YjYs9iq2Kc= 127624 -7Ja06rCA 127625 -INC+0YLQvdC+0YjQtdC90LjRjw== 127626 -IGhvZG5vdHk= 127627 -2YjYsdin2Ko= 127628 -IHDFmcOtc3Q= 127629 -IHRo4buN 127630 -IMOnxLFrYXJ0 127631 -0L7QvtCx0YDQsNC3 127632 -IG5lbcSbbA== 127633 -wqBybw== 127634 -INiv2YjZhNiq24w= 127635 -4Li1LA== 127636 -5LiA5bqm 127637 -aWFvbWk= 127638 -5ZeO 127639 -2Y/YuQ== 127640 -INCy0LDRgNC40LDQvQ== 127641 -IHBvZGHFmWlsbw== 127642 -IOuCmOqwgA== 127643 -6JCl5Lia 127644 -INCw0LHRgdC+0LvRjtGC0L3Qvg== 127645 -IOu4jOudvA== 127646 -INCz0L7RgNC40Lc= 127647 -YcSfxLFu 127648 -IHllcmluaQ== 127649 -4LmJ4Liy4LiZ4LiU 127650 -5pCs 127651 -IGJhbMSxaw== 127652 -IMWfYW5z 127653 -6K6k6K+G 127654 -IGlzdGVkacSfaW5peg== 127655 -IGppc3TEmw== 127656 -IOyImOqwgA== 127657 -77yM5LiK 127658 -4KSc4KSs 127659 -INCy0LjRj9Cy0Lg= 127660 -66el 127661 -44GX44Gm44KL 127662 -2YrZg9in 127663 -IEjDvHM= 127664 -Y8SxbsSxbg== 127665 -IOCktuCkpA== 127666 -INGA0LDRgdC/0L7Qu9Cw0LM= 127667 -INGB0L/RgNCw0LLQtg== 127668 -4Li34Lit4LiW 127669 -INCy0LXRgNGC0LjQug== 127670 -IHZ5c3Rhdg== 127671 -INGA0LXQsNC70ZbQt9Cw0YbRltGX 127672 -0LLQsNC80Lg= 127673 -44K544OG44Kj 127674 -64WB 127675 -INGA0LXRh9GW 127676 -2YHYp9mE 127677 -4KS/4KSV4KSf 127678 -INCy0L7Qt9GA0LDRgdGC0LU= 127679 -0LrQsNGB 127680 -INCY0YE= 127681 -INC70ZbQug== 127682 -IM+DzrfOvM6xzr0= 127683 -0LzQtdC90YLRgw== 127684 -0L3Rj9GO0YI= 127685 -5p+0 127686 -IM64zrXPiQ== 127687 -54qv572q 127688 -INmC2LfYsQ== 127689 -0JTQkA== 127690 -LXw= 127691 -INGB0YLRlg== 127692 -IHV5dW0= 127693 -IHBvdMWZZWJh 127694 -INi52YXZhNuM2KfYqg== 127695 -5aWq 127696 -2KfYrtix 127697 -INqp2LPYp9mG24w= 127698 -2KrZhdix 127699 -0YzQtdGA 127700 -IE5leg== 127701 -7ZqM7IKs 127702 -IEJhbmthc8Sx 127703 -0LXQs9GA0LA= 127704 -4LiC4LiT4Liw4LiX 127705 -5ZCI5qC8 127706 -IOyXrOufrOu2hA== 127707 -eWFzYWw= 127708 -IOihjOaUvw== 127709 -5YqJ 127710 -ZMSxa3Rhbg== 127711 -44Ki44Or44OQ 127712 -INin24zZhtqG 127713 -IGRpaml0YWw= 127714 -5bCY 127715 -INGA0LDQt9C80LXRiQ== 127716 -INC60ZbQu9GM0LrQvtGB0YLRlg== 127717 -IEV2cm9weQ== 127718 -INGA0L7Qt9Cy0Lg= 127719 -0Y7RidGD0Y4= 127720 -IG9uZw== 127721 -IGhlcHNp 127722 -dmFpbGFiaWxpdHk= 127723 -INiq2LXZhdmK2YU= 127724 -0YPQudGC0LU= 127725 -4KS54KSy 127726 -IMWhaXJv 127727 -IHDDoXM= 127728 -Ozs7Ozs7 127729 -6YWN5ZCI 127730 -INin2YTYudin2YTZhdmK2Kk= 127731 -0JLQvg== 127732 -aGFm 127733 -bMOhdg== 127734 -IGLDrA== 127735 -IG3Fr2o= 127736 -6ruY7ISc 127737 -wqBCZg== 127738 -INGB0L/RgNC+0YHQuNC7 127739 -4oCM2qnZhtmG2K/Zhw== 127740 -2YbYr9mK2Kk= 127741 -54m56Imy 127742 -IOyVqA== 127743 -4Li44Lip4Lii 127744 -INCk0L7RgA== 127745 -0L/QuNGB0L7Qug== 127746 -dcW+ZWw= 127747 -xLFtbGFy 127748 -54q25rOB 127749 -IOODrOODh+OCo+ODvOOCuQ== 127750 -0YXQvtCy0Lg= 127751 -wqBLxI0= 127752 -0YfQuNC8 127753 -INiq2YjZhQ== 127754 -4LmA4LiB4Lip4LiV4Lij 127755 -IOyLseq4gA== 127756 -2YXYp9ix2KfYqg== 127757 -w6puaA== 127758 -IMWZaWQ= 127759 -5oqs 127760 -0YHQuNGO 127761 -5oWO 127762 -IMOnZXZyZQ== 127763 -44OI44Or 127764 -IHnEsWxkxLFy 127765 -IHrDoXpuYW0= 127766 -5py65Zy6 127767 -INC/0L7RlA== 127768 -INCy0YvRgNCw0YnQuA== 127769 -INmB2Lk= 127770 -67s= 127771 -INiv2KfYsduM2YU= 127772 -77yM5pu0 127773 -INC30LXQvNC70Lg= 127774 -2KfYqNmC2KfYqg== 127775 -IG3hu51p 127776 -a8O9Y2g= 127777 -2YTYp9ip 127778 -5bi9 127779 -2KjYsdin2YfZitmF 127780 -INC/0L7QsdCw0Yc= 127781 -4KS+4KSH4KSu 127782 -4LmI4Liy4LiH4Lib4Lij4Liw4LmA4LiX4Lio 127783 -IOyEuOyDgQ== 127784 -INC/0L7QvNC+0LPQsNC10YI= 127785 -IM+Ez4zPg86/ 127786 -5pa3 127787 -INmB2LHYp9mI 127788 -4LmE4Lib4Lii 127789 -ZXJnaXNp 127790 -IOmZkA== 127791 -Lnh6 127792 -INGB0LvRg9GF 127793 -0LXQutC+0L3QvtC8 127794 -IE5o4bqldA== 127795 -wrHYtw== 127796 -IOuIiOydhA== 127797 -IO2ajOyCrA== 127798 -0ZM= 127799 -IOWQjeeEoeOBlw== 127800 -IM6/zrzOrM60zrE= 127801 -h4w= 127802 -bGnEn2luaW4= 127803 -2LnYp9mG 127804 -INiy2YbbjA== 127805 -VMO0aQ== 127806 -IGV0a2k= 127807 -IOyXsOudvQ== 127808 -INC60L7QvdGG0LA= 127809 -6LCL 127810 -INC30LXQvNC70Y8= 127811 -7ZmY6rK9 127812 -INmF2qnYp9mG24w= 127813 -55ay 127814 -IOei 127815 -IGt1cnVsYW4= 127816 -2KTZiNmE 127817 -2K/ZiQ== 127818 -INin2YTZhdmG2LfZgtip 127819 -IG7huq9uZw== 127820 -0J/Qmg== 127821 -0L7Qu9Cw0Lk= 127822 -WUs= 127823 -5ZGG 127824 -zrvOsc69 127825 -6KW/55yB 127826 -IM6SzrHPgw== 127827 -IO2ZleyLpA== 127828 -WkQ= 127829 -0L/RltC0 127830 -INC90LDRh9C1 127831 -IM+Ezqw= 127832 -5b27 127833 -4oCeRA== 127834 -IOiHug== 127835 -INC90LDRiNC10Lk= 127836 -IHTDrW10bw== 127837 -INiq2LPZhQ== 127838 -z4HOuM+Bzr8= 127839 -5Luk5Lq6 127840 -IFBhemFy 127841 -44KT44Go 127842 -56uL5Yi7 127843 -woFA 127844 -IGLhuq9j 127845 -7Iqk7YWM 127846 -IGthZMSxbmxhcg== 127847 -ZmlndXI= 127848 -44Gk44G2 127849 -IOa1meaxnw== 127850 -INC00LXQutGW0LvRjA== 127851 -6KGd 127852 -4Lii4LiZ4LmB4Lib4Lil4LiH 127853 -b2xldA== 127854 -IG5lZG9r 127855 -bmFtZW4= 127856 -5YWE5byf 127857 -4Li34Lit4LiC 127858 -6IKD 127859 -IGLDvG55 127860 -INGA0LDQtNGP0L0= 127861 -44CB5LqM 127862 -0LDQvdC90Y4= 127863 -IOaJi+acug== 127864 -INC+0YHQu9C+0LY= 127865 -INC+0LPQu9GP 127866 -INiz2KjYsg== 127867 -IGFrdGl2aXQ= 127868 -IOCkj+Ckqg== 127869 -56uc 127870 -IGRpcmVu 127871 -adCy 127872 -IFlhdMSxcsSxbQ== 127873 -0YbRltC50L3QsA== 127874 -INC00L7QvNC+0LI= 127875 -4bqzbg== 127876 -IENvxJ9yYWY= 127877 -2YHZiA== 127878 -5rCX44Gr5YWl 127879 -56eB44Gu 127880 -772N 127881 -4KWM4KSh 127882 -INCT0YDQuNCz0L7RgA== 127883 -IFBleWdhbWJlcg== 127884 -IM6xzrPOsQ== 127885 -IGVmZWt0 127886 -IOyeiOyWtOyEnA== 127887 -INC/0LvQsNGC0LXQtg== 127888 -IFRyYWI= 127889 -b3Zlcnk= 127890 -4oCm4oCm44CC 127891 -IHlhcG1heWE= 127892 -INC90LDQudCx0ZbQu9GM 127893 -INmF2YbYstmE 127894 -2YjZitmD 127895 -xLFsZMSxxJ/EsW5kYQ== 127896 -IHDFmcOtcGFkbsSb 127897 -IM68z4DOv8+Bzr/PjQ== 127898 -IOuTnOudvOuniA== 127899 -IOuwqeusuA== 127900 -INCh0LjQvA== 127901 -2qnYp9iq 127902 -0LXQutC+0Lw= 127903 -2LHZiti5 127904 -2YfYr9mB 127905 -5peP6Ieq5rK7 127906 -IHptxJtu 127907 -INCy0LrQu9Cw0LQ= 127908 -INio2YTYug== 127909 -IOeniw== 127910 -Tmdo 127911 -IGVuZGnFnw== 127912 -IEN1bWh1cmJhxZ9rYW7EsQ== 127913 -IEthZg== 127914 -IOC5geC4q+C4pQ== 127915 -IG11dGx1 127916 -INGB0LjRgA== 127917 -INCz0YPQvA== 127918 -5r+D 127919 -54KJ 127920 -IELDoW8= 127921 -4KWC4KS3 127922 -IOygle2ZlQ== 127923 -4KS+4KSo4KS4 127924 -77uk 127925 -0L3QsNGB0LvRltC00L7Qug== 127926 -cG/EjWV0 127927 -66eM7JuQ7J6F64uI64uk 127928 -IOyEnOyauO2KueuzhOyLnA== 127929 -zpXOmc6j 127930 -4Li44Lih4LiK4LiZ 127931 -INC80ZbQu9GM 127932 -5oWM 127933 -z4POus61z4TOsc65 127934 -IOOAnA== 127935 -IGthbGl0ZWxp 127936 -INGB0LzQtdGA0YLRjA== 127937 -6LyU 127938 -INCx0LjRgg== 127939 -IM6jz4TOvw== 127940 -4LiH4LmA4Lio4Liq 127941 -5Y6f5pys 127942 -IGtuw60= 127943 -5LqS6IGU572R 127944 -INGH0LXQu9C+0LLQtdGH0LXRgQ== 127945 -562S 127946 -4LiI4Liz4Lir4LiZ 127947 -5Ye65Y67 127948 -44Ki44OL44Oh 127949 -5bGV56S6 127950 -cnljaA== 127951 -4KSF4KSs 127952 -b8WI 127953 -asOtY8OtbQ== 127954 -2KfYrdir 127955 -INmI2KfZgti524w= 127956 -INCk0LXQtNC10YDQsNC70Yw= 127957 -0YHQsNC8 127958 -IOyYpQ== 127959 -5Zyw55CD 127960 -IHN1eXU= 127961 -c2VuaXo= 127962 -4KWJ4KSr 127963 -IOqwmeuLpA== 127964 -INC/0YDQuNC30L3QsNGH0LXQvdC90Y8= 127965 -IFPEsW4= 127966 -INin2YXZhtuM2Ko= 127967 -IGzDoXRreQ== 127968 -INCR0Lg= 127969 -IHPDvHJlY2k= 127970 -wrfCt8K3wrc= 127971 -IOqyveywsA== 127972 -INC60LDQu9GM 127973 -INC90LjQutGC0L4= 127974 -2ZHZhQ== 127975 -INiv2Yrar9ix 127976 -IGFsxLFubWFzxLE= 127977 -0LvQtdC90L3Rlg== 127978 -4Li04Lin4LmA4LiV4Lit4Lij 127979 -4Lib4LiB4LiE4Lij4Lit4LiH 127980 -INC30LDQutC+0L3QvtC00LDQstGB0YLQstCw 127981 -44CA44Kk 127982 -IOuFuO2VmOyasA== 127983 -IETDvMWf 127984 -INCz0YPRgdGC 127985 -INCS0LDRiA== 127986 -INin2YXYqtuM 127987 -IHBhcmFtZXQ= 127988 -IM6gzrHOvc61z4A= 127989 -4LmM4LiB4Lij 127990 -zrbOsQ== 127991 -IOuNlOyasQ== 127992 -2YjZhNin2Ko= 127993 -0LLQsNGC0LjRgdGP 127994 -IGvDtms= 127995 -2YbYqA== 127996 -INCy0YvRgdC+0LrQvtC5 127997 -44O844O8 127998 -6ZSm 127999 diff --git a/examples/llama/components/MessageItem.tsx b/examples/llama/components/MessageItem.tsx deleted file mode 100644 index 5690c6588..000000000 --- a/examples/llama/components/MessageItem.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import React, { memo } from 'react'; -import { View, StyleSheet } from 'react-native'; -import { MessageType } from '../types'; -import MarkdownComponent from './MarkdownComponent'; -import LlamaIcon from '../assets/icons/llama_icon.svg'; -import ColorPalette from '../colors'; - -interface MessageItemProps { - message: MessageType; -} - -const MessageItem = memo(({ message }: MessageItemProps) => { - return ( - - {message.role === 'assistant' && ( - - - - )} - - - ); -}); - -export default MessageItem; - -const styles = StyleSheet.create({ - aiMessage: { - flexDirection: 'row', - maxWidth: '80%', - alignSelf: 'flex-start', - marginVertical: 8, - }, - userMessage: { - paddingHorizontal: 12, - paddingVertical: 8, - marginRight: 8, - marginVertical: 8, - maxWidth: 220, - borderRadius: 8, - backgroundColor: ColorPalette.seaBlueLight, - alignSelf: 'flex-end', - }, - aiMessageIconContainer: { - backgroundColor: ColorPalette.seaBlueLight, - height: 32, - width: 32, - alignItems: 'center', - justifyContent: 'center', - borderRadius: 16, - marginHorizontal: 7, - }, - messageText: { - fontSize: 14, - lineHeight: 19.6, - color: ColorPalette.primary, - fontFamily: 'regular', - }, -}); diff --git a/examples/llama/types.d.ts b/examples/llama/types.d.ts deleted file mode 100644 index 7ae077192..000000000 --- a/examples/llama/types.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export type SenderType = 'user' | 'assistant'; - -export interface MessageType { - role: SenderType; - content: string; -} diff --git a/examples/llama/.gitignore b/examples/llm-tool-calling/.gitignore similarity index 100% rename from examples/llama/.gitignore rename to examples/llm-tool-calling/.gitignore diff --git a/examples/llama/android/.gitignore b/examples/llm-tool-calling/android/.gitignore similarity index 100% rename from examples/llama/android/.gitignore rename to examples/llm-tool-calling/android/.gitignore diff --git a/examples/llm-tool-calling/android/app/build.gradle b/examples/llm-tool-calling/android/app/build.gradle new file mode 100644 index 000000000..bd5e1b6e0 --- /dev/null +++ b/examples/llm-tool-calling/android/app/build.gradle @@ -0,0 +1,176 @@ +apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" + +def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + +/** + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. + */ +react { + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) + reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" + codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + + // Use Expo CLI to bundle the app, this ensures the Metro config + // works correctly with Expo projects. + cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" + + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '../..' + // root = file("../../") + // The folder where the react-native NPM package is. Default is ../../node_modules/react-native + // reactNativeDir = file("../../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen + // codegenDir = file("../../node_modules/@react-native/codegen") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] + + /* Autolinking */ + autolinkLibrariesWithApp() +} + +/** + * Set this to true to Run Proguard on Release builds to minify the Java bytecode. + */ +def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() + +/** + * The preferred build flavor of JavaScriptCore (JSC) + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +android { + ndkVersion rootProject.ext.ndkVersion + + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion + + namespace 'com.anonymous.llmtoolcalling' + defaultConfig { + applicationId 'com.anonymous.llmtoolcalling' + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0.0" + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug + shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true) + } + } + packagingOptions { + jniLibs { + useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false) + } + } + androidResources { + ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~' + } +} + +// Apply static values from `gradle.properties` to the `android.packagingOptions` +// Accepts values in comma delimited lists, example: +// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini +["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> + // Split option: 'foo,bar' -> ['foo', 'bar'] + def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); + // Trim all elements in place. + for (i in 0.. 0) { + println "android.packagingOptions.$prop += $options ($options.length)" + // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**' + options.each { + android.packagingOptions[prop] += it + } + } +} + +dependencies { + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + + def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true"; + def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true"; + def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true"; + + if (isGifEnabled) { + // For animated gif support + implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}") + } + + if (isWebpEnabled) { + // For webp support + implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}") + if (isWebpAnimatedEnabled) { + // Animated webp support + implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}") + } + } + + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") + } else { + implementation jscFlavor + } +} diff --git a/examples/llama/android/app/debug.keystore b/examples/llm-tool-calling/android/app/debug.keystore similarity index 100% rename from examples/llama/android/app/debug.keystore rename to examples/llm-tool-calling/android/app/debug.keystore diff --git a/examples/llama/android/app/proguard-rules.pro b/examples/llm-tool-calling/android/app/proguard-rules.pro similarity index 100% rename from examples/llama/android/app/proguard-rules.pro rename to examples/llm-tool-calling/android/app/proguard-rules.pro diff --git a/examples/llama/android/app/src/debug/AndroidManifest.xml b/examples/llm-tool-calling/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from examples/llama/android/app/src/debug/AndroidManifest.xml rename to examples/llm-tool-calling/android/app/src/debug/AndroidManifest.xml diff --git a/examples/llm-tool-calling/android/app/src/main/AndroidManifest.xml b/examples/llm-tool-calling/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..4b190817f --- /dev/null +++ b/examples/llm-tool-calling/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/llama/android/app/src/main/assets/fonts/Aeonik-Medium.otf b/examples/llm-tool-calling/android/app/src/main/assets/fonts/Aeonik-Medium.otf similarity index 100% rename from examples/llama/android/app/src/main/assets/fonts/Aeonik-Medium.otf rename to examples/llm-tool-calling/android/app/src/main/assets/fonts/Aeonik-Medium.otf diff --git a/examples/llama/android/app/src/main/assets/fonts/Aeonik-Regular.otf b/examples/llm-tool-calling/android/app/src/main/assets/fonts/Aeonik-Regular.otf similarity index 100% rename from examples/llama/android/app/src/main/assets/fonts/Aeonik-Regular.otf rename to examples/llm-tool-calling/android/app/src/main/assets/fonts/Aeonik-Regular.otf diff --git a/examples/llm-tool-calling/android/app/src/main/java/com/anonymous/llmtoolcalling/MainActivity.kt b/examples/llm-tool-calling/android/app/src/main/java/com/anonymous/llmtoolcalling/MainActivity.kt new file mode 100644 index 000000000..18ce05f6a --- /dev/null +++ b/examples/llm-tool-calling/android/app/src/main/java/com/anonymous/llmtoolcalling/MainActivity.kt @@ -0,0 +1,60 @@ +package com.anonymous.llmtoolcalling + +import android.os.Build +import android.os.Bundle +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate +import expo.modules.ReactActivityDelegateWrapper + +class MainActivity : ReactActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + // Set the theme to AppTheme BEFORE onCreate to support + // coloring the background, status bar, and navigation bar. + // This is required for expo-splash-screen. + setTheme(R.style.AppTheme) + super.onCreate(null) + } + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "main" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate { + return ReactActivityDelegateWrapper( + this, + BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, + object : DefaultReactActivityDelegate( + this, + mainComponentName, + fabricEnabled, + ) {}, + ) + } + + /** + * Align the back button behavior with Android S + * where moving root activities to background instead of finishing activities. + * @see onBackPressed + */ + override fun invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed() + } + return + } + + // Use the default back button implementation on Android S + // because it's doing more than [Activity.moveTaskToBack] in fact. + super.invokeDefaultOnBackPressed() + } +} diff --git a/examples/llm-tool-calling/android/app/src/main/java/com/anonymous/llmtoolcalling/MainApplication.kt b/examples/llm-tool-calling/android/app/src/main/java/com/anonymous/llmtoolcalling/MainApplication.kt new file mode 100644 index 000000000..119fa3441 --- /dev/null +++ b/examples/llm-tool-calling/android/app/src/main/java/com/anonymous/llmtoolcalling/MainApplication.kt @@ -0,0 +1,55 @@ +package com.anonymous.llmtoolcalling + +import android.app.Application +import android.content.res.Configuration +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.react.soloader.OpenSourceMergedSoMapping +import com.facebook.soloader.SoLoader +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper + +class MainApplication : Application(), ReactApplication { + override val reactNativeHost: ReactNativeHost = + ReactNativeHostWrapper( + this, + object : DefaultReactNativeHost(this) { + override fun getPackages(): List { + val packages = PackageList(this).packages + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return packages + } + + override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + }, + ) + + override val reactHost: ReactHost + get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, OpenSourceMergedSoMapping) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) + } +} diff --git a/examples/llama/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/examples/llm-tool-calling/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png similarity index 100% rename from examples/llama/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png rename to examples/llm-tool-calling/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png diff --git a/examples/llama/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/examples/llm-tool-calling/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png similarity index 100% rename from examples/llama/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png rename to examples/llm-tool-calling/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png diff --git a/examples/llama/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/examples/llm-tool-calling/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png similarity index 100% rename from examples/llama/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png rename to examples/llm-tool-calling/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png diff --git a/examples/llama/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/examples/llm-tool-calling/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png similarity index 100% rename from examples/llama/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png rename to examples/llm-tool-calling/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png diff --git a/examples/llama/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/examples/llm-tool-calling/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png similarity index 100% rename from examples/llama/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png rename to examples/llm-tool-calling/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png diff --git a/examples/llama/android/app/src/main/res/drawable/ic_launcher_background.xml b/examples/llm-tool-calling/android/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from examples/llama/android/app/src/main/res/drawable/ic_launcher_background.xml rename to examples/llm-tool-calling/android/app/src/main/res/drawable/ic_launcher_background.xml diff --git a/examples/llama/android/app/src/main/res/drawable/rn_edit_text_material.xml b/examples/llm-tool-calling/android/app/src/main/res/drawable/rn_edit_text_material.xml similarity index 100% rename from examples/llama/android/app/src/main/res/drawable/rn_edit_text_material.xml rename to examples/llm-tool-calling/android/app/src/main/res/drawable/rn_edit_text_material.xml diff --git a/examples/llama/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/llm-tool-calling/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml diff --git a/examples/llama/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/llm-tool-calling/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml diff --git a/examples/llama/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp diff --git a/examples/llama/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/llm-tool-calling/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from examples/llama/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to examples/llm-tool-calling/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/examples/llama/android/app/src/main/res/values-night/colors.xml b/examples/llm-tool-calling/android/app/src/main/res/values-night/colors.xml similarity index 100% rename from examples/llama/android/app/src/main/res/values-night/colors.xml rename to examples/llm-tool-calling/android/app/src/main/res/values-night/colors.xml diff --git a/examples/llama/android/app/src/main/res/values/colors.xml b/examples/llm-tool-calling/android/app/src/main/res/values/colors.xml similarity index 100% rename from examples/llama/android/app/src/main/res/values/colors.xml rename to examples/llm-tool-calling/android/app/src/main/res/values/colors.xml diff --git a/examples/llm-tool-calling/android/app/src/main/res/values/strings.xml b/examples/llm-tool-calling/android/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..12c524565 --- /dev/null +++ b/examples/llm-tool-calling/android/app/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + llm_tool_calling + contain + false + \ No newline at end of file diff --git a/examples/llama/android/app/src/main/res/values/styles.xml b/examples/llm-tool-calling/android/app/src/main/res/values/styles.xml similarity index 100% rename from examples/llama/android/app/src/main/res/values/styles.xml rename to examples/llm-tool-calling/android/app/src/main/res/values/styles.xml diff --git a/examples/llama/android/build.gradle b/examples/llm-tool-calling/android/build.gradle similarity index 99% rename from examples/llama/android/build.gradle rename to examples/llm-tool-calling/android/build.gradle index e34231b2f..abbcb8ec8 100644 --- a/examples/llama/android/build.gradle +++ b/examples/llm-tool-calling/android/build.gradle @@ -6,7 +6,7 @@ buildscript { minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24') compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35') targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34') - kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.24' + kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25' ndkVersion = "26.1.10909125" } diff --git a/examples/llama/android/gradle.properties b/examples/llm-tool-calling/android/gradle.properties similarity index 100% rename from examples/llama/android/gradle.properties rename to examples/llm-tool-calling/android/gradle.properties diff --git a/examples/llama/android/gradle/wrapper/gradle-wrapper.jar b/examples/llm-tool-calling/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from examples/llama/android/gradle/wrapper/gradle-wrapper.jar rename to examples/llm-tool-calling/android/gradle/wrapper/gradle-wrapper.jar diff --git a/examples/llama/android/gradle/wrapper/gradle-wrapper.properties b/examples/llm-tool-calling/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from examples/llama/android/gradle/wrapper/gradle-wrapper.properties rename to examples/llm-tool-calling/android/gradle/wrapper/gradle-wrapper.properties diff --git a/examples/llama/android/gradlew b/examples/llm-tool-calling/android/gradlew similarity index 100% rename from examples/llama/android/gradlew rename to examples/llm-tool-calling/android/gradlew diff --git a/examples/llama/android/gradlew.bat b/examples/llm-tool-calling/android/gradlew.bat similarity index 100% rename from examples/llama/android/gradlew.bat rename to examples/llm-tool-calling/android/gradlew.bat diff --git a/examples/llm-tool-calling/android/settings.gradle b/examples/llm-tool-calling/android/settings.gradle new file mode 100644 index 000000000..128ece4b5 --- /dev/null +++ b/examples/llm-tool-calling/android/settings.gradle @@ -0,0 +1,38 @@ +pluginManagement { + includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().toString()) +} +plugins { id("com.facebook.react.settings") } + +extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> + if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') { + ex.autolinkLibrariesFromCommand() + } else { + def command = [ + 'node', + '--no-warnings', + '--eval', + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'react-native-config', + '--json', + '--platform', + 'android' + ].toList() + ex.autolinkLibrariesFromCommand(command) + } +} + +rootProject.name = 'llm_tool_calling' + +dependencyResolutionManagement { + versionCatalogs { + reactAndroidLibs { + from(files(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../gradle/libs.versions.toml"))) + } + } +} + +apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle"); +useExpoModules() + +include ':app' +includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) diff --git a/examples/llm-tool-calling/app.json b/examples/llm-tool-calling/app.json new file mode 100644 index 000000000..da8e522f6 --- /dev/null +++ b/examples/llm-tool-calling/app.json @@ -0,0 +1,47 @@ +{ + "expo": { + "name": "llm_tool_calling", + "slug": "llm_tool_calling", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/icons/icon.png", + "userInterfaceStyle": "light", + "plugins": [ + [ + "expo-font", + { + "fonts": [ + "./assets/fonts/Aeonik-Regular.otf", + "./assets/fonts/Aeonik-Medium.otf" + ] + } + ], + [ + "expo-calendar", + { + "calendarPermission": "The app needs to access your calendar." + } + ] + ], + "newArchEnabled": true, + "splash": { + "image": "./assets/icons/splash.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true, + "bundleIdentifier": "com.anonymous.llmtoolcalling" + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/icons/adaptive-icon.png", + "backgroundColor": "#ffffff" + }, + "package": "com.anonymous.llmtoolcalling" + }, + "web": { + "favicon": "./assets/icons/favicon.png" + } + } +} diff --git a/examples/llama/assets/fonts/Aeonik-Medium.otf b/examples/llm-tool-calling/assets/fonts/Aeonik-Medium.otf similarity index 100% rename from examples/llama/assets/fonts/Aeonik-Medium.otf rename to examples/llm-tool-calling/assets/fonts/Aeonik-Medium.otf diff --git a/examples/llama/assets/fonts/Aeonik-Regular.otf b/examples/llm-tool-calling/assets/fonts/Aeonik-Regular.otf similarity index 100% rename from examples/llama/assets/fonts/Aeonik-Regular.otf rename to examples/llm-tool-calling/assets/fonts/Aeonik-Regular.otf diff --git a/examples/llama/assets/icons/adaptive-icon.png b/examples/llm-tool-calling/assets/icons/adaptive-icon.png similarity index 100% rename from examples/llama/assets/icons/adaptive-icon.png rename to examples/llm-tool-calling/assets/icons/adaptive-icon.png diff --git a/examples/llama/assets/icons/favicon.png b/examples/llm-tool-calling/assets/icons/favicon.png similarity index 100% rename from examples/llama/assets/icons/favicon.png rename to examples/llm-tool-calling/assets/icons/favicon.png diff --git a/examples/llama/assets/icons/icon.png b/examples/llm-tool-calling/assets/icons/icon.png similarity index 100% rename from examples/llama/assets/icons/icon.png rename to examples/llm-tool-calling/assets/icons/icon.png diff --git a/examples/llama/assets/icons/llama_icon.svg b/examples/llm-tool-calling/assets/icons/llama_icon.svg similarity index 100% rename from examples/llama/assets/icons/llama_icon.svg rename to examples/llm-tool-calling/assets/icons/llama_icon.svg diff --git a/examples/llama/assets/icons/pause_icon.svg b/examples/llm-tool-calling/assets/icons/pause_icon.svg similarity index 100% rename from examples/llama/assets/icons/pause_icon.svg rename to examples/llm-tool-calling/assets/icons/pause_icon.svg diff --git a/examples/llama/assets/icons/send_icon.svg b/examples/llm-tool-calling/assets/icons/send_icon.svg similarity index 100% rename from examples/llama/assets/icons/send_icon.svg rename to examples/llm-tool-calling/assets/icons/send_icon.svg diff --git a/examples/llama/assets/icons/splash.png b/examples/llm-tool-calling/assets/icons/splash.png similarity index 100% rename from examples/llama/assets/icons/splash.png rename to examples/llm-tool-calling/assets/icons/splash.png diff --git a/examples/llama/assets/icons/swm_icon.svg b/examples/llm-tool-calling/assets/icons/swm_icon.svg similarity index 100% rename from examples/llama/assets/icons/swm_icon.svg rename to examples/llm-tool-calling/assets/icons/swm_icon.svg diff --git a/examples/llama/babel.config.js b/examples/llm-tool-calling/babel.config.js similarity index 100% rename from examples/llama/babel.config.js rename to examples/llm-tool-calling/babel.config.js diff --git a/examples/llm-tool-calling/index.ts b/examples/llm-tool-calling/index.ts new file mode 100644 index 000000000..018d06f91 --- /dev/null +++ b/examples/llm-tool-calling/index.ts @@ -0,0 +1,8 @@ +import { registerRootComponent } from 'expo'; + +import App from './src/App'; + +// registerRootComponent calls AppRegistry.registerComponent('main', () => App); +// It also ensures that whether you load the app in Expo Go or in a native build, +// the environment is set up appropriately +registerRootComponent(App); diff --git a/examples/llama/ios/.gitignore b/examples/llm-tool-calling/ios/.gitignore similarity index 100% rename from examples/llama/ios/.gitignore rename to examples/llm-tool-calling/ios/.gitignore diff --git a/examples/llama/ios/.xcode.env b/examples/llm-tool-calling/ios/.xcode.env similarity index 100% rename from examples/llama/ios/.xcode.env rename to examples/llm-tool-calling/ios/.xcode.env diff --git a/examples/llm-tool-calling/ios/Podfile b/examples/llm-tool-calling/ios/Podfile new file mode 100644 index 000000000..0f400978c --- /dev/null +++ b/examples/llm-tool-calling/ios/Podfile @@ -0,0 +1,66 @@ +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") +require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") + +require 'json' +podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} + +ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] + +platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' +install! 'cocoapods', + :deterministic_uuids => false + +prepare_react_native_project! + +target 'llmtoolcalling' do + use_expo_modules! + + if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' + config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; + else + config_command = [ + 'node', + '--no-warnings', + '--eval', + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'react-native-config', + '--json', + '--platform', + 'ios' + ] + end + + config = use_native_modules!(config_command) + + use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] + use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] + + use_react_native!( + :path => config[:reactNativePath], + :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/..", + :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', + ) + + post_install do |installer| + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', + ) + + # This is necessary for Xcode 14, because it signs resource bundles by default + # when building for devices. + installer.target_installation_results.pod_target_installation_results + .each do |pod_name, target_installation_result| + target_installation_result.resource_bundle_targets.each do |resource_bundle_target| + resource_bundle_target.build_configurations.each do |config| + config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' + end + end + end + end +end diff --git a/examples/llm-tool-calling/ios/Podfile.lock b/examples/llm-tool-calling/ios/Podfile.lock new file mode 100644 index 000000000..7bca4faae --- /dev/null +++ b/examples/llm-tool-calling/ios/Podfile.lock @@ -0,0 +1,2154 @@ +PODS: + - boost (1.84.0) + - DoubleConversion (1.1.6) + - EXConstants (17.0.8): + - ExpoModulesCore + - Expo (52.0.46): + - ExpoModulesCore + - ExpoAsset (11.0.5): + - ExpoModulesCore + - ExpoBrightness (13.0.3): + - ExpoModulesCore + - ExpoCalendar (14.0.6): + - ExpoModulesCore + - ExpoFileSystem (18.0.12): + - ExpoModulesCore + - ExpoFont (13.0.4): + - ExpoModulesCore + - ExpoKeepAwake (14.0.3): + - ExpoModulesCore + - ExpoModulesCore (2.2.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - fast_float (6.1.4) + - FBLazyVector (0.76.9) + - fmt (11.0.2) + - glog (0.3.5) + - hermes-engine (0.76.9): + - hermes-engine/Pre-built (= 0.76.9) + - hermes-engine/Pre-built (0.76.9) + - opencv-rne (4.11.0) + - RCT-Folly (2024.10.14.00): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly/Default (= 2024.10.14.00) + - RCT-Folly/Default (2024.10.14.00): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly/Fabric (2024.10.14.00): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCTDeprecation (0.76.9) + - RCTRequired (0.76.9) + - RCTTypeSafety (0.76.9): + - FBLazyVector (= 0.76.9) + - RCTRequired (= 0.76.9) + - React-Core (= 0.76.9) + - React (0.76.9): + - React-Core (= 0.76.9) + - React-Core/DevSupport (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) + - React-RCTActionSheet (= 0.76.9) + - React-RCTAnimation (= 0.76.9) + - React-RCTBlob (= 0.76.9) + - React-RCTImage (= 0.76.9) + - React-RCTLinking (= 0.76.9) + - React-RCTNetwork (= 0.76.9) + - React-RCTSettings (= 0.76.9) + - React-RCTText (= 0.76.9) + - React-RCTVibration (= 0.76.9) + - React-callinvoker (0.76.9) + - React-Core (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default (= 0.76.9) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/CoreModulesHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/Default (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/DevSupport (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTActionSheetHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTAnimationHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTBlobHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTImageHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTLinkingHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTNetworkHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTSettingsHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTTextHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTVibrationHeaders (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTWebSocket (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTDeprecation + - React-Core/Default (= 0.76.9) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-CoreModules (0.76.9): + - DoubleConversion + - fast_float + - fmt + - RCT-Folly + - RCTTypeSafety + - React-Core/CoreModulesHeaders + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTBlob + - React-RCTImage + - ReactCodegen + - ReactCommon + - SocketRocket + - React-cxxreact (0.76.9): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-debug + - React-jsi + - React-jsinspector + - React-logger + - React-perflogger + - React-runtimeexecutor + - React-timing + - React-debug (0.76.9) + - React-defaultsnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-domnativemodule + - React-Fabric + - React-featureflags + - React-featureflagsnativemodule + - React-graphics + - React-idlecallbacksnativemodule + - React-ImageManager + - React-microtasksnativemodule + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-domnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.76.9) + - React-Fabric/attributedstring (= 0.76.9) + - React-Fabric/componentregistry (= 0.76.9) + - React-Fabric/componentregistrynative (= 0.76.9) + - React-Fabric/components (= 0.76.9) + - React-Fabric/core (= 0.76.9) + - React-Fabric/dom (= 0.76.9) + - React-Fabric/imagemanager (= 0.76.9) + - React-Fabric/leakchecker (= 0.76.9) + - React-Fabric/mounting (= 0.76.9) + - React-Fabric/observers (= 0.76.9) + - React-Fabric/scheduler (= 0.76.9) + - React-Fabric/telemetry (= 0.76.9) + - React-Fabric/templateprocessor (= 0.76.9) + - React-Fabric/uimanager (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.9) + - React-Fabric/components/root (= 0.76.9) + - React-Fabric/components/view (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric/core (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/dom (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers/events (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager/consistency (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricComponents (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.76.9) + - React-FabricComponents/textlayoutmanager (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.76.9) + - React-FabricComponents/components/iostextinput (= 0.76.9) + - React-FabricComponents/components/modal (= 0.76.9) + - React-FabricComponents/components/rncore (= 0.76.9) + - React-FabricComponents/components/safeareaview (= 0.76.9) + - React-FabricComponents/components/scrollview (= 0.76.9) + - React-FabricComponents/components/text (= 0.76.9) + - React-FabricComponents/components/textinput (= 0.76.9) + - React-FabricComponents/components/unimplementedview (= 0.76.9) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/inputaccessory (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/iostextinput (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/modal (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/rncore (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/safeareaview (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/scrollview (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/text (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/textinput (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/unimplementedview (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/textlayoutmanager (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricImage (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Fabric + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-featureflags (0.76.9) + - React-featureflagsnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-graphics (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-utils + - React-hermes (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-cxxreact + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimeexecutor + - React-idlecallbacksnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-ImageManager (0.76.9): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.76.9): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-cxxreact + - React-debug + - React-jsi + - React-jsi (0.76.9): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-jsiexecutor (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-cxxreact + - React-jsi + - React-jsinspector + - React-perflogger + - React-jsinspector (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - React-featureflags + - React-jsi + - React-perflogger + - React-runtimeexecutor + - React-jsitracing (0.76.9): + - React-jsi + - React-logger (0.76.9): + - glog + - React-Mapbuffer (0.76.9): + - glog + - React-debug + - React-microtasksnativemodule (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-executorch (0.3.2): + - DoubleConversion + - glog + - hermes-engine + - opencv-rne (~> 4.11.0) + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - sqlite3 + - Yoga + - react-native-safe-area-context (4.12.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common (= 4.12.0) + - react-native-safe-area-context/fabric (= 4.12.0) + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/common (4.12.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-safe-area-context/fabric (4.12.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - react-native-safe-area-context/common + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-nativeconfig (0.76.9) + - React-NativeModulesApple (0.76.9): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-jsinspector + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.76.9): + - DoubleConversion + - RCT-Folly (= 2024.10.14.00) + - React-performancetimeline (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - React-cxxreact + - React-timing + - React-RCTActionSheet (0.76.9): + - React-Core/RCTActionSheetHeaders (= 0.76.9) + - React-RCTAnimation (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTAppDelegate (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-nativeconfig + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon + - React-RCTBlob (0.76.9): + - DoubleConversion + - fast_float + - fmt + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTNetwork + - ReactCodegen + - ReactCommon + - React-RCTFabric (0.76.9): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-nativeconfig + - React-performancetimeline + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTImage (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCodegen + - ReactCommon + - React-RCTLinking (0.76.9): + - React-Core/RCTLinkingHeaders (= 0.76.9) + - React-jsi (= 0.76.9) + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - ReactCommon/turbomodule/core (= 0.76.9) + - React-RCTNetwork (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTSettings (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTText (0.76.9): + - React-Core/RCTTextHeaders (= 0.76.9) + - Yoga + - React-RCTVibration (0.76.9): + - RCT-Folly (= 2024.10.14.00) + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-rendererconsistency (0.76.9) + - React-rendererdebug (0.76.9): + - DoubleConversion + - fast_float + - fmt + - RCT-Folly + - React-debug + - React-rncore (0.76.9) + - React-RuntimeApple (0.76.9): + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - React-RuntimeCore (0.76.9): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - React-runtimeexecutor (0.76.9): + - React-jsi (= 0.76.9) + - React-RuntimeHermes (0.76.9): + - hermes-engine + - RCT-Folly/Fabric (= 2024.10.14.00) + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsitracing + - React-nativeconfig + - React-RuntimeCore + - React-utils + - React-runtimescheduler (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-timing + - React-utils + - React-timing (0.76.9) + - React-utils (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - React-debug + - React-jsi (= 0.76.9) + - ReactCodegen (0.76.9): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactCommon (0.76.9): + - ReactCommon/turbomodule (= 0.76.9) + - ReactCommon/turbomodule (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi + - React-logger + - React-perflogger + - ReactCommon/turbomodule/bridging (= 0.76.9) + - ReactCommon/turbomodule/core (= 0.76.9) + - ReactCommon/turbomodule/bridging (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi (= 0.76.9) + - React-logger + - React-perflogger + - ReactCommon/turbomodule/core (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-debug (= 0.76.9) + - React-featureflags (= 0.76.9) + - React-jsi + - React-logger + - React-perflogger + - React-utils (= 0.76.9) + - RNReanimated (3.16.5): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/reanimated (= 3.16.5) + - RNReanimated/worklets (= 3.16.5) + - Yoga + - RNReanimated/reanimated (3.16.5): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNReanimated/reanimated/apple (= 3.16.5) + - Yoga + - RNReanimated/reanimated/apple (3.16.5): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNReanimated/worklets (3.16.5): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - RNSVG (15.8.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNSVG/common (= 15.8.0) + - Yoga + - RNSVG/common (15.8.0): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - SocketRocket (0.7.1) + - sqlite3 (3.49.1): + - sqlite3/common (= 3.49.1) + - sqlite3/common (3.49.1) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - EXConstants (from `../node_modules/expo-constants/ios`) + - Expo (from `../node_modules/expo`) + - ExpoAsset (from `../node_modules/expo-asset/ios`) + - ExpoBrightness (from `../node_modules/expo-brightness/ios`) + - ExpoCalendar (from `../node_modules/expo-calendar/ios`) + - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) + - ExpoFont (from `../node_modules/expo-font/ios`) + - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) + - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - react-native-executorch (from `../node_modules/react-native-executorch`) + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactCodegen (from `build/generated/ios`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - RNReanimated (from `../node_modules/react-native-reanimated`) + - RNSVG (from `../node_modules/react-native-svg`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - opencv-rne + - SocketRocket + - sqlite3 + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + EXConstants: + :path: "../node_modules/expo-constants/ios" + Expo: + :path: "../node_modules/expo" + ExpoAsset: + :path: "../node_modules/expo-asset/ios" + ExpoBrightness: + :path: "../node_modules/expo-brightness/ios" + ExpoCalendar: + :path: "../node_modules/expo-calendar/ios" + ExpoFileSystem: + :path: "../node_modules/expo-file-system/ios" + ExpoFont: + :path: "../node_modules/expo-font/ios" + ExpoKeepAwake: + :path: "../node_modules/expo-keep-awake/ios" + ExpoModulesCore: + :path: "../node_modules/expo-modules-core" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2024-11-12-RNv0.76.2-5b4aa20c719830dcf5684832b89a6edb95ac3d64 + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-defaultsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + react-native-executorch: + :path: "../node_modules/react-native-executorch" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + React-nativeconfig: + :path: "../node_modules/react-native/ReactCommon" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactCodegen: + :path: build/generated/ios + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + RNReanimated: + :path: "../node_modules/react-native-reanimated" + RNSVG: + :path: "../node_modules/react-native-svg" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: 1dca942403ed9342f98334bf4c3621f011aa7946 + DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 + EXConstants: a1f35b9aabbb3c6791f8e67722579b1ffcdd3f18 + Expo: 3e53243e3281214a7d613f8a875c0b732d7512c2 + ExpoAsset: 0687fe05f5d051c4a34dd1f9440bd00858413cfe + ExpoBrightness: d3f54a52ea62b6c4deb81bfb5569a8bc664487ab + ExpoCalendar: 2494a630f176436783a8941efd3c38a9c657ae65 + ExpoFileSystem: c8c19bf80d914c83dda3beb8569d7fb603be0970 + ExpoFont: 773955186469acc5108ff569712a2d243857475f + ExpoKeepAwake: 2a5f15dd4964cba8002c9a36676319a3394c85c7 + ExpoModulesCore: dd965804a882f1dbb6036fceea4d912461aeaa0d + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45 + fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6 + glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a + hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11 + opencv-rne: 2305807573b6e29c8c87e3416ab096d09047a7a0 + RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17 + RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83 + RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716 + RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f + React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d + React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea + React-Core: 0a06707a0b34982efc4a556aff5dae4b22863455 + React-CoreModules: 907334e94314189c2e5eed4877f3efe7b26d85b0 + React-cxxreact: 3a1d5e8f4faa5e09be26614e9c8bbcae8d11b73d + React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964 + React-defaultsnativemodule: 814830ccbc3fb08d67d0190e63b179ee4098c67b + React-domnativemodule: 270acf94bd0960b026bc3bfb327e703665d27fb4 + React-Fabric: 64586dc191fc1c170372a638b8e722e4f1d0a09b + React-FabricComponents: b0ebd032387468ea700574c581b139f57a7497fb + React-FabricImage: 81f0e0794caf25ad1224fa406d288fbc1986607f + React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c + React-featureflagsnativemodule: 0d7091ae344d6160c0557048e127897654a5c00f + React-graphics: cbebe910e4a15b65b0bff94a4d3ed278894d6386 + React-hermes: ec18c10f5a69d49fb9b5e17ae95494e9ea13d4d3 + React-idlecallbacksnativemodule: 6b84add48971da9c40403bd1860d4896462590f2 + React-ImageManager: f2a4c01c2ccb2193e60a20c135da74c7ca4d36f2 + React-jserrorhandler: 61d205b5a7cbc57fed3371dd7eed48c97f49fc64 + React-jsi: 95f7676103137861b79b0f319467627bcfa629ee + React-jsiexecutor: 41e0fe87cda9ea3970ffb872ef10f1ff8dbd1932 + React-jsinspector: 15578208796723e5c6f39069b6e8bf36863ef6e2 + React-jsitracing: 3758cdb155ea7711f0e77952572ea62d90c69f0b + React-logger: dbca7bdfd4aa5ef69431362bde6b36d49403cb20 + React-Mapbuffer: 6efad4a606c1fae7e4a93385ee096681ef0300dc + React-microtasksnativemodule: a645237a841d733861c70b69908ab4a1707b52ad + react-native-executorch: 460895a9b44bba86e89675c4e461b43dd797fab9 + react-native-safe-area-context: 0dfbd139206a79364916959bc8b1a6bea3caba97 + React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678 + React-NativeModulesApple: 958d4f6c5c2ace4c0f427cf7ef82e28ae6538a22 + React-perflogger: 9b4f13c0afe56bc7b4a0e93ec74b1150421ee22d + React-performancetimeline: 359db1cb889aa0282fafc5838331b0987c4915a9 + React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342 + React-RCTAnimation: d8c82deebebe3aaf7a843affac1b57cb2dc073d4 + React-RCTAppDelegate: 1774aa421a29a41a704ecaf789811ef73c4634b6 + React-RCTBlob: 70a58c11a6a3500d1a12f2e51ca4f6c99babcff8 + React-RCTFabric: 731cda82aed592aacce2d32ead69d78cde5d9274 + React-RCTImage: 5e9d655ba6a790c31e3176016f9b47fd0978fbf0 + React-RCTLinking: 2a48338252805091f7521eaf92687206401bdf2a + React-RCTNetwork: 0c1282b377257f6b1c81934f72d8a1d0c010e4c3 + React-RCTSettings: f757b679a74e5962be64ea08d7865a7debd67b40 + React-RCTText: e7d20c490b407d3b4a2daa48db4bcd8ec1032af2 + React-RCTVibration: 8228e37144ca3122a91f1de16ba8e0707159cfec + React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6 + React-rendererdebug: 81becbc8852b38d9b1b68672aa504556481330d5 + React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74 + React-RuntimeApple: 52ed0e9e84a7c2607a901149fb13599a3c057655 + React-RuntimeCore: ca6189d2e53d86db826e2673fe8af6571b8be157 + React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899 + React-RuntimeHermes: 3b752dc5d8a1661c9d1687391d6d96acfa385549 + React-runtimescheduler: 8321bb09175ace2a4f0b3e3834637eb85bf42ebe + React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9 + React-utils: 54df9ada708578c8ad40d92895d6fed03e0e8a9e + ReactCodegen: 21a52ccddc6479448fc91903a437dd23ddc7366c + ReactCommon: bfd3600989d79bc3acbe7704161b171a1480b9fd + RNReanimated: b95559eb62609b22b99f6e7f20cb892c20b393dc + RNSVG: 81d52481cde97ce0dcc81a55b0310723817088d0 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983 + Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a + +PODFILE CHECKSUM: 9378e690c7b699685381b113789d682762e327e8 + +COCOAPODS: 1.16.2 diff --git a/examples/llama/ios/Podfile.properties.json b/examples/llm-tool-calling/ios/Podfile.properties.json similarity index 100% rename from examples/llama/ios/Podfile.properties.json rename to examples/llm-tool-calling/ios/Podfile.properties.json diff --git a/examples/llm-tool-calling/ios/llmtoolcalling.xcodeproj/project.pbxproj b/examples/llm-tool-calling/ios/llmtoolcalling.xcodeproj/project.pbxproj new file mode 100644 index 000000000..768dec2b2 --- /dev/null +++ b/examples/llm-tool-calling/ios/llmtoolcalling.xcodeproj/project.pbxproj @@ -0,0 +1,557 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 3005982B8DC32CB48EF78EC5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0B52B2DEB450994812E2EC3B /* PrivacyInfo.xcprivacy */; }; + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; + 406A6309EE1C4A799B3B9880 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = C709A48F59DB43948B231879 /* noop-file.swift */; }; + 6D2B9F19D14446C4A945050C /* Aeonik-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 24FEB4BB33364BB6A3C512D6 /* Aeonik-Regular.otf */; }; + 96905EF65AED1B983A6B3ABC /* libPods-llmtoolcalling.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-llmtoolcalling.a */; }; + 99D218D3587F49ECA3A88C65 /* Aeonik-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = DDBE6BB31E544E3A9C338A52 /* Aeonik-Medium.otf */; }; + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 0B52B2DEB450994812E2EC3B /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = llmtoolcalling/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* llmtoolcalling.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = llmtoolcalling.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = llmtoolcalling/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = llmtoolcalling/AppDelegate.mm; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = llmtoolcalling/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = llmtoolcalling/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = llmtoolcalling/main.m; sourceTree = ""; }; + 24FEB4BB33364BB6A3C512D6 /* Aeonik-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Aeonik-Regular.otf"; path = "../assets/fonts/Aeonik-Regular.otf"; sourceTree = ""; }; + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-llmtoolcalling.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-llmtoolcalling.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6A588332901449E6A936D29D /* llmtoolcalling-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "llmtoolcalling-Bridging-Header.h"; path = "llmtoolcalling/llmtoolcalling-Bridging-Header.h"; sourceTree = ""; }; + 6C2E3173556A471DD304B334 /* Pods-llmtoolcalling.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-llmtoolcalling.debug.xcconfig"; path = "Target Support Files/Pods-llmtoolcalling/Pods-llmtoolcalling.debug.xcconfig"; sourceTree = ""; }; + 7A4D352CD337FB3A3BF06240 /* Pods-llmtoolcalling.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-llmtoolcalling.release.xcconfig"; path = "Target Support Files/Pods-llmtoolcalling/Pods-llmtoolcalling.release.xcconfig"; sourceTree = ""; }; + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = llmtoolcalling/SplashScreen.storyboard; sourceTree = ""; }; + BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; + C709A48F59DB43948B231879 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "llmtoolcalling/noop-file.swift"; sourceTree = ""; }; + DDBE6BB31E544E3A9C338A52 /* Aeonik-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Aeonik-Medium.otf"; path = "../assets/fonts/Aeonik-Medium.otf"; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-llmtoolcalling/ExpoModulesProvider.swift"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96905EF65AED1B983A6B3ABC /* libPods-llmtoolcalling.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 13B07FAE1A68108700A75B9A /* llmtoolcalling */ = { + isa = PBXGroup; + children = ( + BB2F792B24A3F905000567C9 /* Supporting */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.mm */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB71A68108700A75B9A /* main.m */, + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, + C709A48F59DB43948B231879 /* noop-file.swift */, + 6A588332901449E6A936D29D /* llmtoolcalling-Bridging-Header.h */, + 0B52B2DEB450994812E2EC3B /* PrivacyInfo.xcprivacy */, + ); + name = llmtoolcalling; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-llmtoolcalling.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* llmtoolcalling */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + D65327D7A22EEC0BE12398D9 /* Pods */, + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, + 8E6F45EB2B58431FB9BE3D32 /* Resources */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* llmtoolcalling.app */, + ); + name = Products; + sourceTree = ""; + }; + 8E6F45EB2B58431FB9BE3D32 /* Resources */ = { + isa = PBXGroup; + children = ( + 24FEB4BB33364BB6A3C512D6 /* Aeonik-Regular.otf */, + DDBE6BB31E544E3A9C338A52 /* Aeonik-Medium.otf */, + ); + name = Resources; + path = ""; + sourceTree = ""; + }; + 92DBD88DE9BF7D494EA9DA96 /* llmtoolcalling */ = { + isa = PBXGroup; + children = ( + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */, + ); + name = llmtoolcalling; + sourceTree = ""; + }; + BB2F792B24A3F905000567C9 /* Supporting */ = { + isa = PBXGroup; + children = ( + BB2F792C24A3F905000567C9 /* Expo.plist */, + ); + name = Supporting; + path = llmtoolcalling/Supporting; + sourceTree = ""; + }; + D65327D7A22EEC0BE12398D9 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C2E3173556A471DD304B334 /* Pods-llmtoolcalling.debug.xcconfig */, + 7A4D352CD337FB3A3BF06240 /* Pods-llmtoolcalling.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = { + isa = PBXGroup; + children = ( + 92DBD88DE9BF7D494EA9DA96 /* llmtoolcalling */, + ); + name = ExpoModulesProviders; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* llmtoolcalling */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "llmtoolcalling" */; + buildPhases = ( + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, + F1C846E2DB05505DB3EB8FE0 /* [Expo] Configure project */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, + 67A97A49476D849A48EA2EB7 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = llmtoolcalling; + productName = llmtoolcalling; + productReference = 13B07F961A680F5B00A75B9A /* llmtoolcalling.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1130; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1250; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "llmtoolcalling" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* llmtoolcalling */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, + 6D2B9F19D14446C4A945050C /* Aeonik-Regular.otf in Resources */, + 99D218D3587F49ECA3A88C65 /* Aeonik-Medium.otf in Resources */, + 3005982B8DC32CB48EF78EC5 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; + }; + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-llmtoolcalling-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 67A97A49476D849A48EA2EB7 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-llmtoolcalling/Pods-llmtoolcalling-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/react-native-executorch/ExecutorchLib.framework/ExecutorchLib", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExecutorchLib.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-llmtoolcalling/Pods-llmtoolcalling-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-llmtoolcalling/Pods-llmtoolcalling-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-llmtoolcalling/Pods-llmtoolcalling-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + F1C846E2DB05505DB3EB8FE0 /* [Expo] Configure project */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-llmtoolcalling/expo-configure-project.sh\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, + 406A6309EE1C4A799B3B9880 /* noop-file.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-llmtoolcalling.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = llmtoolcalling/llmtoolcalling.entitlements; + CURRENT_PROJECT_VERSION = 1; + ENABLE_BITCODE = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FB_SONARKIT_ENABLED=1", + ); + INFOPLIST_FILE = llmtoolcalling/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; + PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.llmtoolcalling; + PRODUCT_NAME = llmtoolcalling; + SWIFT_OBJC_BRIDGING_HEADER = "llmtoolcalling/llmtoolcalling-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-llmtoolcalling.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = llmtoolcalling/llmtoolcalling.entitlements; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = llmtoolcalling/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; + PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.llmtoolcalling; + PRODUCT_NAME = llmtoolcalling; + SWIFT_OBJC_BRIDGING_HEADER = "llmtoolcalling/llmtoolcalling-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + USE_HERMES = true; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + USE_HERMES = true; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "llmtoolcalling" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "llmtoolcalling" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/examples/llm-tool-calling/ios/llmtoolcalling.xcodeproj/xcshareddata/xcschemes/llmtoolcalling.xcscheme b/examples/llm-tool-calling/ios/llmtoolcalling.xcodeproj/xcshareddata/xcschemes/llmtoolcalling.xcscheme new file mode 100644 index 000000000..9b8799604 --- /dev/null +++ b/examples/llm-tool-calling/ios/llmtoolcalling.xcodeproj/xcshareddata/xcschemes/llmtoolcalling.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/llm-tool-calling/ios/llmtoolcalling.xcworkspace/contents.xcworkspacedata b/examples/llm-tool-calling/ios/llmtoolcalling.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..f63703e05 --- /dev/null +++ b/examples/llm-tool-calling/ios/llmtoolcalling.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/examples/llama/ios/llama/AppDelegate.h b/examples/llm-tool-calling/ios/llmtoolcalling/AppDelegate.h similarity index 100% rename from examples/llama/ios/llama/AppDelegate.h rename to examples/llm-tool-calling/ios/llmtoolcalling/AppDelegate.h diff --git a/examples/llama/ios/llama/AppDelegate.mm b/examples/llm-tool-calling/ios/llmtoolcalling/AppDelegate.mm similarity index 100% rename from examples/llama/ios/llama/AppDelegate.mm rename to examples/llm-tool-calling/ios/llmtoolcalling/AppDelegate.mm diff --git a/examples/llama/ios/llama/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png similarity index 100% rename from examples/llama/ios/llama/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png rename to examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png diff --git a/examples/llama/ios/llama/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from examples/llama/ios/llama/Images.xcassets/AppIcon.appiconset/Contents.json rename to examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/examples/llama/ios/llama/Images.xcassets/Contents.json b/examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/Contents.json similarity index 100% rename from examples/llama/ios/llama/Images.xcassets/Contents.json rename to examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/Contents.json diff --git a/examples/llama/ios/llama/Images.xcassets/SplashScreenBackground.colorset/Contents.json b/examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenBackground.colorset/Contents.json similarity index 100% rename from examples/llama/ios/llama/Images.xcassets/SplashScreenBackground.colorset/Contents.json rename to examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenBackground.colorset/Contents.json diff --git a/examples/llama/ios/llama/Images.xcassets/SplashScreenLogo.imageset/Contents.json b/examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenLogo.imageset/Contents.json similarity index 100% rename from examples/llama/ios/llama/Images.xcassets/SplashScreenLogo.imageset/Contents.json rename to examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenLogo.imageset/Contents.json diff --git a/examples/llama/ios/llama/Images.xcassets/SplashScreenLogo.imageset/image.png b/examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenLogo.imageset/image.png similarity index 100% rename from examples/llama/ios/llama/Images.xcassets/SplashScreenLogo.imageset/image.png rename to examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenLogo.imageset/image.png diff --git a/examples/llama/ios/llama/Images.xcassets/SplashScreenLogo.imageset/image@2x.png b/examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenLogo.imageset/image@2x.png similarity index 100% rename from examples/llama/ios/llama/Images.xcassets/SplashScreenLogo.imageset/image@2x.png rename to examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenLogo.imageset/image@2x.png diff --git a/examples/llama/ios/llama/Images.xcassets/SplashScreenLogo.imageset/image@3x.png b/examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenLogo.imageset/image@3x.png similarity index 100% rename from examples/llama/ios/llama/Images.xcassets/SplashScreenLogo.imageset/image@3x.png rename to examples/llm-tool-calling/ios/llmtoolcalling/Images.xcassets/SplashScreenLogo.imageset/image@3x.png diff --git a/examples/llm-tool-calling/ios/llmtoolcalling/Info.plist b/examples/llm-tool-calling/ios/llmtoolcalling/Info.plist new file mode 100644 index 000000000..6a7054a06 --- /dev/null +++ b/examples/llm-tool-calling/ios/llmtoolcalling/Info.plist @@ -0,0 +1,87 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + llm_tool_calling + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + com.anonymous.llmtoolcalling + + + + CFBundleVersion + 1 + LSMinimumSystemVersion + 12.0 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + + NSCalendarsFullAccessUsageDescription + The app needs to access your calendar. + NSCalendarsUsageDescription + The app needs to access your calendar. + NSRemindersFullAccessUsageDescription + Allow $(PRODUCT_NAME) to access your reminders + NSRemindersUsageDescription + Allow $(PRODUCT_NAME) to access your reminders + UIAppFonts + + Aeonik-Regular.otf + Aeonik-Medium.otf + + UILaunchStoryboardName + SplashScreen + UIRequiredDeviceCapabilities + + arm64 + + UIRequiresFullScreen + + UIStatusBarStyle + UIStatusBarStyleDefault + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIUserInterfaceStyle + Light + UIViewControllerBasedStatusBarAppearance + + + \ No newline at end of file diff --git a/examples/llama/ios/llama/PrivacyInfo.xcprivacy b/examples/llm-tool-calling/ios/llmtoolcalling/PrivacyInfo.xcprivacy similarity index 100% rename from examples/llama/ios/llama/PrivacyInfo.xcprivacy rename to examples/llm-tool-calling/ios/llmtoolcalling/PrivacyInfo.xcprivacy diff --git a/examples/llama/ios/llama/SplashScreen.storyboard b/examples/llm-tool-calling/ios/llmtoolcalling/SplashScreen.storyboard similarity index 100% rename from examples/llama/ios/llama/SplashScreen.storyboard rename to examples/llm-tool-calling/ios/llmtoolcalling/SplashScreen.storyboard diff --git a/examples/llama/ios/llama/Supporting/Expo.plist b/examples/llm-tool-calling/ios/llmtoolcalling/Supporting/Expo.plist similarity index 100% rename from examples/llama/ios/llama/Supporting/Expo.plist rename to examples/llm-tool-calling/ios/llmtoolcalling/Supporting/Expo.plist diff --git a/examples/llama/ios/llama/llama-Bridging-Header.h b/examples/llm-tool-calling/ios/llmtoolcalling/llmtoolcalling-Bridging-Header.h similarity index 100% rename from examples/llama/ios/llama/llama-Bridging-Header.h rename to examples/llm-tool-calling/ios/llmtoolcalling/llmtoolcalling-Bridging-Header.h diff --git a/examples/llama/ios/llama/llama.entitlements b/examples/llm-tool-calling/ios/llmtoolcalling/llmtoolcalling.entitlements similarity index 65% rename from examples/llama/ios/llama/llama.entitlements rename to examples/llm-tool-calling/ios/llmtoolcalling/llmtoolcalling.entitlements index 578fe0507..f683276c5 100644 --- a/examples/llama/ios/llama/llama.entitlements +++ b/examples/llm-tool-calling/ios/llmtoolcalling/llmtoolcalling.entitlements @@ -1,7 +1,5 @@ - - com.apple.developer.kernel.increased-memory-limit - + \ No newline at end of file diff --git a/examples/llama/ios/llama/main.m b/examples/llm-tool-calling/ios/llmtoolcalling/main.m similarity index 100% rename from examples/llama/ios/llama/main.m rename to examples/llm-tool-calling/ios/llmtoolcalling/main.m diff --git a/examples/llama/ios/llama/noop-file.swift b/examples/llm-tool-calling/ios/llmtoolcalling/noop-file.swift similarity index 100% rename from examples/llama/ios/llama/noop-file.swift rename to examples/llm-tool-calling/ios/llmtoolcalling/noop-file.swift diff --git a/examples/llama/metro.config.js b/examples/llm-tool-calling/metro.config.js similarity index 92% rename from examples/llama/metro.config.js rename to examples/llm-tool-calling/metro.config.js index c659e102f..1ce72df78 100644 --- a/examples/llama/metro.config.js +++ b/examples/llm-tool-calling/metro.config.js @@ -16,7 +16,6 @@ module.exports = (() => { }; config.resolver.assetExts.push('pte'); - config.resolver.assetExts.push('bin'); return config; })(); diff --git a/examples/llm-tool-calling/package.json b/examples/llm-tool-calling/package.json new file mode 100644 index 000000000..557c7da47 --- /dev/null +++ b/examples/llm-tool-calling/package.json @@ -0,0 +1,36 @@ +{ + "name": "llm_tool_calling", + "version": "1.0.0", + "main": "index.ts", + "scripts": { + "start": "expo start", + "android": "expo run:android", + "ios": "expo run:ios", + "web": "expo start --web" + }, + "dependencies": { + "@react-native/metro-config": "^0.76.3", + "expo": "~52.0.46", + "expo-brightness": "~13.0.3", + "expo-calendar": "~14.0.6", + "expo-font": "~13.0.4", + "expo-status-bar": "~2.0.1", + "metro-config": "^0.81.0", + "react": "18.3.1", + "react-native": "0.76.9", + "react-native-executorch": "0.3.2", + "react-native-loading-spinner-overlay": "^3.0.1", + "react-native-markdown-display": "^7.0.2", + "react-native-reanimated": "^3.16.3", + "react-native-safe-area-context": "4.12.0", + "react-native-svg": "15.8.0", + "react-native-svg-transformer": "^1.5.0", + "react-native-wheel-scrollview-picker": "^2.0.6" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@types/react": "~18.3.12", + "typescript": "^5.3.3" + }, + "private": true +} diff --git a/examples/llama/App.tsx b/examples/llm-tool-calling/src/App.tsx similarity index 71% rename from examples/llama/App.tsx rename to examples/llm-tool-calling/src/App.tsx index da18960c6..03765505c 100644 --- a/examples/llama/App.tsx +++ b/examples/llm-tool-calling/src/App.tsx @@ -4,8 +4,8 @@ import ChatScreen from './screens/ChatScreen'; export default function App() { useFonts({ - medium: require('./assets/fonts/Aeonik-Medium.otf'), - regular: require('./assets/fonts/Aeonik-Regular.otf'), + medium: require('../assets/fonts/Aeonik-Medium.otf'), + regular: require('../assets/fonts/Aeonik-Regular.otf'), }); return ( diff --git a/examples/llama/colors.ts b/examples/llm-tool-calling/src/colors.ts similarity index 100% rename from examples/llama/colors.ts rename to examples/llm-tool-calling/src/colors.ts diff --git a/examples/llama/components/AnimatedChatLoading.tsx b/examples/llm-tool-calling/src/components/AnimatedChatLoading.tsx similarity index 100% rename from examples/llama/components/AnimatedChatLoading.tsx rename to examples/llm-tool-calling/src/components/AnimatedChatLoading.tsx diff --git a/examples/llama/components/MarkdownComponent.tsx b/examples/llm-tool-calling/src/components/MarkdownComponent.tsx similarity index 100% rename from examples/llama/components/MarkdownComponent.tsx rename to examples/llm-tool-calling/src/components/MarkdownComponent.tsx diff --git a/examples/llm-tool-calling/src/components/MessageItem.tsx b/examples/llm-tool-calling/src/components/MessageItem.tsx new file mode 100644 index 000000000..3dc4e1373 --- /dev/null +++ b/examples/llm-tool-calling/src/components/MessageItem.tsx @@ -0,0 +1,106 @@ +import React, { memo } from 'react'; +import { + View, + StyleSheet, + TouchableOpacity, + Text, + Platform, +} from 'react-native'; +import MarkdownComponent from './MarkdownComponent'; +import LlamaIcon from '../../assets/icons/llama_icon.svg'; +import ColorPalette from '../colors'; +import { MessageType } from 'react-native-executorch/lib/typescript/types/llm'; + +interface MessageItemProps { + message: MessageType; + deleteMessage: () => void; +} + +const MessageItem = memo(({ message, deleteMessage }: MessageItemProps) => { + return ( + + {message.role === 'assistant' && ( + + + + )} + + + + ); +}); + +const CloseButton = ({ + deleteMessage, + role, +}: { + deleteMessage: () => void; + role: string; +}) => { + return ( + + + + ); +}; + +export default MessageItem; + +const styles = StyleSheet.create({ + aiMessage: { + flexDirection: 'row', + maxWidth: '75%', + alignSelf: 'flex-start', + marginVertical: 8, + alignItems: 'center', + }, + userMessage: { + flexDirection: 'row-reverse', + paddingHorizontal: 12, + paddingVertical: 8, + marginRight: 8, + marginVertical: 8, + maxWidth: '75%', + borderRadius: 8, + backgroundColor: ColorPalette.seaBlueLight, + alignSelf: 'flex-end', + alignItems: 'center', + }, + aiMessageIconContainer: { + backgroundColor: ColorPalette.seaBlueLight, + height: 32, + width: 32, + alignItems: 'center', + justifyContent: 'center', + borderRadius: 16, + marginHorizontal: 7, + }, + closeButton: { + borderRadius: 11, + backgroundColor: ColorPalette.blueLight, + alignItems: 'center', + justifyContent: 'center', + width: 22, + height: 22, + }, + closeButtonRight: { + marginLeft: 8, + }, + closeButtonLeft: { + marginRight: 8, + }, + buttonText: { + fontSize: Platform.OS === 'ios' ? 16 : 14, + color: '#000', + }, +}); diff --git a/examples/llm-tool-calling/src/components/Messages.tsx b/examples/llm-tool-calling/src/components/Messages.tsx new file mode 100644 index 000000000..bd1890fe2 --- /dev/null +++ b/examples/llm-tool-calling/src/components/Messages.tsx @@ -0,0 +1,82 @@ +import { useRef } from 'react'; +import { ScrollView, StyleSheet, View, Text } from 'react-native'; +import AnimatedChatLoading from './AnimatedChatLoading'; +import LlamaIcon from '../../assets/icons/llama_icon.svg'; +import ColorPalette from '../colors'; +import MessageItem from './MessageItem'; +import { MessageType } from 'react-native-executorch'; + +interface MessagesComponentProps { + chatHistory: MessageType[]; + llmResponse: string; + isGenerating: boolean; + deleteMessage: (index: number) => void; +} + +export default function Messages({ + chatHistory, + llmResponse, + isGenerating, + deleteMessage, +}: MessagesComponentProps) { + const scrollViewRef = useRef(null); + + return ( + + scrollViewRef?.current?.scrollToEnd()} + > + true}> + {chatHistory.map((message, index) => ( + deleteMessage(index)} + /> + ))} + {isGenerating && ( + + + + + {!llmResponse ? ( + + + + ) : ( + {llmResponse.trim()} + )} + + )} + + + + ); +} + +const styles = StyleSheet.create({ + chatContainer: { flex: 1, width: '100%' }, + aiMessage: { + flexDirection: 'row', + maxWidth: '80%', + alignSelf: 'flex-start', + marginVertical: 8, + }, + messageLoadingContainer: { width: 28 }, + aiMessageIconContainer: { + backgroundColor: ColorPalette.seaBlueLight, + height: 32, + width: 32, + alignItems: 'center', + justifyContent: 'center', + borderRadius: 16, + marginHorizontal: 7, + }, + messageText: { + fontSize: 14, + lineHeight: 19.6, + color: ColorPalette.primary, + fontFamily: 'regular', + }, +}); diff --git a/examples/llama/declarations.d.ts b/examples/llm-tool-calling/src/declarations.d.ts similarity index 100% rename from examples/llama/declarations.d.ts rename to examples/llm-tool-calling/src/declarations.d.ts diff --git a/examples/llama/screens/ChatScreen.tsx b/examples/llm-tool-calling/src/screens/ChatScreen.tsx similarity index 63% rename from examples/llama/screens/ChatScreen.tsx rename to examples/llm-tool-calling/src/screens/ChatScreen.tsx index a113ef8ab..56a189910 100644 --- a/examples/llama/screens/ChatScreen.tsx +++ b/examples/llm-tool-calling/src/screens/ChatScreen.tsx @@ -11,50 +11,84 @@ import { View, } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; -import SWMIcon from '../assets/icons/swm_icon.svg'; -import SendIcon from '../assets/icons/send_icon.svg'; +import SWMIcon from '../../assets/icons/swm_icon.svg'; +import SendIcon from '../../assets/icons/send_icon.svg'; import Spinner from 'react-native-loading-spinner-overlay'; -import { LLAMA3_2_1B_QLORA, useLLM } from 'react-native-executorch'; -import PauseIcon from '../assets/icons/pause_icon.svg'; +import { + HAMMER2_1_1_5B, + HAMMER2_1_1_5B_TOKENIZER, + HAMMER2_1_1_5B_TOKENIZER_CONFIG, + useLLM, +} from 'react-native-executorch'; +import PauseIcon from '../../assets/icons/pause_icon.svg'; import ColorPalette from '../colors'; import Messages from '../components/Messages'; -import { MessageType, SenderType } from '../types'; +import * as Brightness from 'expo-brightness'; +import { DEFAULT_SYSTEM_PROMPT } from 'react-native-executorch/src/constants/llmDefaults'; +import * as Calendar from 'expo-calendar'; +import { executeTool, TOOL_DEFINITIONS_PHONE } from './tools'; export default function ChatScreen() { - const [chatHistory, setChatHistory] = useState>([]); const [isTextInputFocused, setIsTextInputFocused] = useState(false); const [userInput, setUserInput] = useState(''); - const llama = useLLM({ - modelSource: LLAMA3_2_1B_QLORA, - tokenizerSource: require('../assets/tokenizer.bin'), - contextWindowLength: 6, + const llm = useLLM({ + modelSource: HAMMER2_1_1_5B, + tokenizerSource: HAMMER2_1_1_5B_TOKENIZER, + tokenizerConfigSource: HAMMER2_1_1_5B_TOKENIZER_CONFIG, + chatConfig: { + systemPrompt: `${DEFAULT_SYSTEM_PROMPT} Current time and date: ${new Date().toString()}`, + }, + toolsConfig: { + tools: TOOL_DEFINITIONS_PHONE, + executeToolCallback: executeTool, + displayToolCalls: true, + }, }); const textInputRef = useRef(null); + useEffect(() => { - if (llama.response && !llama.isGenerating) { - appendToMessageHistory(llama.response, 'assistant'); + if (llm.error) { + console.log('LLM error:', llm.error); } - }, [llama.response, llama.isGenerating]); + }, [llm.error]); - const appendToMessageHistory = (content: string, role: SenderType) => { - setChatHistory((prevHistory) => [...prevHistory, { role, content }]); - }; + // PERMISSIONS + useEffect(() => { + (async () => { + const { status } = await Calendar.requestCalendarPermissionsAsync(); + if (status !== 'granted') { + console.log( + 'No access to calendar! We need this to use app correctly!' + ); + } + })(); + + (async () => { + const { status } = await Brightness.requestPermissionsAsync(); + if (status !== 'granted') { + console.log( + 'No access to brightness! We need this to use app correctly!' + ); + } + })(); + }, []); const sendMessage = async () => { - appendToMessageHistory(userInput.trim(), 'user'); setUserInput(''); textInputRef.current?.clear(); try { - await llama.generate(userInput); + await llm.sendMessage(userInput); } catch (e) { console.error(e); } }; - return !llama.isReady ? ( + return !llm.isReady ? ( ) : ( @@ -66,21 +100,22 @@ export default function ChatScreen() { > - Llama 3.2 1B QLoRA + LLM Tool-calling Demo - {chatHistory.length ? ( + {llm.messageHistory.length ? ( ) : ( Hello! 👋 - What can I help you with? + I can use calendar! Ask me to check it or add an event for you! )} @@ -104,17 +139,15 @@ export default function ChatScreen() { {userInput && ( - !llama.isGenerating && (await sendMessage()) - } + onPress={async () => !llm.isGenerating && (await sendMessage())} > )} - {llama.isGenerating && ( + {llm.isGenerating && ( @@ -161,6 +194,7 @@ const styles = StyleSheet.create({ fontFamily: 'regular', fontSize: 20, lineHeight: 28, + textAlign: 'center', color: ColorPalette.primary, }, bottomContainer: { diff --git a/examples/llm-tool-calling/src/screens/tools.ts b/examples/llm-tool-calling/src/screens/tools.ts new file mode 100644 index 000000000..08aa31f04 --- /dev/null +++ b/examples/llm-tool-calling/src/screens/tools.ts @@ -0,0 +1,213 @@ +import * as Calendar from 'expo-calendar'; +import * as Brightness from 'expo-brightness'; +import { clamp } from 'react-native-reanimated'; +import { ToolCall } from 'react-native-executorch/lib/typescript/types/llm'; +import { Platform } from 'react-native'; + +export const executeTool: (call: ToolCall) => Promise = async ( + call +) => { + switch (call.toolName) { + case 'brightness': + return await brightness(call); + case 'read_calendar': + return await readCalendar(call); + case 'add_event_to_calendar': + return await addEventToCalendar(call); + default: + console.error(`Wrong function! We don't handle it!`); + return null; + } +}; + +export const TOOL_DEFINITIONS_PHONE = [ + { + name: 'brightness', + description: + 'Change screen brightness. Change can be relative (higher/lower) or set to minimal or maximal.', + parameters: { + type: 'dict', + properties: { + relativeChange: { + type: 'number', + description: + 'Relative change of brightness (from 0 to 100). Change should be negative if user asks for less bright screen.', + }, + targetBrightness: { + type: 'number', + description: 'Relative change of brightness (from 0 to 100).', + }, + }, + }, + }, + { + name: 'read_calendar', + description: + 'Read calendar events from now up to given point in time. If nothing is specified leave both empty.', + parameters: { + type: 'dict', + properties: { + timeStart: { + type: 'string', + description: 'Date and time from which we want to read calendar.', + }, + timeEnd: { + type: 'string', + description: 'Date and time to which we want to read calendar.', + }, + }, + required: [], + }, + }, + { + name: 'add_event_to_calendar', + description: 'Schedules event in your calendar at given time.', + parameters: { + type: 'dict', + properties: { + time: { + type: 'string', + description: 'Date and time of an event.', + }, + title: { + type: 'string', + description: 'Title of an event', + }, + }, + required: ['time', 'title'], + }, + }, +]; + +const brightness = async (call: ToolCall) => { + console.log('Changing brightness!', call); + if ( + 'targetBrightness' in call.arguments && + typeof call.arguments.targetBrightness === 'number' + ) { + await Brightness.setBrightnessAsync(call.arguments.targetBrightness / 100); + } else if ( + 'relativeChange' in call.arguments && + typeof call.arguments.relativeChange === 'number' + ) { + await Brightness.setBrightnessAsync( + clamp( + (await Brightness.getBrightnessAsync()) + + call.arguments.relativeChange / 100, + 0, + 1 + ) + ); + } + return null; +}; + +const readCalendar = async (call: ToolCall) => { + console.log('Reading calendar!', call); + + let startTime = Date.parse( + 'timeStart' in call.arguments && + typeof call.arguments.timeStart === 'string' + ? call.arguments.timeStart + : '' + ); + let endTime = Date.parse( + 'timeEnd' in call.arguments && typeof call.arguments.timeEnd === 'string' + ? call.arguments.timeEnd + : '' + ); + + if ( + startTime === endTime || + (Number.isNaN(startTime) && Number.isNaN(endTime)) + ) { + // default to today for empty function calls + let date; + if (Number.isNaN(startTime)) { + date = new Date(); + } else { + date = new Date(startTime); + } + // Set the time to 00:00:00 for the start of the day + startTime = new Date( + date.getFullYear(), + date.getMonth(), + date.getDate(), + 0, + 0, + 0 + ).valueOf(); + + // Set the time to 23:59:59 for the end of the day + endTime = new Date( + date.getFullYear(), + date.getMonth(), + date.getDate(), + 23, + 59, + 59 + ).valueOf(); + } else if (Number.isNaN(startTime) || Number.isNaN(endTime)) { + if (Number.isNaN(startTime)) { + const today = new Date(); + startTime = new Date( + today.getFullYear(), + today.getMonth(), + today.getDate(), + 0, + 0, + 0 + ).valueOf(); + } else if (Number.isNaN(endTime)) { + const today = new Date(); + + endTime = new Date( + today.getFullYear(), + today.getMonth(), + today.getDate(), + 23, + 59, + 59 + ).valueOf(); + } + } + const startDate = new Date(startTime); + const endDate = new Date(endTime); + const calendars = await Calendar.getCalendarsAsync( + Platform.OS === 'ios' ? Calendar.EntityTypes.EVENT : undefined + ); + const events = await Calendar.getEventsAsync( + calendars.map((calendar) => calendar.id), + startDate, + endDate + ); + + const eventsStringRepresentation = events.map( + (event) => `${event.title}, from: ${event.startDate}, to: ${event.endDate}` + ); + return eventsStringRepresentation.join('\n'); +}; + +const addEventToCalendar = async (call: ToolCall) => { + console.log('Adding event to calendar!', call); + if ( + 'time' in call.arguments && + typeof call.arguments.time === 'string' && + 'title' in call.arguments && + typeof call.arguments.title === 'string' + ) { + const calendars = await Calendar.getCalendarsAsync( + Platform.OS === 'ios' ? Calendar.EntityTypes.EVENT : undefined + ); + let startDate = new Date(Date.parse(call.arguments.time)); + const endDate = new Date(startDate); + endDate.setHours(endDate.getHours() + 1); + + await Calendar.createEventAsync(calendars[0].id, { + title: call.arguments.title, + startDate: startDate, + endDate: endDate, + }); + } + return null; +}; diff --git a/examples/llama/tsconfig.json b/examples/llm-tool-calling/tsconfig.json similarity index 100% rename from examples/llama/tsconfig.json rename to examples/llm-tool-calling/tsconfig.json diff --git a/examples/llama/yarn.lock b/examples/llm-tool-calling/yarn.lock similarity index 94% rename from examples/llama/yarn.lock rename to examples/llm-tool-calling/yarn.lock index c39432418..a1c996bc6 100644 --- a/examples/llama/yarn.lock +++ b/examples/llm-tool-calling/yarn.lock @@ -1252,28 +1252,29 @@ __metadata: languageName: node linkType: hard -"@expo/cli@npm:0.22.6": - version: 0.22.6 - resolution: "@expo/cli@npm:0.22.6" +"@expo/cli@npm:0.22.26": + version: 0.22.26 + resolution: "@expo/cli@npm:0.22.26" dependencies: "@0no-co/graphql.web": ^1.0.8 "@babel/runtime": ^7.20.0 "@expo/code-signing-certificates": ^0.0.5 - "@expo/config": ~10.0.4 - "@expo/config-plugins": ~9.0.10 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 "@expo/devcert": ^1.1.2 - "@expo/env": ~0.4.0 - "@expo/image-utils": ^0.6.0 - "@expo/json-file": ^9.0.0 - "@expo/metro-config": ~0.19.8 - "@expo/osascript": ^2.0.31 - "@expo/package-manager": ^1.5.0 - "@expo/plist": ^0.2.0 - "@expo/prebuild-config": ^8.0.23 + "@expo/env": ~0.4.2 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@expo/metro-config": ~0.19.12 + "@expo/osascript": ^2.1.6 + "@expo/package-manager": ^1.7.2 + "@expo/plist": ^0.2.2 + "@expo/prebuild-config": ~8.2.0 "@expo/rudder-sdk-node": ^1.1.1 "@expo/spawn-async": ^1.7.2 + "@expo/ws-tunnel": ^1.0.1 "@expo/xcpretty": ^4.3.0 - "@react-native/dev-middleware": 0.76.5 + "@react-native/dev-middleware": 0.76.9 "@urql/core": ^5.0.6 "@urql/exchange-retry": ^1.3.0 accepts: ^1.3.8 @@ -1312,7 +1313,7 @@ __metadata: requireg: ^0.2.2 resolve: ^1.22.2 resolve-from: ^5.0.0 - resolve.exports: ^2.0.2 + resolve.exports: ^2.0.3 semver: ^7.6.0 send: ^0.19.0 slugify: ^1.3.4 @@ -1329,7 +1330,7 @@ __metadata: ws: ^8.12.1 bin: expo-internal: build/bin/cli - checksum: 426cdd48532d3fe2c0d7661479f95cfbe6edc430fc49012d5d50084637844037154d9004e1f07716b5f5f37dcddc2b4701cfaa8124575aa229a32d6b9cdf6f5c + checksum: 32b79ab6a5ee88487e457e5f74249b2e081889521a89d53b452fbd454652428a08164e933681bf7707f4834f1cf529c3b6eaa9df7a077bc1a7bc026442990bf4 languageName: node linkType: hard @@ -1343,13 +1344,13 @@ __metadata: languageName: node linkType: hard -"@expo/config-plugins@npm:~9.0.10, @expo/config-plugins@npm:~9.0.12": - version: 9.0.12 - resolution: "@expo/config-plugins@npm:9.0.12" +"@expo/config-plugins@npm:~9.0.15": + version: 9.0.16 + resolution: "@expo/config-plugins@npm:9.0.16" dependencies: - "@expo/config-types": ^52.0.0 - "@expo/json-file": ~9.0.0 - "@expo/plist": ^0.2.0 + "@expo/config-types": ^52.0.5 + "@expo/json-file": ~9.0.2 + "@expo/plist": ^0.2.2 "@expo/sdk-runtime-versions": ^1.0.0 chalk: ^4.1.2 debug: ^4.3.5 @@ -1361,13 +1362,13 @@ __metadata: slugify: ^1.6.6 xcode: ^3.0.1 xml2js: 0.6.0 - checksum: 061400bc98f23231578b8ff1f6446d2010b4f768ac80792479973afecd4ceddc01af2880fbae82fbbcbfe7b8fd2a4a03449f8ba414b10a7b31f86945145d8717 + checksum: 717a8868c9a3a718c21461a1679897da5cc6bf97ff0b4b361fed3f453004bad97ac29ba7bd1e24614b04f103af950fb7014bddb23f74e19e7364b0a75591f3c6 languageName: node linkType: hard -"@expo/config-plugins@npm:~9.0.15": - version: 9.0.16 - resolution: "@expo/config-plugins@npm:9.0.16" +"@expo/config-plugins@npm:~9.0.17": + version: 9.0.17 + resolution: "@expo/config-plugins@npm:9.0.17" dependencies: "@expo/config-types": ^52.0.5 "@expo/json-file": ~9.0.2 @@ -1383,14 +1384,29 @@ __metadata: slugify: ^1.6.6 xcode: ^3.0.1 xml2js: 0.6.0 - checksum: 717a8868c9a3a718c21461a1679897da5cc6bf97ff0b4b361fed3f453004bad97ac29ba7bd1e24614b04f103af950fb7014bddb23f74e19e7364b0a75591f3c6 + checksum: 5f415a3f4b399024d904d5c6e7b807d52f0efb6eddd217e458fa7d26d04b882f45462aa525ee8e49d404aecfc508e2a829ebd168f9a3b949a215a33699b0b92f languageName: node linkType: hard -"@expo/config-types@npm:^52.0.0": - version: 52.0.1 - resolution: "@expo/config-types@npm:52.0.1" - checksum: eff316abcf9244b880eb40b6eb51f9924973d833148a30084bf76aa33add144822a97a7eefe0c1c24cce3c4951d21f39b980db247944ce0f9c02b397412a3c48 +"@expo/config-plugins@npm:~9.1.5": + version: 9.1.6 + resolution: "@expo/config-plugins@npm:9.1.6" + dependencies: + "@expo/config-types": ^53.0.0-preview.3 + "@expo/json-file": ~9.1.2 + "@expo/plist": ^0.3.2 + "@expo/sdk-runtime-versions": ^1.0.0 + chalk: ^4.1.2 + debug: ^4.3.5 + getenv: ^1.0.0 + glob: ^10.4.2 + resolve-from: ^5.0.0 + semver: ^7.5.4 + slash: ^3.0.0 + slugify: ^1.6.6 + xcode: ^3.0.1 + xml2js: 0.6.0 + checksum: 0f69bdf137988d0658496f1e83402437b6922feef857e5c87ce6318dbf5dc14c44b011483ae7b8f44ac5d8a12a4f95b818b11d475935b3000d4dbcb8f077e287 languageName: node linkType: hard @@ -1401,6 +1417,13 @@ __metadata: languageName: node linkType: hard +"@expo/config-types@npm:^53.0.0-preview.3": + version: 53.0.0-preview.3 + resolution: "@expo/config-types@npm:53.0.0-preview.3" + checksum: 4a1650a05f2539bae86add5be70466c13b2a998a5e1811709ea9b77169e3b95908fb68f33ad6b62c4762f39b112dbe0a3673bc88de258aed0887bd9002924d0d + languageName: node + linkType: hard + "@expo/config@npm:~10.0.10": version: 10.0.10 resolution: "@expo/config@npm:10.0.10" @@ -1422,14 +1445,35 @@ __metadata: languageName: node linkType: hard -"@expo/config@npm:~10.0.4, @expo/config@npm:~10.0.6": - version: 10.0.6 - resolution: "@expo/config@npm:10.0.6" +"@expo/config@npm:~10.0.11": + version: 10.0.11 + resolution: "@expo/config@npm:10.0.11" + dependencies: + "@babel/code-frame": ~7.10.4 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 + "@expo/json-file": ^9.0.2 + deepmerge: ^4.3.1 + getenv: ^1.0.0 + glob: ^10.4.2 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + resolve-workspace-root: ^2.0.0 + semver: ^7.6.0 + slugify: ^1.3.4 + sucrase: 3.35.0 + checksum: 28f147b84e49d35306769e620f8e19da12f245e8fd08cf8279512f84eaccfdc3ab69f6ce9ea8e603ae3d0e9d994045336eff450f43b89f0b92f63e4914c47f3a + languageName: node + linkType: hard + +"@expo/config@npm:~11.0.3": + version: 11.0.4 + resolution: "@expo/config@npm:11.0.4" dependencies: "@babel/code-frame": ~7.10.4 - "@expo/config-plugins": ~9.0.10 - "@expo/config-types": ^52.0.0 - "@expo/json-file": ^9.0.0 + "@expo/config-plugins": ~9.1.5 + "@expo/config-types": ^53.0.0-preview.3 + "@expo/json-file": ^9.1.2 deepmerge: ^4.3.1 getenv: ^1.0.0 glob: ^10.4.2 @@ -1439,7 +1483,7 @@ __metadata: semver: ^7.6.0 slugify: ^1.3.4 sucrase: 3.35.0 - checksum: c45d51eba65ac7841a1789dd23ace97c1f1cd2eb83835ef6411bf46c3f15fa97019c0b3ccb2848a7f0c734c3eb28ee351b426408e6512c7e999ed6a6186943ff + checksum: 8344a23a0f19bd0ff02ed525f343818d2579a85186f92ea95a14b347f22186c4a401a6b3cb34db5c8286991fd6e00872d0800799353c1cf0f6ae52ca19e0fa9d languageName: node linkType: hard @@ -1463,29 +1507,29 @@ __metadata: languageName: node linkType: hard -"@expo/env@npm:~0.4.0": - version: 0.4.0 - resolution: "@expo/env@npm:0.4.0" +"@expo/env@npm:~0.4.2": + version: 0.4.2 + resolution: "@expo/env@npm:0.4.2" dependencies: chalk: ^4.0.0 debug: ^4.3.4 dotenv: ~16.4.5 dotenv-expand: ~11.0.6 getenv: ^1.0.0 - checksum: b48862546d6b2cadf81f3b4e7e6de484965091c28679404a749b935a928ca8c83610e6a8873df35a88e8fc8fe5d7ae369684616ce5a33328fc235f48df0d76cf + checksum: cc9264e50faf5f38e6253b5c97e775bc8cb29bf8ca37bcd427cbb67dd773a4e62a2bdb030904565bac4644eac89e10fc61206d5aa42e5b1f26acf5ca1f6b9ce9 languageName: node linkType: hard -"@expo/env@npm:~0.4.2": - version: 0.4.2 - resolution: "@expo/env@npm:0.4.2" +"@expo/env@npm:~1.0.3": + version: 1.0.3 + resolution: "@expo/env@npm:1.0.3" dependencies: chalk: ^4.0.0 debug: ^4.3.4 dotenv: ~16.4.5 dotenv-expand: ~11.0.6 getenv: ^1.0.0 - checksum: cc9264e50faf5f38e6253b5c97e775bc8cb29bf8ca37bcd427cbb67dd773a4e62a2bdb030904565bac4644eac89e10fc61206d5aa42e5b1f26acf5ca1f6b9ce9 + checksum: f32d3f6c10e7a8975b339a51bb73f6de620b4ad58e8897d72e3f4f7bb86ae498ccfad9c856cbc0db0b9428a506d86d9714581df46cc94a1c3b82ad580c05bc2a languageName: node linkType: hard @@ -1509,29 +1553,9 @@ __metadata: languageName: node linkType: hard -"@expo/fingerprint@npm:0.11.4": - version: 0.11.4 - resolution: "@expo/fingerprint@npm:0.11.4" - dependencies: - "@expo/spawn-async": ^1.7.2 - arg: ^5.0.2 - chalk: ^4.1.2 - debug: ^4.3.4 - find-up: ^5.0.0 - getenv: ^1.0.0 - minimatch: ^3.0.4 - p-limit: ^3.1.0 - resolve-from: ^5.0.0 - semver: ^7.6.0 - bin: - fingerprint: bin/cli.js - checksum: 8a6018a757dab8159d14715b71b0b9ec1d4b50b5901e8c204ea25eb3703e1de4e71710fe9b5a0a3fb267c62d2b488e0e5ee3477defd8f1656f22565674efe1d8 - languageName: node - linkType: hard - -"@expo/image-utils@npm:^0.6.0": - version: 0.6.3 - resolution: "@expo/image-utils@npm:0.6.3" +"@expo/image-utils@npm:^0.6.5": + version: 0.6.5 + resolution: "@expo/image-utils@npm:0.6.5" dependencies: "@expo/spawn-async": ^1.7.2 chalk: ^4.0.0 @@ -1543,17 +1567,16 @@ __metadata: semver: ^7.6.0 temp-dir: ~2.0.0 unique-string: ~2.0.0 - checksum: 2f55c993698daf7e170b45ff4cbe8cdbeba6a565272195ba54c1e27c4210a3d5a26a6557aa5fe65a60170ae20fce434fadf3aeb9809e2e3fffc009a200098e0e + checksum: f6fe5efd518d84463d767a4fb8a920d8b70779c8d93ba07ef407e0f016452324e3da6cff8292d0e2b436facdaef0073b8d527881e73ff5ba0288b4c942cdb539 languageName: node linkType: hard -"@expo/image-utils@npm:^0.6.5": - version: 0.6.5 - resolution: "@expo/image-utils@npm:0.6.5" +"@expo/image-utils@npm:^0.7.2": + version: 0.7.2 + resolution: "@expo/image-utils@npm:0.7.2" dependencies: "@expo/spawn-async": ^1.7.2 chalk: ^4.0.0 - fs-extra: 9.0.0 getenv: ^1.0.0 jimp-compact: 0.16.1 parse-png: ^2.1.0 @@ -1561,29 +1584,28 @@ __metadata: semver: ^7.6.0 temp-dir: ~2.0.0 unique-string: ~2.0.0 - checksum: f6fe5efd518d84463d767a4fb8a920d8b70779c8d93ba07ef407e0f016452324e3da6cff8292d0e2b436facdaef0073b8d527881e73ff5ba0288b4c942cdb539 + checksum: 23977ca1e57f199dd142e3c06472083c997caa4fd1fe2fb3f5537c28a3668de7e95dd228192f709589d22e3d3869c3b5d4d334012e4acd75bf846426fd07ada0 languageName: node linkType: hard -"@expo/json-file@npm:^9.0.0, @expo/json-file@npm:~9.0.0": - version: 9.0.0 - resolution: "@expo/json-file@npm:9.0.0" +"@expo/json-file@npm:^9.0.2, @expo/json-file@npm:~9.0.2": + version: 9.0.2 + resolution: "@expo/json-file@npm:9.0.2" dependencies: "@babel/code-frame": ~7.10.4 json5: ^2.2.3 write-file-atomic: ^2.3.0 - checksum: 28a3db84a8a90eae901df14519f12d075dfd3ecd1502b07bc7c76b6c5445da0983c8d04651d71e2688722e915b56ab785a7372e23cc8e046e92f795fd36eb9d9 + checksum: 665fb72028e403adcb3ff9d7763ff6fab0ce16eaa1485a6b502daaab709608a9953599cce2f5c46e91b4791bd2380c87eb911deef4161b9d1f3a7631c2630366 languageName: node linkType: hard -"@expo/json-file@npm:^9.0.2, @expo/json-file@npm:~9.0.2": - version: 9.0.2 - resolution: "@expo/json-file@npm:9.0.2" +"@expo/json-file@npm:^9.1.2, @expo/json-file@npm:~9.1.2": + version: 9.1.2 + resolution: "@expo/json-file@npm:9.1.2" dependencies: "@babel/code-frame": ~7.10.4 json5: ^2.2.3 - write-file-atomic: ^2.3.0 - checksum: 665fb72028e403adcb3ff9d7763ff6fab0ce16eaa1485a6b502daaab709608a9953599cce2f5c46e91b4791bd2380c87eb911deef4161b9d1f3a7631c2630366 + checksum: 42d6fd58030641ec2026472858ea6f03c9effc581b38f9064a7e2bcb9b65e49066da270260d47e6283c575a6851a0bdfd77e67719ef4785ebbe2d1a88ddafd94 languageName: node linkType: hard @@ -1613,17 +1635,17 @@ __metadata: languageName: node linkType: hard -"@expo/metro-config@npm:0.19.8, @expo/metro-config@npm:~0.19.8": - version: 0.19.8 - resolution: "@expo/metro-config@npm:0.19.8" +"@expo/metro-config@npm:0.19.12, @expo/metro-config@npm:~0.19.12": + version: 0.19.12 + resolution: "@expo/metro-config@npm:0.19.12" dependencies: "@babel/core": ^7.20.0 "@babel/generator": ^7.20.5 "@babel/parser": ^7.20.0 "@babel/types": ^7.20.0 - "@expo/config": ~10.0.4 - "@expo/env": ~0.4.0 - "@expo/json-file": ~9.0.0 + "@expo/config": ~10.0.11 + "@expo/env": ~0.4.2 + "@expo/json-file": ~9.0.2 "@expo/spawn-async": ^1.7.2 chalk: ^4.1.0 debug: ^4.3.2 @@ -1635,17 +1657,7 @@ __metadata: minimatch: ^3.0.4 postcss: ~8.4.32 resolve-from: ^5.0.0 - checksum: 0146faee1c3be184315260b0d6bd263df17b05dbd042ae49744ca4571f2548bb22b1b67e54d21aaecd5c9232fbf5911f3c3e5eb6807433069422fab37ba0eef4 - languageName: node - linkType: hard - -"@expo/osascript@npm:^2.0.31": - version: 2.1.4 - resolution: "@expo/osascript@npm:2.1.4" - dependencies: - "@expo/spawn-async": ^1.7.2 - exec-async: ^2.2.0 - checksum: d1b757abc83c3e0a2ba8d851bf596e2bf6d3fdbc83010df8afbb0b5e9318a5347f5af394147fb709fe529d75fc3c9749156389bf61213e71d6cc87366c1a8df7 + checksum: 241934860fcf90575de47d67a6de5c701b51e16069a7007c15fac5addc04a66663e66800241aac63635761921829c2c6895217fd2bf6b8d95a00c2e1c664dfc3 languageName: node linkType: hard @@ -1659,26 +1671,6 @@ __metadata: languageName: node linkType: hard -"@expo/package-manager@npm:^1.5.0": - version: 1.6.1 - resolution: "@expo/package-manager@npm:1.6.1" - dependencies: - "@expo/json-file": ^9.0.0 - "@expo/spawn-async": ^1.7.2 - ansi-regex: ^5.0.0 - chalk: ^4.0.0 - find-up: ^5.0.0 - js-yaml: ^3.13.1 - micromatch: ^4.0.8 - npm-package-arg: ^11.0.0 - ora: ^3.4.0 - resolve-workspace-root: ^2.0.0 - split: ^1.0.1 - sudo-prompt: 9.1.1 - checksum: 5271d9e1eb83d42b353c0412b422bf5bcf16181b32ad3d1f24291e9f111d4ac18d0bd120d7aae524f07880b020eaefd51ef7439cfdc8dd3c07add983ed38e32b - languageName: node - linkType: hard - "@expo/package-manager@npm:^1.7.2": version: 1.7.2 resolution: "@expo/package-manager@npm:1.7.2" @@ -1699,17 +1691,6 @@ __metadata: languageName: node linkType: hard -"@expo/plist@npm:^0.2.0": - version: 0.2.0 - resolution: "@expo/plist@npm:0.2.0" - dependencies: - "@xmldom/xmldom": ~0.7.7 - base64-js: ^1.2.3 - xmlbuilder: ^14.0.0 - checksum: f2714a33789451d97d7d4d3699ef0d687cc5c734aedce844f568165f12671aeeb26044eb6cf6fd8ec0cc4da76069019fc510286bd52daa5b509d82e7ce6beb9f - languageName: node - linkType: hard - "@expo/plist@npm:^0.2.2": version: 0.2.2 resolution: "@expo/plist@npm:0.2.2" @@ -1721,22 +1702,14 @@ __metadata: languageName: node linkType: hard -"@expo/prebuild-config@npm:^8.0.23": - version: 8.0.23 - resolution: "@expo/prebuild-config@npm:8.0.23" +"@expo/plist@npm:^0.3.2": + version: 0.3.2 + resolution: "@expo/plist@npm:0.3.2" dependencies: - "@expo/config": ~10.0.4 - "@expo/config-plugins": ~9.0.10 - "@expo/config-types": ^52.0.0 - "@expo/image-utils": ^0.6.0 - "@expo/json-file": ^9.0.0 - "@react-native/normalize-colors": 0.76.5 - debug: ^4.3.1 - fs-extra: ^9.0.0 - resolve-from: ^5.0.0 - semver: ^7.6.0 - xml2js: 0.6.0 - checksum: d48c00820f37d1ff4226e7ec94d3df6082f537345a10b39da27b8d345b2e861a76df7ed6c05695f897f086a713c460756401f474eec8741e01c84d3df4b30674 + "@xmldom/xmldom": ^0.8.8 + base64-js: ^1.2.3 + xmlbuilder: ^15.1.1 + checksum: ae7d1beb998ce0df5fb61e206685190b3a6392f4b84f08ebd3581246899c07188d4ec6c1774039fbcf2e2966c056444c3fd7c1dc7aaedc3a0e9e6a45669fd3bf languageName: node linkType: hard @@ -1759,6 +1732,25 @@ __metadata: languageName: node linkType: hard +"@expo/prebuild-config@npm:~8.2.0": + version: 8.2.0 + resolution: "@expo/prebuild-config@npm:8.2.0" + dependencies: + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@react-native/normalize-colors": 0.76.9 + debug: ^4.3.1 + fs-extra: ^9.0.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + xml2js: 0.6.0 + checksum: 5c9d194e63cc4ec9ba3076179832ce928208e09846981cccc6f07e70742b1d7a29bf7594788543578ced75a42fbc0d4a624c4bd7af73e755d220170090f0b2e5 + languageName: node + linkType: hard + "@expo/rudder-sdk-node@npm:^1.1.1": version: 1.1.1 resolution: "@expo/rudder-sdk-node@npm:1.1.1" @@ -2068,26 +2060,10 @@ __metadata: languageName: node linkType: hard -"@react-native/assets-registry@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/assets-registry@npm:0.76.3" - checksum: 0a5c3d63eec8ce9e29be9e0cca6aa0bc62580b9820caf948fc44574be75e166b836caa1cd4b53550c880996b36389fb8f2b18652c3e6abeddecc9ca835cd9296 - languageName: node - linkType: hard - -"@react-native/assets-registry@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/assets-registry@npm:0.76.7" - checksum: f197582ad2e2964f5a6afa5a8945b368b7a6fe05cd9fac78e4832ad969cd8b5ad72e048f0c652ce5b4dd1ed7bf28e36254e49d3b7317b16d4481600482259048 - languageName: node - linkType: hard - -"@react-native/babel-plugin-codegen@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/babel-plugin-codegen@npm:0.76.3" - dependencies: - "@react-native/codegen": 0.76.3 - checksum: db24d3d7f89d1aca30fd1a5050deb86982aba54c7df5ac5dc73bcae4ba07275a08af92db1ae383e44366ba206f941333d2a972672db8a57cbd825f4bacea5c0c +"@react-native/assets-registry@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/assets-registry@npm:0.76.9" + checksum: 07e7da7a20745b6bdea99620e50d69c76219b7232b21cc43982696123a330cebd9d24e1a4be2a61588ab3af5155557e651267dfad9c91ad0bc8e098e6e7ad38f languageName: node linkType: hard @@ -2109,9 +2085,18 @@ __metadata: languageName: node linkType: hard -"@react-native/babel-preset@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/babel-preset@npm:0.76.3" +"@react-native/babel-plugin-codegen@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/babel-plugin-codegen@npm:0.76.9" + dependencies: + "@react-native/codegen": 0.76.9 + checksum: 13bba234a6c9e29fa4f7bf13a23ce8aecc5fc00da6cef6f6dd0462f82cdfeeeca62842c054ffe626662a92326774bf22723a90be5ac2158990386422ceee96c5 + languageName: node + linkType: hard + +"@react-native/babel-preset@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/babel-preset@npm:0.76.5" dependencies: "@babel/core": ^7.25.2 "@babel/plugin-proposal-export-default-from": ^7.24.7 @@ -2154,19 +2139,19 @@ __metadata: "@babel/plugin-transform-typescript": ^7.25.2 "@babel/plugin-transform-unicode-regex": ^7.24.7 "@babel/template": ^7.25.0 - "@react-native/babel-plugin-codegen": 0.76.3 + "@react-native/babel-plugin-codegen": 0.76.5 babel-plugin-syntax-hermes-parser: ^0.25.1 babel-plugin-transform-flow-enums: ^0.0.2 react-refresh: ^0.14.0 peerDependencies: "@babel/core": "*" - checksum: 012476667ad1596a0ae45b0b0d0404af724766aa170b22a80f56c4302060e2f5b90bef24a41aef2dd12cbe672a31b8c5c13f72b974cfaad004aef452ac17995c + checksum: 1e693e1ce051634bab055a147d7db1a4bb4368d09c98736bfdfe0a50a0d3fda9125ce10279e4da67a435d4f8a18995c111fe91e8bb66b6889ae0ef4184b70542 languageName: node linkType: hard -"@react-native/babel-preset@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/babel-preset@npm:0.76.5" +"@react-native/babel-preset@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/babel-preset@npm:0.76.7" dependencies: "@babel/core": ^7.25.2 "@babel/plugin-proposal-export-default-from": ^7.24.7 @@ -2209,19 +2194,19 @@ __metadata: "@babel/plugin-transform-typescript": ^7.25.2 "@babel/plugin-transform-unicode-regex": ^7.24.7 "@babel/template": ^7.25.0 - "@react-native/babel-plugin-codegen": 0.76.5 + "@react-native/babel-plugin-codegen": 0.76.7 babel-plugin-syntax-hermes-parser: ^0.25.1 babel-plugin-transform-flow-enums: ^0.0.2 react-refresh: ^0.14.0 peerDependencies: "@babel/core": "*" - checksum: 1e693e1ce051634bab055a147d7db1a4bb4368d09c98736bfdfe0a50a0d3fda9125ce10279e4da67a435d4f8a18995c111fe91e8bb66b6889ae0ef4184b70542 + checksum: 29b48f80d32839d03f17d938e3f2b34f213d6ac3155de9556016132d4e3b9d55ce2b3d18fcd596ba6507f6bbe64174a76c5e94cc3737b39f00467c455de6b2d4 languageName: node linkType: hard -"@react-native/babel-preset@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/babel-preset@npm:0.76.7" +"@react-native/babel-preset@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/babel-preset@npm:0.76.9" dependencies: "@babel/core": ^7.25.2 "@babel/plugin-proposal-export-default-from": ^7.24.7 @@ -2264,31 +2249,13 @@ __metadata: "@babel/plugin-transform-typescript": ^7.25.2 "@babel/plugin-transform-unicode-regex": ^7.24.7 "@babel/template": ^7.25.0 - "@react-native/babel-plugin-codegen": 0.76.7 + "@react-native/babel-plugin-codegen": 0.76.9 babel-plugin-syntax-hermes-parser: ^0.25.1 babel-plugin-transform-flow-enums: ^0.0.2 react-refresh: ^0.14.0 peerDependencies: "@babel/core": "*" - checksum: 29b48f80d32839d03f17d938e3f2b34f213d6ac3155de9556016132d4e3b9d55ce2b3d18fcd596ba6507f6bbe64174a76c5e94cc3737b39f00467c455de6b2d4 - languageName: node - linkType: hard - -"@react-native/codegen@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/codegen@npm:0.76.3" - dependencies: - "@babel/parser": ^7.25.3 - glob: ^7.1.1 - hermes-parser: 0.23.1 - invariant: ^2.2.4 - jscodeshift: ^0.14.0 - mkdirp: ^0.5.1 - nullthrows: ^1.1.1 - yargs: ^17.6.2 - peerDependencies: - "@babel/preset-env": ^7.1.6 - checksum: 5e9677695dcddabcd045ee448472cdecb13d6db216d021a21e29830487cfaef790ff6c1e59de06a7d70d18cc816dcd939c2cbbfa5c58b78b27d04f3cbacbc5ac + checksum: b48ac1195d4b52a14134f3dbfa26771aa66db0b787ebced6153d7c60802f1b959a3cf07b873da1b085e7db9b527507d1111302bb177ad52d7c77d635b6f3805b languageName: node linkType: hard @@ -2328,36 +2295,30 @@ __metadata: languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/community-cli-plugin@npm:0.76.3" +"@react-native/codegen@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/codegen@npm:0.76.9" dependencies: - "@react-native/dev-middleware": 0.76.3 - "@react-native/metro-babel-transformer": 0.76.3 - chalk: ^4.0.0 - execa: ^5.1.1 + "@babel/parser": ^7.25.3 + glob: ^7.1.1 + hermes-parser: 0.23.1 invariant: ^2.2.4 - metro: ^0.81.0 - metro-config: ^0.81.0 - metro-core: ^0.81.0 - node-fetch: ^2.2.0 - readline: ^1.3.0 - semver: ^7.1.3 + jscodeshift: ^0.14.0 + mkdirp: ^0.5.1 + nullthrows: ^1.1.1 + yargs: ^17.6.2 peerDependencies: - "@react-native-community/cli-server-api": "*" - peerDependenciesMeta: - "@react-native-community/cli-server-api": - optional: true - checksum: 7d3c76ac702f97a8d75ad1d8e0cedfef7061ed25ed26dde7d39214a26a42b8c594bc8ba9d1cfa8e83fae0069828340b207c771677431619bd1039aa99d9d8032 + "@babel/preset-env": ^7.1.6 + checksum: fcb26bd5be6f923eafd05e356ab01c9bbd30cab5e950bb050312a651771bcb2cb8484a3ba511e1460d44f508700565b0b69d43039c8cc61e63b9eacca6b9c756 languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/community-cli-plugin@npm:0.76.7" +"@react-native/community-cli-plugin@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/community-cli-plugin@npm:0.76.9" dependencies: - "@react-native/dev-middleware": 0.76.7 - "@react-native/metro-babel-transformer": 0.76.7 + "@react-native/dev-middleware": 0.76.9 + "@react-native/metro-babel-transformer": 0.76.9 chalk: ^4.0.0 execa: ^5.1.1 invariant: ^2.2.4 @@ -2368,25 +2329,11 @@ __metadata: readline: ^1.3.0 semver: ^7.1.3 peerDependencies: - "@react-native-community/cli-server-api": "*" + "@react-native-community/cli": "*" peerDependenciesMeta: - "@react-native-community/cli-server-api": + "@react-native-community/cli": optional: true - checksum: e6bfaf10dc941388b4342335ba3058728cd48b11315bd419012540ca5a3b5f1141fa42b61eff8271ccbe127d33a4f2b4de5956c9d2225fc1dff27e9846592670 - languageName: node - linkType: hard - -"@react-native/debugger-frontend@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/debugger-frontend@npm:0.76.3" - checksum: 549fea784b9e03a0e4bb05befea92af096705595e34fa6540873b1f00641ceaac3dafaeda212dd80d049f82d0929852c7fb1870bd823158ad780a5c2edfdcf0a - languageName: node - linkType: hard - -"@react-native/debugger-frontend@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/debugger-frontend@npm:0.76.5" - checksum: 4f8529ea55f9f1668feb6ff764bcd3917fd38f53fc3b79ec2790b5a741d6746a9534922f22f5366720cea2b78d344c15d43c0439d94cb39970ccae5d1fd24a82 + checksum: 1c0c054d20b3b4c978928e80aa5e56cadeb8dfc1c80a374f67a23e80e2acac0fff5aea0b3f6413483f1ba2bad6a65749e8105dd0ebf2dcd6b045f88e3d7c8d24 languageName: node linkType: hard @@ -2397,50 +2344,39 @@ __metadata: languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/dev-middleware@npm:0.76.3" - dependencies: - "@isaacs/ttlcache": ^1.4.1 - "@react-native/debugger-frontend": 0.76.3 - chrome-launcher: ^0.15.2 - chromium-edge-launcher: ^0.2.0 - connect: ^3.6.5 - debug: ^2.2.0 - nullthrows: ^1.1.1 - open: ^7.0.3 - selfsigned: ^2.4.1 - serve-static: ^1.13.1 - ws: ^6.2.3 - checksum: 77acfecd6b59594d892afb63efcc54474a38278f233db6163bdf66329603bdb485dc304e0c9a58c5c19c1d7397cfb6b76f08bd5f136d130052db9d73ae6b74b5 +"@react-native/debugger-frontend@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/debugger-frontend@npm:0.76.9" + checksum: c537ae5be75bb9a0a549d88b6545762364d87a1166c8a7339ccd774257096a2c62f83efdd86c78553a3f1c4ef35cfa7708aba477bf6eeb76b7814ceab2b98069 languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/dev-middleware@npm:0.76.5" +"@react-native/dev-middleware@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/dev-middleware@npm:0.76.7" dependencies: "@isaacs/ttlcache": ^1.4.1 - "@react-native/debugger-frontend": 0.76.5 + "@react-native/debugger-frontend": 0.76.7 chrome-launcher: ^0.15.2 chromium-edge-launcher: ^0.2.0 connect: ^3.6.5 debug: ^2.2.0 + invariant: ^2.2.4 nullthrows: ^1.1.1 open: ^7.0.3 selfsigned: ^2.4.1 serve-static: ^1.13.1 ws: ^6.2.3 - checksum: cfd8fbf0d2482e7b1f1c4da5b9d8b388be1cc4ffcd0c097ae5f8df3d6594c8e0feaa7e331383467d70c6d63341478132761d551475d7cd46a3696465bdc01439 + checksum: cc23a959299cd97e0960915a211ebe36a3c36161111bd8f627a5ab6c78a98ddbb893ac52313d6cd11b4c0c35324b8f2a0806676e255e2b0bf578e0aab71414a2 languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/dev-middleware@npm:0.76.7" +"@react-native/dev-middleware@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/dev-middleware@npm:0.76.9" dependencies: "@isaacs/ttlcache": ^1.4.1 - "@react-native/debugger-frontend": 0.76.7 + "@react-native/debugger-frontend": 0.76.9 chrome-launcher: ^0.15.2 chromium-edge-launcher: ^0.2.0 connect: ^3.6.5 @@ -2451,28 +2387,14 @@ __metadata: selfsigned: ^2.4.1 serve-static: ^1.13.1 ws: ^6.2.3 - checksum: cc23a959299cd97e0960915a211ebe36a3c36161111bd8f627a5ab6c78a98ddbb893ac52313d6cd11b4c0c35324b8f2a0806676e255e2b0bf578e0aab71414a2 + checksum: 1f7750ae0c4d4d7970a73cd4f8443004a93b91b998a003ddb965274eb718d2a70ff06d182903dcaeccf15d8d245f488a397ea8ae53f6ed5f25e4d476d844b90f languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/gradle-plugin@npm:0.76.3" - checksum: 7bde3ae9cbf21f59adc5583cfe25d245ca2921f50d50361e763a59bb02398206c93e61c935a4605609de7e1fe49450594ff56b0b9ccecc07065dbe4c9e9217c6 - languageName: node - linkType: hard - -"@react-native/gradle-plugin@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/gradle-plugin@npm:0.76.7" - checksum: 4a0b1150a9338ade0fb75a036b63d681243ab93c19dea676ac02c59f7b16b28fafe8e2e6106ff0de33d0ad4a1ac358eb90fa9a2b6e9bbc55ffb449f1098329db - languageName: node - linkType: hard - -"@react-native/js-polyfills@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/js-polyfills@npm:0.76.3" - checksum: a33145ee39fe9de0e8b4b3a25cd263d775fe14ac3c4f77c4dc6a77a60c06febacdcefd7271c9aaa2a13336bada413601e3fa3de51eb7e44387b53055d99a1b69 +"@react-native/gradle-plugin@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/gradle-plugin@npm:0.76.9" + checksum: afc6010cf278ed7dba58fb67cb789965edb6cfb3608e54b518232ef46b651f541915b7f6eae0b298457ccd8626213c687962ec250143e714de5e3bd2dc6dc210 languageName: node linkType: hard @@ -2483,24 +2405,10 @@ __metadata: languageName: node linkType: hard -"@react-native/js-polyfills@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/js-polyfills@npm:0.76.7" - checksum: 6dbf035366c6a22e8f868c2e1f69ea6340d8e975e0d9ae6db6c469a37f58bdcdceb355684b3af53d3e76d7d7ff0db56dd6a5be39c9e54d7973c3256b80f1170e - languageName: node - linkType: hard - -"@react-native/metro-babel-transformer@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/metro-babel-transformer@npm:0.76.3" - dependencies: - "@babel/core": ^7.25.2 - "@react-native/babel-preset": 0.76.3 - hermes-parser: 0.23.1 - nullthrows: ^1.1.1 - peerDependencies: - "@babel/core": "*" - checksum: 26be14f178dbfac8f8c75c8c2a87e582e274f4f8fc8f8860e804de042167238b80d8606a1357296240aa59085a9275e4be6797a80afdeed2cbcaa7cf7d8c1793 +"@react-native/js-polyfills@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/js-polyfills@npm:0.76.9" + checksum: c49aac99f6973b102a9013632c204f02a57d96da500901bc6730ab96f56950d6924417e39c87be640a3a59b67e1af2583432361f55bf42c959aff02a285bcafc languageName: node linkType: hard @@ -2518,17 +2426,17 @@ __metadata: languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/metro-babel-transformer@npm:0.76.7" +"@react-native/metro-babel-transformer@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/metro-babel-transformer@npm:0.76.9" dependencies: "@babel/core": ^7.25.2 - "@react-native/babel-preset": 0.76.7 + "@react-native/babel-preset": 0.76.9 hermes-parser: 0.23.1 nullthrows: ^1.1.1 peerDependencies: "@babel/core": "*" - checksum: 26af0564de9bc6c734dd5a08699d74ccded819c7afc0841b4a04e415ed7c4d2ea6f51edb3df23e86da8bd7601db8df38daf16aa83363c2aafee4dd4faf65857d + checksum: cb38d150e30b3e07e2cb8e637e26b4dcb8b58d6accc95f51e507baea94bb970a0077573c319849a3e7d9bf976dadc39cf363bb505f53de1a209e1bb9ea0428f8 languageName: node linkType: hard @@ -2544,20 +2452,6 @@ __metadata: languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/normalize-colors@npm:0.76.3" - checksum: 71ce0cbaa52fc87552b0ad83dd3ebd0a76253b7aacdc82ead09a0ada6349457b9927ed10452cb63b89fc18d793852eafaec18f2c79603dbf9dcadb676b2db477 - languageName: node - linkType: hard - -"@react-native/normalize-colors@npm:0.76.5": - version: 0.76.5 - resolution: "@react-native/normalize-colors@npm:0.76.5" - checksum: 88758b7cbed118c520ab1d5ebad37198527aa98b503fe003d956059fff9171c22e248a1b227ab87a02be574080271900e03ac71fdc3f1233c3ca4e5a6c6746b7 - languageName: node - linkType: hard - "@react-native/normalize-colors@npm:0.76.7": version: 0.76.7 resolution: "@react-native/normalize-colors@npm:0.76.7" @@ -2565,26 +2459,16 @@ __metadata: languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/virtualized-lists@npm:0.76.3" - dependencies: - invariant: ^2.2.4 - nullthrows: ^1.1.1 - peerDependencies: - "@types/react": ^18.2.6 - react: "*" - react-native: "*" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: b84df110406651a025b9d798cb4511bc7c6db37b44ec885c92bbbc9a220bdd77837a13116d54fe59c16d35ffff013e3c87c28ffa870eb9b9f840d779cef68f90 +"@react-native/normalize-colors@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/normalize-colors@npm:0.76.9" + checksum: 4fddb977b8aad2e848cb698f13b9ffec539668e8ae891846327d5e23ce3de13dea59a2dfbea8a154ea034791c7abc3f7d1d4c8caae2114f7a683c78b221aed36 languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/virtualized-lists@npm:0.76.7" +"@react-native/virtualized-lists@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/virtualized-lists@npm:0.76.9" dependencies: invariant: ^2.2.4 nullthrows: ^1.1.1 @@ -2595,7 +2479,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: a25311d70a3ebb6fddd0e5257c9be3f24e7e67e0a86ed17864ff93cfb77d849a952996a613473bc9a6851e0eac16a1d45ac71a3a43719226851e4910907d726f + checksum: 697a04bdf4b5f430164bf666bf60cd0207f4d3fb06b0a62d7c39b54c166973b29c73640e5c1a44f1c6891d93398bedd63eb8addcbe78641d7ebb13b9ab022052 languageName: node linkType: hard @@ -3308,9 +3192,9 @@ __metadata: languageName: node linkType: hard -"babel-preset-expo@npm:~12.0.4": - version: 12.0.4 - resolution: "babel-preset-expo@npm:12.0.4" +"babel-preset-expo@npm:~12.0.11": + version: 12.0.11 + resolution: "babel-preset-expo@npm:12.0.11" dependencies: "@babel/plugin-proposal-decorators": ^7.12.9 "@babel/plugin-transform-export-namespace-from": ^7.22.11 @@ -3318,7 +3202,7 @@ __metadata: "@babel/plugin-transform-parameters": ^7.22.15 "@babel/preset-react": ^7.22.15 "@babel/preset-typescript": ^7.23.0 - "@react-native/babel-preset": 0.76.5 + "@react-native/babel-preset": 0.76.9 babel-plugin-react-native-web: ~0.19.13 react-refresh: ^0.14.2 peerDependencies: @@ -3329,7 +3213,7 @@ __metadata: optional: true react-compiler-runtime: optional: true - checksum: 1f5160789ef758c8a31a41f6f32f35cdd10fb88db8a6e8564fc30009ceb5b23428d182e6e3fbbb038e445f19af14ec5ea79d4a684de2ee66bf72eb2c66833e9c + checksum: 8ff4437a5e3ea229c22ad2de645abc452f05fe55bc72b2586e4cfe675fcc6b3c83779c1a18343364d200b988cac5e60eed6e616a29eb1446e2294236f9f60d3f languageName: node linkType: hard @@ -4506,7 +4390,21 @@ __metadata: languageName: node linkType: hard -"expo-asset@npm:^11.0.3, expo-asset@npm:~11.0.4": +"expo-asset@npm:^11.0.3": + version: 11.1.2 + resolution: "expo-asset@npm:11.1.2" + dependencies: + "@expo/image-utils": ^0.7.2 + expo-constants: ~17.1.2 + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 7091ba241a339882245ec6150c1bb32eefe7756b55a3547b3b25f1af519108798f599bfa6aa5f20ca459a237dba1f03b583bb446b8fa38dda5a0c7ea85b79499 + languageName: node + linkType: hard + +"expo-asset@npm:~11.0.4": version: 11.0.4 resolution: "expo-asset@npm:11.0.4" dependencies: @@ -4522,32 +4420,39 @@ __metadata: languageName: node linkType: hard -"expo-asset@npm:~11.0.1": - version: 11.0.1 - resolution: "expo-asset@npm:11.0.1" +"expo-asset@npm:~11.0.5": + version: 11.0.5 + resolution: "expo-asset@npm:11.0.5" dependencies: - "@expo/image-utils": ^0.6.0 - expo-constants: ~17.0.0 + "@expo/image-utils": ^0.6.5 + expo-constants: ~17.0.8 invariant: ^2.2.4 md5-file: ^3.2.3 peerDependencies: expo: "*" react: "*" react-native: "*" - checksum: 4ad7f64b270b845f2ff6bf738859726b10a90fe08b13e83d8c87defaf86cb9d69e018f73afbbcc7e85c7ea4110895d893184cdb60b2791b0debc2eda55ce003c + checksum: 7650dc032f76b0924eedaf24dee135b293e5c3258e0a9e43a6db7c93ef40ea6b6d6a47432bf80f3051f3b62e40a6ccb25e8acca820baa791d52a2e95432868bc languageName: node linkType: hard -"expo-constants@npm:~17.0.0, expo-constants@npm:~17.0.3": - version: 17.0.3 - resolution: "expo-constants@npm:17.0.3" - dependencies: - "@expo/config": ~10.0.4 - "@expo/env": ~0.4.0 +"expo-brightness@npm:~13.0.3": + version: 13.0.3 + resolution: "expo-brightness@npm:13.0.3" peerDependencies: expo: "*" react-native: "*" - checksum: 96ef0469771f927dc4224a0ade609994c50638364335d56e9881506f56f5aea176b70e62bc5f5aedb5884b818e952ed76603d00ca6d9def21dc403c80ea2c297 + checksum: 66e55dbdaf87c82c75105083e39a50690e4fe165ccc44f09db868bfdc4be2b17a0210f944d85afbf966fb7a765834a8958fc0dce3975e4899868a409887d2d0d + languageName: node + linkType: hard + +"expo-calendar@npm:~14.0.6": + version: 14.0.6 + resolution: "expo-calendar@npm:14.0.6" + peerDependencies: + expo: "*" + react-native: "*" + checksum: b879b4c3241285d33ab746adab63f39d321b0f31e6968205a3012217e4efe034eca2eba9ded59b12f3c53632ad358741ef8dcc7eb5bd1b1b45045497284c02c0 languageName: node linkType: hard @@ -4564,39 +4469,65 @@ __metadata: languageName: node linkType: hard -"expo-file-system@npm:^18.0.10, expo-file-system@npm:~18.0.11": - version: 18.0.11 - resolution: "expo-file-system@npm:18.0.11" +"expo-constants@npm:~17.0.8": + version: 17.0.8 + resolution: "expo-constants@npm:17.0.8" + dependencies: + "@expo/config": ~10.0.11 + "@expo/env": ~0.4.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 493e18f8ea2c49efd69aae37b756ede1c37ecc29ac9bd5c23cb2ca88dbc57109c7f915196bcfaab71ceca2141e9a9806a685f8ac787fa206af7f1391be2e09f2 + languageName: node + linkType: hard + +"expo-constants@npm:~17.1.2": + version: 17.1.2 + resolution: "expo-constants@npm:17.1.2" + dependencies: + "@expo/config": ~11.0.3 + "@expo/env": ~1.0.3 + peerDependencies: + expo: "*" + react-native: "*" + checksum: ff6476d54164f673e88d047f1eb0858762340b5bd57e8de9ba3d0e90b47be8fa526f9b74fa04cf088b0303132424872fe644de51fb1222c9698fc1f6f6c1b473 + languageName: node + linkType: hard + +"expo-file-system@npm:^18.0.10": + version: 18.1.5 + resolution: "expo-file-system@npm:18.1.5" dependencies: web-streams-polyfill: ^3.3.2 peerDependencies: expo: "*" react-native: "*" - checksum: 2cbb30eee9b12a3eff867a425900f6bef47d4417c39744c24ab1d47ef7398c9cb952716db8dd59a4ddc474a9dab4bcfa903412c10a56144d64cb00a9afcc8c56 + checksum: eb8e7da2f17a6726e4da6af4feeab9faf9a02bd9b68834feb333931e6794bc5fd1d470f4fadb9975ff8c50f4fcfcece9a5a4f1e43eb7a8fd3b29597ffc7dff83 languageName: node linkType: hard -"expo-file-system@npm:~18.0.6": - version: 18.0.6 - resolution: "expo-file-system@npm:18.0.6" +"expo-file-system@npm:~18.0.11": + version: 18.0.11 + resolution: "expo-file-system@npm:18.0.11" dependencies: web-streams-polyfill: ^3.3.2 peerDependencies: expo: "*" react-native: "*" - checksum: a0b515f7ad7e9f9c209d1923a01ba4f953e3154f28a96083099a9c20afb538b284b31d45ab30327498e0d8824109b121ca4d8a90cd8916f644e4bab07a1425b5 + checksum: 2cbb30eee9b12a3eff867a425900f6bef47d4417c39744c24ab1d47ef7398c9cb952716db8dd59a4ddc474a9dab4bcfa903412c10a56144d64cb00a9afcc8c56 languageName: node linkType: hard -"expo-font@npm:^13.0.1, expo-font@npm:~13.0.1": - version: 13.0.1 - resolution: "expo-font@npm:13.0.1" +"expo-file-system@npm:~18.0.12": + version: 18.0.12 + resolution: "expo-file-system@npm:18.0.12" dependencies: - fontfaceobserver: ^2.1.0 + web-streams-polyfill: ^3.3.2 peerDependencies: expo: "*" - react: "*" - checksum: 7f504cff563ae865d4138c0c5aa9f71a77d4edfbb3d9decde94691832bc7cb9fb9c27ddd64cfdfe81c63c4486102a79213ff8690c7b4c3973bd4e08e87f184cf + react-native: "*" + checksum: 9724e2a9da1cf596d82920cf3cec3d4d6e6544d3b057c7e5895d2aac6f2fc30d9f963774198254fcde707030974407b13a4da7558160fc2278fc388cb183d253 languageName: node linkType: hard @@ -4612,16 +4543,6 @@ __metadata: languageName: node linkType: hard -"expo-keep-awake@npm:~14.0.1": - version: 14.0.1 - resolution: "expo-keep-awake@npm:14.0.1" - peerDependencies: - expo: "*" - react: "*" - checksum: 67a099a1efce432b63890dcfb51f085bf02f2375590882fd8cf8a7d0251ff8512f52ab0d421b08613b67642d373dbee21420585246d25a427ec1776a1c4af485 - languageName: node - linkType: hard - "expo-keep-awake@npm:~14.0.3": version: 14.0.3 resolution: "expo-keep-awake@npm:14.0.3" @@ -4632,24 +4553,6 @@ __metadata: languageName: node linkType: hard -"expo-modules-autolinking@npm:2.0.4": - version: 2.0.4 - resolution: "expo-modules-autolinking@npm:2.0.4" - dependencies: - "@expo/spawn-async": ^1.7.2 - chalk: ^4.1.0 - commander: ^7.2.0 - fast-glob: ^3.2.5 - find-up: ^5.0.0 - fs-extra: ^9.1.0 - require-from-string: ^2.0.2 - resolve-from: ^5.0.0 - bin: - expo-modules-autolinking: bin/expo-modules-autolinking.js - checksum: 23a8279705e2a47e041a3809d28d4d5976f539c1b37298f525b69255fce0fc24279a677e96f769b2626765b684f0450c7e114ed325d1d4300454ad836177a7f7 - languageName: node - linkType: hard - "expo-modules-autolinking@npm:2.0.8": version: 2.0.8 resolution: "expo-modules-autolinking@npm:2.0.8" @@ -4668,31 +4571,31 @@ __metadata: languageName: node linkType: hard -"expo-modules-core@npm:2.1.2": - version: 2.1.2 - resolution: "expo-modules-core@npm:2.1.2" +"expo-modules-core@npm:2.2.2": + version: 2.2.2 + resolution: "expo-modules-core@npm:2.2.2" dependencies: invariant: ^2.2.4 - checksum: 2d9cc22127755a6fc8432bc928db8d76d702faadf86d74c2364f236ce1f410a2826eba485e6b6566005a3b273ca80f8fa501e06f626b0a4a7e2ef4ecf0bdb720 + checksum: f6934b0519598a5c3f3b31a81d48e290823d714e371a2b8631d9ebcb6226a6e4b67968a1b4de6cdcfb6848f4abcb3eeaa1898ff10ebd79f5c21cd455b239cb22 languageName: node linkType: hard -"expo-modules-core@npm:2.2.2": - version: 2.2.2 - resolution: "expo-modules-core@npm:2.2.2" +"expo-modules-core@npm:2.2.3": + version: 2.2.3 + resolution: "expo-modules-core@npm:2.2.3" dependencies: invariant: ^2.2.4 - checksum: f6934b0519598a5c3f3b31a81d48e290823d714e371a2b8631d9ebcb6226a6e4b67968a1b4de6cdcfb6848f4abcb3eeaa1898ff10ebd79f5c21cd455b239cb22 + checksum: 7b2952f1220b55eb03f395d1549525edeb5bff7bf805257d9652ea4ef85ea71e34ad13b5971f1b559e7aa080f41130846b24cbe3d754660c08196c3ce899143b languageName: node linkType: hard -"expo-status-bar@npm:~2.0.0": - version: 2.0.0 - resolution: "expo-status-bar@npm:2.0.0" +"expo-status-bar@npm:~2.0.1": + version: 2.0.1 + resolution: "expo-status-bar@npm:2.0.1" peerDependencies: react: "*" react-native: "*" - checksum: a04dd216ab739919ea02637112e7554deba2a2c278a4ed6874aa7b89f34f4137a96a903db1d1fb0ad08ba736a2889ed24e56dd230bab803b0f818c630e83dc40 + checksum: 7e9c38c0e2a7a593958756572369fe515dc7bc7eb774eecbd2c008f994c420fa7196796c3ba32117bd801677b84b3335918c18e7e276981d49f1b7b8ebbbde95 languageName: node linkType: hard @@ -4737,25 +4640,25 @@ __metadata: languageName: node linkType: hard -"expo@npm:~52.0.11": - version: 52.0.19 - resolution: "expo@npm:52.0.19" +"expo@npm:~52.0.46": + version: 52.0.46 + resolution: "expo@npm:52.0.46" dependencies: "@babel/runtime": ^7.20.0 - "@expo/cli": 0.22.6 - "@expo/config": ~10.0.6 - "@expo/config-plugins": ~9.0.12 - "@expo/fingerprint": 0.11.4 - "@expo/metro-config": 0.19.8 + "@expo/cli": 0.22.26 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/fingerprint": 0.11.11 + "@expo/metro-config": 0.19.12 "@expo/vector-icons": ^14.0.0 - babel-preset-expo: ~12.0.4 - expo-asset: ~11.0.1 - expo-constants: ~17.0.3 - expo-file-system: ~18.0.6 - expo-font: ~13.0.1 - expo-keep-awake: ~14.0.1 - expo-modules-autolinking: 2.0.4 - expo-modules-core: 2.1.2 + babel-preset-expo: ~12.0.11 + expo-asset: ~11.0.5 + expo-constants: ~17.0.8 + expo-file-system: ~18.0.12 + expo-font: ~13.0.4 + expo-keep-awake: ~14.0.3 + expo-modules-autolinking: 2.0.8 + expo-modules-core: 2.2.3 fbemitter: ^3.0.0 web-streams-polyfill: ^3.3.2 whatwg-url-without-unicode: 8.0.0-3 @@ -4774,7 +4677,9 @@ __metadata: optional: true bin: expo: bin/cli - checksum: b8620480ba92f7546b54d7ea1f6534aec2755f0aa42b2a1e7676be89dd31b37d5ad6830db76446e7283a28eb9169d6b56741a136bc071d0cb9258b0f32c07505 + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: 603b4fa89edf9c2aaf8741818bdd5ca46195a461093ecb2c1855164ba9799d2a590a1424f2e11ae7d97f2f8fe64928516a84b8c8ecfbe5a1dad09a5c0edca83e languageName: node linkType: hard @@ -6061,26 +5966,29 @@ __metadata: languageName: node linkType: hard -"llama@workspace:.": +"llm_tool_calling@workspace:.": version: 0.0.0-use.local - resolution: "llama@workspace:." + resolution: "llm_tool_calling@workspace:." dependencies: "@babel/core": ^7.25.2 "@react-native/metro-config": ^0.76.3 "@types/react": ~18.3.12 - expo: ~52.0.11 - expo-font: ^13.0.1 - expo-status-bar: ~2.0.0 + expo: ~52.0.46 + expo-brightness: ~13.0.3 + expo-calendar: ~14.0.6 + expo-font: ~13.0.4 + expo-status-bar: ~2.0.1 metro-config: ^0.81.0 react: 18.3.1 - react-native: 0.76.3 - react-native-executorch: ^0.3.0 + react-native: 0.76.9 + react-native-executorch: 0.3.2 react-native-loading-spinner-overlay: ^3.0.1 react-native-markdown-display: ^7.0.2 react-native-reanimated: ^3.16.3 - react-native-safe-area-context: ^4.14.0 - react-native-svg: ^15.9.0 + react-native-safe-area-context: 4.12.0 + react-native-svg: 15.8.0 react-native-svg-transformer: ^1.5.0 + react-native-wheel-scrollview-picker: ^2.0.6 typescript: ^5.3.3 languageName: unknown linkType: soft @@ -7545,21 +7453,18 @@ __metadata: languageName: node linkType: hard -"react-native-executorch@npm:^0.3.0": - version: 0.3.1 - resolution: "react-native-executorch@npm:0.3.1" +"react-native-executorch@npm:0.3.2": + version: 0.3.2 + resolution: "react-native-executorch@npm:0.3.2" dependencies: expo: ^52.0.37 expo-asset: ^11.0.3 expo-file-system: ^18.0.10 - react: 18.3.1 - react-native: 0.76.7 react-native-live-audio-stream: ^1.1.1 peerDependencies: react: "*" react-native: "*" - react-native-audio-api: "*" - checksum: 5912a8ce85432ecf1657cab241903daba7f04e08aba2b99026705c97126efa599305a88e511ff735d424bc02055492672f7ad915af69b87b93350bb429d4c1e1 + checksum: c5ac5f0739186e05cc5bd5b7d03c9a8709ff037c0704e4cce12a489b20ac3dc572a454088c9cb81828abce755d576e980db1ef55fc64659ca0cfc0962789ab62 languageName: node linkType: hard @@ -7627,13 +7532,13 @@ __metadata: languageName: node linkType: hard -"react-native-safe-area-context@npm:^4.14.0": - version: 4.14.1 - resolution: "react-native-safe-area-context@npm:4.14.1" +"react-native-safe-area-context@npm:4.12.0": + version: 4.12.0 + resolution: "react-native-safe-area-context@npm:4.12.0" peerDependencies: react: "*" react-native: "*" - checksum: acf94ea2a30a3ec5594b467f8e0942ac48c10cbb5d34d16beba33cc0052f7c82dfd6ace754fa55f41d55143f134d3d3fa908eaf4cc9dec5743d6c4483b23520a + checksum: 04a751afed448b31dc401f0e8ecf9cf3edc4fe77b5c16cb7bc2a70381c3a2ffa54f42a313a46ad7deec0aff74a3f5650cf49db0264ba4a6c4f6a1d69ecf489fd languageName: node linkType: hard @@ -7652,9 +7557,9 @@ __metadata: languageName: node linkType: hard -"react-native-svg@npm:^15.9.0": - version: 15.10.1 - resolution: "react-native-svg@npm:15.10.1" +"react-native-svg@npm:15.8.0": + version: 15.8.0 + resolution: "react-native-svg@npm:15.8.0" dependencies: css-select: ^5.1.0 css-tree: ^1.1.3 @@ -7662,76 +7567,35 @@ __metadata: peerDependencies: react: "*" react-native: "*" - checksum: c210426b424e99730ba35d6bbf18335a99f04f2f234cb5bb578ac685c31cfca5e39d48ebf05f9189edd61c028405f4ff242b5edc98ee3e3f41c8bfa960f5bff4 + checksum: ad9d6093f3aef0d53c5e2a562afb7805009f2bf50fd4ec6e77f8c18a6cb7e06a7793d55cc66d523c7d30c77cae170ee26767c72ad5b1a1f07032420ccf4162fe languageName: node linkType: hard -"react-native@npm:0.76.3": - version: 0.76.3 - resolution: "react-native@npm:0.76.3" - dependencies: - "@jest/create-cache-key-function": ^29.6.3 - "@react-native/assets-registry": 0.76.3 - "@react-native/codegen": 0.76.3 - "@react-native/community-cli-plugin": 0.76.3 - "@react-native/gradle-plugin": 0.76.3 - "@react-native/js-polyfills": 0.76.3 - "@react-native/normalize-colors": 0.76.3 - "@react-native/virtualized-lists": 0.76.3 - abort-controller: ^3.0.0 - anser: ^1.4.9 - ansi-regex: ^5.0.0 - babel-jest: ^29.7.0 - babel-plugin-syntax-hermes-parser: ^0.23.1 - base64-js: ^1.5.1 - chalk: ^4.0.0 - commander: ^12.0.0 - event-target-shim: ^5.0.1 - flow-enums-runtime: ^0.0.6 - glob: ^7.1.1 - invariant: ^2.2.4 - jest-environment-node: ^29.6.3 - jsc-android: ^250231.0.0 - memoize-one: ^5.0.0 - metro-runtime: ^0.81.0 - metro-source-map: ^0.81.0 - mkdirp: ^0.5.1 - nullthrows: ^1.1.1 - pretty-format: ^29.7.0 - promise: ^8.3.0 - react-devtools-core: ^5.3.1 - react-refresh: ^0.14.0 - regenerator-runtime: ^0.13.2 - scheduler: 0.24.0-canary-efb381bbf-20230505 - semver: ^7.1.3 - stacktrace-parser: ^0.1.10 - whatwg-fetch: ^3.0.0 - ws: ^6.2.3 - yargs: ^17.6.2 +"react-native-wheel-scrollview-picker@npm:^2.0.6": + version: 2.0.9 + resolution: "react-native-wheel-scrollview-picker@npm:2.0.9" peerDependencies: - "@types/react": ^18.2.6 - react: ^18.2.0 - peerDependenciesMeta: - "@types/react": - optional: true - bin: - react-native: cli.js - checksum: 0a2fbb7c1ff0057f69b23447980e912bc42df1c1e6c4be504f8e1d4c7c2182b3ca02b5f217bdf89b82a07d523b1e0e0f3124f3cf5f5876f5fa47f845cdba1c7a + "@types/react": "*" + "@types/react-native": "*" + react: "*" + react-native: "*" + typescript: "*" + checksum: 5200c211c523164859245d8f0c47565e0437488ec59d4bd9091f1435374a29ae13b2db7e4b6c4159d2ff5f3f9396904271b97669a22db1a045e87240dee9721b languageName: node linkType: hard -"react-native@npm:0.76.7": - version: 0.76.7 - resolution: "react-native@npm:0.76.7" +"react-native@npm:0.76.9": + version: 0.76.9 + resolution: "react-native@npm:0.76.9" dependencies: "@jest/create-cache-key-function": ^29.6.3 - "@react-native/assets-registry": 0.76.7 - "@react-native/codegen": 0.76.7 - "@react-native/community-cli-plugin": 0.76.7 - "@react-native/gradle-plugin": 0.76.7 - "@react-native/js-polyfills": 0.76.7 - "@react-native/normalize-colors": 0.76.7 - "@react-native/virtualized-lists": 0.76.7 + "@react-native/assets-registry": 0.76.9 + "@react-native/codegen": 0.76.9 + "@react-native/community-cli-plugin": 0.76.9 + "@react-native/gradle-plugin": 0.76.9 + "@react-native/js-polyfills": 0.76.9 + "@react-native/normalize-colors": 0.76.9 + "@react-native/virtualized-lists": 0.76.9 abort-controller: ^3.0.0 anser: ^1.4.9 ansi-regex: ^5.0.0 @@ -7770,7 +7634,7 @@ __metadata: optional: true bin: react-native: cli.js - checksum: a3ec730c2b5583420e8f99fd53da38dbfc2f440ebbc0480453d43338076eb67f7dc9f06d7b1ed32113bf3efb62b7cf64e04f29b19370cf9bcb16b756dcec9874 + checksum: cf621cef0649920bac2b730998be6eaaf9762d516bc65d9073b46f634bb640dfb6b9b5d64ce6a6e09da64d52d114d96d96435a91c9db8ec61b76c818fe209827 languageName: node linkType: hard @@ -7955,7 +7819,7 @@ __metadata: languageName: node linkType: hard -"resolve.exports@npm:^2.0.2, resolve.exports@npm:^2.0.3": +"resolve.exports@npm:^2.0.3": version: 2.0.3 resolution: "resolve.exports@npm:2.0.3" checksum: abfb9f98278dcd0c19b8a49bb486abfafa23df4636d49128ea270dc982053c3ef230a530aecda1fae1322873fdfa6c97674fc539651ddfdb375ac58e0b8ef6df diff --git a/examples/llm/.gitignore b/examples/llm/.gitignore new file mode 100644 index 000000000..f779c900a --- /dev/null +++ b/examples/llm/.gitignore @@ -0,0 +1,38 @@ +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +node_modules/ + +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* + +# debug +npm-debug.* +yarn-debug.* +yarn-error.* + +# macOS +.DS_Store +*.pem + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + +.yarn diff --git a/examples/llm/App.tsx b/examples/llm/App.tsx new file mode 100644 index 000000000..6e5290be2 --- /dev/null +++ b/examples/llm/App.tsx @@ -0,0 +1,90 @@ +import { useFonts } from 'expo-font'; + +import ScrollPicker from 'react-native-wheel-scrollview-picker'; +import SWMIcon from './assets/icons/swm_icon.svg'; +import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; +import { ChatScreenLLM, ChatScreenLLMToolCalling } from './screens/ChatScreen'; +import { useState } from 'react'; +import ColorPalette from './colors'; +import { View, StyleSheet, Text } from 'react-native'; + +enum ModelType { + LLM, + LLM_TOOL_CALLING, +} + +export default function App() { + useFonts({ + medium: require('./assets/fonts/Aeonik-Medium.otf'), + regular: require('./assets/fonts/Aeonik-Regular.otf'), + }); + const [selectedMode, setSelectedMode] = useState(ModelType.LLM); + + const handleModeChange = (mode: ModelType) => { + setSelectedMode(mode); + }; + + const renderScreen = () => { + switch (selectedMode) { + case ModelType.LLM: + return ; + + case ModelType.LLM_TOOL_CALLING: + return ; + + default: + return ; + } + }; + + return ( + + + + + LLM on device demo + + { + handleModeChange(selectedIndex); + }} + wrapperHeight={120} + highlightColor={ColorPalette.primary} + wrapperBackground="#fff" + highlightBorderWidth={3} + itemHeight={40} + activeItemTextStyle={styles.activeScrollItem} + /> + + + + {renderScreen()} + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: 'space-between', + backgroundColor: '#fff', + }, + topContainer: { + marginTop: 5, + height: 165, + width: '100%', + alignItems: 'center', + justifyContent: 'center', + }, + wheelPickerContainer: { + width: '100%', + height: 120, + }, + activeScrollItem: { + color: ColorPalette.primary, + fontWeight: 'bold', + }, + textModelName: { color: ColorPalette.primary }, +}); diff --git a/examples/llm/android/.gitignore b/examples/llm/android/.gitignore new file mode 100644 index 000000000..8a6be0771 --- /dev/null +++ b/examples/llm/android/.gitignore @@ -0,0 +1,16 @@ +# OSX +# +.DS_Store + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ + +# Bundle artifacts +*.jsbundle diff --git a/examples/llama/android/app/build.gradle b/examples/llm/android/app/build.gradle similarity index 98% rename from examples/llama/android/app/build.gradle rename to examples/llm/android/app/build.gradle index 5f0567449..8b5c251e7 100644 --- a/examples/llama/android/app/build.gradle +++ b/examples/llm/android/app/build.gradle @@ -86,9 +86,9 @@ android { buildToolsVersion rootProject.ext.buildToolsVersion compileSdk rootProject.ext.compileSdkVersion - namespace 'com.anonymous.llama' + namespace 'com.anonymous.llm' defaultConfig { - applicationId 'com.anonymous.llama' + applicationId 'com.anonymous.llm' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 diff --git a/examples/llm/android/app/debug.keystore b/examples/llm/android/app/debug.keystore new file mode 100644 index 000000000..364e105ed Binary files /dev/null and b/examples/llm/android/app/debug.keystore differ diff --git a/examples/llm/android/app/proguard-rules.pro b/examples/llm/android/app/proguard-rules.pro new file mode 100644 index 000000000..551eb41da --- /dev/null +++ b/examples/llm/android/app/proguard-rules.pro @@ -0,0 +1,14 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# react-native-reanimated +-keep class com.swmansion.reanimated.** { *; } +-keep class com.facebook.react.turbomodule.** { *; } + +# Add any project specific keep options here: diff --git a/examples/llm/android/app/src/debug/AndroidManifest.xml b/examples/llm/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..3ec2507ba --- /dev/null +++ b/examples/llm/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/examples/llama/android/app/src/main/AndroidManifest.xml b/examples/llm/android/app/src/main/AndroidManifest.xml similarity index 97% rename from examples/llama/android/app/src/main/AndroidManifest.xml rename to examples/llm/android/app/src/main/AndroidManifest.xml index 53822c80f..e542b03e0 100644 --- a/examples/llama/android/app/src/main/AndroidManifest.xml +++ b/examples/llm/android/app/src/main/AndroidManifest.xml @@ -24,7 +24,7 @@ - + diff --git a/examples/llm/android/app/src/main/assets/fonts/Aeonik-Medium.otf b/examples/llm/android/app/src/main/assets/fonts/Aeonik-Medium.otf new file mode 100644 index 000000000..cd9981f43 Binary files /dev/null and b/examples/llm/android/app/src/main/assets/fonts/Aeonik-Medium.otf differ diff --git a/examples/llm/android/app/src/main/assets/fonts/Aeonik-Regular.otf b/examples/llm/android/app/src/main/assets/fonts/Aeonik-Regular.otf new file mode 100644 index 000000000..9bd378ed2 Binary files /dev/null and b/examples/llm/android/app/src/main/assets/fonts/Aeonik-Regular.otf differ diff --git a/examples/llm/android/app/src/main/java/com/anonymous/llm/MainActivity.kt b/examples/llm/android/app/src/main/java/com/anonymous/llm/MainActivity.kt new file mode 100644 index 000000000..2b1e0bfd4 --- /dev/null +++ b/examples/llm/android/app/src/main/java/com/anonymous/llm/MainActivity.kt @@ -0,0 +1,60 @@ +package com.anonymous.llm + +import android.os.Build +import android.os.Bundle +import com.facebook.react.ReactActivity +import com.facebook.react.ReactActivityDelegate +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled +import com.facebook.react.defaults.DefaultReactActivityDelegate +import expo.modules.ReactActivityDelegateWrapper + +class MainActivity : ReactActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + // Set the theme to AppTheme BEFORE onCreate to support + // coloring the background, status bar, and navigation bar. + // This is required for expo-splash-screen. + setTheme(R.style.AppTheme) + super.onCreate(null) + } + + /** + * Returns the name of the main component registered from JavaScript. This is used to schedule + * rendering of the component. + */ + override fun getMainComponentName(): String = "main" + + /** + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] + */ + override fun createReactActivityDelegate(): ReactActivityDelegate { + return ReactActivityDelegateWrapper( + this, + BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, + object : DefaultReactActivityDelegate( + this, + mainComponentName, + fabricEnabled, + ) {}, + ) + } + + /** + * Align the back button behavior with Android S + * where moving root activities to background instead of finishing activities. + * @see onBackPressed + */ + override fun invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed() + } + return + } + + // Use the default back button implementation on Android S + // because it's doing more than [Activity.moveTaskToBack] in fact. + super.invokeDefaultOnBackPressed() + } +} diff --git a/examples/llm/android/app/src/main/java/com/anonymous/llm/MainApplication.kt b/examples/llm/android/app/src/main/java/com/anonymous/llm/MainApplication.kt new file mode 100644 index 000000000..dae435503 --- /dev/null +++ b/examples/llm/android/app/src/main/java/com/anonymous/llm/MainApplication.kt @@ -0,0 +1,55 @@ +package com.anonymous.llm + +import android.app.Application +import android.content.res.Configuration +import com.facebook.react.PackageList +import com.facebook.react.ReactApplication +import com.facebook.react.ReactHost +import com.facebook.react.ReactNativeHost +import com.facebook.react.ReactPackage +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load +import com.facebook.react.defaults.DefaultReactNativeHost +import com.facebook.react.soloader.OpenSourceMergedSoMapping +import com.facebook.soloader.SoLoader +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper + +class MainApplication : Application(), ReactApplication { + override val reactNativeHost: ReactNativeHost = + ReactNativeHostWrapper( + this, + object : DefaultReactNativeHost(this) { + override fun getPackages(): List { + val packages = PackageList(this).packages + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return packages + } + + override fun getJSMainModuleName(): String = ".expo/.virtual-metro-entry" + + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG + + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED + }, + ) + + override val reactHost: ReactHost + get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) + + override fun onCreate() { + super.onCreate() + SoLoader.init(this, OpenSourceMergedSoMapping) + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + load() + } + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) + } +} diff --git a/examples/llm/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/examples/llm/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png new file mode 100644 index 000000000..090813796 Binary files /dev/null and b/examples/llm/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ diff --git a/examples/llm/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/examples/llm/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png new file mode 100644 index 000000000..ac8a5bbd1 Binary files /dev/null and b/examples/llm/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ diff --git a/examples/llm/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/examples/llm/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png new file mode 100644 index 000000000..cec33611c Binary files /dev/null and b/examples/llm/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ diff --git a/examples/llm/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/examples/llm/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png new file mode 100644 index 000000000..6c08a1194 Binary files /dev/null and b/examples/llm/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ diff --git a/examples/llm/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/examples/llm/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png new file mode 100644 index 000000000..fbe261eff Binary files /dev/null and b/examples/llm/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ diff --git a/examples/llm/android/app/src/main/res/drawable/ic_launcher_background.xml b/examples/llm/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..883b2a080 --- /dev/null +++ b/examples/llm/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/llm/android/app/src/main/res/drawable/rn_edit_text_material.xml b/examples/llm/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 000000000..5c25e728e --- /dev/null +++ b/examples/llm/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/examples/llm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/llm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..3941bea9b --- /dev/null +++ b/examples/llm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/llm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/llm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..3941bea9b --- /dev/null +++ b/examples/llm/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 000000000..7fae0ccbc Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..ac03dbf69 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 000000000..afa0a4ef4 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 000000000..78aaf4541 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..e1173a94d Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 000000000..c4f6e101e Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 000000000..7a0f085fa Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..ff086fdc3 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..6c2d40bf5 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 000000000..730e3fa55 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..f7f1d0690 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..345261586 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 000000000..b11a322ab Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..49a464ee3 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..b51fd15c2 Binary files /dev/null and b/examples/llm/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/examples/llm/android/app/src/main/res/values-night/colors.xml b/examples/llm/android/app/src/main/res/values-night/colors.xml new file mode 100644 index 000000000..3c05de5be --- /dev/null +++ b/examples/llm/android/app/src/main/res/values-night/colors.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/llm/android/app/src/main/res/values/colors.xml b/examples/llm/android/app/src/main/res/values/colors.xml new file mode 100644 index 000000000..f387b9011 --- /dev/null +++ b/examples/llm/android/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + #ffffff + #ffffff + #023c69 + #ffffff + \ No newline at end of file diff --git a/examples/llama/android/app/src/main/res/values/strings.xml b/examples/llm/android/app/src/main/res/values/strings.xml similarity index 83% rename from examples/llama/android/app/src/main/res/values/strings.xml rename to examples/llm/android/app/src/main/res/values/strings.xml index 16d1d1ca3..bf26e3919 100644 --- a/examples/llama/android/app/src/main/res/values/strings.xml +++ b/examples/llm/android/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - llama + llm contain false \ No newline at end of file diff --git a/examples/llm/android/app/src/main/res/values/styles.xml b/examples/llm/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..da525212e --- /dev/null +++ b/examples/llm/android/app/src/main/res/values/styles.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/examples/llm/android/build.gradle b/examples/llm/android/build.gradle new file mode 100644 index 000000000..abbcb8ec8 --- /dev/null +++ b/examples/llm/android/build.gradle @@ -0,0 +1,41 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0' + minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24') + compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35') + targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34') + kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25' + + ndkVersion = "26.1.10909125" + } + repositories { + google() + mavenCentral() + } + dependencies { + classpath('com.android.tools.build:gradle') + classpath('com.facebook.react:react-native-gradle-plugin') + classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') + } +} + +apply plugin: "com.facebook.react.rootproject" + +allprojects { + repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) + } + maven { + // Android JSC is installed from npm + url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) + } + + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + } +} diff --git a/examples/llm/android/gradle.properties b/examples/llm/android/gradle.properties new file mode 100644 index 000000000..7531e9eb2 --- /dev/null +++ b/examples/llm/android/gradle.properties @@ -0,0 +1,56 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true + +# Enable AAPT2 PNG crunching +android.enablePngCrunchInReleaseBuilds=true + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=true + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true + +# Enable GIF support in React Native images (~200 B increase) +expo.gif.enabled=true +# Enable webp support in React Native images (~85 KB increase) +expo.webp.enabled=true +# Enable animated webp support (~3.4 MB increase) +# Disabled by default because iOS doesn't support animated webp +expo.webp.animated=false + +# Enable network inspector +EX_DEV_CLIENT_NETWORK_INSPECTOR=true + +# Use legacy packaging to compress native libraries in the resulting APK. +expo.useLegacyPackaging=false diff --git a/examples/llm/android/gradle/wrapper/gradle-wrapper.jar b/examples/llm/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..a4b76b953 Binary files /dev/null and b/examples/llm/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/examples/llm/android/gradle/wrapper/gradle-wrapper.properties b/examples/llm/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..79eb9d003 --- /dev/null +++ b/examples/llm/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/examples/llm/android/gradlew b/examples/llm/android/gradlew new file mode 100755 index 000000000..f5feea6d6 --- /dev/null +++ b/examples/llm/android/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/examples/llm/android/gradlew.bat b/examples/llm/android/gradlew.bat new file mode 100644 index 000000000..9d21a2183 --- /dev/null +++ b/examples/llm/android/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/examples/llama/android/settings.gradle b/examples/llm/android/settings.gradle similarity index 87% rename from examples/llama/android/settings.gradle rename to examples/llm/android/settings.gradle index 02412565b..9c10a011a 100644 --- a/examples/llama/android/settings.gradle +++ b/examples/llm/android/settings.gradle @@ -1,5 +1,5 @@ pluginManagement { - includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json')"].execute(null, rootDir).text.trim()).getParentFile().toString()) + includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().toString()) } plugins { id("com.facebook.react.settings") } @@ -21,7 +21,7 @@ extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> } } -rootProject.name = 'llama' +rootProject.name = 'llm' dependencyResolutionManagement { versionCatalogs { diff --git a/examples/llama/app.json b/examples/llm/app.json similarity index 85% rename from examples/llama/app.json rename to examples/llm/app.json index b4c761777..498bab08a 100644 --- a/examples/llama/app.json +++ b/examples/llm/app.json @@ -1,7 +1,7 @@ { "expo": { - "name": "llama", - "slug": "llama", + "name": "llm", + "slug": "llm", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/icons/icon.png", @@ -25,14 +25,14 @@ }, "ios": { "supportsTablet": true, - "bundleIdentifier": "com.anonymous.llama" + "bundleIdentifier": "com.anonymous.llm" }, "android": { "adaptiveIcon": { "foregroundImage": "./assets/icons/adaptive-icon.png", "backgroundColor": "#ffffff" }, - "package": "com.anonymous.llama" + "package": "com.anonymous.llm" }, "web": { "favicon": "./assets/icons/favicon.png" diff --git a/examples/llm/assets/fonts/Aeonik-Medium.otf b/examples/llm/assets/fonts/Aeonik-Medium.otf new file mode 100644 index 000000000..cd9981f43 Binary files /dev/null and b/examples/llm/assets/fonts/Aeonik-Medium.otf differ diff --git a/examples/llm/assets/fonts/Aeonik-Regular.otf b/examples/llm/assets/fonts/Aeonik-Regular.otf new file mode 100644 index 000000000..9bd378ed2 Binary files /dev/null and b/examples/llm/assets/fonts/Aeonik-Regular.otf differ diff --git a/examples/llm/assets/icons/adaptive-icon.png b/examples/llm/assets/icons/adaptive-icon.png new file mode 100644 index 000000000..03d6f6b6c Binary files /dev/null and b/examples/llm/assets/icons/adaptive-icon.png differ diff --git a/examples/llm/assets/icons/favicon.png b/examples/llm/assets/icons/favicon.png new file mode 100644 index 000000000..e75f697b1 Binary files /dev/null and b/examples/llm/assets/icons/favicon.png differ diff --git a/examples/llm/assets/icons/icon.png b/examples/llm/assets/icons/icon.png new file mode 100644 index 000000000..a0b1526fc Binary files /dev/null and b/examples/llm/assets/icons/icon.png differ diff --git a/examples/llm/assets/icons/llama_icon.svg b/examples/llm/assets/icons/llama_icon.svg new file mode 100644 index 000000000..99e29696e --- /dev/null +++ b/examples/llm/assets/icons/llama_icon.svg @@ -0,0 +1,48 @@ + + + + + + + + + \ No newline at end of file diff --git a/examples/llm/assets/icons/pause_icon.svg b/examples/llm/assets/icons/pause_icon.svg new file mode 100644 index 000000000..2f5164d28 --- /dev/null +++ b/examples/llm/assets/icons/pause_icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/llm/assets/icons/send_icon.svg b/examples/llm/assets/icons/send_icon.svg new file mode 100644 index 000000000..dfe227a3b --- /dev/null +++ b/examples/llm/assets/icons/send_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/llm/assets/icons/splash.png b/examples/llm/assets/icons/splash.png new file mode 100644 index 000000000..0e89705a9 Binary files /dev/null and b/examples/llm/assets/icons/splash.png differ diff --git a/examples/llm/assets/icons/swm_icon.svg b/examples/llm/assets/icons/swm_icon.svg new file mode 100644 index 000000000..8c62f039b --- /dev/null +++ b/examples/llm/assets/icons/swm_icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/examples/llm/babel.config.js b/examples/llm/babel.config.js new file mode 100644 index 000000000..d872de3f5 --- /dev/null +++ b/examples/llm/babel.config.js @@ -0,0 +1,7 @@ +module.exports = function (api) { + api.cache(true); + return { + presets: ['babel-preset-expo'], + plugins: ['react-native-reanimated/plugin'], + }; +}; diff --git a/examples/llm/colors.ts b/examples/llm/colors.ts new file mode 100644 index 000000000..bca216b11 --- /dev/null +++ b/examples/llm/colors.ts @@ -0,0 +1,10 @@ +const ColorPalette = { + primary: '#001A72', + seaBlueLight: '#E1F3FA', + seaBlueMedium: '#B5E1F1', + seaBlueDark: '#87CCE8', + blueLight: '#C1C6E5', + blueDark: '#6676AA', +}; + +export default ColorPalette; diff --git a/examples/llm/components/AnimatedChatLoading.tsx b/examples/llm/components/AnimatedChatLoading.tsx new file mode 100644 index 000000000..2a5641fd3 --- /dev/null +++ b/examples/llm/components/AnimatedChatLoading.tsx @@ -0,0 +1,50 @@ +import { StyleSheet, View } from 'react-native'; +import Animated, { + interpolateColor, + useAnimatedStyle, + useSharedValue, + withRepeat, + withTiming, +} from 'react-native-reanimated'; +import ColorPalette from '../colors'; + +export default function AnimatedChatLoading() { + const progress = useSharedValue(0); + progress.value = withRepeat(withTiming(1, { duration: 500 }), -1, true); + + const animatedStyle = useAnimatedStyle(() => { + return { + backgroundColor: interpolateColor( + progress.value, + [0, 1], + [ + ColorPalette.seaBlueLight, + ColorPalette.seaBlueMedium, + ColorPalette.seaBlueDark, + ] + ), + }; + }); + + return ( + + + + + + ); +} + +const styles = StyleSheet.create({ + messageLoadingContainer: { + flex: 1, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + }, + loadingDot: { + width: 8, + height: 8, + borderRadius: 4, + }, +}); diff --git a/examples/llm/components/MarkdownComponent.tsx b/examples/llm/components/MarkdownComponent.tsx new file mode 100644 index 000000000..b4cb69b1e --- /dev/null +++ b/examples/llm/components/MarkdownComponent.tsx @@ -0,0 +1,33 @@ +import { Platform } from 'react-native'; +import Markdown from 'react-native-markdown-display'; +import ColorPalette from '../colors'; + +interface MarkdownComponentProps { + text: string; +} + +export default function MarkdownComponent({ text }: MarkdownComponentProps) { + const fontSize = Platform.OS === 'ios' ? 16 : 14; + return ( + + {text} + + ); +} diff --git a/examples/llm/components/MessageItem.tsx b/examples/llm/components/MessageItem.tsx new file mode 100644 index 000000000..8c74a64ce --- /dev/null +++ b/examples/llm/components/MessageItem.tsx @@ -0,0 +1,106 @@ +import React, { memo } from 'react'; +import { + View, + StyleSheet, + TouchableOpacity, + Text, + Platform, +} from 'react-native'; +import MarkdownComponent from './MarkdownComponent'; +import LlamaIcon from '../assets/icons/llama_icon.svg'; +import ColorPalette from '../colors'; +import { MessageType } from 'react-native-executorch/lib/typescript/types/llm'; + +interface MessageItemProps { + message: MessageType; + deleteMessage: () => void; +} + +const MessageItem = memo(({ message, deleteMessage }: MessageItemProps) => { + return ( + + {message.role === 'assistant' && ( + + + + )} + + + + ); +}); + +const CloseButton = ({ + deleteMessage, + role, +}: { + deleteMessage: () => void; + role: string; +}) => { + return ( + + + + ); +}; + +export default MessageItem; + +const styles = StyleSheet.create({ + aiMessage: { + flexDirection: 'row', + maxWidth: '75%', + alignSelf: 'flex-start', + marginVertical: 8, + alignItems: 'center', + }, + userMessage: { + flexDirection: 'row-reverse', + paddingHorizontal: 12, + paddingVertical: 8, + marginRight: 8, + marginVertical: 8, + maxWidth: '75%', + borderRadius: 8, + backgroundColor: ColorPalette.seaBlueLight, + alignSelf: 'flex-end', + alignItems: 'center', + }, + aiMessageIconContainer: { + backgroundColor: ColorPalette.seaBlueLight, + height: 32, + width: 32, + alignItems: 'center', + justifyContent: 'center', + borderRadius: 16, + marginHorizontal: 7, + }, + closeButton: { + borderRadius: 11, + backgroundColor: ColorPalette.blueLight, + alignItems: 'center', + justifyContent: 'center', + width: 22, + height: 22, + }, + closeButtonRight: { + marginLeft: 8, + }, + closeButtonLeft: { + marginRight: 8, + }, + buttonText: { + fontSize: Platform.OS === 'ios' ? 16 : 14, + color: '#000', + }, +}); diff --git a/examples/llama/components/Messages.tsx b/examples/llm/components/Messages.tsx similarity index 83% rename from examples/llama/components/Messages.tsx rename to examples/llm/components/Messages.tsx index f66d5aa43..941796128 100644 --- a/examples/llama/components/Messages.tsx +++ b/examples/llm/components/Messages.tsx @@ -1,21 +1,23 @@ import { useRef } from 'react'; import { ScrollView, StyleSheet, View, Text } from 'react-native'; -import { MessageType } from '../types'; import AnimatedChatLoading from './AnimatedChatLoading'; import LlamaIcon from '../assets/icons/llama_icon.svg'; import ColorPalette from '../colors'; import MessageItem from './MessageItem'; +import { MessageType } from 'react-native-executorch'; interface MessagesComponentProps { - chatHistory: Array; + chatHistory: MessageType[]; llmResponse: string; isGenerating: boolean; + deleteMessage: (index: number) => void; } export default function Messages({ chatHistory, llmResponse, isGenerating, + deleteMessage, }: MessagesComponentProps) { const scrollViewRef = useRef(null); @@ -27,7 +29,11 @@ export default function Messages({ > true}> {chatHistory.map((message, index) => ( - + deleteMessage(index)} + /> ))} {isGenerating && ( @@ -50,19 +56,14 @@ export default function Messages({ } const styles = StyleSheet.create({ - chatContainer: { - flex: 1, - width: '100%', - }, + chatContainer: { flex: 1, width: '100%' }, aiMessage: { flexDirection: 'row', maxWidth: '80%', alignSelf: 'flex-start', marginVertical: 8, }, - messageLoadingContainer: { - width: 28, - }, + messageLoadingContainer: { width: 28 }, aiMessageIconContainer: { backgroundColor: ColorPalette.seaBlueLight, height: 32, diff --git a/examples/llm/declarations.d.ts b/examples/llm/declarations.d.ts new file mode 100644 index 000000000..85e178f49 --- /dev/null +++ b/examples/llm/declarations.d.ts @@ -0,0 +1,5 @@ +declare module '*.svg' { + import { SvgProps } from 'react-native-svg'; + const content: React.FV; + export default content; +} diff --git a/examples/llama/index.ts b/examples/llm/index.ts similarity index 100% rename from examples/llama/index.ts rename to examples/llm/index.ts diff --git a/examples/llm/ios/.gitignore b/examples/llm/ios/.gitignore new file mode 100644 index 000000000..8beb34430 --- /dev/null +++ b/examples/llm/ios/.gitignore @@ -0,0 +1,30 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace +.xcode.env.local + +# Bundle artifacts +*.jsbundle + +# CocoaPods +/Pods/ diff --git a/examples/llm/ios/.xcode.env b/examples/llm/ios/.xcode.env new file mode 100644 index 000000000..3d5782c71 --- /dev/null +++ b/examples/llm/ios/.xcode.env @@ -0,0 +1,11 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. + +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) diff --git a/examples/llama/ios/Podfile b/examples/llm/ios/Podfile similarity index 99% rename from examples/llama/ios/Podfile rename to examples/llm/ios/Podfile index 9fc288a14..b5fdb3eec 100644 --- a/examples/llama/ios/Podfile +++ b/examples/llm/ios/Podfile @@ -13,7 +13,7 @@ install! 'cocoapods', prepare_react_native_project! -target 'llama' do +target 'llm' do use_expo_modules! if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' diff --git a/examples/llama/ios/Podfile.lock b/examples/llm/ios/Podfile.lock similarity index 71% rename from examples/llama/ios/Podfile.lock rename to examples/llm/ios/Podfile.lock index 7b5268308..3fa9fb95e 100644 --- a/examples/llama/ios/Podfile.lock +++ b/examples/llm/ios/Podfile.lock @@ -1,23 +1,23 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - - EXConstants (17.0.3): + - EXConstants (17.0.8): - ExpoModulesCore - - Expo (52.0.19): + - Expo (52.0.46): - ExpoModulesCore - - ExpoAsset (11.0.1): + - ExpoAsset (11.0.5): - ExpoModulesCore - - ExpoFileSystem (18.0.6): + - ExpoFileSystem (18.0.12): - ExpoModulesCore - - ExpoFont (13.0.1): + - ExpoFont (13.0.4): - ExpoModulesCore - - ExpoKeepAwake (14.0.1): + - ExpoKeepAwake (14.0.3): - ExpoModulesCore - - ExpoModulesCore (2.1.2): + - ExpoModulesCore (2.2.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -36,55 +36,59 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - FBLazyVector (0.76.3) - - fmt (9.1.0) + - fast_float (6.1.4) + - FBLazyVector (0.76.9) + - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.76.3): - - hermes-engine/Pre-built (= 0.76.3) - - hermes-engine/Pre-built (0.76.3) + - hermes-engine (0.76.9): + - hermes-engine/Pre-built (= 0.76.9) + - hermes-engine/Pre-built (0.76.9) - opencv-rne (0.1.0) - - RCT-Folly (2024.01.01.00): + - RCT-Folly (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Default (= 2024.01.01.00) - - RCT-Folly/Default (2024.01.01.00): + - RCT-Folly/Default (= 2024.10.14.00) + - RCT-Folly/Default (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Fabric (2024.01.01.00): + - RCT-Folly/Fabric (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) - - glog - - RCTDeprecation (0.76.3) - - RCTRequired (0.76.3) - - RCTTypeSafety (0.76.3): - - FBLazyVector (= 0.76.3) - - RCTRequired (= 0.76.3) - - React-Core (= 0.76.3) - - React (0.76.3): - - React-Core (= 0.76.3) - - React-Core/DevSupport (= 0.76.3) - - React-Core/RCTWebSocket (= 0.76.3) - - React-RCTActionSheet (= 0.76.3) - - React-RCTAnimation (= 0.76.3) - - React-RCTBlob (= 0.76.3) - - React-RCTImage (= 0.76.3) - - React-RCTLinking (= 0.76.3) - - React-RCTNetwork (= 0.76.3) - - React-RCTSettings (= 0.76.3) - - React-RCTText (= 0.76.3) - - React-RCTVibration (= 0.76.3) - - React-callinvoker (0.76.3) - - React-Core (0.76.3): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - fast_float + - fmt + - glog + - RCTDeprecation (0.76.9) + - RCTRequired (0.76.9) + - RCTTypeSafety (0.76.9): + - FBLazyVector (= 0.76.9) + - RCTRequired (= 0.76.9) + - React-Core (= 0.76.9) + - React (0.76.9): + - React-Core (= 0.76.9) + - React-Core/DevSupport (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) + - React-RCTActionSheet (= 0.76.9) + - React-RCTAnimation (= 0.76.9) + - React-RCTBlob (= 0.76.9) + - React-RCTImage (= 0.76.9) + - React-RCTLinking (= 0.76.9) + - React-RCTNetwork (= 0.76.9) + - React-RCTSettings (= 0.76.9) + - React-RCTText (= 0.76.9) + - React-RCTVibration (= 0.76.9) + - React-callinvoker (0.76.9) + - React-Core (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) + - React-Core/Default (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -96,10 +100,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.76.3): + - React-Core/CoreModulesHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -113,10 +117,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.76.3): + - React-Core/Default (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-cxxreact - React-featureflags @@ -129,13 +133,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.76.3): + - React-Core/DevSupport (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) - - React-Core/RCTWebSocket (= 0.76.3) + - React-Core/Default (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -147,10 +151,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.76.3): + - React-Core/RCTActionSheetHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -164,10 +168,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.76.3): + - React-Core/RCTAnimationHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -181,10 +185,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.76.3): + - React-Core/RCTBlobHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -198,10 +202,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.76.3): + - React-Core/RCTImageHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -215,10 +219,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.76.3): + - React-Core/RCTLinkingHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -232,10 +236,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.76.3): + - React-Core/RCTNetworkHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -249,10 +253,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.76.3): + - React-Core/RCTSettingsHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -266,10 +270,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.76.3): + - React-Core/RCTTextHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -283,10 +287,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.76.3): + - React-Core/RCTVibrationHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -300,12 +304,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.76.3): + - React-Core/RCTWebSocket (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) + - React-Core/Default (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -317,41 +321,43 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.76.3): + - React-CoreModules (0.76.9): - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.76.3) - - React-Core/CoreModulesHeaders (= 0.76.3) - - React-jsi (= 0.76.3) + - fast_float + - fmt + - RCT-Folly + - RCTTypeSafety + - React-Core/CoreModulesHeaders + - React-jsi - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.76.3) + - React-RCTImage - ReactCodegen - ReactCommon - - SocketRocket (= 0.7.1) - - React-cxxreact (0.76.3): + - SocketRocket + - React-cxxreact (0.76.9): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-debug (= 0.76.3) - - React-jsi (= 0.76.3) + - RCT-Folly + - React-callinvoker + - React-debug + - React-jsi - React-jsinspector - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - React-runtimeexecutor (= 0.76.3) - - React-timing (= 0.76.3) - - React-debug (0.76.3) - - React-defaultsnativemodule (0.76.3): + - React-logger + - React-perflogger + - React-runtimeexecutor + - React-timing + - React-debug (0.76.9) + - React-defaultsnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -372,11 +378,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-domnativemodule (0.76.3): + - React-domnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -394,32 +400,33 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.76.3): + - React-Fabric (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.76.3) - - React-Fabric/attributedstring (= 0.76.3) - - React-Fabric/componentregistry (= 0.76.3) - - React-Fabric/componentregistrynative (= 0.76.3) - - React-Fabric/components (= 0.76.3) - - React-Fabric/core (= 0.76.3) - - React-Fabric/dom (= 0.76.3) - - React-Fabric/imagemanager (= 0.76.3) - - React-Fabric/leakchecker (= 0.76.3) - - React-Fabric/mounting (= 0.76.3) - - React-Fabric/observers (= 0.76.3) - - React-Fabric/scheduler (= 0.76.3) - - React-Fabric/telemetry (= 0.76.3) - - React-Fabric/templateprocessor (= 0.76.3) - - React-Fabric/uimanager (= 0.76.3) + - React-Fabric/animations (= 0.76.9) + - React-Fabric/attributedstring (= 0.76.9) + - React-Fabric/componentregistry (= 0.76.9) + - React-Fabric/componentregistrynative (= 0.76.9) + - React-Fabric/components (= 0.76.9) + - React-Fabric/core (= 0.76.9) + - React-Fabric/dom (= 0.76.9) + - React-Fabric/imagemanager (= 0.76.9) + - React-Fabric/leakchecker (= 0.76.9) + - React-Fabric/mounting (= 0.76.9) + - React-Fabric/observers (= 0.76.9) + - React-Fabric/scheduler (= 0.76.9) + - React-Fabric/telemetry (= 0.76.9) + - React-Fabric/templateprocessor (= 0.76.9) + - React-Fabric/uimanager (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -429,12 +436,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.76.3): + - React-Fabric/animations (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -449,12 +457,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.76.3): + - React-Fabric/attributedstring (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -469,12 +478,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.76.3): + - React-Fabric/componentregistry (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -489,12 +499,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.76.3): + - React-Fabric/componentregistrynative (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -509,20 +520,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.76.3): + - React-Fabric/components (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.76.3) - - React-Fabric/components/root (= 0.76.3) - - React-Fabric/components/view (= 0.76.3) + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.9) + - React-Fabric/components/root (= 0.76.9) + - React-Fabric/components/view (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -532,12 +544,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.76.3): + - React-Fabric/components/legacyviewmanagerinterop (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -552,12 +565,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.76.3): + - React-Fabric/components/root (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -572,12 +586,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.76.3): + - React-Fabric/components/view (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -593,12 +608,13 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.76.3): + - React-Fabric/core (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -613,12 +629,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.76.3): + - React-Fabric/dom (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -633,12 +650,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.76.3): + - React-Fabric/imagemanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -653,12 +671,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.76.3): + - React-Fabric/leakchecker (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -673,12 +692,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.76.3): + - React-Fabric/mounting (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -693,18 +713,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.76.3): + - React-Fabric/observers (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.76.3) + - React-Fabric/observers/events (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -714,12 +735,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.76.3): + - React-Fabric/observers/events (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -734,12 +756,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.76.3): + - React-Fabric/scheduler (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -756,12 +779,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.76.3): + - React-Fabric/telemetry (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -776,12 +800,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.76.3): + - React-Fabric/templateprocessor (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -796,18 +821,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.76.3): + - React-Fabric/uimanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.76.3) + - React-Fabric/uimanager/consistency (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -818,12 +844,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.76.3): + - React-Fabric/uimanager/consistency (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -839,20 +866,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.76.3): + - React-FabricComponents (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.76.3) - - React-FabricComponents/textlayoutmanager (= 0.76.3) + - React-FabricComponents/components (= 0.76.9) + - React-FabricComponents/textlayoutmanager (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -864,27 +892,28 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.76.3): + - React-FabricComponents/components (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.76.3) - - React-FabricComponents/components/iostextinput (= 0.76.3) - - React-FabricComponents/components/modal (= 0.76.3) - - React-FabricComponents/components/rncore (= 0.76.3) - - React-FabricComponents/components/safeareaview (= 0.76.3) - - React-FabricComponents/components/scrollview (= 0.76.3) - - React-FabricComponents/components/text (= 0.76.3) - - React-FabricComponents/components/textinput (= 0.76.3) - - React-FabricComponents/components/unimplementedview (= 0.76.3) + - React-FabricComponents/components/inputaccessory (= 0.76.9) + - React-FabricComponents/components/iostextinput (= 0.76.9) + - React-FabricComponents/components/modal (= 0.76.9) + - React-FabricComponents/components/rncore (= 0.76.9) + - React-FabricComponents/components/safeareaview (= 0.76.9) + - React-FabricComponents/components/scrollview (= 0.76.9) + - React-FabricComponents/components/text (= 0.76.9) + - React-FabricComponents/components/textinput (= 0.76.9) + - React-FabricComponents/components/unimplementedview (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -896,12 +925,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.76.3): + - React-FabricComponents/components/inputaccessory (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -919,12 +949,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.76.3): + - React-FabricComponents/components/iostextinput (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -942,12 +973,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.76.3): + - React-FabricComponents/components/modal (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -965,12 +997,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.76.3): + - React-FabricComponents/components/rncore (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -988,12 +1021,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.76.3): + - React-FabricComponents/components/safeareaview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1011,12 +1045,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.76.3): + - React-FabricComponents/components/scrollview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1034,12 +1069,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.76.3): + - React-FabricComponents/components/text (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1057,12 +1093,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.76.3): + - React-FabricComponents/components/textinput (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1080,12 +1117,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.76.3): + - React-FabricComponents/components/unimplementedview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1103,12 +1141,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.76.3): + - React-FabricComponents/textlayoutmanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1126,30 +1165,31 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.76.3): + - React-FabricImage (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.76.3) - - RCTTypeSafety (= 0.76.3) + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.76.3) + - React-jsiexecutor - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.76.3) - - React-featureflagsnativemodule (0.76.3): + - React-featureflags (0.76.9) + - React-featureflagsnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1166,31 +1206,33 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-graphics (0.76.3): + - React-graphics (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.76.3): + - React-hermes (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.3) + - RCT-Folly + - React-cxxreact - React-jsi - - React-jsiexecutor (= 0.76.3) + - React-jsiexecutor - React-jsinspector - - React-perflogger (= 0.76.3) + - React-perflogger - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.76.3): + - React-idlecallbacksnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1208,7 +1250,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-ImageManager (0.76.3): + - React-ImageManager (0.76.9): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1217,51 +1259,53 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.76.3): + - React-jserrorhandler (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-cxxreact - React-debug - React-jsi - - React-jsi (0.76.3): + - React-jsi (0.76.9): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.76.3): + - RCT-Folly + - React-jsiexecutor (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) + - RCT-Folly + - React-cxxreact + - React-jsi - React-jsinspector - - React-perflogger (= 0.76.3) - - React-jsinspector (0.76.3): + - React-perflogger + - React-jsinspector (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly - React-featureflags - React-jsi - - React-perflogger (= 0.76.3) - - React-runtimeexecutor (= 0.76.3) - - React-jsitracing (0.76.3): + - React-perflogger + - React-runtimeexecutor + - React-jsitracing (0.76.9): - React-jsi - - React-logger (0.76.3): + - React-logger (0.76.9): - glog - - React-Mapbuffer (0.76.3): + - React-Mapbuffer (0.76.9): - glog - React-debug - - React-microtasksnativemodule (0.76.3): + - React-microtasksnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1278,12 +1322,12 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-executorch (0.3.1): + - react-native-executorch (0.3.2): - DoubleConversion - glog - hermes-engine - opencv-rne (~> 0.1.0) - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1300,11 +1344,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context (4.14.1): + - react-native-safe-area-context (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1313,8 +1357,8 @@ PODS: - React-featureflags - React-graphics - React-ImageManager - - react-native-safe-area-context/common (= 4.14.1) - - react-native-safe-area-context/fabric (= 4.14.1) + - react-native-safe-area-context/common (= 4.12.0) + - react-native-safe-area-context/fabric (= 4.12.0) - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1323,11 +1367,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context/common (4.14.1): + - react-native-safe-area-context/common (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1344,11 +1388,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context/fabric (4.14.1): + - react-native-safe-area-context/fabric (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1366,8 +1410,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-nativeconfig (0.76.3) - - React-NativeModulesApple (0.76.3): + - React-nativeconfig (0.76.9) + - React-NativeModulesApple (0.76.9): - glog - hermes-engine - React-callinvoker @@ -1378,25 +1422,25 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.76.3): + - React-perflogger (0.76.9): - DoubleConversion - - RCT-Folly (= 2024.01.01.00) - - React-performancetimeline (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) + - React-performancetimeline (0.76.9): + - RCT-Folly (= 2024.10.14.00) - React-cxxreact - React-timing - - React-RCTActionSheet (0.76.3): - - React-Core/RCTActionSheetHeaders (= 0.76.3) - - React-RCTAnimation (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTActionSheet (0.76.9): + - React-Core/RCTActionSheetHeaders (= 0.76.9) + - React-RCTAnimation (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTAppDelegate (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTAppDelegate (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1420,11 +1464,12 @@ PODS: - React-utils - ReactCodegen - ReactCommon - - React-RCTBlob (0.76.3): + - React-RCTBlob (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -1433,10 +1478,10 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTFabric (0.76.3): + - React-RCTFabric (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-Core - React-debug - React-Fabric @@ -1456,8 +1501,8 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTImage (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTImageHeaders - React-jsi @@ -1465,49 +1510,50 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTLinking (0.76.3): - - React-Core/RCTLinkingHeaders (= 0.76.3) - - React-jsi (= 0.76.3) + - React-RCTLinking (0.76.9): + - React-Core/RCTLinkingHeaders (= 0.76.9) + - React-jsi (= 0.76.9) - React-NativeModulesApple - ReactCodegen - ReactCommon - - ReactCommon/turbomodule/core (= 0.76.3) - - React-RCTNetwork (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - ReactCommon/turbomodule/core (= 0.76.9) + - React-RCTNetwork (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTSettings (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTSettings (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTText (0.76.3): - - React-Core/RCTTextHeaders (= 0.76.3) + - React-RCTText (0.76.9): + - React-Core/RCTTextHeaders (= 0.76.9) - Yoga - - React-RCTVibration (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTVibration (0.76.9): + - RCT-Folly (= 2024.10.14.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-rendererconsistency (0.76.3) - - React-rendererdebug (0.76.3): + - React-rendererconsistency (0.76.9) + - React-rendererdebug (0.76.9): - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) + - fast_float + - fmt + - RCT-Folly - React-debug - - React-rncore (0.76.3) - - React-RuntimeApple (0.76.3): + - React-rncore (0.76.9) + - React-RuntimeApple (0.76.9): - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-callinvoker - React-Core/Default - React-CoreModules @@ -1524,10 +1570,10 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.76.3): + - React-RuntimeCore (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-cxxreact - React-featureflags - React-jserrorhandler @@ -1538,11 +1584,11 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.76.3): - - React-jsi (= 0.76.3) - - React-RuntimeHermes (0.76.3): + - React-runtimeexecutor (0.76.9): + - React-jsi (= 0.76.9) + - React-RuntimeHermes (0.76.9): - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-featureflags - React-hermes - React-jsi @@ -1551,10 +1597,10 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.76.3): + - React-runtimescheduler (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-callinvoker - React-cxxreact - React-debug @@ -1566,14 +1612,14 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.76.3) - - React-utils (0.76.3): + - React-timing (0.76.9) + - React-utils (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-debug - - React-jsi (= 0.76.3) - - ReactCodegen (0.76.3): + - React-jsi (= 0.76.9) + - ReactCodegen (0.76.9): - DoubleConversion - glog - hermes-engine @@ -1593,51 +1639,54 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.76.3): - - ReactCommon/turbomodule (= 0.76.3) - - ReactCommon/turbomodule (0.76.3): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - ReactCommon/turbomodule/bridging (= 0.76.3) - - ReactCommon/turbomodule/core (= 0.76.3) - - ReactCommon/turbomodule/bridging (0.76.3): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - ReactCommon/turbomodule/core (0.76.3): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-debug (= 0.76.3) - - React-featureflags (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - React-utils (= 0.76.3) + - ReactCommon (0.76.9): + - ReactCommon/turbomodule (= 0.76.9) + - ReactCommon/turbomodule (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi + - React-logger + - React-perflogger + - ReactCommon/turbomodule/bridging (= 0.76.9) + - ReactCommon/turbomodule/core (= 0.76.9) + - ReactCommon/turbomodule/bridging (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi (= 0.76.9) + - React-logger + - React-perflogger + - ReactCommon/turbomodule/core (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-debug (= 0.76.9) + - React-featureflags (= 0.76.9) + - React-jsi + - React-logger + - React-perflogger + - React-utils (= 0.76.9) - RNReanimated (3.16.5): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1660,7 +1709,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1682,7 +1731,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1703,7 +1752,7 @@ PODS: - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1720,11 +1769,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNSVG (15.10.1): + - RNSVG (15.8.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1740,13 +1789,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.10.1) + - RNSVG/common (= 15.8.0) - Yoga - - RNSVG/common (15.10.1): + - RNSVG/common (15.8.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1776,6 +1825,7 @@ DEPENDENCIES: - ExpoFont (from `../node_modules/expo-font/ios`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) @@ -1868,6 +1918,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-keep-awake/ios" ExpoModulesCore: :path: "../node_modules/expo-modules-core" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" fmt: @@ -2003,81 +2055,82 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 1dca942403ed9342f98334bf4c3621f011aa7946 DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 - EXConstants: dd2fe64c6cdb1383b694c309a63028a8e9f2be6d - Expo: d901db29ffb24ccad280920f3c6de69febb89935 - ExpoAsset: 8138f2a9ec55ae1ad7c3871448379f7d97692d15 - ExpoFileSystem: 179a0661fd6d3c4e5d7e500a99a9cd8b295d9566 - ExpoFont: 7522d869d84ee2ee8093ee997fef5b86f85d856b - ExpoKeepAwake: 783e68647b969b210a786047c3daa7b753dcac1f - ExpoModulesCore: 41844ce131433b266261b44012d5b41ac0513999 - FBLazyVector: be7314029d6ec6b90f0f75ce1195b8130ed9ac4f - fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be + EXConstants: a1f35b9aabbb3c6791f8e67722579b1ffcdd3f18 + Expo: 3e53243e3281214a7d613f8a875c0b732d7512c2 + ExpoAsset: 0687fe05f5d051c4a34dd1f9440bd00858413cfe + ExpoFileSystem: c8c19bf80d914c83dda3beb8569d7fb603be0970 + ExpoFont: 773955186469acc5108ff569712a2d243857475f + ExpoKeepAwake: 2a5f15dd4964cba8002c9a36676319a3394c85c7 + ExpoModulesCore: dd965804a882f1dbb6036fceea4d912461aeaa0d + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45 + fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6 glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a - hermes-engine: 0555a84ea495e8e3b4bde71b597cd87fbb382888 + hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11 opencv-rne: 63e933ae2373fc91351f9a348dc46c3f523c2d3f - RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648 - RCTDeprecation: 2c5e1000b04ab70b53956aa498bf7442c3c6e497 - RCTRequired: 5f785a001cf68a551c5f5040fb4c415672dbb481 - RCTTypeSafety: 6b98db8965005d32449605c0d005ecb4fee8a0f7 - React: 8077bf7c185afb515be82518507e16f71a247a5e - React-callinvoker: 519eee9520727805e2867a6d8dad4ebbeed543db - React-Core: e364ceda7d086c7d14adeec0eb880a90073e3dde - React-CoreModules: 291be650024d9db086c95fd1d7e7d9607c6de62b - React-cxxreact: 5cf17d13ca0fc0734e1bb0ed9615d1d1fc45ef78 - React-debug: 931ca94abd6b1bcab539e356e20df788afecae8f - React-defaultsnativemodule: 6afc2dd3619bac12dc54c1ee939bf14f9aa96b42 - React-domnativemodule: f140d46f6f3c3f1efc987c98b464fcbece0cc93a - React-Fabric: e1774fe4b579e34c2c5721e9351c8ce869e7b5f0 - React-FabricComponents: 528ff9f96d150379ed404221d70cc7019ca76865 - React-FabricImage: 31680b7ddc740e040277176fbd6541fcf0fd44af - React-featureflags: 7c7a74b65ee5a228f520b387ebfe0e8d9cecc622 - React-featureflagsnativemodule: dd3450366b1c9557975e457ce6baa151ccee84da - React-graphics: 7f0d3e06d356e8476bd8ba95d90762fc01138ebc - React-hermes: f83fafe6a1c845dace7abad4a5d7366cbb42ab96 - React-idlecallbacksnativemodule: 14ce331438e2bca7d464a8a211b14543aff4dc91 - React-ImageManager: 2b9274ea973f43597a554a182d7ef525836172c6 - React-jserrorhandler: 3b521485275d295cfc6ec6bfa921a1d608693ecf - React-jsi: fd23c1d759feb709784fd4c835b510b90a94dd12 - React-jsiexecutor: 74628d57accc03d4b5df53db813ef6dcd704c9ae - React-jsinspector: 89a1e27e97c762de81bd4b9cb1314750304bba38 - React-jsitracing: 11b6646d7b2ecdc7a475f65b2cb12d3805964195 - React-logger: 26155dc23db5c9038794db915f80bd2044512c2e - React-Mapbuffer: ad1ba0205205a16dbff11b8ade6d1b3959451658 - React-microtasksnativemodule: e771eb9eb6ace5884ee40a293a0e14a9d7a4343c - react-native-executorch: 5dc6cbade251d9f987964d0e1c5ea6da2f16e274 - react-native-safe-area-context: 782fec0553f14a630a2bac87b116e512a9f35500 - React-nativeconfig: aeed6e2a8ac02b2df54476afcc7c663416c12bf7 - React-NativeModulesApple: c5b7813da94136f50ef084fa1ac077332dcfc658 - React-perflogger: 6afb7eebf7d9521cc70481688ccddf212970e9d3 - React-performancetimeline: 81884d35896b22d51832e7c8748c8330ec73c491 - React-RCTActionSheet: c940a35d71686941ac2b96dd07bde11ea0f0c34f - React-RCTAnimation: e1dbb4e530d6f58437ab2fae372de3788ecdffab - React-RCTAppDelegate: f9825950ac2c52ae1cf46b648bb362b86b62fe41 - React-RCTBlob: 9cdac4721a76e2d132fb1760eafd0a8f150d1c96 - React-RCTFabric: c0aa01a448bcebb1326d068ed7545eb11561e663 - React-RCTImage: f09f5165807e1a69a2bbac6c7168a8ed57ed4e26 - React-RCTLinking: 4ea06b79cba7e15d8af4d86b1dcede6bd29a47fd - React-RCTNetwork: 43a38148c7a4a2380e76b08f07f02ee8eaac8965 - React-RCTSettings: cc60bb6b38eed0683696b5ddf45b0a4a1441147b - React-RCTText: fbe5e6e886beefd5d432790bc50b7aa2b6504264 - React-RCTVibration: 061dbf7a0a1e77bfc1c4672e7be6884dc12f18bf - React-rendererconsistency: 52b471890a1946991f2db81aa6867b14d93f4ea5 - React-rendererdebug: 3f63479f704e266a3bf104c897315a885c72859b - React-rncore: 33ea67bfd2eeaa4f4a0c9e0e8bd55e9b7ccb9faa - React-RuntimeApple: bcd91a191637ab5895593135de74ac54bf88df5d - React-RuntimeCore: 3a42a7f12f5f6cc4cb0e22446540165d204d7a15 - React-runtimeexecutor: db3f17084ee7b71ab84912c527d428cc3a137841 - React-RuntimeHermes: 91bcd6aeec4bab20cebd33cb8984e3825ccdc77e - React-runtimescheduler: 92a5a092ded9a9aaac765ac940d26b52bac48901 - React-timing: 54693ad0872f64127f7cb41675b1be4fd28ea4dc - React-utils: 2bcaf4f4dfe361344bce2fae428603d518488630 - ReactCodegen: ae99a130606068ed40d1d9c0d5f25fda142a0647 - ReactCommon: 89c87b343deacc8610b099ac764848f0ce937e3e - RNReanimated: eb3170ded1ec1f61d8129c6cc2df06778f99703f - RNSVG: ec2e9d524612ee95db5df143a54518c5404d93f0 + RCT-Folly: 7b4f73a92ad9571b9dbdb05bb30fad927fa971e1 + RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83 + RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716 + RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f + React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d + React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea + React-Core: 0a06707a0b34982efc4a556aff5dae4b22863455 + React-CoreModules: 907334e94314189c2e5eed4877f3efe7b26d85b0 + React-cxxreact: 3a1d5e8f4faa5e09be26614e9c8bbcae8d11b73d + React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964 + React-defaultsnativemodule: 814830ccbc3fb08d67d0190e63b179ee4098c67b + React-domnativemodule: 270acf94bd0960b026bc3bfb327e703665d27fb4 + React-Fabric: 64586dc191fc1c170372a638b8e722e4f1d0a09b + React-FabricComponents: b0ebd032387468ea700574c581b139f57a7497fb + React-FabricImage: 81f0e0794caf25ad1224fa406d288fbc1986607f + React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c + React-featureflagsnativemodule: 0d7091ae344d6160c0557048e127897654a5c00f + React-graphics: cbebe910e4a15b65b0bff94a4d3ed278894d6386 + React-hermes: ec18c10f5a69d49fb9b5e17ae95494e9ea13d4d3 + React-idlecallbacksnativemodule: 6b84add48971da9c40403bd1860d4896462590f2 + React-ImageManager: f2a4c01c2ccb2193e60a20c135da74c7ca4d36f2 + React-jserrorhandler: 61d205b5a7cbc57fed3371dd7eed48c97f49fc64 + React-jsi: 95f7676103137861b79b0f319467627bcfa629ee + React-jsiexecutor: 41e0fe87cda9ea3970ffb872ef10f1ff8dbd1932 + React-jsinspector: 15578208796723e5c6f39069b6e8bf36863ef6e2 + React-jsitracing: 3758cdb155ea7711f0e77952572ea62d90c69f0b + React-logger: dbca7bdfd4aa5ef69431362bde6b36d49403cb20 + React-Mapbuffer: 6efad4a606c1fae7e4a93385ee096681ef0300dc + React-microtasksnativemodule: a645237a841d733861c70b69908ab4a1707b52ad + react-native-executorch: 460895a9b44bba86e89675c4e461b43dd797fab9 + react-native-safe-area-context: 0dfbd139206a79364916959bc8b1a6bea3caba97 + React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678 + React-NativeModulesApple: 958d4f6c5c2ace4c0f427cf7ef82e28ae6538a22 + React-perflogger: 9b4f13c0afe56bc7b4a0e93ec74b1150421ee22d + React-performancetimeline: 359db1cb889aa0282fafc5838331b0987c4915a9 + React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342 + React-RCTAnimation: d8c82deebebe3aaf7a843affac1b57cb2dc073d4 + React-RCTAppDelegate: 1774aa421a29a41a704ecaf789811ef73c4634b6 + React-RCTBlob: 70a58c11a6a3500d1a12f2e51ca4f6c99babcff8 + React-RCTFabric: 731cda82aed592aacce2d32ead69d78cde5d9274 + React-RCTImage: 5e9d655ba6a790c31e3176016f9b47fd0978fbf0 + React-RCTLinking: 2a48338252805091f7521eaf92687206401bdf2a + React-RCTNetwork: 0c1282b377257f6b1c81934f72d8a1d0c010e4c3 + React-RCTSettings: f757b679a74e5962be64ea08d7865a7debd67b40 + React-RCTText: e7d20c490b407d3b4a2daa48db4bcd8ec1032af2 + React-RCTVibration: 8228e37144ca3122a91f1de16ba8e0707159cfec + React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6 + React-rendererdebug: 81becbc8852b38d9b1b68672aa504556481330d5 + React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74 + React-RuntimeApple: 52ed0e9e84a7c2607a901149fb13599a3c057655 + React-RuntimeCore: ca6189d2e53d86db826e2673fe8af6571b8be157 + React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899 + React-RuntimeHermes: 3b752dc5d8a1661c9d1687391d6d96acfa385549 + React-runtimescheduler: 8321bb09175ace2a4f0b3e3834637eb85bf42ebe + React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9 + React-utils: 54df9ada708578c8ad40d92895d6fed03e0e8a9e + ReactCodegen: 21a52ccddc6479448fc91903a437dd23ddc7366c + ReactCommon: bfd3600989d79bc3acbe7704161b171a1480b9fd + RNReanimated: b95559eb62609b22b99f6e7f20cb892c20b393dc + RNSVG: 81d52481cde97ce0dcc81a55b0310723817088d0 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 3deb2471faa9916c8a82dda2a22d3fba2620ad37 + Yoga: 40f19fff64dce86773bf8b602c7070796c007970 -PODFILE CHECKSUM: a8c0032cd3950a69de2d58db3e646db2359d5bc4 +PODFILE CHECKSUM: 88e3ce002e61ae1984854bd9714307036733a9d9 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/examples/llm/ios/Podfile.properties.json b/examples/llm/ios/Podfile.properties.json new file mode 100644 index 000000000..417e2e5ab --- /dev/null +++ b/examples/llm/ios/Podfile.properties.json @@ -0,0 +1,5 @@ +{ + "expo.jsEngine": "hermes", + "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true", + "newArchEnabled": "true" +} diff --git a/examples/llama/ios/llama.xcodeproj/project.pbxproj b/examples/llm/ios/llm.xcodeproj/project.pbxproj similarity index 72% rename from examples/llama/ios/llama.xcodeproj/project.pbxproj rename to examples/llm/ios/llm.xcodeproj/project.pbxproj index 643c0f6c9..398e73e9a 100644 --- a/examples/llama/ios/llama.xcodeproj/project.pbxproj +++ b/examples/llm/ios/llm.xcodeproj/project.pbxproj @@ -3,42 +3,42 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 1F40FA8EF69C4AEBB072EFBB /* Aeonik-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = A0DC0390B1F54A86BDD796D7 /* Aeonik-Regular.otf */; }; 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; - 3E48E47684254851AD945E5F /* Aeonik-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = D92C3BC873374EFFA3473F91 /* Aeonik-Medium.otf */; }; - 70893B189461457CB14F24D9 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BD85B2807ED4C7181912F51 /* noop-file.swift */; }; - 73C30FD05C4849768B046A52 /* Aeonik-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9687E3B32FC6436DB1DD56F7 /* Aeonik-Regular.otf */; }; + 4F70BA1E4FEA4929ABD21B27 /* Aeonik-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = A5362DD34B4247ADA4092D9B /* Aeonik-Medium.otf */; }; + 96905EF65AED1B983A6B3ABC /* libPods-llm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-llm.a */; }; B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; - E39855E7ADE2DFBE45A8981B /* libPods-llama.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18B9BDAA16DD07209C7D6B56 /* libPods-llama.a */; }; - F923D4B69222F124FA1FE3C3 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 1715AE6E468B5AA99C377930 /* PrivacyInfo.xcprivacy */; }; + E7308D96AD6D4EA281A7B77C /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89735D369D01418787766C37 /* noop-file.swift */; }; + FF89C9ABC722356016EDDFE8 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = AAB2873575BB35D677C43D40 /* PrivacyInfo.xcprivacy */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 13B07F961A680F5B00A75B9A /* llama.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = llama.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = llama/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = llama/AppDelegate.mm; sourceTree = ""; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = llama/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = llama/Info.plist; sourceTree = ""; }; - 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = llama/main.m; sourceTree = ""; }; - 1715AE6E468B5AA99C377930 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = llama/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 18B9BDAA16DD07209C7D6B56 /* libPods-llama.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-llama.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2D0B1FD6AE589F99AE1898D7 /* Pods-llama.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-llama.release.xcconfig"; path = "Target Support Files/Pods-llama/Pods-llama.release.xcconfig"; sourceTree = ""; }; - 3BD85B2807ED4C7181912F51 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "llama/noop-file.swift"; sourceTree = ""; }; - 469F8F2EF4DF406CA88142C3 /* llama-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "llama-Bridging-Header.h"; path = "llama/llama-Bridging-Header.h"; sourceTree = ""; }; - 9687E3B32FC6436DB1DD56F7 /* Aeonik-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Aeonik-Regular.otf"; path = "../assets/fonts/Aeonik-Regular.otf"; sourceTree = ""; }; - 99EC53DEC145AFD1C234E344 /* Pods-llama.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-llama.debug.xcconfig"; path = "Target Support Files/Pods-llama/Pods-llama.debug.xcconfig"; sourceTree = ""; }; - AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = llama/SplashScreen.storyboard; sourceTree = ""; }; + 13B07F961A680F5B00A75B9A /* llm.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = llm.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = llm/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = llm/AppDelegate.mm; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = llm/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = llm/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = llm/main.m; sourceTree = ""; }; + 42BD61A11DCC4F31AD59392A /* llm-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "llm-Bridging-Header.h"; path = "llm/llm-Bridging-Header.h"; sourceTree = ""; }; + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-llm.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-llm.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C2E3173556A471DD304B334 /* Pods-llm.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-llm.debug.xcconfig"; path = "Target Support Files/Pods-llm/Pods-llm.debug.xcconfig"; sourceTree = ""; }; + 7A4D352CD337FB3A3BF06240 /* Pods-llm.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-llm.release.xcconfig"; path = "Target Support Files/Pods-llm/Pods-llm.release.xcconfig"; sourceTree = ""; }; + 89735D369D01418787766C37 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "llm/noop-file.swift"; sourceTree = ""; }; + A0DC0390B1F54A86BDD796D7 /* Aeonik-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Aeonik-Regular.otf"; path = "../assets/fonts/Aeonik-Regular.otf"; sourceTree = ""; }; + A5362DD34B4247ADA4092D9B /* Aeonik-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Aeonik-Medium.otf"; path = "../assets/fonts/Aeonik-Medium.otf"; sourceTree = ""; }; + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = llm/SplashScreen.storyboard; sourceTree = ""; }; + AAB2873575BB35D677C43D40 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = llm/PrivacyInfo.xcprivacy; sourceTree = ""; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; - D92C3BC873374EFFA3473F91 /* Aeonik-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Aeonik-Medium.otf"; path = "../assets/fonts/Aeonik-Medium.otf"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; - FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-llama/ExpoModulesProvider.swift"; sourceTree = ""; }; + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-llm/ExpoModulesProvider.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -46,14 +46,14 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E39855E7ADE2DFBE45A8981B /* libPods-llama.a in Frameworks */, + 96905EF65AED1B983A6B3ABC /* libPods-llm.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 13B07FAE1A68108700A75B9A /* llama */ = { + 13B07FAE1A68108700A75B9A /* llm */ = { isa = PBXGroup; children = ( BB2F792B24A3F905000567C9 /* Supporting */, @@ -63,29 +63,30 @@ 13B07FB61A68108700A75B9A /* Info.plist */, 13B07FB71A68108700A75B9A /* main.m */, AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, - 3BD85B2807ED4C7181912F51 /* noop-file.swift */, - 469F8F2EF4DF406CA88142C3 /* llama-Bridging-Header.h */, - 1715AE6E468B5AA99C377930 /* PrivacyInfo.xcprivacy */, + 89735D369D01418787766C37 /* noop-file.swift */, + 42BD61A11DCC4F31AD59392A /* llm-Bridging-Header.h */, + AAB2873575BB35D677C43D40 /* PrivacyInfo.xcprivacy */, ); - name = llama; + name = llm; sourceTree = ""; }; 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 18B9BDAA16DD07209C7D6B56 /* libPods-llama.a */, + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-llm.a */, ); name = Frameworks; sourceTree = ""; }; - 8071F0B3451342A8B7DA0560 /* Resources */ = { + 72C8F0D5E836475EB8760F99 /* Resources */ = { isa = PBXGroup; children = ( - 9687E3B32FC6436DB1DD56F7 /* Aeonik-Regular.otf */, - D92C3BC873374EFFA3473F91 /* Aeonik-Medium.otf */, + A0DC0390B1F54A86BDD796D7 /* Aeonik-Regular.otf */, + A5362DD34B4247ADA4092D9B /* Aeonik-Medium.otf */, ); name = Resources; + path = ""; sourceTree = ""; }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { @@ -98,13 +99,13 @@ 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( - 13B07FAE1A68108700A75B9A /* llama */, + 13B07FAE1A68108700A75B9A /* llm */, 832341AE1AAA6A7D00B99B32 /* Libraries */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, D65327D7A22EEC0BE12398D9 /* Pods */, D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, - 8071F0B3451342A8B7DA0560 /* Resources */, + 72C8F0D5E836475EB8760F99 /* Resources */, ); indentWidth = 2; sourceTree = ""; @@ -114,17 +115,17 @@ 83CBBA001A601CBA00E9B192 /* Products */ = { isa = PBXGroup; children = ( - 13B07F961A680F5B00A75B9A /* llama.app */, + 13B07F961A680F5B00A75B9A /* llm.app */, ); name = Products; sourceTree = ""; }; - 92DBD88DE9BF7D494EA9DA96 /* llama */ = { + 92DBD88DE9BF7D494EA9DA96 /* llm */ = { isa = PBXGroup; children = ( FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */, ); - name = llama; + name = llm; sourceTree = ""; }; BB2F792B24A3F905000567C9 /* Supporting */ = { @@ -133,14 +134,14 @@ BB2F792C24A3F905000567C9 /* Expo.plist */, ); name = Supporting; - path = llama/Supporting; + path = llm/Supporting; sourceTree = ""; }; D65327D7A22EEC0BE12398D9 /* Pods */ = { isa = PBXGroup; children = ( - 99EC53DEC145AFD1C234E344 /* Pods-llama.debug.xcconfig */, - 2D0B1FD6AE589F99AE1898D7 /* Pods-llama.release.xcconfig */, + 6C2E3173556A471DD304B334 /* Pods-llm.debug.xcconfig */, + 7A4D352CD337FB3A3BF06240 /* Pods-llm.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -148,7 +149,7 @@ D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = { isa = PBXGroup; children = ( - 92DBD88DE9BF7D494EA9DA96 /* llama */, + 92DBD88DE9BF7D494EA9DA96 /* llm */, ); name = ExpoModulesProviders; sourceTree = ""; @@ -156,26 +157,26 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 13B07F861A680F5B00A75B9A /* llama */ = { + 13B07F861A680F5B00A75B9A /* llm */ = { isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "llama" */; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "llm" */; buildPhases = ( - 4B47EAC8A63981EB4B85381A /* [CP] Check Pods Manifest.lock */, - 1C494C8D1B7ABCB54FF643A4 /* [Expo] Configure project */, + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, + 8978163B20A42F160D3EC296 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 71C7ADC7BAE3F282F4535DB5 /* [CP] Embed Pods Frameworks */, - 3D32E881F56B8F15C30BA168 /* [CP] Copy Pods Resources */, + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, + 3A3DED9DC58C5F1F2B44CE89 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); - name = llama; - productName = llama; - productReference = 13B07F961A680F5B00A75B9A /* llama.app */; + name = llm; + productName = llm; + productReference = 13B07F961A680F5B00A75B9A /* llm.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ @@ -188,11 +189,10 @@ TargetAttributes = { 13B07F861A680F5B00A75B9A = { LastSwiftMigration = 1250; - ProvisioningStyle = Automatic; }; }; }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "llama" */; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "llm" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; @@ -205,7 +205,7 @@ projectDirPath = ""; projectRoot = ""; targets = ( - 13B07F861A680F5B00A75B9A /* llama */, + 13B07F861A680F5B00A75B9A /* llm */, ); }; /* End PBXProject section */ @@ -218,9 +218,9 @@ BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, - 73C30FD05C4849768B046A52 /* Aeonik-Regular.otf in Resources */, - 3E48E47684254851AD945E5F /* Aeonik-Medium.otf in Resources */, - F923D4B69222F124FA1FE3C3 /* PrivacyInfo.xcprivacy in Resources */, + 1F40FA8EF69C4AEBB072EFBB /* Aeonik-Regular.otf in Resources */, + 4F70BA1E4FEA4929ABD21B27 /* Aeonik-Medium.otf in Resources */, + FF89C9ABC722356016EDDFE8 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -242,37 +242,59 @@ shellPath = /bin/sh; shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; }; - 1C494C8D1B7ABCB54FF643A4 /* [Expo] Configure project */ = { + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = "[Expo] Configure project"; + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-llm-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 3A3DED9DC58C5F1F2B44CE89 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-llm/Pods-llm-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/react-native-executorch/ExecutorchLib.framework/ExecutorchLib", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExecutorchLib.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-llama/expo-configure-project.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-llm/Pods-llm-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 3D32E881F56B8F15C30BA168 /* [CP] Copy Pods Resources */ = { + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-llama/Pods-llama-resources.sh", + "${PODS_ROOT}/Target Support Files/Pods-llm/Pods-llm-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", @@ -284,7 +306,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", @@ -292,50 +313,27 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-llama/Pods-llama-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-llm/Pods-llm-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 4B47EAC8A63981EB4B85381A /* [CP] Check Pods Manifest.lock */ = { + 8978163B20A42F160D3EC296 /* [Expo] Configure project */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; + name = "[Expo] Configure project"; outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-llama-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 71C7ADC7BAE3F282F4535DB5 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-llama/Pods-llama-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/react-native-executorch/ExecutorchLib.framework/ExecutorchLib", - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExecutorchLib.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-llama/Pods-llama-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-llm/expo-configure-project.sh\"\n"; }; /* End PBXShellScriptBuildPhase section */ @@ -347,7 +345,7 @@ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, - 70893B189461457CB14F24D9 /* noop-file.swift in Sources */, + E7308D96AD6D4EA281A7B77C /* noop-file.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -356,26 +354,20 @@ /* Begin XCBuildConfiguration section */ 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 99EC53DEC145AFD1C234E344 /* Pods-llama.debug.xcconfig */; + baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-llm.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = llama/llama.entitlements; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_ENTITLEMENTS = llm/llm.entitlements; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = B357MU264T; ENABLE_BITCODE = NO; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "FB_SONARKIT_ENABLED=1", ); - INFOPLIST_FILE = llama/Info.plist; + INFOPLIST_FILE = llm/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", @@ -383,9 +375,9 @@ "-lc++", ); OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; - PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.llama; - PRODUCT_NAME = llama; - SWIFT_OBJC_BRIDGING_HEADER = "llama/llama-Bridging-Header.h"; + PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.llm; + PRODUCT_NAME = llm; + SWIFT_OBJC_BRIDGING_HEADER = "llm/llm-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -395,21 +387,15 @@ }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2D0B1FD6AE589F99AE1898D7 /* Pods-llama.release.xcconfig */; + baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-llm.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = llama/llama.entitlements; - CODE_SIGN_IDENTITY = "Apple Development"; - CODE_SIGN_STYLE = Automatic; + CODE_SIGN_ENTITLEMENTS = llm/llm.entitlements; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = B357MU264T; - INFOPLIST_FILE = llama/Info.plist; + INFOPLIST_FILE = llm/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MARKETING_VERSION = 1.0; OTHER_LDFLAGS = ( "$(inherited)", @@ -417,9 +403,9 @@ "-lc++", ); OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; - PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.llama; - PRODUCT_NAME = llama; - SWIFT_OBJC_BRIDGING_HEADER = "llama/llama-Bridging-Header.h"; + PRODUCT_BUNDLE_IDENTIFIER = com.anonymous.llm; + PRODUCT_NAME = llm; + SWIFT_OBJC_BRIDGING_HEADER = "llm/llm-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; @@ -474,10 +460,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; @@ -533,10 +516,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = ( @@ -553,7 +533,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "llama" */ = { + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "llm" */ = { isa = XCConfigurationList; buildConfigurations = ( 13B07F941A680F5B00A75B9A /* Debug */, @@ -562,7 +542,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "llama" */ = { + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "llm" */ = { isa = XCConfigurationList; buildConfigurations = ( 83CBBA201A601CBA00E9B192 /* Debug */, diff --git a/examples/llama/ios/llama.xcodeproj/xcshareddata/xcschemes/llama.xcscheme b/examples/llm/ios/llm.xcodeproj/xcshareddata/xcschemes/llm.xcscheme similarity index 81% rename from examples/llama/ios/llama.xcodeproj/xcshareddata/xcschemes/llama.xcscheme rename to examples/llm/ios/llm.xcodeproj/xcshareddata/xcschemes/llm.xcscheme index f1012ddea..59013c3e3 100644 --- a/examples/llama/ios/llama.xcodeproj/xcshareddata/xcschemes/llama.xcscheme +++ b/examples/llm/ios/llm.xcodeproj/xcshareddata/xcschemes/llm.xcscheme @@ -15,9 +15,9 @@ + BuildableName = "llm.app" + BlueprintName = "llm" + ReferencedContainer = "container:llm.xcodeproj"> @@ -33,9 +33,9 @@ + BuildableName = "llmTests.xctest" + BlueprintName = "llmTests" + ReferencedContainer = "container:llm.xcodeproj"> @@ -55,9 +55,9 @@ + BuildableName = "llm.app" + BlueprintName = "llm" + ReferencedContainer = "container:llm.xcodeproj"> @@ -72,9 +72,9 @@ + BuildableName = "llm.app" + BlueprintName = "llm" + ReferencedContainer = "container:llm.xcodeproj"> diff --git a/examples/llama/ios/llama.xcworkspace/contents.xcworkspacedata b/examples/llm/ios/llm.xcworkspace/contents.xcworkspacedata similarity index 81% rename from examples/llama/ios/llama.xcworkspace/contents.xcworkspacedata rename to examples/llm/ios/llm.xcworkspace/contents.xcworkspacedata index ce428fb53..11d93aa22 100644 --- a/examples/llama/ios/llama.xcworkspace/contents.xcworkspacedata +++ b/examples/llm/ios/llm.xcworkspace/contents.xcworkspacedata @@ -2,7 +2,7 @@ + location = "group:llm.xcodeproj"> diff --git a/examples/llm/ios/llm/AppDelegate.h b/examples/llm/ios/llm/AppDelegate.h new file mode 100644 index 000000000..1f65766b9 --- /dev/null +++ b/examples/llm/ios/llm/AppDelegate.h @@ -0,0 +1,7 @@ +#import +#import +#import + +@interface AppDelegate : EXAppDelegateWrapper + +@end diff --git a/examples/llm/ios/llm/AppDelegate.mm b/examples/llm/ios/llm/AppDelegate.mm new file mode 100644 index 000000000..9be55c972 --- /dev/null +++ b/examples/llm/ios/llm/AppDelegate.mm @@ -0,0 +1,87 @@ +#import "AppDelegate.h" + +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + self.moduleName = @"main"; + + // You can add your custom initial props in the dictionary below. + // They will be passed down to the ViewController used by React Native. + self.initialProps = @{}; + + return [super application:application + didFinishLaunchingWithOptions:launchOptions]; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { + return [self bundleURL]; +} + +- (NSURL *)bundleURL { +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] + jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" + withExtension:@"jsbundle"]; +#endif +} + +// Linking API +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + options: + (NSDictionary *)options { + return [super application:application openURL:url options:options] || + [RCTLinkingManager application:application + openURL:url + options:options]; +} + +// Universal Links +- (BOOL)application:(UIApplication *)application + continueUserActivity:(nonnull NSUserActivity *)userActivity + restorationHandler: + (nonnull void (^)(NSArray> *_Nullable)) + restorationHandler { + BOOL result = [RCTLinkingManager application:application + continueUserActivity:userActivity + restorationHandler:restorationHandler]; + return [super application:application + continueUserActivity:userActivity + restorationHandler:restorationHandler] || + result; +} + +// Explicitly define remote notification delegates to ensure compatibility with +// some third-party libraries +- (void)application:(UIApplication *)application + didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + return [super application:application + didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; +} + +// Explicitly define remote notification delegates to ensure compatibility with +// some third-party libraries +- (void)application:(UIApplication *)application + didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { + return [super application:application + didFailToRegisterForRemoteNotificationsWithError:error]; +} + +// Explicitly define remote notification delegates to ensure compatibility with +// some third-party libraries +- (void)application:(UIApplication *)application + didReceiveRemoteNotification:(NSDictionary *)userInfo + fetchCompletionHandler: + (void (^)(UIBackgroundFetchResult))completionHandler { + return [super application:application + didReceiveRemoteNotification:userInfo + fetchCompletionHandler:completionHandler]; +} + +@end diff --git a/examples/llm/ios/llm/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/examples/llm/ios/llm/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png new file mode 100644 index 000000000..2732229fa Binary files /dev/null and b/examples/llm/ios/llm/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png differ diff --git a/examples/llm/ios/llm/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/llm/ios/llm/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..5f6956c15 --- /dev/null +++ b/examples/llm/ios/llm/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images": [ + { + "filename": "App-Icon-1024x1024@1x.png", + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} diff --git a/examples/llm/ios/llm/Images.xcassets/Contents.json b/examples/llm/ios/llm/Images.xcassets/Contents.json new file mode 100644 index 000000000..b4ded435d --- /dev/null +++ b/examples/llm/ios/llm/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "version": 1, + "author": "expo" + } +} diff --git a/examples/llm/ios/llm/Images.xcassets/SplashScreenBackground.colorset/Contents.json b/examples/llm/ios/llm/Images.xcassets/SplashScreenBackground.colorset/Contents.json new file mode 100644 index 000000000..3402288ad --- /dev/null +++ b/examples/llm/ios/llm/Images.xcassets/SplashScreenBackground.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors": [ + { + "color": { + "components": { + "alpha": "1.000", + "blue": "1.00000000000000", + "green": "1.00000000000000", + "red": "1.00000000000000" + }, + "color-space": "srgb" + }, + "idiom": "universal" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} diff --git a/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/Contents.json b/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/Contents.json new file mode 100644 index 000000000..f615695d0 --- /dev/null +++ b/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images": [ + { + "idiom": "universal", + "filename": "image.png", + "scale": "1x" + }, + { + "idiom": "universal", + "filename": "image@2x.png", + "scale": "2x" + }, + { + "idiom": "universal", + "filename": "image@3x.png", + "scale": "3x" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} diff --git a/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image.png b/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image.png new file mode 100644 index 000000000..c52c2c680 Binary files /dev/null and b/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image.png differ diff --git a/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image@2x.png b/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image@2x.png new file mode 100644 index 000000000..c52c2c680 Binary files /dev/null and b/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image@2x.png differ diff --git a/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image@3x.png b/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image@3x.png new file mode 100644 index 000000000..c52c2c680 Binary files /dev/null and b/examples/llm/ios/llm/Images.xcassets/SplashScreenLogo.imageset/image@3x.png differ diff --git a/examples/llama/ios/llama/Info.plist b/examples/llm/ios/llm/Info.plist similarity index 97% rename from examples/llama/ios/llama/Info.plist rename to examples/llm/ios/llm/Info.plist index 259ef7295..94a87116a 100644 --- a/examples/llama/ios/llama/Info.plist +++ b/examples/llm/ios/llm/Info.plist @@ -7,7 +7,7 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - llama + llm CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -27,7 +27,7 @@ CFBundleURLSchemes - com.anonymous.llama + com.anonymous.llm
diff --git a/examples/llm/ios/llm/PrivacyInfo.xcprivacy b/examples/llm/ios/llm/PrivacyInfo.xcprivacy new file mode 100644 index 000000000..5bb83c5d4 --- /dev/null +++ b/examples/llm/ios/llm/PrivacyInfo.xcprivacy @@ -0,0 +1,48 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + 0A2A.1 + 3B52.1 + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + 85F4.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/examples/llm/ios/llm/SplashScreen.storyboard b/examples/llm/ios/llm/SplashScreen.storyboard new file mode 100644 index 000000000..8a6fcd47b --- /dev/null +++ b/examples/llm/ios/llm/SplashScreen.storyboard @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/llm/ios/llm/Supporting/Expo.plist b/examples/llm/ios/llm/Supporting/Expo.plist new file mode 100644 index 000000000..750be020c --- /dev/null +++ b/examples/llm/ios/llm/Supporting/Expo.plist @@ -0,0 +1,12 @@ + + + + + EXUpdatesCheckOnLaunch + ALWAYS + EXUpdatesEnabled + + EXUpdatesLaunchWaitMs + 0 + + \ No newline at end of file diff --git a/examples/llm/ios/llm/llm-Bridging-Header.h b/examples/llm/ios/llm/llm-Bridging-Header.h new file mode 100644 index 000000000..339994e93 --- /dev/null +++ b/examples/llm/ios/llm/llm-Bridging-Header.h @@ -0,0 +1,4 @@ +// +// Use this file to import your target's public headers that you would like to +// expose to Swift. +// diff --git a/examples/llm/ios/llm/llm.entitlements b/examples/llm/ios/llm/llm.entitlements new file mode 100644 index 000000000..f683276c5 --- /dev/null +++ b/examples/llm/ios/llm/llm.entitlements @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/llm/ios/llm/main.m b/examples/llm/ios/llm/main.m new file mode 100644 index 000000000..6b3a51acc --- /dev/null +++ b/examples/llm/ios/llm/main.m @@ -0,0 +1,10 @@ +#import + +#import "AppDelegate.h" + +int main(int argc, char *argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, + NSStringFromClass([AppDelegate class])); + } +} diff --git a/examples/llm/ios/llm/noop-file.swift b/examples/llm/ios/llm/noop-file.swift new file mode 100644 index 000000000..b2ffafbfc --- /dev/null +++ b/examples/llm/ios/llm/noop-file.swift @@ -0,0 +1,4 @@ +// +// @generated +// A blank Swift file must be created for native modules with Swift files to work correctly. +// diff --git a/examples/llm/metro.config.js b/examples/llm/metro.config.js new file mode 100644 index 000000000..1ce72df78 --- /dev/null +++ b/examples/llm/metro.config.js @@ -0,0 +1,21 @@ +const { getDefaultConfig } = require('expo/metro-config'); + +module.exports = (() => { + const config = getDefaultConfig(__dirname); + + const { transformer, resolver } = config; + + config.transformer = { + ...transformer, + babelTransformerPath: require.resolve('react-native-svg-transformer/expo'), + }; + config.resolver = { + ...resolver, + assetExts: resolver.assetExts.filter((ext) => ext !== 'svg'), + sourceExts: [...resolver.sourceExts, 'svg'], + }; + + config.resolver.assetExts.push('pte'); + + return config; +})(); diff --git a/examples/llama/package.json b/examples/llm/package.json similarity index 62% rename from examples/llama/package.json rename to examples/llm/package.json index 6abbb086d..41948669e 100644 --- a/examples/llama/package.json +++ b/examples/llm/package.json @@ -1,5 +1,5 @@ { - "name": "llama", + "name": "llm", "version": "1.0.0", "main": "index.ts", "scripts": { @@ -10,19 +10,20 @@ }, "dependencies": { "@react-native/metro-config": "^0.76.3", - "expo": "~52.0.11", - "expo-font": "^13.0.1", - "expo-status-bar": "~2.0.0", + "expo": "~52.0.46", + "expo-font": "~13.0.4", + "expo-status-bar": "~2.0.1", "metro-config": "^0.81.0", "react": "18.3.1", - "react-native": "0.76.3", - "react-native-executorch": "^0.3.0", + "react-native": "0.76.9", + "react-native-executorch": "0.3.2", "react-native-loading-spinner-overlay": "^3.0.1", "react-native-markdown-display": "^7.0.2", "react-native-reanimated": "^3.16.3", - "react-native-safe-area-context": "^4.14.0", - "react-native-svg": "^15.9.0", - "react-native-svg-transformer": "^1.5.0" + "react-native-safe-area-context": "4.12.0", + "react-native-svg": "15.8.0", + "react-native-svg-transformer": "^1.5.0", + "react-native-wheel-scrollview-picker": "^2.0.6" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/examples/llm/screens/ChatScreen.tsx b/examples/llm/screens/ChatScreen.tsx new file mode 100644 index 000000000..6f1cf62e5 --- /dev/null +++ b/examples/llm/screens/ChatScreen.tsx @@ -0,0 +1,291 @@ +import { useEffect, useRef, useState } from 'react'; +import { + Keyboard, + KeyboardAvoidingView, + Platform, + StyleSheet, + Text, + TextInput, + TouchableOpacity, + TouchableWithoutFeedback, + View, +} from 'react-native'; +import { SafeAreaView } from 'react-native-safe-area-context'; +import SendIcon from '../assets/icons/send_icon.svg'; +import Spinner from 'react-native-loading-spinner-overlay'; +import { + HAMMER2_1_1_5B, + HAMMER2_1_1_5B_TOKENIZER, + HAMMER2_1_1_5B_TOKENIZER_CONFIG, + LLAMA3_2_1B_QLORA, + LLAMA3_2_TOKENIZER, + LLAMA3_2_TOKENIZER_CONFIG, + LLMType, + LLMTool, + useLLM, +} from 'react-native-executorch'; +import PauseIcon from '../assets/icons/pause_icon.svg'; +import ColorPalette from '../colors'; +import Messages from '../components/Messages'; + +export const ChatScreenLLM = () => { + const llm = useLLM({ + modelSource: LLAMA3_2_1B_QLORA, + tokenizerSource: LLAMA3_2_TOKENIZER, + tokenizerConfigSource: LLAMA3_2_TOKENIZER_CONFIG, + }); + + return ; +}; + +export const ChatScreenLLMToolCalling = () => { + const llm = useLLM({ + modelSource: HAMMER2_1_1_5B, + tokenizerSource: HAMMER2_1_1_5B_TOKENIZER, + tokenizerConfigSource: HAMMER2_1_1_5B_TOKENIZER_CONFIG, + toolsConfig: { + tools: TOOL_DEFINITIONS_PHONE, + // we don't implement any tool execution here + // we just want to showcase model's ability + executeToolCallback: async () => { + return null; + }, + // just for demo purpose + displayToolCalls: true, + }, + }); + + return ; +}; + +export default function ChatScreen({ llm }: { llm: LLMType }) { + const [isTextInputFocused, setIsTextInputFocused] = useState(false); + const [userInput, setUserInput] = useState(''); + + useEffect(() => { + if (llm.error) { + console.log('LLM error:', llm.error); + } + }, [llm.error]); + + const textInputRef = useRef(null); + + const sendMessage = async () => { + setUserInput(''); + textInputRef.current?.clear(); + try { + await llm.sendMessage(userInput); + } catch (e) { + console.error(e); + } + }; + + return !llm.isReady ? ( + + ) : ( + + + + {llm.messageHistory.length ? ( + + + + ) : ( + + Hello! 👋 + + What can I help you with? + + + )} + + + setIsTextInputFocused(true)} + onBlur={() => setIsTextInputFocused(false)} + style={{ + ...styles.textInput, + borderColor: isTextInputFocused + ? ColorPalette.blueDark + : ColorPalette.blueLight, + }} + placeholder="Your message" + placeholderTextColor={'#C1C6E5'} + multiline={true} + ref={textInputRef} + onChangeText={(text: string) => setUserInput(text)} + /> + {userInput && ( + !llm.isGenerating && (await sendMessage())} + > + + + )} + {llm.isGenerating && ( + + + + )} + + + + + ); +} + +const TOOL_DEFINITIONS_PHONE: LLMTool[] = [ + { + name: 'brightness', + description: + 'Change screen brightness. Change can be relative (higher/lower) or set to minimal or maximal.', + parameters: { + type: 'dict', + properties: { + relativeChange: { + type: 'number', + description: + 'Relative change of brightness (from 0 to 100). Change should be negative if user asks for less bright screen.', + }, + targetBrightness: { + type: 'number', + description: 'Relative change of brightness (from 0 to 100).', + }, + }, + }, + }, + { + name: 'get_contacts', + description: + 'Gets user phone contacts. Returns both name and phone number.', + parameters: { + type: 'dict', + properties: { + name: { + type: 'string', + description: + 'Full or partial name of person to retrieve. Those will be some part of names or letters, not numbers.', + }, + phoneNumberPrefix: { + type: 'string', + description: + 'Prefix or part of phone number of contact to retrieve. Those will be numbers.', + }, + }, + }, + }, + { + name: 'send_sms', + description: 'Sends SMS/text message to specified user.', + parameters: { + type: 'dict', + properties: { + to: { type: 'string', description: 'The recipient phone number.' }, + body: { type: 'string', description: 'Body of the text message.' }, + }, + required: ['to', 'body'], + }, + }, + { + name: 'read_calendar', + description: 'Read calendar events from now up to given point in time', + parameters: { + type: 'dict', + properties: { + time: { + type: 'string', + description: 'Date and time to which we want to read calendar', + }, + }, + required: ['time'], + }, + }, + { + name: 'add_event_to_calendar', + description: 'Schedules event in your calendar at given time.', + parameters: { + type: 'dict', + properties: { + time: { type: 'string', description: 'Date and time of an event.' }, + title: { type: 'string', description: 'Title of an event' }, + description: { type: 'string', description: 'Description of an event' }, + }, + required: ['time', 'title'], + }, + }, + { + name: 'flashlight', + description: 'Turns the flashlight on/off', + parameters: { + type: 'dict', + properties: { + turn_on: { type: 'boolean', description: 'Turns the flashlight on.' }, + turn_off: { type: 'boolean', description: 'Turns the flashlight off.' }, + }, + required: ['turn_on', 'turn_off'], + }, + }, +]; + +const styles = StyleSheet.create({ + container: { flex: 1 }, + keyboardAvoidingView: { flex: 1 }, + chatContainer: { flex: 10, width: '100%' }, + helloMessageContainer: { + flex: 10, + width: '100%', + alignItems: 'center', + justifyContent: 'center', + }, + helloText: { + fontFamily: 'medium', + fontSize: 30, + color: ColorPalette.primary, + }, + bottomHelloText: { + fontFamily: 'regular', + fontSize: 20, + lineHeight: 28, + color: ColorPalette.primary, + }, + bottomContainer: { + height: 100, + width: '100%', + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + paddingHorizontal: 16, + }, + textInput: { + flex: 1, + borderWidth: 1, + borderRadius: 8, + lineHeight: 19.6, + fontFamily: 'regular', + fontSize: 14, + color: ColorPalette.primary, + padding: 16, + }, + sendChatTouchable: { + height: '100%', + width: 48, + justifyContent: 'center', + alignItems: 'flex-end', + }, +}); diff --git a/examples/llm/tsconfig.json b/examples/llm/tsconfig.json new file mode 100644 index 000000000..b9567f605 --- /dev/null +++ b/examples/llm/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true + } +} diff --git a/examples/llm/yarn.lock b/examples/llm/yarn.lock new file mode 100644 index 000000000..eea1cdd90 --- /dev/null +++ b/examples/llm/yarn.lock @@ -0,0 +1,9252 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@0no-co/graphql.web@npm:^1.0.5, @0no-co/graphql.web@npm:^1.0.8": + version: 1.0.12 + resolution: "@0no-co/graphql.web@npm:1.0.12" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + checksum: 731b326e0682a119aa16ed4000e5190487ffd3ad1d28fcdfced0c6b8955b118de630b56c2d5505d10676991b090b6dba04b1c19731880cec10c1bc276e4ce1f2 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 + languageName: node + linkType: hard + +"@babel/code-frame@npm:7.10.4, @babel/code-frame@npm:~7.10.4": + version: 7.10.4 + resolution: "@babel/code-frame@npm:7.10.4" + dependencies: + "@babel/highlight": ^7.10.4 + checksum: feb4543c8a509fe30f0f6e8d7aa84f82b41148b963b826cd330e34986f649a85cb63b2f13dd4effdf434ac555d16f14940b8ea5f4433297c2f5ff85486ded019 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.25.9, @babel/code-frame@npm:^7.26.0, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": ^7.25.9 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: db13f5c42d54b76c1480916485e6900748bbcb0014a8aca87f50a091f70ff4e0d0a6db63cade75eb41fcc3d2b6ba0a7f89e343def4f96f00269b41b8ab8dd7b8 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/compat-data@npm:7.26.3" + checksum: 85c5a9fb365231688c7faeb977f1d659da1c039e17b416f8ef11733f7aebe11fe330dce20c1844cacf243766c1d643d011df1d13cac9eda36c46c6c475693d21 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.21.3, @babel/core@npm:^7.25.2": + version: 7.26.0 + resolution: "@babel/core@npm:7.26.0" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.26.0 + "@babel/generator": ^7.26.0 + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-module-transforms": ^7.26.0 + "@babel/helpers": ^7.26.0 + "@babel/parser": ^7.26.0 + "@babel/template": ^7.25.9 + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.26.0 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: b296084cfd818bed8079526af93b5dfa0ba70282532d2132caf71d4060ab190ba26d3184832a45accd82c3c54016985a4109ab9118674347a7e5e9bc464894e6 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.26.0, @babel/generator@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/generator@npm:7.26.3" + dependencies: + "@babel/parser": ^7.26.3 + "@babel/types": ^7.26.3 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^3.0.2 + checksum: fb09fa55c66f272badf71c20a3a2cee0fa1a447fed32d1b84f16a668a42aff3e5f5ddc6ed5d832dda1e952187c002ca1a5cdd827022efe591b6ac44cada884ea + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: 41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-compilation-targets@npm:7.25.9" + dependencies: + "@babel/compat-data": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + browserslist: ^4.24.0 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: 3af536e2db358b38f968abdf7d512d425d1018fef2f485d6f131a57a7bcaed32c606b4e148bb230e1508fa42b5b2ac281855a68eb78270f54698c48a83201b9b + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/traverse": ^7.25.9 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 91dd5f203ed04568c70b052e2f26dfaac7c146447196c00b8ecbb6d3d2f3b517abadb985d3321a19d143adaed6fe17f7f79f8f50e0c20e9d8ad83e1027b42424 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.26.3" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + regexpu-core: ^6.2.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 50a27d8ce6da5c2fa0c62c132c4d27cfeb36e3233ff1e5220d643de3dafe49423b507382f0b72a696fce7486014b134c1e742f55438590f9405d26765b009af0 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.2, @babel/helper-define-polyfill-provider@npm:^0.6.3": + version: 0.6.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.3" + dependencies: + "@babel/helper-compilation-targets": ^7.22.6 + "@babel/helper-plugin-utils": ^7.22.5 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 710e6d8a5391736b9f53f09d0494575c2e03de199ad8d1349bc8e514cb85251ea1f1842c2ff44830849d482052ddb42ae931101002a87a263b12f649c2e57c01 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 8e2f1979b6d596ac2a8cbf17f2cf709180fefc274ac3331408b48203fe19134ed87800774ef18838d0275c3965130bae22980d90caed756b7493631d4b2cf961 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 1b411ce4ca825422ef7065dffae7d8acef52023e51ad096351e3e2c05837e9bf9fca2af9ca7f28dc26d596a588863d0fedd40711a88e350b736c619a80e704e6 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 942eee3adf2b387443c247a2c190c17c4fd45ba92a23087abab4c804f40541790d51ad5277e4b5b1ed8d5ba5b62de73857446b7742f835c18ebd350384e63917 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: f09d0ad60c0715b9a60c31841b3246b47d67650c512ce85bbe24a3124f1a4d66377df793af393273bc6e1015b0a9c799626c48e53747581c1582b99167cc65dc + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.25.9 + resolution: "@babel/helper-plugin-utils@npm:7.25.9" + checksum: e19ec8acf0b696756e6d84531f532c5fe508dce57aa68c75572a77798bd04587a844a9a6c8ea7d62d673e21fdc174d091c9097fb29aea1c1b49f9c6eaa80f022 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-wrap-function": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ea37ad9f8f7bcc27c109963b8ebb9d22bac7a5db2a51de199cb560e251d5593fe721e46aab2ca7d3e7a24b0aa4aff0eaf9c7307af9c2fd3a1d84268579073052 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-replace-supers@npm:7.25.9" + dependencies: + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 84f40e12520b7023e52d289bf9d569a06284879fe23bbbacad86bec5d978b2669769f11b073fcfeb1567d8c547168323005fda88607a4681ecaeb4a5cdd48bb9 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: fdbb5248932198bc26daa6abf0d2ac42cab9c2dbb75b7e9f40d425c8f28f09620b886d40e7f9e4e08ffc7aaa2cefe6fc2c44be7c20e81f7526634702fb615bdc + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 6435ee0849e101681c1849868278b5aee82686ba2c1e27280e5e8aca6233af6810d39f8e4e693d2f2a44a3728a6ccfd66f72d71826a94105b86b731697cdfa99 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 5b85918cb1a92a7f3f508ea02699e8d2422fe17ea8e82acd445006c0ef7520fbf48e3dbcdaf7b0a1d571fc3a2715a29719e5226636cb6042e15fe6ed2a590944 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 9491b2755948ebbdd68f87da907283698e663b5af2d2b1b02a2765761974b1120d5d8d49e9175b167f16f72748ffceec8c9cf62acfbee73f4904507b246e2b3d + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-wrap-function@npm:7.25.9" + dependencies: + "@babel/template": ^7.25.9 + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 8ec1701e60ae004415800c4a7a188f5564c73b4e4f3fdf58dd3f34a3feaa9753173f39bbd6d02e7ecc974f48155efc7940e62584435b3092c07728ee46a604ea + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helpers@npm:7.26.0" + dependencies: + "@babel/template": ^7.25.9 + "@babel/types": ^7.26.0 + checksum: d77fe8d45033d6007eadfa440355c1355eed57902d5a302f450827ad3d530343430a21210584d32eef2f216ae463d4591184c6fc60cf205bbf3a884561469200 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.10.4": + version: 7.25.9 + resolution: "@babel/highlight@npm:7.25.9" + dependencies: + "@babel/helper-validator-identifier": ^7.25.9 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: a6e0ac0a1c4bef7401915ca3442ab2b7ae4adf360262ca96b91396bfb9578abb28c316abf5e34460b780696db833b550238d9256bdaca60fade4ba7a67645064 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.0, @babel/parser@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/parser@npm:7.26.3" + dependencies: + "@babel/types": ^7.26.3 + bin: + parser: ./bin/babel-parser.js + checksum: e2bff2e9fa6540ee18fecc058bc74837eda2ddcecbe13454667314a93fc0ba26c1fb862c812d84f6d5f225c3bd8d191c3a42d4296e287a882c4e1f82ff2815ff + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.13.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 + languageName: node + linkType: hard + +"@babel/plugin-proposal-decorators@npm:^7.12.9": + version: 7.25.9 + resolution: "@babel/plugin-proposal-decorators@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-syntax-decorators": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ff598127818ac8e704009f1a9a207766ada5f84f6ca74e9de662cb6ce32bcb846c28fd52d6c5df9c55b4eac9a2a3492aa71fbd5cef0569a14b6f12003df22af2 + languageName: node + linkType: hard + +"@babel/plugin-proposal-export-default-from@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-proposal-export-default-from@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0fb96b1229ed15ecfb09e6bf40be2da249007155a3deca53d319420a4d3c028c884e888c447898cbcdaa079165e045a8317be6a9205bef0041e7333822a40da9 + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8": + version: 7.18.6 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.13.12": + version: 7.21.0 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-decorators@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-decorators@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aaf58b17e6aa08f41f93897daa93c601a486233a0375b4231799fc5c4e7c98480aaad3c1c44cf391a62e428c5f6546f76488a1023a4036bb87cd61fa79f1173b + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-default-from@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-syntax-export-default-from@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8eb254c8050369f3cfac7755230ad9d39a53d1b489e03170684d6b514a0d09ad6001c38e6dfd271a439a8035a57d60b8be7d3dd80f997c6bc5c7e688ed529517 + languageName: node + linkType: hard + +"@babel/plugin-syntax-flow@npm:^7.12.1, @babel/plugin-syntax-flow@npm:^7.25.9": + version: 7.26.0 + resolution: "@babel/plugin-syntax-flow@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fdc0d0a7b512e00d933e12cf93c785ea4645a193f4b539230b7601cfaa8c704410199318ce9ea14e5fca7d13e9027822f7d81a7871d3e854df26b6af04cc3c6c + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c122aa577166c80ee67f75aebebeef4150a132c4d3109d25d7fc058bf802946f883e330f20b78c1d3e3a5ada631c8780c263d2d01b5dbaecc69efefeedd42916 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb609d1ffb50b58f0c1bac8810d0e46a4f6c922aa171c458f3a19d66ee545d36e782d3bffbbc1fed0dc65a558bdce1caf5279316583c0fff5a2c1658982a8563 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0e9821e8ba7d660c36c919654e4144a70546942ae184e85b8102f2322451eae102cbfadbcadd52ce077a2b44b400ee52394c616feab7b5b9f791b910e933fd33 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.0.0-0, @babel/plugin-transform-arrow-functions@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c29f081224859483accf55fb4d091db2aac0dcd0d7954bac5ca889030cc498d3f771aa20eb2e9cd8310084ec394d85fa084b97faf09298b6bc9541182b3eb5bb + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-remap-async-to-generator": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41e02c18c2a57de9f274fa2c5a1bf81a20ab5f321db29cc3051512b9c5bdf3f1a8c42f1fc282cb62343c6d50849f992eede954d5f7fb5e7df48ae0c59ea7e054 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-remap-async-to-generator": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b3ad50fb93c171644d501864620ed23952a46648c4df10dc9c62cc9ad08031b66bd272cfdd708faeee07c23b6251b16f29ce0350473e4c79f0c32178d38ce3a6 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.25.0": + version: 7.25.9 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e869500cfb1995e06e64c9608543b56468639809febfcdd6fcf683bc0bf1be2431cacf2981a168a1a14f4766393e37bc9f7c96d25bc5b5f39a64a8a8ad0bf8e0 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.0.0-0, @babel/plugin-transform-class-properties@npm:^7.25.4": + version: 7.25.9 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8d69e2c285486b63f49193cbcf7a15e1d3a5f632c1c07d7a97f65306df7f554b30270b7378dde143f8b557d1f8f6336c643377943dec8ec405e4cd11e90b9ea + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.0.0-0, @babel/plugin-transform-classes@npm:^7.25.4": + version: 7.25.9 + resolution: "@babel/plugin-transform-classes@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + "@babel/traverse": ^7.25.9 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d12584f72125314cc0fa8c77586ece2888d677788ac75f7393f5da574dfe4e45a556f7e3488fab29c8777ab3e5856d7a2d79f6df02834083aaa9d766440e3c68 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/template": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f77fa4bc0c1e0031068172df28852388db6b0f91c268d037905f459607cf1e8ebab00015f9f179f4ad96e11c5f381b635cd5dc4e147a48c7ac79d195ae7542de + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.24.8": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 965f63077a904828f4adee91393f83644098533442b8217d5a135c23a759a4c252c714074c965676a60d2c33f610f579a4eeb59ffd783724393af61c0ca45fef + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.22.11": + version: 7.25.9 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4dfe8df86c5b1d085d591290874bb2d78a9063090d71567ed657a418010ad333c3f48af2c974b865f53bbb718987a065f89828d43279a7751db1a56c9229078d + languageName: node + linkType: hard + +"@babel/plugin-transform-flow-strip-types@npm:^7.25.2, @babel/plugin-transform-flow-strip-types@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-syntax-flow": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7f51cd5cc0c3a5ce2fe31c689458706ed40284a1c59b017167c3cbef953550a843450c5cfe6896b154fb645f141a930a4fd925f46b2215d0fcc66e7758202c38 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-for-of@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41b56e70256a29fc26ed7fb95ece062d7ec2f3b6ea8f0686349ffd004cd4816132085ee21165b89c502ee7161cb7cfb12510961638851357945dc7bc546475b7 + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.25.1": + version: 7.25.9 + resolution: "@babel/plugin-transform-function-name@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8d7c8d019a6eb57eab5ca1be3e3236f175557d55b1f3b11f8ad7999e3fbb1cf37905fd8cb3a349bffb4163a558e9f33b63f631597fdc97c858757deac1b2fd7 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.25.2": + version: 7.25.9 + resolution: "@babel/plugin-transform-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3cca75823a38aab599bc151b0fa4d816b5e1b62d6e49c156aa90436deb6e13649f5505973151a10418b64f3f9d1c3da53e38a186402e0ed7ad98e482e70c0c14 + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8c6febb4ac53852314d28b5e2c23d5dbbff7bf1e57d61f9672e0d97531ef7778b3f0ad698dcf1179f5486e626c77127508916a65eb846a89e98a92f70ed3537b + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.24.8, @babel/plugin-transform-modules-commonjs@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3" + dependencies: + "@babel/helper-module-transforms": ^7.26.0 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0ac9aa4e5fe9fe34b58ee174881631e5e1c89eee5b1ebfd1147934686be92fc5fbfdc11119f0b607b3743d36a1cbcb7c36f18e0dd4424d6d7b749b1b9a18808a + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 434346ba05cf74e3f4704b3bdd439287b95cd2a8676afcdc607810b8c38b6f4798cd69c1419726b2e4c7204e62e4a04d31b0360e91ca57a930521c9211e07789 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.0.0-0, @babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 26e03b1c2c0408cc300e46d8f8cb639653ff3a7b03456d0d8afbb53c44f33a89323f51d99991dade3a5676921119bbdf869728bb7911799b5ef99ffafa2cdd24 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0528ef041ed88e8c3f51624ee87b8182a7f246fe4013f0572788e0727d20795b558f2b82e3989b5dd416cbd339500f0d88857de41b6d3b6fdacb1d5344bcc5b1 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.12.13, @babel/plugin-transform-object-rest-spread@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-transform-parameters": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8ff73e1c46a03056b3a2236bafd6b3a4b83da93afe7ee24a50d0a8088150bf85bc5e5977daa04e66ff5fb7613d02d63ad49b91ebb64cf3f3022598d722e3a7a + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b46a8d1e91829f3db5c252583eb00d05a779b4660abeea5500fda0f8ffa3584fd18299443c22f7fddf0ed9dfdb73c782c43b445dc468d4f89803f2356963b406 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.0.0-0, @babel/plugin-transform-optional-chaining@npm:^7.24.8": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f1642a7094456067e82b176e1e9fd426fda7ed9df54cb6d10109fc512b622bf4b3c83acc5875125732b8622565107fdbe2d60fe3ec8685e1d1c22c38c1b57782 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.22.15, @babel/plugin-transform-parameters@npm:^7.24.7, @babel/plugin-transform-parameters@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-parameters@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d7ba2a7d05edbc85aed741289b0ff3d6289a1c25d82ac4be32c565f88a66391f46631aad59ceeed40824037f7eeaa7a0de1998db491f50e65a565cd964f78786 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6e3671b352c267847c53a170a1937210fa8151764d70d25005e711ef9b21969aaf422acc14f9f7fb86bc0e4ec43e7aefcc0ad9196ae02d262ec10f509f126a58 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9ce3e983fea9b9ba677c192aa065c0b42ebdc7774be4c02135df09029ad92a55c35b004650c75952cb64d650872ed18f13ab64422c6fc891d06333762caa8a0a + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.24.7, @babel/plugin-transform-react-display-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-display-name@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cd7020494e6f31c287834e8929e6a718d5b0ace21232fa30feb48622c2312045504c34b347dcff9e88145c349882b296a7d6b6cc3d3447d8c85502f16471747c + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-development@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.9" + dependencies: + "@babel/plugin-transform-react-jsx": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 537d38369537f1eb56041c4b770bc0733fde1801a7f5ffef40a1217ea448f33ee2fa8e6098a58a82fd00e432c1b9426a66849496da419020c9eca3b1b1a23779 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-self@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41c833cd7f91b1432710f91b1325706e57979b2e8da44e83d86312c78bbe96cd9ef778b4e79e4e17ab25fa32c72b909f2be7f28e876779ede28e27506c41f4ae + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a3e0e5672e344e9d01fb20b504fe29a84918eaa70cec512c4d4b1b035f72803261257343d8e93673365b72c371f35cf34bb0d129720bf178a4c87812c8b9c662 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.25.2, @babel/plugin-transform-react-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-syntax-jsx": ^7.25.9 + "@babel/types": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5c6523c3963e3c6cf4c3cc2768a3766318af05b8f6c17aff52a4010e2c170e87b2fcdc94e9c9223ae12158664df4852ce81b9c8d042c15ea8fd83d6375f9f30f + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9995c0fc7c25d3aaaa0ce84233de02eab2564ea111d0813ec5baa538eb21520402879cc787ad1ad4c2061b99cebc3beb09910e64c9592e8ccb42ae62d9e4fd9a + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-regenerator@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + regenerator-transform: ^0.15.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1c09e8087b476c5967282c9790fb8710e065eda77c60f6cb5da541edd59ded9d003d96f8ef640928faab4a0b35bf997673499a194973da4f0c97f0935807a482 + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-runtime@npm:7.25.9" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + babel-plugin-polyfill-corejs2: ^0.4.10 + babel-plugin-polyfill-corejs3: ^0.10.6 + babel-plugin-polyfill-regenerator: ^0.6.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: db7f20a7a7324dbfe3b43a09f0095c69dadcf8b08567fa7c7fa6e245d97c66cdcdc330e97733b7589261c0e1046bc5cc36741b932ac5dd7757374495b57e7b02 + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0-0, @babel/plugin-transform-shorthand-properties@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f774995d58d4e3a992b732cf3a9b8823552d471040e280264dd15e0735433d51b468fef04d75853d061309389c66bda10ce1b298297ce83999220eb0ad62741d + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-spread@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2403a5d49171b7714d5e5ecb1f598c61575a4dbe5e33e5a5f08c0ea990b75e693ca1ea983b6a96b2e3e5e7da48c8238333f525e47498c53b577c5d094d964c06 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7454b00844dbe924030dd15e2b3615b36e196500c4c47e98dabc6b37a054c5b1038ecd437e910aabf0e43bf56b973cb148d3437d50f6e2332d8309568e3e979b + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.0.0-0": + version: 7.25.9 + resolution: "@babel/plugin-transform-template-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 92eb1d6e2d95bd24abbb74fa7640d02b66ff6214e0bb616d7fda298a7821ce15132a4265d576a3502a347a3c9e94b6c69ed265bb0784664592fa076785a3d16a + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.25.2, @babel/plugin-transform-typescript@npm:^7.25.9": + version: 7.26.3 + resolution: "@babel/plugin-transform-typescript@npm:7.26.3" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/plugin-syntax-typescript": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 38ab210e80d4fc4eaa27e88705a961d53f5eae1dcd0ef8794affe3002fec557404e8bb29ca22d18e691a75690e3bcadbfeb8207a830f15cf83231ab5fd1ea08b + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.0.0-0, @babel/plugin-transform-unicode-regex@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e8baae867526e179467c6ef5280d70390fa7388f8763a19a27c21302dd59b121032568be080749514b097097ceb9af716bf4b90638f1b3cf689aa837ba20150f + languageName: node + linkType: hard + +"@babel/preset-flow@npm:^7.13.13": + version: 7.25.9 + resolution: "@babel/preset-flow@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + "@babel/plugin-transform-flow-strip-types": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b1591ea63a7ace7e34bcefa6deba9e2814d7f082e3c074e2648efb68a1a49016ccefbea024156ba28bd3042a4e768e3eb8b5ecfe433978144fdaaadd36203ba2 + languageName: node + linkType: hard + +"@babel/preset-react@npm:^7.22.15": + version: 7.26.3 + resolution: "@babel/preset-react@npm:7.26.3" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + "@babel/plugin-transform-react-display-name": ^7.25.9 + "@babel/plugin-transform-react-jsx": ^7.25.9 + "@babel/plugin-transform-react-jsx-development": ^7.25.9 + "@babel/plugin-transform-react-pure-annotations": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9c76f145026715c8e4a1f6c44f208918e700227d8d8a8068f4ae10d87031d23eb8b483e508cd4452d65066f731b7a8169527e66e83ffe165595e8db7899dd859 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.16.7, @babel/preset-typescript@npm:^7.23.0": + version: 7.26.0 + resolution: "@babel/preset-typescript@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + "@babel/plugin-syntax-jsx": ^7.25.9 + "@babel/plugin-transform-modules-commonjs": ^7.25.9 + "@babel/plugin-transform-typescript": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6d8641fa6efd0e10eec5e8f92cd164b916a06d57131cfa5216c281404289c87d2b4995140a1c1d9c3bad171ff6ef2226be5f0585e09577ffff349706e991ec71 + languageName: node + linkType: hard + +"@babel/register@npm:^7.13.16": + version: 7.25.9 + resolution: "@babel/register@npm:7.25.9" + dependencies: + clone-deep: ^4.0.1 + find-cache-dir: ^2.0.0 + make-dir: ^2.1.0 + pirates: ^4.0.6 + source-map-support: ^0.5.16 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1df38d9ed6fd60feb0a82e1926508bca8f60915ee8a12ab9f6c9714a8f13bafc7865409c7fa92604a5b79ba84f7990181b312bc469bfdfa30dd79655b3260b85 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.8.4": + version: 7.26.0 + resolution: "@babel/runtime@npm:7.26.0" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: c8e2c0504ab271b3467a261a8f119bf2603eb857a0d71e37791f4e3fae00f681365073cc79f141ddaa90c6077c60ba56448004ad5429d07ac73532be9f7cf28a + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.0, @babel/template@npm:^7.25.9, @babel/template@npm:^7.3.3": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": ^7.25.9 + "@babel/parser": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 103641fea19c7f4e82dc913aa6b6ac157112a96d7c724d513288f538b84bae04fb87b1f1e495ac1736367b1bc30e10f058b30208fb25f66038e1f1eb4e426472 + languageName: node + linkType: hard + +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.9": + version: 7.26.4 + resolution: "@babel/traverse@npm:7.26.4" + dependencies: + "@babel/code-frame": ^7.26.2 + "@babel/generator": ^7.26.3 + "@babel/parser": ^7.26.3 + "@babel/template": ^7.25.9 + "@babel/types": ^7.26.3 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: dcdf51b27ab640291f968e4477933465c2910bfdcbcff8f5315d1f29b8ff861864f363e84a71fb489f5e9708e8b36b7540608ce019aa5e57ef7a4ba537e62700 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.3, @babel/types@npm:^7.3.3": + version: 7.26.3 + resolution: "@babel/types@npm:7.26.3" + dependencies: + "@babel/helper-string-parser": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + checksum: 195f428080dcaadbcecc9445df7f91063beeaa91b49ccd78f38a5af6b75a6a58391d0c6614edb1ea322e57889a1684a0aab8e667951f820196901dd341f931e9 + languageName: node + linkType: hard + +"@expo/bunyan@npm:^4.0.0": + version: 4.0.1 + resolution: "@expo/bunyan@npm:4.0.1" + dependencies: + uuid: ^8.0.0 + checksum: 7a503cf202ef26bd151ef31be63fdac113a27edd1e5703aee96326c3b7bea349e09e706a18854c251b313814a05673d5041eaea4c018667d9afa2c583d821af7 + languageName: node + linkType: hard + +"@expo/cli@npm:0.22.18": + version: 0.22.18 + resolution: "@expo/cli@npm:0.22.18" + dependencies: + "@0no-co/graphql.web": ^1.0.8 + "@babel/runtime": ^7.20.0 + "@expo/code-signing-certificates": ^0.0.5 + "@expo/config": ~10.0.10 + "@expo/config-plugins": ~9.0.15 + "@expo/devcert": ^1.1.2 + "@expo/env": ~0.4.2 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@expo/metro-config": ~0.19.11 + "@expo/osascript": ^2.1.6 + "@expo/package-manager": ^1.7.2 + "@expo/plist": ^0.2.2 + "@expo/prebuild-config": ^8.0.28 + "@expo/rudder-sdk-node": ^1.1.1 + "@expo/spawn-async": ^1.7.2 + "@expo/ws-tunnel": ^1.0.1 + "@expo/xcpretty": ^4.3.0 + "@react-native/dev-middleware": 0.76.7 + "@urql/core": ^5.0.6 + "@urql/exchange-retry": ^1.3.0 + accepts: ^1.3.8 + arg: ^5.0.2 + better-opn: ~3.0.2 + bplist-creator: 0.0.7 + bplist-parser: ^0.3.1 + cacache: ^18.0.2 + chalk: ^4.0.0 + ci-info: ^3.3.0 + compression: ^1.7.4 + connect: ^3.7.0 + debug: ^4.3.4 + env-editor: ^0.4.1 + fast-glob: ^3.3.2 + form-data: ^3.0.1 + freeport-async: ^2.0.0 + fs-extra: ~8.1.0 + getenv: ^1.0.0 + glob: ^10.4.2 + internal-ip: ^4.3.0 + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + lodash.debounce: ^4.0.8 + minimatch: ^3.0.4 + node-forge: ^1.3.1 + npm-package-arg: ^11.0.0 + ora: ^3.4.0 + picomatch: ^3.0.1 + pretty-bytes: ^5.6.0 + pretty-format: ^29.7.0 + progress: ^2.0.3 + prompts: ^2.3.2 + qrcode-terminal: 0.11.0 + require-from-string: ^2.0.2 + requireg: ^0.2.2 + resolve: ^1.22.2 + resolve-from: ^5.0.0 + resolve.exports: ^2.0.3 + semver: ^7.6.0 + send: ^0.19.0 + slugify: ^1.3.4 + source-map-support: ~0.5.21 + stacktrace-parser: ^0.1.10 + structured-headers: ^0.4.1 + tar: ^6.2.1 + temp-dir: ^2.0.0 + tempy: ^0.7.1 + terminal-link: ^2.1.1 + undici: ^6.18.2 + unique-string: ~2.0.0 + wrap-ansi: ^7.0.0 + ws: ^8.12.1 + bin: + expo-internal: build/bin/cli + checksum: e33ba0c9acbf5e22076af06ddb4165b31a2b763d401661334abe435589ac456c25bd5416dea5c355b3b6eed7cac07c7a9277ab5f321046cdda05ac3716d43c5e + languageName: node + linkType: hard + +"@expo/cli@npm:0.22.26": + version: 0.22.26 + resolution: "@expo/cli@npm:0.22.26" + dependencies: + "@0no-co/graphql.web": ^1.0.8 + "@babel/runtime": ^7.20.0 + "@expo/code-signing-certificates": ^0.0.5 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/devcert": ^1.1.2 + "@expo/env": ~0.4.2 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@expo/metro-config": ~0.19.12 + "@expo/osascript": ^2.1.6 + "@expo/package-manager": ^1.7.2 + "@expo/plist": ^0.2.2 + "@expo/prebuild-config": ~8.2.0 + "@expo/rudder-sdk-node": ^1.1.1 + "@expo/spawn-async": ^1.7.2 + "@expo/ws-tunnel": ^1.0.1 + "@expo/xcpretty": ^4.3.0 + "@react-native/dev-middleware": 0.76.9 + "@urql/core": ^5.0.6 + "@urql/exchange-retry": ^1.3.0 + accepts: ^1.3.8 + arg: ^5.0.2 + better-opn: ~3.0.2 + bplist-creator: 0.0.7 + bplist-parser: ^0.3.1 + cacache: ^18.0.2 + chalk: ^4.0.0 + ci-info: ^3.3.0 + compression: ^1.7.4 + connect: ^3.7.0 + debug: ^4.3.4 + env-editor: ^0.4.1 + fast-glob: ^3.3.2 + form-data: ^3.0.1 + freeport-async: ^2.0.0 + fs-extra: ~8.1.0 + getenv: ^1.0.0 + glob: ^10.4.2 + internal-ip: ^4.3.0 + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + lodash.debounce: ^4.0.8 + minimatch: ^3.0.4 + node-forge: ^1.3.1 + npm-package-arg: ^11.0.0 + ora: ^3.4.0 + picomatch: ^3.0.1 + pretty-bytes: ^5.6.0 + pretty-format: ^29.7.0 + progress: ^2.0.3 + prompts: ^2.3.2 + qrcode-terminal: 0.11.0 + require-from-string: ^2.0.2 + requireg: ^0.2.2 + resolve: ^1.22.2 + resolve-from: ^5.0.0 + resolve.exports: ^2.0.3 + semver: ^7.6.0 + send: ^0.19.0 + slugify: ^1.3.4 + source-map-support: ~0.5.21 + stacktrace-parser: ^0.1.10 + structured-headers: ^0.4.1 + tar: ^6.2.1 + temp-dir: ^2.0.0 + tempy: ^0.7.1 + terminal-link: ^2.1.1 + undici: ^6.18.2 + unique-string: ~2.0.0 + wrap-ansi: ^7.0.0 + ws: ^8.12.1 + bin: + expo-internal: build/bin/cli + checksum: 32b79ab6a5ee88487e457e5f74249b2e081889521a89d53b452fbd454652428a08164e933681bf7707f4834f1cf529c3b6eaa9df7a077bc1a7bc026442990bf4 + languageName: node + linkType: hard + +"@expo/code-signing-certificates@npm:^0.0.5": + version: 0.0.5 + resolution: "@expo/code-signing-certificates@npm:0.0.5" + dependencies: + node-forge: ^1.2.1 + nullthrows: ^1.1.1 + checksum: 4a1c73a6bc74443284a45db698ede874c7d47f6ed58cf44adaa255139490c8754d81dc1556247f3782cdc5034382fb72f23b0033daa2117facad4eb13b841e37 + languageName: node + linkType: hard + +"@expo/config-plugins@npm:~9.0.15": + version: 9.0.16 + resolution: "@expo/config-plugins@npm:9.0.16" + dependencies: + "@expo/config-types": ^52.0.5 + "@expo/json-file": ~9.0.2 + "@expo/plist": ^0.2.2 + "@expo/sdk-runtime-versions": ^1.0.0 + chalk: ^4.1.2 + debug: ^4.3.5 + getenv: ^1.0.0 + glob: ^10.4.2 + resolve-from: ^5.0.0 + semver: ^7.5.4 + slash: ^3.0.0 + slugify: ^1.6.6 + xcode: ^3.0.1 + xml2js: 0.6.0 + checksum: 717a8868c9a3a718c21461a1679897da5cc6bf97ff0b4b361fed3f453004bad97ac29ba7bd1e24614b04f103af950fb7014bddb23f74e19e7364b0a75591f3c6 + languageName: node + linkType: hard + +"@expo/config-plugins@npm:~9.0.17": + version: 9.0.17 + resolution: "@expo/config-plugins@npm:9.0.17" + dependencies: + "@expo/config-types": ^52.0.5 + "@expo/json-file": ~9.0.2 + "@expo/plist": ^0.2.2 + "@expo/sdk-runtime-versions": ^1.0.0 + chalk: ^4.1.2 + debug: ^4.3.5 + getenv: ^1.0.0 + glob: ^10.4.2 + resolve-from: ^5.0.0 + semver: ^7.5.4 + slash: ^3.0.0 + slugify: ^1.6.6 + xcode: ^3.0.1 + xml2js: 0.6.0 + checksum: 5f415a3f4b399024d904d5c6e7b807d52f0efb6eddd217e458fa7d26d04b882f45462aa525ee8e49d404aecfc508e2a829ebd168f9a3b949a215a33699b0b92f + languageName: node + linkType: hard + +"@expo/config-plugins@npm:~9.1.5": + version: 9.1.6 + resolution: "@expo/config-plugins@npm:9.1.6" + dependencies: + "@expo/config-types": ^53.0.0-preview.3 + "@expo/json-file": ~9.1.2 + "@expo/plist": ^0.3.2 + "@expo/sdk-runtime-versions": ^1.0.0 + chalk: ^4.1.2 + debug: ^4.3.5 + getenv: ^1.0.0 + glob: ^10.4.2 + resolve-from: ^5.0.0 + semver: ^7.5.4 + slash: ^3.0.0 + slugify: ^1.6.6 + xcode: ^3.0.1 + xml2js: 0.6.0 + checksum: 0f69bdf137988d0658496f1e83402437b6922feef857e5c87ce6318dbf5dc14c44b011483ae7b8f44ac5d8a12a4f95b818b11d475935b3000d4dbcb8f077e287 + languageName: node + linkType: hard + +"@expo/config-types@npm:^52.0.4, @expo/config-types@npm:^52.0.5": + version: 52.0.5 + resolution: "@expo/config-types@npm:52.0.5" + checksum: 2e8aa1a0d88e788868df494709f7a2544ef4ff555b038bfe5f6a8e4ee0d20c1e1239e58504026bf0e41afc9422532a8aee6cb0fe121bb8b71ea5521fd9bb27d0 + languageName: node + linkType: hard + +"@expo/config-types@npm:^53.0.0-preview.3": + version: 53.0.0-preview.3 + resolution: "@expo/config-types@npm:53.0.0-preview.3" + checksum: 4a1650a05f2539bae86add5be70466c13b2a998a5e1811709ea9b77169e3b95908fb68f33ad6b62c4762f39b112dbe0a3673bc88de258aed0887bd9002924d0d + languageName: node + linkType: hard + +"@expo/config@npm:~10.0.10": + version: 10.0.10 + resolution: "@expo/config@npm:10.0.10" + dependencies: + "@babel/code-frame": ~7.10.4 + "@expo/config-plugins": ~9.0.15 + "@expo/config-types": ^52.0.4 + "@expo/json-file": ^9.0.2 + deepmerge: ^4.3.1 + getenv: ^1.0.0 + glob: ^10.4.2 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + resolve-workspace-root: ^2.0.0 + semver: ^7.6.0 + slugify: ^1.3.4 + sucrase: 3.35.0 + checksum: ba9c4a4eaa714824ecc88d27df09bef532268abcad25fd06cc79dfbb8f592e591d3d3afd3288041535be94155536eb5f0c65ab718f661f2d16cbcb881b003a71 + languageName: node + linkType: hard + +"@expo/config@npm:~10.0.11": + version: 10.0.11 + resolution: "@expo/config@npm:10.0.11" + dependencies: + "@babel/code-frame": ~7.10.4 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 + "@expo/json-file": ^9.0.2 + deepmerge: ^4.3.1 + getenv: ^1.0.0 + glob: ^10.4.2 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + resolve-workspace-root: ^2.0.0 + semver: ^7.6.0 + slugify: ^1.3.4 + sucrase: 3.35.0 + checksum: 28f147b84e49d35306769e620f8e19da12f245e8fd08cf8279512f84eaccfdc3ab69f6ce9ea8e603ae3d0e9d994045336eff450f43b89f0b92f63e4914c47f3a + languageName: node + linkType: hard + +"@expo/config@npm:~11.0.3": + version: 11.0.4 + resolution: "@expo/config@npm:11.0.4" + dependencies: + "@babel/code-frame": ~7.10.4 + "@expo/config-plugins": ~9.1.5 + "@expo/config-types": ^53.0.0-preview.3 + "@expo/json-file": ^9.1.2 + deepmerge: ^4.3.1 + getenv: ^1.0.0 + glob: ^10.4.2 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + resolve-workspace-root: ^2.0.0 + semver: ^7.6.0 + slugify: ^1.3.4 + sucrase: 3.35.0 + checksum: 8344a23a0f19bd0ff02ed525f343818d2579a85186f92ea95a14b347f22186c4a401a6b3cb34db5c8286991fd6e00872d0800799353c1cf0f6ae52ca19e0fa9d + languageName: node + linkType: hard + +"@expo/devcert@npm:^1.1.2": + version: 1.1.4 + resolution: "@expo/devcert@npm:1.1.4" + dependencies: + application-config-path: ^0.1.0 + command-exists: ^1.2.4 + debug: ^3.1.0 + eol: ^0.9.1 + get-port: ^3.2.0 + glob: ^10.4.2 + lodash: ^4.17.21 + mkdirp: ^0.5.1 + password-prompt: ^1.0.4 + sudo-prompt: ^8.2.0 + tmp: ^0.0.33 + tslib: ^2.4.0 + checksum: a6bb5ba18d1d4fe5ebfa096f8d332f14bbe8bb942bc3650debf89fb68b5637bd5b7b22f9b28d5971965436bf83d442e843ac7e0e1e7408cce6e575b55c830b6d + languageName: node + linkType: hard + +"@expo/env@npm:~0.4.2": + version: 0.4.2 + resolution: "@expo/env@npm:0.4.2" + dependencies: + chalk: ^4.0.0 + debug: ^4.3.4 + dotenv: ~16.4.5 + dotenv-expand: ~11.0.6 + getenv: ^1.0.0 + checksum: cc9264e50faf5f38e6253b5c97e775bc8cb29bf8ca37bcd427cbb67dd773a4e62a2bdb030904565bac4644eac89e10fc61206d5aa42e5b1f26acf5ca1f6b9ce9 + languageName: node + linkType: hard + +"@expo/env@npm:~1.0.3": + version: 1.0.3 + resolution: "@expo/env@npm:1.0.3" + dependencies: + chalk: ^4.0.0 + debug: ^4.3.4 + dotenv: ~16.4.5 + dotenv-expand: ~11.0.6 + getenv: ^1.0.0 + checksum: f32d3f6c10e7a8975b339a51bb73f6de620b4ad58e8897d72e3f4f7bb86ae498ccfad9c856cbc0db0b9428a506d86d9714581df46cc94a1c3b82ad580c05bc2a + languageName: node + linkType: hard + +"@expo/fingerprint@npm:0.11.11": + version: 0.11.11 + resolution: "@expo/fingerprint@npm:0.11.11" + dependencies: + "@expo/spawn-async": ^1.7.2 + arg: ^5.0.2 + chalk: ^4.1.2 + debug: ^4.3.4 + find-up: ^5.0.0 + getenv: ^1.0.0 + minimatch: ^3.0.4 + p-limit: ^3.1.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + bin: + fingerprint: bin/cli.js + checksum: ef98fc8a4d7026ad409063f5a5776bf89375e4869bbcb5e4b2f3315bb1af75300d1f07107da458ff010dd71b295513e15838a0de91daed877a68dc52790b3adc + languageName: node + linkType: hard + +"@expo/image-utils@npm:^0.6.5": + version: 0.6.5 + resolution: "@expo/image-utils@npm:0.6.5" + dependencies: + "@expo/spawn-async": ^1.7.2 + chalk: ^4.0.0 + fs-extra: 9.0.0 + getenv: ^1.0.0 + jimp-compact: 0.16.1 + parse-png: ^2.1.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + temp-dir: ~2.0.0 + unique-string: ~2.0.0 + checksum: f6fe5efd518d84463d767a4fb8a920d8b70779c8d93ba07ef407e0f016452324e3da6cff8292d0e2b436facdaef0073b8d527881e73ff5ba0288b4c942cdb539 + languageName: node + linkType: hard + +"@expo/image-utils@npm:^0.7.2": + version: 0.7.2 + resolution: "@expo/image-utils@npm:0.7.2" + dependencies: + "@expo/spawn-async": ^1.7.2 + chalk: ^4.0.0 + getenv: ^1.0.0 + jimp-compact: 0.16.1 + parse-png: ^2.1.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + temp-dir: ~2.0.0 + unique-string: ~2.0.0 + checksum: 23977ca1e57f199dd142e3c06472083c997caa4fd1fe2fb3f5537c28a3668de7e95dd228192f709589d22e3d3869c3b5d4d334012e4acd75bf846426fd07ada0 + languageName: node + linkType: hard + +"@expo/json-file@npm:^9.0.2, @expo/json-file@npm:~9.0.2": + version: 9.0.2 + resolution: "@expo/json-file@npm:9.0.2" + dependencies: + "@babel/code-frame": ~7.10.4 + json5: ^2.2.3 + write-file-atomic: ^2.3.0 + checksum: 665fb72028e403adcb3ff9d7763ff6fab0ce16eaa1485a6b502daaab709608a9953599cce2f5c46e91b4791bd2380c87eb911deef4161b9d1f3a7631c2630366 + languageName: node + linkType: hard + +"@expo/json-file@npm:^9.1.2, @expo/json-file@npm:~9.1.2": + version: 9.1.2 + resolution: "@expo/json-file@npm:9.1.2" + dependencies: + "@babel/code-frame": ~7.10.4 + json5: ^2.2.3 + checksum: 42d6fd58030641ec2026472858ea6f03c9effc581b38f9064a7e2bcb9b65e49066da270260d47e6283c575a6851a0bdfd77e67719ef4785ebbe2d1a88ddafd94 + languageName: node + linkType: hard + +"@expo/metro-config@npm:0.19.11, @expo/metro-config@npm:~0.19.11": + version: 0.19.11 + resolution: "@expo/metro-config@npm:0.19.11" + dependencies: + "@babel/core": ^7.20.0 + "@babel/generator": ^7.20.5 + "@babel/parser": ^7.20.0 + "@babel/types": ^7.20.0 + "@expo/config": ~10.0.10 + "@expo/env": ~0.4.2 + "@expo/json-file": ~9.0.2 + "@expo/spawn-async": ^1.7.2 + chalk: ^4.1.0 + debug: ^4.3.2 + fs-extra: ^9.1.0 + getenv: ^1.0.0 + glob: ^10.4.2 + jsc-safe-url: ^0.2.4 + lightningcss: ~1.27.0 + minimatch: ^3.0.4 + postcss: ~8.4.32 + resolve-from: ^5.0.0 + checksum: 3dc22f8cb388a310a9a65123ef25e18d916a375e77146747166af04e744af83d3b5f7f12d4cd4d53449e10c7ab7eeb9aa87de325827f1c4e25ff3a14bc3d8ffd + languageName: node + linkType: hard + +"@expo/metro-config@npm:0.19.12, @expo/metro-config@npm:~0.19.12": + version: 0.19.12 + resolution: "@expo/metro-config@npm:0.19.12" + dependencies: + "@babel/core": ^7.20.0 + "@babel/generator": ^7.20.5 + "@babel/parser": ^7.20.0 + "@babel/types": ^7.20.0 + "@expo/config": ~10.0.11 + "@expo/env": ~0.4.2 + "@expo/json-file": ~9.0.2 + "@expo/spawn-async": ^1.7.2 + chalk: ^4.1.0 + debug: ^4.3.2 + fs-extra: ^9.1.0 + getenv: ^1.0.0 + glob: ^10.4.2 + jsc-safe-url: ^0.2.4 + lightningcss: ~1.27.0 + minimatch: ^3.0.4 + postcss: ~8.4.32 + resolve-from: ^5.0.0 + checksum: 241934860fcf90575de47d67a6de5c701b51e16069a7007c15fac5addc04a66663e66800241aac63635761921829c2c6895217fd2bf6b8d95a00c2e1c664dfc3 + languageName: node + linkType: hard + +"@expo/osascript@npm:^2.1.6": + version: 2.1.6 + resolution: "@expo/osascript@npm:2.1.6" + dependencies: + "@expo/spawn-async": ^1.7.2 + exec-async: ^2.2.0 + checksum: 93883d448ac1c829377035369e7ab72133f0104553c31278185aba94605b25349f006e48a86e0a94794a35c26d42f64d7ee6128bb95319dd20af9e7b166210b1 + languageName: node + linkType: hard + +"@expo/package-manager@npm:^1.7.2": + version: 1.7.2 + resolution: "@expo/package-manager@npm:1.7.2" + dependencies: + "@expo/json-file": ^9.0.2 + "@expo/spawn-async": ^1.7.2 + ansi-regex: ^5.0.0 + chalk: ^4.0.0 + find-up: ^5.0.0 + js-yaml: ^3.13.1 + micromatch: ^4.0.8 + npm-package-arg: ^11.0.0 + ora: ^3.4.0 + resolve-workspace-root: ^2.0.0 + split: ^1.0.1 + sudo-prompt: 9.1.1 + checksum: cbf95b5ea1bc4dfde02631d945b36f46540066acb44f6205873c559e0ebd8d5b6bf21e3fc46f5cbd5f06ea65d29708bf8bdb53d2e820a6e6134fcb535447f6d7 + languageName: node + linkType: hard + +"@expo/plist@npm:^0.2.2": + version: 0.2.2 + resolution: "@expo/plist@npm:0.2.2" + dependencies: + "@xmldom/xmldom": ~0.7.7 + base64-js: ^1.2.3 + xmlbuilder: ^14.0.0 + checksum: ccc8256f07352e327092132d885c3e2291f14b3ef6060065eb11080f130a575012cfff7ae92c579b5e04cc6b2587930caed70e277c2f1f5b63591e39366e659a + languageName: node + linkType: hard + +"@expo/plist@npm:^0.3.2": + version: 0.3.2 + resolution: "@expo/plist@npm:0.3.2" + dependencies: + "@xmldom/xmldom": ^0.8.8 + base64-js: ^1.2.3 + xmlbuilder: ^15.1.1 + checksum: ae7d1beb998ce0df5fb61e206685190b3a6392f4b84f08ebd3581246899c07188d4ec6c1774039fbcf2e2966c056444c3fd7c1dc7aaedc3a0e9e6a45669fd3bf + languageName: node + linkType: hard + +"@expo/prebuild-config@npm:^8.0.28": + version: 8.0.28 + resolution: "@expo/prebuild-config@npm:8.0.28" + dependencies: + "@expo/config": ~10.0.10 + "@expo/config-plugins": ~9.0.15 + "@expo/config-types": ^52.0.4 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@react-native/normalize-colors": 0.76.7 + debug: ^4.3.1 + fs-extra: ^9.0.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + xml2js: 0.6.0 + checksum: 30592c1dd4c8d73fdb2badb5b37e8d5040723a9c06877152f364516363ffca5d2cf624b31b1f7748bcaaac766c6b1d51f557addd25e93175f743d77fcec8d67c + languageName: node + linkType: hard + +"@expo/prebuild-config@npm:~8.2.0": + version: 8.2.0 + resolution: "@expo/prebuild-config@npm:8.2.0" + dependencies: + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@react-native/normalize-colors": 0.76.9 + debug: ^4.3.1 + fs-extra: ^9.0.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + xml2js: 0.6.0 + checksum: 5c9d194e63cc4ec9ba3076179832ce928208e09846981cccc6f07e70742b1d7a29bf7594788543578ced75a42fbc0d4a624c4bd7af73e755d220170090f0b2e5 + languageName: node + linkType: hard + +"@expo/rudder-sdk-node@npm:^1.1.1": + version: 1.1.1 + resolution: "@expo/rudder-sdk-node@npm:1.1.1" + dependencies: + "@expo/bunyan": ^4.0.0 + "@segment/loosely-validate-event": ^2.0.0 + fetch-retry: ^4.1.1 + md5: ^2.2.1 + node-fetch: ^2.6.1 + remove-trailing-slash: ^0.1.0 + uuid: ^8.3.2 + checksum: 5ce50c1a82f899b135600cb29cddf3fab601938700c8203f16a1394d2ffbf9e2cdd246b92ff635f8415121072d99a7b4a370f715b78f6680594b5a630e8d78c6 + languageName: node + linkType: hard + +"@expo/sdk-runtime-versions@npm:^1.0.0": + version: 1.0.0 + resolution: "@expo/sdk-runtime-versions@npm:1.0.0" + checksum: 0942d5a356f590e8dc795761456cc48b3e2d6a38ad2a02d6774efcdc5a70424e05623b4e3e5d2fec0cdc30f40dde05c14391c781607eed3971bf8676518bfd9d + languageName: node + linkType: hard + +"@expo/spawn-async@npm:^1.7.2": + version: 1.7.2 + resolution: "@expo/spawn-async@npm:1.7.2" + dependencies: + cross-spawn: ^7.0.3 + checksum: d99e5ff6d303ec9b0105f97c4fa6c65bca526c7d4d0987997c35cc745fa8224adf009942d01808192ebb9fa30619a53316641958631e85cf17b773d9eeda2597 + languageName: node + linkType: hard + +"@expo/vector-icons@npm:^14.0.0": + version: 14.0.4 + resolution: "@expo/vector-icons@npm:14.0.4" + dependencies: + prop-types: ^15.8.1 + checksum: 31bd5d4e4e2f0b0620b7e8b55b0c5691875cf57c5737bd0ccef0017d0e7abee66352f3d66a58997b719bd0720cccf8f5119503c69fe1a30398747306ebefeb6e + languageName: node + linkType: hard + +"@expo/ws-tunnel@npm:^1.0.1": + version: 1.0.5 + resolution: "@expo/ws-tunnel@npm:1.0.5" + checksum: 28779c2ef34902044122c7c47400a58f971eb3dc2a8b36cc6529660936890cec7fa28628285c4738e9607a215214417df512c13302747f90b00be49493a3de14 + languageName: node + linkType: hard + +"@expo/xcpretty@npm:^4.3.0": + version: 4.3.2 + resolution: "@expo/xcpretty@npm:4.3.2" + dependencies: + "@babel/code-frame": 7.10.4 + chalk: ^4.1.0 + find-up: ^5.0.0 + js-yaml: ^4.1.0 + bin: + excpretty: build/cli.js + checksum: 8771b2812f0dfc49f6dab4338c986beaf4cf2ec20ed8fd598be6e3803fcbfc0a337dbb5b4dad9556b85ba2489f63c777735ad2c2ee6f5842ff68b9322e47f6a3 + languageName: node + linkType: hard + +"@huggingface/jinja@npm:^0.3.4": + version: 0.3.4 + resolution: "@huggingface/jinja@npm:0.3.4" + checksum: 5a2eac0da4522e6a60af0a73cb6bdcca6b0a5e3d4987b40a260a5735da686e13a689e87428ca9945576135a29c4485e14d2f8fc130a89f93fd390c5c3904d224 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: ^7.0.4 + checksum: 5d36d289960e886484362d9eb6a51d1ea28baed5f5d0140bbe62b99bac52eaf06cc01c2bc0d3575977962f84f6b2c4387b043ee632216643d4787b0999465bf2 + languageName: node + linkType: hard + +"@isaacs/ttlcache@npm:^1.4.1": + version: 1.4.1 + resolution: "@isaacs/ttlcache@npm:1.4.1" + checksum: b99f0918faf1eba405b6bc3421584282b2edc46cca23f8d8e112a643bf6e4506c6c53a4525901118e229d19c5719bbec3028ec438d758fd71081f6c32af871ec + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: ^5.3.1 + find-up: ^4.1.0 + get-package-type: ^0.1.0 + js-yaml: ^3.13.1 + resolve-from: ^5.0.0 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jest/create-cache-key-function@npm:^29.6.3": + version: 29.7.0 + resolution: "@jest/create-cache-key-function@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + checksum: 681bc761fa1d6fa3dd77578d444f97f28296ea80755e90e46d1c8fa68661b9e67f54dd38b988742db636d26cf160450dc6011892cec98b3a7ceb58cad8ff3aae + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": ^1.2.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: c0687b5227461717aa537fe71a42e356bcd1c43293b3353796a148bf3b0d6f59109def46c22f05b60e29a46f19b2e4676d027959a7c53a6c92b9d5b0d87d0420 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.6 + resolution: "@jridgewell/source-map@npm:0.3.6" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.3 + checksum: e8fc25d536250ed3e669813b36e8c6d805628b472353c57afd8c4fde0fcfcf3dda4ffe22f7af8c9070812ec2e7a03fb41d7151547cef3508efe661a5a3add20f + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: ^7.3.5 + checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: ^7.3.5 + checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@react-native/assets-registry@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/assets-registry@npm:0.76.9" + checksum: 07e7da7a20745b6bdea99620e50d69c76219b7232b21cc43982696123a330cebd9d24e1a4be2a61588ab3af5155557e651267dfad9c91ad0bc8e098e6e7ad38f + languageName: node + linkType: hard + +"@react-native/babel-plugin-codegen@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/babel-plugin-codegen@npm:0.76.5" + dependencies: + "@react-native/codegen": 0.76.5 + checksum: 2bcc678a2122af7c172e4966209bc14a93bcf6067f6bf422c139d192db87e68f8b7dcb6b2ac39f5d4dcfb66b79ea1d528930554427fdfe5b1053025eb3d564ac + languageName: node + linkType: hard + +"@react-native/babel-plugin-codegen@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/babel-plugin-codegen@npm:0.76.7" + dependencies: + "@react-native/codegen": 0.76.7 + checksum: d19f45cc0d3f1de0cbe9fe4b3623d008284957829d7d471adf6c881f2450a3f40ecc152361185a076403419f19f53094f12624915d41fa79a9f214afdaf85e60 + languageName: node + linkType: hard + +"@react-native/babel-plugin-codegen@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/babel-plugin-codegen@npm:0.76.9" + dependencies: + "@react-native/codegen": 0.76.9 + checksum: 13bba234a6c9e29fa4f7bf13a23ce8aecc5fc00da6cef6f6dd0462f82cdfeeeca62842c054ffe626662a92326774bf22723a90be5ac2158990386422ceee96c5 + languageName: node + linkType: hard + +"@react-native/babel-preset@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/babel-preset@npm:0.76.5" + dependencies: + "@babel/core": ^7.25.2 + "@babel/plugin-proposal-export-default-from": ^7.24.7 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-default-from": ^7.24.7 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.4 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.25.4 + "@babel/plugin-transform-classes": ^7.25.4 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 + "@babel/plugin-transform-flow-strip-types": ^7.25.2 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 + "@babel/plugin-transform-literals": ^7.25.2 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-react-display-name": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.25.2 + "@babel/plugin-transform-react-jsx-self": ^7.24.7 + "@babel/plugin-transform-react-jsx-source": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-runtime": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-typescript": ^7.25.2 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/template": ^7.25.0 + "@react-native/babel-plugin-codegen": 0.76.5 + babel-plugin-syntax-hermes-parser: ^0.25.1 + babel-plugin-transform-flow-enums: ^0.0.2 + react-refresh: ^0.14.0 + peerDependencies: + "@babel/core": "*" + checksum: 1e693e1ce051634bab055a147d7db1a4bb4368d09c98736bfdfe0a50a0d3fda9125ce10279e4da67a435d4f8a18995c111fe91e8bb66b6889ae0ef4184b70542 + languageName: node + linkType: hard + +"@react-native/babel-preset@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/babel-preset@npm:0.76.7" + dependencies: + "@babel/core": ^7.25.2 + "@babel/plugin-proposal-export-default-from": ^7.24.7 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-default-from": ^7.24.7 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.4 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.25.4 + "@babel/plugin-transform-classes": ^7.25.4 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 + "@babel/plugin-transform-flow-strip-types": ^7.25.2 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 + "@babel/plugin-transform-literals": ^7.25.2 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-react-display-name": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.25.2 + "@babel/plugin-transform-react-jsx-self": ^7.24.7 + "@babel/plugin-transform-react-jsx-source": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-runtime": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-typescript": ^7.25.2 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/template": ^7.25.0 + "@react-native/babel-plugin-codegen": 0.76.7 + babel-plugin-syntax-hermes-parser: ^0.25.1 + babel-plugin-transform-flow-enums: ^0.0.2 + react-refresh: ^0.14.0 + peerDependencies: + "@babel/core": "*" + checksum: 29b48f80d32839d03f17d938e3f2b34f213d6ac3155de9556016132d4e3b9d55ce2b3d18fcd596ba6507f6bbe64174a76c5e94cc3737b39f00467c455de6b2d4 + languageName: node + linkType: hard + +"@react-native/babel-preset@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/babel-preset@npm:0.76.9" + dependencies: + "@babel/core": ^7.25.2 + "@babel/plugin-proposal-export-default-from": ^7.24.7 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-default-from": ^7.24.7 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.4 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.25.4 + "@babel/plugin-transform-classes": ^7.25.4 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 + "@babel/plugin-transform-flow-strip-types": ^7.25.2 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 + "@babel/plugin-transform-literals": ^7.25.2 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-react-display-name": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.25.2 + "@babel/plugin-transform-react-jsx-self": ^7.24.7 + "@babel/plugin-transform-react-jsx-source": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-runtime": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-typescript": ^7.25.2 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/template": ^7.25.0 + "@react-native/babel-plugin-codegen": 0.76.9 + babel-plugin-syntax-hermes-parser: ^0.25.1 + babel-plugin-transform-flow-enums: ^0.0.2 + react-refresh: ^0.14.0 + peerDependencies: + "@babel/core": "*" + checksum: b48ac1195d4b52a14134f3dbfa26771aa66db0b787ebced6153d7c60802f1b959a3cf07b873da1b085e7db9b527507d1111302bb177ad52d7c77d635b6f3805b + languageName: node + linkType: hard + +"@react-native/codegen@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/codegen@npm:0.76.5" + dependencies: + "@babel/parser": ^7.25.3 + glob: ^7.1.1 + hermes-parser: 0.23.1 + invariant: ^2.2.4 + jscodeshift: ^0.14.0 + mkdirp: ^0.5.1 + nullthrows: ^1.1.1 + yargs: ^17.6.2 + peerDependencies: + "@babel/preset-env": ^7.1.6 + checksum: 8d12b96ee0e895a0aa599a1bae4e854d0acb2e4ee5c5e1acf291adcf262a2aca77494c63f9ca6470e9950987ae3d5d83881dbe91caaf69563ea4dd69d08ecaeb + languageName: node + linkType: hard + +"@react-native/codegen@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/codegen@npm:0.76.7" + dependencies: + "@babel/parser": ^7.25.3 + glob: ^7.1.1 + hermes-parser: 0.23.1 + invariant: ^2.2.4 + jscodeshift: ^0.14.0 + mkdirp: ^0.5.1 + nullthrows: ^1.1.1 + yargs: ^17.6.2 + peerDependencies: + "@babel/preset-env": ^7.1.6 + checksum: f5f332c334b0bae892c7f3986c87f20c052b2b1ca9fc927fc91db012e1f062d8feaa01dc2e09d64454ce4e36dc0571d73ae3cb3a2d2aeba485ddc0c3d0e80aa1 + languageName: node + linkType: hard + +"@react-native/codegen@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/codegen@npm:0.76.9" + dependencies: + "@babel/parser": ^7.25.3 + glob: ^7.1.1 + hermes-parser: 0.23.1 + invariant: ^2.2.4 + jscodeshift: ^0.14.0 + mkdirp: ^0.5.1 + nullthrows: ^1.1.1 + yargs: ^17.6.2 + peerDependencies: + "@babel/preset-env": ^7.1.6 + checksum: fcb26bd5be6f923eafd05e356ab01c9bbd30cab5e950bb050312a651771bcb2cb8484a3ba511e1460d44f508700565b0b69d43039c8cc61e63b9eacca6b9c756 + languageName: node + linkType: hard + +"@react-native/community-cli-plugin@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/community-cli-plugin@npm:0.76.9" + dependencies: + "@react-native/dev-middleware": 0.76.9 + "@react-native/metro-babel-transformer": 0.76.9 + chalk: ^4.0.0 + execa: ^5.1.1 + invariant: ^2.2.4 + metro: ^0.81.0 + metro-config: ^0.81.0 + metro-core: ^0.81.0 + node-fetch: ^2.2.0 + readline: ^1.3.0 + semver: ^7.1.3 + peerDependencies: + "@react-native-community/cli": "*" + peerDependenciesMeta: + "@react-native-community/cli": + optional: true + checksum: 1c0c054d20b3b4c978928e80aa5e56cadeb8dfc1c80a374f67a23e80e2acac0fff5aea0b3f6413483f1ba2bad6a65749e8105dd0ebf2dcd6b045f88e3d7c8d24 + languageName: node + linkType: hard + +"@react-native/debugger-frontend@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/debugger-frontend@npm:0.76.7" + checksum: 3ef73a8e5f281d73b17f2b5834d803665506726a77e660a610b0b6511aedf26c82e92fdcf782e1d214c79b70432323f8116f11977f81ed3969c2af9f68f5c903 + languageName: node + linkType: hard + +"@react-native/debugger-frontend@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/debugger-frontend@npm:0.76.9" + checksum: c537ae5be75bb9a0a549d88b6545762364d87a1166c8a7339ccd774257096a2c62f83efdd86c78553a3f1c4ef35cfa7708aba477bf6eeb76b7814ceab2b98069 + languageName: node + linkType: hard + +"@react-native/dev-middleware@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/dev-middleware@npm:0.76.7" + dependencies: + "@isaacs/ttlcache": ^1.4.1 + "@react-native/debugger-frontend": 0.76.7 + chrome-launcher: ^0.15.2 + chromium-edge-launcher: ^0.2.0 + connect: ^3.6.5 + debug: ^2.2.0 + invariant: ^2.2.4 + nullthrows: ^1.1.1 + open: ^7.0.3 + selfsigned: ^2.4.1 + serve-static: ^1.13.1 + ws: ^6.2.3 + checksum: cc23a959299cd97e0960915a211ebe36a3c36161111bd8f627a5ab6c78a98ddbb893ac52313d6cd11b4c0c35324b8f2a0806676e255e2b0bf578e0aab71414a2 + languageName: node + linkType: hard + +"@react-native/dev-middleware@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/dev-middleware@npm:0.76.9" + dependencies: + "@isaacs/ttlcache": ^1.4.1 + "@react-native/debugger-frontend": 0.76.9 + chrome-launcher: ^0.15.2 + chromium-edge-launcher: ^0.2.0 + connect: ^3.6.5 + debug: ^2.2.0 + invariant: ^2.2.4 + nullthrows: ^1.1.1 + open: ^7.0.3 + selfsigned: ^2.4.1 + serve-static: ^1.13.1 + ws: ^6.2.3 + checksum: 1f7750ae0c4d4d7970a73cd4f8443004a93b91b998a003ddb965274eb718d2a70ff06d182903dcaeccf15d8d245f488a397ea8ae53f6ed5f25e4d476d844b90f + languageName: node + linkType: hard + +"@react-native/gradle-plugin@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/gradle-plugin@npm:0.76.9" + checksum: afc6010cf278ed7dba58fb67cb789965edb6cfb3608e54b518232ef46b651f541915b7f6eae0b298457ccd8626213c687962ec250143e714de5e3bd2dc6dc210 + languageName: node + linkType: hard + +"@react-native/js-polyfills@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/js-polyfills@npm:0.76.5" + checksum: 980ba02461a40f794dbc31ff2e0a00c7c209f3d4555fce4f9bef28de79a3336a1db9a46583b3c0d613d1cf3f3d2166f4386824de47857a6ead30c860f31542cb + languageName: node + linkType: hard + +"@react-native/js-polyfills@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/js-polyfills@npm:0.76.9" + checksum: c49aac99f6973b102a9013632c204f02a57d96da500901bc6730ab96f56950d6924417e39c87be640a3a59b67e1af2583432361f55bf42c959aff02a285bcafc + languageName: node + linkType: hard + +"@react-native/metro-babel-transformer@npm:0.76.5": + version: 0.76.5 + resolution: "@react-native/metro-babel-transformer@npm:0.76.5" + dependencies: + "@babel/core": ^7.25.2 + "@react-native/babel-preset": 0.76.5 + hermes-parser: 0.23.1 + nullthrows: ^1.1.1 + peerDependencies: + "@babel/core": "*" + checksum: 55d2391660b83b65afa9eeb6e301ae28d31251adbcd2536acb22b57c1e52620f7c094fcde3244842110da3df13ec04a8e5c00c0420d89354ab29e01f41da1350 + languageName: node + linkType: hard + +"@react-native/metro-babel-transformer@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/metro-babel-transformer@npm:0.76.9" + dependencies: + "@babel/core": ^7.25.2 + "@react-native/babel-preset": 0.76.9 + hermes-parser: 0.23.1 + nullthrows: ^1.1.1 + peerDependencies: + "@babel/core": "*" + checksum: cb38d150e30b3e07e2cb8e637e26b4dcb8b58d6accc95f51e507baea94bb970a0077573c319849a3e7d9bf976dadc39cf363bb505f53de1a209e1bb9ea0428f8 + languageName: node + linkType: hard + +"@react-native/metro-config@npm:^0.76.3": + version: 0.76.5 + resolution: "@react-native/metro-config@npm:0.76.5" + dependencies: + "@react-native/js-polyfills": 0.76.5 + "@react-native/metro-babel-transformer": 0.76.5 + metro-config: ^0.81.0 + metro-runtime: ^0.81.0 + checksum: afdd47fe403d30bf29961e4e3271f16cbd2170150d6c516aeb6018846f6d1bd71e1eca0a7548c90b9ce847c7a7a256971b96b172edc4840a8cb5dd1226bb6d43 + languageName: node + linkType: hard + +"@react-native/normalize-colors@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/normalize-colors@npm:0.76.7" + checksum: 4840d1f3852d908520aa77733dae07bd7bcfaa393e0245ea74716246d626785a6abe3add9c4975cbdabc45f5eaf56bbb133fd63e471b48e975a07ca5c346c9bb + languageName: node + linkType: hard + +"@react-native/normalize-colors@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/normalize-colors@npm:0.76.9" + checksum: 4fddb977b8aad2e848cb698f13b9ffec539668e8ae891846327d5e23ce3de13dea59a2dfbea8a154ea034791c7abc3f7d1d4c8caae2114f7a683c78b221aed36 + languageName: node + linkType: hard + +"@react-native/virtualized-lists@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/virtualized-lists@npm:0.76.9" + dependencies: + invariant: ^2.2.4 + nullthrows: ^1.1.1 + peerDependencies: + "@types/react": ^18.2.6 + react: "*" + react-native: "*" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 697a04bdf4b5f430164bf666bf60cd0207f4d3fb06b0a62d7c39b54c166973b29c73640e5c1a44f1c6891d93398bedd63eb8addcbe78641d7ebb13b9ab022052 + languageName: node + linkType: hard + +"@segment/loosely-validate-event@npm:^2.0.0": + version: 2.0.0 + resolution: "@segment/loosely-validate-event@npm:2.0.0" + dependencies: + component-type: ^1.2.1 + join-component: ^1.1.0 + checksum: 8c4aacc903fb717619b69ca7eecf8d4a7b928661b0e835c9cd98f1b858a85ce62c348369ad9a52cb2df8df02578c0525a73fce4c69a42ac414d9554cc6be7117 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: 4.0.8 + checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3fc8e35d16f5abe0af5efe5851f27581225ac405d6a1ca44cda0df064cddfcc29a428c48c2e4bef6cebf627c9ac2f652a096030edb02cf5a120ce28d3c234710 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ff992893c6c4ac802713ba3a97c13be34e62e6d981c813af40daabcd676df68a72a61bd1e692bb1eda3587f1b1d700ea462222ae2153bb0f46886632d4f88d08 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0fb691b63a21bac00da3aa2dccec50d0d5a5b347ff408d60803b84410d8af168f2656e4ba1ee1f24dab0ae4e4af77901f2928752bb0434c1f6788133ec599ec8 + languageName: node + linkType: hard + +"@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1edda65ef4f4dd8f021143c8ec276a08f6baa6f733b8e8ee2e7775597bf6b97afb47fdeefd579d6ae6c959fe2e634f55cd61d99377631212228c8cfb351b8921 + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 876cec891488992e6a9aebb8155e2bea4ec461b4718c51de36e988e00e271c6d9d01ef6be17b9effd44b2b3d7db0b41c161a5904a46ae6f38b26b387ad7f3709 + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: be0e2d391164428327d9ec469a52cea7d93189c6b0e2c290999e048f597d777852f701c64dca44cd45b31ed14a7f859520326e2e4ad7c3a4545d0aa235bc7e9a + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85b434a57572f53bd2b9f0606f253e1fcf57b4a8c554ec3f2d43ed17f50d8cae200cb3aaf1ec9d626e1456e8b135dce530ae047eb0bed6d4bf98a752d6640459 + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-svg-component@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-transform-svg-component@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 04e2023d75693eeb0890341c40e449881184663056c249be7e5c80168e4aabb0fadd255e8d5d2dbf54b8c2a6e700efba994377135bfa4060dc4a2e860116ef8c + languageName: node + linkType: hard + +"@svgr/babel-preset@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/babel-preset@npm:8.1.0" + dependencies: + "@svgr/babel-plugin-add-jsx-attribute": 8.0.0 + "@svgr/babel-plugin-remove-jsx-attribute": 8.0.0 + "@svgr/babel-plugin-remove-jsx-empty-expression": 8.0.0 + "@svgr/babel-plugin-replace-jsx-attribute-value": 8.0.0 + "@svgr/babel-plugin-svg-dynamic-title": 8.0.0 + "@svgr/babel-plugin-svg-em-dimensions": 8.0.0 + "@svgr/babel-plugin-transform-react-native-svg": 8.1.0 + "@svgr/babel-plugin-transform-svg-component": 8.0.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a67930f080b8891e1e8e2595716b879c944d253112bae763dce59807ba23454d162216c8d66a0a0e3d4f38a649ecd6c387e545d1e1261dd69a68e9a3392ee08 + languageName: node + linkType: hard + +"@svgr/core@npm:^8.1.0": + version: 8.1.0 + resolution: "@svgr/core@npm:8.1.0" + dependencies: + "@babel/core": ^7.21.3 + "@svgr/babel-preset": 8.1.0 + camelcase: ^6.2.0 + cosmiconfig: ^8.1.3 + snake-case: ^3.0.4 + checksum: da4a12865c7dc59829d58df8bd232d6c85b7115fda40da0d2f844a1a51886e2e945560596ecfc0345d37837ac457de86a931e8b8d8550e729e0c688c02250d8a + languageName: node + linkType: hard + +"@svgr/hast-util-to-babel-ast@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/hast-util-to-babel-ast@npm:8.0.0" + dependencies: + "@babel/types": ^7.21.3 + entities: ^4.4.0 + checksum: 88401281a38bbc7527e65ff5437970414391a86158ef4b4046c89764c156d2d39ecd7cce77be8a51994c9fb3249170cb1eb8b9128b62faaa81743ef6ed3534ab + languageName: node + linkType: hard + +"@svgr/plugin-jsx@npm:^8.1.0": + version: 8.1.0 + resolution: "@svgr/plugin-jsx@npm:8.1.0" + dependencies: + "@babel/core": ^7.21.3 + "@svgr/babel-preset": 8.1.0 + "@svgr/hast-util-to-babel-ast": 8.0.0 + svg-parser: ^2.0.4 + peerDependencies: + "@svgr/core": "*" + checksum: 0418a9780753d3544912ee2dad5d2cf8d12e1ba74df8053651b3886aeda54d5f0f7d2dece0af5e0d838332c4f139a57f0dabaa3ca1afa4d1a765efce6a7656f2 + languageName: node + linkType: hard + +"@svgr/plugin-svgo@npm:^8.1.0": + version: 8.1.0 + resolution: "@svgr/plugin-svgo@npm:8.1.0" + dependencies: + cosmiconfig: ^8.1.3 + deepmerge: ^4.3.1 + svgo: ^3.0.2 + peerDependencies: + "@svgr/core": "*" + checksum: 59d9d214cebaacca9ca71a561f463d8b7e5a68ca9443e4792a42d903acd52259b1790c0680bc6afecc3f00a255a6cbd7ea278a9f625bac443620ea58a590c2d0 + languageName: node + linkType: hard + +"@trysound/sax@npm:0.2.0": + version: 0.2.0 + resolution: "@trysound/sax@npm:0.2.0" + checksum: 11226c39b52b391719a2a92e10183e4260d9651f86edced166da1d95f39a0a1eaa470e44d14ac685ccd6d3df7e2002433782872c0feeb260d61e80f21250e65c + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845 + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": ^7.0.0 + checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" + dependencies: + "@babel/types": ^7.20.7 + checksum: 2bdc65eb62232c2d5c1086adeb0c31e7980e6fd7e50a3483b4a724a1a1029c84d9cb59749cf8de612f9afa2bc14c85b8f50e64e21f8a4398fa77eb9059a4283c + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" + dependencies: + "@types/node": "*" + checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 + languageName: node + linkType: hard + +"@types/node-forge@npm:^1.3.0": + version: 1.3.11 + resolution: "@types/node-forge@npm:1.3.11" + dependencies: + "@types/node": "*" + checksum: 1e86bd55b92a492eaafd75f6d01f31e7d86a5cdadd0c6bcdc0b1df4103b7f99bb75b832efd5217c7ddda5c781095dc086a868e20b9de00f5a427ddad4c296cd5 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 22.10.2 + resolution: "@types/node@npm:22.10.2" + dependencies: + undici-types: ~6.20.0 + checksum: b22401e6e7d1484e437d802c72f5560e18100b1257b9ad0574d6fe05bebe4dbcb620ea68627d1f1406775070d29ace8b6b51f57e7b1c7b8bafafe6da7f29c843 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.14 + resolution: "@types/prop-types@npm:15.7.14" + checksum: d0c5407b9ccc3dd5fae0ccf9b1007e7622ba5e6f1c18399b4f24dff33619d469da4b9fa918a374f19dc0d9fe6a013362aab0b844b606cfc10676efba3f5f736d + languageName: node + linkType: hard + +"@types/react@npm:~18.3.12": + version: 18.3.17 + resolution: "@types/react@npm:18.3.17" + dependencies: + "@types/prop-types": "*" + csstype: ^3.0.2 + checksum: 8107f6f5cc8706a3814e6c927e135ce0c7b40a6d9ae2b8dfb071fee03c6f714456041ecdf92dece599da0db8be7f56f6dc6353d4701f47a04772c7ec0cbb0b59 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" + dependencies: + "@types/yargs-parser": "*" + checksum: ee013f257472ab643cb0584cf3e1ff9b0c44bca1c9ba662395300a7f1a6c55fa9d41bd40ddff42d99f5d95febb3907c9ff600fbcb92dadbec22c6a76de7e1236 + languageName: node + linkType: hard + +"@urql/core@npm:^5.0.0, @urql/core@npm:^5.0.6": + version: 5.1.0 + resolution: "@urql/core@npm:5.1.0" + dependencies: + "@0no-co/graphql.web": ^1.0.5 + wonka: ^6.3.2 + checksum: 63b8c1f25a5e3a50d84aeae63141e06ee8913c3a53d936fcb8453108034e50938fc774da298f50358ec2f3825bd62b2a3e4754ab1c9107dd9a79cb0c9c0d2a12 + languageName: node + linkType: hard + +"@urql/exchange-retry@npm:^1.3.0": + version: 1.3.0 + resolution: "@urql/exchange-retry@npm:1.3.0" + dependencies: + "@urql/core": ^5.0.0 + wonka: ^6.3.2 + peerDependencies: + "@urql/core": ^5.0.0 + checksum: a4da1866406b2244bd28ecd01881aded10d1da7728792d6d9e9c9e718080afd41a3a8694e87c59002ab2ffc823a52662e933a3ef9e7102fd3b2c4f008615ab14 + languageName: node + linkType: hard + +"@xmldom/xmldom@npm:^0.8.8": + version: 0.8.10 + resolution: "@xmldom/xmldom@npm:0.8.10" + checksum: 4c136aec31fb3b49aaa53b6fcbfe524d02a1dc0d8e17ee35bd3bf35e9ce1344560481cd1efd086ad1a4821541482528672306d5e37cdbd187f33d7fadd3e2cf0 + languageName: node + linkType: hard + +"@xmldom/xmldom@npm:~0.7.7": + version: 0.7.13 + resolution: "@xmldom/xmldom@npm:0.7.13" + checksum: b4054078530e5fa8ede9677425deff0fce6d965f4c477ca73f8490d8a089e60b8498a15560425a1335f5ff99ecb851ed2c734b0a9a879299a5694302f212f37a + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + +"accepts@npm:^1.3.7, accepts@npm:^1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + +"acorn@npm:^8.8.2": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 87bb7ee54f5ecf0ccbfcba0b07473885c43ecd76cb29a8db17d6137a19d9f9cd443a2a7c5fd8a3f24d58ad8145f9eb49116344a66b107e1aeab82cf2383f4753 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"anser@npm:^1.4.9": + version: 1.4.10 + resolution: "anser@npm:1.4.10" + checksum: 3823c64f8930d3d97f36e56cdf646fa6351f1227e25eee70c3a17697447cae4238fc3a309bb3bc2003cf930687fa72aed71426dbcf3c0a15565e120a7fee5507 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-regex@npm:^4.1.0": + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"application-config-path@npm:^0.1.0": + version: 0.1.1 + resolution: "application-config-path@npm:0.1.1" + checksum: e478c1e4d515108de89693165d92dab11cfdc69dd0f3ccde034f14a3f4e50007946de9e4dd51cd77d2f7ba9752e75d8e4d937ef053a53e466425d9751c961a37 + languageName: node + linkType: hard + +"arg@npm:^5.0.2": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"asap@npm:~2.0.3, asap@npm:~2.0.6": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d + languageName: node + linkType: hard + +"ast-types@npm:0.15.2": + version: 0.15.2 + resolution: "ast-types@npm:0.15.2" + dependencies: + tslib: ^2.0.1 + checksum: 24f0d86bf9e4c8dae16fa24b13c1776f2c2677040bcfbd4eb4f27911db49020be4876885e45e6cfcc548ed4dfea3a0742d77e3346b84fae47379cb0b89e9daa0 + languageName: node + linkType: hard + +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + +"babel-core@npm:^7.0.0-bridge.0": + version: 7.0.0-bridge.0 + resolution: "babel-core@npm:7.0.0-bridge.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2a1cb879019dffb08d17bec36e13c3a6d74c94773f41c1fd8b14de13f149cc34b705b0a1e07b42fcf35917b49d78db6ff0c5c3b00b202a5235013d517b5c6bbb + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": ^29.7.0 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.6.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.10": + version: 0.4.12 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.12" + dependencies: + "@babel/compat-data": ^7.22.6 + "@babel/helper-define-polyfill-provider": ^0.6.3 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 6e6e6a8b85fec80a310ded2f5c151385e4ac59118909dd6a952e1025e4a478eb79dda45a5a6322cc2e598fd696eb07d4e2fa52418b4101f3dc370bdf8c8939ba + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.10.6": + version: 0.10.6 + resolution: "babel-plugin-polyfill-corejs3@npm:0.10.6" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.2 + core-js-compat: ^3.38.0 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: f762f29f7acca576897c63149c850f0a72babd3fb9ea436a2e36f0c339161c4b912a77828541d8188ce8a91e50965c6687120cf36071eabb1b7aa92f279e2164 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.1": + version: 0.6.3 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.3" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.3 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: d12696e6b3f280eb78fac551619ca4389262db62c7352cd54bf679d830df8b35596eef2de77cf00db6648eada1c99d49c4f40636dbc9c335a1e5420cfef96750 + languageName: node + linkType: hard + +"babel-plugin-react-native-web@npm:~0.19.13": + version: 0.19.13 + resolution: "babel-plugin-react-native-web@npm:0.19.13" + checksum: 899165793b6e3416b87e830633d98b2bec6e29c89d838b86419a5a6e40b7042d3db98098393dfe3fc9be507054f5bcbf83c420cccfe5dc47c7d962acd1d313d5 + languageName: node + linkType: hard + +"babel-plugin-syntax-hermes-parser@npm:^0.23.1": + version: 0.23.1 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.23.1" + dependencies: + hermes-parser: 0.23.1 + checksum: 5412008e8e85b08cd0d78168f746ade68b8ed69c0068831ce5e3d028f01c644f546ca0e2b7c9a4a8c6b9d5f14aff84c2453ab44b19cbec55e4366b20bbba9040 + languageName: node + linkType: hard + +"babel-plugin-syntax-hermes-parser@npm:^0.25.1": + version: 0.25.1 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.25.1" + dependencies: + hermes-parser: 0.25.1 + checksum: dc80fafde1aed8e60cf86ecd2e9920e7f35ffe02b33bd4e772daaa786167bcf508aac3fc1aea425ff4c7a0be94d82528f3fe8619b7f41dac853264272d640c04 + languageName: node + linkType: hard + +"babel-plugin-transform-flow-enums@npm:^0.0.2": + version: 0.0.2 + resolution: "babel-plugin-transform-flow-enums@npm:0.0.2" + dependencies: + "@babel/plugin-syntax-flow": ^7.12.1 + checksum: fd52aef54448e01948a9d1cca0c8f87d064970c8682458962b7a222c372704bc2ce26ae8109e0ab2566e7ea5106856460f04c1a5ed794ab3bcd2f42cae1d9845 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.1.0 + resolution: "babel-preset-current-node-syntax@npm:1.1.0" + dependencies: + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-bigint": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 9f93fac975eaba296c436feeca1031ca0539143c4066eaf5d1ba23525a31850f03b651a1049caea7287df837a409588c8252c15627ad3903f17864c8e25ed64b + languageName: node + linkType: hard + +"babel-preset-expo@npm:~12.0.11": + version: 12.0.11 + resolution: "babel-preset-expo@npm:12.0.11" + dependencies: + "@babel/plugin-proposal-decorators": ^7.12.9 + "@babel/plugin-transform-export-namespace-from": ^7.22.11 + "@babel/plugin-transform-object-rest-spread": ^7.12.13 + "@babel/plugin-transform-parameters": ^7.22.15 + "@babel/preset-react": ^7.22.15 + "@babel/preset-typescript": ^7.23.0 + "@react-native/babel-preset": 0.76.9 + babel-plugin-react-native-web: ~0.19.13 + react-refresh: ^0.14.2 + peerDependencies: + babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 + react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 + peerDependenciesMeta: + babel-plugin-react-compiler: + optional: true + react-compiler-runtime: + optional: true + checksum: 8ff4437a5e3ea229c22ad2de645abc452f05fe55bc72b2586e4cfe675fcc6b3c83779c1a18343364d200b988cac5e60eed6e616a29eb1446e2294236f9f60d3f + languageName: node + linkType: hard + +"babel-preset-expo@npm:~12.0.9": + version: 12.0.9 + resolution: "babel-preset-expo@npm:12.0.9" + dependencies: + "@babel/plugin-proposal-decorators": ^7.12.9 + "@babel/plugin-transform-export-namespace-from": ^7.22.11 + "@babel/plugin-transform-object-rest-spread": ^7.12.13 + "@babel/plugin-transform-parameters": ^7.22.15 + "@babel/preset-react": ^7.22.15 + "@babel/preset-typescript": ^7.23.0 + "@react-native/babel-preset": 0.76.7 + babel-plugin-react-native-web: ~0.19.13 + react-refresh: ^0.14.2 + peerDependencies: + babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 + react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 + peerDependenciesMeta: + babel-plugin-react-compiler: + optional: true + react-compiler-runtime: + optional: true + checksum: b62149d7a45814528acd02281edfc5428efafab18beca5551ecfca838dce48004a5976c95c588219db113aa31c3470fe6761a068577e35dcc9ffbe1a90f8d2e9 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.2.3, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"better-opn@npm:~3.0.2": + version: 3.0.2 + resolution: "better-opn@npm:3.0.2" + dependencies: + open: ^8.0.4 + checksum: 1471552fa7f733561e7f49e812be074b421153006ca744de985fb6d38939807959fc5fe9cb819cf09f864782e294704fd3b31711ea14c115baf3330a2f1135de + languageName: node + linkType: hard + +"big-integer@npm:1.6.x": + version: 1.6.52 + resolution: "big-integer@npm:1.6.52" + checksum: 6e86885787a20fed96521958ae9086960e4e4b5e74d04f3ef7513d4d0ad631a9f3bde2730fc8aaa4b00419fc865f6ec573e5320234531ef37505da7da192c40b + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 + languageName: node + linkType: hard + +"bplist-creator@npm:0.0.7": + version: 0.0.7 + resolution: "bplist-creator@npm:0.0.7" + dependencies: + stream-buffers: ~2.2.0 + checksum: 5bcf4091c5a0e5934d56643d9f2705b5149a0b0b62b8314762f6ad4b3208d313c75ad03bab97a3c42b6e17db3d73530d3642d082ca249b55f952c90056c2b2ad + languageName: node + linkType: hard + +"bplist-creator@npm:0.1.1": + version: 0.1.1 + resolution: "bplist-creator@npm:0.1.1" + dependencies: + stream-buffers: 2.2.x + checksum: b0d40d1d1623f1afdbb575cfc8075d742d2c4f0eb458574be809e3857752d1042a39553b3943d2d7f505dde92bcd43e1d7bdac61c9cd44475d696deb79f897ce + languageName: node + linkType: hard + +"bplist-parser@npm:0.3.2, bplist-parser@npm:^0.3.1": + version: 0.3.2 + resolution: "bplist-parser@npm:0.3.2" + dependencies: + big-integer: 1.6.x + checksum: fad0f6eb155a9b636b4096a1725ce972a0386490d7d38df7be11a3a5645372446b7c44aacbc6626d24d2c17d8b837765361520ebf2960aeffcaf56765811620e + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 + languageName: node + linkType: hard + +"browserslist@npm:^4.24.0, browserslist@npm:^4.24.2": + version: 4.24.3 + resolution: "browserslist@npm:4.24.3" + dependencies: + caniuse-lite: ^1.0.30001688 + electron-to-chromium: ^1.5.73 + node-releases: ^2.0.19 + update-browserslist-db: ^1.1.1 + bin: + browserslist: cli.js + checksum: 016efc9953350e3a7212edcfdd72210cb33b339c1a974a77c0715eb67d23d7e5cd0a073ce1c801ab09235d8c213425ca51b92d41bbb829b833872b45f885fe7c + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-alloc-unsafe@npm:^1.1.0": + version: 1.1.0 + resolution: "buffer-alloc-unsafe@npm:1.1.0" + checksum: c5e18bf51f67754ec843c9af3d4c005051aac5008a3992938dda1344e5cfec77c4b02b4ca303644d1e9a6e281765155ce6356d85c6f5ccc5cd21afc868def396 + languageName: node + linkType: hard + +"buffer-alloc@npm:^1.1.0": + version: 1.2.0 + resolution: "buffer-alloc@npm:1.2.0" + dependencies: + buffer-alloc-unsafe: ^1.1.0 + buffer-fill: ^1.0.0 + checksum: 560cd27f3cbe73c614867da373407d4506309c62fe18de45a1ce191f3785ec6ca2488d802ff82065798542422980ca25f903db078c57822218182c37c3576df5 + languageName: node + linkType: hard + +"buffer-fill@npm:^1.0.0": + version: 1.0.0 + resolution: "buffer-fill@npm:1.0.0" + checksum: c29b4723ddeab01e74b5d3b982a0c6828f2ded49cef049ddca3dac661c874ecdbcecb5dd8380cf0f4adbeb8cff90a7de724126750a1f1e5ebd4eb6c59a1315b1 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer@npm:^5.4.3": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e + languageName: node + linkType: hard + +"cacache@npm:^18.0.2": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7422c113b4ec750f33beeca0f426a0024c28e3172f332218f48f963e5b970647fa1ac05679fe5bb448832c51efea9fda4456b9a95c3a1af1105fe6c1833cde2 + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": ^4.0.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^7.0.2 + ssri: ^12.0.0 + tar: ^7.4.3 + unique-filename: ^4.0.0 + checksum: e95684717de6881b4cdaa949fa7574e3171946421cd8291769dd3d2417dbf7abf4aa557d1f968cca83dcbc95bed2a281072b09abfc977c942413146ef7ed4525 + languageName: node + linkType: hard + +"caller-callsite@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-callsite@npm:2.0.0" + dependencies: + callsites: ^2.0.0 + checksum: b685e9d126d9247b320cfdfeb3bc8da0c4be28d8fb98c471a96bc51aab3130099898a2fe3bf0308f0fe048d64c37d6d09f563958b9afce1a1e5e63d879c128a2 + languageName: node + linkType: hard + +"caller-path@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-path@npm:2.0.0" + dependencies: + caller-callsite: ^2.0.0 + checksum: 3e12ccd0c71ec10a057aac69e3ec175b721ca858c640df021ef0d25999e22f7c1d864934b596b7d47038e9b56b7ec315add042abbd15caac882998b50102fb12 + languageName: node + linkType: hard + +"callsites@npm:^2.0.0": + version: 2.0.0 + resolution: "callsites@npm:2.0.0" + checksum: be2f67b247df913732b7dec1ec0bbfcdbaea263e5a95968b19ec7965affae9496b970e3024317e6d4baa8e28dc6ba0cec03f46fdddc2fdcc51396600e53c2623 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"camelize@npm:^1.0.0": + version: 1.0.1 + resolution: "camelize@npm:1.0.1" + checksum: 91d8611d09af725e422a23993890d22b2b72b4cabf7239651856950c76b4bf53fe0d0da7c5e4db05180e898e4e647220e78c9fbc976113bd96d603d1fcbfcb99 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001689 + resolution: "caniuse-lite@npm:1.0.30001689" + checksum: 8d4152076517ac1dfd6d6733ecc8055f3cd3a8b679af8f5858e731312f03967f6a2184553636696e44cee39abdd9ccccc914716235791b0c25f68ef8dea4e24a + languageName: node + linkType: hard + +"chalk@npm:^2.0.1, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"charenc@npm:0.0.2": + version: 0.0.2 + resolution: "charenc@npm:0.0.2" + checksum: 81dcadbe57e861d527faf6dd3855dc857395a1c4d6781f4847288ab23cffb7b3ee80d57c15bba7252ffe3e5e8019db767757ee7975663ad2ca0939bb8fcaf2e5 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: fd73a4bab48b79e66903fe1cafbdc208956f41ea4f856df883d0c7277b7ab29fd33ee65f93b2ec9192fc0169238f2f8307b7735d27c155821d886b84aa97aa8d + languageName: node + linkType: hard + +"chrome-launcher@npm:^0.15.2": + version: 0.15.2 + resolution: "chrome-launcher@npm:0.15.2" + dependencies: + "@types/node": "*" + escape-string-regexp: ^4.0.0 + is-wsl: ^2.2.0 + lighthouse-logger: ^1.0.0 + bin: + print-chrome-path: bin/print-chrome-path.js + checksum: e1f8131b9f7bd931248ea85f413c6cdb93a0d41440ff5bf0987f36afb081d2b2c7b60ba6062ee7ae2dd9b052143f6b275b38c9eb115d11b49c3ea8829bad7db0 + languageName: node + linkType: hard + +"chromium-edge-launcher@npm:^0.2.0": + version: 0.2.0 + resolution: "chromium-edge-launcher@npm:0.2.0" + dependencies: + "@types/node": "*" + escape-string-regexp: ^4.0.0 + is-wsl: ^2.2.0 + lighthouse-logger: ^1.0.0 + mkdirp: ^1.0.4 + rimraf: ^3.0.2 + checksum: 9b56d1f8f18e84e34d6da89a4d97787ef323a1ade6551dcc83a6899af17c1bfc27a844c23422a29f51c6a315d1e04e2ad12595aaf07d3822335c2fce15914feb + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0, ci-info@npm:^3.3.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: ^2.0.0 + checksum: d88e97bfdac01046a3ffe7d49f06757b3126559d7e44aa2122637eb179284dc6cd49fca2fac4f67c19faaf7e6dab716b6fe1dfcd309977407d8c7578ec2d044d + languageName: node + linkType: hard + +"cli-spinners@npm:^2.0.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"command-exists@npm:^1.2.4": + version: 1.2.9 + resolution: "command-exists@npm:1.2.9" + checksum: 729ae3d88a2058c93c58840f30341b7f82688a573019535d198b57a4d8cb0135ced0ad7f52b591e5b28a90feb2c675080ce916e56254a0f7c15cb2395277cac3 + languageName: node + linkType: hard + +"commander@npm:^12.0.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514 + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb + languageName: node + linkType: hard + +"component-type@npm:^1.2.1": + version: 1.2.2 + resolution: "component-type@npm:1.2.2" + checksum: ca5a9886a961985b9ebcc0a5b23f2526506eced1c2c932648e5f8960db22fffcc3a77442013c6aef0b5afa8e6b9de02ae2a23ce5c967374edaf99d74fd6d6c3e + languageName: node + linkType: hard + +"compressible@npm:~2.0.18": + version: 2.0.18 + resolution: "compressible@npm:2.0.18" + dependencies: + mime-db: ">= 1.43.0 < 2" + checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 + languageName: node + linkType: hard + +"compression@npm:^1.7.4": + version: 1.7.5 + resolution: "compression@npm:1.7.5" + dependencies: + bytes: 3.1.2 + compressible: ~2.0.18 + debug: 2.6.9 + negotiator: ~0.6.4 + on-headers: ~1.0.2 + safe-buffer: 5.2.1 + vary: ~1.1.2 + checksum: d624b5562492518eee82c4f1381ea36f69f1f10b4283bfc2dcafd7d4d7eeed17c3f0e8f2951798594b7064db7ac5a6198df34816bde2d56bb7c75ce1570880e9 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"connect@npm:^3.6.5, connect@npm:^3.7.0": + version: 3.7.0 + resolution: "connect@npm:3.7.0" + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: ~1.3.3 + utils-merge: 1.0.1 + checksum: 96e1c4effcf219b065c7823e57351c94366d2e2a6952fa95e8212bffb35c86f1d5a3f9f6c5796d4cd3a5fdda628368b1c3cc44bf19c66cfd68fe9f9cab9177e2 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.38.0": + version: 3.39.0 + resolution: "core-js-compat@npm:3.39.0" + dependencies: + browserslist: ^4.24.2 + checksum: 2d7d087c3271d711d03a55203d4756f6288317a1ce35cdc8bafaf1833ef21fd67a92a50cff8dcf7df1325ac63720906ab3cf514c85b238c95f65fca1040f6ad6 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cosmiconfig@npm:^5.0.5": + version: 5.2.1 + resolution: "cosmiconfig@npm:5.2.1" + dependencies: + import-fresh: ^2.0.0 + is-directory: ^0.3.1 + js-yaml: ^3.13.1 + parse-json: ^4.0.0 + checksum: 8b6f1d3c8a5ffdf663a952f17af0761adf210b7a5933d0fe8988f3ca3a1f0e1e5cbbb74d5b419c15933dd2fdcaec31dbc5cc85cb8259a822342b93b529eff89c + languageName: node + linkType: hard + +"cosmiconfig@npm:^8.1.3": + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" + dependencies: + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + parse-json: ^5.2.0 + path-type: ^4.0.0 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: dc339ebea427898c9e03bf01b56ba7afbac07fc7d2a2d5a15d6e9c14de98275a9565da949375aee1809591c152c0a3877bb86dbeaf74d5bd5aaa79955ad9e7a0 + languageName: node + linkType: hard + +"cross-fetch@npm:^3.1.5": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + languageName: node + linkType: hard + +"cross-spawn@npm:^6.0.0": + version: 6.0.6 + resolution: "cross-spawn@npm:6.0.6" + dependencies: + nice-try: ^1.0.4 + path-key: ^2.0.1 + semver: ^5.5.0 + shebang-command: ^1.2.0 + which: ^1.2.9 + checksum: a6e2e5b04a0e0f806c1df45f92cd079b65f95fbe5a7650ee1ab60318c33a6c156a8a2f8b6898f57764f7363ec599a0625e9855dfa78d52d2d73dbd32eb11c25e + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b + languageName: node + linkType: hard + +"crypt@npm:0.0.2": + version: 0.0.2 + resolution: "crypt@npm:0.0.2" + checksum: baf4c7bbe05df656ec230018af8cf7dbe8c14b36b98726939cef008d473f6fe7a4fad906cfea4062c93af516f1550a3f43ceb4d6615329612c6511378ed9fe34 + languageName: node + linkType: hard + +"crypto-random-string@npm:^2.0.0": + version: 2.0.0 + resolution: "crypto-random-string@npm:2.0.0" + checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 + languageName: node + linkType: hard + +"css-color-keywords@npm:^1.0.0": + version: 1.0.0 + resolution: "css-color-keywords@npm:1.0.0" + checksum: 8f125e3ad477bd03c77b533044bd9e8a6f7c0da52d49bbc0bbe38327b3829d6ba04d368ca49dd9ff3b667d2fc8f1698d891c198bbf8feade1a5501bf5a296408 + languageName: node + linkType: hard + +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.1.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + nth-check: ^2.0.1 + checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda + languageName: node + linkType: hard + +"css-to-react-native@npm:^3.0.0": + version: 3.2.0 + resolution: "css-to-react-native@npm:3.2.0" + dependencies: + camelize: ^1.0.0 + css-color-keywords: ^1.0.0 + postcss-value-parser: ^4.0.2 + checksum: 263be65e805aef02c3f20c064665c998a8c35293e1505dbe6e3054fb186b01a9897ac6cf121f9840e5a9dfe3fb3994f6fcd0af84a865f1df78ba5bf89e77adce + languageName: node + linkType: hard + +"css-tree@npm:^1.1.3": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: 2.0.14 + source-map: ^0.6.1 + checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f + languageName: node + linkType: hard + +"css-tree@npm:^2.3.1": + version: 2.3.1 + resolution: "css-tree@npm:2.3.1" + dependencies: + mdn-data: 2.0.30 + source-map-js: ^1.0.1 + checksum: 493cc24b5c22b05ee5314b8a0d72d8a5869491c1458017ae5ed75aeb6c3596637dbe1b11dac2548974624adec9f7a1f3a6cf40593dc1f9185eb0e8279543fbc0 + languageName: node + linkType: hard + +"css-tree@npm:~2.2.0": + version: 2.2.1 + resolution: "css-tree@npm:2.2.1" + dependencies: + mdn-data: 2.0.28 + source-map-js: ^1.0.1 + checksum: b94aa8cc2f09e6f66c91548411fcf74badcbad3e150345074715012d16333ce573596ff5dfca03c2a87edf1924716db765120f94247e919d72753628ba3aba27 + languageName: node + linkType: hard + +"css-what@npm:^6.1.0": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe + languageName: node + linkType: hard + +"csso@npm:^5.0.5": + version: 5.0.5 + resolution: "csso@npm:5.0.5" + dependencies: + css-tree: ~2.2.0 + checksum: 0ad858d36bf5012ed243e9ec69962a867509061986d2ee07cc040a4b26e4d062c00d4c07e5ba8d430706ceb02dd87edd30a52b5937fd45b1b6f2119c4993d59a + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479 + languageName: node + linkType: hard + +"debug@npm:^3.1.0": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + +"deepmerge@npm:^4.3.1": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"default-gateway@npm:^4.2.0": + version: 4.2.0 + resolution: "default-gateway@npm:4.2.0" + dependencies: + execa: ^1.0.0 + ip-regex: ^2.1.0 + checksum: 1f5be765471689c6bab33e0c8b87363c3e2485cc1ab78904d383a8a8293a79f684da2a3303744b112503f986af4ea87d917c63a468ed913e9b0c31588c02d6a4 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + +"del@npm:^6.0.0": + version: 6.1.1 + resolution: "del@npm:6.1.1" + dependencies: + globby: ^11.0.1 + graceful-fs: ^4.2.4 + is-glob: ^4.0.1 + is-path-cwd: ^2.2.0 + is-path-inside: ^3.0.2 + p-map: ^4.0.0 + rimraf: ^3.0.2 + slash: ^3.0.0 + checksum: 563288b73b8b19a7261c47fd21a330eeab6e2acd7c6208c49790dfd369127120dd7836cdf0c1eca216b77c94782a81507eac6b4734252d3bef2795cb366996b6 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"denodeify@npm:^1.2.1": + version: 1.2.1 + resolution: "denodeify@npm:1.2.1" + checksum: a85c8f7fce5626e311edd897c27ad571b29393c4a739dc29baee48328e09edd82364ff697272dd612462c67e48b4766389642b5bdfaea0dc114b7c6a276c0eae + languageName: node + linkType: hard + +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + languageName: node + linkType: hard + +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: daaaed925ffa7889bd91d56e9624e6c8033911bb60f3a50a74a87500680652969dbaab9526d1e200a4c94acf80fc862a22131841145a0a8482d60a99c24f4a3e + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + +"domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.1.0 + resolution: "domutils@npm:3.1.0" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.3 + checksum: e5757456ddd173caa411cfc02c2bb64133c65546d2c4081381a3bafc8a57411a41eed70494551aa58030be9e58574fcc489828bebd673863d39924fb4878f416 + languageName: node + linkType: hard + +"dot-case@npm:^3.0.4": + version: 3.0.4 + resolution: "dot-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + checksum: a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 + languageName: node + linkType: hard + +"dotenv-expand@npm:~11.0.6": + version: 11.0.7 + resolution: "dotenv-expand@npm:11.0.7" + dependencies: + dotenv: ^16.4.5 + checksum: 58455ad9ffedbf6180b49f8f35596da54f10b02efcaabcba5400363f432e1da057113eee39b42365535da41df1e794d54a4aa67b22b37c41686c3dce4e6a28c5 + languageName: node + linkType: hard + +"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": + version: 16.4.7 + resolution: "dotenv@npm:16.4.7" + checksum: c27419b5875a44addcc56cc69b7dc5b0e6587826ca85d5b355da9303c6fc317fc9989f1f18366a16378c9fdd9532d14117a1abe6029cc719cdbbef6eaef2cea4 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.73": + version: 1.5.74 + resolution: "electron-to-chromium@npm:1.5.74" + checksum: e93db5fdfafe927dcefe2ffef5b8670ae0c340eb8a4fe176918ec8efa53c37aff0ba4c3649c234950af2809d16a186ffead64dd921c9021d629658bf6d17c21f + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 + languageName: node + linkType: hard + +"entities@npm:~2.0.0": + version: 2.0.3 + resolution: "entities@npm:2.0.3" + checksum: 5a7899fcc622e0d76afdeafe4c58a6b40ae3a8ee4772e5825a648c11a2ca324a9a02515386f512e466baac4aeb551f3d3b79eaece5cd98369b9f8601be336b1a + languageName: node + linkType: hard + +"env-editor@npm:^0.4.1": + version: 0.4.2 + resolution: "env-editor@npm:0.4.2" + checksum: d162e161d9a1bddaf63f68428c587b1d823afe7d56cde039ce403cc68706c68350c92b9db44692f4ecea1d67ec80de9ba01ca70568299ed929d3fa056c40aebf + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"eol@npm:^0.9.1": + version: 0.9.1 + resolution: "eol@npm:0.9.1" + checksum: ba9fa998bc8148b935dcf85585eacf049eeaf18d2ab6196710d4d1f59e7dfd0e87b18508dc67144ff8ba12f835a4a4989aeea64c98b13cca77b74b9d4b33bce5 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"error-stack-parser@npm:^2.0.6": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: ^1.3.4 + checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:~4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0, event-target-shim@npm:^5.0.1": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + +"exec-async@npm:^2.2.0": + version: 2.2.0 + resolution: "exec-async@npm:2.2.0" + checksum: 5877d83c2d553994accb39c26f40f0a633bca10d9572696e524fd91b385060ba05d1edcc28d6e3899c451e65ed453fdc7e6b69bd5d5a27d914220a100f81bb3a + languageName: node + linkType: hard + +"execa@npm:^1.0.0": + version: 1.0.0 + resolution: "execa@npm:1.0.0" + dependencies: + cross-spawn: ^6.0.0 + get-stream: ^4.0.0 + is-stream: ^1.1.0 + npm-run-path: ^2.0.0 + p-finally: ^1.0.0 + signal-exit: ^3.0.0 + strip-eof: ^1.0.0 + checksum: ddf1342c1c7d02dd93b41364cd847640f6163350d9439071abf70bf4ceb1b9b2b2e37f54babb1d8dc1df8e0d8def32d0e81e74a2e62c3e1d70c303eb4c306bc4 + languageName: node + linkType: hard + +"execa@npm:^5.1.1": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.0 + human-signals: ^2.1.0 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.1 + onetime: ^5.1.2 + signal-exit: ^3.0.3 + strip-final-newline: ^2.0.0 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"expo-asset@npm:^11.0.3": + version: 11.1.2 + resolution: "expo-asset@npm:11.1.2" + dependencies: + "@expo/image-utils": ^0.7.2 + expo-constants: ~17.1.2 + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 7091ba241a339882245ec6150c1bb32eefe7756b55a3547b3b25f1af519108798f599bfa6aa5f20ca459a237dba1f03b583bb446b8fa38dda5a0c7ea85b79499 + languageName: node + linkType: hard + +"expo-asset@npm:~11.0.4": + version: 11.0.4 + resolution: "expo-asset@npm:11.0.4" + dependencies: + "@expo/image-utils": ^0.6.5 + expo-constants: ~17.0.7 + invariant: ^2.2.4 + md5-file: ^3.2.3 + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 21cf9b34e4e51c5af2e424de2445c9d4d5d5e010692f712300f8a7f3c8b89ff39ad92dfb0f177557592a1d49c5480eba0257ff5770f25b4568831cf955853db5 + languageName: node + linkType: hard + +"expo-asset@npm:~11.0.5": + version: 11.0.5 + resolution: "expo-asset@npm:11.0.5" + dependencies: + "@expo/image-utils": ^0.6.5 + expo-constants: ~17.0.8 + invariant: ^2.2.4 + md5-file: ^3.2.3 + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 7650dc032f76b0924eedaf24dee135b293e5c3258e0a9e43a6db7c93ef40ea6b6d6a47432bf80f3051f3b62e40a6ccb25e8acca820baa791d52a2e95432868bc + languageName: node + linkType: hard + +"expo-constants@npm:~17.0.7": + version: 17.0.7 + resolution: "expo-constants@npm:17.0.7" + dependencies: + "@expo/config": ~10.0.10 + "@expo/env": ~0.4.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 6b7d8536f7dd2a9531ccc1ee946a8cade67fa3a74e44d0bfb70f8098694e0e49a0d981d33760668d4d5475bf6bbf685024f9b2b9c19c9be47f17781aac53b28d + languageName: node + linkType: hard + +"expo-constants@npm:~17.0.8": + version: 17.0.8 + resolution: "expo-constants@npm:17.0.8" + dependencies: + "@expo/config": ~10.0.11 + "@expo/env": ~0.4.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 493e18f8ea2c49efd69aae37b756ede1c37ecc29ac9bd5c23cb2ca88dbc57109c7f915196bcfaab71ceca2141e9a9806a685f8ac787fa206af7f1391be2e09f2 + languageName: node + linkType: hard + +"expo-constants@npm:~17.1.2": + version: 17.1.2 + resolution: "expo-constants@npm:17.1.2" + dependencies: + "@expo/config": ~11.0.3 + "@expo/env": ~1.0.3 + peerDependencies: + expo: "*" + react-native: "*" + checksum: ff6476d54164f673e88d047f1eb0858762340b5bd57e8de9ba3d0e90b47be8fa526f9b74fa04cf088b0303132424872fe644de51fb1222c9698fc1f6f6c1b473 + languageName: node + linkType: hard + +"expo-file-system@npm:^18.0.10": + version: 18.1.5 + resolution: "expo-file-system@npm:18.1.5" + dependencies: + web-streams-polyfill: ^3.3.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: eb8e7da2f17a6726e4da6af4feeab9faf9a02bd9b68834feb333931e6794bc5fd1d470f4fadb9975ff8c50f4fcfcece9a5a4f1e43eb7a8fd3b29597ffc7dff83 + languageName: node + linkType: hard + +"expo-file-system@npm:~18.0.11": + version: 18.0.11 + resolution: "expo-file-system@npm:18.0.11" + dependencies: + web-streams-polyfill: ^3.3.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 2cbb30eee9b12a3eff867a425900f6bef47d4417c39744c24ab1d47ef7398c9cb952716db8dd59a4ddc474a9dab4bcfa903412c10a56144d64cb00a9afcc8c56 + languageName: node + linkType: hard + +"expo-file-system@npm:~18.0.12": + version: 18.0.12 + resolution: "expo-file-system@npm:18.0.12" + dependencies: + web-streams-polyfill: ^3.3.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 9724e2a9da1cf596d82920cf3cec3d4d6e6544d3b057c7e5895d2aac6f2fc30d9f963774198254fcde707030974407b13a4da7558160fc2278fc388cb183d253 + languageName: node + linkType: hard + +"expo-font@npm:~13.0.4": + version: 13.0.4 + resolution: "expo-font@npm:13.0.4" + dependencies: + fontfaceobserver: ^2.1.0 + peerDependencies: + expo: "*" + react: "*" + checksum: 36fa98d333c97a9a309f0ffa45827616167162caaaca6873f04d6e3d658c669da9e894fadd582b9bcc569f3b5b2043553ca204e4333d7496ad2e5843f0373b09 + languageName: node + linkType: hard + +"expo-keep-awake@npm:~14.0.3": + version: 14.0.3 + resolution: "expo-keep-awake@npm:14.0.3" + peerDependencies: + expo: "*" + react: "*" + checksum: 1f8c4c4fbc6030b4ea55fd51b6bb74ba926c71ab3c5350445b065d1433188553b67c64114230240055788df918c96d2d925d9987dcd9fc4045e45362adcbb110 + languageName: node + linkType: hard + +"expo-modules-autolinking@npm:2.0.8": + version: 2.0.8 + resolution: "expo-modules-autolinking@npm:2.0.8" + dependencies: + "@expo/spawn-async": ^1.7.2 + chalk: ^4.1.0 + commander: ^7.2.0 + fast-glob: ^3.2.5 + find-up: ^5.0.0 + fs-extra: ^9.1.0 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + bin: + expo-modules-autolinking: bin/expo-modules-autolinking.js + checksum: 1e706d40163e0d3c239641c6d4a846c8006c0367007006cff1eb26a571e605d5fa5ce49c995b9118516d82c819be0e2e2849c2ae63df9b2921bf23bc9a4c2939 + languageName: node + linkType: hard + +"expo-modules-core@npm:2.2.2": + version: 2.2.2 + resolution: "expo-modules-core@npm:2.2.2" + dependencies: + invariant: ^2.2.4 + checksum: f6934b0519598a5c3f3b31a81d48e290823d714e371a2b8631d9ebcb6226a6e4b67968a1b4de6cdcfb6848f4abcb3eeaa1898ff10ebd79f5c21cd455b239cb22 + languageName: node + linkType: hard + +"expo-modules-core@npm:2.2.3": + version: 2.2.3 + resolution: "expo-modules-core@npm:2.2.3" + dependencies: + invariant: ^2.2.4 + checksum: 7b2952f1220b55eb03f395d1549525edeb5bff7bf805257d9652ea4ef85ea71e34ad13b5971f1b559e7aa080f41130846b24cbe3d754660c08196c3ce899143b + languageName: node + linkType: hard + +"expo-status-bar@npm:~2.0.1": + version: 2.0.1 + resolution: "expo-status-bar@npm:2.0.1" + peerDependencies: + react: "*" + react-native: "*" + checksum: 7e9c38c0e2a7a593958756572369fe515dc7bc7eb774eecbd2c008f994c420fa7196796c3ba32117bd801677b84b3335918c18e7e276981d49f1b7b8ebbbde95 + languageName: node + linkType: hard + +"expo@npm:^52.0.37": + version: 52.0.37 + resolution: "expo@npm:52.0.37" + dependencies: + "@babel/runtime": ^7.20.0 + "@expo/cli": 0.22.18 + "@expo/config": ~10.0.10 + "@expo/config-plugins": ~9.0.15 + "@expo/fingerprint": 0.11.11 + "@expo/metro-config": 0.19.11 + "@expo/vector-icons": ^14.0.0 + babel-preset-expo: ~12.0.9 + expo-asset: ~11.0.4 + expo-constants: ~17.0.7 + expo-file-system: ~18.0.11 + expo-font: ~13.0.4 + expo-keep-awake: ~14.0.3 + expo-modules-autolinking: 2.0.8 + expo-modules-core: 2.2.2 + fbemitter: ^3.0.0 + web-streams-polyfill: ^3.3.2 + whatwg-url-without-unicode: 8.0.0-3 + peerDependencies: + "@expo/dom-webview": "*" + "@expo/metro-runtime": "*" + react: "*" + react-native: "*" + react-native-webview: "*" + peerDependenciesMeta: + "@expo/dom-webview": + optional: true + "@expo/metro-runtime": + optional: true + react-native-webview: + optional: true + bin: + expo: bin/cli + checksum: b1a93a1a642b735469077e87cac062626e49f7fdd326942e1514b56b95fcba29f442f04ad75f2cf781915254bdfd1facbf6367bd584a2636a4cbcc19980c3f28 + languageName: node + linkType: hard + +"expo@npm:~52.0.46": + version: 52.0.46 + resolution: "expo@npm:52.0.46" + dependencies: + "@babel/runtime": ^7.20.0 + "@expo/cli": 0.22.26 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/fingerprint": 0.11.11 + "@expo/metro-config": 0.19.12 + "@expo/vector-icons": ^14.0.0 + babel-preset-expo: ~12.0.11 + expo-asset: ~11.0.5 + expo-constants: ~17.0.8 + expo-file-system: ~18.0.12 + expo-font: ~13.0.4 + expo-keep-awake: ~14.0.3 + expo-modules-autolinking: 2.0.8 + expo-modules-core: 2.2.3 + fbemitter: ^3.0.0 + web-streams-polyfill: ^3.3.2 + whatwg-url-without-unicode: 8.0.0-3 + peerDependencies: + "@expo/dom-webview": "*" + "@expo/metro-runtime": "*" + react: "*" + react-native: "*" + react-native-webview: "*" + peerDependenciesMeta: + "@expo/dom-webview": + optional: true + "@expo/metro-runtime": + optional: true + react-native-webview: + optional: true + bin: + expo: bin/cli + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: 603b4fa89edf9c2aaf8741818bdd5ca46195a461093ecb2c1855164ba9799d2a590a1424f2e11ae7d97f2f8fe64928516a84b8c8ecfbe5a1dad09a5c0edca83e + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.5, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: ^1.0.4 + checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"fbemitter@npm:^3.0.0": + version: 3.0.0 + resolution: "fbemitter@npm:3.0.0" + dependencies: + fbjs: ^3.0.0 + checksum: 069690b8cdff3521ade3c9beb92ba0a38d818a86ef36dff8690e66749aef58809db4ac0d6938eb1cacea2dbef5f2a508952d455669590264cdc146bbe839f605 + languageName: node + linkType: hard + +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 + languageName: node + linkType: hard + +"fbjs@npm:^3.0.0": + version: 3.0.5 + resolution: "fbjs@npm:3.0.5" + dependencies: + cross-fetch: ^3.1.5 + fbjs-css-vars: ^1.0.0 + loose-envify: ^1.0.0 + object-assign: ^4.1.0 + promise: ^7.1.1 + setimmediate: ^1.0.5 + ua-parser-js: ^1.0.35 + checksum: e609b5b64686bc96495a5c67728ed9b2710b9b3d695c5759c5f5e47c9483d1c323543ac777a86459e3694efc5712c6ce7212e944feb19752867d699568bb0e54 + languageName: node + linkType: hard + +"fetch-retry@npm:^4.1.1": + version: 4.1.1 + resolution: "fetch-retry@npm:4.1.1" + checksum: a06b6a0201efeb5082794713bcdc8dd2c8f1fd4ad5660de860b9c4e51738aa369be58ba7cfa67aa7aa4a3bf9d9b5a4cd2d2fdea88868856483fb81bacd70455b + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 + languageName: node + linkType: hard + +"finalhandler@npm:1.1.2": + version: 1.1.2 + resolution: "finalhandler@npm:1.1.2" + dependencies: + debug: 2.6.9 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + on-finished: ~2.3.0 + parseurl: ~1.3.3 + statuses: ~1.5.0 + unpipe: ~1.0.0 + checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e + languageName: node + linkType: hard + +"find-cache-dir@npm:^2.0.0": + version: 2.1.0 + resolution: "find-cache-dir@npm:2.1.0" + dependencies: + commondir: ^1.0.1 + make-dir: ^2.0.0 + pkg-dir: ^3.0.0 + checksum: 60ad475a6da9f257df4e81900f78986ab367d4f65d33cf802c5b91e969c28a8762f098693d7a571b6e4dd4c15166c2da32ae2d18b6766a18e2071079448fdce4 + languageName: node + linkType: hard + +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: ^3.0.0 + checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + +"find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flow-enums-runtime@npm:^0.0.6": + version: 0.0.6 + resolution: "flow-enums-runtime@npm:0.0.6" + checksum: c60412ed6d43b26bf5dfa66be8e588c3ccdb20191fd269e02ca7e8e1d350c73a327cc9a7edb626c80c31eb906981945d12a87ca37118985f33406303806dab79 + languageName: node + linkType: hard + +"flow-parser@npm:0.*": + version: 0.256.0 + resolution: "flow-parser@npm:0.256.0" + checksum: 39e0052d6fc0b1c34bb34f61398035458f23089d54b143584b25116e4b4c80e03045b1216157a4dd8afb0e016f485e66640b8c788bd9611f2298491d8cb9512b + languageName: node + linkType: hard + +"fontfaceobserver@npm:^2.1.0": + version: 2.3.0 + resolution: "fontfaceobserver@npm:2.3.0" + checksum: 5f14715974203b9d68f299f93a7623afd9d5701572d683e861cdbb7514573ac556f56e9b5d07d2d534e01aed19a3b0bbe568e735e0e5494cbea913fc3f12b856 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 1989698488f725b05b26bc9afc8a08f08ec41807cd7b92ad85d96004ddf8243fd3e79486b8348c64a3011ae5cc2c9f0936af989e1f28339805d8bc178a75b451 + languageName: node + linkType: hard + +"form-data@npm:^3.0.1": + version: 3.0.2 + resolution: "form-data@npm:3.0.2" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 25ffdeed693c8fc59b56082d15ad63f11688fabac2d14918fb339170020f66295e520a6659f3a698217f15c7924fbc593117ecd61d8391a146ea06d686793622 + languageName: node + linkType: hard + +"freeport-async@npm:^2.0.0": + version: 2.0.0 + resolution: "freeport-async@npm:2.0.0" + checksum: 03156ab2179fbbf5b7ff3aafc56f3e01c9d7df5cc366fbf3c29f26007773632e33ed90847fa4a979c5412ad55de8b21a7292601c531acaf8957933d96225c76d + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 + languageName: node + linkType: hard + +"fs-extra@npm:9.0.0": + version: 9.0.0 + resolution: "fs-extra@npm:9.0.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^1.0.0 + checksum: c4269fbfd8d8d2a1edca4257fa28545caf7e5ad218d264f723c338a154d3624d2ef098c19915b9436d3186b7ac45d5b032371a2004008ec0cd4072512e853aa8 + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.0, fs-extra@npm:^9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + +"fs-extra@npm:~8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-port@npm:^3.2.0": + version: 3.2.0 + resolution: "get-port@npm:3.2.0" + checksum: 31f530326569683ac4b7452eb7573c40e9dbe52aec14d80745c35475261e6389160da153d5b8ae911150b4ce99003472b30c69ba5be0cedeaa7865b95542d168 + languageName: node + linkType: hard + +"get-stream@npm:^4.0.0": + version: 4.1.0 + resolution: "get-stream@npm:4.1.0" + dependencies: + pump: ^3.0.0 + checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"getenv@npm:^1.0.0": + version: 1.0.0 + resolution: "getenv@npm:1.0.0" + checksum: 19ae5cad603a1cf1bcb8fa3bed48e00d062eb0572a4404c02334b67f3b3499f238383082b064bb42515e9e25c2b08aef1a3e3d2b6852347721aa8b174825bd56 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7, glob@npm:^10.4.2": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 + path-scurry: ^1.11.1 + bin: + glob: dist/esm/bin.mjs + checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a + languageName: node + linkType: hard + +"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globby@npm:^11.0.1": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + +"hermes-estree@npm:0.23.1": + version: 0.23.1 + resolution: "hermes-estree@npm:0.23.1" + checksum: 0f63edc365099304f4cd8e91a3666a4fb5a2a47baee751dc120df9201640112865944cae93617f554af71be9827e96547f9989f4972d6964ecc121527295fec6 + languageName: node + linkType: hard + +"hermes-estree@npm:0.24.0": + version: 0.24.0 + resolution: "hermes-estree@npm:0.24.0" + checksum: 23d09013c824cd4628f6bae50c7a703cbafcc26ff1802cb35547fac41be4aac6e9892656bb6eb495e5c8c4b1287311dad8eab0f541ff8f1d2f0265b75053002e + languageName: node + linkType: hard + +"hermes-estree@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-estree@npm:0.25.1" + checksum: 97f42e9178dff61db017810b4f79f5a2cdbb3cde94b7d99ba84ed632ee2adfcae2244555587951b3151fc036676c68f48f57fbe2b49e253eb1f3f904d284a8b0 + languageName: node + linkType: hard + +"hermes-parser@npm:0.23.1": + version: 0.23.1 + resolution: "hermes-parser@npm:0.23.1" + dependencies: + hermes-estree: 0.23.1 + checksum: a08008928aea9ea9a2cab2c0fac3cffa21f7869ab3fabb68e5add0fe057737a0c352d7a446426f7956172ccc8f2d4a215b4fc20d1d08354fc8dc16772c248fce + languageName: node + linkType: hard + +"hermes-parser@npm:0.24.0": + version: 0.24.0 + resolution: "hermes-parser@npm:0.24.0" + dependencies: + hermes-estree: 0.24.0 + checksum: c23cb81d320cedc74841c254ea54d94328f65aa6259375d48ab2b5a3ad2b528c55058726d852376811e4018636d8fd9305a4b2bfa5a962297c1baa57444be172 + languageName: node + linkType: hard + +"hermes-parser@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-parser@npm:0.25.1" + dependencies: + hermes-estree: 0.25.1 + checksum: 4edcfaa3030931343b540182b83c432aba4cdcb1925952521ab4cfb7ab90c2c1543dfcb042ccd51d5e81e4bfe2809420e85902c2ff95ef7c6c64644ce17138ea + languageName: node + linkType: hard + +"hosted-git-info@npm:^7.0.0": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: ^10.0.1 + checksum: 467cf908a56556417b18e86ae3b8dee03c2360ef1d51e61c4028fe87f6f309b6ff038589c94b5666af207da9d972d5107698906aabeb78aca134641962a5c6f8 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: ^7.1.2 + debug: 4 + checksum: b882377a120aa0544846172e5db021fa8afbf83fea2a897d397bd2ddd8095ab268c24bc462f40a15f2a8c600bf4aa05ce52927f70038d4014e68aefecfa94e8d + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be + languageName: node + linkType: hard + +"image-size@npm:^1.0.2": + version: 1.1.1 + resolution: "image-size@npm:1.1.1" + dependencies: + queue: 6.0.2 + bin: + image-size: bin/image-size.js + checksum: 23b3a515dded89e7f967d52b885b430d6a5a903da954fce703130bfb6069d738d80e6588efd29acfaf5b6933424a56535aa7bf06867e4ebd0250c2ee51f19a4a + languageName: node + linkType: hard + +"import-fresh@npm:^2.0.0": + version: 2.0.0 + resolution: "import-fresh@npm:2.0.0" + dependencies: + caller-path: ^2.0.0 + resolve-from: ^3.0.0 + checksum: 610255f9753cc6775df00be08e9f43691aa39f7703e3636c45afe22346b8b545e600ccfe100c554607546fc8e861fa149a0d1da078c8adedeea30fff326eef79 + languageName: node + linkType: hard + +"import-fresh@npm:^3.3.0": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"internal-ip@npm:^4.3.0": + version: 4.3.0 + resolution: "internal-ip@npm:4.3.0" + dependencies: + default-gateway: ^4.2.0 + ipaddr.js: ^1.9.0 + checksum: c970433c84d9a6b46e2c9f5ab7785d3105b856d0a566891bf919241b5a884c5c1c9bf8e915aebb822a86c14b1b6867e58c1eaf5cd49eb023368083069d1a4a9a + languageName: node + linkType: hard + +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: 1.1.0 + sprintf-js: ^1.1.3 + checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc + languageName: node + linkType: hard + +"ip-regex@npm:^2.1.0": + version: 2.1.0 + resolution: "ip-regex@npm:2.1.0" + checksum: 331d95052aa53ce245745ea0fc3a6a1e2e3c8d6da65fa8ea52bf73768c1b22a9ac50629d1d2b08c04e7b3ac4c21b536693c149ce2c2615ee4796030e5b3e3cba + languageName: node + linkType: hard + +"ipaddr.js@npm:^1.9.0": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-buffer@npm:~1.1.6": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 + languageName: node + linkType: hard + +"is-core-module@npm:^2.16.0": + version: 2.16.0 + resolution: "is-core-module@npm:2.16.0" + dependencies: + hasown: ^2.0.2 + checksum: 98aa14eaee864c2e86fff4e08813e0da3ca7ac38dd0a43b9f10aeec48bfbc4827e2677349adb626f66921caef7fa9e2745c80b8b7cafe8ac24d46dc8124cc216 + languageName: node + linkType: hard + +"is-directory@npm:^0.3.1": + version: 0.3.1 + resolution: "is-directory@npm:0.3.1" + checksum: dce9a9d3981e38f2ded2a80848734824c50ee8680cd09aa477bef617949715cfc987197a2ca0176c58a9fb192a1a0d69b535c397140d241996a609d5906ae524 + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-path-cwd@npm:^2.2.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-wsl@npm:^2.1.1, is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.6.3": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a + languageName: node + linkType: hard + +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"jest-validate@npm:^29.6.3": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + leven: ^3.1.0 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + languageName: node + linkType: hard + +"jest-worker@npm:^29.6.3, jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "*" + jest-util: ^29.7.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + languageName: node + linkType: hard + +"jimp-compact@npm:0.16.1": + version: 0.16.1 + resolution: "jimp-compact@npm:0.16.1" + checksum: 5a1c62d70881b31f79ea65fecfe03617be0eb56139bc451f37e8972365c99ac3b52c5176c446ff27144c98ab664a99107ae08d347044e94e1de637f165b41a57 + languageName: node + linkType: hard + +"join-component@npm:^1.1.0": + version: 1.1.0 + resolution: "join-component@npm:1.1.0" + checksum: b904c2f98549e4195022caca3a7dc837f9706c670ff333f3d617f2aed23bce2841322a999734683b6ab8e202568ad810c11ff79b58a64df66888153f04750239 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 + languageName: node + linkType: hard + +"jsc-android@npm:^250231.0.0": + version: 250231.0.0 + resolution: "jsc-android@npm:250231.0.0" + checksum: 6c3f0f6f02fa37a19935b2fbe651e9d6ecc370eb30f2ecee76379337bbf084abb568a1ef1133fe622c5b76f43cf54bb7716f92a94dca010985da38edc48841e2 + languageName: node + linkType: hard + +"jsc-safe-url@npm:^0.2.2, jsc-safe-url@npm:^0.2.4": + version: 0.2.4 + resolution: "jsc-safe-url@npm:0.2.4" + checksum: 53b5741ba2c0a54da1722929dc80becb2c6fcc9525124fb6c2aec1a00f48e79afffd26816c278111e7b938e37ace029e33cbb8cdaa4ac1f528a87e58022284af + languageName: node + linkType: hard + +"jscodeshift@npm:^0.14.0": + version: 0.14.0 + resolution: "jscodeshift@npm:0.14.0" + dependencies: + "@babel/core": ^7.13.16 + "@babel/parser": ^7.13.16 + "@babel/plugin-proposal-class-properties": ^7.13.0 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.13.8 + "@babel/plugin-proposal-optional-chaining": ^7.13.12 + "@babel/plugin-transform-modules-commonjs": ^7.13.8 + "@babel/preset-flow": ^7.13.13 + "@babel/preset-typescript": ^7.13.0 + "@babel/register": ^7.13.16 + babel-core: ^7.0.0-bridge.0 + chalk: ^4.1.2 + flow-parser: 0.* + graceful-fs: ^4.2.4 + micromatch: ^4.0.4 + neo-async: ^2.5.0 + node-dir: ^0.1.17 + recast: ^0.21.0 + temp: ^0.8.4 + write-file-atomic: ^2.3.0 + peerDependencies: + "@babel/preset-env": ^7.1.6 + bin: + jscodeshift: bin/jscodeshift.js + checksum: 54ea6d639455883336f80b38a70648821c88b7942315dc0fbab01bc34a9ad0f0f78e3bd69304b5ab167e4262d6ed7e6284c6d32525ab01c89d9118df89b3e2a0 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 19c94095ea026725540c0d29da33ab03144f6bcf2d4159e4833d534976e99e0c09c38cefa9a575279a51fc36b31166f8d6d05c9fe2645d5f15851d690b41f17f + languageName: node + linkType: hard + +"jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.6 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"lighthouse-logger@npm:^1.0.0": + version: 1.4.2 + resolution: "lighthouse-logger@npm:1.4.2" + dependencies: + debug: ^2.6.9 + marky: ^1.2.2 + checksum: ba6b73d93424318fab58b4e07c9ed246e3e969a3313f26b69515ed4c06457dd9a0b11bc706948398fdaef26aa4ba5e65cb848c37ce59f470d3c6c450b9b79a33 + languageName: node + linkType: hard + +"lightningcss-darwin-arm64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-darwin-arm64@npm:1.27.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-x64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-darwin-x64@npm:1.27.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-freebsd-x64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-freebsd-x64@npm:1.27.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-linux-arm-gnueabihf@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.27.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"lightningcss-linux-arm64-gnu@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm64-gnu@npm:1.27.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-arm64-musl@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm64-musl@npm:1.27.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-linux-x64-gnu@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-x64-gnu@npm:1.27.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-x64-musl@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-x64-musl@npm:1.27.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-win32-arm64-msvc@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-win32-arm64-msvc@npm:1.27.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-win32-x64-msvc@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-win32-x64-msvc@npm:1.27.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"lightningcss@npm:~1.27.0": + version: 1.27.0 + resolution: "lightningcss@npm:1.27.0" + dependencies: + detect-libc: ^1.0.3 + lightningcss-darwin-arm64: 1.27.0 + lightningcss-darwin-x64: 1.27.0 + lightningcss-freebsd-x64: 1.27.0 + lightningcss-linux-arm-gnueabihf: 1.27.0 + lightningcss-linux-arm64-gnu: 1.27.0 + lightningcss-linux-arm64-musl: 1.27.0 + lightningcss-linux-x64-gnu: 1.27.0 + lightningcss-linux-x64-musl: 1.27.0 + lightningcss-win32-arm64-msvc: 1.27.0 + lightningcss-win32-x64-msvc: 1.27.0 + dependenciesMeta: + lightningcss-darwin-arm64: + optional: true + lightningcss-darwin-x64: + optional: true + lightningcss-freebsd-x64: + optional: true + lightningcss-linux-arm-gnueabihf: + optional: true + lightningcss-linux-arm64-gnu: + optional: true + lightningcss-linux-arm64-musl: + optional: true + lightningcss-linux-x64-gnu: + optional: true + lightningcss-linux-x64-musl: + optional: true + lightningcss-win32-arm64-msvc: + optional: true + lightningcss-win32-x64-msvc: + optional: true + checksum: 3761a4feb67ca250bf1b1cb1982a3d212dee56ea345dd487592908648e70d8c17da2f5918affaf08b6cdc4e4702eee29d800ff29e16d194e7af6300af1b28409 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"linkify-it@npm:^2.0.0": + version: 2.2.0 + resolution: "linkify-it@npm:2.2.0" + dependencies: + uc.micro: ^1.0.1 + checksum: d198871d0b3f3cfdb745dae564bfd6743474f20cd0ef1057e6ca29451834749e7f3da52b59b4de44e98f31a1e5c71bdad160490d4ae54de251cbcde57e4d7837 + languageName: node + linkType: hard + +"llm@workspace:.": + version: 0.0.0-use.local + resolution: "llm@workspace:." + dependencies: + "@babel/core": ^7.25.2 + "@react-native/metro-config": ^0.76.3 + "@types/react": ~18.3.12 + expo: ~52.0.46 + expo-font: ~13.0.4 + expo-status-bar: ~2.0.1 + metro-config: ^0.81.0 + react: 18.3.1 + react-native: 0.76.9 + react-native-executorch: 0.3.2 + react-native-loading-spinner-overlay: ^3.0.1 + react-native-markdown-display: ^7.0.2 + react-native-reanimated: ^3.16.3 + react-native-safe-area-context: 4.12.0 + react-native-svg: 15.8.0 + react-native-svg-transformer: ^1.5.0 + react-native-wheel-scrollview-picker: ^2.0.6 + typescript: ^5.3.3 + languageName: unknown + linkType: soft + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: ^3.0.0 + path-exists: ^3.0.0 + checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.throttle@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.throttle@npm:4.1.1" + checksum: 129c0a28cee48b348aef146f638ef8a8b197944d4e9ec26c1890c19d9bf5a5690fe11b655c77a4551268819b32d27f4206343e30c78961f60b561b8608c8c805 + languageName: node + linkType: hard + +"lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^2.2.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: ^2.0.1 + checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"make-dir@npm:^2.0.0, make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: ^4.0.1 + semver: ^5.6.0 + checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": ^3.0.0 + cacache: ^19.0.1 + http-cache-semantics: ^4.1.1 + minipass: ^7.0.2 + minipass-fetch: ^4.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^1.0.0 + proc-log: ^5.0.0 + promise-retry: ^2.0.1 + ssri: ^12.0.0 + checksum: 6fb2fee6da3d98f1953b03d315826b5c5a4ea1f908481afc113782d8027e19f080c85ae998454de4e5f27a681d3ec58d57278f0868d4e0b736f51d396b661691 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"markdown-it@npm:^10.0.0": + version: 10.0.0 + resolution: "markdown-it@npm:10.0.0" + dependencies: + argparse: ^1.0.7 + entities: ~2.0.0 + linkify-it: ^2.0.0 + mdurl: ^1.0.1 + uc.micro: ^1.0.5 + bin: + markdown-it: bin/markdown-it.js + checksum: 69f5ee640cbebb451b80d3cce308fff7230767e05c0f8c206a1e413775b7a6e5a08e91e9f3ec59f9b5c5a45493f9ce7ac089379cffb60c9d3e6677ed9d535086 + languageName: node + linkType: hard + +"marky@npm:^1.2.2": + version: 1.2.5 + resolution: "marky@npm:1.2.5" + checksum: 823b946677749551cdfc3b5221685478b5d1b9cc0dc03eff977c6f9a615fb05c67559f9556cb3c0fcb941a9ea0e195e37befd83026443396ccee8b724f54f4c5 + languageName: node + linkType: hard + +"md5-file@npm:^3.2.3": + version: 3.2.3 + resolution: "md5-file@npm:3.2.3" + dependencies: + buffer-alloc: ^1.1.0 + bin: + md5-file: cli.js + checksum: a3738274ee0c5ce21e7c14a4b60e5de6b298740f8a37eeb502bb97a056e3f19ea0871418b4dd45ca9c70d2f1d6c79a19e9a320fba1c129b196cdf671e544c450 + languageName: node + linkType: hard + +"md5@npm:^2.2.1": + version: 2.3.0 + resolution: "md5@npm:2.3.0" + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: ~1.1.6 + checksum: a63cacf4018dc9dee08c36e6f924a64ced735b37826116c905717c41cebeb41a522f7a526ba6ad578f9c80f02cb365033ccd67fe186ffbcc1a1faeb75daa9b6e + languageName: node + linkType: hard + +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16 + languageName: node + linkType: hard + +"mdn-data@npm:2.0.28": + version: 2.0.28 + resolution: "mdn-data@npm:2.0.28" + checksum: f51d587a6ebe8e426c3376c74ea6df3e19ec8241ed8e2466c9c8a3904d5d04397199ea4f15b8d34d14524b5de926d8724ae85207984be47e165817c26e49e0aa + languageName: node + linkType: hard + +"mdn-data@npm:2.0.30": + version: 2.0.30 + resolution: "mdn-data@npm:2.0.30" + checksum: d6ac5ac7439a1607df44b22738ecf83f48e66a0874e4482d6424a61c52da5cde5750f1d1229b6f5fa1b80a492be89465390da685b11f97d62b8adcc6e88189aa + languageName: node + linkType: hard + +"mdurl@npm:^1.0.1": + version: 1.0.1 + resolution: "mdurl@npm:1.0.1" + checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b + languageName: node + linkType: hard + +"memoize-one@npm:^5.0.0": + version: 5.2.1 + resolution: "memoize-one@npm:5.2.1" + checksum: a3cba7b824ebcf24cdfcd234aa7f86f3ad6394b8d9be4c96ff756dafb8b51c7f71320785fbc2304f1af48a0467cbbd2a409efc9333025700ed523f254cb52e3d + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"metro-babel-transformer@npm:0.81.0": + version: 0.81.0 + resolution: "metro-babel-transformer@npm:0.81.0" + dependencies: + "@babel/core": ^7.25.2 + flow-enums-runtime: ^0.0.6 + hermes-parser: 0.24.0 + nullthrows: ^1.1.1 + checksum: e67ef5175f574fbf4a3b6c4f5fd209eb04026cdc32a38e2ebaea21a8c1d4ca20d234aba8e3bff95bfcf60353aaaa0e6369544fe15b1d02aa07f77ab2c26cf053 + languageName: node + linkType: hard + +"metro-cache-key@npm:0.81.0": + version: 0.81.0 + resolution: "metro-cache-key@npm:0.81.0" + dependencies: + flow-enums-runtime: ^0.0.6 + checksum: a96e4062ac0f4684f1d80c8b8c3da380c9d7be506c2bc14750d46a6850610c6e05cb1907cc5421393299f25f40575335e899667519d5435c95a09b0438619847 + languageName: node + linkType: hard + +"metro-cache@npm:0.81.0": + version: 0.81.0 + resolution: "metro-cache@npm:0.81.0" + dependencies: + exponential-backoff: ^3.1.1 + flow-enums-runtime: ^0.0.6 + metro-core: 0.81.0 + checksum: 0498a93b07b8125987268dde7f95b56ea61826be7834b87f03595de905210dc2675855d8dbbbc0aab0a2f50ed8be0086b096a4085f7320247e3fc6added45167 + languageName: node + linkType: hard + +"metro-config@npm:0.81.0, metro-config@npm:^0.81.0": + version: 0.81.0 + resolution: "metro-config@npm:0.81.0" + dependencies: + connect: ^3.6.5 + cosmiconfig: ^5.0.5 + flow-enums-runtime: ^0.0.6 + jest-validate: ^29.6.3 + metro: 0.81.0 + metro-cache: 0.81.0 + metro-core: 0.81.0 + metro-runtime: 0.81.0 + checksum: 4969423a292b4aec8f604ae0f682bd62f463ee7a84459c1cf069ff0239427a01e287b97516d265a6b1ec9e8a7b3eb09ad5a8b914e469c9aff56f25473325fe29 + languageName: node + linkType: hard + +"metro-core@npm:0.81.0, metro-core@npm:^0.81.0": + version: 0.81.0 + resolution: "metro-core@npm:0.81.0" + dependencies: + flow-enums-runtime: ^0.0.6 + lodash.throttle: ^4.1.1 + metro-resolver: 0.81.0 + checksum: 4e9e63d4c29f7a4f3e13ee8281c2be4458f5482de5f73d6206782cca78dc580b4d3a16516ff278313fcd1a3e4177e521b3aa0f12768fbf5cc335797557846953 + languageName: node + linkType: hard + +"metro-file-map@npm:0.81.0": + version: 0.81.0 + resolution: "metro-file-map@npm:0.81.0" + dependencies: + anymatch: ^3.0.3 + debug: ^2.2.0 + fb-watchman: ^2.0.0 + flow-enums-runtime: ^0.0.6 + fsevents: ^2.3.2 + graceful-fs: ^4.2.4 + invariant: ^2.2.4 + jest-worker: ^29.6.3 + micromatch: ^4.0.4 + node-abort-controller: ^3.1.1 + nullthrows: ^1.1.1 + walker: ^1.0.7 + dependenciesMeta: + fsevents: + optional: true + checksum: fc99466066fc57d506a90b8dbfc85b9aed3b3dfe362f42c35e24a3f0244b5f3e94b833b52b20cdd728842a1ef7e6c2132b9951a2c2d4013fb470e3a65b9971e0 + languageName: node + linkType: hard + +"metro-minify-terser@npm:0.81.0": + version: 0.81.0 + resolution: "metro-minify-terser@npm:0.81.0" + dependencies: + flow-enums-runtime: ^0.0.6 + terser: ^5.15.0 + checksum: 53472e5d476613c652f0e8bdf68429c80c66b71dd9a559c2185d56f41a8463ba3431353d453d2e20615875d070389ec24247ddbce67c4d7783bfc85113af18e0 + languageName: node + linkType: hard + +"metro-resolver@npm:0.81.0": + version: 0.81.0 + resolution: "metro-resolver@npm:0.81.0" + dependencies: + flow-enums-runtime: ^0.0.6 + checksum: 38349c79b5023d993baf30c7feeb9d60287f33e7bf559b75ce6b4177a4acd991353a0fea0a8caeec9a78efa244c8608c0e5bdff4ac64d6fda89ca0b81c9ca3fc + languageName: node + linkType: hard + +"metro-runtime@npm:0.81.0, metro-runtime@npm:^0.81.0": + version: 0.81.0 + resolution: "metro-runtime@npm:0.81.0" + dependencies: + "@babel/runtime": ^7.25.0 + flow-enums-runtime: ^0.0.6 + checksum: 812869ed71d6017d04c3affafa0b1bd4c86075569e0eb98030b8abddb59923903e3dc8eb23d7dd027384496e27010f6aad7839b0e1105e3873c31d0269fb7971 + languageName: node + linkType: hard + +"metro-source-map@npm:0.81.0, metro-source-map@npm:^0.81.0": + version: 0.81.0 + resolution: "metro-source-map@npm:0.81.0" + dependencies: + "@babel/traverse": ^7.25.3 + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3" + "@babel/types": ^7.25.2 + flow-enums-runtime: ^0.0.6 + invariant: ^2.2.4 + metro-symbolicate: 0.81.0 + nullthrows: ^1.1.1 + ob1: 0.81.0 + source-map: ^0.5.6 + vlq: ^1.0.0 + checksum: e83742c187427b009a5e15eeddd0af0ef29c6e0b88e5f0ac0ba13142e8883f45ce9d66dc8439ca080cea242e955c4f4ba0d64f8344777479ad89d97fa393ad29 + languageName: node + linkType: hard + +"metro-symbolicate@npm:0.81.0": + version: 0.81.0 + resolution: "metro-symbolicate@npm:0.81.0" + dependencies: + flow-enums-runtime: ^0.0.6 + invariant: ^2.2.4 + metro-source-map: 0.81.0 + nullthrows: ^1.1.1 + source-map: ^0.5.6 + through2: ^2.0.1 + vlq: ^1.0.0 + bin: + metro-symbolicate: src/index.js + checksum: 33990dc3722096beb0fabce5d8d2961b8f400e1f2aa6c19ce9760f9d739b63f25c7bd844e37e0de42e7f95c125431f7e42a7ad0b92b9aee8d214fecdfb4018e7 + languageName: node + linkType: hard + +"metro-transform-plugins@npm:0.81.0": + version: 0.81.0 + resolution: "metro-transform-plugins@npm:0.81.0" + dependencies: + "@babel/core": ^7.25.2 + "@babel/generator": ^7.25.0 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.3 + flow-enums-runtime: ^0.0.6 + nullthrows: ^1.1.1 + checksum: fea77e227c856cd3a41f55ddcde9852d7408cd3ceb4b434f23e02e5122a95f0a29b1950adae0b806d96bfb26581c1160c4bc62942888698394fcc4e85e0b8ee7 + languageName: node + linkType: hard + +"metro-transform-worker@npm:0.81.0": + version: 0.81.0 + resolution: "metro-transform-worker@npm:0.81.0" + dependencies: + "@babel/core": ^7.25.2 + "@babel/generator": ^7.25.0 + "@babel/parser": ^7.25.3 + "@babel/types": ^7.25.2 + flow-enums-runtime: ^0.0.6 + metro: 0.81.0 + metro-babel-transformer: 0.81.0 + metro-cache: 0.81.0 + metro-cache-key: 0.81.0 + metro-minify-terser: 0.81.0 + metro-source-map: 0.81.0 + metro-transform-plugins: 0.81.0 + nullthrows: ^1.1.1 + checksum: 0fa08b09f4e503183af789e39629dd0fdf4209f3453c0642cdef5e683e69644ec925bcccb2bdb3439059c11fc1418b3bcdd7dc38c768183c3deb8e2bc050e604 + languageName: node + linkType: hard + +"metro@npm:0.81.0, metro@npm:^0.81.0": + version: 0.81.0 + resolution: "metro@npm:0.81.0" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/core": ^7.25.2 + "@babel/generator": ^7.25.0 + "@babel/parser": ^7.25.3 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.3 + "@babel/types": ^7.25.2 + accepts: ^1.3.7 + chalk: ^4.0.0 + ci-info: ^2.0.0 + connect: ^3.6.5 + debug: ^2.2.0 + denodeify: ^1.2.1 + error-stack-parser: ^2.0.6 + flow-enums-runtime: ^0.0.6 + graceful-fs: ^4.2.4 + hermes-parser: 0.24.0 + image-size: ^1.0.2 + invariant: ^2.2.4 + jest-worker: ^29.6.3 + jsc-safe-url: ^0.2.2 + lodash.throttle: ^4.1.1 + metro-babel-transformer: 0.81.0 + metro-cache: 0.81.0 + metro-cache-key: 0.81.0 + metro-config: 0.81.0 + metro-core: 0.81.0 + metro-file-map: 0.81.0 + metro-resolver: 0.81.0 + metro-runtime: 0.81.0 + metro-source-map: 0.81.0 + metro-symbolicate: 0.81.0 + metro-transform-plugins: 0.81.0 + metro-transform-worker: 0.81.0 + mime-types: ^2.1.27 + nullthrows: ^1.1.1 + serialize-error: ^2.1.0 + source-map: ^0.5.6 + strip-ansi: ^6.0.0 + throat: ^5.0.0 + ws: ^7.5.10 + yargs: ^17.6.2 + bin: + metro: src/cli.js + checksum: 326f13e281ba696361c64b1c6bb77ff5b284771a103a78d446f7944ef8baf89e724bd2a76859c5c4e7adc9e94de2c6619755899efdde9bf1e24d3399e7c7cc00 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: ^3.0.3 + picomatch: ^2.3.1 + checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-db@npm:>= 1.43.0 < 2": + version: 1.53.0 + resolution: "mime-db@npm:1.53.0" + checksum: 3fd9380bdc0b085d0b56b580e4f89ca4fc3b823722310d795c248f0806b9a80afd5d8f4347f015ad943b9ecfa7cc0b71dffa0db96fa776d01a13474821a2c7fb + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 69c08205156a1f4906d9c46f9b4dc08d18a50176352e77fdeb645cedfe9f20c0b19865d465bd2dec27a5c432347f24dc07fc3695e11159d193f892834233e939 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^3.0.1 + dependenciesMeta: + encoding: + optional: true + checksum: 7d59a31011ab9e4d1af6562dd4c4440e425b2baf4c5edbdd2e22fb25a88629e1cdceca39953ff209da504a46021df520f18fd9a519f36efae4750ff724ddadea + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" + dependencies: + minipass: ^7.0.4 + rimraf: ^5.0.5 + checksum: da0a53899252380475240c587e52c824f8998d9720982ba5c4693c68e89230718884a209858c156c6e08d51aad35700a3589987e540593c36f6713fe30cd7338 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 972deb188e8fb55547f1e58d66bd6b4a3623bf0c7137802582602d73e6480c1c2268dcbafbfb1be466e00cc7e56ac514d7fd9334b7cf33e3e2ab547c16f83a8d + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.8 + resolution: "nanoid@npm:3.3.8" + bin: + nanoid: bin/nanoid.cjs + checksum: dfe0adbc0c77e9655b550c333075f51bb28cfc7568afbf3237249904f9c86c9aaaed1f113f0fddddba75673ee31c758c30c43d4414f014a52a7a626efc5958c9 + languageName: node + linkType: hard + +"negotiator@npm:0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 20ebfe79b2d2e7cf9cbc8239a72662b584f71164096e6e8896c8325055497c96f6b80cd22c258e8a2f2aa382a787795ec3ee8b37b422a302c7d4381b0d5ecfbb + languageName: node + linkType: hard + +"negotiator@npm:~0.6.4": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 7ded10aa02a0707d1d12a9973fdb5954f98547ca7beb60e31cb3a403cc6e8f11138db7a3b0128425cf836fc85d145ec4ce983b2bdf83dca436af879c2d683510 + languageName: node + linkType: hard + +"neo-async@npm:^2.5.0": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"nested-error-stacks@npm:~2.0.1": + version: 2.0.1 + resolution: "nested-error-stacks@npm:2.0.1" + checksum: 8430d7d80ad69b1add2992ee2992a363db6c1a26a54740963bc99a004c5acb1d2a67049397062eab2caa3a312b4da89a0b85de3bdf82d7d472a6baa166311fe6 + languageName: node + linkType: hard + +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff + languageName: node + linkType: hard + +"no-case@npm:^3.0.4": + version: 3.0.4 + resolution: "no-case@npm:3.0.4" + dependencies: + lower-case: ^2.0.2 + tslib: ^2.0.3 + checksum: 0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c + languageName: node + linkType: hard + +"node-abort-controller@npm:^3.1.1": + version: 3.1.1 + resolution: "node-abort-controller@npm:3.1.1" + checksum: 2c340916af9710328b11c0828223fc65ba320e0d082214a211311bf64c2891028e42ef276b9799188c4ada9e6e1c54cf7a0b7c05dd9d59fcdc8cd633304c8047 + languageName: node + linkType: hard + +"node-dir@npm:^0.1.17": + version: 0.1.17 + resolution: "node-dir@npm:0.1.17" + dependencies: + minimatch: ^3.0.2 + checksum: 29de9560e52cdac8d3f794d38d782f6799e13d4d11aaf96d3da8c28458e1c5e33bb5f8edfb42dc34172ec5516c50c5b8850c9e1526542616757a969267263328 + languageName: node + linkType: hard + +"node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + +"node-forge@npm:^1, node-forge@npm:^1.2.1, node-forge@npm:^1.3.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^14.0.3 + nopt: ^8.0.0 + proc-log: ^5.0.0 + semver: ^7.3.5 + tar: ^7.4.3 + which: ^5.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: d7d5055ccc88177f721c7cd4f8f9440c29a0eb40e7b79dba89ef882ec957975dfc1dcb8225e79ab32481a02016eb13bbc051a913ea88d482d3cbdf2131156af4 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 917dbced519f48c6289a44830a0ca6dc944c3ee9243c468ebd8515a41c97c8b2c256edb7f3f750416bc37952cc9608684e6483c7b6c6f39f6bd8d86c52cfe658 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.0.0 + resolution: "nopt@npm:8.0.0" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: 2cfc65e7ee38af2e04aea98f054753b0230011c0eeca4ecf131bd7d25984cbbf6f214586e0ae5dfcc2e830bc0bffa5a7fb28ea8d0b306ffd4ae8ea2d814c1ab3 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npm-package-arg@npm:^11.0.0": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: ^7.0.0 + proc-log: ^4.0.0 + semver: ^7.3.5 + validate-npm-package-name: ^5.0.0 + checksum: cc6f22c39201aa14dcceeddb81bfbf7fa0484f94bcd2b3ad038e18afec5167c843cdde90c897f6034dc368faa0100c1eeee6e3f436a89e0af32ba932af4a8c28 + languageName: node + linkType: hard + +"npm-run-path@npm:^2.0.0": + version: 2.0.2 + resolution: "npm-run-path@npm:2.0.2" + dependencies: + path-key: ^2.0.0 + checksum: acd5ad81648ba4588ba5a8effb1d98d2b339d31be16826a118d50f182a134ac523172101b82eab1d01cb4c2ba358e857d54cfafd8163a1ffe7bd52100b741125 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: ^1.0.0 + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 + languageName: node + linkType: hard + +"nullthrows@npm:^1.1.1": + version: 1.1.1 + resolution: "nullthrows@npm:1.1.1" + checksum: 10806b92121253eb1b08ecf707d92480f5331ba8ae5b23fa3eb0548ad24196eb797ed47606153006568a5733ea9e528a3579f21421f7828e09e7756f4bdd386f + languageName: node + linkType: hard + +"ob1@npm:0.81.0": + version: 0.81.0 + resolution: "ob1@npm:0.81.0" + dependencies: + flow-enums-runtime: ^0.0.6 + checksum: f3215ccf72604b4db5f9cfc6c83454a136a035ffd26faffec2c100d5810b87599cc95e167888320f3865959a5f9762c03de20a9e40cf66fc13706886820a9523 + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: 1.1.1 + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 + languageName: node + linkType: hard + +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: 1.1.1 + checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: ^1.0.0 + checksum: bb44015ac7a525d0fb43b029a583d4ad359834632b4424ca209b438aacf6d669dda81b5edfbdb42c22636e607b276ba5589f46694a729e3bc27948ce26f4cc1a + languageName: node + linkType: hard + +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"open@npm:^7.0.3": + version: 7.4.2 + resolution: "open@npm:7.4.2" + dependencies: + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 + languageName: node + linkType: hard + +"open@npm:^8.0.4": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: ^2.0.0 + is-docker: ^2.1.1 + is-wsl: ^2.2.0 + checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 + languageName: node + linkType: hard + +"ora@npm:^3.4.0": + version: 3.4.0 + resolution: "ora@npm:3.4.0" + dependencies: + chalk: ^2.4.2 + cli-cursor: ^2.1.0 + cli-spinners: ^2.0.0 + log-symbols: ^2.2.0 + strip-ansi: ^5.2.0 + wcwidth: ^1.0.1 + checksum: f1f8e7f290b766276dcd19ddf2159a1971b1ec37eec4a5556b8f5e4afbe513a965ed65c183d38956724263b6a20989b3d8fb71b95ac4a2d6a01db2f1ed8899e4 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: ^2.0.0 + checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 8c92d533acf82f0d12f7e196edccff773f384098bbb048acdd55a08778ce4fc8889d8f1bde72969487bd96f9c63212698d79744c20bedfce36c5b00b46d369f8 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-png@npm:^2.1.0": + version: 2.1.0 + resolution: "parse-png@npm:2.1.0" + dependencies: + pngjs: ^3.3.0 + checksum: 0c6b6c42c8830cd16f6f9e9aedafd53111c0ad2ff350ba79c629996887567558f5639ad0c95764f96f7acd1f9ff63d4ac73737e80efa3911a6de9839ee520c96 + languageName: node + linkType: hard + +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + +"password-prompt@npm:^1.0.4": + version: 1.1.3 + resolution: "password-prompt@npm:1.1.3" + dependencies: + ansi-escapes: ^4.3.2 + cross-spawn: ^7.0.3 + checksum: 9a5fdbd7360db896809704c141acfe9258450a9982c4c177b82a1e6c69d204800cdab6064abac6736bd7d31142c80108deedf4484146594747cb3ce776816e97 + languageName: node + linkType: hard + +"path-dirname@npm:^1.0.2": + version: 1.0.2 + resolution: "path-dirname@npm:1.0.2" + checksum: 0d2f6604ae05a252a0025318685f290e2764ecf9c5436f203cdacfc8c0b17c24cdedaa449d766beb94ab88cc7fc70a09ec21e7933f31abc2b719180883e5e33f + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^2.0.0, path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.5, path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"picomatch@npm:^3.0.1": + version: 3.0.1 + resolution: "picomatch@npm:3.0.1" + checksum: b7fe18174bcc05bbf0ea09cc85623ae395676b3e6bc25636d4c20db79a948586237e429905453bf1ba385bc7a7aa5b56f1b351680e650d2b5c305ceb98dfc914 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b + languageName: node + linkType: hard + +"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.6": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + languageName: node + linkType: hard + +"pkg-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "pkg-dir@npm:3.0.0" + dependencies: + find-up: ^3.0.0 + checksum: 70c9476ffefc77552cc6b1880176b71ad70bfac4f367604b2b04efd19337309a4eec985e94823271c7c0e83946fa5aeb18cd360d15d10a5d7533e19344bfa808 + languageName: node + linkType: hard + +"plist@npm:^3.0.5": + version: 3.1.0 + resolution: "plist@npm:3.1.0" + dependencies: + "@xmldom/xmldom": ^0.8.8 + base64-js: ^1.5.1 + xmlbuilder: ^15.1.1 + checksum: c8ea013da8646d4c50dff82f9be39488054621cc229957621bb00add42b5d4ce3657cf58d4b10c50f7dea1a81118f825838f838baeb4e6f17fab453ecf91d424 + languageName: node + linkType: hard + +"pngjs@npm:^3.3.0": + version: 3.4.0 + resolution: "pngjs@npm:3.4.0" + checksum: 8bd40bd698abd16b72c97b85cb858c80894fbedc76277ce72a784aa441e14795d45d9856e97333ca469b34b67528860ffc8a7317ca6beea349b645366df00bcd + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.2": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss@npm:~8.4.32": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" + dependencies: + nanoid: ^3.3.7 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: eb5d6cbdca24f50399aafa5d2bea489e4caee4c563ea1edd5a2485bc5f84e9ceef3febf170272bc83a99c31d23a316ad179213e853f34c2a7a8ffa534559d63a + languageName: node + linkType: hard + +"pretty-bytes@npm:^5.6.0": + version: 5.6.0 + resolution: "pretty-bytes@npm:5.6.0" + checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd + languageName: node + linkType: hard + +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"proc-log@npm:^4.0.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: c78b26ecef6d5cce4a7489a1e9923d7b4b1679028c8654aef0463b27f4a90b0946cd598f55799da602895c52feb085ec76381d007ab8dcceebd40b89c2f9dfe0 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: ~2.0.3 + checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 + languageName: node + linkType: hard + +"promise@npm:^8.3.0": + version: 8.3.0 + resolution: "promise@npm:8.3.0" + dependencies: + asap: ~2.0.6 + checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5 + languageName: node + linkType: hard + +"prompts@npm:^2.3.2": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"prop-types@npm:^15.5.10, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f + languageName: node + linkType: hard + +"punycode@npm:^2.1.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 + languageName: node + linkType: hard + +"qrcode-terminal@npm:0.11.0": + version: 0.11.0 + resolution: "qrcode-terminal@npm:0.11.0" + bin: + qrcode-terminal: ./bin/qrcode-terminal.js + checksum: ad146ea1e339e1745402a3ea131631f64f40f0d1ff9cc6bd9c21677feaa1ca6dcd32eadf188fd3febdab8bf6191b3d24d533454903a72543645a72820e4d324c + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"queue@npm:6.0.2": + version: 6.0.2 + resolution: "queue@npm:6.0.2" + dependencies: + inherits: ~2.0.3 + checksum: ebc23639248e4fe40a789f713c20548e513e053b3dc4924b6cb0ad741e3f264dcff948225c8737834dd4f9ec286dbc06a1a7c13858ea382d9379f4303bcc0916 + languageName: node + linkType: hard + +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + +"rc@npm:~1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: ^0.6.0 + ini: ~1.3.0 + minimist: ^1.2.0 + strip-json-comments: ~2.0.1 + bin: + rc: ./cli.js + checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e + languageName: node + linkType: hard + +"react-devtools-core@npm:^5.3.1": + version: 5.3.2 + resolution: "react-devtools-core@npm:5.3.2" + dependencies: + shell-quote: ^1.6.1 + ws: ^7 + checksum: 8ae15b34f69ea16a0c6b9966c195aecf61981099409ddfe1950e1686cfae6717f93dc63285bd8f1094cc783de81c3d1e73285a82e774d2b289a17ede93d6589b + languageName: node + linkType: hard + +"react-is@npm:^16.13.1": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 + languageName: node + linkType: hard + +"react-native-executorch@npm:0.3.2": + version: 0.3.2 + resolution: "react-native-executorch@npm:0.3.2" + dependencies: + "@huggingface/jinja": ^0.3.4 + expo: ^52.0.37 + expo-asset: ^11.0.3 + expo-file-system: ^18.0.10 + react-native-live-audio-stream: ^1.1.1 + peerDependencies: + react: "*" + react-native: "*" + checksum: c5ac5f0739186e05cc5bd5b7d03c9a8709ff037c0704e4cce12a489b20ac3dc572a454088c9cb81828abce755d576e980db1ef55fc64659ca0cfc0962789ab62 + languageName: node + linkType: hard + +"react-native-fit-image@npm:^1.5.5": + version: 1.5.5 + resolution: "react-native-fit-image@npm:1.5.5" + dependencies: + prop-types: ^15.5.10 + checksum: 2f3ce06b43191efe3a4bd0698a4117342d821455c96433e9561d50f156ee446d2c449bf9e0908f9a8b7bbb8f95c02478d4fca8d8d103f38b6ce3b8b75557af15 + languageName: node + linkType: hard + +"react-native-live-audio-stream@npm:^1.1.1": + version: 1.1.1 + resolution: "react-native-live-audio-stream@npm:1.1.1" + checksum: 1503fb1d9e2df58bf31bfa9ee3cf5167802a659ec64e3a6ca8ba2401b6388af158f9e04895699152e91eec66bcc949a3f35ae38fb63435ae28959b5be56bbd2e + languageName: node + linkType: hard + +"react-native-loading-spinner-overlay@npm:^3.0.1": + version: 3.0.1 + resolution: "react-native-loading-spinner-overlay@npm:3.0.1" + peerDependencies: + react: "*" + react-native: "*" + checksum: d9e5e10bc6170084c162e717a94db7bd60a35eb8110614529caa501790ab9ddfb551239d2e9120aaa15048bfd0af03da8bed0d1ea09e7ebb88a4b39d88ed6878 + languageName: node + linkType: hard + +"react-native-markdown-display@npm:^7.0.2": + version: 7.0.2 + resolution: "react-native-markdown-display@npm:7.0.2" + dependencies: + css-to-react-native: ^3.0.0 + markdown-it: ^10.0.0 + prop-types: ^15.7.2 + react-native-fit-image: ^1.5.5 + peerDependencies: + react: ">=16.2.0" + react-native: ">=0.50.4" + checksum: 69c64f2d21f4ebf001c71d6dff31ef5e13946a0b46b2d2f2830efa89d648afbd8c336be8552264b42d693446e13a3f81fdbfdd5aa9b20878441acabd59f0a54e + languageName: node + linkType: hard + +"react-native-reanimated@npm:^3.16.3": + version: 3.16.5 + resolution: "react-native-reanimated@npm:3.16.5" + dependencies: + "@babel/plugin-transform-arrow-functions": ^7.0.0-0 + "@babel/plugin-transform-class-properties": ^7.0.0-0 + "@babel/plugin-transform-classes": ^7.0.0-0 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.0.0-0 + "@babel/plugin-transform-optional-chaining": ^7.0.0-0 + "@babel/plugin-transform-shorthand-properties": ^7.0.0-0 + "@babel/plugin-transform-template-literals": ^7.0.0-0 + "@babel/plugin-transform-unicode-regex": ^7.0.0-0 + "@babel/preset-typescript": ^7.16.7 + convert-source-map: ^2.0.0 + invariant: ^2.2.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + react: "*" + react-native: "*" + checksum: 29d28dcf99acb2e3928963106a2860d15c9929712832d8d8437fb563691d0199884a63e925548fe5e4b6fc7a9008eadec3e0294b521d9466c875caf16de9c303 + languageName: node + linkType: hard + +"react-native-safe-area-context@npm:4.12.0": + version: 4.12.0 + resolution: "react-native-safe-area-context@npm:4.12.0" + peerDependencies: + react: "*" + react-native: "*" + checksum: 04a751afed448b31dc401f0e8ecf9cf3edc4fe77b5c16cb7bc2a70381c3a2ffa54f42a313a46ad7deec0aff74a3f5650cf49db0264ba4a6c4f6a1d69ecf489fd + languageName: node + linkType: hard + +"react-native-svg-transformer@npm:^1.5.0": + version: 1.5.0 + resolution: "react-native-svg-transformer@npm:1.5.0" + dependencies: + "@svgr/core": ^8.1.0 + "@svgr/plugin-jsx": ^8.1.0 + "@svgr/plugin-svgo": ^8.1.0 + path-dirname: ^1.0.2 + peerDependencies: + react-native: ">=0.59.0" + react-native-svg: ">=12.0.0" + checksum: 6c2544ef095b098de68c45a1698bc79acea10935391009c6322699e0df96a48953949b75309fc6fc7bba32ce5e8c7df632f817b116dd05456e26a5938108a8e6 + languageName: node + linkType: hard + +"react-native-svg@npm:15.8.0": + version: 15.8.0 + resolution: "react-native-svg@npm:15.8.0" + dependencies: + css-select: ^5.1.0 + css-tree: ^1.1.3 + warn-once: 0.1.1 + peerDependencies: + react: "*" + react-native: "*" + checksum: ad9d6093f3aef0d53c5e2a562afb7805009f2bf50fd4ec6e77f8c18a6cb7e06a7793d55cc66d523c7d30c77cae170ee26767c72ad5b1a1f07032420ccf4162fe + languageName: node + linkType: hard + +"react-native-wheel-scrollview-picker@npm:^2.0.6": + version: 2.0.9 + resolution: "react-native-wheel-scrollview-picker@npm:2.0.9" + peerDependencies: + "@types/react": "*" + "@types/react-native": "*" + react: "*" + react-native: "*" + typescript: "*" + checksum: 5200c211c523164859245d8f0c47565e0437488ec59d4bd9091f1435374a29ae13b2db7e4b6c4159d2ff5f3f9396904271b97669a22db1a045e87240dee9721b + languageName: node + linkType: hard + +"react-native@npm:0.76.9": + version: 0.76.9 + resolution: "react-native@npm:0.76.9" + dependencies: + "@jest/create-cache-key-function": ^29.6.3 + "@react-native/assets-registry": 0.76.9 + "@react-native/codegen": 0.76.9 + "@react-native/community-cli-plugin": 0.76.9 + "@react-native/gradle-plugin": 0.76.9 + "@react-native/js-polyfills": 0.76.9 + "@react-native/normalize-colors": 0.76.9 + "@react-native/virtualized-lists": 0.76.9 + abort-controller: ^3.0.0 + anser: ^1.4.9 + ansi-regex: ^5.0.0 + babel-jest: ^29.7.0 + babel-plugin-syntax-hermes-parser: ^0.23.1 + base64-js: ^1.5.1 + chalk: ^4.0.0 + commander: ^12.0.0 + event-target-shim: ^5.0.1 + flow-enums-runtime: ^0.0.6 + glob: ^7.1.1 + invariant: ^2.2.4 + jest-environment-node: ^29.6.3 + jsc-android: ^250231.0.0 + memoize-one: ^5.0.0 + metro-runtime: ^0.81.0 + metro-source-map: ^0.81.0 + mkdirp: ^0.5.1 + nullthrows: ^1.1.1 + pretty-format: ^29.7.0 + promise: ^8.3.0 + react-devtools-core: ^5.3.1 + react-refresh: ^0.14.0 + regenerator-runtime: ^0.13.2 + scheduler: 0.24.0-canary-efb381bbf-20230505 + semver: ^7.1.3 + stacktrace-parser: ^0.1.10 + whatwg-fetch: ^3.0.0 + ws: ^6.2.3 + yargs: ^17.6.2 + peerDependencies: + "@types/react": ^18.2.6 + react: ^18.2.0 + peerDependenciesMeta: + "@types/react": + optional: true + bin: + react-native: cli.js + checksum: cf621cef0649920bac2b730998be6eaaf9762d516bc65d9073b46f634bb640dfb6b9b5d64ce6a6e09da64d52d114d96d96435a91c9db8ec61b76c818fe209827 + languageName: node + linkType: hard + +"react-refresh@npm:^0.14.0, react-refresh@npm:^0.14.2": + version: 0.14.2 + resolution: "react-refresh@npm:0.14.2" + checksum: d80db4bd40a36dab79010dc8aa317a5b931f960c0d83c4f3b81f0552cbcf7f29e115b84bb7908ec6a1eb67720fff7023084eff73ece8a7ddc694882478464382 + languageName: node + linkType: hard + +"react@npm:18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: ^1.1.0 + checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376 + languageName: node + linkType: hard + +"readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readline@npm:^1.3.0": + version: 1.3.0 + resolution: "readline@npm:1.3.0" + checksum: dfaf8e6ac20408ea00d650e95f7bb47f77c4c62dd12ed7fb51731ee84532a2f3675fcdc4cab4923dc1eef227520a2e082a093215190907758bea9f585b19438e + languageName: node + linkType: hard + +"recast@npm:^0.21.0": + version: 0.21.5 + resolution: "recast@npm:0.21.5" + dependencies: + ast-types: 0.15.2 + esprima: ~4.0.0 + source-map: ~0.6.1 + tslib: ^2.0.1 + checksum: 03cc7f57562238ba258d468be67bf7446ce7a707bc87a087891dad15afead46c36e9aaeedf2130e2ab5a465244a9c62bfd4127849761cf8f4085abe2f3e5f485 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" + dependencies: + regenerate: ^1.4.2 + checksum: d5c5fc13f8b8d7e16e791637a4bfef741f8d70e267d51845ee7d5404a32fa14c75b181c4efba33e4bff8b0000a2f13e9773593713dfe5b66597df4259275ce63 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.2": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.2": + version: 0.15.2 + resolution: "regenerator-transform@npm:0.15.2" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 + languageName: node + linkType: hard + +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" + dependencies: + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.2.0 + regjsgen: ^0.8.0 + regjsparser: ^0.12.0 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 67d3c4a3f6c99bc80b5d690074a27e6f675be1c1739f8a9acf028fbc36f1a468472574ea65e331e217995198ba4404d7878f3cb3739a73552dd3c70d3fb7f8e6 + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: a1d925ff14a4b2be774e45775ee6b33b256f89c42d480e6d85152d2133f18bd3d6af662161b226fa57466f7efec367eaf7ccd2a58c0ec2a1306667ba2ad07b0d + languageName: node + linkType: hard + +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" + dependencies: + jsesc: ~3.0.2 + bin: + regjsparser: bin/parser + checksum: 094b55b0ab3e1fd58f8ce5132a1d44dab08d91f7b0eea4132b0157b303ebb8ded20a9cbd893d25402d2aeddb23fac1f428ab4947b295d6fa51dd1c334a9e76f0 + languageName: node + linkType: hard + +"remove-trailing-slash@npm:^0.1.0": + version: 0.1.1 + resolution: "remove-trailing-slash@npm:0.1.1" + checksum: dd200c6b7d6f2b49d12b3eff3abc7089917e8a268cefcd5bf67ff23f8c2ad9f866fbe2f3566e1a8dbdc4f4b1171e2941f7dd00852f8de549bb73c3df53b09d96 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"requireg@npm:^0.2.2": + version: 0.2.2 + resolution: "requireg@npm:0.2.2" + dependencies: + nested-error-stacks: ~2.0.1 + rc: ~1.2.7 + resolve: ~1.7.1 + checksum: 99b420a02e7272717153cdf75891cbb133c02c04b287721eb1bdb0668b6a98aa1da38c08d8148fc8b1443a668d939eeb622d390538ac8da17b18a977ebe998ae + languageName: node + linkType: hard + +"resolve-from@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-from@npm:3.0.0" + checksum: fff9819254d2d62b57f74e5c2ca9c0bdd425ca47287c4d801bc15f947533148d858229ded7793b0f59e61e49e782fffd6722048add12996e1bd4333c29669062 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve-workspace-root@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve-workspace-root@npm:2.0.0" + checksum: c7222391a35ecb3514fa04d753334a86f984d8ffe06ce87506582c4c5671ac608273b8f5e6faa2055be6e196785bf751ede9a48d484de53889d721b814c097ab + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.3": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: abfb9f98278dcd0c19b8a49bb486abfafa23df4636d49128ea270dc982053c3ef230a530aecda1fae1322873fdfa6c97674fc539651ddfdb375ac58e0b8ef6df + languageName: node + linkType: hard + +"resolve@npm:^1.14.2, resolve@npm:^1.22.2": + version: 1.22.9 + resolution: "resolve@npm:1.22.9" + dependencies: + is-core-module: ^2.16.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: dd7da6c4ccc60bb4884f636b987102bb1cae6c486f7172361719a7f52769660c9a83a2d3520bef71d91f3da27e4fb8a40404c63ee4372a15863f3208bef5af67 + languageName: node + linkType: hard + +"resolve@npm:~1.7.1": + version: 1.7.1 + resolution: "resolve@npm:1.7.1" + dependencies: + path-parse: ^1.0.5 + checksum: afb829d4b923f9b17aaf55320c2feaf8d44577674a3a71510d299f832fb80f6703e5a701e01cf774c3241fe8663d4b2b99053cfbca7995488d18ea9f8c7ac309 + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.2#~builtin": + version: 1.22.9 + resolution: "resolve@patch:resolve@npm%3A1.22.9#~builtin::version=1.22.9&hash=c3c19d" + dependencies: + is-core-module: ^2.16.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 8db5c0f16ab65f58c036cb5be0964605c97c29b9fdf1e20f298ec027e2a4fd96ad0413aa14f6e761629956dc552cd478c2f9b6c5a07e37e4c85209090162501e + languageName: node + linkType: hard + +"resolve@patch:resolve@~1.7.1#~builtin": + version: 1.7.1 + resolution: "resolve@patch:resolve@npm%3A1.7.1#~builtin::version=1.7.1&hash=3bafbf" + dependencies: + path-parse: ^1.0.5 + checksum: c2a6f0e3856ac1ddc8297091c20ca6c36d99bf289ddea366c46bd2a7ed8b31075c7f9d01ff5d390ebed1fe41b9fabe57a79ae087992ba92e3592f0c3be07c1ac + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: ^2.0.0 + signal-exit: ^3.0.2 + checksum: 482e13d02d834b6e5e3aa90304a8b5e840775d6f06916cc92a50038adf9f098dcc72405b567da8a37e137ae40ad3e31896fa3136ae62f7a426c2fbf53d036536 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: ^10.3.7 + bin: + rimraf: dist/esm/bin.mjs + checksum: 50e27388dd2b3fa6677385fc1e2966e9157c89c86853b96d02e6915663a96b7ff4d590e14f6f70e90f9b554093aa5dbc05ac3012876be558c06a65437337bc05 + languageName: node + linkType: hard + +"rimraf@npm:~2.6.2": + version: 2.6.3 + resolution: "rimraf@npm:2.6.3" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sax@npm:>=0.6.0": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 3ad64df16b743f0f2eb7c38ced9692a6d924f1cd07bbe45c39576c2cf50de8290d9d04e7b2228f924c7d05fecc4ec5cf651423278e0c7b63d260c387ef3af84a + languageName: node + linkType: hard + +"scheduler@npm:0.24.0-canary-efb381bbf-20230505": + version: 0.24.0-canary-efb381bbf-20230505 + resolution: "scheduler@npm:0.24.0-canary-efb381bbf-20230505" + dependencies: + loose-envify: ^1.1.0 + checksum: 232149125c10f10193b1340ec4bbf14a8e6a845152790d6fd6f58207642db801abdb5a21227561a0a93871b98ba47539a6233b4e6155aae72d6db6db9f9f09b3 + languageName: node + linkType: hard + +"selfsigned@npm:^2.4.1": + version: 2.4.1 + resolution: "selfsigned@npm:2.4.1" + dependencies: + "@types/node-forge": ^1.3.0 + node-forge: ^1 + checksum: 38b91c56f1d7949c0b77f9bbe4545b19518475cae15e7d7f0043f87b1626710b011ce89879a88969651f650a19d213bb15b7d5b4c2877df9eeeff7ba8f8b9bfa + languageName: node + linkType: hard + +"semver@npm:^5.5.0, semver@npm:^5.6.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.1.3, semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.6.0": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 4110ec5d015c9438f322257b1c51fe30276e5f766a3f64c09edd1d7ea7118ecbc3f379f3b69032bacf13116dc7abc4ad8ce0d7e2bd642e26b0d271b56b61a7d8 + languageName: node + linkType: hard + +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f + languageName: node + linkType: hard + +"send@npm:^0.19.0": + version: 0.19.1 + resolution: "send@npm:0.19.1" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~2.0.0 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 2a1991c8ac23a9b47c4477fbed056f1e4503ef683c669e9113303f793965c42f462d763755378eef9ad8b8c0e0cfbcf7789e2e517fa8d7451bc2cf8b3feca01e + languageName: node + linkType: hard + +"serialize-error@npm:^2.1.0": + version: 2.1.0 + resolution: "serialize-error@npm:2.1.0" + checksum: 28464a6f65e6becd6e49fb782aff06573fdbf3d19f161a20228179842fed05c75a34110e54c3ee020b00240f9e11d8bee9b9fee5d04e0bc0bef1fdbf2baa297e + languageName: node + linkType: hard + +"serve-static@npm:^1.13.1": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" + dependencies: + encodeurl: ~2.0.0 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.19.0 + checksum: dffc52feb4cc5c68e66d0c7f3c1824d4e989f71050aefc9bd5f822a42c54c9b814f595fc5f2b717f4c7cc05396145f3e90422af31186a93f76cf15f707019759 + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: ^1.0.0 + checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:^1.6.1": + version: 1.8.2 + resolution: "shell-quote@npm:1.8.2" + checksum: 1e97b62ced1c4c5135015978ebf273bed1f425a68cf84163e83fbb0f34b3ff9471e656720dab2b7cbb4ae0f58998e686d17d166c28dfb3662acd009e8bd7faed + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-plist@npm:^1.1.0": + version: 1.4.0 + resolution: "simple-plist@npm:1.4.0" + dependencies: + bplist-creator: 0.1.1 + bplist-parser: 0.3.2 + plist: ^3.0.5 + checksum: fa8086f6b781c289f1abad21306481dda4af6373b32a5d998a70e53c2b7218a1d21ebb5ae3e736baae704c21d311d3d39d01d0e6a2387eda01b4020b9ebd909e + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"slugify@npm:^1.3.4, slugify@npm:^1.6.6": + version: 1.6.6 + resolution: "slugify@npm:1.6.6" + checksum: 04773c2d3b7aea8d2a61fa47cc7e5d29ce04e1a96cbaec409da57139df906acb3a449fac30b167d203212c806e73690abd4ff94fbad0a9a7b7ea109a2a638ae9 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"snake-case@npm:^3.0.4": + version: 3.0.4 + resolution: "snake-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: 0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: ^7.1.2 + debug: ^4.3.4 + socks: ^2.8.3 + checksum: b4fbcdb7ad2d6eec445926e255a1fb95c975db0020543fbac8dfa6c47aecc6b3b619b7fb9c60a3f82c9b2969912a5e7e174a056ae4d98cb5322f3524d6036e1d + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.16, source-map-support@npm:~0.5.20, source-map-support@npm:~0.5.21": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map@npm:^0.5.6": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"split@npm:^1.0.1": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: 2 + checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: ^7.0.3 + checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: ^7.0.3 + checksum: ef4b6b0ae47b4a69896f5f1c4375f953b9435388c053c36d27998bc3d73e046969ccde61ab659e679142971a0b08e50478a1228f62edb994105b280f17900c98 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d + languageName: node + linkType: hard + +"stacktrace-parser@npm:^0.1.10": + version: 0.1.10 + resolution: "stacktrace-parser@npm:0.1.10" + dependencies: + type-fest: ^0.7.1 + checksum: f4fbddfc09121d91e587b60de4beb4941108e967d71ad3a171812dc839b010ca374d064ad0a296295fed13acd103609d99a4224a25b4e67de13cae131f1901ee + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + +"statuses@npm:~1.5.0": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c + languageName: node + linkType: hard + +"stream-buffers@npm:2.2.x, stream-buffers@npm:~2.2.0": + version: 2.2.0 + resolution: "stream-buffers@npm:2.2.0" + checksum: 4587d9e8f050d689fb38b4295e73408401b16de8edecc12026c6f4ae92956705ecfd995ae3845d7fa3ebf19502d5754df9143d91447fd881d86e518f43882c1c + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^5.2.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: ^4.1.0 + checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-eof@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-eof@npm:1.0.0" + checksum: 40bc8ddd7e072f8ba0c2d6d05267b4e0a4800898c3435b5fb5f5a21e6e47dfaff18467e7aa0d1844bb5d6274c3097246595841fbfeb317e541974ee992cac506 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + +"structured-headers@npm:^0.4.1": + version: 0.4.1 + resolution: "structured-headers@npm:0.4.1" + checksum: 2f3073b2c8b4f2515367a1647ba0b6764ce6d35b3943605940de41077c2afd2513257f4bf6fbfd67a3455f25a3e844905da6fddde6b6ad7974256495311a25a3 + languageName: node + linkType: hard + +"sucrase@npm:3.35.0": + version: 3.35.0 + resolution: "sucrase@npm:3.35.0" + dependencies: + "@jridgewell/gen-mapping": ^0.3.2 + commander: ^4.0.0 + glob: ^10.3.10 + lines-and-columns: ^1.1.6 + mz: ^2.7.0 + pirates: ^4.0.1 + ts-interface-checker: ^0.1.9 + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 9fc5792a9ab8a14dcf9c47dcb704431d35c1cdff1d17d55d382a31c2e8e3063870ad32ce120a80915498486246d612e30cda44f1624d9d9a10423e1a43487ad1 + languageName: node + linkType: hard + +"sudo-prompt@npm:9.1.1": + version: 9.1.1 + resolution: "sudo-prompt@npm:9.1.1" + checksum: 20fe5bde6a27725d87938e68d6f99c0798ce9bf3a8fdebd58392a0436df713c66ebf67863e682941ff98ee7611e40ed599e12be7f264c9286106feb0f3db3860 + languageName: node + linkType: hard + +"sudo-prompt@npm:^8.2.0": + version: 8.2.5 + resolution: "sudo-prompt@npm:8.2.5" + checksum: bacff1f18a8ab8dba345cc1f3cf3a02b4cc571f71585df79af95af31278f56107f7c29402f5347b07c489888c63f2deb78d544b93a6347e83d0ed0847f4bc163 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-hyperlinks@npm:^2.0.0": + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" + dependencies: + has-flag: ^4.0.0 + supports-color: ^7.0.0 + checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"svg-parser@npm:^2.0.4": + version: 2.0.4 + resolution: "svg-parser@npm:2.0.4" + checksum: b3de6653048212f2ae7afe4a423e04a76ec6d2d06e1bf7eacc618a7c5f7df7faa5105561c57b94579ec831fbbdbf5f190ba56a9205ff39ed13eabdf8ab086ddf + languageName: node + linkType: hard + +"svgo@npm:^3.0.2": + version: 3.3.2 + resolution: "svgo@npm:3.3.2" + dependencies: + "@trysound/sax": 0.2.0 + commander: ^7.2.0 + css-select: ^5.1.0 + css-tree: ^2.3.1 + css-what: ^6.1.0 + csso: ^5.0.5 + picocolors: ^1.0.0 + bin: + svgo: ./bin/svgo + checksum: a3f8aad597dec13ab24e679c4c218147048dc1414fe04e99447c5f42a6e077b33d712d306df84674b5253b98c9b84dfbfb41fdd08552443b04946e43d03e054e + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": ^4.0.0 + chownr: ^3.0.0 + minipass: ^7.1.2 + minizlib: ^3.0.1 + mkdirp: ^3.0.1 + yallist: ^5.0.0 + checksum: 8485350c0688331c94493031f417df069b778aadb25598abdad51862e007c39d1dd5310702c7be4a6784731a174799d8885d2fde0484269aea205b724d7b2ffa + languageName: node + linkType: hard + +"temp-dir@npm:^2.0.0, temp-dir@npm:~2.0.0": + version: 2.0.0 + resolution: "temp-dir@npm:2.0.0" + checksum: cc4f0404bf8d6ae1a166e0e64f3f409b423f4d1274d8c02814a59a5529f07db6cd070a749664141b992b2c1af337fa9bb451a460a43bb9bcddc49f235d3115aa + languageName: node + linkType: hard + +"temp@npm:^0.8.4": + version: 0.8.4 + resolution: "temp@npm:0.8.4" + dependencies: + rimraf: ~2.6.2 + checksum: f35bed78565355dfdf95f730b7b489728bd6b7e35071bcc6497af7c827fb6c111fbe9063afc7b8cbc19522a072c278679f9a0ee81e684aa2c8617cc0f2e9c191 + languageName: node + linkType: hard + +"tempy@npm:^0.7.1": + version: 0.7.1 + resolution: "tempy@npm:0.7.1" + dependencies: + del: ^6.0.0 + is-stream: ^2.0.0 + temp-dir: ^2.0.0 + type-fest: ^0.16.0 + unique-string: ^2.0.0 + checksum: 265652f94eed077c311777e0290c4b4f3ec670c71c62c979efcbbd67ee506d677ff2741a72d7160556e9b0fba8fc5fbd7b3c482ac94c8acc48d85411f1f079c3 + languageName: node + linkType: hard + +"terminal-link@npm:^2.1.1": + version: 2.1.1 + resolution: "terminal-link@npm:2.1.1" + dependencies: + ansi-escapes: ^4.2.1 + supports-hyperlinks: ^2.0.0 + checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f + languageName: node + linkType: hard + +"terser@npm:^5.15.0": + version: 5.37.0 + resolution: "terser@npm:5.37.0" + dependencies: + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 + commander: ^2.20.0 + source-map-support: ~0.5.20 + bin: + terser: bin/terser + checksum: 70c06a8ce1288ff4370a7e481beb6fc8b22fc4995371479f49df1552aa9cf8e794ace66e1da6e87057eda1745644311213f5043bda9a06cf55421eff68b3ac06 + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + +"throat@npm:^5.0.0": + version: 5.0.0 + resolution: "throat@npm:5.0.0" + checksum: 031ff7f4431618036c1dedd99c8aa82f5c33077320a8358ed829e84b320783781d1869fe58e8f76e948306803de966f5f7573766a437562c9f5c033297ad2fe2 + languageName: node + linkType: hard + +"through2@npm:^2.0.1": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 + languageName: node + linkType: hard + +"through@npm:2": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e + languageName: node + linkType: hard + +"tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.4.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.16.0": + version: 0.16.0 + resolution: "type-fest@npm:0.16.0" + checksum: 1a4102c06dc109db00418c753062e206cab65befd469d000ece4452ee649bf2a9cf57686d96fb42326bc9d918d9a194d4452897b486dcc41989e5c99e4e87094 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.7.1": + version: 0.7.1 + resolution: "type-fest@npm:0.7.1" + checksum: 5b1b113529d59949d97b76977d545989ddc11b81bb0c766b6d2ccc65473cb4b4a5c7d24f5be2c2bb2de302a5d7a13c1732ea1d34c8c59b7e0ec1f890cf7fc424 + languageName: node + linkType: hard + +"typescript@npm:^5.3.3": + version: 5.7.2 + resolution: "typescript@npm:5.7.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: b55300c4cefee8ee380d14fa9359ccb41ff8b54c719f6bc49b424899d662a5ce62ece390ce769568c7f4d14af844085255e63788740084444eb12ef423b13433 + languageName: node + linkType: hard + +"typescript@patch:typescript@^5.3.3#~builtin": + version: 5.7.2 + resolution: "typescript@patch:typescript@npm%3A5.7.2#~builtin::version=5.7.2&hash=14eedb" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 803430c6da2ba73c25a21880d8d4f08a56d9d2444e6db2ea949ac4abceeece8e4a442b7b9b585db7d8a0b47ebda2060e45fe8ee8b8aca23e27ec1d4844987ee6 + languageName: node + linkType: hard + +"ua-parser-js@npm:^1.0.35": + version: 1.0.39 + resolution: "ua-parser-js@npm:1.0.39" + bin: + ua-parser-js: script/cli.js + checksum: 19455df8c2348ef53f2e150e7406d3a025a619c2fd69722a1e63363d5ba8d91731ef7585f2dce7d8f14c8782734b4d704c05f246dca5f7565b5ae7d318084f2a + languageName: node + linkType: hard + +"uc.micro@npm:^1.0.1, uc.micro@npm:^1.0.5": + version: 1.0.6 + resolution: "uc.micro@npm:1.0.6" + checksum: 6898bb556319a38e9cf175e3628689347bd26fec15fc6b29fa38e0045af63075ff3fea4cf1fdba9db46c9f0cbf07f2348cd8844889dd31ebd288c29fe0d27e7a + languageName: node + linkType: hard + +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: b7bc50f012dc6afbcce56c9fd62d7e86b20a62ff21f12b7b5cbf1973b9578d90f22a9c7fe50e638e96905d33893bf2f9f16d98929c4673c2480de05c6c96ea8b + languageName: node + linkType: hard + +"undici@npm:^6.18.2": + version: 6.21.0 + resolution: "undici@npm:6.21.0" + checksum: bc2eb26c4b010a4f816314d48d4529f62b1116405097b2c5f0ac68247c56049a857d11a9f05b237818f04ce4f51d6f5e8d6fcc6aae2ab816c2b7318a9706727c + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: ^2.0.0 + unicode-property-aliases-ecmascript: ^2.0.0 + checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 9e3151e1d0bc6be35c4cef105e317c04090364173e8462005b5cde08a1e7c858b6586486cfebac39dc2c6c8c9ee24afb245de6d527604866edfa454fe2a35fae + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: ^5.0.0 + checksum: 6a62094fcac286b9ec39edbd1f8f64ff92383baa430af303dfed1ffda5e47a08a6b316408554abfddd9730c78b6106bef4ca4d02c1231a735ddd56ced77573df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 222d0322bc7bbf6e45c08967863212398313ef73423f4125e075f893a02405a5ffdbaaf150f7dd1e99f8861348a486dd079186d27c5f2c60e465b7dcbb1d3e5b + languageName: node + linkType: hard + +"unique-string@npm:^2.0.0, unique-string@npm:~2.0.0": + version: 2.0.0 + resolution: "unique-string@npm:2.0.0" + dependencies: + crypto-random-string: ^2.0.0 + checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff + languageName: node + linkType: hard + +"universalify@npm:^1.0.0": + version: 1.0.0 + resolution: "universalify@npm:1.0.0" + checksum: 095a808f2b915e3b89d29b6f3b4ee4163962b02fa5b7cb686970b8d0439f4ca789bc43f319b7cbb1ce552ae724e631d148e5aee9ce04c4f46a7fe0c5bbfd2b9e + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 + languageName: node + linkType: hard + +"unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.1": + version: 1.1.1 + resolution: "update-browserslist-db@npm:1.1.1" + dependencies: + escalade: ^3.2.0 + picocolors: ^1.1.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 2ea11bd2562122162c3e438d83a1f9125238c0844b6d16d366e3276d0c0acac6036822dc7df65fc5a89c699cdf9f174acf439c39bedf3f9a2f3983976e4b4c3e + languageName: node + linkType: hard + +"util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 + languageName: node + linkType: hard + +"uuid@npm:^7.0.3": + version: 7.0.3 + resolution: "uuid@npm:7.0.3" + bin: + uuid: dist/bin/uuid + checksum: f5b7b5cc28accac68d5c083fd51cca64896639ebd4cca88c6cfb363801aaa83aa439c86dfc8446ea250a7a98d17afd2ad9e88d9d4958c79a412eccb93bae29de + languageName: node + linkType: hard + +"uuid@npm:^8.0.0, uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 0d583a1af23aeffea7748742cf22b6802458736fb8b60323ba5949763824d46f796474b0e1b9206beb716f9d75269e19dbd7795d6b038b29d561be95dd827381 + languageName: node + linkType: hard + +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b + languageName: node + linkType: hard + +"vlq@npm:^1.0.0": + version: 1.0.1 + resolution: "vlq@npm:1.0.1" + checksum: 67ab6dd35c787eaa02c0ff1a869dd07a230db08722fb6014adaaf432634808ddb070765f70958b47997e438c331790cfcf20902411b0d6453f1a2a5923522f55 + languageName: node + linkType: hard + +"walker@npm:^1.0.7, walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"warn-once@npm:0.1.1": + version: 0.1.1 + resolution: "warn-once@npm:0.1.1" + checksum: e6a5a1f5a8dba7744399743d3cfb571db4c3947897875d4962a7c5b1bf2195ab4518c838cb4cea652e71729f21bba2e98dc75686f5fccde0fabbd894e2ed0c0d + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.3.2": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 21ab5ea08a730a2ef8023736afe16713b4f2023ec1c7085c16c8e293ee17ed085dff63a0ad8722da30c99c4ccbd4ccd1b2e79c861829f7ef2963d7de7004c2cb + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^5.0.0": + version: 5.0.0 + resolution: "webidl-conversions@npm:5.0.0" + checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 + languageName: node + linkType: hard + +"whatwg-fetch@npm:^3.0.0": + version: 3.6.20 + resolution: "whatwg-fetch@npm:3.6.20" + checksum: c58851ea2c4efe5c2235f13450f426824cf0253c1d45da28f45900290ae602a20aff2ab43346f16ec58917d5562e159cd691efa368354b2e82918c2146a519c5 + languageName: node + linkType: hard + +"whatwg-url-without-unicode@npm:8.0.0-3": + version: 8.0.0-3 + resolution: "whatwg-url-without-unicode@npm:8.0.0-3" + dependencies: + buffer: ^5.4.3 + punycode: ^2.1.1 + webidl-conversions: ^5.0.0 + checksum: 1fe266f7161e0bd961087c1254a5a59d1138c3d402064495eed65e7590d9caed5a1d9acfd6e7a1b0bf0431253b0e637ee3e4ffc08387cd60e0b2ddb9d4687a4b + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: ^2.0.0 + bin: + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: 6ec99e89ba32c7e748b8a3144e64bfc74aa63e2b2eacbb61a0060ad0b961eb1a632b08fb1de067ed59b002cec3e21de18299216ebf2325ef0f78e0f121e14e90 + languageName: node + linkType: hard + +"wonka@npm:^6.3.2": + version: 6.3.4 + resolution: "wonka@npm:6.3.4" + checksum: 6bb57955cb2982fb469a7824484e6854b436f89a7f10b6a981348789d88fbc944665771adc4cc404f62416417eb47ab2b8657d898e5301ccd4a53eaac6a10508 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.3.0": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: ^4.1.11 + imurmurhash: ^0.1.4 + signal-exit: ^3.0.2 + checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"ws@npm:^6.2.3": + version: 6.2.3 + resolution: "ws@npm:6.2.3" + dependencies: + async-limiter: ~1.0.0 + checksum: bbc96ff5628832d80669a88fd117487bf070492dfaa50df77fa442a2b119792e772f4365521e0a8e025c0d51173c54fa91adab165c11b8e0674685fdd36844a5 + languageName: node + linkType: hard + +"ws@npm:^7, ws@npm:^7.5.10": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: f9bb062abf54cc8f02d94ca86dcd349c3945d63851f5d07a3a61c2fcb755b15a88e943a63cf580cbdb5b74436d67ef6b67f745b8f7c0814e411379138e1863cb + languageName: node + linkType: hard + +"ws@npm:^8.12.1": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 91d4d35bc99ff6df483bdf029b9ea4bfd7af1f16fc91231a96777a63d263e1eabf486e13a2353970efc534f9faa43bdbf9ee76525af22f4752cbc5ebda333975 + languageName: node + linkType: hard + +"xcode@npm:^3.0.1": + version: 3.0.1 + resolution: "xcode@npm:3.0.1" + dependencies: + simple-plist: ^1.1.0 + uuid: ^7.0.3 + checksum: 908ff85851f81aec6e36ca24427db092e1cc068f052716e14de5e762196858039efabbe053a1abe8920184622501049e74a93618e8692b982f7604a9847db108 + languageName: node + linkType: hard + +"xml2js@npm:0.6.0": + version: 0.6.0 + resolution: "xml2js@npm:0.6.0" + dependencies: + sax: ">=0.6.0" + xmlbuilder: ~11.0.0 + checksum: 437f353fd66d367bf158e9555a0625df9965d944e499728a5c6bc92a54a2763179b144f14b7e1c725040f56bbd22b0fa6cfcb09ec4faf39c45ce01efe631f40b + languageName: node + linkType: hard + +"xmlbuilder@npm:^14.0.0": + version: 14.0.0 + resolution: "xmlbuilder@npm:14.0.0" + checksum: 9e93d3c73957dbb21acde63afa5d241b19057bdbdca9d53534d8351e70f1d5c9db154e3ca19bd3e9ea84c082539ab6e7845591c8778a663e8b5d3470d5427a8b + languageName: node + linkType: hard + +"xmlbuilder@npm:^15.1.1": + version: 15.1.1 + resolution: "xmlbuilder@npm:15.1.1" + checksum: 14f7302402e28d1f32823583d121594a9dca36408d40320b33f598bd589ca5163a352d076489c9c64d2dc1da19a790926a07bf4191275330d4de2b0d85bb1843 + languageName: node + linkType: hard + +"xmlbuilder@npm:~11.0.0": + version: 11.0.1 + resolution: "xmlbuilder@npm:11.0.1" + checksum: 7152695e16f1a9976658215abab27e55d08b1b97bca901d58b048d2b6e106b5af31efccbdecf9b07af37c8377d8e7e821b494af10b3a68b0ff4ae60331b415b0 + languageName: node + linkType: hard + +"xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: eba51182400b9f35b017daa7f419f434424410691bbc5de4f4240cc830fdef906b504424992700dc047f16b4d99100a6f8b8b11175c193f38008e9c96322b6a5 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:^17.6.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard diff --git a/examples/speech-to-text/ios/Podfile.lock b/examples/speech-to-text/ios/Podfile.lock index 444ff1cdf..490aee02e 100644 --- a/examples/speech-to-text/ios/Podfile.lock +++ b/examples/speech-to-text/ios/Podfile.lock @@ -1,23 +1,23 @@ PODS: - boost (1.84.0) - DoubleConversion (1.1.6) - - EXConstants (17.0.7): + - EXConstants (17.0.8): - ExpoModulesCore - - Expo (52.0.37): + - Expo (52.0.46): - ExpoModulesCore - - ExpoAsset (11.0.4): + - ExpoAsset (11.0.5): - ExpoModulesCore - - ExpoFileSystem (18.0.11): + - ExpoFileSystem (18.0.12): - ExpoModulesCore - ExpoFont (13.0.4): - ExpoModulesCore - ExpoKeepAwake (14.0.3): - ExpoModulesCore - - ExpoModulesCore (2.2.2): + - ExpoModulesCore (2.2.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -36,55 +36,59 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - FBLazyVector (0.76.3) - - fmt (9.1.0) + - fast_float (6.1.4) + - FBLazyVector (0.76.9) + - fmt (11.0.2) - glog (0.3.5) - - hermes-engine (0.76.3): - - hermes-engine/Pre-built (= 0.76.3) - - hermes-engine/Pre-built (0.76.3) - - opencv-rne (0.1.0) - - RCT-Folly (2024.01.01.00): + - hermes-engine (0.76.9): + - hermes-engine/Pre-built (= 0.76.9) + - hermes-engine/Pre-built (0.76.9) + - opencv-rne (4.11.0) + - RCT-Folly (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Default (= 2024.01.01.00) - - RCT-Folly/Default (2024.01.01.00): + - RCT-Folly/Default (= 2024.10.14.00) + - RCT-Folly/Default (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Fabric (2024.01.01.00): + - RCT-Folly/Fabric (2024.10.14.00): - boost - DoubleConversion - - fmt (= 9.1.0) - - glog - - RCTDeprecation (0.76.3) - - RCTRequired (0.76.3) - - RCTTypeSafety (0.76.3): - - FBLazyVector (= 0.76.3) - - RCTRequired (= 0.76.3) - - React-Core (= 0.76.3) - - React (0.76.3): - - React-Core (= 0.76.3) - - React-Core/DevSupport (= 0.76.3) - - React-Core/RCTWebSocket (= 0.76.3) - - React-RCTActionSheet (= 0.76.3) - - React-RCTAnimation (= 0.76.3) - - React-RCTBlob (= 0.76.3) - - React-RCTImage (= 0.76.3) - - React-RCTLinking (= 0.76.3) - - React-RCTNetwork (= 0.76.3) - - React-RCTSettings (= 0.76.3) - - React-RCTText (= 0.76.3) - - React-RCTVibration (= 0.76.3) - - React-callinvoker (0.76.3) - - React-Core (0.76.3): - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - fast_float + - fmt + - glog + - RCTDeprecation (0.76.9) + - RCTRequired (0.76.9) + - RCTTypeSafety (0.76.9): + - FBLazyVector (= 0.76.9) + - RCTRequired (= 0.76.9) + - React-Core (= 0.76.9) + - React (0.76.9): + - React-Core (= 0.76.9) + - React-Core/DevSupport (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) + - React-RCTActionSheet (= 0.76.9) + - React-RCTAnimation (= 0.76.9) + - React-RCTBlob (= 0.76.9) + - React-RCTImage (= 0.76.9) + - React-RCTLinking (= 0.76.9) + - React-RCTNetwork (= 0.76.9) + - React-RCTSettings (= 0.76.9) + - React-RCTText (= 0.76.9) + - React-RCTVibration (= 0.76.9) + - React-callinvoker (0.76.9) + - React-Core (0.76.9): + - glog + - hermes-engine + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) + - React-Core/Default (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -96,10 +100,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/CoreModulesHeaders (0.76.3): + - React-Core/CoreModulesHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -113,10 +117,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/Default (0.76.3): + - React-Core/Default (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-cxxreact - React-featureflags @@ -129,13 +133,13 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/DevSupport (0.76.3): + - React-Core/DevSupport (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) - - React-Core/RCTWebSocket (= 0.76.3) + - React-Core/Default (= 0.76.9) + - React-Core/RCTWebSocket (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -147,10 +151,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTActionSheetHeaders (0.76.3): + - React-Core/RCTActionSheetHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -164,10 +168,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTAnimationHeaders (0.76.3): + - React-Core/RCTAnimationHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -181,10 +185,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTBlobHeaders (0.76.3): + - React-Core/RCTBlobHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -198,10 +202,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTImageHeaders (0.76.3): + - React-Core/RCTImageHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -215,10 +219,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTLinkingHeaders (0.76.3): + - React-Core/RCTLinkingHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -232,10 +236,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTNetworkHeaders (0.76.3): + - React-Core/RCTNetworkHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -249,10 +253,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTSettingsHeaders (0.76.3): + - React-Core/RCTSettingsHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -266,10 +270,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTTextHeaders (0.76.3): + - React-Core/RCTTextHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -283,10 +287,10 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTVibrationHeaders (0.76.3): + - React-Core/RCTVibrationHeaders (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - React-Core/Default - React-cxxreact @@ -300,12 +304,12 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-Core/RCTWebSocket (0.76.3): + - React-Core/RCTWebSocket (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTDeprecation - - React-Core/Default (= 0.76.3) + - React-Core/Default (= 0.76.9) - React-cxxreact - React-featureflags - React-hermes @@ -317,41 +321,43 @@ PODS: - React-utils - SocketRocket (= 0.7.1) - Yoga - - React-CoreModules (0.76.3): + - React-CoreModules (0.76.9): - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) - - RCTTypeSafety (= 0.76.3) - - React-Core/CoreModulesHeaders (= 0.76.3) - - React-jsi (= 0.76.3) + - fast_float + - fmt + - RCT-Folly + - RCTTypeSafety + - React-Core/CoreModulesHeaders + - React-jsi - React-jsinspector - React-NativeModulesApple - React-RCTBlob - - React-RCTImage (= 0.76.3) + - React-RCTImage - ReactCodegen - ReactCommon - - SocketRocket (= 0.7.1) - - React-cxxreact (0.76.3): + - SocketRocket + - React-cxxreact (0.76.9): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-debug (= 0.76.3) - - React-jsi (= 0.76.3) + - RCT-Folly + - React-callinvoker + - React-debug + - React-jsi - React-jsinspector - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - React-runtimeexecutor (= 0.76.3) - - React-timing (= 0.76.3) - - React-debug (0.76.3) - - React-defaultsnativemodule (0.76.3): + - React-logger + - React-perflogger + - React-runtimeexecutor + - React-timing + - React-debug (0.76.9) + - React-defaultsnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -372,11 +378,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-domnativemodule (0.76.3): + - React-domnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -394,32 +400,33 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-Fabric (0.76.3): + - React-Fabric (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/animations (= 0.76.3) - - React-Fabric/attributedstring (= 0.76.3) - - React-Fabric/componentregistry (= 0.76.3) - - React-Fabric/componentregistrynative (= 0.76.3) - - React-Fabric/components (= 0.76.3) - - React-Fabric/core (= 0.76.3) - - React-Fabric/dom (= 0.76.3) - - React-Fabric/imagemanager (= 0.76.3) - - React-Fabric/leakchecker (= 0.76.3) - - React-Fabric/mounting (= 0.76.3) - - React-Fabric/observers (= 0.76.3) - - React-Fabric/scheduler (= 0.76.3) - - React-Fabric/telemetry (= 0.76.3) - - React-Fabric/templateprocessor (= 0.76.3) - - React-Fabric/uimanager (= 0.76.3) + - React-Fabric/animations (= 0.76.9) + - React-Fabric/attributedstring (= 0.76.9) + - React-Fabric/componentregistry (= 0.76.9) + - React-Fabric/componentregistrynative (= 0.76.9) + - React-Fabric/components (= 0.76.9) + - React-Fabric/core (= 0.76.9) + - React-Fabric/dom (= 0.76.9) + - React-Fabric/imagemanager (= 0.76.9) + - React-Fabric/leakchecker (= 0.76.9) + - React-Fabric/mounting (= 0.76.9) + - React-Fabric/observers (= 0.76.9) + - React-Fabric/scheduler (= 0.76.9) + - React-Fabric/telemetry (= 0.76.9) + - React-Fabric/templateprocessor (= 0.76.9) + - React-Fabric/uimanager (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -429,12 +436,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/animations (0.76.3): + - React-Fabric/animations (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -449,12 +457,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/attributedstring (0.76.3): + - React-Fabric/attributedstring (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -469,12 +478,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistry (0.76.3): + - React-Fabric/componentregistry (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -489,12 +499,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/componentregistrynative (0.76.3): + - React-Fabric/componentregistrynative (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -509,20 +520,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components (0.76.3): + - React-Fabric/components (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.76.3) - - React-Fabric/components/root (= 0.76.3) - - React-Fabric/components/view (= 0.76.3) + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.9) + - React-Fabric/components/root (= 0.76.9) + - React-Fabric/components/view (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -532,12 +544,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/legacyviewmanagerinterop (0.76.3): + - React-Fabric/components/legacyviewmanagerinterop (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -552,12 +565,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/root (0.76.3): + - React-Fabric/components/root (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -572,12 +586,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/components/view (0.76.3): + - React-Fabric/components/view (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -593,12 +608,13 @@ PODS: - React-utils - ReactCommon/turbomodule/core - Yoga - - React-Fabric/core (0.76.3): + - React-Fabric/core (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -613,12 +629,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/dom (0.76.3): + - React-Fabric/dom (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -633,12 +650,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/imagemanager (0.76.3): + - React-Fabric/imagemanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -653,12 +671,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/leakchecker (0.76.3): + - React-Fabric/leakchecker (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -673,12 +692,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/mounting (0.76.3): + - React-Fabric/mounting (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -693,18 +713,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers (0.76.3): + - React-Fabric/observers (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/observers/events (= 0.76.3) + - React-Fabric/observers/events (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -714,12 +735,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/observers/events (0.76.3): + - React-Fabric/observers/events (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -734,12 +756,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/scheduler (0.76.3): + - React-Fabric/scheduler (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -756,12 +779,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/telemetry (0.76.3): + - React-Fabric/telemetry (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -776,12 +800,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/templateprocessor (0.76.3): + - React-Fabric/templateprocessor (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -796,18 +821,19 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager (0.76.3): + - React-Fabric/uimanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - - React-Fabric/uimanager/consistency (= 0.76.3) + - React-Fabric/uimanager/consistency (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -818,12 +844,13 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-Fabric/uimanager/consistency (0.76.3): + - React-Fabric/uimanager/consistency (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -839,20 +866,21 @@ PODS: - React-runtimescheduler - React-utils - ReactCommon/turbomodule/core - - React-FabricComponents (0.76.3): + - React-FabricComponents (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components (= 0.76.3) - - React-FabricComponents/textlayoutmanager (= 0.76.3) + - React-FabricComponents/components (= 0.76.9) + - React-FabricComponents/textlayoutmanager (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -864,27 +892,28 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components (0.76.3): + - React-FabricComponents/components (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core - React-cxxreact - React-debug - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.76.3) - - React-FabricComponents/components/iostextinput (= 0.76.3) - - React-FabricComponents/components/modal (= 0.76.3) - - React-FabricComponents/components/rncore (= 0.76.3) - - React-FabricComponents/components/safeareaview (= 0.76.3) - - React-FabricComponents/components/scrollview (= 0.76.3) - - React-FabricComponents/components/text (= 0.76.3) - - React-FabricComponents/components/textinput (= 0.76.3) - - React-FabricComponents/components/unimplementedview (= 0.76.3) + - React-FabricComponents/components/inputaccessory (= 0.76.9) + - React-FabricComponents/components/iostextinput (= 0.76.9) + - React-FabricComponents/components/modal (= 0.76.9) + - React-FabricComponents/components/rncore (= 0.76.9) + - React-FabricComponents/components/safeareaview (= 0.76.9) + - React-FabricComponents/components/scrollview (= 0.76.9) + - React-FabricComponents/components/text (= 0.76.9) + - React-FabricComponents/components/textinput (= 0.76.9) + - React-FabricComponents/components/unimplementedview (= 0.76.9) - React-featureflags - React-graphics - React-jsi @@ -896,12 +925,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/inputaccessory (0.76.3): + - React-FabricComponents/components/inputaccessory (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -919,12 +949,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/iostextinput (0.76.3): + - React-FabricComponents/components/iostextinput (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -942,12 +973,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/modal (0.76.3): + - React-FabricComponents/components/modal (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -965,12 +997,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/rncore (0.76.3): + - React-FabricComponents/components/rncore (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -988,12 +1021,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/safeareaview (0.76.3): + - React-FabricComponents/components/safeareaview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1011,12 +1045,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/scrollview (0.76.3): + - React-FabricComponents/components/scrollview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1034,12 +1069,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/text (0.76.3): + - React-FabricComponents/components/text (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1057,12 +1093,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/textinput (0.76.3): + - React-FabricComponents/components/textinput (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1080,12 +1117,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/components/unimplementedview (0.76.3): + - React-FabricComponents/components/unimplementedview (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1103,12 +1141,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricComponents/textlayoutmanager (0.76.3): + - React-FabricComponents/textlayoutmanager (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1126,30 +1165,31 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/core - Yoga - - React-FabricImage (0.76.3): + - React-FabricImage (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) - - RCTRequired (= 0.76.3) - - RCTTypeSafety (= 0.76.3) + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety - React-Fabric - React-graphics - React-ImageManager - React-jsi - - React-jsiexecutor (= 0.76.3) + - React-jsiexecutor - React-logger - React-rendererdebug - React-utils - ReactCommon - Yoga - - React-featureflags (0.76.3) - - React-featureflagsnativemodule (0.76.3): + - React-featureflags (0.76.9) + - React-featureflagsnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1166,31 +1206,33 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-graphics (0.76.3): + - React-graphics (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric - React-jsi - React-jsiexecutor - React-utils - - React-hermes (0.76.3): + - React-hermes (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.3) + - RCT-Folly + - React-cxxreact - React-jsi - - React-jsiexecutor (= 0.76.3) + - React-jsiexecutor - React-jsinspector - - React-perflogger (= 0.76.3) + - React-perflogger - React-runtimeexecutor - - React-idlecallbacksnativemodule (0.76.3): + - React-idlecallbacksnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1208,7 +1250,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-ImageManager (0.76.3): + - React-ImageManager (0.76.9): - glog - RCT-Folly/Fabric - React-Core/Default @@ -1217,51 +1259,53 @@ PODS: - React-graphics - React-rendererdebug - React-utils - - React-jserrorhandler (0.76.3): + - React-jserrorhandler (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-cxxreact - React-debug - React-jsi - - React-jsi (0.76.3): + - React-jsi (0.76.9): - boost - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-jsiexecutor (0.76.3): + - RCT-Folly + - React-jsiexecutor (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) + - RCT-Folly + - React-cxxreact + - React-jsi - React-jsinspector - - React-perflogger (= 0.76.3) - - React-jsinspector (0.76.3): + - React-perflogger + - React-jsinspector (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly - React-featureflags - React-jsi - - React-perflogger (= 0.76.3) - - React-runtimeexecutor (= 0.76.3) - - React-jsitracing (0.76.3): + - React-perflogger + - React-runtimeexecutor + - React-jsitracing (0.76.9): - React-jsi - - React-logger (0.76.3): + - React-logger (0.76.9): - glog - - React-Mapbuffer (0.76.3): + - React-Mapbuffer (0.76.9): - glog - React-debug - - React-microtasksnativemodule (0.76.3): + - React-microtasksnativemodule (0.76.9): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1278,12 +1322,12 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-executorch (0.3.1): + - react-native-executorch (0.3.2): - DoubleConversion - glog - hermes-engine - - opencv-rne (~> 0.1.0) - - RCT-Folly (= 2024.01.01.00) + - opencv-rne (~> 4.11.0) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1299,12 +1343,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - sqlite3 - Yoga - react-native-image-picker (7.2.3): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1321,11 +1366,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context (5.3.0): + - react-native-safe-area-context (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1334,8 +1379,8 @@ PODS: - React-featureflags - React-graphics - React-ImageManager - - react-native-safe-area-context/common (= 5.3.0) - - react-native-safe-area-context/fabric (= 5.3.0) + - react-native-safe-area-context/common (= 4.12.0) + - react-native-safe-area-context/fabric (= 4.12.0) - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1344,11 +1389,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context/common (5.3.0): + - react-native-safe-area-context/common (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1365,11 +1410,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - react-native-safe-area-context/fabric (5.3.0): + - react-native-safe-area-context/fabric (4.12.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1387,8 +1432,8 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - React-nativeconfig (0.76.3) - - React-NativeModulesApple (0.76.3): + - React-nativeconfig (0.76.9) + - React-NativeModulesApple (0.76.9): - glog - hermes-engine - React-callinvoker @@ -1399,25 +1444,25 @@ PODS: - React-runtimeexecutor - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - React-perflogger (0.76.3): + - React-perflogger (0.76.9): - DoubleConversion - - RCT-Folly (= 2024.01.01.00) - - React-performancetimeline (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) + - React-performancetimeline (0.76.9): + - RCT-Folly (= 2024.10.14.00) - React-cxxreact - React-timing - - React-RCTActionSheet (0.76.3): - - React-Core/RCTActionSheetHeaders (= 0.76.3) - - React-RCTAnimation (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTActionSheet (0.76.9): + - React-Core/RCTActionSheetHeaders (= 0.76.9) + - React-RCTAnimation (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTAnimationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTAppDelegate (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTAppDelegate (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1441,11 +1486,12 @@ PODS: - React-utils - ReactCodegen - ReactCommon - - React-RCTBlob (0.76.3): + - React-RCTBlob (0.76.9): - DoubleConversion - - fmt (= 9.1.0) + - fast_float + - fmt - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-Core/RCTBlobHeaders - React-Core/RCTWebSocket - React-jsi @@ -1454,10 +1500,10 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTFabric (0.76.3): + - React-RCTFabric (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-Core - React-debug - React-Fabric @@ -1477,8 +1523,8 @@ PODS: - React-runtimescheduler - React-utils - Yoga - - React-RCTImage (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTImage (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTImageHeaders - React-jsi @@ -1486,49 +1532,50 @@ PODS: - React-RCTNetwork - ReactCodegen - ReactCommon - - React-RCTLinking (0.76.3): - - React-Core/RCTLinkingHeaders (= 0.76.3) - - React-jsi (= 0.76.3) + - React-RCTLinking (0.76.9): + - React-Core/RCTLinkingHeaders (= 0.76.9) + - React-jsi (= 0.76.9) - React-NativeModulesApple - ReactCodegen - ReactCommon - - ReactCommon/turbomodule/core (= 0.76.3) - - React-RCTNetwork (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - ReactCommon/turbomodule/core (= 0.76.9) + - React-RCTNetwork (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTNetworkHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTSettings (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTSettings (0.76.9): + - RCT-Folly (= 2024.10.14.00) - RCTTypeSafety - React-Core/RCTSettingsHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-RCTText (0.76.3): - - React-Core/RCTTextHeaders (= 0.76.3) + - React-RCTText (0.76.9): + - React-Core/RCTTextHeaders (= 0.76.9) - Yoga - - React-RCTVibration (0.76.3): - - RCT-Folly (= 2024.01.01.00) + - React-RCTVibration (0.76.9): + - RCT-Folly (= 2024.10.14.00) - React-Core/RCTVibrationHeaders - React-jsi - React-NativeModulesApple - ReactCodegen - ReactCommon - - React-rendererconsistency (0.76.3) - - React-rendererdebug (0.76.3): + - React-rendererconsistency (0.76.9) + - React-rendererdebug (0.76.9): - DoubleConversion - - fmt (= 9.1.0) - - RCT-Folly (= 2024.01.01.00) + - fast_float + - fmt + - RCT-Folly - React-debug - - React-rncore (0.76.3) - - React-RuntimeApple (0.76.3): + - React-rncore (0.76.9) + - React-RuntimeApple (0.76.9): - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-callinvoker - React-Core/Default - React-CoreModules @@ -1545,10 +1592,10 @@ PODS: - React-RuntimeHermes - React-runtimescheduler - React-utils - - React-RuntimeCore (0.76.3): + - React-RuntimeCore (0.76.9): - glog - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-cxxreact - React-featureflags - React-jserrorhandler @@ -1559,11 +1606,11 @@ PODS: - React-runtimeexecutor - React-runtimescheduler - React-utils - - React-runtimeexecutor (0.76.3): - - React-jsi (= 0.76.3) - - React-RuntimeHermes (0.76.3): + - React-runtimeexecutor (0.76.9): + - React-jsi (= 0.76.9) + - React-RuntimeHermes (0.76.9): - hermes-engine - - RCT-Folly/Fabric (= 2024.01.01.00) + - RCT-Folly/Fabric (= 2024.10.14.00) - React-featureflags - React-hermes - React-jsi @@ -1572,10 +1619,10 @@ PODS: - React-nativeconfig - React-RuntimeCore - React-utils - - React-runtimescheduler (0.76.3): + - React-runtimescheduler (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-callinvoker - React-cxxreact - React-debug @@ -1587,14 +1634,14 @@ PODS: - React-runtimeexecutor - React-timing - React-utils - - React-timing (0.76.3) - - React-utils (0.76.3): + - React-timing (0.76.9) + - React-utils (0.76.9): - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - React-debug - - React-jsi (= 0.76.3) - - ReactCodegen (0.76.3): + - React-jsi (= 0.76.9) + - ReactCodegen (0.76.9): - DoubleConversion - glog - hermes-engine @@ -1614,51 +1661,54 @@ PODS: - React-utils - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - ReactCommon (0.76.3): - - ReactCommon/turbomodule (= 0.76.3) - - ReactCommon/turbomodule (0.76.3): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - ReactCommon/turbomodule/bridging (= 0.76.3) - - ReactCommon/turbomodule/core (= 0.76.3) - - ReactCommon/turbomodule/bridging (0.76.3): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - ReactCommon/turbomodule/core (0.76.3): - - DoubleConversion - - fmt (= 9.1.0) - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - React-callinvoker (= 0.76.3) - - React-cxxreact (= 0.76.3) - - React-debug (= 0.76.3) - - React-featureflags (= 0.76.3) - - React-jsi (= 0.76.3) - - React-logger (= 0.76.3) - - React-perflogger (= 0.76.3) - - React-utils (= 0.76.3) + - ReactCommon (0.76.9): + - ReactCommon/turbomodule (= 0.76.9) + - ReactCommon/turbomodule (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi + - React-logger + - React-perflogger + - ReactCommon/turbomodule/bridging (= 0.76.9) + - ReactCommon/turbomodule/core (= 0.76.9) + - ReactCommon/turbomodule/bridging (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-jsi (= 0.76.9) + - React-logger + - React-perflogger + - ReactCommon/turbomodule/core (0.76.9): + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - React-callinvoker + - React-cxxreact + - React-debug (= 0.76.9) + - React-featureflags (= 0.76.9) + - React-jsi + - React-logger + - React-perflogger + - React-utils (= 0.76.9) - RNAudioAPI (0.4.11): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1679,11 +1729,11 @@ PODS: - React-Core - RNLiveAudioStream (1.1.1): - React - - RNReanimated (3.17.1): + - RNReanimated (3.16.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1691,9 +1741,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics - - React-hermes - React-ImageManager - - React-jsi - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1701,14 +1749,14 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.17.1) - - RNReanimated/worklets (= 3.17.1) + - RNReanimated/reanimated (= 3.16.7) + - RNReanimated/worklets (= 3.16.7) - Yoga - - RNReanimated/reanimated (3.17.1): + - RNReanimated/reanimated (3.16.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1716,9 +1764,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics - - React-hermes - React-ImageManager - - React-jsi - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1726,13 +1772,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.17.1) + - RNReanimated/reanimated/apple (= 3.16.7) - Yoga - - RNReanimated/reanimated/apple (3.17.1): + - RNReanimated/reanimated/apple (3.16.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1740,9 +1786,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics - - React-hermes - React-ImageManager - - React-jsi - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1751,11 +1795,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNReanimated/worklets (3.17.1): + - RNReanimated/worklets (3.16.7): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1763,33 +1807,7 @@ PODS: - React-Fabric - React-featureflags - React-graphics - - React-hermes - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - RNReanimated/worklets/apple (= 3.17.1) - - Yoga - - RNReanimated/worklets/apple (3.17.1): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2024.01.01.00) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-ImageManager - - React-jsi - React-NativeModulesApple - React-RCTFabric - React-rendererdebug @@ -1798,11 +1816,11 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNSVG (15.11.2): + - RNSVG (15.8.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1818,13 +1836,13 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.11.2) + - RNSVG/common (= 15.8.0) - Yoga - - RNSVG/common (15.11.2): + - RNSVG/common (15.8.0): - DoubleConversion - glog - hermes-engine - - RCT-Folly (= 2024.01.01.00) + - RCT-Folly (= 2024.10.14.00) - RCTRequired - RCTTypeSafety - React-Core @@ -1842,6 +1860,9 @@ PODS: - ReactCommon/turbomodule/core - Yoga - SocketRocket (0.7.1) + - sqlite3 (3.49.1): + - sqlite3/common (= 3.49.1) + - sqlite3/common (3.49.1) - Yoga (0.0.0) DEPENDENCIES: @@ -1854,6 +1875,7 @@ DEPENDENCIES: - ExpoFont (from `../node_modules/expo-font/ios`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) @@ -1930,6 +1952,7 @@ SPEC REPOS: trunk: - opencv-rne - SocketRocket + - sqlite3 EXTERNAL SOURCES: boost: @@ -1950,6 +1973,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-keep-awake/ios" ExpoModulesCore: :path: "../node_modules/expo-modules-core" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" fmt: @@ -2093,85 +2118,87 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: boost: 1dca942403ed9342f98334bf4c3621f011aa7946 DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 - EXConstants: 0472d3c23d97943fe3505306daf9cde8024365c2 - Expo: f1d13d22815979ad85a0a59fcf6d23660c813ecd - ExpoAsset: a4cbc27a7cd24a6e87eb719603790b2cfa8dd326 - ExpoFileSystem: 4d2e7f77a41cfde8c3ae98580d872cd49437f993 - ExpoFont: 773955186469acc5108ff569712a2d243857475f - ExpoKeepAwake: 2a5f15dd4964cba8002c9a36676319a3394c85c7 - ExpoModulesCore: 561a787bc626ab9bcfee2a688bd588bf2667405f - FBLazyVector: be7314029d6ec6b90f0f75ce1195b8130ed9ac4f - fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be + EXConstants: fcfc75800824ac2d5c592b5bc74130bad17b146b + Expo: a6ff273c618506b12129a0d06f2a08201bfbcf43 + ExpoAsset: 48386d40d53a8c1738929b3ed509bcad595b5516 + ExpoFileSystem: 42d363d3b96f9afab980dcef60d5657a4443c655 + ExpoFont: f354e926f8feae5e831ec8087f36652b44a0b188 + ExpoKeepAwake: b0171a73665bfcefcfcc311742a72a956e6aa680 + ExpoModulesCore: c25d77625038b1968ea1afefc719862c0d8dd993 + fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6 + FBLazyVector: 7605ea4810e0e10ae4815292433c09bf4324ba45 + fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6 glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a - hermes-engine: 0555a84ea495e8e3b4bde71b597cd87fbb382888 - opencv-rne: 63e933ae2373fc91351f9a348dc46c3f523c2d3f - RCT-Folly: bf5c0376ffe4dd2cf438dcf86db385df9fdce648 - RCTDeprecation: 2c5e1000b04ab70b53956aa498bf7442c3c6e497 - RCTRequired: 5f785a001cf68a551c5f5040fb4c415672dbb481 - RCTTypeSafety: 6b98db8965005d32449605c0d005ecb4fee8a0f7 - React: 8077bf7c185afb515be82518507e16f71a247a5e - React-callinvoker: 519eee9520727805e2867a6d8dad4ebbeed543db - React-Core: e364ceda7d086c7d14adeec0eb880a90073e3dde - React-CoreModules: 291be650024d9db086c95fd1d7e7d9607c6de62b - React-cxxreact: 5cf17d13ca0fc0734e1bb0ed9615d1d1fc45ef78 - React-debug: 931ca94abd6b1bcab539e356e20df788afecae8f - React-defaultsnativemodule: 6afc2dd3619bac12dc54c1ee939bf14f9aa96b42 - React-domnativemodule: f140d46f6f3c3f1efc987c98b464fcbece0cc93a - React-Fabric: e1774fe4b579e34c2c5721e9351c8ce869e7b5f0 - React-FabricComponents: 528ff9f96d150379ed404221d70cc7019ca76865 - React-FabricImage: 31680b7ddc740e040277176fbd6541fcf0fd44af - React-featureflags: 7c7a74b65ee5a228f520b387ebfe0e8d9cecc622 - React-featureflagsnativemodule: dd3450366b1c9557975e457ce6baa151ccee84da - React-graphics: 7f0d3e06d356e8476bd8ba95d90762fc01138ebc - React-hermes: f83fafe6a1c845dace7abad4a5d7366cbb42ab96 - React-idlecallbacksnativemodule: 14ce331438e2bca7d464a8a211b14543aff4dc91 - React-ImageManager: 2b9274ea973f43597a554a182d7ef525836172c6 - React-jserrorhandler: 3b521485275d295cfc6ec6bfa921a1d608693ecf - React-jsi: fd23c1d759feb709784fd4c835b510b90a94dd12 - React-jsiexecutor: 74628d57accc03d4b5df53db813ef6dcd704c9ae - React-jsinspector: 89a1e27e97c762de81bd4b9cb1314750304bba38 - React-jsitracing: 11b6646d7b2ecdc7a475f65b2cb12d3805964195 - React-logger: 26155dc23db5c9038794db915f80bd2044512c2e - React-Mapbuffer: ad1ba0205205a16dbff11b8ade6d1b3959451658 - React-microtasksnativemodule: e771eb9eb6ace5884ee40a293a0e14a9d7a4343c - react-native-executorch: 5dc6cbade251d9f987964d0e1c5ea6da2f16e274 - react-native-image-picker: e7331948589e764ecd5a9c715c3fc14d4e6187e6 - react-native-safe-area-context: 26a64672a8d76556e54682ab5aa0a6b6798d8a8e - React-nativeconfig: aeed6e2a8ac02b2df54476afcc7c663416c12bf7 - React-NativeModulesApple: c5b7813da94136f50ef084fa1ac077332dcfc658 - React-perflogger: 6afb7eebf7d9521cc70481688ccddf212970e9d3 - React-performancetimeline: 81884d35896b22d51832e7c8748c8330ec73c491 - React-RCTActionSheet: c940a35d71686941ac2b96dd07bde11ea0f0c34f - React-RCTAnimation: e1dbb4e530d6f58437ab2fae372de3788ecdffab - React-RCTAppDelegate: f9825950ac2c52ae1cf46b648bb362b86b62fe41 - React-RCTBlob: 9cdac4721a76e2d132fb1760eafd0a8f150d1c96 - React-RCTFabric: c0aa01a448bcebb1326d068ed7545eb11561e663 - React-RCTImage: f09f5165807e1a69a2bbac6c7168a8ed57ed4e26 - React-RCTLinking: 4ea06b79cba7e15d8af4d86b1dcede6bd29a47fd - React-RCTNetwork: 43a38148c7a4a2380e76b08f07f02ee8eaac8965 - React-RCTSettings: cc60bb6b38eed0683696b5ddf45b0a4a1441147b - React-RCTText: fbe5e6e886beefd5d432790bc50b7aa2b6504264 - React-RCTVibration: 061dbf7a0a1e77bfc1c4672e7be6884dc12f18bf - React-rendererconsistency: 52b471890a1946991f2db81aa6867b14d93f4ea5 - React-rendererdebug: 3f63479f704e266a3bf104c897315a885c72859b - React-rncore: 33ea67bfd2eeaa4f4a0c9e0e8bd55e9b7ccb9faa - React-RuntimeApple: bcd91a191637ab5895593135de74ac54bf88df5d - React-RuntimeCore: 3a42a7f12f5f6cc4cb0e22446540165d204d7a15 - React-runtimeexecutor: db3f17084ee7b71ab84912c527d428cc3a137841 - React-RuntimeHermes: 91bcd6aeec4bab20cebd33cb8984e3825ccdc77e - React-runtimescheduler: 92a5a092ded9a9aaac765ac940d26b52bac48901 - React-timing: 54693ad0872f64127f7cb41675b1be4fd28ea4dc - React-utils: 2bcaf4f4dfe361344bce2fae428603d518488630 - ReactCodegen: ae99a130606068ed40d1d9c0d5f25fda142a0647 - ReactCommon: 89c87b343deacc8610b099ac764848f0ce937e3e - RNAudioAPI: f814d97e85004b5869c6d53d5e321a45663872eb - RNDeviceInfo: feea80a690d2bde1fe51461cf548039258bd03f2 - RNLiveAudioStream: 02584d52711b6b9f268cb371a4b1bdd76ab3e079 - RNReanimated: a41aa31f84a4d787d165125e5c874a2057154315 - RNSVG: 2df153c20fffef75a099c23836cd5e9ecba386fe + hermes-engine: 9e868dc7be781364296d6ee2f56d0c1a9ef0bb11 + opencv-rne: 2305807573b6e29c8c87e3416ab096d09047a7a0 + RCT-Folly: ea9d9256ba7f9322ef911169a9f696e5857b9e17 + RCTDeprecation: ebe712bb05077934b16c6bf25228bdec34b64f83 + RCTRequired: ca91e5dd26b64f577b528044c962baf171c6b716 + RCTTypeSafety: e7678bd60850ca5a41df9b8dc7154638cb66871f + React: 4641770499c39f45d4e7cde1eba30e081f9d8a3d + React-callinvoker: 4bef67b5c7f3f68db5929ab6a4d44b8a002998ea + React-Core: a68cea3e762814e60ecc3fa521c7f14c36c99245 + React-CoreModules: d81b1eaf8066add66299bab9d23c9f00c9484c7c + React-cxxreact: 984f8b1feeca37181d4e95301fcd6f5f6501c6ab + React-debug: 817160c07dc8d24d020fbd1eac7b3558ffc08964 + React-defaultsnativemodule: 18a684542f82ce1897552a1c4b847be414c9566e + React-domnativemodule: 90bdd4ec3ab38c47cfc3461c1e9283a8507d613f + React-Fabric: f6dade7007533daeb785ba5925039d83f343be4b + React-FabricComponents: b0655cc3e1b5ae12a4a1119aa7d8308f0ad33520 + React-FabricImage: 9b157c4c01ac2bf433f834f0e1e5fe234113a576 + React-featureflags: f2792b067a351d86fdc7bec23db3b9a2f2c8d26c + React-featureflagsnativemodule: 742a8325b3c821d2a1ca13a6d2a0fc72d04555e0 + React-graphics: 68969e4e49d73f89da7abef4116c9b5f466aa121 + React-hermes: ac0bcba26a5d288ebc99b500e1097da2d0297ddf + React-idlecallbacksnativemodule: d61d9c9816131bf70d3d80cd04889fc625ee523f + React-ImageManager: e906eec93a9eb6102a06576b89d48d80a4683020 + React-jserrorhandler: ac5dde01104ff444e043cad8f574ca02756e20d6 + React-jsi: 496fa2b9d63b726aeb07d0ac800064617d71211d + React-jsiexecutor: dd22ab48371b80f37a0a30d0e8915b6d0f43a893 + React-jsinspector: 4629ac376f5765e684d19064f2093e55c97fd086 + React-jsitracing: 7a1c9cd484248870cf660733cd3b8114d54c035f + React-logger: c4052eb941cca9a097ef01b59543a656dc088559 + React-Mapbuffer: 33546a3ebefbccb8770c33a1f8a5554fa96a54de + React-microtasksnativemodule: d80ff86c8902872d397d9622f1a97aadcc12cead + react-native-executorch: 63ab47d8a0c602a4dee0acb36f6e8d9891ad357f + react-native-image-picker: dbc35687199a8bf89514e09b6b105557f9f63162 + react-native-safe-area-context: cd916088cac5300c3266876218377518987b995e + React-nativeconfig: 8efdb1ef1e9158c77098a93085438f7e7b463678 + React-NativeModulesApple: cebca2e5320a3d66e123cade23bd90a167ffce5e + React-perflogger: 72e653eb3aba9122f9e57cf012d22d2486f33358 + React-performancetimeline: cd6a9374a72001165995d2ab632f672df04076dc + React-RCTActionSheet: aacf2375084dea6e7c221f4a727e579f732ff342 + React-RCTAnimation: 395ab53fd064dff81507c15efb781c8684d9a585 + React-RCTAppDelegate: 345a6f1b82abc578437df0ce7e9c48740eca827c + React-RCTBlob: 13311e554c1a367de063c10ee7c5e6573b2dd1d6 + React-RCTFabric: 007b1a98201cc49b5bc6e1417d7fe3f6fc6e2b78 + React-RCTImage: 1b1f914bcc12187c49ba5d949dac38c2eb9f5cc8 + React-RCTLinking: 4ac7c42beb65e36fba0376f3498f3cd8dd0be7fa + React-RCTNetwork: 938902773add4381e84426a7aa17a2414f5f94f7 + React-RCTSettings: e848f1ba17a7a18479cf5a31d28145f567da8223 + React-RCTText: 7e98fafdde7d29e888b80f0b35544e0cb07913cf + React-RCTVibration: cd7d80affd97dc7afa62f9acd491419558b64b78 + React-rendererconsistency: b4917053ecbaa91469c67a4319701c9dc0d40be6 + React-rendererdebug: aa181c36dd6cf5b35511d1ed875d6638fd38f0ec + React-rncore: 120d21715c9b4ba8f798bffe986cb769b988dd74 + React-RuntimeApple: d033becbbd1eba6f9f6e3af6f1893030ce203edd + React-RuntimeCore: 38af280bb678e66ba000a3c3d42920b2a138eebb + React-runtimeexecutor: 877596f82f5632d073e121cba2d2084b76a76899 + React-RuntimeHermes: 37aad735ff21ca6de2d8450a96de1afe9f86c385 + React-runtimescheduler: 8ec34cc885281a34696ea16c4fd86892d631f38d + React-timing: 331cbf9f2668c67faddfd2e46bb7f41cbd9320b9 + React-utils: ed818f19ab445000d6b5c4efa9d462449326cc9f + ReactCodegen: f853a20cc9125c5521c8766b4b49375fec20648b + ReactCommon: 300d8d9c5cb1a6cd79a67cf5d8f91e4d477195f9 + RNAudioAPI: 7176929b913caa7969b30655809701bcd1c15203 + RNDeviceInfo: d863506092aef7e7af3a1c350c913d867d795047 + RNLiveAudioStream: 93ac2bb6065be9018d0b00157b220f11cebc1513 + RNReanimated: 2e5069649cbab2c946652d3b97589b2ae0526220 + RNSVG: b889dc9c1948eeea0576a16cc405c91c37a12c19 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 3deb2471faa9916c8a82dda2a22d3fba2620ad37 + sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983 + Yoga: feb4910aba9742cfedc059e2b2902e22ffe9954a PODFILE CHECKSUM: 8264e1ef5c1c85c206e4efb2c2c7e7b66ab269ed -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/examples/speech-to-text/ios/speechtotext.xcodeproj/project.pbxproj b/examples/speech-to-text/ios/speechtotext.xcodeproj/project.pbxproj index dd2c7fc33..ed995519e 100644 --- a/examples/speech-to-text/ios/speechtotext.xcodeproj/project.pbxproj +++ b/examples/speech-to-text/ios/speechtotext.xcodeproj/project.pbxproj @@ -278,7 +278,6 @@ "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/RNSVG/RNSVGFilters.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", @@ -292,7 +291,6 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNSVGFilters.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", diff --git a/examples/speech-to-text/package.json b/examples/speech-to-text/package.json index 0582d6edd..9206a8ca4 100644 --- a/examples/speech-to-text/package.json +++ b/examples/speech-to-text/package.json @@ -11,21 +11,21 @@ "dependencies": { "@react-native/metro-config": "^0.76.3", "buffer": "^6.0.3", - "expo": "~52.0.17", + "expo": "~52.0.46", "expo-font": "^13.0.1", "expo-status-bar": "~2.0.0", "metro-config": "^0.81.0", "react": "18.3.1", - "react-native": "0.76.3", + "react-native": "0.76.9", "react-native-audio-api": "0.4.11", "react-native-device-info": "^14.0.4", - "react-native-executorch": "^0.3.0", + "react-native-executorch": "^0.3.2", "react-native-image-picker": "^7.2.2", "react-native-live-audio-stream": "^1.1.1", "react-native-loading-spinner-overlay": "^3.0.1", - "react-native-reanimated": "^3.16.3", - "react-native-safe-area-context": "^5.0.0", - "react-native-svg": "^15.9.0", + "react-native-reanimated": "~3.16.1", + "react-native-safe-area-context": "4.12.0", + "react-native-svg": "15.8.0", "react-native-svg-transformer": "^1.5.0", "react-native-wheel-scrollview-picker": "^2.0.6" }, diff --git a/examples/speech-to-text/yarn.lock b/examples/speech-to-text/yarn.lock index 74b3e2c3a..e293b49b5 100644 --- a/examples/speech-to-text/yarn.lock +++ b/examples/speech-to-text/yarn.lock @@ -1252,6 +1252,88 @@ __metadata: languageName: node linkType: hard +"@expo/cli@npm:0.22.26": + version: 0.22.26 + resolution: "@expo/cli@npm:0.22.26" + dependencies: + "@0no-co/graphql.web": ^1.0.8 + "@babel/runtime": ^7.20.0 + "@expo/code-signing-certificates": ^0.0.5 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/devcert": ^1.1.2 + "@expo/env": ~0.4.2 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@expo/metro-config": ~0.19.12 + "@expo/osascript": ^2.1.6 + "@expo/package-manager": ^1.7.2 + "@expo/plist": ^0.2.2 + "@expo/prebuild-config": ~8.2.0 + "@expo/rudder-sdk-node": ^1.1.1 + "@expo/spawn-async": ^1.7.2 + "@expo/ws-tunnel": ^1.0.1 + "@expo/xcpretty": ^4.3.0 + "@react-native/dev-middleware": 0.76.9 + "@urql/core": ^5.0.6 + "@urql/exchange-retry": ^1.3.0 + accepts: ^1.3.8 + arg: ^5.0.2 + better-opn: ~3.0.2 + bplist-creator: 0.0.7 + bplist-parser: ^0.3.1 + cacache: ^18.0.2 + chalk: ^4.0.0 + ci-info: ^3.3.0 + compression: ^1.7.4 + connect: ^3.7.0 + debug: ^4.3.4 + env-editor: ^0.4.1 + fast-glob: ^3.3.2 + form-data: ^3.0.1 + freeport-async: ^2.0.0 + fs-extra: ~8.1.0 + getenv: ^1.0.0 + glob: ^10.4.2 + internal-ip: ^4.3.0 + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + lodash.debounce: ^4.0.8 + minimatch: ^3.0.4 + node-forge: ^1.3.1 + npm-package-arg: ^11.0.0 + ora: ^3.4.0 + picomatch: ^3.0.1 + pretty-bytes: ^5.6.0 + pretty-format: ^29.7.0 + progress: ^2.0.3 + prompts: ^2.3.2 + qrcode-terminal: 0.11.0 + require-from-string: ^2.0.2 + requireg: ^0.2.2 + resolve: ^1.22.2 + resolve-from: ^5.0.0 + resolve.exports: ^2.0.3 + semver: ^7.6.0 + send: ^0.19.0 + slugify: ^1.3.4 + source-map-support: ~0.5.21 + stacktrace-parser: ^0.1.10 + structured-headers: ^0.4.1 + tar: ^6.2.1 + temp-dir: ^2.0.0 + tempy: ^0.7.1 + terminal-link: ^2.1.1 + undici: ^6.18.2 + unique-string: ~2.0.0 + wrap-ansi: ^7.0.0 + ws: ^8.12.1 + bin: + expo-internal: build/bin/cli + checksum: 32b79ab6a5ee88487e457e5f74249b2e081889521a89d53b452fbd454652428a08164e933681bf7707f4834f1cf529c3b6eaa9df7a077bc1a7bc026442990bf4 + languageName: node + linkType: hard + "@expo/code-signing-certificates@npm:^0.0.5": version: 0.0.5 resolution: "@expo/code-signing-certificates@npm:0.0.5" @@ -1284,6 +1366,28 @@ __metadata: languageName: node linkType: hard +"@expo/config-plugins@npm:~9.0.17": + version: 9.0.17 + resolution: "@expo/config-plugins@npm:9.0.17" + dependencies: + "@expo/config-types": ^52.0.5 + "@expo/json-file": ~9.0.2 + "@expo/plist": ^0.2.2 + "@expo/sdk-runtime-versions": ^1.0.0 + chalk: ^4.1.2 + debug: ^4.3.5 + getenv: ^1.0.0 + glob: ^10.4.2 + resolve-from: ^5.0.0 + semver: ^7.5.4 + slash: ^3.0.0 + slugify: ^1.6.6 + xcode: ^3.0.1 + xml2js: 0.6.0 + checksum: 5f415a3f4b399024d904d5c6e7b807d52f0efb6eddd217e458fa7d26d04b882f45462aa525ee8e49d404aecfc508e2a829ebd168f9a3b949a215a33699b0b92f + languageName: node + linkType: hard + "@expo/config-types@npm:^52.0.4, @expo/config-types@npm:^52.0.5": version: 52.0.5 resolution: "@expo/config-types@npm:52.0.5" @@ -1312,6 +1416,27 @@ __metadata: languageName: node linkType: hard +"@expo/config@npm:~10.0.11": + version: 10.0.11 + resolution: "@expo/config@npm:10.0.11" + dependencies: + "@babel/code-frame": ~7.10.4 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 + "@expo/json-file": ^9.0.2 + deepmerge: ^4.3.1 + getenv: ^1.0.0 + glob: ^10.4.2 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + resolve-workspace-root: ^2.0.0 + semver: ^7.6.0 + slugify: ^1.3.4 + sucrase: 3.35.0 + checksum: 28f147b84e49d35306769e620f8e19da12f245e8fd08cf8279512f84eaccfdc3ab69f6ce9ea8e603ae3d0e9d994045336eff450f43b89f0b92f63e4914c47f3a + languageName: node + linkType: hard + "@expo/devcert@npm:^1.1.2": version: 1.1.4 resolution: "@expo/devcert@npm:1.1.4" @@ -1420,6 +1545,32 @@ __metadata: languageName: node linkType: hard +"@expo/metro-config@npm:0.19.12, @expo/metro-config@npm:~0.19.12": + version: 0.19.12 + resolution: "@expo/metro-config@npm:0.19.12" + dependencies: + "@babel/core": ^7.20.0 + "@babel/generator": ^7.20.5 + "@babel/parser": ^7.20.0 + "@babel/types": ^7.20.0 + "@expo/config": ~10.0.11 + "@expo/env": ~0.4.2 + "@expo/json-file": ~9.0.2 + "@expo/spawn-async": ^1.7.2 + chalk: ^4.1.0 + debug: ^4.3.2 + fs-extra: ^9.1.0 + getenv: ^1.0.0 + glob: ^10.4.2 + jsc-safe-url: ^0.2.4 + lightningcss: ~1.27.0 + minimatch: ^3.0.4 + postcss: ~8.4.32 + resolve-from: ^5.0.0 + checksum: 241934860fcf90575de47d67a6de5c701b51e16069a7007c15fac5addc04a66663e66800241aac63635761921829c2c6895217fd2bf6b8d95a00c2e1c664dfc3 + languageName: node + linkType: hard + "@expo/osascript@npm:^2.1.6": version: 2.1.6 resolution: "@expo/osascript@npm:2.1.6" @@ -1480,6 +1631,25 @@ __metadata: languageName: node linkType: hard +"@expo/prebuild-config@npm:~8.2.0": + version: 8.2.0 + resolution: "@expo/prebuild-config@npm:8.2.0" + dependencies: + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@react-native/normalize-colors": 0.76.9 + debug: ^4.3.1 + fs-extra: ^9.0.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + xml2js: 0.6.0 + checksum: 5c9d194e63cc4ec9ba3076179832ce928208e09846981cccc6f07e70742b1d7a29bf7594788543578ced75a42fbc0d4a624c4bd7af73e755d220170090f0b2e5 + languageName: node + linkType: hard + "@expo/rudder-sdk-node@npm:^1.1.1": version: 1.1.1 resolution: "@expo/rudder-sdk-node@npm:1.1.1" @@ -1789,26 +1959,10 @@ __metadata: languageName: node linkType: hard -"@react-native/assets-registry@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/assets-registry@npm:0.76.3" - checksum: 0a5c3d63eec8ce9e29be9e0cca6aa0bc62580b9820caf948fc44574be75e166b836caa1cd4b53550c880996b36389fb8f2b18652c3e6abeddecc9ca835cd9296 - languageName: node - linkType: hard - -"@react-native/assets-registry@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/assets-registry@npm:0.76.7" - checksum: f197582ad2e2964f5a6afa5a8945b368b7a6fe05cd9fac78e4832ad969cd8b5ad72e048f0c652ce5b4dd1ed7bf28e36254e49d3b7317b16d4481600482259048 - languageName: node - linkType: hard - -"@react-native/babel-plugin-codegen@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/babel-plugin-codegen@npm:0.76.3" - dependencies: - "@react-native/codegen": 0.76.3 - checksum: db24d3d7f89d1aca30fd1a5050deb86982aba54c7df5ac5dc73bcae4ba07275a08af92db1ae383e44366ba206f941333d2a972672db8a57cbd825f4bacea5c0c +"@react-native/assets-registry@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/assets-registry@npm:0.76.9" + checksum: 07e7da7a20745b6bdea99620e50d69c76219b7232b21cc43982696123a330cebd9d24e1a4be2a61588ab3af5155557e651267dfad9c91ad0bc8e098e6e7ad38f languageName: node linkType: hard @@ -1821,9 +1975,18 @@ __metadata: languageName: node linkType: hard -"@react-native/babel-preset@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/babel-preset@npm:0.76.3" +"@react-native/babel-plugin-codegen@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/babel-plugin-codegen@npm:0.76.9" + dependencies: + "@react-native/codegen": 0.76.9 + checksum: 13bba234a6c9e29fa4f7bf13a23ce8aecc5fc00da6cef6f6dd0462f82cdfeeeca62842c054ffe626662a92326774bf22723a90be5ac2158990386422ceee96c5 + languageName: node + linkType: hard + +"@react-native/babel-preset@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/babel-preset@npm:0.76.7" dependencies: "@babel/core": ^7.25.2 "@babel/plugin-proposal-export-default-from": ^7.24.7 @@ -1866,19 +2029,19 @@ __metadata: "@babel/plugin-transform-typescript": ^7.25.2 "@babel/plugin-transform-unicode-regex": ^7.24.7 "@babel/template": ^7.25.0 - "@react-native/babel-plugin-codegen": 0.76.3 + "@react-native/babel-plugin-codegen": 0.76.7 babel-plugin-syntax-hermes-parser: ^0.25.1 babel-plugin-transform-flow-enums: ^0.0.2 react-refresh: ^0.14.0 peerDependencies: "@babel/core": "*" - checksum: 012476667ad1596a0ae45b0b0d0404af724766aa170b22a80f56c4302060e2f5b90bef24a41aef2dd12cbe672a31b8c5c13f72b974cfaad004aef452ac17995c + checksum: 29b48f80d32839d03f17d938e3f2b34f213d6ac3155de9556016132d4e3b9d55ce2b3d18fcd596ba6507f6bbe64174a76c5e94cc3737b39f00467c455de6b2d4 languageName: node linkType: hard -"@react-native/babel-preset@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/babel-preset@npm:0.76.7" +"@react-native/babel-preset@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/babel-preset@npm:0.76.9" dependencies: "@babel/core": ^7.25.2 "@babel/plugin-proposal-export-default-from": ^7.24.7 @@ -1921,19 +2084,19 @@ __metadata: "@babel/plugin-transform-typescript": ^7.25.2 "@babel/plugin-transform-unicode-regex": ^7.24.7 "@babel/template": ^7.25.0 - "@react-native/babel-plugin-codegen": 0.76.7 + "@react-native/babel-plugin-codegen": 0.76.9 babel-plugin-syntax-hermes-parser: ^0.25.1 babel-plugin-transform-flow-enums: ^0.0.2 react-refresh: ^0.14.0 peerDependencies: "@babel/core": "*" - checksum: 29b48f80d32839d03f17d938e3f2b34f213d6ac3155de9556016132d4e3b9d55ce2b3d18fcd596ba6507f6bbe64174a76c5e94cc3737b39f00467c455de6b2d4 + checksum: b48ac1195d4b52a14134f3dbfa26771aa66db0b787ebced6153d7c60802f1b959a3cf07b873da1b085e7db9b527507d1111302bb177ad52d7c77d635b6f3805b languageName: node linkType: hard -"@react-native/codegen@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/codegen@npm:0.76.3" +"@react-native/codegen@npm:0.76.7": + version: 0.76.7 + resolution: "@react-native/codegen@npm:0.76.7" dependencies: "@babel/parser": ^7.25.3 glob: ^7.1.1 @@ -1945,13 +2108,13 @@ __metadata: yargs: ^17.6.2 peerDependencies: "@babel/preset-env": ^7.1.6 - checksum: 5e9677695dcddabcd045ee448472cdecb13d6db216d021a21e29830487cfaef790ff6c1e59de06a7d70d18cc816dcd939c2cbbfa5c58b78b27d04f3cbacbc5ac + checksum: f5f332c334b0bae892c7f3986c87f20c052b2b1ca9fc927fc91db012e1f062d8feaa01dc2e09d64454ce4e36dc0571d73ae3cb3a2d2aeba485ddc0c3d0e80aa1 languageName: node linkType: hard -"@react-native/codegen@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/codegen@npm:0.76.7" +"@react-native/codegen@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/codegen@npm:0.76.9" dependencies: "@babel/parser": ^7.25.3 glob: ^7.1.1 @@ -1963,16 +2126,16 @@ __metadata: yargs: ^17.6.2 peerDependencies: "@babel/preset-env": ^7.1.6 - checksum: f5f332c334b0bae892c7f3986c87f20c052b2b1ca9fc927fc91db012e1f062d8feaa01dc2e09d64454ce4e36dc0571d73ae3cb3a2d2aeba485ddc0c3d0e80aa1 + checksum: fcb26bd5be6f923eafd05e356ab01c9bbd30cab5e950bb050312a651771bcb2cb8484a3ba511e1460d44f508700565b0b69d43039c8cc61e63b9eacca6b9c756 languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/community-cli-plugin@npm:0.76.3" +"@react-native/community-cli-plugin@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/community-cli-plugin@npm:0.76.9" dependencies: - "@react-native/dev-middleware": 0.76.3 - "@react-native/metro-babel-transformer": 0.76.3 + "@react-native/dev-middleware": 0.76.9 + "@react-native/metro-babel-transformer": 0.76.9 chalk: ^4.0.0 execa: ^5.1.1 invariant: ^2.2.4 @@ -1983,77 +2146,54 @@ __metadata: readline: ^1.3.0 semver: ^7.1.3 peerDependencies: - "@react-native-community/cli-server-api": "*" + "@react-native-community/cli": "*" peerDependenciesMeta: - "@react-native-community/cli-server-api": + "@react-native-community/cli": optional: true - checksum: 7d3c76ac702f97a8d75ad1d8e0cedfef7061ed25ed26dde7d39214a26a42b8c594bc8ba9d1cfa8e83fae0069828340b207c771677431619bd1039aa99d9d8032 + checksum: 1c0c054d20b3b4c978928e80aa5e56cadeb8dfc1c80a374f67a23e80e2acac0fff5aea0b3f6413483f1ba2bad6a65749e8105dd0ebf2dcd6b045f88e3d7c8d24 languageName: node linkType: hard -"@react-native/community-cli-plugin@npm:0.76.7": +"@react-native/debugger-frontend@npm:0.76.7": version: 0.76.7 - resolution: "@react-native/community-cli-plugin@npm:0.76.7" - dependencies: - "@react-native/dev-middleware": 0.76.7 - "@react-native/metro-babel-transformer": 0.76.7 - chalk: ^4.0.0 - execa: ^5.1.1 - invariant: ^2.2.4 - metro: ^0.81.0 - metro-config: ^0.81.0 - metro-core: ^0.81.0 - node-fetch: ^2.2.0 - readline: ^1.3.0 - semver: ^7.1.3 - peerDependencies: - "@react-native-community/cli-server-api": "*" - peerDependenciesMeta: - "@react-native-community/cli-server-api": - optional: true - checksum: e6bfaf10dc941388b4342335ba3058728cd48b11315bd419012540ca5a3b5f1141fa42b61eff8271ccbe127d33a4f2b4de5956c9d2225fc1dff27e9846592670 + resolution: "@react-native/debugger-frontend@npm:0.76.7" + checksum: 3ef73a8e5f281d73b17f2b5834d803665506726a77e660a610b0b6511aedf26c82e92fdcf782e1d214c79b70432323f8116f11977f81ed3969c2af9f68f5c903 languageName: node linkType: hard -"@react-native/debugger-frontend@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/debugger-frontend@npm:0.76.3" - checksum: 549fea784b9e03a0e4bb05befea92af096705595e34fa6540873b1f00641ceaac3dafaeda212dd80d049f82d0929852c7fb1870bd823158ad780a5c2edfdcf0a +"@react-native/debugger-frontend@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/debugger-frontend@npm:0.76.9" + checksum: c537ae5be75bb9a0a549d88b6545762364d87a1166c8a7339ccd774257096a2c62f83efdd86c78553a3f1c4ef35cfa7708aba477bf6eeb76b7814ceab2b98069 languageName: node linkType: hard -"@react-native/debugger-frontend@npm:0.76.7": +"@react-native/dev-middleware@npm:0.76.7": version: 0.76.7 - resolution: "@react-native/debugger-frontend@npm:0.76.7" - checksum: 3ef73a8e5f281d73b17f2b5834d803665506726a77e660a610b0b6511aedf26c82e92fdcf782e1d214c79b70432323f8116f11977f81ed3969c2af9f68f5c903 - languageName: node - linkType: hard - -"@react-native/dev-middleware@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/dev-middleware@npm:0.76.3" + resolution: "@react-native/dev-middleware@npm:0.76.7" dependencies: "@isaacs/ttlcache": ^1.4.1 - "@react-native/debugger-frontend": 0.76.3 + "@react-native/debugger-frontend": 0.76.7 chrome-launcher: ^0.15.2 chromium-edge-launcher: ^0.2.0 connect: ^3.6.5 debug: ^2.2.0 + invariant: ^2.2.4 nullthrows: ^1.1.1 open: ^7.0.3 selfsigned: ^2.4.1 serve-static: ^1.13.1 ws: ^6.2.3 - checksum: 77acfecd6b59594d892afb63efcc54474a38278f233db6163bdf66329603bdb485dc304e0c9a58c5c19c1d7397cfb6b76f08bd5f136d130052db9d73ae6b74b5 + checksum: cc23a959299cd97e0960915a211ebe36a3c36161111bd8f627a5ab6c78a98ddbb893ac52313d6cd11b4c0c35324b8f2a0806676e255e2b0bf578e0aab71414a2 languageName: node linkType: hard -"@react-native/dev-middleware@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/dev-middleware@npm:0.76.7" +"@react-native/dev-middleware@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/dev-middleware@npm:0.76.9" dependencies: "@isaacs/ttlcache": ^1.4.1 - "@react-native/debugger-frontend": 0.76.7 + "@react-native/debugger-frontend": 0.76.9 chrome-launcher: ^0.15.2 chromium-edge-launcher: ^0.2.0 connect: ^3.6.5 @@ -2064,63 +2204,56 @@ __metadata: selfsigned: ^2.4.1 serve-static: ^1.13.1 ws: ^6.2.3 - checksum: cc23a959299cd97e0960915a211ebe36a3c36161111bd8f627a5ab6c78a98ddbb893ac52313d6cd11b4c0c35324b8f2a0806676e255e2b0bf578e0aab71414a2 + checksum: 1f7750ae0c4d4d7970a73cd4f8443004a93b91b998a003ddb965274eb718d2a70ff06d182903dcaeccf15d8d245f488a397ea8ae53f6ed5f25e4d476d844b90f languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/gradle-plugin@npm:0.76.3" - checksum: 7bde3ae9cbf21f59adc5583cfe25d245ca2921f50d50361e763a59bb02398206c93e61c935a4605609de7e1fe49450594ff56b0b9ccecc07065dbe4c9e9217c6 +"@react-native/gradle-plugin@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/gradle-plugin@npm:0.76.9" + checksum: afc6010cf278ed7dba58fb67cb789965edb6cfb3608e54b518232ef46b651f541915b7f6eae0b298457ccd8626213c687962ec250143e714de5e3bd2dc6dc210 languageName: node linkType: hard -"@react-native/gradle-plugin@npm:0.76.7": +"@react-native/js-polyfills@npm:0.76.7": version: 0.76.7 - resolution: "@react-native/gradle-plugin@npm:0.76.7" - checksum: 4a0b1150a9338ade0fb75a036b63d681243ab93c19dea676ac02c59f7b16b28fafe8e2e6106ff0de33d0ad4a1ac358eb90fa9a2b6e9bbc55ffb449f1098329db + resolution: "@react-native/js-polyfills@npm:0.76.7" + checksum: 6dbf035366c6a22e8f868c2e1f69ea6340d8e975e0d9ae6db6c469a37f58bdcdceb355684b3af53d3e76d7d7ff0db56dd6a5be39c9e54d7973c3256b80f1170e languageName: node linkType: hard -"@react-native/js-polyfills@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/js-polyfills@npm:0.76.3" - checksum: a33145ee39fe9de0e8b4b3a25cd263d775fe14ac3c4f77c4dc6a77a60c06febacdcefd7271c9aaa2a13336bada413601e3fa3de51eb7e44387b53055d99a1b69 +"@react-native/js-polyfills@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/js-polyfills@npm:0.76.9" + checksum: c49aac99f6973b102a9013632c204f02a57d96da500901bc6730ab96f56950d6924417e39c87be640a3a59b67e1af2583432361f55bf42c959aff02a285bcafc languageName: node linkType: hard -"@react-native/js-polyfills@npm:0.76.7": +"@react-native/metro-babel-transformer@npm:0.76.7": version: 0.76.7 - resolution: "@react-native/js-polyfills@npm:0.76.7" - checksum: 6dbf035366c6a22e8f868c2e1f69ea6340d8e975e0d9ae6db6c469a37f58bdcdceb355684b3af53d3e76d7d7ff0db56dd6a5be39c9e54d7973c3256b80f1170e - languageName: node - linkType: hard - -"@react-native/metro-babel-transformer@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/metro-babel-transformer@npm:0.76.3" + resolution: "@react-native/metro-babel-transformer@npm:0.76.7" dependencies: "@babel/core": ^7.25.2 - "@react-native/babel-preset": 0.76.3 + "@react-native/babel-preset": 0.76.7 hermes-parser: 0.23.1 nullthrows: ^1.1.1 peerDependencies: "@babel/core": "*" - checksum: 26be14f178dbfac8f8c75c8c2a87e582e274f4f8fc8f8860e804de042167238b80d8606a1357296240aa59085a9275e4be6797a80afdeed2cbcaa7cf7d8c1793 + checksum: 26af0564de9bc6c734dd5a08699d74ccded819c7afc0841b4a04e415ed7c4d2ea6f51edb3df23e86da8bd7601db8df38daf16aa83363c2aafee4dd4faf65857d languageName: node linkType: hard -"@react-native/metro-babel-transformer@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/metro-babel-transformer@npm:0.76.7" +"@react-native/metro-babel-transformer@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/metro-babel-transformer@npm:0.76.9" dependencies: "@babel/core": ^7.25.2 - "@react-native/babel-preset": 0.76.7 + "@react-native/babel-preset": 0.76.9 hermes-parser: 0.23.1 nullthrows: ^1.1.1 peerDependencies: "@babel/core": "*" - checksum: 26af0564de9bc6c734dd5a08699d74ccded819c7afc0841b4a04e415ed7c4d2ea6f51edb3df23e86da8bd7601db8df38daf16aa83363c2aafee4dd4faf65857d + checksum: cb38d150e30b3e07e2cb8e637e26b4dcb8b58d6accc95f51e507baea94bb970a0077573c319849a3e7d9bf976dadc39cf363bb505f53de1a209e1bb9ea0428f8 languageName: node linkType: hard @@ -2136,13 +2269,6 @@ __metadata: languageName: node linkType: hard -"@react-native/normalize-colors@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/normalize-colors@npm:0.76.3" - checksum: 71ce0cbaa52fc87552b0ad83dd3ebd0a76253b7aacdc82ead09a0ada6349457b9927ed10452cb63b89fc18d793852eafaec18f2c79603dbf9dcadb676b2db477 - languageName: node - linkType: hard - "@react-native/normalize-colors@npm:0.76.7": version: 0.76.7 resolution: "@react-native/normalize-colors@npm:0.76.7" @@ -2150,26 +2276,16 @@ __metadata: languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.76.3": - version: 0.76.3 - resolution: "@react-native/virtualized-lists@npm:0.76.3" - dependencies: - invariant: ^2.2.4 - nullthrows: ^1.1.1 - peerDependencies: - "@types/react": ^18.2.6 - react: "*" - react-native: "*" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: b84df110406651a025b9d798cb4511bc7c6db37b44ec885c92bbbc9a220bdd77837a13116d54fe59c16d35ffff013e3c87c28ffa870eb9b9f840d779cef68f90 +"@react-native/normalize-colors@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/normalize-colors@npm:0.76.9" + checksum: 4fddb977b8aad2e848cb698f13b9ffec539668e8ae891846327d5e23ce3de13dea59a2dfbea8a154ea034791c7abc3f7d1d4c8caae2114f7a683c78b221aed36 languageName: node linkType: hard -"@react-native/virtualized-lists@npm:0.76.7": - version: 0.76.7 - resolution: "@react-native/virtualized-lists@npm:0.76.7" +"@react-native/virtualized-lists@npm:0.76.9": + version: 0.76.9 + resolution: "@react-native/virtualized-lists@npm:0.76.9" dependencies: invariant: ^2.2.4 nullthrows: ^1.1.1 @@ -2180,7 +2296,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: a25311d70a3ebb6fddd0e5257c9be3f24e7e67e0a86ed17864ff93cfb77d849a952996a613473bc9a6851e0eac16a1d45ac71a3a43719226851e4910907d726f + checksum: 697a04bdf4b5f430164bf666bf60cd0207f4d3fb06b0a62d7c39b54c166973b29c73640e5c1a44f1c6891d93398bedd63eb8addcbe78641d7ebb13b9ab022052 languageName: node linkType: hard @@ -2893,6 +3009,31 @@ __metadata: languageName: node linkType: hard +"babel-preset-expo@npm:~12.0.11": + version: 12.0.11 + resolution: "babel-preset-expo@npm:12.0.11" + dependencies: + "@babel/plugin-proposal-decorators": ^7.12.9 + "@babel/plugin-transform-export-namespace-from": ^7.22.11 + "@babel/plugin-transform-object-rest-spread": ^7.12.13 + "@babel/plugin-transform-parameters": ^7.22.15 + "@babel/preset-react": ^7.22.15 + "@babel/preset-typescript": ^7.23.0 + "@react-native/babel-preset": 0.76.9 + babel-plugin-react-native-web: ~0.19.13 + react-refresh: ^0.14.2 + peerDependencies: + babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 + react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 + peerDependenciesMeta: + babel-plugin-react-compiler: + optional: true + react-compiler-runtime: + optional: true + checksum: 8ff4437a5e3ea229c22ad2de645abc452f05fe55bc72b2586e4cfe675fcc6b3c83779c1a18343364d200b988cac5e60eed6e616a29eb1446e2294236f9f60d3f + languageName: node + linkType: hard + "babel-preset-expo@npm:~12.0.9": version: 12.0.9 resolution: "babel-preset-expo@npm:12.0.9" @@ -4102,6 +4243,22 @@ __metadata: languageName: node linkType: hard +"expo-asset@npm:~11.0.5": + version: 11.0.5 + resolution: "expo-asset@npm:11.0.5" + dependencies: + "@expo/image-utils": ^0.6.5 + expo-constants: ~17.0.8 + invariant: ^2.2.4 + md5-file: ^3.2.3 + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 7650dc032f76b0924eedaf24dee135b293e5c3258e0a9e43a6db7c93ef40ea6b6d6a47432bf80f3051f3b62e40a6ccb25e8acca820baa791d52a2e95432868bc + languageName: node + linkType: hard + "expo-constants@npm:~17.0.7": version: 17.0.7 resolution: "expo-constants@npm:17.0.7" @@ -4115,6 +4272,19 @@ __metadata: languageName: node linkType: hard +"expo-constants@npm:~17.0.8": + version: 17.0.8 + resolution: "expo-constants@npm:17.0.8" + dependencies: + "@expo/config": ~10.0.11 + "@expo/env": ~0.4.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 493e18f8ea2c49efd69aae37b756ede1c37ecc29ac9bd5c23cb2ca88dbc57109c7f915196bcfaab71ceca2141e9a9806a685f8ac787fa206af7f1391be2e09f2 + languageName: node + linkType: hard + "expo-file-system@npm:^18.0.10, expo-file-system@npm:~18.0.11": version: 18.0.11 resolution: "expo-file-system@npm:18.0.11" @@ -4127,6 +4297,18 @@ __metadata: languageName: node linkType: hard +"expo-file-system@npm:~18.0.12": + version: 18.0.12 + resolution: "expo-file-system@npm:18.0.12" + dependencies: + web-streams-polyfill: ^3.3.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 9724e2a9da1cf596d82920cf3cec3d4d6e6544d3b057c7e5895d2aac6f2fc30d9f963774198254fcde707030974407b13a4da7558160fc2278fc388cb183d253 + languageName: node + linkType: hard + "expo-font@npm:^13.0.1, expo-font@npm:~13.0.4": version: 13.0.4 resolution: "expo-font@npm:13.0.4" @@ -4176,6 +4358,15 @@ __metadata: languageName: node linkType: hard +"expo-modules-core@npm:2.2.3": + version: 2.2.3 + resolution: "expo-modules-core@npm:2.2.3" + dependencies: + invariant: ^2.2.4 + checksum: 7b2952f1220b55eb03f395d1549525edeb5bff7bf805257d9652ea4ef85ea71e34ad13b5971f1b559e7aa080f41130846b24cbe3d754660c08196c3ce899143b + languageName: node + linkType: hard + "expo-status-bar@npm:~2.0.0": version: 2.0.1 resolution: "expo-status-bar@npm:2.0.1" @@ -4186,7 +4377,7 @@ __metadata: languageName: node linkType: hard -"expo@npm:^52.0.37, expo@npm:~52.0.17": +"expo@npm:^52.0.37": version: 52.0.37 resolution: "expo@npm:52.0.37" dependencies: @@ -4227,6 +4418,49 @@ __metadata: languageName: node linkType: hard +"expo@npm:~52.0.46": + version: 52.0.46 + resolution: "expo@npm:52.0.46" + dependencies: + "@babel/runtime": ^7.20.0 + "@expo/cli": 0.22.26 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/fingerprint": 0.11.11 + "@expo/metro-config": 0.19.12 + "@expo/vector-icons": ^14.0.0 + babel-preset-expo: ~12.0.11 + expo-asset: ~11.0.5 + expo-constants: ~17.0.8 + expo-file-system: ~18.0.12 + expo-font: ~13.0.4 + expo-keep-awake: ~14.0.3 + expo-modules-autolinking: 2.0.8 + expo-modules-core: 2.2.3 + fbemitter: ^3.0.0 + web-streams-polyfill: ^3.3.2 + whatwg-url-without-unicode: 8.0.0-3 + peerDependencies: + "@expo/dom-webview": "*" + "@expo/metro-runtime": "*" + react: "*" + react-native: "*" + react-native-webview: "*" + peerDependenciesMeta: + "@expo/dom-webview": + optional: true + "@expo/metro-runtime": + optional: true + react-native-webview: + optional: true + bin: + expo: bin/cli + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: 603b4fa89edf9c2aaf8741818bdd5ca46195a461093ecb2c1855164ba9799d2a590a1424f2e11ae7d97f2f8fe64928516a84b8c8ecfbe5a1dad09a5c0edca83e + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.2 resolution: "exponential-backoff@npm:3.1.2" @@ -6964,21 +7198,18 @@ __metadata: languageName: node linkType: hard -"react-native-executorch@npm:^0.3.0": - version: 0.3.1 - resolution: "react-native-executorch@npm:0.3.1" +"react-native-executorch@npm:^0.3.2": + version: 0.3.2 + resolution: "react-native-executorch@npm:0.3.2" dependencies: expo: ^52.0.37 expo-asset: ^11.0.3 expo-file-system: ^18.0.10 - react: 18.3.1 - react-native: 0.76.7 react-native-live-audio-stream: ^1.1.1 peerDependencies: react: "*" react-native: "*" - react-native-audio-api: "*" - checksum: 5912a8ce85432ecf1657cab241903daba7f04e08aba2b99026705c97126efa599305a88e511ff735d424bc02055492672f7ad915af69b87b93350bb429d4c1e1 + checksum: c5ac5f0739186e05cc5bd5b7d03c9a8709ff037c0704e4cce12a489b20ac3dc572a454088c9cb81828abce755d576e980db1ef55fc64659ca0cfc0962789ab62 languageName: node linkType: hard @@ -6992,16 +7223,6 @@ __metadata: languageName: node linkType: hard -"react-native-is-edge-to-edge@npm:1.1.6": - version: 1.1.6 - resolution: "react-native-is-edge-to-edge@npm:1.1.6" - peerDependencies: - react: ">=18.2.0" - react-native: ">=0.73.0" - checksum: 4e07c1e34c01c8d50fd7c1d0460db06f6f0515197405230386a8ffb950cb724b10743af032310d1384df0a90059bfb8992ba2d93344ce86315315f0493feccc2 - languageName: node - linkType: hard - "react-native-live-audio-stream@npm:^1.1.1": version: 1.1.1 resolution: "react-native-live-audio-stream@npm:1.1.1" @@ -7019,9 +7240,9 @@ __metadata: languageName: node linkType: hard -"react-native-reanimated@npm:^3.16.3": - version: 3.17.1 - resolution: "react-native-reanimated@npm:3.17.1" +"react-native-reanimated@npm:~3.16.1": + version: 3.16.7 + resolution: "react-native-reanimated@npm:3.16.7" dependencies: "@babel/plugin-transform-arrow-functions": ^7.0.0-0 "@babel/plugin-transform-class-properties": ^7.0.0-0 @@ -7034,22 +7255,21 @@ __metadata: "@babel/preset-typescript": ^7.16.7 convert-source-map: ^2.0.0 invariant: ^2.2.4 - react-native-is-edge-to-edge: 1.1.6 peerDependencies: "@babel/core": ^7.0.0-0 react: "*" react-native: "*" - checksum: fd05040a3fc6a8f4efb387657c0cd6c314e5e6b50f859e127d6891d8f81c65b020ddcf78615aa0074b4e134e450d38c40db916c544e1e2efa26c50c82815607d + checksum: 108095709cd7a3effc5b5d276d94e161b399bd2d06e32140834168a0051545401bb09228071447e5925571da3f86f335d2a82c76751cdae07f66faf50b25c97f languageName: node linkType: hard -"react-native-safe-area-context@npm:^5.0.0": - version: 5.3.0 - resolution: "react-native-safe-area-context@npm:5.3.0" +"react-native-safe-area-context@npm:4.12.0": + version: 4.12.0 + resolution: "react-native-safe-area-context@npm:4.12.0" peerDependencies: react: "*" react-native: "*" - checksum: 21f18b1286fc7bc6f38f864b7468848c16c58106ae429633e8f655dabb80571beba19ac8aa8bc5e1b2e926d75afddd7ded919a56450aa00c36d56f7fb421f782 + checksum: 04a751afed448b31dc401f0e8ecf9cf3edc4fe77b5c16cb7bc2a70381c3a2ffa54f42a313a46ad7deec0aff74a3f5650cf49db0264ba4a6c4f6a1d69ecf489fd languageName: node linkType: hard @@ -7068,9 +7288,9 @@ __metadata: languageName: node linkType: hard -"react-native-svg@npm:^15.9.0": - version: 15.11.2 - resolution: "react-native-svg@npm:15.11.2" +"react-native-svg@npm:15.8.0": + version: 15.8.0 + resolution: "react-native-svg@npm:15.8.0" dependencies: css-select: ^5.1.0 css-tree: ^1.1.3 @@ -7078,7 +7298,7 @@ __metadata: peerDependencies: react: "*" react-native: "*" - checksum: 7bc2d9a5b7ceb66905e358d995bf102d63ce017db40b024d31a6ada03c21733fd3620f9ad867d631b878e2380033ea8777e75c4f654bc5b420ea902695ed9ba8 + checksum: ad9d6093f3aef0d53c5e2a562afb7805009f2bf50fd4ec6e77f8c18a6cb7e06a7793d55cc66d523c7d30c77cae170ee26767c72ad5b1a1f07032420ccf4162fe languageName: node linkType: hard @@ -7095,72 +7315,18 @@ __metadata: languageName: node linkType: hard -"react-native@npm:0.76.3": - version: 0.76.3 - resolution: "react-native@npm:0.76.3" +"react-native@npm:0.76.9": + version: 0.76.9 + resolution: "react-native@npm:0.76.9" dependencies: "@jest/create-cache-key-function": ^29.6.3 - "@react-native/assets-registry": 0.76.3 - "@react-native/codegen": 0.76.3 - "@react-native/community-cli-plugin": 0.76.3 - "@react-native/gradle-plugin": 0.76.3 - "@react-native/js-polyfills": 0.76.3 - "@react-native/normalize-colors": 0.76.3 - "@react-native/virtualized-lists": 0.76.3 - abort-controller: ^3.0.0 - anser: ^1.4.9 - ansi-regex: ^5.0.0 - babel-jest: ^29.7.0 - babel-plugin-syntax-hermes-parser: ^0.23.1 - base64-js: ^1.5.1 - chalk: ^4.0.0 - commander: ^12.0.0 - event-target-shim: ^5.0.1 - flow-enums-runtime: ^0.0.6 - glob: ^7.1.1 - invariant: ^2.2.4 - jest-environment-node: ^29.6.3 - jsc-android: ^250231.0.0 - memoize-one: ^5.0.0 - metro-runtime: ^0.81.0 - metro-source-map: ^0.81.0 - mkdirp: ^0.5.1 - nullthrows: ^1.1.1 - pretty-format: ^29.7.0 - promise: ^8.3.0 - react-devtools-core: ^5.3.1 - react-refresh: ^0.14.0 - regenerator-runtime: ^0.13.2 - scheduler: 0.24.0-canary-efb381bbf-20230505 - semver: ^7.1.3 - stacktrace-parser: ^0.1.10 - whatwg-fetch: ^3.0.0 - ws: ^6.2.3 - yargs: ^17.6.2 - peerDependencies: - "@types/react": ^18.2.6 - react: ^18.2.0 - peerDependenciesMeta: - "@types/react": - optional: true - bin: - react-native: cli.js - checksum: 0a2fbb7c1ff0057f69b23447980e912bc42df1c1e6c4be504f8e1d4c7c2182b3ca02b5f217bdf89b82a07d523b1e0e0f3124f3cf5f5876f5fa47f845cdba1c7a - languageName: node - linkType: hard - -"react-native@npm:0.76.7": - version: 0.76.7 - resolution: "react-native@npm:0.76.7" - dependencies: - "@jest/create-cache-key-function": ^29.6.3 - "@react-native/assets-registry": 0.76.7 - "@react-native/codegen": 0.76.7 - "@react-native/community-cli-plugin": 0.76.7 - "@react-native/gradle-plugin": 0.76.7 - "@react-native/js-polyfills": 0.76.7 - "@react-native/normalize-colors": 0.76.7 - "@react-native/virtualized-lists": 0.76.7 + "@react-native/assets-registry": 0.76.9 + "@react-native/codegen": 0.76.9 + "@react-native/community-cli-plugin": 0.76.9 + "@react-native/gradle-plugin": 0.76.9 + "@react-native/js-polyfills": 0.76.9 + "@react-native/normalize-colors": 0.76.9 + "@react-native/virtualized-lists": 0.76.9 abort-controller: ^3.0.0 anser: ^1.4.9 ansi-regex: ^5.0.0 @@ -7199,7 +7365,7 @@ __metadata: optional: true bin: react-native: cli.js - checksum: a3ec730c2b5583420e8f99fd53da38dbfc2f440ebbc0480453d43338076eb67f7dc9f06d7b1ed32113bf3efb62b7cf64e04f29b19370cf9bcb16b756dcec9874 + checksum: cf621cef0649920bac2b730998be6eaaf9762d516bc65d9073b46f634bb640dfb6b9b5d64ce6a6e09da64d52d114d96d96435a91c9db8ec61b76c818fe209827 languageName: node linkType: hard @@ -7799,21 +7965,21 @@ __metadata: "@react-native/metro-config": ^0.76.3 "@types/react": ~18.3.12 buffer: ^6.0.3 - expo: ~52.0.17 + expo: ~52.0.46 expo-font: ^13.0.1 expo-status-bar: ~2.0.0 metro-config: ^0.81.0 react: 18.3.1 - react-native: 0.76.3 + react-native: 0.76.9 react-native-audio-api: 0.4.11 react-native-device-info: ^14.0.4 - react-native-executorch: ^0.3.0 + react-native-executorch: ^0.3.2 react-native-image-picker: ^7.2.2 react-native-live-audio-stream: ^1.1.1 react-native-loading-spinner-overlay: ^3.0.1 - react-native-reanimated: ^3.16.3 - react-native-safe-area-context: ^5.0.0 - react-native-svg: ^15.9.0 + react-native-reanimated: ~3.16.1 + react-native-safe-area-context: 4.12.0 + react-native-svg: 15.8.0 react-native-svg-transformer: ^1.5.0 react-native-wheel-scrollview-picker: ^2.0.6 typescript: ^5.3.3 diff --git a/examples/text-embeddings/.gitignore b/examples/text-embeddings/.gitignore new file mode 100644 index 000000000..d7eba44af --- /dev/null +++ b/examples/text-embeddings/.gitignore @@ -0,0 +1,39 @@ +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +node_modules/ + +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* + +# debug +npm-debug.* +yarn-debug.* +yarn-error.* + +# macOS +.DS_Store +*.pem + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + +# yarn +.yarn \ No newline at end of file diff --git a/examples/text-embeddings/App.tsx b/examples/text-embeddings/App.tsx new file mode 100644 index 000000000..33b858182 --- /dev/null +++ b/examples/text-embeddings/App.tsx @@ -0,0 +1,264 @@ +import { useEffect, useState } from 'react'; +import { + StyleSheet, + Text, + TextInput, + TouchableOpacity, + View, + SafeAreaView, + ScrollView, + KeyboardAvoidingView, + Platform, +} from 'react-native'; +import { Ionicons } from '@expo/vector-icons'; +import { + useTextEmbeddings, + ALL_MINILM_L6_V2, + ALL_MINILM_L6_V2_TOKENIZER, +} from 'react-native-executorch'; + +export default function App() { + const model = useTextEmbeddings({ + modelSource: ALL_MINILM_L6_V2, + tokenizerSource: ALL_MINILM_L6_V2_TOKENIZER, + }); + + const [inputSentence, setInputSentence] = useState(''); + const [sentencesWithEmbeddings, setSentencesWithEmbeddings] = useState< + { sentence: string; embedding: number[] }[] + >([]); + const [topMatches, setTopMatches] = useState< + { sentence: string; similarity: number }[] + >([]); + + const dotProduct = (a: number[], b: number[]) => + a.reduce((sum, val, i) => sum + val * b[i], 0); + + useEffect( + () => { + const computeEmbeddings = async () => { + if (!model.isReady) return; + + const sentences = [ + 'The weather is lovely today.', + "It's so sunny outside!", + 'He drove to the stadium.', + ]; + + try { + const embeddings = await Promise.all( + sentences.map(async (sentence) => ({ + sentence, + embedding: await model.forward(sentence), + })) + ); + + setSentencesWithEmbeddings(embeddings); + } catch (error) { + console.error('Error generating embeddings:', error); + } + }; + + computeEmbeddings(); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [model.isReady] + ); + + const checkSimilarities = async () => { + if (!model.isReady || !inputSentence.trim()) return; + + try { + const inputEmbedding = await model.forward(inputSentence); + const matches = sentencesWithEmbeddings.map( + ({ sentence, embedding }) => ({ + sentence, + similarity: dotProduct(inputEmbedding, embedding), + }) + ); + matches.sort((a, b) => b.similarity - a.similarity); + setTopMatches(matches.slice(0, 3)); + } catch (error) { + console.error('Error generating embedding:', error); + } + }; + + const addToSentences = async () => { + if (!model.isReady || !inputSentence.trim()) return; + + try { + const embedding = await model.forward(inputSentence); + setSentencesWithEmbeddings((prev) => [ + ...prev, + { sentence: inputSentence, embedding }, + ]); + } catch (error) { + console.error('Error generating embedding:', error); + } + + setInputSentence(''); + setTopMatches([]); + }; + + const getModelStatusText = () => { + if (model.error) { + return `Oops! Error: ${model.error}`; + } + if (!model.isReady) { + return `Loading model ${(model.downloadProgress * 100).toFixed(2)}%`; + } + return model.isGenerating ? 'Generating...' : 'Model is ready'; + }; + + return ( + + + + Text Embeddings Playground + + {getModelStatusText()} + + + Existing Sentences + {sentencesWithEmbeddings.map((item, index) => ( + + - {item.sentence} + + ))} + + + + Try Your Sentence + + + + + + Find Similar + + + + Add to List + + + + {topMatches.length > 0 && ( + + Top Matches + {topMatches.map((item, index) => ( + + {item.sentence} ({item.similarity.toFixed(2)}) + + ))} + + )} + + + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#F8FAFC', + }, + scrollContainer: { + padding: 20, + alignItems: 'center', + flexGrow: 1, + }, + heading: { + fontSize: 24, + fontWeight: '500', + marginBottom: 20, + color: '#0F172A', + }, + card: { + backgroundColor: '#FFFFFF', + width: '100%', + padding: 16, + borderRadius: 16, + borderColor: '#E2E8F0', + borderWidth: 2, + marginBottom: 20, + }, + sectionTitle: { + fontSize: 18, + fontWeight: '500', + marginBottom: 12, + color: '#1E293B', + }, + sentenceText: { + fontSize: 14, + marginBottom: 6, + color: '#334155', + }, + input: { + backgroundColor: '#F1F5F9', + borderRadius: 10, + padding: 10, + marginBottom: 10, + fontSize: 16, + color: '#0F172A', + minHeight: 40, + textAlignVertical: 'top', + }, + buttonGroup: { + flexDirection: 'row', + justifyContent: 'space-between', + gap: 10, + }, + buttonPrimary: { + flex: 1, + backgroundColor: 'navy', + padding: 12, + borderRadius: 10, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + }, + buttonSecondary: { + flex: 1, + backgroundColor: 'transparent', + borderWidth: 2, + borderColor: 'navy', + padding: 12, + borderRadius: 10, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + }, + buttonText: { + color: 'white', + textAlign: 'center', + fontWeight: '500', + }, + buttonTextOutline: { + color: 'navy', + textAlign: 'center', + fontWeight: '500', + }, + topMatchesContainer: { + marginTop: 20, + }, + flexContainer: { + flex: 1, + }, +}); diff --git a/examples/text-embeddings/android/.gitignore b/examples/text-embeddings/android/.gitignore new file mode 100644 index 000000000..8a6be0771 --- /dev/null +++ b/examples/text-embeddings/android/.gitignore @@ -0,0 +1,16 @@ +# OSX +# +.DS_Store + +# Android/IntelliJ +# +build/ +.idea +.gradle +local.properties +*.iml +*.hprof +.cxx/ + +# Bundle artifacts +*.jsbundle diff --git a/examples/text-embeddings/android/app/build.gradle b/examples/text-embeddings/android/app/build.gradle new file mode 100644 index 000000000..65e44c671 --- /dev/null +++ b/examples/text-embeddings/android/app/build.gradle @@ -0,0 +1,176 @@ +apply plugin: "com.android.application" +apply plugin: "org.jetbrains.kotlin.android" +apply plugin: "com.facebook.react" + +def projectRoot = rootDir.getAbsoluteFile().getParentFile().getAbsolutePath() + +/** + * This is the configuration block to customize your React Native Android app. + * By default you don't need to apply any configuration, just uncomment the lines you need. + */ +react { + entryFile = file(["node", "-e", "require('expo/scripts/resolveAppEntry')", projectRoot, "android", "absolute"].execute(null, rootDir).text.trim()) + reactNativeDir = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + hermesCommand = new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/sdks/hermesc/%OS-BIN%/hermesc" + codegenDir = new File(["node", "--print", "require.resolve('@react-native/codegen/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().getAbsoluteFile() + + // Use Expo CLI to bundle the app, this ensures the Metro config + // works correctly with Expo projects. + cliFile = new File(["node", "--print", "require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })"].execute(null, rootDir).text.trim()) + bundleCommand = "export:embed" + + /* Folders */ + // The root of your project, i.e. where "package.json" lives. Default is '../..' + // root = file("../../") + // The folder where the react-native NPM package is. Default is ../../node_modules/react-native + // reactNativeDir = file("../../node_modules/react-native") + // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen + // codegenDir = file("../../node_modules/@react-native/codegen") + + /* Variants */ + // The list of variants to that are debuggable. For those we're going to + // skip the bundling of the JS bundle and the assets. By default is just 'debug'. + // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. + // debuggableVariants = ["liteDebug", "prodDebug"] + + /* Bundling */ + // A list containing the node command and its flags. Default is just 'node'. + // nodeExecutableAndArgs = ["node"] + + // + // The path to the CLI configuration file. Default is empty. + // bundleConfig = file(../rn-cli.config.js) + // + // The name of the generated asset file containing your JS bundle + // bundleAssetName = "MyApplication.android.bundle" + // + // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' + // entryFile = file("../js/MyApplication.android.js") + // + // A list of extra flags to pass to the 'bundle' commands. + // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle + // extraPackagerArgs = [] + + /* Hermes Commands */ + // The hermes compiler command to run. By default it is 'hermesc' + // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" + // + // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" + // hermesFlags = ["-O", "-output-source-map"] + + /* Autolinking */ + autolinkLibrariesWithApp() +} + +/** + * Set this to true to Run Proguard on Release builds to minify the Java bytecode. + */ +def enableProguardInReleaseBuilds = (findProperty('android.enableProguardInReleaseBuilds') ?: false).toBoolean() + +/** + * The preferred build flavor of JavaScriptCore (JSC) + * + * For example, to use the international variant, you can use: + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` + * + * The international variant includes ICU i18n library and necessary data + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that + * give correct results when using with locales other than en-US. Note that + * this variant is about 6MiB larger per architecture than default. + */ +def jscFlavor = 'org.webkit:android-jsc:+' + +android { + ndkVersion rootProject.ext.ndkVersion + + buildToolsVersion rootProject.ext.buildToolsVersion + compileSdk rootProject.ext.compileSdkVersion + + namespace 'com.anonymous.textembeddings' + defaultConfig { + applicationId 'com.anonymous.textembeddings' + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0.0" + } + signingConfigs { + debug { + storeFile file('debug.keystore') + storePassword 'android' + keyAlias 'androiddebugkey' + keyPassword 'android' + } + } + buildTypes { + debug { + signingConfig signingConfigs.debug + } + release { + // Caution! In production, you need to generate your own keystore file. + // see https://reactnative.dev/docs/signed-apk-android. + signingConfig signingConfigs.debug + shrinkResources (findProperty('android.enableShrinkResourcesInReleaseBuilds')?.toBoolean() ?: false) + minifyEnabled enableProguardInReleaseBuilds + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" + crunchPngs (findProperty('android.enablePngCrunchInReleaseBuilds')?.toBoolean() ?: true) + } + } + packagingOptions { + jniLibs { + useLegacyPackaging (findProperty('expo.useLegacyPackaging')?.toBoolean() ?: false) + } + } + androidResources { + ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~' + } +} + +// Apply static values from `gradle.properties` to the `android.packagingOptions` +// Accepts values in comma delimited lists, example: +// android.packagingOptions.pickFirsts=/LICENSE,**/picasa.ini +["pickFirsts", "excludes", "merges", "doNotStrip"].each { prop -> + // Split option: 'foo,bar' -> ['foo', 'bar'] + def options = (findProperty("android.packagingOptions.$prop") ?: "").split(","); + // Trim all elements in place. + for (i in 0.. 0) { + println "android.packagingOptions.$prop += $options ($options.length)" + // Ex: android.packagingOptions.pickFirsts += '**/SCCS/**' + options.each { + android.packagingOptions[prop] += it + } + } +} + +dependencies { + // The version of react-native is set by the React Native Gradle Plugin + implementation("com.facebook.react:react-android") + + def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true"; + def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true"; + def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true"; + + if (isGifEnabled) { + // For animated gif support + implementation("com.facebook.fresco:animated-gif:${reactAndroidLibs.versions.fresco.get()}") + } + + if (isWebpEnabled) { + // For webp support + implementation("com.facebook.fresco:webpsupport:${reactAndroidLibs.versions.fresco.get()}") + if (isWebpAnimatedEnabled) { + // Animated webp support + implementation("com.facebook.fresco:animated-webp:${reactAndroidLibs.versions.fresco.get()}") + } + } + + if (hermesEnabled.toBoolean()) { + implementation("com.facebook.react:hermes-android") + } else { + implementation jscFlavor + } +} diff --git a/examples/text-embeddings/android/app/debug.keystore b/examples/text-embeddings/android/app/debug.keystore new file mode 100644 index 000000000..364e105ed Binary files /dev/null and b/examples/text-embeddings/android/app/debug.keystore differ diff --git a/examples/text-embeddings/android/app/proguard-rules.pro b/examples/text-embeddings/android/app/proguard-rules.pro new file mode 100644 index 000000000..551eb41da --- /dev/null +++ b/examples/text-embeddings/android/app/proguard-rules.pro @@ -0,0 +1,14 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# react-native-reanimated +-keep class com.swmansion.reanimated.** { *; } +-keep class com.facebook.react.turbomodule.** { *; } + +# Add any project specific keep options here: diff --git a/examples/text-embeddings/android/app/src/debug/AndroidManifest.xml b/examples/text-embeddings/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..3ec2507ba --- /dev/null +++ b/examples/text-embeddings/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/examples/text-embeddings/android/app/src/main/AndroidManifest.xml b/examples/text-embeddings/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..22d9f1114 --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/llama/android/app/src/main/java/com/anonymous/llama/MainActivity.kt b/examples/text-embeddings/android/app/src/main/java/com/anonymous/textembeddings/MainActivity.kt similarity index 98% rename from examples/llama/android/app/src/main/java/com/anonymous/llama/MainActivity.kt rename to examples/text-embeddings/android/app/src/main/java/com/anonymous/textembeddings/MainActivity.kt index 80ee29d08..f27c51164 100644 --- a/examples/llama/android/app/src/main/java/com/anonymous/llama/MainActivity.kt +++ b/examples/text-embeddings/android/app/src/main/java/com/anonymous/textembeddings/MainActivity.kt @@ -1,4 +1,4 @@ -package com.anonymous.llama +package com.anonymous.textembeddings import android.os.Build import android.os.Bundle diff --git a/examples/llama/android/app/src/main/java/com/anonymous/llama/MainApplication.kt b/examples/text-embeddings/android/app/src/main/java/com/anonymous/textembeddings/MainApplication.kt similarity index 98% rename from examples/llama/android/app/src/main/java/com/anonymous/llama/MainApplication.kt rename to examples/text-embeddings/android/app/src/main/java/com/anonymous/textembeddings/MainApplication.kt index 70decaa2e..3934ecb90 100644 --- a/examples/llama/android/app/src/main/java/com/anonymous/llama/MainApplication.kt +++ b/examples/text-embeddings/android/app/src/main/java/com/anonymous/textembeddings/MainApplication.kt @@ -1,4 +1,4 @@ -package com.anonymous.llama +package com.anonymous.textembeddings import android.app.Application import android.content.res.Configuration diff --git a/examples/text-embeddings/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png b/examples/text-embeddings/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png new file mode 100644 index 000000000..31df827b1 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png differ diff --git a/examples/text-embeddings/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png b/examples/text-embeddings/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png new file mode 100644 index 000000000..ef243aab6 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png differ diff --git a/examples/text-embeddings/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png b/examples/text-embeddings/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png new file mode 100644 index 000000000..e9d547451 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png differ diff --git a/examples/text-embeddings/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png b/examples/text-embeddings/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png new file mode 100644 index 000000000..d61da15d2 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png differ diff --git a/examples/text-embeddings/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png b/examples/text-embeddings/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png new file mode 100644 index 000000000..4aeed11d0 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png differ diff --git a/examples/text-embeddings/android/app/src/main/res/drawable/ic_launcher_background.xml b/examples/text-embeddings/android/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000..883b2a080 --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/examples/text-embeddings/android/app/src/main/res/drawable/rn_edit_text_material.xml b/examples/text-embeddings/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 000000000..5c25e728e --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/examples/text-embeddings/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..3941bea9b --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/examples/text-embeddings/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..3941bea9b --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 000000000..7fae0ccbc Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..ac03dbf69 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 000000000..afa0a4ef4 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 000000000..78aaf4541 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..e1173a94d Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 000000000..c4f6e101e Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 000000000..7a0f085fa Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..ff086fdc3 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..6c2d40bf5 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 000000000..730e3fa55 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..f7f1d0690 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..345261586 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 000000000..b11a322ab Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 000000000..49a464ee3 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..b51fd15c2 Binary files /dev/null and b/examples/text-embeddings/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/examples/text-embeddings/android/app/src/main/res/values-night/colors.xml b/examples/text-embeddings/android/app/src/main/res/values-night/colors.xml new file mode 100644 index 000000000..3c05de5be --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/res/values-night/colors.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/text-embeddings/android/app/src/main/res/values/colors.xml b/examples/text-embeddings/android/app/src/main/res/values/colors.xml new file mode 100644 index 000000000..f387b9011 --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + #ffffff + #ffffff + #023c69 + #ffffff + \ No newline at end of file diff --git a/examples/text-embeddings/android/app/src/main/res/values/strings.xml b/examples/text-embeddings/android/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..a3d08312d --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + text-embeddings + contain + false + \ No newline at end of file diff --git a/examples/text-embeddings/android/app/src/main/res/values/styles.xml b/examples/text-embeddings/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..da525212e --- /dev/null +++ b/examples/text-embeddings/android/app/src/main/res/values/styles.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/examples/text-embeddings/android/build.gradle b/examples/text-embeddings/android/build.gradle new file mode 100644 index 000000000..abbcb8ec8 --- /dev/null +++ b/examples/text-embeddings/android/build.gradle @@ -0,0 +1,41 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext { + buildToolsVersion = findProperty('android.buildToolsVersion') ?: '35.0.0' + minSdkVersion = Integer.parseInt(findProperty('android.minSdkVersion') ?: '24') + compileSdkVersion = Integer.parseInt(findProperty('android.compileSdkVersion') ?: '35') + targetSdkVersion = Integer.parseInt(findProperty('android.targetSdkVersion') ?: '34') + kotlinVersion = findProperty('android.kotlinVersion') ?: '1.9.25' + + ndkVersion = "26.1.10909125" + } + repositories { + google() + mavenCentral() + } + dependencies { + classpath('com.android.tools.build:gradle') + classpath('com.facebook.react:react-native-gradle-plugin') + classpath('org.jetbrains.kotlin:kotlin-gradle-plugin') + } +} + +apply plugin: "com.facebook.react.rootproject" + +allprojects { + repositories { + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url(new File(['node', '--print', "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), '../android')) + } + maven { + // Android JSC is installed from npm + url(new File(['node', '--print', "require.resolve('jsc-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), '../dist')) + } + + google() + mavenCentral() + maven { url 'https://www.jitpack.io' } + } +} diff --git a/examples/text-embeddings/android/gradle.properties b/examples/text-embeddings/android/gradle.properties new file mode 100644 index 000000000..7531e9eb2 --- /dev/null +++ b/examples/text-embeddings/android/gradle.properties @@ -0,0 +1,56 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m + +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true + +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true + +# Enable AAPT2 PNG crunching +android.enablePngCrunchInReleaseBuilds=true + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=true + +# Use this property to enable or disable the Hermes JS engine. +# If set to false, you will be using JSC instead. +hermesEnabled=true + +# Enable GIF support in React Native images (~200 B increase) +expo.gif.enabled=true +# Enable webp support in React Native images (~85 KB increase) +expo.webp.enabled=true +# Enable animated webp support (~3.4 MB increase) +# Disabled by default because iOS doesn't support animated webp +expo.webp.animated=false + +# Enable network inspector +EX_DEV_CLIENT_NETWORK_INSPECTOR=true + +# Use legacy packaging to compress native libraries in the resulting APK. +expo.useLegacyPackaging=false diff --git a/examples/text-embeddings/android/gradle/wrapper/gradle-wrapper.jar b/examples/text-embeddings/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..a4b76b953 Binary files /dev/null and b/examples/text-embeddings/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/examples/text-embeddings/android/gradle/wrapper/gradle-wrapper.properties b/examples/text-embeddings/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..79eb9d003 --- /dev/null +++ b/examples/text-embeddings/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/examples/text-embeddings/android/gradlew b/examples/text-embeddings/android/gradlew new file mode 100755 index 000000000..f5feea6d6 --- /dev/null +++ b/examples/text-embeddings/android/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/examples/text-embeddings/android/gradlew.bat b/examples/text-embeddings/android/gradlew.bat new file mode 100644 index 000000000..9d21a2183 --- /dev/null +++ b/examples/text-embeddings/android/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/examples/text-embeddings/android/settings.gradle b/examples/text-embeddings/android/settings.gradle new file mode 100644 index 000000000..759e64f56 --- /dev/null +++ b/examples/text-embeddings/android/settings.gradle @@ -0,0 +1,38 @@ +pluginManagement { + includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile().toString()) +} +plugins { id("com.facebook.react.settings") } + +extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> + if (System.getenv('EXPO_USE_COMMUNITY_AUTOLINKING') == '1') { + ex.autolinkLibrariesFromCommand() + } else { + def command = [ + 'node', + '--no-warnings', + '--eval', + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'react-native-config', + '--json', + '--platform', + 'android' + ].toList() + ex.autolinkLibrariesFromCommand(command) + } +} + +rootProject.name = 'text-embeddings' + +dependencyResolutionManagement { + versionCatalogs { + reactAndroidLibs { + from(files(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../gradle/libs.versions.toml"))) + } + } +} + +apply from: new File(["node", "--print", "require.resolve('expo/package.json')"].execute(null, rootDir).text.trim(), "../scripts/autolinking.gradle"); +useExpoModules() + +include ':app' +includeBuild(new File(["node", "--print", "require.resolve('@react-native/gradle-plugin/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim()).getParentFile()) diff --git a/examples/text-embeddings/app.json b/examples/text-embeddings/app.json new file mode 100644 index 000000000..b7ba184dd --- /dev/null +++ b/examples/text-embeddings/app.json @@ -0,0 +1,30 @@ +{ + "expo": { + "name": "text-embeddings", + "slug": "text-embeddings", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/icon.png", + "userInterfaceStyle": "light", + "newArchEnabled": true, + "splash": { + "image": "./assets/splash-icon.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true, + "bundleIdentifier": "com.anonymous.text-embeddings" + }, + "android": { + "adaptiveIcon": { + "foregroundImage": "./assets/adaptive-icon.png", + "backgroundColor": "#ffffff" + }, + "package": "com.anonymous.textembeddings" + }, + "web": { + "favicon": "./assets/favicon.png" + } + } +} diff --git a/examples/text-embeddings/assets/adaptive-icon.png b/examples/text-embeddings/assets/adaptive-icon.png new file mode 100644 index 000000000..03d6f6b6c Binary files /dev/null and b/examples/text-embeddings/assets/adaptive-icon.png differ diff --git a/examples/text-embeddings/assets/favicon.png b/examples/text-embeddings/assets/favicon.png new file mode 100644 index 000000000..e75f697b1 Binary files /dev/null and b/examples/text-embeddings/assets/favicon.png differ diff --git a/examples/text-embeddings/assets/icon.png b/examples/text-embeddings/assets/icon.png new file mode 100644 index 000000000..a0b1526fc Binary files /dev/null and b/examples/text-embeddings/assets/icon.png differ diff --git a/examples/text-embeddings/assets/splash-icon.png b/examples/text-embeddings/assets/splash-icon.png new file mode 100644 index 000000000..03d6f6b6c Binary files /dev/null and b/examples/text-embeddings/assets/splash-icon.png differ diff --git a/examples/text-embeddings/index.ts b/examples/text-embeddings/index.ts new file mode 100644 index 000000000..1d6e981ef --- /dev/null +++ b/examples/text-embeddings/index.ts @@ -0,0 +1,8 @@ +import { registerRootComponent } from 'expo'; + +import App from './App'; + +// registerRootComponent calls AppRegistry.registerComponent('main', () => App); +// It also ensures that whether you load the app in Expo Go or in a native build, +// the environment is set up appropriately +registerRootComponent(App); diff --git a/examples/text-embeddings/ios/.gitignore b/examples/text-embeddings/ios/.gitignore new file mode 100644 index 000000000..8beb34430 --- /dev/null +++ b/examples/text-embeddings/ios/.gitignore @@ -0,0 +1,30 @@ +# OSX +# +.DS_Store + +# Xcode +# +build/ +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata +*.xccheckout +*.moved-aside +DerivedData +*.hmap +*.ipa +*.xcuserstate +project.xcworkspace +.xcode.env.local + +# Bundle artifacts +*.jsbundle + +# CocoaPods +/Pods/ diff --git a/examples/text-embeddings/ios/.xcode.env b/examples/text-embeddings/ios/.xcode.env new file mode 100644 index 000000000..3d5782c71 --- /dev/null +++ b/examples/text-embeddings/ios/.xcode.env @@ -0,0 +1,11 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. + +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) diff --git a/examples/text-embeddings/ios/Podfile b/examples/text-embeddings/ios/Podfile new file mode 100644 index 000000000..ccf4ae9ac --- /dev/null +++ b/examples/text-embeddings/ios/Podfile @@ -0,0 +1,66 @@ +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") +require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods") + +require 'json' +podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {} + +ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0' +ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR'] + +platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1' +install! 'cocoapods', + :deterministic_uuids => false + +prepare_react_native_project! + +target 'textembeddings' do + use_expo_modules! + + if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' + config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; + else + config_command = [ + 'node', + '--no-warnings', + '--eval', + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'react-native-config', + '--json', + '--platform', + 'ios' + ] + end + + config = use_native_modules!(config_command) + + use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks'] + use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS'] + + use_react_native!( + :path => config[:reactNativePath], + :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes', + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/..", + :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false', + ) + + post_install do |installer| + react_native_post_install( + installer, + config[:reactNativePath], + :mac_catalyst_enabled => false, + :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true', + ) + + # This is necessary for Xcode 14, because it signs resource bundles by default + # when building for devices. + installer.target_installation_results.pod_target_installation_results + .each do |pod_name, target_installation_result| + target_installation_result.resource_bundle_targets.each do |resource_bundle_target| + resource_bundle_target.build_configurations.each do |config| + config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO' + end + end + end + end +end diff --git a/examples/text-embeddings/ios/Podfile.lock b/examples/text-embeddings/ios/Podfile.lock new file mode 100644 index 000000000..86cf9ca44 --- /dev/null +++ b/examples/text-embeddings/ios/Podfile.lock @@ -0,0 +1,1881 @@ +PODS: + - boost (1.84.0) + - DoubleConversion (1.1.6) + - EXConstants (17.0.8): + - ExpoModulesCore + - Expo (52.0.42): + - ExpoModulesCore + - ExpoAsset (11.0.5): + - ExpoModulesCore + - ExpoFileSystem (18.0.12): + - ExpoModulesCore + - ExpoFont (13.0.4): + - ExpoModulesCore + - ExpoKeepAwake (14.0.3): + - ExpoModulesCore + - ExpoModulesCore (2.2.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsinspector + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - FBLazyVector (0.76.8) + - fmt (9.1.0) + - glog (0.3.5) + - hermes-engine (0.76.8): + - hermes-engine/Pre-built (= 0.76.8) + - hermes-engine/Pre-built (0.76.8) + - opencv-rne (4.11.0) + - RCT-Folly (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Default (= 2024.01.01.00) + - RCT-Folly/Default (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Fabric (2024.01.01.00): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCTDeprecation (0.76.8) + - RCTRequired (0.76.8) + - RCTTypeSafety (0.76.8): + - FBLazyVector (= 0.76.8) + - RCTRequired (= 0.76.8) + - React-Core (= 0.76.8) + - React (0.76.8): + - React-Core (= 0.76.8) + - React-Core/DevSupport (= 0.76.8) + - React-Core/RCTWebSocket (= 0.76.8) + - React-RCTActionSheet (= 0.76.8) + - React-RCTAnimation (= 0.76.8) + - React-RCTBlob (= 0.76.8) + - React-RCTImage (= 0.76.8) + - React-RCTLinking (= 0.76.8) + - React-RCTNetwork (= 0.76.8) + - React-RCTSettings (= 0.76.8) + - React-RCTText (= 0.76.8) + - React-RCTVibration (= 0.76.8) + - React-callinvoker (0.76.8) + - React-Core (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.76.8) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/CoreModulesHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/Default (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/DevSupport (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.76.8) + - React-Core/RCTWebSocket (= 0.76.8) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTActionSheetHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTAnimationHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTBlobHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTImageHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTLinkingHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTNetworkHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTSettingsHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTTextHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTVibrationHeaders (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-Core/RCTWebSocket (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTDeprecation + - React-Core/Default (= 0.76.8) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-perflogger + - React-runtimescheduler + - React-utils + - SocketRocket (= 0.7.1) + - Yoga + - React-CoreModules (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety (= 0.76.8) + - React-Core/CoreModulesHeaders (= 0.76.8) + - React-jsi (= 0.76.8) + - React-jsinspector + - React-NativeModulesApple + - React-RCTBlob + - React-RCTImage (= 0.76.8) + - ReactCodegen + - ReactCommon + - SocketRocket (= 0.7.1) + - React-cxxreact (0.76.8): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.76.8) + - React-debug (= 0.76.8) + - React-jsi (= 0.76.8) + - React-jsinspector + - React-logger (= 0.76.8) + - React-perflogger (= 0.76.8) + - React-runtimeexecutor (= 0.76.8) + - React-timing (= 0.76.8) + - React-debug (0.76.8) + - React-defaultsnativemodule (0.76.8): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-domnativemodule + - React-Fabric + - React-featureflags + - React-featureflagsnativemodule + - React-graphics + - React-idlecallbacksnativemodule + - React-ImageManager + - React-microtasksnativemodule + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-domnativemodule (0.76.8): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.76.8) + - React-Fabric/attributedstring (= 0.76.8) + - React-Fabric/componentregistry (= 0.76.8) + - React-Fabric/componentregistrynative (= 0.76.8) + - React-Fabric/components (= 0.76.8) + - React-Fabric/core (= 0.76.8) + - React-Fabric/dom (= 0.76.8) + - React-Fabric/imagemanager (= 0.76.8) + - React-Fabric/leakchecker (= 0.76.8) + - React-Fabric/mounting (= 0.76.8) + - React-Fabric/observers (= 0.76.8) + - React-Fabric/scheduler (= 0.76.8) + - React-Fabric/telemetry (= 0.76.8) + - React-Fabric/templateprocessor (= 0.76.8) + - React-Fabric/uimanager (= 0.76.8) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/animations (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/attributedstring (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistry (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/componentregistrynative (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.76.8) + - React-Fabric/components/root (= 0.76.8) + - React-Fabric/components/view (= 0.76.8) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/legacyviewmanagerinterop (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/root (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/components/view (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - Yoga + - React-Fabric/core (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/dom (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/imagemanager (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/leakchecker (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/mounting (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.76.8) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/observers/events (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/scheduler (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/telemetry (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/templateprocessor (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.76.8) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-Fabric/uimanager/consistency (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - React-FabricComponents (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.76.8) + - React-FabricComponents/textlayoutmanager (= 0.76.8) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.76.8) + - React-FabricComponents/components/iostextinput (= 0.76.8) + - React-FabricComponents/components/modal (= 0.76.8) + - React-FabricComponents/components/rncore (= 0.76.8) + - React-FabricComponents/components/safeareaview (= 0.76.8) + - React-FabricComponents/components/scrollview (= 0.76.8) + - React-FabricComponents/components/text (= 0.76.8) + - React-FabricComponents/components/textinput (= 0.76.8) + - React-FabricComponents/components/unimplementedview (= 0.76.8) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/inputaccessory (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/iostextinput (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/modal (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/rncore (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/safeareaview (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/scrollview (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/text (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/textinput (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/components/unimplementedview (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricComponents/textlayoutmanager (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/core + - Yoga + - React-FabricImage (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - RCTRequired (= 0.76.8) + - RCTTypeSafety (= 0.76.8) + - React-Fabric + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.76.8) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - Yoga + - React-featureflags (0.76.8) + - React-featureflagsnativemodule (0.76.8): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-graphics (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-jsi + - React-jsiexecutor + - React-utils + - React-hermes (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact (= 0.76.8) + - React-jsi + - React-jsiexecutor (= 0.76.8) + - React-jsinspector + - React-perflogger (= 0.76.8) + - React-runtimeexecutor + - React-idlecallbacksnativemodule (0.76.8): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - React-ImageManager (0.76.8): + - glog + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - React-jserrorhandler (0.76.8): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-cxxreact + - React-debug + - React-jsi + - React-jsi (0.76.8): + - boost + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-jsiexecutor (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact (= 0.76.8) + - React-jsi (= 0.76.8) + - React-jsinspector + - React-perflogger (= 0.76.8) + - React-jsinspector (0.76.8): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-featureflags + - React-jsi + - React-perflogger (= 0.76.8) + - React-runtimeexecutor (= 0.76.8) + - React-jsitracing (0.76.8): + - React-jsi + - React-logger (0.76.8): + - glog + - React-Mapbuffer (0.76.8): + - glog + - React-debug + - React-microtasksnativemodule (0.76.8): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - Yoga + - react-native-executorch (20250401133031): + - DoubleConversion + - glog + - hermes-engine + - opencv-rne (~> 4.11.0) + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-NativeModulesApple + - React-RCTFabric + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - sqlite3 + - Yoga + - React-nativeconfig (0.76.8) + - React-NativeModulesApple (0.76.8): + - glog + - hermes-engine + - React-callinvoker + - React-Core + - React-cxxreact + - React-jsi + - React-jsinspector + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - React-perflogger (0.76.8): + - DoubleConversion + - RCT-Folly (= 2024.01.01.00) + - React-performancetimeline (0.76.8): + - RCT-Folly (= 2024.01.01.00) + - React-cxxreact + - React-timing + - React-RCTActionSheet (0.76.8): + - React-Core/RCTActionSheetHeaders (= 0.76.8) + - React-RCTAnimation (0.76.8): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTAppDelegate (0.76.8): + - RCT-Folly (= 2024.01.01.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-nativeconfig + - React-NativeModulesApple + - React-RCTFabric + - React-RCTImage + - React-RCTNetwork + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - ReactCodegen + - ReactCommon + - React-RCTBlob (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTNetwork + - ReactCodegen + - ReactCommon + - React-RCTFabric (0.76.8): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-nativeconfig + - React-performancetimeline + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-rendererdebug + - React-runtimescheduler + - React-utils + - Yoga + - React-RCTImage (0.76.8): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTNetwork + - ReactCodegen + - ReactCommon + - React-RCTLinking (0.76.8): + - React-Core/RCTLinkingHeaders (= 0.76.8) + - React-jsi (= 0.76.8) + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - ReactCommon/turbomodule/core (= 0.76.8) + - React-RCTNetwork (0.76.8): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTSettings (0.76.8): + - RCT-Folly (= 2024.01.01.00) + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-RCTText (0.76.8): + - React-Core/RCTTextHeaders (= 0.76.8) + - Yoga + - React-RCTVibration (0.76.8): + - RCT-Folly (= 2024.01.01.00) + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - ReactCodegen + - ReactCommon + - React-rendererconsistency (0.76.8) + - React-rendererdebug (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - RCT-Folly (= 2024.01.01.00) + - React-debug + - React-rncore (0.76.8) + - React-RuntimeApple (0.76.8): + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - React-RuntimeCore (0.76.8): + - glog + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - React-runtimeexecutor (0.76.8): + - React-jsi (= 0.76.8) + - React-RuntimeHermes (0.76.8): + - hermes-engine + - RCT-Folly/Fabric (= 2024.01.01.00) + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsitracing + - React-nativeconfig + - React-RuntimeCore + - React-utils + - React-runtimescheduler (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-timing + - React-utils + - React-timing (0.76.8) + - React-utils (0.76.8): + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-debug + - React-jsi (= 0.76.8) + - ReactCodegen (0.76.8): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactCommon (0.76.8): + - ReactCommon/turbomodule (= 0.76.8) + - ReactCommon/turbomodule (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.76.8) + - React-cxxreact (= 0.76.8) + - React-jsi (= 0.76.8) + - React-logger (= 0.76.8) + - React-perflogger (= 0.76.8) + - ReactCommon/turbomodule/bridging (= 0.76.8) + - ReactCommon/turbomodule/core (= 0.76.8) + - ReactCommon/turbomodule/bridging (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.76.8) + - React-cxxreact (= 0.76.8) + - React-jsi (= 0.76.8) + - React-logger (= 0.76.8) + - React-perflogger (= 0.76.8) + - ReactCommon/turbomodule/core (0.76.8): + - DoubleConversion + - fmt (= 9.1.0) + - glog + - hermes-engine + - RCT-Folly (= 2024.01.01.00) + - React-callinvoker (= 0.76.8) + - React-cxxreact (= 0.76.8) + - React-debug (= 0.76.8) + - React-featureflags (= 0.76.8) + - React-jsi (= 0.76.8) + - React-logger (= 0.76.8) + - React-perflogger (= 0.76.8) + - React-utils (= 0.76.8) + - SocketRocket (0.7.1) + - sqlite3 (3.49.1): + - sqlite3/common (= 3.49.1) + - sqlite3/common (3.49.1) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - EXConstants (from `../node_modules/expo-constants/ios`) + - Expo (from `../node_modules/expo`) + - ExpoAsset (from `../node_modules/expo-asset/ios`) + - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) + - ExpoFont (from `../node_modules/expo-font/ios`) + - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) + - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - react-native-executorch (from `../node_modules/react-native-executorch`) + - React-nativeconfig (from `../node_modules/react-native/ReactCommon`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-rncore (from `../node_modules/react-native/ReactCommon`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactCodegen (from `build/generated/ios`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - opencv-rne + - SocketRocket + - sqlite3 + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + EXConstants: + :path: "../node_modules/expo-constants/ios" + Expo: + :path: "../node_modules/expo" + ExpoAsset: + :path: "../node_modules/expo-asset/ios" + ExpoFileSystem: + :path: "../node_modules/expo-file-system/ios" + ExpoFont: + :path: "../node_modules/expo-font/ios" + ExpoKeepAwake: + :path: "../node_modules/expo-keep-awake/ios" + ExpoModulesCore: + :path: "../node_modules/expo-modules-core" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2024-11-12-RNv0.76.2-5b4aa20c719830dcf5684832b89a6edb95ac3d64 + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-defaultsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + react-native-executorch: + :path: "../node_modules/react-native-executorch" + React-nativeconfig: + :path: "../node_modules/react-native/ReactCommon" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-rncore: + :path: "../node_modules/react-native/ReactCommon" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactCodegen: + :path: build/generated/ios + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: 1dca942403ed9342f98334bf4c3621f011aa7946 + DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385 + EXConstants: fcfc75800824ac2d5c592b5bc74130bad17b146b + Expo: e8f11c8e0290deca7be9254569e23f884b95a777 + ExpoAsset: 48386d40d53a8c1738929b3ed509bcad595b5516 + ExpoFileSystem: 42d363d3b96f9afab980dcef60d5657a4443c655 + ExpoFont: f354e926f8feae5e831ec8087f36652b44a0b188 + ExpoKeepAwake: b0171a73665bfcefcfcc311742a72a956e6aa680 + ExpoModulesCore: 98297c2cc7977c43740a2e52d850d94ac8dbf176 + FBLazyVector: 8fa248633c0736c734d06b43e0f81b1a1bf91395 + fmt: 10c6e61f4be25dc963c36bd73fc7b1705fe975be + glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a + hermes-engine: ea89b864870ef107096c440c56eb6cba409b2689 + opencv-rne: 2305807573b6e29c8c87e3416ab096d09047a7a0 + RCT-Folly: 84578c8756030547307e4572ab1947de1685c599 + RCTDeprecation: 7fa7002418c68d8ff065b29e9e9cfd8d904d6c64 + RCTRequired: cabedb3345dcfd519a89098b8a320969e2cb961e + RCTTypeSafety: 70d62625db6430c2c8077233997f93357072d774 + React: 8fa40825f3c915e4e2b8d5b04130946950c82094 + React-callinvoker: d1ae31fcc2fff1d26c54c970b23e79033b8edad8 + React-Core: 27de8d7a08538d3cad9417f084017168b9256df6 + React-CoreModules: 85b8abe30b2dee2575aba908aa60fec086e8b6a4 + React-cxxreact: 024adb26a74c5236c18193e2ef419c64a628c1e9 + React-debug: b6a1e7d672bd7f599d9091cdb80387b4cb7131f6 + React-defaultsnativemodule: acb7529e8efcf877f0dcc7b5709ff5494fbc83f4 + React-domnativemodule: ba317783a506f87a1b91df7f0dc60b82715882ab + React-Fabric: 6faffb936aa34f6160681a6d210689cb368129dd + React-FabricComponents: 15639830b940a6527db3ea7e0cee30fd869bff33 + React-FabricImage: 00ca631921ba95e0303efeece05e8d81c478633b + React-featureflags: 8f4cc160056c8590cbda180a9aa43678874cf928 + React-featureflagsnativemodule: 872670f4012132e9cb090575eb3405fa20480f1a + React-graphics: 7d12b0d71318a53e15a42dfa4d24619eba71e966 + React-hermes: 6f4b133d34ec67b12f2220b8ae6a66ef16c7c923 + React-idlecallbacksnativemodule: 1bc4a592e3012fd5483f22da6a79cb4a76764887 + React-ImageManager: 3dea3f18ffb256711b4bb42c8d03221e3330880f + React-jserrorhandler: 506ab7ee9582b2d40b4f53ea5147c159a4281956 + React-jsi: 2827c74b21d565d94cd71456d147c9ec3cc79387 + React-jsiexecutor: 778cf19f7cc7c0507e79d23975df3dd8a79067d7 + React-jsinspector: 09a2b25ff335924120540d3e284d71a18dc8c523 + React-jsitracing: 998837b99353847a519737b8a2a50553d23be6c6 + React-logger: a11c709603e1a43c7a3d87746ab6981b21b7c5b5 + React-Mapbuffer: d126b87e242b2ad54c095c098cd73b18ebcf2798 + React-microtasksnativemodule: a68e53dbdea90ce0c96aa2566695141079c7dc5f + react-native-executorch: 4b750724113943650510319213d155b90d1446c7 + React-nativeconfig: a0ee536f9c1b8f2ba80fdf95aa4f2d6eb9b79510 + React-NativeModulesApple: d5ad8550bfa8ceae1590d88cfd37f30d41355890 + React-perflogger: a071982fd1a3f708a7f35e9a80acc7709f047fde + React-performancetimeline: 7e68b22e83e3f004347ae522afbd9fd5ee5a9816 + React-RCTActionSheet: 65b015af911107cb31eeae9e013e285545713fd1 + React-RCTAnimation: 55391491c71c4d93631415a3c1e66eab7889575d + React-RCTAppDelegate: 7b6d6076ba5dcbe86c7e0ac29948a1964b1a8e70 + React-RCTBlob: a38e9d69855d685b760329872426b071aa80d872 + React-RCTFabric: e053f86fe35b03b261ce975150cc3b9d0b902229 + React-RCTImage: 1b97018d6f34b374a3fac46e6921dabecf0d5c6b + React-RCTLinking: db041574011ec6038b24adda2ae66361c5c398e8 + React-RCTNetwork: 171cb53e54ef091f2f77997debae5aec2afe23be + React-RCTSettings: 74c353040e89aeb4cad007277eb396f229892101 + React-RCTText: 9329775f9dbc3098c7393b529d4111c2930dc7fd + React-RCTVibration: df3a7c1d60a1a5689a469becea02ae7ac944948a + React-rendererconsistency: ce8572d52f3efc0b0efa577cc66170b893b22c93 + React-rendererdebug: 352902cd541f7ee8e255be0a44db4b7f2a66d9f4 + React-rncore: 83614f2d35841e3a0ba2f41fb1514e753bd3bf06 + React-RuntimeApple: 0169924d2887ab045391d0bc4bd50776ed3639c0 + React-RuntimeCore: f78590cdc5cb66c64337233e605f3861bfc4a7e8 + React-runtimeexecutor: eae8e1ab456a90d8961fd6e2a30964a7cd32ec76 + React-RuntimeHermes: 93eaeab37421fca4cda16004930edd71ed94acc7 + React-runtimescheduler: ff81874fe50845fb8c1c78fbbf05c22532404976 + React-timing: 3e03c153bec55fbe0a22cfee95fff025ca7534ca + React-utils: 945a79dd54aad2c9ee213ee01da246acec920a2c + ReactCodegen: 6d884ae1e7d4a51a4ca6d3a1a428a89daa8335fd + ReactCommon: 2b7118eace1eab072a4ccdae57303eaefc2a3941 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983 + Yoga: 9f2ca179441625f0b05abb2a72517acdb35b36bd + +PODFILE CHECKSUM: 68dda3cf67ac49f79b776f2f27f38a3d7967d74c + +COCOAPODS: 1.16.2 diff --git a/examples/text-embeddings/ios/Podfile.properties.json b/examples/text-embeddings/ios/Podfile.properties.json new file mode 100644 index 000000000..417e2e5ab --- /dev/null +++ b/examples/text-embeddings/ios/Podfile.properties.json @@ -0,0 +1,5 @@ +{ + "expo.jsEngine": "hermes", + "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true", + "newArchEnabled": "true" +} diff --git a/examples/text-embeddings/ios/textembeddings.xcodeproj/project.pbxproj b/examples/text-embeddings/ios/textembeddings.xcodeproj/project.pbxproj new file mode 100644 index 000000000..68dcd0dd2 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings.xcodeproj/project.pbxproj @@ -0,0 +1,540 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; + 3F13BD2759F3E6089E29C49A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = FC421039C1107AD4A19E856E /* PrivacyInfo.xcprivacy */; }; + 96905EF65AED1B983A6B3ABC /* libPods-textembeddings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-textembeddings.a */; }; + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; + C63E2EAE77804FA49D97EEFA /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431756A8F77F4C4E852CBBC1 /* noop-file.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 13B07F961A680F5B00A75B9A /* textembeddings.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = textembeddings.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = textembeddings/AppDelegate.h; sourceTree = ""; }; + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = textembeddings/AppDelegate.mm; sourceTree = ""; }; + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = textembeddings/Images.xcassets; sourceTree = ""; }; + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = textembeddings/Info.plist; sourceTree = ""; }; + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = textembeddings/main.m; sourceTree = ""; }; + 320EE2C5142146D791DFB8AA /* textembeddings-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "textembeddings-Bridging-Header.h"; path = "textembeddings/textembeddings-Bridging-Header.h"; sourceTree = ""; }; + 431756A8F77F4C4E852CBBC1 /* noop-file.swift */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.swift; name = "noop-file.swift"; path = "textembeddings/noop-file.swift"; sourceTree = ""; }; + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-textembeddings.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-textembeddings.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C2E3173556A471DD304B334 /* Pods-textembeddings.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-textembeddings.debug.xcconfig"; path = "Target Support Files/Pods-textembeddings/Pods-textembeddings.debug.xcconfig"; sourceTree = ""; }; + 7A4D352CD337FB3A3BF06240 /* Pods-textembeddings.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-textembeddings.release.xcconfig"; path = "Target Support Files/Pods-textembeddings/Pods-textembeddings.release.xcconfig"; sourceTree = ""; }; + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = textembeddings/SplashScreen.storyboard; sourceTree = ""; }; + BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-textembeddings/ExpoModulesProvider.swift"; sourceTree = ""; }; + FC421039C1107AD4A19E856E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = textembeddings/PrivacyInfo.xcprivacy; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 96905EF65AED1B983A6B3ABC /* libPods-textembeddings.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 13B07FAE1A68108700A75B9A /* textembeddings */ = { + isa = PBXGroup; + children = ( + BB2F792B24A3F905000567C9 /* Supporting */, + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, + 13B07FB01A68108700A75B9A /* AppDelegate.mm */, + 13B07FB51A68108700A75B9A /* Images.xcassets */, + 13B07FB61A68108700A75B9A /* Info.plist */, + 13B07FB71A68108700A75B9A /* main.m */, + AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */, + 431756A8F77F4C4E852CBBC1 /* noop-file.swift */, + 320EE2C5142146D791DFB8AA /* textembeddings-Bridging-Header.h */, + FC421039C1107AD4A19E856E /* PrivacyInfo.xcprivacy */, + ); + name = textembeddings; + sourceTree = ""; + }; + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, + 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-textembeddings.a */, + ); + name = Frameworks; + sourceTree = ""; + }; + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { + isa = PBXGroup; + children = ( + ); + name = Libraries; + sourceTree = ""; + }; + 83CBB9F61A601CBA00E9B192 = { + isa = PBXGroup; + children = ( + 13B07FAE1A68108700A75B9A /* textembeddings */, + 832341AE1AAA6A7D00B99B32 /* Libraries */, + 83CBBA001A601CBA00E9B192 /* Products */, + 2D16E6871FA4F8E400B85C8A /* Frameworks */, + D65327D7A22EEC0BE12398D9 /* Pods */, + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */, + ); + indentWidth = 2; + sourceTree = ""; + tabWidth = 2; + usesTabs = 0; + }; + 83CBBA001A601CBA00E9B192 /* Products */ = { + isa = PBXGroup; + children = ( + 13B07F961A680F5B00A75B9A /* textembeddings.app */, + ); + name = Products; + sourceTree = ""; + }; + 92DBD88DE9BF7D494EA9DA96 /* textembeddings */ = { + isa = PBXGroup; + children = ( + FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */, + ); + name = textembeddings; + sourceTree = ""; + }; + BB2F792B24A3F905000567C9 /* Supporting */ = { + isa = PBXGroup; + children = ( + BB2F792C24A3F905000567C9 /* Expo.plist */, + ); + name = Supporting; + path = textembeddings/Supporting; + sourceTree = ""; + }; + D65327D7A22EEC0BE12398D9 /* Pods */ = { + isa = PBXGroup; + children = ( + 6C2E3173556A471DD304B334 /* Pods-textembeddings.debug.xcconfig */, + 7A4D352CD337FB3A3BF06240 /* Pods-textembeddings.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + D7E4C46ADA2E9064B798F356 /* ExpoModulesProviders */ = { + isa = PBXGroup; + children = ( + 92DBD88DE9BF7D494EA9DA96 /* textembeddings */, + ); + name = ExpoModulesProviders; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 13B07F861A680F5B00A75B9A /* textembeddings */ = { + isa = PBXNativeTarget; + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "textembeddings" */; + buildPhases = ( + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */, + 267BA574013F41F1F1CB0BE3 /* [Expo] Configure project */, + 13B07F871A680F5B00A75B9A /* Sources */, + 13B07F8C1A680F5B00A75B9A /* Frameworks */, + 13B07F8E1A680F5B00A75B9A /* Resources */, + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */, + 8B07D00B27B6A60B997FBDA8 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = textembeddings; + productName = textembeddings; + productReference = 13B07F961A680F5B00A75B9A /* textembeddings.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 83CBB9F71A601CBA00E9B192 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1130; + TargetAttributes = { + 13B07F861A680F5B00A75B9A = { + LastSwiftMigration = 1250; + }; + }; + }; + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "textembeddings" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 83CBB9F61A601CBA00E9B192; + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 13B07F861A680F5B00A75B9A /* textembeddings */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 13B07F8E1A680F5B00A75B9A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BB2F792D24A3F905000567C9 /* Expo.plist in Resources */, + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */, + 3F13BD2759F3E6089E29C49A /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Bundle React Native code and images"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n # Set the entry JS file using the bundler's entry resolution.\n export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n # Use Expo CLI\n export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n # Default Expo CLI command for bundling\n export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n"; + }; + 08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-textembeddings-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 267BA574013F41F1F1CB0BE3 /* [Expo] Configure project */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-textembeddings/expo-configure-project.sh\"\n"; + }; + 800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-textembeddings/Pods-textembeddings-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-textembeddings/Pods-textembeddings-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 8B07D00B27B6A60B997FBDA8 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-textembeddings/Pods-textembeddings-frameworks.sh", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/react-native-executorch/ExecutorchLib.framework/ExecutorchLib", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ExecutorchLib.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-textembeddings/Pods-textembeddings-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 13B07F871A680F5B00A75B9A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, + 13B07FC11A68108700A75B9A /* main.m in Sources */, + B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */, + C63E2EAE77804FA49D97EEFA /* noop-file.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 13B07F941A680F5B00A75B9A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 6C2E3173556A471DD304B334 /* Pods-textembeddings.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = textembeddings/textembeddings.entitlements; + CURRENT_PROJECT_VERSION = 1; + ENABLE_BITCODE = NO; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "FB_SONARKIT_ENABLED=1", + ); + INFOPLIST_FILE = textembeddings/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; + PRODUCT_BUNDLE_IDENTIFIER = "com.anonymous.text-embeddings"; + PRODUCT_NAME = textembeddings; + SWIFT_OBJC_BRIDGING_HEADER = "textembeddings/textembeddings-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 13B07F951A680F5B00A75B9A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7A4D352CD337FB3A3BF06240 /* Pods-textembeddings.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = textembeddings/textembeddings.entitlements; + CURRENT_PROJECT_VERSION = 1; + INFOPLIST_FILE = textembeddings/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.0; + OTHER_LDFLAGS = ( + "$(inherited)", + "-ObjC", + "-lc++", + ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; + PRODUCT_BUNDLE_IDENTIFIER = "com.anonymous.text-embeddings"; + PRODUCT_NAME = textembeddings; + SWIFT_OBJC_BRIDGING_HEADER = "textembeddings/textembeddings-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; + 83CBBA201A601CBA00E9B192 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + USE_HERMES = true; + }; + name = Debug; + }; + 83CBBA211A601CBA00E9B192 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\""; + MTL_ENABLE_DEBUG_INFO = NO; + OTHER_LDFLAGS = ( + "$(inherited)", + " ", + ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; + SDKROOT = iphoneos; + USE_HERMES = true; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "textembeddings" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 13B07F941A680F5B00A75B9A /* Debug */, + 13B07F951A680F5B00A75B9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "textembeddings" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 83CBBA201A601CBA00E9B192 /* Debug */, + 83CBBA211A601CBA00E9B192 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; +} diff --git a/examples/text-embeddings/ios/textembeddings.xcodeproj/xcshareddata/xcschemes/textembeddings.xcscheme b/examples/text-embeddings/ios/textembeddings.xcodeproj/xcshareddata/xcschemes/textembeddings.xcscheme new file mode 100644 index 000000000..c87b38fde --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings.xcodeproj/xcshareddata/xcschemes/textembeddings.xcscheme @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/text-embeddings/ios/textembeddings.xcworkspace/contents.xcworkspacedata b/examples/text-embeddings/ios/textembeddings.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..90ccc45bd --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/examples/text-embeddings/ios/textembeddings/AppDelegate.h b/examples/text-embeddings/ios/textembeddings/AppDelegate.h new file mode 100644 index 000000000..1f65766b9 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/AppDelegate.h @@ -0,0 +1,7 @@ +#import +#import +#import + +@interface AppDelegate : EXAppDelegateWrapper + +@end diff --git a/examples/text-embeddings/ios/textembeddings/AppDelegate.mm b/examples/text-embeddings/ios/textembeddings/AppDelegate.mm new file mode 100644 index 000000000..9be55c972 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/AppDelegate.mm @@ -0,0 +1,87 @@ +#import "AppDelegate.h" + +#import +#import + +@implementation AppDelegate + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + self.moduleName = @"main"; + + // You can add your custom initial props in the dictionary below. + // They will be passed down to the ViewController used by React Native. + self.initialProps = @{}; + + return [super application:application + didFinishLaunchingWithOptions:launchOptions]; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { + return [self bundleURL]; +} + +- (NSURL *)bundleURL { +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] + jsBundleURLForBundleRoot:@".expo/.virtual-metro-entry"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" + withExtension:@"jsbundle"]; +#endif +} + +// Linking API +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + options: + (NSDictionary *)options { + return [super application:application openURL:url options:options] || + [RCTLinkingManager application:application + openURL:url + options:options]; +} + +// Universal Links +- (BOOL)application:(UIApplication *)application + continueUserActivity:(nonnull NSUserActivity *)userActivity + restorationHandler: + (nonnull void (^)(NSArray> *_Nullable)) + restorationHandler { + BOOL result = [RCTLinkingManager application:application + continueUserActivity:userActivity + restorationHandler:restorationHandler]; + return [super application:application + continueUserActivity:userActivity + restorationHandler:restorationHandler] || + result; +} + +// Explicitly define remote notification delegates to ensure compatibility with +// some third-party libraries +- (void)application:(UIApplication *)application + didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { + return [super application:application + didRegisterForRemoteNotificationsWithDeviceToken:deviceToken]; +} + +// Explicitly define remote notification delegates to ensure compatibility with +// some third-party libraries +- (void)application:(UIApplication *)application + didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { + return [super application:application + didFailToRegisterForRemoteNotificationsWithError:error]; +} + +// Explicitly define remote notification delegates to ensure compatibility with +// some third-party libraries +- (void)application:(UIApplication *)application + didReceiveRemoteNotification:(NSDictionary *)userInfo + fetchCompletionHandler: + (void (^)(UIBackgroundFetchResult))completionHandler { + return [super application:application + didReceiveRemoteNotification:userInfo + fetchCompletionHandler:completionHandler]; +} + +@end diff --git a/examples/text-embeddings/ios/textembeddings/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png b/examples/text-embeddings/ios/textembeddings/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png new file mode 100644 index 000000000..2732229fa Binary files /dev/null and b/examples/text-embeddings/ios/textembeddings/Images.xcassets/AppIcon.appiconset/App-Icon-1024x1024@1x.png differ diff --git a/examples/text-embeddings/ios/textembeddings/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/text-embeddings/ios/textembeddings/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..5f6956c15 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,14 @@ +{ + "images": [ + { + "filename": "App-Icon-1024x1024@1x.png", + "idiom": "universal", + "platform": "ios", + "size": "1024x1024" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} diff --git a/examples/text-embeddings/ios/textembeddings/Images.xcassets/Contents.json b/examples/text-embeddings/ios/textembeddings/Images.xcassets/Contents.json new file mode 100644 index 000000000..b4ded435d --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info": { + "version": 1, + "author": "expo" + } +} diff --git a/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenBackground.colorset/Contents.json b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenBackground.colorset/Contents.json new file mode 100644 index 000000000..3402288ad --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenBackground.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors": [ + { + "color": { + "components": { + "alpha": "1.000", + "blue": "1.00000000000000", + "green": "1.00000000000000", + "red": "1.00000000000000" + }, + "color-space": "srgb" + }, + "idiom": "universal" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} diff --git a/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/Contents.json b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/Contents.json new file mode 100644 index 000000000..f615695d0 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images": [ + { + "idiom": "universal", + "filename": "image.png", + "scale": "1x" + }, + { + "idiom": "universal", + "filename": "image@2x.png", + "scale": "2x" + }, + { + "idiom": "universal", + "filename": "image@3x.png", + "scale": "3x" + } + ], + "info": { + "version": 1, + "author": "expo" + } +} diff --git a/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image.png b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image.png new file mode 100644 index 000000000..b9ff0fcbf Binary files /dev/null and b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image.png differ diff --git a/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image@2x.png b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image@2x.png new file mode 100644 index 000000000..b9ff0fcbf Binary files /dev/null and b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image@2x.png differ diff --git a/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image@3x.png b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image@3x.png new file mode 100644 index 000000000..b9ff0fcbf Binary files /dev/null and b/examples/text-embeddings/ios/textembeddings/Images.xcassets/SplashScreenLogo.imageset/image@3x.png differ diff --git a/examples/text-embeddings/ios/textembeddings/Info.plist b/examples/text-embeddings/ios/textembeddings/Info.plist new file mode 100644 index 000000000..45dd29139 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/Info.plist @@ -0,0 +1,74 @@ + + + + + CADisableMinimumFrameDurationOnPhone + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + text-embeddings + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleURLSchemes + + com.anonymous.text-embeddings + + + + CFBundleVersion + 1 + LSMinimumSystemVersion + 12.0 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSAllowsLocalNetworking + + + UILaunchStoryboardName + SplashScreen + UIRequiredDeviceCapabilities + + arm64 + + UIRequiresFullScreen + + UIStatusBarStyle + UIStatusBarStyleDefault + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIUserInterfaceStyle + Light + UIViewControllerBasedStatusBarAppearance + + + \ No newline at end of file diff --git a/examples/text-embeddings/ios/textembeddings/PrivacyInfo.xcprivacy b/examples/text-embeddings/ios/textembeddings/PrivacyInfo.xcprivacy new file mode 100644 index 000000000..5bb83c5d4 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/PrivacyInfo.xcprivacy @@ -0,0 +1,48 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + 0A2A.1 + 3B52.1 + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryDiskSpace + NSPrivacyAccessedAPITypeReasons + + E174.1 + 85F4.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/examples/text-embeddings/ios/textembeddings/SplashScreen.storyboard b/examples/text-embeddings/ios/textembeddings/SplashScreen.storyboard new file mode 100644 index 000000000..8a6fcd47b --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/SplashScreen.storyboard @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/text-embeddings/ios/textembeddings/Supporting/Expo.plist b/examples/text-embeddings/ios/textembeddings/Supporting/Expo.plist new file mode 100644 index 000000000..750be020c --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/Supporting/Expo.plist @@ -0,0 +1,12 @@ + + + + + EXUpdatesCheckOnLaunch + ALWAYS + EXUpdatesEnabled + + EXUpdatesLaunchWaitMs + 0 + + \ No newline at end of file diff --git a/examples/text-embeddings/ios/textembeddings/main.m b/examples/text-embeddings/ios/textembeddings/main.m new file mode 100644 index 000000000..6b3a51acc --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/main.m @@ -0,0 +1,10 @@ +#import + +#import "AppDelegate.h" + +int main(int argc, char *argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, + NSStringFromClass([AppDelegate class])); + } +} diff --git a/examples/text-embeddings/ios/textembeddings/noop-file.swift b/examples/text-embeddings/ios/textembeddings/noop-file.swift new file mode 100644 index 000000000..b2ffafbfc --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/noop-file.swift @@ -0,0 +1,4 @@ +// +// @generated +// A blank Swift file must be created for native modules with Swift files to work correctly. +// diff --git a/examples/text-embeddings/ios/textembeddings/textembeddings-Bridging-Header.h b/examples/text-embeddings/ios/textembeddings/textembeddings-Bridging-Header.h new file mode 100644 index 000000000..339994e93 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/textembeddings-Bridging-Header.h @@ -0,0 +1,4 @@ +// +// Use this file to import your target's public headers that you would like to +// expose to Swift. +// diff --git a/examples/text-embeddings/ios/textembeddings/textembeddings.entitlements b/examples/text-embeddings/ios/textembeddings/textembeddings.entitlements new file mode 100644 index 000000000..f683276c5 --- /dev/null +++ b/examples/text-embeddings/ios/textembeddings/textembeddings.entitlements @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/examples/speech-to-text/package-lock.json b/examples/text-embeddings/package-lock.json similarity index 95% rename from examples/speech-to-text/package-lock.json rename to examples/text-embeddings/package-lock.json index b346f7d53..e2870cd89 100644 --- a/examples/speech-to-text/package-lock.json +++ b/examples/text-embeddings/package-lock.json @@ -1,17 +1,17 @@ { - "name": "speech-to-text", + "name": "text-embeddings", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "speech-to-text", + "name": "text-embeddings", "version": "1.0.0", "dependencies": { - "expo": "~52.0.37", + "expo": "~52.0.42", "expo-status-bar": "~2.0.1", "react": "18.3.1", - "react-native": "0.76.7" + "react-native": "0.76.8" }, "devDependencies": { "@babel/core": "^7.25.2", @@ -70,21 +70,21 @@ } }, "node_modules/@babel/core": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", + "@babel/generator": "^7.26.10", "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.9", - "@babel/parser": "^7.26.9", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -100,13 +100,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -128,12 +128,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.5", + "@babel/compat-data": "^7.26.8", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -144,9 +144,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.26.9.tgz", - "integrity": "sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -154,7 +154,7 @@ "@babel/helper-optimise-call-expression": "^7.25.9", "@babel/helper-replace-supers": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.26.9", + "@babel/traverse": "^7.27.0", "semver": "^6.3.1" }, "engines": { @@ -165,9 +165,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz", - "integrity": "sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -182,9 +182,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz", - "integrity": "sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -350,13 +350,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -449,12 +449,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.9" + "@babel/types": "^7.27.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -1022,12 +1022,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1684,12 +1684,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1733,15 +1733,15 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.9.tgz", - "integrity": "sha512-Jf+8y9wXQbbxvVYTM8gO5oEF2POdNji0NMltEkG7FtmzD9PVz7/lxpqSdTvwsjTMU5HIHuDVNf2SOxLkWi+wPQ==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", "@babel/helper-plugin-utils": "^7.26.5", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", "semver": "^6.3.1" }, @@ -1815,9 +1815,9 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.26.7.tgz", - "integrity": "sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", "license": "MIT", "peer": true, "dependencies": { @@ -1831,13 +1831,13 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.8.tgz", - "integrity": "sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz", + "integrity": "sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.27.0", "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9" @@ -1999,20 +1999,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, "node_modules/@babel/preset-flow": { "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.25.9.tgz", @@ -2066,16 +2052,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz", + "integrity": "sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-syntax-jsx": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-typescript": "^7.25.9" + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-typescript": "^7.27.0" }, "engines": { "node": ">=6.9.0" @@ -2104,9 +2090,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.9.tgz", - "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2116,30 +2102,30 @@ } }, "node_modules/@babel/template": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.26.9", - "@babel/types": "^7.26.9" + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2149,16 +2135,16 @@ }, "node_modules/@babel/traverse--for-generate-function-map": { "name": "@babel/traverse", - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.9", - "@babel/parser": "^7.26.9", - "@babel/template": "^7.26.9", - "@babel/types": "^7.26.9", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2167,9 +2153,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2192,30 +2178,30 @@ } }, "node_modules/@expo/cli": { - "version": "0.22.18", - "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.18.tgz", - "integrity": "sha512-TWGKHWTYU9xE7YETPk2zQzLPl+bldpzZCa0Cqg0QeENpu03ZEnMxUqrgHwrbWGTf7ONTYC1tODBkFCFw/qgPGA==", + "version": "0.22.23", + "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.22.23.tgz", + "integrity": "sha512-LXFKu2jnk9ClVD+kw0sJCQ89zei01wz2t4EJwc9P7EwYb8gabC8FtPyM/X7NIE5jtrnTLTUtjW5ovxQSBL7pJQ==", "license": "MIT", "dependencies": { "@0no-co/graphql.web": "^1.0.8", "@babel/runtime": "^7.20.0", "@expo/code-signing-certificates": "^0.0.5", - "@expo/config": "~10.0.10", - "@expo/config-plugins": "~9.0.15", + "@expo/config": "~10.0.11", + "@expo/config-plugins": "~9.0.17", "@expo/devcert": "^1.1.2", "@expo/env": "~0.4.2", "@expo/image-utils": "^0.6.5", "@expo/json-file": "^9.0.2", - "@expo/metro-config": "~0.19.11", + "@expo/metro-config": "~0.19.12", "@expo/osascript": "^2.1.6", "@expo/package-manager": "^1.7.2", "@expo/plist": "^0.2.2", - "@expo/prebuild-config": "^8.0.28", + "@expo/prebuild-config": "^8.0.30", "@expo/rudder-sdk-node": "^1.1.1", "@expo/spawn-async": "^1.7.2", "@expo/ws-tunnel": "^1.0.1", "@expo/xcpretty": "^4.3.0", - "@react-native/dev-middleware": "0.76.7", + "@react-native/dev-middleware": "0.76.8", "@urql/core": "^5.0.6", "@urql/exchange-retry": "^1.3.0", "accepts": "^1.3.8", @@ -2297,14 +2283,14 @@ } }, "node_modules/@expo/config": { - "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.10.tgz", - "integrity": "sha512-wI9/iam3Irk99ADGM/FyD7YrrEibIZXR4huSZiU5zt9o3dASOKhqepiNJex4YPiktLfKhYrpSEJtwno1g0SrgA==", + "version": "10.0.11", + "resolved": "https://registry.npmjs.org/@expo/config/-/config-10.0.11.tgz", + "integrity": "sha512-nociJ4zr/NmbVfMNe9j/+zRlt7wz/siISu7PjdWE4WE+elEGxWWxsGzltdJG0llzrM+khx8qUiFK5aiVcdMBww==", "license": "MIT", "dependencies": { "@babel/code-frame": "~7.10.4", - "@expo/config-plugins": "~9.0.15", - "@expo/config-types": "^52.0.4", + "@expo/config-plugins": "~9.0.17", + "@expo/config-types": "^52.0.5", "@expo/json-file": "^9.0.2", "deepmerge": "^4.3.1", "getenv": "^1.0.0", @@ -2318,9 +2304,9 @@ } }, "node_modules/@expo/config-plugins": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.16.tgz", - "integrity": "sha512-AnJzmFB7ztM0JZBn+Ut6BQYC2WeGDzfIhBZVOIPMQbdBqvwJ7TmFEsGTGSxdwU/VqJaJK2sWxyt1zbWkpIYCEA==", + "version": "9.0.17", + "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-9.0.17.tgz", + "integrity": "sha512-m24F1COquwOm7PBl5wRbkT9P9DviCXe0D7S7nQsolfbhdCWuvMkfXeoWmgjtdhy7sDlOyIgBrAdnB6MfsWKqIg==", "license": "MIT", "dependencies": { "@expo/config-types": "^52.0.5", @@ -2549,16 +2535,16 @@ } }, "node_modules/@expo/metro-config": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.11.tgz", - "integrity": "sha512-XaobHTcsoHQdKEH7PI/DIpr2QiugkQmPYolbfzkpSJMplNWfSh+cTRjrm4//mS2Sb78qohtu0u2CGJnFqFUGag==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.19.12.tgz", + "integrity": "sha512-fhT3x1ikQWHpZgw7VrEghBdscFPz1laRYa8WcVRB18nTTqorF6S8qPYslkJu1faEziHZS7c2uyDzTYnrg/CKbg==", "license": "MIT", "dependencies": { "@babel/core": "^7.20.0", "@babel/generator": "^7.20.5", "@babel/parser": "^7.20.0", "@babel/types": "^7.20.0", - "@expo/config": "~10.0.10", + "@expo/config": "~10.0.11", "@expo/env": "~0.4.2", "@expo/json-file": "~9.0.2", "@expo/spawn-async": "^1.7.2", @@ -2662,17 +2648,17 @@ } }, "node_modules/@expo/prebuild-config": { - "version": "8.0.28", - "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.28.tgz", - "integrity": "sha512-SDDgCKKS1wFNNm3de2vBP8Q5bnxcabuPDE9Mnk9p7Gb4qBavhwMbAtrLcAyZB+WRb4QM+yan3z3K95vvCfI/+A==", + "version": "8.0.30", + "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-8.0.30.tgz", + "integrity": "sha512-xNHWGh0xLZjxBXwVbDW+TPeexuQ95FZX2ZRrzJkALxhQiwYQswQSFE7CVUFMC2USIKVklCcgfEvtqnguTBQVxQ==", "license": "MIT", "dependencies": { - "@expo/config": "~10.0.10", - "@expo/config-plugins": "~9.0.15", - "@expo/config-types": "^52.0.4", + "@expo/config": "~10.0.11", + "@expo/config-plugins": "~9.0.17", + "@expo/config-types": "^52.0.5", "@expo/image-utils": "^0.6.5", "@expo/json-file": "^9.0.2", - "@react-native/normalize-colors": "0.76.7", + "@react-native/normalize-colors": "0.76.8", "debug": "^4.3.1", "fs-extra": "^9.0.0", "resolve-from": "^5.0.0", @@ -2774,9 +2760,9 @@ } }, "node_modules/@expo/ws-tunnel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.5.tgz", - "integrity": "sha512-Ta9KzslHAIbw2ZoyZ7Ud7/QImucy+K4YvOqo9AhGfUfH76hQzaffQreOySzYusDfW8Y+EXh0ZNWE68dfCumFFw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz", + "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==", "license": "MIT" }, "node_modules/@expo/xcpretty": { @@ -3199,30 +3185,30 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.7.tgz", - "integrity": "sha512-o79whsqL5fbPTUQO9w1FptRd4cw1TaeOrXtQSLQeDrMVAenw/wmsjyPK10VKtvqxa1KNMtWEyfgxcM8CVZVFmg==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.76.8.tgz", + "integrity": "sha512-vQQi3kabQpj21Iohy2ou3/laCRE5hlW4r122ZivqCIN/UMwr5vT2/fTgPOBQoJ5X3YhZBe58BmifIstZutm0Ew==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.7.tgz", - "integrity": "sha512-+8H4DXJREM4l/pwLF/wSVMRzVhzhGDix5jLezNrMD9J1U1AMfV2aSkWA1XuqR7pjPs/Vqf6TaPL7vJMZ4LU05Q==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.76.8.tgz", + "integrity": "sha512-84RUEhDZS+q7vPtxKi0iMZLd5/W0VN7NOyqX5f+burV3xMYpUhpF5TDJ2Ysol7dJrvEZHm6ISAriO85++V8YDw==", "license": "MIT", "dependencies": { - "@react-native/codegen": "0.76.7" + "@react-native/codegen": "0.76.8" }, "engines": { "node": ">=18" } }, "node_modules/@react-native/babel-preset": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.7.tgz", - "integrity": "sha512-/c5DYZ6y8tyg+g8tgXKndDT7mWnGmkZ9F+T3qNDfoE3Qh7ucrNeC2XWvU9h5pk8eRtj9l4SzF4aO1phzwoibyg==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.76.8.tgz", + "integrity": "sha512-xrP+r3orRzzxtC2TrfGIP6IYi1f4AiWlnSiWf4zxEdMFzKrYdmxhD0FPtAZb77B0DqFIW5AcBFlm4grfL/VgfA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -3266,7 +3252,7 @@ "@babel/plugin-transform-typescript": "^7.25.2", "@babel/plugin-transform-unicode-regex": "^7.24.7", "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.76.7", + "@react-native/babel-plugin-codegen": "0.76.8", "babel-plugin-syntax-hermes-parser": "^0.25.1", "babel-plugin-transform-flow-enums": "^0.0.2", "react-refresh": "^0.14.0" @@ -3279,9 +3265,9 @@ } }, "node_modules/@react-native/codegen": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.7.tgz", - "integrity": "sha512-FAn585Ll65YvkSrKDyAcsdjHhhAGiMlSTUpHh0x7J5ntudUns+voYms0xMP+pEPt0XuLdjhD7zLIIlAWP407+g==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.76.8.tgz", + "integrity": "sha512-qvKhcYBkRHJFkeWrYm66kEomQOTVXWiHBkZ8VF9oC/71OJkLszpTpVOuPIyyib6fqhjy9l7mHYGYenSpfYI5Ww==", "license": "MIT", "dependencies": { "@babel/parser": "^7.25.3", @@ -3322,13 +3308,13 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.7.tgz", - "integrity": "sha512-lrcsY2WPLCEWU1pjdNV9+Ccj8vCEwCCURZiPa5aqi7lKB4C++1hPrxA8/CWWnTNcQp76DsBKGYqTFj7Ud4aupw==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.76.8.tgz", + "integrity": "sha512-3rs6YehAVEootGpzchmj1ln2BCSTnIDTKqAYykUggEwpplg+CNTiBrvRrnjmlLXk3nOlIE8KOw4zRCd3PpI+bg==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.76.7", - "@react-native/metro-babel-transformer": "0.76.7", + "@react-native/dev-middleware": "0.76.8", + "@react-native/metro-babel-transformer": "0.76.8", "chalk": "^4.0.0", "execa": "^5.1.1", "invariant": "^2.2.4", @@ -3343,10 +3329,10 @@ "node": ">=18" }, "peerDependencies": { - "@react-native-community/cli-server-api": "*" + "@react-native-community/cli": "*" }, "peerDependenciesMeta": { - "@react-native-community/cli-server-api": { + "@react-native-community/cli": { "optional": true } } @@ -3453,22 +3439,22 @@ "license": "ISC" }, "node_modules/@react-native/debugger-frontend": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.7.tgz", - "integrity": "sha512-89ZtZXt7ZxE94i7T94qzZMhp4Gfcpr/QVpGqEaejAxZD+gvDCH21cYSF+/Rz2ttBazm0rk5MZ0mFqb0Iqp1jmw==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.76.8.tgz", + "integrity": "sha512-kSukBw2C++5ENLUCAp/1uEeiFgiHi/MBa71Wgym3UD5qwu2vOSPOTSKRX7q2Jb676MUzTcrIaJBZ/r2qk25u7Q==", "license": "BSD-3-Clause", "engines": { "node": ">=18" } }, "node_modules/@react-native/dev-middleware": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.7.tgz", - "integrity": "sha512-Jsw8g9DyLPnR9yHEGuT09yHZ7M88/GL9CtU9WmyChlBwdXSeE3AmRqLegsV3XcgULQ1fqdemokaOZ/MwLYkjdA==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.76.8.tgz", + "integrity": "sha512-KYx7hFME2uYQRCDCqb19ghw51TAdh48PZ5EMpoU2kPA1SKKO9c1bUbpsKRhVZ0bv1QqEX6fjox3c4/WYRozHQA==", "license": "MIT", "dependencies": { "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.76.7", + "@react-native/debugger-frontend": "0.76.8", "chrome-launcher": "^0.15.2", "chromium-edge-launcher": "^0.2.0", "connect": "^3.6.5", @@ -3509,31 +3495,31 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.7.tgz", - "integrity": "sha512-gQI6RcrJbigU8xk7F960C5xQIgvbBj20TUvGecD+N2PHfbLpqR+92cj7hz3UcbrCONmTP40WHnbMMJ8P+kLsrA==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.76.8.tgz", + "integrity": "sha512-rgocQRydHS8IkcyUs1VFhz+Q0OjL3QYI5/A7pMLRz6nEW8GAmoFnXqwujtPHivVrXbuCLIzGBKnsl2hsZsOopg==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.7.tgz", - "integrity": "sha512-+iEikj6c6Zvrg1c3cYMeiPB+5nS8EaIC3jCtP6Muk3qc7c386IymEPM2xycIlfg04DPZvO3D4P2/vaO9/TCnUg==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.76.8.tgz", + "integrity": "sha512-bZzPjpDQaWU+F//N/WZJfaglYgYga4oXl9rzXyKOJP7KcebkOKJbAsG1mo7RCOVIbHYQCKUvQXIpV3IQOWNOEg==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/metro-babel-transformer": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.7.tgz", - "integrity": "sha512-jDS1wR7q46xY5ah+jF714Mvss9l7+lmwW/tplahZgLKozkYDC8Td5o9TOCgKlv18acw9H1V7zv8ivuRSj8ICPg==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/metro-babel-transformer/-/metro-babel-transformer-0.76.8.tgz", + "integrity": "sha512-tEjNJo3Wwiig1OmI7H3cLOrAkAxT9lBqs1k+oanRm64o0Cay2ACH0PdXrk45sxENU3iTfxXeQ7mmY1u2XVYDpw==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.76.7", + "@react-native/babel-preset": "0.76.8", "hermes-parser": "0.23.1", "nullthrows": "^1.1.1" }, @@ -3545,15 +3531,15 @@ } }, "node_modules/@react-native/normalize-colors": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.7.tgz", - "integrity": "sha512-ST1xxBuYVIXPdD81dR6+tzIgso7m3pa9+6rOBXTh5Xm7KEEFik7tnQX+GydXYMp3wr1gagJjragdXkPnxK6WNg==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.76.8.tgz", + "integrity": "sha512-FRjRvs7RgsXjkbGSOjYSxhX5V70c0IzA/jy3HXeYpATMwD9fOR1DbveLW497QGsVdCa0vThbJUtR8rIzAfpHQA==", "license": "MIT" }, "node_modules/@react-native/virtualized-lists": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.7.tgz", - "integrity": "sha512-pRUf1jUO8H9Ft04CaWv76t34QI9wY0sydoYlIwEtqXjjMJgmgDoOCAWBjArgn2mk8/rK+u/uicI67ZCYCp1pJw==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.76.8.tgz", + "integrity": "sha512-OsB+LoEFH80wL+qhQrNpJR3O3oNDmyZf0go7/MQiayZbT8IkD8aPdHmK4QIVoIwAbFWXw7RkcFdubhSWwi0wAQ==", "license": "MIT", "dependencies": { "invariant": "^2.2.4", @@ -3639,9 +3625,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" @@ -3681,9 +3667,9 @@ } }, "node_modules/@types/node": { - "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "version": "22.13.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.16.tgz", + "integrity": "sha512-15tM+qA4Ypml/N7kyRdvfRjBQT2RL461uF1Bldn06K0Nzn1lY3nAPgHlsVrJxdZ9WhZiW0Fmc1lOYMtDsAuB3w==", "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -3706,9 +3692,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.18", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", - "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", + "version": "18.3.20", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.20.tgz", + "integrity": "sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -4027,13 +4013,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz", - "integrity": "sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==", + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", + "@babel/helper-define-polyfill-provider": "^0.6.4", "semver": "^6.3.1" }, "peerDependencies": { @@ -4041,25 +4027,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz", - "integrity": "sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" + "@babel/helper-define-polyfill-provider": "^0.6.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4131,9 +4117,9 @@ } }, "node_modules/babel-preset-expo": { - "version": "12.0.9", - "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.9.tgz", - "integrity": "sha512-1c+ysrTavT49WgVAj0OX/TEzt1kU2mfPhDaDajstshNHXFKPenMPWSViA/DHrJKVIMwaqr+z3GbUOD9GtKgpdg==", + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-12.0.10.tgz", + "integrity": "sha512-6QE52Bxsp5XRE8t0taKRFTFsmTG0ThQE+PTgCgLY9s8v2Aeh8R+E+riXhSHX6hP+diDmBFBdvLCUTq7kroJb1Q==", "license": "MIT", "dependencies": { "@babel/plugin-proposal-decorators": "^7.12.9", @@ -4142,7 +4128,7 @@ "@babel/plugin-transform-parameters": "^7.22.15", "@babel/preset-react": "^7.22.15", "@babel/preset-typescript": "^7.23.0", - "@react-native/babel-preset": "0.76.7", + "@react-native/babel-preset": "0.76.8", "babel-plugin-react-native-web": "~0.19.13", "react-refresh": "^0.14.2" }, @@ -4469,9 +4455,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", "funding": [ { "type": "opencollective", @@ -5112,9 +5098,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.112", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz", - "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==", + "version": "1.5.129", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.129.tgz", + "integrity": "sha512-JlXUemX4s0+9f8mLqib/bHH8gOHf5elKS6KeWG3sk3xozb/JTq/RLXIv8OKUWiK4Ah00Wm88EFj5PYkFr4RUPA==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -5385,32 +5371,34 @@ } }, "node_modules/expo": { - "version": "52.0.37", - "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.37.tgz", - "integrity": "sha512-fo37ClqjNLOVInerm7BU27H8lfPfeTC7Pmu72roPzq46DnJfs+KzTxTzE34GcJ0b6hMUx9FRSSGyTQqxzo2TVQ==", + "version": "52.0.42", + "resolved": "https://registry.npmjs.org/expo/-/expo-52.0.42.tgz", + "integrity": "sha512-t+PRYIzzPFAlF99OVJOjZwM1glLhN85XGD6vmeg6uwpADDILl9yw4dfy0DXL4hot5GJkAGaZ+uOHUljV4kC2Bg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.0", - "@expo/cli": "0.22.18", - "@expo/config": "~10.0.10", - "@expo/config-plugins": "~9.0.15", + "@expo/cli": "0.22.23", + "@expo/config": "~10.0.11", + "@expo/config-plugins": "~9.0.17", "@expo/fingerprint": "0.11.11", - "@expo/metro-config": "0.19.11", + "@expo/metro-config": "0.19.12", "@expo/vector-icons": "^14.0.0", - "babel-preset-expo": "~12.0.9", - "expo-asset": "~11.0.4", - "expo-constants": "~17.0.7", - "expo-file-system": "~18.0.11", + "babel-preset-expo": "~12.0.10", + "expo-asset": "~11.0.5", + "expo-constants": "~17.0.8", + "expo-file-system": "~18.0.12", "expo-font": "~13.0.4", "expo-keep-awake": "~14.0.3", "expo-modules-autolinking": "2.0.8", - "expo-modules-core": "2.2.2", + "expo-modules-core": "2.2.3", "fbemitter": "^3.0.0", "web-streams-polyfill": "^3.3.2", "whatwg-url-without-unicode": "8.0.0-3" }, "bin": { - "expo": "bin/cli" + "expo": "bin/cli", + "expo-modules-autolinking": "bin/autolinking", + "fingerprint": "bin/fingerprint" }, "peerDependencies": { "@expo/dom-webview": "*", @@ -5432,13 +5420,13 @@ } }, "node_modules/expo-asset": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.4.tgz", - "integrity": "sha512-CdIywU0HrR3wsW5c3n0cT3jW9hccZdnqGsRqY+EY/RWzJbDXtDfAQVEiFHO3mDK7oveUwrP2jK/6ZRNek41/sg==", + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.0.5.tgz", + "integrity": "sha512-TL60LmMBGVzs3NQcO8ylWqBumMh4sx0lmeJsn7+9C88fylGDhyyVnKZ1PyTXo9CVDBkndutZx2JUEQWM9BaiXw==", "license": "MIT", "dependencies": { "@expo/image-utils": "^0.6.5", - "expo-constants": "~17.0.7", + "expo-constants": "~17.0.8", "invariant": "^2.2.4", "md5-file": "^3.2.3" }, @@ -5449,12 +5437,12 @@ } }, "node_modules/expo-constants": { - "version": "17.0.7", - "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.7.tgz", - "integrity": "sha512-sp5NUiV17I3JblVPIBDgoxgt7JIZS30vcyydCYHxsEoo+aKaeRYXxGYilCvb9lgI6BBwSL24sQ6ZjWsCWoF1VA==", + "version": "17.0.8", + "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.0.8.tgz", + "integrity": "sha512-XfWRyQAf1yUNgWZ1TnE8pFBMqGmFP5Gb+SFSgszxDdOoheB/NI5D4p7q86kI2fvGyfTrxAe+D+74nZkfsGvUlg==", "license": "MIT", "dependencies": { - "@expo/config": "~10.0.10", + "@expo/config": "~10.0.11", "@expo/env": "~0.4.2" }, "peerDependencies": { @@ -5463,9 +5451,9 @@ } }, "node_modules/expo-file-system": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.11.tgz", - "integrity": "sha512-yDwYfEzWgPXsBZHJW2RJ8Q66ceiFN9Wa5D20pp3fjXVkzPBDwxnYwiPWk4pVmCa5g4X5KYMoMne1pUrsL4OEpg==", + "version": "18.0.12", + "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.0.12.tgz", + "integrity": "sha512-HAkrd/mb8r+G3lJ9MzmGeuW2B+BxQR1joKfeCyY4deLl1zoZ48FrAWjgZjHK9aHUVhJ0ehzInu/NQtikKytaeg==", "license": "MIT", "dependencies": { "web-streams-polyfill": "^3.3.2" @@ -5554,9 +5542,9 @@ } }, "node_modules/expo-modules-core": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.2.2.tgz", - "integrity": "sha512-SgjK86UD89gKAscRK3bdpn6Ojfs/KU4GujtuFx1wm4JaBjmXH4aakWkItkPlAV2pjIiHJHWQbENL9xjbw/Qr/g==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.2.3.tgz", + "integrity": "sha512-01QqZzpP/wWlxnNly4G06MsOBUTbMDj02DQigZoXfDh80vd/rk3/uVXqnZgOdLSggTs6DnvOgAUy0H2q30XdUg==", "license": "MIT", "dependencies": { "invariant": "^2.2.4" @@ -5736,9 +5724,9 @@ "license": "MIT" }, "node_modules/flow-parser": { - "version": "0.263.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.263.0.tgz", - "integrity": "sha512-F0Tr7SUvZ4BQYglFOkr8rCTO5FPjCwMhm/6i57h40F80Oz/hzzkqte4lGO0vGJ7THQonuXcTyYqCdKkAwt5d2w==", + "version": "0.266.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.266.1.tgz", + "integrity": "sha512-dON6h+yO7FGa/FO5NQCZuZHN0o3I23Ev6VYOJf9d8LpdrArHPt39wE++LLmueNV/hNY5hgWGIIrgnrDkRcXkPg==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -7323,9 +7311,9 @@ } }, "node_modules/metro": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.81.3.tgz", - "integrity": "sha512-upilFs7z1uLKvdzFYHiVKrGT/uC7h7d53R0g/FaJoQvLfA8jQG2V69jeOcGi4wCsFYvl1zBSZvKxpQb0nA3giQ==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.81.4.tgz", + "integrity": "sha512-78f0aBNPuwXW7GFnSc+Y0vZhbuQorXxdgqQfvSRqcSizqwg9cwF27I05h47tL8AzQcizS1JZncvq4xf5u/Qykw==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", @@ -7349,18 +7337,18 @@ "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.81.3", - "metro-cache": "0.81.3", - "metro-cache-key": "0.81.3", - "metro-config": "0.81.3", - "metro-core": "0.81.3", - "metro-file-map": "0.81.3", - "metro-resolver": "0.81.3", - "metro-runtime": "0.81.3", - "metro-source-map": "0.81.3", - "metro-symbolicate": "0.81.3", - "metro-transform-plugins": "0.81.3", - "metro-transform-worker": "0.81.3", + "metro-babel-transformer": "0.81.4", + "metro-cache": "0.81.4", + "metro-cache-key": "0.81.4", + "metro-config": "0.81.4", + "metro-core": "0.81.4", + "metro-file-map": "0.81.4", + "metro-resolver": "0.81.4", + "metro-runtime": "0.81.4", + "metro-source-map": "0.81.4", + "metro-symbolicate": "0.81.4", + "metro-transform-plugins": "0.81.4", + "metro-transform-worker": "0.81.4", "mime-types": "^2.1.27", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", @@ -7377,9 +7365,9 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.81.3.tgz", - "integrity": "sha512-ENqtnPy2mQZFOuKrbqHRcAwZuaYe43X+30xIF0xlkLuMyCvc0CsFzrrSK9EqrQwexhVlqaRALb0GQbBMcE/y8g==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.81.4.tgz", + "integrity": "sha512-WW0yswWrW+eTVK9sYD+b1HwWOiUlZlUoomiw9TIOk0C+dh2V90Wttn/8g62kYi0Y4i+cJfISerB2LbV4nuRGTA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -7407,23 +7395,23 @@ } }, "node_modules/metro-cache": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.81.3.tgz", - "integrity": "sha512-6UelMQYjlto/79tTXu0vsTxAX4e+Bkf0tgtDL1BNx3wd68pBg8qKIYpJPaUlOIaNUzFXTBDjYwUverkEW0KAtA==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.81.4.tgz", + "integrity": "sha512-sxCPH3gowDxazSaZZrwdNPEpnxR8UeXDnvPjBF9+5btDBNN2DpWvDAXPvrohkYkFImhc0LajS2V7eOXvu9PnvQ==", "license": "MIT", "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", - "metro-core": "0.81.3" + "metro-core": "0.81.4" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-cache-key": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.81.3.tgz", - "integrity": "sha512-KPsPSRUd6uRva7k7k/DqiiD8td7URQWx0RkX/Cj5+bed5zSXEg/XoQA+b+DmMxS5C7TqP61Fh3XvHx6TQRW82A==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.81.4.tgz", + "integrity": "sha512-3SaWQybvf1ivasjBegIxzVKLJzOpcz+KsnGwXFOYADQq0VN4cnM7tT+u2jkOhk6yJiiO1WIjl68hqyMOQJRRLg==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -7433,42 +7421,42 @@ } }, "node_modules/metro-config": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.81.3.tgz", - "integrity": "sha512-WpTaT0iQr5juVY50Y/cyacG2ggZqF38VshEQepT+ovPK8E/xUVxlbO5yxLSXUxxUXX3Hka9r6g64+y2WC6c/xQ==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.81.4.tgz", + "integrity": "sha512-QnhMy3bRiuimCTy7oi5Ug60javrSa3lPh0gpMAspQZHY9h6y86jwHtZPLtlj8hdWQESIlrbeL8inMSF6qI/i9Q==", "license": "MIT", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.81.3", - "metro-cache": "0.81.3", - "metro-core": "0.81.3", - "metro-runtime": "0.81.3" + "metro": "0.81.4", + "metro-cache": "0.81.4", + "metro-core": "0.81.4", + "metro-runtime": "0.81.4" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-core": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.81.3.tgz", - "integrity": "sha512-WZ+qohnpvvSWdPj1VJPUrZz+2ik29M+UUpMU6YrmzQUfDyZ6JYHhzlw5WVBtwpt/+2xTsIyrZ2C1fByT/DsLQA==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.81.4.tgz", + "integrity": "sha512-GdL4IgmgJhrMA/rTy2lRqXKeXfC77Rg+uvhUEkbhyfj/oz7PrdSgvIFzziapjdHwk1XYq0KyFh/CcVm8ZawG6A==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.81.3" + "metro-resolver": "0.81.4" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-file-map": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.81.3.tgz", - "integrity": "sha512-F+t4lnVRoauJxtr9xmI4pWIOE77/vl0IrHDGeJSI9cW6LmuqxkpOlZHTKpbs/hMAo6+KhG2JMJACQDvXDLd/GA==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.81.4.tgz", + "integrity": "sha512-qUIBzkiqOi3qEuscu4cJ83OYQ4hVzjON19FAySWqYys9GKCmxlKa7LkmwqdpBso6lQl+JXZ7nCacX90w5wQvPA==", "license": "MIT", "dependencies": { "debug": "^2.2.0", @@ -7501,9 +7489,9 @@ "license": "MIT" }, "node_modules/metro-minify-terser": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.81.3.tgz", - "integrity": "sha512-912AYv3OmwcbUwzCdWbdQRk+RV6kXXluHKlhBdYFD3kr4Ece691rzlofU/Mlt9qZrhHtctD5Q8cFqOEf9Z69bQ==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.81.4.tgz", + "integrity": "sha512-oVvq/AGvqmbhuijJDZZ9npeWzaVyeBwQKtdlnjcQ9fH7nR15RiBr5y2zTdgTEdynqOIb1Kc16l8CQIUSzOWVFA==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", @@ -7514,9 +7502,9 @@ } }, "node_modules/metro-resolver": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.81.3.tgz", - "integrity": "sha512-XnjENY1c6jcsEfFVIjN/8McUIInCVgGxv5eva+9ZWeCTyiAE/L5HPj2ai/Myb349+6QuSMR0dscTkKCnOwWXdw==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.81.4.tgz", + "integrity": "sha512-Ng7G2mXjSExMeRzj6GC19G6IJ0mfIbOLgjArsMWJgtt9ViZiluCwgWsMW9juBC5NSwjJxUMK2x6pC5NIMFLiHA==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -7526,9 +7514,9 @@ } }, "node_modules/metro-runtime": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.81.3.tgz", - "integrity": "sha512-neuGRMC2pgGKIFPbmbrxW41/SmvL7OX4i1LN+saUY2t1cZfxf9haQHUMCGhO3498uEL2N+ulKRSlQrHt6XwGaw==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.81.4.tgz", + "integrity": "sha512-fBoRgqkF69CwyPtBNxlDi5ha26Zc8f85n2THXYoh13Jn/Bkg8KIDCdKPp/A1BbSeNnkH/++H2EIIfnmaff4uRg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.0", @@ -7539,9 +7527,9 @@ } }, "node_modules/metro-source-map": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.3.tgz", - "integrity": "sha512-BHJJurmDQRn3hCbBawh/UHzPz3duMpwpE3ofImO2DoWHYzn6nSg/D4wfCN4y14d9fFLE4e0I+BAOX1HWNP4jsw==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.81.4.tgz", + "integrity": "sha512-IOwVQ7mLqoqvsL70RZtl1EyE3f9jp43kVsAsb/B/zoWmu0/k4mwEhGLTxmjdXRkLJqPqPrh7WmFChAEf9trW4Q==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", @@ -7549,9 +7537,9 @@ "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.81.3", + "metro-symbolicate": "0.81.4", "nullthrows": "^1.1.1", - "ob1": "0.81.3", + "ob1": "0.81.4", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -7560,14 +7548,14 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.3.tgz", - "integrity": "sha512-LQLT6WopQmIz2SDSVh3Lw7nLzF58HpsrPYqRB7RpRXBYhYmPFIjiGaP8qqtKHXczM/5YAOJzpgt8t/OGZgh6Eg==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.81.4.tgz", + "integrity": "sha512-rWxTmYVN6/BOSaMDUHT8HgCuRf6acd0AjHkenYlHpmgxg7dqdnAG1hLq999q2XpW5rX+cMamZD5W5Ez2LqGaag==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.81.3", + "metro-source-map": "0.81.4", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -7580,9 +7568,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.81.3.tgz", - "integrity": "sha512-4JMUXhBB5y4h3dyA272k7T7+U3+J4fSBcct0Y8Yur9ziZB/dK8fieEQg5ZPfEGsgOGI+54zTzOUqga6AgmZSNg==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.81.4.tgz", + "integrity": "sha512-nlP069nDXm4v28vbll4QLApAlvVtlB66rP6h+ml8Q/CCQCPBXu2JLaoxUmkIOJQjLhMRUcgTyQHq+TXWJhydOQ==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -7597,9 +7585,9 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.81.3.tgz", - "integrity": "sha512-KZqm9sVyBKRygUxRm+yP4DguE9R1EEv28KJhIxghNp5dcdVXBYUPe1xHoc3QVdzD9c3tf8JFzA2FBlKTlwMwNg==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.81.4.tgz", + "integrity": "sha512-lKAeRZ8EUMtx2cA/Y4KvICr9bIr5SE03iK3lm+l9wyn2lkjLUuPjYVep159inLeDqC6AtSubsA8MZLziP7c03g==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -7607,13 +7595,13 @@ "@babel/parser": "^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "metro": "0.81.3", - "metro-babel-transformer": "0.81.3", - "metro-cache": "0.81.3", - "metro-cache-key": "0.81.3", - "metro-minify-terser": "0.81.3", - "metro-source-map": "0.81.3", - "metro-transform-plugins": "0.81.3", + "metro": "0.81.4", + "metro-babel-transformer": "0.81.4", + "metro-cache": "0.81.4", + "metro-cache-key": "0.81.4", + "metro-minify-terser": "0.81.4", + "metro-source-map": "0.81.4", + "metro-transform-plugins": "0.81.4", "nullthrows": "^1.1.1" }, "engines": { @@ -7715,9 +7703,9 @@ } }, "node_modules/mime-db": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7916,9 +7904,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", @@ -8077,9 +8065,9 @@ "license": "MIT" }, "node_modules/ob1": { - "version": "0.81.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.81.3.tgz", - "integrity": "sha512-wd8zdH0DWsn2iDVn2zT/QURihcqoc73K8FhNCmQ16qkJaoYJLNb/N+huOwdCgsbNP8Lk/s1+dPnDETx+RzsrWA==", + "version": "0.81.4", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.81.4.tgz", + "integrity": "sha512-EZLYM8hfPraC2SYOR5EWLFAPV5e6g+p83m2Jth9bzCpFxP1NDQJYXdmXRB2bfbaWQSmm6NkIQlbzk7uU5lLfgg==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -8478,9 +8466,9 @@ } }, "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "license": "MIT", "engines": { "node": ">= 6" @@ -8853,19 +8841,19 @@ "license": "MIT" }, "node_modules/react-native": { - "version": "0.76.7", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.7.tgz", - "integrity": "sha512-GPJcQeO3qUi1MvuhsC2DC6tH8gJQ4uc4JWPORrdeuCGFWE3QLsN8/hiChTEvJREHLfQSV61YPI8gIOtAQ8c37g==", + "version": "0.76.8", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.76.8.tgz", + "integrity": "sha512-sVoAd/cDBdVoLjNz8Lp5DAg4l6Iag0l5AiChN2J/NGhM//PW6+MIW50TI8G1iZz4rquAgWtcCHwEp5P5FvMyDA==", "license": "MIT", "dependencies": { "@jest/create-cache-key-function": "^29.6.3", - "@react-native/assets-registry": "0.76.7", - "@react-native/codegen": "0.76.7", - "@react-native/community-cli-plugin": "0.76.7", - "@react-native/gradle-plugin": "0.76.7", - "@react-native/js-polyfills": "0.76.7", - "@react-native/normalize-colors": "0.76.7", - "@react-native/virtualized-lists": "0.76.7", + "@react-native/assets-registry": "0.76.8", + "@react-native/codegen": "0.76.8", + "@react-native/community-cli-plugin": "0.76.8", + "@react-native/gradle-plugin": "0.76.8", + "@react-native/js-polyfills": "0.76.8", + "@react-native/normalize-colors": "0.76.8", + "@react-native/virtualized-lists": "0.76.8", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -10363,9 +10351,9 @@ } }, "node_modules/undici": { - "version": "6.21.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", - "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", + "version": "6.21.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.2.tgz", + "integrity": "sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==", "license": "MIT", "engines": { "node": ">=18.17" diff --git a/examples/text-embeddings/package.json b/examples/text-embeddings/package.json new file mode 100644 index 000000000..f96f5f00c --- /dev/null +++ b/examples/text-embeddings/package.json @@ -0,0 +1,24 @@ +{ + "name": "text-embeddings", + "version": "1.0.0", + "main": "index.ts", + "scripts": { + "start": "expo start", + "android": "expo run:android", + "ios": "expo run:ios", + "web": "expo start --web" + }, + "dependencies": { + "expo": "~52.0.42", + "expo-status-bar": "~2.0.1", + "react": "18.3.1", + "react-native": "0.76.8" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@types/react": "~18.3.12", + "react-native-executorch": "file:../../react-native-executorch-20250401133031.tgz", + "typescript": "^5.3.3" + }, + "private": true +} diff --git a/examples/text-embeddings/tsconfig.json b/examples/text-embeddings/tsconfig.json new file mode 100644 index 000000000..b9567f605 --- /dev/null +++ b/examples/text-embeddings/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "expo/tsconfig.base", + "compilerOptions": { + "strict": true + } +} diff --git a/examples/text-embeddings/yarn.lock b/examples/text-embeddings/yarn.lock new file mode 100644 index 000000000..18e4f5389 --- /dev/null +++ b/examples/text-embeddings/yarn.lock @@ -0,0 +1,7934 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@0no-co/graphql.web@npm:^1.0.5, @0no-co/graphql.web@npm:^1.0.8": + version: 1.1.2 + resolution: "@0no-co/graphql.web@npm:1.1.2" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + checksum: ddf4f073c9f03c41a5672b9285ad5573f34ad6d40ed73691c128d5332ff6186222ff909949cf6ef07bad8b417bbb5b609636e049700d3727a196111019a7aab4 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 + languageName: node + linkType: hard + +"@babel/code-frame@npm:7.10.4, @babel/code-frame@npm:~7.10.4": + version: 7.10.4 + resolution: "@babel/code-frame@npm:7.10.4" + dependencies: + "@babel/highlight": ^7.10.4 + checksum: feb4543c8a509fe30f0f6e8d7aa84f82b41148b963b826cd330e34986f649a85cb63b2f13dd4effdf434ac555d16f14940b8ea5f4433297c2f5ff85486ded019 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.24.7, @babel/code-frame@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": ^7.25.9 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: db13f5c42d54b76c1480916485e6900748bbcb0014a8aca87f50a091f70ff4e0d0a6db63cade75eb41fcc3d2b6ba0a7f89e343def4f96f00269b41b8ab8dd7b8 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.8": + version: 7.26.8 + resolution: "@babel/compat-data@npm:7.26.8" + checksum: 1bb04c6860c8c9555b933cb9c3caf5ef1dac331a37a351efb67956fc679f695d487aea76e792dd43823702c1300f7906f2a298e50b4a8d7ec199ada9c340c365 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.25.2": + version: 7.26.10 + resolution: "@babel/core@npm:7.26.10" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.26.2 + "@babel/generator": ^7.26.10 + "@babel/helper-compilation-targets": ^7.26.5 + "@babel/helper-module-transforms": ^7.26.0 + "@babel/helpers": ^7.26.10 + "@babel/parser": ^7.26.10 + "@babel/template": ^7.26.9 + "@babel/traverse": ^7.26.10 + "@babel/types": ^7.26.10 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 0217325bd46fb9c828331c14dbe3f015ee13d9aecec423ef5acc0ce8b51a3d2a2d55f2ede252b99d0ab9b2f1a06e2881694a890f92006aeac9ebe5be2914c089 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.25.0, @babel/generator@npm:^7.26.10, @babel/generator@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/generator@npm:7.27.0" + dependencies: + "@babel/parser": ^7.27.0 + "@babel/types": ^7.27.0 + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + jsesc: ^3.0.2 + checksum: cdb6e3e8441241321192275f7a1265b6d610b44d57ae3bbb6047cb142849fd2ace1e15d5ee0685337e152f5d8760babd3ab898b6e5065e4b344006d2f0da759f + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: 41edda10df1ae106a9b4fe617bf7c6df77db992992afd46192534f5cff29f9e49a303231733782dd65c5f9409714a529f215325569f14282046e9d3b7a1ffb6c + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.9, @babel/helper-compilation-targets@npm:^7.26.5": + version: 7.27.0 + resolution: "@babel/helper-compilation-targets@npm:7.27.0" + dependencies: + "@babel/compat-data": ^7.26.8 + "@babel/helper-validator-option": ^7.25.9 + browserslist: ^4.24.0 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: ad8b2351cde8d2e5c417f02f0d88af61ba080439e74f6d6ac578af5d63f8e35d0f36619cf18620ab627e9360c5c4b8a23784eecbef32d97944acb4ad2a57223f + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.25.9, @babel/helper-create-class-features-plugin@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.27.0" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/helper-replace-supers": ^7.26.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/traverse": ^7.27.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 4ec1f044effa7d9984d20ac9201184986c2c9d688495bf8204c5bf0e042c4e6752d336884997b1140f8f36107edda5f02891eb6660273ab906c9b1e6b2491b71 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.25.9": + version: 7.27.0 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.0" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + regexpu-core: ^6.2.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 9b86f4f42954fe552a784fd9f6325aaf70ec280adf961023e303bdac33428deb26d06efeeaa6b776ef2d4ad43b402238f1e7979152aed798fe7577b6a520e572 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.3, @babel/helper-define-polyfill-provider@npm:^0.6.4": + version: 0.6.4 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.4" + dependencies: + "@babel/helper-compilation-targets": ^7.22.6 + "@babel/helper-plugin-utils": ^7.22.5 + debug: ^4.1.1 + lodash.debounce: ^4.0.8 + resolve: ^1.14.2 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: bfbcb41f005ba11497b459cf801650af558b533f383b2f57034e9ccce592a0af699b585898deef93598ed3d9bd14502327e18dfc8a92a3db48b2a49ae2886f86 + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 8e2f1979b6d596ac2a8cbf17f2cf709180fefc274ac3331408b48203fe19134ed87800774ef18838d0275c3965130bae22980d90caed756b7493631d4b2cf961 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-module-imports@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 1b411ce4ca825422ef7065dffae7d8acef52023e51ad096351e3e2c05837e9bf9fca2af9ca7f28dc26d596a588863d0fedd40711a88e350b736c619a80e704e6 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/helper-module-transforms@npm:7.26.0" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 942eee3adf2b387443c247a2c190c17c4fd45ba92a23087abab4c804f40541790d51ad5277e4b5b1ed8d5ba5b62de73857446b7742f835c18ebd350384e63917 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" + dependencies: + "@babel/types": ^7.25.9 + checksum: f09d0ad60c0715b9a60c31841b3246b47d67650c512ce85bbe24a3124f1a4d66377df793af393273bc6e1015b0a9c799626c48e53747581c1582b99167cc65dc + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.9, @babel/helper-plugin-utils@npm:^7.26.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.26.5 + resolution: "@babel/helper-plugin-utils@npm:7.26.5" + checksum: 4771fbb1711c624c62d12deabc2ed7435a6e6994b6ce09d5ede1bc1bf19be59c3775461a1e693bdd596af865685e87bb2abc778f62ceadc1b2095a8e2aa74180 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-wrap-function": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: ea37ad9f8f7bcc27c109963b8ebb9d22bac7a5db2a51de199cb560e251d5593fe721e46aab2ca7d3e7a24b0aa4aff0eaf9c7307af9c2fd3a1d84268579073052 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.25.9, @babel/helper-replace-supers@npm:^7.26.5": + version: 7.26.5 + resolution: "@babel/helper-replace-supers@npm:7.26.5" + dependencies: + "@babel/helper-member-expression-to-functions": ^7.25.9 + "@babel/helper-optimise-call-expression": ^7.25.9 + "@babel/traverse": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: c5ab31b29c7cc09e30278f8860ecdb873ce6c84b5c08bc5239c369c7c4fe9f0a63cda61b55b7bbd20edb4e5dc32e73087cc3c57d85264834bd191551d1499185 + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0, @babel/helper-skip-transparent-expression-wrappers@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.9" + dependencies: + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: fdbb5248932198bc26daa6abf0d2ac42cab9c2dbb75b7e9f40d425c8f28f09620b886d40e7f9e4e08ffc7aaa2cefe6fc2c44be7c20e81f7526634702fb615bdc + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 6435ee0849e101681c1849868278b5aee82686ba2c1e27280e5e8aca6233af6810d39f8e4e693d2f2a44a3728a6ccfd66f72d71826a94105b86b731697cdfa99 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 5b85918cb1a92a7f3f508ea02699e8d2422fe17ea8e82acd445006c0ef7520fbf48e3dbcdaf7b0a1d571fc3a2715a29719e5226636cb6042e15fe6ed2a590944 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-option@npm:7.25.9" + checksum: 9491b2755948ebbdd68f87da907283698e663b5af2d2b1b02a2765761974b1120d5d8d49e9175b167f16f72748ffceec8c9cf62acfbee73f4904507b246e2b3d + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-wrap-function@npm:7.25.9" + dependencies: + "@babel/template": ^7.25.9 + "@babel/traverse": ^7.25.9 + "@babel/types": ^7.25.9 + checksum: 8ec1701e60ae004415800c4a7a188f5564c73b4e4f3fdf58dd3f34a3feaa9753173f39bbd6d02e7ecc974f48155efc7940e62584435b3092c07728ee46a604ea + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.26.10": + version: 7.27.0 + resolution: "@babel/helpers@npm:7.27.0" + dependencies: + "@babel/template": ^7.27.0 + "@babel/types": ^7.27.0 + checksum: d11bb8ada0c5c298d2dbd478d69b16a79216b812010e78855143e321807df4e34f60ab65e56332e72315ccfe52a22057f0cf1dcc06e518dcfa3e3141bb8576cd + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.10.4": + version: 7.25.9 + resolution: "@babel/highlight@npm:7.25.9" + dependencies: + "@babel/helper-validator-identifier": ^7.25.9 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: a6e0ac0a1c4bef7401915ca3442ab2b7ae4adf360262ca96b91396bfb9578abb28c316abf5e34460b780696db833b550238d9256bdaca60fade4ba7a67645064 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.26.10, @babel/parser@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/parser@npm:7.27.0" + dependencies: + "@babel/types": ^7.27.0 + bin: + parser: ./bin/babel-parser.js + checksum: 062a4e6d51553603253990c84e051ed48671a55b9d4e9caf2eff9dc888465070a0cfd288a467dbf0d99507781ea4a835b5606e32ddc0319f1b9273f913676829 + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.13.0": + version: 7.18.6 + resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 + languageName: node + linkType: hard + +"@babel/plugin-proposal-decorators@npm:^7.12.9": + version: 7.25.9 + resolution: "@babel/plugin-proposal-decorators@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-syntax-decorators": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ff598127818ac8e704009f1a9a207766ada5f84f6ca74e9de662cb6ce32bcb846c28fd52d6c5df9c55b4eac9a2a3492aa71fbd5cef0569a14b6f12003df22af2 + languageName: node + linkType: hard + +"@babel/plugin-proposal-export-default-from@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-proposal-export-default-from@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0fb96b1229ed15ecfb09e6bf40be2da249007155a3deca53d319420a4d3c028c884e888c447898cbcdaa079165e045a8317be6a9205bef0041e7333822a40da9 + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8": + version: 7.18.6 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.13.12": + version: 7.21.0 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.12.13": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-static-block@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 + languageName: node + linkType: hard + +"@babel/plugin-syntax-decorators@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-decorators@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aaf58b17e6aa08f41f93897daa93c601a486233a0375b4231799fc5c4e7c98480aaad3c1c44cf391a62e428c5f6546f76488a1023a4036bb87cd61fa79f1173b + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd + languageName: node + linkType: hard + +"@babel/plugin-syntax-export-default-from@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-syntax-export-default-from@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8eb254c8050369f3cfac7755230ad9d39a53d1b489e03170684d6b514a0d09ad6001c38e6dfd271a439a8035a57d60b8be7d3dd80f997c6bc5c7e688ed529517 + languageName: node + linkType: hard + +"@babel/plugin-syntax-flow@npm:^7.12.1, @babel/plugin-syntax-flow@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/plugin-syntax-flow@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fdc0d0a7b512e00d933e12cf93c785ea4645a193f4b539230b7601cfaa8c704410199318ce9ea14e5fca7d13e9027822f7d81a7871d3e854df26b6af04cc3c6c + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.24.7": + version: 7.26.0 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c122aa577166c80ee67f75aebebeef4150a132c4d3109d25d7fc058bf802946f883e330f20b78c1d3e3a5ada631c8780c263d2d01b5dbaecc69efefeedd42916 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-jsx@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb609d1ffb50b58f0c1bac8810d0e46a4f6c922aa171c458f3a19d66ee545d36e782d3bffbbc1fed0dc65a558bdce1caf5279316583c0fff5a2c1658982a8563 + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.14.5": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-syntax-typescript@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0e9821e8ba7d660c36c919654e4144a70546942ae184e85b8102f2322451eae102cbfadbcadd52ce077a2b44b400ee52394c616feab7b5b9f791b910e933fd33 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c29f081224859483accf55fb4d091db2aac0dcd0d7954bac5ca889030cc498d3f771aa20eb2e9cd8310084ec394d85fa084b97faf09298b6bc9541182b3eb5bb + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": + version: 7.26.8 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.26.8" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + "@babel/helper-remap-async-to-generator": ^7.25.9 + "@babel/traverse": ^7.26.8 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10424a1bbfbc7ffdb13cef1e832f76bb2d393a9fbfaa1eaa3091a8f6ec3e2ac0b66cf04fca9cb3fb4dbf3d1bd404d72dfce4a3742b4ef21f6271aca7076a65ef + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-remap-async-to-generator": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b3ad50fb93c171644d501864620ed23952a46648c4df10dc9c62cc9ad08031b66bd272cfdd708faeee07c23b6251b16f29ce0350473e4c79f0c32178d38ce3a6 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.25.0": + version: 7.27.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.27.0" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5817550c113d3dc4419d55cd8b2b231a8f260cbdee82d4b90f46814c241afc9c18b471ae47c478097f2d3a85ce0a0c1296ebdda59d973a70becbfc7c23901c96 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.25.4": + version: 7.25.9 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8d69e2c285486b63f49193cbcf7a15e1d3a5f632c1c07d7a97f65306df7f554b30270b7378dde143f8b557d1f8f6336c643377943dec8ec405e4cd11e90b9ea + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.25.4": + version: 7.25.9 + resolution: "@babel/plugin-transform-classes@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-replace-supers": ^7.25.9 + "@babel/traverse": ^7.25.9 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d12584f72125314cc0fa8c77586ece2888d677788ac75f7393f5da574dfe4e45a556f7e3488fab29c8777ab3e5856d7a2d79f6df02834083aaa9d766440e3c68 + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/template": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f77fa4bc0c1e0031068172df28852388db6b0f91c268d037905f459607cf1e8ebab00015f9f179f4ad96e11c5f381b635cd5dc4e147a48c7ac79d195ae7542de + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.24.8": + version: 7.25.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 965f63077a904828f4adee91393f83644098533442b8217d5a135c23a759a4c252c714074c965676a60d2c33f610f579a4eeb59ffd783724393af61c0ca45fef + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.22.11": + version: 7.25.9 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4dfe8df86c5b1d085d591290874bb2d78a9063090d71567ed657a418010ad333c3f48af2c974b865f53bbb718987a065f89828d43279a7751db1a56c9229078d + languageName: node + linkType: hard + +"@babel/plugin-transform-flow-strip-types@npm:^7.25.2, @babel/plugin-transform-flow-strip-types@npm:^7.25.9": + version: 7.26.5 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.26.5" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + "@babel/plugin-syntax-flow": ^7.26.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a15ae76aea55f1801a5c8ebdfdd0e4616f256ca1eeb504b0781120242aae5a2174439a084bacd2b9e3e83d2a8463cf10c2a8c9f0f0504ded21144297c2b4a380 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.24.7": + version: 7.26.9 + resolution: "@babel/plugin-transform-for-of@npm:7.26.9" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 361323cfc1d9e9dc0bf0d68326b5e7f4da5b8a8be8931f6cacda749d39b88ee1b0f9b4d8b771a5a4d52bb881a90da97950c8a9e6fb47f2c9db11d91f6351768e + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.25.1": + version: 7.25.9 + resolution: "@babel/plugin-transform-function-name@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/traverse": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8d7c8d019a6eb57eab5ca1be3e3236f175557d55b1f3b11f8ad7999e3fbb1cf37905fd8cb3a349bffb4163a558e9f33b63f631597fdc97c858757deac1b2fd7 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.25.2": + version: 7.25.9 + resolution: "@babel/plugin-transform-literals@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3cca75823a38aab599bc151b0fa4d816b5e1b62d6e49c156aa90436deb6e13649f5505973151a10418b64f3f9d1c3da53e38a186402e0ed7ad98e482e70c0c14 + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8c6febb4ac53852314d28b5e2c23d5dbbff7bf1e57d61f9672e0d97531ef7778b3f0ad698dcf1179f5486e626c77127508916a65eb846a89e98a92f70ed3537b + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.24.8, @babel/plugin-transform-modules-commonjs@npm:^7.26.3": + version: 7.26.3 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3" + dependencies: + "@babel/helper-module-transforms": ^7.26.0 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0ac9aa4e5fe9fe34b58ee174881631e5e1c89eee5b1ebfd1147934686be92fc5fbfdc11119f0b607b3743d36a1cbcb7c36f18e0dd4424d6d7b749b1b9a18808a + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 434346ba05cf74e3f4704b3bdd439287b95cd2a8676afcdc607810b8c38b6f4798cd69c1419726b2e4c7204e62e4a04d31b0360e91ca57a930521c9211e07789 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": + version: 7.26.6 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.26.6" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 752837d532b85c41f6bb868e83809605f513bc9a3b8e88ac3d43757c9bf839af4f246874c1c6d6902bb2844d355efccae602c3856098911f8abdd603672f8379 + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0528ef041ed88e8c3f51624ee87b8182a7f246fe4013f0572788e0727d20795b558f2b82e3989b5dd416cbd339500f0d88857de41b6d3b6fdacb1d5344bcc5b1 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.12.13, @babel/plugin-transform-object-rest-spread@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9" + dependencies: + "@babel/helper-compilation-targets": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-transform-parameters": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a8ff73e1c46a03056b3a2236bafd6b3a4b83da93afe7ee24a50d0a8088150bf85bc5e5977daa04e66ff5fb7613d02d63ad49b91ebb64cf3f3022598d722e3a7a + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b46a8d1e91829f3db5c252583eb00d05a779b4660abeea5500fda0f8ffa3584fd18299443c22f7fddf0ed9dfdb73c782c43b445dc468d4f89803f2356963b406 + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.24.8": + version: 7.25.9 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f1642a7094456067e82b176e1e9fd426fda7ed9df54cb6d10109fc512b622bf4b3c83acc5875125732b8622565107fdbe2d60fe3ec8685e1d1c22c38c1b57782 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.22.15, @babel/plugin-transform-parameters@npm:^7.24.7, @babel/plugin-transform-parameters@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-parameters@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d7ba2a7d05edbc85aed741289b0ff3d6289a1c25d82ac4be32c565f88a66391f46631aad59ceeed40824037f7eeaa7a0de1998db491f50e65a565cd964f78786 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.9" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6e3671b352c267847c53a170a1937210fa8151764d70d25005e711ef9b21969aaf422acc14f9f7fb86bc0e4ec43e7aefcc0ad9196ae02d262ec10f509f126a58 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9ce3e983fea9b9ba677c192aa065c0b42ebdc7774be4c02135df09029ad92a55c35b004650c75952cb64d650872ed18f13ab64422c6fc891d06333762caa8a0a + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.24.7, @babel/plugin-transform-react-display-name@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-display-name@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cd7020494e6f31c287834e8929e6a718d5b0ace21232fa30feb48622c2312045504c34b347dcff9e88145c349882b296a7d6b6cc3d3447d8c85502f16471747c + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-development@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.25.9" + dependencies: + "@babel/plugin-transform-react-jsx": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 537d38369537f1eb56041c4b770bc0733fde1801a7f5ffef40a1217ea448f33ee2fa8e6098a58a82fd00e432c1b9426a66849496da419020c9eca3b1b1a23779 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-self@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 41c833cd7f91b1432710f91b1325706e57979b2e8da44e83d86312c78bbe96cd9ef778b4e79e4e17ab25fa32c72b909f2be7f28e876779ede28e27506c41f4ae + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a3e0e5672e344e9d01fb20b504fe29a84918eaa70cec512c4d4b1b035f72803261257343d8e93673365b72c371f35cf34bb0d129720bf178a4c87812c8b9c662 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.25.2, @babel/plugin-transform-react-jsx@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/plugin-syntax-jsx": ^7.25.9 + "@babel/types": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 5c6523c3963e3c6cf4c3cc2768a3766318af05b8f6c17aff52a4010e2c170e87b2fcdc94e9c9223ae12158664df4852ce81b9c8d042c15ea8fd83d6375f9f30f + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.25.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9995c0fc7c25d3aaaa0ce84233de02eab2564ea111d0813ec5baa538eb21520402879cc787ad1ad4c2061b99cebc3beb09910e64c9592e8ccb42ae62d9e4fd9a + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.24.7": + version: 7.27.0 + resolution: "@babel/plugin-transform-regenerator@npm:7.27.0" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + regenerator-transform: ^0.15.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bd2f3278df31aa41cb34b051352e0d76e1feef6827a83885b6b66893a563cc9cc6bc34fc45899237e81224081ba951d8a7fed009c7de01e890646b291be7903c + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.24.7": + version: 7.26.10 + resolution: "@babel/plugin-transform-runtime@npm:7.26.10" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/helper-plugin-utils": ^7.26.5 + babel-plugin-polyfill-corejs2: ^0.4.10 + babel-plugin-polyfill-corejs3: ^0.11.0 + babel-plugin-polyfill-regenerator: ^0.6.1 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f50096ebea8c6106db2906b4b73955139c7c338d86f4940ed329703b49848843cf7a1308cafd6f23f9fc9f35f5e835daba2bb56be991b91d2a4a8092c4a9943b + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f774995d58d4e3a992b732cf3a9b8823552d471040e280264dd15e0735433d51b468fef04d75853d061309389c66bda10ce1b298297ce83999220eb0ad62741d + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-spread@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2403a5d49171b7714d5e5ecb1f598c61575a4dbe5e33e5a5f08c0ea990b75e693ca1ea983b6a96b2e3e5e7da48c8238333f525e47498c53b577c5d094d964c06 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7454b00844dbe924030dd15e2b3615b36e196500c4c47e98dabc6b37a054c5b1038ecd437e910aabf0e43bf56b973cb148d3437d50f6e2332d8309568e3e979b + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.25.2, @babel/plugin-transform-typescript@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/plugin-transform-typescript@npm:7.27.0" + dependencies: + "@babel/helper-annotate-as-pure": ^7.25.9 + "@babel/helper-create-class-features-plugin": ^7.27.0 + "@babel/helper-plugin-utils": ^7.26.5 + "@babel/helper-skip-transparent-expression-wrappers": ^7.25.9 + "@babel/plugin-syntax-typescript": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0629dffb332616d3a07f2718dc1ac1ff6b3092b59cb7b06594484b3bef9d16012ef3fe36b397000092a83aaac014c52b570e484d8903bb6a0a13d0b3a896829c + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.24.7": + version: 7.25.9 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.25.9 + "@babel/helper-plugin-utils": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e8baae867526e179467c6ef5280d70390fa7388f8763a19a27c21302dd59b121032568be080749514b097097ceb9af716bf4b90638f1b3cf689aa837ba20150f + languageName: node + linkType: hard + +"@babel/preset-flow@npm:^7.13.13": + version: 7.25.9 + resolution: "@babel/preset-flow@npm:7.25.9" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + "@babel/plugin-transform-flow-strip-types": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b1591ea63a7ace7e34bcefa6deba9e2814d7f082e3c074e2648efb68a1a49016ccefbea024156ba28bd3042a4e768e3eb8b5ecfe433978144fdaaadd36203ba2 + languageName: node + linkType: hard + +"@babel/preset-react@npm:^7.22.15": + version: 7.26.3 + resolution: "@babel/preset-react@npm:7.26.3" + dependencies: + "@babel/helper-plugin-utils": ^7.25.9 + "@babel/helper-validator-option": ^7.25.9 + "@babel/plugin-transform-react-display-name": ^7.25.9 + "@babel/plugin-transform-react-jsx": ^7.25.9 + "@babel/plugin-transform-react-jsx-development": ^7.25.9 + "@babel/plugin-transform-react-pure-annotations": ^7.25.9 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9c76f145026715c8e4a1f6c44f208918e700227d8d8a8068f4ae10d87031d23eb8b483e508cd4452d65066f731b7a8169527e66e83ffe165595e8db7899dd859 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.23.0": + version: 7.27.0 + resolution: "@babel/preset-typescript@npm:7.27.0" + dependencies: + "@babel/helper-plugin-utils": ^7.26.5 + "@babel/helper-validator-option": ^7.25.9 + "@babel/plugin-syntax-jsx": ^7.25.9 + "@babel/plugin-transform-modules-commonjs": ^7.26.3 + "@babel/plugin-transform-typescript": ^7.27.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 64bbde0069d6b40092796a5c02ce192499d6b0cecf208e881318a0a969b4ffea6c52b8b10b03cb6a1b7aa630076a8b49df39af90e421d81410a7269b34a393f3 + languageName: node + linkType: hard + +"@babel/register@npm:^7.13.16": + version: 7.25.9 + resolution: "@babel/register@npm:7.25.9" + dependencies: + clone-deep: ^4.0.1 + find-cache-dir: ^2.0.0 + make-dir: ^2.1.0 + pirates: ^4.0.6 + source-map-support: ^0.5.16 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1df38d9ed6fd60feb0a82e1926508bca8f60915ee8a12ab9f6c9714a8f13bafc7865409c7fa92604a5b79ba84f7990181b312bc469bfdfa30dd79655b3260b85 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.8.4": + version: 7.27.0 + resolution: "@babel/runtime@npm:7.27.0" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 3e73d9e65f76fad8f99802b5364c941f4a60c693b3eca66147bb0bfa54cf0fbe017232155e16e3fd83c0a049b51b8d7239efbd73626534abe8b54a6dd57dcb1b + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.0, @babel/template@npm:^7.25.9, @babel/template@npm:^7.26.9, @babel/template@npm:^7.27.0, @babel/template@npm:^7.3.3": + version: 7.27.0 + resolution: "@babel/template@npm:7.27.0" + dependencies: + "@babel/code-frame": ^7.26.2 + "@babel/parser": ^7.27.0 + "@babel/types": ^7.27.0 + checksum: 46d6db4c204a092f11ad6c3bfb6ec3dc1422e32121186d68ab1b3e633313aa5b7e21f26ca801dbd7da21f256225305a76454429fc500e52dabadb30af35df961 + languageName: node + linkType: hard + +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.10, @babel/traverse@npm:^7.26.5, @babel/traverse@npm:^7.26.8, @babel/traverse@npm:^7.27.0": + version: 7.27.0 + resolution: "@babel/traverse@npm:7.27.0" + dependencies: + "@babel/code-frame": ^7.26.2 + "@babel/generator": ^7.27.0 + "@babel/parser": ^7.27.0 + "@babel/template": ^7.27.0 + "@babel/types": ^7.27.0 + debug: ^4.3.1 + globals: ^11.1.0 + checksum: 922d22aa91200e1880cfa782802100aa5b236fab89a44b9c40cfea94163246efd010626f7dc2b9d7769851c1fa2d8e8f8a1e0168ff4a7094e9b737c32760baa1 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.10, @babel/types@npm:^7.27.0, @babel/types@npm:^7.3.3": + version: 7.27.0 + resolution: "@babel/types@npm:7.27.0" + dependencies: + "@babel/helper-string-parser": ^7.25.9 + "@babel/helper-validator-identifier": ^7.25.9 + checksum: 59582019eb8a693d4277015d4dec0233874d884b9019dcd09550332db7f0f2ac9e30eca685bb0ada4bab5a4dc8bbc2a6bcaadb151c69b7e6aa94b5eaf8fc8c51 + languageName: node + linkType: hard + +"@expo/bunyan@npm:^4.0.0": + version: 4.0.1 + resolution: "@expo/bunyan@npm:4.0.1" + dependencies: + uuid: ^8.0.0 + checksum: 7a503cf202ef26bd151ef31be63fdac113a27edd1e5703aee96326c3b7bea349e09e706a18854c251b313814a05673d5041eaea4c018667d9afa2c583d821af7 + languageName: node + linkType: hard + +"@expo/cli@npm:0.22.23": + version: 0.22.23 + resolution: "@expo/cli@npm:0.22.23" + dependencies: + "@0no-co/graphql.web": ^1.0.8 + "@babel/runtime": ^7.20.0 + "@expo/code-signing-certificates": ^0.0.5 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/devcert": ^1.1.2 + "@expo/env": ~0.4.2 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@expo/metro-config": ~0.19.12 + "@expo/osascript": ^2.1.6 + "@expo/package-manager": ^1.7.2 + "@expo/plist": ^0.2.2 + "@expo/prebuild-config": ^8.0.30 + "@expo/rudder-sdk-node": ^1.1.1 + "@expo/spawn-async": ^1.7.2 + "@expo/ws-tunnel": ^1.0.1 + "@expo/xcpretty": ^4.3.0 + "@react-native/dev-middleware": 0.76.8 + "@urql/core": ^5.0.6 + "@urql/exchange-retry": ^1.3.0 + accepts: ^1.3.8 + arg: ^5.0.2 + better-opn: ~3.0.2 + bplist-creator: 0.0.7 + bplist-parser: ^0.3.1 + cacache: ^18.0.2 + chalk: ^4.0.0 + ci-info: ^3.3.0 + compression: ^1.7.4 + connect: ^3.7.0 + debug: ^4.3.4 + env-editor: ^0.4.1 + fast-glob: ^3.3.2 + form-data: ^3.0.1 + freeport-async: ^2.0.0 + fs-extra: ~8.1.0 + getenv: ^1.0.0 + glob: ^10.4.2 + internal-ip: ^4.3.0 + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + lodash.debounce: ^4.0.8 + minimatch: ^3.0.4 + node-forge: ^1.3.1 + npm-package-arg: ^11.0.0 + ora: ^3.4.0 + picomatch: ^3.0.1 + pretty-bytes: ^5.6.0 + pretty-format: ^29.7.0 + progress: ^2.0.3 + prompts: ^2.3.2 + qrcode-terminal: 0.11.0 + require-from-string: ^2.0.2 + requireg: ^0.2.2 + resolve: ^1.22.2 + resolve-from: ^5.0.0 + resolve.exports: ^2.0.3 + semver: ^7.6.0 + send: ^0.19.0 + slugify: ^1.3.4 + source-map-support: ~0.5.21 + stacktrace-parser: ^0.1.10 + structured-headers: ^0.4.1 + tar: ^6.2.1 + temp-dir: ^2.0.0 + tempy: ^0.7.1 + terminal-link: ^2.1.1 + undici: ^6.18.2 + unique-string: ~2.0.0 + wrap-ansi: ^7.0.0 + ws: ^8.12.1 + bin: + expo-internal: build/bin/cli + checksum: e06bdb35d61e0fa5d8dea47e1fad15171904eae53e9677b94f27e9c2d75114cf9c83dff63bb1ba98fb7fa68972120cd8fb46a1e8a5fe497af836ad1caa83af93 + languageName: node + linkType: hard + +"@expo/code-signing-certificates@npm:^0.0.5": + version: 0.0.5 + resolution: "@expo/code-signing-certificates@npm:0.0.5" + dependencies: + node-forge: ^1.2.1 + nullthrows: ^1.1.1 + checksum: 4a1c73a6bc74443284a45db698ede874c7d47f6ed58cf44adaa255139490c8754d81dc1556247f3782cdc5034382fb72f23b0033daa2117facad4eb13b841e37 + languageName: node + linkType: hard + +"@expo/config-plugins@npm:~9.0.17": + version: 9.0.17 + resolution: "@expo/config-plugins@npm:9.0.17" + dependencies: + "@expo/config-types": ^52.0.5 + "@expo/json-file": ~9.0.2 + "@expo/plist": ^0.2.2 + "@expo/sdk-runtime-versions": ^1.0.0 + chalk: ^4.1.2 + debug: ^4.3.5 + getenv: ^1.0.0 + glob: ^10.4.2 + resolve-from: ^5.0.0 + semver: ^7.5.4 + slash: ^3.0.0 + slugify: ^1.6.6 + xcode: ^3.0.1 + xml2js: 0.6.0 + checksum: 5f415a3f4b399024d904d5c6e7b807d52f0efb6eddd217e458fa7d26d04b882f45462aa525ee8e49d404aecfc508e2a829ebd168f9a3b949a215a33699b0b92f + languageName: node + linkType: hard + +"@expo/config-types@npm:^52.0.5": + version: 52.0.5 + resolution: "@expo/config-types@npm:52.0.5" + checksum: 2e8aa1a0d88e788868df494709f7a2544ef4ff555b038bfe5f6a8e4ee0d20c1e1239e58504026bf0e41afc9422532a8aee6cb0fe121bb8b71ea5521fd9bb27d0 + languageName: node + linkType: hard + +"@expo/config@npm:~10.0.11": + version: 10.0.11 + resolution: "@expo/config@npm:10.0.11" + dependencies: + "@babel/code-frame": ~7.10.4 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 + "@expo/json-file": ^9.0.2 + deepmerge: ^4.3.1 + getenv: ^1.0.0 + glob: ^10.4.2 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + resolve-workspace-root: ^2.0.0 + semver: ^7.6.0 + slugify: ^1.3.4 + sucrase: 3.35.0 + checksum: 28f147b84e49d35306769e620f8e19da12f245e8fd08cf8279512f84eaccfdc3ab69f6ce9ea8e603ae3d0e9d994045336eff450f43b89f0b92f63e4914c47f3a + languageName: node + linkType: hard + +"@expo/devcert@npm:^1.1.2": + version: 1.1.4 + resolution: "@expo/devcert@npm:1.1.4" + dependencies: + application-config-path: ^0.1.0 + command-exists: ^1.2.4 + debug: ^3.1.0 + eol: ^0.9.1 + get-port: ^3.2.0 + glob: ^10.4.2 + lodash: ^4.17.21 + mkdirp: ^0.5.1 + password-prompt: ^1.0.4 + sudo-prompt: ^8.2.0 + tmp: ^0.0.33 + tslib: ^2.4.0 + checksum: a6bb5ba18d1d4fe5ebfa096f8d332f14bbe8bb942bc3650debf89fb68b5637bd5b7b22f9b28d5971965436bf83d442e843ac7e0e1e7408cce6e575b55c830b6d + languageName: node + linkType: hard + +"@expo/env@npm:~0.4.2": + version: 0.4.2 + resolution: "@expo/env@npm:0.4.2" + dependencies: + chalk: ^4.0.0 + debug: ^4.3.4 + dotenv: ~16.4.5 + dotenv-expand: ~11.0.6 + getenv: ^1.0.0 + checksum: cc9264e50faf5f38e6253b5c97e775bc8cb29bf8ca37bcd427cbb67dd773a4e62a2bdb030904565bac4644eac89e10fc61206d5aa42e5b1f26acf5ca1f6b9ce9 + languageName: node + linkType: hard + +"@expo/fingerprint@npm:0.11.11": + version: 0.11.11 + resolution: "@expo/fingerprint@npm:0.11.11" + dependencies: + "@expo/spawn-async": ^1.7.2 + arg: ^5.0.2 + chalk: ^4.1.2 + debug: ^4.3.4 + find-up: ^5.0.0 + getenv: ^1.0.0 + minimatch: ^3.0.4 + p-limit: ^3.1.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + bin: + fingerprint: bin/cli.js + checksum: ef98fc8a4d7026ad409063f5a5776bf89375e4869bbcb5e4b2f3315bb1af75300d1f07107da458ff010dd71b295513e15838a0de91daed877a68dc52790b3adc + languageName: node + linkType: hard + +"@expo/image-utils@npm:^0.6.5": + version: 0.6.5 + resolution: "@expo/image-utils@npm:0.6.5" + dependencies: + "@expo/spawn-async": ^1.7.2 + chalk: ^4.0.0 + fs-extra: 9.0.0 + getenv: ^1.0.0 + jimp-compact: 0.16.1 + parse-png: ^2.1.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + temp-dir: ~2.0.0 + unique-string: ~2.0.0 + checksum: f6fe5efd518d84463d767a4fb8a920d8b70779c8d93ba07ef407e0f016452324e3da6cff8292d0e2b436facdaef0073b8d527881e73ff5ba0288b4c942cdb539 + languageName: node + linkType: hard + +"@expo/json-file@npm:^9.0.2, @expo/json-file@npm:~9.0.2": + version: 9.0.2 + resolution: "@expo/json-file@npm:9.0.2" + dependencies: + "@babel/code-frame": ~7.10.4 + json5: ^2.2.3 + write-file-atomic: ^2.3.0 + checksum: 665fb72028e403adcb3ff9d7763ff6fab0ce16eaa1485a6b502daaab709608a9953599cce2f5c46e91b4791bd2380c87eb911deef4161b9d1f3a7631c2630366 + languageName: node + linkType: hard + +"@expo/metro-config@npm:0.19.12, @expo/metro-config@npm:~0.19.12": + version: 0.19.12 + resolution: "@expo/metro-config@npm:0.19.12" + dependencies: + "@babel/core": ^7.20.0 + "@babel/generator": ^7.20.5 + "@babel/parser": ^7.20.0 + "@babel/types": ^7.20.0 + "@expo/config": ~10.0.11 + "@expo/env": ~0.4.2 + "@expo/json-file": ~9.0.2 + "@expo/spawn-async": ^1.7.2 + chalk: ^4.1.0 + debug: ^4.3.2 + fs-extra: ^9.1.0 + getenv: ^1.0.0 + glob: ^10.4.2 + jsc-safe-url: ^0.2.4 + lightningcss: ~1.27.0 + minimatch: ^3.0.4 + postcss: ~8.4.32 + resolve-from: ^5.0.0 + checksum: 241934860fcf90575de47d67a6de5c701b51e16069a7007c15fac5addc04a66663e66800241aac63635761921829c2c6895217fd2bf6b8d95a00c2e1c664dfc3 + languageName: node + linkType: hard + +"@expo/osascript@npm:^2.1.6": + version: 2.1.6 + resolution: "@expo/osascript@npm:2.1.6" + dependencies: + "@expo/spawn-async": ^1.7.2 + exec-async: ^2.2.0 + checksum: 93883d448ac1c829377035369e7ab72133f0104553c31278185aba94605b25349f006e48a86e0a94794a35c26d42f64d7ee6128bb95319dd20af9e7b166210b1 + languageName: node + linkType: hard + +"@expo/package-manager@npm:^1.7.2": + version: 1.7.2 + resolution: "@expo/package-manager@npm:1.7.2" + dependencies: + "@expo/json-file": ^9.0.2 + "@expo/spawn-async": ^1.7.2 + ansi-regex: ^5.0.0 + chalk: ^4.0.0 + find-up: ^5.0.0 + js-yaml: ^3.13.1 + micromatch: ^4.0.8 + npm-package-arg: ^11.0.0 + ora: ^3.4.0 + resolve-workspace-root: ^2.0.0 + split: ^1.0.1 + sudo-prompt: 9.1.1 + checksum: cbf95b5ea1bc4dfde02631d945b36f46540066acb44f6205873c559e0ebd8d5b6bf21e3fc46f5cbd5f06ea65d29708bf8bdb53d2e820a6e6134fcb535447f6d7 + languageName: node + linkType: hard + +"@expo/plist@npm:^0.2.2": + version: 0.2.2 + resolution: "@expo/plist@npm:0.2.2" + dependencies: + "@xmldom/xmldom": ~0.7.7 + base64-js: ^1.2.3 + xmlbuilder: ^14.0.0 + checksum: ccc8256f07352e327092132d885c3e2291f14b3ef6060065eb11080f130a575012cfff7ae92c579b5e04cc6b2587930caed70e277c2f1f5b63591e39366e659a + languageName: node + linkType: hard + +"@expo/prebuild-config@npm:^8.0.30": + version: 8.0.30 + resolution: "@expo/prebuild-config@npm:8.0.30" + dependencies: + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/config-types": ^52.0.5 + "@expo/image-utils": ^0.6.5 + "@expo/json-file": ^9.0.2 + "@react-native/normalize-colors": 0.76.8 + debug: ^4.3.1 + fs-extra: ^9.0.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + xml2js: 0.6.0 + checksum: bada3ce8b946e168ad76806ec346d02f111183c9f62292033e13d9443a0fba196b6e908f64d5676c07cb67fc6749cf21669860e80256aef3c63bb7ff65475ba2 + languageName: node + linkType: hard + +"@expo/rudder-sdk-node@npm:^1.1.1": + version: 1.1.1 + resolution: "@expo/rudder-sdk-node@npm:1.1.1" + dependencies: + "@expo/bunyan": ^4.0.0 + "@segment/loosely-validate-event": ^2.0.0 + fetch-retry: ^4.1.1 + md5: ^2.2.1 + node-fetch: ^2.6.1 + remove-trailing-slash: ^0.1.0 + uuid: ^8.3.2 + checksum: 5ce50c1a82f899b135600cb29cddf3fab601938700c8203f16a1394d2ffbf9e2cdd246b92ff635f8415121072d99a7b4a370f715b78f6680594b5a630e8d78c6 + languageName: node + linkType: hard + +"@expo/sdk-runtime-versions@npm:^1.0.0": + version: 1.0.0 + resolution: "@expo/sdk-runtime-versions@npm:1.0.0" + checksum: 0942d5a356f590e8dc795761456cc48b3e2d6a38ad2a02d6774efcdc5a70424e05623b4e3e5d2fec0cdc30f40dde05c14391c781607eed3971bf8676518bfd9d + languageName: node + linkType: hard + +"@expo/spawn-async@npm:^1.7.2": + version: 1.7.2 + resolution: "@expo/spawn-async@npm:1.7.2" + dependencies: + cross-spawn: ^7.0.3 + checksum: d99e5ff6d303ec9b0105f97c4fa6c65bca526c7d4d0987997c35cc745fa8224adf009942d01808192ebb9fa30619a53316641958631e85cf17b773d9eeda2597 + languageName: node + linkType: hard + +"@expo/vector-icons@npm:^14.0.0": + version: 14.0.4 + resolution: "@expo/vector-icons@npm:14.0.4" + dependencies: + prop-types: ^15.8.1 + checksum: 31bd5d4e4e2f0b0620b7e8b55b0c5691875cf57c5737bd0ccef0017d0e7abee66352f3d66a58997b719bd0720cccf8f5119503c69fe1a30398747306ebefeb6e + languageName: node + linkType: hard + +"@expo/ws-tunnel@npm:^1.0.1": + version: 1.0.6 + resolution: "@expo/ws-tunnel@npm:1.0.6" + checksum: 0db9d5b94cfedfad7784cfd876bafbf9575d0cb00bb537f57954fa8fe6d7151f95b2fa0aa6071b7cc7ab49e3a68bdf647acbc323d7d6b23f07df21f97485ee4f + languageName: node + linkType: hard + +"@expo/xcpretty@npm:^4.3.0": + version: 4.3.2 + resolution: "@expo/xcpretty@npm:4.3.2" + dependencies: + "@babel/code-frame": 7.10.4 + chalk: ^4.1.0 + find-up: ^5.0.0 + js-yaml: ^4.1.0 + bin: + excpretty: build/cli.js + checksum: 8771b2812f0dfc49f6dab4338c986beaf4cf2ec20ed8fd598be6e3803fcbfc0a337dbb5b4dad9556b85ba2489f63c777735ad2c2ee6f5842ff68b9322e47f6a3 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: ^7.0.4 + checksum: 5d36d289960e886484362d9eb6a51d1ea28baed5f5d0140bbe62b99bac52eaf06cc01c2bc0d3575977962f84f6b2c4387b043ee632216643d4787b0999465bf2 + languageName: node + linkType: hard + +"@isaacs/ttlcache@npm:^1.4.1": + version: 1.4.1 + resolution: "@isaacs/ttlcache@npm:1.4.1" + checksum: b99f0918faf1eba405b6bc3421584282b2edc46cca23f8d8e112a643bf6e4506c6c53a4525901118e229d19c5719bbec3028ec438d758fd71081f6c32af871ec + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: ^5.3.1 + find-up: ^4.1.0 + get-package-type: ^0.1.0 + js-yaml: ^3.13.1 + resolve-from: ^5.0.0 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jest/create-cache-key-function@npm:^29.6.3": + version: 29.7.0 + resolution: "@jest/create-cache-key-function@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + checksum: 681bc761fa1d6fa3dd77578d444f97f28296ea80755e90e46d1c8fa68661b9e67f54dd38b988742db636d26cf160450dc6011892cec98b3a7ceb58cad8ff3aae + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": ^1.2.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: c0687b5227461717aa537fe71a42e356bcd1c43293b3353796a148bf3b0d6f59109def46c22f05b60e29a46f19b2e4676d027959a7c53a6c92b9d5b0d87d0420 + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.6 + resolution: "@jridgewell/source-map@npm:0.3.6" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.25 + checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 05df4f2538b3b0f998ea4c1cd34574d0feba216fa5d4ccaef0187d12abf82eafe6021cec8b49f9bb4d90f2ba4582ccc581e72986a5fcf4176ae0cfeb04cf52ec + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.3 + checksum: e8fc25d536250ed3e669813b36e8c6d805628b472353c57afd8c4fde0fcfcf3dda4ffe22f7af8c9070812ec2e7a03fb41d7151547cef3508efe661a5a3add20f + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: ^7.3.5 + checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: ^7.3.5 + checksum: 68951c589e9a4328698a35fd82fe71909a257d6f2ede0434d236fa55634f0fbcad9bb8755553ce5849bd25ee6f019f4d435921ac715c853582c4a7f5983c8d4a + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@react-native/assets-registry@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/assets-registry@npm:0.76.8" + checksum: 84bd000d8a0799af1475d093671a2babce8204e90cf3980e142fa0b204d48a42adbc5663a752c688c1db89f6b481038862c730063227d1c6d1eab52f636cbaa3 + languageName: node + linkType: hard + +"@react-native/babel-plugin-codegen@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/babel-plugin-codegen@npm:0.76.8" + dependencies: + "@react-native/codegen": 0.76.8 + checksum: 9a51f2b2250339da46e5e309341230461dad397199fe6f8ef3dc21698b0d04a02f401f950adcbad7e243ae889d88b9e680c98b2dad158e159cd516866a0f2fe3 + languageName: node + linkType: hard + +"@react-native/babel-preset@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/babel-preset@npm:0.76.8" + dependencies: + "@babel/core": ^7.25.2 + "@babel/plugin-proposal-export-default-from": ^7.24.7 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-default-from": ^7.24.7 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-transform-arrow-functions": ^7.24.7 + "@babel/plugin-transform-async-generator-functions": ^7.25.4 + "@babel/plugin-transform-async-to-generator": ^7.24.7 + "@babel/plugin-transform-block-scoping": ^7.25.0 + "@babel/plugin-transform-class-properties": ^7.25.4 + "@babel/plugin-transform-classes": ^7.25.4 + "@babel/plugin-transform-computed-properties": ^7.24.7 + "@babel/plugin-transform-destructuring": ^7.24.8 + "@babel/plugin-transform-flow-strip-types": ^7.25.2 + "@babel/plugin-transform-for-of": ^7.24.7 + "@babel/plugin-transform-function-name": ^7.25.1 + "@babel/plugin-transform-literals": ^7.25.2 + "@babel/plugin-transform-logical-assignment-operators": ^7.24.7 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.24.7 + "@babel/plugin-transform-nullish-coalescing-operator": ^7.24.7 + "@babel/plugin-transform-numeric-separator": ^7.24.7 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-optional-catch-binding": ^7.24.7 + "@babel/plugin-transform-optional-chaining": ^7.24.8 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-react-display-name": ^7.24.7 + "@babel/plugin-transform-react-jsx": ^7.25.2 + "@babel/plugin-transform-react-jsx-self": ^7.24.7 + "@babel/plugin-transform-react-jsx-source": ^7.24.7 + "@babel/plugin-transform-regenerator": ^7.24.7 + "@babel/plugin-transform-runtime": ^7.24.7 + "@babel/plugin-transform-shorthand-properties": ^7.24.7 + "@babel/plugin-transform-spread": ^7.24.7 + "@babel/plugin-transform-sticky-regex": ^7.24.7 + "@babel/plugin-transform-typescript": ^7.25.2 + "@babel/plugin-transform-unicode-regex": ^7.24.7 + "@babel/template": ^7.25.0 + "@react-native/babel-plugin-codegen": 0.76.8 + babel-plugin-syntax-hermes-parser: ^0.25.1 + babel-plugin-transform-flow-enums: ^0.0.2 + react-refresh: ^0.14.0 + peerDependencies: + "@babel/core": "*" + checksum: 3855da590ad9ef3df4cdddd59c73f107f3aaf64dbdbb06e6097818e75d66c97aaf5fd8641b189d267331b8fdd7e312a1b6d75014cac7b08eea159e30afee02a7 + languageName: node + linkType: hard + +"@react-native/codegen@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/codegen@npm:0.76.8" + dependencies: + "@babel/parser": ^7.25.3 + glob: ^7.1.1 + hermes-parser: 0.23.1 + invariant: ^2.2.4 + jscodeshift: ^0.14.0 + mkdirp: ^0.5.1 + nullthrows: ^1.1.1 + yargs: ^17.6.2 + peerDependencies: + "@babel/preset-env": ^7.1.6 + checksum: 05f4de0d51d9a77ecf7ce90647b8d659e9785cff26efd5ef47a88859403552ec371af8190a0c3a1a482a08c0f8a86f9e1c2f280cf198d53dbb26eb209dfc8b68 + languageName: node + linkType: hard + +"@react-native/community-cli-plugin@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/community-cli-plugin@npm:0.76.8" + dependencies: + "@react-native/dev-middleware": 0.76.8 + "@react-native/metro-babel-transformer": 0.76.8 + chalk: ^4.0.0 + execa: ^5.1.1 + invariant: ^2.2.4 + metro: ^0.81.0 + metro-config: ^0.81.0 + metro-core: ^0.81.0 + node-fetch: ^2.2.0 + readline: ^1.3.0 + semver: ^7.1.3 + peerDependencies: + "@react-native-community/cli": "*" + peerDependenciesMeta: + "@react-native-community/cli": + optional: true + checksum: e5597c46e132e51a8825d871b95d5cc810033f0376c7714310e55941cff2fa465b0e5cfa27603e1c9c52e9be2ebe0ca4b8b6970cf4c8574e44ed1b1dd1ec9441 + languageName: node + linkType: hard + +"@react-native/debugger-frontend@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/debugger-frontend@npm:0.76.8" + checksum: ebf5ddbca78784bbd9f6746a79d66d7a0156c565f0e7789f5d7312438c21f920acc629bb364e55203d9e48f67ca57e012dece4a3b1d8067a182602666e469753 + languageName: node + linkType: hard + +"@react-native/dev-middleware@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/dev-middleware@npm:0.76.8" + dependencies: + "@isaacs/ttlcache": ^1.4.1 + "@react-native/debugger-frontend": 0.76.8 + chrome-launcher: ^0.15.2 + chromium-edge-launcher: ^0.2.0 + connect: ^3.6.5 + debug: ^2.2.0 + invariant: ^2.2.4 + nullthrows: ^1.1.1 + open: ^7.0.3 + selfsigned: ^2.4.1 + serve-static: ^1.13.1 + ws: ^6.2.3 + checksum: 10565eb3037319f30c52379eb3d67e619ddce3c38fdc4402d25366739bc740343c41950540e6735052ed0bab77ac20133eaaeec580265e7497e996b143fece75 + languageName: node + linkType: hard + +"@react-native/gradle-plugin@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/gradle-plugin@npm:0.76.8" + checksum: aaa3c791d7296d0f6833c8259b3debc6b35bc9790f1ae81dd56d2a50c41ce46cb43503a95fa42eabaf6d05b767942329ff9d67a6700369a16279ed795cfdea98 + languageName: node + linkType: hard + +"@react-native/js-polyfills@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/js-polyfills@npm:0.76.8" + checksum: ba2006b6ad4f96a1627171312268be6ed76b189ad1ad75b967063fd3da4a0f6c3473901b49852a7ecba8b1df32e4cf62d48705b5b2cb1722469c5e734c85fb9e + languageName: node + linkType: hard + +"@react-native/metro-babel-transformer@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/metro-babel-transformer@npm:0.76.8" + dependencies: + "@babel/core": ^7.25.2 + "@react-native/babel-preset": 0.76.8 + hermes-parser: 0.23.1 + nullthrows: ^1.1.1 + peerDependencies: + "@babel/core": "*" + checksum: 98fd0bf71576d1634910b61d8ba43589752f245e2d1ba07c843163987086a5d3d3ae692fc1b036a96a0a129e71527d126efcbbb0b692feaed184a3aebf5e7397 + languageName: node + linkType: hard + +"@react-native/normalize-colors@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/normalize-colors@npm:0.76.8" + checksum: 915b663b95c8dba95ee73f58184080b3f1c8324cae2f1bbcf91edcd99fbc231e871b93f1e31970df6345351a3548c16ead7631c729bdfbfeb1b2fab7afada135 + languageName: node + linkType: hard + +"@react-native/virtualized-lists@npm:0.76.8": + version: 0.76.8 + resolution: "@react-native/virtualized-lists@npm:0.76.8" + dependencies: + invariant: ^2.2.4 + nullthrows: ^1.1.1 + peerDependencies: + "@types/react": ^18.2.6 + react: "*" + react-native: "*" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 84749b77d58f60addebf27d334e4b82ae6e4219c45dfba159825d49a090f7eb6af93a7a693fd687d98faa63596798ff53f398bafd031efc55daf549742aae56b + languageName: node + linkType: hard + +"@segment/loosely-validate-event@npm:^2.0.0": + version: 2.0.0 + resolution: "@segment/loosely-validate-event@npm:2.0.0" + dependencies: + component-type: ^1.2.1 + join-component: ^1.1.0 + checksum: 8c4aacc903fb717619b69ca7eecf8d4a7b928661b0e835c9cd98f1b858a85ce62c348369ad9a52cb2df8df02578c0525a73fce4c69a42ac414d9554cc6be7117 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: 4.0.8 + checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: a3226f7930b635ee7a5e72c8d51a357e799d19cbf9d445710fa39ab13804f79ab1a54b72ea7d8e504659c7dfc50675db974b526142c754398d7413aa4bc30845 + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": ^7.0.0 + checksum: 5b332ea336a2efffbdeedb92b6781949b73498606ddd4205462f7d96dafd45ff3618770b41de04c4881e333dd84388bfb8afbdf6f2764cbd98be550d85c6bb48 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.7 + resolution: "@types/babel__traverse@npm:7.20.7" + dependencies: + "@babel/types": ^7.20.7 + checksum: 2a2e5ad29c34a8b776162b0fe81c9ccb6459b2b46bf230f756ba0276a0258fcae1cbcfdccbb93a1e8b1df44f4939784ee8a1a269f95afe0c78b24b9cb6d50dd1 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" + dependencies: + "@types/node": "*" + checksum: 79d746a8f053954bba36bd3d94a90c78de995d126289d656fb3271dd9f1229d33f678da04d10bce6be440494a5a73438e2e363e92802d16b8315b051036c5256 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 3feac423fd3e5449485afac999dcfcb3d44a37c830af898b689fadc65d26526460bedb889db278e0d4d815a670331796494d073a10ee6e3a6526301fe7415778 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: b91e9b60f865ff08cb35667a427b70f6c2c63e88105eadd29a112582942af47ed99c60610180aa8dcc22382fa405033f141c119c69b95db78c4c709fbadfeeb4 + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: 93eb18835770b3431f68ae9ac1ca91741ab85f7606f310a34b3586b5a34450ec038c3eed7ab19266635499594de52ff73723a54a72a75b9f7d6a956f01edee95 + languageName: node + linkType: hard + +"@types/node-forge@npm:^1.3.0": + version: 1.3.11 + resolution: "@types/node-forge@npm:1.3.11" + dependencies: + "@types/node": "*" + checksum: 1e86bd55b92a492eaafd75f6d01f31e7d86a5cdadd0c6bcdc0b1df4103b7f99bb75b832efd5217c7ddda5c781095dc086a868e20b9de00f5a427ddad4c296cd5 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 22.13.16 + resolution: "@types/node@npm:22.13.16" + dependencies: + undici-types: ~6.20.0 + checksum: c08460da2cceb4f6b77e3a849213b52cafa5a7c69d788bf1e15f89d1b733e6be2788bf37cd4396c6c09359c516e91ffb21b78f71233e50f27ee5a7bb8e219e11 + languageName: node + linkType: hard + +"@types/prop-types@npm:*": + version: 15.7.14 + resolution: "@types/prop-types@npm:15.7.14" + checksum: d0c5407b9ccc3dd5fae0ccf9b1007e7622ba5e6f1c18399b4f24dff33619d469da4b9fa918a374f19dc0d9fe6a013362aab0b844b606cfc10676efba3f5f736d + languageName: node + linkType: hard + +"@types/react@npm:~18.3.12": + version: 18.3.20 + resolution: "@types/react@npm:18.3.20" + dependencies: + "@types/prop-types": "*" + csstype: ^3.0.2 + checksum: a93a4eec87c671ad9d68eaedaa2aa3688926409802939d2b291800cf926c771eb505a18721174364217ae9e1e8b89d09c1519f06ba1f168271de9f4c832710ea + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 72576cc1522090fe497337c2b99d9838e320659ac57fa5560fcbdcbafcf5d0216c6b3a0a8a4ee4fdb3b1f5e3420aa4f6223ab57b82fef3578bec3206425c6cf5 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: ef236c27f9432983e91432d974243e6c4cdae227cb673740320eff32d04d853eed59c92ca6f1142a335cfdc0e17cccafa62e95886a8154ca8891cc2dec4ee6fc + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" + dependencies: + "@types/yargs-parser": "*" + checksum: ee013f257472ab643cb0584cf3e1ff9b0c44bca1c9ba662395300a7f1a6c55fa9d41bd40ddff42d99f5d95febb3907c9ff600fbcb92dadbec22c6a76de7e1236 + languageName: node + linkType: hard + +"@urql/core@npm:^5.0.6, @urql/core@npm:^5.1.1": + version: 5.1.1 + resolution: "@urql/core@npm:5.1.1" + dependencies: + "@0no-co/graphql.web": ^1.0.5 + wonka: ^6.3.2 + checksum: c28736706abe5d0a0172bcde1c80807aba44606041347beba8e73d5237598034301cccad0169c4f63ba08f5bffe7b3a3ad95ee4a53a0d719ad5525f44b84dbcc + languageName: node + linkType: hard + +"@urql/exchange-retry@npm:^1.3.0": + version: 1.3.1 + resolution: "@urql/exchange-retry@npm:1.3.1" + dependencies: + "@urql/core": ^5.1.1 + wonka: ^6.3.2 + peerDependencies: + "@urql/core": ^5.0.0 + checksum: c03c81900bdbd11211ce02e97ca4e8d1b36f08a3ad6fee9e9b23a60a59c9ff266500e2723b21a60d29927c0ba8cf5dec59600d2f615f6918ac50e10100d7e543 + languageName: node + linkType: hard + +"@xmldom/xmldom@npm:^0.8.8": + version: 0.8.10 + resolution: "@xmldom/xmldom@npm:0.8.10" + checksum: 4c136aec31fb3b49aaa53b6fcbfe524d02a1dc0d8e17ee35bd3bf35e9ce1344560481cd1efd086ad1a4821541482528672306d5e37cdbd187f33d7fadd3e2cf0 + languageName: node + linkType: hard + +"@xmldom/xmldom@npm:~0.7.7": + version: 0.7.13 + resolution: "@xmldom/xmldom@npm:0.7.13" + checksum: b4054078530e5fa8ede9677425deff0fce6d965f4c477ca73f8490d8a089e60b8498a15560425a1335f5ff99ecb851ed2c734b0a9a879299a5694302f212f37a + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.0 + resolution: "abbrev@npm:3.0.0" + checksum: 2500075b5ef85e97c095ab6ab2ea640dcf90bb388f46398f4d347b296f53399f984ec9462c74bee81df6bba56ef5fd9dbc2fb29076b1feb0023e0f52d43eb984 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + +"accepts@npm:^1.3.7, accepts@npm:^1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: ~2.1.34 + negotiator: 0.6.3 + checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 + languageName: node + linkType: hard + +"acorn@npm:^8.8.2": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" + bin: + acorn: bin/acorn + checksum: 260d9bb6017a1b6e42d31364687f0258f78eb20210b36ef2baad38fd619d78d4e95ff7dde9b3dbe0d81f137f79a8d651a845363a26e6985997f7b71145dc5e94 + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 87bb7ee54f5ecf0ccbfcba0b07473885c43ecd76cb29a8db17d6137a19d9f9cd443a2a7c5fd8a3f24d58ad8145f9eb49116344a66b107e1aeab82cf2383f4753 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"anser@npm:^1.4.9": + version: 1.4.10 + resolution: "anser@npm:1.4.10" + checksum: 3823c64f8930d3d97f36e56cdf646fa6351f1227e25eee70c3a17697447cae4238fc3a309bb3bc2003cf930687fa72aed71426dbcf3c0a15565e120a7fee5507 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-regex@npm:^4.1.0": + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.0, ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 495834a53b0856c02acd40446f7130cb0f8284f4a39afdab20d5dc42b2e198b1196119fe887beed8f9055c4ff2055e3b2f6d4641d0be018cdfb64fedf6fc1aac + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"application-config-path@npm:^0.1.0": + version: 0.1.1 + resolution: "application-config-path@npm:0.1.1" + checksum: e478c1e4d515108de89693165d92dab11cfdc69dd0f3ccde034f14a3f4e50007946de9e4dd51cd77d2f7ba9752e75d8e4d937ef053a53e466425d9751c961a37 + languageName: node + linkType: hard + +"arg@npm:^5.0.2": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"asap@npm:~2.0.3, asap@npm:~2.0.6": + version: 2.0.6 + resolution: "asap@npm:2.0.6" + checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d + languageName: node + linkType: hard + +"ast-types@npm:0.15.2": + version: 0.15.2 + resolution: "ast-types@npm:0.15.2" + dependencies: + tslib: ^2.0.1 + checksum: 24f0d86bf9e4c8dae16fa24b13c1776f2c2677040bcfbd4eb4f27911db49020be4876885e45e6cfcc548ed4dfea3a0742d77e3346b84fae47379cb0b89e9daa0 + languageName: node + linkType: hard + +"async-limiter@npm:~1.0.0": + version: 1.0.1 + resolution: "async-limiter@npm:1.0.1" + checksum: 2b849695b465d93ad44c116220dee29a5aeb63adac16c1088983c339b0de57d76e82533e8e364a93a9f997f28bbfc6a92948cefc120652bd07f3b59f8d75cf2b + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e + languageName: node + linkType: hard + +"babel-core@npm:^7.0.0-bridge.0": + version: 7.0.0-bridge.0 + resolution: "babel-core@npm:7.0.0-bridge.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2a1cb879019dffb08d17bec36e13c3a6d74c94773f41c1fd8b14de13f149cc34b705b0a1e07b42fcf35917b49d78db6ff0c5c3b00b202a5235013d517b5c6bbb + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": ^29.7.0 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.6.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.10": + version: 0.4.13 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.13" + dependencies: + "@babel/compat-data": ^7.22.6 + "@babel/helper-define-polyfill-provider": ^0.6.4 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 553b64eb11bad2cfc220e94f1fb2449755b5c7d54886dca6d8053b13b6e910f349a38bbc75aafd610f88217699db499548919bb5df653d635b9cdeb39d34a68d + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.11.0": + version: 0.11.1 + resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.3 + core-js-compat: ^3.40.0 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: ee39440475ef377a1570ccbc06b1a1d274cbfbbe2e7c3d4c60f38781a47f00a28bd10d8e23430828b965820c41beb2c93c84596baf72583a2c9c3fdfa4397994 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.1": + version: 0.6.4 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.4" + dependencies: + "@babel/helper-define-polyfill-provider": ^0.6.4 + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: f4d4a803834ffa72713579d696586d8cc654c0025cbd5ec775fc5d37faa00381dcb80e5b97d4b16059443352653585596d87848b5590b1d8670c235408e73fb3 + languageName: node + linkType: hard + +"babel-plugin-react-native-web@npm:~0.19.13": + version: 0.19.13 + resolution: "babel-plugin-react-native-web@npm:0.19.13" + checksum: 899165793b6e3416b87e830633d98b2bec6e29c89d838b86419a5a6e40b7042d3db98098393dfe3fc9be507054f5bcbf83c420cccfe5dc47c7d962acd1d313d5 + languageName: node + linkType: hard + +"babel-plugin-syntax-hermes-parser@npm:^0.23.1": + version: 0.23.1 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.23.1" + dependencies: + hermes-parser: 0.23.1 + checksum: 5412008e8e85b08cd0d78168f746ade68b8ed69c0068831ce5e3d028f01c644f546ca0e2b7c9a4a8c6b9d5f14aff84c2453ab44b19cbec55e4366b20bbba9040 + languageName: node + linkType: hard + +"babel-plugin-syntax-hermes-parser@npm:^0.25.1": + version: 0.25.1 + resolution: "babel-plugin-syntax-hermes-parser@npm:0.25.1" + dependencies: + hermes-parser: 0.25.1 + checksum: dc80fafde1aed8e60cf86ecd2e9920e7f35ffe02b33bd4e772daaa786167bcf508aac3fc1aea425ff4c7a0be94d82528f3fe8619b7f41dac853264272d640c04 + languageName: node + linkType: hard + +"babel-plugin-transform-flow-enums@npm:^0.0.2": + version: 0.0.2 + resolution: "babel-plugin-transform-flow-enums@npm:0.0.2" + dependencies: + "@babel/plugin-syntax-flow": ^7.12.1 + checksum: fd52aef54448e01948a9d1cca0c8f87d064970c8682458962b7a222c372704bc2ce26ae8109e0ab2566e7ea5106856460f04c1a5ed794ab3bcd2f42cae1d9845 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.1.0 + resolution: "babel-preset-current-node-syntax@npm:1.1.0" + dependencies: + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-bigint": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-import-attributes": ^7.24.7 + "@babel/plugin-syntax-import-meta": ^7.10.4 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 9f93fac975eaba296c436feeca1031ca0539143c4066eaf5d1ba23525a31850f03b651a1049caea7287df837a409588c8252c15627ad3903f17864c8e25ed64b + languageName: node + linkType: hard + +"babel-preset-expo@npm:~12.0.10": + version: 12.0.10 + resolution: "babel-preset-expo@npm:12.0.10" + dependencies: + "@babel/plugin-proposal-decorators": ^7.12.9 + "@babel/plugin-transform-export-namespace-from": ^7.22.11 + "@babel/plugin-transform-object-rest-spread": ^7.12.13 + "@babel/plugin-transform-parameters": ^7.22.15 + "@babel/preset-react": ^7.22.15 + "@babel/preset-typescript": ^7.23.0 + "@react-native/babel-preset": 0.76.8 + babel-plugin-react-native-web: ~0.19.13 + react-refresh: ^0.14.2 + peerDependencies: + babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017 + react-compiler-runtime: ^19.0.0-beta-8a03594-20241020 + peerDependenciesMeta: + babel-plugin-react-compiler: + optional: true + react-compiler-runtime: + optional: true + checksum: 52adb2038d87cc0342b03c884493cbb4773b7dd89089b99aceccabca7c68d928cf92474862fc913cbe18a09232cf51fdcd5e11e09a60fb03913a53918f3ccb4b + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.2.3, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"better-opn@npm:~3.0.2": + version: 3.0.2 + resolution: "better-opn@npm:3.0.2" + dependencies: + open: ^8.0.4 + checksum: 1471552fa7f733561e7f49e812be074b421153006ca744de985fb6d38939807959fc5fe9cb819cf09f864782e294704fd3b31711ea14c115baf3330a2f1135de + languageName: node + linkType: hard + +"big-integer@npm:1.6.x": + version: 1.6.52 + resolution: "big-integer@npm:1.6.52" + checksum: 6e86885787a20fed96521958ae9086960e4e4b5e74d04f3ef7513d4d0ad631a9f3bde2730fc8aaa4b00419fc865f6ec573e5320234531ef37505da7da192c40b + languageName: node + linkType: hard + +"bplist-creator@npm:0.0.7": + version: 0.0.7 + resolution: "bplist-creator@npm:0.0.7" + dependencies: + stream-buffers: ~2.2.0 + checksum: 5bcf4091c5a0e5934d56643d9f2705b5149a0b0b62b8314762f6ad4b3208d313c75ad03bab97a3c42b6e17db3d73530d3642d082ca249b55f952c90056c2b2ad + languageName: node + linkType: hard + +"bplist-creator@npm:0.1.1": + version: 0.1.1 + resolution: "bplist-creator@npm:0.1.1" + dependencies: + stream-buffers: 2.2.x + checksum: b0d40d1d1623f1afdbb575cfc8075d742d2c4f0eb458574be809e3857752d1042a39553b3943d2d7f505dde92bcd43e1d7bdac61c9cd44475d696deb79f897ce + languageName: node + linkType: hard + +"bplist-parser@npm:0.3.2, bplist-parser@npm:^0.3.1": + version: 0.3.2 + resolution: "bplist-parser@npm:0.3.2" + dependencies: + big-integer: 1.6.x + checksum: fad0f6eb155a9b636b4096a1725ce972a0386490d7d38df7be11a3a5645372446b7c44aacbc6626d24d2c17d8b837765361520ebf2960aeffcaf56765811620e + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.3": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 + languageName: node + linkType: hard + +"browserslist@npm:^4.24.0, browserslist@npm:^4.24.4": + version: 4.24.4 + resolution: "browserslist@npm:4.24.4" + dependencies: + caniuse-lite: ^1.0.30001688 + electron-to-chromium: ^1.5.73 + node-releases: ^2.0.19 + update-browserslist-db: ^1.1.1 + bin: + browserslist: cli.js + checksum: 64074bf6cf0a9ae3094d753270e3eae9cf925149db45d646f0bc67bacc2e46d7ded64a4e835b95f5fdcf0350f63a83c3755b32f80831f643a47f0886deb8a065 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-alloc-unsafe@npm:^1.1.0": + version: 1.1.0 + resolution: "buffer-alloc-unsafe@npm:1.1.0" + checksum: c5e18bf51f67754ec843c9af3d4c005051aac5008a3992938dda1344e5cfec77c4b02b4ca303644d1e9a6e281765155ce6356d85c6f5ccc5cd21afc868def396 + languageName: node + linkType: hard + +"buffer-alloc@npm:^1.1.0": + version: 1.2.0 + resolution: "buffer-alloc@npm:1.2.0" + dependencies: + buffer-alloc-unsafe: ^1.1.0 + buffer-fill: ^1.0.0 + checksum: 560cd27f3cbe73c614867da373407d4506309c62fe18de45a1ce191f3785ec6ca2488d802ff82065798542422980ca25f903db078c57822218182c37c3576df5 + languageName: node + linkType: hard + +"buffer-fill@npm:^1.0.0": + version: 1.0.0 + resolution: "buffer-fill@npm:1.0.0" + checksum: c29b4723ddeab01e74b5d3b982a0c6828f2ded49cef049ddca3dac661c874ecdbcecb5dd8380cf0f4adbeb8cff90a7de724126750a1f1e5ebd4eb6c59a1315b1 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer@npm:^5.4.3": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e + languageName: node + linkType: hard + +"cacache@npm:^18.0.2": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7422c113b4ec750f33beeca0f426a0024c28e3172f332218f48f963e5b970647fa1ac05679fe5bb448832c51efea9fda4456b9a95c3a1af1105fe6c1833cde2 + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": ^4.0.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^7.0.2 + ssri: ^12.0.0 + tar: ^7.4.3 + unique-filename: ^4.0.0 + checksum: e95684717de6881b4cdaa949fa7574e3171946421cd8291769dd3d2417dbf7abf4aa557d1f968cca83dcbc95bed2a281072b09abfc977c942413146ef7ed4525 + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + checksum: b2863d74fcf2a6948221f65d95b91b4b2d90cfe8927650b506141e669f7d5de65cea191bf788838bc40d13846b7886c5bc5c84ab96c3adbcf88ad69a72fcdc6b + languageName: node + linkType: hard + +"caller-callsite@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-callsite@npm:2.0.0" + dependencies: + callsites: ^2.0.0 + checksum: b685e9d126d9247b320cfdfeb3bc8da0c4be28d8fb98c471a96bc51aab3130099898a2fe3bf0308f0fe048d64c37d6d09f563958b9afce1a1e5e63d879c128a2 + languageName: node + linkType: hard + +"caller-path@npm:^2.0.0": + version: 2.0.0 + resolution: "caller-path@npm:2.0.0" + dependencies: + caller-callsite: ^2.0.0 + checksum: 3e12ccd0c71ec10a057aac69e3ec175b721ca858c640df021ef0d25999e22f7c1d864934b596b7d47038e9b56b7ec315add042abbd15caac882998b50102fb12 + languageName: node + linkType: hard + +"callsites@npm:^2.0.0": + version: 2.0.0 + resolution: "callsites@npm:2.0.0" + checksum: be2f67b247df913732b7dec1ec0bbfcdbaea263e5a95968b19ec7965affae9496b970e3024317e6d4baa8e28dc6ba0cec03f46fdddc2fdcc51396600e53c2623 + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001688": + version: 1.0.30001707 + resolution: "caniuse-lite@npm:1.0.30001707" + checksum: 38824c9f88d754428844e64ba18197c06f4f8503035e30eace88c6bffdcf5f682dcf3cef895b60cd6f19c71e6714731adc1940b612ea606c6875cd2f801e4836 + languageName: node + linkType: hard + +"chalk@npm:^2.0.1, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"charenc@npm:0.0.2": + version: 0.0.2 + resolution: "charenc@npm:0.0.2" + checksum: 81dcadbe57e861d527faf6dd3855dc857395a1c4d6781f4847288ab23cffb7b3ee80d57c15bba7252ffe3e5e8019db767757ee7975663ad2ca0939bb8fcaf2e5 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: fd73a4bab48b79e66903fe1cafbdc208956f41ea4f856df883d0c7277b7ab29fd33ee65f93b2ec9192fc0169238f2f8307b7735d27c155821d886b84aa97aa8d + languageName: node + linkType: hard + +"chrome-launcher@npm:^0.15.2": + version: 0.15.2 + resolution: "chrome-launcher@npm:0.15.2" + dependencies: + "@types/node": "*" + escape-string-regexp: ^4.0.0 + is-wsl: ^2.2.0 + lighthouse-logger: ^1.0.0 + bin: + print-chrome-path: bin/print-chrome-path.js + checksum: e1f8131b9f7bd931248ea85f413c6cdb93a0d41440ff5bf0987f36afb081d2b2c7b60ba6062ee7ae2dd9b052143f6b275b38c9eb115d11b49c3ea8829bad7db0 + languageName: node + linkType: hard + +"chromium-edge-launcher@npm:^0.2.0": + version: 0.2.0 + resolution: "chromium-edge-launcher@npm:0.2.0" + dependencies: + "@types/node": "*" + escape-string-regexp: ^4.0.0 + is-wsl: ^2.2.0 + lighthouse-logger: ^1.0.0 + mkdirp: ^1.0.4 + rimraf: ^3.0.2 + checksum: 9b56d1f8f18e84e34d6da89a4d97787ef323a1ade6551dcc83a6899af17c1bfc27a844c23422a29f51c6a315d1e04e2ad12595aaf07d3822335c2fce15914feb + languageName: node + linkType: hard + +"ci-info@npm:^2.0.0": + version: 2.0.0 + resolution: "ci-info@npm:2.0.0" + checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0, ci-info@npm:^3.3.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: ^2.0.0 + checksum: d88e97bfdac01046a3ffe7d49f06757b3126559d7e44aa2122637eb179284dc6cd49fca2fac4f67c19faaf7e6dab716b6fe1dfcd309977407d8c7578ec2d044d + languageName: node + linkType: hard + +"cli-spinners@npm:^2.0.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"command-exists@npm:^1.2.4": + version: 1.2.9 + resolution: "command-exists@npm:1.2.9" + checksum: 729ae3d88a2058c93c58840f30341b7f82688a573019535d198b57a4d8cb0135ced0ad7f52b591e5b28a90feb2c675080ce916e56254a0f7c15cb2395277cac3 + languageName: node + linkType: hard + +"commander@npm:^12.0.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514 + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb + languageName: node + linkType: hard + +"component-type@npm:^1.2.1": + version: 1.2.2 + resolution: "component-type@npm:1.2.2" + checksum: ca5a9886a961985b9ebcc0a5b23f2526506eced1c2c932648e5f8960db22fffcc3a77442013c6aef0b5afa8e6b9de02ae2a23ce5c967374edaf99d74fd6d6c3e + languageName: node + linkType: hard + +"compressible@npm:~2.0.18": + version: 2.0.18 + resolution: "compressible@npm:2.0.18" + dependencies: + mime-db: ">= 1.43.0 < 2" + checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 + languageName: node + linkType: hard + +"compression@npm:^1.7.4": + version: 1.8.0 + resolution: "compression@npm:1.8.0" + dependencies: + bytes: 3.1.2 + compressible: ~2.0.18 + debug: 2.6.9 + negotiator: ~0.6.4 + on-headers: ~1.0.2 + safe-buffer: 5.2.1 + vary: ~1.1.2 + checksum: 12ca3e326b4ccb6b6e51e1d14d96fafd058ddb3be08fe888487d367d42fb4f81f25d4bf77acc517ba724370e7d74469280688baf2da8cad61062bdf62eb9fd45 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"connect@npm:^3.6.5, connect@npm:^3.7.0": + version: 3.7.0 + resolution: "connect@npm:3.7.0" + dependencies: + debug: 2.6.9 + finalhandler: 1.1.2 + parseurl: ~1.3.3 + utils-merge: 1.0.1 + checksum: 96e1c4effcf219b065c7823e57351c94366d2e2a6952fa95e8212bffb35c86f1d5a3f9f6c5796d4cd3a5fdda628368b1c3cc44bf19c66cfd68fe9f9cab9177e2 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.40.0": + version: 3.41.0 + resolution: "core-js-compat@npm:3.41.0" + dependencies: + browserslist: ^4.24.4 + checksum: 060f6d6ede3a5f201462ae6f54975ca4eefdb731c4983950c54bc81411fc1c2865a9e916091d034b5229d4dcb79e0f5f8aeda5eeb7a31d940550a5c14e8e8729 + languageName: node + linkType: hard + +"cosmiconfig@npm:^5.0.5": + version: 5.2.1 + resolution: "cosmiconfig@npm:5.2.1" + dependencies: + import-fresh: ^2.0.0 + is-directory: ^0.3.1 + js-yaml: ^3.13.1 + parse-json: ^4.0.0 + checksum: 8b6f1d3c8a5ffdf663a952f17af0761adf210b7a5933d0fe8988f3ca3a1f0e1e5cbbb74d5b419c15933dd2fdcaec31dbc5cc85cb8259a822342b93b529eff89c + languageName: node + linkType: hard + +"cross-fetch@npm:^3.1.5": + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" + dependencies: + node-fetch: ^2.7.0 + checksum: 8ded5ea35f705e81e569e7db244a3f96e05e95996ff51877c89b0c1ec1163c76bb5dad77d0f8fba6bb35a0abacb36403d7271dc586d8b1f636110ee7a8d959fd + languageName: node + linkType: hard + +"cross-spawn@npm:^6.0.0": + version: 6.0.6 + resolution: "cross-spawn@npm:6.0.6" + dependencies: + nice-try: ^1.0.4 + path-key: ^2.0.1 + semver: ^5.5.0 + shebang-command: ^1.2.0 + which: ^1.2.9 + checksum: a6e2e5b04a0e0f806c1df45f92cd079b65f95fbe5a7650ee1ab60318c33a6c156a8a2f8b6898f57764f7363ec599a0625e9855dfa78d52d2d73dbd32eb11c25e + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b + languageName: node + linkType: hard + +"crypt@npm:0.0.2": + version: 0.0.2 + resolution: "crypt@npm:0.0.2" + checksum: baf4c7bbe05df656ec230018af8cf7dbe8c14b36b98726939cef008d473f6fe7a4fad906cfea4062c93af516f1550a3f43ceb4d6615329612c6511378ed9fe34 + languageName: node + linkType: hard + +"crypto-random-string@npm:^2.0.0": + version: 2.0.0 + resolution: "crypto-random-string@npm:2.0.0" + checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5": + version: 4.4.0 + resolution: "debug@npm:4.4.0" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: fb42df878dd0e22816fc56e1fdca9da73caa85212fbe40c868b1295a6878f9101ae684f4eeef516c13acfc700f5ea07f1136954f43d4cd2d477a811144136479 + languageName: node + linkType: hard + +"debug@npm:^3.1.0": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + +"deepmerge@npm:^4.3.1": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"default-gateway@npm:^4.2.0": + version: 4.2.0 + resolution: "default-gateway@npm:4.2.0" + dependencies: + execa: ^1.0.0 + ip-regex: ^2.1.0 + checksum: 1f5be765471689c6bab33e0c8b87363c3e2485cc1ab78904d383a8a8293a79f684da2a3303744b112503f986af4ea87d917c63a468ed913e9b0c31588c02d6a4 + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + +"del@npm:^6.0.0": + version: 6.1.1 + resolution: "del@npm:6.1.1" + dependencies: + globby: ^11.0.1 + graceful-fs: ^4.2.4 + is-glob: ^4.0.1 + is-path-cwd: ^2.2.0 + is-path-inside: ^3.0.2 + p-map: ^4.0.0 + rimraf: ^3.0.2 + slash: ^3.0.0 + checksum: 563288b73b8b19a7261c47fd21a330eeab6e2acd7c6208c49790dfd369127120dd7836cdf0c1eca216b77c94782a81507eac6b4734252d3bef2795cb366996b6 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + languageName: node + linkType: hard + +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: daaaed925ffa7889bd91d56e9624e6c8033911bb60f3a50a74a87500680652969dbaab9526d1e200a4c94acf80fc862a22131841145a0a8482d60a99c24f4a3e + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"dotenv-expand@npm:~11.0.6": + version: 11.0.7 + resolution: "dotenv-expand@npm:11.0.7" + dependencies: + dotenv: ^16.4.5 + checksum: 58455ad9ffedbf6180b49f8f35596da54f10b02efcaabcba5400363f432e1da057113eee39b42365535da41df1e794d54a4aa67b22b37c41686c3dce4e6a28c5 + languageName: node + linkType: hard + +"dotenv@npm:^16.4.5, dotenv@npm:~16.4.5": + version: 16.4.7 + resolution: "dotenv@npm:16.4.7" + checksum: c27419b5875a44addcc56cc69b7dc5b0e6587826ca85d5b355da9303c6fc317fc9989f1f18366a16378c9fdd9532d14117a1abe6029cc719cdbbef6eaef2cea4 + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: ^1.0.1 + es-errors: ^1.3.0 + gopd: ^1.2.0 + checksum: 149207e36f07bd4941921b0ca929e3a28f1da7bd6b6ff8ff7f4e2f2e460675af4576eeba359c635723dc189b64cdd4787e0255897d5b135ccc5d15cb8685fc90 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.73": + version: 1.5.129 + resolution: "electron-to-chromium@npm:1.5.129" + checksum: 5a5d6b5c4e2baba03a2446e5e7cfddad046220007395efc685cc800b5a8cf2990cf4f76e24555210f844276a5219e8b955f879d62c0b12ebcda9d4377d6d4c8d + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: abf5cd51b78082cf8af7be6785813c33b6df2068ce5191a40ca8b1afe6a86f9230af9a9ce694a5ce4665955e5c1120871826df9c128a642e09c58d592e2807fe + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"env-editor@npm:^0.4.1": + version: 0.4.2 + resolution: "env-editor@npm:0.4.2" + checksum: d162e161d9a1bddaf63f68428c587b1d823afe7d56cde039ce403cc68706c68350c92b9db44692f4ecea1d67ec80de9ba01ca70568299ed929d3fa056c40aebf + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"eol@npm:^0.9.1": + version: 0.9.1 + resolution: "eol@npm:0.9.1" + checksum: ba9fa998bc8148b935dcf85585eacf049eeaf18d2ab6196710d4d1f59e7dfd0e87b18508dc67144ff8ba12f835a4a4989aeea64c98b13cca77b74b9d4b33bce5 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"error-stack-parser@npm:^2.0.6": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: ^1.3.4 + checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: ^1.3.0 + checksum: 214d3767287b12f36d3d7267ef342bbbe1e89f899cfd67040309fc65032372a8e60201410a99a1645f2f90c1912c8c49c8668066f6bdd954bcd614dda2e3da97 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.1.0": + version: 2.1.0 + resolution: "es-set-tostringtag@npm:2.1.0" + dependencies: + es-errors: ^1.3.0 + get-intrinsic: ^1.2.6 + has-tostringtag: ^1.0.2 + hasown: ^2.0.2 + checksum: 789f35de4be3dc8d11fdcb91bc26af4ae3e6d602caa93299a8c45cf05d36cc5081454ae2a6d3afa09cceca214b76c046e4f8151e092e6fc7feeb5efb9e794fc6 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 47b029c83de01b0d17ad99ed766347b974b0d628e848de404018f3abee728e987da0d2d370ad4574aa3d5b5bfc368754fd085d69a30f8e75903486ec4b5b709e + languageName: node + linkType: hard + +"escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0, esprima@npm:~4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0, event-target-shim@npm:^5.0.1": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + +"exec-async@npm:^2.2.0": + version: 2.2.0 + resolution: "exec-async@npm:2.2.0" + checksum: 5877d83c2d553994accb39c26f40f0a633bca10d9572696e524fd91b385060ba05d1edcc28d6e3899c451e65ed453fdc7e6b69bd5d5a27d914220a100f81bb3a + languageName: node + linkType: hard + +"execa@npm:^1.0.0": + version: 1.0.0 + resolution: "execa@npm:1.0.0" + dependencies: + cross-spawn: ^6.0.0 + get-stream: ^4.0.0 + is-stream: ^1.1.0 + npm-run-path: ^2.0.0 + p-finally: ^1.0.0 + signal-exit: ^3.0.0 + strip-eof: ^1.0.0 + checksum: ddf1342c1c7d02dd93b41364cd847640f6163350d9439071abf70bf4ceb1b9b2b2e37f54babb1d8dc1df8e0d8def32d0e81e74a2e62c3e1d70c303eb4c306bc4 + languageName: node + linkType: hard + +"execa@npm:^5.1.1": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.0 + human-signals: ^2.1.0 + is-stream: ^2.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^4.0.1 + onetime: ^5.1.2 + signal-exit: ^3.0.3 + strip-final-newline: ^2.0.0 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"expo-asset@npm:^11.0.3, expo-asset@npm:~11.0.5": + version: 11.0.5 + resolution: "expo-asset@npm:11.0.5" + dependencies: + "@expo/image-utils": ^0.6.5 + expo-constants: ~17.0.8 + invariant: ^2.2.4 + md5-file: ^3.2.3 + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 7650dc032f76b0924eedaf24dee135b293e5c3258e0a9e43a6db7c93ef40ea6b6d6a47432bf80f3051f3b62e40a6ccb25e8acca820baa791d52a2e95432868bc + languageName: node + linkType: hard + +"expo-constants@npm:~17.0.8": + version: 17.0.8 + resolution: "expo-constants@npm:17.0.8" + dependencies: + "@expo/config": ~10.0.11 + "@expo/env": ~0.4.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 493e18f8ea2c49efd69aae37b756ede1c37ecc29ac9bd5c23cb2ca88dbc57109c7f915196bcfaab71ceca2141e9a9806a685f8ac787fa206af7f1391be2e09f2 + languageName: node + linkType: hard + +"expo-file-system@npm:^18.0.10, expo-file-system@npm:~18.0.12": + version: 18.0.12 + resolution: "expo-file-system@npm:18.0.12" + dependencies: + web-streams-polyfill: ^3.3.2 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 9724e2a9da1cf596d82920cf3cec3d4d6e6544d3b057c7e5895d2aac6f2fc30d9f963774198254fcde707030974407b13a4da7558160fc2278fc388cb183d253 + languageName: node + linkType: hard + +"expo-font@npm:~13.0.4": + version: 13.0.4 + resolution: "expo-font@npm:13.0.4" + dependencies: + fontfaceobserver: ^2.1.0 + peerDependencies: + expo: "*" + react: "*" + checksum: 36fa98d333c97a9a309f0ffa45827616167162caaaca6873f04d6e3d658c669da9e894fadd582b9bcc569f3b5b2043553ca204e4333d7496ad2e5843f0373b09 + languageName: node + linkType: hard + +"expo-keep-awake@npm:~14.0.3": + version: 14.0.3 + resolution: "expo-keep-awake@npm:14.0.3" + peerDependencies: + expo: "*" + react: "*" + checksum: 1f8c4c4fbc6030b4ea55fd51b6bb74ba926c71ab3c5350445b065d1433188553b67c64114230240055788df918c96d2d925d9987dcd9fc4045e45362adcbb110 + languageName: node + linkType: hard + +"expo-modules-autolinking@npm:2.0.8": + version: 2.0.8 + resolution: "expo-modules-autolinking@npm:2.0.8" + dependencies: + "@expo/spawn-async": ^1.7.2 + chalk: ^4.1.0 + commander: ^7.2.0 + fast-glob: ^3.2.5 + find-up: ^5.0.0 + fs-extra: ^9.1.0 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + bin: + expo-modules-autolinking: bin/expo-modules-autolinking.js + checksum: 1e706d40163e0d3c239641c6d4a846c8006c0367007006cff1eb26a571e605d5fa5ce49c995b9118516d82c819be0e2e2849c2ae63df9b2921bf23bc9a4c2939 + languageName: node + linkType: hard + +"expo-modules-core@npm:2.2.3": + version: 2.2.3 + resolution: "expo-modules-core@npm:2.2.3" + dependencies: + invariant: ^2.2.4 + checksum: 7b2952f1220b55eb03f395d1549525edeb5bff7bf805257d9652ea4ef85ea71e34ad13b5971f1b559e7aa080f41130846b24cbe3d754660c08196c3ce899143b + languageName: node + linkType: hard + +"expo-status-bar@npm:~2.0.1": + version: 2.0.1 + resolution: "expo-status-bar@npm:2.0.1" + peerDependencies: + react: "*" + react-native: "*" + checksum: 7e9c38c0e2a7a593958756572369fe515dc7bc7eb774eecbd2c008f994c420fa7196796c3ba32117bd801677b84b3335918c18e7e276981d49f1b7b8ebbbde95 + languageName: node + linkType: hard + +"expo@npm:^52.0.37, expo@npm:~52.0.42": + version: 52.0.42 + resolution: "expo@npm:52.0.42" + dependencies: + "@babel/runtime": ^7.20.0 + "@expo/cli": 0.22.23 + "@expo/config": ~10.0.11 + "@expo/config-plugins": ~9.0.17 + "@expo/fingerprint": 0.11.11 + "@expo/metro-config": 0.19.12 + "@expo/vector-icons": ^14.0.0 + babel-preset-expo: ~12.0.10 + expo-asset: ~11.0.5 + expo-constants: ~17.0.8 + expo-file-system: ~18.0.12 + expo-font: ~13.0.4 + expo-keep-awake: ~14.0.3 + expo-modules-autolinking: 2.0.8 + expo-modules-core: 2.2.3 + fbemitter: ^3.0.0 + web-streams-polyfill: ^3.3.2 + whatwg-url-without-unicode: 8.0.0-3 + peerDependencies: + "@expo/dom-webview": "*" + "@expo/metro-runtime": "*" + react: "*" + react-native: "*" + react-native-webview: "*" + peerDependenciesMeta: + "@expo/dom-webview": + optional: true + "@expo/metro-runtime": + optional: true + react-native-webview: + optional: true + bin: + expo: bin/cli + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: 336543c1f755639fe4233bdab70dda302ac29c731149eaf22e7ff76e52d7a380e554c544857d7383175d9af42d7424c7b0173930cd495f3c312d81d7db3507ee + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 7e191e3dd6edd8c56c88f2c8037c98fbb8034fe48778be53ed8cb30ccef371a061a4e999a469aab939b92f8f12698f3b426d52f4f76b7a20da5f9f98c3cbc862 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.5, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.8 + checksum: 0704d7b85c0305fd2cef37777337dfa26230fdd072dce9fb5c82a4b03156f3ffb8ed3e636033e65d45d2a5805a4e475825369a27404c0307f2db0c8eb3366fbd + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.19.1 + resolution: "fastq@npm:1.19.1" + dependencies: + reusify: ^1.0.4 + checksum: 7691d1794fb84ad0ec2a185f10e00f0e1713b894e2c9c4d42f0bc0ba5f8c00e6e655a202074ca0b91b9c3d977aab7c30c41a8dc069fb5368576ac0054870a0e6 + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"fbemitter@npm:^3.0.0": + version: 3.0.0 + resolution: "fbemitter@npm:3.0.0" + dependencies: + fbjs: ^3.0.0 + checksum: 069690b8cdff3521ade3c9beb92ba0a38d818a86ef36dff8690e66749aef58809db4ac0d6938eb1cacea2dbef5f2a508952d455669590264cdc146bbe839f605 + languageName: node + linkType: hard + +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 + languageName: node + linkType: hard + +"fbjs@npm:^3.0.0": + version: 3.0.5 + resolution: "fbjs@npm:3.0.5" + dependencies: + cross-fetch: ^3.1.5 + fbjs-css-vars: ^1.0.0 + loose-envify: ^1.0.0 + object-assign: ^4.1.0 + promise: ^7.1.1 + setimmediate: ^1.0.5 + ua-parser-js: ^1.0.35 + checksum: e609b5b64686bc96495a5c67728ed9b2710b9b3d695c5759c5f5e47c9483d1c323543ac777a86459e3694efc5712c6ce7212e944feb19752867d699568bb0e54 + languageName: node + linkType: hard + +"fetch-retry@npm:^4.1.1": + version: 4.1.1 + resolution: "fetch-retry@npm:4.1.1" + checksum: a06b6a0201efeb5082794713bcdc8dd2c8f1fd4ad5660de860b9c4e51738aa369be58ba7cfa67aa7aa4a3bf9d9b5a4cd2d2fdea88868856483fb81bacd70455b + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 + languageName: node + linkType: hard + +"finalhandler@npm:1.1.2": + version: 1.1.2 + resolution: "finalhandler@npm:1.1.2" + dependencies: + debug: 2.6.9 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + on-finished: ~2.3.0 + parseurl: ~1.3.3 + statuses: ~1.5.0 + unpipe: ~1.0.0 + checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e + languageName: node + linkType: hard + +"find-cache-dir@npm:^2.0.0": + version: 2.1.0 + resolution: "find-cache-dir@npm:2.1.0" + dependencies: + commondir: ^1.0.1 + make-dir: ^2.0.0 + pkg-dir: ^3.0.0 + checksum: 60ad475a6da9f257df4e81900f78986ab367d4f65d33cf802c5b91e969c28a8762f098693d7a571b6e4dd4c15166c2da32ae2d18b6766a18e2071079448fdce4 + languageName: node + linkType: hard + +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: ^3.0.0 + checksum: 38eba3fe7a66e4bc7f0f5a1366dc25508b7cfc349f852640e3678d26ad9a6d7e2c43eff0a472287de4a9753ef58f066a0ea892a256fa3636ad51b3fe1e17fae9 + languageName: node + linkType: hard + +"find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flow-enums-runtime@npm:^0.0.6": + version: 0.0.6 + resolution: "flow-enums-runtime@npm:0.0.6" + checksum: c60412ed6d43b26bf5dfa66be8e588c3ccdb20191fd269e02ca7e8e1d350c73a327cc9a7edb626c80c31eb906981945d12a87ca37118985f33406303806dab79 + languageName: node + linkType: hard + +"flow-parser@npm:0.*": + version: 0.266.1 + resolution: "flow-parser@npm:0.266.1" + checksum: dd4736baff444dd92c08370ed521085fa263b96dfac993886f418946507f596cbdafc598f33b7ad07400d041800d5d2bb4ec113886a56d8b961ea801bae6299a + languageName: node + linkType: hard + +"fontfaceobserver@npm:^2.1.0": + version: 2.3.0 + resolution: "fontfaceobserver@npm:2.3.0" + checksum: 5f14715974203b9d68f299f93a7623afd9d5701572d683e861cdbb7514573ac556f56e9b5d07d2d534e01aed19a3b0bbe568e735e0e5494cbea913fc3f12b856 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: ^7.0.6 + signal-exit: ^4.0.1 + checksum: b2c1a6fc0bf0233d645d9fefdfa999abf37db1b33e5dab172b3cbfb0662b88bfbd2c9e7ab853533d199050ec6b65c03fcf078fc212d26e4990220e98c6930eef + languageName: node + linkType: hard + +"form-data@npm:^3.0.1": + version: 3.0.3 + resolution: "form-data@npm:3.0.3" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + es-set-tostringtag: ^2.1.0 + mime-types: ^2.1.35 + checksum: e79641abb58b3d7230816ed00645c2732cb64aa44172221644619238106556584aafd908bcc0d728fb06ef6a0d88261e72f4e01111bae3da6d2d7a429e4e1fd2 + languageName: node + linkType: hard + +"freeport-async@npm:^2.0.0": + version: 2.0.0 + resolution: "freeport-async@npm:2.0.0" + checksum: 03156ab2179fbbf5b7ff3aafc56f3e01c9d7df5cc366fbf3c29f26007773632e33ed90847fa4a979c5412ad55de8b21a7292601c531acaf8957933d96225c76d + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 + languageName: node + linkType: hard + +"fs-extra@npm:9.0.0": + version: 9.0.0 + resolution: "fs-extra@npm:9.0.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^1.0.0 + checksum: c4269fbfd8d8d2a1edca4257fa28545caf7e5ad218d264f723c338a154d3624d2ef098c19915b9436d3186b7ac45d5b032371a2004008ec0cd4072512e853aa8 + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.0, fs-extra@npm:^9.1.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: ^1.0.0 + graceful-fs: ^4.2.0 + jsonfile: ^6.0.1 + universalify: ^2.0.0 + checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 + languageName: node + linkType: hard + +"fs-extra@npm:~8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.6": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: ^1.0.2 + es-define-property: ^1.0.1 + es-errors: ^1.3.0 + es-object-atoms: ^1.1.1 + function-bind: ^1.1.2 + get-proto: ^1.0.1 + gopd: ^1.2.0 + has-symbols: ^1.1.0 + hasown: ^2.0.2 + math-intrinsics: ^1.1.0 + checksum: 301008e4482bb9a9cb49e132b88fee093bff373b4e6def8ba219b1e96b60158a6084f273ef5cafe832e42cd93462f4accb46a618d35fe59a2b507f2388c5b79d + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-port@npm:^3.2.0": + version: 3.2.0 + resolution: "get-port@npm:3.2.0" + checksum: 31f530326569683ac4b7452eb7573c40e9dbe52aec14d80745c35475261e6389160da153d5b8ae911150b4ce99003472b30c69ba5be0cedeaa7865b95542d168 + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: ^1.0.1 + es-object-atoms: ^1.0.0 + checksum: 4fc96afdb58ced9a67558698b91433e6b037aaa6f1493af77498d7c85b141382cf223c0e5946f334fb328ee85dfe6edd06d218eaf09556f4bc4ec6005d7f5f7b + languageName: node + linkType: hard + +"get-stream@npm:^4.0.0": + version: 4.1.0 + resolution: "get-stream@npm:4.1.0" + dependencies: + pump: ^3.0.0 + checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"getenv@npm:^1.0.0": + version: 1.0.0 + resolution: "getenv@npm:1.0.0" + checksum: 19ae5cad603a1cf1bcb8fa3bed48e00d062eb0572a4404c02334b67f3b3499f238383082b064bb42515e9e25c2b08aef1a3e3d2b6852347721aa8b174825bd56 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.2": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^3.1.2 + minimatch: ^9.0.4 + minipass: ^7.1.2 + package-json-from-dist: ^1.0.0 + path-scurry: ^1.11.1 + bin: + glob: dist/esm/bin.mjs + checksum: 0bc725de5e4862f9f387fd0f2b274baf16850dcd2714502ccf471ee401803997983e2c05590cb65f9675a3c6f2a58e7a53f9e365704108c6ad3cbf1d60934c4a + languageName: node + linkType: hard + +"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.1.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globby@npm:^11.0.1": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.2.9 + ignore: ^5.2.0 + merge2: ^1.4.1 + slash: ^3.0.0 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3, has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + +"hermes-estree@npm:0.23.1": + version: 0.23.1 + resolution: "hermes-estree@npm:0.23.1" + checksum: 0f63edc365099304f4cd8e91a3666a4fb5a2a47baee751dc120df9201640112865944cae93617f554af71be9827e96547f9989f4972d6964ecc121527295fec6 + languageName: node + linkType: hard + +"hermes-estree@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-estree@npm:0.25.1" + checksum: 97f42e9178dff61db017810b4f79f5a2cdbb3cde94b7d99ba84ed632ee2adfcae2244555587951b3151fc036676c68f48f57fbe2b49e253eb1f3f904d284a8b0 + languageName: node + linkType: hard + +"hermes-parser@npm:0.23.1": + version: 0.23.1 + resolution: "hermes-parser@npm:0.23.1" + dependencies: + hermes-estree: 0.23.1 + checksum: a08008928aea9ea9a2cab2c0fac3cffa21f7869ab3fabb68e5add0fe057737a0c352d7a446426f7956172ccc8f2d4a215b4fc20d1d08354fc8dc16772c248fce + languageName: node + linkType: hard + +"hermes-parser@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-parser@npm:0.25.1" + dependencies: + hermes-estree: 0.25.1 + checksum: 4edcfaa3030931343b540182b83c432aba4cdcb1925952521ab4cfb7ab90c2c1543dfcb042ccd51d5e81e4bfe2809420e85902c2ff95ef7c6c64644ce17138ea + languageName: node + linkType: hard + +"hosted-git-info@npm:^7.0.0": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: ^10.0.1 + checksum: 467cf908a56556417b18e86ae3b8dee03c2360ef1d51e61c4028fe87f6f309b6ff038589c94b5666af207da9d972d5107698906aabeb78aca134641962a5c6f8 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: ^7.1.2 + debug: 4 + checksum: b882377a120aa0544846172e5db021fa8afbf83fea2a897d397bd2ddd8095ab268c24bc462f40a15f2a8c600bf4aa05ce52927f70038d4014e68aefecfa94e8d + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 2acfd32a573260ea522ea0bfeff880af426d68f6831f973129e2ba7363f422923cf53aab62f8369cbf4667c7b25b6f8a3761b34ecdb284ea18e87a5262a865be + languageName: node + linkType: hard + +"image-size@npm:^1.0.2": + version: 1.2.0 + resolution: "image-size@npm:1.2.0" + dependencies: + queue: 6.0.2 + bin: + image-size: bin/image-size.js + checksum: 6264ae22ea6f349480c5305f84cd1e64f9757442abf4baac79e29519cba38f7ccab90488996e5e4d0c232b2f44dc720576fdf3e7e63c161e49eb1d099e563f82 + languageName: node + linkType: hard + +"import-fresh@npm:^2.0.0": + version: 2.0.0 + resolution: "import-fresh@npm:2.0.0" + dependencies: + caller-path: ^2.0.0 + resolve-from: ^3.0.0 + checksum: 610255f9753cc6775df00be08e9f43691aa39f7703e3636c45afe22346b8b545e600ccfe100c554607546fc8e861fa149a0d1da078c8adedeea30fff326eef79 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"internal-ip@npm:^4.3.0": + version: 4.3.0 + resolution: "internal-ip@npm:4.3.0" + dependencies: + default-gateway: ^4.2.0 + ipaddr.js: ^1.9.0 + checksum: c970433c84d9a6b46e2c9f5ab7785d3105b856d0a566891bf919241b5a884c5c1c9bf8e915aebb822a86c14b1b6867e58c1eaf5cd49eb023368083069d1a4a9a + languageName: node + linkType: hard + +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: 1.1.0 + sprintf-js: ^1.1.3 + checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc + languageName: node + linkType: hard + +"ip-regex@npm:^2.1.0": + version: 2.1.0 + resolution: "ip-regex@npm:2.1.0" + checksum: 331d95052aa53ce245745ea0fc3a6a1e2e3c8d6da65fa8ea52bf73768c1b22a9ac50629d1d2b08c04e7b3ac4c21b536693c149ce2c2615ee4796030e5b3e3cba + languageName: node + linkType: hard + +"ipaddr.js@npm:^1.9.0": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-buffer@npm:~1.1.6": + version: 1.1.6 + resolution: "is-buffer@npm:1.1.6" + checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 + languageName: node + linkType: hard + +"is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: ^2.0.2 + checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 + languageName: node + linkType: hard + +"is-directory@npm:^0.3.1": + version: 0.3.1 + resolution: "is-directory@npm:0.3.1" + checksum: dce9a9d3981e38f2ded2a80848734824c50ee8680cd09aa477bef617949715cfc987197a2ca0176c58a9fb192a1a0d69b535c397140d241996a609d5906ae524 + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-path-cwd@npm:^2.2.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 46a840921bb8cc0dc7b5b423a14220e7db338072a4495743a8230533ce78812dc152548c86f4b828411fe98c5451959f07cf841c6a19f611e46600bd699e8048 + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + +"is-stream@npm:^1.1.0": + version: 1.1.0 + resolution: "is-stream@npm:1.1.0" + checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-wsl@npm:^2.1.1, is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: be31027fc72e7cc726206b9f560395604b82e0fddb46c4cbf9f97d049bcef607491a5afc0699612eaa4213ca5be8fd3e1e7cd187b3040988b65c9489838a7c00 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.6.3": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a + languageName: node + linkType: hard + +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + leven: ^3.1.0 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + languageName: node + linkType: hard + +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "*" + jest-util: ^29.7.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + languageName: node + linkType: hard + +"jimp-compact@npm:0.16.1": + version: 0.16.1 + resolution: "jimp-compact@npm:0.16.1" + checksum: 5a1c62d70881b31f79ea65fecfe03617be0eb56139bc451f37e8972365c99ac3b52c5176c446ff27144c98ab664a99107ae08d347044e94e1de637f165b41a57 + languageName: node + linkType: hard + +"join-component@npm:^1.1.0": + version: 1.1.0 + resolution: "join-component@npm:1.1.0" + checksum: b904c2f98549e4195022caca3a7dc837f9706c670ff333f3d617f2aed23bce2841322a999734683b6ab8e202568ad810c11ff79b58a64df66888153f04750239 + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 + languageName: node + linkType: hard + +"jsc-android@npm:^250231.0.0": + version: 250231.0.0 + resolution: "jsc-android@npm:250231.0.0" + checksum: 6c3f0f6f02fa37a19935b2fbe651e9d6ecc370eb30f2ecee76379337bbf084abb568a1ef1133fe622c5b76f43cf54bb7716f92a94dca010985da38edc48841e2 + languageName: node + linkType: hard + +"jsc-safe-url@npm:^0.2.2, jsc-safe-url@npm:^0.2.4": + version: 0.2.4 + resolution: "jsc-safe-url@npm:0.2.4" + checksum: 53b5741ba2c0a54da1722929dc80becb2c6fcc9525124fb6c2aec1a00f48e79afffd26816c278111e7b938e37ace029e33cbb8cdaa4ac1f528a87e58022284af + languageName: node + linkType: hard + +"jscodeshift@npm:^0.14.0": + version: 0.14.0 + resolution: "jscodeshift@npm:0.14.0" + dependencies: + "@babel/core": ^7.13.16 + "@babel/parser": ^7.13.16 + "@babel/plugin-proposal-class-properties": ^7.13.0 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.13.8 + "@babel/plugin-proposal-optional-chaining": ^7.13.12 + "@babel/plugin-transform-modules-commonjs": ^7.13.8 + "@babel/preset-flow": ^7.13.13 + "@babel/preset-typescript": ^7.13.0 + "@babel/register": ^7.13.16 + babel-core: ^7.0.0-bridge.0 + chalk: ^4.1.2 + flow-parser: 0.* + graceful-fs: ^4.2.4 + micromatch: ^4.0.4 + neo-async: ^2.5.0 + node-dir: ^0.1.17 + recast: ^0.21.0 + temp: ^0.8.4 + write-file-atomic: ^2.3.0 + peerDependencies: + "@babel/preset-env": ^7.1.6 + bin: + jscodeshift: bin/jscodeshift.js + checksum: 54ea6d639455883336f80b38a70648821c88b7942315dc0fbab01bc34a9ad0f0f78e3bd69304b5ab167e4262d6ed7e6284c6d32525ab01c89d9118df89b3e2a0 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 19c94095ea026725540c0d29da33ab03144f6bcf2d4159e4833d534976e99e0c09c38cefa9a575279a51fc36b31166f8d6d05c9fe2645d5f15851d690b41f17f + languageName: node + linkType: hard + +"jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.6 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: ^4.1.6 + universalify: ^2.0.0 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"lighthouse-logger@npm:^1.0.0": + version: 1.4.2 + resolution: "lighthouse-logger@npm:1.4.2" + dependencies: + debug: ^2.6.9 + marky: ^1.2.2 + checksum: ba6b73d93424318fab58b4e07c9ed246e3e969a3313f26b69515ed4c06457dd9a0b11bc706948398fdaef26aa4ba5e65cb848c37ce59f470d3c6c450b9b79a33 + languageName: node + linkType: hard + +"lightningcss-darwin-arm64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-darwin-arm64@npm:1.27.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-x64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-darwin-x64@npm:1.27.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-freebsd-x64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-freebsd-x64@npm:1.27.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-linux-arm-gnueabihf@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.27.0" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"lightningcss-linux-arm64-gnu@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm64-gnu@npm:1.27.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-arm64-musl@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm64-musl@npm:1.27.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-linux-x64-gnu@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-x64-gnu@npm:1.27.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-x64-musl@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-x64-musl@npm:1.27.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-win32-arm64-msvc@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-win32-arm64-msvc@npm:1.27.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-win32-x64-msvc@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-win32-x64-msvc@npm:1.27.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"lightningcss@npm:~1.27.0": + version: 1.27.0 + resolution: "lightningcss@npm:1.27.0" + dependencies: + detect-libc: ^1.0.3 + lightningcss-darwin-arm64: 1.27.0 + lightningcss-darwin-x64: 1.27.0 + lightningcss-freebsd-x64: 1.27.0 + lightningcss-linux-arm-gnueabihf: 1.27.0 + lightningcss-linux-arm64-gnu: 1.27.0 + lightningcss-linux-arm64-musl: 1.27.0 + lightningcss-linux-x64-gnu: 1.27.0 + lightningcss-linux-x64-musl: 1.27.0 + lightningcss-win32-arm64-msvc: 1.27.0 + lightningcss-win32-x64-msvc: 1.27.0 + dependenciesMeta: + lightningcss-darwin-arm64: + optional: true + lightningcss-darwin-x64: + optional: true + lightningcss-freebsd-x64: + optional: true + lightningcss-linux-arm-gnueabihf: + optional: true + lightningcss-linux-arm64-gnu: + optional: true + lightningcss-linux-arm64-musl: + optional: true + lightningcss-linux-x64-gnu: + optional: true + lightningcss-linux-x64-musl: + optional: true + lightningcss-win32-arm64-msvc: + optional: true + lightningcss-win32-x64-msvc: + optional: true + checksum: 3761a4feb67ca250bf1b1cb1982a3d212dee56ea345dd487592908648e70d8c17da2f5918affaf08b6cdc4e4702eee29d800ff29e16d194e7af6300af1b28409 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: ^3.0.0 + path-exists: ^3.0.0 + checksum: 53db3996672f21f8b0bf2a2c645ae2c13ffdae1eeecfcd399a583bce8516c0b88dcb4222ca6efbbbeb6949df7e46860895be2c02e8d3219abd373ace3bfb4e11 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.throttle@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.throttle@npm:4.1.1" + checksum: 129c0a28cee48b348aef146f638ef8a8b197944d4e9ec26c1890c19d9bf5a5690fe11b655c77a4551268819b32d27f4206343e30c78961f60b561b8608c8c805 + languageName: node + linkType: hard + +"lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^2.2.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: ^2.0.1 + checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 6476138d2125387a6d20f100608c2583d415a4f64a0fecf30c9e2dda976614f09cad4baa0842447bd37dd459a7bd27f57d9d8f8ce558805abd487c583f3d774a + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"make-dir@npm:^2.0.0, make-dir@npm:^2.1.0": + version: 2.1.0 + resolution: "make-dir@npm:2.1.0" + dependencies: + pify: ^4.0.1 + semver: ^5.6.0 + checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": ^3.0.0 + cacache: ^19.0.1 + http-cache-semantics: ^4.1.1 + minipass: ^7.0.2 + minipass-fetch: ^4.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^1.0.0 + proc-log: ^5.0.0 + promise-retry: ^2.0.1 + ssri: ^12.0.0 + checksum: 6fb2fee6da3d98f1953b03d315826b5c5a4ea1f908481afc113782d8027e19f080c85ae998454de4e5f27a681d3ec58d57278f0868d4e0b736f51d396b661691 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"marky@npm:^1.2.2": + version: 1.2.5 + resolution: "marky@npm:1.2.5" + checksum: 823b946677749551cdfc3b5221685478b5d1b9cc0dc03eff977c6f9a615fb05c67559f9556cb3c0fcb941a9ea0e195e37befd83026443396ccee8b724f54f4c5 + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 0e513b29d120f478c85a70f49da0b8b19bc638975eca466f2eeae0071f3ad00454c621bf66e16dd435896c208e719fc91ad79bbfba4e400fe0b372e7c1c9c9a2 + languageName: node + linkType: hard + +"md5-file@npm:^3.2.3": + version: 3.2.3 + resolution: "md5-file@npm:3.2.3" + dependencies: + buffer-alloc: ^1.1.0 + bin: + md5-file: cli.js + checksum: a3738274ee0c5ce21e7c14a4b60e5de6b298740f8a37eeb502bb97a056e3f19ea0871418b4dd45ca9c70d2f1d6c79a19e9a320fba1c129b196cdf671e544c450 + languageName: node + linkType: hard + +"md5@npm:^2.2.1": + version: 2.3.0 + resolution: "md5@npm:2.3.0" + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: ~1.1.6 + checksum: a63cacf4018dc9dee08c36e6f924a64ced735b37826116c905717c41cebeb41a522f7a526ba6ad578f9c80f02cb365033ccd67fe186ffbcc1a1faeb75daa9b6e + languageName: node + linkType: hard + +"memoize-one@npm:^5.0.0": + version: 5.2.1 + resolution: "memoize-one@npm:5.2.1" + checksum: a3cba7b824ebcf24cdfcd234aa7f86f3ad6394b8d9be4c96ff756dafb8b51c7f71320785fbc2304f1af48a0467cbbd2a409efc9333025700ed523f254cb52e3d + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"metro-babel-transformer@npm:0.81.4": + version: 0.81.4 + resolution: "metro-babel-transformer@npm:0.81.4" + dependencies: + "@babel/core": ^7.25.2 + flow-enums-runtime: ^0.0.6 + hermes-parser: 0.25.1 + nullthrows: ^1.1.1 + checksum: ebcac865e463b0e84d91ac7e03d16b01c7578e35698ca30a06ca30a5fe31d5921c1293b51c0aca47286eacb2629e56dbd4a271af7dd27126d318ebaeb32477ee + languageName: node + linkType: hard + +"metro-cache-key@npm:0.81.4": + version: 0.81.4 + resolution: "metro-cache-key@npm:0.81.4" + dependencies: + flow-enums-runtime: ^0.0.6 + checksum: 524f11de4b907024d27de1f190ea8520e3bd7ffa9cfa6d7d4c1a067ad41e4f2acd5b40c756c5dbf0def3e2dfaa5e0780fb54f7d960cd7888c124d44905b1dcfa + languageName: node + linkType: hard + +"metro-cache@npm:0.81.4": + version: 0.81.4 + resolution: "metro-cache@npm:0.81.4" + dependencies: + exponential-backoff: ^3.1.1 + flow-enums-runtime: ^0.0.6 + metro-core: 0.81.4 + checksum: 61e5e129a7eed60ea7b85224df145b959ee3379eab0f5f6d00d9268ee549ff411347e0cfe1738a827d1070ec0bacc225473c80f6cf72780bc3a81a518d5e0ec6 + languageName: node + linkType: hard + +"metro-config@npm:0.81.4, metro-config@npm:^0.81.0": + version: 0.81.4 + resolution: "metro-config@npm:0.81.4" + dependencies: + connect: ^3.6.5 + cosmiconfig: ^5.0.5 + flow-enums-runtime: ^0.0.6 + jest-validate: ^29.7.0 + metro: 0.81.4 + metro-cache: 0.81.4 + metro-core: 0.81.4 + metro-runtime: 0.81.4 + checksum: 3fcee46eb84045a00f708025bd9c710531d29661d9e561eb418f342e97ed4dbffbda1b677e6045f7ec92eb9c6e06d0e429df8372f1050ad005a9820ca9cf4ad4 + languageName: node + linkType: hard + +"metro-core@npm:0.81.4, metro-core@npm:^0.81.0": + version: 0.81.4 + resolution: "metro-core@npm:0.81.4" + dependencies: + flow-enums-runtime: ^0.0.6 + lodash.throttle: ^4.1.1 + metro-resolver: 0.81.4 + checksum: d39d5e25dbb949fdeae906c511b78ee19a2caee2ddd018116866715263038baf4be8376255ee0087f892ee7220aeb17f9c8cabbd244742100dc9e87193614f91 + languageName: node + linkType: hard + +"metro-file-map@npm:0.81.4": + version: 0.81.4 + resolution: "metro-file-map@npm:0.81.4" + dependencies: + debug: ^2.2.0 + fb-watchman: ^2.0.0 + flow-enums-runtime: ^0.0.6 + graceful-fs: ^4.2.4 + invariant: ^2.2.4 + jest-worker: ^29.7.0 + micromatch: ^4.0.4 + nullthrows: ^1.1.1 + walker: ^1.0.7 + checksum: 7a1008263b527aeefdeb606cede2287f58ab11c9da6b2b68b10ffc93524d6b595c6c8fc86e36ef16c696b11322f1631b905b592f275ec88121104b1feab4e74a + languageName: node + linkType: hard + +"metro-minify-terser@npm:0.81.4": + version: 0.81.4 + resolution: "metro-minify-terser@npm:0.81.4" + dependencies: + flow-enums-runtime: ^0.0.6 + terser: ^5.15.0 + checksum: 985b0023354f523608d977bcb3c45edf3c5497ca0466fdb5b1125ff2c0cca56b6184a263106c7f6f9f381e950a035f15fb12e977ed169ca13089a75733c3314f + languageName: node + linkType: hard + +"metro-resolver@npm:0.81.4": + version: 0.81.4 + resolution: "metro-resolver@npm:0.81.4" + dependencies: + flow-enums-runtime: ^0.0.6 + checksum: 0404d549ac144d5823e4b0383e6718d5fb969c60f3cf4db4a24748f94198b692b1527a92a874b9af00ba28284719063e7aaec5f2913e82438ac5b97d9b406241 + languageName: node + linkType: hard + +"metro-runtime@npm:0.81.4, metro-runtime@npm:^0.81.0": + version: 0.81.4 + resolution: "metro-runtime@npm:0.81.4" + dependencies: + "@babel/runtime": ^7.25.0 + flow-enums-runtime: ^0.0.6 + checksum: 96029d4be2b828792431318f3a28c4cb82dae0c0c6d5a393874362b9df08ada56ae3f283ad8b6eb0a8c3358518cc7c01b53712482b891fdf292e893d038eb7d1 + languageName: node + linkType: hard + +"metro-source-map@npm:0.81.4, metro-source-map@npm:^0.81.0": + version: 0.81.4 + resolution: "metro-source-map@npm:0.81.4" + dependencies: + "@babel/traverse": ^7.25.3 + "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3" + "@babel/types": ^7.25.2 + flow-enums-runtime: ^0.0.6 + invariant: ^2.2.4 + metro-symbolicate: 0.81.4 + nullthrows: ^1.1.1 + ob1: 0.81.4 + source-map: ^0.5.6 + vlq: ^1.0.0 + checksum: 878fe5b2e69f3b658e80f50de61ca8af8085485dfffb67ec1641e80e725a87319cbcf51909ac56baaafcf6156a3a4ba78585901a164d237566b6a19767341633 + languageName: node + linkType: hard + +"metro-symbolicate@npm:0.81.4": + version: 0.81.4 + resolution: "metro-symbolicate@npm:0.81.4" + dependencies: + flow-enums-runtime: ^0.0.6 + invariant: ^2.2.4 + metro-source-map: 0.81.4 + nullthrows: ^1.1.1 + source-map: ^0.5.6 + vlq: ^1.0.0 + bin: + metro-symbolicate: src/index.js + checksum: b5391c516499e2b761f366558cac4382e42c815fb7eb9551f1e64e95769e06688d6988329d59c7e769076af5ac2abb880a0544f367b523d786b249808b8fb050 + languageName: node + linkType: hard + +"metro-transform-plugins@npm:0.81.4": + version: 0.81.4 + resolution: "metro-transform-plugins@npm:0.81.4" + dependencies: + "@babel/core": ^7.25.2 + "@babel/generator": ^7.25.0 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.3 + flow-enums-runtime: ^0.0.6 + nullthrows: ^1.1.1 + checksum: 709e7a2ea8fef04d40dc63222cb9b42046b975c1b7eb838c6f9ca315e08a756ad18d0057f2d5e0beaf4e0561cd03be9dfb3b15de286ff102ee386cf49acbae57 + languageName: node + linkType: hard + +"metro-transform-worker@npm:0.81.4": + version: 0.81.4 + resolution: "metro-transform-worker@npm:0.81.4" + dependencies: + "@babel/core": ^7.25.2 + "@babel/generator": ^7.25.0 + "@babel/parser": ^7.25.3 + "@babel/types": ^7.25.2 + flow-enums-runtime: ^0.0.6 + metro: 0.81.4 + metro-babel-transformer: 0.81.4 + metro-cache: 0.81.4 + metro-cache-key: 0.81.4 + metro-minify-terser: 0.81.4 + metro-source-map: 0.81.4 + metro-transform-plugins: 0.81.4 + nullthrows: ^1.1.1 + checksum: 947b892b0dc8836d55772d0367ed0a797fc68f8b53000e21be5b5c6cc66ab0269292e4cbff3fa9988f4c471dbd979a49dbb11fa780e7022e0ed26b810cbe19ff + languageName: node + linkType: hard + +"metro@npm:0.81.4, metro@npm:^0.81.0": + version: 0.81.4 + resolution: "metro@npm:0.81.4" + dependencies: + "@babel/code-frame": ^7.24.7 + "@babel/core": ^7.25.2 + "@babel/generator": ^7.25.0 + "@babel/parser": ^7.25.3 + "@babel/template": ^7.25.0 + "@babel/traverse": ^7.25.3 + "@babel/types": ^7.25.2 + accepts: ^1.3.7 + chalk: ^4.0.0 + ci-info: ^2.0.0 + connect: ^3.6.5 + debug: ^2.2.0 + error-stack-parser: ^2.0.6 + flow-enums-runtime: ^0.0.6 + graceful-fs: ^4.2.4 + hermes-parser: 0.25.1 + image-size: ^1.0.2 + invariant: ^2.2.4 + jest-worker: ^29.7.0 + jsc-safe-url: ^0.2.2 + lodash.throttle: ^4.1.1 + metro-babel-transformer: 0.81.4 + metro-cache: 0.81.4 + metro-cache-key: 0.81.4 + metro-config: 0.81.4 + metro-core: 0.81.4 + metro-file-map: 0.81.4 + metro-resolver: 0.81.4 + metro-runtime: 0.81.4 + metro-source-map: 0.81.4 + metro-symbolicate: 0.81.4 + metro-transform-plugins: 0.81.4 + metro-transform-worker: 0.81.4 + mime-types: ^2.1.27 + nullthrows: ^1.1.1 + serialize-error: ^2.1.0 + source-map: ^0.5.6 + throat: ^5.0.0 + ws: ^7.5.10 + yargs: ^17.6.2 + bin: + metro: src/cli.js + checksum: 77d8ffa230500f9e7f834600d9d8a4a8b0a3214f17e3dd4e8b8c2039bd48e3d8322e01068b4faf29093fa8398225cef4a6f130b581c33fef53e94f5646e6e1a9 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: ^3.0.3 + picomatch: ^2.3.1 + checksum: 79920eb634e6f400b464a954fcfa589c4e7c7143209488e44baf627f9affc8b1e306f41f4f0deedde97e69cb725920879462d3e750ab3bd3c1aed675bb3a8966 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-db@npm:>= 1.43.0 < 2": + version: 1.54.0 + resolution: "mime-db@npm:1.54.0" + checksum: e99aaf2f23f5bd607deb08c83faba5dd25cf2fec90a7cc5b92d8260867ee08dab65312e1a589e60093dc7796d41e5fae013268418482f1db4c7d52d0a0960ac9 + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.35, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 69c08205156a1f4906d9c46f9b4dc08d18a50176352e77fdeb645cedfe9f20c0b19865d465bd2dec27a5c432347f24dc07fc3695e11159d193f892834233e939 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^3.0.1 + dependenciesMeta: + encoding: + optional: true + checksum: 3dfca705ce887ca9ff14d73e8d8593996dea1a1ecd8101fdbb9c10549d1f9670bc8fb66ad0192769ead4c2dc01b4f9ca1cf567ded365adff17827a303b948140 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: ^7.1.2 + checksum: 493bed14dcb6118da7f8af356a8947cf1473289c09658e5aabd69a737800a8c3b1736fb7d7931b722268a9c9bc038a6d53c049b6a6af24b34a121823bb709996 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.1": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 972deb188e8fb55547f1e58d66bd6b4a3623bf0c7137802582602d73e6480c1c2268dcbafbfb1be466e00cc7e56ac514d7fd9334b7cf33e3e2ab547c16f83a8d + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.1, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.7": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 3be20d8866a57a6b6d218e82549711c8352ed969f9ab3c45379da28f405363ad4c9aeb0b39e9abc101a529ca65a72ff9502b00bf74a912c4b64a9d62dfd26c29 + languageName: node + linkType: hard + +"negotiator@npm:0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 20ebfe79b2d2e7cf9cbc8239a72662b584f71164096e6e8896c8325055497c96f6b80cd22c258e8a2f2aa382a787795ec3ee8b37b422a302c7d4381b0d5ecfbb + languageName: node + linkType: hard + +"negotiator@npm:~0.6.4": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 7ded10aa02a0707d1d12a9973fdb5954f98547ca7beb60e31cb3a403cc6e8f11138db7a3b0128425cf836fc85d145ec4ce983b2bdf83dca436af879c2d683510 + languageName: node + linkType: hard + +"neo-async@npm:^2.5.0": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"nested-error-stacks@npm:~2.0.1": + version: 2.0.1 + resolution: "nested-error-stacks@npm:2.0.1" + checksum: 8430d7d80ad69b1add2992ee2992a363db6c1a26a54740963bc99a004c5acb1d2a67049397062eab2caa3a312b4da89a0b85de3bdf82d7d472a6baa166311fe6 + languageName: node + linkType: hard + +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff + languageName: node + linkType: hard + +"node-dir@npm:^0.1.17": + version: 0.1.17 + resolution: "node-dir@npm:0.1.17" + dependencies: + minimatch: ^3.0.2 + checksum: 29de9560e52cdac8d3f794d38d782f6799e13d4d11aaf96d3da8c28458e1c5e33bb5f8edfb42dc34172ec5516c50c5b8850c9e1526542616757a969267263328 + languageName: node + linkType: hard + +"node-fetch@npm:^2.2.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + +"node-forge@npm:^1, node-forge@npm:^1.2.1, node-forge@npm:^1.3.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.1.0 + resolution: "node-gyp@npm:11.1.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^14.0.3 + nopt: ^8.0.0 + proc-log: ^5.0.0 + semver: ^7.3.5 + tar: ^7.4.3 + which: ^5.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: b196da39a7a45f302d6e03cfdb579eeecbfffa1ab3796de45652c2c0dcbf46b83fde715b054e4d00aa53da5f33033ac5791e20cbb7cc11267dac4f8975ef276c + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 917dbced519f48c6289a44830a0ca6dc944c3ee9243c468ebd8515a41c97c8b2c256edb7f3f750416bc37952cc9608684e6483c7b6c6f39f6bd8d86c52cfe658 + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: ^3.0.0 + bin: + nopt: bin/nopt.js + checksum: 49cfd3eb6f565e292bf61f2ff1373a457238804d5a5a63a8d786c923007498cba89f3648e3b952bc10203e3e7285752abf5b14eaf012edb821e84f24e881a92a + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"npm-package-arg@npm:^11.0.0": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: ^7.0.0 + proc-log: ^4.0.0 + semver: ^7.3.5 + validate-npm-package-name: ^5.0.0 + checksum: cc6f22c39201aa14dcceeddb81bfbf7fa0484f94bcd2b3ad038e18afec5167c843cdde90c897f6034dc368faa0100c1eeee6e3f436a89e0af32ba932af4a8c28 + languageName: node + linkType: hard + +"npm-run-path@npm:^2.0.0": + version: 2.0.2 + resolution: "npm-run-path@npm:2.0.2" + dependencies: + path-key: ^2.0.0 + checksum: acd5ad81648ba4588ba5a8effb1d98d2b339d31be16826a118d50f182a134ac523172101b82eab1d01cb4c2ba358e857d54cfafd8163a1ffe7bd52100b741125 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"nullthrows@npm:^1.1.1": + version: 1.1.1 + resolution: "nullthrows@npm:1.1.1" + checksum: 10806b92121253eb1b08ecf707d92480f5331ba8ae5b23fa3eb0548ad24196eb797ed47606153006568a5733ea9e528a3579f21421f7828e09e7756f4bdd386f + languageName: node + linkType: hard + +"ob1@npm:0.81.4": + version: 0.81.4 + resolution: "ob1@npm:0.81.4" + dependencies: + flow-enums-runtime: ^0.0.6 + checksum: 76369043728f471ded35d294088e65a3c0876f2f7c73ad9a4dcdda68e1022a4ce72b8052a681f2604c93cd2e7ccf35e945bbb01855378122f7a1ef48ad1cc72c + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: 1.1.1 + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 + languageName: node + linkType: hard + +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: 1.1.1 + checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: ^1.0.0 + checksum: bb44015ac7a525d0fb43b029a583d4ad359834632b4424ca209b438aacf6d669dda81b5edfbdb42c22636e607b276ba5589f46694a729e3bc27948ce26f4cc1a + languageName: node + linkType: hard + +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"open@npm:^7.0.3": + version: 7.4.2 + resolution: "open@npm:7.4.2" + dependencies: + is-docker: ^2.0.0 + is-wsl: ^2.1.1 + checksum: 3333900ec0e420d64c23b831bc3467e57031461d843c801f569b2204a1acc3cd7b3ec3c7897afc9dde86491dfa289708eb92bba164093d8bd88fb2c231843c91 + languageName: node + linkType: hard + +"open@npm:^8.0.4": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: ^2.0.0 + is-docker: ^2.1.1 + is-wsl: ^2.2.0 + checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 + languageName: node + linkType: hard + +"ora@npm:^3.4.0": + version: 3.4.0 + resolution: "ora@npm:3.4.0" + dependencies: + chalk: ^2.4.2 + cli-cursor: ^2.1.0 + cli-spinners: ^2.0.0 + log-symbols: ^2.2.0 + strip-ansi: ^5.2.0 + wcwidth: ^1.0.1 + checksum: f1f8e7f290b766276dcd19ddf2159a1971b1ec37eec4a5556b8f5e4afbe513a965ed65c183d38956724263b6a20989b3d8fb71b95ac4a2d6a01db2f1ed8899e4 + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-finally@npm:^1.0.0": + version: 1.0.0 + resolution: "p-finally@npm:1.0.0" + checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: ^2.0.0 + checksum: 83991734a9854a05fe9dbb29f707ea8a0599391f52daac32b86f08e21415e857ffa60f0e120bfe7ce0cc4faf9274a50239c7895fc0d0579d08411e513b83a4ae + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 8c92d533acf82f0d12f7e196edccff773f384098bbb048acdd55a08778ce4fc8889d8f1bde72969487bd96f9c63212698d79744c20bedfce36c5b00b46d369f8 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 58ee9538f2f762988433da00e26acc788036914d57c71c246bf0be1b60cdbd77dd60b6a3e1a30465f0b248aeb80079e0b34cb6050b1dfa18c06953bb1cbc7602 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: ^1.3.1 + json-parse-better-errors: ^1.0.1 + checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 + languageName: node + linkType: hard + +"parse-png@npm:^2.1.0": + version: 2.1.0 + resolution: "parse-png@npm:2.1.0" + dependencies: + pngjs: ^3.3.0 + checksum: 0c6b6c42c8830cd16f6f9e9aedafd53111c0ad2ff350ba79c629996887567558f5639ad0c95764f96f7acd1f9ff63d4ac73737e80efa3911a6de9839ee520c96 + languageName: node + linkType: hard + +"parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 + languageName: node + linkType: hard + +"password-prompt@npm:^1.0.4": + version: 1.1.3 + resolution: "password-prompt@npm:1.1.3" + dependencies: + ansi-escapes: ^4.3.2 + cross-spawn: ^7.0.3 + checksum: 9a5fdbd7360db896809704c141acfe9258450a9982c4c177b82a1e6c69d204800cdab6064abac6736bd7d31142c80108deedf4484146594747cb3ce776816e97 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^2.0.0, path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.5, path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: ^10.2.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: e1cf46bf84886c79055fdfa9dcb3e4711ad259949e3565154b004b260cd356c5d54b31a1437ce9782624bf766272fe6b0154f5f0c744fb7af5d454d2b60db045 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"picomatch@npm:^3.0.1": + version: 3.0.1 + resolution: "picomatch@npm:3.0.1" + checksum: b7fe18174bcc05bbf0ea09cc85623ae395676b3e6bc25636d4c20db79a948586237e429905453bf1ba385bc7a7aa5b56f1b351680e650d2b5c305ceb98dfc914 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b + languageName: node + linkType: hard + +"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.6": + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 3dcbaff13c8b5bc158416feb6dc9e49e3c6be5fddc1ea078a05a73ef6b85d79324bbb1ef59b954cdeff000dbf000c1d39f32dc69310c7b78fbada5171b583e40 + languageName: node + linkType: hard + +"pkg-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "pkg-dir@npm:3.0.0" + dependencies: + find-up: ^3.0.0 + checksum: 70c9476ffefc77552cc6b1880176b71ad70bfac4f367604b2b04efd19337309a4eec985e94823271c7c0e83946fa5aeb18cd360d15d10a5d7533e19344bfa808 + languageName: node + linkType: hard + +"plist@npm:^3.0.5": + version: 3.1.0 + resolution: "plist@npm:3.1.0" + dependencies: + "@xmldom/xmldom": ^0.8.8 + base64-js: ^1.5.1 + xmlbuilder: ^15.1.1 + checksum: c8ea013da8646d4c50dff82f9be39488054621cc229957621bb00add42b5d4ce3657cf58d4b10c50f7dea1a81118f825838f838baeb4e6f17fab453ecf91d424 + languageName: node + linkType: hard + +"pngjs@npm:^3.3.0": + version: 3.4.0 + resolution: "pngjs@npm:3.4.0" + checksum: 8bd40bd698abd16b72c97b85cb858c80894fbedc76277ce72a784aa441e14795d45d9856e97333ca469b34b67528860ffc8a7317ca6beea349b645366df00bcd + languageName: node + linkType: hard + +"postcss@npm:~8.4.32": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" + dependencies: + nanoid: ^3.3.7 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: eb5d6cbdca24f50399aafa5d2bea489e4caee4c563ea1edd5a2485bc5f84e9ceef3febf170272bc83a99c31d23a316ad179213e853f34c2a7a8ffa534559d63a + languageName: node + linkType: hard + +"pretty-bytes@npm:^5.6.0": + version: 5.6.0 + resolution: "pretty-bytes@npm:5.6.0" + checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd + languageName: node + linkType: hard + +"pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"proc-log@npm:^4.0.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: c78b26ecef6d5cce4a7489a1e9923d7b4b1679028c8654aef0463b27f4a90b0946cd598f55799da602895c52feb085ec76381d007ab8dcceebd40b89c2f9dfe0 + languageName: node + linkType: hard + +"progress@npm:^2.0.3": + version: 2.0.3 + resolution: "progress@npm:2.0.3" + checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: ~2.0.3 + checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 + languageName: node + linkType: hard + +"promise@npm:^8.3.0": + version: 8.3.0 + resolution: "promise@npm:8.3.0" + dependencies: + asap: ~2.0.6 + checksum: a69f0ddbddf78ffc529cffee7ad950d307347615970564b17988ce43fbe767af5c738a9439660b24a9a8cbea106c0dcbb6c2b20e23b7e96a8e89e5c2679e94d5 + languageName: node + linkType: hard + +"prompts@npm:^2.3.2": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: ^1.1.0 + once: ^1.3.1 + checksum: e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f + languageName: node + linkType: hard + +"punycode@npm:^2.1.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 + languageName: node + linkType: hard + +"qrcode-terminal@npm:0.11.0": + version: 0.11.0 + resolution: "qrcode-terminal@npm:0.11.0" + bin: + qrcode-terminal: ./bin/qrcode-terminal.js + checksum: ad146ea1e339e1745402a3ea131631f64f40f0d1ff9cc6bd9c21677feaa1ca6dcd32eadf188fd3febdab8bf6191b3d24d533454903a72543645a72820e4d324c + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"queue@npm:6.0.2": + version: 6.0.2 + resolution: "queue@npm:6.0.2" + dependencies: + inherits: ~2.0.3 + checksum: ebc23639248e4fe40a789f713c20548e513e053b3dc4924b6cb0ad741e3f264dcff948225c8737834dd4f9ec286dbc06a1a7c13858ea382d9379f4303bcc0916 + languageName: node + linkType: hard + +"range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 + languageName: node + linkType: hard + +"rc@npm:~1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: ^0.6.0 + ini: ~1.3.0 + minimist: ^1.2.0 + strip-json-comments: ~2.0.1 + bin: + rc: ./cli.js + checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e + languageName: node + linkType: hard + +"react-devtools-core@npm:^5.3.1": + version: 5.3.2 + resolution: "react-devtools-core@npm:5.3.2" + dependencies: + shell-quote: ^1.6.1 + ws: ^7 + checksum: 8ae15b34f69ea16a0c6b9966c195aecf61981099409ddfe1950e1686cfae6717f93dc63285bd8f1094cc783de81c3d1e73285a82e774d2b289a17ede93d6589b + languageName: node + linkType: hard + +"react-is@npm:^16.13.1": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 + languageName: node + linkType: hard + +"react-native-executorch@file:../../react-native-executorch-20250401133031.tgz::locator=text-embeddings%40workspace%3A.": + version: 20250401133031 + resolution: "react-native-executorch@file:../../react-native-executorch-20250401133031.tgz::locator=text-embeddings%40workspace%3A." + dependencies: + expo: ^52.0.37 + expo-asset: ^11.0.3 + expo-file-system: ^18.0.10 + react-native-live-audio-stream: ^1.1.1 + peerDependencies: + react: "*" + react-native: "*" + checksum: ae1d3bd1275ab24d07847a10a10591eaa263b86283f7efae21f21881b6fbdbabc426474a75fb8e1573d1bd868f517262965134df8982c4553d9e8ebb34680988 + languageName: node + linkType: hard + +"react-native-live-audio-stream@npm:^1.1.1": + version: 1.1.1 + resolution: "react-native-live-audio-stream@npm:1.1.1" + checksum: 1503fb1d9e2df58bf31bfa9ee3cf5167802a659ec64e3a6ca8ba2401b6388af158f9e04895699152e91eec66bcc949a3f35ae38fb63435ae28959b5be56bbd2e + languageName: node + linkType: hard + +"react-native@npm:0.76.8": + version: 0.76.8 + resolution: "react-native@npm:0.76.8" + dependencies: + "@jest/create-cache-key-function": ^29.6.3 + "@react-native/assets-registry": 0.76.8 + "@react-native/codegen": 0.76.8 + "@react-native/community-cli-plugin": 0.76.8 + "@react-native/gradle-plugin": 0.76.8 + "@react-native/js-polyfills": 0.76.8 + "@react-native/normalize-colors": 0.76.8 + "@react-native/virtualized-lists": 0.76.8 + abort-controller: ^3.0.0 + anser: ^1.4.9 + ansi-regex: ^5.0.0 + babel-jest: ^29.7.0 + babel-plugin-syntax-hermes-parser: ^0.23.1 + base64-js: ^1.5.1 + chalk: ^4.0.0 + commander: ^12.0.0 + event-target-shim: ^5.0.1 + flow-enums-runtime: ^0.0.6 + glob: ^7.1.1 + invariant: ^2.2.4 + jest-environment-node: ^29.6.3 + jsc-android: ^250231.0.0 + memoize-one: ^5.0.0 + metro-runtime: ^0.81.0 + metro-source-map: ^0.81.0 + mkdirp: ^0.5.1 + nullthrows: ^1.1.1 + pretty-format: ^29.7.0 + promise: ^8.3.0 + react-devtools-core: ^5.3.1 + react-refresh: ^0.14.0 + regenerator-runtime: ^0.13.2 + scheduler: 0.24.0-canary-efb381bbf-20230505 + semver: ^7.1.3 + stacktrace-parser: ^0.1.10 + whatwg-fetch: ^3.0.0 + ws: ^6.2.3 + yargs: ^17.6.2 + peerDependencies: + "@types/react": ^18.2.6 + react: ^18.2.0 + peerDependenciesMeta: + "@types/react": + optional: true + bin: + react-native: cli.js + checksum: 64c27d23ee10dae4f7998ccd83d4169eeb61d750c4721e1c887315991f99526b7251cc2aba8f3cc4c7187bd8186b85747ad690a541952bf10ca4a16a213253e3 + languageName: node + linkType: hard + +"react-refresh@npm:^0.14.0, react-refresh@npm:^0.14.2": + version: 0.14.2 + resolution: "react-refresh@npm:0.14.2" + checksum: d80db4bd40a36dab79010dc8aa317a5b931f960c0d83c4f3b81f0552cbcf7f29e115b84bb7908ec6a1eb67720fff7023084eff73ece8a7ddc694882478464382 + languageName: node + linkType: hard + +"react@npm:18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: ^1.1.0 + checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376 + languageName: node + linkType: hard + +"readline@npm:^1.3.0": + version: 1.3.0 + resolution: "readline@npm:1.3.0" + checksum: dfaf8e6ac20408ea00d650e95f7bb47f77c4c62dd12ed7fb51731ee84532a2f3675fcdc4cab4923dc1eef227520a2e082a093215190907758bea9f585b19438e + languageName: node + linkType: hard + +"recast@npm:^0.21.0": + version: 0.21.5 + resolution: "recast@npm:0.21.5" + dependencies: + ast-types: 0.15.2 + esprima: ~4.0.0 + source-map: ~0.6.1 + tslib: ^2.0.1 + checksum: 03cc7f57562238ba258d468be67bf7446ce7a707bc87a087891dad15afead46c36e9aaeedf2130e2ab5a465244a9c62bfd4127849761cf8f4085abe2f3e5f485 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" + dependencies: + regenerate: ^1.4.2 + checksum: d5c5fc13f8b8d7e16e791637a4bfef741f8d70e267d51845ee7d5404a32fa14c75b181c4efba33e4bff8b0000a2f13e9773593713dfe5b66597df4259275ce63 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.13.2": + version: 0.13.11 + resolution: "regenerator-runtime@npm:0.13.11" + checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.1 + resolution: "regenerator-runtime@npm:0.14.1" + checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 + languageName: node + linkType: hard + +"regenerator-transform@npm:^0.15.2": + version: 0.15.2 + resolution: "regenerator-transform@npm:0.15.2" + dependencies: + "@babel/runtime": ^7.8.4 + checksum: 20b6f9377d65954980fe044cfdd160de98df415b4bff38fbade67b3337efaf078308c4fed943067cd759827cc8cfeca9cb28ccda1f08333b85d6a2acbd022c27 + languageName: node + linkType: hard + +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" + dependencies: + regenerate: ^1.4.2 + regenerate-unicode-properties: ^10.2.0 + regjsgen: ^0.8.0 + regjsparser: ^0.12.0 + unicode-match-property-ecmascript: ^2.0.0 + unicode-match-property-value-ecmascript: ^2.1.0 + checksum: 67d3c4a3f6c99bc80b5d690074a27e6f675be1c1739f8a9acf028fbc36f1a468472574ea65e331e217995198ba4404d7878f3cb3739a73552dd3c70d3fb7f8e6 + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: a1d925ff14a4b2be774e45775ee6b33b256f89c42d480e6d85152d2133f18bd3d6af662161b226fa57466f7efec367eaf7ccd2a58c0ec2a1306667ba2ad07b0d + languageName: node + linkType: hard + +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" + dependencies: + jsesc: ~3.0.2 + bin: + regjsparser: bin/parser + checksum: 094b55b0ab3e1fd58f8ce5132a1d44dab08d91f7b0eea4132b0157b303ebb8ded20a9cbd893d25402d2aeddb23fac1f428ab4947b295d6fa51dd1c334a9e76f0 + languageName: node + linkType: hard + +"remove-trailing-slash@npm:^0.1.0": + version: 0.1.1 + resolution: "remove-trailing-slash@npm:0.1.1" + checksum: dd200c6b7d6f2b49d12b3eff3abc7089917e8a268cefcd5bf67ff23f8c2ad9f866fbe2f3566e1a8dbdc4f4b1171e2941f7dd00852f8de549bb73c3df53b09d96 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + +"requireg@npm:^0.2.2": + version: 0.2.2 + resolution: "requireg@npm:0.2.2" + dependencies: + nested-error-stacks: ~2.0.1 + rc: ~1.2.7 + resolve: ~1.7.1 + checksum: 99b420a02e7272717153cdf75891cbb133c02c04b287721eb1bdb0668b6a98aa1da38c08d8148fc8b1443a668d939eeb622d390538ac8da17b18a977ebe998ae + languageName: node + linkType: hard + +"resolve-from@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-from@npm:3.0.0" + checksum: fff9819254d2d62b57f74e5c2ca9c0bdd425ca47287c4d801bc15f947533148d858229ded7793b0f59e61e49e782fffd6722048add12996e1bd4333c29669062 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve-workspace-root@npm:^2.0.0": + version: 2.0.0 + resolution: "resolve-workspace-root@npm:2.0.0" + checksum: c7222391a35ecb3514fa04d753334a86f984d8ffe06ce87506582c4c5671ac608273b8f5e6faa2055be6e196785bf751ede9a48d484de53889d721b814c097ab + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.3": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: abfb9f98278dcd0c19b8a49bb486abfafa23df4636d49128ea270dc982053c3ef230a530aecda1fae1322873fdfa6c97674fc539651ddfdb375ac58e0b8ef6df + languageName: node + linkType: hard + +"resolve@npm:^1.14.2, resolve@npm:^1.22.2": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: ^2.16.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: ab7a32ff4046fcd7c6fdd525b24a7527847d03c3650c733b909b01b757f92eb23510afa9cc3e9bf3f26a3e073b48c88c706dfd4c1d2fb4a16a96b73b6328ddcf + languageName: node + linkType: hard + +"resolve@npm:~1.7.1": + version: 1.7.1 + resolution: "resolve@npm:1.7.1" + dependencies: + path-parse: ^1.0.5 + checksum: afb829d4b923f9b17aaf55320c2feaf8d44577674a3a71510d299f832fb80f6703e5a701e01cf774c3241fe8663d4b2b99053cfbca7995488d18ea9f8c7ac309 + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.22.2#~builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#~builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: ^2.16.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 8aac1e4e4628bd00bf4b94b23de137dd3fe44097a8d528fd66db74484be929936e20c696e1a3edf4488f37e14180b73df6f600992baea3e089e8674291f16c9d + languageName: node + linkType: hard + +"resolve@patch:resolve@~1.7.1#~builtin": + version: 1.7.1 + resolution: "resolve@patch:resolve@npm%3A1.7.1#~builtin::version=1.7.1&hash=3bafbf" + dependencies: + path-parse: ^1.0.5 + checksum: c2a6f0e3856ac1ddc8297091c20ca6c36d99bf289ddea366c46bd2a7ed8b31075c7f9d01ff5d390ebed1fe41b9fabe57a79ae087992ba92e3592f0c3be07c1ac + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: ^2.0.0 + signal-exit: ^3.0.2 + checksum: 482e13d02d834b6e5e3aa90304a8b5e840775d6f06916cc92a50038adf9f098dcc72405b567da8a37e137ae40ad3e31896fa3136ae62f7a426c2fbf53d036536 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 64cb3142ac5e9ad689aca289585cb41d22521f4571f73e9488af39f6b1bd62f0cbb3d65e2ecc768ec6494052523f473f1eb4b55c3e9014b3590c17fc6a03e22a + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rimraf@npm:~2.6.2": + version: 2.6.3 + resolution: "rimraf@npm:2.6.3" + dependencies: + glob: ^7.1.3 + bin: + rimraf: ./bin.js + checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"sax@npm:>=0.6.0": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 3ad64df16b743f0f2eb7c38ced9692a6d924f1cd07bbe45c39576c2cf50de8290d9d04e7b2228f924c7d05fecc4ec5cf651423278e0c7b63d260c387ef3af84a + languageName: node + linkType: hard + +"scheduler@npm:0.24.0-canary-efb381bbf-20230505": + version: 0.24.0-canary-efb381bbf-20230505 + resolution: "scheduler@npm:0.24.0-canary-efb381bbf-20230505" + dependencies: + loose-envify: ^1.1.0 + checksum: 232149125c10f10193b1340ec4bbf14a8e6a845152790d6fd6f58207642db801abdb5a21227561a0a93871b98ba47539a6233b4e6155aae72d6db6db9f9f09b3 + languageName: node + linkType: hard + +"selfsigned@npm:^2.4.1": + version: 2.4.1 + resolution: "selfsigned@npm:2.4.1" + dependencies: + "@types/node-forge": ^1.3.0 + node-forge: ^1 + checksum: 38b91c56f1d7949c0b77f9bbe4545b19518475cae15e7d7f0043f87b1626710b011ce89879a88969651f650a19d213bb15b7d5b4c2877df9eeeff7ba8f8b9bfa + languageName: node + linkType: hard + +"semver@npm:^5.5.0, semver@npm:^5.6.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.1.3, semver@npm:^7.3.5, semver@npm:^7.5.4, semver@npm:^7.6.0": + version: 7.7.1 + resolution: "semver@npm:7.7.1" + bin: + semver: bin/semver.js + checksum: 586b825d36874007c9382d9e1ad8f93888d8670040add24a28e06a910aeebd673a2eb9e3bf169c6679d9245e66efb9057e0852e70d9daa6c27372aab1dda7104 + languageName: node + linkType: hard + +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 5ae11bd900c1c2575525e2aa622e856804e2f96a09281ec1e39610d089f53aa69e13fd8db84b52f001d0318cf4bb0b3b904ad532fc4c0014eb90d32db0cff55f + languageName: node + linkType: hard + +"send@npm:^0.19.0": + version: 0.19.1 + resolution: "send@npm:0.19.1" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~2.0.0 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 2a1991c8ac23a9b47c4477fbed056f1e4503ef683c669e9113303f793965c42f462d763755378eef9ad8b8c0e0cfbcf7789e2e517fa8d7451bc2cf8b3feca01e + languageName: node + linkType: hard + +"serialize-error@npm:^2.1.0": + version: 2.1.0 + resolution: "serialize-error@npm:2.1.0" + checksum: 28464a6f65e6becd6e49fb782aff06573fdbf3d19f161a20228179842fed05c75a34110e54c3ee020b00240f9e11d8bee9b9fee5d04e0bc0bef1fdbf2baa297e + languageName: node + linkType: hard + +"serve-static@npm:^1.13.1": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" + dependencies: + encodeurl: ~2.0.0 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.19.0 + checksum: dffc52feb4cc5c68e66d0c7f3c1824d4e989f71050aefc9bd5f822a42c54c9b814f595fc5f2b717f4c7cc05396145f3e90422af31186a93f76cf15f707019759 + languageName: node + linkType: hard + +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: ^1.0.0 + checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:^1.6.1": + version: 1.8.2 + resolution: "shell-quote@npm:1.8.2" + checksum: 1e97b62ced1c4c5135015978ebf273bed1f425a68cf84163e83fbb0f34b3ff9471e656720dab2b7cbb4ae0f58998e686d17d166c28dfb3662acd009e8bd7faed + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-plist@npm:^1.1.0": + version: 1.4.0 + resolution: "simple-plist@npm:1.4.0" + dependencies: + bplist-creator: 0.1.1 + bplist-parser: 0.3.2 + plist: ^3.0.5 + checksum: fa8086f6b781c289f1abad21306481dda4af6373b32a5d998a70e53c2b7218a1d21ebb5ae3e736baae704c21d311d3d39d01d0e6a2387eda01b4020b9ebd909e + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"slugify@npm:^1.3.4, slugify@npm:^1.6.6": + version: 1.6.6 + resolution: "slugify@npm:1.6.6" + checksum: 04773c2d3b7aea8d2a61fa47cc7e5d29ce04e1a96cbaec409da57139df906acb3a449fac30b167d203212c806e73690abd4ff94fbad0a9a7b7ea109a2a638ae9 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: ^7.1.2 + debug: ^4.3.4 + socks: ^2.8.3 + checksum: b4fbcdb7ad2d6eec445926e255a1fb95c975db0020543fbac8dfa6c47aecc6b3b619b7fb9c60a3f82c9b2969912a5e7e174a056ae4d98cb5322f3524d6036e1d + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.4 + resolution: "socks@npm:2.8.4" + dependencies: + ip-address: ^9.0.5 + smart-buffer: ^4.2.0 + checksum: cd1edc924475d5dfde534adf66038df7e62c7343e6b8c0113e52dc9bb6a0a10e25b2f136197f379d695f18e8f0f2b7f6e42977bf720ddbee912a851201c396ad + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b + languageName: node + linkType: hard + +"source-map-support@npm:^0.5.16, source-map-support@npm:~0.5.20, source-map-support@npm:~0.5.21": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 + languageName: node + linkType: hard + +"source-map@npm:^0.5.6": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"split@npm:^1.0.1": + version: 1.0.1 + resolution: "split@npm:1.0.1" + dependencies: + through: 2 + checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: ^7.0.3 + checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: ^7.0.3 + checksum: ef4b6b0ae47b4a69896f5f1c4375f953b9435388c053c36d27998bc3d73e046969ccde61ab659e679142971a0b08e50478a1228f62edb994105b280f17900c98 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d + languageName: node + linkType: hard + +"stacktrace-parser@npm:^0.1.10": + version: 0.1.11 + resolution: "stacktrace-parser@npm:0.1.11" + dependencies: + type-fest: ^0.7.1 + checksum: 1120cf716606ec6a8e25cc9b6ada79d7b91e6a599bba1a6664e6badc8b5f37987d7df7d9ad0344f717a042781fd8e1e999de08614a5afea451b68902421036b5 + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + +"statuses@npm:~1.5.0": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c + languageName: node + linkType: hard + +"stream-buffers@npm:2.2.x, stream-buffers@npm:~2.2.0": + version: 2.2.0 + resolution: "stream-buffers@npm:2.2.0" + checksum: 4587d9e8f050d689fb38b4295e73408401b16de8edecc12026c6f4ae92956705ecfd995ae3845d7fa3ebf19502d5754df9143d91447fd881d86e518f43882c1c + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^5.2.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: ^4.1.0 + checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-eof@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-eof@npm:1.0.0" + checksum: 40bc8ddd7e072f8ba0c2d6d05267b4e0a4800898c3435b5fb5f5a21e6e47dfaff18467e7aa0d1844bb5d6274c3097246595841fbfeb317e541974ee992cac506 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + +"structured-headers@npm:^0.4.1": + version: 0.4.1 + resolution: "structured-headers@npm:0.4.1" + checksum: 2f3073b2c8b4f2515367a1647ba0b6764ce6d35b3943605940de41077c2afd2513257f4bf6fbfd67a3455f25a3e844905da6fddde6b6ad7974256495311a25a3 + languageName: node + linkType: hard + +"sucrase@npm:3.35.0": + version: 3.35.0 + resolution: "sucrase@npm:3.35.0" + dependencies: + "@jridgewell/gen-mapping": ^0.3.2 + commander: ^4.0.0 + glob: ^10.3.10 + lines-and-columns: ^1.1.6 + mz: ^2.7.0 + pirates: ^4.0.1 + ts-interface-checker: ^0.1.9 + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 9fc5792a9ab8a14dcf9c47dcb704431d35c1cdff1d17d55d382a31c2e8e3063870ad32ce120a80915498486246d612e30cda44f1624d9d9a10423e1a43487ad1 + languageName: node + linkType: hard + +"sudo-prompt@npm:9.1.1": + version: 9.1.1 + resolution: "sudo-prompt@npm:9.1.1" + checksum: 20fe5bde6a27725d87938e68d6f99c0798ce9bf3a8fdebd58392a0436df713c66ebf67863e682941ff98ee7611e40ed599e12be7f264c9286106feb0f3db3860 + languageName: node + linkType: hard + +"sudo-prompt@npm:^8.2.0": + version: 8.2.5 + resolution: "sudo-prompt@npm:8.2.5" + checksum: bacff1f18a8ab8dba345cc1f3cf3a02b4cc571f71585df79af95af31278f56107f7c29402f5347b07c489888c63f2deb78d544b93a6347e83d0ed0847f4bc163 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-hyperlinks@npm:^2.0.0": + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" + dependencies: + has-flag: ^4.0.0 + supports-color: ^7.0.0 + checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": ^4.0.0 + chownr: ^3.0.0 + minipass: ^7.1.2 + minizlib: ^3.0.1 + mkdirp: ^3.0.1 + yallist: ^5.0.0 + checksum: 8485350c0688331c94493031f417df069b778aadb25598abdad51862e007c39d1dd5310702c7be4a6784731a174799d8885d2fde0484269aea205b724d7b2ffa + languageName: node + linkType: hard + +"temp-dir@npm:^2.0.0, temp-dir@npm:~2.0.0": + version: 2.0.0 + resolution: "temp-dir@npm:2.0.0" + checksum: cc4f0404bf8d6ae1a166e0e64f3f409b423f4d1274d8c02814a59a5529f07db6cd070a749664141b992b2c1af337fa9bb451a460a43bb9bcddc49f235d3115aa + languageName: node + linkType: hard + +"temp@npm:^0.8.4": + version: 0.8.4 + resolution: "temp@npm:0.8.4" + dependencies: + rimraf: ~2.6.2 + checksum: f35bed78565355dfdf95f730b7b489728bd6b7e35071bcc6497af7c827fb6c111fbe9063afc7b8cbc19522a072c278679f9a0ee81e684aa2c8617cc0f2e9c191 + languageName: node + linkType: hard + +"tempy@npm:^0.7.1": + version: 0.7.1 + resolution: "tempy@npm:0.7.1" + dependencies: + del: ^6.0.0 + is-stream: ^2.0.0 + temp-dir: ^2.0.0 + type-fest: ^0.16.0 + unique-string: ^2.0.0 + checksum: 265652f94eed077c311777e0290c4b4f3ec670c71c62c979efcbbd67ee506d677ff2741a72d7160556e9b0fba8fc5fbd7b3c482ac94c8acc48d85411f1f079c3 + languageName: node + linkType: hard + +"terminal-link@npm:^2.1.1": + version: 2.1.1 + resolution: "terminal-link@npm:2.1.1" + dependencies: + ansi-escapes: ^4.2.1 + supports-hyperlinks: ^2.0.0 + checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f + languageName: node + linkType: hard + +"terser@npm:^5.15.0": + version: 5.39.0 + resolution: "terser@npm:5.39.0" + dependencies: + "@jridgewell/source-map": ^0.3.3 + acorn: ^8.8.2 + commander: ^2.20.0 + source-map-support: ~0.5.20 + bin: + terser: bin/terser + checksum: e39c302aed7a70273c8b03032c37c68c8d9d3b432a7b6abe89caf9d087f7dd94d743c01ee5ba1431a095ad347c4a680b60d258f298a097cf512346d6041eb661 + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-embeddings@workspace:.": + version: 0.0.0-use.local + resolution: "text-embeddings@workspace:." + dependencies: + "@babel/core": ^7.25.2 + "@types/react": ~18.3.12 + expo: ~52.0.42 + expo-status-bar: ~2.0.1 + react: 18.3.1 + react-native: 0.76.8 + react-native-executorch: "file:../../react-native-executorch-20250401133031.tgz" + typescript: ^5.3.3 + languageName: unknown + linkType: soft + +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + +"throat@npm:^5.0.0": + version: 5.0.0 + resolution: "throat@npm:5.0.0" + checksum: 031ff7f4431618036c1dedd99c8aa82f5c33077320a8358ed829e84b320783781d1869fe58e8f76e948306803de966f5f7573766a437562c9f5c033297ad2fe2 + languageName: node + linkType: hard + +"through@npm:2": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e + languageName: node + linkType: hard + +"tslib@npm:^2.0.1, tslib@npm:^2.4.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.16.0": + version: 0.16.0 + resolution: "type-fest@npm:0.16.0" + checksum: 1a4102c06dc109db00418c753062e206cab65befd469d000ece4452ee649bf2a9cf57686d96fb42326bc9d918d9a194d4452897b486dcc41989e5c99e4e87094 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.7.1": + version: 0.7.1 + resolution: "type-fest@npm:0.7.1" + checksum: 5b1b113529d59949d97b76977d545989ddc11b81bb0c766b6d2ccc65473cb4b4a5c7d24f5be2c2bb2de302a5d7a13c1732ea1d34c8c59b7e0ec1f890cf7fc424 + languageName: node + linkType: hard + +"typescript@npm:^5.3.3": + version: 5.8.2 + resolution: "typescript@npm:5.8.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 7f9e3d7ac15da6df713e439e785e51facd65d6450d5f51fab3e8d2f2e3f4eb317080d895480b8e305450cdbcb37e17383e8bf521e7395f8b556e2f2a4730ed86 + languageName: node + linkType: hard + +"typescript@patch:typescript@^5.3.3#~builtin": + version: 5.8.2 + resolution: "typescript@patch:typescript@npm%3A5.8.2#~builtin::version=5.8.2&hash=14eedb" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: a58d19ff9811c1764a299dd83ca20ed8020f0ab642906dafc880121b710751227201531fdc99878158205c356ac79679b0b61ac5b42eda0e28bfb180947a258d + languageName: node + linkType: hard + +"ua-parser-js@npm:^1.0.35": + version: 1.0.40 + resolution: "ua-parser-js@npm:1.0.40" + bin: + ua-parser-js: script/cli.js + checksum: ae555a33dc9395dd877e295d6adbf5634e047aad7c3358328830218f3ca3a6233e35848cd355465a7612f269860e8029984389282940c7a27c9af4dfcdbba8c3 + languageName: node + linkType: hard + +"undici-types@npm:~6.20.0": + version: 6.20.0 + resolution: "undici-types@npm:6.20.0" + checksum: b7bc50f012dc6afbcce56c9fd62d7e86b20a62ff21f12b7b5cbf1973b9578d90f22a9c7fe50e638e96905d33893bf2f9f16d98929c4673c2480de05c6c96ea8b + languageName: node + linkType: hard + +"undici@npm:^6.18.2": + version: 6.21.2 + resolution: "undici@npm:6.21.2" + checksum: 4d7227910bfee0703ea5c5c9d4343bcb2a80d2ce2eb64698b6fb8cc48852e29f7c7c623126161a5073fd594c9040ae7e7ecc8e093fe6e84a9394dd2595754ec5 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 3c3dabdb1d22aef4904399f9e810d0b71c0b12b3815169d96fac97e56d5642840c6071cf709adcace2252bc6bb80242396c2ec74b37224eb015c5f7aca40bad7 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: ^2.0.0 + unicode-property-aliases-ecmascript: ^2.0.0 + checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 9e3151e1d0bc6be35c4cef105e317c04090364173e8462005b5cde08a1e7c858b6586486cfebac39dc2c6c8c9ee24afb245de6d527604866edfa454fe2a35fae + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: ^5.0.0 + checksum: 6a62094fcac286b9ec39edbd1f8f64ff92383baa430af303dfed1ffda5e47a08a6b316408554abfddd9730c78b6106bef4ca4d02c1231a735ddd56ced77573df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 222d0322bc7bbf6e45c08967863212398313ef73423f4125e075f893a02405a5ffdbaaf150f7dd1e99f8861348a486dd079186d27c5f2c60e465b7dcbb1d3e5b + languageName: node + linkType: hard + +"unique-string@npm:^2.0.0, unique-string@npm:~2.0.0": + version: 2.0.0 + resolution: "unique-string@npm:2.0.0" + dependencies: + crypto-random-string: ^2.0.0 + checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff + languageName: node + linkType: hard + +"universalify@npm:^1.0.0": + version: 1.0.0 + resolution: "universalify@npm:1.0.0" + checksum: 095a808f2b915e3b89d29b6f3b4ee4163962b02fa5b7cb686970b8d0439f4ca789bc43f319b7cbb1ce552ae724e631d148e5aee9ce04c4f46a7fe0c5bbfd2b9e + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 + languageName: node + linkType: hard + +"unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.1": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" + dependencies: + escalade: ^3.2.0 + picocolors: ^1.1.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 7b6d8d08c34af25ee435bccac542bedcb9e57c710f3c42421615631a80aa6dd28b0a81c9d2afbef53799d482fb41453f714b8a7a0a8003e3b4ec8fb1abb819af + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 + languageName: node + linkType: hard + +"uuid@npm:^7.0.3": + version: 7.0.3 + resolution: "uuid@npm:7.0.3" + bin: + uuid: dist/bin/uuid + checksum: f5b7b5cc28accac68d5c083fd51cca64896639ebd4cca88c6cfb363801aaa83aa439c86dfc8446ea250a7a98d17afd2ad9e88d9d4958c79a412eccb93bae29de + languageName: node + linkType: hard + +"uuid@npm:^8.0.0, uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 0d583a1af23aeffea7748742cf22b6802458736fb8b60323ba5949763824d46f796474b0e1b9206beb716f9d75269e19dbd7795d6b038b29d561be95dd827381 + languageName: node + linkType: hard + +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b + languageName: node + linkType: hard + +"vlq@npm:^1.0.0": + version: 1.0.1 + resolution: "vlq@npm:1.0.1" + checksum: 67ab6dd35c787eaa02c0ff1a869dd07a230db08722fb6014adaaf432634808ddb070765f70958b47997e438c331790cfcf20902411b0d6453f1a2a5923522f55 + languageName: node + linkType: hard + +"walker@npm:^1.0.7, walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.3.2": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 21ab5ea08a730a2ef8023736afe16713b4f2023ec1c7085c16c8e293ee17ed085dff63a0ad8722da30c99c4ccbd4ccd1b2e79c861829f7ef2963d7de7004c2cb + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"webidl-conversions@npm:^5.0.0": + version: 5.0.0 + resolution: "webidl-conversions@npm:5.0.0" + checksum: ccf1ec2ca7c0b5671e5440ace4a66806ae09c49016ab821481bec0c05b1b82695082dc0a27d1fe9d804d475a408ba0c691e6803fd21be608e710955d4589cd69 + languageName: node + linkType: hard + +"whatwg-fetch@npm:^3.0.0": + version: 3.6.20 + resolution: "whatwg-fetch@npm:3.6.20" + checksum: c58851ea2c4efe5c2235f13450f426824cf0253c1d45da28f45900290ae602a20aff2ab43346f16ec58917d5562e159cd691efa368354b2e82918c2146a519c5 + languageName: node + linkType: hard + +"whatwg-url-without-unicode@npm:8.0.0-3": + version: 8.0.0-3 + resolution: "whatwg-url-without-unicode@npm:8.0.0-3" + dependencies: + buffer: ^5.4.3 + punycode: ^2.1.1 + webidl-conversions: ^5.0.0 + checksum: 1fe266f7161e0bd961087c1254a5a59d1138c3d402064495eed65e7590d9caed5a1d9acfd6e7a1b0bf0431253b0e637ee3e4ffc08387cd60e0b2ddb9d4687a4b + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: ^2.0.0 + bin: + which: ./bin/which + checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: 6ec99e89ba32c7e748b8a3144e64bfc74aa63e2b2eacbb61a0060ad0b961eb1a632b08fb1de067ed59b002cec3e21de18299216ebf2325ef0f78e0f121e14e90 + languageName: node + linkType: hard + +"wonka@npm:^6.3.2": + version: 6.3.5 + resolution: "wonka@npm:6.3.5" + checksum: bd9f4330664ea971ddbc762275c081d5a635bcebd1c567211d43278b925f3394ad454bb33a0ef5e8beadfaad552cdbc92c018dfb96350f3895341998efa5f521 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^2.3.0": + version: 2.4.3 + resolution: "write-file-atomic@npm:2.4.3" + dependencies: + graceful-fs: ^4.1.11 + imurmurhash: ^0.1.4 + signal-exit: ^3.0.2 + checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"ws@npm:^6.2.3": + version: 6.2.3 + resolution: "ws@npm:6.2.3" + dependencies: + async-limiter: ~1.0.0 + checksum: bbc96ff5628832d80669a88fd117487bf070492dfaa50df77fa442a2b119792e772f4365521e0a8e025c0d51173c54fa91adab165c11b8e0674685fdd36844a5 + languageName: node + linkType: hard + +"ws@npm:^7, ws@npm:^7.5.10": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: f9bb062abf54cc8f02d94ca86dcd349c3945d63851f5d07a3a61c2fcb755b15a88e943a63cf580cbdb5b74436d67ef6b67f745b8f7c0814e411379138e1863cb + languageName: node + linkType: hard + +"ws@npm:^8.12.1": + version: 8.18.1 + resolution: "ws@npm:8.18.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 4658357185d891bc45cc2d42a84f9e192d047e8476fb5cba25b604f7d75ca87ca0dd54cd0b2cc49aeee57c79045a741cb7d0b14501953ac60c790cd105c42f23 + languageName: node + linkType: hard + +"xcode@npm:^3.0.1": + version: 3.0.1 + resolution: "xcode@npm:3.0.1" + dependencies: + simple-plist: ^1.1.0 + uuid: ^7.0.3 + checksum: 908ff85851f81aec6e36ca24427db092e1cc068f052716e14de5e762196858039efabbe053a1abe8920184622501049e74a93618e8692b982f7604a9847db108 + languageName: node + linkType: hard + +"xml2js@npm:0.6.0": + version: 0.6.0 + resolution: "xml2js@npm:0.6.0" + dependencies: + sax: ">=0.6.0" + xmlbuilder: ~11.0.0 + checksum: 437f353fd66d367bf158e9555a0625df9965d944e499728a5c6bc92a54a2763179b144f14b7e1c725040f56bbd22b0fa6cfcb09ec4faf39c45ce01efe631f40b + languageName: node + linkType: hard + +"xmlbuilder@npm:^14.0.0": + version: 14.0.0 + resolution: "xmlbuilder@npm:14.0.0" + checksum: 9e93d3c73957dbb21acde63afa5d241b19057bdbdca9d53534d8351e70f1d5c9db154e3ca19bd3e9ea84c082539ab6e7845591c8778a663e8b5d3470d5427a8b + languageName: node + linkType: hard + +"xmlbuilder@npm:^15.1.1": + version: 15.1.1 + resolution: "xmlbuilder@npm:15.1.1" + checksum: 14f7302402e28d1f32823583d121594a9dca36408d40320b33f598bd589ca5163a352d076489c9c64d2dc1da19a790926a07bf4191275330d4de2b0d85bb1843 + languageName: node + linkType: hard + +"xmlbuilder@npm:~11.0.0": + version: 11.0.1 + resolution: "xmlbuilder@npm:11.0.1" + checksum: 7152695e16f1a9976658215abab27e55d08b1b97bca901d58b048d2b6e106b5af31efccbdecf9b07af37c8377d8e7e821b494af10b3a68b0ff4ae60331b415b0 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: eba51182400b9f35b017daa7f419f434424410691bbc5de4f4240cc830fdef906b504424992700dc047f16b4d99100a6f8b8b11175c193f38008e9c96322b6a5 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:^17.6.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: ^8.0.1 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.1.1 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard diff --git a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/ExecutorchLib b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/ExecutorchLib index ceb1a7dfa..999fc322e 100755 Binary files a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/ExecutorchLib and b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/ExecutorchLib differ diff --git a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h new file mode 100644 index 000000000..4332cf811 --- /dev/null +++ b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h @@ -0,0 +1,14 @@ +#import + +@interface HuggingFaceTokenizer : NSObject + +- (instancetype)initWithTokenizerPath:(NSString *)tokenizerPath; +- (NSArray *)encode:(NSString *)text; +- (NSString *)decode:(NSArray *)tokenIds; +- (NSString *)decode:(NSArray *)tokenIds + skipSpecialTokens:(BOOL)skipSpecialTokens; +- (NSUInteger)getVocabSize; +- (NSString *)idToToken:(NSInteger)tokenId; +- (NSInteger)tokenToId:(NSString *)token; + +@end diff --git a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/LLaMARunner.h b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/LLaMARunner.h index e269d041a..d8638cfa6 100644 --- a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/LLaMARunner.h +++ b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Headers/LLaMARunner.h @@ -11,14 +11,13 @@ NS_ASSUME_NONNULL_BEGIN FOUNDATION_EXPORT NSErrorDomain const LLaMARunnerErrorDomain; -FOUNDATION_EXPORT NSErrorDomain const LLaVARunnerErrorDomain; NS_SWIFT_NAME(Runner) @interface LLaMARunner : NSObject - (instancetype)initWithModelPath:(NSString *)filePath tokenizerPath:(NSString *)tokenizerPath; -- (BOOL)isloaded; +- (BOOL)isLoaded; - (BOOL)loadWithError:(NSError **)error; - (BOOL)generate:(NSString *)prompt withTokenCallback:(nullable void (^)(NSString *))callback @@ -30,25 +29,4 @@ NS_SWIFT_NAME(Runner) @end -NS_SWIFT_NAME(LLaVARunner) -@interface LLaVARunner : NSObject - -- (instancetype)initWithModelPath:(NSString *)filePath - tokenizerPath:(NSString *)tokenizerPath; -- (BOOL)isloaded; -- (BOOL)loadWithError:(NSError **)error; -- (BOOL)generate:(void *)imageBuffer - width:(CGFloat)width - height:(CGFloat)height - prompt:(NSString *)prompt - sequenceLength:(NSInteger)seq_len - withTokenCallback:(nullable void (^)(NSString *))callback - error:(NSError **)error; -- (void)stop; - -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)init NS_UNAVAILABLE; - -@end - NS_ASSUME_NONNULL_END diff --git a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Info.plist b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Info.plist index 06f558689..c2ea3f7cf 100644 Binary files a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Info.plist and b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/Info.plist differ diff --git a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/_CodeSignature/CodeResources b/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/_CodeSignature/CodeResources deleted file mode 100644 index 450b64e95..000000000 --- a/ios/ExecutorchLib.xcframework/ios-arm64-simulator/ExecutorchLib.framework/_CodeSignature/CodeResources +++ /dev/null @@ -1,124 +0,0 @@ - - - - - files - - Headers/ETModel.h - - CFAz750OjepOG7MVBPABGfKHNeI= - - Headers/LLaMARunner.h - - SU8Fo2gR+gVVl9IplHgBJBRh1gQ= - - Info.plist - - l3rE2nBARVh++WIyHCfeHXD6Ewo= - - - files2 - - Headers/ETModel.h - - hash2 - - UXFd6a5OARqV4JnB+Jm4uqmt15aUmnXSOLPQKZTWZCc= - - - Headers/LLaMARunner.h - - hash2 - - or8gFkCO2QVkQgaeFAaqs/WqGjv8kABL8Rzcdcuexw0= - - - - rules - - ^.* - - ^.*\.lproj/ - - optional - - weight - 1000 - - ^.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^.* - - ^.*\.lproj/ - - optional - - weight - 1000 - - ^.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Base\.lproj/ - - weight - 1010 - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - diff --git a/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/ExecutorchLib b/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/ExecutorchLib index a4edccd82..4a824ff95 100755 Binary files a/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/ExecutorchLib and b/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/ExecutorchLib differ diff --git a/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h b/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h new file mode 100644 index 000000000..4332cf811 --- /dev/null +++ b/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/HuggingFaceTokenizer.h @@ -0,0 +1,14 @@ +#import + +@interface HuggingFaceTokenizer : NSObject + +- (instancetype)initWithTokenizerPath:(NSString *)tokenizerPath; +- (NSArray *)encode:(NSString *)text; +- (NSString *)decode:(NSArray *)tokenIds; +- (NSString *)decode:(NSArray *)tokenIds + skipSpecialTokens:(BOOL)skipSpecialTokens; +- (NSUInteger)getVocabSize; +- (NSString *)idToToken:(NSInteger)tokenId; +- (NSInteger)tokenToId:(NSString *)token; + +@end diff --git a/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/LLaMARunner.h b/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/LLaMARunner.h index e269d041a..d8638cfa6 100644 --- a/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/LLaMARunner.h +++ b/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Headers/LLaMARunner.h @@ -11,14 +11,13 @@ NS_ASSUME_NONNULL_BEGIN FOUNDATION_EXPORT NSErrorDomain const LLaMARunnerErrorDomain; -FOUNDATION_EXPORT NSErrorDomain const LLaVARunnerErrorDomain; NS_SWIFT_NAME(Runner) @interface LLaMARunner : NSObject - (instancetype)initWithModelPath:(NSString *)filePath tokenizerPath:(NSString *)tokenizerPath; -- (BOOL)isloaded; +- (BOOL)isLoaded; - (BOOL)loadWithError:(NSError **)error; - (BOOL)generate:(NSString *)prompt withTokenCallback:(nullable void (^)(NSString *))callback @@ -30,25 +29,4 @@ NS_SWIFT_NAME(Runner) @end -NS_SWIFT_NAME(LLaVARunner) -@interface LLaVARunner : NSObject - -- (instancetype)initWithModelPath:(NSString *)filePath - tokenizerPath:(NSString *)tokenizerPath; -- (BOOL)isloaded; -- (BOOL)loadWithError:(NSError **)error; -- (BOOL)generate:(void *)imageBuffer - width:(CGFloat)width - height:(CGFloat)height - prompt:(NSString *)prompt - sequenceLength:(NSInteger)seq_len - withTokenCallback:(nullable void (^)(NSString *))callback - error:(NSError **)error; -- (void)stop; - -+ (instancetype)new NS_UNAVAILABLE; -- (instancetype)init NS_UNAVAILABLE; - -@end - NS_ASSUME_NONNULL_END diff --git a/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Info.plist b/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Info.plist index e08b049b8..9cb7cdb65 100644 Binary files a/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Info.plist and b/ios/ExecutorchLib.xcframework/ios-arm64/ExecutorchLib.framework/Info.plist differ diff --git a/ios/RnExecutorch.xcodeproj/project.pbxproj b/ios/RnExecutorch.xcodeproj/project.pbxproj index 68e367a8e..356c2ca03 100644 --- a/ios/RnExecutorch.xcodeproj/project.pbxproj +++ b/ios/RnExecutorch.xcodeproj/project.pbxproj @@ -8,6 +8,10 @@ /* Begin PBXBuildFile section */ 55D6EA8C2D0987D2009BA408 /* ExecutorchLib.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55D6EA8B2D0987D2009BA408 /* ExecutorchLib.xcframework */; }; + 8C9A9BD02DB0CE800027DD32 /* ImageSegmentation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C9A9BCA2DB0CE800027DD32 /* ImageSegmentation.cpp */; }; + 8C9A9BD12DB0CE800027DD32 /* RuntimeLifecycleMonitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C9A9BC72DB0CE800027DD32 /* RuntimeLifecycleMonitor.cpp */; }; + 8C9A9BD22DB0CE800027DD32 /* JsiHostObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C9A9BC22DB0CE800027DD32 /* JsiHostObject.cpp */; }; + 8C9A9BD32DB0CE800027DD32 /* JsiPromise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C9A9BC42DB0CE800027DD32 /* JsiPromise.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -25,6 +29,18 @@ /* Begin PBXFileReference section */ 550986892CEF541900FECBB8 /* libRnExecutorch.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRnExecutorch.a; sourceTree = BUILT_PRODUCTS_DIR; }; 55D6EA8B2D0987D2009BA408 /* ExecutorchLib.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = ExecutorchLib.xcframework; sourceTree = ""; }; + 8C9A9BBF2DB0CE800027DD32 /* ModelHostObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ModelHostObject.h; sourceTree = ""; }; + 8C9A9BC12DB0CE800027DD32 /* JsiHostObject.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JsiHostObject.h; sourceTree = ""; }; + 8C9A9BC22DB0CE800027DD32 /* JsiHostObject.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JsiHostObject.cpp; sourceTree = ""; }; + 8C9A9BC32DB0CE800027DD32 /* JsiPromise.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JsiPromise.h; sourceTree = ""; }; + 8C9A9BC42DB0CE800027DD32 /* JsiPromise.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JsiPromise.cpp; sourceTree = ""; }; + 8C9A9BC52DB0CE800027DD32 /* RuntimeAwareCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RuntimeAwareCache.h; sourceTree = ""; }; + 8C9A9BC62DB0CE800027DD32 /* RuntimeLifecycleMonitor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RuntimeLifecycleMonitor.h; sourceTree = ""; }; + 8C9A9BC72DB0CE800027DD32 /* RuntimeLifecycleMonitor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RuntimeLifecycleMonitor.cpp; sourceTree = ""; }; + 8C9A9BC92DB0CE800027DD32 /* ImageSegmentation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageSegmentation.h; sourceTree = ""; }; + 8C9A9BCA2DB0CE800027DD32 /* ImageSegmentation.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImageSegmentation.cpp; sourceTree = ""; }; + 8C9A9BCC2DB0CE800027DD32 /* Log.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Log.h; sourceTree = ""; }; + 8C9A9BCD2DB0CE800027DD32 /* RnExecutorchInstaller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RnExecutorchInstaller.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */ @@ -71,6 +87,7 @@ 550986802CEF541900FECBB8 = { isa = PBXGroup; children = ( + 8C9A9BCF2DB0CE800027DD32 /* common */, 5509868B2CEF541900FECBB8 /* RnExecutorch */, 55D6EA8A2D0987D2009BA408 /* Frameworks */, 5509868A2CEF541900FECBB8 /* Products */, @@ -93,6 +110,58 @@ name = Frameworks; sourceTree = ""; }; + 8C9A9BC02DB0CE800027DD32 /* host_objects */ = { + isa = PBXGroup; + children = ( + 8C9A9BBF2DB0CE800027DD32 /* ModelHostObject.h */, + ); + path = host_objects; + sourceTree = ""; + }; + 8C9A9BC82DB0CE800027DD32 /* jsi */ = { + isa = PBXGroup; + children = ( + 8C9A9BC12DB0CE800027DD32 /* JsiHostObject.h */, + 8C9A9BC22DB0CE800027DD32 /* JsiHostObject.cpp */, + 8C9A9BC32DB0CE800027DD32 /* JsiPromise.h */, + 8C9A9BC42DB0CE800027DD32 /* JsiPromise.cpp */, + 8C9A9BC52DB0CE800027DD32 /* RuntimeAwareCache.h */, + 8C9A9BC62DB0CE800027DD32 /* RuntimeLifecycleMonitor.h */, + 8C9A9BC72DB0CE800027DD32 /* RuntimeLifecycleMonitor.cpp */, + ); + path = jsi; + sourceTree = ""; + }; + 8C9A9BCB2DB0CE800027DD32 /* modules */ = { + isa = PBXGroup; + children = ( + 8C9A9BC92DB0CE800027DD32 /* ImageSegmentation.h */, + 8C9A9BCA2DB0CE800027DD32 /* ImageSegmentation.cpp */, + ); + path = modules; + sourceTree = ""; + }; + 8C9A9BCE2DB0CE800027DD32 /* rnexecutorch */ = { + isa = PBXGroup; + children = ( + 8C9A9BC02DB0CE800027DD32 /* host_objects */, + 8C9A9BC82DB0CE800027DD32 /* jsi */, + 8C9A9BCB2DB0CE800027DD32 /* modules */, + 8C9A9BCC2DB0CE800027DD32 /* Log.h */, + 8C9A9BCD2DB0CE800027DD32 /* RnExecutorchInstaller.h */, + ); + path = rnexecutorch; + sourceTree = ""; + }; + 8C9A9BCF2DB0CE800027DD32 /* common */ = { + isa = PBXGroup; + children = ( + 8C9A9BCE2DB0CE800027DD32 /* rnexecutorch */, + ); + name = common; + path = ../common; + sourceTree = SOURCE_ROOT; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -155,6 +224,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8C9A9BD02DB0CE800027DD32 /* ImageSegmentation.cpp in Sources */, + 8C9A9BD12DB0CE800027DD32 /* RuntimeLifecycleMonitor.cpp in Sources */, + 8C9A9BD22DB0CE800027DD32 /* JsiHostObject.cpp in Sources */, + 8C9A9BD32DB0CE800027DD32 /* JsiPromise.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/RnExecutorch/Classification.mm b/ios/RnExecutorch/Classification.mm index 0688a1803..3a2cb6791 100644 --- a/ios/RnExecutorch/Classification.mm +++ b/ios/RnExecutorch/Classification.mm @@ -1,11 +1,6 @@ #import "Classification.h" #import "ImageProcessor.h" -#import "models/BaseModel.h" #import "models/classification/ClassificationModel.h" -#import "opencv2/opencv.hpp" -#import "utils/ETError.h" -#import -#import @implementation Classification { ClassificationModel *model; @@ -13,23 +8,25 @@ @implementation Classification { RCT_EXPORT_MODULE() +- (void)releaseResources { + model = nil; +} + - (void)loadModule:(NSString *)modelSource resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { model = [[ClassificationModel alloc] init]; - [model - loadModel:[NSURL URLWithString:modelSource] - completion:^(BOOL success, NSNumber *errorCode) { - if (success) { - resolve(errorCode); - return; - } - - reject(@"init_module_error", - [NSString stringWithFormat:@"%ld", (long)[errorCode longValue]], - nil); - return; - }]; + + NSNumber *errorCode = [model loadModel:modelSource]; + if ([errorCode intValue] != 0) { + [self releaseResources]; + reject(@"init_module_error", + [NSString stringWithFormat:@"%ld", (long)[errorCode longValue]], + nil); + return; + } + + resolve(@0); } - (void)forward:(NSString *)input diff --git a/ios/RnExecutorch/ETInstaller.h b/ios/RnExecutorch/ETInstaller.h new file mode 100644 index 000000000..d01236e99 --- /dev/null +++ b/ios/RnExecutorch/ETInstaller.h @@ -0,0 +1,8 @@ +#import +#import +#import + +@interface ETInstaller + : RCTEventEmitter + +@end diff --git a/ios/RnExecutorch/ETInstaller.mm b/ios/RnExecutorch/ETInstaller.mm new file mode 100644 index 000000000..dcb40b29d --- /dev/null +++ b/ios/RnExecutorch/ETInstaller.mm @@ -0,0 +1,56 @@ +#import "ETInstaller.h" + +#import + +#import +#import +#include +#include + +using namespace facebook::react; + +@interface RCTBridge (JSIRuntime) +- (void *)runtime; +@end + +@implementation ETInstaller + +@synthesize callInvoker = _callInvoker; + +RCT_EXPORT_MODULE(ETInstaller); + +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(install) { + auto jsiRuntime = + reinterpret_cast(self.bridge.runtime); + auto jsCallInvoker = _callInvoker.callInvoker; + + assert(jsiRuntime != nullptr); + + auto fetchUrl = [](std::string url) { + @try { + NSString *nsUrlStr = + [NSString stringWithCString:url.c_str() + encoding:[NSString defaultCStringEncoding]]; + NSURL *nsUrl = [NSURL URLWithString:nsUrlStr]; + NSData *data = [NSData dataWithContentsOfURL:nsUrl]; + const std::byte *bytePtr = + reinterpret_cast(data.bytes); + int bufferLength = [data length]; + return std::vector(bytePtr, bytePtr + bufferLength); + } @catch (NSException *exception) { + throw std::runtime_error("Error fetching data from a url"); + } + }; + rnexecutorch::RnExecutorchInstaller::injectJSIBindings( + jsiRuntime, jsCallInvoker, fetchUrl); + + NSLog(@"Successfully installed JSI bindings for react-native-executorch!"); + return @true; +} + +- (std::shared_ptr)getTurboModule: + (const facebook::react::ObjCTurboModule::InitParams &)params { + return std::make_shared(params); +} + +@end diff --git a/ios/RnExecutorch/ETModule.mm b/ios/RnExecutorch/ETModule.mm index 2a231f513..d9525fb69 100644 --- a/ios/RnExecutorch/ETModule.mm +++ b/ios/RnExecutorch/ETModule.mm @@ -1,8 +1,5 @@ #import "ETModule.h" #import -#include -#import -#include @implementation ETModule { ETModel *module; @@ -10,16 +7,20 @@ @implementation ETModule { RCT_EXPORT_MODULE() +- (void)releaseResources { + module = nil; +} + - (void)loadModule:(NSString *)modelSource resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { if (!module) { module = [[ETModel alloc] init]; } - NSURL *modelURL = [NSURL URLWithString:modelSource]; - NSNumber *result = [self->module loadModel:modelURL.path]; + NSNumber *result = [self->module loadModel:modelSource]; if ([result intValue] != 0) { + [self releaseResources]; NSError *error = [NSError errorWithDomain:@"ETModuleErrorDomain" code:[result intValue] diff --git a/ios/RnExecutorch/ImageSegmentation.h b/ios/RnExecutorch/ImageSegmentation.h deleted file mode 100644 index 59ed56a45..000000000 --- a/ios/RnExecutorch/ImageSegmentation.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface ImageSegmentation : NSObject - -@end \ No newline at end of file diff --git a/ios/RnExecutorch/ImageSegmentation.mm b/ios/RnExecutorch/ImageSegmentation.mm deleted file mode 100644 index 19cbe6641..000000000 --- a/ios/RnExecutorch/ImageSegmentation.mm +++ /dev/null @@ -1,63 +0,0 @@ -#import "ImageSegmentation.h" -#import "models/image_segmentation/ImageSegmentationModel.h" -#import "models/BaseModel.h" -#import "utils/ETError.h" -#import -#import -#import -#import "ImageProcessor.h" - -@implementation ImageSegmentation { - ImageSegmentationModel *model; -} - -RCT_EXPORT_MODULE() - -- (void)loadModule:(NSString *)modelSource - resolve:(RCTPromiseResolveBlock)resolve - reject:(RCTPromiseRejectBlock)reject { - - model = [[ImageSegmentationModel alloc] init]; - [model - loadModel:[NSURL URLWithString:modelSource] - completion:^(BOOL success, NSNumber *errorCode) { - if (success) { - resolve(errorCode); - return; - } - - reject(@"init_module_error", - [NSString stringWithFormat:@"%ld", (long)[errorCode longValue]], - nil); - return; - }]; -} - -- (void)forward:(NSString *)input - classesOfInterest:(NSArray *)classesOfInterest - resize:(BOOL)resize - resolve:(RCTPromiseResolveBlock)resolve - reject:(RCTPromiseRejectBlock)reject { - - @try { - cv::Mat image = [ImageProcessor readImage:input]; - NSDictionary *result = [model runModel:image - returnClasses:classesOfInterest - resize:resize]; - - resolve(result); - return; - } @catch (NSException *exception) { - NSLog(@"An exception occurred: %@, %@", exception.name, exception.reason); - reject(@"forward_error", - [NSString stringWithFormat:@"%@", exception.reason], nil); - return; - } -} - -- (std::shared_ptr)getTurboModule: - (const facebook::react::ObjCTurboModule::InitParams &)params { - return std::make_shared(params); -} - -@end diff --git a/ios/RnExecutorch/LLM.mm b/ios/RnExecutorch/LLM.mm index 65f397102..f261a30cc 100644 --- a/ios/RnExecutorch/LLM.mm +++ b/ios/RnExecutorch/LLM.mm @@ -1,28 +1,12 @@ #import "LLM.h" -#import "utils/llms/Constants.h" -#import "utils/llms/ConversationManager.h" #import -#import -#import -#import -#import -#import -#import -#import -#import -#import @implementation LLM { LLaMARunner *runner; - ConversationManager *conversationManager; - NSMutableString *tempLlamaResponse; } - (instancetype)init { self = [super init]; - if (self) { - tempLlamaResponse = [[NSMutableString alloc] init]; - } return self; } @@ -36,33 +20,21 @@ - (void)onResult:(NSString *)token prompt:(NSString *)prompt { dispatch_async(dispatch_get_main_queue(), ^{ [self emitOnToken:token]; - [self->tempLlamaResponse appendString:token]; }); } - (void)loadLLM:(NSString *)modelSource - tokenizerSource:(NSString *)tokenizerSource - systemPrompt:(NSString *)systemPrompt - messageHistory:(NSArray *)messageHistory - contextWindowLength:(double)contextWindowLength - resolve:(RCTPromiseResolveBlock)resolve - reject:(RCTPromiseRejectBlock)reject { - NSURL *modelURL = [NSURL URLWithString:modelSource]; - NSURL *tokenizerURL = [NSURL URLWithString:tokenizerSource]; + tokenizerSource:(NSString *)tokenizerSource + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { @try { - self->runner = [[LLaMARunner alloc] initWithModelPath:modelURL.path - tokenizerPath:tokenizerURL.path]; - NSUInteger contextWindowLengthUInt = (NSUInteger)round(contextWindowLength); - - self->conversationManager = [[ConversationManager alloc] - initWithNumMessagesContextWindow:contextWindowLengthUInt - systemPrompt:systemPrompt - messageHistory:messageHistory]; + self->runner = [[LLaMARunner alloc] initWithModelPath:modelSource + tokenizerPath:tokenizerSource]; - self->tempLlamaResponse = [NSMutableString string]; resolve(@"Model and tokenizer loaded successfully"); return; } @catch (NSException *exception) { + [self releaseResources]; reject(@"Model or tokenizer loading failed", exception.reason, nil); return; } @@ -71,29 +43,16 @@ - (void)loadLLM:(NSString *)modelSource - (void)runInference:(NSString *)input resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [conversationManager addResponse:input senderRole:ChatRole::USER]; - NSString *prompt = [conversationManager getConversation]; dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSError *error = nil; - [self->runner generate:prompt + [self->runner generate:input withTokenCallback:^(NSString *token) { - [self onResult:token prompt:prompt]; + [self onResult:token prompt:input]; } error:&error]; - // make sure to add eot token once generation is done - if (![self->tempLlamaResponse hasSuffix:END_OF_TEXT_TOKEN_NS]) { - [self onResult:END_OF_TEXT_TOKEN_NS prompt:prompt]; - } - - if (self->tempLlamaResponse) { - [self->conversationManager addResponse:self->tempLlamaResponse - senderRole:ChatRole::ASSISTANT]; - self->tempLlamaResponse = [NSMutableString string]; - } - if (error) { reject(@"error_in_generation", error.localizedDescription, nil); return; @@ -107,7 +66,7 @@ - (void)interrupt { [self->runner stop]; } -- (void)deleteModule { +- (void)releaseResources { self->runner = nil; } diff --git a/ios/RnExecutorch/OCR.mm b/ios/RnExecutorch/OCR.mm index bdff61271..69fe35f1e 100644 --- a/ios/RnExecutorch/OCR.mm +++ b/ios/RnExecutorch/OCR.mm @@ -3,8 +3,6 @@ #import "models/ocr/RecognitionHandler.h" #import "models/ocr/utils/Constants.h" #import "utils/ImageProcessor.h" -#import -#import @implementation OCR { Detector *detector; @@ -13,6 +11,11 @@ @implementation OCR { RCT_EXPORT_MODULE() +- (void)releaseResources { + detector = nil; + recognitionHandler = nil; +} + - (void)loadModule:(NSString *)detectorSource recognizerSourceLarge:(NSString *)recognizerSourceLarge recognizerSourceMedium:(NSString *)recognizerSourceMedium @@ -21,47 +24,40 @@ - (void)loadModule:(NSString *)detectorSource resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { detector = [[Detector alloc] init]; - [detector - loadModel:[NSURL URLWithString:detectorSource] - completion:^(BOOL success, NSNumber *errorCode) { - if (!success) { - NSError *error = [NSError - errorWithDomain:@"OCRErrorDomain" - code:[errorCode intValue] - userInfo:@{ - NSLocalizedDescriptionKey : [NSString - stringWithFormat:@"%ld", (long)[errorCode longValue]] - }]; - reject(@"init_module_error", @"Failed to initialize detector module", - error); - return; - } - self->recognitionHandler = - [[RecognitionHandler alloc] initWithSymbols:symbols]; - [self->recognitionHandler - loadRecognizers:recognizerSourceLarge - mediumRecognizerPath:recognizerSourceMedium - smallRecognizerPath:recognizerSourceSmall - completion:^(BOOL allModelsLoaded, NSNumber *errorCode) { - if (allModelsLoaded) { - resolve(@(YES)); - } else { - NSError *error = [NSError - errorWithDomain:@"OCRErrorDomain" - code:[errorCode intValue] - userInfo:@{ - NSLocalizedDescriptionKey : [NSString - stringWithFormat:@"%ld", - (long)[errorCode - longValue]] - }]; - reject(@"init_recognizer_error", - @"Failed to initialize one or more " - @"recognizer models", - error); - } - }]; - }]; + NSNumber *errorCode = [detector loadModel:detectorSource]; + if ([errorCode intValue] != 0) { + [self releaseResources]; + NSError *error = [NSError + errorWithDomain:@"OCRErrorDomain" + code:[errorCode intValue] + userInfo:@{ + NSLocalizedDescriptionKey : [NSString + stringWithFormat:@"%ld", (long)[errorCode longValue]] + }]; + reject(@"init_module_error", @"Failed to initialize detector module", + error); + return; + } + + recognitionHandler = [[RecognitionHandler alloc] initWithSymbols:symbols]; + errorCode = [recognitionHandler loadRecognizers:recognizerSourceLarge + mediumRecognizerPath:recognizerSourceMedium + smallRecognizerPath:recognizerSourceSmall]; + if ([errorCode intValue] != 0) { + [self releaseResources]; + NSError *error = [NSError + errorWithDomain:@"OCRErrorDomain" + code:[errorCode intValue] + userInfo:@{ + NSLocalizedDescriptionKey : [NSString + stringWithFormat:@"%ld", (long)[errorCode longValue]] + }]; + reject(@"init_recognizer_error", + @"Failed to initialize one or more recognizer models", error); + return; + } + + resolve(@0); } - (void)forward:(NSString *)input diff --git a/ios/RnExecutorch/ObjectDetection.mm b/ios/RnExecutorch/ObjectDetection.mm index 2324db8ac..265d7e19a 100644 --- a/ios/RnExecutorch/ObjectDetection.mm +++ b/ios/RnExecutorch/ObjectDetection.mm @@ -1,8 +1,6 @@ #import "ObjectDetection.h" #import "models/object_detection/SSDLiteLargeModel.hpp" #import "utils/ImageProcessor.h" -#import -#import @implementation ObjectDetection { SSDLiteLargeModel *model; @@ -10,28 +8,30 @@ @implementation ObjectDetection { RCT_EXPORT_MODULE() +- (void)releaseResources { + model = nil; +} + - (void)loadModule:(NSString *)modelSource resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { model = [[SSDLiteLargeModel alloc] init]; - [model loadModel:[NSURL URLWithString:modelSource] - completion:^(BOOL success, NSNumber *errorCode) { - if (success) { - resolve(errorCode); - return; - } - - NSError *error = [NSError - errorWithDomain:@"StyleTransferErrorDomain" - code:[errorCode intValue] - userInfo:@{ - NSLocalizedDescriptionKey : [NSString - stringWithFormat:@"%ld", (long)[errorCode longValue]] - }]; - - reject(@"init_module_error", error.localizedDescription, error); - return; - }]; + + NSNumber *errorCode = [model loadModel:modelSource]; + if ([errorCode intValue] != 0) { + [self releaseResources]; + NSError *error = [NSError + errorWithDomain:@"StyleTransferErrorDomain" + code:[errorCode intValue] + userInfo:@{ + NSLocalizedDescriptionKey : [NSString + stringWithFormat:@"%ld", (long)[errorCode longValue]] + }]; + reject(@"init_module_error", error.localizedDescription, error); + return; + } + + resolve(@0); } - (void)forward:(NSString *)input diff --git a/ios/RnExecutorch/SpeechToText.mm b/ios/RnExecutorch/SpeechToText.mm index 54589d9e0..7a29bee66 100644 --- a/ios/RnExecutorch/SpeechToText.mm +++ b/ios/RnExecutorch/SpeechToText.mm @@ -1,13 +1,6 @@ #import "SpeechToText.h" -#import "./utils/ScalarType.h" -#import "models/BaseModel.h" #import "models/stt/Moonshine.hpp" -#import "models/stt/SpeechToTextBaseModel.hpp" #import "models/stt/Whisper.hpp" -#import "utils/SFFT.hpp" -#import -#import -#import @implementation SpeechToText { Whisper *whisper; @@ -16,6 +9,11 @@ @implementation SpeechToText { RCT_EXPORT_MODULE() +- (void)releaseResources { + whisper = nil; + moonshine = nil; +} + - (void)generate:(NSArray *)waveform resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { @@ -83,6 +81,7 @@ - (void)loadModule:(NSString *)modelName [model loadModules:modelSources]; resolve(@(0)); } @catch (NSException *exception) { + [self releaseResources]; reject(@"init_decoder_error", [NSString stringWithFormat:@"%@", exception.reason], nil); } diff --git a/ios/RnExecutorch/StyleTransfer.h b/ios/RnExecutorch/StyleTransfer.h deleted file mode 100644 index bd9d671fd..000000000 --- a/ios/RnExecutorch/StyleTransfer.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface StyleTransfer : NSObject - -@end diff --git a/ios/RnExecutorch/StyleTransfer.mm b/ios/RnExecutorch/StyleTransfer.mm deleted file mode 100644 index 52930cd47..000000000 --- a/ios/RnExecutorch/StyleTransfer.mm +++ /dev/null @@ -1,58 +0,0 @@ -#import "StyleTransfer.h" -#import "ImageProcessor.h" -#import "models/BaseModel.h" -#import "models/style_transfer/StyleTransferModel.h" -#import "utils/ETError.h" -#import -#import -#import - -@implementation StyleTransfer { - StyleTransferModel *model; -} - -RCT_EXPORT_MODULE() - -- (void)loadModule:(NSString *)modelSource - resolve:(RCTPromiseResolveBlock)resolve - reject:(RCTPromiseRejectBlock)reject { - model = [[StyleTransferModel alloc] init]; - [model - loadModel:[NSURL URLWithString:modelSource] - completion:^(BOOL success, NSNumber *errorCode) { - if (success) { - resolve(errorCode); - return; - } - - reject(@"init_module_error", - [NSString stringWithFormat:@"%ld", (long)[errorCode longValue]], - nil); - return; - }]; -} - -- (void)forward:(NSString *)input - resolve:(RCTPromiseResolveBlock)resolve - reject:(RCTPromiseRejectBlock)reject { - @try { - cv::Mat image = [ImageProcessor readImage:input]; - cv::Mat resultImage = [model runModel:image]; - - NSString *tempFilePath = [ImageProcessor saveToTempFile:resultImage]; - resolve(tempFilePath); - return; - } @catch (NSException *exception) { - NSLog(@"An exception occurred: %@, %@", exception.name, exception.reason); - reject(@"forward_error", - [NSString stringWithFormat:@"%@", exception.reason], nil); - return; - } -} - -- (std::shared_ptr)getTurboModule: - (const facebook::react::ObjCTurboModule::InitParams &)params { - return std::make_shared(params); -} - -@end diff --git a/ios/RnExecutorch/TextEmbeddings.h b/ios/RnExecutorch/TextEmbeddings.h new file mode 100644 index 000000000..4d7424534 --- /dev/null +++ b/ios/RnExecutorch/TextEmbeddings.h @@ -0,0 +1,5 @@ +#import + +@interface TextEmbeddings : NSObject + +@end diff --git a/ios/RnExecutorch/TextEmbeddings.mm b/ios/RnExecutorch/TextEmbeddings.mm new file mode 100644 index 000000000..59fa1b58d --- /dev/null +++ b/ios/RnExecutorch/TextEmbeddings.mm @@ -0,0 +1,62 @@ +#import "TextEmbeddings.h" +#import "models/text_embeddings/TextEmbeddingsModel.h" + +@implementation TextEmbeddings { + TextEmbeddingsModel *model; +} + +RCT_EXPORT_MODULE() + +- (void)releaseResources { + model = nil; +} + +- (void)loadModule:(NSString *)modelSource + tokenizerSource:(NSString *)tokenizerSource + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + model = [[TextEmbeddingsModel alloc] init]; + + @try { + [self->model loadTokenizer:tokenizerSource]; + } @catch (NSException *exception) { + [self releaseResources]; + reject(@"Tokenizer_Error", + [NSString stringWithFormat:@"Failed to load tokenizer from: %@", + tokenizerSource], + nil); + return; + } + + NSNumber *errorCode = [model loadModel:modelSource]; + if ([errorCode intValue] != 0) { + [self releaseResources]; + reject(@"init_module_error", + [NSString stringWithFormat:@"%ld", (long)[errorCode longValue]], + nil); + return; + } + + resolve(@0); +} + +- (void)forward:(NSString *)input + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + @try { + resolve([model runModel:input]); + return; + } @catch (NSException *exception) { + NSLog(@"An exception occurred: %@, %@", exception.name, exception.reason); + reject(@"forward_error", + [NSString stringWithFormat:@"%@", exception.reason], nil); + return; + } +} + +- (std::shared_ptr)getTurboModule: + (const facebook::react::ObjCTurboModule::InitParams &)params { + return std::make_shared(params); +} + +@end diff --git a/ios/RnExecutorch/Tokenizer.h b/ios/RnExecutorch/Tokenizer.h new file mode 100644 index 000000000..acc1146ce --- /dev/null +++ b/ios/RnExecutorch/Tokenizer.h @@ -0,0 +1,5 @@ +#import + +@interface Tokenizer : NSObject + +@end diff --git a/ios/RnExecutorch/Tokenizer.mm b/ios/RnExecutorch/Tokenizer.mm new file mode 100644 index 000000000..53099a4bc --- /dev/null +++ b/ios/RnExecutorch/Tokenizer.mm @@ -0,0 +1,83 @@ +#import "Tokenizer.h" +#import + +@implementation Tokenizer { + HuggingFaceTokenizer *tokenizer; +} + +RCT_EXPORT_MODULE() + +- (void)loadModule:(NSString *)tokenizerSource + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + @try { + tokenizer = + [[HuggingFaceTokenizer alloc] initWithTokenizerPath:tokenizerSource]; + resolve(@(0)); + } @catch (NSException *exception) { + reject(@"Tokenizer_Error", @"Failed to load tokenizer", nil); + } +} + +- (void)encode:(NSString *)input + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + @try { + resolve([tokenizer encode:input]); + } @catch (NSException *exception) { + reject(@"tokenizer_error", + [NSString stringWithFormat:@"%@", exception.reason], nil); + } +} + +- (void)decode:(NSArray *)input + skipSpecialTokens:(BOOL)skipSpecialTokens + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + @try { + resolve([tokenizer decode:input skipSpecialTokens:skipSpecialTokens]); + } @catch (NSException *exception) { + reject(@"tokenizer_error", + [NSString stringWithFormat:@"%@", exception.reason], nil); + } +} + +- (void)getVocabSize:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + @try { + resolve([NSNumber numberWithUnsignedInteger:[tokenizer getVocabSize]]); + } @catch (NSException *exception) { + reject(@"tokenizer_error", + [NSString stringWithFormat:@"%@", exception.reason], nil); + } +} + +- (void)idToToken:(double)input + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + @try { + NSInteger tokenID = (NSInteger)input; + resolve([tokenizer idToToken:tokenID]); + } @catch (NSException *exception) { + reject(@"tokenizer_error", + [NSString stringWithFormat:@"%@", exception.reason], nil); + } +} + +- (void)tokenToId:(NSString *)input + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject { + @try { + resolve([NSNumber numberWithInteger:[tokenizer tokenToId:input]]); + } @catch (NSException *exception) { + reject(@"tokenizer_error", + [NSString stringWithFormat:@"%@", exception.reason], nil); + } +} + +- (std::shared_ptr)getTurboModule: + (const facebook::react::ObjCTurboModule::InitParams &)params { + return std::make_shared(params); +} + +@end diff --git a/ios/RnExecutorch/VerticalOCR.mm b/ios/RnExecutorch/VerticalOCR.mm index 843fcd235..2683c5164 100644 --- a/ios/RnExecutorch/VerticalOCR.mm +++ b/ios/RnExecutorch/VerticalOCR.mm @@ -1,13 +1,11 @@ #import "VerticalOCR.h" -#import "models/ocr/RecognitionHandler.h" #import "models/ocr/Recognizer.h" #import "models/ocr/VerticalDetector.h" #import "models/ocr/utils/CTCLabelConverter.h" +#import "models/ocr/utils/Constants.h" #import "models/ocr/utils/OCRUtils.h" #import "models/ocr/utils/RecognizerUtils.h" #import "utils/ImageProcessor.h" -#import -#import @implementation VerticalOCR { VerticalDetector *detectorLarge; @@ -19,6 +17,13 @@ @implementation VerticalOCR { RCT_EXPORT_MODULE() +- (void)releaseResources { + detectorLarge = nil; + detectorNarrow = nil; + recognizer = nil; + converter = nil; +} + - (void)loadModule:(NSString *)detectorLargeSource detectorNarrowSource:(NSString *)detectorNarrowSource recognizerSource:(NSString *)recognizerSource @@ -26,42 +31,37 @@ - (void)loadModule:(NSString *)detectorLargeSource independentCharacters:(BOOL)independentCharacters resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - detectorLarge = [[VerticalDetector alloc] initWithDetectSingleCharacters:NO]; converter = [[CTCLabelConverter alloc] initWithCharacters:symbols separatorList:@{}]; self->independentCharacters = independentCharacters; - [detectorLarge - loadModel:[NSURL URLWithString:detectorLargeSource] - completion:^(BOOL success, NSNumber *errorCode) { - if (!success) { - reject(@"init_module_error", @"Failed to initialize detector module", - nil); - return; - } - self->detectorNarrow = - [[VerticalDetector alloc] initWithDetectSingleCharacters:YES]; - [self->detectorNarrow - loadModel:[NSURL URLWithString:detectorNarrowSource] - completion:^(BOOL success, NSNumber *errorCode) { - if (!success) { - reject(@"init_module_error", - @"Failed to initialize detector module", nil); - return; - } - - self->recognizer = [[Recognizer alloc] init]; - [self->recognizer - loadModel:[NSURL URLWithString:recognizerSource] - completion:^(BOOL success, NSNumber *errorCode) { - if (!success) { - reject(@"init_module_error", - @"Failed to initialize recognizer module", nil); - } - - resolve(@(YES)); - }]; - }]; - }]; + + detectorLarge = [[VerticalDetector alloc] initWithDetectSingleCharacters:NO]; + NSNumber *errorCode = [detectorLarge loadModel:detectorLargeSource]; + if ([errorCode intValue] != 0) { + [self releaseResources]; + reject(@"init_module_error", @"Failed to initialize detector module", nil); + return; + } + + detectorNarrow = + [[VerticalDetector alloc] initWithDetectSingleCharacters:YES]; + errorCode = [detectorNarrow loadModel:detectorNarrowSource]; + if ([errorCode intValue] != 0) { + [self releaseResources]; + reject(@"init_module_error", @"Failed to initialize detector module", nil); + return; + } + + recognizer = [[Recognizer alloc] init]; + errorCode = [recognizer loadModel:recognizerSource]; + if ([errorCode intValue] != 0) { + [self releaseResources]; + reject(@"init_module_error", @"Failed to initialize recognizer module", + nil); + return; + } + + resolve(@0); } - (void)forward:(NSString *)input diff --git a/ios/RnExecutorch/models/BaseModel.h b/ios/RnExecutorch/models/BaseModel.h index c6cca027d..a8bd4136e 100644 --- a/ios/RnExecutorch/models/BaseModel.h +++ b/ios/RnExecutorch/models/BaseModel.h @@ -1,13 +1,11 @@ #import "ExecutorchLib/ETModel.h" -#import -#import @interface BaseModel : NSObject { @protected ETModel *module; } -- (NSArray *)forward:(NSArray *)input; +- (NSArray *)forward:(NSArray *)inputs; - (NSArray *)forward:(NSArray *)inputs shapes:(NSArray *)shapes @@ -18,7 +16,6 @@ shapes:(NSArray *)shapes inputTypes:(NSArray *)inputTypes; -- (void)loadModel:(NSURL *)modelURL - completion:(void (^)(BOOL success, NSNumber *code))completion; +- (NSNumber *)loadModel:(NSString *)modelSource; @end diff --git a/ios/RnExecutorch/models/BaseModel.mm b/ios/RnExecutorch/models/BaseModel.mm index 3e0a8fbed..b0f21ed6d 100644 --- a/ios/RnExecutorch/models/BaseModel.mm +++ b/ios/RnExecutorch/models/BaseModel.mm @@ -1,9 +1,8 @@ #import "BaseModel.h" -#import "../utils/ETError.h" @implementation BaseModel -- (NSArray *)forward:(NSArray *)input { +- (NSArray *)forward:(NSArray *)inputs { NSMutableArray *shapes = [NSMutableArray new]; NSMutableArray *inputTypes = [NSMutableArray new]; NSNumber *numberOfInputs = [module getNumberOfInputs]; @@ -13,9 +12,8 @@ - (NSArray *)forward:(NSArray *)input { [inputTypes addObject:[module getInputType:[NSNumber numberWithInt:i]]]; } - NSArray *result = [module forward:@[ input ] - shapes:shapes - inputTypes:inputTypes]; + NSArray *result = [module forward:inputs shapes:shapes inputTypes:inputTypes]; + return result; } @@ -37,17 +35,9 @@ - (NSArray *)execute:(NSString *)methodName return result; } -- (void)loadModel:(NSURL *)modelURL - completion:(void (^)(BOOL success, NSNumber *code))completion { +- (NSNumber *)loadModel:(NSString *)modelSource { module = [[ETModel alloc] init]; - NSNumber *result = [self->module loadModel:modelURL.path]; - if ([result intValue] != 0) { - completion(NO, result); - return; - } - - completion(YES, result); - return; + return [self->module loadModel:modelSource]; } @end diff --git a/ios/RnExecutorch/models/classification/ClassificationModel.h b/ios/RnExecutorch/models/classification/ClassificationModel.h index 77c034b1f..3df50a1e3 100644 --- a/ios/RnExecutorch/models/classification/ClassificationModel.h +++ b/ios/RnExecutorch/models/classification/ClassificationModel.h @@ -1,4 +1,4 @@ -#import "BaseModel.h" +#import "../BaseModel.h" #import "opencv2/opencv.hpp" @interface ClassificationModel : BaseModel diff --git a/ios/RnExecutorch/models/classification/ClassificationModel.mm b/ios/RnExecutorch/models/classification/ClassificationModel.mm index 0306e67cd..13d4485a3 100644 --- a/ios/RnExecutorch/models/classification/ClassificationModel.mm +++ b/ios/RnExecutorch/models/classification/ClassificationModel.mm @@ -2,7 +2,6 @@ #import "../../utils/ImageProcessor.h" #import "../../utils/Numerical.h" #import "Constants.h" -#import "opencv2/opencv.hpp" @implementation ClassificationModel @@ -47,7 +46,7 @@ - (NSDictionary *)postprocess:(NSArray *)output { - (NSDictionary *)runModel:(cv::Mat &)input { NSArray *modelInput = [self preprocess:input]; - NSArray *modelOutput = [self forward:modelInput]; + NSArray *modelOutput = [self forward:@[ modelInput ]]; return [self postprocess:modelOutput]; } diff --git a/ios/RnExecutorch/models/classification/Constants.mm b/ios/RnExecutorch/models/classification/Constants.mm index 92e6284bb..ce99b0bdb 100644 --- a/ios/RnExecutorch/models/classification/Constants.mm +++ b/ios/RnExecutorch/models/classification/Constants.mm @@ -1,5 +1,4 @@ #import "Constants.h" -#import const std::string imagenet1k_v1_labels[] = { "tench, Tinca tinca", diff --git a/ios/RnExecutorch/models/image_segmentation/Constants.h b/ios/RnExecutorch/models/image_segmentation/Constants.h deleted file mode 100644 index 889556d70..000000000 --- a/ios/RnExecutorch/models/image_segmentation/Constants.h +++ /dev/null @@ -1,5 +0,0 @@ -#import -#import - - -extern const std::vector deeplabv3_resnet50_labels; diff --git a/ios/RnExecutorch/models/image_segmentation/Constants.mm b/ios/RnExecutorch/models/image_segmentation/Constants.mm deleted file mode 100644 index 84ce9ea60..000000000 --- a/ios/RnExecutorch/models/image_segmentation/Constants.mm +++ /dev/null @@ -1,10 +0,0 @@ -#import "Constants.h" -#import -#import - -const std::vector deeplabv3_resnet50_labels = { - "BACKGROUND", "AEROPLANE", "BICYCLE", "BIRD", "BOAT", - "BOTTLE", "BUS", "CAR", "CAT", "CHAIR", "COW", "DININGTABLE", - "DOG", "HORSE", "MOTORBIKE", "PERSON", "POTTEDPLANT", "SHEEP", - "SOFA", "TRAIN", "TVMONITOR" -}; \ No newline at end of file diff --git a/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.h b/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.h deleted file mode 100644 index a58733a18..000000000 --- a/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.h +++ /dev/null @@ -1,10 +0,0 @@ -#import "../BaseModel.h" -#import "opencv2/opencv.hpp" - -@interface ImageSegmentationModel : BaseModel -- (cv::Size)getModelImageSize; -- (NSDictionary *)runModel:(cv::Mat &)input - returnClasses:(NSArray *)classesOfInterest - resize:(BOOL)resize; - -@end \ No newline at end of file diff --git a/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.mm b/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.mm deleted file mode 100644 index 951687c53..000000000 --- a/ios/RnExecutorch/models/image_segmentation/ImageSegmentationModel.mm +++ /dev/null @@ -1,147 +0,0 @@ -#import "ImageSegmentationModel.h" -#import -#import -#import -#import "../../utils/ImageProcessor.h" -#import "../../utils/Numerical.h" -#import "../../utils/Conversions.h" -#import "opencv2/opencv.hpp" -#import "Constants.h" - -@interface ImageSegmentationModel () - - (NSArray *)preprocess:(cv::Mat &)input; - - (NSDictionary *)postprocess:(NSArray *)output - returnClasses:(NSArray *)classesOfInterest - resize:(BOOL)resize; -@end - -@implementation ImageSegmentationModel { - cv::Size originalSize; -} - -- (cv::Size)getModelImageSize { - NSArray *inputShape = [module getInputShape:@0]; - NSNumber *widthNumber = inputShape.lastObject; - NSNumber *heightNumber = inputShape[inputShape.count - 2]; - - int height = [heightNumber intValue]; - int width = [widthNumber intValue]; - - return cv::Size(height, width); -} - -- (NSArray *)preprocess:(cv::Mat &)input { - originalSize = cv::Size(input.cols, input.rows); - - cv::Size modelImageSize = [self getModelImageSize]; - cv::Mat output; - cv::resize(input, output, modelImageSize); - - NSArray *modelInput = [ImageProcessor matToNSArray:output]; - return modelInput; -} - -std::vector extractResults(NSArray *result, std::size_t numLabels, - cv::Size modelImageSize, cv::Size originalSize, BOOL resize) { - std::size_t numModelPixels = modelImageSize.height * modelImageSize.width; - - std::vector resizedLabelScores(numLabels); - for (std::size_t label = 0; label < numLabels; ++label) { - cv::Mat labelMat = cv::Mat(modelImageSize, CV_64F); - - for(std::size_t pixel = 0; pixel < numModelPixels; ++pixel){ - int row = pixel / modelImageSize.width; - int col = pixel % modelImageSize.width; - labelMat.at(row, col) = [result[label * numModelPixels + pixel] doubleValue]; - } - - if (resize) { - cv::resize(labelMat, resizedLabelScores[label], originalSize); - } - else { - resizedLabelScores[label] = std::move(labelMat); - } - } - return resizedLabelScores; -} - -void adjustScoresPerPixel(std::vector& labelScores, cv::Mat& argMax, - cv::Size outputSize, std::size_t numLabels) { - std::size_t numOutputPixels = outputSize.height * outputSize.width; - for (std::size_t pixel = 0; pixel < numOutputPixels; ++pixel) { - int row = pixel / outputSize.width; - int col = pixel % outputSize.width; - std::vector scores; - scores.reserve(numLabels); - for (const auto& mat : labelScores) { - scores.push_back(mat.at(row, col)); - } - - std::vector adjustedScores = softmax(scores); - - for (std::size_t label = 0; label < numLabels; ++label) { - labelScores[label].at(row, col) = adjustedScores[label]; - } - - auto maxIt = std::max_element(scores.begin(), scores.end()); - argMax.at(row, col) = std::distance(scores.begin(), maxIt); - } -} - -- (NSDictionary *)postprocess:(NSArray *)output - returnClasses:(NSArray *)classesOfInterest - resize:(BOOL)resize { - cv::Size modelImageSize = [self getModelImageSize]; - - std::size_t numLabels = deeplabv3_resnet50_labels.size(); - - NSAssert((std::size_t)output.count == numLabels * modelImageSize.height * modelImageSize.width, - @"Model generated unexpected output size."); - - // For each label extract it's matrix, - // and rescale it to the original size if `resize` - std::vector resizedLabelScores = - extractResults(output, numLabels, modelImageSize, originalSize, resize); - - cv::Size outputSize = resize ? originalSize : modelImageSize; - cv::Mat argMax = cv::Mat(outputSize, CV_32S); - - // For each pixel apply softmax across all the labels and calculate the argMax - adjustScoresPerPixel(resizedLabelScores, argMax, outputSize, numLabels); - - std::unordered_set labelSet; - - for (id label in classesOfInterest) { - labelSet.insert(std::string([label UTF8String])); - } - - NSMutableDictionary *result = [NSMutableDictionary dictionary]; - - // Convert to NSArray and populate the final dictionary - for (std::size_t label = 0; label < numLabels; ++label) { - if (labelSet.contains(deeplabv3_resnet50_labels[label])){ - NSString *labelString = @(deeplabv3_resnet50_labels[label].c_str()); - NSArray *arr = simpleMatToNSArray(resizedLabelScores[label]); - result[labelString] = arr; - } - } - - result[@"ARGMAX"] = simpleMatToNSArray(argMax); - - return result; -} - -- (NSDictionary *)runModel:(cv::Mat &)input - returnClasses:(NSArray *)classesOfInterest - resize:(BOOL)resize { - NSArray *modelInput = [self preprocess:input]; - NSArray *result = [self forward:modelInput]; - - NSDictionary *output = [self postprocess:result[0] - returnClasses:classesOfInterest - resize:resize]; - - return output; -} - -@end diff --git a/ios/RnExecutorch/models/object_detection/SSDLiteLargeModel.mm b/ios/RnExecutorch/models/object_detection/SSDLiteLargeModel.mm index e2500bf17..57e60dac4 100644 --- a/ios/RnExecutorch/models/object_detection/SSDLiteLargeModel.mm +++ b/ios/RnExecutorch/models/object_detection/SSDLiteLargeModel.mm @@ -1,7 +1,6 @@ #include "SSDLiteLargeModel.hpp" #include "../../utils/ObjectDetectionUtils.hpp" #include "ImageProcessor.h" -#include float constexpr iouThreshold = 0.55; float constexpr detectionThreshold = 0.7; @@ -54,7 +53,7 @@ - (NSArray *)runModel:(cv::Mat)input { int inputImageWidth = size.width; int inputImageHeight = size.height; NSArray *modelInput = [self preprocess:input]; - NSArray *forwardResult = [self forward:modelInput]; + NSArray *forwardResult = [self forward:@[ modelInput ]]; NSArray *output = [self postprocess:forwardResult widthRatio:inputImageWidth / (float)modelInputWidth diff --git a/ios/RnExecutorch/models/ocr/Detector.h b/ios/RnExecutorch/models/ocr/Detector.h index 164413593..e1a43898c 100644 --- a/ios/RnExecutorch/models/ocr/Detector.h +++ b/ios/RnExecutorch/models/ocr/Detector.h @@ -1,7 +1,5 @@ -#import "BaseModel.h" -#import "RecognitionHandler.h" +#import "../BaseModel.h" #import "opencv2/opencv.hpp" -#import "utils/Constants.h" @interface Detector : BaseModel diff --git a/ios/RnExecutorch/models/ocr/Detector.mm b/ios/RnExecutorch/models/ocr/Detector.mm index 5bec88369..9df5ea36e 100644 --- a/ios/RnExecutorch/models/ocr/Detector.mm +++ b/ios/RnExecutorch/models/ocr/Detector.mm @@ -1,5 +1,6 @@ #import "Detector.h" #import "../../utils/ImageProcessor.h" +#import "utils/Constants.h" #import "utils/DetectorUtils.h" #import "utils/OCRUtils.h" @@ -92,7 +93,7 @@ group each character into a single instance (sequence) Both matrices are - (NSArray *)runModel:(cv::Mat &)input { NSArray *modelInput = [self preprocess:input]; - NSArray *modelResult = [self forward:modelInput]; + NSArray *modelResult = [self forward:@[ modelInput ]]; NSArray *result = [self postprocess:modelResult]; return result; } diff --git a/ios/RnExecutorch/models/ocr/RecognitionHandler.h b/ios/RnExecutorch/models/ocr/RecognitionHandler.h index 7f674d989..d0031c33d 100644 --- a/ios/RnExecutorch/models/ocr/RecognitionHandler.h +++ b/ios/RnExecutorch/models/ocr/RecognitionHandler.h @@ -3,10 +3,11 @@ @interface RecognitionHandler : NSObject - (instancetype)initWithSymbols:(NSString *)symbols; -- (void)loadRecognizers:(NSString *)largeRecognizerPath - mediumRecognizerPath:(NSString *)mediumRecognizerPath - smallRecognizerPath:(NSString *)smallRecognizerPath - completion:(void (^)(BOOL, NSNumber *))completion; + +- (NSNumber *)loadRecognizers:(NSString *)largeRecognizerPath + mediumRecognizerPath:(NSString *)mediumRecognizerPath + smallRecognizerPath:(NSString *)smallRecognizerPath; + - (NSArray *)recognize:(NSArray *)bBoxesList imgGray:(cv::Mat)imgGray desiredWidth:(int)desiredWidth diff --git a/ios/RnExecutorch/models/ocr/RecognitionHandler.mm b/ios/RnExecutorch/models/ocr/RecognitionHandler.mm index 02d683cdc..b291ea430 100644 --- a/ios/RnExecutorch/models/ocr/RecognitionHandler.mm +++ b/ios/RnExecutorch/models/ocr/RecognitionHandler.mm @@ -1,12 +1,9 @@ #import "RecognitionHandler.h" -#import "../../utils/ImageProcessor.h" #import "./utils/CTCLabelConverter.h" #import "./utils/Constants.h" #import "./utils/OCRUtils.h" #import "./utils/RecognizerUtils.h" -#import "ExecutorchLib/ETModel.h" #import "Recognizer.h" -#import /* RecognitionHandler class is responsible for loading and choosing the @@ -34,15 +31,12 @@ - (instancetype)initWithSymbols:(NSString *)symbols { return self; } -- (void)loadRecognizers:(NSString *)largeRecognizerPath - mediumRecognizerPath:(NSString *)mediumRecognizerPath - smallRecognizerPath:(NSString *)smallRecognizerPath - completion:(void (^)(BOOL, NSNumber *))completion { - dispatch_group_t group = dispatch_group_create(); - __block BOOL allSuccessful = YES; - +- (NSNumber *)loadRecognizers:(NSString *)largeRecognizerPath + mediumRecognizerPath:(NSString *)mediumRecognizerPath + smallRecognizerPath:(NSString *)smallRecognizerPath { NSArray *recognizers = @[ recognizerLarge, recognizerMedium, recognizerSmall ]; + NSArray *paths = @[ largeRecognizerPath, mediumRecognizerPath, smallRecognizerPath ]; @@ -50,24 +44,13 @@ - (void)loadRecognizers:(NSString *)largeRecognizerPath Recognizer *recognizer = recognizers[i]; NSString *path = paths[i]; - dispatch_group_enter(group); - [recognizer loadModel:[NSURL URLWithString:path] - completion:^(BOOL success, NSNumber *errorCode) { - if (!success) { - allSuccessful = NO; - dispatch_group_leave(group); - completion(NO, errorCode); - return; - } - dispatch_group_leave(group); - }]; + NSNumber *errorCode = [recognizer loadModel:path]; + if ([errorCode intValue] != 0) { + return errorCode; + } } - dispatch_group_notify(group, dispatch_get_main_queue(), ^{ - if (allSuccessful) { - completion(YES, @(0)); - } - }); + return @0; } - (NSArray *)runModel:(cv::Mat)croppedImage { diff --git a/ios/RnExecutorch/models/ocr/Recognizer.h b/ios/RnExecutorch/models/ocr/Recognizer.h index 4b301dbef..9d1cd81a0 100644 --- a/ios/RnExecutorch/models/ocr/Recognizer.h +++ b/ios/RnExecutorch/models/ocr/Recognizer.h @@ -1,4 +1,4 @@ -#import "BaseModel.h" +#import "../BaseModel.h" #import "opencv2/opencv.hpp" @interface Recognizer : BaseModel diff --git a/ios/RnExecutorch/models/ocr/Recognizer.mm b/ios/RnExecutorch/models/ocr/Recognizer.mm index 8b339bc23..2457727aa 100644 --- a/ios/RnExecutorch/models/ocr/Recognizer.mm +++ b/ios/RnExecutorch/models/ocr/Recognizer.mm @@ -1,7 +1,6 @@ #import "Recognizer.h" #import "../../utils/ImageProcessor.h" #import "RecognizerUtils.h" -#import "utils/OCRUtils.h" /* The model used as detector is based on CRNN paper. @@ -69,7 +68,7 @@ - (NSArray *)postprocess:(NSArray *)output { - (NSArray *)runModel:(cv::Mat &)input { NSArray *modelInput = [self preprocess:input]; - NSArray *modelResult = [self forward:modelInput]; + NSArray *modelResult = [self forward:@[ modelInput ]]; NSArray *result = [self postprocess:modelResult]; return result; diff --git a/ios/RnExecutorch/models/ocr/VerticalDetector.h b/ios/RnExecutorch/models/ocr/VerticalDetector.h index 1c1fcd2ec..87a3e36be 100644 --- a/ios/RnExecutorch/models/ocr/VerticalDetector.h +++ b/ios/RnExecutorch/models/ocr/VerticalDetector.h @@ -1,7 +1,5 @@ -#import "BaseModel.h" -#import "RecognitionHandler.h" +#import "../BaseModel.h" #import "opencv2/opencv.hpp" -#import "utils/Constants.h" @interface VerticalDetector : BaseModel diff --git a/ios/RnExecutorch/models/ocr/VerticalDetector.mm b/ios/RnExecutorch/models/ocr/VerticalDetector.mm index b36a29a29..b3b7dcc66 100644 --- a/ios/RnExecutorch/models/ocr/VerticalDetector.mm +++ b/ios/RnExecutorch/models/ocr/VerticalDetector.mm @@ -1,5 +1,6 @@ #import "VerticalDetector.h" #import "../../utils/ImageProcessor.h" +#import "utils/Constants.h" #import "utils/DetectorUtils.h" #import "utils/OCRUtils.h" @@ -109,7 +110,7 @@ group each character into a single instance (sequence) Both matrices are - (NSArray *)runModel:(cv::Mat &)input { NSArray *modelInput = [self preprocess:input]; - NSArray *modelResult = [self forward:modelInput]; + NSArray *modelResult = [self forward:@[ modelInput ]]; NSArray *result = [self postprocess:modelResult]; return result; } diff --git a/ios/RnExecutorch/models/ocr/utils/OCRUtils.mm b/ios/RnExecutorch/models/ocr/utils/OCRUtils.mm index eed17a152..a7a7a22d8 100644 --- a/ios/RnExecutorch/models/ocr/utils/OCRUtils.mm +++ b/ios/RnExecutorch/models/ocr/utils/OCRUtils.mm @@ -1,5 +1,4 @@ #import "OCRUtils.h" -#import "RecognizerUtils.h" @implementation OCRUtils diff --git a/ios/RnExecutorch/models/stt/Moonshine.mm b/ios/RnExecutorch/models/stt/Moonshine.mm index a87b4105e..699d00008 100644 --- a/ios/RnExecutorch/models/stt/Moonshine.mm +++ b/ios/RnExecutorch/models/stt/Moonshine.mm @@ -1,9 +1,4 @@ #import "Moonshine.hpp" -#import "ExecutorchLib/ETModel.h" -#import "MoonshineEncoder.hpp" -#import "Moonshinedecoder.hpp" -#import -#import @implementation Moonshine { MoonshineEncoder *encoder; @@ -66,4 +61,4 @@ - (void)loadModules:(NSArray *)modelSources { }]; } -@end \ No newline at end of file +@end diff --git a/ios/RnExecutorch/models/stt/SpeechToTextBaseModel.mm b/ios/RnExecutorch/models/stt/SpeechToTextBaseModel.mm index 48cd4f504..dbfeb38e6 100644 --- a/ios/RnExecutorch/models/stt/SpeechToTextBaseModel.mm +++ b/ios/RnExecutorch/models/stt/SpeechToTextBaseModel.mm @@ -1,6 +1,4 @@ #import "SpeechToTextBaseModel.hpp" -#import -#import @implementation SpeechToTextBaseModel @@ -8,16 +6,14 @@ - (void)loadModuleHelper:(BaseModel *)model withSource:(NSString *)source onSuccess:(void (^)(void))success onFailure:(void (^)(NSString *))failure { + NSNumber *errorCode = [model loadModel:source]; - [model loadModel:[NSURL URLWithString:source] - completion:^(BOOL isSuccess, NSNumber *errorCode) { - if (isSuccess) { - success(); - } else { - failure([NSString - stringWithFormat:@"%ld", (long)[errorCode longValue]]); - } - }]; + if ([errorCode intValue] != 0) { + failure([NSString stringWithFormat:@"%ld", (long)[errorCode longValue]]); + return; + } + + success(); } @end diff --git a/ios/RnExecutorch/models/stt/Whisper.mm b/ios/RnExecutorch/models/stt/Whisper.mm index 0a70e7fa9..1710cf33a 100644 --- a/ios/RnExecutorch/models/stt/Whisper.mm +++ b/ios/RnExecutorch/models/stt/Whisper.mm @@ -1,11 +1,6 @@ #import "Whisper.hpp" -#import "../../utils/SFFT.hpp" -#import "../../utils/ScalarType.h" -#import "ExecutorchLib/ETModel.h" #import "WhisperEncoder.hpp" #import "Whisperdecoder.hpp" -#import -#import @implementation Whisper { WhisperEncoder *encoder; diff --git a/ios/RnExecutorch/models/style_transfer/StyleTransferModel.h b/ios/RnExecutorch/models/style_transfer/StyleTransferModel.h deleted file mode 100644 index 20cdf6dd0..000000000 --- a/ios/RnExecutorch/models/style_transfer/StyleTransferModel.h +++ /dev/null @@ -1,11 +0,0 @@ -#import "../BaseModel.h" -#import "opencv2/opencv.hpp" - -@interface StyleTransferModel : BaseModel - -- (cv::Size)getModelImageSize; -- (NSArray *)preprocess:(cv::Mat &)input; -- (cv::Mat)postprocess:(NSArray *)output; -- (cv::Mat)runModel:(cv::Mat &)input; - -@end diff --git a/ios/RnExecutorch/models/style_transfer/StyleTransferModel.mm b/ios/RnExecutorch/models/style_transfer/StyleTransferModel.mm deleted file mode 100644 index 6a351431e..000000000 --- a/ios/RnExecutorch/models/style_transfer/StyleTransferModel.mm +++ /dev/null @@ -1,51 +0,0 @@ -#import "StyleTransferModel.h" -#import "../../utils/ImageProcessor.h" -#import "opencv2/opencv.hpp" - -@implementation StyleTransferModel { - cv::Size originalSize; -} - -- (cv::Size)getModelImageSize { - NSArray *inputShape = [module getInputShape:@0]; - NSNumber *widthNumber = inputShape.lastObject; - NSNumber *heightNumber = inputShape[inputShape.count - 2]; - - int height = [heightNumber intValue]; - int width = [widthNumber intValue]; - - return cv::Size(height, width); -} - -- (NSArray *)preprocess:(cv::Mat &)input { - self->originalSize = cv::Size(input.cols, input.rows); - - cv::Size modelImageSize = [self getModelImageSize]; - cv::Mat output; - cv::resize(input, output, modelImageSize); - - NSArray *modelInput = [ImageProcessor matToNSArray:output]; - return modelInput; -} - -- (cv::Mat)postprocess:(NSArray *)output { - cv::Size modelImageSize = [self getModelImageSize]; - cv::Mat processedImage = [ImageProcessor arrayToMat:output - width:modelImageSize.width - height:modelImageSize.height]; - - cv::Mat processedOutput; - cv::resize(processedImage, processedOutput, originalSize); - - return processedOutput; -} - -- (cv::Mat)runModel:(cv::Mat &)input { - NSArray *modelInput = [self preprocess:input]; - NSArray *result = [self forward:modelInput]; - input = [self postprocess:result[0]]; - - return input; -} - -@end diff --git a/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.h b/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.h new file mode 100644 index 000000000..be1ac0f95 --- /dev/null +++ b/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.h @@ -0,0 +1,15 @@ +#import "../BaseModel.h" +#import "ExecutorchLib/HuggingFaceTokenizer.h" + +@interface TextEmbeddingsModel : BaseModel { +@protected + HuggingFaceTokenizer *tokenizer; +} + +- (void)loadTokenizer:(NSString *)tokenizerSource; +- (NSArray *)preprocess:(NSString *)input; +- (NSArray *)runModel:(NSString *)input; +- (NSArray *)postprocess:(NSArray *)input + attentionMask:(NSArray *)attentionMask; + +@end diff --git a/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.mm b/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.mm new file mode 100644 index 000000000..3c1115961 --- /dev/null +++ b/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsModel.mm @@ -0,0 +1,34 @@ +#import "TextEmbeddingsModel.h" +#import "TextEmbeddingsUtils.h" + +@implementation TextEmbeddingsModel + +- (NSArray *)preprocess:(NSString *)input { + NSArray *input_ids = [self->tokenizer encode:input]; + NSMutableArray *attention_mask = [NSMutableArray new]; + for (int i = 0; i < [input_ids count]; i++) { + [attention_mask addObject:@((int)([input_ids[i] intValue] != 0))]; + } + return @[ input_ids, attention_mask ]; // [2, max_length] +} + +- (NSArray *)postprocess:(NSArray *)modelOutput // [max_length * embedding_dim] + attentionMask:(NSArray *)attentionMask // [max_length] +{ + NSArray *embeddings = [TextEmbeddingsUtils meanPooling:modelOutput + attentionMask:attentionMask]; + return [TextEmbeddingsUtils normalize:embeddings]; +} + +- (NSArray *)runModel:(NSString *)input { + NSArray *modelInput = [self preprocess:input]; + NSArray *modelOutput = [self forward:modelInput]; + return [self postprocess:modelOutput[0] attentionMask:modelInput[1]]; +} + +- (void)loadTokenizer:(NSString *)tokenizerSource { + tokenizer = + [[HuggingFaceTokenizer alloc] initWithTokenizerPath:tokenizerSource]; +} + +@end diff --git a/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.h b/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.h new file mode 100644 index 000000000..52a44a444 --- /dev/null +++ b/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.h @@ -0,0 +1,8 @@ +@interface TextEmbeddingsUtils : NSObject + ++ (NSArray *)meanPooling:(NSArray *)modelOutput + attentionMask:(NSArray *)attentionMask; + ++ (NSArray *)normalize:(NSArray *)embeddings; + +@end diff --git a/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.mm b/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.mm new file mode 100644 index 000000000..3e5a66ce0 --- /dev/null +++ b/ios/RnExecutorch/models/text_embeddings/TextEmbeddingsUtils.mm @@ -0,0 +1,49 @@ +#import "TextEmbeddingsUtils.h" + +@implementation TextEmbeddingsUtils + ++ (NSArray *)meanPooling:(NSArray *)modelOutput + attentionMask:(NSArray *)attentionMask { + NSInteger modelOutputLength = [modelOutput count]; + NSInteger attentionMaskLength = [attentionMask count]; + NSInteger embeddingDim = modelOutputLength / attentionMaskLength; + + NSMutableArray *result = [NSMutableArray arrayWithCapacity:embeddingDim]; + + double sumMask = 0.0; + for (NSNumber *maskValue in attentionMask) { + sumMask += [maskValue intValue]; + } + sumMask = fmax(sumMask, 1e-9); + + for (NSInteger i = 0; i < embeddingDim; i++) { + double sum = 0; + for (NSInteger j = 0; j < attentionMaskLength; j++) { + sum += [modelOutput[j * embeddingDim + i] doubleValue] * + [attentionMask[j] intValue]; + } + [result addObject:@(sum / sumMask)]; + } + + return result; +} + ++ (NSArray *)normalize:(NSArray *)embeddings { + NSInteger embeddingDim = [embeddings count]; + double sum = 0.0; + + for (NSNumber *value in embeddings) { + sum += [value doubleValue] * [value doubleValue]; + } + sum = fmax(sqrt(sum), 1e-9); + + NSMutableArray *normalizedResult = + [NSMutableArray arrayWithCapacity:embeddingDim]; + for (NSNumber *value in embeddings) { + [normalizedResult addObject:@([value doubleValue] / sum)]; + } + + return normalizedResult; +} + +@end diff --git a/ios/RnExecutorch/utils/ImageProcessor.h b/ios/RnExecutorch/utils/ImageProcessor.h index c65182d0a..234bbc7e5 100644 --- a/ios/RnExecutorch/utils/ImageProcessor.h +++ b/ios/RnExecutorch/utils/ImageProcessor.h @@ -1,4 +1,3 @@ -#import #import @interface ImageProcessor : NSObject diff --git a/ios/RnExecutorch/utils/Numerical.h b/ios/RnExecutorch/utils/Numerical.h index 102a2bc54..2878bb43c 100644 --- a/ios/RnExecutorch/utils/Numerical.h +++ b/ios/RnExecutorch/utils/Numerical.h @@ -1,3 +1 @@ -#include - std::vector softmax(const std::vector &v); diff --git a/ios/RnExecutorch/utils/Numerical.mm b/ios/RnExecutorch/utils/Numerical.mm index 84e4bd629..7f91861ae 100644 --- a/ios/RnExecutorch/utils/Numerical.mm +++ b/ios/RnExecutorch/utils/Numerical.mm @@ -1,6 +1,4 @@ #include "Utils.h" -#include -#include std::vector softmax(const std::vector &v) { std::vector result(v.size()); diff --git a/ios/RnExecutorch/utils/ObjectDetectionUtils.mm b/ios/RnExecutorch/utils/ObjectDetectionUtils.mm index 93837717c..e1b8366f2 100644 --- a/ios/RnExecutorch/utils/ObjectDetectionUtils.mm +++ b/ios/RnExecutorch/utils/ObjectDetectionUtils.mm @@ -1,7 +1,5 @@ #include "ObjectDetectionUtils.hpp" #include "Constants.h" -#include -#include NSString *floatLabelToNSString(float label) { int intLabel = static_cast(label); diff --git a/ios/RnExecutorch/utils/SFFT.mm b/ios/RnExecutorch/utils/SFFT.mm index c68d99340..d8a767c40 100644 --- a/ios/RnExecutorch/utils/SFFT.mm +++ b/ios/RnExecutorch/utils/SFFT.mm @@ -68,4 +68,4 @@ + (void)fft:(float *)signal free(a.imagp); } -@end \ No newline at end of file +@end diff --git a/ios/RnExecutorch/utils/ScalarType.h b/ios/RnExecutorch/utils/ScalarType.h index 81a511675..f03af8e1e 100644 --- a/ios/RnExecutorch/utils/ScalarType.h +++ b/ios/RnExecutorch/utils/ScalarType.h @@ -1,8 +1,6 @@ #ifndef ScalarType_h #define ScalarType_h -#import - @interface ScalarType : NSObject @property(class, nonatomic, readonly) NSNumber *Int8; diff --git a/ios/RnExecutorch/utils/llms/Constants.h b/ios/RnExecutorch/utils/llms/Constants.h deleted file mode 100644 index 1ecf56c55..000000000 --- a/ios/RnExecutorch/utils/llms/Constants.h +++ /dev/null @@ -1,6 +0,0 @@ -#import - -extern NSString *const END_OF_TEXT_TOKEN_NS; -extern NSString *const BEGIN_OF_TEXT_TOKEN_NS; -extern NSString *const START_HEADER_ID_TOKEN_NS; -extern NSString *const END_HEADER_ID_TOKEN_NS; diff --git a/ios/RnExecutorch/utils/llms/Constants.mm b/ios/RnExecutorch/utils/llms/Constants.mm deleted file mode 100644 index 7ca223759..000000000 --- a/ios/RnExecutorch/utils/llms/Constants.mm +++ /dev/null @@ -1,23 +0,0 @@ -#import "Constants.h" -#import "ConversationManager.h" -#import - -NSString *const END_OF_TEXT_TOKEN_NS = - [[NSString alloc] initWithBytes:END_OF_TEXT_TOKEN.data() - length:END_OF_TEXT_TOKEN.size() - encoding:NSUTF8StringEncoding]; - -NSString *const BEGIN_OF_TEXT_TOKEN_NS = - [[NSString alloc] initWithBytes:BEGIN_OF_TEXT_TOKEN.data() - length:BEGIN_OF_TEXT_TOKEN.size() - encoding:NSUTF8StringEncoding]; - -NSString *const START_HEADER_ID_TOKEN_NS = - [[NSString alloc] initWithBytes:START_HEADER_ID_TOKEN.data() - length:START_HEADER_ID_TOKEN.size() - encoding:NSUTF8StringEncoding]; - -NSString *const END_HEADER_ID_TOKEN_NS = - [[NSString alloc] initWithBytes:END_HEADER_ID_TOKEN.data() - length:END_HEADER_ID_TOKEN.size() - encoding:NSUTF8StringEncoding]; diff --git a/ios/RnExecutorch/utils/llms/ConversationManager.h b/ios/RnExecutorch/utils/llms/ConversationManager.h deleted file mode 100644 index f3d3a95e1..000000000 --- a/ios/RnExecutorch/utils/llms/ConversationManager.h +++ /dev/null @@ -1,26 +0,0 @@ -#import -#import -#import -#import - -enum class ChatRole { SYSTEM, USER, ASSISTANT }; - -inline constexpr std::string_view BEGIN_OF_TEXT_TOKEN = "<|begin_of_text|>"; -inline constexpr std::string_view END_OF_TEXT_TOKEN = "<|eot_id|>"; -inline constexpr std::string_view START_HEADER_ID_TOKEN = "<|start_header_id|>"; -inline constexpr std::string_view END_HEADER_ID_TOKEN = "<|end_header_id|>"; - -@interface ConversationManager : NSObject { - NSUInteger numMessagesContextWindow; - std::string basePrompt; - std::deque messages; -} - -- (instancetype)initWithNumMessagesContextWindow:(NSUInteger)numMessages - systemPrompt:(NSString *)systemPrompt - messageHistory:(NSArray *)messageHistory; - -- (void)addResponse:(NSString *)text senderRole:(ChatRole)senderRole; -- (NSString *)getConversation; - -@end diff --git a/ios/RnExecutorch/utils/llms/ConversationManager.mm b/ios/RnExecutorch/utils/llms/ConversationManager.mm deleted file mode 100644 index 758c5a819..000000000 --- a/ios/RnExecutorch/utils/llms/ConversationManager.mm +++ /dev/null @@ -1,71 +0,0 @@ -#import "ConversationManager.h" - -@implementation ConversationManager - -- (instancetype)initWithNumMessagesContextWindow:(NSUInteger)numMessages - systemPrompt:(NSString *)systemPrompt - messageHistory:(NSArray *)messageHistory { - self = [super init]; - if (self) { - numMessagesContextWindow = numMessages; - basePrompt += std::string(BEGIN_OF_TEXT_TOKEN); - basePrompt += [self getHeaderTokenFromRole:ChatRole::SYSTEM]; - basePrompt += [systemPrompt UTF8String]; - basePrompt += std::string(END_OF_TEXT_TOKEN); - basePrompt += [self getHeaderTokenFromRole:ChatRole::USER]; - - for (const NSDictionary *message in messageHistory) { - NSString *role = message[@"role"]; - NSString *content = message[@"content"]; - if ([role isEqualToString:@"user"]) { - [self addResponse:content senderRole:ChatRole::USER]; - } else if ([role isEqualToString:@"assistant"]) { - [self addResponse:content senderRole:ChatRole::ASSISTANT]; - } - } - } - return self; -} - -- (void)addResponse:(NSString *)text senderRole:(ChatRole)senderRole { - if (messages.size() >= numMessagesContextWindow) { - messages.pop_front(); - } - - std::string formattedMessage; - if (senderRole == ChatRole::ASSISTANT) { - formattedMessage = [text UTF8String]; - formattedMessage += [self getHeaderTokenFromRole:ChatRole::USER]; - } else { - formattedMessage += [text UTF8String]; - formattedMessage += std::string(END_OF_TEXT_TOKEN); - formattedMessage += [self getHeaderTokenFromRole:ChatRole::ASSISTANT]; - } - messages.push_back(formattedMessage); -} - -- (NSString *)getConversation { - std::string prompt = basePrompt; - for (const auto &elem : messages) { - prompt += elem; - } - return [NSString stringWithUTF8String:prompt.c_str()]; -} - -- (std::string)getHeaderTokenFromRole:(ChatRole)role { - switch (role) { - case ChatRole::SYSTEM: - return std::string(START_HEADER_ID_TOKEN) + "system" + - std::string(END_HEADER_ID_TOKEN); - case ChatRole::USER: - return std::string(START_HEADER_ID_TOKEN) + "user" + - std::string(END_HEADER_ID_TOKEN); - case ChatRole::ASSISTANT: - return std::string(START_HEADER_ID_TOKEN) + "assistant" + - std::string(END_HEADER_ID_TOKEN); - default: - return ""; - } -} - -@end diff --git a/third-party/ios/ExecutorchLib/frameworks/backend_coreml.xcframework/ios-arm64/libbackend_coreml-ios-release.a b/ios/libs/libbackend_coreml-ios-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/backend_coreml.xcframework/ios-arm64/libbackend_coreml-ios-release.a rename to ios/libs/libbackend_coreml-ios-release.a diff --git a/third-party/ios/ExecutorchLib/frameworks/backend_coreml.xcframework/ios-arm64-simulator/libbackend_coreml-simulator-release.a b/ios/libs/libbackend_coreml-simulator-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/backend_coreml.xcframework/ios-arm64-simulator/libbackend_coreml-simulator-release.a rename to ios/libs/libbackend_coreml-simulator-release.a diff --git a/ios/libs/libbackend_coreml_ios.a b/ios/libs/libbackend_coreml_ios.a new file mode 100644 index 000000000..933be4c46 Binary files /dev/null and b/ios/libs/libbackend_coreml_ios.a differ diff --git a/ios/libs/libbackend_coreml_simulator.a b/ios/libs/libbackend_coreml_simulator.a new file mode 100644 index 000000000..8bf7ba5aa Binary files /dev/null and b/ios/libs/libbackend_coreml_simulator.a differ diff --git a/third-party/ios/ExecutorchLib/frameworks/backend_mps.xcframework/ios-arm64/libbackend_mps-ios-release.a b/ios/libs/libbackend_mps-ios-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/backend_mps.xcframework/ios-arm64/libbackend_mps-ios-release.a rename to ios/libs/libbackend_mps-ios-release.a diff --git a/third-party/ios/ExecutorchLib/frameworks/backend_mps.xcframework/ios-arm64-simulator/libbackend_mps-simulator-release.a b/ios/libs/libbackend_mps-simulator-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/backend_mps.xcframework/ios-arm64-simulator/libbackend_mps-simulator-release.a rename to ios/libs/libbackend_mps-simulator-release.a diff --git a/ios/libs/libbackend_mps_ios.a b/ios/libs/libbackend_mps_ios.a new file mode 100644 index 000000000..71e56e537 Binary files /dev/null and b/ios/libs/libbackend_mps_ios.a differ diff --git a/ios/libs/libbackend_mps_simulator.a b/ios/libs/libbackend_mps_simulator.a new file mode 100644 index 000000000..0b1ea2049 Binary files /dev/null and b/ios/libs/libbackend_mps_simulator.a differ diff --git a/third-party/ios/ExecutorchLib/frameworks/backend_xnnpack.xcframework/ios-arm64/libbackend_xnnpack-ios-release.a b/ios/libs/libbackend_xnnpack-ios-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/backend_xnnpack.xcframework/ios-arm64/libbackend_xnnpack-ios-release.a rename to ios/libs/libbackend_xnnpack-ios-release.a diff --git a/third-party/ios/ExecutorchLib/frameworks/backend_xnnpack.xcframework/ios-arm64-simulator/libbackend_xnnpack-simulator-release.a b/ios/libs/libbackend_xnnpack-simulator-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/backend_xnnpack.xcframework/ios-arm64-simulator/libbackend_xnnpack-simulator-release.a rename to ios/libs/libbackend_xnnpack-simulator-release.a diff --git a/ios/libs/libbackend_xnnpack_ios.a b/ios/libs/libbackend_xnnpack_ios.a new file mode 100644 index 000000000..203be4740 Binary files /dev/null and b/ios/libs/libbackend_xnnpack_ios.a differ diff --git a/ios/libs/libbackend_xnnpack_simulator.a b/ios/libs/libbackend_xnnpack_simulator.a new file mode 100644 index 000000000..0ab428983 Binary files /dev/null and b/ios/libs/libbackend_xnnpack_simulator.a differ diff --git a/third-party/ios/ExecutorchLib/frameworks/executorch.xcframework/ios-arm64/libexecutorch-ios-release.a b/ios/libs/libexecutorch-ios-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/executorch.xcframework/ios-arm64/libexecutorch-ios-release.a rename to ios/libs/libexecutorch-ios-release.a diff --git a/third-party/ios/ExecutorchLib/frameworks/executorch.xcframework/ios-arm64-simulator/libexecutorch-simulator-release.a b/ios/libs/libexecutorch-simulator-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/executorch.xcframework/ios-arm64-simulator/libexecutorch-simulator-release.a rename to ios/libs/libexecutorch-simulator-release.a diff --git a/ios/libs/libexecutorch_ios.a b/ios/libs/libexecutorch_ios.a new file mode 100644 index 000000000..757a0da5b Binary files /dev/null and b/ios/libs/libexecutorch_ios.a differ diff --git a/ios/libs/libexecutorch_simulator.a b/ios/libs/libexecutorch_simulator.a new file mode 100644 index 000000000..5c72e3dd5 Binary files /dev/null and b/ios/libs/libexecutorch_simulator.a differ diff --git a/third-party/ios/ExecutorchLib/frameworks/kernels_custom.xcframework/ios-arm64/libkernels_custom-ios-release.a b/ios/libs/libkernels_custom-ios-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/kernels_custom.xcframework/ios-arm64/libkernels_custom-ios-release.a rename to ios/libs/libkernels_custom-ios-release.a diff --git a/third-party/ios/ExecutorchLib/frameworks/kernels_custom.xcframework/ios-arm64-simulator/libkernels_custom-simulator-release.a b/ios/libs/libkernels_custom-simulator-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/kernels_custom.xcframework/ios-arm64-simulator/libkernels_custom-simulator-release.a rename to ios/libs/libkernels_custom-simulator-release.a diff --git a/ios/libs/libkernels_custom_ios.a b/ios/libs/libkernels_custom_ios.a new file mode 100644 index 000000000..19dc7d284 Binary files /dev/null and b/ios/libs/libkernels_custom_ios.a differ diff --git a/ios/libs/libkernels_custom_simulator.a b/ios/libs/libkernels_custom_simulator.a new file mode 100644 index 000000000..3f1a86769 Binary files /dev/null and b/ios/libs/libkernels_custom_simulator.a differ diff --git a/third-party/ios/ExecutorchLib/frameworks/kernels_optimized.xcframework/ios-arm64/libkernels_optimized-ios-release.a b/ios/libs/libkernels_optimized-ios-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/kernels_optimized.xcframework/ios-arm64/libkernels_optimized-ios-release.a rename to ios/libs/libkernels_optimized-ios-release.a diff --git a/third-party/ios/ExecutorchLib/frameworks/kernels_optimized.xcframework/ios-arm64-simulator/libkernels_optimized-simulator-release.a b/ios/libs/libkernels_optimized-simulator-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/kernels_optimized.xcframework/ios-arm64-simulator/libkernels_optimized-simulator-release.a rename to ios/libs/libkernels_optimized-simulator-release.a diff --git a/ios/libs/libkernels_optimized_ios.a b/ios/libs/libkernels_optimized_ios.a new file mode 100644 index 000000000..1bed14fa3 Binary files /dev/null and b/ios/libs/libkernels_optimized_ios.a differ diff --git a/ios/libs/libkernels_optimized_simulator.a b/ios/libs/libkernels_optimized_simulator.a new file mode 100644 index 000000000..a62462cc5 Binary files /dev/null and b/ios/libs/libkernels_optimized_simulator.a differ diff --git a/third-party/ios/ExecutorchLib/frameworks/kernels_portable.xcframework/ios-arm64/libkernels_portable-ios-release.a b/ios/libs/libkernels_portable-ios-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/kernels_portable.xcframework/ios-arm64/libkernels_portable-ios-release.a rename to ios/libs/libkernels_portable-ios-release.a diff --git a/third-party/ios/ExecutorchLib/frameworks/kernels_portable.xcframework/ios-arm64-simulator/libkernels_portable-simulator-release.a b/ios/libs/libkernels_portable-simulator-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/kernels_portable.xcframework/ios-arm64-simulator/libkernels_portable-simulator-release.a rename to ios/libs/libkernels_portable-simulator-release.a diff --git a/ios/libs/libkernels_portable_ios.a b/ios/libs/libkernels_portable_ios.a new file mode 100644 index 000000000..d7f46dcd2 Binary files /dev/null and b/ios/libs/libkernels_portable_ios.a differ diff --git a/ios/libs/libkernels_portable_simulator.a b/ios/libs/libkernels_portable_simulator.a new file mode 100644 index 000000000..2347a872b Binary files /dev/null and b/ios/libs/libkernels_portable_simulator.a differ diff --git a/third-party/ios/ExecutorchLib/frameworks/kernels_quantized.xcframework/ios-arm64/libkernels_quantized-ios-release.a b/ios/libs/libkernels_quantized-ios-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/kernels_quantized.xcframework/ios-arm64/libkernels_quantized-ios-release.a rename to ios/libs/libkernels_quantized-ios-release.a diff --git a/third-party/ios/ExecutorchLib/frameworks/kernels_quantized.xcframework/ios-arm64-simulator/libkernels_quantized-simulator-release.a b/ios/libs/libkernels_quantized-simulator-release.a similarity index 100% rename from third-party/ios/ExecutorchLib/frameworks/kernels_quantized.xcframework/ios-arm64-simulator/libkernels_quantized-simulator-release.a rename to ios/libs/libkernels_quantized-simulator-release.a diff --git a/ios/libs/libkernels_quantized_ios.a b/ios/libs/libkernels_quantized_ios.a new file mode 100644 index 000000000..d86749aa0 Binary files /dev/null and b/ios/libs/libkernels_quantized_ios.a differ diff --git a/ios/libs/libkernels_quantized_simulator.a b/ios/libs/libkernels_quantized_simulator.a new file mode 100644 index 000000000..2fd5b69b6 Binary files /dev/null and b/ios/libs/libkernels_quantized_simulator.a differ diff --git a/lefthook.yml b/lefthook.yml index 4c9e1913b..32b920110 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -19,3 +19,6 @@ pre-commit: format-other: glob: '*.{json,yml,watchmanconfig,md,css}' run: npx prettier --write {staged_files} && git add {staged_files} + spell-check-other: + glob: '*.{md,css}' + run: cspell {staged_files} --config .cspell.json --quiet && git add {staged_files} diff --git a/llama_export/Dockerfile b/llama_export/Dockerfile deleted file mode 100755 index d2fa629bd..000000000 --- a/llama_export/Dockerfile +++ /dev/null @@ -1,65 +0,0 @@ -FROM ubuntu:20.04 - -ENV PYTHONUNBUFFERED=1 -ENV DEBIAN_FRONTEND=noninteractive -ENV CLANG_VERSION=12 -ENV GCC_VERSION=13 - -RUN apt update && \ - apt install -y --no-install-recommends \ - build-essential \ - curl \ - git - -RUN apt update && \ - apt install -y --no-install-recommends \ - software-properties-common && \ - add-apt-repository -y ppa:deadsnakes/ppa && \ - add-apt-repository -y ppa:ubuntu-toolchain-r/test - -# Install clang -RUN apt install -y --no-install-recommends \ - clang-"$CLANG_VERSION" \ - llvm-"$CLANG_VERSION" \ - lld "libomp-${CLANG_VERSION}-dev" - -RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-"$CLANG_VERSION" 1 && \ - update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-"$CLANG_VERSION" 1 && \ - update-alternatives --install /usr/bin/cc cc /usr/bin/clang 1 && \ - update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 1 - -# Install g++ -RUN apt update && \ - apt install -y g++-"$GCC_VERSION" - -RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-"$GCC_VERSION" 1 && \ - update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-"$GCC_VERSION" 1 && \ - update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-"$GCC_VERSION" 1 - -# Install python 3.10 -RUN apt install -y --no-install-recommends \ - python3.10 \ - python3.10-venv \ - python3.10-dev \ - && apt clean \ - && rm -rf /var/lib/apt/lists/* - -RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.10 1 && \ - update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1 - -# Install ExecuTorch -RUN git clone https://github.com/pytorch/executorch.git -WORKDIR /executorch -RUN git checkout fe20be98c -RUN git submodule sync -RUN git submodule update --init - -RUN python -m venv .venv -ENV PATH="/executorch/.venv/bin:$PATH" - -RUN ./install_requirements.sh --pybind xnnpack -RUN ./examples/models/llama/install_requirements.sh - -COPY ./scripts /scripts - -ENTRYPOINT ["bash", "-c", "/scripts/export_llama.sh"] diff --git a/llama_export/build_llama_binary.sh b/llama_export/build_llama_binary.sh deleted file mode 100755 index ab7b296ab..000000000 --- a/llama_export/build_llama_binary.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/bash - -set -eu - -MODEL_PATH="" -PARAMS_PATH="" - -REPO_ROOT=$(git rev-parse --show-toplevel) -OUTPUT_PATH="$REPO_ROOT/llama_export/outputs" - -while [[ "$#" -gt 0 ]]; do - case $1 in - --model-path) - MODEL_PATH="${2%/}" - shift 2 - ;; - --params-path) - PARAMS_PATH="${2%/}" - shift 2 - ;; - --output-path) - OUTPUT_PATH="${2%/}" - shift 2 - ;; - *) - echo "Unknown option: $1" >&2 - echo "Usage: $0 --model-path --params-path [--output-path ]" - exit 1 - ;; - esac -done - -if [[ -z "$MODEL_PATH" || -z "$PARAMS_PATH" ]]; then - echo "Error: --model-path, --params-path are required." >&2 - echo "Usage: $0 --model-path --params-path [--output-path ]" - exit 1 -fi - -[ -f "$MODEL_PATH" ] || { echo "$MODEL_PATH is not a valid path! Make sure to pass a proper path to the model weights!" >&2; exit 1; } -[ -f "$PARAMS_PATH" ] || { echo "$PARAMS_PATH is not a valid path! Make sure to pass a proper path to the model parameters!" >&2; exit 1; } - -IMAGE_TAG="ghcr.io/software-mansion/react-native-executorch/executorch-llama-export:latest" -docker pull "$IMAGE_TAG" - -mkdir -p "$OUTPUT_PATH" - -# The export_llama.sh from ./scripts is ran inside the docker container -docker run -v "$MODEL_PATH:/model/consolidated.00.pth" -v "$PARAMS_PATH:/model/params.json" -v "$OUTPUT_PATH:/outputs" $IMAGE_TAG diff --git a/llama_export/scripts/export_llama.sh b/llama_export/scripts/export_llama.sh deleted file mode 100755 index 9ecb3d212..000000000 --- a/llama_export/scripts/export_llama.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -set -eu - -export_cmd="python -m examples.models.llama.export_llama \ - --checkpoint /model/consolidated.00.pth \ - --params /model/params.json \ - -kv \ - --use_sdpa_with_kv_cache \ - -X \ - -d bf16 \ - --max_seq_length 2048 \ - --metadata '{\"get_bos_id\":128000, \"get_eos_ids\":[128009, 128001]}' \ - --output_name=/outputs/llama3_2.pte" - -# The quantized versions of Llama should cointain a quantization_args key in params.json -if grep -q "quantization_args" /model/params.json; then - export_cmd="${export_cmd//-d bf16/-d fp32}" - export_cmd+=" \ - --preq_mode 8da4w_output_8da8w \ - --preq_group_size 32 \ - --xnnpack-extended-ops \ - --preq_embedding_quantize 8,0" - - if grep -q "lora_args" /model/params.json; then - export_cmd+=" \ - -qat \ - -lora 16" - else # SpinQuant - export_cmd+=" \ - --use_spin_quant native" - fi -fi - -if ! eval "$export_cmd"; then - echo "Export script failed." - echo "Please check the following potential issues:" - echo "1. Your params.json file may be for quantized weights, but the weights you're using are not quantized." - echo "2. Alternatively, if you're using quantized weights, ensure that your params.json contains the 'lora_args and quantization_args' key." - exit 1 -fi diff --git a/package.json b/package.json index fefaea870..815ab5044 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,10 @@ "android", "ios", "cpp", + "common", "*.podspec", + "third-party/include", + "third-party/android/libs", "!ios/build", "!android/build", "!android/gradle", @@ -60,22 +63,24 @@ }, "devDependencies": { "@commitlint/config-conventional": "^17.0.2", + "@cspell/eslint-plugin": "^8.18.1", "@evilmartians/lefthook": "^1.5.0", "@react-native-community/cli": "latest", - "@react-native/eslint-config": "^0.73.1", + "@react-native/eslint-config": "^0.79.0", "@release-it/conventional-changelog": "^5.0.0", "@types/jest": "^29.5.5", "@types/react": "^18.2.44", "commitlint": "^17.0.2", + "cspell": "^8.19.2", "del-cli": "^5.1.0", - "eslint": "^8.51.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.1", "jest": "^29.7.0", "metro-react-native-babel-preset": "^0.77.0", "prettier": "^3.0.3", "react": "18.3.1", - "react-native": "^0.76.1", + "react-native": "^0.76.9", "react-native-builder-bob": "^0.30.2", "turbo": "^1.10.7", "typescript": "^5.2.2" @@ -120,45 +125,6 @@ } } }, - "eslintConfig": { - "parserOptions": { - "requireConfigFile": false, - "babelOptions": { - "presets": [ - "@babel/preset-react" - ] - } - }, - "root": true, - "extends": [ - "@react-native", - "prettier" - ], - "rules": { - "react/react-in-jsx-scope": "off", - "prettier/prettier": [ - "error", - { - "quoteProps": "consistent", - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "useTabs": false - } - ] - } - }, - "eslintIgnore": [ - "node_modules/", - "lib/" - ], - "prettier": { - "quoteProps": "consistent", - "singleQuote": true, - "tabWidth": 2, - "trailingComma": "es5", - "useTabs": false - }, "babel": { "presets": [ "module:metro-react-native-babel-preset" @@ -193,9 +159,10 @@ } }, "dependencies": { + "@huggingface/jinja": "^0.3.4", "expo": "^52.0.37", - "expo-asset": "^11.0.3", - "expo-file-system": "^18.0.10", + "expo-asset": "~11.0.5", + "expo-file-system": "~18.0.12", "react-native-live-audio-stream": "^1.1.1" } } diff --git a/react-native-executorch.podspec b/react-native-executorch.podspec index 3b9606006..576086790 100644 --- a/react-native-executorch.podspec +++ b/react-native-executorch.podspec @@ -13,10 +13,68 @@ Pod::Spec.new do |s| s.platforms = { :ios => min_ios_version_supported } s.source = { :git => "https://github.com/NorbertKlockiewicz/react-native-executorch.git", :tag => "#{s.version}" } - s.ios.vendored_frameworks = "ios/ExecutorchLib.xcframework" - s.source_files = "ios/**/*.{h,m,mm}" + s.user_target_xcconfig = { + "HEADER_SEARCH_PATHS" => "$(PODS_TARGET_SRCROOT)/third-party/include", + "OTHER_LDFLAGS[sdk=iphoneos*][arch=*]" => [ + '$(inherited)', + '-framework "CoreML"', + '-framework "Accelerate"', + '-framework "Metal"', + '-framework "MetalPerformanceShaders"', + '-framework "MetalPerformanceShadersGraph"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libbackend_coreml_ios.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libbackend_mps_ios.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libbackend_xnnpack_ios.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libexecutorch_ios.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libkernels_custom_ios.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libkernels_optimized_ios.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libkernels_quantized_ios.a"' + ].join(' '), + + "OTHER_LDFLAGS[sdk=iphonesimulator*][arch=*]" => [ + '$(inherited)', + '-framework "CoreML"', + '-framework "Accelerate"', + '-framework "Metal"', + '-framework "MetalPerformanceShaders"', + '-framework "MetalPerformanceShadersGraph"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libbackend_coreml_simulator.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libbackend_mps_simulator.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libbackend_xnnpack_simulator.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libexecutorch_simulator.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libkernels_custom_simulator.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libkernels_optimized_simulator.a"', + '-force_load "$(PODS_ROOT)/../../node_modules/react-native-executorch/ios/libs/libkernels_quantized_simulator.a"' + ].join(' ') + } + + s.pod_target_xcconfig = { + "USE_HEADERMAP" => "YES", + "HEADER_SEARCH_PATHS" => + '"$(PODS_TARGET_SRCROOT)/ios" '+ + '"$(PODS_TARGET_SRCROOT)/third-party/include" '+ + '"$(PODS_TARGET_SRCROOT)/common" ', + "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", + } - s.dependency "opencv-rne", "~> 0.1.0" + s.ios.vendored_frameworks = "ios/ExecutorchLib.xcframework" + s.source_files = [ + "ios/**/*.{m,mm,h}", + "common/**/*.{cpp,c,h,hpp}", + ] + # Do not include the headers from common/rnexecutorch/jsi/ as source files. + # Xcode/Cocoapods leaks them to other pods that an app also depends on, so if + # another pod includes a header with the same name without a path by + # #include "Header.h" we get a conflict. Here, headers in jsi/ collide with + # react-native-skia. The headers are preserved by preserve_paths and + # then made available by HEADER_SEARCH_PATHS. + s.exclude_files = "common/rnexecutorch/jsi/*.{h,hpp}" + s.header_mappings_dir = "common/rnexecutorch" + s.header_dir = "rnexecutorch" + s.preserve_paths = "common/rnexecutorch/jsi/*.{h,hpp}" + + s.dependency "opencv-rne", "~> 4.11.0" + s.dependency "sqlite3" install_modules_dependencies(s) end \ No newline at end of file diff --git a/src/Error.ts b/src/Error.ts index 955b62a95..584f9b3ed 100644 --- a/src/Error.ts +++ b/src/Error.ts @@ -27,6 +27,8 @@ export enum ETError { MemoryAllocationFailed = 0x21, AccessFailed = 0x22, InvalidProgram = 0x23, + InvalidExternalData = 0x24, + OutOfResources = 0x25, // Delegate errors DelegateInvalidCompatibility = 0x30, @@ -40,8 +42,12 @@ export const getError = (e: unknown | ETError): string => { return ETError[ETError.UndefinedError] as string; } + // try to extract number from message (can contain false positives) const error = e as Error; const errorCode = parseInt(error.message, 10); - if (errorCode in ETError) return ETError[errorCode] as string; - return ETError[ETError.UndefinedError] as string; + const ETErrorMessage = ( + errorCode in ETError ? ETError[errorCode] : ETError[ETError.UndefinedError] + ) as string; + + return ETErrorMessage + error.message; }; diff --git a/src/constants/llamaDefaults.ts b/src/constants/llmDefaults.ts similarity index 55% rename from src/constants/llamaDefaults.ts rename to src/constants/llmDefaults.ts index 234b7f9e0..a4346f116 100644 --- a/src/constants/llamaDefaults.ts +++ b/src/constants/llmDefaults.ts @@ -1,9 +1,14 @@ -import { MessageType } from '../types/common'; +import { ChatConfig, MessageType } from '../types/llm'; export const DEFAULT_SYSTEM_PROMPT = "You are a knowledgeable, efficient, and direct AI assistant. Provide concise answers, focusing on the key information needed. Offer suggestions tactfully when appropriate to improve outcomes. Engage in productive collaboration with the user. Don't return too much text."; export const DEFAULT_MESSAGE_HISTORY: MessageType[] = []; -export const DEFAULT_CONTEXT_WINDOW_LENGTH = 3; -export const EOT_TOKEN = '<|eot_id|>'; +export const DEFAULT_CONTEXT_WINDOW_LENGTH = 5; + +export const DEFAULT_CHAT_CONFIG: ChatConfig = { + systemPrompt: DEFAULT_SYSTEM_PROMPT, + initialMessageHistory: DEFAULT_MESSAGE_HISTORY, + contextWindowLength: DEFAULT_CONTEXT_WINDOW_LENGTH, +}; diff --git a/src/constants/modelUrls.ts b/src/constants/modelUrls.ts index 42417576f..99d54a9ab 100644 --- a/src/constants/modelUrls.ts +++ b/src/constants/modelUrls.ts @@ -2,81 +2,115 @@ import { Platform } from 'react-native'; // LLM's export const LLAMA3_2_3B = - 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.1.0/llama-3.2-3B/original/llama3_2_3B_bf16.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.4.0/llama-3.2-3B/original/llama3_2_3B_bf16.pte'; export const LLAMA3_2_3B_QLORA = - 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.1.0/llama-3.2-3B/QLoRA/llama3_2-3B_qat_lora.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.4.0/llama-3.2-3B/QLoRA/llama3_2-3B_qat_lora.pte'; export const LLAMA3_2_3B_SPINQUANT = - 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.1.0/llama-3.2-3B/spinquant/llama3_2_3B_spinquant.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.4.0/llama-3.2-3B/spinquant/llama3_2_3B_spinquant.pte'; export const LLAMA3_2_1B = - 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.1.0/llama-3.2-1B/original/llama3_2_bf16.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.4.0/llama-3.2-1B/original/llama3_2_bf16.pte'; export const LLAMA3_2_1B_QLORA = - 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.1.0/llama-3.2-1B/QLoRA/llama3_2_qat_lora.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.4.0/llama-3.2-1B/QLoRA/llama3_2_qat_lora.pte'; export const LLAMA3_2_1B_SPINQUANT = - 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.1.0/llama-3.2-1B/spinquant/llama3_2_spinquant.pte'; -export const LLAMA3_2_1B_TOKENIZER = - 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.1.0/llama-3.2-1B/original/tokenizer.bin'; -export const LLAMA3_2_3B_TOKENIZER = - 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.1.0/llama-3.2-3B/original/tokenizer.bin'; + 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.4.0/llama-3.2-1B/spinquant/llama3_2_spinquant.pte'; +export const LLAMA3_2_TOKENIZER = + 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.4.0/tokenizer.json'; +export const LLAMA3_2_TOKENIZER_CONFIG = + 'https://huggingface.co/software-mansion/react-native-executorch-llama-3.2/resolve/v0.4.0/tokenizer_config.json'; + +export const HAMMER2_1_1_5B = + 'https://huggingface.co/software-mansion/react-native-executorch-hammer-2.1/resolve/v0.4.0/original/hammer2_1_bf16.pte'; +export const HAMMER2_1_1_5B_TOKENIZER = + 'https://huggingface.co/software-mansion/react-native-executorch-hammer-2.1/resolve/v0.4.0/tokenizer.json'; +export const HAMMER2_1_1_5B_TOKENIZER_CONFIG = + 'https://huggingface.co/software-mansion/react-native-executorch-hammer-2.1/resolve/v0.4.0/tokenizer_config.json'; + +export const SMOLLM2_1_7B = + 'https://huggingface.co/software-mansion/react-native-executorch-smolLm-2/resolve/v0.4.0/original/smolLm2_bf16.pte'; +export const SMOLLM2_1_7B_TOKENIZER = + 'https://huggingface.co/software-mansion/react-native-executorch-smolLm-2/resolve/v0.4.0/tokenizer.json'; +export const SMOLLM2_1_7B_TOKENIZER_CONFIG = + 'https://huggingface.co/software-mansion/react-native-executorch-smolLm-2/resolve/v0.4.0/tokenizer_config.json'; + +export const QWEN2_5_1_5B = + 'https://huggingface.co/software-mansion/react-native-executorch-qwen-2.5/resolve/v0.4.0/original/qwen2_5_bf16.pte'; +export const QWEN2_5_1_5B_TOKENIZER = + 'https://huggingface.co/software-mansion/react-native-executorch-qwen-2.5/resolve/v0.4.0/tokenizer.json'; +export const QWEN2_5_1_5B_TOKENIZER_CONFIG = + 'https://huggingface.co/software-mansion/react-native-executorch-qwen-2.5/resolve/v0.4.0/tokenizer_config.json'; + +export const PHI_4_MINI_4B = + 'https://huggingface.co/software-mansion/react-native-executorch-phi-4-mini/resolve/v0.4.0/original/phi-4-mini_bf16.pte'; +export const PHI_4_MINI_4B_TOKENIZER = + 'https://huggingface.co/software-mansion/react-native-executorch-phi-4-mini/resolve/v0.4.0/tokenizer.json'; +export const PHI_4_MINI_4B_TOKENIZER_CONFIG = + 'https://huggingface.co/software-mansion/react-native-executorch-phi-4-mini/resolve/v0.4.0/tokenizer_config.json'; // Classification export const EFFICIENTNET_V2_S = Platform.OS === 'ios' - ? 'https://huggingface.co/software-mansion/react-native-executorch-efficientnet-v2-s/resolve/v0.2.0/coreml/efficientnet_v2_s_coreml_all.pte' - : 'https://huggingface.co/software-mansion/react-native-executorch-efficientnet-v2-s/resolve/v0.2.0/xnnpack/efficientnet_v2_s_xnnpack.pte'; + ? 'https://huggingface.co/software-mansion/react-native-executorch-efficientnet-v2-s/resolve/v0.4.0/coreml/efficientnet_v2_s_coreml_all.pte' + : 'https://huggingface.co/software-mansion/react-native-executorch-efficientnet-v2-s/resolve/v0.4.0/xnnpack/efficientnet_v2_s_xnnpack.pte'; // Object detection export const SSDLITE_320_MOBILENET_V3_LARGE = - 'https://huggingface.co/software-mansion/react-native-executorch-ssdlite320-mobilenet-v3-large/resolve/v0.2.0/ssdlite320-mobilenetv3-large.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-ssdlite320-mobilenet-v3-large/resolve/v0.4.0/ssdlite320-mobilenetv3-large.pte'; // Style transfer export const STYLE_TRANSFER_CANDY = Platform.OS === 'ios' - ? 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-candy/resolve/v0.2.0/coreml/style_transfer_candy_coreml.pte' - : 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-candy/resolve/v0.2.0/xnnpack/style_transfer_candy_xnnpack.pte'; + ? 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-candy/resolve/v0.4.0/coreml/style_transfer_candy_coreml.pte' + : 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-candy/resolve/v0.4.0/xnnpack/style_transfer_candy_xnnpack.pte'; export const STYLE_TRANSFER_MOSAIC = Platform.OS === 'ios' - ? 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-mosaic/resolve/v0.2.0/coreml/style_transfer_mosaic_coreml.pte' - : 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-mosaic/resolve/v0.2.0/xnnpack/style_transfer_mosaic_xnnpack.pte'; + ? 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-mosaic/resolve/v0.4.0/coreml/style_transfer_mosaic_coreml.pte' + : 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-mosaic/resolve/v0.4.0/xnnpack/style_transfer_mosaic_xnnpack.pte'; export const STYLE_TRANSFER_RAIN_PRINCESS = Platform.OS === 'ios' - ? 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-rain-princess/resolve/v0.2.0/coreml/style_transfer_rain_princess_coreml.pte' - : 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-rain-princess/resolve/v0.2.0/xnnpack/style_transfer_rain_princess_xnnpack.pte'; + ? 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-rain-princess/resolve/v0.4.0/coreml/style_transfer_rain_princess_coreml.pte' + : 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-rain-princess/resolve/v0.4.0/xnnpack/style_transfer_rain_princess_xnnpack.pte'; export const STYLE_TRANSFER_UDNIE = Platform.OS === 'ios' - ? 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-udnie/resolve/v0.2.0/coreml/style_transfer_udnie_coreml.pte' - : 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-udnie/resolve/v0.2.0/xnnpack/style_transfer_udnie_xnnpack.pte'; + ? 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-udnie/resolve/v0.4.0/coreml/style_transfer_udnie_coreml.pte' + : 'https://huggingface.co/software-mansion/react-native-executorch-style-transfer-udnie/resolve/v0.4.0/xnnpack/style_transfer_udnie_xnnpack.pte'; // S2T export const MOONSHINE_TINY_DECODER = - 'https://huggingface.co/software-mansion/react-native-executorch-moonshine-tiny/resolve/v0.3.0/xnnpack/moonshine_tiny_xnnpack_decoder.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-moonshine-tiny/resolve/v0.4.0/xnnpack/moonshine_tiny_xnnpack_decoder.pte'; export const MOONSHINE_TINY_ENCODER = - 'https://huggingface.co/software-mansion/react-native-executorch-moonshine-tiny/resolve/v0.3.0/xnnpack/moonshine_tiny_xnnpack_encoder.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-moonshine-tiny/resolve/v0.4.0/xnnpack/moonshine_tiny_xnnpack_encoder.pte'; export const MOONSHINE_TOKENIZER = - 'https://huggingface.co/software-mansion/react-native-executorch-moonshine-tiny/resolve/v0.3.0/moonshine_tiny_tokenizer.json'; + 'https://huggingface.co/software-mansion/react-native-executorch-moonshine-tiny/resolve/v0.4.0/moonshine_tiny_tokenizer.json'; export const WHISPER_TOKENIZER = - 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny.en/resolve/v0.3.0/whisper_tokenizer.json'; + 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny.en/resolve/v0.4.0/whisper_tokenizer.json'; export const WHISPER_TINY_DECODER = - 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny.en/resolve/v0.3.0/xnnpack/whisper_tiny_en_xnnpack_decoder.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny.en/resolve/v0.4.0/xnnpack/whisper_tiny_en_xnnpack_decoder.pte'; export const WHISPER_TINY_ENCODER = - 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny.en/resolve/v0.3.0/xnnpack/whisper_tiny_en_xnnpack_encoder.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny.en/resolve/v0.4.0/xnnpack/whisper_tiny_en_xnnpack_encoder.pte'; +export const WHISPER_TINY_MULTILINGUAL_ENCODER = + 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny/resolve/v0.4.0/xnnpack/xnnpack_whisper_encoder.pte'; +export const WHISPER_TINY_MULTILINGUAL_DECODER = + 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny/resolve/v0.4.0/xnnpack/xnnpack_whisper_decoder.pte'; +export const WHISPER_TINY_MULTILINGUAL_TOKENIZER = + 'https://huggingface.co/software-mansion/react-native-executorch-whisper-tiny/resolve/v0.4.0/tokenizer.json'; // OCR - export const DETECTOR_CRAFT_1280 = - 'https://huggingface.co/software-mansion/react-native-executorch-detector-craft/resolve/v0.3.0/xnnpack/xnnpack_craft_1280.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-detector-craft/resolve/v0.4.0/xnnpack/xnnpack_craft_1280.pte'; export const DETECTOR_CRAFT_800 = - 'https://huggingface.co/software-mansion/react-native-executorch-detector-craft/resolve/v0.3.0/xnnpack/xnnpack_craft_800.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-detector-craft/resolve/v0.4.0/xnnpack/xnnpack_craft_800.pte'; export const DETECTOR_CRAFT_320 = - 'https://huggingface.co/software-mansion/react-native-executorch-detector-craft/resolve/v0.3.0/xnnpack/xnnpack_craft_320.pte'; + 'https://huggingface.co/software-mansion/react-native-executorch-detector-craft/resolve/v0.4.0/xnnpack/xnnpack_craft_320.pte'; + +// Image segmentation +export const DEEPLAB_V3_RESNET50 = + 'https://huggingface.co/software-mansion/react-native-executorch-deeplab-v3/resolve/v0.4.0/xnnpack/deeplabV3_xnnpack_fp32.pte'; -export const RECOGNIZER_EN_CRNN_512 = - 'https://huggingface.co/software-mansion/react-native-executorch-recognizer-crnn.en/resolve/v0.3.0/xnnpack/xnnpack_crnn_en_512.pte'; -export const RECOGNIZER_EN_CRNN_256 = - 'https://huggingface.co/software-mansion/react-native-executorch-recognizer-crnn.en/resolve/v0.3.0/xnnpack/xnnpack_crnn_en_256.pte'; -export const RECOGNIZER_EN_CRNN_128 = - 'https://huggingface.co/software-mansion/react-native-executorch-recognizer-crnn.en/resolve/v0.3.0/xnnpack/xnnpack_crnn_en_128.pte'; -export const RECOGNIZER_EN_CRNN_64 = - 'https://huggingface.co/software-mansion/react-native-executorch-recognizer-crnn.en/resolve/v0.3.0/xnnpack/xnnpack_crnn_en_64.pte'; +// Text Embeddings +export const ALL_MINILM_L6_V2 = + 'https://huggingface.co/software-mansion/react-native-executorch-all-MiniLM-L6-v2/resolve/v0.4.0/all-MiniLM-L6-v2_xnnpack.pte'; +export const ALL_MINILM_L6_V2_TOKENIZER = + 'https://huggingface.co/software-mansion/react-native-executorch-all-MiniLM-L6-v2/resolve/v0.4.0/tokenizer.json'; // Backward compatibility export const LLAMA3_2_3B_URL = LLAMA3_2_3B; @@ -85,3 +119,5 @@ export const LLAMA3_2_3B_SPINQUANT_URL = LLAMA3_2_3B_SPINQUANT; export const LLAMA3_2_1B_URL = LLAMA3_2_1B; export const LLAMA3_2_1B_QLORA_URL = LLAMA3_2_1B_QLORA; export const LLAMA3_2_1B_SPINQUANT_URL = LLAMA3_2_1B_SPINQUANT; +export const LLAMA3_2_1B_TOKENIZER = LLAMA3_2_TOKENIZER; +export const LLAMA3_2_3B_TOKENIZER = LLAMA3_2_TOKENIZER; diff --git a/src/constants/ocr/models.ts b/src/constants/ocr/models.ts new file mode 100644 index 000000000..4f198612c --- /dev/null +++ b/src/constants/ocr/models.ts @@ -0,0 +1,453 @@ +const createHFRecognizerDownloadUrl = (alphabet: string, size: number) => { + return `https://huggingface.co/software-mansion/react-native-executorch-recognizer-crnn.en/resolve/v0.4.0/xnnpack/${alphabet}/xnnpack_crnn_${alphabet}_${size}.pte`; +}; +export const RECOGNIZER_ENGLISH_CRNN_512 = createHFRecognizerDownloadUrl( + 'english', + 512 +); +export const RECOGNIZER_ENGLISH_CRNN_256 = createHFRecognizerDownloadUrl( + 'english', + 256 +); +export const RECOGNIZER_ENGLISH_CRNN_128 = createHFRecognizerDownloadUrl( + 'english', + 128 +); +export const RECOGNIZER_ENGLISH_CRNN_64 = createHFRecognizerDownloadUrl( + 'english', + 64 +); + +export const RECOGNIZER_LATIN_CRNN_512 = createHFRecognizerDownloadUrl( + 'latin', + 512 +); +export const RECOGNIZER_LATIN_CRNN_256 = createHFRecognizerDownloadUrl( + 'latin', + 256 +); +export const RECOGNIZER_LATIN_CRNN_128 = createHFRecognizerDownloadUrl( + 'latin', + 128 +); +export const RECOGNIZER_LATIN_CRNN_64 = createHFRecognizerDownloadUrl( + 'latin', + 64 +); + +export const RECOGNIZER_JAPANESE_CRNN_512 = createHFRecognizerDownloadUrl( + 'japanese', + 512 +); +export const RECOGNIZER_JAPANESE_CRNN_256 = createHFRecognizerDownloadUrl( + 'japanese', + 256 +); +export const RECOGNIZER_JAPANESE_CRNN_128 = createHFRecognizerDownloadUrl( + 'japanese', + 128 +); +export const RECOGNIZER_JAPANESE_CRNN_64 = createHFRecognizerDownloadUrl( + 'japanese', + 64 +); + +export const RECOGNIZER_KANNADA_CRNN_512 = createHFRecognizerDownloadUrl( + 'kannada', + 512 +); +export const RECOGNIZER_KANNADA_CRNN_256 = createHFRecognizerDownloadUrl( + 'kannada', + 256 +); +export const RECOGNIZER_KANNADA_CRNN_128 = createHFRecognizerDownloadUrl( + 'kannada', + 128 +); +export const RECOGNIZER_KANNADA_CRNN_64 = createHFRecognizerDownloadUrl( + 'kannada', + 64 +); + +export const RECOGNIZER_KOREAN_CRNN_512 = createHFRecognizerDownloadUrl( + 'korean', + 512 +); +export const RECOGNIZER_KOREAN_CRNN_256 = createHFRecognizerDownloadUrl( + 'korean', + 256 +); +export const RECOGNIZER_KOREAN_CRNN_128 = createHFRecognizerDownloadUrl( + 'korean', + 128 +); +export const RECOGNIZER_KOREAN_CRNN_64 = createHFRecognizerDownloadUrl( + 'korean', + 64 +); + +export const RECOGNIZER_TELUGU_CRNN_512 = createHFRecognizerDownloadUrl( + 'telugu', + 512 +); +export const RECOGNIZER_TELUGU_CRNN_256 = createHFRecognizerDownloadUrl( + 'telugu', + 256 +); +export const RECOGNIZER_TELUGU_CRNN_128 = createHFRecognizerDownloadUrl( + 'telugu', + 128 +); +export const RECOGNIZER_TELUGU_CRNN_64 = createHFRecognizerDownloadUrl( + 'telugu', + 64 +); + +export const RECOGNIZER_ZH_SIM_CRNN_512 = createHFRecognizerDownloadUrl( + 'zh-sim', + 512 +); +export const RECOGNIZER_ZH_SIM_CRNN_256 = createHFRecognizerDownloadUrl( + 'zh-sim', + 256 +); +export const RECOGNIZER_ZH_SIM_CRNN_128 = createHFRecognizerDownloadUrl( + 'zh-sim', + 128 +); +export const RECOGNIZER_ZH_SIM_CRNN_64 = createHFRecognizerDownloadUrl( + 'zh-sim', + 64 +); + +export const RECOGNIZER_CYRILLIC_CRNN_512 = createHFRecognizerDownloadUrl( + 'cyrillic', + 512 +); +export const RECOGNIZER_CYRILLIC_CRNN_256 = createHFRecognizerDownloadUrl( + 'cyrillic', + 256 +); +export const RECOGNIZER_CYRILLIC_CRNN_128 = createHFRecognizerDownloadUrl( + 'cyrillic', + 128 +); +export const RECOGNIZER_CYRILLIC_CRNN_64 = createHFRecognizerDownloadUrl( + 'cyrillic', + 64 +); + +export const RECOGNIZER_ABQ_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_ABQ_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_ABQ_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_ABQ_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_ADY_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_ADY_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_ADY_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_ADY_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_AF_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_AF_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_AF_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_AF_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_AVA_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_AVA_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_AVA_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_AVA_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_AZ_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_AZ_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_AZ_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_AZ_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_BE_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_BE_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_BE_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_BE_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_BG_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_BG_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_BG_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_BG_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_BS_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_BS_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_BS_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_BS_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_CH_SIM_CRNN_512 = RECOGNIZER_ZH_SIM_CRNN_512; +export const RECOGNIZER_CH_SIM_CRNN_256 = RECOGNIZER_ZH_SIM_CRNN_256; +export const RECOGNIZER_CH_SIM_CRNN_128 = RECOGNIZER_ZH_SIM_CRNN_128; +export const RECOGNIZER_CH_SIM_CRNN_64 = RECOGNIZER_ZH_SIM_CRNN_64; + +export const RECOGNIZER_CHE_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_CHE_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_CHE_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_CHE_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_CS_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_CS_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_CS_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_CS_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_CY_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_CY_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_CY_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_CY_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_DA_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_DA_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_DA_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_DA_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_DAR_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_DAR_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_DAR_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_DAR_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_DE_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_DE_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_DE_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_DE_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_EN_CRNN_512 = RECOGNIZER_ENGLISH_CRNN_512; +export const RECOGNIZER_EN_CRNN_256 = RECOGNIZER_ENGLISH_CRNN_256; +export const RECOGNIZER_EN_CRNN_128 = RECOGNIZER_ENGLISH_CRNN_128; +export const RECOGNIZER_EN_CRNN_64 = RECOGNIZER_ENGLISH_CRNN_64; + +export const RECOGNIZER_ES_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_ES_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_ES_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_ES_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_ET_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_ET_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_ET_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_ET_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_FR_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_FR_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_FR_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_FR_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_GA_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_GA_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_GA_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_GA_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_HR_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_HR_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_HR_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_HR_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_HU_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_HU_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_HU_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_HU_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_ID_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_ID_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_ID_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_ID_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_INH_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_INH_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_INH_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_INH_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_IC_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_IC_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_IC_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_IC_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_IT_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_IT_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_IT_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_IT_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_JA_CRNN_512 = RECOGNIZER_JAPANESE_CRNN_512; +export const RECOGNIZER_JA_CRNN_256 = RECOGNIZER_JAPANESE_CRNN_256; +export const RECOGNIZER_JA_CRNN_128 = RECOGNIZER_JAPANESE_CRNN_128; +export const RECOGNIZER_JA_CRNN_64 = RECOGNIZER_JAPANESE_CRNN_64; + +export const RECOGNIZER_KBD_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_KBD_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_KBD_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_KBD_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_KN_CRNN_512 = RECOGNIZER_KANNADA_CRNN_512; +export const RECOGNIZER_KN_CRNN_256 = RECOGNIZER_KANNADA_CRNN_256; +export const RECOGNIZER_KN_CRNN_128 = RECOGNIZER_KANNADA_CRNN_128; +export const RECOGNIZER_KN_CRNN_64 = RECOGNIZER_KANNADA_CRNN_64; + +export const RECOGNIZER_KO_CRNN_512 = RECOGNIZER_KOREAN_CRNN_512; +export const RECOGNIZER_KO_CRNN_256 = RECOGNIZER_KOREAN_CRNN_256; +export const RECOGNIZER_KO_CRNN_128 = RECOGNIZER_KOREAN_CRNN_128; +export const RECOGNIZER_KO_CRNN_64 = RECOGNIZER_KOREAN_CRNN_64; + +export const RECOGNIZER_KU_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_KU_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_KU_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_KU_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_LA_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_LA_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_LA_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_LA_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_LBE_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_LBE_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_LBE_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_LBE_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_LEZ_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_LEZ_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_LEZ_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_LEZ_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_LT_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_LT_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_LT_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_LT_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_LV_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_LV_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_LV_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_LV_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_MI_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_MI_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_MI_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_MI_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_MN_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_MN_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_MN_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_MN_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_MS_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_MS_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_MS_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_MS_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_MT_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_MT_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_MT_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_MT_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_NL_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_NL_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_NL_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_NL_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_NO_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_NO_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_NO_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_NO_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_OC_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_OC_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_OC_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_OC_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_PI_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_PI_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_PI_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_PI_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_PL_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_PL_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_PL_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_PL_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_PT_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_PT_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_PT_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_PT_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_RO_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_RO_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_RO_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_RO_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_RU_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_RU_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_RU_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_RU_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_RS_CYRILLIC_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_RS_CYRILLIC_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_RS_CYRILLIC_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_RS_CYRILLIC_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_RS_LATIN_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_RS_LATIN_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_RS_LATIN_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_RS_LATIN_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_SK_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_SK_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_SK_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_SK_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_SL_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_SL_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_SL_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_SL_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_SQ_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_SQ_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_SQ_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_SQ_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_SV_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_SV_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_SV_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_SV_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_SW_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_SW_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_SW_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_SW_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_TAB_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_TAB_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_TAB_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_TAB_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_TE_CRNN_512 = RECOGNIZER_TELUGU_CRNN_512; +export const RECOGNIZER_TE_CRNN_256 = RECOGNIZER_TELUGU_CRNN_256; +export const RECOGNIZER_TE_CRNN_128 = RECOGNIZER_TELUGU_CRNN_128; +export const RECOGNIZER_TE_CRNN_64 = RECOGNIZER_TELUGU_CRNN_64; + +export const RECOGNIZER_TJK_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_TJK_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_TJK_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_TJK_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_TL_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_TL_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_TL_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_TL_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_TR_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_TR_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_TR_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_TR_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_UK_CRNN_512 = RECOGNIZER_CYRILLIC_CRNN_512; +export const RECOGNIZER_UK_CRNN_256 = RECOGNIZER_CYRILLIC_CRNN_256; +export const RECOGNIZER_UK_CRNN_128 = RECOGNIZER_CYRILLIC_CRNN_128; +export const RECOGNIZER_UK_CRNN_64 = RECOGNIZER_CYRILLIC_CRNN_64; + +export const RECOGNIZER_UZ_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_UZ_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_UZ_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_UZ_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; + +export const RECOGNIZER_VI_CRNN_512 = RECOGNIZER_LATIN_CRNN_512; +export const RECOGNIZER_VI_CRNN_256 = RECOGNIZER_LATIN_CRNN_256; +export const RECOGNIZER_VI_CRNN_128 = RECOGNIZER_LATIN_CRNN_128; +export const RECOGNIZER_VI_CRNN_64 = RECOGNIZER_LATIN_CRNN_64; diff --git a/src/constants/ocr/symbols.ts b/src/constants/ocr/symbols.ts index 229c0613d..ccc9aa670 100644 --- a/src/constants/ocr/symbols.ts +++ b/src/constants/ocr/symbols.ts @@ -1,4 +1,148 @@ -export const symbols: { [key: string]: string } = { - en: '0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ €ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', - pl: ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ªÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀāĂ㥹ĆćČčĎďĐđĒēĖėĘęĚěĞğĨĩĪīĮįİıĶķĹĺĻļĽľŁłŃńŅņŇňŒœŔŕŘřŚśŞşŠšŤťŨũŪūŮůŲųŸŹźŻżŽžƏƠơƯưȘșȚțə̇ḌḍḶḷṀṁṂṃṄṅṆṇṬṭẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ€', +/* eslint-disable @cspell/spellchecker */ +export const alphabets = { + cyrillic: + '0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ €₽ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюяЂђЃѓЄєІіЇїЈјЉљЊњЋћЌќЎўЏџҐґҒғҚқҮүҲҳҶҷӀӏӢӣӨөӮӯ', + english: + '0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ €ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', + latin: + ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ªÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀāĂ㥹ĆćČčĎďĐđĒēĖėĘęĚěĞğĨĩĪīĮįİıĶķĹĺĻļĽľŁłŃńŅņŇňŒœŔŕŘřŚśŞşŠšŤťŨũŪūŮůŲųŸŹźŻżŽžƏƠơƯưȘșȚțə̇ḌḍḶḷṀṁṂṃṄṅṆṇṬṭẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ€', + japanese: + ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~‥…※♪、。々〈〉《》「」『』【】〔〕あぃいうぇえおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろわをんァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロワヱヲンヴヶ・ー一丁七万丈三上下不与丑世丘丙丞両並中串丸丹主乃久之乗乙九也乱乳乾亀了予争事二互五井亘亜亡交亥亨享京亭亮人仁今介仏仕他付仙代令以仮仰仲件任企伊伍伎伏休会伝伯伴伶伸似伽位低住佐佑体何余作佳使例侍侑供依価便係俊俗保信俣修俵倉個倍倒倖候借値倫倭倶偉偏健側偵偽傍傑備債傷働像僧儀優允元兄充先光克免兎児党入全八公六共兵其具典兼内円再写冠冨冬冴冶冷凍凡処凪出刀刃分切刈刑列初判別利制刷券刺刻則削前剛剣剤剥副割創劇力功加助労効勅勇勉動勘務勝勢勤勧勲包化北匠匡区医十千升午半卒卓協南単博占卯印危即卵卸厚原厨厳去参又叉及友双反収取受叡口古句只叫召可台史右叶号司各合吉同名后吏吐向君吟否吸吹吾呂呉告呑周味呼命和咲哀品哉員哲唄唐唯唱商問啓善喜喬喰営嗣嘉噌器四回因団囲図固国國園土圧在圭地坂均坊坐坪垂型垢垣埋城埜域執基埼堀堂堅堤堰報場堺塔塗塚塩塵境墓増墨墳壁壇壊士壬壮声壱売壷変夏夕外多夜夢大天太夫央失夷奇奈奉奏契奥奨女奴好如妃妙妹妻姉始姓委姥姫姿威娘婆婚婦嫌嬉子孔字存孝孟季孤学孫宅宇守安完宏宗官宙定宜宝実客宣室宥宮宰害家容宿寂寄寅密富寒寛寝察寧審寸寺対寿封専射将尊尋導小少尚尭就尺尻尼尽尾尿局居屈屋展属層屯山岐岡岩岬岱岳岸峠峡峨峯峰島峻崇崎崩嵐嵩嵯嶋嶺巌川州巡巣工左巧巨差己巳巴巻巾市布帆希帝師席帯帰帳常帽幅幌幕幡幣干平年幸幹幽幾庁広庄床序底店府度座庫庭庵康庸廃廉廣延建廻弁式弐弓引弘弟弥弦弱張強弾当形彦彩彪彫彬彰影役彼往征径待律後徒従得御復微徳徹心必忌忍志応忠快念怒怜思急性恋恐恒恩恭息恵悌悟悠患悦悪悲情惇惑惟惣想意愚愛感慈態慎慣慧慶憂憲憶懐懸戎成我戒戦戯戸戻房所扇手才打払扶承技投抗折抜抱押担拓拝拡拳拾持指挙振捕捨捷掃排掘掛採探接推掻提揖揚換揮援揺損摂摘摩摺撃撫播撮操擦擬支改攻放政故敏救敗教敢散敦敬数整敵敷文斉斎斐斑斗料斜斤断斯新方於施旅旋族旗日旦旧旨早旬旭旺昂昆昇昌明易星映春昭是昼時晃晋晩普景晴晶智暁暖暗暢暦暮暴曇曙曜曲曳更書曹曽曾替最月有朋服朔朗望朝期木未末本札朱朴杉李杏材村杖杜束条来杭東杵松板析枕林枚果枝枯架柄柊柏柑染柔柚柱柳柴査柿栃栄栖栗校株核根格桂桃案桐桑桜桝桧桶梁梅梓梢梨梯械梶棄棒棚棟森椋植椎検椿楊楓楠楢業楯極楼楽榊榎榛構槌様槙槻樋標模権横樫樹樺樽橋橘機檀櫛欠次欣欧欲欽歌歓止正此武歩歯歳歴死殊残殖段殺殻殿毅母毎毒比毛氏民気水氷永汀汁求汐汗汚江池汰汲決沈沓沖沙沢河油治沼泉泊法波泣泥注泰洋洗洞津洪洲活派流浄浅浜浦浩浪浮浴海消涌涙液涼淀淑淡深淳淵混添清済渉渋渓渕渚減渡渥温測港湊湖湧湯湾湿満源準溜溝溶滅滋滑滝漁漆漏演漢漬潔潜潟潤潮潰澄澤激濃濱瀧瀬灘火灯灰災炉炎炭点為烈烏無焦然焼煙照煮熊熟熱燃燈燕燦燭爆爪父爽爾片版牛牟牧物特犬犯状狂狐狗狩独狭狼猛猪猫献猿獄獅獣玄率玉王玖玲珍珠現球理琉琢琳琴瑚瑛瑞瑠瑳璃環瓜瓦瓶甘甚生産用甫田由甲申男町画界畑畔留畜畝畠略番異畳疾病症痛療発登白百的皆皇皮皿盆益盗盛盟監盤目盲直相省眉看県眞真眠眼着督睦瞬瞳矢知矩短石砂研砲破硫硬碑碧碩確磁磐磨磯礁示礼社祇祈祉祐祖祝神祢祥票祭禁禄禅禎福禰秀私秋科秘秦秩称移稀程税稔稗稚種稲穂積穏穴究空突窓窪立竜章童竪端競竹笑笛笠符第笹筆等筋筑筒答策箇箕算管箱箸節範築篠篤篭簡簾籍米粉粒粕粗粟粥精糖糞糠糸系紀約紅紋納純紗紘紙級素紡索紫細紳紹紺終組経結絡絢給統絵絶絹継続綜維綱網綾綿緋総緑緒線締編緩練縁縄縦縫縮績繁織繰罪置羅羊美群義羽翁習翔翠翼耀老考者耐耕耳耶聖聞聡聴職肇肉肌肝股肥肩育肺背胞胡胤胸能脂脇脈脚脱脳腐腕腫腰腸腹膜膳臣臥臨自臭至致臼興舌舎舘舛舜舞舟航般船艦良色艶芋芙芝芥芦花芳芸芹芽苅苑苔苗若苦苫英茂茄茅茉茜茨茶草荒荘荷荻莉菅菊菌菓菖菜華菱萌萩萱落葉葛葦葵蒔蒲蒸蒼蓋蓑蓬蓮蔦蔭蔵蕗薄薩薫薬薮藁藍藤藻蘇蘭虎虚虫虹虻蚊蛇蛍蛭蜂蜜蝦蝶融螺蟹蟻血衆行術街衛衝衡衣表袋袖被裁裂装裏裕補裟裸製複西要覆覇見規視覚覧親観角解触言計訓託記訪設許訳訴診証評詞詠試詩詰話誉誌認誓誘語誠誤説読課調談請諏論諭諸謙講謝謹識警議譲護讃谷豆豊豚象豪貝貞負財貢貧貨販貫責貯貴買貸費賀賃資賞賢質赤赦走起超越足跡路跳踏身車軌軍軒軟転軸軽載輔輝輪輸辛辞辰農辺辻込迎近返迦迫述迷追退送逃逆透途通速造逢連週進逸遅遊運過道達違遠遣遥適選遺遼避邑那邦邪郁郎郡部郭郵郷都配酒酔酢酸醍醐采釈里重野量金釘釜針釣鈴鉄鉛鉢鉱鉾銀銃銅銘銭鋭鋼錦録鍋鍛鍬鍵鎌鎖鎮鏡鐘鑑長門閉開閑間関閣闇闘阪防阿陀附降限院陣除陰陳陵陶陸険陽隅隆隈隊階随隔際障隠隣隼雀雁雄雅集雑雛離難雨雪雲零雷電震霊霜霞霧露青靖静非面革鞍鞠韓音響頂頃項順須預頓領頭頼題額顔顕願類風飛食飯飲飼飽飾餅養館首香馨馬駄駅駆駐駒駿騎験骨高髪鬼魁魂魅魔魚鮎鮫鮮鯉鯨鳥鳩鳳鳴鴨鴻鵜鶏鶴鷲鷹鷺鹿麓麗麦麻麿黄黒黙鼓鼠鼻齢龍*', + zh_sim: + ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~。〈〉《》「」『』一丁七万丈三上下不与丐丑专且丕世丘丙业丛东丝丞丢两严丧个丫中丰串临丸丹为主丽举乃久么义之乌乍乎乏乐乒乓乔乖乘乙乜九乞也习乡书乩买乱乳乾了予争事二亍于亏云互亓五井亘亚些亟亡亢交亥亦产亨亩享京亭亮亲亳亵人亿什仁仂仃仄仅仆仇仉今介仍从仑仓仔仕他仗付仙仞仟仡代令以仨仪仫们仰仲仳仵件价任份仿企伉伊伍伎伏伐休众优伙会伛伞伟传伢伤伦伧伪伫伯估伴伶伸伺似伽佃但位低住佐佑体何佗佘余佚佛作佝佞佟你佣佤佥佩佬佯佰佳佴佶佻佼佾使侃侄侈侉例侍侏侑侔侗供依侠侣侥侦侧侨侩侪侬侮侯侵便促俄俅俊俎俏俐俑俗俘俚俜保俞俟信俣俦俨俩俪俭修俯俱俳俸俺俾倌倍倏倒倔倘候倚倜借倡倥倦倨倩倪倬倭债值倾偃假偈偌偎偏偕做停健偬偶偷偻偾偿傀傅傈傍傣傥傧储傩催傲傻像僖僚僦僧僬僭僮僳僵僻儆儇儋儒儡儿兀允元兄充兆先光克免兑兔兕兖党兜兢入全八公六兮兰共关兴兵其具典兹养兼兽冀冁内冈冉册再冒冕冗写军农冠冢冤冥冬冯冰冱冲决况冶冷冻冼冽净凄准凇凉凋凌减凑凛凝几凡凤凫凭凯凰凳凶凸凹出击凼函凿刀刁刃分切刈刊刍刎刑划刖列刘则刚创初删判刨利别刭刮到刳制刷券刹刺刻刽刿剀剁剂剃削剌前剐剑剔剖剜剞剡剥剧剩剪副割剽剿劁劂劈劐劓力劝办功加务劢劣动助努劫劬劭励劲劳劾势勃勇勉勋勐勒勖勘募勤勰勺勾勿匀包匆匈匍匏匐匕化北匙匝匠匡匣匦匪匮匹区医匾匿十千卅升午卉半华协卑卒卓单卖南博卜卞卟占卡卢卣卤卦卧卫卮卯印危即却卵卷卸卺卿厂厄厅历厉压厌厍厕厘厚厝原厢厣厥厦厨厩厮去县叁参又叉及友双反发叔取受变叙叛叟叠口古句另叨叩只叫召叭叮可台叱史右叵叶号司叹叻叼叽吁吃各吆合吉吊同名后吏吐向吒吓吕吗君吝吞吟吠吡吣否吧吨吩含听吭吮启吱吲吴吵吸吹吻吼吾呀呃呆呈告呋呐呓呔呕呖呗员呙呛呜呢呤呦周呱呲味呵呶呷呸呻呼命咀咂咄咆咋和咎咏咐咒咔咕咖咙咚咛咝咣咤咦咧咨咩咪咫咬咭咯咱咳咴咸咻咽咿哀品哂哄哆哇哈哉哌响哎哏哐哑哓哔哕哗哙哚哝哞哟哥哦哧哨哩哪哭哮哲哳哺哼哽哿唁唆唇唉唏唐唑唔唛唠唢唣唤唧唪唬售唯唱唳唷唼唾唿啁啃啄商啉啊啐啕啖啜啡啤啥啦啧啪啬啭啮啵啶啷啸啻啼啾喀喁喂喃善喇喈喉喊喋喏喑喔喘喙喜喝喟喧喱喳喵喷喹喻喽喾嗄嗅嗉嗌嗍嗑嗒嗓嗔嗖嗜嗝嗟嗡嗣嗤嗥嗦嗨嗪嗫嗬嗯嗲嗳嗵嗷嗽嗾嘀嘁嘈嘉嘌嘎嘏嘘嘛嘞嘟嘣嘤嘧嘬嘭嘱嘲嘴嘶嘹嘻嘿噌噍噎噔噗噙噜噢噤器噩噪噫噬噱噶噻噼嚅嚆嚎嚏嚓嚣嚯嚷嚼囊囔囚四囝回囟因囡团囤囫园困囱围囵囹固国图囿圃圄圆圈圉圊圜土圣在圩圪圬圭圮圯地圳圹场圻圾址坂均坊坌坍坎坏坐坑块坚坛坜坝坞坟坠坡坤坦坨坩坪坫坭坯坳坷坻坼垂垃垄垅垆型垌垒垓垛垠垡垢垣垤垦垧垩垫垭垮垲垸埂埃埋城埏埒埔埕埘埙埚埝域埠埤埭埯埴埸培基埽堂堆堇堋堍堑堕堙堞堠堡堤堪堰堵塄塌塍塑塔塘塞塥填塬塾墀墁境墅墉墒墓墙增墟墨墩墼壁壅壑壕壤士壬壮声壳壶壹处备复夏夔夕外夙多夜够夤夥大天太夫夭央夯失头夷夸夹夺夼奁奂奄奇奈奉奋奎奏契奔奕奖套奘奚奠奢奥女奴奶奸她好妁如妃妄妆妇妈妊妍妒妓妖妗妙妞妣妤妥妨妩妪妫妮妯妲妹妻妾姆姊始姐姑姒姓委姗姘姚姜姝姣姥姨姬姹姻姿威娃娄娅娆娇娈娉娌娑娓娘娜娟娠娣娥娩娱娲娴娶娼婀婆婉婊婕婚婢婧婪婴婵婶婷婺婿媒媚媛媪媲媳媵媸媾嫁嫂嫉嫌嫒嫔嫖嫘嫜嫠嫡嫣嫦嫩嫫嫱嬉嬖嬗嬴嬷孀子孑孓孔孕字存孙孚孛孜孝孟孢季孤孥学孩孪孬孰孱孳孵孺孽宁它宄宅宇守安宋完宏宓宕宗官宙定宛宜宝实宠审客宣室宥宦宪宫宰害宴宵家宸容宽宾宿寂寄寅密寇富寐寒寓寝寞察寡寤寥寨寮寰寸对寺寻导寿封射将尉尊小少尔尕尖尘尚尜尝尤尥尧尬就尴尸尹尺尻尼尽尾尿局屁层居屈屉届屋屎屏屐屑展屙属屠屡屣履屦屯山屹屺屿岁岂岈岌岍岐岑岔岖岗岘岙岚岛岢岣岩岫岬岭岱岳岵岷岸岿峁峄峋峒峙峡峤峥峦峨峪峭峰峻崂崃崆崇崎崔崖崛崞崤崦崧崩崭崮崴崽嵇嵊嵋嵌嵘嵛嵝嵩嵫嵬嵯嵴嶂嶙嶝嶷巅巍川州巡巢工左巧巨巩巫差巯己已巳巴巷巽巾币市布帅帆师希帏帐帑帔帕帖帘帙帚帛帜帝带帧席帮帱帷常帻帼帽幂幄幅幌幔幕幛幞幡幢干平年并幸幺幻幼幽广庀庄庆庇床庋序庐庑库应底庖店庙庚府庞废庠庥度座庭庳庵庶康庸庹庾廉廊廒廓廖廛廨廪延廷建廿开弁异弃弄弈弊弋式弑弓引弗弘弛弟张弥弦弧弩弭弯弱弹强弼彀归当录彖彗彘彝形彤彦彩彪彬彭彰影彳彷役彻彼往征徂径待徇很徉徊律後徐徒徕得徘徙徜御徨循徭微徵德徼徽心必忆忉忌忍忏忐忑忒忖志忘忙忝忠忡忤忧忪快忭忮忱念忸忻忽忾忿怀态怂怃怄怅怆怊怍怎怏怒怔怕怖怙怛怜思怠怡急怦性怨怩怪怫怯怵总怼怿恁恂恃恋恍恐恒恕恙恚恝恢恣恤恧恨恩恪恫恬恭息恰恳恶恸恹恺恻恼恽恿悃悄悉悌悍悒悔悖悚悛悝悟悠患悦您悫悬悭悯悱悲悴悸悻悼情惆惊惋惑惕惘惚惜惝惟惠惦惧惨惩惫惬惭惮惯惰想惴惶惹惺愀愁愆愈愉愍愎意愕愚感愠愣愤愦愧愫愿慈慊慌慎慑慕慝慢慧慨慰慵慷憋憎憔憝憧憨憩憬憷憾懂懈懊懋懑懒懦懵懿戆戈戊戋戌戍戎戏成我戒戕或戗战戚戛戟戡戢戥截戬戮戳戴户戽戾房所扁扃扇扈扉手扌才扎扑扒打扔托扛扣扦执扩扪扫扬扭扮扯扰扳扶批扼找承技抄抉把抑抒抓投抖抗折抚抛抟抠抡抢护报抨披抬抱抵抹抻押抽抿拂拄担拆拇拈拉拊拌拍拎拐拒拓拔拖拗拘拙拚招拜拟拢拣拥拦拧拨择括拭拮拯拱拳拴拶拷拼拽拾拿持挂指挈按挎挑挖挚挛挝挞挟挠挡挢挣挤挥挨挪挫振挲挹挺挽捂捃捅捆捉捋捌捍捎捏捐捕捞损捡换捣捧捩捭据捱捶捷捺捻掀掂掇授掉掊掌掎掏掐排掖掘掠探掣接控推掩措掬掭掮掰掳掴掷掸掺掼掾揄揆揉揍揎描提插揖揞揠握揣揩揪揭援揶揸揽揿搀搁搂搅搋搌搏搐搓搔搛搜搞搠搡搦搪搬搭搴携搽摁摄摅摆摇摈摊摒摔摘摞摧摩摭摸摹摺撂撄撅撇撑撒撕撖撙撞撤撩撬播撮撰撵撷撸撺撼擀擂擅操擎擐擒擘擞擢擤擦攀攉攒攘攥攫攮支收攸改攻放政故效敉敌敏救敕敖教敛敝敞敢散敦敫敬数敲整敷文斋斌斐斑斓斗料斛斜斟斡斤斥斧斩斫断斯新方於施旁旃旄旅旆旋旌旎族旒旖旗无既日旦旧旨早旬旭旮旯旰旱时旷旺昀昂昃昆昊昌明昏易昔昕昙昝星映春昧昨昭是昱昴昵昶昼显晁晃晋晌晏晒晓晔晕晖晗晚晟晡晤晦晨普景晰晴晶晷智晾暂暄暇暌暑暖暗暝暧暨暮暴暹暾曙曛曜曝曦曩曰曲曳更曷曹曼曾替最月有朊朋服朐朔朕朗望朝期朦木未末本札术朱朴朵机朽杀杂权杆杈杉杌李杏材村杓杖杜杞束杠条来杨杪杭杯杰杲杳杵杷杼松板极构枇枉枋析枕林枘枚果枝枞枢枣枥枧枨枪枫枭枯枰枳枵架枷枸柁柃柄柏某柑柒染柔柘柙柚柜柝柞柠柢查柩柬柯柰柱柳柴柽柿栀栅标栈栉栊栋栌栎栏树栓栖栗栝校栩株栲栳样核根格栽栾桀桁桂桃桄桅框案桉桊桌桎桐桑桓桔桕桠桡桢档桤桥桦桧桨桩桫桴桶桷梁梃梅梆梏梓梗梢梦梧梨梭梯械梳梵检棂棉棋棍棒棕棘棚棠棣森棰棱棵棹棺棼椁椅椋植椎椐椒椟椠椤椭椰椴椹椽椿楂楔楗楚楝楞楠楣楦楫楮楷楸楹楼榀概榄榆榇榈榉榍榔榕榛榜榧榨榫榭榱榴榷榻槁槊槌槎槐槔槛槟槠槭槲槽槿樊樗樘樟模樨横樯樱樵樽樾橄橇橐橘橙橛橡橥橱橹橼檀檄檎檐檑檗檠檩檫檬欠次欢欣欤欧欲欷欺款歃歆歇歉歌歙止正此步武歧歪歹死歼殁殂殃殄殆殇殉殊残殍殒殓殖殚殛殡殪殳殴段殷殿毁毂毅毋母每毒毓比毕毖毗毙毛毡毪毫毯毳毵毹毽氅氆氇氍氏氐民氓气氕氖氘氙氚氛氟氡氢氤氦氧氨氩氪氮氯氰氲水永氽汀汁求汆汇汉汊汐汔汕汗汛汜汝汞江池污汤汨汩汪汰汲汴汶汹汽汾沁沂沃沅沆沈沉沌沏沐沓沔沙沛沟没沣沤沥沦沧沩沪沫沭沮沱河沸油治沼沽沾沿泄泅泉泊泌泐泓泔法泖泗泛泞泠泡波泣泥注泪泫泮泯泰泱泳泵泷泸泺泻泼泽泾洁洄洇洋洌洎洒洗洙洚洛洞津洧洪洫洮洱洲洳洵洹活洼洽派流浃浅浆浇浈浊测浍济浏浑浒浓浔浙浚浜浞浠浣浦浩浪浮浯浴海浸浼涂涅消涉涌涎涑涓涔涕涛涝涞涟涠涡涣涤润涧涨涩涪涫涮涯液涵涸涿淀淄淅淆淇淋淌淑淖淘淙淝淞淠淡淤淦淫淬淮深淳混淹添淼清渊渌渍渎渐渑渔渖渗渚渝渠渡渣渤渥温渫渭港渲渴游渺湃湄湍湎湔湖湘湛湟湫湮湾湿溃溅溆溉溏源溘溜溟溢溥溧溪溯溱溲溴溶溷溺溻溽滁滂滇滋滏滑滓滔滕滗滚滞滟滠满滢滤滥滦滨滩滴滹漂漆漉漏漓演漕漠漤漩漪漫漭漯漱漳漶漾潆潇潋潍潘潜潞潢潦潭潮潲潴潸潺潼澄澈澉澌澍澎澜澡澧澳澶澹激濂濉濑濒濞濠濡濮濯瀑瀚瀛瀣瀵瀹灌灏灞火灭灯灰灵灶灸灼灾灿炀炅炉炊炎炒炔炕炖炙炜炝炫炬炭炮炯炱炳炷炸点炻炼炽烀烁烂烃烈烊烘烙烛烟烤烦烧烨烩烫烬热烯烷烹烽焉焊焐焓焕焖焘焙焚焦焯焰焱然煅煊煌煎煜煞煤煦照煨煮煲煳煸煺煽熄熊熏熔熘熙熟熠熨熬熵熹燃燎燔燕燠燥燧燮燹爆爝爨爪爬爰爱爵父爷爸爹爻爽爿片版牌牍牒牖牙牛牝牟牡牢牦牧物牮牯牲牵特牺牾犀犁犄犊犋犍犏犒犟犬犯犰犴状犷犸犹狁狂狃狄狈狍狎狐狒狗狙狞狠狡狨狩独狭狮狯狰狱狲狳狴狷狸狺狻狼猁猃猊猎猕猖猗猛猜猝猞猡猢猥猩猪猫猬献猱猴猷猸猹猾猿獍獐獒獗獠獬獭獯獾玄率玉王玎玑玖玛玢玩玫玮环现玲玳玷玺玻珀珂珈珉珊珍珏珐珑珙珞珠珥珧珩班珲球琅理琉琏琐琚琛琢琥琦琨琪琬琮琰琳琴琵琶琼瑁瑕瑗瑙瑚瑛瑜瑞瑟瑭瑰瑶瑾璀璁璃璇璋璎璐璜璞璧璨璩瓒瓜瓞瓠瓢瓣瓤瓦瓮瓯瓴瓶瓷瓿甄甏甑甓甘甙甚甜生甥用甩甫甬甭田由甲申电男甸町画甾畀畅畈畋界畎畏畔留畚畛畜略畦番畲畴畸畹畿疃疆疋疏疑疔疖疗疙疚疝疟疠疡疣疤疥疫疬疮疯疰疱疲疳疴疵疸疹疼疽疾痂痃痄病症痈痉痊痍痒痔痕痘痛痞痢痣痤痦痧痨痪痫痰痱痴痹痼痿瘀瘁瘃瘅瘊瘌瘐瘗瘘瘙瘛瘟瘠瘢瘤瘥瘦瘩瘪瘫瘭瘰瘳瘴瘵瘸瘼瘾瘿癀癃癌癍癔癖癜癞癣癫癯癸登白百皂的皆皇皈皋皎皑皓皖皙皤皮皱皲皴皿盂盅盆盈益盍盎盏盐监盒盔盖盗盘盛盟盥目盯盱盲直相盹盼盾省眄眇眈眉看眍眙眚真眠眢眦眨眩眭眯眵眶眷眸眺眼着睁睃睇睐睑睚睛睡睢督睥睦睨睫睬睹睽睾睿瞀瞄瞅瞌瞍瞎瞑瞒瞟瞠瞢瞥瞧瞩瞪瞬瞰瞳瞵瞻瞽瞿矍矗矛矜矢矣知矧矩矫矬短矮石矶矸矽矾矿砀码砂砉砌砍砑砒研砖砗砘砚砜砝砟砣砥砧砭砰破砷砸砹砺砻砼砾础硅硇硌硎硐硒硕硖硗硝硪硫硬硭确硷硼碇碉碌碍碎碑碓碗碘碚碛碜碟碡碣碥碧碰碱碲碳碴碹碾磁磅磉磊磋磐磔磕磙磨磬磲磴磷磺礁礅礓礞礤礴示礻礼社祀祁祆祈祉祓祖祗祚祛祜祝神祟祠祢祥祧票祭祯祷祸祺禀禁禄禅禊福禚禧禳禹禺离禽禾秀私秃秆秉秋种科秒秕秘租秣秤秦秧秩秫秭积称秸移秽稀稂稆程稍税稔稗稚稞稠稣稳稷稻稼稽稿穆穑穗穰穴究穷穸穹空穿窀突窃窄窈窍窑窒窕窖窗窘窜窝窟窠窥窦窨窬窭窳窿立竖站竞竟章竣童竦竭端竹竺竽竿笃笄笆笈笊笋笏笑笔笕笙笛笞笠笤笥符笨笪笫第笮笱笳笸笺笼笾筅筇等筋筌筏筐筑筒答策筘筚筛筝筠筢筮筱筲筵筷筹筻签简箅箍箐箔箕算箜管箢箦箧箨箩箪箫箬箭箱箴箸篁篆篇篌篑篓篙篚篝篡篥篦篪篮篱篷篼篾簇簋簌簏簖簟簦簧簪簸簿籀籁籍米籴类籼籽粉粑粒粕粗粘粜粝粞粟粤粥粪粮粱粲粳粹粼粽精糁糅糇糈糊糌糍糕糖糗糙糜糟糠糨糯系紊素索紧紫累絮絷綦綮縻繁繇纂纛纠纡红纣纤纥约级纨纩纪纫纬纭纯纰纱纲纳纵纶纷纸纹纺纽纾线绀绁绂练组绅细织终绉绊绋绌绍绎经绐绑绒结绔绕绗绘给绚绛络绝绞统绠绡绢绣绥绦继绨绩绪绫续绮绯绰绲绳维绵绶绷绸绺绻综绽绾绿缀缁缂缃缄缅缆缇缈缉缌缎缏缑缒缓缔缕编缗缘缙缚缛缜缝缟缠缡缢缣缤缥缦缧缨缩缪缫缬缭缮缯缰缱缲缳缴缵缶缸缺罂罄罅罐网罔罕罗罘罚罟罡罢罨罩罪置罱署罴罹罾羁羊羌美羔羚羝羞羟羡群羧羯羰羲羸羹羼羽羿翁翅翊翌翎翔翕翘翟翠翡翥翦翩翮翰翱翳翻翼耀老考耄者耆耋而耍耐耒耔耕耖耗耘耙耜耠耢耥耦耧耨耩耪耱耳耵耶耷耸耻耽耿聂聃聆聊聋职聍聒联聘聚聩聪聱聿肃肄肆肇肉肋肌肓肖肘肚肛肝肟肠股肢肤肥肩肪肫肭肮肯肱育肴肷肺肼肽肾肿胀胁胂胃胄胆背胍胎胖胗胙胚胛胜胝胞胡胤胥胧胨胩胪胫胬胭胯胰胱胲胳胴胶胸胺胼能脂脆脉脊脍脎脏脐脑脒脓脔脖脘脚脞脬脯脱脲脶脸脾腆腈腊腋腌腐腑腓腔腕腙腚腠腥腧腩腭腮腰腱腴腹腺腻腼腽腾腿膀膂膈膊膏膑膘膛膜膝膦膨膪膳膺膻臀臁臂臃臆臊臌臣臧自臬臭至致臻臼臾舀舁舂舄舅舆舌舍舐舒舔舛舜舞舟舡舢舣舨航舫般舰舱舳舴舵舶舷舸船舻舾艄艇艋艘艚艟艨艮良艰色艳艴艺艽艾艿节芄芈芊芋芍芎芏芑芒芗芘芙芜芝芟芡芥芦芨芩芪芫芬芭芮芯芰花芳芴芷芸芹芽芾苁苄苇苈苊苋苌苍苎苏苑苒苓苔苕苗苘苛苜苞苟苠苡苣苤若苦苫苯英苴苷苹苻茁茂范茄茅茆茈茉茌茎茏茑茔茕茗茚茛茜茧茨茫茬茭茯茱茳茴茵茶茸茹茼荀荃荆荇草荏荐荑荒荔荚荛荜荞荟荠荡荣荤荥荦荧荨荩荪荫荬荭药荷荸荻荼荽莅莆莉莎莒莓莘莛莜莞莠莨莩莪莫莰莱莲莳莴莶获莸莹莺莼莽菀菁菅菇菊菌菏菔菖菘菜菝菟菠菡菥菩菪菰菱菲菹菽萁萃萄萋萌萍萎萏萑萘萜萝萤营萦萧萨萱萸萼落葆葑著葚葛葜葡董葩葫葬葭葱葳葵葶葸葺蒂蒇蒈蒉蒋蒌蒎蒗蒙蒜蒡蒯蒲蒴蒸蒹蒺蒽蒿蓁蓄蓉蓊蓍蓐蓑蓓蓖蓝蓟蓠蓣蓥蓦蓬蓰蓼蓿蔌蔑蔓蔗蔚蔟蔡蔫蔬蔷蔸蔹蔺蔻蔼蔽蕃蕈蕉蕊蕖蕙蕞蕤蕨蕲蕴蕹蕺蕻蕾薄薅薇薏薛薜薤薨薪薮薯薰薷薹藁藉藏藐藓藕藜藤藩藻藿蘅蘑蘖蘧蘩蘸蘼虎虏虐虑虔虚虞虢虫虬虮虱虹虺虻虼虽虾虿蚀蚁蚂蚊蚋蚌蚍蚓蚕蚜蚝蚣蚤蚧蚨蚩蚬蚯蚰蚱蚴蚶蚺蛀蛄蛆蛇蛉蛊蛋蛎蛏蛐蛑蛔蛘蛙蛛蛞蛟蛤蛩蛭蛮蛰蛱蛲蛳蛴蛸蛹蛾蜀蜂蜃蜇蜈蜉蜊蜍蜒蜓蜕蜗蜘蜚蜜蜞蜡蜢蜣蜥蜩蜮蜱蜴蜷蜻蜾蜿蝇蝈蝉蝌蝎蝓蝗蝙蝠蝣蝤蝥蝮蝰蝴蝶蝻蝼蝽蝾螂螃螅螈螋融螗螟螨螫螬螭螯螳螵螺螽蟀蟆蟊蟋蟑蟒蟛蟠蟥蟪蟮蟹蟾蠃蠊蠓蠕蠖蠡蠢蠲蠹蠼血衄衅行衍衔街衙衡衢衣补表衩衫衬衮衰衲衷衽衾衿袁袂袄袅袈袋袍袒袖袜袢袤被袭袱袼裁裂装裆裉裎裒裔裕裘裙裟裢裣裤裥裨裰裱裳裴裸裹裼裾褂褊褐褒褓褙褚褛褡褥褪褫褰褴褶襁襄襞襟襦襻西要覃覆见观规觅视觇览觉觊觋觌觎觏觐觑角觖觚觜觞解觥触觫觯觳言訇訾詈詹誉誊誓謇警譬计订讣认讥讦讧讨让讪讫训议讯记讲讳讴讵讶讷许讹论讼讽设访诀证诂诃评诅识诈诉诊诋诌词诎诏译诒诓诔试诖诗诘诙诚诛诜话诞诟诠诡询诣诤该详诧诨诩诫诬语诮误诰诱诲诳说诵请诸诹诺读诼诽课诿谀谁谂调谄谅谆谇谈谊谋谌谍谎谏谐谑谒谓谔谕谖谗谙谚谛谜谝谟谠谡谢谣谤谥谦谧谨谩谪谫谬谭谮谯谰谱谲谳谴谵谶谷豁豆豇豉豌豕豚象豢豪豫豳豸豹豺貂貅貉貊貌貔貘贝贞负贡财责贤败账货质贩贪贫贬购贮贯贰贱贲贳贴贵贶贷贸费贺贻贼贽贾贿赀赁赂赃资赅赆赇赈赉赊赋赌赍赎赏赐赓赔赖赘赙赚赛赜赝赞赠赡赢赣赤赦赧赫赭走赳赴赵赶起趁趄超越趋趑趔趟趣趱足趴趵趸趺趼趾趿跃跄跆跋跌跎跏跑跖跗跚跛距跞跟跣跤跨跪跬路跳践跷跸跹跺跻跽踅踉踊踌踏踔踝踞踟踢踣踩踪踬踮踯踱踵踹踺踽蹀蹁蹂蹄蹇蹈蹉蹊蹋蹑蹒蹙蹦蹩蹬蹭蹯蹰蹲蹴蹶蹼蹿躁躅躇躏躐躔躜躞身躬躯躲躺车轧轨轩轫转轭轮软轰轱轲轳轴轵轶轷轸轺轻轼载轾轿辁辂较辄辅辆辇辈辉辊辋辍辎辏辐辑输辔辕辖辗辘辙辚辛辜辞辟辣辨辩辫辰辱边辽达迁迂迄迅过迈迎运近迓返迕还这进远违连迟迢迤迥迦迨迩迪迫迭迮述迷迸迹追退送适逃逄逅逆选逊逋逍透逐逑递途逖逗通逛逝逞速造逡逢逦逭逮逯逵逶逸逻逼逾遁遂遄遇遍遏遐遑遒道遗遘遛遢遣遥遨遭遮遴遵遽避邀邂邃邈邋邑邓邕邗邙邛邝邡邢那邦邪邬邮邯邰邱邳邴邵邶邸邹邺邻邾郁郄郅郇郊郎郏郐郑郓郗郛郜郝郡郢郦郧部郫郭郯郴郸都郾鄂鄄鄙鄞鄢鄣鄯鄱鄹酃酆酉酊酋酌配酎酏酐酒酗酚酝酞酡酢酣酤酥酩酪酬酮酯酰酱酲酴酵酶酷酸酹酽酾酿醅醇醉醋醌醍醐醑醒醚醛醢醪醭醮醯醴醵醺采釉释里重野量金釜鉴銎銮鋈錾鍪鎏鏊鏖鐾鑫钆钇针钉钊钋钌钍钎钏钐钒钓钔钕钗钙钚钛钜钝钞钟钠钡钢钣钤钥钦钧钨钩钪钫钬钭钮钯钰钱钲钳钴钵钷钹钺钻钼钽钾钿铀铁铂铃铄铅铆铈铉铊铋铌铍铎铐铑铒铕铗铘铙铛铜铝铞铟铠铡铢铣铤铥铧铨铩铪铫铬铭铮铯铰铱铲铳铴铵银铷铸铹铺铼铽链铿销锁锂锃锄锅锆锇锈锉锊锋锌锎锏锐锑锒锓锔锕锖锗锘错锚锛锝锞锟锡锢锣锤锥锦锨锩锪锫锬锭键锯锰锱锲锴锵锶锷锸锹锺锻锾锿镀镁镂镄镅镆镇镉镊镌镍镎镏镐镑镒镓镔镖镗镘镛镜镝镞镡镢镣镤镥镦镧镨镩镪镫镬镭镯镰镱镲镳镶长门闩闪闫闭问闯闰闱闲闳间闵闶闷闸闹闺闻闼闽闾阀阁阂阃阄阅阆阈阉阊阋阌阍阎阏阐阑阒阔阕阖阗阙阚阜队阡阢阪阮阱防阳阴阵阶阻阼阽阿陀陂附际陆陇陈陉陋陌降限陔陕陛陟陡院除陧陨险陪陬陲陴陵陶陷隅隆隈隋隍随隐隔隗隘隙障隧隰隳隶隼隽难雀雁雄雅集雇雉雌雍雎雏雒雕雠雨雩雪雯雳零雷雹雾需霁霄霆震霈霉霍霎霏霓霖霜霞霪霭霰露霸霹霾青靓靖静靛非靠靡面靥革靳靴靶靼鞅鞋鞍鞑鞒鞘鞠鞣鞫鞭鞯鞲鞴韦韧韩韪韫韬韭音韵韶页顶顷顸项顺须顼顽顾顿颀颁颂颃预颅领颇颈颉颊颌颍颏颐频颓颔颖颗题颚颛颜额颞颟颠颡颢颤颥颦颧风飑飒飓飕飘飙飚飞食飧飨餍餐餮饔饕饥饧饨饩饪饫饬饭饮饯饰饱饲饴饵饶饷饺饼饽饿馀馁馄馅馆馇馈馊馋馍馏馐馑馒馓馔馕首馗馘香馥馨马驭驮驯驰驱驳驴驵驶驷驸驹驺驻驼驽驾驿骀骁骂骄骅骆骇骈骊骋验骏骐骑骒骓骖骗骘骚骛骜骝骞骟骠骡骢骣骤骥骧骨骰骶骷骸骺骼髀髁髂髅髋髌髑髓高髡髦髫髭髯髹髻鬃鬈鬏鬓鬟鬣鬯鬲鬻鬼魁魂魃魄魅魇魈魉魍魏魑魔鱼鱿鲁鲂鲅鲆鲇鲈鲋鲍鲎鲐鲑鲔鲚鲛鲜鲞鲟鲠鲡鲢鲣鲤鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲷鲸鲺鲻鲼鲽鳃鳄鳅鳆鳇鳊鳌鳍鳎鳏鳐鳓鳔鳕鳖鳗鳘鳙鳜鳝鳞鳟鳢鸟鸠鸡鸢鸣鸥鸦鸨鸩鸪鸫鸬鸭鸯鸱鸲鸳鸵鸶鸷鸸鸹鸺鸽鸾鸿鹁鹂鹃鹄鹅鹆鹇鹈鹉鹊鹋鹌鹎鹏鹑鹕鹗鹘鹚鹛鹜鹞鹣鹤鹦鹧鹨鹩鹪鹫鹬鹭鹰鹱鹳鹿麂麇麈麋麒麓麝麟麦麸麻麽麾黄黉黍黎黏黑黔默黛黜黝黟黠黢黥黧黩黯黹黻黼黾鼋鼍鼎鼐鼓鼗鼙鼠鼢鼬鼯鼷鼹鼻鼾齐齑齿龀龃龄龅龆龇龈龉龊龋龌龙龚龛龟龠', + korean: + ' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~가각간갇갈감갑값강갖같갚갛개객걀거걱건걷걸검겁것겉게겨격겪견결겹경곁계고곡곤곧골곰곱곳공과관광괜괴굉교구국군굳굴굵굶굽궁권귀규균그극근글긁금급긋긍기긴길김깅깊까깎깐깔깜깝깥깨꺼꺾껍껏껑께껴꼬꼭꼴꼼꼽꽂꽃꽉꽤꾸꿀꿈뀌끄끈끊끌끓끔끗끝끼낌나낙낚난날낡남납낫낭낮낯낱낳내냄냉냐냥너넉널넓넘넣네넥넷녀녁년념녕노녹논놀놈농높놓놔뇌뇨누눈눕뉘뉴늄느늑는늘늙능늦늬니닐님다닥닦단닫달닭닮담답닷당닿대댁댐더덕던덜덤덥덧덩덮데델도독돈돌돕동돼되된두둑둘둠둡둥뒤뒷드득든듣들듬듭듯등디딩딪따딱딴딸땀땅때땜떠떡떤떨떻떼또똑뚜뚫뚱뛰뜨뜩뜯뜰뜻띄라락란람랍랑랗래랜램랫략량러럭런럴럼럽럿렁렇레렉렌려력련렬렵령례로록론롬롭롯료루룩룹룻뤄류륙률륭르른름릇릎리릭린림립릿마막만많말맑맘맙맛망맞맡맣매맥맨맵맺머먹먼멀멈멋멍멎메멘멩며면멸명몇모목몰몸몹못몽묘무묵묶문묻물뭄뭇뭐뭣므미민믿밀밉밌및밑바박밖반받발밝밟밤밥방밭배백뱀뱃뱉버번벌범법벗베벤벼벽변별볍병볕보복볶본볼봄봇봉뵈뵙부북분불붉붐붓붕붙뷰브블비빌빗빚빛빠빨빵빼뺨뻐뻔뻗뼈뽑뿌뿐쁘쁨사삭산살삶삼상새색샌생서석섞선설섬섭섯성세센셈셋션소속손솔솜솟송솥쇄쇠쇼수숙순술숨숫숲쉬쉽슈스슨슬슴습슷승시식신싣실싫심십싱싶싸싹쌀쌍쌓써썩썰썹쎄쏘쏟쑤쓰쓸씀씌씨씩씬씹씻아악안앉않알앓암압앗앙앞애액야약얇양얗얘어억언얹얻얼엄업없엇엉엌엎에엔엘여역연열엷염엽엿영옆예옛오옥온올옮옳옷와완왕왜왠외왼요욕용우욱운울움웃웅워원월웨웬위윗유육율으윽은을음응의이익인일읽잃임입잇있잊잎자작잔잖잘잠잡장잦재쟁저적전절젊점접젓정젖제젠젯져조족존졸좀좁종좋좌죄주죽준줄줌줍중쥐즈즉즌즐즘증지직진질짐집짓징짙짚짜짝짧째쨌쩌쩍쩐쪽쫓쭈쭉찌찍찢차착찬찮찰참창찾채책챔챙처척천철첫청체쳐초촉촌총촬최추축춘출춤춥춧충취츠측츰층치칙친칠침칭카칸칼캐캠커컨컬컴컵컷켓켜코콜콤콩쾌쿠퀴크큰클큼키킬타탁탄탈탑탓탕태택탤터턱털텅테텍텔템토톤톱통퇴투툼퉁튀튜트특튼튿틀틈티틱팀팅파팎판팔패팩팬퍼퍽페펴편펼평폐포폭표푸푹풀품풍퓨프플픔피픽필핏핑하학한할함합항해핵핸햄햇행향허헌험헤헬혀현혈협형혜호혹혼홀홍화확환활황회획횟효후훈훌훔훨휘휴흉흐흑흔흘흙흡흥흩희흰히힘', + telugu: + '0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZఁంఃఅఆఇఈఉఊఋఌఎఏఐఒఓఔకఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహాిీుూృౄెేైొోౌ్ౠౡౢౣ', + kannada: + '0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZಂಃಅಆಇಈಉಊಋಎಏಐಒಓಔಕಖಗಘಙಚಛಜಝಞಟಠಡಢಣತಥದಧನಪಫಬಭಮಯರಲಳವಶಷಸಹಾಿೀುೂೃೆೇೈೊೋೌ್೦೧೨೩೪೫೬೭೮೯', +}; + +export const symbols = { + //Abaza + abq: alphabets['cyrillic'], + //Adyghe + ady: alphabets['cyrillic'], + //Africans + af: alphabets['latin'], + //Avar + ava: alphabets['cyrillic'], + //Azerbaijani + az: alphabets['latin'], + //Belarusian + be: alphabets['cyrillic'], + //Bulgarian + bg: alphabets['cyrillic'], + //Bosnian + bs: alphabets['latin'], + //Simplified Chinese + ch_sim: alphabets['zh_sim'], + //Chechen + che: alphabets['cyrillic'], + //Czech + cs: alphabets['latin'], + //Welsh + cy: alphabets['latin'], + //Danish + da: alphabets['latin'], + //Dargwa + dar: alphabets['cyrillic'], + //German + de: alphabets['latin'], + //English + en: alphabets['english'], + //Spanish + es: alphabets['latin'], + //Estonian + et: alphabets['latin'], + //French + fr: alphabets['latin'], + //Irish + ga: alphabets['latin'], + //Croatian + hr: alphabets['latin'], + //Hungarian + hu: alphabets['latin'], + //Indonesian + id: alphabets['latin'], + //Ingush + inh: alphabets['cyrillic'], + //Icelandic + ic: alphabets['latin'], + //Italian + it: alphabets['latin'], + //Japanese + ja: alphabets['japanese'], + //Karbadian + kbd: alphabets['cyrillic'], + //Kannada + kn: alphabets['kannada'], + //Korean + ko: alphabets['korean'], + //Kurdish + ku: alphabets['latin'], + //Latin + la: alphabets['latin'], + //Lak + lbe: alphabets['cyrillic'], + //Lezghian + lez: alphabets['cyrillic'], + //Lithuanian + lt: alphabets['latin'], + //Latvian + lv: alphabets['latin'], + //Maori + mi: alphabets['latin'], + //Mongolian + mn: alphabets['cyrillic'], + //Malay + ms: alphabets['latin'], + //Maltese + mt: alphabets['latin'], + //Dutch + nl: alphabets['latin'], + //Norwegian + no: alphabets['latin'], + //Occitan + oc: alphabets['latin'], + //Pali + pi: alphabets['latin'], + //Polish + pl: alphabets['latin'], + //Portuguese + pt: alphabets['latin'], + //Romanian + ro: alphabets['latin'], + //Russian + ru: alphabets['cyrillic'], + //Serbian (cyrillic) + rs_cyrillic: alphabets['cyrillic'], + //Serbian (latin) + rs_latin: alphabets['latin'], + //Slovak + sk: alphabets['latin'], + //Slovenian + sl: alphabets['latin'], + //Albanian + sq: alphabets['latin'], + //Swedish + sv: alphabets['latin'], + //Swahili + sw: alphabets['latin'], + //Tabassaran + tab: alphabets['cyrillic'], + //Telugu + te: alphabets['telugu'], + //Tajik + tjk: alphabets['cyrillic'], + //Tagalog + tl: alphabets['latin'], + //Turkish: + tr: alphabets['latin'], + //Ukrainian + uk: alphabets['cyrillic'], + //Uzbek + uz: alphabets['latin'], + //Vietnamese + vi: alphabets['latin'], }; diff --git a/src/constants/sttDefaults.ts b/src/constants/sttDefaults.ts index 6eb431d1e..119e5d2e7 100644 --- a/src/constants/sttDefaults.ts +++ b/src/constants/sttDefaults.ts @@ -5,52 +5,62 @@ import { WHISPER_TINY_ENCODER, WHISPER_TINY_DECODER, WHISPER_TOKENIZER, + WHISPER_TINY_MULTILINGUAL_ENCODER, + WHISPER_TINY_MULTILINGUAL_DECODER, + WHISPER_TINY_MULTILINGUAL_TOKENIZER, } from './modelUrls'; +import { AvailableModels, ModelConfig } from '../types/stt'; export const SAMPLE_RATE = 16_000; export const SECOND = SAMPLE_RATE; export const HAMMING_DIST_THRESHOLD = 1; -export interface ModelConfig { +const whisperTinyModelConfig = { sources: { - encoder: string; - decoder: string; - }; + encoder: WHISPER_TINY_ENCODER, + decoder: WHISPER_TINY_DECODER, + }, tokenizer: { - source: string; - sos: number; - eos: number; - specialChar: string; - }; -} + source: WHISPER_TOKENIZER, + bos: 50257, // FIXME: this is a placeholder and needs to be changed + eos: 50256, // FIXME: this is a placeholder and needs to be changed + }, + isMultilingual: false, +}; -export const MODEL_CONFIGS: { [key in 'moonshine' | 'whisper']: ModelConfig } = - { - moonshine: { - sources: { - encoder: MOONSHINE_TINY_ENCODER, - decoder: MOONSHINE_TINY_DECODER, - }, - tokenizer: { - source: MOONSHINE_TOKENIZER, - sos: 1, - eos: 2, - specialChar: '\u2581', - }, - }, - whisper: { - sources: { - encoder: WHISPER_TINY_ENCODER, - decoder: WHISPER_TINY_DECODER, - }, - tokenizer: { - source: WHISPER_TOKENIZER, - sos: 50257, - eos: 50256, - specialChar: 'Ġ', - }, - }, - }; +const moonshineTinyModelConfig = { + sources: { + encoder: MOONSHINE_TINY_ENCODER, + decoder: MOONSHINE_TINY_DECODER, + }, + tokenizer: { + source: MOONSHINE_TOKENIZER, + bos: 1, // FIXME: this is a placeholder and needs to be changed + eos: 2, // FIXME: this is a placeholder and needs to be changed + }, + isMultilingual: false, +}; + +const whisperTinyMultilingualModelConfig = { + sources: { + encoder: WHISPER_TINY_MULTILINGUAL_ENCODER, + decoder: WHISPER_TINY_MULTILINGUAL_DECODER, + }, + tokenizer: { + source: WHISPER_TINY_MULTILINGUAL_TOKENIZER, + bos: 50258, // FIXME: this is a placeholder and needs to be changed + eos: 50257, // FIXME: this is a placeholder and needs to be changed + }, + isMultilingual: true, +}; + +export const MODEL_CONFIGS: { + [key in AvailableModels]: ModelConfig; +} = { + moonshine: moonshineTinyModelConfig, + whisper: whisperTinyModelConfig, + whisperMultilingual: whisperTinyMultilingualModelConfig, +}; export const MODES = { fast: { @@ -66,3 +76,5 @@ export const MODES = { overlapSeconds: 3, }, }; + +export const NUM_TOKENS_TO_SLICE = 3; diff --git a/src/controllers/LLMController.ts b/src/controllers/LLMController.ts new file mode 100644 index 000000000..6ed1684d0 --- /dev/null +++ b/src/controllers/LLMController.ts @@ -0,0 +1,250 @@ +import { EventSubscription } from 'react-native'; +import { ResourceSource } from '../types/common'; +import { ResourceFetcher } from '../utils/ResourceFetcher'; +import { ETError, getError } from '../Error'; +import { Template } from '@huggingface/jinja'; +import { DEFAULT_CHAT_CONFIG } from '../constants/llmDefaults'; +import { readAsStringAsync } from 'expo-file-system'; +import { + ChatConfig, + LLMTool, + MessageType, + SPECIAL_TOKENS, + ToolsConfig, +} from '../types/llm'; +import { LLMNativeModule } from '../native/RnExecutorchModules'; +import { parseToolCall } from '../utils/llm'; + +export class LLMController { + private nativeModule: typeof LLMNativeModule; + private chatConfig: ChatConfig; + private toolsConfig: ToolsConfig | undefined; + private tokenizerConfig: any; + private onToken: EventSubscription | null = null; + private _response = ''; + private _isReady = false; + private _isGenerating = false; + private _messageHistory: MessageType[] = []; + + // User callbacks + private responseCallback: (response: string) => void; + private messageHistoryCallback: (messageHistory: MessageType[]) => void; + private isReadyCallback: (isReady: boolean) => void; + private isGeneratingCallback: (isGenerating: boolean) => void; + private onDownloadProgressCallback: + | ((downloadProgress: number) => void) + | undefined; + private errorCallback: ((error: any) => void) | undefined; + + constructor({ + responseCallback, + messageHistoryCallback, + isReadyCallback, + isGeneratingCallback, + onDownloadProgressCallback, + errorCallback, + chatConfig = DEFAULT_CHAT_CONFIG, + toolsConfig, + }: { + responseCallback?: (response: string) => void; + messageHistoryCallback?: (messageHistory: MessageType[]) => void; + isReadyCallback?: (isReady: boolean) => void; + isGeneratingCallback?: (isGenerating: boolean) => void; + onDownloadProgressCallback?: (downloadProgress: number) => void; + errorCallback?: (error: Error | undefined) => void; + chatConfig?: Partial; + toolsConfig?: ToolsConfig; + }) { + this.responseCallback = (response) => { + this._response = response; + responseCallback?.(response); + }; + this.messageHistoryCallback = (messageHistory) => { + this._messageHistory = messageHistory; + messageHistoryCallback?.(messageHistory); + }; + this.isReadyCallback = (isReady) => { + this._isReady = isReady; + isReadyCallback?.(isReady); + }; + this.isGeneratingCallback = (isGenerating) => { + this._isGenerating = isGenerating; + isGeneratingCallback?.(isGenerating); + }; + this.errorCallback = errorCallback; + this.onDownloadProgressCallback = onDownloadProgressCallback; + + this.messageHistoryCallback(chatConfig?.initialMessageHistory ?? []); + this.chatConfig = { ...DEFAULT_CHAT_CONFIG, ...chatConfig }; + this.toolsConfig = toolsConfig; + this.nativeModule = LLMNativeModule; + } + + public get response() { + return this._response; + } + public get isReady() { + return this._isReady; + } + public get isGenerating() { + return this._isGenerating; + } + public get messageHistory() { + return this._messageHistory; + } + + public async load({ + modelSource, + tokenizerSource, + tokenizerConfigSource, + }: { + modelSource: ResourceSource; + tokenizerSource: ResourceSource; + tokenizerConfigSource: ResourceSource; + }) { + this.isReadyCallback(false); + try { + const tokenizerFileUri = await ResourceFetcher.fetch(tokenizerSource); + const tokenizerConfigFileUri = await ResourceFetcher.fetch( + tokenizerConfigSource + ); + this.tokenizerConfig = JSON.parse( + await readAsStringAsync('file://' + tokenizerConfigFileUri) + ); + + const modelFileUri = await ResourceFetcher.fetch( + modelSource, + this.onDownloadProgressCallback + ); + + await this.nativeModule.loadLLM(modelFileUri, tokenizerFileUri); + this.isReadyCallback(true); + this.onToken = this.nativeModule.onToken((data: string | undefined) => { + if (!data) { + return; + } + this.responseCallback(this._response + data); + }); + } catch (e) { + if (this.errorCallback) { + this.errorCallback(getError(e)); + } else { + throw new Error(getError(e)); + } + this.isReadyCallback(false); + } + } + + public delete() { + this.onToken?.remove(); + this.onToken = null; + this.nativeModule.releaseResources(); + } + + public async runInference(input: string) { + if (!this._isReady) { + throw new Error(getError(ETError.ModuleNotLoaded)); + } + try { + this.responseCallback(''); + this.isGeneratingCallback(true); + await this.nativeModule.runInference(input); + } catch (e) { + throw new Error(getError(e)); + } finally { + this.isGeneratingCallback(false); + } + } + + public interrupt() { + this.nativeModule.interrupt(); + } + + public async sendMessage(message: string) { + this.messageHistoryCallback([ + ...this._messageHistory, + { content: message, role: 'user' }, + ]); + + const messageHistoryWithPrompt: MessageType[] = [ + { content: this.chatConfig.systemPrompt, role: 'system' }, + ...this._messageHistory.slice(-this.chatConfig.contextWindowLength), + ]; + + const renderedChat: string = this.applyChatTemplate( + messageHistoryWithPrompt, + this.tokenizerConfig, + this.toolsConfig?.tools, + { tools_in_user_message: false, add_generation_prompt: true } + ); + + await this.runInference(renderedChat); + + if (!this._response) { + return; + } + + if (!this.toolsConfig || this.toolsConfig.displayToolCalls) { + this.responseCallback( + this._response.replace(this.tokenizerConfig.eos_token, '') + ); + this.messageHistoryCallback([ + ...this._messageHistory, + { content: this._response, role: 'assistant' }, + ]); + } + if (!this.toolsConfig) { + return; + } + + const toolCalls = parseToolCall(this._response); + + for (const toolCall of toolCalls) { + this.toolsConfig + .executeToolCallback(toolCall) + .then((toolResponse: string | null) => { + if (toolResponse) { + this.messageHistoryCallback([ + ...this._messageHistory, + { content: toolResponse, role: 'assistant' }, + ]); + } + }); + } + } + + public deleteMessage(index: number) { + // we delete referenced message and all messages after it + // so the model responses that used them are deleted as well + const newMessageHistory = this._messageHistory.slice(0, index); + + this.messageHistoryCallback(newMessageHistory); + } + + private applyChatTemplate( + messages: MessageType[], + tokenizerConfig: any, + tools?: LLMTool[], + template_flags?: Object + ): string { + if (!tokenizerConfig.chat_template) { + throw Error("Tokenizer config doesn't include chat_template"); + } + const template = new Template(tokenizerConfig.chat_template); + + const specialTokens = Object.fromEntries( + SPECIAL_TOKENS.filter((key) => key in tokenizerConfig).map((key) => [ + key, + tokenizerConfig[key], + ]) + ); + + const result = template.render({ + messages, + tools, + ...template_flags, + ...specialTokens, + }); + return result; + } +} diff --git a/src/controllers/OCRController.ts b/src/controllers/OCRController.ts index a6cf1a5da..f41104946 100644 --- a/src/controllers/OCRController.ts +++ b/src/controllers/OCRController.ts @@ -1,15 +1,12 @@ import { symbols } from '../constants/ocr/symbols'; import { ETError, getError } from '../Error'; -import { _OCRModule } from '../native/RnExecutorchModules'; +import { OCRNativeModule } from '../native/RnExecutorchModules'; import { ResourceSource } from '../types/common'; import { OCRLanguage } from '../types/ocr'; -import { - fetchResource, - calculateDownloadProgres, -} from '../utils/fetchResource'; +import { ResourceFetcher } from '../utils/ResourceFetcher'; export class OCRController { - private nativeModule: _OCRModule; + private nativeModule: typeof OCRNativeModule; public isReady: boolean = false; public isGenerating: boolean = false; public error: string | null = null; @@ -24,7 +21,7 @@ export class OCRController { isGeneratingCallback = (_isGenerating: boolean) => {}, errorCallback = (_error: string) => {}, }) { - this.nativeModule = new _OCRModule(); + this.nativeModule = OCRNativeModule; this.modelDownloadProgressCallback = modelDownloadProgressCallback; this.isReadyCallback = isReadyCallback; this.isGeneratingCallback = isGeneratingCallback; @@ -47,34 +44,23 @@ export class OCRController { if (!symbols[language]) { throw new Error(getError(ETError.LanguageNotSupported)); } + this.isReady = false; this.isReadyCallback(false); - const detectorPath = await fetchResource( + const paths = await ResourceFetcher.fetchMultipleResources( + this.modelDownloadProgressCallback, detectorSource, - calculateDownloadProgres(4, 0, this.modelDownloadProgressCallback) + recognizerSources.recognizerLarge, + recognizerSources.recognizerMedium, + recognizerSources.recognizerSmall ); - const recognizerPaths = { - recognizerLarge: await fetchResource( - recognizerSources.recognizerLarge, - calculateDownloadProgres(4, 1, this.modelDownloadProgressCallback) - ), - recognizerMedium: await fetchResource( - recognizerSources.recognizerMedium, - calculateDownloadProgres(4, 2, this.modelDownloadProgressCallback) - ), - recognizerSmall: await fetchResource( - recognizerSources.recognizerSmall, - calculateDownloadProgres(4, 3, this.modelDownloadProgressCallback) - ), - }; - await this.nativeModule.loadModule( - detectorPath, - recognizerPaths.recognizerLarge, - recognizerPaths.recognizerMedium, - recognizerPaths.recognizerSmall, + paths[0]!, + paths[1]!, + paths[2]!, + paths[3]!, symbols[language] ); diff --git a/src/controllers/SpeechToTextController.ts b/src/controllers/SpeechToTextController.ts index 296a4f155..13b50203c 100644 --- a/src/controllers/SpeechToTextController.ts +++ b/src/controllers/SpeechToTextController.ts @@ -1,58 +1,34 @@ -import { _SpeechToTextModule } from '../native/RnExecutorchModules'; -import * as FileSystem from 'expo-file-system'; -import { fetchResource } from '../utils/fetchResource'; -import { ResourceSource } from '../types/common'; import { HAMMING_DIST_THRESHOLD, - SECOND, MODEL_CONFIGS, - ModelConfig, + SECOND, MODES, + NUM_TOKENS_TO_SLICE, } from '../constants/sttDefaults'; - -const longCommonInfPref = (seq1: number[], seq2: number[]) => { - let maxInd = 0; - let maxLength = 0; - - for (let i = 0; i < seq1.length; i++) { - let j = 0; - let hammingDist = 0; - while ( - j < seq2.length && - i + j < seq1.length && - (seq1[i + j] === seq2[j] || hammingDist < HAMMING_DIST_THRESHOLD) - ) { - if (seq1[i + j] !== seq2[j]) { - hammingDist++; - } - j++; - } - if (j >= maxLength) { - maxLength = j; - maxInd = i; - } - } - return maxInd; -}; +import { AvailableModels, ModelConfig } from '../types/stt'; +import { + SpeechToTextNativeModule, + TokenizerNativeModule, +} from '../native/RnExecutorchModules'; +import { ResourceSource } from '../types/common'; +import { ResourceFetcher } from '../utils/ResourceFetcher'; +import { longCommonInfPref } from '../utils/stt'; +import { SpeechToTextLanguage } from '../types/stt'; export class SpeechToTextController { - private nativeModule: _SpeechToTextModule; + private speechToTextNativeModule = SpeechToTextNativeModule; private overlapSeconds!: number; private windowSize!: number; - private chunks: number[][] = []; public sequence: number[] = []; public isReady = false; public isGenerating = false; - private modelName!: 'moonshine' | 'whisper'; - - // tokenizer tokens to string mapping used for decoding sequence - private tokenMapping!: { [key: number]: string }; + private nativeTokenizer = TokenizerNativeModule; // User callbacks private decodedTranscribeCallback: (sequence: number[]) => void; - private modelDownloadProgessCallback: + private modelDownloadProgressCallback: | ((downloadProgress: number) => void) | undefined; private isReadyCallback: (isReady: boolean) => void; @@ -62,7 +38,7 @@ export class SpeechToTextController { constructor({ transcribeCallback, - modelDownloadProgessCallback, + modelDownloadProgressCallback, isReadyCallback, isGeneratingCallback, onErrorCallback, @@ -71,7 +47,7 @@ export class SpeechToTextController { streamingConfig, }: { transcribeCallback: (sequence: string) => void; - modelDownloadProgessCallback?: (downloadProgress: number) => void; + modelDownloadProgressCallback?: (downloadProgress: number) => void; isReadyCallback?: (isReady: boolean) => void; isGeneratingCallback?: (isGenerating: boolean) => void; onErrorCallback?: (error: Error | undefined) => void; @@ -79,9 +55,9 @@ export class SpeechToTextController { windowSize?: number; streamingConfig?: keyof typeof MODES; }) { - this.decodedTranscribeCallback = (seq) => - transcribeCallback(this.decodeSeq(seq)); - this.modelDownloadProgessCallback = modelDownloadProgessCallback; + this.decodedTranscribeCallback = async (seq) => + transcribeCallback(await this.tokenIdsToText(seq)); + this.modelDownloadProgressCallback = modelDownloadProgressCallback; this.isReadyCallback = (isReady) => { this.isReady = isReady; isReadyCallback?.(isReady); @@ -91,7 +67,6 @@ export class SpeechToTextController { isGeneratingCallback?.(isGenerating); }; this.onErrorCallback = onErrorCallback; - this.nativeModule = new _SpeechToTextModule(); this.configureStreaming( overlapSeconds, windowSize, @@ -99,17 +74,8 @@ export class SpeechToTextController { ); } - private async fetchTokenizer( - localUri?: ResourceSource - ): Promise<{ [key: number]: string }> { - let tokenzerUri = await fetchResource( - localUri || this.config.tokenizer.source - ); - return JSON.parse(await FileSystem.readAsStringAsync(tokenzerUri)); - } - public async loadModel( - modelName: 'moonshine' | 'whisper', + modelName: AvailableModels, encoderSource?: ResourceSource, decoderSource?: ResourceSource, tokenizerSource?: ResourceSource @@ -117,36 +83,50 @@ export class SpeechToTextController { this.onErrorCallback?.(undefined); this.isReadyCallback(false); this.config = MODEL_CONFIGS[modelName]; - this.modelName = modelName; try { - this.tokenMapping = await this.fetchTokenizer(tokenizerSource); - encoderSource = await fetchResource( + encoderSource = await ResourceFetcher.fetch( encoderSource || this.config.sources.encoder, - (progress) => this.modelDownloadProgessCallback?.(progress / 2) + (progress) => this.modelDownloadProgressCallback?.(progress / 2) ); - decoderSource = await fetchResource( + decoderSource = await ResourceFetcher.fetch( decoderSource || this.config.sources.decoder, - (progress) => this.modelDownloadProgessCallback?.(0.5 + progress / 2) + (progress) => this.modelDownloadProgressCallback?.(0.5 + progress / 2) + ); + + let tokenizerUri = await ResourceFetcher.fetch( + tokenizerSource || this.config.tokenizer.source + ); + + // The tokenizer native module does not accept the file:// prefix + await this.nativeTokenizer.loadModule( + tokenizerUri.replace('file://', '') ); } catch (e) { this.onErrorCallback?.(e); return; } + if (modelName === 'whisperMultilingual') { + // The underlying native class is instantiated based on the name of the model. There is no need to + // create a separate class for multilingual version of Whisper, since it is the same. We just need + // the distinction here, in TS, for start tokens and such. If we introduce + // more versions of Whisper, such as the small one, this should be refactored. + modelName = 'whisper'; + } + try { - await this.nativeModule.loadModule(modelName, [ + await this.speechToTextNativeModule.loadModule(modelName, [ encoderSource!, decoderSource!, ]); - this.modelDownloadProgessCallback?.(1); + this.modelDownloadProgressCallback?.(1); this.isReadyCallback(true); } catch (e) { this.onErrorCallback?.( new Error(`Error when loading the SpeechToTextController! ${e}`) ); - console.error('Error when loading the SpeechToTextController!', e); } } @@ -173,7 +153,6 @@ export class SpeechToTextController { this.windowSize = 30 * SECOND - 2 * this.overlapSeconds; } } - private chunkWaveform(waveform: number[]) { this.chunks = []; const numOfChunks = Math.ceil(waveform.length / this.windowSize); @@ -185,65 +164,126 @@ export class SpeechToTextController { waveform.length ) ); - this.chunks.push(chunk); } } - public async transcribe(waveform: number[]): Promise { + private checkCanTranscribe() { if (!this.isReady) { - this.onErrorCallback?.(new Error('Model is not yet ready')); - return ''; + throw Error('Model is not yet ready'); } if (this.isGenerating) { - this.onErrorCallback?.(new Error('Model is already transcribing')); - return ''; + throw Error('Model is already transcribing'); } - this.onErrorCallback?.(undefined); - this.isGeneratingCallback(true); + } - this.sequence = []; + public async encode(waveform: number[]) { + return await this.speechToTextNativeModule.encode(waveform); + } + + public async decode(seq: number[], encodings: number[]) { + return await this.speechToTextNativeModule.decode(seq, encodings); + } - if (!waveform) { - this.isGeneratingCallback(false); + private async getStartingTokenIds(audioLanguage?: string): Promise { + // We need different starting token ids based on the multilingualism of the model. + // The eng version only needs BOS token, while the multilingual one needs: + // [BOS, LANG, TRANSCRIBE]. Optionally we should also set notimestamps token, as timestamps + // is not yet supported. + if (!audioLanguage) { + return [this.config.tokenizer.bos]; + } + // FIXME: I should use .getTokenId for the BOS as well, should remove it from config + const langTokenId = await this.nativeTokenizer.tokenToId( + `<|${audioLanguage}|>` + ); + const transcribeTokenId = + await this.nativeTokenizer.tokenToId('<|transcribe|>'); + const noTimestampsTokenId = + await this.nativeTokenizer.tokenToId('<|notimestamps|>'); + const startingTokenIds = [ + this.config.tokenizer.bos, + langTokenId, + transcribeTokenId, + noTimestampsTokenId, + ]; + return startingTokenIds; + } + public async transcribe( + waveform: number[], + audioLanguage?: SpeechToTextLanguage + ): Promise { + try { + this.checkCanTranscribe(); + } catch (e) { + this.onErrorCallback?.(e); + return ''; + } + + if (!audioLanguage && this.config.isMultilingual) { + this.onErrorCallback?.( + new Error( + 'Language parameter was not provided for a multilingual model. Please pass lang parameter to the transcribe.' + ) + ); + return ''; + } else if (audioLanguage && !this.config.isMultilingual) { this.onErrorCallback?.( new Error( - `Nothing to transcribe, perhaps you forgot to call this.loadAudio().` + 'Language parameter was passed to a non-multilingual model. Please either use a multilingual version or delete the lang parameter.' ) ); + return ''; } + // Making sure that the error is not set when we get there + this.onErrorCallback?.(undefined); + this.isGeneratingCallback(true); + this.chunkWaveform(waveform); + this.sequence = []; let seqs: number[][] = []; - let prevseq: number[] = []; + let prevSeq: number[] = []; for (let chunkId = 0; chunkId < this.chunks.length; chunkId++) { - let lastToken = this.config.tokenizer.sos; let prevSeqTokenIdx = 0; let finalSeq: number[] = []; - let seq = [lastToken]; + + let seq = await this.getStartingTokenIds(audioLanguage); + const numSpecialTokens = seq.length; + let encoderOutput; try { - await this.nativeModule.encode(this.chunks!.at(chunkId)!); + encoderOutput = await this.speechToTextNativeModule.encode( + this.chunks!.at(chunkId)! + ); } catch (error) { - this.onErrorCallback?.(`Encode ${error}`); + this.onErrorCallback?.(`An error has occurred while encoding ${error}`); return ''; } + + let lastToken = seq.at(-1) as number; while (lastToken !== this.config.tokenizer.eos) { try { - lastToken = await this.nativeModule.decode(seq); + // Returns a single predicted token + lastToken = await this.speechToTextNativeModule.decode( + seq, + encoderOutput + ); } catch (error) { - this.onErrorCallback?.(`Decode ${error}`); + this.onErrorCallback?.( + `An error has occurred while decoding: ${error}` + ); return ''; } - seq = [...seq, lastToken]; + seq.push(lastToken); if ( seqs.length > 0 && seq.length < seqs.at(-1)!.length && seq.length % 3 !== 0 ) { - prevseq = [...prevseq, seqs.at(-1)![prevSeqTokenIdx++]!]; - this.decodedTranscribeCallback(prevseq); + prevSeq.push(seqs.at(-1)![prevSeqTokenIdx++]!); + this.decodedTranscribeCallback(prevSeq); } } @@ -253,63 +293,55 @@ export class SpeechToTextController { this.decodedTranscribeCallback(finalSeq); break; } - // remove sos/eos token and 3 additional ones + + // Remove starting tokenIds and 3 additional ones if (seqs.length === 0) { - seqs = [seq.slice(0, -4)]; + seqs = [seq.slice(0, -(numSpecialTokens + NUM_TOKENS_TO_SLICE))]; } else if (seqs.length === this.chunks.length - 1) { - seqs = [...seqs, seq.slice(4)]; + seqs.push(seq.slice(numSpecialTokens + NUM_TOKENS_TO_SLICE)); } else { - seqs = [...seqs, seq.slice(4, -4)]; + seqs.push( + seq.slice( + numSpecialTokens + NUM_TOKENS_TO_SLICE, + -(numSpecialTokens + NUM_TOKENS_TO_SLICE) + ) + ); } if (seqs.length < 2) { continue; } - const maxInd = longCommonInfPref(seqs.at(-2)!, seqs.at(-1)!); + const maxInd = longCommonInfPref( + seqs.at(-2)!, + seqs.at(-1)!, + HAMMING_DIST_THRESHOLD + ); finalSeq = [...this.sequence, ...seqs.at(-2)!.slice(0, maxInd)]; this.sequence = finalSeq; this.decodedTranscribeCallback(finalSeq); - prevseq = finalSeq; + prevSeq = finalSeq; - //last sequence processed + // last sequence processed if (seqs.length === this.chunks.length) { finalSeq = [...this.sequence, ...seqs.at(-1)!]; this.sequence = finalSeq; this.decodedTranscribeCallback(finalSeq); - prevseq = finalSeq; + prevSeq = finalSeq; } } - const decodedSeq = this.decodeSeq(this.sequence); + const decodedText = await this.tokenIdsToText(this.sequence); this.isGeneratingCallback(false); - return decodedSeq; + return decodedText; } - public decodeSeq(seq?: number[]): string { - if (!this.modelName) { + private async tokenIdsToText(tokenIds: number[]): Promise { + try { + return this.nativeTokenizer.decode(tokenIds, true); + } catch (e) { this.onErrorCallback?.( - new Error('Model is not loaded, call `loadModel` first') + new Error(`An error has occurred when decoding the token ids: ${e}`) ); return ''; } - this.onErrorCallback?.(undefined); - if (!seq) seq = this.sequence; - - return seq - .filter( - (token) => - token !== this.config.tokenizer.eos && - token !== this.config.tokenizer.sos - ) - .map((token) => this.tokenMapping[token]) - .join('') - .replaceAll(this.config.tokenizer.specialChar, ' '); - } - - public async encode(waveform: number[]) { - return await this.nativeModule.encode(waveform); - } - - public async decode(seq: number[], encodings?: number[]) { - return await this.nativeModule.decode(seq, encodings); } } diff --git a/src/controllers/VerticalOCRController.ts b/src/controllers/VerticalOCRController.ts index f09e70a7e..1bb0e13e4 100644 --- a/src/controllers/VerticalOCRController.ts +++ b/src/controllers/VerticalOCRController.ts @@ -1,15 +1,12 @@ import { symbols } from '../constants/ocr/symbols'; import { ETError, getError } from '../Error'; -import { _VerticalOCRModule } from '../native/RnExecutorchModules'; +import { VerticalOCRNativeModule } from '../native/RnExecutorchModules'; import { ResourceSource } from '../types/common'; import { OCRLanguage } from '../types/ocr'; -import { - fetchResource, - calculateDownloadProgres, -} from '../utils/fetchResource'; +import { ResourceFetcher } from '../utils/ResourceFetcher'; export class VerticalOCRController { - private nativeModule: _VerticalOCRModule; + private ocrNativeModule: typeof VerticalOCRNativeModule; public isReady: boolean = false; public isGenerating: boolean = false; public error: string | null = null; @@ -24,7 +21,7 @@ export class VerticalOCRController { isGeneratingCallback = (_isGenerating: boolean) => {}, errorCallback = (_error: string) => {}, }) { - this.nativeModule = new _VerticalOCRModule(); + this.ocrNativeModule = VerticalOCRNativeModule; this.modelDownloadProgressCallback = modelDownloadProgressCallback; this.isReadyCallback = isReadyCallback; this.isGeneratingCallback = isGeneratingCallback; @@ -57,31 +54,19 @@ export class VerticalOCRController { this.isReady = false; this.isReadyCallback(this.isReady); - const recognizerPath = independentCharacters - ? await fetchResource( - recognizerSources.recognizerSmall, - calculateDownloadProgres(3, 0, this.modelDownloadProgressCallback) - ) - : await fetchResource( - recognizerSources.recognizerLarge, - calculateDownloadProgres(3, 0, this.modelDownloadProgressCallback) - ); - - const detectorPaths = { - detectorLarge: await fetchResource( - detectorSources.detectorLarge, - calculateDownloadProgres(3, 1, this.modelDownloadProgressCallback) - ), - detectorNarrow: await fetchResource( - detectorSources.detectorNarrow, - calculateDownloadProgres(3, 2, this.modelDownloadProgressCallback) - ), - }; + const paths = await ResourceFetcher.fetchMultipleResources( + this.modelDownloadProgressCallback, + detectorSources.detectorLarge, + detectorSources.detectorNarrow, + independentCharacters + ? recognizerSources.recognizerSmall + : recognizerSources.recognizerLarge + ); - await this.nativeModule.loadModule( - detectorPaths.detectorLarge, - detectorPaths.detectorNarrow, - recognizerPath, + await this.ocrNativeModule.loadModule( + paths[0]!, + paths[1]!, + paths[2]!, symbols[language], independentCharacters ); @@ -108,7 +93,7 @@ export class VerticalOCRController { try { this.isGenerating = true; this.isGeneratingCallback(this.isGenerating); - return await this.nativeModule.forward(input); + return await this.ocrNativeModule.forward(input); } catch (e) { throw new Error(getError(e)); } finally { diff --git a/src/hooks/computer_vision/useClassification.ts b/src/hooks/computer_vision/useClassification.ts index 0cc8a1dcc..2ac81c5f8 100644 --- a/src/hooks/computer_vision/useClassification.ts +++ b/src/hooks/computer_vision/useClassification.ts @@ -1,31 +1,9 @@ -import { useState } from 'react'; -import { _ClassificationModule } from '../../native/RnExecutorchModules'; +import { ClassificationModule } from '../../modules/computer_vision/ClassificationModule'; +import { ResourceSource } from '../../types/common'; import { useModule } from '../useModule'; -interface Props { - modelSource: string | number; -} - export const useClassification = ({ modelSource, -}: Props): { - error: string | null; - isReady: boolean; - isGenerating: boolean; - downloadProgress: number; - forward: (input: string) => Promise<{ [category: string]: number }>; -} => { - const [module, _] = useState(() => new _ClassificationModule()); - const { - error, - isReady, - isGenerating, - downloadProgress, - forwardImage: forward, - } = useModule({ - modelSource, - module, - }); - - return { error, isReady, isGenerating, downloadProgress, forward }; -}; +}: { + modelSource: ResourceSource; +}) => useModule({ module: ClassificationModule, loadArgs: [modelSource] }); diff --git a/src/hooks/computer_vision/useImageSegmentation.ts b/src/hooks/computer_vision/useImageSegmentation.ts index 4e562d6bf..6b70d68a9 100644 --- a/src/hooks/computer_vision/useImageSegmentation.ts +++ b/src/hooks/computer_vision/useImageSegmentation.ts @@ -1,68 +1,18 @@ -import { useState } from 'react'; -import { _ImageSegmentationModule } from '../../native/RnExecutorchModules'; -import { ETError, getError } from '../../Error'; -import { useModule } from '../useModule'; -import { DeeplabLabel } from '../../types/image_segmentation'; +import { ResourceSource } from '../../types/common'; +import { useNonStaticModule } from '../useNonStaticModule'; +import { ImageSegmentationModule } from '../../modules/computer_vision/ImageSegmentationModule'; interface Props { - modelSource: string | number; + modelSource: ResourceSource; + preventLoad?: boolean; } export const useImageSegmentation = ({ modelSource, -}: Props): { - error: string | null; - isReady: boolean; - isGenerating: boolean; - downloadProgress: number; - forward: ( - input: string, - classesOfInterest?: DeeplabLabel[], - resize?: boolean - ) => Promise<{ [key in DeeplabLabel]?: number[] }>; -} => { - const [module, _] = useState(() => new _ImageSegmentationModule()); - const [isGenerating, setIsGenerating] = useState(false); - const { error, isReady, downloadProgress } = useModule({ - modelSource, - module, + preventLoad = false, +}: Props) => + useNonStaticModule({ + module: ImageSegmentationModule, + loadArgs: [modelSource], + preventLoad: preventLoad, }); - - const forward = async ( - input: string, - classesOfInterest?: DeeplabLabel[], - resize?: boolean - ) => { - if (!isReady) { - throw new Error(getError(ETError.ModuleNotLoaded)); - } - if (isGenerating) { - throw new Error(getError(ETError.ModelGenerating)); - } - - try { - setIsGenerating(true); - const stringDict = await module.forward( - input, - (classesOfInterest || []).map((label) => DeeplabLabel[label]), - resize || false - ); - - let enumDict: { [key in DeeplabLabel]?: number[] } = {}; - - for (const key in stringDict) { - if (key in DeeplabLabel) { - const enumKey = DeeplabLabel[key as keyof typeof DeeplabLabel]; - enumDict[enumKey] = stringDict[key]; - } - } - return enumDict; - } catch (e) { - throw new Error(getError(e)); - } finally { - setIsGenerating(false); - } - }; - - return { error, isReady, isGenerating, downloadProgress, forward }; -}; diff --git a/src/hooks/computer_vision/useObjectDetection.ts b/src/hooks/computer_vision/useObjectDetection.ts index b5082540a..3f985f8c5 100644 --- a/src/hooks/computer_vision/useObjectDetection.ts +++ b/src/hooks/computer_vision/useObjectDetection.ts @@ -1,32 +1,10 @@ -import { useState } from 'react'; -import { _ObjectDetectionModule } from '../../native/RnExecutorchModules'; +import { ResourceSource } from '../../types/common'; import { useModule } from '../useModule'; -import { Detection } from '../../types/object_detection'; +import { ObjectDetectionModule } from '../../modules/computer_vision/ObjectDetectionModule'; interface Props { - modelSource: string | number; + modelSource: ResourceSource; } -export const useObjectDetection = ({ - modelSource, -}: Props): { - error: string | null; - isReady: boolean; - isGenerating: boolean; - downloadProgress: number; - forward: (input: string) => Promise; -} => { - const [module, _] = useState(() => new _ObjectDetectionModule()); - const { - error, - isReady, - isGenerating, - downloadProgress, - forwardImage: forward, - } = useModule({ - modelSource, - module, - }); - - return { error, isReady, isGenerating, downloadProgress, forward }; -}; +export const useObjectDetection = ({ modelSource }: Props) => + useModule({ module: ObjectDetectionModule, loadArgs: [modelSource] }); diff --git a/src/hooks/computer_vision/useStyleTransfer.ts b/src/hooks/computer_vision/useStyleTransfer.ts index b7dcbaca0..07a68f4a9 100644 --- a/src/hooks/computer_vision/useStyleTransfer.ts +++ b/src/hooks/computer_vision/useStyleTransfer.ts @@ -1,31 +1,15 @@ -import { useState } from 'react'; -import { _StyleTransferModule } from '../../native/RnExecutorchModules'; -import { useModule } from '../useModule'; +import { ResourceSource } from '../../types/common'; +import { useNonStaticModule } from '../useNonStaticModule'; +import { StyleTransferModule } from '../../modules/computer_vision/StyleTransferModule'; interface Props { - modelSource: string | number; + modelSource: ResourceSource; + preventLoad?: boolean; } -export const useStyleTransfer = ({ - modelSource, -}: Props): { - error: string | null; - isReady: boolean; - isGenerating: boolean; - downloadProgress: number; - forward: (input: string) => Promise; -} => { - const [module, _] = useState(() => new _StyleTransferModule()); - const { - error, - isReady, - isGenerating, - downloadProgress, - forwardImage: forward, - } = useModule({ - modelSource, - module, +export const useStyleTransfer = ({ modelSource, preventLoad = false }: Props) => + useNonStaticModule({ + module: StyleTransferModule, + loadArgs: [modelSource], + preventLoad: preventLoad, }); - - return { error, isReady, isGenerating, downloadProgress, forward }; -}; diff --git a/src/hooks/general/useExecutorchModule.ts b/src/hooks/general/useExecutorchModule.ts index 6e174fbe3..147bc0cb9 100644 --- a/src/hooks/general/useExecutorchModule.ts +++ b/src/hooks/general/useExecutorchModule.ts @@ -1,58 +1,9 @@ -import { useState } from 'react'; -import { _ETModule } from '../../native/RnExecutorchModules'; +import { ExecutorchModule } from '../../modules/general/ExecutorchModule'; import { useModule } from '../useModule'; -import { ETInput } from '../../types/common'; -import { getError } from '../../Error'; interface Props { modelSource: string | number; } -export const useExecutorchModule = ({ - modelSource, -}: Props): { - error: string | null; - isReady: boolean; - isGenerating: boolean; - downloadProgress: number; - forward: ( - input: ETInput | ETInput[], - shape: number[] | number[][] - ) => Promise; - loadMethod: (methodName: string) => Promise; - loadForward: () => Promise; -} => { - const [module] = useState(() => new _ETModule()); - const { - error, - isReady, - isGenerating, - downloadProgress, - forwardETInput: forward, - } = useModule({ - modelSource, - module, - }); - - const loadMethod = async (methodName: string) => { - try { - await module.loadMethod(methodName); - } catch (e) { - throw new Error(getError(e)); - } - }; - - const loadForward = async () => { - await loadMethod('forward'); - }; - - return { - error, - isReady, - isGenerating, - downloadProgress, - forward, - loadMethod, - loadForward, - }; -}; +export const useExecutorchModule = ({ modelSource }: Props) => + useModule({ module: ExecutorchModule, loadArgs: [modelSource] }); diff --git a/src/hooks/natural_language_processing/useLLM.ts b/src/hooks/natural_language_processing/useLLM.ts index c86a78d1c..0eefd4b6b 100644 --- a/src/hooks/natural_language_processing/useLLM.ts +++ b/src/hooks/natural_language_processing/useLLM.ts @@ -1,126 +1,65 @@ -import { useCallback, useEffect, useRef, useState } from 'react'; -import { EventSubscription } from 'react-native'; -import { LLM } from '../../native/RnExecutorchModules'; -import { fetchResource } from '../../utils/fetchResource'; -import { ResourceSource, Model, MessageType } from '../../types/common'; -import { - DEFAULT_CONTEXT_WINDOW_LENGTH, - DEFAULT_MESSAGE_HISTORY, - DEFAULT_SYSTEM_PROMPT, - EOT_TOKEN, -} from '../../constants/llamaDefaults'; - -const interrupt = () => { - LLM.interrupt(); -}; +import { useEffect, useState } from 'react'; +import { ResourceSource } from '../../types/common'; +import { ChatConfig, LLMType, MessageType, ToolsConfig } from '../../types/llm'; +import { LLMController } from '../../controllers/LLMController'; +/* +Hook version of LLMController +*/ export const useLLM = ({ modelSource, tokenizerSource, - systemPrompt = DEFAULT_SYSTEM_PROMPT, - messageHistory = DEFAULT_MESSAGE_HISTORY, - contextWindowLength = DEFAULT_CONTEXT_WINDOW_LENGTH, + tokenizerConfigSource, + chatConfig, + toolsConfig, }: { modelSource: ResourceSource; tokenizerSource: ResourceSource; - systemPrompt?: string; - messageHistory?: MessageType[]; - contextWindowLength?: number; -}): Model => { - const [error, setError] = useState(null); + tokenizerConfigSource: ResourceSource; + chatConfig?: Partial; + toolsConfig?: ToolsConfig; +}): LLMType => { + const [response, setResponse] = useState(''); + const [messageHistory, setMessageHistory] = useState([]); const [isReady, setIsReady] = useState(false); const [isGenerating, setIsGenerating] = useState(false); - const [response, setResponse] = useState(''); const [downloadProgress, setDownloadProgress] = useState(0); - const tokenGeneratedListener = useRef(null); - - useEffect(() => { - const loadModel = async () => { - try { - setIsReady(false); + const [error, setError] = useState(null); - const tokenizerFileUri = await fetchResource(tokenizerSource); - const modelFileUri = await fetchResource( - modelSource, - setDownloadProgress - ); - - await LLM.loadLLM( - modelFileUri, - tokenizerFileUri, - systemPrompt, - messageHistory, - contextWindowLength - ); - - setIsReady(true); - - tokenGeneratedListener.current = LLM.onToken( - (data: string | undefined) => { - if (!data) { - return; - } - if (data !== EOT_TOKEN) { - setResponse((prevResponse) => prevResponse + data); - } else { - setIsGenerating(false); - } - } - ); - } catch (err) { - const message = (err as Error).message; - setIsReady(false); - setError(message); - } finally { - setDownloadProgress(0); - } - }; + const [model, _] = useState( + () => + new LLMController({ + responseCallback: setResponse, + messageHistoryCallback: setMessageHistory, + isReadyCallback: setIsReady, + isGeneratingCallback: setIsGenerating, + onDownloadProgressCallback: setDownloadProgress, + errorCallback: setError, + chatConfig: chatConfig, + toolsConfig: toolsConfig, + }) + ); - loadModel(); + useEffect(() => { + (async () => { + await model.load({ modelSource, tokenizerSource, tokenizerConfigSource }); + })(); return () => { - tokenGeneratedListener.current?.remove(); - tokenGeneratedListener.current = null; - LLM.deleteModule(); + model.delete(); }; - }, [ - modelSource, - tokenizerSource, - systemPrompt, - messageHistory, - contextWindowLength, - ]); - - const generate = useCallback( - async (input: string): Promise => { - if (!isReady) { - throw new Error('Model is still loading'); - } - if (error) { - throw new Error(error); - } - - try { - setResponse(''); - setIsGenerating(true); - await LLM.runInference(input); - } catch (err) { - setIsGenerating(false); - throw new Error((err as Error).message); - } - }, - [isReady, error] - ); + }, [modelSource, tokenizerSource, tokenizerConfigSource, model]); return { - generate, - error, + messageHistory, + response, isReady, isGenerating, - isModelReady: isReady, - isModelGenerating: isGenerating, - response, downloadProgress, - interrupt, + error, + runInference: (input) => model.runInference(input), + sendMessage: (message) => model.sendMessage(message), + deleteMessage: (index) => model.deleteMessage(index), + interrupt: () => model.interrupt(), }; }; diff --git a/src/hooks/natural_language_processing/useSpeechToText.ts b/src/hooks/natural_language_processing/useSpeechToText.ts index e9be6544f..536202f05 100644 --- a/src/hooks/natural_language_processing/useSpeechToText.ts +++ b/src/hooks/natural_language_processing/useSpeechToText.ts @@ -1,6 +1,7 @@ import { useEffect, useState } from 'react'; import { SpeechToTextController } from '../../controllers/SpeechToTextController'; import { ResourceSource } from '../../types/common'; +import { AvailableModels, SpeechToTextLanguage } from '../../types/stt'; interface SpeechToTextModule { isReady: boolean; @@ -10,7 +11,8 @@ interface SpeechToTextModule { configureStreaming: SpeechToTextController['configureStreaming']; error: Error | undefined; transcribe: ( - input: number[] + input: number[], + audioLanguage?: SpeechToTextLanguage ) => ReturnType; } @@ -23,7 +25,7 @@ export const useSpeechToText = ({ windowSize, streamingConfig, }: { - modelName: 'moonshine' | 'whisper'; + modelName: AvailableModels; encoderSource?: ResourceSource; decoderSource?: ResourceSource; tokenizerSource?: ResourceSource; @@ -50,7 +52,7 @@ export const useSpeechToText = ({ isReadyCallback: setIsReady, isGeneratingCallback: setIsGenerating, onErrorCallback: setError, - modelDownloadProgessCallback: setDownloadProgress, + modelDownloadProgressCallback: setDownloadProgress, overlapSeconds: overlapSeconds, windowSize: windowSize, streamingConfig: streamingConfig, @@ -76,6 +78,7 @@ export const useSpeechToText = ({ configureStreaming: model.configureStreaming, sequence, error, - transcribe: (waveform: number[]) => model.transcribe(waveform), + transcribe: (waveform: number[], audioLanguage?: SpeechToTextLanguage) => + model.transcribe(waveform, audioLanguage), }; }; diff --git a/src/hooks/natural_language_processing/useTextEmbeddings.ts b/src/hooks/natural_language_processing/useTextEmbeddings.ts new file mode 100644 index 000000000..ed134c5ef --- /dev/null +++ b/src/hooks/natural_language_processing/useTextEmbeddings.ts @@ -0,0 +1,15 @@ +import { TextEmbeddingsModule } from '../../modules/natural_language_processing/TextEmbeddingsModule'; +import { ResourceSource } from '../../types/common'; +import { useModule } from '../useModule'; + +export const useTextEmbeddings = ({ + modelSource, + tokenizerSource, +}: { + modelSource: ResourceSource; + tokenizerSource: ResourceSource; +}) => + useModule({ + module: TextEmbeddingsModule, + loadArgs: [modelSource, tokenizerSource], + }); diff --git a/src/hooks/natural_language_processing/useTokenizer.ts b/src/hooks/natural_language_processing/useTokenizer.ts new file mode 100644 index 000000000..db954e4dc --- /dev/null +++ b/src/hooks/natural_language_processing/useTokenizer.ts @@ -0,0 +1,57 @@ +import { useEffect, useState } from 'react'; +import { TokenizerModule } from '../../modules/natural_language_processing/TokenizerModule'; +import { ResourceSource } from '../../types/common'; +import { ETError, getError } from '../../Error'; + +export const useTokenizer = ({ + tokenizerSource, +}: { + tokenizerSource: ResourceSource; +}) => { + const [error, setError] = useState(null); + const [isReady, setIsReady] = useState(false); + const [isGenerating, setIsGenerating] = useState(false); + const [downloadProgress, setDownloadProgress] = useState(0); + + useEffect(() => { + const loadModule = async () => { + try { + setIsReady(false); + TokenizerModule.onDownloadProgress(setDownloadProgress); + await TokenizerModule.load(tokenizerSource); + setIsReady(true); + } catch (err) { + setError((err as Error).message); + } + }; + loadModule(); + }, [tokenizerSource]); + + const stateWrapper = Promise>(fn: T) => { + const boundFn = fn.bind(TokenizerModule); + + return async (...args: Parameters): Promise> => { + if (!isReady) throw new Error(getError(ETError.ModuleNotLoaded)); + if (isGenerating) throw new Error(getError(ETError.ModelGenerating)); + + setIsGenerating(true); + try { + return await boundFn(...args); + } finally { + setIsGenerating(false); + } + }; + }; + + return { + error, + isReady, + isGenerating, + downloadProgress, + decode: stateWrapper(TokenizerModule.decode), + encode: stateWrapper(TokenizerModule.encode), + getVocabSize: stateWrapper(TokenizerModule.getVocabSize), + idToToken: stateWrapper(TokenizerModule.idToToken), + tokenToId: stateWrapper(TokenizerModule.tokenToId), + }; +}; diff --git a/src/hooks/useModule.ts b/src/hooks/useModule.ts index a7dfba946..adb6b389e 100644 --- a/src/hooks/useModule.ts +++ b/src/hooks/useModule.ts @@ -1,124 +1,60 @@ import { useEffect, useState } from 'react'; -import { fetchResource } from '../utils/fetchResource'; import { ETError, getError } from '../Error'; -import { ETInput, Module } from '../types/common'; -import { _ETModule } from '../native/RnExecutorchModules'; -import { getTypeIdentifier } from '../types/common'; -interface Props { - modelSource: string | number; - module: Module; +interface Module { + load: (...args: any[]) => Promise; + forward: (...input: any[]) => Promise; + onDownloadProgress: (cb: (progress: number) => void) => void; } -interface _Module { - error: string | null; - isReady: boolean; - isGenerating: boolean; - downloadProgress: number; - forwardETInput: ( - input: ETInput[] | ETInput, - shape: number[][] | number[] - ) => ReturnType<_ETModule['forward']>; - forwardImage: (input: string) => Promise; -} - -export const useModule = ({ modelSource, module }: Props): _Module => { +export const useModule = < + M extends Module, + LoadArgs extends Parameters, + ForwardArgs extends Parameters, + ForwardReturn extends Awaited>, +>({ + module, + loadArgs, +}: { + module: M; + loadArgs: LoadArgs; +}) => { const [error, setError] = useState(null); const [isReady, setIsReady] = useState(false); const [isGenerating, setIsGenerating] = useState(false); const [downloadProgress, setDownloadProgress] = useState(0); useEffect(() => { - const loadModel = async () => { - if (!modelSource) return; - + const loadModule = async () => { try { setIsReady(false); - const fileUri = await fetchResource(modelSource, setDownloadProgress); - await module.loadModule(fileUri); + module.onDownloadProgress(setDownloadProgress); + await module.load(...loadArgs); setIsReady(true); - } catch (e) { - setError(getError(e)); + } catch (err) { + setError((err as Error).message); } }; + loadModule(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [...loadArgs]); - loadModel(); - }, [modelSource, module]); - - const forwardImage = async (input: string) => { - if (!isReady) { - throw new Error(getError(ETError.ModuleNotLoaded)); - } - if (isGenerating) { - throw new Error(getError(ETError.ModelGenerating)); - } - + const forward = async (...input: ForwardArgs): Promise => { + if (!isReady) throw new Error(getError(ETError.ModuleNotLoaded)); + if (isGenerating) throw new Error(getError(ETError.ModelGenerating)); try { setIsGenerating(true); - const output = await module.forward(input); - return output; - } catch (e) { - throw new Error(getError(e)); + return await module.forward(...input); } finally { setIsGenerating(false); } }; - const forwardETInput = async ( - input: ETInput[] | ETInput, - shape: number[][] | number[] - ) => { - if (!isReady) { - throw new Error(getError(ETError.ModuleNotLoaded)); - } - if (isGenerating) { - throw new Error(getError(ETError.ModelGenerating)); - } - - // Since the native module expects an array of inputs and an array of shapes, - // if the user provides a single ETInput, we want to "unsqueeze" the array so - // the data is properly processed on the native side - if (!Array.isArray(input)) { - input = [input]; - } - - if (!Array.isArray(shape[0])) { - shape = [shape] as number[][]; - } - - let inputTypeIdentifiers: any[] = []; - let modelInputs: any[] = []; - - for (let idx = 0; idx < input.length; idx++) { - let currentInputTypeIdentifier = getTypeIdentifier(input[idx] as ETInput); - if (currentInputTypeIdentifier === -1) { - throw new Error(getError(ETError.InvalidArgument)); - } - inputTypeIdentifiers.push(currentInputTypeIdentifier); - modelInputs.push([...(input[idx] as ETInput)]); - } - - try { - setIsGenerating(true); - const output = await module.forward( - modelInputs, - shape, - inputTypeIdentifiers - ); - setIsGenerating(false); - return output; - } catch (e) { - setIsGenerating(false); - throw new Error(getError(e)); - } - }; - return { error, isReady, isGenerating, downloadProgress, - forwardETInput, - forwardImage, + forward, }; }; diff --git a/src/hooks/useNonStaticModule.ts b/src/hooks/useNonStaticModule.ts new file mode 100644 index 000000000..c02da00c7 --- /dev/null +++ b/src/hooks/useNonStaticModule.ts @@ -0,0 +1,68 @@ +import { useEffect, useState, useMemo } from 'react'; +import { ETError, getError } from '../Error'; + +interface Module { + load: (...args: any[]) => Promise; + forward: (...args: any[]) => Promise; +} + +interface ModuleConstructor { + new (): M; +} + +export const useNonStaticModule = < + M extends Module, + LoadArgs extends Parameters, + ForwardArgs extends any[], + ForwardReturn, +>({ + module, + loadArgs, + preventLoad = false, +}: { + module: ModuleConstructor; + loadArgs: LoadArgs; + preventLoad?: boolean; +}) => { + const [error, setError] = useState(null); + const [isReady, setIsReady] = useState(false); + const [isGenerating, setIsGenerating] = useState(false); + const [downloadProgress, setDownloadProgress] = useState(0); + const model = useMemo(() => new module(), [module]); + + useEffect(() => { + if (!preventLoad) { + (async () => { + setDownloadProgress(0); + setError(null); + try { + setIsReady(false); + await model.load(...loadArgs, setDownloadProgress); + setIsReady(true); + } catch (err) { + setError((err as Error).message); + } + })(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [...loadArgs, preventLoad]); + + const forward = async (...input: ForwardArgs): Promise => { + if (!isReady) throw new Error(getError(ETError.ModuleNotLoaded)); + if (isGenerating) throw new Error(getError(ETError.ModelGenerating)); + try { + setIsGenerating(true); + return await model.forward(...input); + } finally { + setIsGenerating(false); + } + }; + + return { + error, + isReady, + isGenerating, + downloadProgress, + forward, + }; +}; diff --git a/src/index.tsx b/src/index.tsx index c4ae2f550..83de6503b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,3 +1,24 @@ +import { SpeechToTextLanguage } from './types/stt'; + +import { ETInstallerNativeModule } from './native/RnExecutorchModules'; + +// eslint-disable no-var +declare global { + var loadStyleTransfer: (source: string) => Promise; + var loadImageSegmentation: (source: string) => Promise; +} +// eslint-disable no-var + +if (global.loadStyleTransfer == null) { + if (!ETInstallerNativeModule) { + throw new Error( + `Failed to install react-native-executorch: The native module could not be found.` + ); + } + + ETInstallerNativeModule.install(); +} + // hooks export * from './hooks/computer_vision/useClassification'; export * from './hooks/computer_vision/useObjectDetection'; @@ -8,6 +29,8 @@ export * from './hooks/computer_vision/useVerticalOCR'; export * from './hooks/natural_language_processing/useLLM'; export * from './hooks/natural_language_processing/useSpeechToText'; +export * from './hooks/natural_language_processing/useTextEmbeddings'; +export * from './hooks/natural_language_processing/useTokenizer'; export * from './hooks/general/useExecutorchModule'; @@ -21,6 +44,8 @@ export * from './modules/computer_vision/VerticalOCRModule'; export * from './modules/natural_language_processing/LLMModule'; export * from './modules/natural_language_processing/SpeechToTextModule'; +export * from './modules/natural_language_processing/TextEmbeddingsModule'; +export * from './modules/natural_language_processing/TokenizerModule'; export * from './modules/general/ExecutorchModule'; @@ -31,6 +56,9 @@ export * from './utils/listDownloadedResources'; export * from './types/object_detection'; export * from './types/ocr'; export * from './types/image_segmentation'; +export * from './types/llm'; +export { SpeechToTextLanguage }; // constants export * from './constants/modelUrls'; +export * from './constants/ocr/models'; diff --git a/src/modules/BaseModule.ts b/src/modules/BaseModule.ts index 56cf2e3d8..0061c57e3 100644 --- a/src/modules/BaseModule.ts +++ b/src/modules/BaseModule.ts @@ -1,40 +1,28 @@ -import { - _ImageSegmentationModule, - _StyleTransferModule, - _ObjectDetectionModule, - _ClassificationModule, - _ETModule, -} from '../native/RnExecutorchModules'; -import { fetchResource } from '../utils/fetchResource'; -import { ResourceSource } from '../types/common'; +import { ResourceFetcher } from '../utils/ResourceFetcher'; import { getError } from '../Error'; +import { ResourceSource } from '../types/common'; export class BaseModule { - static module: - | _ImageSegmentationModule - | _StyleTransferModule - | _ObjectDetectionModule - | _ClassificationModule - | _ETModule; - - static onDownloadProgressCallback = (_downloadProgress: number) => {}; - - static async load(modelSource: ResourceSource) { - if (!modelSource) return; + protected static nativeModule: any; + static onDownloadProgressCallback: (downloadProgress: number) => void = + () => {}; + static async load(...sources: ResourceSource[]): Promise { try { - const fileUri = await fetchResource( - modelSource, - this.onDownloadProgressCallback + const paths = await ResourceFetcher.fetchMultipleResources( + this.onDownloadProgressCallback, + ...sources ); - await this.module.loadModule(fileUri); - } catch (e) { - throw new Error(getError(e)); + await this.nativeModule.loadModule(...paths); + } catch (error) { + throw new Error(getError(error)); } } - static async forward(..._: any[]): Promise { - throw new Error('The forward method is not implemented.'); + protected static async forward(..._args: any[]): Promise { + throw new Error( + 'forward method is not implemented in the BaseModule class. Please implement it in the derived class.' + ); } static onDownloadProgress(callback: (downloadProgress: number) => void) { diff --git a/src/modules/computer_vision/BaseCVModule.ts b/src/modules/computer_vision/BaseCVModule.ts deleted file mode 100644 index c61987d33..000000000 --- a/src/modules/computer_vision/BaseCVModule.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { BaseModule } from '../BaseModule'; -import { - _StyleTransferModule, - _ObjectDetectionModule, - _ClassificationModule, -} from '../../native/RnExecutorchModules'; -import { getError } from '../../Error'; - -export class BaseCVModule extends BaseModule { - static module: - | _StyleTransferModule - | _ObjectDetectionModule - | _ClassificationModule; - - static async forward(input: string) { - try { - return await this.module.forward(input); - } catch (e) { - throw new Error(getError(e)); - } - } -} diff --git a/src/modules/computer_vision/ClassificationModule.ts b/src/modules/computer_vision/ClassificationModule.ts index 2c6392cb5..206cd2b00 100644 --- a/src/modules/computer_vision/ClassificationModule.ts +++ b/src/modules/computer_vision/ClassificationModule.ts @@ -1,12 +1,17 @@ -import { BaseCVModule } from './BaseCVModule'; -import { _ClassificationModule } from '../../native/RnExecutorchModules'; +import { ClassificationNativeModule } from '../../native/RnExecutorchModules'; +import { ResourceSource } from '../../types/common'; +import { BaseModule } from '../BaseModule'; -export class ClassificationModule extends BaseCVModule { - static module = new _ClassificationModule(); +export class ClassificationModule extends BaseModule { + protected static override nativeModule = ClassificationNativeModule; - static async forward(input: string) { - return await (super.forward(input) as ReturnType< - _ClassificationModule['forward'] - >); + static override async load(modelSource: ResourceSource) { + await super.load(modelSource); + } + + static override async forward( + input: string + ): ReturnType { + return await this.nativeModule.forward(input); } } diff --git a/src/modules/computer_vision/ImageSegmentationModule.ts b/src/modules/computer_vision/ImageSegmentationModule.ts index 006e23f0a..2cdbf3ef6 100644 --- a/src/modules/computer_vision/ImageSegmentationModule.ts +++ b/src/modules/computer_vision/ImageSegmentationModule.ts @@ -1,34 +1,45 @@ -import { BaseModule } from '../BaseModule'; -import { _ImageSegmentationModule } from '../../native/RnExecutorchModules'; -import { getError } from '../../Error'; +import { ResourceFetcher } from '../../utils/ResourceFetcher'; +import { ResourceSource } from '../../types/common'; import { DeeplabLabel } from '../../types/image_segmentation'; +import { ETError, getError } from '../../Error'; -export class ImageSegmentationModule extends BaseModule { - static module = new _ImageSegmentationModule(); +export class ImageSegmentationModule { + nativeModule: any = null; - static async forward( - input: string, + async load( + modelSource: ResourceSource, + onDownloadProgressCallback: (_: number) => void = () => {} + ): Promise { + const paths = await ResourceFetcher.fetchMultipleResources( + onDownloadProgressCallback, + modelSource + ); + this.nativeModule = global.loadImageSegmentation(paths[0] || ''); + } + + async forward( + imageSource: string, classesOfInterest?: DeeplabLabel[], resize?: boolean ) { - try { - const stringDict = await (this.module.forward( - input, - (classesOfInterest || []).map((label) => DeeplabLabel[label]), - resize || false - ) as ReturnType<_ImageSegmentationModule['forward']>); + if (this.nativeModule == null) { + throw new Error(getError(ETError.ModuleNotLoaded)); + } + + const stringDict = await this.nativeModule.forward( + imageSource, + (classesOfInterest || []).map((label) => DeeplabLabel[label]), + resize || false + ); - let enumDict: { [key in DeeplabLabel]?: number[] } = {}; + let enumDict: { [key in DeeplabLabel]?: number[] } = {}; - for (const key in stringDict) { - if (key in DeeplabLabel) { - const enumKey = DeeplabLabel[key as keyof typeof DeeplabLabel]; - enumDict[enumKey] = stringDict[key]; - } + for (const key in stringDict) { + if (key in DeeplabLabel) { + const enumKey = DeeplabLabel[key as keyof typeof DeeplabLabel]; + enumDict[enumKey] = stringDict[key]; } - return enumDict; - } catch (e) { - throw new Error(getError(e)); } + return enumDict; } } diff --git a/src/modules/computer_vision/ObjectDetectionModule.ts b/src/modules/computer_vision/ObjectDetectionModule.ts index c50ce0261..2383368c0 100644 --- a/src/modules/computer_vision/ObjectDetectionModule.ts +++ b/src/modules/computer_vision/ObjectDetectionModule.ts @@ -1,12 +1,17 @@ -import { BaseCVModule } from './BaseCVModule'; -import { _ObjectDetectionModule } from '../../native/RnExecutorchModules'; +import { ObjectDetectionNativeModule } from '../../native/RnExecutorchModules'; +import { ResourceSource } from '../../types/common'; +import { BaseModule } from '../BaseModule'; -export class ObjectDetectionModule extends BaseCVModule { - static module = new _ObjectDetectionModule(); +export class ObjectDetectionModule extends BaseModule { + protected static override nativeModule = ObjectDetectionNativeModule; - static async forward(input: string) { - return await (super.forward(input) as ReturnType< - _ObjectDetectionModule['forward'] - >); + static override async load(modelSource: ResourceSource) { + return await super.load(modelSource); + } + + static override async forward( + input: string + ): ReturnType { + return await this.nativeModule.forward(input); } } diff --git a/src/modules/computer_vision/StyleTransferModule.ts b/src/modules/computer_vision/StyleTransferModule.ts index 830a8c511..b8208231a 100644 --- a/src/modules/computer_vision/StyleTransferModule.ts +++ b/src/modules/computer_vision/StyleTransferModule.ts @@ -1,12 +1,24 @@ -import { BaseCVModule } from './BaseCVModule'; -import { _StyleTransferModule } from '../../native/RnExecutorchModules'; +import { ResourceFetcher } from '../../utils/ResourceFetcher'; +import { ResourceSource } from '../../types/common'; +import { ETError, getError } from '../../Error'; -export class StyleTransferModule extends BaseCVModule { - static module = new _StyleTransferModule(); +export class StyleTransferModule { + nativeModule: any = null; - static async forward(input: string) { - return await (super.forward(input) as ReturnType< - _StyleTransferModule['forward'] - >); + async load( + modelSource: ResourceSource, + onDownloadProgressCallback: (_: number) => void = () => {} + ): Promise { + const paths = await ResourceFetcher.fetchMultipleResources( + onDownloadProgressCallback, + modelSource + ); + this.nativeModule = global.loadStyleTransfer(paths[0] || ''); + } + + async forward(imageSource: string) { + if (this.nativeModule == null) + throw new Error(getError(ETError.ModuleNotLoaded)); + return await this.nativeModule.forward(imageSource); } } diff --git a/src/modules/general/ExecutorchModule.ts b/src/modules/general/ExecutorchModule.ts index 34e91b6f3..c356c17be 100644 --- a/src/modules/general/ExecutorchModule.ts +++ b/src/modules/general/ExecutorchModule.ts @@ -1,13 +1,18 @@ -import { BaseModule } from '../BaseModule'; import { ETError, getError } from '../../Error'; -import { _ETModule } from '../../native/RnExecutorchModules'; +import { ETModuleNativeModule } from '../../native/RnExecutorchModules'; +import { ResourceSource } from '../../types/common'; import { ETInput } from '../../types/common'; import { getTypeIdentifier } from '../../types/common'; +import { BaseModule } from '../BaseModule'; export class ExecutorchModule extends BaseModule { - static module = new _ETModule(); + protected static override nativeModule = ETModuleNativeModule; + + static override async load(modelSource: ResourceSource) { + return await super.load(modelSource); + } - static async forward(input: ETInput[] | ETInput, shape: number[][]) { + static override async forward(input: ETInput[] | ETInput, shape: number[][]) { if (!Array.isArray(input)) { input = [input]; } @@ -25,7 +30,7 @@ export class ExecutorchModule extends BaseModule { } try { - return await this.module.forward( + return await this.nativeModule.forward( modelInputs, shape, inputTypeIdentifiers @@ -37,7 +42,7 @@ export class ExecutorchModule extends BaseModule { static async loadMethod(methodName: string) { try { - await this.module.loadMethod(methodName); + await this.nativeModule.loadMethod(methodName); } catch (e) { throw new Error(getError(e)); } diff --git a/src/modules/natural_language_processing/LLMModule.ts b/src/modules/natural_language_processing/LLMModule.ts index c9994e4ba..36078ef49 100644 --- a/src/modules/natural_language_processing/LLMModule.ts +++ b/src/modules/natural_language_processing/LLMModule.ts @@ -1,62 +1,58 @@ -import { LLM } from '../../native/RnExecutorchModules'; -import { fetchResource } from '../../utils/fetchResource'; -import { - DEFAULT_CONTEXT_WINDOW_LENGTH, - DEFAULT_MESSAGE_HISTORY, - DEFAULT_SYSTEM_PROMPT, -} from '../../constants/llamaDefaults'; +import { LLMController } from '../../controllers/LLMController'; import { ResourceSource } from '../../types/common'; +import { ChatConfig, MessageType, ToolsConfig } from '../../types/llm'; export class LLMModule { - static onDownloadProgressCallback = (_downloadProgress: number) => {}; - - static async load( - modelSource: ResourceSource, - tokenizerSource: ResourceSource, - systemPrompt = DEFAULT_SYSTEM_PROMPT, - messageHistory = DEFAULT_MESSAGE_HISTORY, - contextWindowLength = DEFAULT_CONTEXT_WINDOW_LENGTH - ) { - try { - const tokenizerFileUri = await fetchResource(tokenizerSource); - const modelFileUri = await fetchResource( - modelSource, - this.onDownloadProgressCallback - ); - - await LLM.loadLLM( - modelFileUri, - tokenizerFileUri, - systemPrompt, - messageHistory, - contextWindowLength - ); - } catch (err) { - throw new Error((err as Error).message); - } - } - - static async generate(input: string) { - try { - await LLM.runInference(input); - } catch (err) { - throw new Error((err as Error).message); - } + static controller: LLMController; + + static async load({ + modelSource, + tokenizerSource, + tokenizerConfigSource, + chatConfig, + toolsConfig, + onDownloadProgressCallback, + responseCallback, + messageHistoryCallback, + }: { + modelSource: ResourceSource; + tokenizerSource: ResourceSource; + tokenizerConfigSource: ResourceSource; + chatConfig?: Partial; + toolsConfig?: ToolsConfig; + onDownloadProgressCallback?: (_downloadProgress: number) => void; + responseCallback?: (response: string) => void; + messageHistoryCallback?: (messageHistory: MessageType[]) => void; + }) { + this.controller = new LLMController({ + responseCallback: responseCallback, + messageHistoryCallback: messageHistoryCallback, + onDownloadProgressCallback: onDownloadProgressCallback, + chatConfig, + toolsConfig, + }); + await this.controller.load({ + modelSource, + tokenizerSource, + tokenizerConfigSource, + }); } - static onDownloadProgress(callback: (downloadProgress: number) => void) { - this.onDownloadProgressCallback = callback; + static async runInference(input: string): Promise { + await this.controller.runInference(input); + return this.controller.response; } - static onToken(callback: (data: string | undefined) => void) { - return LLM.onToken(callback); + static async sendMessage(message: string): Promise { + await this.controller.sendMessage(message); + return this.controller.messageHistory; } static interrupt() { - LLM.interrupt(); + this.controller.interrupt(); } static delete() { - LLM.deleteModule(); + this.controller.delete(); } } diff --git a/src/modules/natural_language_processing/SpeechToTextModule.ts b/src/modules/natural_language_processing/SpeechToTextModule.ts index b81123927..8bad71cc3 100644 --- a/src/modules/natural_language_processing/SpeechToTextModule.ts +++ b/src/modules/natural_language_processing/SpeechToTextModule.ts @@ -1,5 +1,6 @@ import { ResourceSource } from '../../types/common'; import { SpeechToTextController } from '../../controllers/SpeechToTextController'; +import { AvailableModels, SpeechToTextLanguage } from '../../types/stt'; export class SpeechToText { static module: SpeechToTextController; @@ -7,9 +8,9 @@ export class SpeechToText { static onDownloadProgressCallback = (_downloadProgress: number) => {}; static async load( - modelName: 'moonshine' | 'whisper', + modelName: AvailableModels, transcribeCallback: (sequence: string) => void, - modelDownloadProgessCallback?: (downloadProgress: number) => void, + modelDownloadProgressCallback?: (downloadProgress: number) => void, encoderSource?: ResourceSource, decoderSource?: ResourceSource, tokenizerSource?: ResourceSource, @@ -25,7 +26,7 @@ export class SpeechToText { ) { this.module = new SpeechToTextController({ transcribeCallback: transcribeCallback, - modelDownloadProgessCallback: modelDownloadProgessCallback, + modelDownloadProgressCallback: modelDownloadProgressCallback, overlapSeconds: overlapSeconds, windowSize: windowSize, streamingConfig: streamingConfig, @@ -50,17 +51,18 @@ export class SpeechToText { ); } - static async transcribe( - waveform: number[] - ): ReturnType { - return await this.module.transcribe(waveform); - } - static async encode(waveform: number[]) { return await this.module.encode(waveform); } - static async decode(seq: number[], encodings?: number[]) { + static async decode(seq: number[], encodings: number[]) { return await this.module.decode(seq, encodings); } + + static async transcribe( + waveform: number[], + audioLanguage?: SpeechToTextLanguage + ): ReturnType { + return await this.module.transcribe(waveform, audioLanguage); + } } diff --git a/src/modules/natural_language_processing/TextEmbeddingsModule.ts b/src/modules/natural_language_processing/TextEmbeddingsModule.ts new file mode 100644 index 000000000..45f41cd8e --- /dev/null +++ b/src/modules/natural_language_processing/TextEmbeddingsModule.ts @@ -0,0 +1,18 @@ +import { TextEmbeddingsNativeModule } from '../../native/RnExecutorchModules'; +import { ResourceSource } from '../../types/common'; +import { BaseModule } from '../BaseModule'; + +export class TextEmbeddingsModule extends BaseModule { + protected static override nativeModule = TextEmbeddingsNativeModule; + + static override async load( + modelSource: ResourceSource, + tokenizerSource: ResourceSource + ) { + await super.load(modelSource, tokenizerSource); + } + + static override async forward(input: string): Promise { + return this.nativeModule.forward(input); + } +} diff --git a/src/modules/natural_language_processing/TokenizerModule.ts b/src/modules/natural_language_processing/TokenizerModule.ts new file mode 100644 index 000000000..8cf5862ce --- /dev/null +++ b/src/modules/natural_language_processing/TokenizerModule.ts @@ -0,0 +1,34 @@ +import { TokenizerNativeModule } from '../../native/RnExecutorchModules'; +import { ResourceSource } from '../../types/common'; +import { BaseModule } from '../BaseModule'; + +export class TokenizerModule extends BaseModule { + protected static override nativeModule = TokenizerNativeModule; + + static override async load(tokenizerSource: ResourceSource) { + await super.load(tokenizerSource); + } + + static async decode( + input: number[], + skipSpecialTokens: boolean + ): Promise { + return await this.nativeModule.decode(input, skipSpecialTokens); + } + + static async encode(input: string): Promise { + return await this.nativeModule.encode(input); + } + + static async getVocabSize(): Promise { + return await this.nativeModule.getVocabSize(); + } + + static async idToToken(tokenId: number): Promise { + return await this.nativeModule.idToToken(tokenId); + } + + static async tokenToId(token: string): Promise { + return await this.nativeModule.tokenToId(token); + } +} diff --git a/src/native/NativeClassification.ts b/src/native/NativeClassification.ts index 9aad6ded9..7b7fcd67b 100644 --- a/src/native/NativeClassification.ts +++ b/src/native/NativeClassification.ts @@ -3,7 +3,6 @@ import { TurboModuleRegistry } from 'react-native'; export interface Spec extends TurboModule { loadModule(modelSource: string): Promise; - forward(input: string): Promise<{ [category: string]: number }>; } diff --git a/src/native/NativeETInstaller.ts b/src/native/NativeETInstaller.ts new file mode 100644 index 000000000..a163524d7 --- /dev/null +++ b/src/native/NativeETInstaller.ts @@ -0,0 +1,8 @@ +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; + +export interface Spec extends TurboModule { + install(): boolean; +} + +export default TurboModuleRegistry.get('ETInstaller'); diff --git a/src/native/NativeImageSegmentation.ts b/src/native/NativeImageSegmentation.ts deleted file mode 100644 index c66c87436..000000000 --- a/src/native/NativeImageSegmentation.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { TurboModule } from 'react-native'; -import { TurboModuleRegistry } from 'react-native'; - -export interface Spec extends TurboModule { - loadModule(modelSource: string): Promise; - - forward( - input: string, - classesOfInterest: string[], - resize: boolean - ): Promise<{ [category: string]: number[] }>; -} - -export default TurboModuleRegistry.get('ImageSegmentation'); diff --git a/src/native/NativeLLM.ts b/src/native/NativeLLM.ts index edd9e5948..44db1af98 100644 --- a/src/native/NativeLLM.ts +++ b/src/native/NativeLLM.ts @@ -1,19 +1,12 @@ import type { TurboModule } from 'react-native'; import { TurboModuleRegistry } from 'react-native'; import type { EventEmitter } from 'react-native/Libraries/Types/CodegenTypes'; -import { MessageType } from '../types/common'; export interface Spec extends TurboModule { - loadLLM( - modelSource: string, - tokenizerSource: string, - systemPrompt: string, - messageHistory: MessageType[], - contextWindowLength: number - ): Promise; + loadLLM(modelSource: string, tokenizerSource: string): Promise; runInference(input: string): Promise; interrupt(): void; - deleteModule(): void; + releaseResources(): void; readonly onToken: EventEmitter; } diff --git a/src/native/NativeSpeechToText.ts b/src/native/NativeSpeechToText.ts index 83999bf3e..b140eac3e 100644 --- a/src/native/NativeSpeechToText.ts +++ b/src/native/NativeSpeechToText.ts @@ -8,8 +8,8 @@ export interface Spec extends TurboModule { modelSources: (string | number)[] ): Promise; generate(waveform: number[]): Promise; - encode(input: number[][]): Promise; - decode(prevTokens: number[], encoderOutput: number[]): Promise; + encode(input: number[]): Promise; + decode(prevTokens: number[], encoderOutput: number[]): Promise; readonly onToken: EventEmitter; } diff --git a/src/native/NativeStyleTransfer.ts b/src/native/NativeStyleTransfer.ts deleted file mode 100644 index 72e3cc03e..000000000 --- a/src/native/NativeStyleTransfer.ts +++ /dev/null @@ -1,10 +0,0 @@ -import type { TurboModule } from 'react-native'; -import { TurboModuleRegistry } from 'react-native'; - -export interface Spec extends TurboModule { - loadModule(modelSource: string): Promise; - - forward(input: string): Promise; -} - -export default TurboModuleRegistry.get('StyleTransfer'); diff --git a/src/native/NativeTextEmbeddings.ts b/src/native/NativeTextEmbeddings.ts new file mode 100644 index 000000000..011bf8f3d --- /dev/null +++ b/src/native/NativeTextEmbeddings.ts @@ -0,0 +1,9 @@ +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; + +export interface Spec extends TurboModule { + loadModule(modelSource: string, tokenizerSource: string): Promise; + forward(input: string): Promise; +} + +export default TurboModuleRegistry.get('TextEmbeddings'); diff --git a/src/native/NativeTokenizer.ts b/src/native/NativeTokenizer.ts new file mode 100644 index 000000000..da715e4cd --- /dev/null +++ b/src/native/NativeTokenizer.ts @@ -0,0 +1,13 @@ +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; + +export interface Spec extends TurboModule { + loadModule(tokenizerSource: string): Promise; + decode(input: number[], skipSpecialTokens: boolean): Promise; + encode(input: string): Promise; + getVocabSize(): Promise; + idToToken(tokenId: number): Promise; + tokenToId(token: string): Promise; +} + +export default TurboModuleRegistry.get('Tokenizer'); diff --git a/src/native/RnExecutorchModules.ts b/src/native/RnExecutorchModules.ts index e16e7d8dd..2b9b245e5 100644 --- a/src/native/RnExecutorchModules.ts +++ b/src/native/RnExecutorchModules.ts @@ -1,11 +1,14 @@ import { Platform } from 'react-native'; -import { Spec as ClassificationInterface } from './NativeClassification'; import { Spec as ObjectDetectionInterface } from './NativeObjectDetection'; -import { Spec as StyleTransferInterface } from './NativeStyleTransfer'; -import { Spec as ImageSegmentationInterface } from './NativeImageSegmentation'; import { Spec as ETModuleInterface } from './NativeETModule'; import { Spec as OCRInterface } from './NativeOCR'; import { Spec as VerticalOCRInterface } from './NativeVerticalOCR'; +import { Spec as SpeechToTextInterface } from './NativeSpeechToText'; +import { Spec as TextEmbeddingsInterface } from './NativeTextEmbeddings'; +import { Spec as LLMInterface } from './NativeLLM'; +import { Spec as ClassificationInterface } from './NativeClassification'; +import { Spec as TokenizerInterface } from './NativeTokenizer'; +import { Spec as ETInstallerInterface } from './NativeETInstaller'; const LINKING_ERROR = `The package 'react-native-executorch' doesn't seem to be linked. Make sure: \n\n` + @@ -13,271 +16,53 @@ const LINKING_ERROR = '- You rebuilt the app after installing the package\n' + '- You are not using Expo Go\n'; -const LLMSpec = require('./NativeLLM').default; - -const LLM = LLMSpec - ? LLMSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -const ETModuleSpec = require('./NativeETModule').default; - -const ETModule = ETModuleSpec - ? ETModuleSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -const ClassificationSpec = require('./NativeClassification').default; - -const Classification = ClassificationSpec - ? ClassificationSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -const ImageSegmentationSpec = require('./NativeImageSegmentation').default; - -const ImageSegmentation = ImageSegmentationSpec - ? ImageSegmentationSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -const ObjectDetectionSpec = require('./NativeObjectDetection').default; - -const ObjectDetection = ObjectDetectionSpec - ? ObjectDetectionSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -const StyleTransferSpec = require('./NativeStyleTransfer').default; - -const StyleTransfer = StyleTransferSpec - ? StyleTransferSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -const SpeechToTextSpec = require('./NativeSpeechToText').default; - -const SpeechToText = SpeechToTextSpec - ? SpeechToTextSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -const OCRSpec = require('./NativeOCR').default; - -const OCR = OCRSpec - ? OCRSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -const VerticalOCRSpec = require('./NativeVerticalOCR').default; - -const VerticalOCR = VerticalOCRSpec - ? VerticalOCRSpec - : new Proxy( - {}, - { - get() { - throw new Error(LINKING_ERROR); - }, - } - ); - -class _ImageSegmentationModule { - async forward( - input: string, - classesOfInteres: string[], - resize: boolean - ): ReturnType { - return await ImageSegmentation.forward(input, classesOfInteres, resize); - } - async loadModule( - modelSource: string | number - ): ReturnType { - return await ImageSegmentation.loadModule(modelSource); - } -} - -class _ObjectDetectionModule { - async forward( - input: string - ): ReturnType { - return await ObjectDetection.forward(input); - } - async loadModule( - modelSource: string | number - ): ReturnType { - return await ObjectDetection.loadModule(modelSource); - } -} - -class _StyleTransferModule { - async forward(input: string): ReturnType { - return await StyleTransfer.forward(input); - } - async loadModule( - modelSource: string | number - ): ReturnType { - return await StyleTransfer.loadModule(modelSource); - } -} - -class _SpeechToTextModule { - async generate(waveform: number[][]): Promise { - return await SpeechToText.generate(waveform); - } - - async loadModule(modelName: String, modelSources: (string | number)[]) { - return await SpeechToText.loadModule(modelName, modelSources); - } - - async encode(input: number[]) { - return await SpeechToText.encode(input); - } - - async decode(prevTokens: number[], encoderOutput?: number[]) { - return await SpeechToText.decode(prevTokens, encoderOutput || []); - } +function returnSpecOrThrowLinkingError(spec: any) { + return spec + ? spec + : new Proxy( + {}, + { + get() { + throw new Error(LINKING_ERROR); + }, + } + ); } -class _ClassificationModule { - async forward(input: string): ReturnType { - return await Classification.forward(input); - } - async loadModule( - modelSource: string | number - ): ReturnType { - return await Classification.loadModule(modelSource); - } -} - -class _OCRModule { - async forward(input: string): ReturnType { - return await OCR.forward(input); - } - - async loadModule( - detectorSource: string, - recognizerSourceLarge: string, - recognizerSourceMedium: string, - recognizerSourceSmall: string, - symbols: string - ) { - return await OCR.loadModule( - detectorSource, - recognizerSourceLarge, - recognizerSourceMedium, - recognizerSourceSmall, - symbols - ); - } -} - -class _VerticalOCRModule { - async forward(input: string): ReturnType { - return await VerticalOCR.forward(input); - } - - async loadModule( - detectorLargeSource: string, - detectorMediumSource: string, - recognizerSource: string, - symbols: string, - independentCharacters: boolean - ): ReturnType { - return await VerticalOCR.loadModule( - detectorLargeSource, - detectorMediumSource, - recognizerSource, - symbols, - independentCharacters - ); - } -} - -class _ETModule { - async forward( - inputs: number[][], - shapes: number[][], - inputTypes: number[] - ): ReturnType { - return await ETModule.forward(inputs, shapes, inputTypes); - } - async loadModule( - modelSource: string - ): ReturnType { - return await ETModule.loadModule(modelSource); - } - async loadMethod( - methodName: string - ): ReturnType { - return await ETModule.loadMethod(methodName); - } -} +const LLMNativeModule: LLMInterface = returnSpecOrThrowLinkingError( + require('./NativeLLM').default +); +const ETModuleNativeModule: ETModuleInterface = returnSpecOrThrowLinkingError( + require('./NativeETModule').default +); +const ClassificationNativeModule: ClassificationInterface = + returnSpecOrThrowLinkingError(require('./NativeClassification').default); +const ObjectDetectionNativeModule: ObjectDetectionInterface = + returnSpecOrThrowLinkingError(require('./NativeObjectDetection').default); +const SpeechToTextNativeModule: SpeechToTextInterface = + returnSpecOrThrowLinkingError(require('./NativeSpeechToText').default); +const OCRNativeModule: OCRInterface = returnSpecOrThrowLinkingError( + require('./NativeOCR').default +); +const VerticalOCRNativeModule: VerticalOCRInterface = + returnSpecOrThrowLinkingError(require('./NativeVerticalOCR').default); +const TokenizerNativeModule: TokenizerInterface = returnSpecOrThrowLinkingError( + require('./NativeTokenizer').default +); +const TextEmbeddingsNativeModule: TextEmbeddingsInterface = + returnSpecOrThrowLinkingError(require('./NativeTextEmbeddings').default); +const ETInstallerNativeModule: ETInstallerInterface = + returnSpecOrThrowLinkingError(require('./NativeETInstaller').default); export { - LLM, - ETModule, - Classification, - ObjectDetection, - StyleTransfer, - ImageSegmentation, - SpeechToText, - OCR, - VerticalOCR, - _ETModule, - _ClassificationModule, - _StyleTransferModule, - _ImageSegmentationModule, - _ObjectDetectionModule, - _SpeechToTextModule, - _OCRModule, - _VerticalOCRModule, + LLMNativeModule, + ETModuleNativeModule, + ClassificationNativeModule, + ObjectDetectionNativeModule, + SpeechToTextNativeModule, + OCRNativeModule, + VerticalOCRNativeModule, + TextEmbeddingsNativeModule, + TokenizerNativeModule, + ETInstallerNativeModule, }; diff --git a/src/types/common.ts b/src/types/common.ts index b98be6159..688ac3869 100644 --- a/src/types/common.ts +++ b/src/types/common.ts @@ -1,11 +1,3 @@ -import { - _ClassificationModule, - _StyleTransferModule, - _ObjectDetectionModule, - ETModule, - _ETModule, -} from '../native/RnExecutorchModules'; - export const getTypeIdentifier = (input: ETInput): number => { if (input instanceof Int8Array) return 1; if (input instanceof Int32Array) return 3; @@ -15,19 +7,7 @@ export const getTypeIdentifier = (input: ETInput): number => { return -1; }; -export type ResourceSource = string | number; - -export interface Model { - generate: (input: string) => Promise; - response: string; - downloadProgress: number; - error: string | null; - isModelGenerating: boolean; - isGenerating: boolean; - isModelReady: boolean; - isReady: boolean; - interrupt: () => void; -} +export type ResourceSource = string | number | object; export type ETInput = | Int8Array @@ -35,26 +15,3 @@ export type ETInput = | BigInt64Array | Float32Array | Float64Array; - -export interface ExecutorchModule { - error: string | null; - isReady: boolean; - isGenerating: boolean; - forward: ( - inputs: ETInput[] | ETInput, - shapes: number[][] - ) => ReturnType<_ETModule['forward']>; - loadMethod: (methodName: string) => Promise; - loadForward: () => Promise; -} - -export type Module = - | _ClassificationModule - | _StyleTransferModule - | _ObjectDetectionModule - | typeof ETModule; - -export interface MessageType { - role: 'user' | 'assistant'; - content: string; -} diff --git a/src/types/image_segmentation.ts b/src/types/image_segmentation.ts index bc7d254dc..747d97fcd 100644 --- a/src/types/image_segmentation.ts +++ b/src/types/image_segmentation.ts @@ -1,3 +1,4 @@ +/* eslint-disable @cspell/spellchecker */ export enum DeeplabLabel { BACKGROUND, AEROPLANE, diff --git a/src/types/llm.ts b/src/types/llm.ts new file mode 100644 index 000000000..acb1d4031 --- /dev/null +++ b/src/types/llm.ts @@ -0,0 +1,50 @@ +export interface LLMType { + messageHistory: MessageType[]; + response: string; + isReady: boolean; + isGenerating: boolean; + downloadProgress: number; + error: string | null; + runInference: (input: string) => Promise; + sendMessage: (message: string) => Promise; + deleteMessage: (index: number) => void; + interrupt: () => void; +} + +export type MessageRole = 'user' | 'assistant' | 'system'; + +export interface MessageType { + role: MessageRole; + content: string; +} + +export interface ToolCall { + toolName: string; + arguments: Object; +} + +// usually tool is represented with dictionary (Object), but fields depend on the model +// unfortunately there's no one standard so it's hard to type it better +export type LLMTool = Object; + +export interface ChatConfig { + initialMessageHistory: MessageType[]; + contextWindowLength: number; + systemPrompt: string; +} + +export interface ToolsConfig { + tools: LLMTool[]; + executeToolCallback: (call: ToolCall) => Promise; + displayToolCalls?: boolean; +} + +export const SPECIAL_TOKENS = [ + 'bos_token', + 'eos_token', + 'unk_token', + 'sep_token', + 'pad_token', + 'cls_token', + 'mask_token', +]; diff --git a/src/types/ocr.ts b/src/types/ocr.ts index f633265fc..873703c63 100644 --- a/src/types/ocr.ts +++ b/src/types/ocr.ts @@ -1,3 +1,5 @@ +import { symbols } from '../constants/ocr/symbols'; + export interface OCRDetection { bbox: OCRBbox[]; text: string; @@ -9,4 +11,4 @@ export interface OCRBbox { y: number; } -export type OCRLanguage = 'en'; +export type OCRLanguage = keyof typeof symbols; diff --git a/src/types/stt.ts b/src/types/stt.ts new file mode 100644 index 000000000..d27015203 --- /dev/null +++ b/src/types/stt.ts @@ -0,0 +1,94 @@ +export interface ModelConfig { + sources: { + encoder: string; + decoder: string; + }; + tokenizer: { + source: string; + bos: number; + eos: number; + }; + isMultilingual: boolean; +} + +// Those languages are supported just by whisper multilingual +export enum SpeechToTextLanguage { + Afrikaans = 'af', + Albanian = 'sq', + Arabic = 'ar', + Armenian = 'hy', + Azerbaijani = 'az', + Basque = 'eu', + Belarusian = 'be', + Bengali = 'bn', + Bosnian = 'bs', + Bulgarian = 'bg', + Burmese = 'my', + Catalan = 'ca', + Chinese = 'zh', + Croatian = 'hr', + Czech = 'cs', + Danish = 'da', + Dutch = 'nl', + Estonian = 'et', + English = 'en', + Finnish = 'fi', + French = 'fr', + Galician = 'gl', + Georgian = 'ka', + German = 'de', + Greek = 'el', + Gujarati = 'gu', + HaitianCreole = 'ht', + Hebrew = 'he', + Hindi = 'hi', + Hungarian = 'hu', + Icelandic = 'is', + Indonesian = 'id', + Italian = 'it', + Japanese = 'ja', + Kannada = 'kn', + Kazakh = 'kk', + Khmer = 'km', + Korean = 'ko', + Lao = 'lo', + Latvian = 'lv', + Lithuanian = 'lt', + Macedonian = 'mk', + Malagasy = 'mg', + Malay = 'ms', + Malayalam = 'ml', + Maltese = 'mt', + Marathi = 'mr', + Nepali = 'ne', + Norwegian = 'no', + Persian = 'fa', + Polish = 'pl', + Portuguese = 'pt', + Punjabi = 'pa', + Romanian = 'ro', + Russian = 'ru', + Serbian = 'sr', + // eslint-disable-next-line @cspell/spellchecker + Sinhala = 'si', + Slovak = 'sk', + Slovenian = 'sl', + Spanish = 'es', + Sundanese = 'su', + Swahili = 'sw', + Swedish = 'sv', + Tagalog = 'tl', + Tajik = 'tg', + Tamil = 'ta', + Telugu = 'te', + Thai = 'th', + Turkish = 'tr', + Ukrainian = 'uk', + Urdu = 'ur', + Uzbek = 'uz', + Vietnamese = 'vi', + Welsh = 'cy', + Yiddish = 'yi', +} + +export type AvailableModels = 'whisper' | 'moonshine' | 'whisperMultilingual'; diff --git a/src/utils/ResourceFetcher.ts b/src/utils/ResourceFetcher.ts new file mode 100644 index 000000000..5bc4588d3 --- /dev/null +++ b/src/utils/ResourceFetcher.ts @@ -0,0 +1,171 @@ +import { + cacheDirectory, + createDownloadResumable, + getInfoAsync, + makeDirectoryAsync, + moveAsync, + FileSystemSessionType, + writeAsStringAsync, + EncodingType, +} from 'expo-file-system'; +import { Asset } from 'expo-asset'; +import { RNEDirectory } from '../constants/directories'; +import { ResourceSource } from '../types/common'; + +export class ResourceFetcher { + static async fetch( + source: ResourceSource, + callback: (downloadProgress: number) => void = () => {} + ) { + if (typeof source === 'object') { + return this.handleObject(source); + } + + const uri = + typeof source === 'number' ? Asset.fromModule(source).uri : source; + + // Handle local files + if (uri.startsWith('file://')) { + return this.removeFilePrefix(uri); + } + + const filename = this.getFilenameFromUri(uri); + const fileUri = `${RNEDirectory}${filename}`; + + if (await this.checkFileExists(fileUri)) { + return this.removeFilePrefix(fileUri); + } + await this.createDirectoryIfNoExists(); + + // Handle local asset files in release mode + if (!uri.includes('://')) { + const asset = Asset.fromModule(source); + const fileUriWithType = `${fileUri}.${asset.type}`; + await asset.downloadAsync(); + if (!asset.localUri) { + throw new Error(`Asset local URI is not available for ${source}`); + } + await moveAsync({ from: asset.localUri, to: fileUriWithType }); + return this.removeFilePrefix(fileUriWithType); + } + + // Handle remote file download + const cacheFileUri = `${cacheDirectory}${filename}`; + const downloadResumable = createDownloadResumable( + uri, + cacheFileUri, + { sessionType: FileSystemSessionType.BACKGROUND }, + ({ totalBytesWritten, totalBytesExpectedToWrite }) => { + callback(totalBytesWritten / totalBytesExpectedToWrite); + } + ); + const result = await downloadResumable.downloadAsync(); + if (!result || result.status !== 200) { + throw new Error(`Failed to fetch resource from '${uri}'`); + } + await moveAsync({ from: cacheFileUri, to: fileUri }); + + this.triggerHuggingFaceDownloadCounter(uri); + + return this.removeFilePrefix(fileUri); + } + + static async fetchMultipleResources( + callback: (downloadProgress: number) => void = () => {}, + ...sources: ResourceSource[] + ) { + const paths = []; + + for (let idx = 0; idx < sources.length; idx++) { + paths.push( + await this.fetch( + sources[idx]!, + this.calculateDownloadProgress(sources.length, idx, callback) + ) + ); + } + + return paths; + } + + private static calculateDownloadProgress( + numberOfFiles: number, + currentFileIndex: number, + setProgress: (downloadProgress: number) => void + ) { + return (progress: number) => { + if (progress === 1 && currentFileIndex === numberOfFiles - 1) { + setProgress(1); + return; + } + const contributionPerFile = 1 / numberOfFiles; + const baseProgress = contributionPerFile * currentFileIndex; + const scaledProgress = progress * contributionPerFile; + const updatedProgress = baseProgress + scaledProgress; + setProgress(updatedProgress); + }; + } + + private static async handleObject(source: object) { + const jsonString = JSON.stringify(source); + const digest = this.hashObject(jsonString); + const filename = `${digest}.json`; + const path = `${RNEDirectory}${filename}`; + + if (await this.checkFileExists(path)) { + return this.removeFilePrefix(path); + } + + await this.createDirectoryIfNoExists(); + await writeAsStringAsync(path, jsonString, { + encoding: EncodingType.UTF8, + }); + + return this.removeFilePrefix(path); + } + + private static getFilenameFromUri(uri: string) { + let cleanUri = uri.replace(/^https?:\/\//, ''); + cleanUri = cleanUri.split('?')?.[0]?.split('#')?.[0] ?? cleanUri; + return cleanUri.replace(/[^a-zA-Z0-9._-]/g, '_'); + } + + private static removeFilePrefix(uri: string) { + return uri.startsWith('file://') ? uri.slice(7) : uri; + } + + private static hashObject(jsonString: string) { + let hash = 0; + for (let i = 0; i < jsonString.length; i++) { + hash = (hash << 5) - hash + jsonString.charCodeAt(i); + hash |= 0; + } + return (hash >>> 0).toString(); + } + + /* + * Increments the Hugging Face download counter if the URI points to a Software Mansion Hugging Face repo. + * More information: https://huggingface.co/docs/hub/models-download-stats + */ + private static triggerHuggingFaceDownloadCounter(uri: string) { + const url = new URL(uri); + if ( + url.host === 'huggingface.co' && + url.pathname.startsWith('/software-mansion/') + ) { + const baseUrl = `${url.protocol}//${url.host}${url.pathname.split('resolve')[0]}`; + fetch(`${baseUrl}resolve/main/config.json`, { method: 'HEAD' }); + } + } + + private static async createDirectoryIfNoExists() { + if (!(await this.checkFileExists(RNEDirectory))) { + await makeDirectoryAsync(RNEDirectory, { intermediates: true }); + } + } + + private static async checkFileExists(fileUri: string) { + const fileInfo = await getInfoAsync(fileUri); + return fileInfo.exists; + } +} diff --git a/src/utils/fetchResource.ts b/src/utils/fetchResource.ts deleted file mode 100644 index ae97ada56..000000000 --- a/src/utils/fetchResource.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { - cacheDirectory, - createDownloadResumable, - getInfoAsync, - makeDirectoryAsync, - moveAsync, - FileSystemSessionType, -} from 'expo-file-system'; -import { Asset } from 'expo-asset'; -import { RNEDirectory } from '../constants/directories'; - -const getFilenameFromUri = (uri: string) => { - const filename = uri.split('/').pop()?.split('?')[0]; - if (!filename) { - throw new Error('Cannot derive filename from URI'); - } - return filename; -}; - -/** - * Increments the Hugging Face download counter if the URI points to a Software Mansion Hugging Face repo. - * More information: https://huggingface.co/docs/hub/models-download-stats - */ -const triggerHuggingFaceDownloadCounter = (uri: string) => { - const url = new URL(uri); - if ( - url.host === 'huggingface.co' && - url.pathname.startsWith('/software-mansion/') - ) { - const baseUrl = `${url.protocol}//${url.host}${url.pathname.split('resolve')[0]}`; - fetch(`${baseUrl}resolve/main/config.json`, { method: 'HEAD' }); - } -}; - -export const fetchResource = async ( - source: string | number, - callback: (downloadProgress: number) => void = () => {} -) => { - const uri = - typeof source === 'number' ? Asset.fromModule(source).uri : source; - - // Handle local files - if (uri.startsWith('file://')) { - return uri; - } - - const filename = getFilenameFromUri(uri); - const fileUri = `${RNEDirectory}${filename}`; - - // Check if the file already exists - if ((await getInfoAsync(fileUri)).exists) { - return fileUri; - } - - // Create the RNEDirectory if it doesn't exist - if (!(await getInfoAsync(RNEDirectory)).exists) { - await makeDirectoryAsync(RNEDirectory, { intermediates: true }); - } - - // Handle local asset files in release mode - if (!uri.includes('://')) { - const asset = Asset.fromModule(source); - const fileUriWithType = `${fileUri}.${asset.type}`; - await asset.downloadAsync(); - await moveAsync({ from: asset.localUri!, to: fileUriWithType }); - return fileUriWithType; - } - - // Handle remote file download - const cacheFileUri = `${cacheDirectory}${filename}`; - const downloadResumable = createDownloadResumable( - uri, - cacheFileUri, - { sessionType: FileSystemSessionType.BACKGROUND }, - ({ totalBytesWritten, totalBytesExpectedToWrite }) => { - callback(totalBytesWritten / totalBytesExpectedToWrite); - } - ); - const result = await downloadResumable.downloadAsync(); - if (!result || result.status !== 200) { - throw new Error(`Failed to fetch resource from '${uri}'`); - } - await moveAsync({ from: cacheFileUri, to: fileUri }); - - triggerHuggingFaceDownloadCounter(uri); - - return fileUri; -}; - -export const calculateDownloadProgres = - ( - numberOfFiles: number, - currentFileIndex: number, - setProgress: (downloadProgress: number) => void - ) => - (progress: number) => { - if (progress === 1 && currentFileIndex === numberOfFiles - 1) { - setProgress(1); - return; - } - const contributionPerFile = 1 / numberOfFiles; - const baseProgress = contributionPerFile * currentFileIndex; - const scaledProgress = progress * contributionPerFile; - const updatedProgress = baseProgress + scaledProgress; - setProgress(updatedProgress); - }; diff --git a/src/utils/llm.ts b/src/utils/llm.ts new file mode 100644 index 000000000..54cc91b74 --- /dev/null +++ b/src/utils/llm.ts @@ -0,0 +1,34 @@ +import { LLMTool, ToolCall } from '../types/llm'; + +export const parseToolCall: (message: string) => ToolCall[] = ( + message: string +) => { + try { + const unparsedToolCalls = message.match('\\[(.|\\s)*\\]'); + if (!unparsedToolCalls) { + throw Error('Regex did not match array.'); + } + const parsedMessage: LLMTool[] = JSON.parse(unparsedToolCalls[0]); + const results = []; + + for (const tool of parsedMessage) { + if ( + 'name' in tool && + typeof tool.name === 'string' && + 'arguments' in tool && + tool.arguments !== null && + typeof tool.arguments === 'object' + ) { + results.push({ + toolName: tool.name, + arguments: tool.arguments, + }); + } + } + + return results; + } catch (e) { + console.error(e); + return []; + } +}; diff --git a/src/utils/stt.ts b/src/utils/stt.ts new file mode 100644 index 000000000..a4a912e35 --- /dev/null +++ b/src/utils/stt.ts @@ -0,0 +1,28 @@ +export const longCommonInfPref = ( + seq1: number[], + seq2: number[], + hammingDistThreshold: number +) => { + let maxInd = 0; + let maxLength = 0; + + for (let i = 0; i < seq1.length; i++) { + let j = 0; + let hammingDist = 0; + while ( + j < seq2.length && + i + j < seq1.length && + (seq1[i + j] === seq2[j] || hammingDist < hammingDistThreshold) + ) { + if (seq1[i + j] !== seq2[j]) { + hammingDist++; + } + j++; + } + if (j >= maxLength) { + maxLength = j; + maxInd = i; + } + } + return maxInd; +}; diff --git a/third-party/android/libs/executorch/arm64-v8a/libexecutorch.so b/third-party/android/libs/executorch/arm64-v8a/libexecutorch.so new file mode 100644 index 000000000..8e937625c Binary files /dev/null and b/third-party/android/libs/executorch/arm64-v8a/libexecutorch.so differ diff --git a/third-party/android/libs/executorch/executorch.aar b/third-party/android/libs/executorch/executorch.aar new file mode 100644 index 000000000..f5e6830df Binary files /dev/null and b/third-party/android/libs/executorch/executorch.aar differ diff --git a/third-party/android/libs/executorch.aar b/third-party/android/libs/executorch/x86_64/libexecutorch.so similarity index 64% rename from third-party/android/libs/executorch.aar rename to third-party/android/libs/executorch/x86_64/libexecutorch.so index 86c6e2d98..fd474f30b 100644 Binary files a/third-party/android/libs/executorch.aar and b/third-party/android/libs/executorch/x86_64/libexecutorch.so differ diff --git a/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv.a b/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv.a new file mode 100644 index 000000000..aafb96d52 Binary files /dev/null and b/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv.a differ diff --git a/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv_hal.a b/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv_hal.a new file mode 100644 index 000000000..2586c51da Binary files /dev/null and b/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv_hal.a differ diff --git a/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv_thread.a b/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv_thread.a new file mode 100644 index 000000000..21b46fd53 Binary files /dev/null and b/third-party/android/libs/opencv-third-party/arm64-v8a/libkleidicv_thread.a differ diff --git a/third-party/android/libs/opencv/arm64-v8a/libopencv_core.a b/third-party/android/libs/opencv/arm64-v8a/libopencv_core.a new file mode 100644 index 000000000..dfa6cac97 Binary files /dev/null and b/third-party/android/libs/opencv/arm64-v8a/libopencv_core.a differ diff --git a/third-party/android/libs/opencv/arm64-v8a/libopencv_features2d.a b/third-party/android/libs/opencv/arm64-v8a/libopencv_features2d.a new file mode 100644 index 000000000..2d9285ff4 Binary files /dev/null and b/third-party/android/libs/opencv/arm64-v8a/libopencv_features2d.a differ diff --git a/third-party/android/libs/opencv/arm64-v8a/libopencv_highgui.a b/third-party/android/libs/opencv/arm64-v8a/libopencv_highgui.a new file mode 100644 index 000000000..f5935c0a4 Binary files /dev/null and b/third-party/android/libs/opencv/arm64-v8a/libopencv_highgui.a differ diff --git a/third-party/android/libs/opencv/arm64-v8a/libopencv_imgproc.a b/third-party/android/libs/opencv/arm64-v8a/libopencv_imgproc.a new file mode 100644 index 000000000..1230670d3 Binary files /dev/null and b/third-party/android/libs/opencv/arm64-v8a/libopencv_imgproc.a differ diff --git a/third-party/android/libs/opencv/arm64-v8a/libopencv_photo.a b/third-party/android/libs/opencv/arm64-v8a/libopencv_photo.a new file mode 100644 index 000000000..6fd7b5725 Binary files /dev/null and b/third-party/android/libs/opencv/arm64-v8a/libopencv_photo.a differ diff --git a/third-party/android/libs/opencv/arm64-v8a/libopencv_video.a b/third-party/android/libs/opencv/arm64-v8a/libopencv_video.a new file mode 100644 index 000000000..94afa14b0 Binary files /dev/null and b/third-party/android/libs/opencv/arm64-v8a/libopencv_video.a differ diff --git a/third-party/android/libs/opencv/x86_64/libopencv_core.a b/third-party/android/libs/opencv/x86_64/libopencv_core.a new file mode 100644 index 000000000..11dbb38c9 Binary files /dev/null and b/third-party/android/libs/opencv/x86_64/libopencv_core.a differ diff --git a/third-party/android/libs/opencv/x86_64/libopencv_features2d.a b/third-party/android/libs/opencv/x86_64/libopencv_features2d.a new file mode 100644 index 000000000..7dda0f00f Binary files /dev/null and b/third-party/android/libs/opencv/x86_64/libopencv_features2d.a differ diff --git a/third-party/android/libs/opencv/x86_64/libopencv_highgui.a b/third-party/android/libs/opencv/x86_64/libopencv_highgui.a new file mode 100644 index 000000000..074a6fbd7 Binary files /dev/null and b/third-party/android/libs/opencv/x86_64/libopencv_highgui.a differ diff --git a/third-party/android/libs/opencv/x86_64/libopencv_imgproc.a b/third-party/android/libs/opencv/x86_64/libopencv_imgproc.a new file mode 100644 index 000000000..af4e84658 Binary files /dev/null and b/third-party/android/libs/opencv/x86_64/libopencv_imgproc.a differ diff --git a/third-party/android/libs/opencv/x86_64/libopencv_photo.a b/third-party/android/libs/opencv/x86_64/libopencv_photo.a new file mode 100644 index 000000000..d1cd18345 Binary files /dev/null and b/third-party/android/libs/opencv/x86_64/libopencv_photo.a differ diff --git a/third-party/android/libs/opencv/x86_64/libopencv_video.a b/third-party/android/libs/opencv/x86_64/libopencv_video.a new file mode 100644 index 000000000..6d76f3b5b Binary files /dev/null and b/third-party/android/libs/opencv/x86_64/libopencv_video.a differ diff --git a/third-party/executorch b/third-party/executorch new file mode 160000 index 000000000..4eedd4b09 --- /dev/null +++ b/third-party/executorch @@ -0,0 +1 @@ +Subproject commit 4eedd4b093c01ced123929c7e1717e3fc2e9b13d diff --git a/third-party/include/c10/macros/Export.h b/third-party/include/c10/macros/Export.h new file mode 100644 index 000000000..771c869ae --- /dev/null +++ b/third-party/include/c10/macros/Export.h @@ -0,0 +1,163 @@ +#define C10_USING_CUSTOM_GENERATED_MACROS +#ifndef C10_MACROS_EXPORT_H_ +#define C10_MACROS_EXPORT_H_ + +/* Header file to define the common scaffolding for exported symbols. + * + * Export is by itself a quite tricky situation to deal with, and if you are + * hitting this file, make sure you start with the background here: + * - Linux: https://gcc.gnu.org/wiki/Visibility + * - Windows: + * https://docs.microsoft.com/en-us/cpp/cpp/dllexport-dllimport?view=vs-2017 + * + * Do NOT include this file directly. Instead, use c10/macros/Macros.h + */ + +// You do not need to edit this part of file unless you are changing the core +// pytorch export abstractions. +// +// This part defines the C10 core export and import macros. This is controlled +// by whether we are building shared libraries or not, which is determined +// during build time and codified in c10/core/cmake_macros.h. +// When the library is built as a shared lib, EXPORT and IMPORT will contain +// visibility attributes. If it is being built as a static lib, then EXPORT +// and IMPORT basically have no effect. + +// As a rule of thumb, you should almost NEVER mix static and shared builds for +// libraries that depend on c10. AKA, if c10 is built as a static library, we +// recommend everything dependent on c10 to be built statically. If c10 is built +// as a shared library, everything dependent on it should be built as shared. In +// the PyTorch project, all native libraries shall use the macro +// C10_BUILD_SHARED_LIB to check whether pytorch is building shared or static +// libraries. + +// For build systems that do not directly depend on CMake and directly build +// from the source directory (such as Buck), one may not have a cmake_macros.h +// file at all. In this case, the build system is responsible for providing +// correct macro definitions corresponding to the cmake_macros.h.in file. +// +// In such scenarios, one should define the macro +// C10_USING_CUSTOM_GENERATED_MACROS +// to inform this header that it does not need to include the cmake_macros.h +// file. + +#ifndef C10_USING_CUSTOM_GENERATED_MACROS +#include +#endif // C10_USING_CUSTOM_GENERATED_MACROS + +#ifdef _WIN32 +#define C10_HIDDEN +#if defined(C10_BUILD_SHARED_LIBS) +#define C10_EXPORT __declspec(dllexport) +#define C10_IMPORT __declspec(dllimport) +#else +#define C10_EXPORT +#define C10_IMPORT +#endif +#else // _WIN32 +#if defined(__GNUC__) +#define C10_EXPORT __attribute__((__visibility__("default"))) +#define C10_HIDDEN __attribute__((__visibility__("hidden"))) +#else // defined(__GNUC__) +#define C10_EXPORT +#define C10_HIDDEN +#endif // defined(__GNUC__) +#define C10_IMPORT C10_EXPORT +#endif // _WIN32 + +#ifdef NO_EXPORT +#undef C10_EXPORT +#define C10_EXPORT +#endif + +// Definition of an adaptive XX_API macro, that depends on whether you are +// building the library itself or not, routes to XX_EXPORT and XX_IMPORT. +// Basically, you will need to do this for each shared library that you are +// building, and the instruction is as follows: assuming that you are building +// a library called libawesome.so. You should: +// (1) for your cmake target (usually done by "add_library(awesome, ...)"), +// define a macro called AWESOME_BUILD_MAIN_LIB using +// target_compile_options. +// (2) define the AWESOME_API macro similar to the one below. +// And in the source file of your awesome library, use AWESOME_API to +// annotate public symbols. + +// Here, for the C10 library, we will define the macro C10_API for both import +// and export. + +// This one is being used by libc10.so +#ifdef C10_BUILD_MAIN_LIB +#define C10_API C10_EXPORT +#else +#define C10_API C10_IMPORT +#endif + +// This one is being used by libtorch.so +#ifdef CAFFE2_BUILD_MAIN_LIB +#define TORCH_API C10_EXPORT +#else +#define TORCH_API C10_IMPORT +#endif + +// You may be wondering: Whose brilliant idea was it to split torch_cuda into +// two pieces with confusing names? +// Once upon a time, there _was_ only TORCH_CUDA_API. All was happy until we +// tried to compile PyTorch for CUDA 11.1, which ran into relocation marker +// issues when linking big binaries. +// (https://github.com/pytorch/pytorch/issues/39968) We had two choices: +// (1) Stop supporting so many GPU architectures +// (2) Do something else +// We chose #2 and decided to split the behemoth that was torch_cuda into two +// smaller libraries, one with most of the core kernel functions (torch_cuda_cu) +// and the other that had..well..everything else (torch_cuda_cpp). The idea was +// this: instead of linking our static libraries (like the hefty +// libcudnn_static.a) with another huge library, torch_cuda, and run into pesky +// relocation marker issues, we could link our static libraries to a smaller +// part of torch_cuda (torch_cuda_cpp) and avoid the issues. + +// libtorch_cuda_cu.so +#ifdef TORCH_CUDA_CU_BUILD_MAIN_LIB +#define TORCH_CUDA_CU_API C10_EXPORT +#elif defined(BUILD_SPLIT_CUDA) +#define TORCH_CUDA_CU_API C10_IMPORT +#endif + +// libtorch_cuda_cpp.so +#ifdef TORCH_CUDA_CPP_BUILD_MAIN_LIB +#define TORCH_CUDA_CPP_API C10_EXPORT +#elif defined(BUILD_SPLIT_CUDA) +#define TORCH_CUDA_CPP_API C10_IMPORT +#endif + +// libtorch_cuda.so (where torch_cuda_cu and torch_cuda_cpp are a part of the +// same api) +#ifdef TORCH_CUDA_BUILD_MAIN_LIB +#define TORCH_CUDA_CPP_API C10_EXPORT +#define TORCH_CUDA_CU_API C10_EXPORT +#elif !defined(BUILD_SPLIT_CUDA) +#define TORCH_CUDA_CPP_API C10_IMPORT +#define TORCH_CUDA_CU_API C10_IMPORT +#endif + +#if defined(TORCH_HIP_BUILD_MAIN_LIB) +#define TORCH_HIP_CPP_API C10_EXPORT +#define TORCH_HIP_API C10_EXPORT +#else +#define TORCH_HIP_CPP_API C10_IMPORT +#define TORCH_HIP_API C10_IMPORT +#endif + +#if defined(TORCH_XPU_BUILD_MAIN_LIB) +#define TORCH_XPU_API C10_EXPORT +#else +#define TORCH_XPU_API C10_IMPORT +#endif + +// Enums only need to be exported on windows for non-CUDA files +#if defined(_WIN32) && defined(__CUDACC__) +#define C10_API_ENUM C10_API +#else +#define C10_API_ENUM +#endif + +#endif // C10_MACROS_MACROS_H_ diff --git a/third-party/include/c10/macros/Macros.h b/third-party/include/c10/macros/Macros.h new file mode 100644 index 000000000..d46e2a369 --- /dev/null +++ b/third-party/include/c10/macros/Macros.h @@ -0,0 +1,497 @@ +#define C10_USING_CUSTOM_GENERATED_MACROS +#ifndef C10_MACROS_MACROS_H_ +#define C10_MACROS_MACROS_H_ +#include + +/* Main entry for c10/macros. + * + * In your code, include c10/macros/Macros.h directly, instead of individual + * files in this folder. + */ + +// For build systems that do not directly depend on CMake and directly build +// from the source directory (such as Buck), one may not have a cmake_macros.h +// file at all. In this case, the build system is responsible for providing +// correct macro definitions corresponding to the cmake_macros.h.in file. +// +// In such scenarios, one should define the macro +// C10_USING_CUSTOM_GENERATED_MACROS +// to inform this header that it does not need to include the cmake_macros.h +// file. + +#ifndef C10_USING_CUSTOM_GENERATED_MACROS +#include +#endif // C10_USING_CUSTOM_GENERATED_MACROS + +#include + +#if defined(__clang__) +#define __ubsan_ignore_float_divide_by_zero__ \ + __attribute__((no_sanitize("float-divide-by-zero"))) +#define __ubsan_ignore_undefined__ __attribute__((no_sanitize("undefined"))) +#define __ubsan_ignore_signed_int_overflow__ \ + __attribute__((no_sanitize("signed-integer-overflow"))) +#define __ubsan_ignore_pointer_overflow__ \ + __attribute__((no_sanitize("pointer-overflow"))) +#define __ubsan_ignore_function__ __attribute__((no_sanitize("function"))) +#define __ubsan_ignore_float_cast_overflow__ \ + __attribute__((no_sanitize("float-cast-overflow"))) +#else +#define __ubsan_ignore_float_divide_by_zero__ +#define __ubsan_ignore_undefined__ +#define __ubsan_ignore_signed_int_overflow__ +#define __ubsan_ignore_pointer_overflow__ +#define __ubsan_ignore_function__ +#define __ubsan_ignore_float_cast_overflow__ +#endif + +// Detect address sanitizer as some stuff doesn't work with it +#undef C10_ASAN_ENABLED + +// for clang +#if defined(__has_feature) +#if ((__has_feature(address_sanitizer))) +#define C10_ASAN_ENABLED 1 +#endif +#endif + +// for gcc +#if defined(__SANITIZE_ADDRESS__) +#if __SANITIZE_ADDRESS__ +#if !defined(C10_ASAN_ENABLED) +#define C10_ASAN_ENABLED 1 +#endif +#endif +#endif + +#if !defined(C10_ASAN_ENABLED) +#define C10_ASAN_ENABLED 0 +#endif + +// Detect undefined-behavior sanitizer (UBSAN) +#undef C10_UBSAN_ENABLED + +// for clang or gcc >= 14 +// NB: gcc 14 adds support for Clang's __has_feature +// https://gcc.gnu.org/gcc-14/changes.html +// gcc < 14 doesn't have a macro for UBSAN +// (e.g. __SANITIZE_UNDEFINED__ does not exist in gcc) +// https://github.com/google/sanitizers/issues/765 +#if defined(__has_feature) +#if ((__has_feature(undefined_behavior_sanitizer))) +#define C10_UBSAN_ENABLED 1 +#endif +#endif + +#if !defined(C10_UBSAN_ENABLED) +#define C10_UBSAN_ENABLED 0 +#endif + +// Disable the copy and assignment operator for a class. Note that this will +// disable the usage of the class in std containers. +#define C10_DISABLE_COPY_AND_ASSIGN(classname) \ + classname(const classname &) = delete; \ + classname &operator=(const classname &) = delete + +#define C10_CONCATENATE_IMPL(s1, s2) s1##s2 +#define C10_CONCATENATE(s1, s2) C10_CONCATENATE_IMPL(s1, s2) + +#define C10_MACRO_EXPAND(args) args + +#define C10_STRINGIZE_IMPL(x) #x +#define C10_STRINGIZE(x) C10_STRINGIZE_IMPL(x) + +/** + * C10_ANONYMOUS_VARIABLE(str) introduces a new identifier which starts with + * str and ends with a unique number. + */ +#ifdef __COUNTER__ +#define C10_UID __COUNTER__ +#define C10_ANONYMOUS_VARIABLE(str) C10_CONCATENATE(str, __COUNTER__) +#else +#define C10_UID __LINE__ +#define C10_ANONYMOUS_VARIABLE(str) C10_CONCATENATE(str, __LINE__) +#endif + +#ifdef __has_cpp_attribute +#define C10_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +#define C10_HAS_CPP_ATTRIBUTE(x) (0) +#endif + +#ifndef FBCODE_CAFFE2 +/// DEPRECATED: Warn if a type or return value is discarded. +#define C10_NODISCARD [[nodiscard]] + +/// DEPRECATED: Suppress an unused variable. +#define C10_UNUSED [[maybe_unused]] +#endif + +#if !defined(__has_attribute) +#define __has_attribute(x) 0 +#endif + +// Direct port of LLVM_ATTRIBUTE_USED. +#if __has_attribute(used) +#define C10_USED __attribute__((__used__)) +#else +#define C10_USED +#endif + +#define C10_RESTRICT __restrict + +// Simply define the namespace, in case a dependent library want to refer to +// the c10 namespace but not any nontrivial files. +namespace c10 {} +namespace c10::cuda {} +namespace c10::hip {} +namespace c10::xpu {} + +// Since C10 is the core library for caffe2 (and aten), we will simply reroute +// all abstractions defined in c10 to be available in caffe2 as well. +// This is only for backwards compatibility. Please use the symbols from the +// c10 namespace where possible. +namespace caffe2 { +using namespace c10; +} +namespace at { +using namespace c10; +} +namespace at::cuda { +using namespace c10::cuda; +} // namespace at::cuda + +// WARNING!!! THIS IS A GIANT HACK!!! +// This line means you cannot simultaneously include c10/hip +// and c10/cuda and then use them from the at::cuda namespace. +// This is true in practice, because HIPIFY works inplace on +// files in ATen/cuda, so it assumes that c10::hip is available +// from at::cuda. This namespace makes that happen. When +// HIPIFY is no longer out-of-place, we can switch the cuda +// here to hip and everyone is happy. +namespace at::cuda { +using namespace c10::hip; +} // namespace at::cuda + +namespace at::xpu { +using namespace c10::xpu; +} // namespace at::xpu + +// C10_LIKELY/C10_UNLIKELY +// +// These macros provide parentheses, so you can use these macros as: +// +// if C10_LIKELY(some_expr) { +// ... +// } +// +// NB: static_cast to boolean is mandatory in C++, because __builtin_expect +// takes a long argument, which means you may trigger the wrong conversion +// without it. +// +#if defined(__GNUC__) || defined(__ICL) || defined(__clang__) +#define C10_LIKELY(expr) (__builtin_expect(static_cast(expr), 1)) +#define C10_UNLIKELY(expr) (__builtin_expect(static_cast(expr), 0)) +#else +#define C10_LIKELY(expr) (expr) +#define C10_UNLIKELY(expr) (expr) +#endif + +/// C10_NOINLINE - Functions whose declaration is annotated with this will not +/// be inlined. +#ifdef __GNUC__ +#define C10_NOINLINE __attribute__((noinline)) +#elif _MSC_VER +#define C10_NOINLINE __declspec(noinline) +#else +#define C10_NOINLINE +#endif + +#if defined(_MSC_VER) +#define C10_ALWAYS_INLINE __forceinline +#elif __has_attribute(always_inline) || defined(__GNUC__) +#define C10_ALWAYS_INLINE __attribute__((__always_inline__)) inline +#else +#define C10_ALWAYS_INLINE inline +#endif + +// Unlike C10_ALWAYS_INLINE, C10_ALWAYS_INLINE_ATTRIBUTE can be used +// on a lambda. +#if defined(_MSC_VER) +// MSVC 14.39 is reasonably recent and doesn't like +// [[msvc::forceinline]] on a lambda, so don't try to use it. +#define C10_ALWAYS_INLINE_ATTRIBUTE +#elif __has_attribute(always_inline) || defined(__GNUC__) +#define C10_ALWAYS_INLINE_ATTRIBUTE __attribute__((__always_inline__)) +#else +#define C10_ALWAYS_INLINE_ATTRIBUTE +#endif + +#if defined(_MSC_VER) +#define C10_ATTR_VISIBILITY_HIDDEN +#elif defined(__GNUC__) +#define C10_ATTR_VISIBILITY_HIDDEN __attribute__((__visibility__("hidden"))) +#else +#define C10_ATTR_VISIBILITY_HIDDEN +#endif + +#define C10_ERASE C10_ALWAYS_INLINE C10_ATTR_VISIBILITY_HIDDEN + +#include + +#ifdef __HIPCC__ +// Unlike CUDA, HIP requires a HIP header to be included for __host__ to work. +// We do this #include here so that C10_HOST_DEVICE and friends will Just Work. +// See https://github.com/ROCm-Developer-Tools/HIP/issues/441 +#include +#endif + +#if defined(__CUDACC__) || defined(__HIPCC__) +// Designates functions callable from the host (CPU) and the device (GPU) +#define C10_HOST_DEVICE __host__ __device__ +#define C10_DEVICE __device__ +#define C10_HOST __host__ +// constants from +// (https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications) +// The maximum number of threads per multiprocessor is 1024 for Turing +// architecture (7.5), 1536 for Geforce Ampere (8.6)/Jetson Orin (8.7), and +// 2048 for all other architectures. You'll get warnings if you exceed these +// constants. Hence, the following macros adjust the input values from the user +// to resolve potential warnings. +#if __CUDA_ARCH__ == 750 +constexpr uint32_t CUDA_MAX_THREADS_PER_SM = 1024; +#elif __CUDA_ARCH__ == 860 || __CUDA_ARCH__ == 870 || __CUDA_ARCH__ == 890 +constexpr uint32_t CUDA_MAX_THREADS_PER_SM = 1536; +#else +constexpr uint32_t CUDA_MAX_THREADS_PER_SM = 2048; +#endif +// CUDA_MAX_THREADS_PER_BLOCK is same for all architectures currently +constexpr uint32_t CUDA_MAX_THREADS_PER_BLOCK = 1024; +// CUDA_THREADS_PER_BLOCK_FALLBACK is the "canonical fallback" choice of block +// size. 256 is a good number for this fallback and should give good occupancy +// and versatility across all architectures. +constexpr uint32_t CUDA_THREADS_PER_BLOCK_FALLBACK = 256; +// NOTE: if you are thinking of constexpr-ify the inputs to launch bounds, it +// turns out that although __launch_bounds__ can take constexpr, it +// can't take a constexpr that has anything to do with templates. +// Currently we use launch_bounds that depend on template arguments in +// Loops.cuh, Reduce.cuh and LossCTC.cuh. Hence, C10_MAX_THREADS_PER_BLOCK +// and C10_MIN_BLOCKS_PER_SM are kept as macros. +// Suppose you were planning to write __launch_bounds__(a, b), based on your +// performance tuning on a modern GPU. Instead, you should write +// __launch_bounds__(C10_MAX_THREADS_PER_BLOCK(a), C10_MIN_BLOCKS_PER_SM(a, b)), +// which will also properly respect limits on old architectures. +#define C10_MAX_THREADS_PER_BLOCK(val) \ + (((val) <= CUDA_MAX_THREADS_PER_BLOCK) ? (val) \ + : CUDA_THREADS_PER_BLOCK_FALLBACK) +#define C10_MIN_BLOCKS_PER_SM(threads_per_block, blocks_per_sm) \ + ((((threads_per_block) * (blocks_per_sm) <= CUDA_MAX_THREADS_PER_SM) \ + ? (blocks_per_sm) \ + : ((CUDA_MAX_THREADS_PER_SM + (threads_per_block) - 1) / \ + (threads_per_block)))) +// C10_LAUNCH_BOUNDS is analogous to __launch_bounds__ +#define C10_LAUNCH_BOUNDS_0 \ + __launch_bounds__(256, \ + 4) // default launch bounds that should give good occupancy + // and versatility across all architectures. +#define C10_LAUNCH_BOUNDS_1(max_threads_per_block) \ + __launch_bounds__((C10_MAX_THREADS_PER_BLOCK((max_threads_per_block)))) +#define C10_LAUNCH_BOUNDS_2(max_threads_per_block, min_blocks_per_sm) \ + __launch_bounds__( \ + (C10_MAX_THREADS_PER_BLOCK((max_threads_per_block))), \ + (C10_MIN_BLOCKS_PER_SM((max_threads_per_block), (min_blocks_per_sm)))) +#else +#define C10_HOST_DEVICE +#define C10_HOST +#define C10_DEVICE +#endif + +#if defined(USE_ROCM) +#define C10_HIP_HOST_DEVICE __host__ __device__ +#else +#define C10_HIP_HOST_DEVICE +#endif + +#if defined(USE_ROCM) +#define C10_WARP_SIZE warpSize // = 64 or 32 (Defined in hip_runtime.h) +#else +#define C10_WARP_SIZE 32 +#endif + +#if defined(_MSC_VER) && _MSC_VER <= 1900 +#define __func__ __FUNCTION__ +#endif + +// CUDA_KERNEL_ASSERT checks the assertion +// even when NDEBUG is defined. This is useful for important assertions in CUDA +// code that would otherwise be suppressed when building Release. +#if defined(__ANDROID__) || defined(__APPLE__) || defined(__FreeBSD__) +// Those platforms do not support assert() +#define CUDA_KERNEL_ASSERT(cond) +#define CUDA_KERNEL_ASSERT_MSG(cond, msg) +#define SYCL_KERNEL_ASSERT(cond) +#elif defined(_MSC_VER) +#if defined(NDEBUG) +extern "C" { +C10_IMPORT +#if defined(__SYCL_DEVICE_ONLY__) +extern SYCL_EXTERNAL void _wassert(const wchar_t *wexpr, const wchar_t *wfile, + unsigned line); +#else +#if defined(__CUDA_ARCH__) +__host__ __device__ +#endif // __CUDA_ARCH__ + void + _wassert(wchar_t const *_Message, wchar_t const *_File, unsigned _Line); +#endif // __SYCL_DEVICE_ONLY__ +} +#endif // NDEBUG +#define CUDA_KERNEL_ASSERT(cond) \ + if (C10_UNLIKELY(!(cond))) { \ + (void)(_wassert(_CRT_WIDE(#cond), _CRT_WIDE(__FILE__), \ + static_cast(__LINE__)), \ + 0); \ + } +// TODO: This doesn't assert the message because I (chilli) couldn't figure out +// a nice way to convert a char* to a wchar_t* +#define CUDA_KERNEL_ASSERT_MSG(cond, msg) \ + if (C10_UNLIKELY(!(cond))) { \ + (void)(_wassert(_CRT_WIDE(#cond), _CRT_WIDE(__FILE__), \ + static_cast(__LINE__)), \ + 0); \ + } +#define SYCL_KERNEL_ASSERT(cond) \ + if (C10_UNLIKELY(!(cond))) { \ + (void)(_wassert(_CRT_WIDE(#cond), _CRT_WIDE(__FILE__), \ + static_cast(__LINE__)), \ + 0); \ + } +#else // __APPLE__, _MSC_VER +#if defined(NDEBUG) +extern "C" { +#if defined(__SYCL_DEVICE_ONLY__) +extern SYCL_EXTERNAL void __assert_fail(const char *expr, const char *file, + unsigned int line, const char *func); +#else // __SYCL_DEVICE_ONLY__ +#if (defined(__CUDA_ARCH__) && !(defined(__clang__) && defined(__CUDA__))) +// CUDA supports __assert_fail function which are common for both device +// and host side code. +__host__ __device__ +#endif + + // This forward declaration matching the declaration of __assert_fail + // exactly how it is in glibc in case parts of the program are compiled with + // different NDEBUG settings. Otherwise we might get 'ambiguous declaration' + // error. Note: On ROCm - this declaration serves for host side compilation. + void + __assert_fail(const char *assertion, const char *file, unsigned int line, + const char *function) noexcept __attribute__((__noreturn__)); + +#endif // __SYCL_DEVICE_ONLY__ +} +#endif // NDEBUG +// ROCm disable kernel assert by default +#if !defined(C10_USE_ROCM_KERNEL_ASSERT) and defined(USE_ROCM) +#define CUDA_KERNEL_ASSERT(cond) +#define CUDA_KERNEL_ASSERT_MSG(cond, msg) +#define SYCL_KERNEL_ASSERT(cond) +#else +#define CUDA_KERNEL_ASSERT(cond) \ + if (C10_UNLIKELY(!(cond))) { \ + __assert_fail(#cond, __FILE__, static_cast(__LINE__), \ + __func__); \ + } +#define CUDA_KERNEL_ASSERT_MSG(cond, msg) \ + if (C10_UNLIKELY(!(cond))) { \ + __assert_fail(msg, __FILE__, static_cast(__LINE__), \ + __func__); \ + } +#define SYCL_KERNEL_ASSERT(cond) \ + if (C10_UNLIKELY(!(cond))) { \ + __assert_fail(#cond, __FILE__, static_cast(__LINE__), \ + __func__); \ + } +#endif // C10_USE_ROCM_KERNEL_ASSERT and USE_ROCM +#endif // __APPLE__ + +#ifdef __APPLE__ +#include +#endif + +#if defined(__ANDROID__) +#define C10_ANDROID 1 +#define C10_MOBILE 1 +#elif (defined(__APPLE__) && \ + (TARGET_IPHONE_SIMULATOR || TARGET_OS_SIMULATOR || TARGET_OS_IPHONE)) +#define C10_IOS 1 +#define C10_MOBILE 1 +#endif // ANDROID / IOS + +#if defined(C10_MOBILE) && C10_MOBILE +#define C10_ALWAYS_INLINE_UNLESS_MOBILE inline +#else +#define C10_ALWAYS_INLINE_UNLESS_MOBILE C10_ALWAYS_INLINE +#endif + +#if !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) +#define CONSTEXPR_EXCEPT_WIN_CUDA constexpr +#define C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA constexpr + +#define STATIC_CONSTEXPR_STR_INL_EXCEPT_WIN_CUDA(field, val) \ + static constexpr const char field[] = val; +#define STATIC_CONST_STR_OUT_OF_LINE_FOR_WIN_CUDA(cls, field, val) +#endif // !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) + +#ifndef HAS_DEMANGLE +#if defined(__ANDROID__) || defined(_WIN32) || defined(__EMSCRIPTEN__) +#define HAS_DEMANGLE 0 +#elif defined(__APPLE__) && \ + (TARGET_IPHONE_SIMULATOR || TARGET_OS_SIMULATOR || TARGET_OS_IPHONE) +#define HAS_DEMANGLE 0 +#else +#define HAS_DEMANGLE 1 +#endif +#endif // HAS_DEMANGLE + +#define _C10_PRAGMA__(string) _Pragma(#string) +#define _C10_PRAGMA_(string) _C10_PRAGMA__(string) + +#ifdef __clang__ +#define C10_CLANG_DIAGNOSTIC_PUSH() _Pragma("clang diagnostic push") +#define C10_CLANG_DIAGNOSTIC_POP() _Pragma("clang diagnostic pop") +#define C10_CLANG_DIAGNOSTIC_IGNORE(flag) \ + _C10_PRAGMA_(clang diagnostic ignored flag) +#define C10_CLANG_HAS_WARNING(flag) __has_warning(flag) +#else +#define C10_CLANG_DIAGNOSTIC_PUSH() +#define C10_CLANG_DIAGNOSTIC_POP() +#define C10_CLANG_DIAGNOSTIC_IGNORE(flag) +#define C10_CLANG_HAS_WARNING(flag) 0 +#endif + +#ifdef __clang__ + +#define C10_DIAGNOSTIC_PUSH_AND_IGNORED_IF_DEFINED(warning) \ + _C10_PRAGMA_(clang diagnostic push) \ + _C10_PRAGMA_(clang diagnostic ignored "-Wunknown-warning-option") \ + _C10_PRAGMA_(clang diagnostic ignored warning) + +#define C10_DIAGNOSTIC_POP() _C10_PRAGMA_(clang diagnostic pop) + +#elif __GNUC__ + +#define C10_DIAGNOSTIC_PUSH_AND_IGNORED_IF_DEFINED(warning) \ + _C10_PRAGMA_(GCC diagnostic push) \ + _C10_PRAGMA_(GCC diagnostic ignored "-Wpragmas") \ + _C10_PRAGMA_(GCC diagnostic ignored warning) + +#define C10_DIAGNOSTIC_POP() _C10_PRAGMA_(GCC diagnostic pop) + +#else + +#define C10_DIAGNOSTIC_PUSH_AND_IGNORED_IF_DEFINED(warning) +#define C10_DIAGNOSTIC_POP() + +#endif + +#endif // C10_MACROS_MACROS_H_ diff --git a/third-party/include/c10/util/BFloat16-inl.h b/third-party/include/c10/util/BFloat16-inl.h new file mode 100644 index 000000000..d37a19d51 --- /dev/null +++ b/third-party/include/c10/util/BFloat16-inl.h @@ -0,0 +1,342 @@ +#pragma once + +#include +#include + +#include + +C10_CLANG_DIAGNOSTIC_PUSH() +#if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion") +#endif + +#if defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) +#if defined(CL_SYCL_LANGUAGE_VERSION) +#include // for SYCL 1.2.1 +#else +#include // for SYCL 2020 +#endif +#include +#endif + +namespace c10 { + +/// Constructors +inline C10_HOST_DEVICE BFloat16::BFloat16(float value) + : +#if defined(__CUDACC__) && !defined(USE_ROCM) && defined(__CUDA_ARCH__) && \ + __CUDA_ARCH__ >= 800 + x(__bfloat16_as_ushort(__float2bfloat16(value))) +#elif defined(__SYCL_DEVICE_ONLY__) && \ + defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) + x(c10::bit_cast(sycl::ext::oneapi::bfloat16(value))) +#else + // RNE by default + x(detail::round_to_nearest_even(value)) +#endif +{ +} + +/// Implicit conversions +inline C10_HOST_DEVICE BFloat16::operator float() const { +#if defined(__CUDACC__) && !defined(USE_ROCM) + return __bfloat162float(*reinterpret_cast(&x)); +#elif defined(__SYCL_DEVICE_ONLY__) && \ + defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) + return float(*reinterpret_cast(&x)); +#else + return detail::f32_from_bits(x); +#endif +} + +#if defined(__CUDACC__) && !defined(USE_ROCM) +inline C10_HOST_DEVICE BFloat16::BFloat16(const __nv_bfloat16 &value) { + x = *reinterpret_cast(&value); +} +inline C10_HOST_DEVICE BFloat16::operator __nv_bfloat16() const { + return *reinterpret_cast(&x); +} +#endif + +#if defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) +inline C10_HOST_DEVICE +BFloat16::BFloat16(const sycl::ext::oneapi::bfloat16 &value) { + x = *reinterpret_cast(&value); +} +inline C10_HOST_DEVICE BFloat16::operator sycl::ext::oneapi::bfloat16() const { + return *reinterpret_cast(&x); +} +#endif + +// CUDA intrinsics + +#if defined(__CUDACC__) || defined(__HIPCC__) +inline C10_DEVICE BFloat16 __ldg(const BFloat16 *ptr) { +#if !defined(USE_ROCM) && defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 800 + return __ldg(reinterpret_cast(ptr)); +#else + return *ptr; +#endif +} +#endif + +/// Arithmetic + +inline C10_HOST_DEVICE BFloat16 operator+(const BFloat16 &a, + const BFloat16 &b) { + return static_cast(a) + static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator-(const BFloat16 &a, + const BFloat16 &b) { + return static_cast(a) - static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator*(const BFloat16 &a, + const BFloat16 &b) { + return static_cast(a) * static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator/(const BFloat16 &a, const BFloat16 &b) + __ubsan_ignore_float_divide_by_zero__ { + return static_cast(a) / static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator-(const BFloat16 &a) { + return -static_cast(a); +} + +inline C10_HOST_DEVICE BFloat16 &operator+=(BFloat16 &a, const BFloat16 &b) { + a = a + b; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator-=(BFloat16 &a, const BFloat16 &b) { + a = a - b; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator*=(BFloat16 &a, const BFloat16 &b) { + a = a * b; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator/=(BFloat16 &a, const BFloat16 &b) { + a = a / b; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator|(BFloat16 &a, const BFloat16 &b) { + a.x = a.x | b.x; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator^(BFloat16 &a, const BFloat16 &b) { + a.x = a.x ^ b.x; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator&(BFloat16 &a, const BFloat16 &b) { + a.x = a.x & b.x; + return a; +} + +/// Arithmetic with floats + +inline C10_HOST_DEVICE float operator+(BFloat16 a, float b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE float operator-(BFloat16 a, float b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE float operator*(BFloat16 a, float b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE float operator/(BFloat16 a, float b) { + return static_cast(a) / b; +} + +inline C10_HOST_DEVICE float operator+(float a, BFloat16 b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE float operator-(float a, BFloat16 b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE float operator*(float a, BFloat16 b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE float operator/(float a, BFloat16 b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE float &operator+=(float &a, const BFloat16 &b) { + return a += static_cast(b); +} +inline C10_HOST_DEVICE float &operator-=(float &a, const BFloat16 &b) { + return a -= static_cast(b); +} +inline C10_HOST_DEVICE float &operator*=(float &a, const BFloat16 &b) { + return a *= static_cast(b); +} +inline C10_HOST_DEVICE float &operator/=(float &a, const BFloat16 &b) { + return a /= static_cast(b); +} + +/// Arithmetic with doubles + +inline C10_HOST_DEVICE double operator+(BFloat16 a, double b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE double operator-(BFloat16 a, double b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE double operator*(BFloat16 a, double b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE double operator/(BFloat16 a, double b) { + return static_cast(a) / b; +} + +inline C10_HOST_DEVICE double operator+(double a, BFloat16 b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE double operator-(double a, BFloat16 b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE double operator*(double a, BFloat16 b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE double operator/(double a, BFloat16 b) { + return a / static_cast(b); +} + +/// Arithmetic with ints + +inline C10_HOST_DEVICE BFloat16 operator+(BFloat16 a, int b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator-(BFloat16 a, int b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator*(BFloat16 a, int b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator/(BFloat16 a, int b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator+(int a, BFloat16 b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE BFloat16 operator-(int a, BFloat16 b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE BFloat16 operator*(int a, BFloat16 b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE BFloat16 operator/(int a, BFloat16 b) { + return static_cast(a) / b; +} + +//// Arithmetic with int64_t + +inline C10_HOST_DEVICE BFloat16 operator+(BFloat16 a, int64_t b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator-(BFloat16 a, int64_t b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator*(BFloat16 a, int64_t b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator/(BFloat16 a, int64_t b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator+(int64_t a, BFloat16 b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE BFloat16 operator-(int64_t a, BFloat16 b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE BFloat16 operator*(int64_t a, BFloat16 b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE BFloat16 operator/(int64_t a, BFloat16 b) { + return static_cast(a) / b; +} + +// Overloading < and > operators, because std::max and std::min use them. + +inline C10_HOST_DEVICE bool operator>(BFloat16 &lhs, BFloat16 &rhs) { + return float(lhs) > float(rhs); +} + +inline C10_HOST_DEVICE bool operator<(BFloat16 &lhs, BFloat16 &rhs) { + return float(lhs) < float(rhs); +} + +} // namespace c10 + +namespace std { + +template <> class numeric_limits { +public: + static constexpr bool is_signed = true; + static constexpr bool is_specialized = true; + static constexpr bool is_integer = false; + static constexpr bool is_exact = false; + static constexpr bool has_infinity = true; + static constexpr bool has_quiet_NaN = true; + static constexpr bool has_signaling_NaN = true; + static constexpr auto has_denorm = numeric_limits::has_denorm; + static constexpr auto has_denorm_loss = + numeric_limits::has_denorm_loss; + static constexpr auto round_style = numeric_limits::round_style; + static constexpr bool is_iec559 = false; + static constexpr bool is_bounded = true; + static constexpr bool is_modulo = false; + static constexpr int digits = 8; + static constexpr int digits10 = 2; + static constexpr int max_digits10 = 4; + static constexpr int radix = 2; + static constexpr int min_exponent = -125; + static constexpr int min_exponent10 = -37; + static constexpr int max_exponent = 128; + static constexpr int max_exponent10 = 38; + static constexpr auto traps = numeric_limits::traps; + static constexpr auto tinyness_before = + numeric_limits::tinyness_before; + + static constexpr c10::BFloat16 min() { + return c10::BFloat16(0x0080, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 lowest() { + return c10::BFloat16(0xFF7F, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 max() { + return c10::BFloat16(0x7F7F, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 epsilon() { + return c10::BFloat16(0x3C00, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 round_error() { + return c10::BFloat16(0x3F00, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 infinity() { + return c10::BFloat16(0x7F80, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 quiet_NaN() { + return c10::BFloat16(0x7FC0, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 signaling_NaN() { + return c10::BFloat16(0x7F80, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 denorm_min() { + return c10::BFloat16(0x0001, c10::BFloat16::from_bits()); + } +}; + +} // namespace std + +C10_CLANG_DIAGNOSTIC_POP() diff --git a/third-party/include/c10/util/BFloat16-math.h b/third-party/include/c10/util/BFloat16-math.h new file mode 100644 index 000000000..e5c741926 --- /dev/null +++ b/third-party/include/c10/util/BFloat16-math.h @@ -0,0 +1,266 @@ +#pragma once + +#include +#include + +C10_CLANG_DIAGNOSTIC_PUSH() +#if C10_CLANG_HAS_WARNING("-Wimplicit-float-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-float-conversion") +#endif + +namespace c10 { +template +struct is_reduced_floating_point + : std::integral_constant || + std::is_same_v> {}; + +template +constexpr bool is_reduced_floating_point_v = + is_reduced_floating_point::value; +} // namespace c10 + +namespace std { + +#if !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) +using c10::is_reduced_floating_point; +using c10::is_reduced_floating_point_v; +#endif // !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) + +template , int> = 0> +inline T acos(T a) { + return std::acos(float(a)); +} +template , int> = 0> +inline T asin(T a) { + return std::asin(float(a)); +} +template , int> = 0> +inline T atan(T a) { + return std::atan(float(a)); +} +template , int> = 0> +inline T atanh(T a) { + return std::atanh(float(a)); +} +template , int> = 0> +inline T erf(T a) { + return std::erf(float(a)); +} +template , int> = 0> +inline T erfc(T a) { + return std::erfc(float(a)); +} +template , int> = 0> +inline T exp(T a) { + return std::exp(float(a)); +} +template , int> = 0> +inline T expm1(T a) { + return std::expm1(float(a)); +} +template , int> = 0> +inline bool isfinite(T a) { + return std::isfinite(float(a)); +} +template , int> = 0> +inline T log(T a) { + return std::log(float(a)); +} +template , int> = 0> +inline T log10(T a) { + return std::log10(float(a)); +} +template , int> = 0> +inline T log1p(T a) { + return std::log1p(float(a)); +} +template , int> = 0> +inline T log2(T a) { + return std::log2(float(a)); +} +template , int> = 0> +inline T ceil(T a) { + return std::ceil(float(a)); +} +template , int> = 0> +inline T cos(T a) { + return std::cos(float(a)); +} +template , int> = 0> +inline T floor(T a) { + return std::floor(float(a)); +} +template , int> = 0> +inline T nearbyint(T a) { + return std::nearbyint(float(a)); +} +template , int> = 0> +inline T sin(T a) { + return std::sin(float(a)); +} +template , int> = 0> +inline T tan(T a) { + return std::tan(float(a)); +} +template , int> = 0> +inline T sinh(T a) { + return std::sinh(float(a)); +} +template , int> = 0> +inline T cosh(T a) { + return std::cosh(float(a)); +} +template , int> = 0> +inline T tanh(T a) { + return std::tanh(float(a)); +} +template , int> = 0> +inline T trunc(T a) { + return std::trunc(float(a)); +} +template , int> = 0> +inline T lgamma(T a) { + return std::lgamma(float(a)); +} +template , int> = 0> +inline T sqrt(T a) { + return std::sqrt(float(a)); +} +template , int> = 0> +inline T rsqrt(T a) { + return 1.0 / std::sqrt(float(a)); +} +template , int> = 0> +inline T abs(T a) { + return std::abs(float(a)); +} +#if defined(_MSC_VER) && defined(__CUDACC__) +template , int> = 0> +inline T pow(T a, double b) { + return std::pow(float(a), float(b)); +} +#else +template , int> = 0> +inline T pow(T a, double b) { + return std::pow(float(a), b); +} +#endif +template , int> = 0> +inline T pow(T a, T b) { + return std::pow(float(a), float(b)); +} +template , int> = 0> +inline T fmod(T a, T b) { + return std::fmod(float(a), float(b)); +} + +/* + The following function is inspired from the implementation in `musl` + Link to License: https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT + ---------------------------------------------------------------------- + Copyright © 2005-2020 Rich Felker, et al. + + 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. + ---------------------------------------------------------------------- + */ +template , int> = 0> +C10_HOST_DEVICE inline T nextafter(T from, T to) { + // Reference: + // https://git.musl-libc.org/cgit/musl/tree/src/math/nextafter.c + using int_repr_t = uint16_t; + constexpr uint8_t bits = 16; + union { + T f; + int_repr_t i; + } ufrom = {from}, uto = {to}; + + // get a mask to get the sign bit i.e. MSB + int_repr_t sign_mask = int_repr_t{1} << (bits - 1); + + // short-circuit: if either is NaN, return NaN + if (from != from || to != to) { + return from + to; + } + + // short-circuit: if they are exactly the same. + if (ufrom.i == uto.i) { + return from; + } + + // mask the sign-bit to zero i.e. positive + // equivalent to abs(x) + int_repr_t abs_from = ufrom.i & ~sign_mask; + int_repr_t abs_to = uto.i & ~sign_mask; + if (abs_from == 0) { + // if both are zero but with different sign, + // preserve the sign of `to`. + if (abs_to == 0) { + return to; + } + // smallest subnormal with sign of `to`. + ufrom.i = (uto.i & sign_mask) | int_repr_t{1}; + return ufrom.f; + } + + // if abs(from) > abs(to) or sign(from) != sign(to) + if (abs_from > abs_to || ((ufrom.i ^ uto.i) & sign_mask)) { + ufrom.i--; + } else { + ufrom.i++; + } + + return ufrom.f; +} + +} // namespace std + +C10_CLANG_DIAGNOSTIC_POP() diff --git a/third-party/include/c10/util/BFloat16.h b/third-party/include/c10/util/BFloat16.h new file mode 100644 index 000000000..e457e6dcc --- /dev/null +++ b/third-party/include/c10/util/BFloat16.h @@ -0,0 +1,125 @@ +#pragma once + +// Defines the bloat16 type (brain floating-point). This representation uses +// 1 bit for the sign, 8 bits for the exponent and 7 bits for the mantissa. + +#include +#include +#include +#include +#include +#include + +#if defined(__CUDACC__) && !defined(USE_ROCM) +#include +#endif + +#if defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) +#if defined(CL_SYCL_LANGUAGE_VERSION) +#include // for SYCL 1.2.1 +#else +#include // for SYCL 2020 +#endif +#include +#endif + +namespace c10 { + +namespace detail { +inline C10_HOST_DEVICE float f32_from_bits(uint16_t src) { + float res = 0; + uint32_t tmp = src; + tmp <<= 16; + +#if defined(USE_ROCM) + float *tempRes; + + // We should be using memcpy in order to respect the strict aliasing rule + // but it fails in the HIP environment. + tempRes = reinterpret_cast(&tmp); + res = *tempRes; +#else + std::memcpy(&res, &tmp, sizeof(tmp)); +#endif + + return res; +} + +inline C10_HOST_DEVICE uint16_t bits_from_f32(float src) { + uint32_t res = 0; + +#if defined(USE_ROCM) + // We should be using memcpy in order to respect the strict aliasing rule + // but it fails in the HIP environment. + uint32_t *tempRes = reinterpret_cast(&src); + res = *tempRes; +#else + std::memcpy(&res, &src, sizeof(res)); +#endif + + return res >> 16; +} + +inline C10_HOST_DEVICE uint16_t round_to_nearest_even(float src) { +#if defined(USE_ROCM) + if (src != src) { +#elif defined(_MSC_VER) + if (isnan(src)) { +#else + if (std::isnan(src)) { +#endif + return UINT16_C(0x7FC0); + } else { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init) + union { + uint32_t U32; // NOLINT(facebook-hte-BadMemberName) + float F32; // NOLINT(facebook-hte-BadMemberName) + }; + + F32 = src; + uint32_t rounding_bias = ((U32 >> 16) & 1) + UINT32_C(0x7FFF); + return static_cast((U32 + rounding_bias) >> 16); + } +} +} // namespace detail + +struct alignas(2) BFloat16 { + uint16_t x; + + // HIP wants __host__ __device__ tag, CUDA does not +#if defined(USE_ROCM) + C10_HOST_DEVICE BFloat16() = default; +#else + BFloat16() = default; +#endif + + struct from_bits_t {}; + static constexpr C10_HOST_DEVICE from_bits_t from_bits() { + return from_bits_t(); + } + + constexpr C10_HOST_DEVICE BFloat16(unsigned short bits, from_bits_t) + : x(bits) {} + /* implicit */ inline C10_HOST_DEVICE BFloat16(float value); + inline C10_HOST_DEVICE operator float() const; + +#if defined(__CUDACC__) && !defined(USE_ROCM) + inline C10_HOST_DEVICE BFloat16(const __nv_bfloat16 &value); + explicit inline C10_HOST_DEVICE operator __nv_bfloat16() const; +#endif + +#if defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) + inline C10_HOST_DEVICE BFloat16(const sycl::ext::oneapi::bfloat16 &value); + explicit inline C10_HOST_DEVICE operator sycl::ext::oneapi::bfloat16() const; +#endif +}; + +C10_API inline std::ostream &operator<<(std::ostream &out, + const BFloat16 &value) { + out << (float)value; + return out; +} + +} // namespace c10 + +#include // IWYU pragma: keep diff --git a/third-party/include/c10/util/Half-inl.h b/third-party/include/c10/util/Half-inl.h new file mode 100644 index 000000000..df2824bb6 --- /dev/null +++ b/third-party/include/c10/util/Half-inl.h @@ -0,0 +1,347 @@ +#pragma once + +#include +#include + +#include +#include + +#ifdef __CUDACC__ +#include +#endif + +#ifdef __HIPCC__ +#include +#endif + +#if defined(CL_SYCL_LANGUAGE_VERSION) +#include // for SYCL 1.2.1 +#elif defined(SYCL_LANGUAGE_VERSION) +#include // for SYCL 2020 +#endif + +#if (defined(CPU_CAPABILITY_AVX2) || defined(CPU_CAPABILITY_AVX512)) && \ + !defined(__APPLE__) +#include +#endif + +C10_CLANG_DIAGNOSTIC_PUSH() +#if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion") +#endif + +namespace c10 { + +#if defined(__aarch64__) && !defined(__CUDACC__) +/// Constructors +inline Half::Half(float16_t value) : x(detail::fp16_to_bits(value)) {} +inline Half::operator float16_t() const { return detail::fp16_from_bits(x); } +#else + +inline C10_HOST_DEVICE Half::Half(float value) + : +#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) + x(__half_as_short(__float2half(value))) +#elif defined(__SYCL_DEVICE_ONLY__) + x(c10::bit_cast(sycl::half(value))) +#elif (defined(CPU_CAPABILITY_AVX2) || defined(CPU_CAPABILITY_AVX512)) && \ + !defined(__APPLE__) + x(at::vec::float2half_scalar(value)) +#else + x(detail::fp16_ieee_from_fp32_value(value)) +#endif +{ +} + +/// Implicit conversions + +inline C10_HOST_DEVICE Half::operator float() const { +#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) + return __half2float(*reinterpret_cast(&x)); +#elif defined(__SYCL_DEVICE_ONLY__) + return float(c10::bit_cast(x)); +#elif (defined(CPU_CAPABILITY_AVX2) || defined(CPU_CAPABILITY_AVX512)) && \ + !defined(__APPLE__) + return at::vec::half2float_scalar(x); +#elif defined(__aarch64__) && !defined(__CUDACC__) + return detail::native_fp16_to_fp32_value(x); +#else + return detail::fp16_ieee_to_fp32_value(x); +#endif +} + +#endif /* !defined(__aarch64__) || defined(__CUDACC__) \ + */ + +#if defined(__CUDACC__) || defined(__HIPCC__) +inline C10_HOST_DEVICE Half::Half(const __half &value) { + x = *reinterpret_cast(&value); +} +inline C10_HOST_DEVICE Half::operator __half() const { + return *reinterpret_cast(&x); +} +#endif + +#ifdef SYCL_LANGUAGE_VERSION +inline C10_HOST_DEVICE Half::Half(const sycl::half &value) { + x = *reinterpret_cast(&value); +} +inline C10_HOST_DEVICE Half::operator sycl::half() const { + return *reinterpret_cast(&x); +} +#endif + +// CUDA intrinsics + +#if (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 350)) || \ + (defined(__clang__) && defined(__CUDA__)) +inline __device__ Half __ldg(const Half *ptr) { + return __ldg(reinterpret_cast(ptr)); +} +#endif + +/// Arithmetic + +inline C10_HOST_DEVICE Half operator+(const Half &a, const Half &b) { + return static_cast(a) + static_cast(b); +} + +inline C10_HOST_DEVICE Half operator-(const Half &a, const Half &b) { + return static_cast(a) - static_cast(b); +} + +inline C10_HOST_DEVICE Half operator*(const Half &a, const Half &b) { + return static_cast(a) * static_cast(b); +} + +inline C10_HOST_DEVICE Half operator/(const Half &a, const Half &b) + __ubsan_ignore_float_divide_by_zero__ { + return static_cast(a) / static_cast(b); +} + +inline C10_HOST_DEVICE Half operator-(const Half &a) { +#if (defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 530) || \ + defined(__HIP_DEVICE_COMPILE__) + return __hneg(a); +#elif defined(__SYCL_DEVICE_ONLY__) + return -c10::bit_cast(a); +#else + return -static_cast(a); +#endif +} + +inline C10_HOST_DEVICE Half &operator+=(Half &a, const Half &b) { + a = a + b; + return a; +} + +inline C10_HOST_DEVICE Half &operator-=(Half &a, const Half &b) { + a = a - b; + return a; +} + +inline C10_HOST_DEVICE Half &operator*=(Half &a, const Half &b) { + a = a * b; + return a; +} + +inline C10_HOST_DEVICE Half &operator/=(Half &a, const Half &b) { + a = a / b; + return a; +} + +/// Arithmetic with floats + +inline C10_HOST_DEVICE float operator+(Half a, float b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE float operator-(Half a, float b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE float operator*(Half a, float b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE float +operator/(Half a, float b) __ubsan_ignore_float_divide_by_zero__ { + return static_cast(a) / b; +} + +inline C10_HOST_DEVICE float operator+(float a, Half b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE float operator-(float a, Half b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE float operator*(float a, Half b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE float +operator/(float a, Half b) __ubsan_ignore_float_divide_by_zero__ { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE float &operator+=(float &a, const Half &b) { + return a += static_cast(b); +} +inline C10_HOST_DEVICE float &operator-=(float &a, const Half &b) { + return a -= static_cast(b); +} +inline C10_HOST_DEVICE float &operator*=(float &a, const Half &b) { + return a *= static_cast(b); +} +inline C10_HOST_DEVICE float &operator/=(float &a, const Half &b) { + return a /= static_cast(b); +} + +/// Arithmetic with doubles + +inline C10_HOST_DEVICE double operator+(Half a, double b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE double operator-(Half a, double b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE double operator*(Half a, double b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE double +operator/(Half a, double b) __ubsan_ignore_float_divide_by_zero__ { + return static_cast(a) / b; +} + +inline C10_HOST_DEVICE double operator+(double a, Half b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE double operator-(double a, Half b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE double operator*(double a, Half b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE double +operator/(double a, Half b) __ubsan_ignore_float_divide_by_zero__ { + return a / static_cast(b); +} + +/// Arithmetic with ints + +inline C10_HOST_DEVICE Half operator+(Half a, int b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE Half operator-(Half a, int b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE Half operator*(Half a, int b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE Half operator/(Half a, int b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE Half operator+(int a, Half b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE Half operator-(int a, Half b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE Half operator*(int a, Half b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE Half operator/(int a, Half b) { + return static_cast(a) / b; +} + +//// Arithmetic with int64_t + +inline C10_HOST_DEVICE Half operator+(Half a, int64_t b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE Half operator-(Half a, int64_t b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE Half operator*(Half a, int64_t b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE Half operator/(Half a, int64_t b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE Half operator+(int64_t a, Half b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE Half operator-(int64_t a, Half b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE Half operator*(int64_t a, Half b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE Half operator/(int64_t a, Half b) { + return static_cast(a) / b; +} + +/// NOTE: we do not define comparisons directly and instead rely on the implicit +/// conversion from c10::Half to float. + +} // namespace c10 + +namespace std { + +template <> class numeric_limits { +public: + static constexpr bool is_specialized = true; + static constexpr bool is_signed = true; + static constexpr bool is_integer = false; + static constexpr bool is_exact = false; + static constexpr bool has_infinity = true; + static constexpr bool has_quiet_NaN = true; + static constexpr bool has_signaling_NaN = true; + static constexpr auto has_denorm = numeric_limits::has_denorm; + static constexpr auto has_denorm_loss = + numeric_limits::has_denorm_loss; + static constexpr auto round_style = numeric_limits::round_style; + static constexpr bool is_iec559 = true; + static constexpr bool is_bounded = true; + static constexpr bool is_modulo = false; + static constexpr int digits = 11; + static constexpr int digits10 = 3; + static constexpr int max_digits10 = 5; + static constexpr int radix = 2; + static constexpr int min_exponent = -13; + static constexpr int min_exponent10 = -4; + static constexpr int max_exponent = 16; + static constexpr int max_exponent10 = 4; + static constexpr auto traps = numeric_limits::traps; + static constexpr auto tinyness_before = + numeric_limits::tinyness_before; + static constexpr c10::Half min() { + return c10::Half(0x0400, c10::Half::from_bits()); + } + static constexpr c10::Half lowest() { + return c10::Half(0xFBFF, c10::Half::from_bits()); + } + static constexpr c10::Half max() { + return c10::Half(0x7BFF, c10::Half::from_bits()); + } + static constexpr c10::Half epsilon() { + return c10::Half(0x1400, c10::Half::from_bits()); + } + static constexpr c10::Half round_error() { + return c10::Half(0x3800, c10::Half::from_bits()); + } + static constexpr c10::Half infinity() { + return c10::Half(0x7C00, c10::Half::from_bits()); + } + static constexpr c10::Half quiet_NaN() { + return c10::Half(0x7E00, c10::Half::from_bits()); + } + static constexpr c10::Half signaling_NaN() { + return c10::Half(0x7D00, c10::Half::from_bits()); + } + static constexpr c10::Half denorm_min() { + return c10::Half(0x0001, c10::Half::from_bits()); + } +}; + +} // namespace std + +C10_CLANG_DIAGNOSTIC_POP() diff --git a/third-party/include/c10/util/Half.h b/third-party/include/c10/util/Half.h new file mode 100644 index 000000000..8c32762c1 --- /dev/null +++ b/third-party/include/c10/util/Half.h @@ -0,0 +1,416 @@ +#pragma once + +/// Defines the Half type (half-precision floating-point) including conversions +/// to standard C types and basic arithmetic operations. Note that arithmetic +/// operations are implemented by converting to floating point and +/// performing the operation in float32, instead of using CUDA half intrinsics. +/// Most uses of this type within ATen are memory bound, including the +/// element-wise kernels, and the half intrinsics aren't efficient on all GPUs. +/// If you are writing a compute bound kernel, you can use the CUDA half +/// intrinsics directly on the Half type from device code. + +#include +#include +#include +#include +#include + +#if defined(__cplusplus) +#include +#elif !defined(__OPENCL_VERSION__) +#include +#endif + +#ifdef _MSC_VER +#include +#endif + +#include +#include +#include +#include +#include + +#ifdef __CUDACC__ +#include +#endif + +#ifdef __HIPCC__ +#include +#endif + +#if defined(CL_SYCL_LANGUAGE_VERSION) +#include // for SYCL 1.2.1 +#elif defined(SYCL_LANGUAGE_VERSION) +#include // for SYCL 2020 +#endif + +#if defined(__aarch64__) && !defined(__CUDACC__) +#include +#endif + +#if defined(__GNUC__) || defined(__clang__) +#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || \ + defined(_M_IX86) +#if defined(__F16C__) && !(defined(__CUDA_ARCH__) || defined(__CUDACC__) || \ + defined(__HIP_DEVICE_COMPILE__)) +#define C10_X86_F16 1 +#include // import conversion ops from f16cintrin.h +#endif // defined(__F16C__) && !(defined(__CUDA_ARCH__) || defined(__CUDACC__) + // || defined(__HIP_DEVICE_COMPILE__)) +#endif // __x86_64__ || _M_X64 || __i386 || _M_IX86 +#endif // __GNUC__ || __clang__ + +namespace c10 { + +namespace detail { + +/* + * Convert a 16-bit floating-point number in IEEE half-precision format, in bit + * representation, to a 32-bit floating-point number in IEEE single-precision + * format, in bit representation. + * + * @note The implementation doesn't use any floating-point operations. + */ +inline uint32_t fp16_ieee_to_fp32_bits(uint16_t h) { + /* + * Extend the half-precision floating-point number to 32 bits and shift to the + * upper part of the 32-bit word: + * +---+-----+------------+-------------------+ + * | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000| + * +---+-----+------------+-------------------+ + * Bits 31 26-30 16-25 0-15 + * + * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0 + * - zero bits. + */ + const uint32_t w = (uint32_t)h << 16; + /* + * Extract the sign of the input number into the high bit of the 32-bit word: + * + * +---+----------------------------------+ + * | S |0000000 00000000 00000000 00000000| + * +---+----------------------------------+ + * Bits 31 0-31 + */ + const uint32_t sign = w & UINT32_C(0x80000000); + /* + * Extract mantissa and biased exponent of the input number into the bits 0-30 + * of the 32-bit word: + * + * +---+-----+------------+-------------------+ + * | 0 |EEEEE|MM MMMM MMMM|0000 0000 0000 0000| + * +---+-----+------------+-------------------+ + * Bits 30 27-31 17-26 0-16 + */ + const uint32_t nonsign = w & UINT32_C(0x7FFFFFFF); + /* + * Renorm shift is the number of bits to shift mantissa left to make the + * half-precision number normalized. If the initial number is normalized, some + * of its high 6 bits (sign == 0 and 5-bit exponent) equals one. In this case + * renorm_shift == 0. If the number is denormalize, renorm_shift > 0. Note + * that if we shift denormalized nonsign by renorm_shift, the unit bit of + * mantissa will shift into exponent, turning the biased exponent into 1, and + * making mantissa normalized (i.e. without leading 1). + */ +#ifdef _MSC_VER + unsigned long nonsign_bsr; + _BitScanReverse(&nonsign_bsr, (unsigned long)nonsign); + uint32_t renorm_shift = (uint32_t)nonsign_bsr ^ 31; +#else + uint32_t renorm_shift = __builtin_clz(nonsign); +#endif + renorm_shift = renorm_shift > 5 ? renorm_shift - 5 : 0; + /* + * Iff half-precision number has exponent of 15, the addition overflows + * it into bit 31, and the subsequent shift turns the high 9 bits + * into 1. Thus inf_nan_mask == 0x7F800000 if the half-precision number + * had exponent of 15 (i.e. was NaN or infinity) 0x00000000 otherwise + */ + const int32_t inf_nan_mask = + ((int32_t)(nonsign + 0x04000000) >> 8) & INT32_C(0x7F800000); + /* + * Iff nonsign is 0, it overflows into 0xFFFFFFFF, turning bit 31 + * into 1. Otherwise, bit 31 remains 0. The signed shift right by 31 + * broadcasts bit 31 into all bits of the zero_mask. Thus zero_mask == + * 0xFFFFFFFF if the half-precision number was zero (+0.0h or -0.0h) + * 0x00000000 otherwise + */ + const int32_t zero_mask = (int32_t)(nonsign - 1) >> 31; + /* + * 1. Shift nonsign left by renorm_shift to normalize it (if the input + * was denormal) + * 2. Shift nonsign right by 3 so the exponent (5 bits originally) + * becomes an 8-bit field and 10-bit mantissa shifts into the 10 high + * bits of the 23-bit mantissa of IEEE single-precision number. + * 3. Add 0x70 to the exponent (starting at bit 23) to compensate the + * different in exponent bias (0x7F for single-precision number less 0xF + * for half-precision number). + * 4. Subtract renorm_shift from the exponent (starting at bit 23) to + * account for renormalization. As renorm_shift is less than 0x70, this + * can be combined with step 3. + * 5. Binary OR with inf_nan_mask to turn the exponent into 0xFF if the + * input was NaN or infinity. + * 6. Binary ANDNOT with zero_mask to turn the mantissa and exponent + * into zero if the input was zero. + * 7. Combine with the sign of the input number. + */ + return sign | + ((((nonsign << renorm_shift >> 3) + ((0x70 - renorm_shift) << 23)) | + inf_nan_mask) & + ~zero_mask); +} + +/* + * Convert a 16-bit floating-point number in IEEE half-precision format, in bit + * representation, to a 32-bit floating-point number in IEEE single-precision + * format. + * + * @note The implementation relies on IEEE-like (no assumption about rounding + * mode and no operations on denormals) floating-point operations and bitcasts + * between integer and floating-point variables. + */ +C10_HOST_DEVICE inline float fp16_ieee_to_fp32_value(uint16_t h) { +#ifdef C10_X86_F16 + return _cvtsh_ss(h); +#else + /* + * Extend the half-precision floating-point number to 32 bits and shift to the + * upper part of the 32-bit word: + * +---+-----+------------+-------------------+ + * | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000| + * +---+-----+------------+-------------------+ + * Bits 31 26-30 16-25 0-15 + * + * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0 + * - zero bits. + */ + const uint32_t w = (uint32_t)h << 16; + /* + * Extract the sign of the input number into the high bit of the 32-bit word: + * + * +---+----------------------------------+ + * | S |0000000 00000000 00000000 00000000| + * +---+----------------------------------+ + * Bits 31 0-31 + */ + const uint32_t sign = w & UINT32_C(0x80000000); + /* + * Extract mantissa and biased exponent of the input number into the high bits + * of the 32-bit word: + * + * +-----+------------+---------------------+ + * |EEEEE|MM MMMM MMMM|0 0000 0000 0000 0000| + * +-----+------------+---------------------+ + * Bits 27-31 17-26 0-16 + */ + const uint32_t two_w = w + w; + + /* + * Shift mantissa and exponent into bits 23-28 and bits 13-22 so they become + * mantissa and exponent of a single-precision floating-point number: + * + * S|Exponent | Mantissa + * +-+---+-----+------------+----------------+ + * |0|000|EEEEE|MM MMMM MMMM|0 0000 0000 0000| + * +-+---+-----+------------+----------------+ + * Bits | 23-31 | 0-22 + * + * Next, there are some adjustments to the exponent: + * - The exponent needs to be corrected by the difference in exponent bias + * between single-precision and half-precision formats (0x7F - 0xF = 0x70) + * - Inf and NaN values in the inputs should become Inf and NaN values after + * conversion to the single-precision number. Therefore, if the biased + * exponent of the half-precision input was 0x1F (max possible value), the + * biased exponent of the single-precision output must be 0xFF (max possible + * value). We do this correction in two steps: + * - First, we adjust the exponent by (0xFF - 0x1F) = 0xE0 (see exp_offset + * below) rather than by 0x70 suggested by the difference in the exponent bias + * (see above). + * - Then we multiply the single-precision result of exponent adjustment by + * 2**(-112) to reverse the effect of exponent adjustment by 0xE0 less the + * necessary exponent adjustment by 0x70 due to difference in exponent bias. + * The floating-point multiplication hardware would ensure than Inf and + * NaN would retain their value on at least partially IEEE754-compliant + * implementations. + * + * Note that the above operations do not handle denormal inputs (where biased + * exponent == 0). However, they also do not operate on denormal inputs, and + * do not produce denormal results. + */ + constexpr uint32_t exp_offset = UINT32_C(0xE0) << 23; + // const float exp_scale = 0x1.0p-112f; + constexpr uint32_t scale_bits = (uint32_t)15 << 23; + float exp_scale_val = 0; + std::memcpy(&exp_scale_val, &scale_bits, sizeof(exp_scale_val)); + const float exp_scale = exp_scale_val; + const float normalized_value = + fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale; + + /* + * Convert denormalized half-precision inputs into single-precision results + * (always normalized). Zero inputs are also handled here. + * + * In a denormalized number the biased exponent is zero, and mantissa has + * on-zero bits. First, we shift mantissa into bits 0-9 of the 32-bit word. + * + * zeros | mantissa + * +---------------------------+------------+ + * |0000 0000 0000 0000 0000 00|MM MMMM MMMM| + * +---------------------------+------------+ + * Bits 10-31 0-9 + * + * Now, remember that denormalized half-precision numbers are represented as: + * FP16 = mantissa * 2**(-24). + * The trick is to construct a normalized single-precision number with the + * same mantissa and thehalf-precision input and with an exponent which would + * scale the corresponding mantissa bits to 2**(-24). A normalized + * single-precision floating-point number is represented as: FP32 = (1 + + * mantissa * 2**(-23)) * 2**(exponent - 127) Therefore, when the biased + * exponent is 126, a unit change in the mantissa of the input denormalized + * half-precision number causes a change of the constructed single-precision + * number by 2**(-24), i.e. the same amount. + * + * The last step is to adjust the bias of the constructed single-precision + * number. When the input half-precision number is zero, the constructed + * single-precision number has the value of FP32 = 1 * 2**(126 - 127) = + * 2**(-1) = 0.5 Therefore, we need to subtract 0.5 from the constructed + * single-precision number to get the numerical equivalent of the input + * half-precision number. + */ + constexpr uint32_t magic_mask = UINT32_C(126) << 23; + constexpr float magic_bias = 0.5f; + const float denormalized_value = + fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias; + + /* + * - Choose either results of conversion of input as a normalized number, or + * as a denormalized number, depending on the input exponent. The variable + * two_w contains input exponent in bits 27-31, therefore if its smaller than + * 2**27, the input is either a denormal number, or zero. + * - Combine the result of conversion of exponent and mantissa with the sign + * of the input number. + */ + constexpr uint32_t denormalized_cutoff = UINT32_C(1) << 27; + const uint32_t result = + sign | (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) + : fp32_to_bits(normalized_value)); + return fp32_from_bits(result); +#endif // C10_X86_F16 +} + +/* + * Convert a 32-bit floating-point number in IEEE single-precision format to a + * 16-bit floating-point number in IEEE half-precision format, in bit + * representation. + * + * @note The implementation relies on IEEE-like (no assumption about rounding + * mode and no operations on denormals) floating-point operations and bitcasts + * between integer and floating-point variables. + */ +inline uint16_t fp16_ieee_from_fp32_value(float f) { +#ifdef C10_X86_F16 + return _cvtss_sh(f, _MM_FROUND_TO_NEAREST_INT); +#else + // const float scale_to_inf = 0x1.0p+112f; + // const float scale_to_zero = 0x1.0p-110f; + constexpr uint32_t scale_to_inf_bits = (uint32_t)239 << 23; + constexpr uint32_t scale_to_zero_bits = (uint32_t)17 << 23; + float scale_to_inf_val = 0, scale_to_zero_val = 0; + std::memcpy(&scale_to_inf_val, &scale_to_inf_bits, sizeof(scale_to_inf_val)); + std::memcpy(&scale_to_zero_val, &scale_to_zero_bits, + sizeof(scale_to_zero_val)); + const float scale_to_inf = scale_to_inf_val; + const float scale_to_zero = scale_to_zero_val; + +#if defined(_MSC_VER) && _MSC_VER == 1916 + float base = ((signbit(f) != 0 ? -f : f) * scale_to_inf) * scale_to_zero; +#else + float base = (fabsf(f) * scale_to_inf) * scale_to_zero; +#endif + + const uint32_t w = fp32_to_bits(f); + const uint32_t shl1_w = w + w; + const uint32_t sign = w & UINT32_C(0x80000000); + uint32_t bias = shl1_w & UINT32_C(0xFF000000); + if (bias < UINT32_C(0x71000000)) { + bias = UINT32_C(0x71000000); + } + + base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base; + const uint32_t bits = fp32_to_bits(base); + const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00); + const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF); + const uint32_t nonsign = exp_bits + mantissa_bits; + return static_cast( + (sign >> 16) | + (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign)); +#endif // C10_X86_F16 +} + +#ifdef C10_X86_F16 +#undef C10_X86_F16 +#endif // C10_X86_F16 + +#if defined(__aarch64__) && !defined(__CUDACC__) +inline float16_t fp16_from_bits(uint16_t h) { + return c10::bit_cast(h); +} + +inline uint16_t fp16_to_bits(float16_t f) { return c10::bit_cast(f); } + +// According to https://godbolt.org/z/frExdbsWG it would translate to single +// fcvt s0, h0 +inline float native_fp16_to_fp32_value(uint16_t h) { + return static_cast(fp16_from_bits(h)); +} + +inline uint16_t native_fp16_from_fp32_value(float f) { + return fp16_to_bits(static_cast(f)); +} +#endif + +} // namespace detail + +struct alignas(2) Half { + unsigned short x; + + struct from_bits_t {}; + C10_HOST_DEVICE static constexpr from_bits_t from_bits() { + return from_bits_t(); + } + + // HIP wants __host__ __device__ tag, CUDA does not +#if defined(USE_ROCM) + C10_HOST_DEVICE Half() = default; +#else + Half() = default; +#endif + + constexpr C10_HOST_DEVICE Half(unsigned short bits, from_bits_t) : x(bits) {} +#if defined(__aarch64__) && !defined(__CUDACC__) + inline Half(float16_t value); + inline operator float16_t() const; +#else + inline C10_HOST_DEVICE Half(float value); + inline C10_HOST_DEVICE operator float() const; +#endif + +#if defined(__CUDACC__) || defined(__HIPCC__) + inline C10_HOST_DEVICE Half(const __half &value); + inline C10_HOST_DEVICE operator __half() const; +#endif +#ifdef SYCL_LANGUAGE_VERSION + inline C10_HOST_DEVICE Half(const sycl::half &value); + inline C10_HOST_DEVICE operator sycl::half() const; +#endif +}; + +C10_API inline std::ostream &operator<<(std::ostream &out, const Half &value) { + out << (float)value; + return out; +} + +} // namespace c10 + +#include // IWYU pragma: keep diff --git a/third-party/include/c10/util/TypeSafeSignMath.h b/third-party/include/c10/util/TypeSafeSignMath.h new file mode 100644 index 000000000..3ec70e6b6 --- /dev/null +++ b/third-party/include/c10/util/TypeSafeSignMath.h @@ -0,0 +1,133 @@ +#pragma once + +#include +#include +#include + +C10_CLANG_DIAGNOSTIC_PUSH() +#if C10_CLANG_HAS_WARNING("-Wstring-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wstring-conversion") +#endif +#if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion") +#endif + +namespace c10 { + +/// Returns false since we cannot have x < 0 if x is unsigned. +template +inline constexpr bool is_negative(const T & /*x*/, + std::true_type /*is_unsigned*/) { + return false; +} + +/// Returns true if a signed variable x < 0 +template +inline constexpr bool is_negative(const T &x, std::false_type /*is_unsigned*/) { + return x < T(0); +} + +/// Returns true if x < 0 +/// NOTE: Will fail on an unsigned custom type +/// For the most part it's possible to fix this if +/// the custom type has a constexpr constructor. +/// However, notably, c10::Half does not :-( +template inline constexpr bool is_negative(const T &x) { + return is_negative(x, std::is_unsigned()); +} + +/// Returns the sign of an unsigned variable x as 0, 1 +template +inline constexpr int signum(const T &x, std::true_type /*is_unsigned*/) { + return T(0) < x; +} + +/// Returns the sign of a signed variable x as -1, 0, 1 +template +inline constexpr int signum(const T &x, std::false_type /*is_unsigned*/) { + return (T(0) < x) - (x < T(0)); +} + +/// Returns the sign of x as -1, 0, 1 +/// NOTE: Will fail on an unsigned custom type +/// For the most part it's possible to fix this if +/// the custom type has a constexpr constructor. +/// However, notably, c10::Half does not :-( +template inline constexpr int signum(const T &x) { + return signum(x, std::is_unsigned()); +} + +/// Returns true if a and b are not both negative +template +inline constexpr bool signs_differ(const T &a, const U &b) { + return is_negative(a) != is_negative(b); +} + +// Suppress sign compare warning when compiling with GCC +// as later does not account for short-circuit rule before +// raising the warning, see https://godbolt.org/z/Tr3Msnz99 +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-compare" +#endif + +/// Returns true if x is greater than the greatest value of the type Limit +template +inline constexpr bool greater_than_max(const T &x) { + constexpr bool can_overflow = + std::numeric_limits::digits > std::numeric_limits::digits; + return can_overflow && x > std::numeric_limits::max(); +} + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + +/// Returns true if x < lowest(Limit). Standard comparison +template +inline constexpr bool less_than_lowest(const T &x, + std::false_type /*limit_is_unsigned*/, + std::false_type /*x_is_unsigned*/) { + return x < std::numeric_limits::lowest(); +} + +/// Returns false since all the limit is signed and therefore includes +/// negative values but x cannot be negative because it is unsigned +template +inline constexpr bool less_than_lowest(const T & /*x*/, + std::false_type /*limit_is_unsigned*/, + std::true_type /*x_is_unsigned*/) { + return false; +} + +/// Returns true if x < 0, where 0 is constructed from T. +/// Limit is not signed, so its lower value is zero +template +inline constexpr bool less_than_lowest(const T &x, + std::true_type /*limit_is_unsigned*/, + std::false_type /*x_is_unsigned*/) { + return x < T(0); +} + +/// Returns false sign both types are unsigned +template +inline constexpr bool less_than_lowest(const T & /*x*/, + std::true_type /*limit_is_unsigned*/, + std::true_type /*x_is_unsigned*/) { + return false; +} + +/// Returns true if x is less than the lowest value of type T +/// NOTE: Will fail on an unsigned custom type +/// For the most part it's possible to fix this if +/// the custom type has a constexpr constructor. +/// However, notably, c10::Half does not : +template +inline constexpr bool less_than_lowest(const T &x) { + return less_than_lowest(x, std::is_unsigned(), + std::is_unsigned()); +} + +} // namespace c10 + +C10_CLANG_DIAGNOSTIC_POP() diff --git a/third-party/include/c10/util/bit_cast.h b/third-party/include/c10/util/bit_cast.h new file mode 100644 index 000000000..640c9c029 --- /dev/null +++ b/third-party/include/c10/util/bit_cast.h @@ -0,0 +1,43 @@ +#pragma once + +#include +#include + +#if __has_include() && (__cplusplus >= 202002L || (defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L)) +#include +#define C10_HAVE_STD_BIT_CAST 1 +#else +#define C10_HAVE_STD_BIT_CAST 0 +#endif // __has_include() && (__cplusplus >= 202002L || + // (defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L)) + +namespace c10 { + +#if C10_HAVE_STD_BIT_CAST +using std::bit_cast; +#else +// Implementations of std::bit_cast() from C++ 20. +// +// This is a less sketchy version of reinterpret_cast. +// +// See https://en.cppreference.com/w/cpp/numeric/bit_cast for more +// information as well as the source of our implementations. +template +std::enable_if_t && + std::is_trivially_copyable_v, + To> +// constexpr support needs compiler magic +bit_cast(const From &src) noexcept { + static_assert(std::is_trivially_constructible_v, + "This implementation additionally requires " + "destination type to be trivially constructible"); + + To dst; + std::memcpy(&dst, &src, sizeof(To)); + return dst; +} +#endif // C10_HAVE_STD_BIT_CAST +#undef C10_HAVE_STD_BIT_CAST + +} // namespace c10 diff --git a/third-party/include/c10/util/floating_point_utils.h b/third-party/include/c10/util/floating_point_utils.h new file mode 100644 index 000000000..b240c4ea2 --- /dev/null +++ b/third-party/include/c10/util/floating_point_utils.h @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include + +namespace c10::detail { + +C10_HOST_DEVICE inline float fp32_from_bits(uint32_t w) { +#if defined(__OPENCL_VERSION__) + return as_float(w); +#elif defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) + return __uint_as_float((unsigned int)w); +#elif defined(__INTEL_COMPILER) + return _castu32_f32(w); +#else + return c10::bit_cast(w); +#endif +} + +C10_HOST_DEVICE inline uint32_t fp32_to_bits(float f) { +#if defined(__OPENCL_VERSION__) + return as_uint(f); +#elif defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) + return (uint32_t)__float_as_uint(f); +#elif defined(__INTEL_COMPILER) + return _castf32_u32(f); +#else + return c10::bit_cast(f); +#endif +} + +} // namespace c10::detail diff --git a/third-party/include/c10/util/irange.h b/third-party/include/c10/util/irange.h new file mode 100644 index 000000000..72a748cb0 --- /dev/null +++ b/third-party/include/c10/util/irange.h @@ -0,0 +1,107 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include + +#include +#include +#include +#include + +namespace c10 { + +namespace detail { + +template , int> = 0> +struct integer_iterator { + using iterator_category = std::input_iterator_tag; + using value_type = I; + using difference_type = std::ptrdiff_t; + using pointer = I *; + using reference = I &; + + explicit constexpr integer_iterator(I value_) : value(value_) {} + + constexpr I operator*() const { return value; } + + constexpr I const *operator->() const { return &value; } + + constexpr integer_iterator &operator++() { + ++value; + return *this; + } + + constexpr integer_iterator operator++(int) { + const auto copy = *this; + ++*this; + return copy; + } + + constexpr bool operator==(const integer_iterator &other) const { + if constexpr (one_sided) { + // Range-for loops' end test is `begin != end`, not `begin < + // end`. To handle `c10::irange(n)` where n < 0 (which should be + // empty), we just make `begin != end` fail whenever `end` is + // negative. + return is_negative(other.value) || value == other.value; + } else { + return value == other.value; + } + // Suppress "warning: missing return statement at end of non-void function" + // which Nvidia's Robert Crovella confirms is an NVCC compiler error + // here https://stackoverflow.com/a/64561686/752843 on 2020-10-27 + // `__builtin_unreachable();` would be best here, but it's not + // available with all compilers. So we instead return an arbitrary + // value trusting that this line will, in fact, never be reached. + return false; // Horrible hack + } + + constexpr bool operator!=(const integer_iterator &other) const { + return !(*this == other); + } + +protected: + I value; +}; + +} // namespace detail + +template , bool> = true> +struct integer_range { +public: + constexpr integer_range(I begin, I end) : begin_(begin), end_(end) {} + using iterator = detail::integer_iterator; + constexpr iterator begin() const { return begin_; } + constexpr iterator end() const { return end_; } + +private: + iterator begin_; + iterator end_; +}; + +/// Creates an integer range for the half-open interval [begin, end) +/// If end<=begin, then the range is empty. +/// The range has the type of the `end` integer; `begin` integer is +/// cast to this type. +template , bool> = true, + std::enable_if_t, bool> = true> +integer_range irange(Integer1 begin, Integer2 end) { + // If end<=begin then the range is empty; we can achieve this effect by + // choosing the larger of {begin, end} as the loop terminator + return {static_cast(begin), + std::max(static_cast(begin), end)}; +} + +/// Creates an integer range for the half-open interval [0, end) +/// If end<=begin, then the range is empty +template , bool> = true> +constexpr integer_range irange(Integer end) { + return {Integer(), end}; +} + +} // namespace c10 diff --git a/third-party/include/executorch/ExecuTorch.h b/third-party/include/executorch/ExecuTorch.h new file mode 100644 index 000000000..3a12a5ddb --- /dev/null +++ b/third-party/include/executorch/ExecuTorch.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "ExecuTorchError.h" +#import "ExecuTorchLog.h" +#import "ExecuTorchModule.h" +#import "ExecuTorchTensor.h" +#import "ExecuTorchValue.h" diff --git a/third-party/include/executorch/ExecuTorchError.h b/third-party/include/executorch/ExecuTorchError.h new file mode 100644 index 000000000..618c7fc8b --- /dev/null +++ b/third-party/include/executorch/ExecuTorchError.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +FOUNDATION_EXPORT NSErrorDomain const + ExecuTorchErrorDomain NS_SWIFT_NAME(ErrorDomain); + +NS_ASSUME_NONNULL_END diff --git a/third-party/include/executorch/ExecuTorchLog.h b/third-party/include/executorch/ExecuTorchLog.h new file mode 100644 index 000000000..a71591c7b --- /dev/null +++ b/third-party/include/executorch/ExecuTorchLog.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * Defines log levels with specific character codes representing each level. + */ +typedef NS_ENUM(NSInteger, ExecuTorchLogLevel) { + ExecuTorchLogLevelDebug = 'D', + ExecuTorchLogLevelInfo = 'I', + ExecuTorchLogLevelError = 'E', + ExecuTorchLogLevelFatal = 'F', + ExecuTorchLogLevelUnknown = '?' +} NS_SWIFT_NAME(LogLevel); + +/** + * A protocol defining the requirements for a log sink to receive log messages. + */ +NS_SWIFT_NAME(LogSink) +@protocol ExecuTorchLogSink + +/** + * Logs a message with the specified additional info. + * + * @param level The log level of the message. + * @param timestamp The timestamp of the log message since ExecuTorch PAL start. + * @param filename The name of the file generating the log message. + * @param line The line number in the file where the log message was generated. + * @param message The log message text. + */ +- (void)logWithLevel:(ExecuTorchLogLevel)level + timestamp:(NSTimeInterval)timestamp + filename:(NSString *)filename + line:(NSUInteger)line + message:(NSString *)message + NS_SWIFT_NAME(log(level:timestamp:filename:line:message:)); + +@end + +/** + * A singleton class for managing log sinks and dispatching log messages. + */ +NS_SWIFT_NAME(Log) +@interface ExecuTorchLog : NSObject + +/// The shared singleton log instance. +@property(class, readonly) ExecuTorchLog *sharedLog; + +/** + * Adds a log sink to receive log messages. + * + * @param sink The log sink to add. + */ +- (void)addSink:(id)sink NS_SWIFT_NAME(add(sink:)); + +/** + * Removes a previously added log sink. + * + * @param sink The log sink to remove. + */ +- (void)removeSink:(id)sink NS_SWIFT_NAME(remove(sink:)); + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/third-party/include/executorch/ExecuTorchModule.h b/third-party/include/executorch/ExecuTorchModule.h new file mode 100644 index 000000000..b581f68b5 --- /dev/null +++ b/third-party/include/executorch/ExecuTorchModule.h @@ -0,0 +1,286 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "ExecuTorchValue.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Enum to define loading behavior. + * Values can be a subset, but must numerically match exactly those defined in + * extension/module/module.h + */ +typedef NS_ENUM(NSInteger, ExecuTorchModuleLoadMode) { + ExecuTorchModuleLoadModeFile = 0, + ExecuTorchModuleLoadModeMmap, + ExecuTorchModuleLoadModeMmapUseMlock, + ExecuTorchModuleLoadModeMmapUseMlockIgnoreErrors, +} NS_SWIFT_NAME(ModuleLoadMode); + +/** + * Enum to define the verification level used when loading a module. + * Values can be a subset, but must numerically match exactly those defined in + * runtime/executor/program.h + */ +typedef NS_ENUM(uint8_t, ExecuTorchVerification) { + ExecuTorchVerificationMinimal, + ExecuTorchVerificationInternalConsistency, +} NS_SWIFT_NAME(ModuleVerification); + +/** + * Represents a module that encapsulates an ExecuTorch program. + * This class is a facade for loading programs and executing methods within + * them. + */ +NS_SWIFT_NAME(Module) +__attribute__((deprecated("This API is experimental."))) +@interface ExecuTorchModule : NSObject + +/** + * Initializes a module with a file path and a specified load mode. + * + * @param filePath A string representing the path to the ExecuTorch program + * file. + * @param loadMode A value from ExecuTorchModuleLoadMode that determines the + * file loading behavior. + * @return An initialized ExecuTorchModule instance. + */ +- (instancetype)initWithFilePath:(NSString *)filePath + loadMode:(ExecuTorchModuleLoadMode)loadMode + NS_DESIGNATED_INITIALIZER; + +/** + * Initializes a module with a file path using the default load mode (File + * mode). + * + * @param filePath A string representing the path to the ExecuTorch program + * file. + * @return An initialized ExecuTorchModule instance. + */ +- (instancetype)initWithFilePath:(NSString *)filePath; + +/** + * Loads the module’s program using the specified verification level. + * + * @param verification The verification level to apply when loading the program. + * @param error A pointer to an NSError pointer that will be set if an error + * occurs. + * @return YES if the program was successfully loaded; otherwise, NO. + */ +- (BOOL)loadWithVerification:(ExecuTorchVerification)verification + error:(NSError **)error; + +/** + * Loads the module’s program using minimal verification. + * + * This is a convenience overload that defaults the verification level to + * Minimal. + * + * @param error A pointer to an NSError pointer that will be set if an error + * occurs. + * @return YES if the program was successfully loaded; otherwise, NO. + */ +- (BOOL)load:(NSError **)error; + +/** + * Checks if the module is loaded. + * + * @return YES if the module's program is loaded; otherwise, NO. + */ +- (BOOL)isLoaded; + +/** + * Loads a specific method from the program. + * + * @param methodName A string representing the name of the method to load. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return YES if the method was successfully loaded; otherwise, NO. + */ +- (BOOL)loadMethod:(NSString *)methodName + error:(NSError **)error NS_SWIFT_NAME(load(_:)); + +/** + * Checks if a specific method is loaded. + * + * @param methodName A string representing the method name. + * @return YES if the method is loaded; otherwise, NO. + */ +- (BOOL)isMethodLoaded:(NSString *)methodName NS_SWIFT_NAME(isLoaded(_:)); + +/** + * Retrieves the set of method names available in the loaded program. + * + * The method names are returned as an unordered set of strings. The program and + * methods are loaded as needed. + * + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An unordered set of method names, or nil in case of an error. + */ +- (nullable NSSet *)methodNames:(NSError **)error; + +/** + * Executes a specific method with the provided input values. + * + * The method is loaded on demand if not already loaded. + * + * @param methodName A string representing the method name. + * @param values An NSArray of ExecuTorchValue objects representing the inputs. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *) + executeMethod:(NSString *)methodName + withInputs:(NSArray *)values + error:(NSError **)error NS_SWIFT_NAME(execute(_:_:)); + +/** + * Executes a specific method with the provided single input value. + * + * The method is loaded on demand if not already loaded. + * + * @param methodName A string representing the method name. + * @param value An ExecuTorchValue object representing the input. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *)executeMethod:(NSString *)methodName + withInput:(ExecuTorchValue *)value + error:(NSError **)error + NS_SWIFT_NAME(execute(_:_:)); + +/** + * Executes a specific method with no input values. + * + * The method is loaded on demand if not already loaded. + * + * @param methodName A string representing the method name. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *)executeMethod:(NSString *)methodName + error:(NSError **)error + NS_SWIFT_NAME(execute(_:)); + +/** + * Executes a specific method with the provided input tensors. + * + * The method is loaded on demand if not already loaded. + * + * @param methodName A string representing the method name. + * @param tensors An NSArray of ExecuTorchTensor objects representing the + * inputs. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *) + executeMethod:(NSString *)methodName + withTensors:(NSArray *)tensors + error:(NSError **)error NS_SWIFT_NAME(execute(_:_:)); + +/** + * Executes a specific method with the provided single input tensor. + * + * The method is loaded on demand if not already loaded. + * + * @param methodName A string representing the method name. + * @param tensor An ExecuTorchTensor object representing the input. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *)executeMethod:(NSString *)methodName + withTensor: + (ExecuTorchTensor *)tensor + error:(NSError **)error + NS_SWIFT_NAME(execute(_:_:)); + +/** + * Executes the "forward" method with the provided input values. + * + * This is a convenience method that calls the executeMethod with "forward" as + * the method name. + * + * @param values An NSArray of ExecuTorchValue objects representing the inputs. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *) + forwardWithInputs:(NSArray *)values + error:(NSError **)error NS_SWIFT_NAME(forward(_:)); + +/** + * Executes the "forward" method with the provided single input value. + * + * This is a convenience method that calls the executeMethod with "forward" as + * the method name. + * + * @param value An ExecuTorchValue object representing the input. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *)forwardWithInput: + (ExecuTorchValue *)value + error:(NSError **)error + NS_SWIFT_NAME(forward(_:)); + +/** + * Executes the "forward" method with no inputs. + * + * This is a convenience method that calls the executeMethod with "forward" as + * the method name. + * + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *)forward:(NSError **)error; + +/** + * Executes the "forward" method with the provided input tensors. + * + * This is a convenience method that calls the executeMethod with "forward" as + * the method name. + * + * @param tensors An NSArray of ExecuTorchTensor objects representing the + * inputs. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *) + forwardWithTensors:(NSArray *)tensors + error:(NSError **)error NS_SWIFT_NAME(forward(_:)); + +/** + * Executes the "forward" method with the provided single input tensor. + * + * This is a convenience method that calls the executeMethod with "forward" as + * the method name. + * + * @param tensor An ExecuTorchTensor object representing the input. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return An NSArray of ExecuTorchValue objects representing the outputs, or + * nil in case of an error. + */ +- (nullable NSArray *)forwardWithTensor: + (ExecuTorchTensor *)tensor + error:(NSError **)error + NS_SWIFT_NAME(forward(_:)); + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/third-party/include/executorch/ExecuTorchTensor.h b/third-party/include/executorch/ExecuTorchTensor.h new file mode 100644 index 000000000..1f44baeee --- /dev/null +++ b/third-party/include/executorch/ExecuTorchTensor.h @@ -0,0 +1,742 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * Enum to define the data type of a Tensor. + * Values can be a subset, but must numerically match exactly those defined in + * runtime/core/portable_type/scalar_type.h + */ +typedef NS_ENUM(int8_t, ExecuTorchDataType) { + ExecuTorchDataTypeByte, + ExecuTorchDataTypeChar, + ExecuTorchDataTypeShort, + ExecuTorchDataTypeInt, + ExecuTorchDataTypeLong, + ExecuTorchDataTypeHalf, + ExecuTorchDataTypeFloat, + ExecuTorchDataTypeDouble, + ExecuTorchDataTypeComplexHalf, + ExecuTorchDataTypeComplexFloat, + ExecuTorchDataTypeComplexDouble, + ExecuTorchDataTypeBool, + ExecuTorchDataTypeQInt8, + ExecuTorchDataTypeQUInt8, + ExecuTorchDataTypeQInt32, + ExecuTorchDataTypeBFloat16, + ExecuTorchDataTypeQUInt4x2, + ExecuTorchDataTypeQUInt2x4, + ExecuTorchDataTypeBits1x8, + ExecuTorchDataTypeBits2x4, + ExecuTorchDataTypeBits4x2, + ExecuTorchDataTypeBits8, + ExecuTorchDataTypeBits16, + ExecuTorchDataTypeFloat8_e5m2, + ExecuTorchDataTypeFloat8_e4m3fn, + ExecuTorchDataTypeFloat8_e5m2fnuz, + ExecuTorchDataTypeFloat8_e4m3fnuz, + ExecuTorchDataTypeUInt16, + ExecuTorchDataTypeUInt32, + ExecuTorchDataTypeUInt64, + ExecuTorchDataTypeUndefined, + ExecuTorchDataTypeNumOptions, +} NS_SWIFT_NAME(DataType); + +/** + * Enum to define the shape dynamism of a Tensor. + * Values can be a subset, but must numerically match exactly those defined in + * runtime/core/tensor_shape_dynamism.h + */ +typedef NS_ENUM(uint8_t, ExecuTorchShapeDynamism) { + ExecuTorchShapeDynamismStatic, + ExecuTorchShapeDynamismDynamicBound, + ExecuTorchShapeDynamismDynamicUnbound, +} NS_SWIFT_NAME(ShapeDynamism); + +/** + * Returns the size in bytes of the specified data type. + * + * @param dataType An ExecuTorchDataType value representing the tensor's element + * type. + * @return An NSInteger indicating the size in bytes. + */ +FOUNDATION_EXPORT +__attribute__((deprecated("This API is experimental."))) NSInteger +ExecuTorchSizeOfDataType(ExecuTorchDataType dataType) + NS_SWIFT_NAME(size(ofDataType:)); + +/** + * Computes the total number of elements in a tensor based on its shape. + * + * @param shape An NSArray of NSNumber objects, where each element represents a + * dimension size. + * @return An NSInteger equal to the product of the sizes of all dimensions. + */ +FOUNDATION_EXPORT +__attribute__((deprecated("This API is experimental."))) NSInteger +ExecuTorchElementCountOfShape(NSArray *shape) + NS_SWIFT_NAME(elementCount(ofShape:)); + +/** + * A tensor class for ExecuTorch operations. + * + * This class encapsulates a native TensorPtr instance and provides a variety of + * initializers and utility methods to work with tensor data. + */ +NS_SWIFT_NAME(Tensor) +__attribute__((deprecated("This API is experimental."))) +@interface ExecuTorchTensor : NSObject + +/** + * Pointer to the underlying native TensorPtr instance. + * + * @return A raw pointer to the native TensorPtr held by this Tensor class. + */ +@property(nonatomic, readonly) void *nativeInstance NS_SWIFT_UNAVAILABLE(""); + +/** + * The data type of the tensor. + * + * @return An ExecuTorchDataType value representing the tensor's element type. + */ +@property(nonatomic, readonly) ExecuTorchDataType dataType; + +/** + * The shape of the tensor. + * + * @return An NSArray of NSNumber objects representing the size of each + * dimension. + */ +@property(nonatomic, readonly) NSArray *shape; + +/** + * The order of dimensions in the tensor. + * + * @return An NSArray of NSNumber objects representing the tensor’s dimension + * order. + */ +@property(nonatomic, readonly) NSArray *dimensionOrder; + +/** + * The strides of the tensor. + * + * @return An NSArray of NSNumber objects representing the step sizes for each + * dimension. + */ +@property(nonatomic, readonly) NSArray *strides; + +/** + * The dynamism of the tensor's shape. + * + * @return An ExecuTorchShapeDynamism value indicating whether the tensor shape + * is static or dynamic. + */ +@property(nonatomic, readonly) ExecuTorchShapeDynamism shapeDynamism; + +/** + * The total number of elements in the tensor. + * + * @return An NSInteger representing the total element count. + */ +@property(nonatomic, readonly) NSInteger count; + +/** + * Initializes a tensor with a native TensorPtr instance. + * + * @param nativeInstance A pointer to a native TensorPtr instance. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithNativeInstance:(void *)nativeInstance + NS_DESIGNATED_INITIALIZER NS_SWIFT_UNAVAILABLE(""); + +/** + * Creates a new tensor by copying an existing tensor. + * + * @param otherTensor The tensor instance to copy. + * @return A new ExecuTorchTensor instance that is a copy of otherTensor. + */ +- (instancetype)initWithTensor:(ExecuTorchTensor *)otherTensor + NS_SWIFT_NAME(init(_:)); + +/** + * Returns a copy of the tensor. + * + * @return A new ExecuTorchTensor instance that is a duplicate of the current + * tensor. + */ +- (instancetype)copy; + +/** + * Executes a block with a pointer to the tensor's immutable byte data. + * + * @param handler A block that receives: + * - a pointer to the data, + * - the total number of elements, + * - and the data type. + */ +- (void)bytesWithHandler:(void (^)(const void *pointer, NSInteger count, + ExecuTorchDataType dataType))handler + NS_SWIFT_NAME(bytes(_:)); + +/** + * Executes a block with a pointer to the tensor's mutable byte data. + * + * @param handler A block that receives: + * - a mutable pointer to the data, + * - the total number of elements, + * - and the data type. + */ +- (void)mutableBytesWithHandler:(void (^)(void *pointer, NSInteger count, + ExecuTorchDataType dataType))handler + NS_SWIFT_NAME(mutableBytes(_:)); + +/** + * Resizes the tensor to a new shape. + * + * @param shape An NSArray of NSNumber objects representing the desired new + * shape. + * @param error A pointer to an NSError pointer that is set if an error occurs. + * @return YES if the tensor was successfully resized; otherwise, NO. + */ +- (BOOL)resizeToShape:(NSArray *)shape + error:(NSError **)error NS_SWIFT_NAME(resize(to:)); + +/** + * Determines whether the current tensor is equal to another tensor. + * + * @param other Another ExecuTorchTensor instance to compare against. + * @return YES if the tensors have the same type, shape, strides, and data; + * otherwise, NO. + */ +- (BOOL)isEqualToTensor:(nullable ExecuTorchTensor *)other; + ++ (instancetype)new NS_UNAVAILABLE; +- (instancetype)init NS_UNAVAILABLE; + +@end + +#pragma mark - BytesNoCopy Category + +@interface ExecuTorchTensor (BytesNoCopy) + +/** + * Initializes a tensor without copying the provided data. + * + * @param pointer A pointer to the data buffer. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param strides An NSArray of NSNumber objects representing the tensor's + * strides. + * @param dimensionOrder An NSArray of NSNumber objects indicating the order of + * dimensions. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating whether the + * shape is static or dynamic. + * @return An initialized ExecuTorchTensor instance using the provided data + * buffer. + */ +- (instancetype)initWithBytesNoCopy:(void *)pointer + shape:(NSArray *)shape + strides:(NSArray *)strides + dimensionOrder:(NSArray *)dimensionOrder + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism; + +/** + * Initializes a tensor without copying data using dynamic bound shape (default + * strides and dimension order). + * + * @param pointer A pointer to the data buffer. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param strides An NSArray of NSNumber objects representing the tensor's + * strides. + * @param dimensionOrder An NSArray of NSNumber objects indicating the order of + * dimensions. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithBytesNoCopy:(void *)pointer + shape:(NSArray *)shape + strides:(NSArray *)strides + dimensionOrder:(NSArray *)dimensionOrder + dataType:(ExecuTorchDataType)dataType; + +/** + * Initializes a tensor without copying data, with an explicit shape dynamism. + * + * @param pointer A pointer to the data buffer. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithBytesNoCopy:(void *)pointer + shape:(NSArray *)shape + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism; + +/** + * Initializes a tensor without copying data, specifying only the shape and data + * type. + * + * @param pointer A pointer to the data buffer. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithBytesNoCopy:(void *)pointer + shape:(NSArray *)shape + dataType:(ExecuTorchDataType)dataType; + +@end + +#pragma mark - Bytes Category + +@interface ExecuTorchTensor (Bytes) + +/** + * Initializes a tensor by copying bytes from the provided pointer. + * + * @param pointer A pointer to the source data buffer. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param strides An NSArray of NSNumber objects representing the tensor's + * strides. + * @param dimensionOrder An NSArray of NSNumber objects indicating the order of + * dimensions. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance with its own copy of the + * data. + */ +- (instancetype)initWithBytes:(const void *)pointer + shape:(NSArray *)shape + strides:(NSArray *)strides + dimensionOrder:(NSArray *)dimensionOrder + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism; + +/** + * Initializes a tensor by copying bytes from the provided pointer with dynamic + * bound shape. + * + * @param pointer A pointer to the source data buffer. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param strides An NSArray of NSNumber objects representing the tensor's + * strides. + * @param dimensionOrder An NSArray of NSNumber objects indicating the order of + * dimensions. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance with its own copy of the + * data. + */ +- (instancetype)initWithBytes:(const void *)pointer + shape:(NSArray *)shape + strides:(NSArray *)strides + dimensionOrder:(NSArray *)dimensionOrder + dataType:(ExecuTorchDataType)dataType; + +/** + * Initializes a tensor by copying bytes from the provided pointer, specifying + * shape, data type, and explicit shape dynamism. + * + * @param pointer A pointer to the source data buffer. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance with its own copy of the + * data. + */ +- (instancetype)initWithBytes:(const void *)pointer + shape:(NSArray *)shape + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism; + +/** + * Initializes a tensor by copying bytes from the provided pointer, specifying + * only the shape and data type. + * + * @param pointer A pointer to the source data buffer. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance with its own copy of the + * data. + */ +- (instancetype)initWithBytes:(const void *)pointer + shape:(NSArray *)shape + dataType:(ExecuTorchDataType)dataType; + +@end + +#pragma mark - Data Category + +@interface ExecuTorchTensor (Data) + +/** + * Initializes a tensor using an NSData object as the underlying data buffer. + * + * @param data An NSData object containing the tensor data. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param strides An NSArray of NSNumber objects representing the tensor's + * strides. + * @param dimensionOrder An NSArray of NSNumber objects indicating the order of + * dimensions. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance using the provided data. + */ +- (instancetype)initWithData:(NSData *)data + shape:(NSArray *)shape + strides:(NSArray *)strides + dimensionOrder:(NSArray *)dimensionOrder + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism; + +/** + * Initializes a tensor using an NSData object as the underlying data buffer + * with dynamic bound shape. + * + * @param data An NSData object containing the tensor data. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param strides An NSArray of NSNumber objects representing the tensor's + * strides. + * @param dimensionOrder An NSArray of NSNumber objects indicating the order of + * dimensions. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance using the provided data. + */ +- (instancetype)initWithData:(NSData *)data + shape:(NSArray *)shape + strides:(NSArray *)strides + dimensionOrder:(NSArray *)dimensionOrder + dataType:(ExecuTorchDataType)dataType; + +/** + * Initializes a tensor using an NSData object as the underlying data buffer, + * specifying shape, data type, and explicit shape dynamism. + * + * @param data An NSData object containing the tensor data. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance using the provided data. + */ +- (instancetype)initWithData:(NSData *)data + shape:(NSArray *)shape + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism; + +/** + * Initializes a tensor using an NSData object as the underlying data buffer, + * specifying only the shape and data type. + * + * @param data An NSData object containing the tensor data. + * @param shape An NSArray of NSNumber objects representing the tensor's shape. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance using the provided data. + */ +- (instancetype)initWithData:(NSData *)data + shape:(NSArray *)shape + dataType:(ExecuTorchDataType)dataType; + +@end + +#pragma mark - Scalars Category + +@interface ExecuTorchTensor (Scalars) + +/** + * Initializes a tensor with an array of scalar values and full tensor + * properties. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @param shape An NSArray of NSNumber objects representing the desired tensor + * shape. + * @param strides An NSArray of NSNumber objects representing the tensor + * strides. + * @param dimensionOrder An NSArray of NSNumber objects indicating the order of + * dimensions. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance containing the provided + * scalar values. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + shape:(NSArray *)shape + strides:(NSArray *)strides + dimensionOrder:(NSArray *)dimensionOrder + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism + NS_SWIFT_NAME(init(_:shape:strides:dimensionOrder:dataType:shapeDynamism:)); + +/** + * Initializes a tensor with an array of scalar values, specifying shape, + * strides, dimension order, and data type, using a default dynamic bound shape + * for shape dynamism. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @param shape An NSArray of NSNumber objects representing the desired tensor + * shape. + * @param strides An NSArray of NSNumber objects representing the tensor + * strides. + * @param dimensionOrder An NSArray of NSNumber objects indicating the order of + * dimensions. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance containing the scalar + * values. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + shape:(NSArray *)shape + strides:(NSArray *)strides + dimensionOrder:(NSArray *)dimensionOrder + dataType:(ExecuTorchDataType)dataType + NS_SWIFT_NAME(init(_:shape:strides:dimensionOrder:dataType:)); + +/** + * Initializes a tensor with an array of scalar values, specifying the desired + * shape, data type, and explicit shape dynamism. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @param shape An NSArray of NSNumber objects representing the desired tensor + * shape. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + shape:(NSArray *)shape + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism + NS_SWIFT_NAME(init(_:shape:dataType:shapeDynamism:)); + +/** + * Initializes a tensor with an array of scalar values and a specified shape, + * using a default dynamic bound shape for shape dynamism. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @param shape An NSArray of NSNumber objects representing the desired tensor + * shape. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + shape:(NSArray *)shape + dataType:(ExecuTorchDataType)dataType + NS_SWIFT_NAME(init(_:shape:dataType:)); + +/** + * Initializes a tensor with an array of scalar values, specifying the tensor + * data type and explicit shape dynamism. The shape is deduced from the count of + * the scalar array. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance with the shape deduced from + * the scalar count. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + dataType:(ExecuTorchDataType)dataType + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism + NS_SWIFT_NAME(init(_:dataType:shapeDynamism:)); + +/** + * Initializes a tensor with an array of scalar values, specifying the tensor + * data type. The shape is deduced from the count of the scalar array. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance with the shape deduced from + * the scalar count. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + dataType:(ExecuTorchDataType)dataType + NS_SWIFT_NAME(init(_:dataType:)); + +/** + * Initializes a tensor with an array of scalar values, a specified shape and + * explicit shape dynamism. The data type is automatically deduced from the + * first element of the array. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @param shape An NSArray of NSNumber objects representing the desired tensor + * shape. + * @param shapeDynamism An ExecuTorchShapeDynamism value indicating the shape + * dynamism. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + shape:(NSArray *)shape + shapeDynamism:(ExecuTorchShapeDynamism)shapeDynamism + NS_SWIFT_NAME(init(_:shape:shapeDynamism:)); + +/** + * Initializes a tensor with an array of scalar values and a specified shape. + * The data type is automatically deduced from the first element of the array. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @param shape An NSArray of NSNumber objects representing the desired tensor + * shape. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + shape:(NSArray *)shape + NS_SWIFT_NAME(init(_:shape:)); + +/** + * Initializes a tensor with an array of scalar values, automatically deducing + * the tensor shape and data type. + * + * @param scalars An NSArray of NSNumber objects representing the scalar values. + * @return An initialized ExecuTorchTensor instance with shape and data type + * deduced. + */ +- (instancetype)initWithScalars:(NSArray *)scalars + NS_SWIFT_NAME(init(_:)); + +@end + +@interface ExecuTorchTensor (Scalar) + +/** + * Initializes a tensor with a single scalar value and a specified data type. + * + * @param scalar An NSNumber representing the scalar value. + * @param dataType An ExecuTorchDataType value specifying the element type. + * @return An initialized ExecuTorchTensor instance representing the scalar. + */ +- (instancetype)initWithScalar:(NSNumber *)scalar + dataType:(ExecuTorchDataType)dataType + NS_SWIFT_NAME(init(_:dataType:)); + +/** + * Initializes a tensor with a single scalar value, automatically deducing its + * data type. + * + * @param scalar An NSNumber representing the scalar value. + * @return An initialized ExecuTorchTensor instance representing the scalar. + */ +- (instancetype)initWithScalar:(NSNumber *)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a byte scalar value. + * + * @param scalar A uint8_t value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithByte:(uint8_t)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a char scalar value. + * + * @param scalar An int8_t value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithChar:(int8_t)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a short scalar value. + * + * @param scalar An int16_t value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithShort:(int16_t)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with an int scalar value. + * + * @param scalar An int32_t value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithInt:(int32_t)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a long scalar value. + * + * @param scalar An int64_t value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithLong:(int64_t)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a float scalar value. + * + * @param scalar A float value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithFloat:(float)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a double scalar value. + * + * @param scalar A double value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithDouble:(double)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a boolean scalar value. + * + * @param scalar A BOOL value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithBool:(BOOL)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a uint16 scalar value. + * + * @param scalar A uint16_t value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithUInt16:(uint16_t)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a uint32 scalar value. + * + * @param scalar A uint32_t value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithUInt32:(uint32_t)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with a uint64 scalar value. + * + * @param scalar A uint64_t value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithUInt64:(uint64_t)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with an NSInteger scalar value. + * + * @param scalar An NSInteger value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithInteger:(NSInteger)scalar NS_SWIFT_NAME(init(_:)); + +/** + * Initializes a tensor with an NSUInteger scalar value. + * + * @param scalar An NSUInteger value. + * @return An initialized ExecuTorchTensor instance. + */ +- (instancetype)initWithUnsignedInteger:(NSUInteger)scalar + NS_SWIFT_NAME(init(_:)); + +@end + +NS_ASSUME_NONNULL_END diff --git a/third-party/include/executorch/ExecuTorchValue.h b/third-party/include/executorch/ExecuTorchValue.h new file mode 100644 index 000000000..d4e851104 --- /dev/null +++ b/third-party/include/executorch/ExecuTorchValue.h @@ -0,0 +1,219 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#import "ExecuTorchTensor.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * Enum to define the dynamic type of a Value. + * Values can be a subset, but must numerically match exactly those defined in + * runtime/core/tag.h + */ +typedef NS_ENUM(uint32_t, ExecuTorchValueTag) { + ExecuTorchValueTagNone, + ExecuTorchValueTagTensor, + ExecuTorchValueTagString, + ExecuTorchValueTagDouble, + ExecuTorchValueTagInteger, + ExecuTorchValueTagBoolean, + ExecuTorchValueTagBooleanList, + ExecuTorchValueTagDoubleList, + ExecuTorchValueTagIntegerList, + ExecuTorchValueTagTensorList, + ExecuTorchValueTagScalarList, + ExecuTorchValueTagOptionalTensorList, +} NS_SWIFT_NAME(ValueTag); + +typedef NSNumber * + ExecuTorchScalarValue NS_SWIFT_BRIDGED_TYPEDEF NS_SWIFT_NAME(ScalarValue); +typedef NSString * + ExecuTorchStringValue NS_SWIFT_BRIDGED_TYPEDEF NS_SWIFT_NAME(StringValue); +typedef BOOL + ExecuTorchBooleanValue NS_SWIFT_BRIDGED_TYPEDEF NS_SWIFT_NAME(BoolValue); +typedef NSInteger + ExecuTorchIntegerValue NS_SWIFT_BRIDGED_TYPEDEF NS_SWIFT_NAME(IntegerValue); +typedef double + ExecuTorchDoubleValue NS_SWIFT_BRIDGED_TYPEDEF NS_SWIFT_NAME(DoubleValue); + +/** + * A dynamic value type used by ExecuTorch. + * + * ExecuTorchValue encapsulates a value that may be of various types such as + * a tensor or a scalar. The value’s type is indicated by its tag. + */ +NS_SWIFT_NAME(Value) +__attribute__((deprecated("This API is experimental."))) +@interface ExecuTorchValue : NSObject + +/** + * The tag that indicates the dynamic type of the value. + * + * @return An ExecuTorchValueTag value. + */ +@property(nonatomic, readonly) ExecuTorchValueTag tag; + +/** + * The tensor value if the tag is ExecuTorchValueTagTensor. + * + * @return A Tensor instance or nil. + */ +@property(nullable, nonatomic, readonly) + ExecuTorchTensor *tensorValue NS_SWIFT_NAME(tensor); + +/** + * The string value if the tag is ExecuTorchValueTagString. + * + * @return An NSString instance or nil. + */ +@property(nullable, nonatomic, readonly) + ExecuTorchStringValue stringValue NS_SWIFT_NAME(string); + +/** + * The scalar value if the tag is boolean, integer or double. + * + * @return A scalar value or nil. + */ +@property(nullable, nonatomic, readonly) + ExecuTorchScalarValue scalarValue NS_SWIFT_NAME(scalar); + +/** + * The boolean value if the tag is ExecuTorchValueTagBoolean. + * + * @return A BOOL representing the boolean value. + */ +@property(nonatomic, readonly) + ExecuTorchBooleanValue boolValue NS_SWIFT_NAME(boolean); + +/** + * The integer value if the tag is ExecuTorchValueTagInteger. + * + * @return An NSInteger representing the integer value. + */ +@property(nonatomic, readonly) + ExecuTorchIntegerValue intValue NS_SWIFT_NAME(integer); + +/** + * The double value if the tag is ExecuTorchValueTagDouble. + * + * @return A double representing the double value. + */ +@property(nonatomic, readonly) + ExecuTorchDoubleValue doubleValue NS_SWIFT_NAME(double); + +/** + * Returns YES if the value is of type None. + * + * @return A BOOL indicating whether the value is None. + */ +@property(nonatomic, readonly) BOOL isNone; + +/** + * Returns YES if the value is a Tensor. + * + * @return A BOOL indicating whether the value is a Tensor. + */ +@property(nonatomic, readonly) BOOL isTensor; + +/** + * Returns YES if the value is a string. + * + * @return A BOOL indicating whether the value is a string. + */ +@property(nonatomic, readonly) BOOL isString; + +/** + * Returns YES if the value is a scalar (boolean, integer or double). + * + * @return A BOOL indicating whether the value is a scalar. + */ +@property(nonatomic, readonly) BOOL isScalar; + +/** + * Returns YES if the value is a boolean. + * + * @return A BOOL indicating whether the value is a boolean. + */ +@property(nonatomic, readonly) BOOL isBoolean; + +/** + * Returns YES if the value is an integer. + * + * @return A BOOL indicating whether the value is an integer. + */ +@property(nonatomic, readonly) BOOL isInteger; + +/** + * Returns YES if the value is a double. + * + * @return A BOOL indicating whether the value is a double. + */ +@property(nonatomic, readonly) BOOL isDouble; + +/** + * Creates an instance encapsulating a Tensor. + * + * @param value An ExecuTorchTensor instance. + * @return A new ExecuTorchValue instance with a tag of + * ExecuTorchValueTagTensor. + */ ++ (instancetype)valueWithTensor:(ExecuTorchTensor *)value + NS_SWIFT_NAME(init(_:)); + +/** + * Creates an instance encapsulating a string. + * + * @param value A string. + * @return A new ExecuTorchValue instance with a tag of + * ExecuTorchValueTagString. + */ ++ (instancetype)valueWithString:(ExecuTorchStringValue)value + NS_SWIFT_NAME(init(_:)); + +/** + * Creates an instance encapsulating a boolean. + * + * @param value A boolean. + * @return A new ExecuTorchValue instance with a tag of + * ExecuTorchValueTagBoolean. + */ ++ (instancetype)valueWithBoolean:(ExecuTorchBooleanValue)value + NS_SWIFT_NAME(init(_:)); + +/** + * Creates an instance encapsulating an integer. + * + * @param value An integer. + * @return A new ExecuTorchValue instance with a tag of + * ExecuTorchValueTagInteger. + */ ++ (instancetype)valueWithInteger:(ExecuTorchIntegerValue)value + NS_SWIFT_NAME(init(_:)); + +/** + * Creates an instance encapsulating a double value. + * + * @param value A double value. + * @return A new ExecuTorchValue instance with a tag of + * ExecuTorchValueTagDouble. + */ ++ (instancetype)valueWithDouble:(ExecuTorchDoubleValue)value + NS_SWIFT_NAME(init(_:)); + +/** + * Determines whether the current Value is equal to another Value. + * + * @param other Another ExecuTorchValue instance to compare against. + * @return YES if the values have the same tag and equal underlying values; + * otherwise, NO. + */ +- (BOOL)isEqualToValue:(nullable ExecuTorchValue *)other; + +@end + +NS_ASSUME_NONNULL_END diff --git a/third-party/include/executorch/extension/module/module.h b/third-party/include/executorch/extension/module/module.h new file mode 100644 index 000000000..1e7755fa7 --- /dev/null +++ b/third-party/include/executorch/extension/module/module.h @@ -0,0 +1,492 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include +#include + +#include + +namespace executorch { +namespace extension { + +/** + * A facade class for loading programs and executing methods within them. + */ +class Module { +public: + /** + * Enum to define loading behavior. + */ + enum class LoadMode { + /// Load the whole file as a buffer. + File, + /// Use mmap to load pages into memory. + Mmap, + /// Use memory locking and handle errors. + MmapUseMlock, + /// Use memory locking and ignore errors. + MmapUseMlockIgnoreErrors, + }; + + /** + * Constructs an instance by loading a program from a file with specified + * memory locking behavior. + * + * @param[in] file_path The path to the ExecuTorch program file to load. + * @param[in] load_mode The loading mode to use. + * @param[in] event_tracer A EventTracer used for tracking and logging events. + */ + explicit Module(const std::string &file_path, + const LoadMode load_mode = LoadMode::MmapUseMlock, + std::unique_ptr event_tracer = nullptr); + + /** + * Constructs an instance by loading a program from a file with specified + * memory locking behavior. + * + * @param[in] file_path The path to the ExecuTorch program file to load. + * @param[in] data_map_path The path to a .ptd file + * @param[in] load_mode The loading mode to use. + * @param[in] event_tracer A EventTracer used for tracking and logging events. + */ + explicit Module(const std::string &file_path, + const std::string &data_map_path, + const LoadMode load_mode = LoadMode::MmapUseMlock, + std::unique_ptr event_tracer = nullptr); + + /** + * Constructs an instance with the provided data loader and memory allocator. + * + * @param[in] data_loader A DataLoader used for loading program data. + * @param[in] memory_allocator A MemoryAllocator used for memory management. + * @param[in] temp_allocator A MemoryAllocator to use when allocating + * temporary data during kernel or delegate execution. + * @param[in] event_tracer A EventTracer used for tracking and logging events. + * @param[in] data_map_loader A DataLoader used for loading external weights. + */ + explicit Module( + std::unique_ptr data_loader, + std::unique_ptr memory_allocator = nullptr, + std::unique_ptr temp_allocator = nullptr, + std::unique_ptr event_tracer = nullptr, + std::unique_ptr data_map_loader = nullptr); + + /** + * Constructs an instance using an existing shared program. + * + * @param[in] program The shared program to use. It's required the data loader + * the program uses is valid for the lifetime of the program. + * @param[in] memory_allocator A MemoryAllocator used for memory management. + * @param[in] temp_allocator A MemoryAllocator to use when allocating + * temporary data. + * @param[in] event_tracer A EventTracer used for tracking and logging events. + * @param[in] data_map_loader A DataLoader used for loading external weights. + */ + explicit Module( + std::shared_ptr program, + std::unique_ptr memory_allocator = nullptr, + std::unique_ptr temp_allocator = nullptr, + std::unique_ptr event_tracer = nullptr, + std::unique_ptr data_map_loader = nullptr); + + Module(const Module &) = delete; + Module &operator=(const Module &) = delete; + Module(Module &&) = delete; + Module &operator=(Module &&) = delete; + + /** + * Loads the program if needed. + * + * @param[in] verification The type of verification to do before returning + * success. + * + * @returns An Error to indicate success or failure of the loading process. + */ + ET_NODISCARD + runtime::Error load(const runtime::Program::Verification verification = + runtime::Program::Verification::Minimal); + + /** + * Checks if the program is loaded. + * + * @returns true if the program is loaded, false otherwise. + */ + inline bool is_loaded() const { return program_ != nullptr; } + + /** + * Get the program. The data loader used by the program is guaranteed to be + * valid for the lifetime of the program. + * + * @returns Shared pointer to the program or nullptr if it's not yet loaded. + */ + inline std::shared_ptr program() const { return program_; } + + /** + * Get the number of methods available in the loaded program. + * + * @returns A Result object containing either the number of methods available + * or an error to indicate failure. + */ + runtime::Result num_methods(); + + /** + * Get a list of method names available in the loaded program. + * Loads the program and method if needed. + * + * @returns A set of strings containing the names of the methods, or an error + * if the program or method failed to load. + */ + runtime::Result> method_names(); + + /** + * Load a specific method from the program and set up memory management if + * needed. The loaded method is cached to reuse the next time it's executed. + * + * @param[in] method_name The name of the method to load. + * @param[in] planned_memory The memory-planned buffers to use for mutable + * tensor data when executing a method. + * @param[in] event_tracer Per-method event tracer to profile/trace methods + * individually. When not given, the event tracer passed to the Module + * constructor is used. Otherwise, this per-method event tracer takes + * precedence. + * + * @returns An Error to indicate success or failure. + */ + ET_NODISCARD + runtime::Error + load_method(const std::string &method_name, + runtime::HierarchicalAllocator *planned_memory = nullptr, + torch::executor::EventTracer *event_tracer = nullptr); + + ET_DEPRECATED ET_NODISCARD runtime::Error inline load_method( + const std::string &method_name, + torch::executor::EventTracer *event_tracer) { + return load_method(method_name, nullptr, event_tracer); + } + + /** + * Load the 'forward' method from the program and set up memory management if + * needed. The loaded method is cached to reuse the next time it's executed. + * + * @param[in] planned_memory The memory-planned buffers to use for mutable + * tensor data when executing the 'forward' method. + * @param[in] event_tracer An event tracer used for tracking and logging + * events. + * + * @returns An Error to indicate success or failure. + */ + ET_NODISCARD inline runtime::Error + load_forward(runtime::HierarchicalAllocator *planned_memory = nullptr, + torch::executor::EventTracer *event_tracer = nullptr) { + return load_method("forward", planned_memory, event_tracer); + } + + ET_DEPRECATED ET_NODISCARD inline runtime::Error + load_forward(torch::executor::EventTracer *event_tracer) { + return load_forward(nullptr, event_tracer); + } + + /** + * Checks if a specific method is loaded. + * + * @param[in] method_name The name of the method to check. + * + * @returns true if the method specified by method_name is loaded, false + * otherwise. + */ + inline bool is_method_loaded(const std::string &method_name) const { + return methods_.count(method_name); + } + + /** + * Get a method metadata struct by method name. + * Loads the program and method if needed. + * + * @param[in] method_name The name of the method to get the metadata for. + * + * @returns A method metadata, or an error if the program or method failed to + * load. + */ + runtime::Result + method_meta(const std::string &method_name); + + /** + * Execute a specific method with the given input values and retrieve the + * output values. Loads the program and method before executing if needed. + * + * @param[in] method_name The name of the method to execute. + * @param[in] input_values A vector of input values to be passed to the + * method. + * + * @returns A Result object containing either a vector of output values + * from the method or an error to indicate failure. + */ + ET_NODISCARD + runtime::Result> + execute(const std::string &method_name, + const std::vector &input_values); + + /** + * Execute a specific method with a single input value. + * Loads the program and method before executing if needed. + * + * @param[in] method_name The name of the method to execute. + * @param[in] input_value A value to be passed to the method. + * + * @returns A Result object containing either a vector of output values + * from the method or an error to indicate failure. + */ + ET_NODISCARD inline runtime::Result> + execute(const std::string &method_name, const runtime::EValue &input_value) { + return execute(method_name, std::vector{input_value}); + } + + /** + * Execute a specific method without any input values. + * Loads the program and method before executing if needed. + * + * @param[in] method_name The name of the method to execute. + * + * @returns A Result object containing either a vector of output values + * from the method or an error to indicate failure. + */ + ET_NODISCARD inline runtime::Result> + execute(const std::string &method_name) { + return execute(method_name, std::vector{}); + } + + /** + * Retrieve the output value of a specific method with the given input values. + * Loads the program and method before execution if needed. + * + * @param[in] method_name The name of the method to execute. + * @param[in] input_values A vector of input values to be passed to the + * method. + * + * @returns A Result object containing either the first output value from the + * method or an error to indicate failure. + */ + ET_NODISCARD inline runtime::Result + get(const std::string &method_name, + const std::vector &input_values) { + auto result = ET_UNWRAP(execute(method_name, input_values)); + if (result.empty()) { + return runtime::Error::InvalidArgument; + } + return result[0]; + } + + /** + * Retrieve the output value of a specific method with a single input value. + * Loads the program and method before execution if needed. + * + * @param[in] method_name The name of the method to execute. + * @param[in] input_value A value to be passed to the method. + * + * @returns A Result object containing either the first output value from the + * method or an error to indicate failure. + */ + ET_NODISCARD inline runtime::Result + get(const std::string &method_name, const runtime::EValue &input_value) { + return get(method_name, std::vector{input_value}); + } + + /** + * Retrieve the output value of a specific method without any input values. + * Loads the program and method before execution if needed. + * + * @param[in] method_name The name of the method to execute. + * + * @returns A Result object containing either the first output value from the + * method or an error to indicate failure. + */ + ET_NODISCARD inline runtime::Result + get(const std::string &method_name) { + return get(method_name, std::vector{}); + } + + /** + * Execute the 'forward' method with the given input values and retrieve the + * output values. Loads the program and method before executing if needed. + * + * @param[in] input_values A vector of input values for the 'forward' method. + * + * @returns A Result object containing either a vector of output values + * from the 'forward' method or an error to indicate failure. + */ + ET_NODISCARD inline runtime::Result> + forward(const std::vector &input_values) { + return execute("forward", input_values); + } + + /** + * Execute the 'forward' method with a single value. + * Loads the program and method before executing if needed. + * + * @param[in] input_value A value for the 'forward' method. + * + * @returns A Result object containing either a vector of output values + * from the 'forward' method or an error to indicate failure. + */ + ET_NODISCARD inline runtime::Result> + forward(const runtime::EValue &input_value) { + return forward(std::vector{input_value}); + } + + /** + * Execute the 'forward' method without any input values. + * Loads the program and method before executing if needed. + * + * @returns A Result object containing either a vector of output values + * from the 'forward' method or an error to indicate failure. + */ + ET_NODISCARD inline runtime::Result> forward() { + return forward(std::vector{}); + } + + /** + * Sets a single input value for a specific method. + * + * @param[in] method_name The name of the method. + * @param[in] input_value The EValue to set as the method input. + * @param[in] input_index Zero-based index of the input to set. + * + * @returns An Error to indicate success or failure. + */ + ET_NODISCARD + runtime::Error set_input(const std::string &method_name, + const runtime::EValue &input_value, + size_t input_index); + + /** + * Sets a single input value for the "forward" method. + * + * @param[in] input_value The EValue to set as the method input. + * @param[in] input_index Zero-based index of the input to set. + * + * @returns An Error to indicate success or failure. + */ + ET_NODISCARD + inline runtime::Error set_input(const runtime::EValue &input_value, + size_t input_index) { + return set_input("forward", input_value, input_index); + } + + /** + * Sets all input values for a specific method. + * + * @param[in] method_name The name of the method. + * @param[in] input_values A vector of EValues to set as the method inputs. + * + * @returns An Error to indicate success or failure. + */ + ET_NODISCARD + runtime::Error set_inputs(const std::string &method_name, + const std::vector &input_values); + + /** + * Sets all input values for the "forward" method. + * + * @param[in] input_values A vector of EValues to set as the method inputs. + * + * @returns An Error to indicate success or failure. + */ + ET_NODISCARD + inline runtime::Error + set_inputs(const std::vector &input_values) { + return set_inputs("forward", input_values); + } + + /** + * Sets the output tensor for a specific method. + * + * @param[in] method_name The name of the method. + * @param[in] output_value The EValue containing the Tensor to set as the + * method output. + * @param[in] output_index Zero-based index of the output to set. + * + * @returns An Error to indicate success or failure. + * + * @note Only Tensor outputs are currently supported for setting. + */ + ET_NODISCARD + runtime::Error set_output(const std::string &method_name, + runtime::EValue output_value, + size_t output_index = 0); + + /** + * Sets the output tensor for the "forward" method. + * + * @param[in] output_value The EValue containing the Tensor to set as the + * method output. + * @param[in] output_index Zero-based index of the output to set. + * + * @returns An Error to indicate success or failure. + * + * @note Only Tensor outputs are currently supported for setting. + */ + ET_NODISCARD + inline runtime::Error set_output(runtime::EValue output_value, + size_t output_index = 0) { + return set_output("forward", std::move(output_value), output_index); + } + + /** + * Retrieves the EventTracer instance being used by the Module. + * EventTracer is used for tracking and logging events during the execution + * of methods. + * + * @returns A pointer to the EventTracer instance. Returns nullptr if no + * EventTracer is set. + */ + inline runtime::EventTracer *event_tracer() const { + return event_tracer_.get(); + } + +private: + struct MethodHolder { + std::vector> planned_buffers; + std::vector> planned_spans; + std::unique_ptr planned_memory; + std::unique_ptr memory_manager; + std::unique_ptr method; + std::vector inputs; + }; + + std::string file_path_; + std::string data_map_path_; + LoadMode load_mode_{LoadMode::MmapUseMlock}; + std::shared_ptr program_; + std::unique_ptr data_loader_; + std::unique_ptr memory_allocator_; + std::unique_ptr temp_allocator_; + std::unique_ptr event_tracer_; + std::unique_ptr data_map_loader_; + std::unique_ptr data_map_; + +protected: + std::unordered_map methods_; + + friend class ExecuTorchJni; +}; + +} // namespace extension +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::extension::Module; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/extension/tensor/tensor.h b/third-party/include/executorch/extension/tensor/tensor.h new file mode 100644 index 000000000..80a41018a --- /dev/null +++ b/third-party/include/executorch/extension/tensor/tensor.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +// Umbrella header for the Tensor extension. +#include +#include diff --git a/third-party/include/executorch/extension/tensor/tensor_accessor.h b/third-party/include/executorch/extension/tensor/tensor_accessor.h new file mode 100644 index 000000000..d5b59b06f --- /dev/null +++ b/third-party/include/executorch/extension/tensor/tensor_accessor.h @@ -0,0 +1,190 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include + +namespace executorch { +namespace extension { +namespace internal { + +/** + * Base class template storing the underlying data with size and stride helpers. + * Inherited by TensorAccessor<> which requires specialization on rank. + */ +template class TensorAccessorBase { +public: + /// Returns the size of the underlying tensor at the given dimension. + executorch::aten::SizesType size(ssize_t i) const { + ET_CHECK_MSG(i < dim_ && i >= 0, "Dimension outside of [0, %zd], got %zd", + dim_ - 1, i); + return sizes_[i]; + } + + /// Returns the stride of the underlying tensor at the given dimension. + executorch::aten::StridesType stride(ssize_t i) const { + ET_CHECK_MSG(i < dim_ && i >= 0, "Dimension outside of [0, %zd], got %zd", + dim_ - 1, i); + return strides_[i]; + } + +protected: + TensorAccessorBase(T *data, const executorch::aten::SizesType *sizes, + const executorch::aten::StridesType *strides, ssize_t dim) + : data_(data), sizes_(sizes), strides_(strides), dim_(dim) {} + + T *data_; + const executorch::aten::SizesType *sizes_; + const executorch::aten::StridesType *strides_; + ssize_t dim_; +}; + +} // namespace internal + +/** + * TensorAccessor template with data type and rank as template parameters. No + * public constructors, can only be created using make_tensor_accessor from a + * given executorch::aten::Tensor. Use operator[] to index and obtain a lower + * rank accessor or the underlying scalar value. + */ +template +class TensorAccessor : public internal::TensorAccessorBase { +public: + /** + * Index into the the outer most dimension. + * + * @param i Index. + * @return If N > 1, a TensorAccessor with N-1 dimensions. If N == 1, a + * reference to the underlying scalar. Refer to the TensorAccessor + * specialization. + */ + TensorAccessor operator[](ssize_t i) { + return TensorAccessor(this->data_ + this->strides_[0] * i, + this->sizes_ + 1, this->strides_ + 1, + N - 1); + } + + /** + * Index into the the outer most dimension. + * + * @param i Index. + * @return If N > 1, a constant TensorAccessor with N-1 dimensions. If N == 1, + * a constant reference to the underlying scalar. Refer to the + * TensorAccessor specialization. + */ + const TensorAccessor operator[](ssize_t i) const { + return TensorAccessor(this->data_ + this->strides_[0] * i, + this->sizes_ + 1, this->strides_ + 1, + N - 1); + } + +private: + TensorAccessor(T *data, const executorch::aten::SizesType *sizes, + const executorch::aten::StridesType *strides, ssize_t dim) + : internal::TensorAccessorBase(data, sizes, strides, dim) {} + + template friend class TensorAccessor; + + template + friend executorch::runtime::Result> + make_tensor_accessor(const executorch::aten::Tensor &t); +}; + +/** + * TensorAccessor specialization for N == 1, where operator[] returns a + * reference to the underlying scalar. + */ +template +class TensorAccessor : public internal::TensorAccessorBase { +public: + /** + * Index into the the outer most dimension. + * + * @param i Index. + * @return Reference to the underlying scalar. + */ + T &operator[](ssize_t i) { return this->data_[this->strides_[0] * i]; } + + /** + * Index into the the outer most dimension. + * + * @param i Index. + * @return Constant reference to the underlying scalar. + */ + const T &operator[](ssize_t i) const { + return this->data_[this->strides_[0] * i]; + } + +private: + TensorAccessor(T *data, const executorch::aten::SizesType *sizes, + const executorch::aten::StridesType *strides, ssize_t dim) + : internal::TensorAccessorBase(data, sizes, strides, dim) {} + + template friend class TensorAccessor; + + template + friend executorch::runtime::Result> + make_tensor_accessor(const executorch::aten::Tensor &t); +}; + +/** + * Creates a TensorAccessor from the given tensor. The number of dimension + * N and the data type T's size must match those of the input tensor. For + * Executorch tensors, non-trivial dimension order is not supported. + * + * @param tensor Origin tensor. The TensorImpl inside must outlive the returned + * TensorAccessor. + * @return TensorAccessor of the input tensor. + * @retval Error::InvalidArgument Mismatch on data type or number of dimensions. + * @retval Error::NotSupported Input tensor has non-trivial dimension onrder. + */ +template +executorch::runtime::Result> +make_tensor_accessor(const executorch::aten::Tensor &tensor) { + static_assert(N > 0, "TensorAccessor is used for indexing tensors, for " + "scalar use *_data_ptr()"); + + if (N != tensor.dim()) { + ET_LOG(Error, "Expecting %zd dimensions but tensor has %zd.", + static_cast(N), static_cast(tensor.dim())); + return executorch::runtime::Error::InvalidArgument; + } + + if (sizeof(T) != tensor.element_size()) { + ET_LOG(Error, + "Size of data type template argument (%zd) not equal to tensor " + "element size (%zd)", + static_cast(sizeof(T)), + static_cast(tensor.element_size())); + return executorch::runtime::Error::InvalidArgument; + } + +#ifndef USE_ATEN_LIB + auto dim_order = tensor.dim_order(); + for (ssize_t i = 0; i < dim_order.size(); i++) { + if (dim_order[i] != i) { + ET_LOG(Error, "Non-trival dim_order not supported."); + return executorch::runtime::Error::NotSupported; + } + } +#endif + + T *ptr = nullptr; + if constexpr (std::is_const_v) { + ptr = tensor.const_data_ptr(); + } else { + ptr = tensor.mutable_data_ptr(); + } + return TensorAccessor(ptr, tensor.sizes().data(), + tensor.strides().data(), N); +} + +} // namespace extension +} // namespace executorch diff --git a/third-party/include/executorch/extension/tensor/tensor_ptr.h b/third-party/include/executorch/extension/tensor/tensor_ptr.h new file mode 100644 index 000000000..f6a8009b3 --- /dev/null +++ b/third-party/include/executorch/extension/tensor/tensor_ptr.h @@ -0,0 +1,347 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include + +#include +#include +#include + +namespace executorch { +namespace extension { + +/** + * A smart pointer type for managing the lifecycle of a Tensor. + */ +using TensorPtr = std::shared_ptr; + +/** + * Creates a TensorPtr that manages a Tensor with the specified properties. + * + * @param sizes A vector specifying the size of each dimension. + * @param data A pointer to the data buffer. + * @param dim_order A vector specifying the order of dimensions. + * @param strides A vector specifying the strides of the tensor. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies the mutability of the tensor's shape. + * @param deleter A custom deleter function for managing the lifetime of the + * data buffer. If provided, this deleter will be called when the managed Tensor + * object is destroyed. + * @return A TensorPtr that manages the newly created Tensor. + */ +TensorPtr +make_tensor_ptr(std::vector sizes, void *data, + std::vector dim_order, + std::vector strides, + const executorch::aten::ScalarType type = + executorch::aten::ScalarType::Float, + const executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND, + std::function deleter = nullptr); + +/** + * Creates a TensorPtr that manages a Tensor with the specified properties. + * + * @param sizes A vector specifying the size of each dimension. + * @param data A pointer to the data buffer. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies the mutability of the tensor's shape. + * @param deleter A custom deleter function for managing the lifetime of the + * data buffer. If provided, this deleter will be called when the managed Tensor + * object is destroyed. + * @return A TensorPtr that manages the newly created Tensor. + */ +inline TensorPtr +make_tensor_ptr(std::vector sizes, void *data, + const executorch::aten::ScalarType type = + executorch::aten::ScalarType::Float, + const executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND, + std::function deleter = nullptr) { + return make_tensor_ptr(std::move(sizes), data, {}, {}, type, dynamism, + std::move(deleter)); +} + +/** + * Creates a TensorPtr that manages a Tensor with the specified properties. + * + * This template overload is specialized for cases where the tensor data is + * provided as a vector. The scalar type is automatically deduced from the + * vector's data type. If the specified `type` differs from the deduced type of + * the vector's elements, and casting is allowed, the data will be cast to the + * specified `type`. This allows for flexible creation of tensors with data + * vectors of one type and a different scalar type. + * + * @tparam T The C++ type of the tensor elements, deduced from the vector. + * @param sizes A vector specifying the size of each dimension. + * @param data A vector containing the tensor's data. + * @param dim_order A vector specifying the order of dimensions. + * @param strides A vector specifying the strides of each dimension. + * @param type The scalar type of the tensor elements. If it differs from the + * deduced type, the data will be cast to this type if allowed. + * @param dynamism Specifies the mutability of the tensor's shape. + * @return A TensorPtr that manages the newly created TensorImpl. + */ +template ::value> +inline TensorPtr +make_tensor_ptr(std::vector sizes, + std::vector data, + std::vector dim_order = {}, + std::vector strides = {}, + executorch::aten::ScalarType type = deduced_type, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + if (type != deduced_type) { + ET_CHECK_MSG(runtime::canCast(deduced_type, type), + "Cannot cast deduced type to specified type."); + std::vector casted_data(data.size() * runtime::elementSize(type)); + ET_SWITCH_REALHBBF16_TYPES(type, nullptr, "make_tensor_ptr", CTYPE, [&] { + std::transform(data.begin(), data.end(), + reinterpret_cast(casted_data.data()), + [](const T &val) { return static_cast(val); }); + }); + const auto raw_data_ptr = casted_data.data(); + auto data_ptr = + std::make_shared>(std::move(casted_data)); + return make_tensor_ptr(std::move(sizes), raw_data_ptr, std::move(dim_order), + std::move(strides), type, dynamism, + [data_ptr = std::move(data_ptr)](void *) {}); + } + const auto raw_data_ptr = data.data(); + auto data_ptr = std::make_shared>(std::move(data)); + return make_tensor_ptr(std::move(sizes), raw_data_ptr, std::move(dim_order), + std::move(strides), type, dynamism, + [data_ptr = std::move(data_ptr)](void *) {}); +} + +/** + * Creates a TensorPtr that manages a Tensor with the specified properties. + * + * This template overload is specialized for cases where the tensor data is + * provided as a vector. The scalar type is automatically deduced from the + * vector's data type. If the specified `type` differs from the deduced type of + * the vector's elements, and casting is allowed, the data will be cast to the + * specified `type`. This allows for flexible creation of tensors with data + * vectors of one type and a different scalar type. + * + * @tparam T The C++ type of the tensor elements, deduced from the vector. + * @param data A vector containing the tensor's data. + * @param type The scalar type of the tensor elements. If it differs from the + * deduced type, the data will be cast to this type if allowed. + * @param dynamism Specifies the mutability of the tensor's shape. + * @return A TensorPtr that manages the newly created TensorImpl. + */ +template ::value> +inline TensorPtr +make_tensor_ptr(std::vector data, + executorch::aten::ScalarType type = deduced_type, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + std::vector sizes{ + executorch::aten::SizesType(data.size())}; + return make_tensor_ptr(std::move(sizes), std::move(data), {0}, {1}, type, + dynamism); +} + +/** + * Creates a TensorPtr that manages a Tensor with the specified properties. + * + * This template overload is specialized for cases where the tensor data is + * provided as an initializer list. The scalar type is automatically deduced + * from the initializer list's data type. If the specified `type` differs from + * the deduced type of the initializer list's elements, and casting is allowed, + * the data will be cast to the specified `type`. This allows for flexible + * creation of tensors with data vectors of one type and a different scalar + * type. + * + * @tparam T The C++ type of the tensor elements, deduced from the initializer + * list. + * @param sizes A vector specifying the size of each dimension. + * @param list An initializer list containing the tensor's data. + * @param dim_order A vector specifying the order of dimensions. + * @param strides A vector specifying the strides of each dimension. + * @param type The scalar type of the tensor elements. If it differs from the + * deduced type, the data will be cast to this type if allowed. + * @param dynamism Specifies the mutability of the tensor's shape. + * @return A TensorPtr that manages the newly created TensorImpl. + */ +template ::value> +inline TensorPtr +make_tensor_ptr(std::vector sizes, + std::initializer_list list, + std::vector dim_order = {}, + std::vector strides = {}, + executorch::aten::ScalarType type = deduced_type, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return make_tensor_ptr(std::move(sizes), std::vector(std::move(list)), + std::move(dim_order), std::move(strides), type, + dynamism); +} + +/** + * Creates a TensorPtr that manages a Tensor with the specified properties. + * + * This template overload allows creating a Tensor from an initializer list + * of data. The scalar type is automatically deduced from the type of the + * initializer list's elements. If the specified `type` differs from + * the deduced type of the initializer list's elements, and casting is allowed, + * the data will be cast to the specified `type`. This allows for flexible + * creation of tensors with data vectors of one type and a different scalar + * type. + * + * @tparam T The C++ type of the tensor elements, deduced from the initializer + * list. + * @param list An initializer list containing the tensor's data. + * @param type The scalar type of the tensor elements. If it differs from the + * deduced type, the data will be cast to this type if allowed. + * @param dynamism Specifies the mutability of the tensor's shape. + * @return A TensorPtr that manages the newly created TensorImpl. + */ +template ::value> +inline TensorPtr +make_tensor_ptr(std::initializer_list list, + executorch::aten::ScalarType type = deduced_type, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + std::vector sizes{ + executorch::aten::SizesType(list.size())}; + return make_tensor_ptr(std::move(sizes), std::move(list), {0}, {1}, type, + dynamism); +} + +/** + * Creates a TensorPtr that manages a Tensor with a single scalar value. + * + * @tparam T The C++ type of the scalar value. + * @param value The scalar value to be used for the Tensor. + * @return A TensorPtr that manages the newly created TensorImpl. + */ +template inline TensorPtr make_tensor_ptr(T value) { + return make_tensor_ptr({}, std::vector{value}); +} + +/** + * Creates a TensorPtr that manages a Tensor with the specified properties. + * + * This overload accepts a raw memory buffer stored in a std::vector + * and a scalar type to interpret the data. The vector is managed, and the + * memory's lifetime is tied to the TensorImpl. + * + * @param sizes A vector specifying the size of each dimension. + * @param data A vector containing the raw memory for the tensor's data. + * @param dim_order A vector specifying the order of dimensions. + * @param strides A vector specifying the strides of each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies the mutability of the tensor's shape. + * @return A TensorPtr managing the newly created Tensor. + */ +TensorPtr make_tensor_ptr( + std::vector sizes, std::vector data, + std::vector dim_order, + std::vector strides, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND); + +/** + * Creates a TensorPtr that manages a Tensor with the specified properties. + * + * This overload accepts a raw memory buffer stored in a std::vector + * and a scalar type to interpret the data. The vector is managed, and the + * memory's lifetime is tied to the TensorImpl. + * + * @param sizes A vector specifying the size of each dimension. + * @param data A vector containing the raw memory for the tensor's data. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies the mutability of the tensor's shape. + * @return A TensorPtr managing the newly created Tensor. + */ +inline TensorPtr make_tensor_ptr( + std::vector sizes, std::vector data, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return make_tensor_ptr(std::move(sizes), std::move(data), {}, {}, type, + dynamism); +} + +/** + * Creates a TensorPtr to manage a new Tensor with the same properties + * as the given Tensor, sharing the same data without owning it. + * + * @param tensor The Tensor whose properties are used to create a new TensorPtr. + * @return A new TensorPtr managing a Tensor with the same properties as the + * original. + */ +inline TensorPtr make_tensor_ptr(const executorch::aten::Tensor &tensor) { + return make_tensor_ptr( + std::vector(tensor.sizes().begin(), + tensor.sizes().end()), + tensor.mutable_data_ptr(), +#ifndef USE_ATEN_LIB + std::vector(tensor.dim_order().begin(), + tensor.dim_order().end()), + std::vector(tensor.strides().begin(), + tensor.strides().end()), + tensor.scalar_type(), tensor.shape_dynamism() +#else // USE_ATEN_LIB + {}, + std::vector(tensor.strides().begin(), + tensor.strides().end()), + tensor.scalar_type() +#endif // USE_ATEN_LIB + ); +} + +/** + * Creates a TensorPtr that manages a new Tensor with the same properties + * as the given Tensor, but with a copy of the data owned by the returned + * TensorPtr, or nullptr if the original data is null. + * + * @param tensor The Tensor to clone. + * @return A new TensorPtr that manages a Tensor with the same properties as the + * original but with copied data. + */ +TensorPtr clone_tensor_ptr(const executorch::aten::Tensor &tensor); + +/** + * Creates a new TensorPtr by cloning the given TensorPtr, copying the + * underlying data. + * + * @param tensor The TensorPtr to clone. + * @return A new TensorPtr that manages a Tensor with the same properties as the + * original but with copied data. + */ +inline TensorPtr clone_tensor_ptr(const TensorPtr &tensor) { + return clone_tensor_ptr(*tensor); +} + +/** + * Resizes the Tensor managed by the provided TensorPtr to the new sizes. + * + * @param tensor A TensorPtr managing the Tensor to resize. + * @param sizes A vector representing the new sizes for each dimension. + * @return Error::Ok on success, or an appropriate error code on failure. + */ +ET_NODISCARD +runtime::Error +resize_tensor_ptr(TensorPtr &tensor, + const std::vector &sizes); + +} // namespace extension +} // namespace executorch diff --git a/third-party/include/executorch/extension/tensor/tensor_ptr_maker.h b/third-party/include/executorch/extension/tensor/tensor_ptr_maker.h new file mode 100644 index 000000000..c550b400f --- /dev/null +++ b/third-party/include/executorch/extension/tensor/tensor_ptr_maker.h @@ -0,0 +1,653 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace extension { + +/** + * A helper class for creating TensorPtr instances from raw data and tensor + * properties. Note that the TensorPtr created by this class does not own the + * data, so the data must outlive the TensorPtr. + * + * TensorPtrMaker provides a fluent interface for specifying various tensor + * properties, such as type, sizes, data pointer, dimension order, strides, and + * shape dynamism. The final tensor is created by invoking make_tensor_ptr() or + * by converting TensorPtrMaker to TensorPtr. + */ +class TensorPtrMaker final { +public: + // This class may have non-copyable members in the future. + TensorPtrMaker(const TensorPtrMaker &) = delete; + TensorPtrMaker &operator=(const TensorPtrMaker &) = delete; + // But it is movable. + TensorPtrMaker(TensorPtrMaker &&) = default; + TensorPtrMaker &operator=(TensorPtrMaker &&) = default; + + /** + * Sets the scalar type of the tensor elements. + * + * @param type The scalar type (e.g., float, int, bool). + * @return Rvalue to this TensorPtrMaker for method chaining. + */ + TensorPtrMaker &&type(executorch::aten::ScalarType type) { + type_ = type; + return std::move(*this); + } + + /** + * Sets the order of dimensions in memory. + * + * @param dim_order A vector specifying the dimension order. + * @return Rvalue to this TensorPtrMaker for method chaining. + */ + TensorPtrMaker && + dim_order(std::vector dim_order) { + dim_order_ = std::move(dim_order); + return std::move(*this); + } + + /** + * Sets the strides for each dimension of the tensor. + * + * @param strides A vector specifying the stride for each dimension. + * @return Rvalue to this TensorPtrMaker for method chaining. + */ + TensorPtrMaker &&strides(std::vector strides) { + strides_ = std::move(strides); + return std::move(*this); + } + + /** + * Sets the shape dynamism of the tensor. + * + * @param dynamism Specifies whether the tensor's shape is static, dynamic, or + * bounded. + * @return Rvalue to this TensorPtrMaker for method chaining. + */ + TensorPtrMaker &&dynamism(executorch::aten::TensorShapeDynamism dynamism) { + dynamism_ = dynamism; + return std::move(*this); + } + + /** + * Sets a custom deleter function to manage the lifetime of the data buffer. + * + * @param deleter A function that will be called to delete the data buffer + * when the Tensor object managed by the TensorPtr is destroyed. Explicitly + * consuming an rvalue to avoid unnecessary copies when the deleter is a + * lambda that has captured some state. + * @return Rvalue to this TensorPtrMaker for method chaining. + */ + TensorPtrMaker &&deleter(std::function &&deleter) { + deleter_ = std::move(deleter); + return std::move(*this); + } + + /** + * Creates and returns a TensorPtr instance using the properties set in this + * TensorPtrMaker. + * + * @return A TensorPtr instance that manages the newly created Tensor. + */ + TensorPtr make_tensor_ptr() && { + return ::executorch::extension::make_tensor_ptr( + std::move(sizes_), data_, std::move(dim_order_), std::move(strides_), + type_, dynamism_, std::move(deleter_)); + } + + /** + * Implicit conversion operator to create a TensorPtr. + * + * @return A TensorPtr instance that manages the newly created Tensor. + */ + operator TensorPtr() && { return std::move(*this).make_tensor_ptr(); } + +private: + TensorPtrMaker(void *data, std::vector sizes, + executorch::aten::ScalarType type) + : sizes_(std::move(sizes)), data_(data), type_(type) {} + +private: + // The following properties are required to create a Tensor. + friend TensorPtrMaker for_blob(void *data, + std::vector sizes, + executorch::aten::ScalarType type); + +private: + std::vector sizes_; + std::vector strides_; + std::vector dim_order_; + std::function deleter_ = nullptr; + void *data_ = nullptr; + executorch::aten::ScalarType type_ = executorch::aten::ScalarType::Float; + executorch::aten::TensorShapeDynamism dynamism_ = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND; +}; + +/** + * Creates a TensorPtrMaker instance for building a TensorPtr from a raw data + * pointer and tensor sizes. + * + * The TensorPtrMaker returned by this function allows for further customization + * of the tensor's properties, such as data type, dimension order, strides, and + * shape dynamism, before finalizing the TensorPtr creation. + * + * @param data A pointer to the raw data to be used by the tensor. It must + * outlive the TensorPtr created by this function. + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @return A TensorPtrMaker instance for creating a TensorPtr. + */ +inline TensorPtrMaker for_blob( + void *data, std::vector sizes, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float) { + return TensorPtrMaker(data, std::move(sizes), type); +} + +/** + * Creates a TensorPtr from a raw data pointer and tensor sizes, with an + * optional dynamism setting. + * + * This function provides a convenient way to create a tensor from existing + * data, with the option to specify whether the tensor's shape is static or + * dynamic. + * + * @param data A pointer to the raw data used by the tensor. The data must + * outlive the TensorPtr created by this function. + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr from_blob( + void *data, std::vector sizes, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return for_blob(data, std::move(sizes), type) + .dynamism(dynamism) + .make_tensor_ptr(); +} + +/** + * Creates a TensorPtr from a raw data pointer, tensor sizes, and strides, with + * an optional dynamism setting. + * + * This function allows for the creation of a tensor from existing data, with + * the option to specify custom strides for each dimension and whether the + * tensor’s shape is static, dynamic, or bounded. + * + * @param data A pointer to the raw data used by the tensor. The data must + * outlive the TensorPtr created by this function. + * @param sizes A vector specifying the size of each dimension. + * @param strides A vector specifying the stride for each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static, dynamic, or + * bounded. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr from_blob( + void *data, std::vector sizes, + std::vector strides, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return for_blob(data, std::move(sizes), type) + .strides(std::move(strides)) + .dynamism(dynamism) + .make_tensor_ptr(); +} + +/** + * Creates a TensorPtr from a raw data pointer and tensor sizes, with an + * optional dynamism setting. + * + * This function is a convenient way to create a tensor from existing data, with + * the option to specify whether the tensor's shape is static, dynamic, or + * bounded. + * + * @param data A pointer to the raw data to be used by the tensor. It must + * outlive the TensorPtr created by this function. + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @param deleter A function to delete the data when it's no longer needed. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance that manages the newly created Tensor. + */ +inline TensorPtr +from_blob(void *data, std::vector sizes, + executorch::aten::ScalarType type, + std::function &&deleter, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return for_blob(data, std::move(sizes), type) + .deleter(std::move(deleter)) + .dynamism(dynamism) + .make_tensor_ptr(); +} + +/** + * Creates a TensorPtr from a raw data pointer, tensor sizes, and strides, with + * an optional dynamism setting. + * + * This function allows for the creation of a tensor from existing data, with + * the option to specify custom strides for each dimension and whether the + * tensor's shape is static, dynamic, or bounded. + * + * @param data A pointer to the raw data to be used by the tensor. It must + * outlive the TensorPtr created by this function. + * @param sizes A vector specifying the size of each dimension. + * @param strides A vector specifying the stride for each dimension. + * @param type The scalar type of the tensor elements. + * @param deleter A function to delete the data when it's no longer needed. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance that manages the newly created Tensor. + */ +inline TensorPtr +from_blob(void *data, std::vector sizes, + std::vector strides, + executorch::aten::ScalarType type, + std::function &&deleter, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return for_blob(data, std::move(sizes), type) + .strides(std::move(strides)) + .deleter(std::move(deleter)) + .dynamism(dynamism) + .make_tensor_ptr(); +} + +/** + * Creates a TensorPtr with the specified sizes, strides, and properties. + * + * This function allocates memory for the tensor elements but does not + * initialize them with any specific values. The tensor is created with the + * specified strides. + * + * @param sizes A vector specifying the size of each dimension. + * @param strides A vector specifying the stride for each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +TensorPtr empty_strided( + std::vector sizes, + std::vector strides, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND); + +/** + * Creates an empty TensorPtr with the same size and properties as the given + * tensor. + * + * This function allocates memory for the tensor elements but does not + * initialize them with any specific values. + * + * @param other A reference to another tensor, whose size and properties are + * used. + * @param type The scalar type of the tensor elements. If not provided, the + * scalar type of the other tensor is used. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr empty_like( + const TensorPtr &other, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Undefined, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + if (type == executorch::aten::ScalarType::Undefined) { + type = other->scalar_type(); + } + return empty_strided({other->sizes().begin(), other->sizes().end()}, + {other->strides().begin(), other->strides().end()}, type, + dynamism); +} + +/** + * Creates an empty TensorPtr with the specified sizes and properties. + * + * This function allocates memory for the tensor elements but does not + * initialize them with any specific values. + * + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr +empty(std::vector sizes, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return empty_strided(std::move(sizes), {}, type, dynamism); +} + +/** + * Creates a TensorPtr filled with the specified value. + * + * @param sizes A vector specifying the size of each dimension. + * @param strides A vector specifying the stride for each dimension. + * @param fill_value The value to fill the tensor with. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +TensorPtr full_strided( + std::vector sizes, + std::vector strides, + executorch::aten::Scalar fill_value, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND); + +/** + * Creates a TensorPtr filled with the specified value, with the same size and + * properties as another tensor. + * + * @param other A reference to another tensor, whose size and properties will be + * used. + * @param fill_value The value to fill the tensor with. + * @param type The scalar type of the tensor elements. If not specified, the + * scalar type of the other tensor is used. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr full_like( + const TensorPtr &other, executorch::aten::Scalar fill_value, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Undefined, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + if (type == executorch::aten::ScalarType::Undefined) { + type = other->scalar_type(); + } + return full_strided({other->sizes().begin(), other->sizes().end()}, + {other->strides().begin(), other->strides().end()}, + fill_value, type, dynamism); +} + +/** + * Creates a TensorPtr filled with the specified value. + * + * @param sizes A vector specifying the size of each dimension. + * @param fill_value The value used to fill the tensor. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr +full(std::vector sizes, + executorch::aten::Scalar fill_value, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return full_strided(std::move(sizes), {}, fill_value, type, dynamism); +} + +/** + * Creates a TensorPtr holding a scalar value. + * + * @param value The scalar value for the tensor. + * @param type The scalar type of the tensor elements. + * @return A TensorPtr instance managing the newly created scalar Tensor. + */ +inline TensorPtr scalar_tensor( + executorch::aten::Scalar value, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float) { + return full({}, value, type); +} + +/** + * Creates a TensorPtr filled with ones, with the same size and properties as + * another tensor. + * + * @param other A reference to another tensor, whose size and properties are + * used. + * @param type The scalar type of the tensor elements. If not provided, the + * scalar type of the other tensor is used. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr ones_like( + const TensorPtr &other, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Undefined, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return full_like(other, 1, type, dynamism); +} + +/** + * Creates a TensorPtr filled with ones. + * + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr +ones(std::vector sizes, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return full(std::move(sizes), 1, type, dynamism); +} + +/** + * Creates a TensorPtr filled with zeros, with the same size and properties as + * another tensor. + * + * @param other A reference to another tensor, whose size and properties will be + * used. + * @param type The scalar type of the tensor elements. If not specified, the + * scalar type of the `other` tensor is used. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr zeros_like( + const TensorPtr &other, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Undefined, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return full_like(other, 0, type, dynamism); +} + +/** + * Creates a TensorPtr filled with zeros. + * + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr +zeros(std::vector sizes, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return full(std::move(sizes), 0, type, dynamism); +} + +/** + * Creates a TensorPtr filled with random values between 0 and 1. + * + * @param sizes A vector specifying the size of each dimension. + * @param strides A vector specifying the stride for each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + **/ +TensorPtr rand_strided( + std::vector sizes, + std::vector strides, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND); + +/** + * Creates a TensorPtr filled with random values between 0 and 1. + * + * @param other A reference to another tensor, whose size and properties will be + * used. + * @param type The scalar type of the tensor elements. If not specified, the + * scalar type of the other tensor is used. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr rand_like( + const TensorPtr &other, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Undefined, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + if (type == executorch::aten::ScalarType::Undefined) { + type = other->scalar_type(); + } + return rand_strided({other->sizes().begin(), other->sizes().end()}, + {other->strides().begin(), other->strides().end()}, type, + dynamism); +} + +/** + * Creates a TensorPtr filled with random values between 0 and 1. + * + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr +rand(std::vector sizes, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return rand_strided(std::move(sizes), {}, type, dynamism); +} + +/** + * Creates a TensorPtr filled with random values from a normal distribution. + * + * @param sizes A vector specifying the size of each dimension. + * @param strides A vector specifying the stride for each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +TensorPtr randn_strided( + std::vector sizes, + std::vector strides, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND); + +/** + * Creates a TensorPtr filled with random values from a normal distribution. + * + * @param other A reference to another tensor, whose size and properties will be + * used. + * @param type The scalar type of the tensor elements. If not specified, the + * scalar type of the other tensor is used. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr randn_like( + const TensorPtr &other, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Undefined, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + if (type == executorch::aten::ScalarType::Undefined) { + type = other->scalar_type(); + } + return randn_strided({other->sizes().begin(), other->sizes().end()}, + {other->strides().begin(), other->strides().end()}, type, + dynamism); +} + +/** + * Creates a TensorPtr filled with random values from a normal distribution. + * + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr +randn(std::vector sizes, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Float, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return randn_strided(std::move(sizes), {}, type, dynamism); +} + +/** + * Creates a TensorPtr filled with random integer values in the given range. + * + * @param low The lower bound (inclusive) of the random values. + * @param high The upper bound (exclusive) of the random values. + * @param sizes A vector specifying the size of each dimension. + * @param strides A vector specifying the stride for each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +TensorPtr randint_strided( + int64_t low, int64_t high, std::vector sizes, + std::vector strides, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Int, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND); + +/** + * Creates a TensorPtr filled with random integer values in the given range. + * + * @param other A reference to another tensor, whose size and properties will be + * used. + * @param low The lower bound (inclusive) of the random values. + * @param high The upper bound (exclusive) of the random values. + * @param type The scalar type of the tensor elements. If not specified, the + * scalar type of the other tensor is used. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr randint_like( + const TensorPtr &other, int64_t low, int64_t high, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Undefined, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + if (type == executorch::aten::ScalarType::Undefined) { + type = other->scalar_type(); + } + return randint_strided( + low, high, {other->sizes().begin(), other->sizes().end()}, + {other->strides().begin(), other->strides().end()}, type, dynamism); +} + +/** + * Creates a TensorPtr filled with random integer values within the specified + * range. + * + * @param low The inclusive lower bound of the random values. + * @param high The exclusive upper bound of the random values. + * @param sizes A vector specifying the size of each dimension. + * @param type The scalar type of the tensor elements. + * @param dynamism Specifies whether the tensor's shape is static or dynamic. + * @return A TensorPtr instance managing the newly created Tensor. + */ +inline TensorPtr +randint(int64_t low, int64_t high, + std::vector sizes, + executorch::aten::ScalarType type = executorch::aten::ScalarType::Int, + executorch::aten::TensorShapeDynamism dynamism = + executorch::aten::TensorShapeDynamism::DYNAMIC_BOUND) { + return randint_strided(low, high, std::move(sizes), {}, type, dynamism); +} + +} // namespace extension +} // namespace executorch diff --git a/third-party/include/executorch/runtime/backend/backend_execution_context.h b/third-party/include/executorch/runtime/backend/backend_execution_context.h new file mode 100644 index 000000000..42413073a --- /dev/null +++ b/third-party/include/executorch/runtime/backend/backend_execution_context.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include + +namespace executorch { +namespace runtime { + +/** + * BackendExecutionContext will be used to inject run time context. + */ +class BackendExecutionContext final { +public: + BackendExecutionContext(EventTracer *event_tracer = nullptr, + MemoryAllocator *temp_allocator = nullptr, + const char *method_name = nullptr) + : event_tracer_(event_tracer), temp_allocator_(temp_allocator), + method_name_(method_name) {} + + /** + * Returns a pointer to an instance of EventTracer to do profiling/debugging + * logging inside the delegate backend. Users will need access to this pointer + * to use any of the event tracer APIs. + */ + EventTracer *event_tracer() { return event_tracer_; } + + /** + * Returns a pointer to the address allocated by temp allocator. This + * allocator will be reset after every delegate call during execution. + */ + void *allocate(size_t size, + size_t alignment = MemoryAllocator::kDefaultAlignment) { + // TODO(chenlai): depends on the need, we may expose more functionality for + // memory allocation. + return temp_allocator_->allocate(size, alignment); + } + + /** + * Returns the temp allocator. This allocator will be reset every instruction. + */ + MemoryAllocator *get_temp_allocator() { return temp_allocator_; } + + /** + * Get the name of the executing method from the ExecuTorch runtime. + */ + const char *get_method_name() const { return method_name_; } + +private: + EventTracer *event_tracer_ = nullptr; + MemoryAllocator *temp_allocator_ = nullptr; + const char *method_name_ = nullptr; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::BackendExecutionContext; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/backend/backend_init_context.h b/third-party/include/executorch/runtime/backend/backend_init_context.h new file mode 100644 index 000000000..b691cb0cc --- /dev/null +++ b/third-party/include/executorch/runtime/backend/backend_init_context.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once +#include +#include + +namespace executorch { +namespace runtime { + +/** + * BackendInitContext will be used to inject runtime info for to initialize + * delegate. + */ +class BackendInitContext final { +public: + explicit BackendInitContext(MemoryAllocator *runtime_allocator, + EventTracer *event_tracer = nullptr, + const char *method_name = nullptr, + const NamedDataMap *named_data_map = nullptr) + : runtime_allocator_(runtime_allocator), method_name_(method_name), + named_data_map_(named_data_map) {} + + /** Get the runtime allocator passed from Method. It's the same runtime + * executor used by the standard executor runtime and the life span is the + * same as the model. + */ + MemoryAllocator *get_runtime_allocator() { return runtime_allocator_; } + + /** + * Returns a pointer (null if not installed) to an instance of EventTracer to + * do profiling/debugging logging inside the delegate backend. Users will need + * access to this pointer to use any of the event tracer APIs. + */ + EventTracer *event_tracer() { return event_tracer_; } + + /** Get the loaded method name from ExecuTorch runtime. Usually it's + * "forward", however, if there are multiple methods in the .pte file, it can + * be different. One example is that we may have prefill and decode methods in + * the same .pte file. In this case, when client loads "prefill" method, the + * `get_method_name` function will return "prefill", when client loads + * "decode" method, the `get_method_name` function will return "decode". + */ + const char *get_method_name() const { return method_name_; } + + /** Get the named data map from ExecuTorch runtime. + * This provides a way for backends to retrieve data blobs by key. + */ + const NamedDataMap *get_named_data_map() const { return named_data_map_; } + +private: + MemoryAllocator *runtime_allocator_ = nullptr; + EventTracer *event_tracer_ = nullptr; + const char *method_name_ = nullptr; + const NamedDataMap *named_data_map_ = nullptr; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::BackendInitContext; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/backend/interface.h b/third-party/include/executorch/runtime/backend/interface.h new file mode 100644 index 000000000..1444f0af5 --- /dev/null +++ b/third-party/include/executorch/runtime/backend/interface.h @@ -0,0 +1,166 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace executorch { +namespace runtime { + +struct SizedBuffer { + void *buffer; + size_t nbytes; // number of bytes of buffer +}; + +struct CompileSpec { + const char *key; // spec key + SizedBuffer value; // spec value +}; + +/** + * An opaque handle managed by a backend. Typically points to a backend-private + * class/struct. + */ +using DelegateHandle = void; + +class BackendInterface { +public: + virtual ~BackendInterface() = 0; + + /** + * Returns true if the backend is available to process delegation calls. + */ + ET_NODISCARD virtual bool is_available() const = 0; + + /** + * Responsible to further process (compile/transform/optimize) the compiled + * unit that was produced, ahead-of-time, as well as perform any backend + * initialization to ready it for execution. This method is called every time + * the ExecuTorch program is initialized. Consequently, this is the place to + * perform any backend initialization as well as transformations, + * optimizations, and even compilation that depend on the target device. As + * such, it is strongly encouraged to push as much processing as possible to + * the ahead-of-time processing. + * + * @param[in] processed An opaque (to ExecuTorch) backend-specific compiled + * unit from the preprocessor. Can contain anything the backend needs to + * execute the equivalent semantics of the passed-in Module and its + * method. Often passed unmodified to `execute()` as a `DelegateHandle`, + * unless it needs further processing at init time to be fully executable. + * If the data is not needed after init(), calling processed->Free() can + * reclaim its memory. + * @param[in] compile_specs The exact same compiler specification that + * was used ahead-of-time to produce `processed`. + * + * @returns On success, an opaque handle representing the the method + * implemented by the delegate. This handle is passed to `execute()` and + * `destroy()`, and the memory it points to is owned by the backend. + * Typically points to a backend-private class/struct. + * @returns On error, returns an error code other than Error::Ok. If the + * compiled unit (the preprocessed result from ahead of time) is not + * compatible with the current backend runtime, return the error code + * Error::DelegateInvalidCompatibility. Other backend delegate + * specific error codes can be found in error.h. + */ + ET_NODISCARD virtual Result + init(BackendInitContext &context, FreeableBuffer *processed, + ArrayRef compile_specs) const = 0; + + /** + * Responsible for executing the given method’s handle, as it was produced + * by compile. + * + * @param[in] handle An opaque handle returned by `init()`. Usually a backend + * executable unit. This executable unit should be ready to execute the + * delegate blobs. + * @param[in] args The method’s inputs and outputs. + * @retval Error::Ok if successful. + */ + ET_NODISCARD virtual Error execute(BackendExecutionContext &context, + DelegateHandle *handle, + EValue **args) const = 0; + + /** + * Responsible for destroying a handle, if it's required for some backend. + * It may be needed for some backends. For example, resources associated with + * this handle needs to be released. This method is called when the execution + * plan is destroyed (i.e., the program is out of its lifespan). + * + * @param[in] handle The handle to be destroyed. An opaque handle returned by + * `init()`. + */ + virtual void destroy(ET_UNUSED DelegateHandle *handle) const {} +}; + +/** + * Returns the corresponding object pointer for a given string name. + * The mapping is populated using register_backend method. + * + * @param[in] name Name of the user-defined backend delegate. + * @retval Pointer to the appropriate object that implements BackendInterface. + * Nullptr if it can't find anything with the given name. + */ +BackendInterface *get_backend_class(const char *name); + +/** + * A named instance of a backend. + */ +struct Backend { + /// The name of the backend. Must match the string used in the PTE file. + const char *name; + /// The instance of the backend to use when loading and executing programs. + BackendInterface *backend; +}; + +/** + * Registers the Backend object (i.e. string name and BackendInterface pair) so + * that it could be called via the name during the runtime. + * + * @param[in] backend Backend object + * @retval Error code representing whether registration was successful. + */ +ET_NODISCARD Error register_backend(const Backend &backend); + +/** + * Returns the number of registered backends. + */ +size_t get_num_registered_backends(); + +/** + * Returns the backend name at the given index. + */ +Result get_backend_name(size_t index); + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::Backend; +using ::executorch::runtime::CompileSpec; +using ::executorch::runtime::DelegateHandle; +using ::executorch::runtime::get_backend_class; +using ::executorch::runtime::register_backend; +using ::executorch::runtime::SizedBuffer; +using PyTorchBackendInterface = ::executorch::runtime::BackendInterface; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/array_ref.h b/third-party/include/executorch/runtime/core/array_ref.h new file mode 100644 index 000000000..01dd58166 --- /dev/null +++ b/third-party/include/executorch/runtime/core/array_ref.h @@ -0,0 +1,235 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +//===--- ArrayRef.h - Array Reference Wrapper -------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// removed llvm-specific functionality +// removed some implicit const -> non-const conversions that rely on +// complicated std::enable_if meta-programming +// removed a bunch of slice variants for simplicity... +// remove constructors and operators for std::vector +// removed some prevention of accidental assignments from temporary that +// required std::enable_if meta-programming +// removed reverse iterator + +#pragma once + +#include +#include + +#include +#include + +namespace executorch { +namespace runtime { + +/** + * Represents a constant reference to an array (0 or more elements + * consecutively in memory), i.e. a start pointer and a length. It allows + * various APIs to take consecutive elements easily and conveniently. + * + * This class does not own the underlying data, it is expected to be used in + * situations where the data resides in some other buffer, whose lifetime + * extends past that of the ArrayRef. For this reason, it is not in general + * safe to store an ArrayRef. + * + * Span and ArrayRef are extrememly similar with the difference being ArrayRef + * views a list of constant elements and Span views a list of mutable elements. + * Clients should decide between the two based on if the list elements for their + * use case should be mutable. + * + * This is intended to be trivially copyable, so it should be passed by + * value. + */ +template class ArrayRef final { +public: + using iterator = const T *; + using const_iterator = const T *; + using size_type = size_t; + using value_type = T; + +private: + /// The start of the array, in an external buffer. + const T *Data; + + /// The number of elements. + size_type Length; + +public: + /// @name Constructors + /// @{ + + /// Construct an empty ArrayRef. + /* implicit */ constexpr ArrayRef() : Data(nullptr), Length(0) {} + + /// Construct a ArrayRef from a single element. Implicitly convert element + /// type. It is aligned with PyTorch's c10::ArrayRef. + /* implicit */ constexpr ArrayRef(const T &OneElt) + : Data(&OneElt), Length(1) {} + + /// Construct a ArrayRef from a pointer and length. + ArrayRef(const T *data, size_t length) : Data(data), Length(length) { + ET_DCHECK(Data != nullptr || Length == 0); + } + + /// Construct a ArrayRef from a range. + ArrayRef(const T *begin, const T *end) : Data(begin), Length(end - begin) {} + + /// Construct an ArrayRef from a std::array + template + /* implicit */ constexpr ArrayRef(const std::array &Arr) + : Data(Arr.data()), Length(N) {} + + /// Construct a ArrayRef from a C array. + template + /* implicit */ constexpr ArrayRef(const T (&Arr)[N]) : Data(Arr), Length(N) {} + + /// @} + /// @name Simple Operations + /// @{ + + constexpr iterator begin() const { return Data; } + constexpr iterator end() const { return Data + Length; } + + // These are actually the same as iterator, since ArrayRef only + // gives you const iterators. + constexpr const_iterator cbegin() const { return Data; } + constexpr const_iterator cend() const { return Data + Length; } + + /// empty - Check if the array is empty. + constexpr bool empty() const { return Length == 0; } + + constexpr const T *data() const { return Data; } + + /// size - Get the array size. + constexpr size_t size() const { return Length; } + + /// front - Get the first element. + const T &front() const { + // ArrayRef: attempted to access front() of empty list + ET_CHECK(!empty()); + return Data[0]; + } + + /// back - Get the last element. + const T &back() const { + // ArrayRef: attempted to access back() of empty list + ET_CHECK(!empty()); + return Data[Length - 1]; + } + + /// equals - Check for element-wise equality. + bool equals(ArrayRef RHS) const { + if (Length != RHS.Length) { + return false; + } + for (const auto i : c10::irange(this->Length)) { + if (Data[i] != RHS.Data[i]) { + return false; + } + } + return true; + } + + /// slice(n, m) - Take M elements of the array starting at element N + ArrayRef slice(size_t N, size_t M) const { + // cant slice longer then the array + ET_CHECK(N + M <= size()); + return ArrayRef(data() + N, M); + } + + /// slice(n) - Chop off the first N elements of the array. + constexpr ArrayRef slice(size_t N) const { return slice(N, size() - N); } + + /// @} + /// @name Operator Overloads + /// @{ + constexpr const T &operator[](size_t Index) const { return Data[Index]; } + + /// Vector compatibility + const T &at(size_t Index) const { + // invalid index + ET_CHECK(Index < Length); + return Data[Index]; + } + + /// @} +}; + +/// @name ArrayRef Convenience constructors +/// @{ + +/// Construct an ArrayRef from a single element. +template ArrayRef makeArrayRef(const T &OneElt) { + return OneElt; +} + +/// Construct an ArrayRef from a pointer and length. +template ArrayRef makeArrayRef(const T *data, size_t length) { + return ArrayRef(data, length); +} + +/// Construct an ArrayRef from a range. +template ArrayRef makeArrayRef(const T *begin, const T *end) { + return ArrayRef(begin, end); +} + +/// Construct an ArrayRef from a std::array. +template +ArrayRef makeArrayRef(const std::array &Arr) { + return Arr; +} + +/// Construct an ArrayRef from an ArrayRef (no-op) (const) +template ArrayRef makeArrayRef(const ArrayRef &Vec) { + return Vec; +} + +/// Construct an ArrayRef from an ArrayRef (no-op) +template ArrayRef &makeArrayRef(ArrayRef &Vec) { + return Vec; +} + +/// Construct an ArrayRef from a C array. +template ArrayRef makeArrayRef(const T (&Arr)[N]) { + return ArrayRef(Arr); +} + +// WARNING: Template instantiation will NOT be willing to do an implicit +// conversions to get you to an ArrayRef, which is why we need so +// many overloads. + +template bool operator==(ArrayRef a1, ArrayRef a2) { + return a1.equals(a2); +} + +template bool operator!=(ArrayRef a1, ArrayRef a2) { + return !a1.equals(a2); +} + +using IntArrayRef = ArrayRef; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::ArrayRef; +using ::executorch::runtime::IntArrayRef; +using ::executorch::runtime::makeArrayRef; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/data_loader.h b/third-party/include/executorch/runtime/core/data_loader.h new file mode 100644 index 000000000..01fc4caca --- /dev/null +++ b/third-party/include/executorch/runtime/core/data_loader.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +#include +#include +#include + +namespace executorch { +namespace runtime { + +/** + * Loads from a data source. + * + * See //executorch/extension/data_loader for common implementations. + */ +class DataLoader { +public: + /** + * Describes the content of the segment. + */ + struct SegmentInfo { + /** + * Represents the purpose of the segment. + */ + enum class Type { + /** + * Data for the actual program. + */ + Program, + /** + * Holds constant tensor data. + */ + Constant, + /** + * Data used for initializing a backend. + */ + Backend, + /** + * Data used for initializing mutable tensors. + */ + Mutable, + /** + * Data used for initializing external tensors. + */ + External, + }; + + /// Type of the segment. + Type segment_type; + + /// Index of the segment within the segment list. Undefined for program + /// segments. + size_t segment_index; + + /// An optional, null-terminated string describing the segment. For + /// `Backend` segments, this is the backend ID. Null for other segment + /// types. + const char *descriptor; + + SegmentInfo() = default; + + explicit SegmentInfo(Type segment_type_, size_t segment_index_ = 0, + const char *descriptor_ = nullptr) + : segment_type(segment_type_), segment_index(segment_index_), + descriptor(descriptor_) {} + }; + + virtual ~DataLoader() = default; + + /** + * Loads data from the underlying data source. + * + * NOTE: This must be thread-safe. If this call modifies common state, the + * implementation must do its own locking. + * + * @param offset The byte offset in the data source to start loading from. + * @param size The number of bytes to load. + * @param segment_info Information about the segment being loaded. + * + * @returns a `FreeableBuffer` that owns the loaded data. + */ + ET_NODISCARD virtual Result + load(size_t offset, size_t size, const SegmentInfo &segment_info) const = 0; + + /** + * Loads data from the underlying data source into the provided buffer. + * + * NOTE: This must be thread-safe. If this call modifies common state, the + * implementation must do its own locking. + * + * @param offset The byte offset in the data source to start loading from. + * @param size The number of bytes to load. + * @param segment_info Information about the segment being loaded. + * @param buffer The buffer to load data into. Must point to at least `size` + * bytes of memory. + * + * @returns an Error indicating if the load was successful. + */ + ET_NODISCARD virtual Error load_into(size_t offset, size_t size, + const SegmentInfo &segment_info, + void *buffer) const { + // Using a stub implementation here instead of pure virtual to expand the + // data_loader interface in a backwards compatible way. + (void)buffer; + (void)offset; + (void)size; + (void)segment_info; + ET_LOG(Error, "load_into() not implemented for this data loader."); + return Error::NotImplemented; + } + + /** + * Returns the length of the underlying data source, typically the file size. + */ + ET_NODISCARD virtual Result size() const = 0; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::DataLoader; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/defines.h b/third-party/include/executorch/runtime/core/defines.h new file mode 100644 index 000000000..ee4712682 --- /dev/null +++ b/third-party/include/executorch/runtime/core/defines.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * Contains preprocessor definitions used by ExecuTorch core. + */ + +#pragma once + +// Enable ET_ENABLE_ENUM_STRINGS by default. This option gates inclusion of +// enum string names and can be disabled by explicitly setting it to 0. +#ifndef ET_ENABLE_ENUM_STRINGS +#define ET_ENABLE_ENUM_STRINGS 1 +#endif diff --git a/third-party/include/executorch/runtime/core/error.h b/third-party/include/executorch/runtime/core/error.h new file mode 100644 index 000000000..9a07258ee --- /dev/null +++ b/third-party/include/executorch/runtime/core/error.h @@ -0,0 +1,229 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * ExecuTorch Error declarations. + */ + +#pragma once + +#include + +#include + +namespace executorch { +namespace runtime { + +// Alias error code integral type to minimal platform width (32-bits for now). +typedef uint32_t error_code_t; + +/** + * ExecuTorch Error type. + */ +enum class Error : error_code_t { + /* + * System errors. + */ + + /// Status indicating a successful operation. + Ok = 0x00, + + /// An internal error occurred. + Internal = 0x01, + + /// Status indicating the executor is in an invalid state for a target + /// operation + InvalidState = 0x2, + + /// Status indicating there are no more steps of execution to run + EndOfMethod = 0x03, + + /* + * Logical errors. + */ + + /// Operation is not supported in the current context. + NotSupported = 0x10, + + /// Operation is not yet implemented. + NotImplemented = 0x11, + + /// User provided an invalid argument. + InvalidArgument = 0x12, + + /// Object is an invalid type for the operation. + InvalidType = 0x13, + + /// Operator(s) missing in the operator registry. + OperatorMissing = 0x14, + + /* + * Resource errors. + */ + + /// Requested resource could not be found. + NotFound = 0x20, + + /// Could not allocate the requested memory. + MemoryAllocationFailed = 0x21, + + /// Could not access a resource. + AccessFailed = 0x22, + + /// Error caused by the contents of a program. + InvalidProgram = 0x23, + + /// Error caused by the contents of external data. + InvalidExternalData = 0x24, + + /// Does not have enough resources to perform the requested operation. + OutOfResources = 0x25, + + /* + * Delegate errors. + */ + + /// Init stage: Backend receives an incompatible delegate version. + DelegateInvalidCompatibility = 0x30, + /// Init stage: Backend fails to allocate memory. + DelegateMemoryAllocationFailed = 0x31, + /// Execute stage: The handle is invalid. + DelegateInvalidHandle = 0x32, + +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::Error; +using ::executorch::runtime::error_code_t; +} // namespace executor +} // namespace torch + +/** + * If cond__ is false, log the specified message and return the specified Error + * from the current function, which must be of return type + * executorch::runtime::Error. + * + * @param[in] cond__ The condition to be checked, asserted as true. + * @param[in] error__ Error enum value to return without the `Error::` prefix, + * like `InvalidArgument`. + * @param[in] message__ Format string for the log error message. + * @param[in] ... Optional additional arguments for the format string. + */ +#define ET_CHECK_OR_RETURN_ERROR(cond__, error__, message__, ...) \ + { \ + if (!(cond__)) { \ + ET_LOG(Error, message__, ##__VA_ARGS__); \ + return ::executorch::runtime::Error::error__; \ + } \ + } + +/** + * A convenience macro to be used in utility functions that check whether input + * tensor(s) are valid, which are expected to return a boolean. Checks whether + * `cond` is true; if not, log the failed check with `message` and return false. + * + * @param[in] cond the condition to check + * @param[in] message an additional message to log with `cond` + */ +#define ET_CHECK_OR_RETURN_FALSE(cond__, message__, ...) \ + { \ + if (!(cond__)) { \ + ET_LOG(Error, "Check failed (%s): " message__, #cond__, ##__VA_ARGS__); \ + return false; \ + } \ + } + +/** + * If error__ is not Error::Ok, optionally log a message and return the error + * from the current function, which must be of return type + * executorch::runtime::Error. + * + * @param[in] error__ Error enum value asserted to be Error::Ok. + * @param[in] ... Optional format string for the log error message and its + * arguments. + */ +#define ET_CHECK_OK_OR_RETURN_ERROR(error__, ...) \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR(error__, ##__VA_ARGS__) + +// Internal only: Use ET_CHECK_OK_OR_RETURN_ERROR() instead. +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR(...) \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_SELECT(__VA_ARGS__, 10, 9, 8, 7, 6, 5, \ + 4, 3, 2, 1) \ + (__VA_ARGS__) + +/** + * Internal only: Use ET_CHECK_OK_OR_RETURN_ERROR() instead. + * This macro selects the correct version of + * ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR based on the number of arguments passed. + * It uses a trick with the preprocessor to count the number of arguments and + * then selects the appropriate macro. + * + * The macro expansion uses __VA_ARGS__ to accept any number of arguments and + * then appends them to ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_, followed by the + * count of arguments. The count is determined by the macro + * ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_SELECT which takes the arguments and + * passes them along with a sequence of numbers (2, 1). The preprocessor then + * matches this sequence to the correct number of arguments provided. + * + * If two arguments are passed, ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 is + * selected, suitable for cases where an error code and a custom message are + * provided. If only one argument is passed, + * ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_1 is selected, which is used for cases + * with just an error code. + * + * Usage: + * ET_CHECK_OK_OR_RETURN_ERROR(error_code); // Calls v1 + * ET_CHECK_OK_OR_RETURN_ERROR(error_code, "Error message", ...); // Calls v2 + */ +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_SELECT(_1, _2, _3, _4, _5, _6, \ + _7, _8, _9, _10, N, ...) \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_##N + +// Internal only: Use ET_CHECK_OK_OR_RETURN_ERROR() instead. +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_1(error__) \ + do { \ + const auto et_error__ = (error__); \ + if (et_error__ != ::executorch::runtime::Error::Ok) { \ + return et_error__; \ + } \ + } while (0) + +// Internal only: Use ET_CHECK_OK_OR_RETURN_ERROR() instead. +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2(error__, message__, ...) \ + do { \ + const auto et_error__ = (error__); \ + if (et_error__ != ::executorch::runtime::Error::Ok) { \ + ET_LOG(Error, message__, ##__VA_ARGS__); \ + return et_error__; \ + } \ + } while (0) + +// Internal only: Use ET_CHECK_OK_OR_RETURN_ERROR() instead. +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_3 \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_4 \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_5 \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_6 \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_7 \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_8 \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_9 \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 +#define ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_10 \ + ET_INTERNAL_CHECK_OK_OR_RETURN_ERROR_2 diff --git a/third-party/include/executorch/runtime/core/evalue.h b/third-party/include/executorch/runtime/core/evalue.h new file mode 100644 index 000000000..a4c307ff0 --- /dev/null +++ b/third-party/include/executorch/runtime/core/evalue.h @@ -0,0 +1,521 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once +#include +#include +#include + +namespace executorch { +namespace runtime { + +struct EValue; + +namespace internal { + +// Tensor gets proper reference treatment because its expensive to copy in aten +// mode, all other types are just copied. +template struct evalue_to_const_ref_overload_return { + using type = T; +}; + +template <> +struct evalue_to_const_ref_overload_return { + using type = const executorch::aten::Tensor &; +}; + +template struct evalue_to_ref_overload_return { + using type = T; +}; + +template <> struct evalue_to_ref_overload_return { + using type = executorch::aten::Tensor &; +}; + +} // namespace internal + +/* + * Helper class used to correlate EValues in the executor table, with the + * unwrapped list of the proper type. Because values in the runtime's values + * table can change during execution, we cannot statically allocate list of + * objects at deserialization. Imagine the serialized list says index 0 in the + * value table is element 2 in the list, but during execution the value in + * element 2 changes (in the case of tensor this means the TensorImpl* stored in + * the tensor changes). To solve this instead they must be created dynamically + * whenever they are used. + */ +template class BoxedEvalueList { +public: + BoxedEvalueList() = default; + /* + * Wrapped_vals is a list of pointers into the values table of the runtime + * whose destinations correlate with the elements of the list, unwrapped_vals + * is a container of the same size whose serves as memory to construct the + * unwrapped vals. + */ + BoxedEvalueList(EValue **wrapped_vals, T *unwrapped_vals, int size) + : wrapped_vals_(wrapped_vals, size), unwrapped_vals_(unwrapped_vals) {} + /* + * Constructs and returns the list of T specified by the EValue pointers + */ + executorch::aten::ArrayRef get() const; + +private: + // Source of truth for the list + executorch::aten::ArrayRef wrapped_vals_; + // Same size as wrapped_vals + mutable T *unwrapped_vals_; +}; + +template <> +executorch::aten::ArrayRef> +BoxedEvalueList>::get() + const; + +// Aggregate typing system similar to IValue only slimmed down with less +// functionality, no dependencies on atomic, and fewer supported types to better +// suit embedded systems (ie no intrusive ptr) +struct EValue { + union Payload { + // When in ATen mode at::Tensor is not trivially copyable, this nested union + // lets us handle tensor as a special case while leaving the rest of the + // fields in a simple state instead of requiring a switch on tag everywhere. + union TriviallyCopyablePayload { + TriviallyCopyablePayload() : as_int(0) {} + // Scalar supported through these 3 types + int64_t as_int; + double as_double; + bool as_bool; + // TODO(jakeszwe): convert back to pointers to optimize size of this + // struct + executorch::aten::ArrayRef as_string; + executorch::aten::ArrayRef as_double_list; + executorch::aten::ArrayRef as_bool_list; + BoxedEvalueList as_int_list; + BoxedEvalueList as_tensor_list; + BoxedEvalueList> + as_list_optional_tensor; + } copyable_union; + + // Since a Tensor just holds a TensorImpl*, there's no value to use Tensor* + // here. + executorch::aten::Tensor as_tensor; + + Payload() {} + ~Payload() {} + }; + + // Data storage and type tag + Payload payload; + Tag tag; + + // Basic ctors and assignments + EValue(const EValue &rhs) : EValue(rhs.payload, rhs.tag) {} + + EValue(EValue &&rhs) noexcept : tag(rhs.tag) { moveFrom(std::move(rhs)); } + + EValue &operator=(EValue &&rhs) & noexcept { + if (&rhs == this) { + return *this; + } + + destroy(); + moveFrom(std::move(rhs)); + return *this; + } + + EValue &operator=(EValue const &rhs) & { + // Define copy assignment through copy ctor and move assignment + *this = EValue(rhs); + return *this; + } + + ~EValue() { destroy(); } + + /****** None Type ******/ + EValue() : tag(Tag::None) { payload.copyable_union.as_int = 0; } + + bool isNone() const { return tag == Tag::None; } + + /****** Int Type ******/ + /*implicit*/ EValue(int64_t i) : tag(Tag::Int) { + payload.copyable_union.as_int = i; + } + + bool isInt() const { return tag == Tag::Int; } + + int64_t toInt() const { + ET_CHECK_MSG(isInt(), "EValue is not an int."); + return payload.copyable_union.as_int; + } + + /****** Double Type ******/ + /*implicit*/ EValue(double d) : tag(Tag::Double) { + payload.copyable_union.as_double = d; + } + + bool isDouble() const { return tag == Tag::Double; } + + double toDouble() const { + ET_CHECK_MSG(isDouble(), "EValue is not a Double."); + return payload.copyable_union.as_double; + } + + /****** Bool Type ******/ + /*implicit*/ EValue(bool b) : tag(Tag::Bool) { + payload.copyable_union.as_bool = b; + } + + bool isBool() const { return tag == Tag::Bool; } + + bool toBool() const { + ET_CHECK_MSG(isBool(), "EValue is not a Bool."); + return payload.copyable_union.as_bool; + } + + /****** Scalar Type ******/ + /// Construct an EValue using the implicit value of a Scalar. + /*implicit*/ EValue(executorch::aten::Scalar s) { + if (s.isIntegral(false)) { + tag = Tag::Int; + payload.copyable_union.as_int = s.to(); + } else if (s.isFloatingPoint()) { + tag = Tag::Double; + payload.copyable_union.as_double = s.to(); + } else if (s.isBoolean()) { + tag = Tag::Bool; + payload.copyable_union.as_bool = s.to(); + } else { + ET_CHECK_MSG(false, "Scalar passed to EValue is not initialized."); + } + } + + bool isScalar() const { + return tag == Tag::Int || tag == Tag::Double || tag == Tag::Bool; + } + + executorch::aten::Scalar toScalar() const { + // Convert from implicit value to Scalar using implicit constructors. + + if (isDouble()) { + return toDouble(); + } else if (isInt()) { + return toInt(); + } else if (isBool()) { + return toBool(); + } else { + ET_CHECK_MSG(false, "EValue is not a Scalar."); + } + } + + /****** Tensor Type ******/ + /*implicit*/ EValue(executorch::aten::Tensor t) : tag(Tag::Tensor) { + // When built in aten mode, at::Tensor has a non trivial constructor + // destructor, so regular assignment to a union field is UB. Instead we must + // go through placement new (which causes a refcount bump). + new (&payload.as_tensor) executorch::aten::Tensor(t); + } + + // Template constructor that allows construction from types that can be + // dereferenced to produce a type that EValue can be implicitly constructed + // from. + template (std::declval())), // declval to + // simulate + // forwarding + EValue>::value>::type> + /*implicit*/ EValue(T &&value) { + ET_CHECK_MSG(value != nullptr, "Pointer is null."); + // Note that this ctor does not initialize this->tag directly; it is set by + // moving in the new value. + moveFrom(*std::forward(value)); + } + + // Delete constructor for raw pointers to ensure they cannot be used. + template explicit EValue(T *value) = delete; + + bool isTensor() const { return tag == Tag::Tensor; } + + executorch::aten::Tensor toTensor() && { + ET_CHECK_MSG(isTensor(), "EValue is not a Tensor."); + auto res = std::move(payload.as_tensor); + clearToNone(); + return res; + } + + executorch::aten::Tensor &toTensor() & { + ET_CHECK_MSG(isTensor(), "EValue is not a Tensor."); + return payload.as_tensor; + } + + const executorch::aten::Tensor &toTensor() const & { + ET_CHECK_MSG(isTensor(), "EValue is not a Tensor."); + return payload.as_tensor; + } + + /****** String Type ******/ + /*implicit*/ EValue(const char *s, size_t size) : tag(Tag::String) { + payload.copyable_union.as_string = + executorch::aten::ArrayRef(s, size); + } + + bool isString() const { return tag == Tag::String; } + + executorch::aten::string_view toString() const { + ET_CHECK_MSG(isString(), "EValue is not a String."); + return executorch::aten::string_view( + payload.copyable_union.as_string.data(), + payload.copyable_union.as_string.size()); + } + + /****** Int List Type ******/ + /*implicit*/ EValue(BoxedEvalueList i) : tag(Tag::ListInt) { + payload.copyable_union.as_int_list = i; + } + + bool isIntList() const { return tag == Tag::ListInt; } + + executorch::aten::ArrayRef toIntList() const { + ET_CHECK_MSG(isIntList(), "EValue is not an Int List."); + return payload.copyable_union.as_int_list.get(); + } + + /****** Bool List Type ******/ + /*implicit*/ EValue(executorch::aten::ArrayRef b) : tag(Tag::ListBool) { + payload.copyable_union.as_bool_list = b; + } + + bool isBoolList() const { return tag == Tag::ListBool; } + + executorch::aten::ArrayRef toBoolList() const { + ET_CHECK_MSG(isBoolList(), "EValue is not a Bool List."); + return payload.copyable_union.as_bool_list; + } + + /****** Double List Type ******/ + /*implicit*/ EValue(executorch::aten::ArrayRef d) + : tag(Tag::ListDouble) { + payload.copyable_union.as_double_list = d; + } + + bool isDoubleList() const { return tag == Tag::ListDouble; } + + executorch::aten::ArrayRef toDoubleList() const { + ET_CHECK_MSG(isDoubleList(), "EValue is not a Double List."); + return payload.copyable_union.as_double_list; + } + + /****** Tensor List Type ******/ + /*implicit*/ EValue(BoxedEvalueList t) + : tag(Tag::ListTensor) { + payload.copyable_union.as_tensor_list = t; + } + + bool isTensorList() const { return tag == Tag::ListTensor; } + + executorch::aten::ArrayRef toTensorList() const { + ET_CHECK_MSG(isTensorList(), "EValue is not a Tensor List."); + return payload.copyable_union.as_tensor_list.get(); + } + + /****** List Optional Tensor Type ******/ + /*implicit*/ EValue( + BoxedEvalueList> t) + : tag(Tag::ListOptionalTensor) { + payload.copyable_union.as_list_optional_tensor = t; + } + + bool isListOptionalTensor() const { return tag == Tag::ListOptionalTensor; } + + executorch::aten::ArrayRef< + executorch::aten::optional> + toListOptionalTensor() const { + return payload.copyable_union.as_list_optional_tensor.get(); + } + + /****** ScalarType Type ******/ + executorch::aten::ScalarType toScalarType() const { + ET_CHECK_MSG(isInt(), "EValue is not a ScalarType."); + return static_cast( + payload.copyable_union.as_int); + } + + /****** MemoryFormat Type ******/ + executorch::aten::MemoryFormat toMemoryFormat() const { + ET_CHECK_MSG(isInt(), "EValue is not a MemoryFormat."); + return static_cast( + payload.copyable_union.as_int); + } + + /****** Layout Type ******/ + executorch::aten::Layout toLayout() const { + ET_CHECK_MSG(isInt(), "EValue is not a Layout."); + return static_cast(payload.copyable_union.as_int); + } + + /****** Device Type ******/ + executorch::aten::Device toDevice() const { + ET_CHECK_MSG(isInt(), "EValue is not a Device."); + return executorch::aten::Device(static_cast( + payload.copyable_union.as_int), + -1); + } + + template T to() &&; + template + typename internal::evalue_to_const_ref_overload_return::type to() const &; + template + typename internal::evalue_to_ref_overload_return::type to() &; + + /** + * Converts the EValue to an optional object that can represent both T and + * an uninitialized state. + */ + template + inline executorch::aten::optional toOptional() const { + if (this->isNone()) { + return executorch::aten::nullopt; + } + return this->to(); + } + +private: + // Pre cond: the payload value has had its destructor called + void clearToNone() noexcept { + payload.copyable_union.as_int = 0; + tag = Tag::None; + } + + // Shared move logic + void moveFrom(EValue &&rhs) noexcept { + if (rhs.isTensor()) { + new (&payload.as_tensor) + executorch::aten::Tensor(std::move(rhs.payload.as_tensor)); + rhs.payload.as_tensor.~Tensor(); + } else { + payload.copyable_union = rhs.payload.copyable_union; + } + tag = rhs.tag; + rhs.clearToNone(); + } + + // Destructs stored tensor if there is one + void destroy() { + // Necessary for ATen tensor to refcount decrement the intrusive_ptr to + // tensorimpl that got a refcount increment when we placed it in the evalue, + // no-op if executorch tensor #ifdef could have a + // minor performance bump for a code maintainability hit + if (isTensor()) { + payload.as_tensor.~Tensor(); + } else if (isTensorList()) { + for (auto &tensor : toTensorList()) { + tensor.~Tensor(); + } + } else if (isListOptionalTensor()) { + for (auto &optional_tensor : toListOptionalTensor()) { + optional_tensor.~optional(); + } + } + } + + EValue(const Payload &p, Tag t) : tag(t) { + if (isTensor()) { + new (&payload.as_tensor) executorch::aten::Tensor(p.as_tensor); + } else { + payload.copyable_union = p.copyable_union; + } + } +}; + +#define EVALUE_DEFINE_TO(T, method_name) \ + template <> inline T EValue::to() && { \ + return static_cast(std::move(*this).method_name()); \ + } \ + template <> \ + inline ::executorch::runtime::internal::evalue_to_const_ref_overload_return< \ + T>::type \ + EValue::to() const & { \ + typedef ::executorch::runtime::internal:: \ + evalue_to_const_ref_overload_return::type return_type; \ + return static_cast(this->method_name()); \ + } \ + template <> \ + inline ::executorch::runtime::internal::evalue_to_ref_overload_return< \ + T>::type \ + EValue::to() & { \ + typedef ::executorch::runtime::internal::evalue_to_ref_overload_return< \ + T>::type return_type; \ + return static_cast(this->method_name()); \ + } + +EVALUE_DEFINE_TO(executorch::aten::Scalar, toScalar) +EVALUE_DEFINE_TO(int64_t, toInt) +EVALUE_DEFINE_TO(bool, toBool) +EVALUE_DEFINE_TO(double, toDouble) +EVALUE_DEFINE_TO(executorch::aten::string_view, toString) +EVALUE_DEFINE_TO(executorch::aten::ScalarType, toScalarType) +EVALUE_DEFINE_TO(executorch::aten::MemoryFormat, toMemoryFormat) +EVALUE_DEFINE_TO(executorch::aten::Layout, toLayout) +EVALUE_DEFINE_TO(executorch::aten::Device, toDevice) +// Tensor and Optional Tensor +EVALUE_DEFINE_TO(executorch::aten::optional, + toOptional) +EVALUE_DEFINE_TO(executorch::aten::Tensor, toTensor) + +// IntList and Optional IntList +EVALUE_DEFINE_TO(executorch::aten::ArrayRef, toIntList) +EVALUE_DEFINE_TO( + executorch::aten::optional>, + toOptional>) + +// DoubleList and Optional DoubleList +EVALUE_DEFINE_TO(executorch::aten::ArrayRef, toDoubleList) +EVALUE_DEFINE_TO(executorch::aten::optional>, + toOptional>) + +// BoolList and Optional BoolList +EVALUE_DEFINE_TO(executorch::aten::ArrayRef, toBoolList) +EVALUE_DEFINE_TO(executorch::aten::optional>, + toOptional>) + +// TensorList and Optional TensorList +EVALUE_DEFINE_TO(executorch::aten::ArrayRef, + toTensorList) +EVALUE_DEFINE_TO( + executorch::aten::optional< + executorch::aten::ArrayRef>, + toOptional>) + +// List of Optional Tensor +EVALUE_DEFINE_TO(executorch::aten::ArrayRef< + executorch::aten::optional>, + toListOptionalTensor) +#undef EVALUE_DEFINE_TO + +template +executorch::aten::ArrayRef BoxedEvalueList::get() const { + for (typename executorch::aten::ArrayRef::size_type i = 0; + i < wrapped_vals_.size(); i++) { + ET_CHECK(wrapped_vals_[i] != nullptr); + unwrapped_vals_[i] = wrapped_vals_[i]->template to(); + } + return executorch::aten::ArrayRef{unwrapped_vals_, wrapped_vals_.size()}; +} + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::BoxedEvalueList; +using ::executorch::runtime::EValue; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/event_tracer.h b/third-party/include/executorch/runtime/core/event_tracer.h new file mode 100644 index 000000000..b02a0e714 --- /dev/null +++ b/third-party/include/executorch/runtime/core/event_tracer.h @@ -0,0 +1,565 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include +#include +#include +#include +#include +#include + +#pragma once + +namespace executorch { +namespace runtime { + +/// Represents an allocator id returned by track_allocator. +typedef uint32_t AllocatorID; +/// Represents the chain id that will be passed in by the user during +/// event logging. +typedef int32_t ChainID; +/// Represents the debug handle that is generally associated with each +/// op executed in the runtime. +typedef uint32_t DebugHandle; + +/// Default id's for chain id and debug handle. +constexpr ChainID kUnsetChainId = -1; +constexpr DebugHandle kUnsetDebugHandle = 0; +// Default bundled input index to indicate that it hasn't been set yet. +constexpr int kUnsetBundledInputIndex = -1; + +/// Different types of delegate debug identifiers that are supported currently. +enum class DelegateDebugIdType { + /// Default value, indicates that it's not a delegate event. + kNone, + /// Indicates a delegate event logged using an integer delegate debug + /// identifier. + kInt, + /// Indicates a delegate event logged using a string delegate debug + /// identifier i.e. the delegate debug id is a pointer to a string table + /// managed by the class implementing EventTracer functionality. + kStr +}; + +/// Indicates the type of the EValue that was logged. These values could be +/// serialized and should not be changed. +enum class LoggedEValueType { + /// Intermediate output from an operator. + kIntermediateOutput = 0, + /// Output at the program level. This is essentially the output + /// of the model. + kProgramOutput = 1, +}; + +/// Indicates the level of event tracer debug logging. Verbosity of the logging +/// increases as we go down the enum list. +enum class EventTracerDebugLogLevel { + /// No logging. + kNoLogging, + /// When set to this only the program level outputs will be logged. + kProgramOutputs, + /// When set to this all intermediate outputs and program level outputs + /// will be logged. + kIntermediateOutputs, +}; + +/** + * EventTracerFilterBase is an abstract base class that provides an interface + * for filtering events based on their name or delegate debug index. + * Derived classes should implement the filter method to define specific + * filtering logic. + */ +class EventTracerFilterBase { +public: + /** + * Filters events based on the given name or delegate debug index. + * + * Note that only one of either the name or delegate_debug_index should be + * passed in. + * + * @param[in] name A pointer to a string representing the `name` of the + * event. If `delegate_debug_index` is not set to kUnsetDebugHandle, `name` + * should be set to nullptr. + * + * @param[in] delegate_debug_index A DebugHandle representing the debug index + * of the delegate. If `name` is not nullptr, this should be set to + * kUnsetDebugHandle. + * + * @return A Result indicating whether the event matches the filter + * criteria. + * - True if the event matches the filter. + * - False if the event does not match or is unknown. + * - An error code if an error occurs during filtering. + */ + virtual Result filter(char *name, DebugHandle delegate_debug_index); + + /** + * Virtual destructor for the EventTracerFilterBase class. + * Ensures proper cleanup of derived class objects. + */ + virtual ~EventTracerFilterBase(); +}; + +/** + * Indicates the level of profiling that should be enabled. Profiling + * events will be logged in increasing order of verbosity as we go down the + * enum list. Thus it is important to keep the enum values in the right order. + */ +enum class EventTracerProfilingLevel { + /// No operator profiling. + kProfileMethodOnly, + /// All profiling events enabled. + kProfileAllEvents, +}; + +/** + * This is the struct which should be returned when a profiling event is + * started. This is used to uniquely identify that profiling event and will be + * required to be passed into the end_profiling call to signal that the event + * identified by this struct has completed. + **/ +struct EventTracerEntry { + /// An event id to uniquely identify this event that was generated during a + /// call to start the tracking of an event. + int64_t event_id; + /// The chain to which this event belongs to. + ChainID chain_id; + /// The debug handle corresponding to this event. + DebugHandle debug_handle; + /// The time at which this event was started to be tracked. + et_timestamp_t start_time; + /// When delegate_event_id_type != DelegateDebugIdType::kNone it indicates + /// that event_id represents a delegate event. If delegate_event_id_type is: + /// 1) kInt then event_id contains an integer delegate debug id. + /// 2) kStr then event_id contains a string table index into a string table + /// maintained by the class implementing EventTracer functionality that will + /// give us the string identifier of this delegate event. For more details + /// refer to the DelegateMappingBuilder library present in + /// executorch/exir/backend/utils.py. + DelegateDebugIdType delegate_event_id_type; +}; +/** + * EventTracer is a class that users can inherit and implement to + * log/serialize/stream etc. the profiling and debugging events that are + * generated at runtime for a model. An example of this is the ETDump + * implementation in the devtools codebase that serializes these events to a + * flatbuffer. + */ +class EventTracer { +public: + /** + * Start a new event block (can consist of profiling and/or debugging events.) + * identified by this name. A block is conceptually a set of events that we + * want to group together. e.g. all the events that occur during the call to + * execute() (i.e. model inference) could be categorized as a block. + * + * @param[in] name A human readable identifier for the event block. Users + * calling this interface do not need to keep the memory pointed to by this + * pointer around. The string must be copied over into internal memory during + * this call. + */ + virtual void create_event_block(const char *name) = 0; + + /** + * Start the profiling of the event identified by name and debug_handle. + * The user can pass in a chain_id and debug_handle to this call, or leave + * them empty (default values) which would then result in the chain_id and + * debug handle stored within (set by set_chain_debug_handle) this class to be + * used. + * @param[in] name Human readable name for the profiling event. Users calling + * this interface do not need to keep the memory pointed to by this pointer + * around. The string must be copied over into internal memory during this + * call. + * @param[in] chain_id The id of the chain to which this event belongs to. If + * kUnsetChainId is passed in the chain_id and kUnsetDebugHandle for + * debug_handle then the values stored in the class internally for these + * properties will be used. + * @param[in] debug_handle Debug handle generated ahead-of-time during model + * compilation. + * + * @return Returns an instance of EventTracerEntry which should be passed back + * into the end_profiling() call. + */ + virtual EventTracerEntry + start_profiling(const char *name, ChainID chain_id = kUnsetChainId, + DebugHandle debug_handle = kUnsetDebugHandle) = 0; + + /** + * Start the profiling of a delegate event. Similar to start_profiling it will + * return an instance of EventTracerEntry that contains the details of this + * event. + * + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must be copied + * over into internal memory during this call. + * @param[in] delegate_debug_index The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then kUnsetDebugHandle should be passed in here. + */ + virtual EventTracerEntry + start_profiling_delegate(const char *name, + DebugHandle delegate_debug_index) = 0; + + /** + * Signal the end of the delegate profiling event contained in + * event_tracer_entry. Users also have the option to log some some free-from + * string based metadata along with this. + * + * @param[in] event_tracer_entry The EventTracerEntry returned by a call to + * start_profiling_delegate(). + * @param[in] metadata Optional data relevant to the execution that the user + * wants to log along with this event. Pointer to metadata doesn't need to be + * valid after the call to this function. The contents and format of the data + * are transparent to the event tracer. It will just pipe along the data and + * make it available for the user again in the post-processing stage. + * @param[in] metadata_len Length of the metadata buffer. + */ + virtual void end_profiling_delegate(EventTracerEntry event_tracer_entry, + const void *metadata = nullptr, + size_t metadata_len = 0) = 0; + + /** + * Some delegates get access to the profiling details only after the complete + * graph has been executed. This interface is to support such use cases. It + * can be called in a loop etc. to log any number of profiling events that are + * part of this delegate. + * + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must be copied + * over into internal memory during this call. + * @param[in] delegate_debug_index The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then kUnsetDebugHandle should be passed in here. + * @param[in] start_time The timestamp when the delegate event started. + * @param[in] end_time The timestamp when the delegate event finished. + * @param[in] metadata Optional data relevant to the execution that the user + * wants to log along with this event. Pointer to metadata doesn't need to be + * valid after the call to this function. The contents and format of the data + * are transparent to the event tracer. It will just pipe along the data and + * make it available for the user again in the post-processing stage. + * @param[in] metadata_len Length of the metadata buffer. + */ + virtual void log_profiling_delegate(const char *name, + DebugHandle delegate_debug_index, + et_timestamp_t start_time, + et_timestamp_t end_time, + const void *metadata = nullptr, + size_t metadata_len = 0) = 0; + + /** + * End the profiling of the event identified by prof_entry + * + * @param[in] prof_entry Value returned by a call to start_profiling + */ + virtual void end_profiling(EventTracerEntry prof_entry) = 0; + + /** + * Track this allocation done via a MemoryAllocator which had profiling + * enabled on it. + * + * @param[in] id Allocator id generated by a call to track_allocator. + * @param[in] size The size of the allocation done, in bytes. + */ + virtual void track_allocation(AllocatorID id, size_t size) = 0; + + /** + * Generate an allocator id for this memory allocator that will be used in the + * future to identify all the allocations done by this allocator. + * + * @param[in] name Human readable name for the allocator. Users calling + * this interface do not need to keep the memory pointed to by this pointer + * around. The string should be copied over into internal memory during this + * call. + * + * @return Identifier to uniquely identify this allocator. + */ + virtual AllocatorID track_allocator(const char *name) = 0; + + /** + * Log an evalue during the execution of the model. This is useful for + * debugging purposes. Model outputs are a special case of this and will + * be logged with the output bool enabled. + * + * Users of this should refer to the chain_id and debug_handle to get the + * context for these evalues and their corresponding op. + * + * @param[in] evalue The value to be logged. + * @param[in] evalue_type Indicates what type of output this is logging e.g. + * an intermediate output, program output etc. + */ + virtual void log_evalue(const EValue &evalue, + LoggedEValueType evalue_type) = 0; + + /** + * Log an intermediate tensor output from a delegate. + * + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must be copied + * over into internal memory during this call. + * @param[in] delegate_debug_index The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then kUnsetDebugHandle should be passed in here. + * @param[in] output The tensor type output to be logged. + * @return A Result indicating the status of the logging operation. + * - True if the tensor type output was successfully logged. + * - False if the tensor type output was filtered out and not logged. + * - An error code if an error occurs during logging. + */ + virtual Result + log_intermediate_output_delegate(const char *name, + DebugHandle delegate_debug_index, + const executorch::aten::Tensor &output) = 0; + + /** + * Log an intermediate tensor array output from a delegate. + * + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must be copied + * over into internal memory during this call. + * @param[in] delegate_debug_index The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then kUnsetDebugHandle should be passed in here. + * @param[in] output The tensor array type output to be logged. + * @return A Result indicating the status of the logging operation. + * - True if the tensor array type output was successfully logged. + * - False if the tensor array type output was filtered out and not + * logged. + * - An error code if an error occurs during logging. + */ + virtual Result log_intermediate_output_delegate( + const char *name, DebugHandle delegate_debug_index, + const ArrayRef output) = 0; + + /** + * Log an intermediate int output from a delegate. + * + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must be copied + * over into internal memory during this call. + * @param[in] delegate_debug_index The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then kUnsetDebugHandle should be passed in here. + * @param[in] output The int type output to be logged. + * @return A Result indicating the status of the logging operation. + * - True if the int type output was successfully logged. + * - False if the int type output was filtered out and not logged. + * - An error code if an error occurs during logging. + */ + virtual Result + log_intermediate_output_delegate(const char *name, + DebugHandle delegate_debug_index, + const int &output) = 0; + + /** + * Log an intermediate bool output from a delegate. + * + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must be copied + * over into internal memory during this call. + * @param[in] delegate_debug_index The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then kUnsetDebugHandle should be passed in here. + * @param[in] output The bool type output to be logged. + * @return A Result indicating the status of the logging operation. + * - True if the bool type output was successfully logged. + * - False if the bool type output was filtered out and not logged. + * - An error code if an error occurs during logging. + */ + virtual Result + log_intermediate_output_delegate(const char *name, + DebugHandle delegate_debug_index, + const bool &output) = 0; + + /** + * Log an intermediate double output from a delegate. + * + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must be copied + * over into internal memory during this call. + * @param[in] delegate_debug_index The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then kUnsetDebugHandle should be passed in here. + * @param[in] output The double type output to be logged. + * @return A Result indicating the status of the logging operation. + * - True if the double type output was successfully logged. + * - False if the double type output was filtered out and not logged. + * - An error code if an error occurs during logging. + */ + virtual Result + log_intermediate_output_delegate(const char *name, + DebugHandle delegate_debug_index, + const double &output) = 0; + + /** + * Helper function to set the chain id ands debug handle. Users have two + * options, the first is that they can directly pass in the chain id and debug + * handle to start_profiling or they can explicitly set them through this + * helper before calling start_profiling. + * + * The reason this helper exists is to + * solve a specific problem. We want to do profiling logging inside the + * codegen layer which calls the kernels. The problem though is that the + * codegen layer doesn't have access to these ids when calling + * start_profiling. + * + * Users should ideally use these within a RAII scope interface to make sure + * that these values are unset after the end_profiling call. If non-default + * values are passed into the start_profiling call they will always be given + * precedence over the values set by this interface. + * + * So what we do is call this helper in method.cpp before + * we hit the codegen layer and in the codegen layer we do a start_profiling + * call without passing in a chain_id or debug_handle. This ensures that the + * values set via this helper are the ones associated with that call. + * + * @param[in] chain_id Chain id of the current instruction being exectuted. + * @param[in] debug_handle Debug handle of the current instruction being + * executed. In this context debug handle and instruction id are the same + * thing. + */ + void set_chain_debug_handle(ChainID chain_id, DebugHandle debug_handle) { + chain_id_ = chain_id; + debug_handle_ = debug_handle; + } + + /** + * When running a program wrapped in a bundled program, log the bundled input + * index of the current bundled input being tested out on this method. + * If users want to unset the index back to the default value, they can call + * this method with kUnsetBundledInputIndex. + * + * @param[in] bundled_input_index Index of the current input being tested + */ + void set_bundled_input_index(int bundled_input_index) { + bundled_input_index_ = bundled_input_index; + } + + /** + * Return the current bundled input index. + */ + int bundled_input_index() { return bundled_input_index_; } + + /** + * Set the level of event tracer debug logging that is desired. + * + */ + void set_event_tracer_debug_level(EventTracerDebugLogLevel log_level) { + event_tracer_debug_level_ = log_level; + } + + /** + * Return the current level of event tracer debug logging. + */ + EventTracerDebugLogLevel event_tracer_debug_level() { + return event_tracer_debug_level_; + } + + /** + * Set the level of event tracer profiling that is desired. + */ + void + set_event_tracer_profiling_level(EventTracerProfilingLevel profiling_level) { + event_tracer_profiling_level_ = profiling_level; + } + + /** + * Set the filter of event tracer for delegation intermediate outputs. + */ + void set_delegation_intermediate_output_filter( + EventTracerFilterBase *event_tracer_filter); + + /** + * Return the current level of event tracer profiling. + */ + EventTracerProfilingLevel event_tracer_profiling_level() { + return event_tracer_profiling_level_; + } + + /** + * Return the current status of intermediate outputs logging mode. + */ + bool intermediate_outputs_logging_status() { + return log_intermediate_tensors_; + } + + /** + * Get the current chain id. + * + * @return Current chain id. + */ + ChainID current_chain_id() { return chain_id_; } + + /** + * Get the current debug handle. + * + * @return Current debug handle. + */ + DebugHandle current_debug_handle() { return debug_handle_; } + + virtual ~EventTracer() {} + +protected: + ChainID chain_id_ = kUnsetChainId; + DebugHandle debug_handle_ = kUnsetDebugHandle; + bool event_tracer_enable_debugging_ = false; + bool log_intermediate_tensors_ = false; + int bundled_input_index_ = kUnsetBundledInputIndex; + EventTracerDebugLogLevel event_tracer_debug_level_ = + EventTracerDebugLogLevel::kNoLogging; + EventTracerProfilingLevel event_tracer_profiling_level_ = + EventTracerProfilingLevel::kProfileAllEvents; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::AllocatorID; +using ::executorch::runtime::ChainID; +using ::executorch::runtime::DebugHandle; +using ::executorch::runtime::DelegateDebugIdType; +using ::executorch::runtime::EventTracer; +using ::executorch::runtime::EventTracerDebugLogLevel; +using ::executorch::runtime::EventTracerEntry; +using ::executorch::runtime::kUnsetBundledInputIndex; +using ::executorch::runtime::kUnsetChainId; +using ::executorch::runtime::kUnsetDebugHandle; +using ::executorch::runtime::LoggedEValueType; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/event_tracer_hooks.h b/third-party/include/executorch/runtime/core/event_tracer_hooks.h new file mode 100644 index 000000000..1e46013c4 --- /dev/null +++ b/third-party/include/executorch/runtime/core/event_tracer_hooks.h @@ -0,0 +1,323 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +/** + * @file + * + * This file contains the hooks that are inserted across various parts of the + * core runtime code to call into the EventTracer class for logging of profiling + * and debugging events. Any calls made to the EventTracer from the runtime must + * be made via these hooks. + * Users shouldn't directly add these hooks in their code and it's meant only + * for usage in ExecuTorch internal code. + * + * The benefit of defining these hooks is that we can easily control whether or + * not we want to compile in the EventTracer code based on the status of the + * ET_EVENT_TRACER_ENABLED flag. + * + * TODO(dbort): Make this a private header of runtime/executor. It only contains + * runtime-internal functions and should not be part of the public set of + * headers. + */ + +namespace executorch { +namespace runtime { +namespace internal { + +/** + * This class enables scope based profiling where needed using RAII for + * operators only. If operator profiling is disabled then this class is a no-op. + */ +class EventTracerProfileOpScope final { +public: + EventTracerProfileOpScope(EventTracer *event_tracer, const char *name) { +#ifdef ET_EVENT_TRACER_ENABLED + event_tracer_ = event_tracer; + if (event_tracer_ == nullptr) { + return; + } + if (event_tracer_->event_tracer_profiling_level() > + executorch::runtime::EventTracerProfilingLevel::kProfileMethodOnly) { + event_entry_ = event_tracer->start_profiling(name); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)name; +#endif + } + + ~EventTracerProfileOpScope() { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer_ == nullptr) { + return; + } + if (event_tracer_->event_tracer_profiling_level() > + executorch::runtime::EventTracerProfilingLevel::kProfileMethodOnly) { + event_tracer_->end_profiling(event_entry_); + } +#endif + } + +private: +#ifdef ET_EVENT_TRACER_ENABLED + EventTracer *event_tracer_; + EventTracerEntry event_entry_; +#endif +}; + +using EventTracerProfileScope = EventTracerProfileOpScope; + +/** + * This class enables scope based profiling where needed using RAII. + * Profiling will be started when the object is created and will end + * when the object goes out of scope. This is specifically intended to + * be used for profiling methods in the runtime. + */ +class EventTracerProfileMethodScope final { +public: + EventTracerProfileMethodScope(EventTracer *event_tracer, const char *name) { +#ifdef ET_EVENT_TRACER_ENABLED + event_tracer_ = event_tracer; + if (event_tracer_ == nullptr) { + return; + } + event_entry_ = event_tracer->start_profiling(name); +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)name; +#endif + } + + ~EventTracerProfileMethodScope() { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer_ == nullptr) { + return; + } + event_tracer_->end_profiling(event_entry_); +#endif + } + +private: +#ifdef ET_EVENT_TRACER_ENABLED + EventTracer *event_tracer_; + EventTracerEntry event_entry_; +#endif +}; + +/** + * This class helps us set and then clear out the chain id and debug handle + * values stored in the event tracer class using RAII. This is typically called + * in the executor loop before entering the codegen layer to configure the chain + * id and debug handle of the current instruction being executed. + * After we return from the kernel execution we can then reset the chain id and + * debug handle to defaults when this object goes out of scope. + */ +class EventTracerProfileInstructionScope final { +public: + EventTracerProfileInstructionScope(EventTracer *event_tracer, + ChainID chain_idx, + DebugHandle debug_handle) { +#ifdef ET_EVENT_TRACER_ENABLED + event_tracer_ = event_tracer; + if (event_tracer_ == nullptr) { + return; + } + event_tracer_->set_chain_debug_handle(chain_idx, debug_handle); +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)chain_idx; + (void)debug_handle; +#endif + } + + ~EventTracerProfileInstructionScope() { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer_ == nullptr) { + return; + } + event_tracer_->set_chain_debug_handle(kUnsetChainId, kUnsetDebugHandle); +#endif + } + +private: +#ifdef ET_EVENT_TRACER_ENABLED + EventTracer *event_tracer_; +#endif +}; + +inline bool event_tracer_enabled() { +#ifdef ET_EVENT_TRACER_ENABLED + return true; +#else //! ET_EVENT_TRACER_ENABLED + return false; +#endif +} +/** + * Create a new event block with the specified name. Any events logged + * after this will be associated with this new event block. + */ +inline void event_tracer_create_event_block(EventTracer *event_tracer, + char const *name) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + event_tracer->create_event_block(name); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)name; +#endif +} + +/** + * Explicitly mark the beginning of a new profiling event. This returns + * an instance of an EventTracerEntry object that the user needs to keep + * around and pass into the corresponding event_tracer_end_profiling_event + * call. + */ +inline EventTracerEntry +event_tracer_begin_profiling_event(EventTracer *event_tracer, + char const *name) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + return event_tracer->start_profiling(name); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)name; +#endif + // There is no active tracer; this value will be ignored. + return EventTracerEntry(); +} + +/** + * Mark the end of a profiling event passing in the entry token + * returned by a previous call to ET_EVENT_TRACER_BEGIN_PROFILING_EVENT. + */ +inline void event_tracer_end_profiling_event(EventTracer *event_tracer, + EventTracerEntry event) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + event_tracer->end_profiling(event); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)event; +#endif +} + +/** + * Start the tracking of the allocator represented by this name and returns + * an AllocatorID that will be used to track all subsequent allocations done by + * this allocator. + */ +inline AllocatorID event_tracer_track_allocator(EventTracer *event_tracer, + const char *name) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + return event_tracer->track_allocator(name); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)name; +#endif + // There is no active tracer; this value will be ignored. + return 0; +} + +/// Log the allocation event done via the allocator represented by id. +inline void event_tracer_track_allocation(EventTracer *event_tracer, + AllocatorID id, size_t size) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + event_tracer->track_allocation(id, size); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)id; + (void)size; +#endif +} + +/// Log an intermediate value. +inline void event_tracer_log_evalue(EventTracer *event_tracer, EValue &evalue) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + if (event_tracer->event_tracer_debug_level() >= + EventTracerDebugLogLevel::kIntermediateOutputs) { + event_tracer->log_evalue(evalue, LoggedEValueType::kIntermediateOutput); + } + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)evalue; +#endif +} + +/// Log a program output. +inline void event_tracer_log_evalue_output(EventTracer *event_tracer, + const EValue &evalue) { +#ifdef ET_EVENT_TRACER_ENABLED + /* + * If debugging via event tracer is enabled but intermediate output logging is + * disabled then we want to only log the outputs. + */ + if (event_tracer) { + if (event_tracer->event_tracer_debug_level() >= + EventTracerDebugLogLevel::kProgramOutputs) { + event_tracer->log_evalue(evalue, LoggedEValueType::kProgramOutput); + } + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)evalue; +#endif +} + +// Set the bundled input index of the current bundled input being used by the +// method. +inline void event_tracer_set_bundled_input_index(EventTracer *event_tracer, + int bundled_input_index) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + event_tracer->set_bundled_input_index(bundled_input_index); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer; + (void)bundled_input_index; +#endif +} + +} // namespace internal +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +namespace internal { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::internal::event_tracer_begin_profiling_event; +using ::executorch::runtime::internal::event_tracer_create_event_block; +using ::executorch::runtime::internal::event_tracer_end_profiling_event; +using ::executorch::runtime::internal::event_tracer_log_evalue; +using ::executorch::runtime::internal::event_tracer_log_evalue_output; +using ::executorch::runtime::internal::event_tracer_set_bundled_input_index; +using ::executorch::runtime::internal::event_tracer_track_allocation; +using ::executorch::runtime::internal::event_tracer_track_allocator; +using ::executorch::runtime::internal::EventTracerProfileInstructionScope; +using ::executorch::runtime::internal::EventTracerProfileMethodScope; +using ::executorch::runtime::internal::EventTracerProfileOpScope; +using ::executorch::runtime::internal::EventTracerProfileScope; + +} // namespace internal +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/event_tracer_hooks_delegate.h b/third-party/include/executorch/runtime/core/event_tracer_hooks_delegate.h new file mode 100644 index 000000000..170246305 --- /dev/null +++ b/third-party/include/executorch/runtime/core/event_tracer_hooks_delegate.h @@ -0,0 +1,197 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +/** + * @file + * + * This file contains the hooks that can be used by runtime delegate backend + * authors to log profiling and debugging events from backend code. In order to + * use these hooks delegate authors would have needed to generate a delegate + * debug identifier mapping using the DelegateMappingBuilder library present in + * executorch/exir/backend/utils.py. The delegate debug identifiers generated by + * that library are the ones that need to be passed to these hooks to log + * events. Using any other identifiers will cause post-processing of the events + * data to not properly link back to the nodes in the original lowered graph. + * + * The benefit of defining these hooks is that we can easily control whether or + * not we want to compile in the EventTracer code based on the status of the + * ET_EVENT_TRACER_ENABLED flag. + */ + +namespace executorch { +namespace runtime { + +/** + * Start the profiling of a delegate event. Similar to start_profiling it will + * return an instance of EventTracerEntry that contains the details of this + * event. Can be left in production code as these hooks compile conditionally. + * + * @param[in] event_tracer The event tracer instance that is doing the logging. + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must be copied over + * into internal memory during this call. + * @param[in] delegate_debug_id The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then kUnsetDebugHandle should be passed in here. + */ +inline EventTracerEntry +event_tracer_start_profiling_delegate(EventTracer *event_tracer, + const char *name, + DebugHandle delegate_debug_id) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + return event_tracer->start_profiling_delegate(name, delegate_debug_id); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)name; + (void)delegate_debug_id; +#endif + // There is no active tracer; this value will be ignored. + return EventTracerEntry(); +} + +/** + * Signal the end of the delegate profiling event contained in + * event_tracer_entry. Users also have the option to log some some free-from + * string based metadata along with this. Can be left in production code as + * these hooks compile conditionally. + * + * @param[in] event_tracer The event tracer instance that is doing the logging. + * @param[in] event_tracer_entry The EventTracerEntry returned by a call to + * start_profiling_delegate(). + * @param[in] metadata Optional data relevant to the execution that the user + * wants to log along with this event. Pointer to metadata doesn't need to be + * valid after the call to this function. The contents and format of the data + * are transparent to the event tracer. It will just pipe along the data and + * make it available for the user again in the post-processing stage. + * @param[in] metadata_len Length of the metadata buffer. + */ +inline void event_tracer_end_profiling_delegate( + EventTracer *event_tracer, EventTracerEntry event_tracer_entry, + const void *metadata = nullptr, size_t metadata_len = 0) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + event_tracer->end_profiling_delegate(event_tracer_entry, metadata, + metadata_len); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)event_tracer_entry; + (void)metadata; + (void)metadata_len; +#endif +} + +/** + * Some delegates get access to the profiling details only after the complete + * graph has been executed. This interface is to support such use cases. It + * can be called in a loop etc. to log any number of profiling events that are + * part of this delegate. Can be left in production code as these hooks + * compile conditionally. + * + * @param[in] event_tracer The event tracer instance that is doing the logging. + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must + * be copied over into internal memory during this call. + * @param[in] delegate_debug_id The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then -1 should be passed in here. + * @param[in] start_time The timestamp when the delegate event started. + * @param[in] end_time The timestamp when the delegate event finished. + * @param[in] metadata Optional data relevant to the execution that the user + * wants to log along with this event. Pointer to metadata doesn't need to be + * valid after the call to this function. The contents and format of the data + * are transparent to the event tracer. It will just pipe along the data and + * make it available for the user again in the post-processing stage. + * @param[in] metadata_len Length of the metadata buffer. + */ +inline void event_tracer_log_profiling_delegate( + EventTracer *event_tracer, const char *name, DebugHandle delegate_debug_id, + et_timestamp_t start_time, et_timestamp_t end_time, + const void *metadata = nullptr, size_t metadata_len = 0) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + event_tracer->log_profiling_delegate(name, delegate_debug_id, start_time, + end_time, metadata, metadata_len); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)name; + (void)delegate_debug_id; + (void)start_time; + (void)end_time; + (void)metadata; + (void)metadata_len; +#endif +} + +/** + * This templated interfaces can be called in a loop etc. to log any number of + * debug events that are part of this delegate. Supported values types are int, + * bool, double, tensor and array of tensors. Can be left in production code as + * these hooks compile conditionally. + * + * @param[in] event_tracer The event tracer instance that is doing the logging. + * @param[in] name Human readable name for the delegate event. This name has + * to be the same name that was passed in during the Debug delegate mapping + * generation in the export/ahead-of-time process. If indices and not names + * are used by this delegate to identify ops executed in the backend then + * nullptr can be passed in. Users calling this interface do not need to keep + * the memory pointed to by this pointer around. The string must + * be copied over into internal memory during this call. + * @param[in] delegate_debug_id The id of the delegate event. If string + * based names are used by this delegate to identify ops executed in the + * backend then -1 should be passed in here. + * @param[in] output The output to be logged. + */ +template +inline void event_tracer_log_output_delegate(EventTracer *event_tracer, + const char *name, + DebugHandle delegate_debug_id, + const T &output) { +#ifdef ET_EVENT_TRACER_ENABLED + if (event_tracer) { + static_assert( + std::is_same::value || std::is_same::value || + std::is_same::value || + std::is_same::value || + std::is_same>::value, + "Unsupported type for intermediate output"); + event_tracer->log_intermediate_output_delegate(name, delegate_debug_id, + output); + } +#else //! ET_EVENT_TRACER_ENABLED + (void)name; + (void)delegate_debug_id; + (void)output; +#endif +} + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::event_tracer_end_profiling_delegate; +using ::executorch::runtime::event_tracer_log_output_delegate; +using ::executorch::runtime::event_tracer_log_profiling_delegate; +using ::executorch::runtime::event_tracer_start_profiling_delegate; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/exec_aten/exec_aten.h b/third-party/include/executorch/runtime/core/exec_aten/exec_aten.h new file mode 100644 index 000000000..864cc8aba --- /dev/null +++ b/third-party/include/executorch/runtime/core/exec_aten/exec_aten.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include // @manual +#include +#ifdef USE_ATEN_LIB +#include // @manual +#include +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include +#else // use executor +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual +#include // @manual + +#endif + +namespace executorch { +namespace aten { + +using TensorShapeDynamism = executorch::runtime::TensorShapeDynamism; + +#ifdef USE_ATEN_LIB + +using Tensor = at::Tensor; +using TensorList = at::TensorList; +using TensorImpl = at::TensorImpl; +using string_view = std::string_view; +template using ArrayRef = c10::ArrayRef; +template using optional = std::optional; +using nullopt_t = std::nullopt_t; +using std::nullopt; +using ScalarType = at::ScalarType; +using Scalar = c10::Scalar; +using MemoryFormat = c10::MemoryFormat; +using SizesType = int64_t; +using DimOrderType = uint8_t; +using StridesType = int64_t; +using Device = c10::Device; +using DeviceType = c10::DeviceType; +using Layout = c10::Layout; + +// Custom types that map to ScalarType +using Half = c10::Half; +template using complex = c10::complex; +using qint8 = c10::qint8; +using quint8 = c10::quint8; +using qint32 = c10::qint32; +using BFloat16 = c10::BFloat16; +using quint4x2 = c10::quint4x2; +using quint2x4 = c10::quint2x4; +using IntArrayRef = at::IntArrayRef; + +template using OptionalArrayRef = c10::OptionalArrayRef; +using OptionalIntArrayRef = OptionalArrayRef; + +inline ssize_t compute_numel(const SizesType *sizes, ssize_t dim) { + return static_cast( + c10::multiply_integers(c10::ArrayRef(sizes, dim))); +} + +#else // Use executor types + +using Tensor = torch::executor::Tensor; +using TensorImpl = torch::executor::TensorImpl; +using string_view = torch::executor::string_view; +template using ArrayRef = torch::executor::ArrayRef; +template using optional = torch::executor::optional; +using nullopt_t = torch::executor::nullopt_t; +// NOLINTNEXTLINE(facebook-hte-NamespaceScopedStaticDeclaration) +using std::nullopt; +using ScalarType = torch::executor::ScalarType; +using TensorList = ArrayRef; +using Scalar = torch::executor::Scalar; +using MemoryFormat = torch::executor::MemoryFormat; +using SizesType = torch::executor::Tensor::SizesType; +using DimOrderType = torch::executor::Tensor::DimOrderType; +using StridesType = torch::executor::Tensor::StridesType; +using Device = torch::executor::Device; +using DeviceType = torch::executor::DeviceType; +using Layout = torch::executor::Layout; + +// Custom types that map to ScalarType +using Half = torch::executor::Half; +template using complex = torch::executor::complex; +using qint8 = torch::executor::qint8; +using quint8 = torch::executor::quint8; +using qint32 = torch::executor::qint32; +using BFloat16 = torch::executor::BFloat16; +using quint4x2 = torch::executor::quint4x2; +using quint2x4 = torch::executor::quint2x4; + +using IntArrayRef = torch::executor::IntArrayRef; + +template +using OptionalArrayRef = + torch::executor::optional>; +using OptionalIntArrayRef = OptionalArrayRef; + +using torch::executor::compute_numel; + +#endif // Use ExecuTorch types + +} // namespace aten +} // namespace executorch + +// DEPRECATED: The exec_aten:: namespace is deprecated. Use executorch::aten:: +// instead. +namespace exec_aten = executorch::aten; + +namespace torch { +namespace executor { +using TensorList = ::executorch::aten::TensorList; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/exec_aten/util/dim_order_util.h b/third-party/include/executorch/runtime/core/exec_aten/util/dim_order_util.h new file mode 100644 index 000000000..8ed343174 --- /dev/null +++ b/third-party/include/executorch/runtime/core/exec_aten/util/dim_order_util.h @@ -0,0 +1,263 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include + +#include +#include +#include + +namespace executorch { +namespace runtime { + +namespace { +template +bool validate_dim_order(const DimOrderType *dim_order, const size_t dims) { + for (size_t i = 0; i < dims; ++i) { + if (dim_order[i] >= static_cast(dims)) { + return false; + } + } + return true; +} +} // namespace + +/** + * Check if a given dim_order array is equivalent to the contiguous dim order of + * {0, 1, 2, 3, ...} + * + * @param[in] dim_order pointer to dim_order array + * @param[in] dims length of the dim_order array + */ +template +inline bool is_contiguous_dim_order(const DimOrderType *dim_order, + const size_t dims) { + for (size_t i = 0; i < dims; ++i) { + if (dim_order[i] != static_cast(i)) { + return false; + } + } + return true; +} + +/** + * Check if a given dim_order array is equivalent to a channels last dim order. + * Channels last dim order is only valid for 4-dim and 5-dim tensors. + * + * @param[in] dim_order pointer to dim_order array + * @param[in] dims length of the dim_order array + */ +template +bool is_channels_last_dim_order(const DimOrderType *dim_order, + const size_t dims) { + if (dims != 4 && dims != 5) { + return false; + } + // 4-dim tensor is interpreted as NCHW, 5-dim tensor is interpreted as NCHWD + DimOrderType channels_dim = 1; + // Last value in the dim order should be the channels dim + if (dim_order[dims - 1] != channels_dim) { + return false; + } + + if (dim_order[0] != 0) { + return false; + } + DimOrderType d = 1; + while (d < static_cast(dims) - 1) { + if (dim_order[d] != d + 1) { + return false; + } + d++; + } + return true; +} + +/* + * This utility translated sizes to strides by using dimension order + * information. Dimension order specifies how the dimensions are laid out in the + * memory. For example for Size = [2, 3, 4, 5] dim_names = [N, C, H, W] + * dim_order = [0, 2, 3, 1] + * strides = [60, 1, 15, 3] + * param[in]: sizes, pointer to sizes array + * param[in]: dim_order, pointer to dimension order array + * param[in]: dims, number of dims. Sizes and dim_order must be sizes to dims + * param[out]: strides, pointer to strides array that is filled in + * + * NB: Reason for not using ArrayRef is the dependency on kernel_types.h + * This header cannot be included, because of circular dep it causes. + * kernel_types depends on executorch_kernel_types in lean mode, which compiles + * TensorImpl.cpp. executorch_kernel_types needs to depend on dim_order_utils + * in order to utilize dim_order_to_stride in its resize impl. If + * dim_order_utils depends on kernel_type, we have circular deps. This is also + * the reason for templatizing this function. Better ideas welcome! + * TODO(T148342910) + * + * Note that this function does not check that the provided dim order is valid. + * This function should only be used when the validity of the dim order has been + * checked beforehand. A safer version of this function is provided below as + * dim_order_to_stride which will check that the dim order is valid. + */ +template +inline void dim_order_to_stride_nocheck(const SizesType *sizes, + const DimOrderType *dim_order, + const size_t dims, + StridesType *strides) { + // For 0 dim tensors, just return ok. + if (dims == 0) { + return; + } + // Fastest moving dim has stride of 1. + // For example: + // Size = [2, 3, 4, 5] dim_names = [N, C, H, W] + // dim_order = [0, 2, 3, 1] + // strides = [60, 1, 15, 3] + strides[dim_order[dims - 1]] = 1; + for (int32_t i = dims - 2; i >= 0; --i) { + if (sizes[dim_order[i + 1]] == 0) { + strides[dim_order[i]] = strides[dim_order[i + 1]]; + } else { + strides[dim_order[i]] = + strides[dim_order[i + 1]] * sizes[dim_order[i + 1]]; + } + } +} + +template +ET_NODISCARD inline Error +dim_order_to_stride(const SizesType *sizes, const DimOrderType *dim_order, + const size_t dims, StridesType *strides) { + // For 0 dim tensors, just return ok. + if (dims == 0) { + return Error::Ok; + } + ET_CHECK_OR_RETURN_ERROR(validate_dim_order(dim_order, dims), InvalidArgument, + "Invalid dim order. One of the value is larger than " + "the number of dims %zu", + dims); + + dim_order_to_stride_nocheck(sizes, dim_order, dims, strides); + return Error::Ok; +} + +namespace internal { + +template struct StrideDimOrder { + StridesType stride; + DimOrderType dim_order; + + StrideDimOrder(StridesType stride_, DimOrderType dim_order_) + : stride(stride_), dim_order(dim_order_) {} + StrideDimOrder() = default; + bool operator>(const StrideDimOrder &other) const { + // descending order + return stride < other.stride; + } +}; + +template struct Sorter { +public: + void quick_sort(ValueType arr[], int32_t low, int32_t high) { + if (low < high) { + ValueType pivot = arr[high]; + int32_t pos = partition(arr, low, high, pivot); + + quick_sort(arr, low, pos - 1); + quick_sort(arr, pos + 1, high); + } + } + +private: + void swap(ValueType arr[], int32_t pos1, int32_t pos2) noexcept { + ValueType temp = arr[pos1]; + arr[pos1] = arr[pos2]; + arr[pos2] = temp; + } + + int32_t partition(ValueType arr[], int32_t low, int32_t high, + ValueType pivot) { + int32_t i = low; + int32_t j = low; + while (i <= high) { + if (arr[i] > pivot) { + i++; + } else { + swap(arr, i++, j++); + } + } + return j - 1; + } +}; + +} // namespace internal + +/* + * This utility translated strides to dimension order + * information. Dimension order specifies how the dimensions are laid out in the + * memory. For example for tensor with sizes [3, 5, 2] and strides [5, 1, 15], + * dim order should be [2, 0, 1], which is obtained by sorting strides in + * descending order. param[in]: sizes, pointer to sizes array param[in]: + * dim_order, pointer to dimension order array param[in]: dims, number of dims. + * Sizes and dim_order must be sizes to dims param[out]: strides, pointer to + * strides array that is filled in + * + * NB: Reason for not using ArrayRef is the dependency on kernel_types.h + * This header cannot be included, because of circular dep it causes. + * kernel_types depends on executorch_kernel_types in lean mode, which compiles + * TensorImpl.cpp. executorch_kernel_types needs to depend on dim_order_utils + * in order to utilize dim_order_to_stride in its resize impl. If + * dim_order_utils depends on kernel_type, we have circular deps. This is also + * the reason for templatizing this function. Better ideas welcome! + * TODO(T148342910) + */ +template +ET_NODISCARD inline Error stride_to_dim_order(const StridesType *strides, + const size_t dims, + DimOrderType *dim_order) { + const size_t kMaxNumOfDimensions = 16; + ET_CHECK_OR_RETURN_ERROR(dim_order != nullptr, MemoryAllocationFailed, + "Need memory to get dim_order."); + ET_CHECK_OR_RETURN_ERROR(dims <= kMaxNumOfDimensions, NotSupported, + "dims %zu exceeds maximum allowed %zu", dims, + kMaxNumOfDimensions); + internal::StrideDimOrder + array[kMaxNumOfDimensions]; + for (DimOrderType i = 0; i < dims; i++) { + array[i].dim_order = i; + array[i].stride = strides[i]; + } + + internal::Sorter> sorter; + + sorter.quick_sort(array, 0, dims - 1); + + for (const auto i : c10::irange(dims)) { + dim_order[i] = array[i].dim_order; + } + return Error::Ok; +} + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::dim_order_to_stride; +using ::executorch::runtime::dim_order_to_stride_nocheck; +using ::executorch::runtime::is_channels_last_dim_order; +using ::executorch::runtime::is_contiguous_dim_order; +using ::executorch::runtime::stride_to_dim_order; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/exec_aten/util/scalar_type_util.h b/third-party/include/executorch/runtime/core/exec_aten/util/scalar_type_util.h new file mode 100644 index 000000000..82ad7dbe5 --- /dev/null +++ b/third-party/include/executorch/runtime/core/exec_aten/util/scalar_type_util.h @@ -0,0 +1,1331 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * + * Forked from + * https://github.com/pytorch/pytorch/blob/master/c10/core/ScalarType.h + * + * See file comment in ../ScalarType.h. + * + * This file contains all of the non-critical parts of the original ScalarType.h + * that are not required for the core ExecuTorch runtime, but may be helpful for + * code that uses ScalarType. + */ + +#pragma once + +#include +#include +#include +#include +#include + +#include + +#ifdef USE_ATEN_LIB +// Note that a lot of the macros/functions defined in this ScalarTypeUtil.h file +// are also defined in c10/core/ScalarType.h, which is included via +// kernel_types.h when building in ATen mode. They tend to use different names +// and a different namespace, but if there are conflicts they should be resolved +// here. +#define ET_FORALL_SCALAR_TYPES AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS +#include +namespace executorch { +namespace aten { +using ScalarType = at::ScalarType; +} // namespace aten +} // namespace executorch +#else // !USE_ATEN_LIB +#include +#include +namespace executorch { +namespace aten { +using ScalarType = torch::executor::ScalarType; +using string_view = torch::executor::string_view; +} // namespace aten +} // namespace executorch +#endif // USE_ATEN_LIB +// DEPRECATED: The executorch::aten:: namespace is deprecated. Use +// executorch::aten:: instead. +namespace exec_aten = ::executorch::aten; + +namespace executorch { +namespace runtime { + +#if !defined(USE_ATEN_LIB) +// Util to figure out if the scalar type if one of the +// supported floating point types. +// In aten mode, aten lib already has these utils as part of +// its vec_base.h +template +struct is_floating_point + : std::integral_constant::value || + std::is_same_v || + std::is_same_v> { +}; + +// Util to figure out if the scalar type is one of the +// reduced precision floating point types. +template +struct is_reduced_floating_point + : std::integral_constant || + std::is_same_v> { +}; + +template +constexpr bool is_reduced_floating_point_v = + is_reduced_floating_point::value; +#endif + +/// Maps ScalarTypes to C++ types. +template <::executorch::aten::ScalarType N> struct ScalarTypeToCppType; + +#define SPECIALIZE_ScalarTypeToCppType(cpp_type, scalar_type) \ + template <> \ + struct ScalarTypeToCppType<::executorch::aten::ScalarType::scalar_type> { \ + using type = cpp_type; \ + }; + +ET_FORALL_SCALAR_TYPES(SPECIALIZE_ScalarTypeToCppType) + +#undef SPECIALIZE_ScalarTypeToCppType + +/// Maps C++ types to ScalarTypes. +template struct CppTypeToScalarType; + +#define SPECIALIZE_CppTypeToScalarType(cpp_type, scalar_type) \ + template <> \ + struct CppTypeToScalarType \ + : std::integral_constant<::executorch::aten::ScalarType, \ + ::executorch::aten::ScalarType::scalar_type> { \ + }; + +ET_FORALL_SCALAR_TYPES(SPECIALIZE_CppTypeToScalarType) + +#undef SPECIALIZE_CppTypeToScalarType + +// +// Macros that iterate across different subsets of ScalarTypes. +// +// See ET_FORALL_SCALAR_TYPES in ScalarType.h to iterate across all ScalarType +// names and types. +// +// For all of these macros, the final `_` parameter is the name of another macro +// that takes two parameters: the name of a C type, and the name of the +// corresponding ScalarType enumerator. +// +// Note that these macros should use fully-qualified namespaces (starting with +// `::`) to ensure that they can be called safely in any arbitrary namespace. +// + +// In this context, "INT" means integer C types, which is why the quantized +// integer types are not included. +#define ET_FORALL_INT_TYPES(_) \ + _(uint8_t, Byte) \ + _(int8_t, Char) \ + _(int16_t, Short) \ + _(int32_t, Int) \ + _(int64_t, Long) + +// Here `ANOTHER_INPUT` should be another variable to be forwarded to a given +// function. +#define ET_FORALL_INT_TYPES_WITH(ANOTHER_INPUT, _) \ + _(ANOTHER_INPUT, uint8_t, Byte) \ + _(ANOTHER_INPUT, int8_t, Char) \ + _(ANOTHER_INPUT, int16_t, Short) \ + _(ANOTHER_INPUT, int32_t, Int) \ + _(ANOTHER_INPUT, int64_t, Long) + +#define ET_FORALL_INT_TYPES_WITH2(ANOTHER_INPUT1, ANOTHER_INPUT2, _) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, uint8_t, Byte) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int8_t, Char) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int16_t, Short) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int32_t, Int) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int64_t, Long) + +#define ET_FORALL_INT_TYPES_AND(SCALARTYPE, _) \ + _(uint8_t, Byte) \ + _(int8_t, Char) \ + _(int16_t, Short) \ + _(int32_t, Int) \ + _(int64_t, Long) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE>::type, \ + SCALARTYPE) + +// In this context, "FLOAT" means float C types, which is why BFloat16 is not +// included. +#define ET_FORALL_FLOAT_TYPES(_) \ + _(float, Float) \ + _(double, Double) + +#define ET_FORALL_FLOAT_TYPES_AND(SCALARTYPE, _) \ + _(float, Float) \ + _(double, Double) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE>::type, \ + SCALARTYPE) + +#define ET_FORALL_FLOAT_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, _) \ + _(float, Float) \ + _(double, Double) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE1>::type, \ + SCALARTYPE1) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE2>::type, \ + SCALARTYPE2) + +#define ET_FORALL_FLOATH_TYPES(_) ET_FORALL_FLOAT_TYPES_AND(Half, _) + +#define ET_FORALL_FLOATHBF16_TYPES(_) \ + ET_FORALL_FLOAT_TYPES_AND2(Half, BFloat16, _) + +// Here `ANOTHER_INPUT` should be another variable to be forwarded to a given +// function. Not to be confused with another scalar type as in +// `ET_FORALL_FLOAT_TYPES_AND`. +#define ET_FORALL_FLOAT_TYPES_WITH(ANOTHER_INPUT, _) \ + _(ANOTHER_INPUT, float, Float) \ + _(ANOTHER_INPUT, double, Double) + +#define ET_FORALL_FLOAT_TYPES_WITH2(ANOTHER_INPUT1, ANOTHER_INPUT2, _) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, float, Float) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, double, Double) + +#define ET_FORALL_FLOATHBF16_TYPES_WITH2(ANOTHER_INPUT1, ANOTHER_INPUT2, _) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, float, Float) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, double, Double) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, ::executorch::aten::Half, Half) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, ::executorch::aten::BFloat16, BFloat16) + +// In this context, "REAL" means integer/float C types, which is why BFloat16 +// and Half are not included. +#define ET_FORALL_REAL_TYPES(_) \ + _(uint8_t, Byte) \ + _(int8_t, Char) \ + _(int16_t, Short) \ + _(int32_t, Int) \ + _(int64_t, Long) \ + _(float, Float) \ + _(double, Double) + +// Here `ANOTHER_INPUT` should be another variable to be forwarded to a given +// function. Not to be confused with another scalar type as in +// `ET_FORALL_REAL_TYPES_AND`. +#define ET_FORALL_REAL_TYPES_WITH(ANOTHER_INPUT, _) \ + _(ANOTHER_INPUT, uint8_t, Byte) \ + _(ANOTHER_INPUT, int8_t, Char) \ + _(ANOTHER_INPUT, int16_t, Short) \ + _(ANOTHER_INPUT, int32_t, Int) \ + _(ANOTHER_INPUT, int64_t, Long) \ + _(ANOTHER_INPUT, float, Float) \ + _(ANOTHER_INPUT, double, Double) + +#define ET_FORALL_REAL_TYPES_WITH2(ANOTHER_INPUT1, ANOTHER_INPUT2, _) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, uint8_t, Byte) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int8_t, Char) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int16_t, Short) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int32_t, Int) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int64_t, Long) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, float, Float) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, double, Double) + +#define ET_FORALL_REALHBF16_TYPES_WITH2(ANOTHER_INPUT1, ANOTHER_INPUT2, _) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, uint8_t, Byte) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int8_t, Char) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int16_t, Short) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int32_t, Int) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, int64_t, Long) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, float, Float) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, double, Double) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, ::executorch::aten::Half, Half) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, ::executorch::aten::BFloat16, BFloat16) + +#define ET_FORALL_REALHBBF16_TYPES_WITH2(ANOTHER_INPUT1, ANOTHER_INPUT2, _) \ + ET_FORALL_REALHBF16_TYPES_WITH2(ANOTHER_INPUT2, ANOTHER_INPUT2, _) \ + _(ANOTHER_INPUT1, ANOTHER_INPUT2, bool, Bool) + +// For macros that take `SCALARTYPEn` parameters, those parameters should be +// an unquoted/unqualified enumerator name like `Int` or `Float`. +#define ET_FORALL_REAL_TYPES_AND(SCALARTYPE, _) \ + _(uint8_t, Byte) \ + _(int8_t, Char) \ + _(int16_t, Short) \ + _(int32_t, Int) \ + _(int64_t, Long) \ + _(float, Float) \ + _(double, Double) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE>::type, \ + SCALARTYPE) + +#define ET_FORALL_REAL_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, _) \ + _(uint8_t, Byte) \ + _(int8_t, Char) \ + _(int16_t, Short) \ + _(int32_t, Int) \ + _(int64_t, Long) \ + _(float, Float) \ + _(double, Double) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE1>::type, \ + SCALARTYPE1) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE2>::type, \ + SCALARTYPE2) + +#define ET_FORALL_REALH_TYPES(_) ET_FORALL_REAL_TYPES_AND(Half, _) + +#define ET_FORALL_REALHBF16_TYPES(_) \ + ET_FORALL_REAL_TYPES_AND2(Half, BFloat16, _) + +#define ET_FORALL_REALHBBF16_TYPES(_) \ + ET_FORALL_REAL_TYPES_AND3(Bool, Half, BFloat16, _) + +#define ET_FORALL_REAL_TYPES_AND_WITH(SCALARTYPE, ANOTHER_INPUT, _) \ + _(ANOTHER_INPUT, uint8_t, Byte) \ + _(ANOTHER_INPUT, int8_t, Char) \ + _(ANOTHER_INPUT, int16_t, Short) \ + _(ANOTHER_INPUT, int32_t, Int) \ + _(ANOTHER_INPUT, int64_t, Long) \ + _(ANOTHER_INPUT, float, Float) \ + _(ANOTHER_INPUT, double, Double) \ + _(ANOTHER_INPUT, \ + ::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE>::type, \ + SCALARTYPE) + +#define ET_FORALL_REAL_TYPES_AND2(SCALARTYPE1, SCALARTYPE2, _) \ + _(uint8_t, Byte) \ + _(int8_t, Char) \ + _(int16_t, Short) \ + _(int32_t, Int) \ + _(int64_t, Long) \ + _(float, Float) \ + _(double, Double) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE1>::type, \ + SCALARTYPE1) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE2>::type, \ + SCALARTYPE2) + +#define ET_FORALL_REAL_TYPES_AND3(SCALARTYPE1, SCALARTYPE2, SCALARTYPE3, _) \ + _(uint8_t, Byte) \ + _(int8_t, Char) \ + _(int16_t, Short) \ + _(int32_t, Int) \ + _(int64_t, Long) \ + _(float, Float) \ + _(double, Double) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE1>::type, \ + SCALARTYPE1) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE2>::type, \ + SCALARTYPE2) \ + _(::executorch::runtime::ScalarTypeToCppType< \ + ::executorch::aten::ScalarType::SCALARTYPE3>::type, \ + SCALARTYPE3) + +#define ET_FORALL_QINT_TYPES(_) \ + _(::torch::executor::qint8, QInt8) \ + _(::torch::executor::quint8, QUInt8) \ + _(::torch::executor::qint32, QInt32) \ + _(::torch::executor::quint4x2, QUInt4x2) \ + _(::torch::executor::quint2x4, QUInt2x4) + +// In this context, "COMPLEX" means complex types based on primitive C types, +// which is why ComplexHalf is not included. +#define ET_FORALL_COMPLEX_TYPES(_) \ + _(::executorch::aten::complex, ComplexFloat) \ + _(::executorch::aten::complex, ComplexDouble) + +#define ET_FORALL_COMPLEXH_TYPES(_) \ + _(::executorch::aten::complex<::executorch::aten::Half>, ComplexHalf) \ + _(::executorch::aten::complex, ComplexFloat) \ + _(::executorch::aten::complex, ComplexDouble) + +// +// Utility functions to retrieve metadata for a given ScalarType +// + +/** + * Returns true if the parameter is one of the values covered by + * ET_FORALL_SCALAR_TYPES. + */ +inline bool isValid(::executorch::aten::ScalarType type) { + return static_cast(type) >= 0 && + type < ::executorch::aten::ScalarType::NumOptions && + type != ::executorch::aten::ScalarType::Undefined; +} + +/** + * Returns the name of a ScalarType as a C string. + * + * @param[in] t The type to get the name of. + * @return The name of the type, or "UNKNOWN_SCALAR" if the type is not known. + */ +inline const char *toString(::executorch::aten::ScalarType t) { +#define DEFINE_CASE(_, name) \ + case ::executorch::aten::ScalarType::name: \ + return #name; + + switch (t) { + ET_FORALL_SCALAR_TYPES(DEFINE_CASE) + case ::executorch::aten::ScalarType::Undefined: + return "Undefined"; + default: + return "UNKNOWN_SCALAR"; + } +#undef DEFINE_CASE +} + +/** + * Returns the size in bytes of the C type associated with the ScalarType. + * + * Calls ET_CHECK_MSG() if the type is unknown or is ScalarType::Undefined. + * + * @param[in] t The type to get the underlying C type size of. + * @return The size of the associated C type in bytes. + */ +inline size_t elementSize(::executorch::aten::ScalarType t) { +#define CASE_ELEMENTSIZE_CASE(ctype, name) \ + case ::executorch::aten::ScalarType::name: \ + return sizeof(ctype); + + switch (t) { + ET_FORALL_SCALAR_TYPES(CASE_ELEMENTSIZE_CASE) + default: + ET_CHECK_MSG(false, "Unknown ScalarType %" PRId8, static_cast(t)); + } +#undef CASE_ELEMENTSIZE_CASE +} + +inline constexpr bool isIntegralType(::executorch::aten::ScalarType t, + bool includeBool) { + return (includeBool && t == ::executorch::aten::ScalarType::Bool) || + (t == ::executorch::aten::ScalarType::Byte || + t == ::executorch::aten::ScalarType::Char || + t == ::executorch::aten::ScalarType::Int || + t == ::executorch::aten::ScalarType::Long || + t == ::executorch::aten::ScalarType::Short); +} + +template +struct is_integral_type + : public std::integral_constant< + bool, isIntegralType(CppTypeToScalarType::value, includeBool)> {}; + +inline constexpr bool isFloatingType(::executorch::aten::ScalarType t) { + return (t == ::executorch::aten::ScalarType::Double || + t == ::executorch::aten::ScalarType::Float || + t == ::executorch::aten::ScalarType::Half || + t == ::executorch::aten::ScalarType::BFloat16); +} + +inline bool isRealType(::executorch::aten::ScalarType t) { + return (t == ::executorch::aten::ScalarType::Byte || + t == ::executorch::aten::ScalarType::Char || + t == ::executorch::aten::ScalarType::Short || + t == ::executorch::aten::ScalarType::Int || + t == ::executorch::aten::ScalarType::Long || + t == ::executorch::aten::ScalarType::Float || + t == ::executorch::aten::ScalarType::Double); +} + +inline bool isRealHType(::executorch::aten::ScalarType t) { + return (t == ::executorch::aten::ScalarType::Byte || + t == ::executorch::aten::ScalarType::Char || + t == ::executorch::aten::ScalarType::Short || + t == ::executorch::aten::ScalarType::Int || + t == ::executorch::aten::ScalarType::Long || + t == ::executorch::aten::ScalarType::Float || + t == ::executorch::aten::ScalarType::Double || + t == ::executorch::aten::ScalarType::Half); +} + +inline bool isRealHBType(::executorch::aten::ScalarType t) { + return (isRealHType(t) || t == ::executorch::aten::ScalarType::Bool); +} + +inline bool isRealHBF16Type(::executorch::aten::ScalarType t) { + return (isRealHType(t) || t == ::executorch::aten::ScalarType::BFloat16); +} + +inline bool isRealHBBF16Type(::executorch::aten::ScalarType t) { + return (isRealHBType(t) || t == ::executorch::aten::ScalarType::BFloat16); +} + +inline constexpr bool isComplexType(::executorch::aten::ScalarType t) { + return (t == ::executorch::aten::ScalarType::ComplexHalf || + t == ::executorch::aten::ScalarType::ComplexFloat || + t == ::executorch::aten::ScalarType::ComplexDouble); +} + +template +struct is_complex_type + : std::integral_constant::value)> {}; + +constexpr bool isBitsType(::executorch::aten::ScalarType t) { + return t == ::executorch::aten::ScalarType::Bits1x8 || + t == ::executorch::aten::ScalarType::Bits2x4 || + t == ::executorch::aten::ScalarType::Bits4x2 || + t == ::executorch::aten::ScalarType::Bits8 || + t == ::executorch::aten::ScalarType::Bits16; +} + +template +struct is_bits_type + : std::integral_constant::value)> { +}; + +constexpr bool isQIntType(::executorch::aten::ScalarType t) { + // Don't forget to extend this when adding new QInt types + return t == ::executorch::aten::ScalarType::QInt8 || + t == ::executorch::aten::ScalarType::QUInt8 || + t == ::executorch::aten::ScalarType::QInt32 || + t == ::executorch::aten::ScalarType::QUInt4x2 || + t == ::executorch::aten::ScalarType::QUInt2x4; +} + +template +struct is_qint_type + : std::integral_constant::value)> { +}; + +constexpr bool isFloat8Type(::executorch::aten::ScalarType t) { + // Don't forget to extend this when adding new QInt types + return t == ::executorch::aten::ScalarType::Float8_e5m2 || + t == ::executorch::aten::ScalarType::Float8_e4m3fn || + t == ::executorch::aten::ScalarType::Float8_e5m2fnuz || + t == ::executorch::aten::ScalarType::Float8_e4m3fnuz; +} + +template +struct is_float8_type + : std::integral_constant::value)> {}; + +constexpr bool isBarebonesUnsignedType(::executorch::aten::ScalarType t) { + // Don't forget to extend this when adding new QInt types + return t == ::executorch::aten::ScalarType::UInt16 || + t == ::executorch::aten::ScalarType::UInt32 || + t == ::executorch::aten::ScalarType::UInt64; +} + +template +struct is_barebones_unsigned_type + : std::integral_constant::value)> {}; + +inline ::executorch::aten::ScalarType +toQIntType(::executorch::aten::ScalarType t) { + switch (t) { + case ::executorch::aten::ScalarType::Byte: + return ::executorch::aten::ScalarType::QUInt8; + case ::executorch::aten::ScalarType::Char: + return ::executorch::aten::ScalarType::QInt8; + case ::executorch::aten::ScalarType::Int: + return ::executorch::aten::ScalarType::QInt32; + default: + return t; + } +} + +inline ::executorch::aten::ScalarType +toUnderlying(::executorch::aten::ScalarType t) { + switch (t) { + case ::executorch::aten::ScalarType::QUInt8: + return ::executorch::aten::ScalarType::Byte; + case ::executorch::aten::ScalarType::QInt8: + return ::executorch::aten::ScalarType::Char; + case ::executorch::aten::ScalarType::QInt32: + return ::executorch::aten::ScalarType::Int; + case ::executorch::aten::ScalarType::QUInt4x2: + return ::executorch::aten::ScalarType::Byte; + case ::executorch::aten::ScalarType::QUInt2x4: + return ::executorch::aten::ScalarType::Byte; + default: + return t; + } +} + +inline bool isSignedType(::executorch::aten::ScalarType t) { + ET_CHECK_MSG(!::executorch::runtime::isQIntType(t), + "isSignedType not supported for quantized types like %" PRId8, + static_cast(t)); +#define CASE_SIGNED(ctype, name) \ + case ::executorch::aten::ScalarType::name: \ + return std::numeric_limits::is_signed; + + switch (t) { + case ::executorch::aten::ScalarType::ComplexHalf: + case ::executorch::aten::ScalarType::ComplexFloat: + case ::executorch::aten::ScalarType::ComplexDouble: + return true; + ET_FORALL_REAL_TYPES_AND3(Half, Bool, BFloat16, CASE_SIGNED) + default: + ET_CHECK_MSG(false, "Unknown ScalarType %" PRId8, static_cast(t)); + } +#undef CASE_SIGNED +} + +inline bool isUnderlying(::executorch::aten::ScalarType type, + ::executorch::aten::ScalarType qtype) { + return type == ::executorch::runtime::toUnderlying(qtype); +} + +inline constexpr ::executorch::aten::ScalarType +toRealValueType(::executorch::aten::ScalarType t) { + switch (t) { + case ::executorch::aten::ScalarType::ComplexHalf: + return ::executorch::aten::ScalarType::Half; + case ::executorch::aten::ScalarType::ComplexFloat: + return ::executorch::aten::ScalarType::Float; + case ::executorch::aten::ScalarType::ComplexDouble: + return ::executorch::aten::ScalarType::Double; + default: + return t; + } +} + +inline constexpr ::executorch::aten::ScalarType +toComplexType(::executorch::aten::ScalarType t) { + switch (t) { + case ::executorch::aten::ScalarType::BFloat16: + // BFloat16 has range equivalent to Float, + // so we map it to ComplexFloat. + return ::executorch::aten::ScalarType::ComplexFloat; + case ::executorch::aten::ScalarType::Half: + return ::executorch::aten::ScalarType::ComplexHalf; + case ::executorch::aten::ScalarType::Float: + return ::executorch::aten::ScalarType::ComplexFloat; + case ::executorch::aten::ScalarType::Double: + return ::executorch::aten::ScalarType::ComplexDouble; + case ::executorch::aten::ScalarType::ComplexHalf: + return ::executorch::aten::ScalarType::ComplexHalf; + case ::executorch::aten::ScalarType::ComplexFloat: + return ::executorch::aten::ScalarType::ComplexFloat; + case ::executorch::aten::ScalarType::ComplexDouble: + return ::executorch::aten::ScalarType::ComplexDouble; + default: + ET_CHECK_MSG(false, "Unknown Complex ScalarType for %" PRId8, + static_cast(t)); + } +} + +/** + * Encodes type casting rules that are consistent with ATen behaviour. + */ +inline constexpr bool canCast(const ::executorch::aten::ScalarType from, + const ::executorch::aten::ScalarType to) { + // Disallow complex -> non-complex + return !(::executorch::runtime::isComplexType(from) && + !::executorch::runtime::isComplexType(to)) && + // Disallow float -> integral + !(::executorch::runtime::isFloatingType(from) && + ::executorch::runtime::isIntegralType(to, /*includeBool=*/false)) && + // Treat bool as a special category. Disallow non-bool -> bool + !(from != ::executorch::aten::ScalarType::Bool && + to == ::executorch::aten::ScalarType::Bool); +} + +template +struct can_cast + : std::integral_constant::value, + CppTypeToScalarType::value)> {}; + +/** + * When casting from floating point to integral type, if the floating value is + * outside the integral type range, then an error is thrown if sanitization is + * enabled. To circumvent this, we cast the floating point to int64_t first. + */ +template ::value && + std::is_integral::value), + int> = 0> +To convert(From val) { + return static_cast(static_cast(val)); +} + +template ::value && + std::is_integral::value), + int> = 0> +To convert(From val) { + return static_cast(val); +} + +namespace internal { +// This is generated according to NumPy's promote_types +inline constexpr auto u1 = ::executorch::aten::ScalarType::Byte; +inline constexpr auto i1 = ::executorch::aten::ScalarType::Char; +inline constexpr auto i2 = ::executorch::aten::ScalarType::Short; +inline constexpr auto i4 = ::executorch::aten::ScalarType::Int; +inline constexpr auto i8 = ::executorch::aten::ScalarType::Long; +inline constexpr auto f2 = ::executorch::aten::ScalarType::Half; +inline constexpr auto f4 = ::executorch::aten::ScalarType::Float; +inline constexpr auto f8 = ::executorch::aten::ScalarType::Double; +inline constexpr auto c2 = ::executorch::aten::ScalarType::ComplexHalf; +inline constexpr auto c4 = ::executorch::aten::ScalarType::ComplexFloat; +inline constexpr auto c8 = ::executorch::aten::ScalarType::ComplexDouble; +inline constexpr auto b1 = ::executorch::aten::ScalarType::Bool; +inline constexpr auto bf = ::executorch::aten::ScalarType::BFloat16; + +using U1 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Byte>::type; +using I1 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Char>::type; +using I2 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Short>::type; +using I4 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Int>::type; +using I8 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Long>::type; +using F2 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Half>::type; +using F4 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Float>::type; +using F8 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Double>::type; +using C2 = typename ScalarTypeToCppType< + ::executorch::aten::ScalarType::ComplexHalf>::type; +using C4 = typename ScalarTypeToCppType< + ::executorch::aten::ScalarType::ComplexFloat>::type; +using C8 = typename ScalarTypeToCppType< + ::executorch::aten::ScalarType::ComplexDouble>::type; +using B1 = + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Bool>::type; +using BF = typename ScalarTypeToCppType< + ::executorch::aten::ScalarType::BFloat16>::type; + +inline constexpr std::array<::executorch::aten::ScalarType, 13> index2dtype = { + {u1, i1, i2, i4, i8, f2, f4, f8, c2, c4, c8, b1, bf}}; + +constexpr std::array< + int64_t, static_cast(::executorch::aten::ScalarType::NumOptions)> +calculate_dtype2index() { + std::array(::executorch::aten::ScalarType::NumOptions)> + inverse = {}; + for (int64_t i = 0; + i < static_cast(::executorch::aten::ScalarType::NumOptions); + i++) { + inverse[i] = -1; + } + for (int64_t i = 0; i < static_cast(index2dtype.size()); i++) { + inverse[static_cast(index2dtype[i])] = i; + } + return inverse; +} + +inline constexpr auto dtype2index = calculate_dtype2index(); +inline constexpr int NUM_PROMOTE_TYPES = 13; +// Should match _promoteTypesLookup in c10/core/ScalarType.cpp so that +// we match PyTorch core type promotion semantics. +inline constexpr ::executorch::aten::ScalarType + promoteTypesLookup[NUM_PROMOTE_TYPES][NUM_PROMOTE_TYPES] = { + /* u1 i1 i2 i4 i8 f2 f4 f8 c2 c4 c8 b1 bf*/ + /* u1 */ {u1, i2, i2, i4, i8, f2, f4, f8, c2, c4, c8, u1, bf}, + /* i1 */ {i2, i1, i2, i4, i8, f2, f4, f8, c2, c4, c8, i1, bf}, + /* i2 */ {i2, i2, i2, i4, i8, f2, f4, f8, c2, c4, c8, i2, bf}, + /* i4 */ {i4, i4, i4, i4, i8, f2, f4, f8, c2, c4, c8, i4, bf}, + /* i8 */ {i8, i8, i8, i8, i8, f2, f4, f8, c2, c4, c8, i8, bf}, + /* f2 */ {f2, f2, f2, f2, f2, f2, f4, f8, c2, c4, c8, f2, f4}, + /* f4 */ {f4, f4, f4, f4, f4, f4, f4, f8, c4, c4, c8, f4, f4}, + /* f8 */ {f8, f8, f8, f8, f8, f8, f8, f8, c8, c8, c8, f8, f8}, + /* c2 */ {c2, c2, c2, c2, c2, c2, c4, c8, c2, c4, c8, c2, c4}, + /* c4 */ {c4, c4, c4, c4, c4, c4, c4, c8, c4, c4, c8, c4, c4}, + /* c8 */ {c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, c8, c8}, + /* b1 */ {u1, i1, i2, i4, i8, f2, f4, f8, c2, c4, c8, b1, bf}, + /* bf */ {bf, bf, bf, bf, bf, f4, f4, f8, c4, c4, c8, bf, bf}, +}; + +} // namespace internal + +/** + * Implements type promotion rules that are consistent with ATen behaviour, + * which in turn is consistent with NumPy's promote_types. + * If half_to_float is set to true, then half and bfloat16 will be promoted to + * float instead + */ +inline constexpr ::executorch::aten::ScalarType +promoteTypes(::executorch::aten::ScalarType a, ::executorch::aten::ScalarType b, + bool half_to_float = false) { + // For QInt types, only allow exact match + if (::executorch::runtime::isQIntType(a) && a == b) { + return a; + } + if (::executorch::runtime::isQIntType(a) || + ::executorch::runtime::isQIntType(b)) { + ET_CHECK_MSG(false, "promoteTypes not valid for quantized dtypes"); + } + + // For Bits types, only allow exact match + if (::executorch::runtime::isBitsType(a) && a == b) { + return a; + } + if (::executorch::runtime::isBitsType(a) || + ::executorch::runtime::isBitsType(b)) { + ET_CHECK_MSG(false, "promoteTypes not valid for bits dtypes"); + } + + // For Float8 types, only allow exact match + if (::executorch::runtime::isFloat8Type(a) && a == b) { + return a; + } + if (::executorch::runtime::isFloat8Type(a) || + ::executorch::runtime::isFloat8Type(b)) { + ET_CHECK_MSG(false, "promoteTypes not valid for float8 dtypes"); + } + + // For barebones uint types, only allow exact match + if (::executorch::runtime::isBarebonesUnsignedType(a) && a == b) { + return a; + } + if (::executorch::runtime::isBarebonesUnsignedType(a) || + ::executorch::runtime::isBarebonesUnsignedType(b)) { + ET_CHECK_MSG(false, "promoteTypes not valid for barebone unsigned dtypes"); + } + + auto ix_a = ::executorch::runtime::internal::dtype2index[(int)a]; + ET_CHECK(ix_a != -1); + auto ix_b = ::executorch::runtime::internal::dtype2index[(int)b]; + ET_CHECK(ix_b != -1); + ::executorch::aten::ScalarType promoted_type = + ::executorch::runtime::internal::promoteTypesLookup[ix_a][ix_b]; + + if (half_to_float && + (promoted_type == ::executorch::aten::ScalarType::Half || + promoted_type == ::executorch::aten::ScalarType::BFloat16)) { + promoted_type = ::executorch::aten::ScalarType::Float; + } + + return promoted_type; +} + +template +struct promote_types { +private: + static_assert(std::is_same_v || + (!is_qint_type::value && !is_qint_type::value), + "promote_types not valid for quantized dtypes"); + static_assert(std::is_same_v || + (!is_bits_type::value && !is_bits_type::value), + "promote_types not valid for bits dtypes"); + static_assert(std::is_same_v || + (!is_float8_type::value && !is_float8_type::value), + "promote_types not valid for float8 dtypes"); + static_assert(std::is_same_v || + (!is_barebones_unsigned_type::value && + !is_barebones_unsigned_type::value), + "promote_types not valid for barebones unsigned dtypes"); + + using promoted_type_not_respecting_half_to_float = + typename ScalarTypeToCppType::value, + CppTypeToScalarType::value)>::type; + +public: + using type = std::conditional_t< + half_to_float && + (std::is_same_v::type> || + std::is_same_v::type>), + typename ScalarTypeToCppType<::executorch::aten::ScalarType::Float>::type, + promoted_type_not_respecting_half_to_float>; +}; + +// +// Helper macros for switch case macros (see below) +// +// These macros are not meant to be used directly. They provide an easy way to +// generate a switch statement that can handle subsets of ScalarTypes supported +// by ExecuTorch. +// + +#ifdef ET_INTERNAL_CHECK_SELECTIVE_BUILD +#define ET_INTERNAL_SWITCH_CASE(enum_type, CTYPE_ALIAS, ...) \ + case enum_type: { \ + ET_INTERNAL_CHECK_SELECTIVE_BUILD(enum_type); \ + using CTYPE_ALIAS = \ + ::executorch::runtime::ScalarTypeToCppType::type; \ + return __VA_ARGS__(); \ + } +#else +#define ET_INTERNAL_SWITCH_CASE(enum_type, CTYPE_ALIAS, ...) \ + case enum_type: { \ + using CTYPE_ALIAS = \ + ::executorch::runtime::ScalarTypeToCppType::type; \ + return __VA_ARGS__(); \ + } +#endif + +#define ET_INTERNAL_SWITCH(TYPE, CONTEXT, NAME, ...) \ + [&] { \ + const auto &_st = TYPE; \ + constexpr const char *et_switch_name = NAME; \ + (void)et_switch_name; /* Suppress unused var */ \ + switch (_st) { \ + __VA_ARGS__ \ + default: \ + ET_CHECK_MSG(false, "Unhandled dtype %s for %s", \ + ::executorch::runtime::toString(_st), et_switch_name); \ + } \ + }() + +#define ET_INTERNAL_SWITCH_CASE_ALL_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Byte, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Char, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Short, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Int, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Long, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Half, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Float, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Double, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ComplexHalf, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ComplexFloat, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ComplexDouble, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bool, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QInt8, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QUInt8, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QInt32, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::BFloat16, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QUInt4x2, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QUInt2x4, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bits1x8, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bits2x4, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bits4x2, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bits8, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bits16, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_REAL_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Byte, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Char, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Short, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Int, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Long, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Float, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Double, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_REAL_TYPES_AND(ADDITIONAL, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE_REAL_TYPES(CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_REAL_TYPES_AND2(ADDITIONAL1, ADDITIONAL2, \ + CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE_REAL_TYPES(CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL1, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL2, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_REAL_TYPES_AND3(ADDITIONAL1, ADDITIONAL2, \ + ADDITIONAL3, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE_REAL_TYPES(CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL1, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL2, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL3, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_INT_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Byte, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Char, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Short, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Int, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Long, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_INT_TYPES_AND(ADDITIONAL, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE_INT_TYPES(CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Double, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Float, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES_AND(ADDITIONAL, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES(CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES_AND2(ADDITIONAL1, ADDITIONAL2, \ + CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES_AND(ADDITIONAL1, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL2, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES_AND3( \ + ADDITIONAL1, ADDITIONAL2, ADDITIONAL3, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES_AND2(ADDITIONAL1, ADDITIONAL2, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ADDITIONAL3, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_QINT_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QInt8, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QUInt8, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QInt32, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QUInt4x2, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::QUInt2x4, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_COMPLEX_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ComplexFloat, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ComplexDouble, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_COMPLEXH_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ComplexHalf, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ComplexFloat, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::ComplexDouble, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_SCALAR_OBJ_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bool, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Long, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Double, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_SCALAR_OBJ_REAL_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Long, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Double, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_SCALAR_OBJ_INTB_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bool, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Long, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_INTERNAL_SWITCH_CASE_SCALAR_OBJ_FLOATB_TYPES(CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Bool, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::Double, CTYPE_ALIAS, \ + __VA_ARGS__) + +// +// Switch case macros +// +// These macros provide an easy way to generate switch statements that apply a +// common lambda function to subsets of ScalarTypes supported by ExecuTorch. +// The lambda function can type specialize to the ctype associated with the +// ScalarType being handled through an alias passed as the CTYPE_ALIAS argument. +// +// Arguments: +// - ADDITIONAL: Additional ScalarType case to add +// - TYPE: The ScalarType to handle through the switch statement +// - CONTEXT: The KernelRuntimeContext instance used for error handling, etc. +// - NAME: A name for this operation which will be used in error messages +// - CTYPE_ALIAS: A typedef for the ctype associated with the ScalarType. +// - [&](){...}: A lambda function to be applied to each ScalarType case +// +// An example usage is: +// +// ET_SWITCH_REAL_TYPES(input.scalar_type(), "example", CTYPE, [&]() { +// output.mutable_data_ptr[0] = input.const_data_ptr[0]; +// }); +// +// Note that these can be nested as well: +// +// ET_SWITCH_REAL_TYPES(input.scalar_type(), "example", CTYPE_IN, [&]() { +// ET_SWITCH_REAL_TYPES(output.scalar_type(), "example", CTYPE_OUT, [&]() { +// output.mutable_data_ptr[0] = +// input.const_data_ptr[0]; +// }); +// }); +// +// These macros are adapted from Dispatch.h in the ATen library. The primary +// difference is that the CTYPE_ALIAS argument is exposed to users, which is +// used to alias the ctype associated with the ScalarType that is being handled. +// + +#define ET_SWITCH_ALL_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_ALL_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_REAL_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_REAL_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_REAL_TYPES_AND(ADDITIONAL, TYPE, CONTEXT, NAME, CTYPE_ALIAS, \ + ...) \ + ET_INTERNAL_SWITCH(TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_REAL_TYPES_AND( \ + ADDITIONAL, CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_REAL_TYPES_AND2(ADDITIONAL1, ADDITIONAL2, TYPE, CONTEXT, \ + NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH(TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_REAL_TYPES_AND2( \ + ADDITIONAL1, ADDITIONAL2, CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_REAL_TYPES_AND3(ADDITIONAL1, ADDITIONAL2, ADDITIONAL3, TYPE, \ + CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_REAL_TYPES_AND3( \ + ADDITIONAL1, ADDITIONAL2, ADDITIONAL3, CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_REALH_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_SWITCH_REAL_TYPES_AND(Half, TYPE, CONTEXT, NAME, CTYPE_ALIAS, __VA_ARGS__) + +#define ET_SWITCH_REALHBF16_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_SWITCH_REAL_TYPES_AND2(Half, BFloat16, TYPE, CONTEXT, NAME, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_SWITCH_REALB_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_SWITCH_REAL_TYPES_AND(Bool, TYPE, CONTEXT, NAME, CTYPE_ALIAS, __VA_ARGS__) + +#define ET_SWITCH_REALHB_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_SWITCH_REAL_TYPES_AND2(Half, Bool, TYPE, CONTEXT, NAME, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_SWITCH_REALHBBF16_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_SWITCH_REAL_TYPES_AND3(Half, Bool, BFloat16, TYPE, CONTEXT, NAME, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_SWITCH_REALHBBF16_AND_UINT_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, \ + ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_REAL_TYPES_AND3(Half, Bool, BFloat16, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::UInt16, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::UInt32, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE( \ + ::executorch::aten::ScalarType::UInt64, CTYPE_ALIAS, \ + __VA_ARGS__)) + +#define ET_SWITCH_INT_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_INT_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_INT_TYPES_AND(ADDITIONAL, TYPE, CONTEXT, NAME, CTYPE_ALIAS, \ + ...) \ + ET_INTERNAL_SWITCH(TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_INT_TYPES_AND( \ + ADDITIONAL, CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_FLOAT_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_FLOAT_TYPES_AND(ADDITIONAL, TYPE, CONTEXT, NAME, \ + CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH(TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES_AND( \ + ADDITIONAL, CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_FLOAT_TYPES_AND2(ADDITIONAL1, ADDITIONAL2, TYPE, CONTEXT, \ + NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH(TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES_AND2( \ + ADDITIONAL1, ADDITIONAL2, CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_FLOAT_TYPES_AND3(ADDITIONAL1, ADDITIONAL2, ADDITIONAL3, \ + TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_FLOAT_TYPES_AND3( \ + ADDITIONAL1, ADDITIONAL2, ADDITIONAL3, CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_FLOATH_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_SWITCH_FLOAT_TYPES_AND(Half, TYPE, CONTEXT, NAME, CTYPE_ALIAS, __VA_ARGS__) + +#define ET_SWITCH_FLOATHBF16_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_SWITCH_FLOAT_TYPES_AND2(Half, BFloat16, TYPE, CONTEXT, NAME, CTYPE_ALIAS, \ + __VA_ARGS__) + +#define ET_SWITCH_FLOATHBF16_TYPES_AND(ADDITIONAL, TYPE, CONTEXT, NAME, \ + CTYPE_ALIAS, ...) \ + ET_SWITCH_FLOAT_TYPES_AND3(Half, BFloat16, ADDITIONAL, TYPE, CONTEXT, NAME, \ + CTYPE_ALIAS, __VA_ARGS__) + +#define ET_SWITCH_QINT_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_QINT_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_COMPLEX_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_COMPLEX_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_COMPLEXH_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_COMPLEXH_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_SCALAR_OBJ_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_SCALAR_OBJ_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_SCALAR_OBJ_REAL_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_SCALAR_OBJ_REAL_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_SCALAR_OBJ_INTB_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_SCALAR_OBJ_INTB_TYPES(CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_SCALAR_OBJ_FLOATB_TYPES(TYPE, CONTEXT, NAME, CTYPE_ALIAS, \ + ...) \ + ET_INTERNAL_SWITCH(TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE_SCALAR_OBJ_FLOATB_TYPES( \ + CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_TWO_TYPES(T1, T2, TYPE, CONTEXT, NAME, CTYPE_ALIAS, ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::T1, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::T2, \ + CTYPE_ALIAS, __VA_ARGS__)) + +#define ET_SWITCH_THREE_TYPES(T1, T2, T3, TYPE, CONTEXT, NAME, CTYPE_ALIAS, \ + ...) \ + ET_INTERNAL_SWITCH( \ + TYPE, CONTEXT, NAME, \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::T1, CTYPE_ALIAS, \ + __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::T2, \ + CTYPE_ALIAS, __VA_ARGS__) \ + ET_INTERNAL_SWITCH_CASE(::executorch::aten::ScalarType::T3, \ + CTYPE_ALIAS, __VA_ARGS__)) + +} // namespace runtime +} // namespace executorch + +namespace executorch { +namespace aten { +#ifdef USE_ATEN_LIB +using ::at::elementSize; +#else // USE_ATEN_LIB +using ::executorch::runtime::elementSize; +#endif // USE_ATEN_LIB +} // namespace aten +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::can_cast; +using ::executorch::runtime::canCast; +using ::executorch::runtime::convert; +using ::executorch::runtime::CppTypeToScalarType; +using ::executorch::runtime::elementSize; +using ::executorch::runtime::is_barebones_unsigned_type; +using ::executorch::runtime::is_bits_type; +using ::executorch::runtime::is_complex_type; +using ::executorch::runtime::is_float8_type; +using ::executorch::runtime::is_integral_type; +using ::executorch::runtime::is_qint_type; +using ::executorch::runtime::isBitsType; +using ::executorch::runtime::isComplexType; +using ::executorch::runtime::isFloatingType; +using ::executorch::runtime::isIntegralType; +using ::executorch::runtime::isQIntType; +using ::executorch::runtime::isRealHBType; +using ::executorch::runtime::isRealHType; +using ::executorch::runtime::isRealType; +using ::executorch::runtime::isValid; +using ::executorch::runtime::promote_types; +using ::executorch::runtime::promoteTypes; +using ::executorch::runtime::ScalarTypeToCppType; +using ::executorch::runtime::toString; +#if !defined(USE_ATEN_LIB) +using ::executorch::runtime::is_floating_point; +using ::executorch::runtime::is_reduced_floating_point; +#endif +namespace internal { +using ::executorch::runtime::internal::B1; +using ::executorch::runtime::internal::C2; +using ::executorch::runtime::internal::C4; +using ::executorch::runtime::internal::C8; +using ::executorch::runtime::internal::F2; +using ::executorch::runtime::internal::F4; +using ::executorch::runtime::internal::F8; +using ::executorch::runtime::internal::I1; +using ::executorch::runtime::internal::I2; +using ::executorch::runtime::internal::I4; +using ::executorch::runtime::internal::I8; +using ::executorch::runtime::internal::U1; +} // namespace internal +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/exec_aten/util/tensor_dimension_limit.h b/third-party/include/executorch/runtime/core/exec_aten/util/tensor_dimension_limit.h new file mode 100644 index 000000000..6e072ab05 --- /dev/null +++ b/third-party/include/executorch/runtime/core/exec_aten/util/tensor_dimension_limit.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +namespace executorch::runtime { +/** + * The expected output size may not be the existing size of any inputs and + * outputs if the operator supports both broadcast and dynamic shape. + * Therefore such operators needs extra space to store the calculated expected + * output size. such dynamic allocation is troublesome in executorch so we can + * just hard code a static value of a relatively small value because users + * don't create high dimensional tensors. + */ +constexpr size_t kTensorDimensionLimit = 16; +} // namespace executorch::runtime diff --git a/third-party/include/executorch/runtime/core/exec_aten/util/tensor_shape_to_c_string.h b/third-party/include/executorch/runtime/core/exec_aten/util/tensor_shape_to_c_string.h new file mode 100644 index 000000000..4db9b48fa --- /dev/null +++ b/third-party/include/executorch/runtime/core/exec_aten/util/tensor_shape_to_c_string.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace executorch::runtime { + +/** + * Maximum size of a string returned by tensor_shape_to_c_string, for + * stack allocation. + */ +constexpr size_t kTensorShapeStringSizeLimit = + 1 + /* opening parenthesis */ + 10 * kTensorDimensionLimit + /* maximum digits we will print; update + * kMaximumPrintableTensorShapeElement + * if changing */ + 2 * kTensorDimensionLimit + /* comma and space after each item, + * overwritten with closing paren and + * NUL terminator for last element */ + 1; /* padding for temporary NUL terminator for simplicity of implementation + */ + +namespace internal { +constexpr size_t kMaximumPrintableTensorShapeElement = + std::numeric_limits::max(); +} // namespace internal + +/** + * Convert a shape to a NUL-terminated C string with limited size. If + * elements of the shape are larger than + * kMaximumPrintableTensorShapeElement, those elements will be + * rendered as ERR instead. + * + * NOTE: There are two overloads of this function to support both ATen + * tensors and ExecuTorch Tensors, which have different SizesType, + * while also avoiding a dependency on exec_aten.h from this header + * because that would cause a circular dependency. + */ +std::array +tensor_shape_to_c_string(executorch::runtime::Span shape); + +/** + * Convert a shape to a NUL-terminated C string with limited size. If + * elements of the shape are larger than + * kMaximumPrintableTensorShapeElement, those elements will be + * rendered as ERR instead. + * + * NOTE: There are two overloads of this function to support both ATen + * tensors and ExecuTorch Tensors, which have different SizesType, + * while also avoiding a dependency on exec_aten.h from this header + * because that would cause a circular dependency. + */ +std::array +tensor_shape_to_c_string(executorch::runtime::Span shape); + +} // namespace executorch::runtime diff --git a/third-party/include/executorch/runtime/core/exec_aten/util/tensor_util.h b/third-party/include/executorch/runtime/core/exec_aten/util/tensor_util.h new file mode 100644 index 000000000..322ab061d --- /dev/null +++ b/third-party/include/executorch/runtime/core/exec_aten/util/tensor_util.h @@ -0,0 +1,1250 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include // std::array +#include +#include // PRId64 +#include +#include // size_t + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/// All assertion messages should begin with this prefix. +#define ET_TENSOR_CHECK_PREFIX__ "Tensors do not match" +#define ET_MIN2(a, b) (std::min(a, b)) +#define ET_MIN3(a, b, c) (std::min(a, std::min(b, c))) + +#define ET_NORMALIZE_IX(IX, UPPER_BOUND) IX < 0 ? IX + UPPER_BOUND : IX + +#define ET_CHECK_VALID_IX(IX, UPPER_BOUND) \ + ET_CHECK_MSG(IX >= -static_cast(UPPER_BOUND) && \ + IX < static_cast(UPPER_BOUND), \ + "index %" PRId64 " must be within range [-%zd, %zd)", IX, \ + UPPER_BOUND, UPPER_BOUND) + +#define ET_CHECK_VALID_DIM(DIM, UPPER_BOUND) \ + ET_CHECK_MSG(DIM >= -static_cast(UPPER_BOUND) && \ + DIM < static_cast(UPPER_BOUND), \ + "dim %" PRId64 " must be within range [-%zd, %zd)", DIM, \ + UPPER_BOUND, UPPER_BOUND) + +#define ET_CHECK_NON_ZERO_DIM_SIZE(DIM, T) \ + const size_t udim = ET_NORMALIZE_IX(DIM, T.dim()); \ + ET_CHECK_MSG(T.size(udim) != 0, "Expected dim %zd to have non-zero size.", \ + udim); + +/** + * Asserts that all tensors have the same shape. + * This also handles a edge case where there is only one element in all the + * tensors being compared but the number of dimensions >= 0. In the for loop + * iterating over the dimensions we make sure that we pick the smallest + * dimension of all the tensors as the upper bound for the for loop. + */ +#define ET_CHECK_SAME_SHAPE2(a__, b__) \ + ({ \ + const size_t a_numel__ = (a__).numel(); \ + const size_t b_numel__ = (b__).numel(); \ + const size_t a_dim__ = (a__).dim(); \ + const size_t b_dim__ = (b__).dim(); \ + ET_CHECK_MSG( \ + a_numel__ == b_numel__ && \ + ((a_numel__ == 1 && b_numel__ == 1) || (a_dim__ == b_dim__)), \ + ET_TENSOR_CHECK_PREFIX__ ": numel={%zu, %zu}, dim={%zu, %zu}", \ + a_numel__, b_numel__, a_dim__, b_dim__); \ + for (size_t dim__ = 0; dim__ < ET_MIN2(a_dim__, b_dim__); ++dim__) { \ + size_t a_size__ = (a__).size(dim__); \ + size_t b_size__ = (b__).size(dim__); \ + ET_CHECK_MSG(a_size__ == b_size__, \ + ET_TENSOR_CHECK_PREFIX__ " at size(%zu): {%zu, %zu}", \ + dim__, a_size__, b_size__); \ + } \ + }) + +#define ET_CHECK_SAME_SHAPE3(a__, b__, c__) \ + ({ \ + const size_t a_numel__ = (a__).numel(); \ + const size_t b_numel__ = (b__).numel(); \ + const size_t c_numel__ = (c__).numel(); \ + const size_t a_dim__ = (a__).dim(); \ + const size_t b_dim__ = (b__).dim(); \ + const size_t c_dim__ = (c__).dim(); \ + ET_CHECK_MSG(a_numel__ == b_numel__ && b_numel__ == c_numel__ && \ + ((a_numel__ == 1 && b_numel__ == 1 && c_numel__ == 1) || \ + a_dim__ == b_dim__ && b_dim__ == c_dim__), \ + ET_TENSOR_CHECK_PREFIX__ \ + ": numel={%zu, %zu, %zu}, dim={%zu, %zu, %zu}", \ + a_numel__, b_numel__, c_numel__, a_dim__, b_dim__, c_dim__); \ + for (size_t dim__ = 0; dim__ < ET_MIN3(a_dim__, b_dim__, c_dim__); \ + ++dim__) { \ + size_t a_size__ = (a__).size(dim__); \ + size_t b_size__ = (b__).size(dim__); \ + size_t c_size__ = (c__).size(dim__); \ + ET_CHECK_MSG(a_size__ == b_size__ && b_size__ == c_size__, \ + ET_TENSOR_CHECK_PREFIX__ " at size(%zu): {%zu, %zu, %zu}", \ + dim__, a_size__, b_size__, c_size__); \ + } \ + }) + +/// Asserts that all tensors have the same dtype. +#define ET_CHECK_SAME_DTYPE2(a__, b__) \ + ({ \ + const ::executorch::aten::ScalarType a_type__ = (a__).scalar_type(); \ + const ::executorch::aten::ScalarType b_type__ = (b__).scalar_type(); \ + ET_CHECK_MSG(a_type__ == b_type__, \ + ET_TENSOR_CHECK_PREFIX__ ": dtype={%" PRId8 ", %" PRId8 "}", \ + static_cast(a_type__), \ + static_cast(b_type__)); \ + }) + +#define ET_CHECK_SAME_DTYPE3(a__, b__, c__) \ + ({ \ + const ::executorch::aten::ScalarType a_type__ = (a__).scalar_type(); \ + const ::executorch::aten::ScalarType b_type__ = (b__).scalar_type(); \ + const ::executorch::aten::ScalarType c_type__ = (c__).scalar_type(); \ + ET_CHECK_MSG(a_type__ == b_type__ && b_type__ == c_type__, \ + ET_TENSOR_CHECK_PREFIX__ ": dtype={%" PRId8 ", %" PRId8 \ + ", %" PRId8 "}", \ + static_cast(a_type__), static_cast(b_type__), \ + static_cast(c_type__)); \ + }) + +/** + * Asserts that all tensors have the same shape and dtype. + * + * This macro should produce less code/data than calling the SHAPE and DTYPE + * macros independently, because it only calls ET_CHECK_MSG once. + */ +#define ET_CHECK_SAME_SHAPE_AND_DTYPE2(a__, b__) \ + ({ \ + const size_t a_numel__ = (a__).numel(); \ + const size_t b_numel__ = (b__).numel(); \ + const size_t a_dim__ = (a__).dim(); \ + const size_t b_dim__ = (b__).dim(); \ + const ::executorch::aten::ScalarType a_type__ = (a__).scalar_type(); \ + const ::executorch::aten::ScalarType b_type__ = (b__).scalar_type(); \ + \ + ET_CHECK_MSG( \ + a_numel__ == b_numel__ && \ + ((a_numel__ == 1 && b_numel__ == 1) || a_dim__ == b_dim__) && \ + a_type__ == b_type__, \ + ET_TENSOR_CHECK_PREFIX__ \ + ": numel={%zu, %zu}, dim={%zu, %zu}, dtype={%" PRId8 ", %" PRId8 "}", \ + a_numel__, b_numel__, a_dim__, b_dim__, static_cast(a_type__), \ + static_cast(b_type__)); \ + for (size_t dim__ = 0; dim__ < ET_MIN2(a_dim__, b_dim__); ++dim__) { \ + size_t a_size__ = (a__).size(dim__); \ + size_t b_size__ = (b__).size(dim__); \ + ET_CHECK_MSG(a_size__ == b_size__, \ + ET_TENSOR_CHECK_PREFIX__ " at size(%zu): {%zu, %zu}", \ + dim__, a_size__, b_size__); \ + } \ + }) + +#define ET_CHECK_SAME_SHAPE_AND_DTYPE3(a__, b__, c__) \ + ({ \ + const size_t a_numel__ = (a__).numel(); \ + const size_t b_numel__ = (b__).numel(); \ + const size_t c_numel__ = (c__).numel(); \ + const size_t a_dim__ = (a__).dim(); \ + const size_t b_dim__ = (b__).dim(); \ + const size_t c_dim__ = (c__).dim(); \ + const ::executorch::aten::ScalarType a_type__ = (a__).scalar_type(); \ + const ::executorch::aten::ScalarType b_type__ = (b__).scalar_type(); \ + const ::executorch::aten::ScalarType c_type__ = (c__).scalar_type(); \ + \ + ET_CHECK_MSG(a_numel__ == b_numel__ && b_numel__ == c_numel__ && \ + ((a_numel__ == 1 && b_numel__ == 1 && c_numel__ == 1) || \ + (a_dim__ == b_dim__ && b_dim__ == c_dim__)) && \ + a_type__ == b_type__ && b_type__ == c_type__, \ + ET_TENSOR_CHECK_PREFIX__ \ + ": numel={%zu, %zu, %zu}, dim={%zu, %zu, %zu}, " \ + "dtype={%" PRId8 ", %" PRId8 ", %" PRId8 "}", \ + a_numel__, b_numel__, c_numel__, a_dim__, b_dim__, c_dim__, \ + static_cast(a_type__), static_cast(b_type__), \ + static_cast(c_type__)); \ + for (size_t dim__ = 0; dim__ < ET_MIN3(a_dim__, b_dim__, c_dim__); \ + ++dim__) { \ + size_t a_size__ = (a__).size(dim__); \ + size_t b_size__ = (b__).size(dim__); \ + size_t c_size__ = (c__).size(dim__); \ + ET_CHECK_MSG(a_size__ == b_size__ && b_size__ == c_size__, \ + ET_TENSOR_CHECK_PREFIX__ " at size(%zu): {%zu, %zu, %zu}", \ + dim__, a_size__, b_size__, c_size__); \ + } \ + }) + +/** + * Assert that the input tensor is contiguous tensor. + */ +#define ET_CHECK_CONTIGUOUS(a__) \ + ({ \ + const ::executorch::aten::ArrayRef \ + strides = a__.strides(); \ + const ::executorch::aten::ArrayRef sizes = \ + a__.sizes(); \ + ET_CHECK_MSG( \ + strides[strides.size() - 1] == 1, \ + "The stride of the last dimension shall be 1 for contiguous tensor, " \ + "not %d", \ + strides[strides.size() - 1]); \ + for (size_t i = strides.size() - 1; i > 0; i--) { \ + ET_CHECK_MSG(strides[i - 1] == strides[i] * sizes[i], \ + "The stride of the %zu-th dimension shall equal to " \ + "strides[%zu] * sizes[%zu], now is %d and %d", \ + i - 1, i, i, strides[i - 1], strides[i] * sizes[i]); \ + } \ + }) + +/** + * Assert the input two tensors share same strides. + * Noted that this function does not make any check or promise on the contiguity + * of any input tensors. + */ +#define ET_CHECK_SAME_STRIDES2(a__, b__) \ + ({ \ + ET_CHECK_MSG( \ + a__.dim() == b__.dim(), \ + "Two tensors shall have same number of strides, but not %zu and %zu.", \ + a__.dim(), b__.dim()); \ + const ::executorch::aten::ArrayRef \ + a_strides = a__.strides(); \ + const ::executorch::aten::ArrayRef \ + b_strides = b__.strides(); \ + for (size_t i = 0; i < a__.dim(); i++) { \ + ET_CHECK_MSG(a_strides[i] == b_strides[i], \ + "a.strides()[%zu] shall equal to b.strides()[%zu], " \ + "but now is %d and %d.", \ + i, i, (int32_t)a_strides[i], (int32_t)b_strides[i]); \ + } \ + }) + +/** + * Assert the input three tensors share same strides. + * Noted that this function does not make any check or promise on the contiguity + * of any input tensors. + */ +#define ET_CHECK_SAME_STRIDES3(a__, b__, c__) \ + ({ \ + ET_CHECK_MSG(a__.dim() == b__.dim() && b__.dim() == c__.dim(), \ + "Three tensors shall have same number of strides, " \ + "but not %zu, %zu and %zu.", \ + a__.dim(), b__.dim(), c__.dim()); \ + const ::executorch::aten::ArrayRef \ + a_strides = a__.strides(); \ + const ::executorch::aten::ArrayRef \ + b_strides = b__.strides(); \ + const ::executorch::aten::ArrayRef \ + c_strides = c__.strides(); \ + for (size_t i = 0; i < a__.dim(); i++) { \ + ET_CHECK_MSG(a_strides[i] == b_strides[i] && \ + b_strides[i] == c_strides[i], \ + "a_strides[%zu], b_strides[%zu] and c_strides[%zu] " \ + "shall share same value, but now is %d, %d and %d", \ + i, i, i, (int32_t)a_strides[i], (int32_t)b_strides[i], \ + (int32_t)c_strides[i]); \ + } \ + }) + +#define ET_CHECK_DEFAULT_OR_CHANNELSLAST_DIMORDER(t__) \ + ({ \ + ET_CHECK_MSG(is_contiguous_dim_order(t__.dim_order().data(), \ + t__.dim_order().size()) || \ + is_channels_last_dim_order(t__.dim_order().data(), \ + t__.dim_order().size()), \ + "Tensor must have default or channels last dim order"); \ + }) + +/** + * DEPRECATED: Please use ET_CHECK_OR_RETURN_FALSE instead and provide + * an informative message. (For example, the values of any variables used in + * `cond` would not be reported automatically by this macro.) + * + * A convenience macro to be used in utility functions that check whether input + * tensor(s) are valid, which are expected to return a boolean. Checks whether + * `cond` is true; if not, log the failed check and return false. + * + * @param[in] cond the condition to check + */ +#define ET_LOG_AND_RETURN_IF_FALSE(cond) ET_CHECK_OR_RETURN_FALSE(cond, "") + +/** + * DEPRECATED: Please use ET_CHECK_OR_RETURN_FALSE instead. + */ +#define ET_LOG_MSG_AND_RETURN_IF_FALSE ET_CHECK_OR_RETURN_FALSE + +/** + * If `cond` is false, log `cond` and return from the kernel with a failure + * state set. + * + * @param[in] context the runtime context + * @param[in] cond the condition to check + * @param[in] error torch::executor::Error enum value (e.g `InvalidArgument`) + * @param[in] retval return value of the kernel to allow for early exit + */ +#define ET_KERNEL_CHECK(context, cond, error, retval) \ + do { \ + if (!(cond)) { \ + ET_LOG(Error, "Check failed (%s): ", #cond); \ + context.fail(torch::executor::Error::error); \ + return retval; \ + } \ + } while (false) + +/** + * If `cond` is false, log `message` and return from the kernel with a failure + * state set. + * + * @param[in] context the runtime context + * @param[in] cond the condition to check + * @param[in] error torch::executor::Error enum value (e.g `InvalidArgument`) + * @param[in] retval return value of the kernel to allow for early exit + */ +#define ET_KERNEL_CHECK_MSG(context, cond, error, retval, message, ...) \ + do { \ + if (!(cond)) { \ + ET_LOG(Error, "Check failed (%s): " message, #cond, ##__VA_ARGS__); \ + context.fail(torch::executor::Error::error); \ + return retval; \ + } \ + } while (false) + +/** + * Convenience macro to extract a scalar tensor into a value + */ +#define ET_EXTRACT_SCALAR_TENSOR(scalar_tensor, out_val) \ + ET_CHECK_MSG(extract_scalar_tensor(scalar_tensor, &out_val), #scalar_tensor \ + " could not be extracted: wrong type or out of range"); + +namespace executorch { +namespace runtime { + +// +// Utility functions for checking tensor attributes +// +// + +/* + * Returns true if the given dimension value is between -upper_bound and + * upper_bound - 1, inclusive. + */ +inline bool dim_is_valid(int64_t dim, int64_t upper_bound) { + ET_CHECK_OR_RETURN_FALSE( + dim >= -upper_bound && dim < upper_bound, + "Dimension %" PRId64 + " is out of range. Dimension should be between %" PRId64 " and %" PRId64 + ", inclusive.", + dim, -upper_bound, upper_bound - 1); + + return true; +} + +/* + * Returns the tensor's number of dimensions, except when the tensor is zero + * dimensional. In this case, it returns 1. This is used to properly handle + * the zero dimensional tensors in some kernels, that treat them as 1D tensors + * with a single element. + */ +inline ssize_t nonzero_dim(const executorch::aten::Tensor &tensor) { + return tensor.dim() == 0 ? 1 : tensor.dim(); +} + +/* + * Returns the size along a dimension dim, except when the tensor is zero + * dimensional. In this case, it returns 1. This is used to properly handle + * the zero dimensional tensors in some kernels, that treat them as 1D tensors + * with a single element. + */ +inline ssize_t nonempty_size(const executorch::aten::Tensor &tensor, + ssize_t dim) { + return tensor.dim() == 0 ? 1 : tensor.size(dim); +} + +inline bool tensor_can_cast_to(executorch::aten::Tensor a, + executorch::aten::ScalarType dtype) { + ET_CHECK_OR_RETURN_FALSE(torch::executor::canCast(a.scalar_type(), dtype), + "Tensor of dtype %s cannot cast to dtype %s", + torch::executor::toString(a.scalar_type()), + torch::executor::toString(dtype)); + + return true; +} + +inline bool tensor_is_bool_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE(t.scalar_type() == + executorch::aten::ScalarType::Bool, + "Expected to find bool type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_type(executorch::aten::Tensor t, + executorch::aten::ScalarType dtype) { + ET_CHECK_OR_RETURN_FALSE(t.scalar_type() == dtype, + "Expected to find %s type, but tensor has type %s", + torch::executor::toString(dtype), + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_type(executorch::aten::Tensor t, + executorch::aten::ScalarType dtype, + executorch::aten::ScalarType dtype2) { + ET_LOG_MSG_AND_RETURN_IF_FALSE( + t.scalar_type() == dtype || t.scalar_type() == dtype2, + "Expected to find %s or %s type, but tensor has type %s", + torch::executor::toString(dtype), torch::executor::toString(dtype2), + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_type(executorch::aten::Tensor t, + executorch::aten::ScalarType dtype, + executorch::aten::ScalarType dtype2, + executorch::aten::ScalarType dtype3) { + ET_LOG_MSG_AND_RETURN_IF_FALSE( + t.scalar_type() == dtype || t.scalar_type() == dtype2 || + t.scalar_type() == dtype3, + "Expected to find %s, %s, or %s type, but tensor has type %s", + torch::executor::toString(dtype), torch::executor::toString(dtype2), + torch::executor::toString(dtype3), + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_integral_type(executorch::aten::Tensor t, + bool includeBool = false) { + ET_CHECK_OR_RETURN_FALSE( + torch::executor::isIntegralType(t.scalar_type(), includeBool), + "Expected to find a integral type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_floating_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE( + torch::executor::isFloatingType(t.scalar_type()), + "Expected to find a floating type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_real_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE( + torch::executor::isRealType(t.scalar_type()), + "Expected to find a real type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_realh_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE( + torch::executor::isRealHType(t.scalar_type()), + "Expected to find a real type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_realhbf16_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE( + executorch::runtime::isRealHBF16Type(t.scalar_type()), + "Expected to find a real type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_realhb_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE( + torch::executor::isRealHBType(t.scalar_type()), + "Expected to find a real type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_realhbbf16_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE( + executorch::runtime::isRealHBBF16Type(t.scalar_type()), + "Expected to find a real type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_complex_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE( + torch::executor::isComplexType(t.scalar_type()), + "Expected to find a complex type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensor_is_bits_type(executorch::aten::Tensor t) { + ET_CHECK_OR_RETURN_FALSE( + torch::executor::isBitsType(t.scalar_type()), + "Expected to find a bits type, but tensor has type %s", + torch::executor::toString(t.scalar_type())); + + return true; +} + +inline bool tensors_have_same_dtype(executorch::aten::Tensor a, + executorch::aten::Tensor b) { + ET_CHECK_OR_RETURN_FALSE(a.scalar_type() == b.scalar_type(), + ET_TENSOR_CHECK_PREFIX__ ": dtype={%s, %s}", + torch::executor::toString(a.scalar_type()), + torch::executor::toString(b.scalar_type())); + return true; +} + +inline bool tensors_have_same_dtype(executorch::aten::Tensor a, + executorch::aten::Tensor b, + executorch::aten::Tensor c) { + ET_CHECK_OR_RETURN_FALSE(a.scalar_type() == b.scalar_type() && + b.scalar_type() == c.scalar_type(), + ET_TENSOR_CHECK_PREFIX__ ": dtype={%s, %s, %s}", + torch::executor::toString(a.scalar_type()), + torch::executor::toString(b.scalar_type()), + torch::executor::toString(c.scalar_type())); + return true; +} + +inline bool tensor_is_rank(executorch::aten::Tensor t, size_t rank) { + ET_CHECK_OR_RETURN_FALSE(static_cast(t.dim()) == rank, + "Expected tensor.dim() to be %zu, but got %zu", + static_cast(rank), + static_cast(t.dim())); + + return true; +} + +inline bool tensor_has_rank_greater_or_equal_to(executorch::aten::Tensor t, + size_t rank) { + ET_CHECK_OR_RETURN_FALSE(static_cast(t.dim()) >= rank, + "Expected tensor.dim() to be >= %zu, but got %zu", + static_cast(rank), + static_cast(t.dim())); + + return true; +} + +inline bool tensor_has_rank_smaller_or_equal_to(executorch::aten::Tensor t, + size_t rank) { + ET_CHECK_OR_RETURN_FALSE(static_cast(t.dim()) <= rank, + "Expected tensor.dim() to be <= %zu, but got %zu", + static_cast(rank), + static_cast(t.dim())); + + return true; +} + +inline bool tensor_has_dim(executorch::aten::Tensor t, int64_t d) { + if (t.dim() == 0) { + ET_CHECK_OR_RETURN_FALSE( + d == 0 || d == -1, "dim must be 0 or -1 for 0-dim tensor, got %" PRId64, + d); + } else { + ET_CHECK_OR_RETURN_FALSE(d > 0 ? d < t.dim() : t.dim() + d >= 0, + "%zu-dim tensor does not have dim at index %zu", + static_cast(t.dim()), + static_cast(d)); + } + return true; +} + +inline bool tensor_has_non_empty_dim(executorch::aten::Tensor t, int64_t d) { + const size_t udim = ET_NORMALIZE_IX(d, t.dim()); + ET_LOG_AND_RETURN_IF_FALSE(tensor_has_dim(t, d)); + ET_LOG_AND_RETURN_IF_FALSE(t.size(udim) != 0); + return true; +} + +inline bool tensor_dim_has_index(executorch::aten::Tensor t, int64_t d, + int64_t ix) { + // Indexing ops don't support zero-dim tensors + ET_CHECK(t.dim() != 0); + if (d < 0) { + d += t.dim(); + } + // Dimension must have been already checked by tensor_has_dim + ET_CHECK(d >= 0 && d < t.dim()); + + ET_CHECK_OR_RETURN_FALSE( + ix >= -t.size(d) && ix < t.size(d), + "index %" PRId64 " out of range [-%zu,%zu) at dimension %" PRId64 ")", ix, + static_cast(t.size(d)), static_cast(t.size(d)), d); + return true; +} + +inline bool tensors_have_same_size_at_dims(executorch::aten::Tensor a, + size_t dim_a, + executorch::aten::Tensor b, + size_t dim_b) { + ET_CHECK_OR_RETURN_FALSE(dim_a < static_cast(a.dim()), + "Cannot retrieve dim %zu from tensor with dim %zu", + static_cast(dim_a), + static_cast(a.dim())); + ET_CHECK_OR_RETURN_FALSE(dim_b < static_cast(b.dim()), + "Cannot retrieve dim %zu from tensor with dim %zu", + static_cast(dim_b), + static_cast(b.dim())); + ET_CHECK_OR_RETURN_FALSE( + a.size(dim_a) == b.size(dim_b), + ET_TENSOR_CHECK_PREFIX__ + ": a.size(%zu) = %zu does not match b.size(%zu) = %zu", + static_cast(dim_a), static_cast(a.size(dim_a)), + static_cast(dim_b), static_cast(b.size(dim_b))); + + return true; +} + +inline bool tensors_have_same_shape(executorch::aten::Tensor a, + executorch::aten::Tensor b) { + if (a.numel() == 1 && b.numel() == 1) { + // PyTorch operators treat all scalar tensors as the same shape even if + // they have different dims. + return true; + } + if (!(a.sizes() == b.sizes() && a.numel() == b.numel())) { + ET_LOG(Error, + ET_TENSOR_CHECK_PREFIX__ ": numel=(%zu, %zu), dim=(%zu, %zu)", + static_cast(a.numel()), static_cast(b.numel()), + static_cast(a.dim()), static_cast(b.dim())); + // Using [[maybe_unused]] as ET_LOG may not trigger based on verbosity + for ([[maybe_unused]] const auto d : + c10::irange(ET_MIN2(a.dim(), b.dim()))) { + ET_LOG(Error, " size(%zu): (%zu, %zu)", static_cast(d), + static_cast(a.size(d)), static_cast(b.size(d))); + } + + return false; + } + + return true; +} + +inline bool tensors_have_same_shape(executorch::aten::Tensor a, + executorch::aten::Tensor b, + executorch::aten::Tensor c) { + if (a.numel() == 1 && b.numel() == 1 && c.numel() == 1) { + // PyTorch operators treat all scalar tensors as the same shape even if + // they have different dims. + return true; + } + bool cond1 = (a.sizes() == b.sizes()) && (a.numel() == b.numel()); + bool cond2 = (b.sizes() == c.sizes()) && (b.numel() == c.numel()); + + if (!(cond1 && cond2)) { + ET_LOG(Error, + ET_TENSOR_CHECK_PREFIX__ + ": numel=(%zu, %zu, %zu), dim=(%zu, %zu, %zu)", + static_cast(a.numel()), static_cast(b.numel()), + static_cast(c.numel()), static_cast(a.dim()), + static_cast(b.dim()), static_cast(c.dim())); + for ([[maybe_unused]] const auto d : + c10::irange(ET_MIN3(a.dim(), b.dim(), c.dim()))) { + ET_LOG(Error, " size(%zu): (%zu, %zu, %zu)", static_cast(d), + static_cast(a.size(d)), static_cast(b.size(d)), + static_cast(c.size(d))); + } + + return false; + } + + return true; +} + +inline bool tensors_have_same_shape_and_dtype(executorch::aten::Tensor a, + executorch::aten::Tensor b) { + return tensors_have_same_shape(a, b) && tensors_have_same_dtype(a, b); +} + +inline bool tensors_have_same_shape_and_dtype(executorch::aten::Tensor a, + executorch::aten::Tensor b, + executorch::aten::Tensor c) { + return tensors_have_same_shape(a, b, c) && tensors_have_same_dtype(a, b, c); +} + +inline bool tensor_has_expected_size( + executorch::aten::Tensor a, + executorch::aten::ArrayRef expected_sizes) { + if (!(a.sizes() == expected_sizes)) { + ET_LOG(Error, ET_TENSOR_CHECK_PREFIX__ ": dim=(%zu, %zu)", + static_cast(a.dim()), + static_cast(expected_sizes.size())); + size_t a_dim = static_cast(a.dim()); + size_t expected_dim = static_cast(expected_sizes.size()); + for ([[maybe_unused]] const auto d : + c10::irange(ET_MIN2(a_dim, expected_dim))) { + ET_LOG(Error, " size(%zu): (%zu, %zu)", static_cast(d), + static_cast(a.size(d)), + static_cast(expected_sizes[d])); + } + + return false; + } + return true; +} + +inline bool tensors_have_same_strides(executorch::aten::Tensor a, + executorch::aten::Tensor b) { + if (a.strides() != b.strides()) { + ET_LOG(Error, ET_TENSOR_CHECK_PREFIX__ ": dim=(%zu, %zu)", + static_cast(a.dim()), static_cast(b.dim())); + for ([[maybe_unused]] const auto d : + c10::irange(ET_MIN2(a.dim(), b.dim()))) { + ET_LOG(Error, " stride(%zu): (%zu, %zu)", static_cast(d), + static_cast(a.strides()[d]), + static_cast(b.strides()[d])); + } + + return false; + } + return true; +} + +inline bool tensors_have_same_strides(executorch::aten::Tensor a, + executorch::aten::Tensor b, + executorch::aten::Tensor c) { + if (!(a.strides() == b.strides() && b.strides() == c.strides())) { + ET_LOG(Error, ET_TENSOR_CHECK_PREFIX__ ": dim=(%zu, %zu, %zu)", + static_cast(a.dim()), static_cast(b.dim()), + static_cast(c.dim())); + for ([[maybe_unused]] const auto d : + c10::irange(ET_MIN3(a.dim(), b.dim(), c.dim()))) { + ET_LOG(Error, " stride(%zu): (%zu, %zu, %zu)", static_cast(d), + static_cast(a.strides()[d]), + static_cast(b.strides()[d]), + static_cast(c.strides()[d])); + } + + return false; + } + return true; +} + +inline bool tensor_is_contiguous(executorch::aten::Tensor t) { + const auto strides = t.strides(); + const auto sizes = t.sizes(); + // If tensor is 0-dim (i.e. a scalar tensor) it is contiguous + if (strides.size() == 0) { + return true; + } + ET_CHECK_OR_RETURN_FALSE( + strides[strides.size() - 1] == 1, + "Tensor is not contiguous; the stride of the last dimension must be 1, " + "but got %zu", + static_cast(strides[strides.size() - 1])); + for (int i = strides.size() - 1; i > 0; --i) { + ET_CHECK_OR_RETURN_FALSE( + strides[i - 1] == strides[i] * sizes[i], + "Tensor is not contiguous; the stride of dim %zu should be equal to " + "strides[%zu] * sizes[%zu] = %zu, but found %zu", + static_cast(i - 1), static_cast(i), + static_cast(i), static_cast(strides[i] * sizes[i]), + static_cast(strides[i - 1])); + } + return true; +} + +inline bool tensors_have_same_rank(executorch::aten::Tensor a, + executorch::aten::Tensor b) { + ET_CHECK_OR_RETURN_FALSE(a.dim() == b.dim(), + ET_TENSOR_CHECK_PREFIX__ ": rank={%zd, %zd}", + ssize_t(a.dim()), ssize_t(b.dim())); + return true; +} + +inline bool tensor_is_scalar(executorch::aten::Tensor t) { + return t.dim() == 0 && t.numel() == 1; +} + +/// Returns the product of dim[0:dim), not including dim. +inline size_t getLeadingDims(const executorch::aten::Tensor &tensor, + int64_t dim) { + ET_CHECK_MSG(dim >= 0 && dim <= tensor.dim(), + "Ending dimension %" PRId64 + " should be in the range [0, tensor.dim() %zd].", + dim, ssize_t(tensor.dim())); + size_t dims = 1; + for (const auto i : c10::irange(dim)) { + dims *= static_cast(tensor.size(i)); + } + return dims; +} + +/// Returns the product of dim[dim+1:]. +inline size_t getTrailingDims(const executorch::aten::Tensor &tensor, + int64_t dim) { + ET_CHECK_MSG(dim >= -1 && dim < tensor.dim(), + "Starting dimension %" PRId64 + " should be in the range [-1, tensor.dim() -1 %zd).", + dim, ssize_t(tensor.dim())); + size_t dims = 1; + for (size_t i = dim + 1; i < static_cast(tensor.dim()); ++i) { + dims *= static_cast(tensor.size(i)); + } + return dims; +} + +/** + * Given a N-dimensional tensor coordinate, return a linear index that can be + * used to access the corresponding element in the tensor's data buffer. + * + * @param[in] tensor The tensor that will be indexed + * @param[in] coordinate A n-dimensional array representing the coordinate to + * index. It is assumed that the array has kTensorDimensionLimit elements. + * @param[out] index The linear index to element at the specified coordinate + * in the tensor. + */ +inline size_t coordinateToIndex(const executorch::aten::Tensor &tensor, + const size_t *const coordinate) { + size_t index = 0; + for (int d = 0; d < tensor.dim(); ++d) { + index += coordinate[d] * getTrailingDims(tensor, d); + } + return index; +} + +/** + * Produce a memoized array for use with repeated calls to + * coordinateToIndexWithTrailingDimsMemo, which will be faster than + * repeated calls to coordinateToIndex. + */ +inline void +memoizeTrailingDims(const executorch::aten::Tensor &tensor, + size_t trailing_dims_memo[kTensorDimensionLimit]) { + const auto tensorDim = tensor.dim(); + size_t dims = 1; + for (int ii = tensorDim - 1; ii >= 0; --ii) { + trailing_dims_memo[ii] = dims; + dims *= static_cast(tensor.size(ii)); + } +} + +/** + * Like coordinateToIndex, but faster for repeated calls with the same + * tensor. trailing_dims_memo must be produced by a call to + * memoizeTrailingDims. + */ +inline size_t coordinateToIndexWithTrailingDimsMemo( + const executorch::aten::Tensor &tensor, const size_t *const coordinate, + const size_t trailing_dims_memo[kTensorDimensionLimit]) { + size_t index = 0; + for (int d = 0; d < tensor.dim(); ++d) { + index += coordinate[d] * trailing_dims_memo[d]; + } + return index; +} + +/** + * Given the linear index return the N-dimensional tensor coordinate. This is + * the inverse operation of coordinateToIndex. + * + * @param[in] tensor The tensor that will be indexed + * @param[in] index The linear index to element at the specified coordinate in + * the tensor. + * @param[out] coordinate A n-dimensional array representing the coordinate to + * index. It is assumed that the array has kTensorDimensionLimit elements. + * @returns void + */ +inline void indexToCoordinate(const executorch::aten::Tensor &tensor, + size_t index, size_t *coordinate) { + ET_CHECK(index < static_cast(tensor.numel())); + for (auto i = 0; i < tensor.dim(); ++i) { + auto dim = tensor.dim() - 1 - i; + size_t dim_size = tensor.size(dim); + coordinate[dim] = index % dim_size; + index /= dim_size; + } +} + +/** + * Extracts an integer value from a scalar Tensor. + * + * @param[in] tensor The source of the value to extract. + * @param[out] out_val The extracted value, on success. + * @returns `true` if a value was extracted, and sets `*out_val` to that + * value. `false` if a value could not be extracted: either it was not an + * integer Scalar Tensor, or the value of that Scalar Tensor could not be + * represented by INT_T. + */ +template ::value && + !std::is_same::value, + bool>::type = true> +bool extract_scalar_tensor(executorch::aten::Tensor tensor, INT_T *out_val) { + if (tensor.numel() != 1) { + return false; + } +#define CASE_INT_DTYPE(TENSOR_CTYPE, TENSOR_DTYPE) \ + case executorch::aten::ScalarType::TENSOR_DTYPE: { \ + const TENSOR_CTYPE val = tensor.const_data_ptr()[0]; \ + if (val < std::numeric_limits::lowest() || \ + val > std::numeric_limits::max()) { \ + return false; \ + } \ + *out_val = static_cast(val); \ + return true; \ + } + + switch (tensor.scalar_type()) { + ET_FORALL_INT_TYPES(CASE_INT_DTYPE); + default: + return false; + } +#undef CASE_INT_DTYPE +} + +/** + * Extracts a floating point value from a scalar Tensor. + * + * @param[in] tensor The source of the value to extract. + * @param[out] out_val The extracted value, on success. + * @returns `true` if a value was extracted, and sets `*out_val` to that + * value. `false` if a value could not be extracted: either it was not a + * floating point Scalar Tensor, or the value of that Scalar Tensor could not + * be represented by FLOAT_T. + */ +template || + std::is_same_v || + std::is_same_v, + bool>::type = true> +bool extract_scalar_tensor(executorch::aten::Tensor tensor, FLOAT_T *out_val) { + if (tensor.numel() != 1) { + return false; + } +#define CASE_REAL_DTYPE(TENSOR_CTYPE, TENSOR_DTYPE) \ + case executorch::aten::ScalarType::TENSOR_DTYPE: { \ + /* ET_FORALL_REAL_TYPES guarantees TENSOR_CTYPE is a real type. */ \ + double val = \ + static_cast(tensor.const_data_ptr()[0]); \ + if (std::isfinite(val) && (val < std::numeric_limits::lowest() || \ + val > std::numeric_limits::max())) { \ + return false; \ + } \ + *out_val = static_cast(val); \ + return true; \ + } + + switch (tensor.scalar_type()) { + ET_FORALL_REALHBF16_TYPES(CASE_REAL_DTYPE); + default: + return false; + } +#undef CASE_REAL_DTYPE +} + +/** + * Extracts a boolean value from a Scalar. + * + * @param[in] scalar The source of the value to extract. + * @param[out] out_val The extracted value, on success. + * @returns `true` if a value was extracted, and sets `*out_val` to that + * value. `false` if a value could not be extracted, i.e. not a boolean + */ +template ::value, + bool>::type = true> +bool extract_scalar_tensor(executorch::aten::Tensor tensor, BOOL_T *out_val) { + if (tensor.scalar_type() != executorch::aten::ScalarType::Bool) { + return false; + } + if (tensor.numel() != 1) { + return false; + } + + bool val = tensor.const_data_ptr()[0]; + + *out_val = static_cast(val); + + return true; +} + +/// These APIs should not be used outside of Executor.cpp. +namespace internal { +/** + * Share t_src's data_ptr with t_dst. + */ +ET_NODISCARD Error share_tensor_data(const executorch::aten::Tensor &t_dst, + const executorch::aten::Tensor &t_src); + +/** + * Copy t_src's data_ptr to t_dst. + */ +ET_NODISCARD Error copy_tensor_data(const executorch::aten::Tensor &t_dst, + const executorch::aten::Tensor &t_src); + +/** + * Set the data_ptr of t to buffer. + */ +ET_NODISCARD Error set_tensor_data(const executorch::aten::Tensor &t, + void *buffer, size_t buffer_size); + +/** + * Reset tensor's data_ptr, clear all the storage for at::Tensor. + */ +void reset_data_ptr(const executorch::aten::Tensor &tensor); + +/** + * Resize tensor impl + */ +ET_NODISCARD Error resize_tensor_impl( + executorch::aten::TensorImpl *impl, + executorch::aten::ArrayRef new_sizes); + +} // namespace internal + +/** + * Resize a tensor to new_sizes, rank must stay the same. Currently does not + * expand the tensor if new size exceeds the current capacity. Currently + * fails an ET_CHECK if the tensor cannot be resized. + * + * WARNING: Placeholder API until discussion around runtime context is + * settled, will likely move to be a class method on a TensorResizer object + * passed in through runtimeContext. + */ +ET_NODISCARD inline Error resize_tensor( + executorch::aten::Tensor t, + executorch::aten::ArrayRef new_sizes) { + return internal::resize_tensor_impl(t.unsafeGetTensorImpl(), new_sizes); +} + +/** + * Resize a tensor to new_sizes, rank must stay the same. Currently does not + * expand the tensor if new size exceeds the current capacity. Currently + * fails an ET_CHECK if the tensor cannot be resized. + * + * WARNING: Placeholder API until discussion around runtime context is + * settled, will likely move to be a class method on a TensorResizer object + * passed in through runtimeContext. + */ +template ::value, + int>::type = 0> +ET_NODISCARD inline Error +resize_tensor(executorch::aten::Tensor t, + executorch::aten::ArrayRef new_sizes) { + // Need to cast the input array to an array of Tensor::SizesType + std::array + new_sizes_casted{}; + size_t new_sizes_ndim = new_sizes.size(); + for (size_t i = 0; i < new_sizes_ndim; ++i) { + new_sizes_casted[i] = + static_cast(new_sizes[i]); + } + + return internal::resize_tensor_impl( + t.unsafeGetTensorImpl(), {new_sizes_casted.data(), new_sizes_ndim}); +} + +/// DEPRECATED: Use `resize_tensor()` instead, which can fail non-fatally. +ET_DEPRECATED inline void +resize(executorch::aten::Tensor t, + executorch::aten::ArrayRef new_sizes) { + Error err = resize_tensor(t, new_sizes); + ET_CHECK_MSG(err == Error::Ok, + "Could not resize Tensor; see logs for details"); +} +/** + * Get dim_order of a Tensor and write it to out_dim_order. + * @param tensor The tensor where we want to get dim order from. + * @param out_dim_order Pointing to an array of DimOrderType where we write + * dim order into it. + * @param out_dim_order_size Size of the DimOrderType array. + */ +ET_NODISCARD Error get_dim_order(const executorch::aten::Tensor &tensor, + executorch::aten::DimOrderType *out_dim_order, + size_t out_dim_order_size); + +/** + * Checks whether a tensor has a valid dim order. If the dim order could not + * be determined, then this function returns false by default. + */ +bool tensor_has_valid_dim_order(executorch::aten::Tensor t); + +/** + * Checks whether a tensor has either the default of channels last dim order. + * If the dim order could not be determined, then this function returns false + * by default. + */ +bool tensor_is_default_or_channels_last_dim_order(executorch::aten::Tensor t); + +/** + * Checks whether a tensor has the default dimension order. + * Logs an error message if the tensor does not meet the expected criteria. + * + * @param t The tensor to check the dimension order of. + * @return True if the tensor has the default dimension order, false otherwise. + */ +bool tensor_is_default_dim_order(executorch::aten::Tensor t); + +/** + * Checks whether a tensor has the channels last dimension order. + * Logs an error message if the tensor does not meet the expected criteria. + * + * @param t The tensor to check the dimension order of. + * @return True if the tensor has the channels last dimension order, false + * otherwise. + */ +bool tensor_is_channels_last_dim_order(executorch::aten::Tensor t); + +/** + * Asserts that four tensors have the same dim_order + * + * Note that this macro only tests dim order, but not others like actual data, + * sizes, etc. + * + */ +bool tensors_have_same_dim_order( + const executorch::aten::ArrayRef tensor_list); + +/** + * Asserts that two tensors have the same dim_order + * + * Note that this macro only tests dim order, but not others like actual data, + * sizes, etc. + */ + +inline bool tensors_have_same_dim_order(const executorch::aten::Tensor &a, + const executorch::aten::Tensor &b) { + executorch::aten::Tensor tensor_list[2] = {a, b}; + return tensors_have_same_dim_order(tensor_list); +} + +/** + * Asserts that three tensors have the same dim_order + * + * Note that this macro only tests dim order, but not others like actual data, + * sizes, etc. + * + */ + +inline bool tensors_have_same_dim_order(const executorch::aten::Tensor &a, + const executorch::aten::Tensor &b, + const executorch::aten::Tensor &c) { + executorch::aten::Tensor tensor_list[3] = {a, b, c}; + return tensors_have_same_dim_order(tensor_list); +} + +/** + * Asserts that four tensors have the same dim_order + * + * Note that this macro only tests dim order, but not others like actual data, + * sizes, etc. + * + */ + +inline bool tensors_have_same_dim_order(const executorch::aten::Tensor &a, + const executorch::aten::Tensor &b, + const executorch::aten::Tensor &c, + const executorch::aten::Tensor &d) { + executorch::aten::Tensor tensor_list[4] = {a, b, c, d}; + return tensors_have_same_dim_order(tensor_list); +} + +/** + * Given an n-dimensional coordinate array and an array of tensor strides, + * calculates the linear index that can be used to retrieve the value at the + * given coordinates. + * @param coordinate Pointer to the array of coordinates. + * @param strides Pointer to the array of strides. + * @param ndim Number of dimensions in the tensor. + */ +inline size_t +calculate_linear_index(const executorch::aten::SizesType *coordinate, + const executorch::aten::StridesType *strides, + const size_t ndim) { + size_t index = 0; + for (size_t i = 0; i < ndim; i++) { + index += coordinate[i] * strides[i]; + } + return index; +} + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::calculate_linear_index; +using ::executorch::runtime::coordinateToIndex; +using ::executorch::runtime::dim_is_valid; +using ::executorch::runtime::extract_scalar_tensor; +using ::executorch::runtime::get_dim_order; +using ::executorch::runtime::getLeadingDims; +using ::executorch::runtime::getTrailingDims; +using ::executorch::runtime::indexToCoordinate; +using ::executorch::runtime::kTensorDimensionLimit; +using ::executorch::runtime::nonempty_size; +using ::executorch::runtime::nonzero_dim; +using ::executorch::runtime::resize; +using ::executorch::runtime::resize_tensor; +using ::executorch::runtime::tensor_can_cast_to; +using ::executorch::runtime::tensor_dim_has_index; +using ::executorch::runtime::tensor_has_dim; +using ::executorch::runtime::tensor_has_expected_size; +using ::executorch::runtime::tensor_has_non_empty_dim; +using ::executorch::runtime::tensor_has_rank_greater_or_equal_to; +using ::executorch::runtime::tensor_has_rank_smaller_or_equal_to; +using ::executorch::runtime::tensor_has_valid_dim_order; +using ::executorch::runtime::tensor_is_bits_type; +using ::executorch::runtime::tensor_is_bool_type; +using ::executorch::runtime::tensor_is_complex_type; +using ::executorch::runtime::tensor_is_contiguous; +using ::executorch::runtime::tensor_is_default_dim_order; +using ::executorch::runtime::tensor_is_default_or_channels_last_dim_order; +using ::executorch::runtime::tensor_is_floating_type; +using ::executorch::runtime::tensor_is_integral_type; +using ::executorch::runtime::tensor_is_rank; +using ::executorch::runtime::tensor_is_real_type; +using ::executorch::runtime::tensor_is_realh_type; +using ::executorch::runtime::tensor_is_realhb_type; +using ::executorch::runtime::tensor_is_scalar; +using ::executorch::runtime::tensors_have_same_dim_order; +using ::executorch::runtime::tensors_have_same_dtype; +using ::executorch::runtime::tensors_have_same_rank; +using ::executorch::runtime::tensors_have_same_shape; +using ::executorch::runtime::tensors_have_same_shape_and_dtype; +using ::executorch::runtime::tensors_have_same_size_at_dims; +using ::executorch::runtime::tensors_have_same_strides; +namespace internal { +using ::executorch::runtime::internal::copy_tensor_data; +using ::executorch::runtime::internal::reset_data_ptr; +using ::executorch::runtime::internal::resize_tensor_impl; +using ::executorch::runtime::internal::set_tensor_data; +using ::executorch::runtime::internal::share_tensor_data; +} // namespace internal +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/freeable_buffer.h b/third-party/include/executorch/runtime/core/freeable_buffer.h new file mode 100644 index 000000000..09c5efca8 --- /dev/null +++ b/third-party/include/executorch/runtime/core/freeable_buffer.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { + +/** + * A read-only buffer than can be freed. + */ +class FreeableBuffer final { +public: + // Callback signature for the function that does the freeing. + using FreeFn = void (*)(void *context, void *data, size_t size); + + /** + * Creates an empty FreeableBuffer with size zero and a null data pointer. + */ + FreeableBuffer() + : free_fn_(nullptr), free_fn_context_(nullptr), data_(nullptr), size_(0) { + } + + /** + * Creates a FreeableBuffer with an optional free function. + * + * @param[in] data The data of the segment. + * @param[in] size The size of the segment data, in bytes. + * @param[in] free_fn Optional function to free the data. Guaranteed to be + * called exactly once before the FreeableBuffer is destroyed. May be + * nullptr. NOTE: This function must be thread-safe. If it modifies common + * state, the function must do its own locking. + * @param[in] free_fn_context Opaque pointer to pass as the `context` + * parameter of `free_fn`. May be nullptr. + */ + FreeableBuffer(const void *data, size_t size, FreeFn free_fn, + void *free_fn_context = nullptr) + : free_fn_(free_fn), free_fn_context_(free_fn_context), data_(data), + size_(size) {} + + /** + * Move ctor. Takes the ownership of the data previously owned by `rhs`, + * leaving `rhs` pointing to nullptr. + */ + FreeableBuffer(FreeableBuffer &&rhs) noexcept + : free_fn_(rhs.free_fn_), free_fn_context_(rhs.free_fn_context_), + data_(rhs.data_), size_(rhs.size_) { + rhs.free_fn_ = nullptr; + rhs.free_fn_context_ = nullptr; + rhs.data_ = nullptr; + rhs.size_ = 0; + } + + ~FreeableBuffer() { Free(); } + + /** + * Frees the data if not already free. Safe to call multiple times. + */ + void Free() { + if (data_ != nullptr) { + if (free_fn_ != nullptr) { + free_fn_(free_fn_context_, const_cast(data_), size_); + } + data_ = nullptr; + size_ = 0; + } + } + + /** + * Size of the data in bytes. Returns 0 if the data has been freed. + */ + size_t size() const { return size_; } + + /** + * Pointer to the data. Returns nullptr if the data has been freed. + */ + const void *data() const { return data_; } + +private: + // Delete other rule-of-five methods. + FreeableBuffer(const FreeableBuffer &rhs) = delete; + FreeableBuffer &operator=(FreeableBuffer &&rhs) noexcept = delete; + FreeableBuffer &operator=(const FreeableBuffer &rhs) = delete; + + FreeFn free_fn_; + void *free_fn_context_; + const void *data_; + size_t size_; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::FreeableBuffer; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/hierarchical_allocator.h b/third-party/include/executorch/runtime/core/hierarchical_allocator.h new file mode 100644 index 000000000..279934d48 --- /dev/null +++ b/third-party/include/executorch/runtime/core/hierarchical_allocator.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace executorch { +namespace runtime { + +/** + * A group of buffers that can be used to represent a device's memory hierarchy. + */ +class HierarchicalAllocator final { +public: + /** + * Constructs a new hierarchical allocator with the given array of buffers. + * + * - Memory IDs are based on the index into `buffers`: `buffers[N]` will have + * a memory ID of `N`. + * - `buffers.size()` must be >= `MethodMeta::num_non_const_buffers()`. + * - `buffers[N].size()` must be >= `MethodMeta::non_const_buffer_size(N)`. + */ + explicit HierarchicalAllocator(Span> buffers) + : buffers_(buffers) {} + + /** + * DEPRECATED: Use spans instead. + */ + ET_DEPRECATED HierarchicalAllocator(uint32_t n_allocators, + MemoryAllocator *allocators) + : buffers_(to_spans(n_allocators, allocators)) {} + + /** + * Returns the address at the byte offset `offset_bytes` from the given + * buffer's base address, which points to at least `size_bytes` of memory. + * + * @param[in] memory_id The ID of the buffer in the hierarchy. + * @param[in] offset_bytes The offset in bytes into the specified buffer. + * @param[in] size_bytes The amount of memory that should be available at + * the offset. + * + * @returns On success, the address of the requested byte offset into the + * specified buffer. On failure, a non-Ok Error. + */ + ET_NODISCARD Result get_offset_address(uint32_t memory_id, + size_t offset_bytes, + size_t size_bytes) { + ET_CHECK_OR_RETURN_ERROR(memory_id < buffers_.size(), InvalidArgument, + "id %" PRIu32 " >= %" ET_PRIsize_t, memory_id, + buffers_.size()); + Span buffer = buffers_[memory_id]; + ET_CHECK_OR_RETURN_ERROR( + offset_bytes + size_bytes <= buffer.size(), MemoryAllocationFailed, + "offset_bytes (%" ET_PRIsize_t ") + size_bytes (%" ET_PRIsize_t + ") >= allocator size (%" ET_PRIsize_t ") " + "for memory_id %" PRIu32, + offset_bytes, size_bytes, buffer.size(), memory_id); + return buffer.data() + offset_bytes; + } + +private: + // TODO(T162089316): Remove the span array and to_spans once all users move to + // spans. This array is necessary to hold the pointers and sizes that were + // originally provided as MemoryAllocator instances. + static constexpr size_t kSpanArraySize = 16; + // NOTE: span_array_ must be declared before buffers_ so that it isn't + // re-initialized to zeros after initializing buffers_. + Span span_array_[kSpanArraySize]; + Span> to_spans(uint32_t n_allocators, + MemoryAllocator *allocators) { + ET_CHECK_MSG(n_allocators <= kSpanArraySize, + "n_allocators %" PRIu32 " > %zu", n_allocators, + kSpanArraySize); + for (const auto i : c10::irange(n_allocators)) { + span_array_[i] = + Span(allocators[i].base_address(), allocators[i].size()); + } + return {span_array_, n_allocators}; + } + + /// The underlying buffers. + Span> buffers_; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::HierarchicalAllocator; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/memory_allocator.h b/third-party/include/executorch/runtime/core/memory_allocator.h new file mode 100644 index 000000000..256df7307 --- /dev/null +++ b/third-party/include/executorch/runtime/core/memory_allocator.h @@ -0,0 +1,198 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace executorch { +namespace runtime { + +/** + * A class that does simple allocation based on a size and returns the pointer + * to the memory address. It bookmarks a buffer with certain size. The + * allocation is simply checking space and growing the cur_ pointer with each + * allocation request. + * + * Simple example: + * + * // User allocates a 100 byte long memory in the heap. + * uint8_t* memory_pool = malloc(100 * sizeof(uint8_t)); + * MemoryAllocator allocator(100, memory_pool) + * // Pass allocator object in the Executor + * + * Underneath the hood, ExecuTorch will call + * allocator.allocate() to keep iterating cur_ pointer + */ +class MemoryAllocator { +public: + /** + * Default alignment of memory returned by this class. Ensures that pointer + * fields of structs will be aligned. Larger types like `long double` may not + * be, however, depending on the toolchain and architecture. + */ + static constexpr size_t kDefaultAlignment = alignof(void *); + + /** + * Constructs a new memory allocator of a given `size`, starting at the + * provided `base_address`. + * + * @param[in] size The size in bytes of the buffer at `base_address`. + * @param[in] base_address The buffer to allocate from. Does not take + * ownership of this buffer, so it must be valid for the lifetime of of + * the MemoryAllocator. + */ + MemoryAllocator(uint32_t size, uint8_t *base_address) + : begin_(base_address), end_(base_address + size), cur_(base_address), + size_(size) {} + + /** + * Allocates `size` bytes of memory. + * + * @param[in] size Number of bytes to allocate. + * @param[in] alignment Minimum alignment for the returned pointer. Must be a + * power of 2. + * + * @returns Aligned pointer to the allocated memory on success. + * @retval nullptr Not enough memory, or `alignment` was not a power of 2. + */ + virtual void *allocate(size_t size, size_t alignment = kDefaultAlignment) { + if (!isPowerOf2(alignment)) { + ET_LOG(Error, "Alignment %zu is not a power of 2", alignment); + return nullptr; + } + + // The allocation will occupy [start, end), where the start is the next + // position that's a multiple of alignment. + uint8_t *start = alignPointer(cur_, alignment); + uint8_t *end = start + size; + + // If the end of this allocation exceeds the end of this allocator, print + // error messages and return nullptr + if (end > end_) { + ET_LOG(Error, + "Memory allocation failed: %zuB requested (adjusted for " + "alignment), %zuB available", + static_cast(end - cur_), static_cast(end_ - cur_)); + return nullptr; + } + + // Otherwise, record how many bytes were used, advance cur_ to the new end, + // and then return start. Note that the number of bytes used is (end - cur_) + // instead of (end - start) because start > cur_ if there is a misalignment + EXECUTORCH_TRACK_ALLOCATION(prof_id_, end - cur_); + cur_ = end; + return static_cast(start); + } + + /** + * Allocates a buffer large enough for an instance of type T. Note that the + * memory will not be initialized. + * + * Example: + * @code + * auto p = memory_allocator->allocateInstance(); + * @endcode + * + * @param[in] alignment Minimum alignment for the returned pointer. Must be a + * power of 2. Defaults to the natural alignment of T. + * + * @returns Aligned pointer to the allocated memory on success. + * @retval nullptr Not enough memory, or `alignment` was not a power of 2. + */ + template T *allocateInstance(size_t alignment = alignof(T)) { + return static_cast(this->allocate(sizeof(T), alignment)); + } + + /** + * Allocates `size` number of chunks of type T, where each chunk is of size + * equal to sizeof(T) bytes. + * + * @param[in] size Number of memory chunks to allocate. + * @param[in] alignment Minimum alignment for the returned pointer. Must be a + * power of 2. Defaults to the natural alignment of T. + * + * @returns Aligned pointer to the allocated memory on success. + * @retval nullptr Not enough memory, or `alignment` was not a power of 2. + */ + template + T *allocateList(size_t size, size_t alignment = alignof(T)) { + // Some users of this method allocate lists of pointers, causing the next + // line to expand to `sizeof(type *)`, which triggers a clang-tidy warning. + // NOLINTNEXTLINE(bugprone-sizeof-expression) + return static_cast(this->allocate(size * sizeof(T), alignment)); + } + + // Returns the allocator memory's base address. + virtual uint8_t *base_address() const { return begin_; } + + // Returns the total size of the allocator's memory buffer. + virtual uint32_t size() const { return size_; } + + // Resets the current pointer to the base address. It does nothing to + // the contents. + virtual void reset() { cur_ = begin_; } + + void enable_profiling(ET_UNUSED const char *name) { + prof_id_ = EXECUTORCH_TRACK_ALLOCATOR(name); + } + + virtual ~MemoryAllocator() {} + +protected: + /** + * Returns the profiler ID for this allocator. + */ + int32_t prof_id() const { return prof_id_; } + + /** + * Returns true if the value is an integer power of 2. + */ + static bool isPowerOf2(size_t value) { + return value > 0 && (value & ~(value - 1)) == value; + } + + /** + * Returns the next alignment for a given pointer. + */ + static uint8_t *alignPointer(void *ptr, size_t alignment) { + intptr_t addr = reinterpret_cast(ptr); + if ((addr & (alignment - 1)) == 0) { + // Already aligned. + return reinterpret_cast(ptr); + } + addr = (addr | (alignment - 1)) + 1; + return reinterpret_cast(addr); + } + +private: + uint8_t *const begin_; + uint8_t *const end_; + uint8_t *cur_; + uint32_t const size_; + int32_t prof_id_ = -1; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::MemoryAllocator; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/named_data_map.h b/third-party/include/executorch/runtime/core/named_data_map.h new file mode 100644 index 000000000..48a311cf2 --- /dev/null +++ b/third-party/include/executorch/runtime/core/named_data_map.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#ifdef __GNUC__ +// Disable -Wdeprecated-declarations, as some builds use 'Werror'. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + +#include +#include +#include +#include +#include +#include + +namespace executorch { +namespace runtime { + +/** + * Interface to access and retrieve data via name. + * See executorch/extension/flat_tensor/ for an example. + */ +class ET_EXPERIMENTAL NamedDataMap { +public: + virtual ~NamedDataMap() = default; + /** + * Get metadata by key. + * + * @param key The name of the tensor. + * @return Result containing TensorLayout with tensor metadata. + */ + ET_NODISCARD virtual Result + get_metadata(const char *key) const = 0; + /** + * Get data by key. + * + * @param key Name of the data. + * @return Result containing a FreeableBuffer with the tensor data. + */ + ET_NODISCARD virtual Result + get_data(const char *key) const = 0; + + /** + * Loads data corresponding to the key into the provided buffer. + * + * @param key The name of the data. + * @param size The number of bytes to load. Use `get_metadata` to retrieve the + * size of the data for a given key. + * @param buffer The buffer to load the data into. Must point to at least + * `size` bytes of memory. + * @returns an Error indicating if the load was successful. + */ + ET_NODISCARD virtual Error load_data_into(const char *key, void *buffer, + size_t size) const = 0; + + /** + * Get the number of keys in the NamedDataMap. + * + * @return Result containing the number of keys. + */ + ET_NODISCARD virtual Result get_num_keys() const = 0; + + /** + * Get the key at the given index. + * + * @param index The index of the key to retrieve. + * @return Result containing the key at the given index. Note: the returned + * pointer is only valid for the lifetime of the DataMap. + */ + ET_NODISCARD virtual Result get_key(size_t index) const = 0; +}; + +} // namespace runtime +} // namespace executorch + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif diff --git a/third-party/include/executorch/runtime/core/portable_type/bfloat16.h b/third-party/include/executorch/runtime/core/portable_type/bfloat16.h new file mode 100644 index 000000000..233d57147 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/bfloat16.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch::runtime::etensor { +using c10::BFloat16; +namespace internal { +using c10::detail::f32_from_bits; +using c10::detail::round_to_nearest_even; +} // namespace internal +} // namespace executorch::runtime::etensor + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::BFloat16; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/bfloat16_math.h b/third-party/include/executorch/runtime/core/portable_type/bfloat16_math.h new file mode 100644 index 000000000..3f6bf14a4 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/bfloat16_math.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include + +#include diff --git a/third-party/include/executorch/runtime/core/portable_type/bits_types.h b/third-party/include/executorch/runtime/core/portable_type/bits_types.h new file mode 100644 index 000000000..cddffc485 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/bits_types.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +/** + * bits1x8 is an uninterpreted dtype of a tensor with 1 bit (packed to byte + * boundary), without any semantics defined. + */ +struct alignas(1) bits1x8 { + using underlying = uint8_t; + uint8_t val_; + bits1x8() = default; + explicit bits1x8(uint8_t val) : val_(val) {} +}; + +/** + * bits2x4 is an uninterpreted dtype of a tensor with 2 bits (packed to byte + * boundary), without any semantics defined. + */ +struct alignas(1) bits2x4 { + using underlying = uint8_t; + uint8_t val_; + bits2x4() = default; + explicit bits2x4(uint8_t val) : val_(val) {} +}; + +/** + * bits4x2 is an uninterpreted dtype of a tensor with 4 bits (packed to byte + * boundary), without any semantics defined. + */ +struct alignas(1) bits4x2 { + using underlying = uint8_t; + uint8_t val_; + bits4x2() = default; + explicit bits4x2(uint8_t val) : val_(val) {} +}; + +/** + * bits8 is an uninterpreted dtype of a tensor with 8 bits, without any + * semantics defined. + */ +struct alignas(1) bits8 { + uint8_t val_; + bits8() = default; + explicit bits8(uint8_t val) : val_(val) {} +}; + +/** + * bits16 is an uninterpreted dtype of a tensor with 16 bits, without any + * semantics defined. + */ +struct alignas(2) bits16 { + uint16_t val_; + bits16() = default; + explicit bits16(uint16_t val) : val_(val) {} +}; + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::bits16; +using ::executorch::runtime::etensor::bits1x8; +using ::executorch::runtime::etensor::bits2x4; +using ::executorch::runtime::etensor::bits4x2; +using ::executorch::runtime::etensor::bits8; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/macros/Export.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/macros/Export.h new file mode 100644 index 000000000..771c869ae --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/macros/Export.h @@ -0,0 +1,163 @@ +#define C10_USING_CUSTOM_GENERATED_MACROS +#ifndef C10_MACROS_EXPORT_H_ +#define C10_MACROS_EXPORT_H_ + +/* Header file to define the common scaffolding for exported symbols. + * + * Export is by itself a quite tricky situation to deal with, and if you are + * hitting this file, make sure you start with the background here: + * - Linux: https://gcc.gnu.org/wiki/Visibility + * - Windows: + * https://docs.microsoft.com/en-us/cpp/cpp/dllexport-dllimport?view=vs-2017 + * + * Do NOT include this file directly. Instead, use c10/macros/Macros.h + */ + +// You do not need to edit this part of file unless you are changing the core +// pytorch export abstractions. +// +// This part defines the C10 core export and import macros. This is controlled +// by whether we are building shared libraries or not, which is determined +// during build time and codified in c10/core/cmake_macros.h. +// When the library is built as a shared lib, EXPORT and IMPORT will contain +// visibility attributes. If it is being built as a static lib, then EXPORT +// and IMPORT basically have no effect. + +// As a rule of thumb, you should almost NEVER mix static and shared builds for +// libraries that depend on c10. AKA, if c10 is built as a static library, we +// recommend everything dependent on c10 to be built statically. If c10 is built +// as a shared library, everything dependent on it should be built as shared. In +// the PyTorch project, all native libraries shall use the macro +// C10_BUILD_SHARED_LIB to check whether pytorch is building shared or static +// libraries. + +// For build systems that do not directly depend on CMake and directly build +// from the source directory (such as Buck), one may not have a cmake_macros.h +// file at all. In this case, the build system is responsible for providing +// correct macro definitions corresponding to the cmake_macros.h.in file. +// +// In such scenarios, one should define the macro +// C10_USING_CUSTOM_GENERATED_MACROS +// to inform this header that it does not need to include the cmake_macros.h +// file. + +#ifndef C10_USING_CUSTOM_GENERATED_MACROS +#include +#endif // C10_USING_CUSTOM_GENERATED_MACROS + +#ifdef _WIN32 +#define C10_HIDDEN +#if defined(C10_BUILD_SHARED_LIBS) +#define C10_EXPORT __declspec(dllexport) +#define C10_IMPORT __declspec(dllimport) +#else +#define C10_EXPORT +#define C10_IMPORT +#endif +#else // _WIN32 +#if defined(__GNUC__) +#define C10_EXPORT __attribute__((__visibility__("default"))) +#define C10_HIDDEN __attribute__((__visibility__("hidden"))) +#else // defined(__GNUC__) +#define C10_EXPORT +#define C10_HIDDEN +#endif // defined(__GNUC__) +#define C10_IMPORT C10_EXPORT +#endif // _WIN32 + +#ifdef NO_EXPORT +#undef C10_EXPORT +#define C10_EXPORT +#endif + +// Definition of an adaptive XX_API macro, that depends on whether you are +// building the library itself or not, routes to XX_EXPORT and XX_IMPORT. +// Basically, you will need to do this for each shared library that you are +// building, and the instruction is as follows: assuming that you are building +// a library called libawesome.so. You should: +// (1) for your cmake target (usually done by "add_library(awesome, ...)"), +// define a macro called AWESOME_BUILD_MAIN_LIB using +// target_compile_options. +// (2) define the AWESOME_API macro similar to the one below. +// And in the source file of your awesome library, use AWESOME_API to +// annotate public symbols. + +// Here, for the C10 library, we will define the macro C10_API for both import +// and export. + +// This one is being used by libc10.so +#ifdef C10_BUILD_MAIN_LIB +#define C10_API C10_EXPORT +#else +#define C10_API C10_IMPORT +#endif + +// This one is being used by libtorch.so +#ifdef CAFFE2_BUILD_MAIN_LIB +#define TORCH_API C10_EXPORT +#else +#define TORCH_API C10_IMPORT +#endif + +// You may be wondering: Whose brilliant idea was it to split torch_cuda into +// two pieces with confusing names? +// Once upon a time, there _was_ only TORCH_CUDA_API. All was happy until we +// tried to compile PyTorch for CUDA 11.1, which ran into relocation marker +// issues when linking big binaries. +// (https://github.com/pytorch/pytorch/issues/39968) We had two choices: +// (1) Stop supporting so many GPU architectures +// (2) Do something else +// We chose #2 and decided to split the behemoth that was torch_cuda into two +// smaller libraries, one with most of the core kernel functions (torch_cuda_cu) +// and the other that had..well..everything else (torch_cuda_cpp). The idea was +// this: instead of linking our static libraries (like the hefty +// libcudnn_static.a) with another huge library, torch_cuda, and run into pesky +// relocation marker issues, we could link our static libraries to a smaller +// part of torch_cuda (torch_cuda_cpp) and avoid the issues. + +// libtorch_cuda_cu.so +#ifdef TORCH_CUDA_CU_BUILD_MAIN_LIB +#define TORCH_CUDA_CU_API C10_EXPORT +#elif defined(BUILD_SPLIT_CUDA) +#define TORCH_CUDA_CU_API C10_IMPORT +#endif + +// libtorch_cuda_cpp.so +#ifdef TORCH_CUDA_CPP_BUILD_MAIN_LIB +#define TORCH_CUDA_CPP_API C10_EXPORT +#elif defined(BUILD_SPLIT_CUDA) +#define TORCH_CUDA_CPP_API C10_IMPORT +#endif + +// libtorch_cuda.so (where torch_cuda_cu and torch_cuda_cpp are a part of the +// same api) +#ifdef TORCH_CUDA_BUILD_MAIN_LIB +#define TORCH_CUDA_CPP_API C10_EXPORT +#define TORCH_CUDA_CU_API C10_EXPORT +#elif !defined(BUILD_SPLIT_CUDA) +#define TORCH_CUDA_CPP_API C10_IMPORT +#define TORCH_CUDA_CU_API C10_IMPORT +#endif + +#if defined(TORCH_HIP_BUILD_MAIN_LIB) +#define TORCH_HIP_CPP_API C10_EXPORT +#define TORCH_HIP_API C10_EXPORT +#else +#define TORCH_HIP_CPP_API C10_IMPORT +#define TORCH_HIP_API C10_IMPORT +#endif + +#if defined(TORCH_XPU_BUILD_MAIN_LIB) +#define TORCH_XPU_API C10_EXPORT +#else +#define TORCH_XPU_API C10_IMPORT +#endif + +// Enums only need to be exported on windows for non-CUDA files +#if defined(_WIN32) && defined(__CUDACC__) +#define C10_API_ENUM C10_API +#else +#define C10_API_ENUM +#endif + +#endif // C10_MACROS_MACROS_H_ diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/macros/Macros.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/macros/Macros.h new file mode 100644 index 000000000..d46e2a369 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/macros/Macros.h @@ -0,0 +1,497 @@ +#define C10_USING_CUSTOM_GENERATED_MACROS +#ifndef C10_MACROS_MACROS_H_ +#define C10_MACROS_MACROS_H_ +#include + +/* Main entry for c10/macros. + * + * In your code, include c10/macros/Macros.h directly, instead of individual + * files in this folder. + */ + +// For build systems that do not directly depend on CMake and directly build +// from the source directory (such as Buck), one may not have a cmake_macros.h +// file at all. In this case, the build system is responsible for providing +// correct macro definitions corresponding to the cmake_macros.h.in file. +// +// In such scenarios, one should define the macro +// C10_USING_CUSTOM_GENERATED_MACROS +// to inform this header that it does not need to include the cmake_macros.h +// file. + +#ifndef C10_USING_CUSTOM_GENERATED_MACROS +#include +#endif // C10_USING_CUSTOM_GENERATED_MACROS + +#include + +#if defined(__clang__) +#define __ubsan_ignore_float_divide_by_zero__ \ + __attribute__((no_sanitize("float-divide-by-zero"))) +#define __ubsan_ignore_undefined__ __attribute__((no_sanitize("undefined"))) +#define __ubsan_ignore_signed_int_overflow__ \ + __attribute__((no_sanitize("signed-integer-overflow"))) +#define __ubsan_ignore_pointer_overflow__ \ + __attribute__((no_sanitize("pointer-overflow"))) +#define __ubsan_ignore_function__ __attribute__((no_sanitize("function"))) +#define __ubsan_ignore_float_cast_overflow__ \ + __attribute__((no_sanitize("float-cast-overflow"))) +#else +#define __ubsan_ignore_float_divide_by_zero__ +#define __ubsan_ignore_undefined__ +#define __ubsan_ignore_signed_int_overflow__ +#define __ubsan_ignore_pointer_overflow__ +#define __ubsan_ignore_function__ +#define __ubsan_ignore_float_cast_overflow__ +#endif + +// Detect address sanitizer as some stuff doesn't work with it +#undef C10_ASAN_ENABLED + +// for clang +#if defined(__has_feature) +#if ((__has_feature(address_sanitizer))) +#define C10_ASAN_ENABLED 1 +#endif +#endif + +// for gcc +#if defined(__SANITIZE_ADDRESS__) +#if __SANITIZE_ADDRESS__ +#if !defined(C10_ASAN_ENABLED) +#define C10_ASAN_ENABLED 1 +#endif +#endif +#endif + +#if !defined(C10_ASAN_ENABLED) +#define C10_ASAN_ENABLED 0 +#endif + +// Detect undefined-behavior sanitizer (UBSAN) +#undef C10_UBSAN_ENABLED + +// for clang or gcc >= 14 +// NB: gcc 14 adds support for Clang's __has_feature +// https://gcc.gnu.org/gcc-14/changes.html +// gcc < 14 doesn't have a macro for UBSAN +// (e.g. __SANITIZE_UNDEFINED__ does not exist in gcc) +// https://github.com/google/sanitizers/issues/765 +#if defined(__has_feature) +#if ((__has_feature(undefined_behavior_sanitizer))) +#define C10_UBSAN_ENABLED 1 +#endif +#endif + +#if !defined(C10_UBSAN_ENABLED) +#define C10_UBSAN_ENABLED 0 +#endif + +// Disable the copy and assignment operator for a class. Note that this will +// disable the usage of the class in std containers. +#define C10_DISABLE_COPY_AND_ASSIGN(classname) \ + classname(const classname &) = delete; \ + classname &operator=(const classname &) = delete + +#define C10_CONCATENATE_IMPL(s1, s2) s1##s2 +#define C10_CONCATENATE(s1, s2) C10_CONCATENATE_IMPL(s1, s2) + +#define C10_MACRO_EXPAND(args) args + +#define C10_STRINGIZE_IMPL(x) #x +#define C10_STRINGIZE(x) C10_STRINGIZE_IMPL(x) + +/** + * C10_ANONYMOUS_VARIABLE(str) introduces a new identifier which starts with + * str and ends with a unique number. + */ +#ifdef __COUNTER__ +#define C10_UID __COUNTER__ +#define C10_ANONYMOUS_VARIABLE(str) C10_CONCATENATE(str, __COUNTER__) +#else +#define C10_UID __LINE__ +#define C10_ANONYMOUS_VARIABLE(str) C10_CONCATENATE(str, __LINE__) +#endif + +#ifdef __has_cpp_attribute +#define C10_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +#define C10_HAS_CPP_ATTRIBUTE(x) (0) +#endif + +#ifndef FBCODE_CAFFE2 +/// DEPRECATED: Warn if a type or return value is discarded. +#define C10_NODISCARD [[nodiscard]] + +/// DEPRECATED: Suppress an unused variable. +#define C10_UNUSED [[maybe_unused]] +#endif + +#if !defined(__has_attribute) +#define __has_attribute(x) 0 +#endif + +// Direct port of LLVM_ATTRIBUTE_USED. +#if __has_attribute(used) +#define C10_USED __attribute__((__used__)) +#else +#define C10_USED +#endif + +#define C10_RESTRICT __restrict + +// Simply define the namespace, in case a dependent library want to refer to +// the c10 namespace but not any nontrivial files. +namespace c10 {} +namespace c10::cuda {} +namespace c10::hip {} +namespace c10::xpu {} + +// Since C10 is the core library for caffe2 (and aten), we will simply reroute +// all abstractions defined in c10 to be available in caffe2 as well. +// This is only for backwards compatibility. Please use the symbols from the +// c10 namespace where possible. +namespace caffe2 { +using namespace c10; +} +namespace at { +using namespace c10; +} +namespace at::cuda { +using namespace c10::cuda; +} // namespace at::cuda + +// WARNING!!! THIS IS A GIANT HACK!!! +// This line means you cannot simultaneously include c10/hip +// and c10/cuda and then use them from the at::cuda namespace. +// This is true in practice, because HIPIFY works inplace on +// files in ATen/cuda, so it assumes that c10::hip is available +// from at::cuda. This namespace makes that happen. When +// HIPIFY is no longer out-of-place, we can switch the cuda +// here to hip and everyone is happy. +namespace at::cuda { +using namespace c10::hip; +} // namespace at::cuda + +namespace at::xpu { +using namespace c10::xpu; +} // namespace at::xpu + +// C10_LIKELY/C10_UNLIKELY +// +// These macros provide parentheses, so you can use these macros as: +// +// if C10_LIKELY(some_expr) { +// ... +// } +// +// NB: static_cast to boolean is mandatory in C++, because __builtin_expect +// takes a long argument, which means you may trigger the wrong conversion +// without it. +// +#if defined(__GNUC__) || defined(__ICL) || defined(__clang__) +#define C10_LIKELY(expr) (__builtin_expect(static_cast(expr), 1)) +#define C10_UNLIKELY(expr) (__builtin_expect(static_cast(expr), 0)) +#else +#define C10_LIKELY(expr) (expr) +#define C10_UNLIKELY(expr) (expr) +#endif + +/// C10_NOINLINE - Functions whose declaration is annotated with this will not +/// be inlined. +#ifdef __GNUC__ +#define C10_NOINLINE __attribute__((noinline)) +#elif _MSC_VER +#define C10_NOINLINE __declspec(noinline) +#else +#define C10_NOINLINE +#endif + +#if defined(_MSC_VER) +#define C10_ALWAYS_INLINE __forceinline +#elif __has_attribute(always_inline) || defined(__GNUC__) +#define C10_ALWAYS_INLINE __attribute__((__always_inline__)) inline +#else +#define C10_ALWAYS_INLINE inline +#endif + +// Unlike C10_ALWAYS_INLINE, C10_ALWAYS_INLINE_ATTRIBUTE can be used +// on a lambda. +#if defined(_MSC_VER) +// MSVC 14.39 is reasonably recent and doesn't like +// [[msvc::forceinline]] on a lambda, so don't try to use it. +#define C10_ALWAYS_INLINE_ATTRIBUTE +#elif __has_attribute(always_inline) || defined(__GNUC__) +#define C10_ALWAYS_INLINE_ATTRIBUTE __attribute__((__always_inline__)) +#else +#define C10_ALWAYS_INLINE_ATTRIBUTE +#endif + +#if defined(_MSC_VER) +#define C10_ATTR_VISIBILITY_HIDDEN +#elif defined(__GNUC__) +#define C10_ATTR_VISIBILITY_HIDDEN __attribute__((__visibility__("hidden"))) +#else +#define C10_ATTR_VISIBILITY_HIDDEN +#endif + +#define C10_ERASE C10_ALWAYS_INLINE C10_ATTR_VISIBILITY_HIDDEN + +#include + +#ifdef __HIPCC__ +// Unlike CUDA, HIP requires a HIP header to be included for __host__ to work. +// We do this #include here so that C10_HOST_DEVICE and friends will Just Work. +// See https://github.com/ROCm-Developer-Tools/HIP/issues/441 +#include +#endif + +#if defined(__CUDACC__) || defined(__HIPCC__) +// Designates functions callable from the host (CPU) and the device (GPU) +#define C10_HOST_DEVICE __host__ __device__ +#define C10_DEVICE __device__ +#define C10_HOST __host__ +// constants from +// (https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications) +// The maximum number of threads per multiprocessor is 1024 for Turing +// architecture (7.5), 1536 for Geforce Ampere (8.6)/Jetson Orin (8.7), and +// 2048 for all other architectures. You'll get warnings if you exceed these +// constants. Hence, the following macros adjust the input values from the user +// to resolve potential warnings. +#if __CUDA_ARCH__ == 750 +constexpr uint32_t CUDA_MAX_THREADS_PER_SM = 1024; +#elif __CUDA_ARCH__ == 860 || __CUDA_ARCH__ == 870 || __CUDA_ARCH__ == 890 +constexpr uint32_t CUDA_MAX_THREADS_PER_SM = 1536; +#else +constexpr uint32_t CUDA_MAX_THREADS_PER_SM = 2048; +#endif +// CUDA_MAX_THREADS_PER_BLOCK is same for all architectures currently +constexpr uint32_t CUDA_MAX_THREADS_PER_BLOCK = 1024; +// CUDA_THREADS_PER_BLOCK_FALLBACK is the "canonical fallback" choice of block +// size. 256 is a good number for this fallback and should give good occupancy +// and versatility across all architectures. +constexpr uint32_t CUDA_THREADS_PER_BLOCK_FALLBACK = 256; +// NOTE: if you are thinking of constexpr-ify the inputs to launch bounds, it +// turns out that although __launch_bounds__ can take constexpr, it +// can't take a constexpr that has anything to do with templates. +// Currently we use launch_bounds that depend on template arguments in +// Loops.cuh, Reduce.cuh and LossCTC.cuh. Hence, C10_MAX_THREADS_PER_BLOCK +// and C10_MIN_BLOCKS_PER_SM are kept as macros. +// Suppose you were planning to write __launch_bounds__(a, b), based on your +// performance tuning on a modern GPU. Instead, you should write +// __launch_bounds__(C10_MAX_THREADS_PER_BLOCK(a), C10_MIN_BLOCKS_PER_SM(a, b)), +// which will also properly respect limits on old architectures. +#define C10_MAX_THREADS_PER_BLOCK(val) \ + (((val) <= CUDA_MAX_THREADS_PER_BLOCK) ? (val) \ + : CUDA_THREADS_PER_BLOCK_FALLBACK) +#define C10_MIN_BLOCKS_PER_SM(threads_per_block, blocks_per_sm) \ + ((((threads_per_block) * (blocks_per_sm) <= CUDA_MAX_THREADS_PER_SM) \ + ? (blocks_per_sm) \ + : ((CUDA_MAX_THREADS_PER_SM + (threads_per_block) - 1) / \ + (threads_per_block)))) +// C10_LAUNCH_BOUNDS is analogous to __launch_bounds__ +#define C10_LAUNCH_BOUNDS_0 \ + __launch_bounds__(256, \ + 4) // default launch bounds that should give good occupancy + // and versatility across all architectures. +#define C10_LAUNCH_BOUNDS_1(max_threads_per_block) \ + __launch_bounds__((C10_MAX_THREADS_PER_BLOCK((max_threads_per_block)))) +#define C10_LAUNCH_BOUNDS_2(max_threads_per_block, min_blocks_per_sm) \ + __launch_bounds__( \ + (C10_MAX_THREADS_PER_BLOCK((max_threads_per_block))), \ + (C10_MIN_BLOCKS_PER_SM((max_threads_per_block), (min_blocks_per_sm)))) +#else +#define C10_HOST_DEVICE +#define C10_HOST +#define C10_DEVICE +#endif + +#if defined(USE_ROCM) +#define C10_HIP_HOST_DEVICE __host__ __device__ +#else +#define C10_HIP_HOST_DEVICE +#endif + +#if defined(USE_ROCM) +#define C10_WARP_SIZE warpSize // = 64 or 32 (Defined in hip_runtime.h) +#else +#define C10_WARP_SIZE 32 +#endif + +#if defined(_MSC_VER) && _MSC_VER <= 1900 +#define __func__ __FUNCTION__ +#endif + +// CUDA_KERNEL_ASSERT checks the assertion +// even when NDEBUG is defined. This is useful for important assertions in CUDA +// code that would otherwise be suppressed when building Release. +#if defined(__ANDROID__) || defined(__APPLE__) || defined(__FreeBSD__) +// Those platforms do not support assert() +#define CUDA_KERNEL_ASSERT(cond) +#define CUDA_KERNEL_ASSERT_MSG(cond, msg) +#define SYCL_KERNEL_ASSERT(cond) +#elif defined(_MSC_VER) +#if defined(NDEBUG) +extern "C" { +C10_IMPORT +#if defined(__SYCL_DEVICE_ONLY__) +extern SYCL_EXTERNAL void _wassert(const wchar_t *wexpr, const wchar_t *wfile, + unsigned line); +#else +#if defined(__CUDA_ARCH__) +__host__ __device__ +#endif // __CUDA_ARCH__ + void + _wassert(wchar_t const *_Message, wchar_t const *_File, unsigned _Line); +#endif // __SYCL_DEVICE_ONLY__ +} +#endif // NDEBUG +#define CUDA_KERNEL_ASSERT(cond) \ + if (C10_UNLIKELY(!(cond))) { \ + (void)(_wassert(_CRT_WIDE(#cond), _CRT_WIDE(__FILE__), \ + static_cast(__LINE__)), \ + 0); \ + } +// TODO: This doesn't assert the message because I (chilli) couldn't figure out +// a nice way to convert a char* to a wchar_t* +#define CUDA_KERNEL_ASSERT_MSG(cond, msg) \ + if (C10_UNLIKELY(!(cond))) { \ + (void)(_wassert(_CRT_WIDE(#cond), _CRT_WIDE(__FILE__), \ + static_cast(__LINE__)), \ + 0); \ + } +#define SYCL_KERNEL_ASSERT(cond) \ + if (C10_UNLIKELY(!(cond))) { \ + (void)(_wassert(_CRT_WIDE(#cond), _CRT_WIDE(__FILE__), \ + static_cast(__LINE__)), \ + 0); \ + } +#else // __APPLE__, _MSC_VER +#if defined(NDEBUG) +extern "C" { +#if defined(__SYCL_DEVICE_ONLY__) +extern SYCL_EXTERNAL void __assert_fail(const char *expr, const char *file, + unsigned int line, const char *func); +#else // __SYCL_DEVICE_ONLY__ +#if (defined(__CUDA_ARCH__) && !(defined(__clang__) && defined(__CUDA__))) +// CUDA supports __assert_fail function which are common for both device +// and host side code. +__host__ __device__ +#endif + + // This forward declaration matching the declaration of __assert_fail + // exactly how it is in glibc in case parts of the program are compiled with + // different NDEBUG settings. Otherwise we might get 'ambiguous declaration' + // error. Note: On ROCm - this declaration serves for host side compilation. + void + __assert_fail(const char *assertion, const char *file, unsigned int line, + const char *function) noexcept __attribute__((__noreturn__)); + +#endif // __SYCL_DEVICE_ONLY__ +} +#endif // NDEBUG +// ROCm disable kernel assert by default +#if !defined(C10_USE_ROCM_KERNEL_ASSERT) and defined(USE_ROCM) +#define CUDA_KERNEL_ASSERT(cond) +#define CUDA_KERNEL_ASSERT_MSG(cond, msg) +#define SYCL_KERNEL_ASSERT(cond) +#else +#define CUDA_KERNEL_ASSERT(cond) \ + if (C10_UNLIKELY(!(cond))) { \ + __assert_fail(#cond, __FILE__, static_cast(__LINE__), \ + __func__); \ + } +#define CUDA_KERNEL_ASSERT_MSG(cond, msg) \ + if (C10_UNLIKELY(!(cond))) { \ + __assert_fail(msg, __FILE__, static_cast(__LINE__), \ + __func__); \ + } +#define SYCL_KERNEL_ASSERT(cond) \ + if (C10_UNLIKELY(!(cond))) { \ + __assert_fail(#cond, __FILE__, static_cast(__LINE__), \ + __func__); \ + } +#endif // C10_USE_ROCM_KERNEL_ASSERT and USE_ROCM +#endif // __APPLE__ + +#ifdef __APPLE__ +#include +#endif + +#if defined(__ANDROID__) +#define C10_ANDROID 1 +#define C10_MOBILE 1 +#elif (defined(__APPLE__) && \ + (TARGET_IPHONE_SIMULATOR || TARGET_OS_SIMULATOR || TARGET_OS_IPHONE)) +#define C10_IOS 1 +#define C10_MOBILE 1 +#endif // ANDROID / IOS + +#if defined(C10_MOBILE) && C10_MOBILE +#define C10_ALWAYS_INLINE_UNLESS_MOBILE inline +#else +#define C10_ALWAYS_INLINE_UNLESS_MOBILE C10_ALWAYS_INLINE +#endif + +#if !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) +#define CONSTEXPR_EXCEPT_WIN_CUDA constexpr +#define C10_HOST_CONSTEXPR_EXCEPT_WIN_CUDA constexpr + +#define STATIC_CONSTEXPR_STR_INL_EXCEPT_WIN_CUDA(field, val) \ + static constexpr const char field[] = val; +#define STATIC_CONST_STR_OUT_OF_LINE_FOR_WIN_CUDA(cls, field, val) +#endif // !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) + +#ifndef HAS_DEMANGLE +#if defined(__ANDROID__) || defined(_WIN32) || defined(__EMSCRIPTEN__) +#define HAS_DEMANGLE 0 +#elif defined(__APPLE__) && \ + (TARGET_IPHONE_SIMULATOR || TARGET_OS_SIMULATOR || TARGET_OS_IPHONE) +#define HAS_DEMANGLE 0 +#else +#define HAS_DEMANGLE 1 +#endif +#endif // HAS_DEMANGLE + +#define _C10_PRAGMA__(string) _Pragma(#string) +#define _C10_PRAGMA_(string) _C10_PRAGMA__(string) + +#ifdef __clang__ +#define C10_CLANG_DIAGNOSTIC_PUSH() _Pragma("clang diagnostic push") +#define C10_CLANG_DIAGNOSTIC_POP() _Pragma("clang diagnostic pop") +#define C10_CLANG_DIAGNOSTIC_IGNORE(flag) \ + _C10_PRAGMA_(clang diagnostic ignored flag) +#define C10_CLANG_HAS_WARNING(flag) __has_warning(flag) +#else +#define C10_CLANG_DIAGNOSTIC_PUSH() +#define C10_CLANG_DIAGNOSTIC_POP() +#define C10_CLANG_DIAGNOSTIC_IGNORE(flag) +#define C10_CLANG_HAS_WARNING(flag) 0 +#endif + +#ifdef __clang__ + +#define C10_DIAGNOSTIC_PUSH_AND_IGNORED_IF_DEFINED(warning) \ + _C10_PRAGMA_(clang diagnostic push) \ + _C10_PRAGMA_(clang diagnostic ignored "-Wunknown-warning-option") \ + _C10_PRAGMA_(clang diagnostic ignored warning) + +#define C10_DIAGNOSTIC_POP() _C10_PRAGMA_(clang diagnostic pop) + +#elif __GNUC__ + +#define C10_DIAGNOSTIC_PUSH_AND_IGNORED_IF_DEFINED(warning) \ + _C10_PRAGMA_(GCC diagnostic push) \ + _C10_PRAGMA_(GCC diagnostic ignored "-Wpragmas") \ + _C10_PRAGMA_(GCC diagnostic ignored warning) + +#define C10_DIAGNOSTIC_POP() _C10_PRAGMA_(GCC diagnostic pop) + +#else + +#define C10_DIAGNOSTIC_PUSH_AND_IGNORED_IF_DEFINED(warning) +#define C10_DIAGNOSTIC_POP() + +#endif + +#endif // C10_MACROS_MACROS_H_ diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-inl.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-inl.h new file mode 100644 index 000000000..d37a19d51 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-inl.h @@ -0,0 +1,342 @@ +#pragma once + +#include +#include + +#include + +C10_CLANG_DIAGNOSTIC_PUSH() +#if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion") +#endif + +#if defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) +#if defined(CL_SYCL_LANGUAGE_VERSION) +#include // for SYCL 1.2.1 +#else +#include // for SYCL 2020 +#endif +#include +#endif + +namespace c10 { + +/// Constructors +inline C10_HOST_DEVICE BFloat16::BFloat16(float value) + : +#if defined(__CUDACC__) && !defined(USE_ROCM) && defined(__CUDA_ARCH__) && \ + __CUDA_ARCH__ >= 800 + x(__bfloat16_as_ushort(__float2bfloat16(value))) +#elif defined(__SYCL_DEVICE_ONLY__) && \ + defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) + x(c10::bit_cast(sycl::ext::oneapi::bfloat16(value))) +#else + // RNE by default + x(detail::round_to_nearest_even(value)) +#endif +{ +} + +/// Implicit conversions +inline C10_HOST_DEVICE BFloat16::operator float() const { +#if defined(__CUDACC__) && !defined(USE_ROCM) + return __bfloat162float(*reinterpret_cast(&x)); +#elif defined(__SYCL_DEVICE_ONLY__) && \ + defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) + return float(*reinterpret_cast(&x)); +#else + return detail::f32_from_bits(x); +#endif +} + +#if defined(__CUDACC__) && !defined(USE_ROCM) +inline C10_HOST_DEVICE BFloat16::BFloat16(const __nv_bfloat16 &value) { + x = *reinterpret_cast(&value); +} +inline C10_HOST_DEVICE BFloat16::operator __nv_bfloat16() const { + return *reinterpret_cast(&x); +} +#endif + +#if defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) +inline C10_HOST_DEVICE +BFloat16::BFloat16(const sycl::ext::oneapi::bfloat16 &value) { + x = *reinterpret_cast(&value); +} +inline C10_HOST_DEVICE BFloat16::operator sycl::ext::oneapi::bfloat16() const { + return *reinterpret_cast(&x); +} +#endif + +// CUDA intrinsics + +#if defined(__CUDACC__) || defined(__HIPCC__) +inline C10_DEVICE BFloat16 __ldg(const BFloat16 *ptr) { +#if !defined(USE_ROCM) && defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 800 + return __ldg(reinterpret_cast(ptr)); +#else + return *ptr; +#endif +} +#endif + +/// Arithmetic + +inline C10_HOST_DEVICE BFloat16 operator+(const BFloat16 &a, + const BFloat16 &b) { + return static_cast(a) + static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator-(const BFloat16 &a, + const BFloat16 &b) { + return static_cast(a) - static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator*(const BFloat16 &a, + const BFloat16 &b) { + return static_cast(a) * static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator/(const BFloat16 &a, const BFloat16 &b) + __ubsan_ignore_float_divide_by_zero__ { + return static_cast(a) / static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator-(const BFloat16 &a) { + return -static_cast(a); +} + +inline C10_HOST_DEVICE BFloat16 &operator+=(BFloat16 &a, const BFloat16 &b) { + a = a + b; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator-=(BFloat16 &a, const BFloat16 &b) { + a = a - b; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator*=(BFloat16 &a, const BFloat16 &b) { + a = a * b; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator/=(BFloat16 &a, const BFloat16 &b) { + a = a / b; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator|(BFloat16 &a, const BFloat16 &b) { + a.x = a.x | b.x; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator^(BFloat16 &a, const BFloat16 &b) { + a.x = a.x ^ b.x; + return a; +} + +inline C10_HOST_DEVICE BFloat16 &operator&(BFloat16 &a, const BFloat16 &b) { + a.x = a.x & b.x; + return a; +} + +/// Arithmetic with floats + +inline C10_HOST_DEVICE float operator+(BFloat16 a, float b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE float operator-(BFloat16 a, float b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE float operator*(BFloat16 a, float b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE float operator/(BFloat16 a, float b) { + return static_cast(a) / b; +} + +inline C10_HOST_DEVICE float operator+(float a, BFloat16 b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE float operator-(float a, BFloat16 b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE float operator*(float a, BFloat16 b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE float operator/(float a, BFloat16 b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE float &operator+=(float &a, const BFloat16 &b) { + return a += static_cast(b); +} +inline C10_HOST_DEVICE float &operator-=(float &a, const BFloat16 &b) { + return a -= static_cast(b); +} +inline C10_HOST_DEVICE float &operator*=(float &a, const BFloat16 &b) { + return a *= static_cast(b); +} +inline C10_HOST_DEVICE float &operator/=(float &a, const BFloat16 &b) { + return a /= static_cast(b); +} + +/// Arithmetic with doubles + +inline C10_HOST_DEVICE double operator+(BFloat16 a, double b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE double operator-(BFloat16 a, double b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE double operator*(BFloat16 a, double b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE double operator/(BFloat16 a, double b) { + return static_cast(a) / b; +} + +inline C10_HOST_DEVICE double operator+(double a, BFloat16 b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE double operator-(double a, BFloat16 b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE double operator*(double a, BFloat16 b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE double operator/(double a, BFloat16 b) { + return a / static_cast(b); +} + +/// Arithmetic with ints + +inline C10_HOST_DEVICE BFloat16 operator+(BFloat16 a, int b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator-(BFloat16 a, int b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator*(BFloat16 a, int b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator/(BFloat16 a, int b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator+(int a, BFloat16 b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE BFloat16 operator-(int a, BFloat16 b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE BFloat16 operator*(int a, BFloat16 b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE BFloat16 operator/(int a, BFloat16 b) { + return static_cast(a) / b; +} + +//// Arithmetic with int64_t + +inline C10_HOST_DEVICE BFloat16 operator+(BFloat16 a, int64_t b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator-(BFloat16 a, int64_t b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator*(BFloat16 a, int64_t b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE BFloat16 operator/(BFloat16 a, int64_t b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE BFloat16 operator+(int64_t a, BFloat16 b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE BFloat16 operator-(int64_t a, BFloat16 b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE BFloat16 operator*(int64_t a, BFloat16 b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE BFloat16 operator/(int64_t a, BFloat16 b) { + return static_cast(a) / b; +} + +// Overloading < and > operators, because std::max and std::min use them. + +inline C10_HOST_DEVICE bool operator>(BFloat16 &lhs, BFloat16 &rhs) { + return float(lhs) > float(rhs); +} + +inline C10_HOST_DEVICE bool operator<(BFloat16 &lhs, BFloat16 &rhs) { + return float(lhs) < float(rhs); +} + +} // namespace c10 + +namespace std { + +template <> class numeric_limits { +public: + static constexpr bool is_signed = true; + static constexpr bool is_specialized = true; + static constexpr bool is_integer = false; + static constexpr bool is_exact = false; + static constexpr bool has_infinity = true; + static constexpr bool has_quiet_NaN = true; + static constexpr bool has_signaling_NaN = true; + static constexpr auto has_denorm = numeric_limits::has_denorm; + static constexpr auto has_denorm_loss = + numeric_limits::has_denorm_loss; + static constexpr auto round_style = numeric_limits::round_style; + static constexpr bool is_iec559 = false; + static constexpr bool is_bounded = true; + static constexpr bool is_modulo = false; + static constexpr int digits = 8; + static constexpr int digits10 = 2; + static constexpr int max_digits10 = 4; + static constexpr int radix = 2; + static constexpr int min_exponent = -125; + static constexpr int min_exponent10 = -37; + static constexpr int max_exponent = 128; + static constexpr int max_exponent10 = 38; + static constexpr auto traps = numeric_limits::traps; + static constexpr auto tinyness_before = + numeric_limits::tinyness_before; + + static constexpr c10::BFloat16 min() { + return c10::BFloat16(0x0080, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 lowest() { + return c10::BFloat16(0xFF7F, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 max() { + return c10::BFloat16(0x7F7F, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 epsilon() { + return c10::BFloat16(0x3C00, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 round_error() { + return c10::BFloat16(0x3F00, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 infinity() { + return c10::BFloat16(0x7F80, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 quiet_NaN() { + return c10::BFloat16(0x7FC0, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 signaling_NaN() { + return c10::BFloat16(0x7F80, c10::BFloat16::from_bits()); + } + static constexpr c10::BFloat16 denorm_min() { + return c10::BFloat16(0x0001, c10::BFloat16::from_bits()); + } +}; + +} // namespace std + +C10_CLANG_DIAGNOSTIC_POP() diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-math.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-math.h new file mode 100644 index 000000000..e5c741926 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16-math.h @@ -0,0 +1,266 @@ +#pragma once + +#include +#include + +C10_CLANG_DIAGNOSTIC_PUSH() +#if C10_CLANG_HAS_WARNING("-Wimplicit-float-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-float-conversion") +#endif + +namespace c10 { +template +struct is_reduced_floating_point + : std::integral_constant || + std::is_same_v> {}; + +template +constexpr bool is_reduced_floating_point_v = + is_reduced_floating_point::value; +} // namespace c10 + +namespace std { + +#if !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) +using c10::is_reduced_floating_point; +using c10::is_reduced_floating_point_v; +#endif // !defined(FBCODE_CAFFE2) && !defined(C10_NODEPRECATED) + +template , int> = 0> +inline T acos(T a) { + return std::acos(float(a)); +} +template , int> = 0> +inline T asin(T a) { + return std::asin(float(a)); +} +template , int> = 0> +inline T atan(T a) { + return std::atan(float(a)); +} +template , int> = 0> +inline T atanh(T a) { + return std::atanh(float(a)); +} +template , int> = 0> +inline T erf(T a) { + return std::erf(float(a)); +} +template , int> = 0> +inline T erfc(T a) { + return std::erfc(float(a)); +} +template , int> = 0> +inline T exp(T a) { + return std::exp(float(a)); +} +template , int> = 0> +inline T expm1(T a) { + return std::expm1(float(a)); +} +template , int> = 0> +inline bool isfinite(T a) { + return std::isfinite(float(a)); +} +template , int> = 0> +inline T log(T a) { + return std::log(float(a)); +} +template , int> = 0> +inline T log10(T a) { + return std::log10(float(a)); +} +template , int> = 0> +inline T log1p(T a) { + return std::log1p(float(a)); +} +template , int> = 0> +inline T log2(T a) { + return std::log2(float(a)); +} +template , int> = 0> +inline T ceil(T a) { + return std::ceil(float(a)); +} +template , int> = 0> +inline T cos(T a) { + return std::cos(float(a)); +} +template , int> = 0> +inline T floor(T a) { + return std::floor(float(a)); +} +template , int> = 0> +inline T nearbyint(T a) { + return std::nearbyint(float(a)); +} +template , int> = 0> +inline T sin(T a) { + return std::sin(float(a)); +} +template , int> = 0> +inline T tan(T a) { + return std::tan(float(a)); +} +template , int> = 0> +inline T sinh(T a) { + return std::sinh(float(a)); +} +template , int> = 0> +inline T cosh(T a) { + return std::cosh(float(a)); +} +template , int> = 0> +inline T tanh(T a) { + return std::tanh(float(a)); +} +template , int> = 0> +inline T trunc(T a) { + return std::trunc(float(a)); +} +template , int> = 0> +inline T lgamma(T a) { + return std::lgamma(float(a)); +} +template , int> = 0> +inline T sqrt(T a) { + return std::sqrt(float(a)); +} +template , int> = 0> +inline T rsqrt(T a) { + return 1.0 / std::sqrt(float(a)); +} +template , int> = 0> +inline T abs(T a) { + return std::abs(float(a)); +} +#if defined(_MSC_VER) && defined(__CUDACC__) +template , int> = 0> +inline T pow(T a, double b) { + return std::pow(float(a), float(b)); +} +#else +template , int> = 0> +inline T pow(T a, double b) { + return std::pow(float(a), b); +} +#endif +template , int> = 0> +inline T pow(T a, T b) { + return std::pow(float(a), float(b)); +} +template , int> = 0> +inline T fmod(T a, T b) { + return std::fmod(float(a), float(b)); +} + +/* + The following function is inspired from the implementation in `musl` + Link to License: https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT + ---------------------------------------------------------------------- + Copyright © 2005-2020 Rich Felker, et al. + + 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. + ---------------------------------------------------------------------- + */ +template , int> = 0> +C10_HOST_DEVICE inline T nextafter(T from, T to) { + // Reference: + // https://git.musl-libc.org/cgit/musl/tree/src/math/nextafter.c + using int_repr_t = uint16_t; + constexpr uint8_t bits = 16; + union { + T f; + int_repr_t i; + } ufrom = {from}, uto = {to}; + + // get a mask to get the sign bit i.e. MSB + int_repr_t sign_mask = int_repr_t{1} << (bits - 1); + + // short-circuit: if either is NaN, return NaN + if (from != from || to != to) { + return from + to; + } + + // short-circuit: if they are exactly the same. + if (ufrom.i == uto.i) { + return from; + } + + // mask the sign-bit to zero i.e. positive + // equivalent to abs(x) + int_repr_t abs_from = ufrom.i & ~sign_mask; + int_repr_t abs_to = uto.i & ~sign_mask; + if (abs_from == 0) { + // if both are zero but with different sign, + // preserve the sign of `to`. + if (abs_to == 0) { + return to; + } + // smallest subnormal with sign of `to`. + ufrom.i = (uto.i & sign_mask) | int_repr_t{1}; + return ufrom.f; + } + + // if abs(from) > abs(to) or sign(from) != sign(to) + if (abs_from > abs_to || ((ufrom.i ^ uto.i) & sign_mask)) { + ufrom.i--; + } else { + ufrom.i++; + } + + return ufrom.f; +} + +} // namespace std + +C10_CLANG_DIAGNOSTIC_POP() diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16.h new file mode 100644 index 000000000..e457e6dcc --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/BFloat16.h @@ -0,0 +1,125 @@ +#pragma once + +// Defines the bloat16 type (brain floating-point). This representation uses +// 1 bit for the sign, 8 bits for the exponent and 7 bits for the mantissa. + +#include +#include +#include +#include +#include +#include + +#if defined(__CUDACC__) && !defined(USE_ROCM) +#include +#endif + +#if defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) +#if defined(CL_SYCL_LANGUAGE_VERSION) +#include // for SYCL 1.2.1 +#else +#include // for SYCL 2020 +#endif +#include +#endif + +namespace c10 { + +namespace detail { +inline C10_HOST_DEVICE float f32_from_bits(uint16_t src) { + float res = 0; + uint32_t tmp = src; + tmp <<= 16; + +#if defined(USE_ROCM) + float *tempRes; + + // We should be using memcpy in order to respect the strict aliasing rule + // but it fails in the HIP environment. + tempRes = reinterpret_cast(&tmp); + res = *tempRes; +#else + std::memcpy(&res, &tmp, sizeof(tmp)); +#endif + + return res; +} + +inline C10_HOST_DEVICE uint16_t bits_from_f32(float src) { + uint32_t res = 0; + +#if defined(USE_ROCM) + // We should be using memcpy in order to respect the strict aliasing rule + // but it fails in the HIP environment. + uint32_t *tempRes = reinterpret_cast(&src); + res = *tempRes; +#else + std::memcpy(&res, &src, sizeof(res)); +#endif + + return res >> 16; +} + +inline C10_HOST_DEVICE uint16_t round_to_nearest_even(float src) { +#if defined(USE_ROCM) + if (src != src) { +#elif defined(_MSC_VER) + if (isnan(src)) { +#else + if (std::isnan(src)) { +#endif + return UINT16_C(0x7FC0); + } else { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init) + union { + uint32_t U32; // NOLINT(facebook-hte-BadMemberName) + float F32; // NOLINT(facebook-hte-BadMemberName) + }; + + F32 = src; + uint32_t rounding_bias = ((U32 >> 16) & 1) + UINT32_C(0x7FFF); + return static_cast((U32 + rounding_bias) >> 16); + } +} +} // namespace detail + +struct alignas(2) BFloat16 { + uint16_t x; + + // HIP wants __host__ __device__ tag, CUDA does not +#if defined(USE_ROCM) + C10_HOST_DEVICE BFloat16() = default; +#else + BFloat16() = default; +#endif + + struct from_bits_t {}; + static constexpr C10_HOST_DEVICE from_bits_t from_bits() { + return from_bits_t(); + } + + constexpr C10_HOST_DEVICE BFloat16(unsigned short bits, from_bits_t) + : x(bits) {} + /* implicit */ inline C10_HOST_DEVICE BFloat16(float value); + inline C10_HOST_DEVICE operator float() const; + +#if defined(__CUDACC__) && !defined(USE_ROCM) + inline C10_HOST_DEVICE BFloat16(const __nv_bfloat16 &value); + explicit inline C10_HOST_DEVICE operator __nv_bfloat16() const; +#endif + +#if defined(SYCL_EXT_ONEAPI_BFLOAT16_MATH_FUNCTIONS) + inline C10_HOST_DEVICE BFloat16(const sycl::ext::oneapi::bfloat16 &value); + explicit inline C10_HOST_DEVICE operator sycl::ext::oneapi::bfloat16() const; +#endif +}; + +C10_API inline std::ostream &operator<<(std::ostream &out, + const BFloat16 &value) { + out << (float)value; + return out; +} + +} // namespace c10 + +#include // IWYU pragma: keep diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/Half-inl.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/Half-inl.h new file mode 100644 index 000000000..df2824bb6 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/Half-inl.h @@ -0,0 +1,347 @@ +#pragma once + +#include +#include + +#include +#include + +#ifdef __CUDACC__ +#include +#endif + +#ifdef __HIPCC__ +#include +#endif + +#if defined(CL_SYCL_LANGUAGE_VERSION) +#include // for SYCL 1.2.1 +#elif defined(SYCL_LANGUAGE_VERSION) +#include // for SYCL 2020 +#endif + +#if (defined(CPU_CAPABILITY_AVX2) || defined(CPU_CAPABILITY_AVX512)) && \ + !defined(__APPLE__) +#include +#endif + +C10_CLANG_DIAGNOSTIC_PUSH() +#if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion") +#endif + +namespace c10 { + +#if defined(__aarch64__) && !defined(__CUDACC__) +/// Constructors +inline Half::Half(float16_t value) : x(detail::fp16_to_bits(value)) {} +inline Half::operator float16_t() const { return detail::fp16_from_bits(x); } +#else + +inline C10_HOST_DEVICE Half::Half(float value) + : +#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) + x(__half_as_short(__float2half(value))) +#elif defined(__SYCL_DEVICE_ONLY__) + x(c10::bit_cast(sycl::half(value))) +#elif (defined(CPU_CAPABILITY_AVX2) || defined(CPU_CAPABILITY_AVX512)) && \ + !defined(__APPLE__) + x(at::vec::float2half_scalar(value)) +#else + x(detail::fp16_ieee_from_fp32_value(value)) +#endif +{ +} + +/// Implicit conversions + +inline C10_HOST_DEVICE Half::operator float() const { +#if defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) + return __half2float(*reinterpret_cast(&x)); +#elif defined(__SYCL_DEVICE_ONLY__) + return float(c10::bit_cast(x)); +#elif (defined(CPU_CAPABILITY_AVX2) || defined(CPU_CAPABILITY_AVX512)) && \ + !defined(__APPLE__) + return at::vec::half2float_scalar(x); +#elif defined(__aarch64__) && !defined(__CUDACC__) + return detail::native_fp16_to_fp32_value(x); +#else + return detail::fp16_ieee_to_fp32_value(x); +#endif +} + +#endif /* !defined(__aarch64__) || defined(__CUDACC__) \ + */ + +#if defined(__CUDACC__) || defined(__HIPCC__) +inline C10_HOST_DEVICE Half::Half(const __half &value) { + x = *reinterpret_cast(&value); +} +inline C10_HOST_DEVICE Half::operator __half() const { + return *reinterpret_cast(&x); +} +#endif + +#ifdef SYCL_LANGUAGE_VERSION +inline C10_HOST_DEVICE Half::Half(const sycl::half &value) { + x = *reinterpret_cast(&value); +} +inline C10_HOST_DEVICE Half::operator sycl::half() const { + return *reinterpret_cast(&x); +} +#endif + +// CUDA intrinsics + +#if (defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 350)) || \ + (defined(__clang__) && defined(__CUDA__)) +inline __device__ Half __ldg(const Half *ptr) { + return __ldg(reinterpret_cast(ptr)); +} +#endif + +/// Arithmetic + +inline C10_HOST_DEVICE Half operator+(const Half &a, const Half &b) { + return static_cast(a) + static_cast(b); +} + +inline C10_HOST_DEVICE Half operator-(const Half &a, const Half &b) { + return static_cast(a) - static_cast(b); +} + +inline C10_HOST_DEVICE Half operator*(const Half &a, const Half &b) { + return static_cast(a) * static_cast(b); +} + +inline C10_HOST_DEVICE Half operator/(const Half &a, const Half &b) + __ubsan_ignore_float_divide_by_zero__ { + return static_cast(a) / static_cast(b); +} + +inline C10_HOST_DEVICE Half operator-(const Half &a) { +#if (defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 530) || \ + defined(__HIP_DEVICE_COMPILE__) + return __hneg(a); +#elif defined(__SYCL_DEVICE_ONLY__) + return -c10::bit_cast(a); +#else + return -static_cast(a); +#endif +} + +inline C10_HOST_DEVICE Half &operator+=(Half &a, const Half &b) { + a = a + b; + return a; +} + +inline C10_HOST_DEVICE Half &operator-=(Half &a, const Half &b) { + a = a - b; + return a; +} + +inline C10_HOST_DEVICE Half &operator*=(Half &a, const Half &b) { + a = a * b; + return a; +} + +inline C10_HOST_DEVICE Half &operator/=(Half &a, const Half &b) { + a = a / b; + return a; +} + +/// Arithmetic with floats + +inline C10_HOST_DEVICE float operator+(Half a, float b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE float operator-(Half a, float b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE float operator*(Half a, float b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE float +operator/(Half a, float b) __ubsan_ignore_float_divide_by_zero__ { + return static_cast(a) / b; +} + +inline C10_HOST_DEVICE float operator+(float a, Half b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE float operator-(float a, Half b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE float operator*(float a, Half b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE float +operator/(float a, Half b) __ubsan_ignore_float_divide_by_zero__ { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE float &operator+=(float &a, const Half &b) { + return a += static_cast(b); +} +inline C10_HOST_DEVICE float &operator-=(float &a, const Half &b) { + return a -= static_cast(b); +} +inline C10_HOST_DEVICE float &operator*=(float &a, const Half &b) { + return a *= static_cast(b); +} +inline C10_HOST_DEVICE float &operator/=(float &a, const Half &b) { + return a /= static_cast(b); +} + +/// Arithmetic with doubles + +inline C10_HOST_DEVICE double operator+(Half a, double b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE double operator-(Half a, double b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE double operator*(Half a, double b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE double +operator/(Half a, double b) __ubsan_ignore_float_divide_by_zero__ { + return static_cast(a) / b; +} + +inline C10_HOST_DEVICE double operator+(double a, Half b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE double operator-(double a, Half b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE double operator*(double a, Half b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE double +operator/(double a, Half b) __ubsan_ignore_float_divide_by_zero__ { + return a / static_cast(b); +} + +/// Arithmetic with ints + +inline C10_HOST_DEVICE Half operator+(Half a, int b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE Half operator-(Half a, int b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE Half operator*(Half a, int b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE Half operator/(Half a, int b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE Half operator+(int a, Half b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE Half operator-(int a, Half b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE Half operator*(int a, Half b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE Half operator/(int a, Half b) { + return static_cast(a) / b; +} + +//// Arithmetic with int64_t + +inline C10_HOST_DEVICE Half operator+(Half a, int64_t b) { + return a + static_cast(b); +} +inline C10_HOST_DEVICE Half operator-(Half a, int64_t b) { + return a - static_cast(b); +} +inline C10_HOST_DEVICE Half operator*(Half a, int64_t b) { + return a * static_cast(b); +} +inline C10_HOST_DEVICE Half operator/(Half a, int64_t b) { + return a / static_cast(b); +} + +inline C10_HOST_DEVICE Half operator+(int64_t a, Half b) { + return static_cast(a) + b; +} +inline C10_HOST_DEVICE Half operator-(int64_t a, Half b) { + return static_cast(a) - b; +} +inline C10_HOST_DEVICE Half operator*(int64_t a, Half b) { + return static_cast(a) * b; +} +inline C10_HOST_DEVICE Half operator/(int64_t a, Half b) { + return static_cast(a) / b; +} + +/// NOTE: we do not define comparisons directly and instead rely on the implicit +/// conversion from c10::Half to float. + +} // namespace c10 + +namespace std { + +template <> class numeric_limits { +public: + static constexpr bool is_specialized = true; + static constexpr bool is_signed = true; + static constexpr bool is_integer = false; + static constexpr bool is_exact = false; + static constexpr bool has_infinity = true; + static constexpr bool has_quiet_NaN = true; + static constexpr bool has_signaling_NaN = true; + static constexpr auto has_denorm = numeric_limits::has_denorm; + static constexpr auto has_denorm_loss = + numeric_limits::has_denorm_loss; + static constexpr auto round_style = numeric_limits::round_style; + static constexpr bool is_iec559 = true; + static constexpr bool is_bounded = true; + static constexpr bool is_modulo = false; + static constexpr int digits = 11; + static constexpr int digits10 = 3; + static constexpr int max_digits10 = 5; + static constexpr int radix = 2; + static constexpr int min_exponent = -13; + static constexpr int min_exponent10 = -4; + static constexpr int max_exponent = 16; + static constexpr int max_exponent10 = 4; + static constexpr auto traps = numeric_limits::traps; + static constexpr auto tinyness_before = + numeric_limits::tinyness_before; + static constexpr c10::Half min() { + return c10::Half(0x0400, c10::Half::from_bits()); + } + static constexpr c10::Half lowest() { + return c10::Half(0xFBFF, c10::Half::from_bits()); + } + static constexpr c10::Half max() { + return c10::Half(0x7BFF, c10::Half::from_bits()); + } + static constexpr c10::Half epsilon() { + return c10::Half(0x1400, c10::Half::from_bits()); + } + static constexpr c10::Half round_error() { + return c10::Half(0x3800, c10::Half::from_bits()); + } + static constexpr c10::Half infinity() { + return c10::Half(0x7C00, c10::Half::from_bits()); + } + static constexpr c10::Half quiet_NaN() { + return c10::Half(0x7E00, c10::Half::from_bits()); + } + static constexpr c10::Half signaling_NaN() { + return c10::Half(0x7D00, c10::Half::from_bits()); + } + static constexpr c10::Half denorm_min() { + return c10::Half(0x0001, c10::Half::from_bits()); + } +}; + +} // namespace std + +C10_CLANG_DIAGNOSTIC_POP() diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/Half.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/Half.h new file mode 100644 index 000000000..8c32762c1 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/Half.h @@ -0,0 +1,416 @@ +#pragma once + +/// Defines the Half type (half-precision floating-point) including conversions +/// to standard C types and basic arithmetic operations. Note that arithmetic +/// operations are implemented by converting to floating point and +/// performing the operation in float32, instead of using CUDA half intrinsics. +/// Most uses of this type within ATen are memory bound, including the +/// element-wise kernels, and the half intrinsics aren't efficient on all GPUs. +/// If you are writing a compute bound kernel, you can use the CUDA half +/// intrinsics directly on the Half type from device code. + +#include +#include +#include +#include +#include + +#if defined(__cplusplus) +#include +#elif !defined(__OPENCL_VERSION__) +#include +#endif + +#ifdef _MSC_VER +#include +#endif + +#include +#include +#include +#include +#include + +#ifdef __CUDACC__ +#include +#endif + +#ifdef __HIPCC__ +#include +#endif + +#if defined(CL_SYCL_LANGUAGE_VERSION) +#include // for SYCL 1.2.1 +#elif defined(SYCL_LANGUAGE_VERSION) +#include // for SYCL 2020 +#endif + +#if defined(__aarch64__) && !defined(__CUDACC__) +#include +#endif + +#if defined(__GNUC__) || defined(__clang__) +#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || \ + defined(_M_IX86) +#if defined(__F16C__) && !(defined(__CUDA_ARCH__) || defined(__CUDACC__) || \ + defined(__HIP_DEVICE_COMPILE__)) +#define C10_X86_F16 1 +#include // import conversion ops from f16cintrin.h +#endif // defined(__F16C__) && !(defined(__CUDA_ARCH__) || defined(__CUDACC__) + // || defined(__HIP_DEVICE_COMPILE__)) +#endif // __x86_64__ || _M_X64 || __i386 || _M_IX86 +#endif // __GNUC__ || __clang__ + +namespace c10 { + +namespace detail { + +/* + * Convert a 16-bit floating-point number in IEEE half-precision format, in bit + * representation, to a 32-bit floating-point number in IEEE single-precision + * format, in bit representation. + * + * @note The implementation doesn't use any floating-point operations. + */ +inline uint32_t fp16_ieee_to_fp32_bits(uint16_t h) { + /* + * Extend the half-precision floating-point number to 32 bits and shift to the + * upper part of the 32-bit word: + * +---+-----+------------+-------------------+ + * | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000| + * +---+-----+------------+-------------------+ + * Bits 31 26-30 16-25 0-15 + * + * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0 + * - zero bits. + */ + const uint32_t w = (uint32_t)h << 16; + /* + * Extract the sign of the input number into the high bit of the 32-bit word: + * + * +---+----------------------------------+ + * | S |0000000 00000000 00000000 00000000| + * +---+----------------------------------+ + * Bits 31 0-31 + */ + const uint32_t sign = w & UINT32_C(0x80000000); + /* + * Extract mantissa and biased exponent of the input number into the bits 0-30 + * of the 32-bit word: + * + * +---+-----+------------+-------------------+ + * | 0 |EEEEE|MM MMMM MMMM|0000 0000 0000 0000| + * +---+-----+------------+-------------------+ + * Bits 30 27-31 17-26 0-16 + */ + const uint32_t nonsign = w & UINT32_C(0x7FFFFFFF); + /* + * Renorm shift is the number of bits to shift mantissa left to make the + * half-precision number normalized. If the initial number is normalized, some + * of its high 6 bits (sign == 0 and 5-bit exponent) equals one. In this case + * renorm_shift == 0. If the number is denormalize, renorm_shift > 0. Note + * that if we shift denormalized nonsign by renorm_shift, the unit bit of + * mantissa will shift into exponent, turning the biased exponent into 1, and + * making mantissa normalized (i.e. without leading 1). + */ +#ifdef _MSC_VER + unsigned long nonsign_bsr; + _BitScanReverse(&nonsign_bsr, (unsigned long)nonsign); + uint32_t renorm_shift = (uint32_t)nonsign_bsr ^ 31; +#else + uint32_t renorm_shift = __builtin_clz(nonsign); +#endif + renorm_shift = renorm_shift > 5 ? renorm_shift - 5 : 0; + /* + * Iff half-precision number has exponent of 15, the addition overflows + * it into bit 31, and the subsequent shift turns the high 9 bits + * into 1. Thus inf_nan_mask == 0x7F800000 if the half-precision number + * had exponent of 15 (i.e. was NaN or infinity) 0x00000000 otherwise + */ + const int32_t inf_nan_mask = + ((int32_t)(nonsign + 0x04000000) >> 8) & INT32_C(0x7F800000); + /* + * Iff nonsign is 0, it overflows into 0xFFFFFFFF, turning bit 31 + * into 1. Otherwise, bit 31 remains 0. The signed shift right by 31 + * broadcasts bit 31 into all bits of the zero_mask. Thus zero_mask == + * 0xFFFFFFFF if the half-precision number was zero (+0.0h or -0.0h) + * 0x00000000 otherwise + */ + const int32_t zero_mask = (int32_t)(nonsign - 1) >> 31; + /* + * 1. Shift nonsign left by renorm_shift to normalize it (if the input + * was denormal) + * 2. Shift nonsign right by 3 so the exponent (5 bits originally) + * becomes an 8-bit field and 10-bit mantissa shifts into the 10 high + * bits of the 23-bit mantissa of IEEE single-precision number. + * 3. Add 0x70 to the exponent (starting at bit 23) to compensate the + * different in exponent bias (0x7F for single-precision number less 0xF + * for half-precision number). + * 4. Subtract renorm_shift from the exponent (starting at bit 23) to + * account for renormalization. As renorm_shift is less than 0x70, this + * can be combined with step 3. + * 5. Binary OR with inf_nan_mask to turn the exponent into 0xFF if the + * input was NaN or infinity. + * 6. Binary ANDNOT with zero_mask to turn the mantissa and exponent + * into zero if the input was zero. + * 7. Combine with the sign of the input number. + */ + return sign | + ((((nonsign << renorm_shift >> 3) + ((0x70 - renorm_shift) << 23)) | + inf_nan_mask) & + ~zero_mask); +} + +/* + * Convert a 16-bit floating-point number in IEEE half-precision format, in bit + * representation, to a 32-bit floating-point number in IEEE single-precision + * format. + * + * @note The implementation relies on IEEE-like (no assumption about rounding + * mode and no operations on denormals) floating-point operations and bitcasts + * between integer and floating-point variables. + */ +C10_HOST_DEVICE inline float fp16_ieee_to_fp32_value(uint16_t h) { +#ifdef C10_X86_F16 + return _cvtsh_ss(h); +#else + /* + * Extend the half-precision floating-point number to 32 bits and shift to the + * upper part of the 32-bit word: + * +---+-----+------------+-------------------+ + * | S |EEEEE|MM MMMM MMMM|0000 0000 0000 0000| + * +---+-----+------------+-------------------+ + * Bits 31 26-30 16-25 0-15 + * + * S - sign bit, E - bits of the biased exponent, M - bits of the mantissa, 0 + * - zero bits. + */ + const uint32_t w = (uint32_t)h << 16; + /* + * Extract the sign of the input number into the high bit of the 32-bit word: + * + * +---+----------------------------------+ + * | S |0000000 00000000 00000000 00000000| + * +---+----------------------------------+ + * Bits 31 0-31 + */ + const uint32_t sign = w & UINT32_C(0x80000000); + /* + * Extract mantissa and biased exponent of the input number into the high bits + * of the 32-bit word: + * + * +-----+------------+---------------------+ + * |EEEEE|MM MMMM MMMM|0 0000 0000 0000 0000| + * +-----+------------+---------------------+ + * Bits 27-31 17-26 0-16 + */ + const uint32_t two_w = w + w; + + /* + * Shift mantissa and exponent into bits 23-28 and bits 13-22 so they become + * mantissa and exponent of a single-precision floating-point number: + * + * S|Exponent | Mantissa + * +-+---+-----+------------+----------------+ + * |0|000|EEEEE|MM MMMM MMMM|0 0000 0000 0000| + * +-+---+-----+------------+----------------+ + * Bits | 23-31 | 0-22 + * + * Next, there are some adjustments to the exponent: + * - The exponent needs to be corrected by the difference in exponent bias + * between single-precision and half-precision formats (0x7F - 0xF = 0x70) + * - Inf and NaN values in the inputs should become Inf and NaN values after + * conversion to the single-precision number. Therefore, if the biased + * exponent of the half-precision input was 0x1F (max possible value), the + * biased exponent of the single-precision output must be 0xFF (max possible + * value). We do this correction in two steps: + * - First, we adjust the exponent by (0xFF - 0x1F) = 0xE0 (see exp_offset + * below) rather than by 0x70 suggested by the difference in the exponent bias + * (see above). + * - Then we multiply the single-precision result of exponent adjustment by + * 2**(-112) to reverse the effect of exponent adjustment by 0xE0 less the + * necessary exponent adjustment by 0x70 due to difference in exponent bias. + * The floating-point multiplication hardware would ensure than Inf and + * NaN would retain their value on at least partially IEEE754-compliant + * implementations. + * + * Note that the above operations do not handle denormal inputs (where biased + * exponent == 0). However, they also do not operate on denormal inputs, and + * do not produce denormal results. + */ + constexpr uint32_t exp_offset = UINT32_C(0xE0) << 23; + // const float exp_scale = 0x1.0p-112f; + constexpr uint32_t scale_bits = (uint32_t)15 << 23; + float exp_scale_val = 0; + std::memcpy(&exp_scale_val, &scale_bits, sizeof(exp_scale_val)); + const float exp_scale = exp_scale_val; + const float normalized_value = + fp32_from_bits((two_w >> 4) + exp_offset) * exp_scale; + + /* + * Convert denormalized half-precision inputs into single-precision results + * (always normalized). Zero inputs are also handled here. + * + * In a denormalized number the biased exponent is zero, and mantissa has + * on-zero bits. First, we shift mantissa into bits 0-9 of the 32-bit word. + * + * zeros | mantissa + * +---------------------------+------------+ + * |0000 0000 0000 0000 0000 00|MM MMMM MMMM| + * +---------------------------+------------+ + * Bits 10-31 0-9 + * + * Now, remember that denormalized half-precision numbers are represented as: + * FP16 = mantissa * 2**(-24). + * The trick is to construct a normalized single-precision number with the + * same mantissa and thehalf-precision input and with an exponent which would + * scale the corresponding mantissa bits to 2**(-24). A normalized + * single-precision floating-point number is represented as: FP32 = (1 + + * mantissa * 2**(-23)) * 2**(exponent - 127) Therefore, when the biased + * exponent is 126, a unit change in the mantissa of the input denormalized + * half-precision number causes a change of the constructed single-precision + * number by 2**(-24), i.e. the same amount. + * + * The last step is to adjust the bias of the constructed single-precision + * number. When the input half-precision number is zero, the constructed + * single-precision number has the value of FP32 = 1 * 2**(126 - 127) = + * 2**(-1) = 0.5 Therefore, we need to subtract 0.5 from the constructed + * single-precision number to get the numerical equivalent of the input + * half-precision number. + */ + constexpr uint32_t magic_mask = UINT32_C(126) << 23; + constexpr float magic_bias = 0.5f; + const float denormalized_value = + fp32_from_bits((two_w >> 17) | magic_mask) - magic_bias; + + /* + * - Choose either results of conversion of input as a normalized number, or + * as a denormalized number, depending on the input exponent. The variable + * two_w contains input exponent in bits 27-31, therefore if its smaller than + * 2**27, the input is either a denormal number, or zero. + * - Combine the result of conversion of exponent and mantissa with the sign + * of the input number. + */ + constexpr uint32_t denormalized_cutoff = UINT32_C(1) << 27; + const uint32_t result = + sign | (two_w < denormalized_cutoff ? fp32_to_bits(denormalized_value) + : fp32_to_bits(normalized_value)); + return fp32_from_bits(result); +#endif // C10_X86_F16 +} + +/* + * Convert a 32-bit floating-point number in IEEE single-precision format to a + * 16-bit floating-point number in IEEE half-precision format, in bit + * representation. + * + * @note The implementation relies on IEEE-like (no assumption about rounding + * mode and no operations on denormals) floating-point operations and bitcasts + * between integer and floating-point variables. + */ +inline uint16_t fp16_ieee_from_fp32_value(float f) { +#ifdef C10_X86_F16 + return _cvtss_sh(f, _MM_FROUND_TO_NEAREST_INT); +#else + // const float scale_to_inf = 0x1.0p+112f; + // const float scale_to_zero = 0x1.0p-110f; + constexpr uint32_t scale_to_inf_bits = (uint32_t)239 << 23; + constexpr uint32_t scale_to_zero_bits = (uint32_t)17 << 23; + float scale_to_inf_val = 0, scale_to_zero_val = 0; + std::memcpy(&scale_to_inf_val, &scale_to_inf_bits, sizeof(scale_to_inf_val)); + std::memcpy(&scale_to_zero_val, &scale_to_zero_bits, + sizeof(scale_to_zero_val)); + const float scale_to_inf = scale_to_inf_val; + const float scale_to_zero = scale_to_zero_val; + +#if defined(_MSC_VER) && _MSC_VER == 1916 + float base = ((signbit(f) != 0 ? -f : f) * scale_to_inf) * scale_to_zero; +#else + float base = (fabsf(f) * scale_to_inf) * scale_to_zero; +#endif + + const uint32_t w = fp32_to_bits(f); + const uint32_t shl1_w = w + w; + const uint32_t sign = w & UINT32_C(0x80000000); + uint32_t bias = shl1_w & UINT32_C(0xFF000000); + if (bias < UINT32_C(0x71000000)) { + bias = UINT32_C(0x71000000); + } + + base = fp32_from_bits((bias >> 1) + UINT32_C(0x07800000)) + base; + const uint32_t bits = fp32_to_bits(base); + const uint32_t exp_bits = (bits >> 13) & UINT32_C(0x00007C00); + const uint32_t mantissa_bits = bits & UINT32_C(0x00000FFF); + const uint32_t nonsign = exp_bits + mantissa_bits; + return static_cast( + (sign >> 16) | + (shl1_w > UINT32_C(0xFF000000) ? UINT16_C(0x7E00) : nonsign)); +#endif // C10_X86_F16 +} + +#ifdef C10_X86_F16 +#undef C10_X86_F16 +#endif // C10_X86_F16 + +#if defined(__aarch64__) && !defined(__CUDACC__) +inline float16_t fp16_from_bits(uint16_t h) { + return c10::bit_cast(h); +} + +inline uint16_t fp16_to_bits(float16_t f) { return c10::bit_cast(f); } + +// According to https://godbolt.org/z/frExdbsWG it would translate to single +// fcvt s0, h0 +inline float native_fp16_to_fp32_value(uint16_t h) { + return static_cast(fp16_from_bits(h)); +} + +inline uint16_t native_fp16_from_fp32_value(float f) { + return fp16_to_bits(static_cast(f)); +} +#endif + +} // namespace detail + +struct alignas(2) Half { + unsigned short x; + + struct from_bits_t {}; + C10_HOST_DEVICE static constexpr from_bits_t from_bits() { + return from_bits_t(); + } + + // HIP wants __host__ __device__ tag, CUDA does not +#if defined(USE_ROCM) + C10_HOST_DEVICE Half() = default; +#else + Half() = default; +#endif + + constexpr C10_HOST_DEVICE Half(unsigned short bits, from_bits_t) : x(bits) {} +#if defined(__aarch64__) && !defined(__CUDACC__) + inline Half(float16_t value); + inline operator float16_t() const; +#else + inline C10_HOST_DEVICE Half(float value); + inline C10_HOST_DEVICE operator float() const; +#endif + +#if defined(__CUDACC__) || defined(__HIPCC__) + inline C10_HOST_DEVICE Half(const __half &value); + inline C10_HOST_DEVICE operator __half() const; +#endif +#ifdef SYCL_LANGUAGE_VERSION + inline C10_HOST_DEVICE Half(const sycl::half &value); + inline C10_HOST_DEVICE operator sycl::half() const; +#endif +}; + +C10_API inline std::ostream &operator<<(std::ostream &out, const Half &value) { + out << (float)value; + return out; +} + +} // namespace c10 + +#include // IWYU pragma: keep diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/TypeSafeSignMath.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/TypeSafeSignMath.h new file mode 100644 index 000000000..3ec70e6b6 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/TypeSafeSignMath.h @@ -0,0 +1,133 @@ +#pragma once + +#include +#include +#include + +C10_CLANG_DIAGNOSTIC_PUSH() +#if C10_CLANG_HAS_WARNING("-Wstring-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wstring-conversion") +#endif +#if C10_CLANG_HAS_WARNING("-Wimplicit-int-float-conversion") +C10_CLANG_DIAGNOSTIC_IGNORE("-Wimplicit-int-float-conversion") +#endif + +namespace c10 { + +/// Returns false since we cannot have x < 0 if x is unsigned. +template +inline constexpr bool is_negative(const T & /*x*/, + std::true_type /*is_unsigned*/) { + return false; +} + +/// Returns true if a signed variable x < 0 +template +inline constexpr bool is_negative(const T &x, std::false_type /*is_unsigned*/) { + return x < T(0); +} + +/// Returns true if x < 0 +/// NOTE: Will fail on an unsigned custom type +/// For the most part it's possible to fix this if +/// the custom type has a constexpr constructor. +/// However, notably, c10::Half does not :-( +template inline constexpr bool is_negative(const T &x) { + return is_negative(x, std::is_unsigned()); +} + +/// Returns the sign of an unsigned variable x as 0, 1 +template +inline constexpr int signum(const T &x, std::true_type /*is_unsigned*/) { + return T(0) < x; +} + +/// Returns the sign of a signed variable x as -1, 0, 1 +template +inline constexpr int signum(const T &x, std::false_type /*is_unsigned*/) { + return (T(0) < x) - (x < T(0)); +} + +/// Returns the sign of x as -1, 0, 1 +/// NOTE: Will fail on an unsigned custom type +/// For the most part it's possible to fix this if +/// the custom type has a constexpr constructor. +/// However, notably, c10::Half does not :-( +template inline constexpr int signum(const T &x) { + return signum(x, std::is_unsigned()); +} + +/// Returns true if a and b are not both negative +template +inline constexpr bool signs_differ(const T &a, const U &b) { + return is_negative(a) != is_negative(b); +} + +// Suppress sign compare warning when compiling with GCC +// as later does not account for short-circuit rule before +// raising the warning, see https://godbolt.org/z/Tr3Msnz99 +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-compare" +#endif + +/// Returns true if x is greater than the greatest value of the type Limit +template +inline constexpr bool greater_than_max(const T &x) { + constexpr bool can_overflow = + std::numeric_limits::digits > std::numeric_limits::digits; + return can_overflow && x > std::numeric_limits::max(); +} + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + +/// Returns true if x < lowest(Limit). Standard comparison +template +inline constexpr bool less_than_lowest(const T &x, + std::false_type /*limit_is_unsigned*/, + std::false_type /*x_is_unsigned*/) { + return x < std::numeric_limits::lowest(); +} + +/// Returns false since all the limit is signed and therefore includes +/// negative values but x cannot be negative because it is unsigned +template +inline constexpr bool less_than_lowest(const T & /*x*/, + std::false_type /*limit_is_unsigned*/, + std::true_type /*x_is_unsigned*/) { + return false; +} + +/// Returns true if x < 0, where 0 is constructed from T. +/// Limit is not signed, so its lower value is zero +template +inline constexpr bool less_than_lowest(const T &x, + std::true_type /*limit_is_unsigned*/, + std::false_type /*x_is_unsigned*/) { + return x < T(0); +} + +/// Returns false sign both types are unsigned +template +inline constexpr bool less_than_lowest(const T & /*x*/, + std::true_type /*limit_is_unsigned*/, + std::true_type /*x_is_unsigned*/) { + return false; +} + +/// Returns true if x is less than the lowest value of type T +/// NOTE: Will fail on an unsigned custom type +/// For the most part it's possible to fix this if +/// the custom type has a constexpr constructor. +/// However, notably, c10::Half does not : +template +inline constexpr bool less_than_lowest(const T &x) { + return less_than_lowest(x, std::is_unsigned(), + std::is_unsigned()); +} + +} // namespace c10 + +C10_CLANG_DIAGNOSTIC_POP() diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/bit_cast.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/bit_cast.h new file mode 100644 index 000000000..640c9c029 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/bit_cast.h @@ -0,0 +1,43 @@ +#pragma once + +#include +#include + +#if __has_include() && (__cplusplus >= 202002L || (defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L)) +#include +#define C10_HAVE_STD_BIT_CAST 1 +#else +#define C10_HAVE_STD_BIT_CAST 0 +#endif // __has_include() && (__cplusplus >= 202002L || + // (defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L)) + +namespace c10 { + +#if C10_HAVE_STD_BIT_CAST +using std::bit_cast; +#else +// Implementations of std::bit_cast() from C++ 20. +// +// This is a less sketchy version of reinterpret_cast. +// +// See https://en.cppreference.com/w/cpp/numeric/bit_cast for more +// information as well as the source of our implementations. +template +std::enable_if_t && + std::is_trivially_copyable_v, + To> +// constexpr support needs compiler magic +bit_cast(const From &src) noexcept { + static_assert(std::is_trivially_constructible_v, + "This implementation additionally requires " + "destination type to be trivially constructible"); + + To dst; + std::memcpy(&dst, &src, sizeof(To)); + return dst; +} +#endif // C10_HAVE_STD_BIT_CAST +#undef C10_HAVE_STD_BIT_CAST + +} // namespace c10 diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/floating_point_utils.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/floating_point_utils.h new file mode 100644 index 000000000..b240c4ea2 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/floating_point_utils.h @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include + +namespace c10::detail { + +C10_HOST_DEVICE inline float fp32_from_bits(uint32_t w) { +#if defined(__OPENCL_VERSION__) + return as_float(w); +#elif defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) + return __uint_as_float((unsigned int)w); +#elif defined(__INTEL_COMPILER) + return _castu32_f32(w); +#else + return c10::bit_cast(w); +#endif +} + +C10_HOST_DEVICE inline uint32_t fp32_to_bits(float f) { +#if defined(__OPENCL_VERSION__) + return as_uint(f); +#elif defined(__CUDA_ARCH__) || defined(__HIP_DEVICE_COMPILE__) + return (uint32_t)__float_as_uint(f); +#elif defined(__INTEL_COMPILER) + return _castf32_u32(f); +#else + return c10::bit_cast(f); +#endif +} + +} // namespace c10::detail diff --git a/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/irange.h b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/irange.h new file mode 100644 index 000000000..72a748cb0 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/c10/c10/util/irange.h @@ -0,0 +1,107 @@ +// Copyright 2004-present Facebook. All Rights Reserved. + +#pragma once + +#include + +#include +#include +#include +#include + +namespace c10 { + +namespace detail { + +template , int> = 0> +struct integer_iterator { + using iterator_category = std::input_iterator_tag; + using value_type = I; + using difference_type = std::ptrdiff_t; + using pointer = I *; + using reference = I &; + + explicit constexpr integer_iterator(I value_) : value(value_) {} + + constexpr I operator*() const { return value; } + + constexpr I const *operator->() const { return &value; } + + constexpr integer_iterator &operator++() { + ++value; + return *this; + } + + constexpr integer_iterator operator++(int) { + const auto copy = *this; + ++*this; + return copy; + } + + constexpr bool operator==(const integer_iterator &other) const { + if constexpr (one_sided) { + // Range-for loops' end test is `begin != end`, not `begin < + // end`. To handle `c10::irange(n)` where n < 0 (which should be + // empty), we just make `begin != end` fail whenever `end` is + // negative. + return is_negative(other.value) || value == other.value; + } else { + return value == other.value; + } + // Suppress "warning: missing return statement at end of non-void function" + // which Nvidia's Robert Crovella confirms is an NVCC compiler error + // here https://stackoverflow.com/a/64561686/752843 on 2020-10-27 + // `__builtin_unreachable();` would be best here, but it's not + // available with all compilers. So we instead return an arbitrary + // value trusting that this line will, in fact, never be reached. + return false; // Horrible hack + } + + constexpr bool operator!=(const integer_iterator &other) const { + return !(*this == other); + } + +protected: + I value; +}; + +} // namespace detail + +template , bool> = true> +struct integer_range { +public: + constexpr integer_range(I begin, I end) : begin_(begin), end_(end) {} + using iterator = detail::integer_iterator; + constexpr iterator begin() const { return begin_; } + constexpr iterator end() const { return end_; } + +private: + iterator begin_; + iterator end_; +}; + +/// Creates an integer range for the half-open interval [begin, end) +/// If end<=begin, then the range is empty. +/// The range has the type of the `end` integer; `begin` integer is +/// cast to this type. +template , bool> = true, + std::enable_if_t, bool> = true> +integer_range irange(Integer1 begin, Integer2 end) { + // If end<=begin then the range is empty; we can achieve this effect by + // choosing the larger of {begin, end} as the loop terminator + return {static_cast(begin), + std::max(static_cast(begin), end)}; +} + +/// Creates an integer range for the half-open interval [0, end) +/// If end<=begin, then the range is empty +template , bool> = true> +constexpr integer_range irange(Integer end) { + return {Integer(), end}; +} + +} // namespace c10 diff --git a/third-party/include/executorch/runtime/core/portable_type/complex.h b/third-party/include/executorch/runtime/core/portable_type/complex.h new file mode 100644 index 000000000..56ed55d41 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/complex.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +/** + * An implementation of complex numbers, compatible with c10/util/complex.h from + * pytorch core. + */ +template struct alignas(sizeof(T) * 2) complex { + T real_ = T(0); + T imag_ = T(0); +}; + +/** + * Specialization for Half, which is not a primitive C numeric type. + */ +template <> struct alignas(4) complex { + Half real_; + Half imag_; +}; + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::complex; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/device.h b/third-party/include/executorch/runtime/core/portable_type/device.h new file mode 100644 index 000000000..7f4f447b1 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/device.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +/// Denotes the specific genre of compute device. +/// Subset of https://github.com/pytorch/pytorch/blob/main/c10/core/Device.h +enum class DeviceType : int8_t { + CPU = 0, +}; + +/// An index representing a specific device; For cpu it should always be -1 or 0 +using DeviceIndex = int8_t; + +/** + * An abstraction for the compute device on which a tensor is located. + * ExecuTorch doesn't allow dynamic dispatching based on device, so this type is + * just a skeleton to allow certain kernels that expect device as an + * argument to still be run. + * + * In ExecuTorch this is always expected to be CPU. + */ +struct Device final { + using Type = DeviceType; + + /// Constructs a new `Device` from a `DeviceType` and an optional device + /// index. + /* implicit */ Device(DeviceType type, DeviceIndex index = -1) + : type_(type), index_(index) {} + + /// Returns the type of device this is. Only CPU is supported. + DeviceType type() const noexcept { return type_; } + + /// Returns true if the device is of CPU type. + bool is_cpu() const noexcept { return type_ == DeviceType::CPU; } + + /// Returns the device index. Always 0 if specified or -1 if not provided. + DeviceIndex index() const noexcept { + ET_CHECK(index_ == 0 || index_ == -1); + return index_; + } + +private: + DeviceType type_; + DeviceIndex index_ = -1; +}; + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::Device; +using ::executorch::runtime::etensor::DeviceType; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/half.h b/third-party/include/executorch/runtime/core/portable_type/half.h new file mode 100644 index 000000000..bf4c676ce --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/half.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch::runtime::etensor { +using c10::Half; +namespace internal { +using c10::detail::fp16_ieee_from_fp32_value; +using c10::detail::fp16_ieee_to_fp32_bits; +using c10::detail::fp16_ieee_to_fp32_value; +using c10::detail::fp32_from_bits; +using c10::detail::fp32_to_bits; +} // namespace internal +} // namespace executorch::runtime::etensor +namespace torch::executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::Half; +} // namespace torch::executor diff --git a/third-party/include/executorch/runtime/core/portable_type/optional.h b/third-party/include/executorch/runtime/core/portable_type/optional.h new file mode 100644 index 000000000..31ad06fd0 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/optional.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +// NOLINTNEXTLINE(misc-unused-using-decls) +using std::nullopt; +// NOLINTNEXTLINE(misc-unused-using-decls) +using std::nullopt_t; +// NOLINTNEXTLINE(misc-unused-using-decls) +using std::optional; + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::nullopt; +using ::executorch::runtime::etensor::nullopt_t; +using ::executorch::runtime::etensor::optional; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/qint_types.h b/third-party/include/executorch/runtime/core/portable_type/qint_types.h new file mode 100644 index 000000000..183675e18 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/qint_types.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +/** + * qint8 is for signed 8 bit quantized Tensors + */ +struct alignas(1) qint8 { + using underlying = int8_t; + int8_t val_; + qint8() = default; + explicit qint8(int8_t val) : val_(val) {} +}; + +/** + * quint8 is for unsigned 8 bit quantized Tensors + */ +struct alignas(1) quint8 { + using underlying = uint8_t; + uint8_t val_; + quint8() = default; + explicit quint8(uint8_t val) : val_(val) {} +}; + +/** + * qint32 is for signed 32 bit quantized Tensors + */ +struct alignas(4) qint32 { + using underlying = int32_t; + int32_t val_; + qint32() = default; + explicit qint32(int32_t val) : val_(val) {} +}; + +/** + * quint4x2 is for un-signed 4 bit quantized Tensors that are packed to byte + * boundary. + */ +struct alignas(1) quint4x2 { + using underlying = uint8_t; + uint8_t val_; + quint4x2() = default; + explicit quint4x2(uint8_t val) : val_(val) {} +}; + +/** + * quint2x4 is for un-signed 2 bit quantized Tensors that are packed to byte + * boundary. + */ +struct alignas(1) quint2x4 { + using underlying = uint8_t; + uint8_t val_; + quint2x4() = default; + explicit quint2x4(uint8_t val) : val_(val) {} +}; + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::qint32; +using ::executorch::runtime::etensor::qint8; +using ::executorch::runtime::etensor::quint2x4; +using ::executorch::runtime::etensor::quint4x2; +using ::executorch::runtime::etensor::quint8; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/scalar.h b/third-party/include/executorch/runtime/core/portable_type/scalar.h new file mode 100644 index 000000000..f503990e1 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/scalar.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include + +#include +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +/** + * Represents a scalar value. + * + * The API is a source-compatible subset of c10::Scalar, and the + * semantics/behavior should also match the c10 version. + */ +class Scalar { +public: + Scalar() : Scalar(int64_t(0)) {} + + template ::value, + bool>::type = true> + /*implicit*/ Scalar(T val) : tag(Tag::Int) { + v.as_int = static_cast(val); + } + /*implicit*/ Scalar(bool val) : tag(Tag::Bool) { v.as_bool = val; } + /*implicit*/ Scalar(double val) : tag(Tag::Double) { v.as_double = val; } + /*implicit*/ Scalar(BFloat16 val) : Scalar((double)(float)val) {} + /*implicit*/ Scalar(Half val) : Scalar((double)(float)val) {} + + /// Returns the concrete scalar value stored within. + template T to() const; + + /// Returns true if the scalar is integral, false otherwise. + bool isIntegral(bool includeBool) const { + return Tag::Int == tag || (includeBool && isBoolean()); + } + + /// Returns true if the scalar is a floating point, false otherwise. + bool isFloatingPoint() const { return tag == Tag::Double; } + + /// Returns true if the scalar is a boolean, false otherwise. + bool isBoolean() const { return tag == Tag::Bool; } + +private: + int64_t toInt() const { + if (isIntegral(/*includeBool=*/false)) { + return v.as_int; + } else if (isBoolean()) { + return static_cast(v.as_bool); + } else { + ET_CHECK_MSG(false, "Scalar is not an int nor a Boolean."); + } + } + + double toFloatingPoint() const { + ET_CHECK_MSG(isFloatingPoint(), "Scalar is not a Double."); + return v.as_double; + } + + double toDouble() const { + ET_CHECK_MSG(isFloatingPoint(), "Scalar is not a Double."); + return v.as_double; + } + + bool toBool() const { + ET_CHECK_MSG(isBoolean(), "Scalar is not a Boolean."); + return v.as_bool; + } + + Tag tag; + union v_t { + double as_double; + int64_t as_int; + bool as_bool; + v_t() {} // default constructor + } v; +}; + +#define ET_DEFINE_SCALAR_TO_METHOD(T, name) \ + template <> inline T Scalar::to() const { return to##name(); } + +ET_DEFINE_SCALAR_TO_METHOD(double, Double) +ET_DEFINE_SCALAR_TO_METHOD(int64_t, Int) +ET_DEFINE_SCALAR_TO_METHOD(bool, Bool) +#undef ET_DEFINE_SCALAR_TO_METHOD + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::Scalar; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/scalar_type.h b/third-party/include/executorch/runtime/core/portable_type/scalar_type.h new file mode 100644 index 000000000..b7d208721 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/scalar_type.h @@ -0,0 +1,154 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * + * Forked from + * https://github.com/pytorch/pytorch/blob/master/c10/core/ScalarType.h + * + * Everything but the ScalarType definition is in util/ScalarTypeUtil.h + * + * Note that these files do not need to be strictly identical to the pytorch + * core file, as far as names go. The only critical piece is that the types and + * indices of the main ScalarType enum line up, so that serialization is + * compatible between the two. + * + * Modifications for ExecuTorch: + * - Namespace torch::executor instead of c10 + * - Macro prefix ET_ instead of AT_ + * - Use ET_CHECK_MSG() instead of TORCH_CHECK() + * - Don't define standalone constants like `kByte`, `kInt` to keep the + * namespace clean + * - Remove operator<< to avoid a dependency on ostream and stdlib + * - Make `static inline` functions `inline` to avoid creating multiple + * copies of them. See + * https://gist.github.com/htfy96/50308afc11678d2e3766a36aa60d5f75#conclusion. + * - Remove deprecated definitions + * - Minor cleanup for internal consistency + */ + +#pragma once + +#include + +#include +#include +#include +#include +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +// Placing a bunch of unused dtypes here as our macros don't make it easy +// to skip scalar types defined in aten that we dont have. +namespace unused_dtype { +struct alignas(1) Float8_e5m2 { + uint8_t x; + using underlying = uint8_t; + Float8_e5m2() = default; + explicit Float8_e5m2(uint8_t val) : x(val) {} +}; +struct alignas(1) Float8_e4m3fn { + uint8_t x; + using underlying = uint8_t; + Float8_e4m3fn() = default; + explicit Float8_e4m3fn(uint8_t val) : x(val) {} +}; +struct alignas(1) Float8_e5m2fnuz { + uint8_t x; + using underlying = uint8_t; + Float8_e5m2fnuz() = default; + explicit Float8_e5m2fnuz(uint8_t val) : x(val) {} +}; +struct alignas(1) Float8_e4m3fnuz { + uint8_t x; + using underlying = uint8_t; + Float8_e4m3fnuz() = default; + explicit Float8_e4m3fnuz(uint8_t val) : x(val) {} +}; + +} // namespace unused_dtype + +/** + * Calls the provided macro on every ScalarType, providing the C type and the + * ScalarType name to each call. + * + * The indices and C types must be consistent with + * AT_FORALL_SCALAR_TYPES_WITH_COMPLEX_AND_QINTS in the core pytorch file + * c10/core/ScalarType.h. This ensures that ExecuTorch serialization is + * compatible with ATen serialization. + * + * @param _ A macro that takes two parameters: the name of a C type, and the + * name of the corresponding ScalarType enumerator. + */ +#define ET_FORALL_SCALAR_TYPES(_) \ + _(uint8_t, Byte) /* 0 */ \ + _(int8_t, Char) /* 1 */ \ + _(int16_t, Short) /* 2 */ \ + _(int32_t, Int) /* 3 */ \ + _(int64_t, Long) /* 4 */ \ + _(::executorch::runtime::etensor::Half, Half) /* 5 */ \ + _(float, Float) /* 6 */ \ + _(double, Double) /* 7 */ \ + _(::executorch::runtime::etensor::complex<::torch::executor::Half>, \ + ComplexHalf) /* 8 */ \ + _(::executorch::runtime::etensor::complex, ComplexFloat) /* 9 */ \ + _(::executorch::runtime::etensor::complex, ComplexDouble) /* 10 */ \ + _(bool, Bool) /* 11 */ \ + _(::executorch::runtime::etensor::qint8, QInt8) /* 12 */ \ + _(::executorch::runtime::etensor::quint8, QUInt8) /* 13 */ \ + _(::executorch::runtime::etensor::qint32, QInt32) /* 14 */ \ + _(::executorch::runtime::etensor::BFloat16, BFloat16) /* 15 */ \ + _(::executorch::runtime::etensor::quint4x2, QUInt4x2) /* 16 */ \ + _(::executorch::runtime::etensor::quint2x4, QUInt2x4) /* 17 */ \ + _(::executorch::runtime::etensor::bits1x8, Bits1x8) /* 18 */ \ + _(::executorch::runtime::etensor::bits2x4, Bits2x4) /* 19 */ \ + _(::executorch::runtime::etensor::bits4x2, Bits4x2) /* 20 */ \ + _(::executorch::runtime::etensor::bits8, Bits8) /* 21 */ \ + _(::executorch::runtime::etensor::bits16, Bits16) /* 22 */ \ + _(::executorch::runtime::etensor::unused_dtype::Float8_e5m2, \ + Float8_e5m2) /* 23 */ \ + _(::executorch::runtime::etensor::unused_dtype::Float8_e4m3fn, \ + Float8_e4m3fn) /* 24 */ \ + _(::executorch::runtime::etensor::unused_dtype::Float8_e5m2fnuz, \ + Float8_e5m2fnuz) /* 25 */ \ + _(::executorch::runtime::etensor::unused_dtype::Float8_e4m3fnuz, \ + Float8_e4m3fnuz) /* 26 */ \ + _(uint16_t, UInt16) /* 27 */ \ + _(uint32_t, UInt32) /* 28 */ \ + _(uint64_t, UInt64) /* 29 */ + +/** + * Data types (dtypes) that can be used as element types in ETensors. + */ +enum class ScalarType : int8_t { +/// Define an enumerator for each ScalarType. +#define DEFINE_ENUM(unused, name) name, + ET_FORALL_SCALAR_TYPES(DEFINE_ENUM) +#undef DEFINE_ENUM + + /// An explicitly undefined ScalarType. Does not map to any C type. + Undefined, + /// The number of ScalarType enumerators. + NumOptions, +}; + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::ScalarType; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/string_view.h b/third-party/include/executorch/runtime/core/portable_type/string_view.h new file mode 100644 index 000000000..8e28fa022 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/string_view.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +using std::string_view; + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::string_view; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/tensor.h b/third-party/include/executorch/runtime/core/portable_type/tensor.h new file mode 100644 index 000000000..7e9efaa4e --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/tensor.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +/** + * A minimal Tensor type whose API is a source compatible subset of at::Tensor. + * + * NOTE: Instances of this class do not own the TensorImpl given to it, + * which means that the caller must guarantee that the TensorImpl lives longer + * than any Tensor instances that point to it. + * + * See the documention on TensorImpl for details about the return/parameter + * types used here and how they relate to at::Tensor. + */ +class Tensor { +public: + /// The type used for elements of `sizes()`. + using SizesType = TensorImpl::SizesType; + /// The type used for elements of `dim_order()`. + using DimOrderType = TensorImpl::DimOrderType; + /// The type used for elements of `strides()`. + using StridesType = TensorImpl::StridesType; + + Tensor() = delete; + explicit constexpr Tensor(TensorImpl *impl) : impl_(impl) {} + + /** + * Returns a pointer to the underlying TensorImpl. + * + * NOTE: Clients should be wary of operating on the TensorImpl + * directly instead of the Tensor. It is easy to break things. + */ + TensorImpl *unsafeGetTensorImpl() const { + // TODO(T154114015): See if we can make this api private with friends. + return impl_; + } + + /** + * Returns the size of the tensor in bytes. + * + * NOTE: Only the alive space is returned not the total capacity of the + * underlying data blob. + */ + size_t nbytes() const { return impl_->nbytes(); } + + /** + * Returns the size of the tensor at the given dimension. + * + * NOTE: that size() intentionally does not return SizeType even though it + * returns an element of an array of SizeType. This is to help make calls of + * this method more compatible with at::Tensor, and more consistent with the + * rest of the methods on this class and in ETensor. + */ + ssize_t size(ssize_t dim) const { return impl_->size(dim); } + + /// Returns the tensor's number of dimensions. + ssize_t dim() const { return impl_->dim(); } + + /// Returns the number of elements in the tensor. + ssize_t numel() const { return impl_->numel(); } + + /// Returns the type of the elements in the tensor (int32, float, bool, etc). + ScalarType scalar_type() const { return impl_->scalar_type(); } + + inline ScalarType dtype() const { return scalar_type(); } + + /// Returns the size in bytes of one element of the tensor. + ssize_t element_size() const { return impl_->element_size(); } + + /// Returns the sizes of the tensor at each dimension. + const ArrayRef sizes() const { return impl_->sizes(); } + + /// Returns the order the dimensions are laid out in memory. + const ArrayRef dim_order() const { return impl_->dim_order(); } + + /// Returns the strides of the tensor at each dimension. + const ArrayRef strides() const { return impl_->strides(); } + + /// Returns the mutability of the shape of the tensor. + TensorShapeDynamism shape_dynamism() const { return impl_->shape_dynamism(); } + + /// Returns a pointer of type T to the constant underlying data blob. + template inline const T *const_data_ptr() const { + return impl_->data(); + } + + /// Returns a pointer to the constant underlying data blob. + inline const void *const_data_ptr() const { return impl_->data(); } + + /// Returns a pointer of type T to the mutable underlying data blob. + template inline T *mutable_data_ptr() const { + return impl_->mutable_data(); + } + + /// Returns a pointer to the mutable underlying data blob. + inline void *mutable_data_ptr() const { return impl_->mutable_data(); } + + /// DEPRECATED: Use const_data_ptr or mutable_data_ptr instead. + template ET_DEPRECATED inline T *data_ptr() const { + return impl_->mutable_data(); + } + + /// DEPRECATED: Use const_data_ptr or mutable_data_ptr instead. + ET_DEPRECATED inline void *data_ptr() const { return impl_->mutable_data(); } + + /** + * DEPRECATED: Changes the data_ptr the tensor aliases. Does not free the + * previously pointed to data, does not assume ownership semantics of the new + * ptr. This api does not exist in at::Tensor so kernel developers should + * avoid it. + */ + ET_DEPRECATED void set_data(void *ptr) const { impl_->set_data(ptr); } + +private: + TensorImpl *impl_ = nullptr; +}; + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::Tensor; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/tensor_impl.h b/third-party/include/executorch/runtime/core/portable_type/tensor_impl.h new file mode 100644 index 000000000..7357fffaf --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/tensor_impl.h @@ -0,0 +1,261 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include + +// Forward declaration of a helper that provides access to internal resizing +// methods of TensorImpl. Real definition is in +// executorch/runtime/core/exec_aten/tensor_util.h. +namespace executorch { +namespace runtime { +namespace internal { +class TensorResizerFriend; +} // namespace internal +} // namespace runtime +} // namespace executorch + +namespace executorch { +namespace runtime { +namespace etensor { + +/** + * Manages the storage behind an ETensor (torch::executor::Tensor). + * + * Note that instances of this class do not own the arrays given to it + * (sizes/strides/data), which means that the caller must guarantee that they + * live longer than a given instance of this class. + * + * Note on types: + * + * Code that uses ETensor should also be able to build against at::Tensor. So, + * although the overlapping APIs don't need to be exactly the same, their types + * should be semantically similar. + * + * Many of the methods in at::Tensor use int64_t for parameter and return types. + * This can be a waste when building for 32-bit environments. So, TensorImpl and + * ETensor use ssize_t instead: like int64_t it is signed, but it will match the + * native word size of the target architecture. This will avoid unnecessarily + * expensive uses of 64-bit integers on 32-bit machines. + * + * But, since the types are not identical, code that uses ETensor needs to be + * generic about the local types it uses when working with these methods. In + * most cases, `auto` will do the trick. In the worst case, code can be guarded + * with `#ifdef USE_ATEN_LIB`. + */ +class TensorImpl { +public: + /** + * The type used for elements of `sizes()`. + * + * This must match the size/signedness of the type used for `Tensor.sizes` in + * //executorch/schema/program.fbs. + * + * Note that at::TensorImpl uses `int64_t` for this type. ExecuTorch uses + * `int32_t` to save memory, since no single size value will ever be larger + * than 2 billion. + */ + using SizesType = int32_t; + + /** + * The type used for elements of `dim_order()`. + * + * This must match the size/signedness of the type used for `Tensor.dim_order` + * in //executorch/schema/program.fbs. + */ + using DimOrderType = uint8_t; + + /** + * The type used for elements of `strides()`. + * + * This must match the size/signedness of the type used for `Tensor.strides` + * in //executorch/schema/program.fbs. + * + * Note that at::TensorImpl uses `int64_t` for this type. ExecuTorch uses + * `int32_t` to save memory, since no single stride value will ever be larger + * than 2 billion. + */ + using StridesType = int32_t; + + TensorImpl() = delete; + + /** + * @param type The type of the data (int, float, bool). + * @param dim Number of dimensions, and the length of the `sizes` array. + * @param sizes Sizes of the tensor at each dimension. Must contain `dim` + * entries. + * @param data Pointer to the data, whose size is determined by `type`, + * `dim`, and `sizes`. The tensor will not own this memory. + * @param dim_order Order in which dimensions are laid out in memory. + * @param strides Strides of the tensor at each dimension. Must contain `dim` + * entries. + * @param dynamism The mutability of the shape of the tensor. + */ + TensorImpl(ScalarType type, ssize_t dim, SizesType *sizes, + void *data = nullptr, DimOrderType *dim_order = nullptr, + StridesType *strides = nullptr, + TensorShapeDynamism dynamism = TensorShapeDynamism::STATIC); + + /** + * Returns the size of the tensor in bytes. + * + * NOTE: This returns the size of the data used by the tensor's current shape, + * not the capacity of the underlying buffer. + */ + size_t nbytes() const; + + /** + * Returns the size of the tensor at the given dimension. + * + * NOTE: size() intentionally does not return SizeType even though it + * returns an element of an array of SizeType. This is to help make calls of + * this method more compatible with at::Tensor, and more consistent with the + * rest of the methods on this class and in ETensor. + */ + ssize_t size(ssize_t dim) const { + ET_CHECK_MSG(dim < dim_ && dim >= 0, + "Dimension out of range (expected to be in range of [0, %zd], " + "but got %zd", + dim_ - 1, dim); + return sizes_[dim]; + } + + /// Returns the tensor's number of dimensions. + ssize_t dim() const { return dim_; } + + /// Returns the number of elements in the tensor. + ssize_t numel() const { return numel_; } + + /// Returns the type of the elements in the tensor (int32, float, bool, etc). + ScalarType scalar_type() const { return type_; } + + inline ScalarType dtype() const { return scalar_type(); } + + /// Returns the size in bytes of one element of the tensor. + ssize_t element_size() const; + + /// Returns the sizes of the tensor at each dimension. + const ArrayRef sizes() const { + return ArrayRef{sizes_, static_cast(dim_)}; + } + + /// Returns the order the dimensions are laid out in memory. + const ArrayRef dim_order() const { + return ArrayRef{dim_order_, static_cast(dim_)}; + } + + /// Returns the strides of the tensor at each dimension. + const ArrayRef strides() const { + return ArrayRef{strides_, static_cast(dim_)}; + } + + /// Returns the mutability of the shape of the tensor. + TensorShapeDynamism shape_dynamism() const { return shape_dynamism_; } + + /// Returns a pointer of type T to the constant underlying data blob. + template inline const T *data() const { + return static_cast(data()); + } + + /// Returns a pointer to the constant underlying data blob. + const void *data() const { return data_; } + + /// Returns a pointer of type T to the mutable underlying data blob. + template inline T *mutable_data() const { + return static_cast(mutable_data()); + } + + /// Returns a pointer to the mutable underlying data blob. + void *mutable_data() const { return data_; } + + /// Sets the underlying data blob to the passed in pointer. + void set_data(void *ptr) { data_ = ptr; } + + /* + * DEPRECATED: Use torch::executor::resize_tensor() or + * torch::executor::resize_tensor_impl(). + */ + ET_DEPRECATED + void set_sizes_contiguous(ArrayRef new_sizes) { + Error err = internal_resize_contiguous(new_sizes); + ET_CHECK_MSG(err == Error::Ok, + "Could not resize Tensor; see logs for details"); + } + +private: + // For access to internal_resize_contiguous(). + friend class ::executorch::runtime::internal::TensorResizerFriend; + + /** + * Set the sizes and strides of a tensor assuming contiguous strides. + * Requires that `new_sizes.size() == this.dim()`. + * + * Callers must use torch::executor::resize_tensor() or + * torch::executor::resize_tensor_impl() instead, defined in TensorUtil.h. + * + * Same semantics as at::TensorImpl::set_sizes_contiguous(), but returns an + * error instead of panicking on failure. This is not part of the at::Tensor + * API, and can only be used in lean mode. + */ + ET_NODISCARD Error internal_resize_contiguous(ArrayRef new_sizes); + +private: + // Keep fields arranged to avoid unnecessary alignment holes. + + /// List of sizes of each dimension in the tensor. + SizesType *sizes_; + + /// List of the order that dimensions are laid out in memory. + DimOrderType *dim_order_; + + // TODO(T148356881): Get rid of strides from ETensor + StridesType *strides_; + + /// Pointer to underlying data blob. NOTE: Can be null. + void *data_; + + /// Tensor's number of dimensions. + const ssize_t dim_; + + /// Number of elements in the tensor. + ssize_t numel_; + + /// Maximum number of elements in the bounded tensor. Used when resizing up + /// and down. + size_t numel_bound_; + + /// Scalar type (int, float, bool, etc) of the tensor data. + const ScalarType type_; + + /// Specifies the mutability of the shape of the tensor. + const TensorShapeDynamism shape_dynamism_; +}; + +/** + * Compute the number of elements based on the sizes of a tensor. + */ +ssize_t compute_numel( + const ::executorch::runtime::etensor::TensorImpl::SizesType *sizes, + ssize_t dim); + +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::compute_numel; +using ::executorch::runtime::etensor::TensorImpl; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/portable_type/tensor_options.h b/third-party/include/executorch/runtime/core/portable_type/tensor_options.h new file mode 100644 index 000000000..8b8f98486 --- /dev/null +++ b/third-party/include/executorch/runtime/core/portable_type/tensor_options.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { +namespace etensor { + +/** + * Tensor data memory formats supported by ExecuTorch. This concept only exists + * for compatibility with ATen; use dim_order to describe non-contiguous + * layouts. + */ +enum class MemoryFormat : int8_t { + /** + * Row-major contiguous data. + */ + Contiguous = 0, + /** + * Output tensor format should remain the same as the input tensor format. + * E.g. if the input tensor is in channels_last format, operator output + * should be in channels_last format. + */ + Preserve = 1, +}; + +/** + * Tensor data memory layout. This concept only exists for compatibility + * with ATen. + */ +enum class Layout : int8_t { + /** + * The tensor occupies memory densely and indexing is managed through strides. + * Contrasted with a sparse tensor layout where the memory structure of the + * data blob will be more complicated and indexing requires larger structures. + * + * This is the only layout supported by ExecuTorch. + */ + Strided = 0, +}; +} // namespace etensor +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::etensor::Layout; +using ::executorch::runtime::etensor::MemoryFormat; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/result.h b/third-party/include/executorch/runtime/core/result.h new file mode 100644 index 000000000..bd9ce433a --- /dev/null +++ b/third-party/include/executorch/runtime/core/result.h @@ -0,0 +1,258 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * Result type to be used in conjunction with ExecuTorch Error type. + */ + +#pragma once + +#include +#include + +#include "executorch/runtime/core/error.h" +#include "executorch/runtime/platform/assert.h" + +namespace executorch { +namespace runtime { + +/** + * Result type wrapping either a value of type T or an error. + * + * Example use case: + * @code + * Result getOp(int opcode) { + * if (isValidOpCode(opcode)) { + * return opFns[opcode]; + * } + * return Error::NotFound; + * } + * + * Error useOp(int opcode) { + * Result op = getOp(opcode); + * if (!op.ok()) { + * return op.error(); + * } + * print(op->toString()); + * execute(*op); + * return Error::Ok; + * } + * @endcode + */ +template class Result final { +public: + /// `value_type` member for generic programming. + typedef T value_type; + + /** + * Creates a Result object from an Error. + * + * To preserve the invariant that `(result.error() == Error::Ok) == + * result.ok()`, an `error` parameter value of `Error:Ok` will be converted to + * a non-Ok value. + */ + /* implicit */ Result(Error error) + : error_(error == Error::Ok ? Error::Internal : error), hasValue_(false) { + if ET_UNLIKELY (error == Error::Ok) { + ET_LOG(Debug, "Attempted to create Result from Error::Ok, this has been " + "converted to Error::Internal."); + } + } + + /// Value copy constructor. + /* implicit */ Result(const T &val) : value_(val), hasValue_(true) {} + + /// Value move constructor. + /* implicit */ Result(T &&val) : value_(std::move(val)), hasValue_(true) {} + + /// Result move constructor. + /* implicit */ Result(Result &&rhs) noexcept : hasValue_(rhs.hasValue_) { + if (hasValue_) { + // Use the value type's move constructor. + new (&value_) T(std::move(rhs.value_)); + } else { + error_ = rhs.error_; + } + } + + ~Result() { + if (hasValue_) { + // Manual value destruction. + // Result "owns" the memory, so `delete` would segfault. + value_.~T(); + } + } + + /** + * Returns true if this Result has a value. + * + * If true, it is guaranteed that `error()` will return `Error::Ok`. + * If false, it is guaranteed that `error()` will not return `Error::Ok`. + */ + ET_NODISCARD bool ok() const { return hasValue_; } + + /** + * Returns the error code of this Result. + * + * If this returns `Error::Ok`, it is guaranteed that `ok()` will return true. + * If this does not return `Error:Ok`, it is guaranteed that `ok()` will + * return false. + */ + ET_NODISCARD Error error() const { + if (hasValue_) { + return Error::Ok; + } else { + return error_; + } + } + + /** + * Returns a reference to the Result's value; longhand for operator*(). + * + * Only legal to call if `ok()` returns true. + */ + T &get() { + CheckOk(); + return value_; + } + + /** + * Returns a reference to the Result's value; longhand for operator*(). + * + * Only legal to call if `ok()` returns true. + */ + const T &get() const { + CheckOk(); + return value_; + } + + /* + * Returns a reference to the Result's value; shorthand for get(). + * + * Only legal to call if `ok()` returns true. + */ + const T &operator*() const &; + T &operator*() &; + + /* + * Returns a pointer to the Result's value. + * + * Only legal to call if `ok()` returns true. + */ + const T *operator->() const; + T *operator->(); + +private: + /** + * Delete default constructor since all Results should contain a value or + * error. + */ + Result() = delete; + /// Delete copy constructor since T may not be copyable. + Result(const Result &) = delete; + /// Delete copy assignment since T may not be copyable. + Result &operator=(const Result &) = delete; + /// Delete move assignment since it's not a supported pattern to reuse Result. + Result &operator=(Result &&rhs) = delete; + + // Panics if ok() would return false; + void CheckOk() const { ET_CHECK(hasValue_); } + + union { + T value_; // Used if hasValue_ is true. + Error error_; // Used if hasValue_ is false. + }; + + /// True if the Result contains a value. + const bool hasValue_; +}; + +template const T &Result::operator*() const & { + CheckOk(); + return value_; +} + +template T &Result::operator*() & { + CheckOk(); + return value_; +} + +template const T *Result::operator->() const { + CheckOk(); + return &value_; +} + +template T *Result::operator->() { + CheckOk(); + return &value_; +} + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::Result; +} // namespace executor +} // namespace torch + +/** + * Unwrap a Result to obtain its value. If the Result contains an error, + * propogate the error via trivial function return. + * + * Note: A function using ET_UNWRAP should itself return a Result or Error. + * + * @param[in] result__ Expression yielding the result to unwrap. + * @param[in] ... Optional format string for the log error message and its + * arguments. + */ +#define ET_UNWRAP(result__, ...) ET_INTERNAL_UNWRAP(result__, ##__VA_ARGS__) + +// Internal only: Use ET_UNWRAP() instead. +#define ET_INTERNAL_UNWRAP(...) \ + ET_INTERNAL_UNWRAP_SELECT(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) \ + (__VA_ARGS__) + +// Internal only: Use ET_UNWRAP() instead. +#define ET_INTERNAL_UNWRAP_SELECT(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, \ + ...) \ + ET_INTERNAL_UNWRAP_##N + +// Internal only: Use ET_UNWRAP() instead. +#define ET_INTERNAL_UNWRAP_1(result__) \ + ({ \ + auto et_result__ = (result__); \ + if (!et_result__.ok()) { \ + return et_result__.error(); \ + } \ + std::move(*et_result__); \ + }) + +// Internal only: Use ET_UNWRAP() instead. +#define ET_INTERNAL_UNWRAP_2(result__, message__, ...) \ + ({ \ + auto et_result__ = (result__); \ + if (!et_result__.ok()) { \ + ET_LOG(Error, message__, ##__VA_ARGS__); \ + return et_result__.error(); \ + } \ + std::move(*et_result__); \ + }) + +// Internal only: Use ET_UNWRAP() instead. +#define ET_INTERNAL_UNWRAP_3 ET_INTERNAL_UNWRAP_2 +#define ET_INTERNAL_UNWRAP_4 ET_INTERNAL_UNWRAP_2 +#define ET_INTERNAL_UNWRAP_5 ET_INTERNAL_UNWRAP_2 +#define ET_INTERNAL_UNWRAP_6 ET_INTERNAL_UNWRAP_2 +#define ET_INTERNAL_UNWRAP_7 ET_INTERNAL_UNWRAP_2 +#define ET_INTERNAL_UNWRAP_8 ET_INTERNAL_UNWRAP_2 +#define ET_INTERNAL_UNWRAP_9 ET_INTERNAL_UNWRAP_2 +#define ET_INTERNAL_UNWRAP_10 ET_INTERNAL_UNWRAP_2 diff --git a/third-party/include/executorch/runtime/core/span.h b/third-party/include/executorch/runtime/core/span.h new file mode 100644 index 000000000..7e0a6b346 --- /dev/null +++ b/third-party/include/executorch/runtime/core/span.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +#include + +namespace executorch { +namespace runtime { + +/** + * Represent a reference to an array (0 or more elements + * consecutively in memory), i.e. a start pointer and a length. It allows + * various APIs to take consecutive elements easily and conveniently. + * + * This class does not own the underlying data, it is expected to be used in + * situations where the data resides in some other buffer, whose lifetime + * extends past that of the Span. + * + * Span and ArrayRef are extrememly similar with the difference being ArrayRef + * views a list of constant elements and Span views a list of mutable elements. + * Clients should decide between the two based on if the list elements for their + * use case should be mutable. + * + * This is intended to be trivially copyable, so it should be passed by + * value. + */ +template class Span final { +public: + using value_type = T; + using iterator = T *; + using size_type = size_t; + +public: + /// Construct an empty Span. + /* implicit */ constexpr Span() noexcept : data_(nullptr), length_(0) {} + + /// Construct a Span from a pointer and length. + Span(T *data, size_t length) : data_(data), length_(length) { + ET_DCHECK(data_ != nullptr || length_ == 0); + } + + /// Construct a Span from a range. + Span(T *begin, T *end) : data_(begin), length_(end - begin) {} + + /// Construct a Span from a C array. + template + /* implicit */ constexpr Span(T (&Arr)[N]) : data_(Arr), length_(N) {} + + /// @returns a pointer to the start of the underlying element buffer. + iterator begin() const noexcept { return data_; } + + /// @returns a pointer to the end of the underlying element buffer. + iterator end() const noexcept { return data_ + length_; } + + /// @retval a boolean indicating if the Span is empty. + constexpr bool empty() const noexcept { return length_ == 0; } + + /// @returns a pointer to the start of the underlying element buffer. + constexpr T *data() const noexcept { return data_; } + + /// @returns the number of elements in the Span. + constexpr size_t size() const noexcept { return length_; } + + /// Unchecked index into the array according to the argument index. + /// @returns a reference to the element at the specified index. + T &operator[](size_t index) const { return data_[index]; } + +private: + /// The start of the array, in an external buffer. + T *data_; + + /// The number of elements. + size_type length_; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::Span; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/tag.h b/third-party/include/executorch/runtime/core/tag.h new file mode 100644 index 000000000..32e609375 --- /dev/null +++ b/third-party/include/executorch/runtime/core/tag.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include + +namespace executorch { +namespace runtime { + +#define EXECUTORCH_FORALL_TAGS(_) \ + _(None) \ + _(Tensor) \ + _(String) \ + _(Double) \ + _(Int) \ + _(Bool) \ + _(ListBool) \ + _(ListDouble) \ + _(ListInt) \ + _(ListTensor) \ + _(ListScalar) \ + _(ListOptionalTensor) + +/** + * The dynamic type of an EValue. + */ +enum class Tag : uint32_t { +#define DEFINE_TAG(x) x, + EXECUTORCH_FORALL_TAGS(DEFINE_TAG) +#undef DEFINE_TAG +}; + +/** + * Convert a tag value to a string representation. If ET_ENABLE_ENUM_STRINGS is + * set (it is on by default), this will return a string name (for example, + * "Tensor"). Otherwise, it will return a string representation of the index + * value ("1"). + * + * If the user buffer is not large enough to hold the string representation, the + * string will be truncated. + * + * The return value is the number of characters written, or in the case of + * truncation, the number of characters that would be written if the buffer was + * large enough. + */ +size_t tag_to_string(Tag tag, char *buffer, size_t buffer_size); + +/* The size of the buffer needed to hold the longest tag string, including the + * null terminator. This value is expected to be updated manually, but it + * checked in test_tag.cpp. + */ +constexpr size_t kTagNameBufferSize = 19; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::Tag; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/core/tensor_layout.h b/third-party/include/executorch/runtime/core/tensor_layout.h new file mode 100644 index 000000000..42e8bdb58 --- /dev/null +++ b/third-party/include/executorch/runtime/core/tensor_layout.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include + +namespace executorch { +namespace runtime { + +/** + * Describes the layout of a tensor. + */ +class ET_EXPERIMENTAL TensorLayout final { +public: + TensorLayout() = delete; + + /** + * Creates a TensorLayout from the given parameters. + * + * @param[in] sizes The sizes of the tensor. Note: the span passed here must + * outlive the TensorLayout and all copies of it. + * @param[in] dim_order The dim order of the tensor. Note: the span passed + * here must outlive the TensorLayout and all copies of it. + * @param[in] scalar_type The scalar type of the tensor. + * @return A Result containing the TensorLayout on success, or an error. + */ + static executorch::runtime::Result + create(Span sizes, Span dim_order, + executorch::aten::ScalarType scalar_type); + + /** + * Returns the sizes of the tensor. + * + * NOTE: The TensorLayout must outlive the spans returned here. + */ + Span sizes() const { return sizes_; } + + /** + * Returns the dim order of the tensor. + * + * NOTE: The TensorLayout must outlive the spans returned here. + */ + Span dim_order() const { return dim_order_; } + + /// Returns the scalar type of the tensor. + executorch::aten::ScalarType scalar_type() const { return scalar_type_; } + + /// Returns the size of the tensor in bytes. + size_t nbytes() const { return nbytes_; } + +private: + TensorLayout(Span sizes, Span dim_order, + executorch::aten::ScalarType scalar_type, size_t nbytes) + : sizes_(sizes), dim_order_(dim_order), scalar_type_(scalar_type), + nbytes_(nbytes) {} + /// The sizes of the tensor. + const Span sizes_; + + /// The dim order of the tensor. + const Span dim_order_; + + /// The scalar type of the tensor. + const executorch::aten::ScalarType scalar_type_; + + /// The size in bytes of the tensor. + const size_t nbytes_; +}; + +} // namespace runtime +} // namespace executorch diff --git a/third-party/include/executorch/runtime/core/tensor_shape_dynamism.h b/third-party/include/executorch/runtime/core/tensor_shape_dynamism.h new file mode 100644 index 000000000..ee956288d --- /dev/null +++ b/third-party/include/executorch/runtime/core/tensor_shape_dynamism.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { + +/** + * The resizing capabilities of a Tensor. + * + * The rank of an ExecuTorch Tensors can never change, but shape sometimes can. + */ +enum class TensorShapeDynamism : uint8_t { + /// Cannot change shape. + STATIC = 0, + /// Shape cannot exceed initial capacity. + DYNAMIC_BOUND = 1, + /// No restriction on shape and capacity. + DYNAMIC_UNBOUND = 2, +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::TensorShapeDynamism; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/executor/memory_manager.h b/third-party/include/executorch/runtime/executor/memory_manager.h new file mode 100644 index 000000000..91cdeb3db --- /dev/null +++ b/third-party/include/executorch/runtime/executor/memory_manager.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include + +namespace executorch { +namespace runtime { + +/** + * A container class for allocators used during Method load and execution. + * + * This class consolidates all dynamic memory needs for Method load and + * execution. This can allow for heap-based as well as heap-less execution + * (relevant to some embedded scenarios), and overall provides more control over + * memory use. + * + * This class, however, cannot ensure all allocation is accounted for since + * kernel and backend implementations are free to use a separate way to allocate + * memory (e.g., for things like scratch space). But we do suggest that backends + * and kernels use these provided allocators whenever possible. + */ +class MemoryManager final { +public: + /** + * Constructs a new MemoryManager. + * + * @param[in] method_allocator The allocator to use when loading a Method and + * allocating its internal structures. Must outlive the Method that uses + * it. + * @param[in] planned_memory The memory-planned buffers to use for mutable + * tensor data when executing a Method. Must outlive the Method that uses + * it. May be `nullptr` if the Method does not use any memory-planned + * tensor data. The sizes of the buffers in this HierarchicalAllocator + * must agree with the corresponding + * `MethodMeta::num_memory_planned_buffers()` and + * `MethodMeta::memory_planned_buffer_size(N)` values, which are embedded + * in the Program. + * @param[in] temp_allocator The allocator to use when allocating temporary + * data during kernel or delegate execution. Must outlive the Method that + * uses it. May be `nullptr` if the Method does not use kernels or + * delegates that allocate temporary data. This allocator will be reset + * after every kernel or delegate call during execution. + */ + explicit MemoryManager(MemoryAllocator *method_allocator, + HierarchicalAllocator *planned_memory = nullptr, + MemoryAllocator *temp_allocator = nullptr) + : method_allocator_(method_allocator), planned_memory_(planned_memory), + temp_allocator_(temp_allocator) { + ET_CHECK_MSG(method_allocator != temp_allocator, + "method allocator cannot be the same as temp allocator"); + } + + /** + * DEPRECATED: Use the constructor without `constant_allocator` instead. + * + * TODO(T162089316): Remove this once all users migrate to the new ctor. + */ + ET_DEPRECATED MemoryManager(MemoryAllocator *constant_allocator, + HierarchicalAllocator *non_constant_allocator, + MemoryAllocator *runtime_allocator, + MemoryAllocator *temporary_allocator) + : MemoryManager( + /*method_allocator=*/runtime_allocator, + /*planned_memory=*/non_constant_allocator, + /*temp_allocator=*/temporary_allocator) { + (void)constant_allocator; // Suppress unused variable warning + } + + /** + * Returns the allocator that the runtime will use to allocate internal + * structures while loading a Method. Must not be used after its associated + * Method has been loaded. + */ + MemoryAllocator *method_allocator() const { return method_allocator_; } + + /** + * Returns the memory-planned buffers to use for mutable tensor data. + */ + HierarchicalAllocator *planned_memory() const { return planned_memory_; } + + /** + * Returns the allocator to use for allocating temporary data during kernel or + * delegate execution. + * + * This allocator will be reset after every kernel or delegate call during + * execution. + */ + MemoryAllocator *temp_allocator() const { return temp_allocator_; } + +private: + MemoryAllocator *method_allocator_; + HierarchicalAllocator *planned_memory_; + MemoryAllocator *temp_allocator_; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::MemoryManager; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/executor/method.h b/third-party/include/executorch/runtime/executor/method.h new file mode 100644 index 000000000..3f574e475 --- /dev/null +++ b/third-party/include/executorch/runtime/executor/method.h @@ -0,0 +1,387 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#ifdef __GNUC__ +// Disable -Wdeprecated-declarations, as some builds use 'Werror'. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +// Forward declare flatbuffer types. This is a public header and must not +// include the generated flatbuffer header. +namespace executorch_flatbuffer { +struct Chain; +struct ExecutionPlan; +struct EValue; +} // namespace executorch_flatbuffer + +namespace executorch { +namespace runtime { + +// Forward declare NamedData. This is a public header and must not include +// internal data types. +namespace deserialization { +struct NamedData; +} // namespace deserialization + +// Forward declare Program to avoid a circular reference. +class Program; + +// Forward declare internal types. +class BackendDelegate; +struct Chain; +class KernelRuntimeContext; +using OpFunction = void (*)(KernelRuntimeContext &, EValue **); +/// A list of pointers into the master values table that together compose the +/// argument list for a single instruction +using InstructionArgs = Span; +using deserialization::NamedData; + +/** + * An executable method of an executorch program. Maps to a python method like + * `forward()` on the original nn.Module. + */ +class Method final { +public: + /** + * Move ctor. Takes ownership of resources previously owned by `rhs`, + * and leaves `rhs` in an uninitialized state. + */ + Method(Method &&rhs) noexcept + : step_state_(rhs.step_state_), program_(rhs.program_), + memory_manager_(rhs.memory_manager_), + temp_allocator_(rhs.temp_allocator_), + serialization_plan_(rhs.serialization_plan_), + event_tracer_(rhs.event_tracer_), n_value_(rhs.n_value_), + values_(rhs.values_), n_delegate_(rhs.n_delegate_), + delegates_(rhs.delegates_), n_chains_(rhs.n_chains_), + chains_(rhs.chains_), external_constants_(rhs.external_constants_), + n_external_constants_(rhs.n_external_constants_), + init_state_(rhs.init_state_) { + // Required: clear out fields that the dtor looks at, so that we don't free + // anything twice. + rhs.n_value_ = 0; + rhs.values_ = nullptr; + rhs.n_delegate_ = 0; + rhs.delegates_ = nullptr; + rhs.n_external_constants_ = 0; + rhs.external_constants_ = nullptr; + + // Helpful: Try to ensure that any other interactions with the old object + // result in failures. + rhs.init_state_ = InitializationState::Uninitialized; + rhs.step_state_ = {}; + rhs.program_ = nullptr; + rhs.memory_manager_ = nullptr; + rhs.serialization_plan_ = nullptr; + rhs.event_tracer_ = nullptr; + rhs.n_chains_ = 0; + rhs.chains_ = nullptr; + } + + /** + * Sets the internal input value to be equivalent to the to the provided + * value. + * + * @param[in] input_evalue The evalue to copy into the method input. If the + * evalue is a tensor, the data is copied in most cases, so the tensor + * passed in here does not always need to outlive this call. But there is + * a case where the Method will keep a pointer to the tensor's data. + * Based on the memory plan of the method, the inputs may not have + * buffer space pre-allocated for them. In this case the executor will + * alias the memory of the tensors provided as inputs here rather then + * deepcopy the input into the memory planned arena. + * + * @param[in] input_idx Zero-based index of the input to set. Must be less + * than the value returned by inputs_size(). + * + * @returns Error::Ok on success, non-Ok on failure. + */ + ET_NODISCARD Error set_input(const EValue &input_evalue, size_t input_idx); + + /** + * Sets the values of all method inputs. + * + * See set_input() for a more detailed description of the behavior. + * + * @param[in] input_evalues The new values for all of the method inputs. The + * type of each element must match the type of corresponding input. If the + * value of an element is a tensor, attempts to allow dynamic shape, but + * the dtype must always agree. + * + * @returns Error::Ok on success, non-Ok on failure. + */ + ET_NODISCARD Error + set_inputs(const executorch::aten::ArrayRef &input_evalues); + + /** + * Sets the data buffer of the specified method output to the provided value. + * + * NOTE: Based on the memory plan of the method, the output tensors may not + * have buffer space pre-allocated for them, in this case the executor will + * point those tensors to the buffer provided here, so the user should take + * care that the life span of this memory outlasts the executor forward. + * + * @param[in] buffer The block of memory to point the specified tensor at. + * + * @param[in] size the length of buffer in bytes, must be >= the nbytes of the + * specified tensor. + * + * @param[in] output_idx The index of the output to set the data_ptr for. Must + * correspond to a tensor, and that tensor must not have had a buffer + * allocated by the memory plan. + * + * @returns Error::Ok on success, non-Ok on failure. + */ + ET_NODISCARD Error set_output_data_ptr(void *buffer, size_t size, + size_t output_idx); + + /** + * Copies the method's outputs into the provided array. + * + * WARNING: The output contains shallow copies of internal tensor outputs. + * Please do not mutate returned Tensor elements. + * + * TODO(T139259264): Add checks to detect output mutation, or deep-copy + * outputs. + * + * @param[in] output_evalues The array to copy the outputs into. The first + * `outputs_size()` elements will be set to the corresponding output + * values. The rest of the array will be set to the EValue value None. + * @param[in] length The size of the `output_evalues` array in elements. Must + * be greater than or equal to `outputs_size()`. + * + * @returns Error::Ok on success, non-Ok on failure. + */ + ET_NODISCARD Error get_outputs(EValue *output_evalues, size_t length); + + /** + * Copies the method's inputs into the provided array. + * + * WARNING: The input contains shallow copies of internal tensor inputs. + * Please do not mutate returned Tensor elements. + * + * @param[in] input_evalues The array to copy the inputs into. The first + * `inputs_size()` elements will be set to the corresponding input + * values. The rest of the array will be set to the EValue value None. + * @param[in] length The size of the `input_evalues` array in elements. Must + * be greater than or equal to `inputs_size()`. + * + * @returns Error::Ok on success, non-Ok on failure. + */ + ET_NODISCARD Error get_inputs(EValue *input_evalues, size_t length); + + /** + * Execute the method. + * + * NOTE: Will fail if the method has been partially executed using the + * `step()` api. + * + * @returns Error::Ok on success, non-Ok on failure. + */ + ET_NODISCARD Error execute(); + + /** + * EXPERIMENTAL: Advances/executes a single instruction in the method. + * + * @retval Error::Ok step succeeded + * @retval non-Ok step failed + * @retval Error::EndOfMethod method finished executing successfully + */ + ET_EXPERIMENTAL ET_NODISCARD Error step(); + + /// DEPRECATED: Use `step()` instead. + ET_DEPRECATED ET_NODISCARD Error experimental_step(); + + /** + * EXPERIMENTAL: Resets execution state to the start of the Method. For use + * with the `step()` API. + * + * @retval Error:Ok on success + * @retval Error::InvalidState if called before step-based execution reached + * the end of the Method. This means it is not possible to recover a + * Method that failed mid-execution. + */ + ET_EXPERIMENTAL ET_NODISCARD Error reset_execution(); + + /// DEPRECATED: Use `reset_execution()` instead. + ET_DEPRECATED ET_NODISCARD Error experimental_reset_execution(); + + /** + * Returns the MethodMeta that corresponds to the calling Method. + */ + MethodMeta method_meta() const; + + /** + * Returns the number of inputs the Method expects. + */ + size_t inputs_size() const; + + /** + * Returns the number of outputs the Method returns. + */ + size_t outputs_size() const; + + /** + * Retrieves the output at the specified index. + */ + const EValue &get_output(size_t i) const; + + EventTracer *get_event_tracer(); + + /// DEPRECATED: Use MethodMeta instead to access metadata, and set_input to + /// update Method inputs. + ET_DEPRECATED const EValue &get_input(size_t i) const; + /// DEPRECATED: Use MethodMeta instead to access metadata, and set_input to + /// update Method inputs. + ET_DEPRECATED EValue &mutable_input(size_t i); + /// DEPRECATED: Use MethodMeta instead to access metadata, and get_output to + /// retrieve Method outputs. + ET_DEPRECATED EValue &mutable_output(size_t i); + + ~Method(); + +private: + // Delete other rule-of-five methods. + Method(const Method &) = delete; + Method &operator=(const Method &) noexcept = delete; + Method &operator=(Method &&) = delete; + + // Let Program call load(). + friend class Program; + // Let Executor call the ctor and init(). + friend class Executor; + + enum class InitializationState : uint8_t { + Uninitialized, + Initialized, + InitializationFailed, + }; + + /// Tracks what step in program execution we are on + struct StepState { + size_t chain_idx; + size_t instr_idx; + }; + + Method(const Program *program, MemoryManager *memory_manager, + EventTracer *event_tracer, MemoryAllocator *temp_allocator) + : step_state_(), program_(program), memory_manager_(memory_manager), + temp_allocator_(temp_allocator), serialization_plan_(nullptr), + event_tracer_(event_tracer), n_value_(0), values_(nullptr), + n_delegate_(0), delegates_(nullptr), n_chains_(0), chains_(nullptr), + external_constants_(nullptr), n_external_constants_(0), + init_state_(InitializationState::Uninitialized) {} + + /// Static factory used by Program. + ET_NODISCARD static Result + load(executorch_flatbuffer::ExecutionPlan *s_plan, const Program *program, + MemoryManager *memory_manager, EventTracer *event_tracer, + const NamedDataMap *named_data_map); + + /** + * Initialize the method from its serialized representation. + * + * @returns Error::Ok on success, non-Ok on failure. + */ + ET_NODISCARD Error init(executorch_flatbuffer::ExecutionPlan *s_plan, + const NamedDataMap *named_data_map); + + /// Returns true if the Method was successfully initialized. + inline bool initialized() const { + return init_state_ == InitializationState::Initialized; + } + + const EValue &get_value(size_t i) const; + EValue &mutable_value(size_t i); + size_t get_input_index(size_t i) const; + size_t get_output_index(size_t i) const; + + // Executes a single instruction using the state in step_state_ + ET_NODISCARD Error execute_instruction(); + + StepState step_state_; + const Program *program_; + MemoryManager *memory_manager_; + MemoryAllocator *temp_allocator_; + executorch_flatbuffer::ExecutionPlan *serialization_plan_; + EventTracer *event_tracer_; + + size_t n_value_; + EValue *values_; + + size_t n_delegate_; + BackendDelegate *delegates_; + + size_t n_chains_; + Chain *chains_; + + NamedData *external_constants_; + size_t n_external_constants_ = 0; + + InitializationState init_state_; + + /** + * Counts the number of tensors marked as EXTERNAL in the flatbuffer + * for this method. + */ + ET_NODISCARD Result get_num_external_constants(); + + /** + * Parses the flatbuffer for constant tensors tagged as EXTERNAL. + * Retrieves the external constants using the named_data_map and places them + * into `external_constants_`. Updates `n_external_constants_` to count the + * number of successfully-initialized external constants. + * FreeableBuffers returned by the named_data_map are owned by the + * method and are freed on method destruction. + * + * @param[in] named_data_map, to retrieve external constants from. + * @returns Error::Ok on success, non-Ok on failure. + */ + ET_NODISCARD Error + parse_external_constants(const NamedDataMap *named_data_map); + + /** + * Parses the elements of the values_ array. On error, n_value_ will be set to + * the number of successfully-initialized entries so that ~Method doesn't try + * to clean up uninitialized entries. + */ + ET_NODISCARD Error parse_values(const NamedDataMap *named_data_map); + + ET_NODISCARD Error resolve_operator(int32_t op_index, OpFunction *kernels, + size_t kernel_index, InstructionArgs args, + size_t n_args); + + void log_outputs(); +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::Method; +} // namespace executor +} // namespace torch + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif diff --git a/third-party/include/executorch/runtime/executor/method_meta.h b/third-party/include/executorch/runtime/executor/method_meta.h new file mode 100644 index 000000000..f4a0c101e --- /dev/null +++ b/third-party/include/executorch/runtime/executor/method_meta.h @@ -0,0 +1,251 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include + +// Forward declare flatbuffer types. This is a public header and must not +// include the generated flatbuffer header. +namespace executorch_flatbuffer { +struct ExecutionPlan; +} // namespace executorch_flatbuffer + +namespace executorch { +namespace runtime { + +/** + * Metadata about a specific tensor of an ExecuTorch Program. + * + * The program used to create the MethodMeta object that created this + * TensorInfo must outlive this TensorInfo. + */ +class TensorInfo final { +public: + TensorInfo() = delete; + TensorInfo(const TensorInfo &) = default; + TensorInfo(TensorInfo &&) = default; + TensorInfo &operator=(const TensorInfo &) = default; + TensorInfo &operator=(TensorInfo &&other) = default; + ~TensorInfo() = default; + + /** + * Returns the sizes of the tensor. + */ + Span sizes() const; + + /** + * Returns the dim order of the tensor. + */ + Span dim_order() const; + + /** + * Returns the scalar type of the input/output. + */ + executorch::aten::ScalarType scalar_type() const; + + /** + * Returns whether the tensor's memory was planned during export. + */ + bool is_memory_planned() const; + + /** + * Returns the size of the tensor in bytes. + */ + size_t nbytes() const; + +private: + // Let MethodMeta create TensorInfo. + friend class MethodMeta; + + TensorInfo(Span sizes, Span dim_order, + executorch::aten::ScalarType scalar_type, + const bool is_memory_planned); + + /** + * The sizes of the tensor. + * + * NOTE: References data from the Program, so the Program must outlive the + * TensorInfo. + */ + Span sizes_; + + /** + * The dim order of the tensor. + * + * NOTE: References data from the Program, so the Program must outlive the + * TensorInfo. + */ + Span dim_order_; + + /// The scalar type of the tensor. + executorch::aten::ScalarType scalar_type_; + + /// Whether the tensor's memory was planned during export. + bool is_memory_planned_; + + /// The size in bytes of the tensor. + size_t nbytes_; +}; + +/** + * Describes a a method in an ExecuTorch program. + * + * The program used to create a MethodMeta object must outlive the MethodMeta. + * It is separate from Method so that this information can be accessed without + * paying the initialization cost of loading the full Method. + */ +class MethodMeta final { +public: + MethodMeta() = delete; + MethodMeta(const MethodMeta &) = default; + MethodMeta(MethodMeta &&) = default; + MethodMeta &operator=(const MethodMeta &) = default; + MethodMeta &operator=(MethodMeta &&other) = default; + ~MethodMeta() = default; + + /** + * Get the name of this method. + * + * @returns The method name. + */ + const char *name() const; + + /** + * Get the number of inputs to this method. + * + * @returns The number of inputs. + */ + size_t num_inputs() const; + + /** + * Get the tag of the specified input. + * + * @param[in] index The index of the input to look up. + * @returns The tag of input, can only be [Tensor, Int, Bool, Double, String]. + */ + Result input_tag(size_t index) const; + + /** + * Get metadata about the specified input. + * + * @param[in] index The index of the input to look up. + * @returns The metadata on success, or an error on failure. Only valid for + * tag::Tensor + */ + Result input_tensor_meta(size_t index) const; + + /** + * Get the number of outputs to this method. + * + * @returns The number of outputs. + */ + size_t num_outputs() const; + + /** + * Get the tag of the specified output. + * + * @param[in] index The index of the output to look up. + * @returns The tag of output, can only be [Tensor, Int, Bool, Double, + * String]. + */ + Result output_tag(size_t index) const; + + /** + * Get metadata about the specified output. + * + * @param[in] index The index of the output to look up. + * @returns The metadata on success, or an error on failure. Only valid for + * tag::Tensor + */ + Result output_tensor_meta(size_t index) const; + + /** + * Get the number of memory-planned buffers this method requires. + * + * @returns The number of memory-planned buffers. + */ + size_t num_memory_planned_buffers() const; + + /** + * Get the size in bytes of the specified memory-planned buffer. + * + * @param[in] index The index of the buffer to look up. + * @returns The size in bytes on success, or an error on failure. + */ + Result memory_planned_buffer_size(size_t index) const; + + /** + * Check to see if a backend is used in this method. + * + * @param[in] backend_name The name of the backend to search for. + * @returns true if a backend is used in this method, otherwise false. + */ + bool uses_backend(const char *backend_name) const; + + /** + * Get the number of backends used in this method. + * + * @returns The total number of backend names. + */ + size_t num_backends() const; + + /** + * Get the backend name at the given index. + * + * @param[in] index The index of the backend name. + * @returns A Result wrapping the backend name as a C-style string + * on success, or an error if the index is invalid. + */ + Result get_backend_name(size_t index) const; + + /** + * Get the number of instructions in this method. + * + * @returns The number of instructions. + */ + ET_EXPERIMENTAL size_t num_instructions() const; + + /** + * DEPRECATED: Use num_memory_planned_buffers() instead. + */ + ET_DEPRECATED size_t num_non_const_buffers() const { + return num_memory_planned_buffers(); + } + + /** + * DEPRECATED: Use memory_planned_buffer_size() instead. + */ + Result non_const_buffer_size(size_t index) const { + return memory_planned_buffer_size(index); + } + +private: + // Let Program create MethodMeta. + friend class Program; + + explicit MethodMeta(const executorch_flatbuffer::ExecutionPlan *s_plan); + + /// Source of truth for method information + const executorch_flatbuffer::ExecutionPlan *s_plan_; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::MethodMeta; +using ::executorch::runtime::TensorInfo; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/executor/program.h b/third-party/include/executorch/runtime/executor/program.h new file mode 100644 index 000000000..9e1a447c1 --- /dev/null +++ b/third-party/include/executorch/runtime/executor/program.h @@ -0,0 +1,320 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#ifdef __GNUC__ +// Disable -Wdeprecated-declarations, as some builds use 'Werror'. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Forward declare flatbuffer types. This is a public header and must not +// include the generated flatbuffer header. +namespace executorch_flatbuffer { +struct Program; +} // namespace executorch_flatbuffer + +namespace executorch { +namespace runtime { + +namespace testing { +// Provides test access to private Program methods. +class ProgramTestFriend; +} // namespace testing + +namespace deserialization { +// Provides Tensor deserializaiton access to private Program methods. +class TensorParser; +} // namespace deserialization + +/** + * A deserialized ExecuTorch program binary. + */ +class Program final { +public: + /** + * Types of validation that the Program can do before parsing the data. + */ + enum class Verification : uint8_t { + /** + * Do minimal verification of the data, ensuring that the header appears + * correct. + * + * Has minimal runtime overhead. + */ + Minimal, + /** + * Do full verification of the data, ensuring that internal pointers are + * self-consistent and that the data has not been truncated or obviously + * corrupted. May not catch all types of corruption, but should guard + * against illegal memory operations during parsing. + * + * Will have higher runtime overhead, scaling with the complexity of the + * proram data. + */ + InternalConsistency, + }; + + /** + * Loads a Program from the provided loader. The Program will hold a pointer + * to the loader, which must outlive the returned Program instance. + * + * @param[in] loader The source to load program data from. The Program will + * hold a pointer to this loader, which must outlive the returned Program + * instance. + * @param[in] verification The type of verification to do before returning + * success. + */ + ET_NODISCARD static Result + load(DataLoader *loader, Verification verification = Verification::Minimal); + + /// DEPRECATED: Use the lowercase `load()` instead. + ET_DEPRECATED ET_NODISCARD static Result + Load(DataLoader *loader, Verification verification = Verification::Minimal) { + return load(loader, verification); + } + + // Movable, to be compatible with Result. + Program(Program &&) noexcept = default; + ~Program() = default; + + /** + * Get the constant buffer inside Program with index buffer_idx. + * @param[in] buffer_idx the index of the buffer in the constant_buffer. + * @param[in] nbytes the number of bytes to read from the buffer. + * @return The buffer with corresponding index. + */ + Result get_constant_buffer_data(size_t buffer_idx, + size_t nbytes) const; + + /** + * Get the named data map from the program. + * @return The named data map. + */ + Result get_named_data_map() const; + + /** + * Returns the number of methods in the program. + */ + size_t num_methods() const; + + /** + * Returns the name of the method at particular index. + * + * @param[in] method_index The index of the method name to retrieve. Must be + * less than the value returned by `num_methods()`. + * + * @returns The name of the requested method. The pointer is owned by the + * Program, and has the same lifetime as the Program. + */ + Result get_method_name(size_t method_index) const; + + /** + * Loads the named method and prepares it for execution. + * + * @param[in] method_name The name of the method to load. + * @param[in] memory_manager The allocators to use during initialization and + * execution of the loaded method. If `memory_manager.temp_allocator()` is + * null, the runtime will allocate temp memory using `et_pal_allocate()`. + * @param[in] event_tracer The event tracer to use for this method run. + * @param[in] named_data_map An optional map of {name, blob} used to resolve + * data that is external to the PTE, if any. + * + * @returns The loaded method on success, or an error on failure. + */ + Result + load_method(const char *method_name, MemoryManager *memory_manager, + EventTracer *event_tracer = nullptr, + const NamedDataMap *named_data_map = nullptr) const; + + /** + * Gathers metadata for the named method. + * + * @param[in] method_name The name of the method to get metadata for. + */ + Result method_meta(const char *method_name) const; + + /** + * DEPRECATED: Get the pytree encoding string for the output. Deprecated as + * this functionality will eventually move out of the core program into a + * higher level structure, but that does not exist at this time. + * @param[in] method_name The name of the method to get the encoding for. + * + * @return The pytree encoding string for the output + */ + ET_DEPRECATED Result + get_output_flattening_encoding(const char *method_name = "forward") const; + + /** + * Describes the presence of an ExecuTorch program header. + */ + enum HeaderStatus { + /** + * An ExecuTorch program header is present, and its version is compatible + * with this version of the runtime. + */ + CompatibleVersion, + + /** + * An ExecuTorch program header is present, but its version is not + * compatible with this version of the runtime. + */ + IncompatibleVersion, + + /** + * An ExecuTorch program header is not present. + */ + NotPresent, + + /** + * The data provided was too short to find the program header. + */ + ShortData, + }; + + /** + * The minimum number of bytes necessary for calls to `check_header`. + */ + static constexpr size_t kMinHeadBytes = 64; + + /** + * Looks for an ExecuTorch program header in the provided data. + * + * @param[in] data The data from the beginning of a file that might contain + * an ExecuTorch program. + * @param[in] size The size of `data` in bytes. Must be >= `kMinHeadBytes`. + * + * @returns A value describing the presence of a header in the data. + */ + static HeaderStatus check_header(const void *data, size_t size); + +private: + // Let some classes call these private methods. + friend class BackendDelegate; + friend class Executor; + friend class Method; + friend class deserialization::TensorParser; + friend class testing::ProgramTestFriend; + + const executorch_flatbuffer::Program *get_internal_program() const { + return internal_program_; + } + + // Used by Method to look up entries in the delegate data table. + Error get_backend_delegate_data(size_t index, const void **out_data, + size_t *out_size) const; + + /** + * Loads a segment by index. + * + * @param[in] segment_info Struct containing an index to load from the + * Program.segments list. The other fields of the struct, such as + * `segment_type` and `descriptor`, need to also be correct. + * + * @returns The data as a FreeableBuffer, if the index is valid. + * @retval Error::NotFound The program does not contain any segments or the + * index is out of range. + * @returns Other errors depending on the implementation of + * DataLoader: The Program.segment table is inconsistent, or the + * data cannot be accessed. + */ + ET_NODISCARD Result + LoadSegment(const DataLoader::SegmentInfo &segment_info) const; + + /** + * Loads a portion of a mutable segment into the provided buffer. + * + * @param[in] mutable_data_segments_index The index into the + * mutable_data_segments_array. + * @param[in] offset_index The index into the segment's offsets array. + * @param[in] size The number of bytes to load. + * @param[in] buffer The buffer to load data into. Must point to at least + * `size` bytes of memory. + * + * @returns An error code on if the load was successful. + * @retval Error::Ok The load was successful. + * @retval Error::NotFound The program does not contain any segments or the + * indices are out of range. + * @returns Other errors depending on the implementation of + * DataLoader: The Program.segment table is inconsistent, or the + * data cannot be accessed. + */ + ET_NODISCARD Error load_mutable_subsegment_into( + size_t mutable_data_segments_index, size_t offset_index, size_t size, + void *buffer) const; + +private: + Program(DataLoader *loader, size_t segment_base_offset, + FreeableBuffer &&program_data, + const executorch_flatbuffer::Program *internal_program, + FreeableBuffer &&constant_segment_data, + std::optional &&pte_data_map) + : program_data_(std::move(program_data)), + // Don't need the loader if there are no segments. + loader_(segment_base_offset > 0 ? loader : nullptr), + internal_program_(internal_program), + segment_base_offset_(segment_base_offset), + constant_segment_data_(std::move(constant_segment_data)), + pte_data_map_(std::move(pte_data_map)) {} + + // Not copyable or assignable. + Program(const Program &rhs) = delete; + Program &operator=(Program &&rhs) noexcept = delete; + Program &operator=(const Program &rhs) = delete; + + /// The serialized program data. Tensors will point directly into this buffer. + FreeableBuffer program_data_; + + /// Used to load segment data. Null if there are no segments. + DataLoader *loader_; + + /// The flatbuffer representation of the program. Must not be exposed to + /// users. + const executorch_flatbuffer::Program *internal_program_; + + /// The offset to the first segment, in bytes. If zero, no segments should + /// be present in internal_program_. + size_t segment_base_offset_; + + /// Constant segment data. + FreeableBuffer constant_segment_data_; + + /// NamedDataMap holding named data from the program. + std::optional pte_data_map_; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::Program; +} // namespace executor +} // namespace torch + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif diff --git a/third-party/include/executorch/runtime/executor/pte_data_map.h b/third-party/include/executorch/runtime/executor/pte_data_map.h new file mode 100644 index 000000000..63fb65bca --- /dev/null +++ b/third-party/include/executorch/runtime/executor/pte_data_map.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include + +// Forward declare flatbuffer types. This is a public header and must not +// include the generated flatbuffer header. +namespace executorch_flatbuffer { +struct NamedData; +struct DataSegment; +} // namespace executorch_flatbuffer + +namespace flatbuffers { +template struct Offset; +} // namespace flatbuffers + +// @lint-ignore CLANGTIDY facebook-modularize-issue-check +#if EXECUTORCH_INTERNAL_FLATBUFFERS == 1 +// TODO(T216992074): update internal flatbuffers (v1.12) to match OSS (v24.3.5). +namespace flatbuffers { +template class Vector; +using FlatbufferNamedData = + flatbuffers::Vector>; +using FlatbufferDataSegment = flatbuffers::Vector< + flatbuffers::Offset>; +} // namespace flatbuffers +#else +namespace flatbuffers { +template class Vector; +using FlatbufferNamedData = + flatbuffers::Vector, + uint32_t>; +using FlatbufferDataSegment = + flatbuffers::Vector, + uint32_t>; +} // namespace flatbuffers +#endif + +namespace executorch { +namespace runtime { +namespace internal { + +/** + * A NamedDataMap implementation for Flatbuffer-serialized named data + * originating from a PTE file. + */ +class PteDataMap final : public NamedDataMap { +public: + /** + * Creates a new DataMap that wraps named_data from the PTE file. + * + * @param[in] loader The DataLoader that accesses the PTE file. + * Note: the loader must outlive the PteDataMap instance. + * @param[in] segment_base_offset The offset to the first segment in the PTE + * file, in bytes. + * @param[in] named_data The named_data from the PTE file. Note: the pointer + * passed here must outlive the PteDataMap instance. + * @param[in] segments The segments from the PTE file. Note: the pointer + * passed here must outlive the PteDataMap instance. + */ + static Result + create(DataLoader *loader, size_t segment_base_offset, + const flatbuffers::FlatbufferNamedData *named_data, + const flatbuffers::FlatbufferDataSegment *segments); + + /** + * The PteDataMap currently only handles opaque data that does not contain + * tensor-specific metadata. + */ + ET_NODISCARD + Result + get_metadata(ET_UNUSED const char *key) const override { + return Error::NotImplemented; + } + + /** + * Retrieve read-only data for the specified key. + * + * @param[in] key The name of the blob to get data on. + * + * @return error if the key is not present or data cannot be loaded. + */ + ET_NODISCARD + Result get_data(const char *key) const override; + + /** + * The PteDataMap currently does not implement load_into. + */ + ET_NODISCARD Error load_data_into(ET_UNUSED const char *key, + ET_UNUSED void *buffer, + ET_UNUSED size_t size) const override { + return Error::NotImplemented; + } + + /** + * @returns The number of keys in the map. + */ + ET_NODISCARD Result get_num_keys() const override; + + /** + * @returns The key at the specified index, error if index out of bounds. + */ + ET_NODISCARD Result get_key(size_t index) const override; + + // Moveable, to be compatible with Result. + PteDataMap(PteDataMap &&) noexcept = default; + ~PteDataMap() override = default; + +private: + PteDataMap(DataLoader *loader, size_t segment_base_offset, + const flatbuffers::FlatbufferNamedData *named_data, + const flatbuffers::FlatbufferDataSegment *segments) + : loader_(loader), segment_base_offset_(segment_base_offset), + named_data_(named_data), segments_(segments) {} + + // Not copyable or assignable. + PteDataMap(const PteDataMap &rhs) = delete; + PteDataMap &operator=(PteDataMap &&rhs) noexcept = delete; + PteDataMap &operator=(const PteDataMap &rhs) = delete; + + // Data loader, used to load segment data. + DataLoader *loader_; + + // The offset to the first segment in the PTE file, in bytes. + size_t segment_base_offset_; + + // Named data, containing name and segment index. + const flatbuffers::FlatbufferNamedData *named_data_; + + // Segments, to retrieve offset and size for the loader. + const flatbuffers::FlatbufferDataSegment *segments_; +}; + +} // namespace internal +} // namespace runtime +} // namespace executorch diff --git a/third-party/include/executorch/runtime/executor/tensor_parser.h b/third-party/include/executorch/runtime/executor/tensor_parser.h new file mode 100644 index 000000000..1d0df38d6 --- /dev/null +++ b/third-party/include/executorch/runtime/executor/tensor_parser.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#ifdef __GNUC__ +// Disable -Wdeprecated-declarations, as some builds use 'Werror'. +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + +#include +#include +#include +#include +#include + +namespace executorch { +namespace runtime { +namespace deserialization { + +/// Data structure to hold key and data buffer for external data used +/// in a method. +struct NamedData { + const char *key; + FreeableBuffer buffer; +}; + +NamedData *get_data_by_key(const char *key, Span entries); + +ET_NODISCARD Result +parseTensor(const Program *program, MemoryManager *memory_manager, + const executorch_flatbuffer::Tensor *s_tensor, + const NamedDataMap *named_data_map = nullptr, + Span external_constants = {}); + +ET_NODISCARD Result> +parseTensorList(const flatbuffers::Vector *tensor_indices, + EValue *values, size_t values_len, + MemoryManager *memory_manager); + +// Checks that the sizes, dim_order and scalar_type match between tensors +// stored in the PTE and externally. +ET_NODISCARD Error +validateTensorLayout(const executorch_flatbuffer::Tensor *s_tensor, + const TensorLayout &expected_layout); + +// Deserializes a List of optional type. The code here is the same between all +// list of optionals: list of optional Tensor, list of optional float etc, so we +// just use a template to avoid boilerplate. +template +ET_NODISCARD Result>> +parseListOptionalType(const flatbuffers::Vector *value_indices, + EValue *values, size_t values_len, + MemoryManager *memory_manager) { + auto *evalp_list = memory_manager->method_allocator()->allocateList( + value_indices->size()); + if (evalp_list == nullptr) { + return Error::MemoryAllocationFailed; + } + + auto *optional_tensor_list = + memory_manager->method_allocator() + ->allocateList>(value_indices->size()); + if (optional_tensor_list == nullptr) { + return Error::MemoryAllocationFailed; + } + + size_t output_idx = 0; + // For each index look up the corresponding EValue (which has been + // already allocated) and stick it in the list. + for (int32_t index : *value_indices) { + // Lists of objects are stored in fbb as list[int] where the ints are + // indices into values. Currently serialization is deciding if they want to + // put -1 for serialized None type indices, or give us a valid index to a + // serialized None. We support either for now. + // Placement new as the list elements are not initialized, so calling + // copy assignment is not defined if its non trivial. + if (index == -1) { + new (&optional_tensor_list[output_idx]) + executorch::aten::optional(executorch::aten::nullopt); + // no value to point to. BoxedEvalueList for optional tensor will convert + // this to nullopt. + // TODO(T161156879): do something less hacky here. + evalp_list[output_idx] = nullptr; + } else { + ET_CHECK_OR_RETURN_ERROR( + index >= 0 && static_cast(index) < values_len, InvalidProgram, + "Invalid value index %" PRId32 " for ListOptional", index); + new (&optional_tensor_list[output_idx]) + executorch::aten::optional(values[index].toOptional()); + evalp_list[output_idx] = &values[static_cast(index)]; + } + output_idx++; + } + return BoxedEvalueList>( + evalp_list, optional_tensor_list, value_indices->size()); +} + +/** + * Returns the appropriate data pointer for `s_tensor`. + * + * Overall, a Tensor is either constant or non-constant, except we differentiate + * 2 special variants of non-constant Tensor ("input" and control-flow + * "placeholder") as a special optimization to avoid holding unnecessary + * AllocationDetails. Thus, s_tensor can be configured as 1 of 3 options: + * - constant_buffer > 0, allocation_info = Null: Constant Tensor. + * - constant_buffer = 0, allocation_info = Non Null: Non-constant Tensor. + * - constant_buffer = 0, allocation_info = Null: Input/placeholder Tensor. + * + * @param[in] s_tensor The tensor to find the data pointer for. + * @param[in] program The Program to use for constant buffer data. + * @param[in] nbytes The amount of memory to get from the allocator. + * @param[in] allocator The source of memory for non-constant tensors. + * @param[in] named_data_map An optional map of {name, blob} used to resolve + * data that is mutable and external to the PTE, if any. + * @param[in] external_constants An optional span containing tensor fqn to + * corresponding tensor data. Used to resolve data that is constant and + * external to the PTE, if any. Referencing data from external_constants is + * safe, as it has the same lifetime as the method. + * + * @returns On success, the data pointer to use for the tensor. On failure, a + * non-Ok Error. + */ +ET_NODISCARD Result +getTensorDataPtr(const executorch_flatbuffer::Tensor *s_tensor, + const Program *program, size_t nbytes, + HierarchicalAllocator *allocator, + const NamedDataMap *named_data_map = nullptr, + Span external_constants = {}); + +} // namespace deserialization +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +namespace deserialization { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::deserialization::getTensorDataPtr; +using ::executorch::runtime::deserialization::parseListOptionalType; +using ::executorch::runtime::deserialization::parseTensor; +using ::executorch::runtime::deserialization::parseTensorList; +} // namespace deserialization +} // namespace executor +} // namespace torch + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif diff --git a/third-party/include/executorch/runtime/kernel/kernel_runtime_context.h b/third-party/include/executorch/runtime/kernel/kernel_runtime_context.h new file mode 100644 index 000000000..04e00e2b8 --- /dev/null +++ b/third-party/include/executorch/runtime/kernel/kernel_runtime_context.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace executorch { +namespace runtime { + +/** + * Runtime state and functionality for kernel implementations. + * + * NOTE: Will not be passed to operators if running in ATen mode as those + * operators do not expect to receive a KernelRuntimeContext argument. + */ +class KernelRuntimeContext { +public: + /** + * Construct a new kernel runtime context. + * + * KernelRuntimeContext does not take ownership + * of these pointers, so they must outlive the context instance. + * + * @param[in] event_tracer The optional EventTracer to use for + * profiling/debugging + * @param[in] temp_allocator The optional MemoryAllocator used to allocate + * temporary memory for the kernel. If not provided, an error will be + * returned when calling allocate_temp. + */ + KernelRuntimeContext(EventTracer *event_tracer = nullptr, + MemoryAllocator *temp_allocator = nullptr) + : event_tracer_(event_tracer), temp_allocator_(temp_allocator) {} + /** + * Tells the runtime that the kernel call has failed. Prefer this over + * ET_CHECK_*(), which fatally panics the process/system. + * + * If this is not called, the runtime will treat the kernel call as + * successful. + * + * This unusual error-propagation path is required because kernel signatures + * do not have a natural way to return errors directly. They are generally + * compatible with core PyTorch ATen kernel signatures, which use exceptions + * to report errors. But, ExecuTorch does not use exceptions. + */ + void fail(Error error) { failure_state_ = error; } + + /// Returns the current failure state. + ET_NODISCARD Error failure_state() const { return failure_state_; } + + /** + * INTERNAL ONLY + * + * Returns a pointer to an instance of EventTracer to do profiling/debugging + * logging inside the codegen layer. This is only for internal usage inside + * the codegen layer and users should not be accessing this. + */ + EventTracer *internal_event_tracer() { return event_tracer_; } + + /** + * Allocates temporary memory that will be freed when the kernel returns. This + * returns a pointer to the allocated memory or an error if the allocation + * fails. + * + * @param[in] size Number of bytes to allocate. + * @param[in] alignment Minimum alignment for the returned pointer. Must be a + * power of 2. + * + * @returns A result object containing either a pointer to the allocated + * memory or an error to indicate failure + */ + Result + allocate_temp(size_t size, + size_t alignment = MemoryAllocator::kDefaultAlignment) { + ET_CHECK_OR_RETURN_ERROR(temp_allocator_ != nullptr, NotFound, + "No temp allocator provided"); + void *temp_memory = temp_allocator_->allocate(size, alignment); + ET_CHECK_OR_RETURN_ERROR( + temp_memory != nullptr, MemoryAllocationFailed, + "Failed to allocate temp memory. Bytes requested: %zu", size); + return temp_memory; + } + + // TODO(T147221312): Add a way to resize a tensor. + +private: + EventTracer *event_tracer_ = nullptr; + MemoryAllocator *temp_allocator_ = nullptr; + Error failure_state_ = Error::Ok; +}; + +} // namespace runtime +} // namespace executorch + +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +namespace torch { +namespace executor { +/// DEPRECATED: Use ::executorch::runtime::KernelRuntimeContext instead. +using ::executorch::runtime::KernelRuntimeContext; +/// DEPRECATED: Use ::executorch::runtime::KernelRuntimeContext instead. +using RuntimeContext = ::executorch::runtime::KernelRuntimeContext; +} // namespace executor +} // namespace torch +namespace executorch { +namespace aten { +/// DEPRECATED: Use ::executorch::runtime::KernelRuntimeContext instead. +using RuntimeContext = ::executorch::runtime::KernelRuntimeContext; +} // namespace aten +} // namespace executorch +// DEPRECATED: The executorch::aten:: namespace is deprecated. Use +// executorch::aten:: instead. +namespace exec_aten = ::executorch::aten; diff --git a/third-party/include/executorch/runtime/kernel/operator_registry.h b/third-party/include/executorch/runtime/kernel/operator_registry.h new file mode 100644 index 000000000..92a750419 --- /dev/null +++ b/third-party/include/executorch/runtime/kernel/operator_registry.h @@ -0,0 +1,278 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +// Debug switch for operator registry +#if defined(ET_OP_REGISTRY_DEBUG) +#include +#endif + +#define ET_LOG_KERNEL_KEY(k) \ + ET_LOG(Info, "key: %s, is_fallback: %s", k.data(), \ + k.is_fallback() ? "true" : "false"); +#define ET_LOG_TENSOR_META(meta_list) \ + for (const auto &meta : meta_list) { \ + ET_LOG(Info, "dtype: %d | dim order: [", int(meta.dtype_)); \ + for (size_t i = 0; i < meta.dim_order_.size(); i++) { \ + ET_LOG(Info, "%d,", static_cast(meta.dim_order_[i])); \ + } \ + ET_LOG(Info, "]"); \ + } + +namespace executorch { +namespace runtime { + +class KernelRuntimeContext; // Forward declaration +using OpFunction = void (*)(KernelRuntimeContext &, EValue **); + +/** + * Dtype and dim order metadata for a Tensor argument to an operator. + * Used by the Executor to hold the tensor metadata info and retrieve kernel. + */ +struct TensorMeta { + executorch::aten::ScalarType dtype_; + Span dim_order_; + + TensorMeta() = default; + TensorMeta(executorch::aten::ScalarType dtype, + Span order) + : dtype_(dtype), dim_order_(order) {} + + bool operator==(const TensorMeta &other) const { return this->equals(other); } + + bool operator!=(const TensorMeta &other) const { + return !this->equals(other); + } + + bool equals(const TensorMeta &other) const { + if (dtype_ != other.dtype_) { + return false; + } + if (dim_order_.size() != other.dim_order_.size()) { + return false; + } + for (size_t i = 0; i < dim_order_.size(); i++) { + if (dim_order_[i] != other.dim_order_[i]) { + return false; + } + } + return true; + } + +#if defined(ET_OP_REGISTRY_DEBUG) + friend std::ostream &operator<<(std::ostream &os, const TensorMeta &meta) { + os << "dtype: " << int(meta.dtype_) << " | dim order: ["; + for (int i = 0; i < meta.dim_order_.size(); i++) { + os << static_cast(meta.dim_order_[i]) << ", "; + } + os << "]"; + return os; + } +#endif +}; + +/** + * Describes which dtype & dim order specialized kernel to be bound to an + * operator. + * + * Kernel key data is a string with the format: + * + * "v/|..." + * + * The version is v1 for now. If the kernel key format changes, update the + * version to avoid breaking pre-existing kernel keys. + * + * Each tensor_meta has the following format: ";" + * + * Example kernel key data: "v1/7;0,1,2,3|1;0,1,2,3,4,5,6,7" + * + * This has two tensors: the first with dtype=7 and dim order 0,1,2,3, and the + * second with dtype=1 and dim order 0,1,2,3,4,5,6,7. + * + * IMPORTANT: + * Users should not construct a kernel key manually. Instead, it should be + * generated from kernel yaml. + */ +struct KernelKey { +public: + /** + * Creates a fallback (non-specialized) kernel key: this kernel can be used + * for all input tensor dtypes and dim orders if the specialized kernel is not + * registered. + */ + KernelKey() : is_fallback_(true) {} + + /** + * Creates a specialized (non-fallback) kernel key that matches a specific + * set of input tensor dtypes and dim orders. See the class comment for the + * expected format of `kernel_key_data`. + */ + /* implicit */ KernelKey(const char *kernel_key_data) + : kernel_key_data_(kernel_key_data), is_fallback_(false) {} + + bool operator==(const KernelKey &other) const { return this->equals(other); } + + bool operator!=(const KernelKey &other) const { return !this->equals(other); } + + bool equals(const KernelKey &other) const { + if (is_fallback_ != other.is_fallback_) { + return false; + } + if (is_fallback_) { + return true; + } + return strcmp(kernel_key_data_, other.kernel_key_data_) == 0; + } + + bool is_fallback() const { return is_fallback_; } + + const char *data() const { return kernel_key_data_; } + +#if defined(ET_OP_REGISTRY_DEBUG) + friend std::ostream &operator<<(std::ostream &os, const KernelKey &key) { + os << key.kernel_key_data_ << std::endl; + return os; + } +#endif + +private: + const char *kernel_key_data_ = nullptr; + bool is_fallback_; +}; + +/** + * Struct that bundles a kernel key, a function and an op name together. An + * `Operator` may have more than one `Kernel` (maximum kMaxNumOfKernelPerOp) and + * they should have the same op name and different kernel key. A "fallback" + * kernel may or may not live in an `Operator`. + */ +struct Kernel { + const char *name_; + // String representation of kernel key, with the same format as + // KernelKey.to_string_representation() + // Data is not owned by the Kernel struct. + KernelKey kernel_key_; + OpFunction op_; + /** + * We are doing a copy of the string pointer instead of duplicating the string + * itself, we require the lifetime of the operator name to be at least as long + * as the operator registry. + */ + explicit Kernel(const char *name, OpFunction func) : name_(name), op_(func) {} + + explicit Kernel(const char *name, KernelKey key, OpFunction func) + : name_(name), kernel_key_(key), op_(func) {} + + Kernel() {} +}; + +namespace internal { + +/** + * A make_kernel_key_string buffer size that is large enough to hold a kernel + * key string with 16 tensors of 16 dimensions, plus the trailing NUL byte. + */ +constexpr size_t kKernelKeyBufSize = 659; + +/** + * Given the list of input tensor dtypes + dim orders, writes the kernel key + * string into the buffer. Returns an error if the buffer is too small or if the + * tensors cannot be represented as a valid key string. + */ +Error make_kernel_key_string(Span key, char *buf, + size_t buf_size); + +} // namespace internal + +/** + * Checks whether an operator exists with a given name and TensorMeta list. When + * TensorMeta is empty, it means this op does not have specialized kernels, so + * it checks whether it has any fallback kernels. + */ +bool registry_has_op_function(const char *name, + Span meta_list = {}); + +/** + * Returns the operator with a given name and TensorMeta list, if present. + */ +::executorch::runtime::Result +get_op_function_from_registry(const char *name, + Span meta_list = {}); + +/** + * Returns all registered kernels. + */ +Span get_registered_kernels(); + +/** + * Registers the provided kernels. + * + * @param[in] kernels Kernel objects to register. + * @retval Error::Ok always. Panics on error. This function needs to return a + * non-void type to run at static initialization time. + */ +ET_NODISCARD Error register_kernels(const Span); + +/** + * Registers a single kernel. + * + * @param[in] kernel Kernel object to register. + * @retval Error::Ok always. Panics on error. This function needs to return a + * non-void type to run at static initialization time. + */ +ET_NODISCARD inline Error register_kernel(const Kernel &kernel) { + return register_kernels({&kernel, 1}); +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::Kernel; +using ::executorch::runtime::KernelKey; +using ::executorch::runtime::KernelRuntimeContext; +using ::executorch::runtime::OpFunction; +using ::executorch::runtime::TensorMeta; +using KernelRuntimeContext = ::executorch::runtime::KernelRuntimeContext; + +inline ::executorch::runtime::Error register_kernels(ArrayRef kernels) { + return ::executorch::runtime::register_kernels( + {kernels.data(), kernels.size()}); +} +inline OpFunction getOpsFn(const char *name, + ArrayRef meta_list = {}) { + auto result = ::executorch::runtime::get_op_function_from_registry( + name, {meta_list.data(), meta_list.size()}); + ET_CHECK(result.ok()); // get_op_function_from_registry() logs details. + return *result; +} +inline bool hasOpsFn(const char *name, ArrayRef meta_list = {}) { + return ::executorch::runtime::registry_has_op_function( + name, {meta_list.data(), meta_list.size()}); +} +inline ArrayRef get_kernels() { + Span kernels = ::executorch::runtime::get_registered_kernels(); + return ArrayRef(kernels.data(), kernels.size()); +} +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/platform/abort.h b/third-party/include/executorch/runtime/platform/abort.h new file mode 100644 index 000000000..ae1a761aa --- /dev/null +++ b/third-party/include/executorch/runtime/platform/abort.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * ExecuTorch global abort wrapper function. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { + +/** + * Trigger the ExecuTorch global runtime to immediately exit without cleaning + * up, and set an abnormal exit status (platform-defined). + */ +ET_NORETURN void runtime_abort(); + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::runtime_abort; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/platform/assert.h b/third-party/include/executorch/runtime/platform/assert.h new file mode 100644 index 000000000..14ec27069 --- /dev/null +++ b/third-party/include/executorch/runtime/platform/assert.h @@ -0,0 +1,119 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include + +/** + * Assertion failure message emit method. + * + * @param[in] _format Printf-style message format string. + * @param[in] ... Format string arguments. + */ +#define ET_ASSERT_MESSAGE_EMIT(_format, ...) \ + ET_LOG(Fatal, "In function %s(), assert failed" _format, ET_FUNCTION, \ + ##__VA_ARGS__) + +/** + * Abort the runtime if the condition is not true. + * This check will be performed even in release builds. + * + * @param[in] _cond Condition asserted as true. + * @param[in] _format Printf-style message format string. + * @param[in] ... Format string arguments. + */ +#define ET_CHECK_MSG(_cond, _format, ...) \ + do { \ + if ET_UNLIKELY (!(_cond)) { \ + ET_ASSERT_MESSAGE_EMIT(" (%s): " _format, #_cond, ##__VA_ARGS__); \ + ::executorch::runtime::runtime_abort(); \ + } \ + } while (0) + +/** + * Abort the runtime if the condition is not true. + * This check will be performed even in release builds. + * + * @param[in] _cond Condition asserted as true. + */ +#define ET_CHECK(_cond) \ + do { \ + if ET_UNLIKELY (!(_cond)) { \ + ET_ASSERT_MESSAGE_EMIT(": %s", #_cond); \ + ::executorch::runtime::runtime_abort(); \ + } \ + } while (0) + +#ifdef NDEBUG + +/** + * Abort the runtime if the condition is not true. + * This check will be performed in debug builds, but not release builds. + * + * @param[in] _cond Condition asserted as true. + * @param[in] _format Printf-style message format string. + * @param[in] ... Format string arguments. + */ +#define ET_DCHECK_MSG(_cond, _format, ...) ((void)0) + +/** + * Abort the runtime if the condition is not true. + * This check will be performed in debug builds, but not release builds. + * + * @param[in] _cond Condition asserted as true. + */ +#define ET_DCHECK(_cond) ((void)0) +#define ET_DEBUG_ONLY [[maybe_unused]] + +#else // NDEBUG + +/** + * Abort the runtime if the condition is not true. + * This check will be performed in debug builds, but not release builds. + * + * @param[in] _cond Condition asserted as true. + * @param[in] _format Printf-style message format string. + * @param[in] ... Format string arguments. + */ +#define ET_DCHECK_MSG(_cond, _format, ...) \ + ET_CHECK_MSG(_cond, _format, ##__VA_ARGS__) + +/** + * Abort the runtime if the condition is not true. + * This check will be performed in debug builds, but not release builds. + * + * @param[in] _cond Condition asserted as true. + */ +#define ET_DCHECK(_cond) ET_CHECK(_cond) +#define ET_DEBUG_ONLY + +#endif // NDEBUG + +/** + * Assert that this code location is unreachable during execution. + */ +#define ET_ASSERT_UNREACHABLE() \ + do { \ + ET_CHECK_MSG(false, "Execution should not reach this point"); \ + ET_UNREACHABLE(); \ + } while (0) + +/** + * Assert that this code location is unreachable during execution. + * + * @param[in] _message Message on how to avoid this assertion error. + */ +#define ET_ASSERT_UNREACHABLE_MSG(_format, ...) \ + do { \ + ET_CHECK_MSG(false, "Execution should not reach this point. " _format, \ + ##__VA_ARGS__); \ + ET_UNREACHABLE(); \ + } while (0) diff --git a/third-party/include/executorch/runtime/platform/clock.h b/third-party/include/executorch/runtime/platform/clock.h new file mode 100644 index 000000000..36c25d90c --- /dev/null +++ b/third-party/include/executorch/runtime/platform/clock.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * Clock and timing related methods. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { + +/** + * Convert an interval from units of system ticks to nanoseconds. + * The conversion ratio is platform-dependent, and thus depends on + * the platform implementation of et_pal_ticks_to_ns_multiplier(). + * + * @param[in] ticks The interval length in system ticks. + * @retval The interval length in nanoseconds. + */ +inline uint64_t ticks_to_ns(et_timestamp_t ticks) { + et_tick_ratio_t ratio = et_pal_ticks_to_ns_multiplier(); + return static_cast(ticks) * ratio.numerator / ratio.denominator; +} + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::ticks_to_ns; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/platform/compat_unistd.h b/third-party/include/executorch/runtime/platform/compat_unistd.h new file mode 100644 index 000000000..c7bd513d5 --- /dev/null +++ b/third-party/include/executorch/runtime/platform/compat_unistd.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * unistd.h related macros for POSIX/Windows compatibility. + */ +#pragma once + +#if defined(_WIN32) && !defined(_WIN64) +#error \ + "You're trying to build ExecuTorch with a too old version of Windows. We need Windows 64-bit." +#endif + +#if !defined(_WIN64) +#include +#else +#include +#define O_RDONLY _O_RDONLY +#define open _open +#define close _close +#define read _read +#define write _write +#define stat _stat64 +#define fstat _fstat64 +#define off_t _off_t +#define lseek _lseeki64 + +#include // For ssize_t. +#include +// To avoid conflicts with std::numeric_limits::max() in +// file_data_loader.cpp. +#undef max + +inline ssize_t pread(int fd, void *buf, size_t nbytes, size_t offset) { + OVERLAPPED overlapped; /* The offset for ReadFile. */ + memset(&overlapped, 0, sizeof(overlapped)); + overlapped.Offset = offset; + overlapped.OffsetHigh = offset >> 32; + + BOOL result; /* The result of ReadFile. */ + DWORD bytes_read; /* The number of bytes read. */ + HANDLE file = (HANDLE)_get_osfhandle(fd); + + result = ReadFile(file, buf, nbytes, &bytes_read, &overlapped); + DWORD error = GetLastError(); + if (!result) { + if (error == ERROR_IO_PENDING) { + result = GetOverlappedResult(file, &overlapped, &bytes_read, TRUE); + if (!result) { + error = GetLastError(); + } + } + } + if (!result) { + // Translate error into errno. + switch (error) { + case ERROR_HANDLE_EOF: + errno = 0; + break; + default: + errno = EIO; + break; + } + return -1; + } + return bytes_read; +} + +#endif // !defined(_WIN64) \ No newline at end of file diff --git a/third-party/include/executorch/runtime/platform/compiler.h b/third-party/include/executorch/runtime/platform/compiler.h new file mode 100644 index 000000000..f6d45e979 --- /dev/null +++ b/third-party/include/executorch/runtime/platform/compiler.h @@ -0,0 +1,191 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * Compiler utility macros. + */ + +#pragma once + +/* + * Compiler support checks. Follows the logic used by pytorch/c10/util/C++17.h + * but may support older versions. + */ + +// https://gcc.gnu.org/projects/cxx-status.html#cxx17 +#if !defined(__clang__) && !defined(_MSC_VER) && defined(__GNUC__) && \ + __GNUC__ < 7 +#error \ + "You're trying to build ExecuTorch with a too old version of GCC. We need GCC 7 or later." +#endif + +// https://clang.llvm.org/cxx_status.html#cxx17 +#if defined(__clang__) && __clang_major__ < 5 +#error \ + "You're trying to build ExecuTorch with a too old version of Clang. We need Clang 5 or later." +#endif + +#if (defined(_MSC_VER) && (!defined(_MSVC_LANG) || _MSVC_LANG < 201703L)) || \ + (!defined(_MSC_VER) && __cplusplus < 201703L) +#error "You need C++17 to compile ExecuTorch" +#endif + +#if defined(_MSC_VER) && (defined(min) || defined(max)) +#error \ + "Macro clash with min and max -- define NOMINMAX when compiling your program on Windows" +#endif + +/* + * Define annotations aliasing C++ declaration attributes. + * See all C++ declaration attributes here: + * https://en.cppreference.com/w/cpp/language/attributes + * + * Note that ExecuTorch supports a lower C++ standard version than all standard + * attributes. Therefore, some annotations are defined using their Clang/GNU + * counterparts. + * + * GNU attribute definitions: + * https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html + */ + +#define ET_NORETURN [[noreturn]] +#define ET_NOINLINE __attribute__((noinline)) +#define ET_INLINE __attribute__((always_inline)) inline +#define ET_INLINE_ATTRIBUTE __attribute__((always_inline)) + +#if defined(__GNUC__) + +#define ET_UNREACHABLE() __builtin_unreachable() + +#elif defined(_MSC_VER) + +#define ET_UNREACHABLE() __assume(0) + +#else // defined(__GNUC__) + +#define ET_UNREACHABLE() \ + while (1) \ + ; + +#endif // defined(__GNUC__) + +#define ET_DEPRECATED [[deprecated]] +#define ET_EXPERIMENTAL \ + [[deprecated("This API is experimental and may change without notice.")]] +#define ET_FALLTHROUGH [[fallthrough]] +#define ET_NODISCARD [[nodiscard]] +#define ET_UNUSED [[maybe_unused]] + +// UNLIKELY Macro +// example +// if ET_UNLIKELY(a > 10 && b < 5) { +// do something +// } +#if (__cplusplus) >= 202002L + +#define ET_LIKELY(expr) (expr) [[likely]] +#define ET_UNLIKELY(expr) (expr) [[unlikely]] + +#else + +#define ET_LIKELY(expr) (expr) +#define ET_UNLIKELY(expr) (expr) + +#endif // (__cplusplus) >= 202002L + +/// Define a C symbol with weak linkage. +#ifdef _MSC_VER +// There currently doesn't seem to be a great way to do this in Windows and +// given that weak linkage is not really critical on Windows, we'll just leave +// it as a stub. +#define ET_WEAK +#else +#define ET_WEAK __attribute__((weak)) +#endif + +/** + * Annotation marking a function as printf-like, providing compiler support + * for format string argument checking. + */ +#ifdef _MSC_VER +#include +#define ET_PRINTFLIKE(_string_index, _va_index) _Printf_format_string_ +#else +#define ET_PRINTFLIKE(_string_index, _va_index) \ + __attribute__((format(printf, _string_index, _va_index))) +#endif + +#ifndef __has_builtin +#define __has_builtin(x) (0) +#endif + +#if __has_builtin(__builtin_strrchr) +/// Name of the source file without a directory string. +#define ET_SHORT_FILENAME (__builtin_strrchr("/" __FILE__, '/') + 1) +#else +#define ET_SHORT_FILENAME __FILE__ +#endif + +#if __has_builtin(__builtin_LINE) +/// Current line as an integer. +#define ET_LINE __builtin_LINE() +#else +#define ET_LINE __LINE__ +#endif // __has_builtin(__builtin_LINE) + +#if __has_builtin(__builtin_FUNCTION) +/// Name of the current function as a const char[]. +#define ET_FUNCTION __builtin_FUNCTION() +#else +#define ET_FUNCTION __FUNCTION__ +#endif // __has_builtin(__builtin_FUNCTION) + +// As of G3 RJ-2024.3 toolchain, zu format specifier is not supported for Xtensa +#if defined(__XTENSA__) +#define ET_PRIsize_t "lu" +#else +#define ET_PRIsize_t "zu" +#endif + +// Whether the compiler supports GNU statement expressions. +// https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html +#ifndef ET_HAVE_GNU_STATEMENT_EXPRESSIONS +#if (defined(__GNUC__) && __GNUC__ >= 3) || defined(__clang__) +#define ET_HAVE_GNU_STATEMENT_EXPRESSIONS 1 +#else +#define ET_HAVE_GNU_STATEMENT_EXPRESSIONS 0 +#endif +#endif // ifndef + +// Define size_t and ssize_t. +#ifndef _MSC_VER +#include +#else +#include +using ssize_t = ptrdiff_t; +#endif + +// DEPRECATED: Use the non-underscore-prefixed versions instead. +// TODO(T199005537): Remove these once all users have stopped using them. +#define __ET_DEPRECATED ET_DEPRECATED +#define __ET_FALLTHROUGH ET_FALLTHROUGH +#define __ET_FUNCTION ET_FUNCTION +#define __ET_HAVE_GNU_STATEMENT_EXPRESSIONS ET_HAVE_GNU_STATEMENT_EXPRESSIONS +#define __ET_INLINE ET_INLINE +#define __ET_LIKELY ET_LIKELY +#define __ET_LINE ET_LINE +#define __ET_NODISCARD ET_NODISCARD +#define __ET_NOINLINE ET_NOINLINE +#define __ET_NORETURN ET_NORETURN +#define __ET_PRINTFLIKE ET_PRINTFLIKE +#define __ET_SHORT_FILENAME ET_SHORT_FILENAME +#define __ET_UNLIKELY ET_UNLIKELY +#define __ET_UNREACHABLE ET_UNREACHABLE +#define __ET_UNUSED ET_UNUSED +#define __ET_WEAK ET_WEAK diff --git a/third-party/include/executorch/runtime/platform/log.h b/third-party/include/executorch/runtime/platform/log.h new file mode 100644 index 000000000..d4326750c --- /dev/null +++ b/third-party/include/executorch/runtime/platform/log.h @@ -0,0 +1,177 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * ExecuTorch logging API. + */ + +#pragma once + +#include +#include +#include + +#include +#include + +// Set minimum log severity if compiler option is not provided. +#ifndef ET_MIN_LOG_LEVEL +#define ET_MIN_LOG_LEVEL Info +#endif // !defined(ET_MIN_LOG_LEVEL) + +/* + * Enable logging by default if compiler option is not provided. + * This should facilitate less confusion for those developing ExecuTorch. + */ +#ifndef ET_LOG_ENABLED +#define ET_LOG_ENABLED 1 +#endif // !defined(ET_LOG_ENABLED) + +// Even though it is supposed to be "portable" some toolchains +// do not define, so providing a definition here +#ifndef PRIu64 +#define PRIu64 "llu" +#endif +#ifndef PRId64 +#define PRId64 "lld" +#endif + +namespace executorch { +namespace runtime { + +/** + * Severity level of a log message. Must be ordered from lowest to highest + * severity. + */ +enum class LogLevel : uint8_t { + /** + * Log messages provided for highly granular debuggability. + * + * Log messages using this severity are unlikely to be compiled by default + * into most debug builds. + */ + Debug, + + /** + * Log messages providing information about the state of the system + * for debuggability. + */ + Info, + + /** + * Log messages about errors within ExecuTorch during runtime. + */ + Error, + + /** + * Log messages that precede a fatal error. However, logging at this level + * does not perform the actual abort, something else needs to. + */ + Fatal, + + /** + * Number of supported log levels, with values in [0, NumLevels). + */ + NumLevels, +}; + +namespace internal { + +/** + * Get the current timestamp to construct a log event. + * + * @retval Monotonically non-decreasing timestamp in system ticks. + */ +et_timestamp_t get_log_timestamp(); + +/** + * Log a string message. + * + * Note: This is an internal function. Use the `ET_LOG` macro instead. + * + * @param[in] level Log severity level. + * @param[in] timestamp Timestamp (in system ticks) of the log event. + * @param[in] filename Name of the source file creating the log event. + * @param[in] function Name of the function creating the log event. + * @param[in] line Source file line of the caller. + * @param[in] format Format string. + * @param[in] args Variable argument list. + */ +ET_PRINTFLIKE(6, 0) +void vlogf(LogLevel level, et_timestamp_t timestamp, const char *filename, + const char *function, size_t line, const char *format, va_list args); + +/** + * Log a string message. + * + * Note: This is an internal function. Use the `ET_LOG` macro instead. + * + * @param[in] level Log severity level. + * @param[in] timestamp Timestamp (in system ticks) of the log event. + * @param[in] filename Name of the source file creating the log event. + * @param[in] function Name of the function creating the log event. + * @param[in] line Source file line of the caller. + * @param[in] format Format string. + */ +ET_PRINTFLIKE(6, 7) +inline void logf(LogLevel level, et_timestamp_t timestamp, const char *filename, + const char *function, size_t line, const char *format, ...) { +#if ET_LOG_ENABLED + va_list args; + va_start(args, format); + internal::vlogf(level, timestamp, filename, function, line, format, args); + va_end(args); +#endif // ET_LOG_ENABLED +} + +} // namespace internal + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::LogLevel; +} // namespace executor +} // namespace torch + +#if ET_LOG_ENABLED + +/** + * Log a message at the given log severity level. + * + * @param[in] _level Log severity level. + * @param[in] _format Log message format string. + */ +#define ET_LOG(_level, _format, ...) \ + do { \ + const auto _log_level = ::executorch::runtime::LogLevel::_level; \ + if (static_cast(_log_level) >= \ + static_cast( \ + ::executorch::runtime::LogLevel::ET_MIN_LOG_LEVEL)) { \ + const auto _timestamp = \ + ::executorch::runtime::internal::get_log_timestamp(); \ + ::executorch::runtime::internal::logf(_log_level, _timestamp, \ + ET_SHORT_FILENAME, ET_FUNCTION, \ + ET_LINE, _format, ##__VA_ARGS__); \ + } \ + } while (0) +#else // ET_LOG_ENABLED + +/** + * Log a message at the given log severity level. + * + * @param[in] _level Log severity level. + * @param[in] _format Log message format string. + */ +#define ET_LOG(_level, _format, ...) ((void)0) + +#endif // ET_LOG_ENABLED diff --git a/third-party/include/executorch/runtime/platform/platform.h b/third-party/include/executorch/runtime/platform/platform.h new file mode 100644 index 000000000..c5cf1dd1c --- /dev/null +++ b/third-party/include/executorch/runtime/platform/platform.h @@ -0,0 +1,133 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * Platform abstraction layer to allow individual platform libraries to override + * symbols in ExecuTorch. PAL functions are defined as C functions so a platform + * library implementer can use C in lieu of C++. + */ + +#pragma once + +// Use C-style includes so that C code can include this header. +#include +#include + +#include +#include + +/** + * Clients should neither define nor use this macro. Used to optionally declare + * the et_pal_*() functions as weak symbols. + * + * This provides a way to both: + * - Include the header and define weak symbols (used by the internal default + * implementations) + * - Include the header and define strong symbols (used by client overrides) + */ +#ifndef ET_INTERNAL_PLATFORM_WEAKNESS +#define ET_INTERNAL_PLATFORM_WEAKNESS +#endif + +extern "C" { + +/** + * Represents the conversion ratio from system ticks to nanoseconds. + * To convert, use nanoseconds = ticks * numerator / denominator. + */ +typedef struct { + uint64_t numerator; + uint64_t denominator; +} et_tick_ratio_t; + +/** + * Initialize the platform abstraction layer. + * + * This function should be called before any other function provided by the PAL + * to initialize any global state. Typically overridden by PAL implementer. + */ +void et_pal_init(void) ET_INTERNAL_PLATFORM_WEAKNESS; + +/** + * Immediately abort execution, setting the device into an error state, if + * available. + */ +ET_NORETURN void et_pal_abort(void) ET_INTERNAL_PLATFORM_WEAKNESS; + +/** + * Return a monotonically non-decreasing timestamp in system ticks. + * + * @retval Timestamp value in system ticks. + */ +et_timestamp_t et_pal_current_ticks(void) ET_INTERNAL_PLATFORM_WEAKNESS; + +/** + * Return the conversion rate from system ticks to nanoseconds as a fraction. + * To convert a system ticks to nanoseconds, multiply the tick count by the + * numerator and then divide by the denominator: + * nanoseconds = ticks * numerator / denominator + * + * The utility method executorch::runtime::ticks_to_ns(et_timestamp_t) can also + * be used to perform the conversion for a given tick count. It is defined in + * torch/executor/runtime/platform/clock.h. + * + * @retval The ratio of nanoseconds to system ticks. + */ +et_tick_ratio_t +et_pal_ticks_to_ns_multiplier(void) ET_INTERNAL_PLATFORM_WEAKNESS; + +/** + * Severity level of a log message. Values must map to printable 7-bit ASCII + * uppercase letters. + */ +typedef enum { + kDebug = 'D', + kInfo = 'I', + kError = 'E', + kFatal = 'F', + kUnknown = '?', // Exception to the "uppercase letter" rule. +} et_pal_log_level_t; + +/** + * Emit a log message via platform output (serial port, console, etc). + * + * @param[in] timestamp Timestamp of the log event in system ticks since boot. + * @param[in] level Severity level of the message. Must be a printable 7-bit + * ASCII uppercase letter. + * @param[in] filename Name of the file that created the log event. + * @param[in] function Name of the function that created the log event. + * @param[in] line Line in the source file where the log event was created. + * @param[in] message Message string to log. + * @param[in] length Message string length. + */ +void et_pal_emit_log_message(et_timestamp_t timestamp, et_pal_log_level_t level, + const char *filename, const char *function, + size_t line, const char *message, + size_t length) ET_INTERNAL_PLATFORM_WEAKNESS; + +/** + * NOTE: Core runtime code must not call this directly. It may only be called by + * a MemoryAllocator wrapper. + * + * Allocates size bytes of memory. + * + * @param[in] size Number of bytes to allocate. + * @returns the allocated memory, or nullptr on failure. Must be freed using + * et_pal_free(). + */ +void *et_pal_allocate(size_t size) ET_INTERNAL_PLATFORM_WEAKNESS; + +/** + * Frees memory allocated by et_pal_allocate(). + * + * @param[in] ptr Pointer to memory to free. May be nullptr. + */ +void et_pal_free(void *ptr) ET_INTERNAL_PLATFORM_WEAKNESS; + +} // extern "C" diff --git a/third-party/include/executorch/runtime/platform/profiler.h b/third-party/include/executorch/runtime/platform/profiler.h new file mode 100644 index 000000000..6905d6434 --- /dev/null +++ b/third-party/include/executorch/runtime/platform/profiler.h @@ -0,0 +1,292 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include +#include +#include + +namespace executorch { +namespace runtime { + +// Version string used to check for compatibility with post-processing +// tool +#define ET_PROF_VER 0x00000001 + +// By default we support profiling upto 1024 perf events. Build +// targets can override this to increase the profiling buffer size +// during compilation. +#ifndef MAX_PROFILE_EVENTS +#define MAX_PROFILE_EVENTS 1024 +#endif +// By default we support profiling upto 1024 memory allocation events. +// Build targets can choose to override this, which will consequently have +// the effect of increasing/decreasing the profiling buffer size. +#ifndef MAX_MEM_PROFILE_EVENTS +#define MAX_MEM_PROFILE_EVENTS 1024 +#endif +// By default we support profiling only upto 16 allocators. If users +// have more allocators than these then they can override this during +// compilation time. There will be an increase/decrease in the profiling +// buffer size based on the way this value is changed. +#ifndef MEM_PROFILE_MAX_ALLOCATORS +#define MEM_PROFILE_MAX_ALLOCATORS 32 +#endif +// By default we support only one profiling block. If users want to profile +// something that will be iterated on multiple times then they will have to +// increment this to support their use case. In post-processing the stats for +// all these iterations will be consolidated. +#ifndef MAX_PROFILE_BLOCKS +#define MAX_PROFILE_BLOCKS 2 +#endif + +#define PROF_NAME_MAX_LEN 32 + +typedef struct alignas(8) { + union { + const char *name_str; + char name[PROF_NAME_MAX_LEN]; + }; + // chain_idx == -1 is a null value, when profile event happens out of chain + // execution + int32_t chain_idx; + uint32_t instruction_idx; + uint64_t start_time; + uint64_t end_time; +} prof_event_t; + +typedef struct alignas(8) { + uint32_t allocator_id; + uint32_t allocation_size; +} mem_prof_event_t; + +typedef struct alignas(8) { + char name[PROF_NAME_MAX_LEN]; + uint64_t allocator_id; +} prof_allocator_t; + +typedef struct alignas(8) { + uint8_t *prof_data; + uint32_t num_bytes; + uint32_t num_blocks; +} prof_result_t; + +typedef struct alignas(8) { + char name[32]; + uint32_t prof_ver; + uint32_t max_prof_entries; + uint32_t prof_entries; + uint32_t max_allocator_entries; + uint32_t allocator_entries; + uint32_t max_mem_prof_entries; + uint32_t mem_prof_entries; +} prof_header_t; + +/* +This is what the layout of the profiling buffer looks like. +--------------------------------------- +| Profiling header | +--------------------------------------- +| Profile events (Perf events) | +--------------------------------------- +| Memory allocators info | +--------------------------------------- +| Profile events (Memory allocations) | +--------------------------------------- +*/ + +// offsets of the various sections in the profiling buffer +// Total size required for profiling buffer +constexpr uint32_t prof_buf_size = + sizeof(prof_header_t) + sizeof(prof_event_t) * MAX_PROFILE_EVENTS + + sizeof(mem_prof_event_t) * MAX_MEM_PROFILE_EVENTS + + sizeof(prof_allocator_t) * MEM_PROFILE_MAX_ALLOCATORS; + +constexpr size_t prof_header_offset = 0; +constexpr size_t prof_events_offset = sizeof(prof_header_t); +constexpr size_t prof_mem_alloc_info_offset = + prof_events_offset + sizeof(prof_event_t) * MAX_PROFILE_EVENTS; +constexpr size_t prof_mem_alloc_events_offset = + prof_mem_alloc_info_offset + + sizeof(prof_allocator_t) * MEM_PROFILE_MAX_ALLOCATORS; + +// Set the initial state for the profiler assuming we're using the +// statically allocated buffer declared in the profiler module. +void profiler_init(void); + +// This starts the profiling of this event and returns a token +// by which this event can be referred to in the future. +uint32_t begin_profiling(const char *name); + +// End profiling event represented by token_id +void end_profiling(uint32_t token_id); + +// Dump profiler results, return pointer to prof event array and number of +// events in it. +void dump_profile_stats(prof_result_t *prof_result); + +void reset_profile_stats(); + +void track_allocation(int32_t id, uint32_t size); + +uint32_t track_allocator(const char *name); + +void profiling_create_block(const char *name); + +// This class enables scope based profiling where needed. Profiling +// will be started when the object is created and will end when the +// object goes out of scope. +class ExecutorchProfiler { +public: + explicit ExecutorchProfiler(const char *name); + + ~ExecutorchProfiler(); + +private: + uint32_t prof_tok; +}; + +typedef struct { + int32_t chain_idx; + uint32_t instruction_idx; +} prof_state_t; + +const prof_state_t &get_profile_tls_state(); + +void set_profile_tls_state(const prof_state_t &state); + +class ExecutorchProfilerInstructionScope { +public: + explicit ExecutorchProfilerInstructionScope(const prof_state_t &state); + ~ExecutorchProfilerInstructionScope(); + + // ScopeGuard: non-copyable, non-movable + ExecutorchProfilerInstructionScope( + const ExecutorchProfilerInstructionScope &) = delete; + ExecutorchProfilerInstructionScope & + operator=(const ExecutorchProfilerInstructionScope &) = delete; + + ExecutorchProfilerInstructionScope(ExecutorchProfilerInstructionScope &&) = + delete; + ExecutorchProfilerInstructionScope & + operator=(ExecutorchProfilerInstructionScope &&) = delete; + +private: + prof_state_t old_state_; +}; + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::begin_profiling; +using ::executorch::runtime::dump_profile_stats; +using ::executorch::runtime::end_profiling; +using ::executorch::runtime::ExecutorchProfiler; +using ::executorch::runtime::ExecutorchProfilerInstructionScope; +using ::executorch::runtime::get_profile_tls_state; +using ::executorch::runtime::mem_prof_event_t; +using ::executorch::runtime::prof_allocator_t; +using ::executorch::runtime::prof_buf_size; +using ::executorch::runtime::prof_event_t; +using ::executorch::runtime::prof_events_offset; +using ::executorch::runtime::prof_header_offset; +using ::executorch::runtime::prof_header_t; +using ::executorch::runtime::prof_mem_alloc_events_offset; +using ::executorch::runtime::prof_mem_alloc_info_offset; +using ::executorch::runtime::prof_result_t; +using ::executorch::runtime::prof_state_t; +using ::executorch::runtime::profiler_init; +using ::executorch::runtime::profiling_create_block; +using ::executorch::runtime::reset_profile_stats; +using ::executorch::runtime::set_profile_tls_state; +using ::executorch::runtime::track_allocation; +using ::executorch::runtime::track_allocator; +} // namespace executor +} // namespace torch + +#ifdef PROFILING_ENABLED + +#define EXECUTORCH_PROFILE_CREATE_BLOCK(name) \ + ::executorch::runtime::profiling_create_block(name); + +// Convenience macros to begin and end profiling. These can be inserted +// anywhere as it'll be ensured that for the prod builds these will +// essentially be noops. +#define EXECUTORCH_BEGIN_PROF(name) \ + ::executorch::runtime::begin_profiling(name); + +#define EXECUTORCH_END_PROF(token_id) \ + ::executorch::runtime::end_profiling(token_id); + +#define EXECUTORCH_SCOPE_PROF(name) \ + ::executorch::runtime::ExecutorchProfiler profiler(name); + +#define EXECUTORCH_PROFILE_INSTRUCTION_SCOPE(chain_idx, instruction_idx) \ + ::executorch::runtime::ExecutorchProfilerInstructionScope \ + __profiler_instruction_scope({chain_idx, instruction_idx}); + +#define EXECUTORCH_DUMP_PROFILE_RESULTS(prof_result) \ + ::executorch::runtime::dump_profile_stats(prof_result); + +#define EXECUTORCH_RESET_PROFILE_RESULTS() \ + ::executorch::runtime::reset_profile_stats(); + +#define EXECUTORCH_TRACK_ALLOCATOR(name) \ + ::executorch::runtime::track_allocator(name); + +#define EXECUTORCH_TRACK_ALLOCATION(id, size) \ + ::executorch::runtime::track_allocation(id, size); + +#else + +#define EXECUTORCH_PROFILE_CREATE_BLOCK(name) \ + do { \ + (void)(name); \ + } while (0) + +#define EXECUTORCH_BEGIN_PROF(name) \ + { \ + } + +#define EXECUTORCH_END_PROF(token_id) \ + do { \ + (void)(token_id); \ + } while (0) + +#define EXECUTORCH_SCOPE_PROF(name) \ + do { \ + (void)(name); \ + } while (0) + +#define EXECUTORCH_PROFILE_INSTRUCTION_SCOPE(chain_idx, instruction_idx) \ + do { \ + (void)(chain_idx); \ + (void)(instruction_idx); \ + } while (0) + +#define EXECUTORCH_DUMP_PROFILE_RESULTS(prof_result_test) \ + memset(prof_result_test, 0, sizeof(::executorch::runtime::prof_result_t)); + +#define EXECUTORCH_RESET_PROFILE_RESULTS() \ + { \ + } + +#define EXECUTORCH_TRACK_ALLOCATOR(name) ((void)(name), -1) + +#define EXECUTORCH_TRACK_ALLOCATION(id, size) \ + do { \ + (void)(id); \ + (void)(size); \ + } while (0) + +#endif diff --git a/third-party/include/executorch/runtime/platform/runtime.h b/third-party/include/executorch/runtime/platform/runtime.h new file mode 100644 index 000000000..375ae7959 --- /dev/null +++ b/third-party/include/executorch/runtime/platform/runtime.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * ExecuTorch global runtime wrapper functions. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { + +/** + * Initialize the ExecuTorch global runtime. + */ +void runtime_init(); + +} // namespace runtime +} // namespace executorch + +namespace torch { +namespace executor { +// TODO(T197294990): Remove these deprecated aliases once all users have moved +// to the new `::executorch` namespaces. +using ::executorch::runtime::runtime_init; +} // namespace executor +} // namespace torch diff --git a/third-party/include/executorch/runtime/platform/system.h b/third-party/include/executorch/runtime/platform/system.h new file mode 100644 index 000000000..ae658507c --- /dev/null +++ b/third-party/include/executorch/runtime/platform/system.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * Platform abstraction layer to allow individual host OS to override + * symbols in ExecuTorch. PAL functions are defined as C functions so an + * implementer can use C in lieu of C++. + */ +#pragma once + +/** + * To enable dynamic linking debugging capability on UNIX-like OS. If enabled + * and see an error like: `undefined symbol: dladdr`, install `libdl` to fix. + */ +#if defined(ET_USE_LIBDL) +#include +#endif + +static constexpr const char *DYNAMIC_LIBRARY_NOT_SUPPORTED = "NOT_SUPPORTED"; +static constexpr const char *DYNAMIC_LIBRARY_NOT_FOUND = "NOT_FOUND"; + +extern "C" { + +/** + * Return shared library . + * + * @param[in] addr Address to the symbol we are looking for in shared libraries. + * @retval The path to the shared library containing the symbol. + */ +inline const char *et_pal_get_shared_library_name(const void *addr) { +#if defined(ET_USE_LIBDL) + Dl_info info; + if (dladdr(addr, &info) && info.dli_fname) { + return info.dli_fname; + } else { + return DYNAMIC_LIBRARY_NOT_FOUND; + } +#endif + (void)addr; + return DYNAMIC_LIBRARY_NOT_SUPPORTED; +} + +} // extern "C" diff --git a/third-party/include/executorch/runtime/platform/types.h b/third-party/include/executorch/runtime/platform/types.h new file mode 100644 index 000000000..a91f357fe --- /dev/null +++ b/third-party/include/executorch/runtime/platform/types.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @file + * Public types used by the ExecuTorch Platform Abstraction Layer. + */ + +#pragma once + +// Use C-style includes so that C code can include this header. +#include + +extern "C" { + +/// Platform timestamp in system ticks. +typedef uint64_t et_timestamp_t; + +} // extern "C" diff --git a/third-party/include/executorch/schema/extended_header.h b/third-party/include/executorch/schema/extended_header.h new file mode 100644 index 000000000..59b28e30b --- /dev/null +++ b/third-party/include/executorch/schema/extended_header.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +#include + +namespace executorch { +namespace runtime { + +/** + * An extended, ExecuTorch-specific header that may be embedded in the + * serialized Program data header. + * + * For details see //executorch/docs/source/pte-file-format.md + */ +struct ExtendedHeader { + /** + * To find the header, callers should provide at least this many bytes of the + * head of the serialized Program data. + */ + static constexpr size_t kNumHeadBytes = 64; + + /** + * The offset into the Program serialized program data where the extended + * header should begin. + */ + static constexpr size_t kHeaderOffset = 8; + + /** + * The magic bytes that identify the header. + * + * This is the canonical definition of the expected value. If the header + * layout ever changes in a compatibility-breaking way, increment the digits + * in the magic. But, doing so will prevent older binaries from recognizing + * the presence of the header. The compatibility-preserving way to make + * changes is to increase the header's length field and add new fields at the + * end. + */ + static constexpr size_t kMagicSize = 4; + static constexpr char kMagic[kMagicSize] = {'e', 'h', '0', '0'}; + + /** + * Look for and parse an ExtendedHeader in the provided data. + * + * @param[in] data The contents of the beginning of the serialized binary + * Program data, starting at offset 0 (i.e., the head of the file). + * @param[in] size Length of `data` in bytes. Must be >= kNumHeadBytes or this + * call will fail. + * + * @returns an ExtendedHeader if the header was found and is valid. Returns an + * error if size was too short, if the header was not found, or if the + * header appeared to be corrupt. + */ + static Result Parse(const void *data, size_t size); + + /** + * The size in bytes of the Program flatbuffer data, starting from offset + * zero. + */ + uint64_t program_size; + + /** + * The offset in bytes of the first segment, if present. Zero if no segment + * is present. + */ + uint64_t segment_base_offset; +}; + +} // namespace runtime +} // namespace executorch diff --git a/third-party/include/opencv2/core.hpp b/third-party/include/opencv2/core.hpp new file mode 100644 index 000000000..c3e83ae17 --- /dev/null +++ b/third-party/include/opencv2/core.hpp @@ -0,0 +1,3699 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this +license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2015, Intel Corporation, all rights reserved. +// Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved. +// Copyright (C) 2015, OpenCV Foundation, all rights reserved. +// Copyright (C) 2015, Itseez Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without +modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's 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. +// +// * The name of the copyright holders may not be used to endorse or promote +products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "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 Intel Corporation or contributors 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. +// +//M*/ + +#ifndef OPENCV_CORE_HPP +#define OPENCV_CORE_HPP + +#ifndef __cplusplus +#error core.hpp header must be compiled as C++ +#endif + +#include "opencv2/core/base.hpp" +#include "opencv2/core/cvdef.h" +#include "opencv2/core/cvstd.hpp" +#include "opencv2/core/mat.hpp" +#include "opencv2/core/matx.hpp" +#include "opencv2/core/persistence.hpp" +#include "opencv2/core/traits.hpp" +#include "opencv2/core/types.hpp" + +/** +@defgroup core Core functionality + +The Core module is the backbone of OpenCV, offering fundamental data structures, +matrix operations, and utility functions that other modules depend on. It’s +essential for handling image data, performing mathematical computations, and +managing memory efficiently within the OpenCV ecosystem. + +@{ + @defgroup core_basic Basic structures + @defgroup core_array Operations on arrays + @defgroup core_async Asynchronous API + @defgroup core_xml XML/YAML/JSON Persistence + @defgroup core_cluster Clustering + @defgroup core_utils Utility and system functions and macros + @{ + @defgroup core_logging Logging facilities + @defgroup core_utils_sse SSE utilities + @defgroup core_utils_neon NEON utilities + @defgroup core_utils_vsx VSX utilities + @defgroup core_utils_softfloat Softfloat support + @defgroup core_utils_samples Utility functions for OpenCV samples + @} + @defgroup core_opengl OpenGL interoperability + @defgroup core_optim Optimization Algorithms + @defgroup core_directx DirectX interoperability + @defgroup core_eigen Eigen support + @defgroup core_opencl OpenCL support + @defgroup core_va_intel Intel VA-API/OpenCL (CL-VA) interoperability + @defgroup core_hal Hardware Acceleration Layer + @{ + @defgroup core_hal_functions Functions + @defgroup core_hal_interface Interface + @defgroup core_hal_intrin Universal intrinsics + @{ + @defgroup core_hal_intrin_impl Private implementation helpers + @} + @defgroup core_lowlevel_api Low-level API for external libraries / +plugins + @} + @defgroup core_parallel Parallel Processing + @{ + @defgroup core_parallel_backend Parallel backends API + @} + @defgroup core_quaternion Quaternion +@} + */ + +namespace cv { + +//! @addtogroup core_utils +//! @{ + +/*! @brief Class passed to an error. + +This class encapsulates all or almost all necessary +information about the error happened in the program. The exception is +usually constructed and thrown implicitly via CV_Error and CV_Error_ macros. +@see error + */ +class CV_EXPORTS Exception : public std::exception { +public: + /*! + Default constructor + */ + Exception(); + /*! + Full constructor. Normally the constructor is not called explicitly. + Instead, the macros CV_Error(), CV_Error_() and CV_Assert() are used. + */ + Exception(int _code, const String &_err, const String &_func, + const String &_file, int _line); + virtual ~Exception() CV_NOEXCEPT; + + /*! + \return the error description and the context as a text string. + */ + virtual const char *what() const CV_NOEXCEPT CV_OVERRIDE; + void formatMessage(); + + String msg; ///< the formatted error message + + int code; ///< error code @see CVStatus + String err; ///< error description + String func; ///< function name. Available only when the compiler supports + ///< getting it + String file; ///< source file name where the error has occurred + int line; ///< line number in the source file where the error has occurred +}; + +/*! @brief Signals an error and raises the exception. + +By default the function prints information about the error to stderr, +then it either stops if cv::setBreakOnError() had been called before or raises +the exception. It is possible to alternate error processing by using +#redirectError(). +@param exc the exception raisen. +@deprecated drop this version + */ +CV_EXPORTS CV_NORETURN void error(const Exception &exc); + +enum SortFlags { + SORT_EVERY_ROW = 0, //!< each matrix row is sorted independently + SORT_EVERY_COLUMN = 1, //!< each matrix column is sorted + //!< independently; this flag and the previous one are + //!< mutually exclusive. + SORT_ASCENDING = 0, //!< each matrix row is sorted in the ascending + //!< order. + SORT_DESCENDING = 16 //!< each matrix row is sorted in the + //!< descending order; this flag and the previous one are + //!< also mutually exclusive. +}; + +//! @} core_utils + +//! @addtogroup core_array +//! @{ + +//! Covariation flags +enum CovarFlags { + /** The output covariance matrix is calculated as: + \f[\texttt{scale} \cdot [ \texttt{vects} [0]- \texttt{mean} , + \texttt{vects} [1]- \texttt{mean} ,...]^T \cdot [ \texttt{vects} [0]- + \texttt{mean} , \texttt{vects} [1]- \texttt{mean} ,...],\f] The + covariance matrix will be nsamples x nsamples. Such an unusual covariance + matrix is used for fast PCA of a set of very large vectors (see, for + example, the EigenFaces technique for face recognition). Eigenvalues of + this "scrambled" matrix match the eigenvalues of the true covariance + matrix. The "true" eigenvectors can be easily calculated from the + eigenvectors of the "scrambled" covariance matrix. */ + COVAR_SCRAMBLED = 0, + /**The output covariance matrix is calculated as: + \f[\texttt{scale} \cdot [ \texttt{vects} [0]- \texttt{mean} , + \texttt{vects} [1]- \texttt{mean} ,...] \cdot [ \texttt{vects} [0]- + \texttt{mean} , \texttt{vects} [1]- \texttt{mean} ,...]^T,\f] covar will + be a square matrix of the same size as the total number of elements in each + input vector. One and only one of #COVAR_SCRAMBLED and #COVAR_NORMAL must + be specified.*/ + COVAR_NORMAL = 1, + /** If the flag is specified, the function does not calculate mean from + the input vectors but, instead, uses the passed mean vector. This is + useful if mean has been pre-calculated or known in advance, or if the + covariance matrix is calculated by parts. In this case, mean is not a mean + vector of the input sub-set of vectors but rather the mean vector of the + whole set.*/ + COVAR_USE_AVG = 2, + /** If the flag is specified, the covariance matrix is scaled. In the + "normal" mode, scale is 1./nsamples . In the "scrambled" mode, scale is + the reciprocal of the total number of elements in each input vector. By + default (if the flag is not specified), the covariance matrix is not scaled + ( scale=1 ).*/ + COVAR_SCALE = 4, + /** If the flag is + specified, all the input vectors are stored as rows of the samples matrix. + mean should be a single-row vector in this case.*/ + COVAR_ROWS = 8, + /** If the flag is + specified, all the input vectors are stored as columns of the samples + matrix. mean should be a single-column vector in this case.*/ + COVAR_COLS = 16 +}; + +enum ReduceTypes { + REDUCE_SUM = 0, //!< the output is the sum of all rows/columns of the matrix. + REDUCE_AVG = + 1, //!< the output is the mean vector of all rows/columns of the matrix. + REDUCE_MAX = 2, //!< the output is the maximum (column/row-wise) of all + //!< rows/columns of the matrix. + REDUCE_MIN = 3, //!< the output is the minimum (column/row-wise) of all + //!< rows/columns of the matrix. + REDUCE_SUM2 = + 4 //!< the output is the sum of all squared rows/columns of the matrix. +}; + +/** @brief Swaps two matrices + */ +CV_EXPORTS void swap(Mat &a, Mat &b); + +/** @brief Computes the source location of an extrapolated pixel. + +The function computes and returns the coordinate of a donor pixel corresponding +to the specified extrapolated pixel when using the specified extrapolation +border mode. For example, if you use cv::BORDER_WRAP mode in the horizontal +direction, cv::BORDER_REFLECT_101 in the vertical direction and want to compute +value of the "virtual" pixel Point(-5, 100) in a floating-point image img, it +looks like: +@code{.cpp} + float val = img.at(borderInterpolate(100, img.rows, +cv::BORDER_REFLECT_101), borderInterpolate(-5, img.cols, cv::BORDER_WRAP)); +@endcode +Normally, the function is not called directly. It is used inside filtering +functions and also in copyMakeBorder. +@param p 0-based coordinate of the extrapolated pixel along one of the axes, +likely \<0 or \>= len +@param len Length of the array along the corresponding axis. +@param borderType Border type, one of the #BorderTypes, except for +#BORDER_TRANSPARENT and #BORDER_ISOLATED. When borderType==#BORDER_CONSTANT, the +function always returns -1, regardless of p and len. + +@sa copyMakeBorder +*/ +CV_EXPORTS_W int borderInterpolate(int p, int len, int borderType); + +/** @example samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp +An example using copyMakeBorder function. +Check @ref tutorial_copyMakeBorder "the corresponding tutorial" for more details +*/ + +/** @brief Forms a border around an image. + +The function copies the source image into the middle of the destination image. +The areas to the left, to the right, above and below the copied source image +will be filled with extrapolated pixels. This is not what filtering functions +based on it do (they extrapolate pixels on-fly), but what other more complex +functions, including your own, may do to simplify image boundary handling. + +The function supports the mode when src is already in the middle of dst . In +this case, the function does not copy src itself but simply constructs the +border, for example: + +@code{.cpp} + // let border be the same in all directions + int border=2; + // constructs a larger image to fit both the image and the border + Mat gray_buf(rgb.rows + border*2, rgb.cols + border*2, rgb.depth()); + // select the middle part of it w/o copying data + Mat gray(gray_canvas, Rect(border, border, rgb.cols, rgb.rows)); + // convert image from RGB to grayscale + cvtColor(rgb, gray, COLOR_RGB2GRAY); + // form a border in-place + copyMakeBorder(gray, gray_buf, border, border, + border, border, BORDER_REPLICATE); + // now do some custom filtering ... + ... +@endcode +@note When the source image is a part (ROI) of a bigger image, the function will +try to use the pixels outside of the ROI to form a border. To disable this +feature and always do extrapolation, as if src was not a ROI, use borderType | +#BORDER_ISOLATED. + +@param src Source image. +@param dst Destination image of the same type as src and the size +Size(src.cols+left+right, src.rows+top+bottom) . +@param top the top pixels +@param bottom the bottom pixels +@param left the left pixels +@param right Parameter specifying how many pixels in each direction from the +source image rectangle to extrapolate. For example, top=1, bottom=1, left=1, +right=1 mean that 1 pixel-wide border needs to be built. +@param borderType Border type. See borderInterpolate for details. +@param value Border value if borderType==BORDER_CONSTANT . + +@sa borderInterpolate +*/ +CV_EXPORTS_W void copyMakeBorder(InputArray src, OutputArray dst, int top, + int bottom, int left, int right, + int borderType, + const Scalar &value = Scalar()); + +/** @brief Calculates the per-element sum of two arrays or an array and a +scalar. + +The function add calculates: +- Sum of two arrays when both input arrays have the same size and the same +number of channels: +\f[\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) + \texttt{src2}(I)) +\quad \texttt{if mask}(I) \ne0\f] +- Sum of an array and a scalar when src2 is constructed from Scalar or has the +same number of elements as `src1.channels()`: +\f[\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) + \texttt{src2} ) +\quad \texttt{if mask}(I) \ne0\f] +- Sum of a scalar and an array when src1 is constructed from Scalar or has the +same number of elements as `src2.channels()`: +\f[\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1} + \texttt{src2}(I) ) +\quad \texttt{if mask}(I) \ne0\f] where `I` is a multi-dimensional index of +array elements. In case of multi-channel arrays, each channel is processed +independently. + +The first function in the list above can be replaced with matrix expressions: +@code{.cpp} + dst = src1 + src2; + dst += src1; // equivalent to add(dst, src1, dst); +@endcode +The input arrays and the output array can all have the same or different depths. +For example, you can add a 16-bit unsigned array to a 8-bit signed array and +store the sum as a 32-bit floating-point array. Depth of the output array is +determined by the dtype parameter. In the second and third cases above, as well +as in the first case, when src1.depth() == src2.depth(), dtype can be set to the +default -1. In this case, the output array will have the same depth as the input +array, be it src1, src2 or both. +@note Saturation is not applied when the output array has the depth CV_32S. You +may even get result of an incorrect sign in the case of overflow. +@note (Python) Be careful to difference behaviour between src1/src2 are single +number and they are tuple/array. `add(src,X)` means `add(src,(X,X,X,X))`. +`add(src,(X,))` means `add(src,(X,0,0,0))`. +@param src1 first input array or a scalar. +@param src2 second input array or a scalar. +@param dst output array that has the same size and number of channels as the +input array(s); the depth is defined by dtype or src1/src2. +@param mask optional operation mask - 8-bit single channel array, that specifies +elements of the output array to be changed. +@param dtype optional depth of the output array (see the discussion below). +@sa subtract, addWeighted, scaleAdd, Mat::convertTo +*/ +CV_EXPORTS_W void add(InputArray src1, InputArray src2, OutputArray dst, + InputArray mask = noArray(), int dtype = -1); + +/** @brief Calculates the per-element difference between two arrays or array and +a scalar. + +The function subtract calculates: +- Difference between two arrays, when both input arrays have the same size and +the same number of channels: + \f[\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) - +\texttt{src2}(I)) \quad \texttt{if mask}(I) \ne0\f] +- Difference between an array and a scalar, when src2 is constructed from Scalar +or has the same number of elements as `src1.channels()`: + \f[\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1}(I) - \texttt{src2} +) \quad \texttt{if mask}(I) \ne0\f] +- Difference between a scalar and an array, when src1 is constructed from Scalar +or has the same number of elements as `src2.channels()`: + \f[\texttt{dst}(I) = \texttt{saturate} ( \texttt{src1} - \texttt{src2}(I) +) \quad \texttt{if mask}(I) \ne0\f] +- The reverse difference between a scalar and an array in the case of `SubRS`: + \f[\texttt{dst}(I) = \texttt{saturate} ( \texttt{src2} - \texttt{src1}(I) +) \quad \texttt{if mask}(I) \ne0\f] where I is a multi-dimensional index of +array elements. In case of multi-channel arrays, each channel is processed +independently. + +The first function in the list above can be replaced with matrix expressions: +@code{.cpp} + dst = src1 - src2; + dst -= src1; // equivalent to subtract(dst, src1, dst); +@endcode +The input arrays and the output array can all have the same or different depths. +For example, you can subtract to 8-bit unsigned arrays and store the difference +in a 16-bit signed array. Depth of the output array is determined by dtype +parameter. In the second and third cases above, as well as in the first case, +when src1.depth() == src2.depth(), dtype can be set to the default -1. In this +case the output array will have the same depth as the input array, be it src1, +src2 or both. +@note Saturation is not applied when the output array has the depth CV_32S. You +may even get result of an incorrect sign in the case of overflow. +@note (Python) Be careful to difference behaviour between src1/src2 are single +number and they are tuple/array. `subtract(src,X)` means +`subtract(src,(X,X,X,X))`. `subtract(src,(X,))` means `subtract(src,(X,0,0,0))`. +@param src1 first input array or a scalar. +@param src2 second input array or a scalar. +@param dst output array of the same size and the same number of channels as the +input array. +@param mask optional operation mask; this is an 8-bit single channel array that +specifies elements of the output array to be changed. +@param dtype optional depth of the output array +@sa add, addWeighted, scaleAdd, Mat::convertTo + */ +CV_EXPORTS_W void subtract(InputArray src1, InputArray src2, OutputArray dst, + InputArray mask = noArray(), int dtype = -1); + +/** @brief Calculates the per-element scaled product of two arrays. + +The function multiply calculates the per-element product of two arrays: + +\f[\texttt{dst} (I)= \texttt{saturate} ( \texttt{scale} \cdot \texttt{src1} (I) +\cdot \texttt{src2} (I))\f] + +There is also a @ref MatrixExpressions -friendly variant of the first function. +See Mat::mul . + +For a not-per-element matrix product, see gemm . + +@note Saturation is not applied when the output array has the depth +CV_32S. You may even get result of an incorrect sign in the case of +overflow. +@note (Python) Be careful to difference behaviour between src1/src2 are single +number and they are tuple/array. `multiply(src,X)` means +`multiply(src,(X,X,X,X))`. `multiply(src,(X,))` means `multiply(src,(X,0,0,0))`. +@param src1 first input array. +@param src2 second input array of the same size and the same type as src1. +@param dst output array of the same size and type as src1. +@param scale optional scale factor. +@param dtype optional depth of the output array +@sa add, subtract, divide, scaleAdd, addWeighted, accumulate, accumulateProduct, +accumulateSquare, Mat::convertTo +*/ +CV_EXPORTS_W void multiply(InputArray src1, InputArray src2, OutputArray dst, + double scale = 1, int dtype = -1); + +/** @brief Performs per-element division of two arrays or a scalar by an array. + +The function cv::divide divides one array by another: +\f[\texttt{dst(I) = saturate(src1(I)*scale/src2(I))}\f] +or a scalar by an array when there is no src1 : +\f[\texttt{dst(I) = saturate(scale/src2(I))}\f] + +Different channels of multi-channel arrays are processed independently. + +For integer types when src2(I) is zero, dst(I) will also be zero. + +@note In case of floating point data there is no special defined behavior for +zero src2(I) values. Regular floating-point division is used. Expect correct +IEEE-754 behaviour for floating-point data (with NaN, Inf result values). + +@note Saturation is not applied when the output array has the depth CV_32S. You +may even get result of an incorrect sign in the case of overflow. +@note (Python) Be careful to difference behaviour between src1/src2 are single +number and they are tuple/array. `divide(src,X)` means `divide(src,(X,X,X,X))`. +`divide(src,(X,))` means `divide(src,(X,0,0,0))`. +@param src1 first input array. +@param src2 second input array of the same size and type as src1. +@param scale scalar factor. +@param dst output array of the same size and type as src2. +@param dtype optional depth of the output array; if -1, dst will have depth +src2.depth(), but in case of an array-by-array division, you can only pass -1 +when src1.depth()==src2.depth(). +@sa multiply, add, subtract +*/ +CV_EXPORTS_W void divide(InputArray src1, InputArray src2, OutputArray dst, + double scale = 1, int dtype = -1); + +/** @overload */ +CV_EXPORTS_W void divide(double scale, InputArray src2, OutputArray dst, + int dtype = -1); + +/** @brief Calculates the sum of a scaled array and another array. + +The function scaleAdd is one of the classical primitive linear algebra +operations, known as DAXPY or SAXPY in +[BLAS](http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms). It +calculates the sum of a scaled array and another array: +\f[\texttt{dst} (I)= \texttt{scale} \cdot \texttt{src1} (I) + \texttt{src2} +(I)\f] The function can also be emulated with a matrix expression, for example: +@code{.cpp} + Mat A(3, 3, CV_64F); + ... + A.row(0) = A.row(1)*2 + A.row(2); +@endcode +@param src1 first input array. +@param alpha scale factor for the first array. +@param src2 second input array of the same size and type as src1. +@param dst output array of the same size and type as src1. +@sa add, addWeighted, subtract, Mat::dot, Mat::convertTo +*/ +CV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, + OutputArray dst); + +/** @brief Calculates the weighted sum of two arrays. + +The function addWeighted calculates the weighted sum of two arrays as follows: +\f[\texttt{dst} (I)= \texttt{saturate} ( \texttt{src1} (I)* \texttt{alpha} + +\texttt{src2} (I)* \texttt{beta} + \texttt{gamma} )\f] where I is a +multi-dimensional index of array elements. In case of multi-channel arrays, each +channel is processed independently. +The function can be replaced with a matrix expression: +@code{.cpp} + dst = src1*alpha + src2*beta + gamma; +@endcode +@note Saturation is not applied when the output array has the depth CV_32S. You +may even get result of an incorrect sign in the case of overflow. +@param src1 first input array. +@param alpha weight of the first array elements. +@param src2 second input array of the same size and channel number as src1. +@param beta weight of the second array elements. +@param gamma scalar added to each sum. +@param dst output array that has the same size and number of channels as the +input arrays. +@param dtype optional depth of the output array; when both input arrays have the +same depth, dtype can be set to -1, which will be equivalent to src1.depth(). +@sa add, subtract, scaleAdd, Mat::convertTo +*/ +CV_EXPORTS_W void addWeighted(InputArray src1, double alpha, InputArray src2, + double beta, double gamma, OutputArray dst, + int dtype = -1); + +/** @brief Scales, calculates absolute values, and converts the result to 8-bit. + +On each element of the input array, the function convertScaleAbs +performs three operations sequentially: scaling, taking an absolute +value, conversion to an unsigned 8-bit type: +\f[\texttt{dst} (I)= \texttt{saturate\_cast} (| \texttt{src} (I)* +\texttt{alpha} + \texttt{beta} |)\f] In case of multi-channel arrays, the +function processes each channel independently. When the output is not 8-bit, the +operation can be emulated by calling the Mat::convertTo method (or by using +matrix expressions) and then by calculating an absolute value of the result. For +example: +@code{.cpp} + Mat_ A(30,30); + randu(A, Scalar(-100), Scalar(100)); + Mat_ B = A*5 + 3; + B = abs(B); + // Mat_ B = abs(A*5+3) will also do the job, + // but it will allocate a temporary matrix +@endcode +@param src input array. +@param dst output array. +@param alpha optional scale factor. +@param beta optional delta added to the scaled values. +@sa Mat::convertTo, cv::abs(const Mat&) +*/ +CV_EXPORTS_W void convertScaleAbs(InputArray src, OutputArray dst, + double alpha = 1, double beta = 0); + +/** @brief Converts an array to half precision floating number. + +This function converts FP32 (single precision floating point) from/to FP16 (half +precision floating point). CV_16S format is used to represent FP16 data. There +are two use modes (src -> dst): CV_32F -> CV_16S and CV_16S -> CV_32F. The input +array has to have type of CV_32F or CV_16S to represent the bit depth. If the +input array is neither of them, the function will raise an error. The format of +half precision floating point is defined in IEEE 754-2008. + +@param src input array. +@param dst output array. + +@deprecated Use Mat::convertTo with CV_16F instead. +*/ +CV_EXPORTS_W void convertFp16(InputArray src, OutputArray dst); + +/** @example +samples/cpp/tutorial_code/core/how_to_scan_images/how_to_scan_images.cpp Check +@ref tutorial_how_to_scan_images "the corresponding tutorial" for more details +*/ + +/** @brief Performs a look-up table transform of an array. + +The function LUT fills the output array with values from the look-up table. +Indices of the entries are taken from the input array. That is, the function +processes each element of src as follows: +\f[\texttt{dst} (I) \leftarrow \texttt{lut(src(I) + d)}\f] +where +\f[d = \fork{0}{if \(\texttt{src}\) has depth \(\texttt{CV_8U}\)}{128}{if +\(\texttt{src}\) has depth \(\texttt{CV_8S}\)}\f] +@param src input array of 8-bit elements. +@param lut look-up table of 256 elements; in case of multi-channel input array, +the table should either have a single channel (in this case the same table is +used for all channels) or the same number of channels as in the input array. +@param dst output array of the same size and number of channels as src, and the +same depth as lut. +@sa convertScaleAbs, Mat::convertTo +*/ +CV_EXPORTS_W void LUT(InputArray src, InputArray lut, OutputArray dst); + +/** @brief Calculates the sum of array elements. + +The function cv::sum calculates and returns the sum of array elements, +independently for each channel. +@param src input array that must have from 1 to 4 channels. +@sa countNonZero, mean, meanStdDev, norm, minMaxLoc, reduce +*/ +CV_EXPORTS_AS(sumElems) Scalar sum(InputArray src); + +/** @brief Checks for the presence of at least one non-zero array element. + +The function returns whether there are non-zero elements in src + +The function do not work with multi-channel arrays. If you need to check +non-zero array elements across all the channels, use Mat::reshape first to +reinterpret the array as single-channel. Or you may extract the particular +channel using either extractImageCOI, or mixChannels, or split. + +@note +- If the location of non-zero array elements is important, @ref findNonZero is +helpful. +- If the count of non-zero array elements is important, @ref countNonZero is +helpful. +@param src single-channel array. +@sa mean, meanStdDev, norm, minMaxLoc, calcCovarMatrix +@sa findNonZero, countNonZero +*/ +CV_EXPORTS_W bool hasNonZero(InputArray src); + +/** @brief Counts non-zero array elements. + +The function returns the number of non-zero elements in src : +\f[\sum _{I: \; \texttt{src} (I) \ne0 } 1\f] + +The function do not work with multi-channel arrays. If you need to count +non-zero array elements across all the channels, use Mat::reshape first to +reinterpret the array as single-channel. Or you may extract the particular +channel using either extractImageCOI, or mixChannels, or split. + +@note +- If only whether there are non-zero elements is important, @ref hasNonZero is +helpful. +- If the location of non-zero array elements is important, @ref findNonZero is +helpful. +@param src single-channel array. +@sa mean, meanStdDev, norm, minMaxLoc, calcCovarMatrix +@sa findNonZero, hasNonZero +*/ +CV_EXPORTS_W int countNonZero(InputArray src); + +/** @brief Returns the list of locations of non-zero pixels + +Given a binary matrix (likely returned from an operation such +as threshold(), compare(), >, ==, etc, return all of +the non-zero indices as a cv::Mat or std::vector (x,y) +For example: +@code{.cpp} + cv::Mat binaryImage; // input, binary image + cv::Mat locations; // output, locations of non-zero pixels + cv::findNonZero(binaryImage, locations); + + // access pixel coordinates + Point pnt = locations.at(i); +@endcode +or +@code{.cpp} + cv::Mat binaryImage; // input, binary image + vector locations; // output, locations of non-zero pixels + cv::findNonZero(binaryImage, locations); + + // access pixel coordinates + Point pnt = locations[i]; +@endcode + +The function do not work with multi-channel arrays. If you need to find non-zero +elements across all the channels, use Mat::reshape first to reinterpret the +array as single-channel. Or you may extract the particular channel using either +extractImageCOI, or mixChannels, or split. + +@note +- If only count of non-zero array elements is important, @ref countNonZero is +helpful. +- If only whether there are non-zero elements is important, @ref hasNonZero is +helpful. +@param src single-channel array +@param idx the output array, type of cv::Mat or std::vector, +corresponding to non-zero indices in the input +@sa countNonZero, hasNonZero +*/ +CV_EXPORTS_W void findNonZero(InputArray src, OutputArray idx); + +/** @brief Calculates an average (mean) of array elements. + +The function cv::mean calculates the mean value M of array elements, +independently for each channel, and return it: +\f[\begin{array}{l} N = \sum _{I: \; \texttt{mask} (I) \ne 0} 1 \\ M_c = \left +( \sum _{I: \; \texttt{mask} (I) \ne 0}{ \texttt{mtx} (I)_c} \right )/N +\end{array}\f] When all the mask elements are 0's, the function returns +Scalar::all(0) +@param src input array that should have from 1 to 4 channels so that the result +can be stored in Scalar_ . +@param mask optional operation mask. +@sa countNonZero, meanStdDev, norm, minMaxLoc +*/ +CV_EXPORTS_W Scalar mean(InputArray src, InputArray mask = noArray()); + +/** Calculates a mean and standard deviation of array elements. + +The function cv::meanStdDev calculates the mean and the standard deviation M +of array elements independently for each channel and returns it via the +output parameters: +\f[\begin{array}{l} N = \sum _{I, \texttt{mask} (I) \ne 0} 1 \\ \texttt{mean} +_c = \frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \texttt{src} (I)_c}{N} +\\ \texttt{stddev} _c = \sqrt{\frac{\sum_{ I: \; \texttt{mask}(I) \ne 0} \left +( \texttt{src} (I)_c - \texttt{mean} _c \right )^2}{N}} \end{array}\f] When all +the mask elements are 0's, the function returns mean=stddev=Scalar::all(0). +@note The calculated standard deviation is only the diagonal of the +complete normalized covariance matrix. If the full matrix is needed, you +can reshape the multi-channel array M x N to the single-channel array +M\*N x mtx.channels() (only possible when the matrix is continuous) and +then pass the matrix to calcCovarMatrix . +@param src input array that should have from 1 to 4 channels so that the results +can be stored in Scalar_ 's. +@param mean output parameter: calculated mean value. +@param stddev output parameter: calculated standard deviation. +@param mask optional operation mask. +@sa countNonZero, mean, norm, minMaxLoc, calcCovarMatrix +*/ +CV_EXPORTS_W void meanStdDev(InputArray src, OutputArray mean, + OutputArray stddev, InputArray mask = noArray()); + +/** @brief Calculates the absolute norm of an array. + +This version of #norm calculates the absolute norm of src1. The type of norm to +calculate is specified using #NormTypes. + +As example for one array consider the function \f$r(x)= \begin{pmatrix} x \\ 1-x +\end{pmatrix}, x \in [-1;1]\f$. The \f$ L_{1}, L_{2} \f$ and \f$ L_{\infty} \f$ +norm for the sample value \f$r(-1) = \begin{pmatrix} -1 \\ 2 \end{pmatrix}\f$ is +calculated as follows +\f{align*} + \| r(-1) \|_{L_1} &= |-1| + |2| = 3 \\ + \| r(-1) \|_{L_2} &= \sqrt{(-1)^{2} + (2)^{2}} = \sqrt{5} \\ + \| r(-1) \|_{L_\infty} &= \max(|-1|,|2|) = 2 +\f} +and for \f$r(0.5) = \begin{pmatrix} 0.5 \\ 0.5 \end{pmatrix}\f$ the calculation +is +\f{align*} + \| r(0.5) \|_{L_1} &= |0.5| + |0.5| = 1 \\ + \| r(0.5) \|_{L_2} &= \sqrt{(0.5)^{2} + (0.5)^{2}} = \sqrt{0.5} \\ + \| r(0.5) \|_{L_\infty} &= \max(|0.5|,|0.5|) = 0.5. +\f} +The following graphic shows all values for the three norm functions \f$\| r(x) +\|_{L_1}, \| r(x) \|_{L_2}\f$ and \f$\| r(x) \|_{L_\infty}\f$. It is notable +that the \f$ L_{1} \f$ norm forms the upper and the \f$ L_{\infty} \f$ norm +forms the lower border for the example function \f$ r(x) \f$. +![Graphs for the different norm functions from the above +example](pics/NormTypes_OneArray_1-2-INF.png) + +When the mask parameter is specified and it is not empty, the norm is + +If normType is not specified, #NORM_L2 is used. +calculated only over the region specified by the mask. + +Multi-channel input arrays are treated as single-channel arrays, that is, +the results for all channels are combined. + +Hamming norms can only be calculated with CV_8U depth arrays. + +@param src1 first input array. +@param normType type of the norm (see #NormTypes). +@param mask optional operation mask; it must have the same size as src1 and +CV_8UC1 type. +*/ +CV_EXPORTS_W double norm(InputArray src1, int normType = NORM_L2, + InputArray mask = noArray()); + +/** @brief Calculates an absolute difference norm or a relative difference norm. + +This version of cv::norm calculates the absolute difference norm +or the relative difference norm of arrays src1 and src2. +The type of norm to calculate is specified using #NormTypes. + +@param src1 first input array. +@param src2 second input array of the same size and the same type as src1. +@param normType type of the norm (see #NormTypes). +@param mask optional operation mask; it must have the same size as src1 and +CV_8UC1 type. +*/ +CV_EXPORTS_W double norm(InputArray src1, InputArray src2, + int normType = NORM_L2, InputArray mask = noArray()); +/** @overload +@param src first input array. +@param normType type of the norm (see #NormTypes). +*/ +CV_EXPORTS double norm(const SparseMat &src, int normType); + +/** @brief Computes the Peak Signal-to-Noise Ratio (PSNR) image quality metric. + +This function calculates the Peak Signal-to-Noise Ratio (PSNR) image quality +metric in decibels (dB), between two input arrays src1 and src2. The arrays must +have the same type. + +The PSNR is calculated as follows: + +\f[ +\texttt{PSNR} = 10 \cdot \log_{10}{\left( \frac{R^2}{MSE} \right) } +\f] + +where R is the maximum integer value of depth (e.g. 255 in the case of CV_8U +data) and MSE is the mean squared error between the two arrays. + +@param src1 first input array. +@param src2 second input array of the same size as src1. +@param R the maximum pixel value (255 by default) + + */ +CV_EXPORTS_W double PSNR(InputArray src1, InputArray src2, double R = 255.); + +/** @brief naive nearest neighbor finder + +see http://en.wikipedia.org/wiki/Nearest_neighbor_search +@todo document + */ +CV_EXPORTS_W void batchDistance(InputArray src1, InputArray src2, + OutputArray dist, int dtype, OutputArray nidx, + int normType = NORM_L2, int K = 0, + InputArray mask = noArray(), int update = 0, + bool crosscheck = false); + +/** @brief Normalizes the norm or value range of an array. + +The function cv::normalize normalizes scale and shift the input array elements +so that +\f[\| \texttt{dst} \| _{L_p}= \texttt{alpha}\f] +(where p=Inf, 1 or 2) when normType=NORM_INF, NORM_L1, or NORM_L2, respectively; +or so that +\f[\min _I \texttt{dst} (I)= \texttt{alpha} , \, \, \max _I \texttt{dst} (I)= +\texttt{beta}\f] + +when normType=NORM_MINMAX (for dense arrays only). The optional mask specifies a +sub-array to be normalized. This means that the norm or min-n-max are calculated +over the sub-array, and then this sub-array is modified to be normalized. If you +want to only use the mask to calculate the norm or min-max but modify the whole +array, you can use norm and Mat::convertTo. + +In case of sparse matrices, only the non-zero values are analyzed and +transformed. Because of this, the range transformation for sparse matrices is +not allowed since it can shift the zero level. + +Possible usage with some positive example data: +@code{.cpp} + vector positiveData = { 2.0, 8.0, 10.0 }; + vector normalizedData_l1, normalizedData_l2, normalizedData_inf, +normalizedData_minmax; + + // Norm to probability (total count) + // sum(numbers) = 20.0 + // 2.0 0.1 (2.0/20.0) + // 8.0 0.4 (8.0/20.0) + // 10.0 0.5 (10.0/20.0) + normalize(positiveData, normalizedData_l1, 1.0, 0.0, NORM_L1); + + // Norm to unit vector: ||positiveData|| = 1.0 + // 2.0 0.15 + // 8.0 0.62 + // 10.0 0.77 + normalize(positiveData, normalizedData_l2, 1.0, 0.0, NORM_L2); + + // Norm to max element + // 2.0 0.2 (2.0/10.0) + // 8.0 0.8 (8.0/10.0) + // 10.0 1.0 (10.0/10.0) + normalize(positiveData, normalizedData_inf, 1.0, 0.0, NORM_INF); + + // Norm to range [0.0;1.0] + // 2.0 0.0 (shift to left border) + // 8.0 0.75 (6.0/8.0) + // 10.0 1.0 (shift to right border) + normalize(positiveData, normalizedData_minmax, 1.0, 0.0, NORM_MINMAX); +@endcode + +@param src input array. +@param dst output array of the same size as src . +@param alpha norm value to normalize to or the lower range boundary in case of +the range normalization. +@param beta upper range boundary in case of the range normalization; it is not +used for the norm normalization. +@param norm_type normalization type (see cv::NormTypes). +@param dtype when negative, the output array has the same type as src; +otherwise, it has the same number of channels as src and the depth +=CV_MAT_DEPTH(dtype). +@param mask optional operation mask. +@sa norm, Mat::convertTo, SparseMat::convertTo +*/ +CV_EXPORTS_W void normalize(InputArray src, InputOutputArray dst, + double alpha = 1, double beta = 0, + int norm_type = NORM_L2, int dtype = -1, + InputArray mask = noArray()); + +/** @overload +@param src input array. +@param dst output array of the same size as src . +@param alpha norm value to normalize to or the lower range boundary in case of +the range normalization. +@param normType normalization type (see cv::NormTypes). +*/ +CV_EXPORTS void normalize(const SparseMat &src, SparseMat &dst, double alpha, + int normType); + +/** @brief Finds the global minimum and maximum in an array. + +The function cv::minMaxLoc finds the minimum and maximum element values and +their positions. The extrema are searched across the whole array or, if mask is +not an empty array, in the specified array region. + +In C++, if the input is multi-channel, you should omit the minLoc, maxLoc, and +mask arguments (i.e. leave them as NULL, NULL, and noArray() respectively). +These arguments are not supported for multi-channel input arrays. If working +with multi-channel input and you need the minLoc, maxLoc, or mask arguments, +then use Mat::reshape first to reinterpret the array as single-channel. +Alternatively, you can extract the particular channel using either +extractImageCOI, mixChannels, or split. + +In Python, multi-channel input is not supported at all due to a limitation in +the binding generation process (there is no way to set minLoc and maxLoc to +NULL). A workaround is to operate on each channel individually or to use NumPy +to achieve the same functionality. + +@param src input single-channel array. +@param minVal pointer to the returned minimum value; NULL is used if not +required. +@param maxVal pointer to the returned maximum value; NULL is used if not +required. +@param minLoc pointer to the returned minimum location (in 2D case); NULL is +used if not required. +@param maxLoc pointer to the returned maximum location (in 2D case); NULL is +used if not required. +@param mask optional mask used to select a sub-array. +@sa max, min, reduceArgMin, reduceArgMax, compare, inRange, extractImageCOI, +mixChannels, split, Mat::reshape +*/ +CV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double *minVal, + CV_OUT double *maxVal = 0, CV_OUT Point *minLoc = 0, + CV_OUT Point *maxLoc = 0, + InputArray mask = noArray()); + +/** + * @brief Finds indices of min elements along provided axis + * + * @note + * - If input or output array is not continuous, this function will create + * an internal copy. + * - NaN handling is left unspecified, see patchNaNs(). + * - The returned index is always in bounds of input matrix. + * + * @param src input single-channel array. + * @param dst output array of type CV_32SC1 with the same dimensionality as src, + * except for axis being reduced - it should be set to 1. + * @param lastIndex whether to get the index of first or last occurrence of min. + * @param axis axis to reduce along. + * @sa reduceArgMax, minMaxLoc, min, max, compare, reduce + */ +CV_EXPORTS_W void reduceArgMin(InputArray src, OutputArray dst, int axis, + bool lastIndex = false); + +/** + * @brief Finds indices of max elements along provided axis + * + * @note + * - If input or output array is not continuous, this function will create + * an internal copy. + * - NaN handling is left unspecified, see patchNaNs(). + * - The returned index is always in bounds of input matrix. + * + * @param src input single-channel array. + * @param dst output array of type CV_32SC1 with the same dimensionality as src, + * except for axis being reduced - it should be set to 1. + * @param lastIndex whether to get the index of first or last occurrence of max. + * @param axis axis to reduce along. + * @sa reduceArgMin, minMaxLoc, min, max, compare, reduce + */ +CV_EXPORTS_W void reduceArgMax(InputArray src, OutputArray dst, int axis, + bool lastIndex = false); + +/** @brief Finds the global minimum and maximum in an array + +The function cv::minMaxIdx finds the minimum and maximum element values and +their positions. The extremums are searched across the whole array or, if mask +is not an empty array, in the specified array region. In case of a sparse +matrix, the minimum is found among non-zero elements only. Multi-channel input +is supported without mask and extremums indexes (should be nullptr). +@note When minIdx is not NULL, it must have at least 2 elements (as well as +maxIdx), even if src is a single-row or single-column matrix. In OpenCV +(following MATLAB) each array has at least 2 dimensions, i.e. single-column +matrix is Mx1 matrix (and therefore minIdx/maxIdx will be (i1,0)/(i2,0)) and +single-row matrix is 1xN matrix (and therefore minIdx/maxIdx will be +(0,j1)/(0,j2)). +@param src input single-channel array. +@param minVal pointer to the returned minimum value; NULL is used if not +required. +@param maxVal pointer to the returned maximum value; NULL is used if not +required. +@param minIdx pointer to the returned minimum location (in nD case); NULL is +used if not required; Otherwise, it must point to an array of src.dims elements, +the coordinates of the minimum element in each dimension are stored there +sequentially. +@param maxIdx pointer to the returned maximum location (in nD case). NULL is +used if not required. +@param mask specified array region +*/ +CV_EXPORTS void minMaxIdx(InputArray src, double *minVal, double *maxVal = 0, + int *minIdx = 0, int *maxIdx = 0, + InputArray mask = noArray()); + +/** @overload +@param a input single-channel array. +@param minVal pointer to the returned minimum value; NULL is used if not +required. +@param maxVal pointer to the returned maximum value; NULL is used if not +required. +@param minIdx pointer to the returned minimum location (in nD case); NULL is +used if not required; Otherwise, it must point to an array of src.dims elements, +the coordinates of the minimum element in each dimension are stored there +sequentially. +@param maxIdx pointer to the returned maximum location (in nD case). NULL is +used if not required. +*/ +CV_EXPORTS void minMaxLoc(const SparseMat &a, double *minVal, double *maxVal, + int *minIdx = 0, int *maxIdx = 0); + +/** @brief Reduces a matrix to a vector. + +The function #reduce reduces the matrix to a vector by treating the matrix +rows/columns as a set of 1D vectors and performing the specified operation on +the vectors until a single row/column is obtained. For example, the function can +be used to compute horizontal and vertical projections of a raster image. In +case of #REDUCE_MAX and #REDUCE_MIN, the output image should have the same type +as the source one. In case of #REDUCE_SUM, #REDUCE_SUM2 and #REDUCE_AVG, the +output may have a larger element bit-depth to preserve accuracy. And +multi-channel arrays are also supported in these two reduction modes. + +The following code demonstrates its usage for a single channel matrix. +@snippet snippets/core_reduce.cpp example + +And the following code demonstrates its usage for a two-channel matrix. +@snippet snippets/core_reduce.cpp example2 + +@param src input 2D matrix. +@param dst output vector. Its size and type is defined by dim and dtype +parameters. +@param dim dimension index along which the matrix is reduced. 0 means that the +matrix is reduced to a single row. 1 means that the matrix is reduced to a +single column. +@param rtype reduction operation that could be one of #ReduceTypes +@param dtype when negative, the output vector will have the same type as the +input matrix, otherwise, its type will be CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), +src.channels()). +@sa repeat, reduceArgMin, reduceArgMax +*/ +CV_EXPORTS_W void reduce(InputArray src, OutputArray dst, int dim, int rtype, + int dtype = -1); + +/** @brief Creates one multi-channel array out of several single-channel ones. + +The function cv::merge merges several arrays to make a single multi-channel +array. That is, each element of the output array will be a concatenation of the +elements of the input arrays, where elements of i-th input array are treated as +mv[i].channels()-element vectors. + +The function cv::split does the reverse operation. If you need to shuffle +channels in some other advanced way, use cv::mixChannels. + +The following example shows how to merge 3 single channel matrices into a single +3-channel matrix. +@snippet snippets/core_merge.cpp example + +@param mv input array of matrices to be merged; all the matrices in mv must have +the same size and the same depth. +@param count number of input matrices when mv is a plain C array; it must be +greater than zero. +@param dst output array of the same size and the same depth as mv[0]; The number +of channels will be equal to the parameter count. +@sa mixChannels, split, Mat::reshape +*/ +CV_EXPORTS void merge(const Mat *mv, size_t count, OutputArray dst); + +/** @overload +@param mv input vector of matrices to be merged; all the matrices in mv must +have the same size and the same depth. +@param dst output array of the same size and the same depth as mv[0]; The number +of channels will be the total number of channels in the matrix array. + */ +CV_EXPORTS_W void merge(InputArrayOfArrays mv, OutputArray dst); + +/** @brief Divides a multi-channel array into several single-channel arrays. + +The function cv::split splits a multi-channel array into separate single-channel +arrays: +\f[\texttt{mv} [c](I) = \texttt{src} (I)_c\f] +If you need to extract a single channel or do some other sophisticated channel +permutation, use mixChannels. + +The following example demonstrates how to split a 3-channel matrix into 3 single +channel matrices. +@snippet snippets/core_split.cpp example + +@param src input multi-channel array. +@param mvbegin output array; the number of arrays must match src.channels(); the +arrays themselves are reallocated, if needed. +@sa merge, mixChannels, cvtColor +*/ +CV_EXPORTS void split(const Mat &src, Mat *mvbegin); + +/** @overload +@param m input multi-channel array. +@param mv output vector of arrays; the arrays themselves are reallocated, if +needed. +*/ +CV_EXPORTS_W void split(InputArray m, OutputArrayOfArrays mv); + +/** @brief Copies specified channels from input arrays to the specified channels +of output arrays. + +The function cv::mixChannels provides an advanced mechanism for shuffling image +channels. + +cv::split,cv::merge,cv::extractChannel,cv::insertChannel and some forms of +cv::cvtColor are partial cases of cv::mixChannels. + +In the example below, the code splits a 4-channel BGRA image into a 3-channel +BGR (with B and R channels swapped) and a separate alpha-channel image: +@code{.cpp} + Mat bgra( 100, 100, CV_8UC4, Scalar(255,0,0,255) ); + Mat bgr( bgra.rows, bgra.cols, CV_8UC3 ); + Mat alpha( bgra.rows, bgra.cols, CV_8UC1 ); + + // forming an array of matrices is a quite efficient operation, + // because the matrix data is not copied, only the headers + Mat out[] = { bgr, alpha }; + // bgra[0] -> bgr[2], bgra[1] -> bgr[1], + // bgra[2] -> bgr[0], bgra[3] -> alpha[0] + int from_to[] = { 0,2, 1,1, 2,0, 3,3 }; + mixChannels( &bgra, 1, out, 2, from_to, 4 ); +@endcode +@note Unlike many other new-style C++ functions in OpenCV (see the introduction +section and Mat::create ), cv::mixChannels requires the output arrays to be +pre-allocated before calling the function. +@param src input array or vector of matrices; all of the matrices must have the +same size and the same depth. +@param nsrcs number of matrices in `src`. +@param dst output array or vector of matrices; all the matrices **must be +allocated**; their size and depth must be the same as in `src[0]`. +@param ndsts number of matrices in `dst`. +@param fromTo array of index pairs specifying which channels are copied and +where; fromTo[k\*2] is a 0-based index of the input channel in src, +fromTo[k\*2+1] is an index of the output channel in dst; the continuous channel +numbering is used: the first input image channels are indexed from 0 to +src[0].channels()-1, the second input image channels are indexed from +src[0].channels() to src[0].channels() + src[1].channels()-1, and so on, the +same scheme is used for the output image channels; as a special case, when +fromTo[k\*2] is negative, the corresponding output channel is filled with zero . +@param npairs number of index pairs in `fromTo`. +@sa split, merge, extractChannel, insertChannel, cvtColor +*/ +CV_EXPORTS void mixChannels(const Mat *src, size_t nsrcs, Mat *dst, + size_t ndsts, const int *fromTo, size_t npairs); + +/** @overload +@param src input array or vector of matrices; all of the matrices must have the +same size and the same depth. +@param dst output array or vector of matrices; all the matrices **must be +allocated**; their size and depth must be the same as in src[0]. +@param fromTo array of index pairs specifying which channels are copied and +where; fromTo[k\*2] is a 0-based index of the input channel in src, +fromTo[k\*2+1] is an index of the output channel in dst; the continuous channel +numbering is used: the first input image channels are indexed from 0 to +src[0].channels()-1, the second input image channels are indexed from +src[0].channels() to src[0].channels() + src[1].channels()-1, and so on, the +same scheme is used for the output image channels; as a special case, when +fromTo[k\*2] is negative, the corresponding output channel is filled with zero . +@param npairs number of index pairs in fromTo. +*/ +CV_EXPORTS void mixChannels(InputArrayOfArrays src, + InputOutputArrayOfArrays dst, const int *fromTo, + size_t npairs); + +/** @overload +@param src input array or vector of matrices; all of the matrices must have the +same size and the same depth. +@param dst output array or vector of matrices; all the matrices **must be +allocated**; their size and depth must be the same as in src[0]. +@param fromTo array of index pairs specifying which channels are copied and +where; fromTo[k\*2] is a 0-based index of the input channel in src, +fromTo[k\*2+1] is an index of the output channel in dst; the continuous channel +numbering is used: the first input image channels are indexed from 0 to +src[0].channels()-1, the second input image channels are indexed from +src[0].channels() to src[0].channels() + src[1].channels()-1, and so on, the +same scheme is used for the output image channels; as a special case, when +fromTo[k\*2] is negative, the corresponding output channel is filled with zero . +*/ +CV_EXPORTS_W void mixChannels(InputArrayOfArrays src, + InputOutputArrayOfArrays dst, + const std::vector &fromTo); + +/** @brief Extracts a single channel from src (coi is 0-based index) +@param src input array +@param dst output array +@param coi index of channel to extract +@sa mixChannels, split +*/ +CV_EXPORTS_W void extractChannel(InputArray src, OutputArray dst, int coi); + +/** @brief Inserts a single channel to dst (coi is 0-based index) +@param src input array +@param dst output array +@param coi index of channel for insertion +@sa mixChannels, merge +*/ +CV_EXPORTS_W void insertChannel(InputArray src, InputOutputArray dst, int coi); + +/** @brief Flips a 2D array around vertical, horizontal, or both axes. + +The function cv::flip flips the array in one of three different ways (row +and column indices are 0-based): +\f[\texttt{dst} _{ij} = +\left\{ +\begin{array}{l l} +\texttt{src} _{\texttt{src.rows}-i-1,j} & if\; \texttt{flipCode} = 0 \\ +\texttt{src} _{i, \texttt{src.cols} -j-1} & if\; \texttt{flipCode} > 0 \\ +\texttt{src} _{ \texttt{src.rows} -i-1, \texttt{src.cols} -j-1} & if\; +\texttt{flipCode} < 0 \\ +\end{array} +\right.\f] +The example scenarios of using the function are the following: +* Vertical flipping of the image (flipCode == 0) to switch between + top-left and bottom-left image origin. This is a typical operation + in video processing on Microsoft Windows\* OS. +* Horizontal flipping of the image with the subsequent horizontal + shift and absolute difference calculation to check for a + vertical-axis symmetry (flipCode \> 0). +* Simultaneous horizontal and vertical flipping of the image with + the subsequent shift and absolute difference calculation to check + for a central symmetry (flipCode \< 0). +* Reversing the order of point arrays (flipCode \> 0 or + flipCode == 0). +@param src input array. +@param dst output array of the same size and type as src. +@param flipCode a flag to specify how to flip the array; 0 means +flipping around the x-axis and positive value (for example, 1) means +flipping around y-axis. Negative value (for example, -1) means flipping +around both axes. +@sa transpose, repeat, completeSymm +*/ +CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode); + +/** @brief Flips a n-dimensional at given axis + * @param src input array + * @param dst output array that has the same shape of src + * @param axis axis that performs a flip on. 0 <= axis < src.dims. + */ +CV_EXPORTS_W void flipND(InputArray src, OutputArray dst, int axis); + +/** @brief Broadcast the given Mat to the given shape. + * @param src input array + * @param shape target shape. Should be a list of CV_32S numbers. Note that + * negative values are not supported. + * @param dst output array that has the given shape + */ +CV_EXPORTS_W void broadcast(InputArray src, InputArray shape, OutputArray dst); + +enum RotateFlags { + ROTATE_90_CLOCKWISE = 0, //!< Rotate 90 degrees clockwise + ROTATE_180 = 1, //!< Rotate 180 degrees clockwise + ROTATE_90_COUNTERCLOCKWISE = 2, //!< Rotate 270 degrees clockwise +}; +/** @brief Rotates a 2D array in multiples of 90 degrees. +The function cv::rotate rotates the array in one of three different ways: +* Rotate by 90 degrees clockwise (rotateCode = ROTATE_90_CLOCKWISE). +* Rotate by 180 degrees clockwise (rotateCode = ROTATE_180). +* Rotate by 270 degrees clockwise (rotateCode = ROTATE_90_COUNTERCLOCKWISE). +@param src input array. +@param dst output array of the same type as src. The size is the same with +ROTATE_180, and the rows and cols are switched for ROTATE_90_CLOCKWISE and +ROTATE_90_COUNTERCLOCKWISE. +@param rotateCode an enum to specify how to rotate the array; see the enum +#RotateFlags +@sa transpose, repeat, completeSymm, flip, RotateFlags +*/ +CV_EXPORTS_W void rotate(InputArray src, OutputArray dst, int rotateCode); + +/** @brief Fills the output array with repeated copies of the input array. + +The function cv::repeat duplicates the input array one or more times along each +of the two axes: +\f[\texttt{dst} _{ij}= \texttt{src} _{i\mod src.rows, \; j\mod src.cols }\f] +The second variant of the function is more convenient to use with @ref +MatrixExpressions. +@param src input array to replicate. +@param ny Flag to specify how many times the `src` is repeated along the +vertical axis. +@param nx Flag to specify how many times the `src` is repeated along the +horizontal axis. +@param dst output array of the same type as `src`. +@sa cv::reduce +*/ +CV_EXPORTS_W void repeat(InputArray src, int ny, int nx, OutputArray dst); + +/** @overload +@param src input array to replicate. +@param ny Flag to specify how many times the `src` is repeated along the +vertical axis. +@param nx Flag to specify how many times the `src` is repeated along the +horizontal axis. + */ +CV_EXPORTS Mat repeat(const Mat &src, int ny, int nx); + +/** @brief Applies horizontal concatenation to given matrices. + +The function horizontally concatenates two or more cv::Mat matrices (with the +same number of rows). +@code{.cpp} + cv::Mat matArray[] = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)), + cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)), + cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),}; + + cv::Mat out; + cv::hconcat( matArray, 3, out ); + //out: + //[1, 2, 3; + // 1, 2, 3; + // 1, 2, 3; + // 1, 2, 3] +@endcode +@param src input array or vector of matrices. all of the matrices must have the +same number of rows and the same depth. +@param nsrc number of matrices in src. +@param dst output array. It has the same number of rows and depth as the src, +and the sum of cols of the src. +@sa cv::vconcat(const Mat*, size_t, OutputArray), @sa +cv::vconcat(InputArrayOfArrays, OutputArray) and @sa cv::vconcat(InputArray, +InputArray, OutputArray) +*/ +CV_EXPORTS void hconcat(const Mat *src, size_t nsrc, OutputArray dst); +/** @overload + @code{.cpp} + cv::Mat_ A = (cv::Mat_(3, 2) << 1, 4, + 2, 5, + 3, 6); + cv::Mat_ B = (cv::Mat_(3, 2) << 7, 10, + 8, 11, + 9, 12); + + cv::Mat C; + cv::hconcat(A, B, C); + //C: + //[1, 4, 7, 10; + // 2, 5, 8, 11; + // 3, 6, 9, 12] + @endcode + @param src1 first input array to be considered for horizontal concatenation. + @param src2 second input array to be considered for horizontal concatenation. + @param dst output array. It has the same number of rows and depth as the src1 + and src2, and the sum of cols of the src1 and src2. + */ +CV_EXPORTS void hconcat(InputArray src1, InputArray src2, OutputArray dst); +/** @overload + @code{.cpp} + std::vector matrices = { cv::Mat(4, 1, CV_8UC1, cv::Scalar(1)), + cv::Mat(4, 1, CV_8UC1, cv::Scalar(2)), + cv::Mat(4, 1, CV_8UC1, cv::Scalar(3)),}; + + cv::Mat out; + cv::hconcat( matrices, out ); + //out: + //[1, 2, 3; + // 1, 2, 3; + // 1, 2, 3; + // 1, 2, 3] + @endcode + @param src input array or vector of matrices. all of the matrices must have the +same number of rows and the same depth. + @param dst output array. It has the same number of rows and depth as the src, +and the sum of cols of the src. same depth. + */ +CV_EXPORTS_W void hconcat(InputArrayOfArrays src, OutputArray dst); + +/** @brief Applies vertical concatenation to given matrices. + +The function vertically concatenates two or more cv::Mat matrices (with the same +number of cols). +@code{.cpp} + cv::Mat matArray[] = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)), + cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)), + cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),}; + + cv::Mat out; + cv::vconcat( matArray, 3, out ); + //out: + //[1, 1, 1, 1; + // 2, 2, 2, 2; + // 3, 3, 3, 3] +@endcode +@param src input array or vector of matrices. all of the matrices must have the +same number of cols and the same depth. +@param nsrc number of matrices in src. +@param dst output array. It has the same number of cols and depth as the src, +and the sum of rows of the src. +@sa cv::hconcat(const Mat*, size_t, OutputArray), @sa +cv::hconcat(InputArrayOfArrays, OutputArray) and @sa cv::hconcat(InputArray, +InputArray, OutputArray) +*/ +CV_EXPORTS void vconcat(const Mat *src, size_t nsrc, OutputArray dst); +/** @overload + @code{.cpp} + cv::Mat_ A = (cv::Mat_(3, 2) << 1, 7, + 2, 8, + 3, 9); + cv::Mat_ B = (cv::Mat_(3, 2) << 4, 10, + 5, 11, + 6, 12); + + cv::Mat C; + cv::vconcat(A, B, C); + //C: + //[1, 7; + // 2, 8; + // 3, 9; + // 4, 10; + // 5, 11; + // 6, 12] + @endcode + @param src1 first input array to be considered for vertical concatenation. + @param src2 second input array to be considered for vertical concatenation. + @param dst output array. It has the same number of cols and depth as the src1 + and src2, and the sum of rows of the src1 and src2. + */ +CV_EXPORTS void vconcat(InputArray src1, InputArray src2, OutputArray dst); +/** @overload + @code{.cpp} + std::vector matrices = { cv::Mat(1, 4, CV_8UC1, cv::Scalar(1)), + cv::Mat(1, 4, CV_8UC1, cv::Scalar(2)), + cv::Mat(1, 4, CV_8UC1, cv::Scalar(3)),}; + + cv::Mat out; + cv::vconcat( matrices, out ); + //out: + //[1, 1, 1, 1; + // 2, 2, 2, 2; + // 3, 3, 3, 3] + @endcode + @param src input array or vector of matrices. all of the matrices must have the +same number of cols and the same depth + @param dst output array. It has the same number of cols and depth as the src, +and the sum of rows of the src. same depth. + */ +CV_EXPORTS_W void vconcat(InputArrayOfArrays src, OutputArray dst); + +/** @brief computes bitwise conjunction of the two arrays (dst = src1 & src2) +Calculates the per-element bit-wise conjunction of two arrays or an +array and a scalar. + +The function cv::bitwise_and calculates the per-element bit-wise logical +conjunction for: +* Two arrays when src1 and src2 have the same size: + \f[\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} (I) \quad +\texttt{if mask} (I) \ne0\f] +* An array and a scalar when src2 is constructed from Scalar or has + the same number of elements as `src1.channels()`: + \f[\texttt{dst} (I) = \texttt{src1} (I) \wedge \texttt{src2} \quad +\texttt{if mask} (I) \ne0\f] +* A scalar and an array when src1 is constructed from Scalar or has + the same number of elements as `src2.channels()`: + \f[\texttt{dst} (I) = \texttt{src1} \wedge \texttt{src2} (I) \quad +\texttt{if mask} (I) \ne0\f] In case of floating-point arrays, their +machine-specific bit representations (usually IEEE754-compliant) are used for +the operation. In case of multi-channel arrays, each channel is processed +independently. In the second and third cases above, the scalar is first +converted to the array type. +@param src1 first input array or a scalar. +@param src2 second input array or a scalar. +@param dst output array that has the same size and type as the input +arrays. +@param mask optional operation mask, 8-bit single channel array, that +specifies elements of the output array to be changed. +*/ +CV_EXPORTS_W void bitwise_and(InputArray src1, InputArray src2, OutputArray dst, + InputArray mask = noArray()); + +/** @brief Calculates the per-element bit-wise disjunction of two arrays or an +array and a scalar. + +The function cv::bitwise_or calculates the per-element bit-wise logical +disjunction for: +* Two arrays when src1 and src2 have the same size: + \f[\texttt{dst} (I) = \texttt{src1} (I) \vee \texttt{src2} (I) \quad +\texttt{if mask} (I) \ne0\f] +* An array and a scalar when src2 is constructed from Scalar or has + the same number of elements as `src1.channels()`: + \f[\texttt{dst} (I) = \texttt{src1} (I) \vee \texttt{src2} \quad +\texttt{if mask} (I) \ne0\f] +* A scalar and an array when src1 is constructed from Scalar or has + the same number of elements as `src2.channels()`: + \f[\texttt{dst} (I) = \texttt{src1} \vee \texttt{src2} (I) \quad +\texttt{if mask} (I) \ne0\f] In case of floating-point arrays, their +machine-specific bit representations (usually IEEE754-compliant) are used for +the operation. In case of multi-channel arrays, each channel is processed +independently. In the second and third cases above, the scalar is first +converted to the array type. +@param src1 first input array or a scalar. +@param src2 second input array or a scalar. +@param dst output array that has the same size and type as the input +arrays. +@param mask optional operation mask, 8-bit single channel array, that +specifies elements of the output array to be changed. +*/ +CV_EXPORTS_W void bitwise_or(InputArray src1, InputArray src2, OutputArray dst, + InputArray mask = noArray()); + +/** @brief Calculates the per-element bit-wise "exclusive or" operation on two +arrays or an array and a scalar. + +The function cv::bitwise_xor calculates the per-element bit-wise logical +"exclusive-or" operation for: +* Two arrays when src1 and src2 have the same size: + \f[\texttt{dst} (I) = \texttt{src1} (I) \oplus \texttt{src2} (I) \quad +\texttt{if mask} (I) \ne0\f] +* An array and a scalar when src2 is constructed from Scalar or has + the same number of elements as `src1.channels()`: + \f[\texttt{dst} (I) = \texttt{src1} (I) \oplus \texttt{src2} \quad +\texttt{if mask} (I) \ne0\f] +* A scalar and an array when src1 is constructed from Scalar or has + the same number of elements as `src2.channels()`: + \f[\texttt{dst} (I) = \texttt{src1} \oplus \texttt{src2} (I) \quad +\texttt{if mask} (I) \ne0\f] In case of floating-point arrays, their +machine-specific bit representations (usually IEEE754-compliant) are used for +the operation. In case of multi-channel arrays, each channel is processed +independently. In the 2nd and 3rd cases above, the scalar is first +converted to the array type. +@param src1 first input array or a scalar. +@param src2 second input array or a scalar. +@param dst output array that has the same size and type as the input +arrays. +@param mask optional operation mask, 8-bit single channel array, that +specifies elements of the output array to be changed. +*/ +CV_EXPORTS_W void bitwise_xor(InputArray src1, InputArray src2, OutputArray dst, + InputArray mask = noArray()); + +/** @brief Inverts every bit of an array. + +The function cv::bitwise_not calculates per-element bit-wise inversion of the +input array: +\f[\texttt{dst} (I) = \neg \texttt{src} (I)\f] +In case of a floating-point input array, its machine-specific bit +representation (usually IEEE754-compliant) is used for the operation. In +case of multi-channel arrays, each channel is processed independently. +@param src input array. +@param dst output array that has the same size and type as the input +array. +@param mask optional operation mask, 8-bit single channel array, that +specifies elements of the output array to be changed. +*/ +CV_EXPORTS_W void bitwise_not(InputArray src, OutputArray dst, + InputArray mask = noArray()); + +/** @brief Calculates the per-element absolute difference between two arrays or +between an array and a scalar. + +The function cv::absdiff calculates: +* Absolute difference between two arrays when they have the same + size and type: + \f[\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1}(I) - +\texttt{src2}(I)|)\f] +* Absolute difference between an array and a scalar when the second + array is constructed from Scalar or has as many elements as the + number of channels in `src1`: + \f[\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1}(I) - \texttt{src2} +|)\f] +* Absolute difference between a scalar and an array when the first + array is constructed from Scalar or has as many elements as the + number of channels in `src2`: + \f[\texttt{dst}(I) = \texttt{saturate} (| \texttt{src1} - \texttt{src2}(I) +|)\f] where I is a multi-dimensional index of array elements. In case of + multi-channel arrays, each channel is processed independently. +@note Saturation is not applied when the arrays have the depth CV_32S. +You may even get a negative value in the case of overflow. +@note (Python) Be careful to difference behaviour between src1/src2 are single +number and they are tuple/array. `absdiff(src,X)` means +`absdiff(src,(X,X,X,X))`. `absdiff(src,(X,))` means `absdiff(src,(X,0,0,0))`. +@param src1 first input array or a scalar. +@param src2 second input array or a scalar. +@param dst output array that has the same size and type as input arrays. +@sa cv::abs(const Mat&) +*/ +CV_EXPORTS_W void absdiff(InputArray src1, InputArray src2, OutputArray dst); + +/** @brief This is an overloaded member function, provided for convenience +(python) Copies the matrix to another one. When the operation mask is specified, +if the Mat::create call shown above reallocates the matrix, the newly allocated +matrix is initialized with all zeros before copying the data. +@param src source matrix. +@param dst Destination matrix. If it does not have a proper size or type before +the operation, it is reallocated. +@param mask Operation mask of the same size as \*this. Its non-zero elements +indicate which matrix elements need to be copied. The mask has to be of type +CV_8U and can have 1 or multiple channels. +*/ + +void CV_EXPORTS_W copyTo(InputArray src, OutputArray dst, InputArray mask); +/** @brief Checks if array elements lie between the elements of two other +arrays. + +The function checks the range as follows: +- For every element of a single-channel input array: + \f[\texttt{dst} (I)= \texttt{lowerb} (I)_0 \leq \texttt{src} (I)_0 \leq +\texttt{upperb} (I)_0\f] +- For two-channel arrays: + \f[\texttt{dst} (I)= \texttt{lowerb} (I)_0 \leq \texttt{src} (I)_0 \leq +\texttt{upperb} (I)_0 \land \texttt{lowerb} (I)_1 \leq \texttt{src} (I)_1 \leq +\texttt{upperb} (I)_1\f] +- and so forth. + +That is, dst (I) is set to 255 (all 1 -bits) if src (I) is within the +specified 1D, 2D, 3D, ... box and 0 otherwise. + +When the lower and/or upper boundary parameters are scalars, the indexes +(I) at lowerb and upperb in the above formulas should be omitted. +@param src first input array. +@param lowerb inclusive lower boundary array or a scalar. +@param upperb inclusive upper boundary array or a scalar. +@param dst output array of the same size as src and CV_8U type. +*/ +CV_EXPORTS_W void inRange(InputArray src, InputArray lowerb, InputArray upperb, + OutputArray dst); + +/** @brief Performs the per-element comparison of two arrays or an array and +scalar value. + +The function compares: +* Elements of two arrays when src1 and src2 have the same size: + \f[\texttt{dst} (I) = \texttt{src1} (I) \,\texttt{cmpop}\, \texttt{src2} +(I)\f] +* Elements of src1 with a scalar src2 when src2 is constructed from + Scalar or has a single element: + \f[\texttt{dst} (I) = \texttt{src1}(I) \,\texttt{cmpop}\, \texttt{src2}\f] +* src1 with elements of src2 when src1 is constructed from Scalar or + has a single element: + \f[\texttt{dst} (I) = \texttt{src1} \,\texttt{cmpop}\, \texttt{src2} +(I)\f] When the comparison result is true, the corresponding element of output +array is set to 255. The comparison operations can be replaced with the +equivalent matrix expressions: +@code{.cpp} + Mat dst1 = src1 >= src2; + Mat dst2 = src1 < 8; + ... +@endcode +@param src1 first input array or a scalar; when it is an array, it must have a +single channel. +@param src2 second input array or a scalar; when it is an array, it must have a +single channel. +@param dst output array of type ref CV_8U that has the same size and the same +number of channels as the input arrays. +@param cmpop a flag, that specifies correspondence between the arrays +(cv::CmpTypes) +@sa checkRange, min, max, threshold +*/ +CV_EXPORTS_W void compare(InputArray src1, InputArray src2, OutputArray dst, + int cmpop); + +/** @brief Calculates per-element minimum of two arrays or an array and a +scalar. + +The function cv::min calculates the per-element minimum of two arrays: +\f[\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{src2} (I))\f] +or array and a scalar: +\f[\texttt{dst} (I)= \min ( \texttt{src1} (I), \texttt{value} )\f] +@param src1 first input array. +@param src2 second input array of the same size and type as src1. +@param dst output array of the same size and type as src1. +@sa max, compare, inRange, minMaxLoc +*/ +CV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst); +/** @overload +needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, +_Compare) +*/ +CV_EXPORTS void min(const Mat &src1, const Mat &src2, Mat &dst); + +/** @brief Calculates per-element maximum of two arrays or an array and a +scalar. + +The function cv::max calculates the per-element maximum of two arrays: +\f[\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{src2} (I))\f] +or array and a scalar: +\f[\texttt{dst} (I)= \max ( \texttt{src1} (I), \texttt{value} )\f] +@param src1 first input array. +@param src2 second input array of the same size and type as src1 . +@param dst output array of the same size and type as src1. +@sa min, compare, inRange, minMaxLoc, @ref MatrixExpressions +*/ +CV_EXPORTS_W void max(InputArray src1, InputArray src2, OutputArray dst); +/** @overload +needed to avoid conflicts with const _Tp& std::min(const _Tp&, const _Tp&, +_Compare) +*/ +CV_EXPORTS void max(const Mat &src1, const Mat &src2, Mat &dst); + +/** @brief Calculates a square root of array elements. + +The function cv::sqrt calculates a square root of each input array element. +In case of multi-channel arrays, each channel is processed +independently. The accuracy is approximately the same as of the built-in +std::sqrt . +@param src input floating-point array. +@param dst output array of the same size and type as src. +*/ +CV_EXPORTS_W void sqrt(InputArray src, OutputArray dst); + +/** @brief Raises every array element to a power. + +The function cv::pow raises every element of the input array to power : +\f[\texttt{dst} (I) = \fork{\texttt{src}(I)^{power}}{if \(\texttt{power}\) is +integer}{|\texttt{src}(I)|^{power}}{otherwise}\f] + +So, for a non-integer power exponent, the absolute values of input array +elements are used. However, it is possible to get true values for +negative values using some extra operations. In the example below, +computing the 5th root of array src shows: +@code{.cpp} + Mat mask = src < 0; + pow(src, 1./5, dst); + subtract(Scalar::all(0), dst, dst, mask); +@endcode +For some values of power, such as integer values, 0.5 and -0.5, +specialized faster algorithms are used. + +Special values (NaN, Inf) are not handled. +@param src input array. +@param power exponent of power. +@param dst output array of the same size and type as src. +@sa sqrt, exp, log, cartToPolar, polarToCart +*/ +CV_EXPORTS_W void pow(InputArray src, double power, OutputArray dst); + +/** @brief Calculates the exponent of every array element. + +The function cv::exp calculates the exponent of every element of the input +array: +\f[\texttt{dst} [I] = e^{ src(I) }\f] + +The maximum relative error is about 7e-6 for single-precision input and +less than 1e-10 for double-precision input. Currently, the function +converts denormalized values to zeros on output. Special values (NaN, +Inf) are not handled. +@param src input array. +@param dst output array of the same size and type as src. +@sa log, cartToPolar, polarToCart, phase, pow, sqrt, magnitude +*/ +CV_EXPORTS_W void exp(InputArray src, OutputArray dst); + +/** @brief Calculates the natural logarithm of every array element. + +The function cv::log calculates the natural logarithm of every element of the +input array: +\f[\texttt{dst} (I) = \log (\texttt{src}(I)) \f] + +Output on zero, negative and special (NaN, Inf) values is undefined. + +@param src input array. +@param dst output array of the same size and type as src . +@sa exp, cartToPolar, polarToCart, phase, pow, sqrt, magnitude +*/ +CV_EXPORTS_W void log(InputArray src, OutputArray dst); + +/** @brief Calculates x and y coordinates of 2D vectors from their magnitude and +angle. + +The function cv::polarToCart calculates the Cartesian coordinates of each 2D +vector represented by the corresponding elements of magnitude and angle: +\f[\begin{array}{l} \texttt{x} (I) = \texttt{magnitude} (I) \cos ( +\texttt{angle} (I)) \\ \texttt{y} (I) = \texttt{magnitude} (I) \sin ( +\texttt{angle} (I)) \\ \end{array}\f] + +The relative accuracy of the estimated coordinates is about 1e-6. +@param magnitude input floating-point array of magnitudes of 2D vectors; +it can be an empty matrix (=Mat()), in this case, the function assumes +that all the magnitudes are =1; if it is not empty, it must have the +same size and type as angle. +@param angle input floating-point array of angles of 2D vectors. +@param x output array of x-coordinates of 2D vectors; it has the same +size and type as angle. +@param y output array of y-coordinates of 2D vectors; it has the same +size and type as angle. +@param angleInDegrees when true, the input angles are measured in +degrees, otherwise, they are measured in radians. +@sa cartToPolar, magnitude, phase, exp, log, pow, sqrt +*/ +CV_EXPORTS_W void polarToCart(InputArray magnitude, InputArray angle, + OutputArray x, OutputArray y, + bool angleInDegrees = false); + +/** @brief Calculates the magnitude and angle of 2D vectors. + +The function cv::cartToPolar calculates either the magnitude, angle, or both +for every 2D vector (x(I),y(I)): +\f[\begin{array}{l} \texttt{magnitude} (I)= +\sqrt{\texttt{x}(I)^2+\texttt{y}(I)^2} , \\ \texttt{angle} (I)= \texttt{atan2} ( +\texttt{y} (I), \texttt{x} (I))[ \cdot180 / \pi ] \end{array}\f] + +The angles are calculated with accuracy about 0.3 degrees. For the point +(0,0), the angle is set to 0. +@param x array of x-coordinates; this must be a single-precision or +double-precision floating-point array. +@param y array of y-coordinates, that must have the same size and same type as +x. +@param magnitude output array of magnitudes of the same size and type as x. +@param angle output array of angles that has the same size and type as +x; the angles are measured in radians (from 0 to 2\*Pi) or in degrees (0 to 360 +degrees). +@param angleInDegrees a flag, indicating whether the angles are measured +in radians (which is by default), or in degrees. +@sa Sobel, Scharr +*/ +CV_EXPORTS_W void cartToPolar(InputArray x, InputArray y, OutputArray magnitude, + OutputArray angle, bool angleInDegrees = false); + +/** @brief Calculates the rotation angle of 2D vectors. + +The function cv::phase calculates the rotation angle of each 2D vector that +is formed from the corresponding elements of x and y : +\f[\texttt{angle} (I) = \texttt{atan2} ( \texttt{y} (I), \texttt{x} (I))\f] + +The angle estimation accuracy is about 0.3 degrees. When x(I)=y(I)=0 , +the corresponding angle(I) is set to 0. +@param x input floating-point array of x-coordinates of 2D vectors. +@param y input array of y-coordinates of 2D vectors; it must have the +same size and the same type as x. +@param angle output array of vector angles; it has the same size and +same type as x . +@param angleInDegrees when true, the function calculates the angle in +degrees, otherwise, they are measured in radians. +*/ +CV_EXPORTS_W void phase(InputArray x, InputArray y, OutputArray angle, + bool angleInDegrees = false); + +/** @brief Calculates the magnitude of 2D vectors. + +The function cv::magnitude calculates the magnitude of 2D vectors formed +from the corresponding elements of x and y arrays: +\f[\texttt{dst} (I) = \sqrt{\texttt{x}(I)^2 + \texttt{y}(I)^2}\f] +@param x floating-point array of x-coordinates of the vectors. +@param y floating-point array of y-coordinates of the vectors; it must +have the same size as x. +@param magnitude output array of the same size and type as x. +@sa cartToPolar, polarToCart, phase, sqrt +*/ +CV_EXPORTS_W void magnitude(InputArray x, InputArray y, OutputArray magnitude); + +/** @brief Checks every element of an input array for invalid values. + +The function cv::checkRange checks that every array element is neither NaN nor +infinite. When minVal \> -DBL_MAX and maxVal \< DBL_MAX, the function also +checks that each value is between minVal and maxVal. In case of multi-channel +arrays, each channel is processed independently. If some values are out of +range, position of the first outlier is stored in pos (when pos != NULL). Then, +the function either returns false (when quiet=true) or throws an exception. +@param a input array. +@param quiet a flag, indicating whether the functions quietly return false when +the array elements are out of range or they throw an exception. +@param pos optional output parameter, when not NULL, must be a pointer to array +of src.dims elements. +@param minVal inclusive lower boundary of valid values range. +@param maxVal exclusive upper boundary of valid values range. +*/ +CV_EXPORTS_W bool checkRange(InputArray a, bool quiet = true, + CV_OUT Point *pos = 0, double minVal = -DBL_MAX, + double maxVal = DBL_MAX); + +/** @brief Replaces NaNs by given number +@param a input/output matrix (CV_32F type). +@param val value to convert the NaNs +*/ +CV_EXPORTS_W void patchNaNs(InputOutputArray a, double val = 0); + +/** @brief Performs generalized matrix multiplication. + +The function cv::gemm performs generalized matrix multiplication similar to the +gemm functions in BLAS level 3. For example, +`gemm(src1, src2, alpha, src3, beta, dst, GEMM_1_T + GEMM_3_T)` +corresponds to +\f[\texttt{dst} = \texttt{alpha} \cdot \texttt{src1} ^T \cdot \texttt{src2} + +\texttt{beta} \cdot \texttt{src3} ^T\f] + +In case of complex (two-channel) data, performed a complex matrix +multiplication. + +The function can be replaced with a matrix expression. For example, the +above call can be replaced with: +@code{.cpp} + dst = alpha*src1.t()*src2 + beta*src3.t(); +@endcode +@param src1 first multiplied input matrix that could be real(CV_32FC1, +CV_64FC1) or complex(CV_32FC2, CV_64FC2). +@param src2 second multiplied input matrix of the same type as src1. +@param alpha weight of the matrix product. +@param src3 third optional delta matrix added to the matrix product; it +should have the same type as src1 and src2. +@param beta weight of src3. +@param dst output matrix; it has the proper size and the same type as +input matrices. +@param flags operation flags (cv::GemmFlags) +@sa mulTransposed, transform +*/ +CV_EXPORTS_W void gemm(InputArray src1, InputArray src2, double alpha, + InputArray src3, double beta, OutputArray dst, + int flags = 0); + +/** @brief Calculates the product of a matrix and its transposition. + +The function cv::mulTransposed calculates the product of src and its +transposition: +\f[\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} )^T ( +\texttt{src} - \texttt{delta} )\f] if aTa=true, and +\f[\texttt{dst} = \texttt{scale} ( \texttt{src} - \texttt{delta} ) ( +\texttt{src} - \texttt{delta} )^T\f] otherwise. The function is used to +calculate the covariance matrix. With zero delta, it can be used as a faster +substitute for general matrix product A\*B when B=A' +@param src input single-channel matrix. Note that unlike gemm, the +function can multiply not only floating-point matrices. +@param dst output square matrix. +@param aTa Flag specifying the multiplication ordering. See the +description below. +@param delta Optional delta matrix subtracted from src before the +multiplication. When the matrix is empty ( delta=noArray() ), it is +assumed to be zero, that is, nothing is subtracted. If it has the same +size as src, it is simply subtracted. Otherwise, it is "repeated" (see +repeat ) to cover the full src and then subtracted. Type of the delta +matrix, when it is not empty, must be the same as the type of created +output matrix. See the dtype parameter description below. +@param scale Optional scale factor for the matrix product. +@param dtype Optional type of the output matrix. When it is negative, +the output matrix will have the same type as src . Otherwise, it will be +type=CV_MAT_DEPTH(dtype) that should be either CV_32F or CV_64F . +@sa calcCovarMatrix, gemm, repeat, reduce +*/ +CV_EXPORTS_W void mulTransposed(InputArray src, OutputArray dst, bool aTa, + InputArray delta = noArray(), double scale = 1, + int dtype = -1); + +/** @brief Transposes a matrix. + +The function cv::transpose transposes the matrix src : +\f[\texttt{dst} (i,j) = \texttt{src} (j,i)\f] +@note No complex conjugation is done in case of a complex matrix. It +should be done separately if needed. +@param src input array. +@param dst output array of the same type as src. +*/ +CV_EXPORTS_W void transpose(InputArray src, OutputArray dst); + +/** @brief Transpose for n-dimensional matrices. + * + * @note Input should be continuous single-channel matrix. + * @param src input array. + * @param order a permutation of [0,1,..,N-1] where N is the number of axes of + * src. The i'th axis of dst will correspond to the axis numbered order[i] of + * the input. + * @param dst output array of the same type as src. + */ +CV_EXPORTS_W void transposeND(InputArray src, const std::vector &order, + OutputArray dst); + +/** @brief Performs the matrix transformation of every array element. + +The function cv::transform performs the matrix transformation of every +element of the array src and stores the results in dst : +\f[\texttt{dst} (I) = \texttt{m} \cdot \texttt{src} (I)\f] +(when m.cols=src.channels() ), or +\f[\texttt{dst} (I) = \texttt{m} \cdot [ \texttt{src} (I); 1]\f] +(when m.cols=src.channels()+1 ) + +Every element of the N -channel array src is interpreted as N -element +vector that is transformed using the M x N or M x (N+1) matrix m to +M-element vector - the corresponding element of the output array dst . + +The function may be used for geometrical transformation of +N -dimensional points, arbitrary linear color space transformation (such +as various kinds of RGB to YUV transforms), shuffling the image +channels, and so forth. +@param src input array that must have as many channels (1 to 4) as +m.cols or m.cols-1. +@param dst output array of the same size and depth as src; it has as +many channels as m.rows. +@param m transformation 2x2 or 2x3 floating-point matrix. +@sa perspectiveTransform, getAffineTransform, estimateAffine2D, warpAffine, +warpPerspective +*/ +CV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m); + +/** @brief Performs the perspective matrix transformation of vectors. + +The function cv::perspectiveTransform transforms every element of src by +treating it as a 2D or 3D vector, in the following way: +\f[(x, y, z) \rightarrow (x'/w, y'/w, z'/w)\f] +where +\f[(x', y', z', w') = \texttt{mat} \cdot \begin{bmatrix} x & y & z & 1 +\end{bmatrix}\f] and +\f[w = \fork{w'}{if \(w' \ne 0\)}{\infty}{otherwise}\f] + +Here a 3D vector transformation is shown. In case of a 2D vector +transformation, the z component is omitted. + +@note The function transforms a sparse set of 2D or 3D vectors. If you +want to transform an image using perspective transformation, use +warpPerspective . If you have an inverse problem, that is, you want to +compute the most probable perspective transformation out of several +pairs of corresponding points, you can use getPerspectiveTransform or +findHomography . +@param src input two-channel or three-channel floating-point array; each +element is a 2D/3D vector to be transformed. +@param dst output array of the same size and type as src. +@param m 3x3 or 4x4 floating-point transformation matrix. +@sa transform, warpPerspective, getPerspectiveTransform, findHomography +*/ +CV_EXPORTS_W void perspectiveTransform(InputArray src, OutputArray dst, + InputArray m); + +/** @brief Copies the lower or the upper half of a square matrix to its another +half. + +The function cv::completeSymm copies the lower or the upper half of a square +matrix to its another half. The matrix diagonal remains unchanged: + - \f$\texttt{m}_{ij}=\texttt{m}_{ji}\f$ for \f$i > j\f$ if + lowerToUpper=false + - \f$\texttt{m}_{ij}=\texttt{m}_{ji}\f$ for \f$i < j\f$ if + lowerToUpper=true + +@param m input-output floating-point square matrix. +@param lowerToUpper operation flag; if true, the lower half is copied to +the upper half. Otherwise, the upper half is copied to the lower half. +@sa flip, transpose +*/ +CV_EXPORTS_W void completeSymm(InputOutputArray m, bool lowerToUpper = false); + +/** @brief Initializes a scaled identity matrix. + +The function cv::setIdentity initializes a scaled identity matrix: +\f[\texttt{mtx} (i,j)= \fork{\texttt{value}}{ if \(i=j\)}{0}{otherwise}\f] + +The function can also be emulated using the matrix initializers and the +matrix expressions: +@code + Mat A = Mat::eye(4, 3, CV_32F)*5; + // A will be set to [[5, 0, 0], [0, 5, 0], [0, 0, 5], [0, 0, 0]] +@endcode +@param mtx matrix to initialize (not necessarily square). +@param s value to assign to diagonal elements. +@sa Mat::zeros, Mat::ones, Mat::setTo, Mat::operator= +*/ +CV_EXPORTS_W void setIdentity(InputOutputArray mtx, + const Scalar &s = Scalar(1)); + +/** @brief Returns the determinant of a square floating-point matrix. + +The function cv::determinant calculates and returns the determinant of the +specified matrix. For small matrices ( mtx.cols=mtx.rows\<=3 ), the +direct method is used. For larger matrices, the function uses LU +factorization with partial pivoting. + +For symmetric positively-determined matrices, it is also possible to use +eigen decomposition to calculate the determinant. +@param mtx input matrix that must have CV_32FC1 or CV_64FC1 type and +square size. +@sa trace, invert, solve, eigen, @ref MatrixExpressions +*/ +CV_EXPORTS_W double determinant(InputArray mtx); + +/** @brief Returns the trace of a matrix. + +The function cv::trace returns the sum of the diagonal elements of the +matrix mtx . +\f[\mathrm{tr} ( \texttt{mtx} ) = \sum _i \texttt{mtx} (i,i)\f] +@param mtx input matrix. +*/ +CV_EXPORTS_W Scalar trace(InputArray mtx); + +/** @brief Finds the inverse or pseudo-inverse of a matrix. + +The function cv::invert inverts the matrix src and stores the result in dst +. When the matrix src is singular or non-square, the function calculates +the pseudo-inverse matrix (the dst matrix) so that norm(src\*dst - I) is +minimal, where I is an identity matrix. + +In case of the #DECOMP_LU method, the function returns non-zero value if +the inverse has been successfully calculated and 0 if src is singular. + +In case of the #DECOMP_SVD method, the function returns the inverse +condition number of src (the ratio of the smallest singular value to the +largest singular value) and 0 if src is singular. The SVD method +calculates a pseudo-inverse matrix if src is singular. + +Similarly to #DECOMP_LU, the method #DECOMP_CHOLESKY works only with +non-singular square matrices that should also be symmetrical and +positively defined. In this case, the function stores the inverted +matrix in dst and returns non-zero. Otherwise, it returns 0. + +@param src input floating-point M x N matrix. +@param dst output matrix of N x M size and the same type as src. +@param flags inversion method (cv::DecompTypes) +@sa solve, SVD +*/ +CV_EXPORTS_W double invert(InputArray src, OutputArray dst, + int flags = DECOMP_LU); + +/** @brief Solves one or more linear systems or least-squares problems. + +The function cv::solve solves a linear system or least-squares problem (the +latter is possible with SVD or QR methods, or by specifying the flag +#DECOMP_NORMAL ): +\f[\texttt{dst} = \arg \min _X \| \texttt{src1} \cdot \texttt{X} - +\texttt{src2} \|\f] + +If #DECOMP_LU or #DECOMP_CHOLESKY method is used, the function returns 1 +if src1 (or \f$\texttt{src1}^T\texttt{src1}\f$ ) is non-singular. Otherwise, +it returns 0. In the latter case, dst is not valid. Other methods find a +pseudo-solution in case of a singular left-hand side part. + +@note If you want to find a unity-norm solution of an under-defined +singular system \f$\texttt{src1}\cdot\texttt{dst}=0\f$ , the function solve +will not do the work. Use SVD::solveZ instead. + +@param src1 input matrix on the left-hand side of the system. +@param src2 input matrix on the right-hand side of the system. +@param dst output solution. +@param flags solution (matrix inversion) method (#DecompTypes) +@sa invert, SVD, eigen +*/ +CV_EXPORTS_W bool solve(InputArray src1, InputArray src2, OutputArray dst, + int flags = DECOMP_LU); + +/** @brief Sorts each row or each column of a matrix. + +The function cv::sort sorts each matrix row or each matrix column in +ascending or descending order. So you should pass two operation flags to +get desired behaviour. If you want to sort matrix rows or columns +lexicographically, you can use STL std::sort generic function with the +proper comparison predicate. + +@param src input single-channel array. +@param dst output array of the same size and type as src. +@param flags operation flags, a combination of #SortFlags +@sa sortIdx, randShuffle +*/ +CV_EXPORTS_W void sort(InputArray src, OutputArray dst, int flags); + +/** @brief Sorts each row or each column of a matrix. + +The function cv::sortIdx sorts each matrix row or each matrix column in the +ascending or descending order. So you should pass two operation flags to +get desired behaviour. Instead of reordering the elements themselves, it +stores the indices of sorted elements in the output array. For example: +@code + Mat A = Mat::eye(3,3,CV_32F), B; + sortIdx(A, B, SORT_EVERY_ROW + SORT_ASCENDING); + // B will probably contain + // (because of equal elements in A some permutations are possible): + // [[1, 2, 0], [0, 2, 1], [0, 1, 2]] +@endcode +@param src input single-channel array. +@param dst output integer array of the same size as src. +@param flags operation flags that could be a combination of cv::SortFlags +@sa sort, randShuffle +*/ +CV_EXPORTS_W void sortIdx(InputArray src, OutputArray dst, int flags); + +/** @brief Finds the real roots of a cubic equation. + +The function solveCubic finds the real roots of a cubic equation: +- if coeffs is a 4-element vector: +\f[\texttt{coeffs} [0] x^3 + \texttt{coeffs} [1] x^2 + \texttt{coeffs} [2] x + +\texttt{coeffs} [3] = 0\f] +- if coeffs is a 3-element vector: +\f[x^3 + \texttt{coeffs} [0] x^2 + \texttt{coeffs} [1] x + \texttt{coeffs} +[2] = 0\f] + +The roots are stored in the roots array. +@param coeffs equation coefficients, an array of 3 or 4 elements. +@param roots output array of real roots that has 1 or 3 elements. +@return number of real roots. It can be 0, 1 or 2. +*/ +CV_EXPORTS_W int solveCubic(InputArray coeffs, OutputArray roots); + +/** @brief Finds the real or complex roots of a polynomial equation. + +The function cv::solvePoly finds real and complex roots of a polynomial +equation: +\f[\texttt{coeffs} [n] x^{n} + \texttt{coeffs} [n-1] x^{n-1} + ... + +\texttt{coeffs} [1] x + \texttt{coeffs} [0] = 0\f] +@param coeffs array of polynomial coefficients. +@param roots output (complex) array of roots. +@param maxIters maximum number of iterations the algorithm does. +*/ +CV_EXPORTS_W double solvePoly(InputArray coeffs, OutputArray roots, + int maxIters = 300); + +/** @brief Calculates eigenvalues and eigenvectors of a symmetric matrix. + +The function cv::eigen calculates just eigenvalues, or eigenvalues and +eigenvectors of the symmetric matrix src: +@code + src*eigenvectors.row(i).t() = +eigenvalues.at(i)*eigenvectors.row(i).t() +@endcode + +@note Use cv::eigenNonSymmetric for calculation of real eigenvalues and +eigenvectors of non-symmetric matrix. + +@param src input matrix that must have CV_32FC1 or CV_64FC1 type, square size +and be symmetrical (src ^T^ == src). +@param eigenvalues output vector of eigenvalues of the same type as src; the +eigenvalues are stored in the descending order. +@param eigenvectors output matrix of eigenvectors; it has the same size and type +as src; the eigenvectors are stored as subsequent matrix rows, in the same order +as the corresponding eigenvalues. +@sa eigenNonSymmetric, completeSymm, PCA +*/ +CV_EXPORTS_W bool eigen(InputArray src, OutputArray eigenvalues, + OutputArray eigenvectors = noArray()); + +/** @brief Calculates eigenvalues and eigenvectors of a non-symmetric matrix +(real eigenvalues only). + +@note Assumes real eigenvalues. + +The function calculates eigenvalues and eigenvectors (optional) of the square +matrix src: +@code + src*eigenvectors.row(i).t() = +eigenvalues.at(i)*eigenvectors.row(i).t() +@endcode + +@param src input matrix (CV_32FC1 or CV_64FC1 type). +@param eigenvalues output vector of eigenvalues (type is the same type as src). +@param eigenvectors output matrix of eigenvectors (type is the same type as +src). The eigenvectors are stored as subsequent matrix rows, in the same order +as the corresponding eigenvalues. +@sa eigen +*/ +CV_EXPORTS_W void eigenNonSymmetric(InputArray src, OutputArray eigenvalues, + OutputArray eigenvectors); + +/** @brief Calculates the covariance matrix of a set of vectors. + +The function cv::calcCovarMatrix calculates the covariance matrix and, +optionally, the mean vector of the set of input vectors. +@param samples samples stored as separate matrices +@param nsamples number of samples +@param covar output covariance matrix of the type ctype and square size. +@param mean input or output (depending on the flags) array as the average value +of the input vectors. +@param flags operation flags as a combination of #CovarFlags +@param ctype type of the matrixl; it equals 'CV_64F' by default. +@sa PCA, mulTransposed, Mahalanobis +@todo InputArrayOfArrays +*/ +CV_EXPORTS void calcCovarMatrix(const Mat *samples, int nsamples, Mat &covar, + Mat &mean, int flags, int ctype = CV_64F); + +/** @overload +@note use #COVAR_ROWS or #COVAR_COLS flag +@param samples samples stored as rows/columns of a single matrix. +@param covar output covariance matrix of the type ctype and square size. +@param mean input or output (depending on the flags) array as the average value +of the input vectors. +@param flags operation flags as a combination of #CovarFlags +@param ctype type of the matrixl; it equals 'CV_64F' by default. +*/ +CV_EXPORTS_W void calcCovarMatrix(InputArray samples, OutputArray covar, + InputOutputArray mean, int flags, + int ctype = CV_64F); + +/** wrap PCA::operator() */ +CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean, + OutputArray eigenvectors, int maxComponents = 0); + +/** wrap PCA::operator() and add eigenvalues output parameter */ +CV_EXPORTS_AS(PCACompute2) +void PCACompute(InputArray data, InputOutputArray mean, + OutputArray eigenvectors, OutputArray eigenvalues, + int maxComponents = 0); + +/** wrap PCA::operator() */ +CV_EXPORTS_W void PCACompute(InputArray data, InputOutputArray mean, + OutputArray eigenvectors, double retainedVariance); + +/** wrap PCA::operator() and add eigenvalues output parameter */ +CV_EXPORTS_AS(PCACompute2) +void PCACompute(InputArray data, InputOutputArray mean, + OutputArray eigenvectors, OutputArray eigenvalues, + double retainedVariance); + +/** wrap PCA::project */ +CV_EXPORTS_W void PCAProject(InputArray data, InputArray mean, + InputArray eigenvectors, OutputArray result); + +/** wrap PCA::backProject */ +CV_EXPORTS_W void PCABackProject(InputArray data, InputArray mean, + InputArray eigenvectors, OutputArray result); + +/** wrap SVD::compute */ +CV_EXPORTS_W void SVDecomp(InputArray src, OutputArray w, OutputArray u, + OutputArray vt, int flags = 0); + +/** wrap SVD::backSubst */ +CV_EXPORTS_W void SVBackSubst(InputArray w, InputArray u, InputArray vt, + InputArray rhs, OutputArray dst); + +/** @brief Calculates the Mahalanobis distance between two vectors. + +The function cv::Mahalanobis calculates and returns the weighted distance +between two vectors: +\f[d( \texttt{vec1} , \texttt{vec2} )= +\sqrt{\sum_{i,j}{\texttt{icovar(i,j)}\cdot(\texttt{vec1}(I)-\texttt{vec2}(I))\cdot(\texttt{vec1(j)}-\texttt{vec2(j)})} +}\f] The covariance matrix may be calculated using the #calcCovarMatrix function +and then inverted using the invert function (preferably using the #DECOMP_SVD +method, as the most accurate). +@param v1 first 1D input vector. +@param v2 second 1D input vector. +@param icovar inverse covariance matrix. +*/ +CV_EXPORTS_W double Mahalanobis(InputArray v1, InputArray v2, + InputArray icovar); + +/** @brief Performs a forward or inverse Discrete Fourier transform of a 1D or +2D floating-point array. + +The function cv::dft performs one of the following: +- Forward the Fourier transform of a 1D vector of N elements: + \f[Y = F^{(N)} \cdot X,\f] + where \f$F^{(N)}_{jk}=\exp(-2\pi i j k/N)\f$ and \f$i=\sqrt{-1}\f$ +- Inverse the Fourier transform of a 1D vector of N elements: + \f[\begin{array}{l} X'= \left (F^{(N)} \right )^{-1} \cdot Y = \left +(F^{(N)} \right )^* \cdot y \\ X = (1/N) \cdot X, \end{array}\f] where +\f$F^*=\left(\textrm{Re}(F^{(N)})-\textrm{Im}(F^{(N)})\right)^T\f$ +- Forward the 2D Fourier transform of a M x N matrix: + \f[Y = F^{(M)} \cdot X \cdot F^{(N)}\f] +- Inverse the 2D Fourier transform of a M x N matrix: + \f[\begin{array}{l} X'= \left (F^{(M)} \right )^* \cdot Y \cdot \left +(F^{(N)} \right )^* \\ X = \frac{1}{M \cdot N} \cdot X' \end{array}\f] + +In case of real (single-channel) data, the output spectrum of the forward +Fourier transform or input spectrum of the inverse Fourier transform can be +represented in a packed format called *CCS* (complex-conjugate-symmetrical). It +was borrowed from IPL (Intel\* Image Processing Library). Here is how 2D *CCS* +spectrum looks: +\f[\begin{bmatrix} Re Y_{0,0} & Re Y_{0,1} & Im Y_{0,1} & Re Y_{0,2} & Im +Y_{0,2} & \cdots & Re Y_{0,N/2-1} & Im Y_{0,N/2-1} & Re Y_{0,N/2} \\ Re +Y_{1,0} & Re Y_{1,1} & Im Y_{1,1} & Re Y_{1,2} & Im Y_{1,2} & \cdots & Re +Y_{1,N/2-1} & Im Y_{1,N/2-1} & Re Y_{1,N/2} \\ Im Y_{1,0} & Re Y_{2,1} & Im +Y_{2,1} & Re Y_{2,2} & Im Y_{2,2} & \cdots & Re Y_{2,N/2-1} & Im Y_{2,N/2-1} & +Im Y_{1,N/2} \\ \hdotsfor{9} \\ Re Y_{M/2-1,0} & Re Y_{M-3,1} & Im Y_{M-3,1} +& \hdotsfor{3} & Re Y_{M-3,N/2-1} & Im Y_{M-3,N/2-1}& Re Y_{M/2-1,N/2} \\ Im +Y_{M/2-1,0} & Re Y_{M-2,1} & Im Y_{M-2,1} & \hdotsfor{3} & Re Y_{M-2,N/2-1} & +Im Y_{M-2,N/2-1}& Im Y_{M/2-1,N/2} \\ Re Y_{M/2,0} & Re Y_{M-1,1} & Im +Y_{M-1,1} & \hdotsfor{3} & Re Y_{M-1,N/2-1} & Im Y_{M-1,N/2-1}& Re Y_{M/2,N/2} +\end{bmatrix}\f] + +In case of 1D transform of a real vector, the output looks like the first row of +the matrix above. + +So, the function chooses an operation mode depending on the flags and size of +the input array: +- If #DFT_ROWS is set or the input array has a single row or single column, +the function performs a 1D forward or inverse transform of each row of a matrix +when #DFT_ROWS is set. Otherwise, it performs a 2D transform. +- If the input array is real and #DFT_INVERSE is not set, the function +performs a forward 1D or 2D transform: + - When #DFT_COMPLEX_OUTPUT is set, the output is a complex matrix of the +same size as input. + - When #DFT_COMPLEX_OUTPUT is not set, the output is a real matrix of the +same size as input. In case of 2D transform, it uses the packed format as shown +above. In case of a single 1D transform, it looks like the first row of the +matrix above. In case of multiple 1D transforms (when using the #DFT_ROWS flag), +each row of the output matrix looks like the first row of the matrix above. +- If the input array is complex and either #DFT_INVERSE or #DFT_REAL_OUTPUT +are not set, the output is a complex array of the same size as input. The +function performs a forward or inverse 1D or 2D transform of the whole input +array or each row of the input array independently, depending on the flags +DFT_INVERSE and DFT_ROWS. +- When #DFT_INVERSE is set and the input array is real, or it is complex but +#DFT_REAL_OUTPUT is set, the output is a real array of the same size as input. +The function performs a 1D or 2D inverse transformation of the whole input array +or each individual row, depending on the flags #DFT_INVERSE and #DFT_ROWS. + +If #DFT_SCALE is set, the scaling is done after the transformation. + +Unlike dct, the function supports arrays of arbitrary size. But only those +arrays are processed efficiently, whose sizes can be factorized in a product of +small prime numbers (2, 3, and 5 in the current implementation). Such an +efficient DFT size can be calculated using the getOptimalDFTSize method. + +The sample below illustrates how to calculate a DFT-based convolution of two 2D +real arrays: +@code + void convolveDFT(InputArray A, InputArray B, OutputArray C) + { + // reallocate the output array if needed + C.create(abs(A.rows - B.rows)+1, abs(A.cols - B.cols)+1, A.type()); + Size dftSize; + // calculate the size of DFT transform + dftSize.width = getOptimalDFTSize(A.cols + B.cols - 1); + dftSize.height = getOptimalDFTSize(A.rows + B.rows - 1); + + // allocate temporary buffers and initialize them with 0's + Mat tempA(dftSize, A.type(), Scalar::all(0)); + Mat tempB(dftSize, B.type(), Scalar::all(0)); + + // copy A and B to the top-left corners of tempA and tempB, respectively + Mat roiA(tempA, Rect(0,0,A.cols,A.rows)); + A.copyTo(roiA); + Mat roiB(tempB, Rect(0,0,B.cols,B.rows)); + B.copyTo(roiB); + + // now transform the padded A & B in-place; + // use "nonzeroRows" hint for faster processing + dft(tempA, tempA, 0, A.rows); + dft(tempB, tempB, 0, B.rows); + + // multiply the spectrums; + // the function handles packed spectrum representations well + mulSpectrums(tempA, tempB, tempA); + + // transform the product back from the frequency domain. + // Even though all the result rows will be non-zero, + // you need only the first C.rows of them, and thus you + // pass nonzeroRows == C.rows + dft(tempA, tempA, DFT_INVERSE + DFT_SCALE, C.rows); + + // now copy the result back to C. + tempA(Rect(0, 0, C.cols, C.rows)).copyTo(C); + + // all the temporary buffers will be deallocated automatically + } +@endcode +To optimize this sample, consider the following approaches: +- Since nonzeroRows != 0 is passed to the forward transform calls and since A +and B are copied to the top-left corners of tempA and tempB, respectively, it is +not necessary to clear the whole tempA and tempB. It is only necessary to clear +the tempA.cols - A.cols ( tempB.cols - B.cols) rightmost columns of the +matrices. +- This DFT-based convolution does not have to be applied to the whole big +arrays, especially if B is significantly smaller than A or vice versa. Instead, +you can calculate convolution by parts. To do this, you need to split the output +array C into multiple tiles. For each tile, estimate which parts of A and B are +required to calculate convolution in this tile. If the tiles in C are too small, +the speed will decrease a lot because of repeated work. In the ultimate case, +when each tile in C is a single pixel, the algorithm becomes equivalent to the +naive convolution algorithm. If the tiles are too big, the temporary arrays +tempA and tempB become too big and there is also a slowdown because of bad cache +locality. So, there is an optimal tile size somewhere in the middle. +- If different tiles in C can be calculated in parallel and, thus, the +convolution is done by parts, the loop can be threaded. + +All of the above improvements have been implemented in #matchTemplate and +#filter2D . Therefore, by using them, you can get the performance even better +than with the above theoretically optimal implementation. Though, those two +functions actually calculate cross-correlation, not convolution, so you need to +"flip" the second convolution operand B vertically and horizontally using flip . +@note +- An example using the discrete fourier transform can be found at + opencv_source_code/samples/cpp/dft.cpp +- (Python) An example using the dft functionality to perform Wiener +deconvolution can be found at opencv_source/samples/python/deconvolution.py +- (Python) An example rearranging the quadrants of a Fourier image can be +found at opencv_source/samples/python/dft.py +@param src input array that could be real or complex. +@param dst output array whose size and type depends on the flags . +@param flags transformation flags, representing a combination of the #DftFlags +@param nonzeroRows when the parameter is not zero, the function assumes that +only the first nonzeroRows rows of the input array (#DFT_INVERSE is not set) or +only the first nonzeroRows of the output array (#DFT_INVERSE is set) contain +non-zeros, thus, the function can handle the rest of the rows more efficiently +and save some time; this technique is very useful for calculating array +cross-correlation or convolution using DFT. +@sa dct, getOptimalDFTSize, mulSpectrums, filter2D, matchTemplate, flip, +cartToPolar, magnitude, phase +*/ +CV_EXPORTS_W void dft(InputArray src, OutputArray dst, int flags = 0, + int nonzeroRows = 0); + +/** @brief Calculates the inverse Discrete Fourier Transform of a 1D or 2D +array. + +idft(src, dst, flags) is equivalent to dft(src, dst, flags | #DFT_INVERSE) . +@note None of dft and idft scales the result by default. So, you should pass +#DFT_SCALE to one of dft or idft explicitly to make these transforms mutually +inverse. +@sa dft, dct, idct, mulSpectrums, getOptimalDFTSize +@param src input floating-point real or complex array. +@param dst output array whose size and type depend on the flags. +@param flags operation flags (see dft and #DftFlags). +@param nonzeroRows number of dst rows to process; the rest of the rows have +undefined content (see the convolution sample in dft description. +*/ +CV_EXPORTS_W void idft(InputArray src, OutputArray dst, int flags = 0, + int nonzeroRows = 0); + +/** @brief Performs a forward or inverse discrete Cosine transform of 1D or 2D +array. + +The function cv::dct performs a forward or inverse discrete Cosine transform +(DCT) of a 1D or 2D floating-point array: +- Forward Cosine transform of a 1D vector of N elements: + \f[Y = C^{(N)} \cdot X\f] + where + \f[C^{(N)}_{jk}= \sqrt{\alpha_j/N} \cos \left ( \frac{\pi(2k+1)j}{2N} \right +)\f] and + \f$\alpha_0=1\f$, \f$\alpha_j=2\f$ for *j \> 0*. +- Inverse Cosine transform of a 1D vector of N elements: + \f[X = \left (C^{(N)} \right )^{-1} \cdot Y = \left (C^{(N)} \right )^T +\cdot Y\f] (since \f$C^{(N)}\f$ is an orthogonal matrix, \f$C^{(N)} \cdot +\left(C^{(N)}\right)^T = I\f$ ) +- Forward 2D Cosine transform of M x N matrix: + \f[Y = C^{(N)} \cdot X \cdot \left (C^{(N)} \right )^T\f] +- Inverse 2D Cosine transform of M x N matrix: + \f[X = \left (C^{(N)} \right )^T \cdot X \cdot C^{(N)}\f] + +The function chooses the mode of operation by looking at the flags and size of +the input array: +- If (flags & #DCT_INVERSE) == 0, the function does a forward 1D or 2D +transform. Otherwise, it is an inverse 1D or 2D transform. +- If (flags & #DCT_ROWS) != 0, the function performs a 1D transform of each +row. +- If the array is a single column or a single row, the function performs a 1D +transform. +- If none of the above is true, the function performs a 2D transform. + +@note Currently dct supports even-size arrays (2, 4, 6 ...). For data analysis +and approximation, you can pad the array when necessary. Also, the function +performance depends very much, and not monotonically, on the array size (see +getOptimalDFTSize ). In the current implementation DCT of a vector of size N is +calculated via DFT of a vector of size N/2 . Thus, the optimal DCT size N1 \>= N +can be calculated as: +@code + size_t getOptimalDCTSize(size_t N) { return 2*getOptimalDFTSize((N+1)/2); } + N1 = getOptimalDCTSize(N); +@endcode +@param src input floating-point array. +@param dst output array of the same size and type as src . +@param flags transformation flags as a combination of cv::DftFlags (DCT_*) +@sa dft, getOptimalDFTSize, idct +*/ +CV_EXPORTS_W void dct(InputArray src, OutputArray dst, int flags = 0); + +/** @brief Calculates the inverse Discrete Cosine Transform of a 1D or 2D array. + +idct(src, dst, flags) is equivalent to dct(src, dst, flags | DCT_INVERSE). +@param src input floating-point single-channel array. +@param dst output array of the same size and type as src. +@param flags operation flags. +@sa dct, dft, idft, getOptimalDFTSize +*/ +CV_EXPORTS_W void idct(InputArray src, OutputArray dst, int flags = 0); + +/** @brief Performs the per-element multiplication of two Fourier spectrums. + +The function cv::mulSpectrums performs the per-element multiplication of the two +CCS-packed or complex matrices that are results of a real or complex Fourier +transform. + +The function, together with dft and idft, may be used to calculate convolution +(pass conjB=false ) or correlation (pass conjB=true ) of two arrays rapidly. +When the arrays are complex, they are simply multiplied (per element) with an +optional conjugation of the second-array elements. When the arrays are real, +they are assumed to be CCS-packed (see dft for details). +@param a first input array. +@param b second input array of the same size and type as src1 . +@param c output array of the same size and type as src1 . +@param flags operation flags; currently, the only supported flag is +cv::DFT_ROWS, which indicates that each row of src1 and src2 is an independent +1D Fourier spectrum. If you do not want to use this flag, then simply add a `0` +as value. +@param conjB optional flag that conjugates the second input array before the +multiplication (true) or not (false). +*/ +CV_EXPORTS_W void mulSpectrums(InputArray a, InputArray b, OutputArray c, + int flags, bool conjB = false); + +/** @brief Returns the optimal DFT size for a given vector size. + +DFT performance is not a monotonic function of a vector size. Therefore, when +you calculate convolution of two arrays or perform the spectral analysis of an +array, it usually makes sense to pad the input data with zeros to get a bit +larger array that can be transformed much faster than the original one. Arrays +whose size is a power-of-two (2, 4, 8, 16, 32, ...) are the fastest to process. +Though, the arrays whose size is a product of 2's, 3's, and 5's (for example, +300 = 5\*5\*3\*2\*2) are also processed quite efficiently. + +The function cv::getOptimalDFTSize returns the minimum number N that is greater +than or equal to vecsize so that the DFT of a vector of size N can be processed +efficiently. In the current implementation N = 2 ^p^ \* 3 ^q^ \* 5 ^r^ for some +integer p, q, r. + +The function returns a negative number if vecsize is too large (very close to +INT_MAX ). + +While the function cannot be used directly to estimate the optimal vector size +for DCT transform (since the current DCT implementation supports only even-size +vectors), it can be easily processed as getOptimalDFTSize((vecsize+1)/2)\*2. +@param vecsize vector size. +@sa dft, dct, idft, idct, mulSpectrums +*/ +CV_EXPORTS_W int getOptimalDFTSize(int vecsize); + +/** @brief Returns the default random number generator. + +The function cv::theRNG returns the default random number generator. For each +thread, there is a separate random number generator, so you can use the function +safely in multi-thread environments. If you just need to get a single random +number using this generator or initialize an array, you can use randu or randn +instead. But if you are going to generate many random numbers inside a loop, it +is much faster to use this function to retrieve the generator and then use +RNG::operator _Tp() . +@sa RNG, randu, randn +*/ +CV_EXPORTS RNG &theRNG(); + +/** @brief Sets state of default random number generator. + +The function cv::setRNGSeed sets state of default random number generator to +custom value. +@param seed new state for default random number generator +@sa RNG, randu, randn +*/ +CV_EXPORTS_W void setRNGSeed(int seed); + +/** @brief Generates a single uniformly-distributed random number or an array of +random numbers. + +Non-template variant of the function fills the matrix dst with +uniformly-distributed random numbers from the specified range: +\f[\texttt{low} _c \leq \texttt{dst} (I)_c < \texttt{high} _c\f] +@param dst output array of random numbers; the array must be pre-allocated. +@param low inclusive lower boundary of the generated random numbers. +@param high exclusive upper boundary of the generated random numbers. +@sa RNG, randn, theRNG +*/ +CV_EXPORTS_W void randu(InputOutputArray dst, InputArray low, InputArray high); + +/** @brief Fills the array with normally distributed random numbers. + +The function cv::randn fills the matrix dst with normally distributed random +numbers with the specified mean vector and the standard deviation matrix. The +generated random numbers are clipped to fit the value range of the output array +data type. +@param dst output array of random numbers; the array must be pre-allocated and +have 1 to 4 channels. +@param mean mean value (expectation) of the generated random numbers. +@param stddev standard deviation of the generated random numbers; it can be +either a vector (in which case a diagonal standard deviation matrix is assumed) +or a square matrix. +@sa RNG, randu +*/ +CV_EXPORTS_W void randn(InputOutputArray dst, InputArray mean, + InputArray stddev); + +/** @brief Shuffles the array elements randomly. + +The function cv::randShuffle shuffles the specified 1D array by randomly +choosing pairs of elements and swapping them. The number of such swap operations +will be dst.rows\*dst.cols\*iterFactor . +@param dst input/output numerical 1D array. +@param iterFactor scale factor that determines the number of random swap +operations (see the details below). +@param rng optional random number generator used for shuffling; if it is zero, +theRNG () is used instead. +@sa RNG, sort +*/ +CV_EXPORTS_W void randShuffle(InputOutputArray dst, double iterFactor = 1., + RNG *rng = 0); + +/** @brief Principal Component Analysis + +The class is used to calculate a special basis for a set of vectors. The +basis will consist of eigenvectors of the covariance matrix calculated +from the input set of vectors. The class %PCA can also transform +vectors to/from the new coordinate space defined by the basis. Usually, +in this new coordinate system, each vector from the original set (and +any linear combination of such vectors) can be quite accurately +approximated by taking its first few components, corresponding to the +eigenvectors of the largest eigenvalues of the covariance matrix. +Geometrically it means that you calculate a projection of the vector to +a subspace formed by a few eigenvectors corresponding to the dominant +eigenvalues of the covariance matrix. And usually such a projection is +very close to the original vector. So, you can represent the original +vector from a high-dimensional space with a much shorter vector +consisting of the projected vector's coordinates in the subspace. Such a +transformation is also known as Karhunen-Loeve Transform, or KLT. +See http://en.wikipedia.org/wiki/Principal_component_analysis + +The sample below is the function that takes two matrices. The first +function stores a set of vectors (a row per vector) that is used to +calculate PCA. The second function stores another "test" set of vectors +(a row per vector). First, these vectors are compressed with PCA, then +reconstructed back, and then the reconstruction error norm is computed +and printed for each vector. : + +@code{.cpp} +using namespace cv; + +PCA compressPCA(const Mat& pcaset, int maxComponents, + const Mat& testset, Mat& compressed) +{ + PCA pca(pcaset, // pass the data + Mat(), // we do not have a pre-computed mean vector, + // so let the PCA engine to compute it + PCA::DATA_AS_ROW, // indicate that the vectors + // are stored as matrix rows + // (use PCA::DATA_AS_COL if the vectors are + // the matrix columns) + maxComponents // specify, how many principal components to retain + ); + // if there is no test data, just return the computed basis, ready-to-use + if( !testset.data ) + return pca; + CV_Assert( testset.cols == pcaset.cols ); + + compressed.create(testset.rows, maxComponents, testset.type()); + + Mat reconstructed; + for( int i = 0; i < testset.rows; i++ ) + { + Mat vec = testset.row(i), coeffs = compressed.row(i), reconstructed; + // compress the vector, the result will be stored + // in the i-th row of the output matrix + pca.project(vec, coeffs); + // and then reconstruct it + pca.backProject(coeffs, reconstructed); + // and measure the error + printf("%d. diff = %g\n", i, norm(vec, reconstructed, NORM_L2)); + } + return pca; +} +@endcode +@sa calcCovarMatrix, mulTransposed, SVD, dft, dct +*/ +class CV_EXPORTS PCA { +public: + enum Flags { + DATA_AS_ROW = + 0, //!< indicates that the input samples are stored as matrix rows + DATA_AS_COL = + 1, //!< indicates that the input samples are stored as matrix columns + USE_AVG = 2 //! + }; + + /** @brief default constructor + + The default constructor initializes an empty %PCA structure. The other + constructors initialize the structure and call PCA::operator()(). + */ + PCA(); + + /** @overload + @param data input samples stored as matrix rows or matrix columns. + @param mean optional mean value; if the matrix is empty (@c noArray()), + the mean is computed from the data. + @param flags operation flags; currently the parameter is only used to + specify the data layout (PCA::Flags) + @param maxComponents maximum number of components that %PCA should + retain; by default, all the components are retained. + */ + PCA(InputArray data, InputArray mean, int flags, int maxComponents = 0); + + /** @overload + @param data input samples stored as matrix rows or matrix columns. + @param mean optional mean value; if the matrix is empty (noArray()), + the mean is computed from the data. + @param flags operation flags; currently the parameter is only used to + specify the data layout (PCA::Flags) + @param retainedVariance Percentage of variance that PCA should retain. + Using this parameter will let the PCA decided how many components to + retain but it will always keep at least 2. + */ + PCA(InputArray data, InputArray mean, int flags, double retainedVariance); + + /** @brief performs %PCA + + The operator performs %PCA of the supplied dataset. It is safe to reuse + the same PCA structure for multiple datasets. That is, if the structure + has been previously used with another dataset, the existing internal + data is reclaimed and the new @ref eigenvalues, @ref eigenvectors and @ref + mean are allocated and computed. + + The computed @ref eigenvalues are sorted from the largest to the smallest and + the corresponding @ref eigenvectors are stored as eigenvectors rows. + + @param data input samples stored as the matrix rows or as the matrix + columns. + @param mean optional mean value; if the matrix is empty (noArray()), + the mean is computed from the data. + @param flags operation flags; currently the parameter is only used to + specify the data layout. (Flags) + @param maxComponents maximum number of components that PCA should + retain; by default, all the components are retained. + */ + PCA &operator()(InputArray data, InputArray mean, int flags, + int maxComponents = 0); + + /** @overload + @param data input samples stored as the matrix rows or as the matrix + columns. + @param mean optional mean value; if the matrix is empty (noArray()), + the mean is computed from the data. + @param flags operation flags; currently the parameter is only used to + specify the data layout. (PCA::Flags) + @param retainedVariance Percentage of variance that %PCA should retain. + Using this parameter will let the %PCA decided how many components to + retain but it will always keep at least 2. + */ + PCA &operator()(InputArray data, InputArray mean, int flags, + double retainedVariance); + + /** @brief Projects vector(s) to the principal component subspace. + + The methods project one or more vectors to the principal component + subspace, where each vector projection is represented by coefficients in + the principal component basis. The first form of the method returns the + matrix that the second form writes to the result. So the first form can + be used as a part of expression while the second form can be more + efficient in a processing loop. + @param vec input vector(s); must have the same dimensionality and the + same layout as the input data used at %PCA phase, that is, if + DATA_AS_ROW are specified, then `vec.cols==data.cols` + (vector dimensionality) and `vec.rows` is the number of vectors to + project, and the same is true for the PCA::DATA_AS_COL case. + */ + Mat project(InputArray vec) const; + + /** @overload + @param vec input vector(s); must have the same dimensionality and the + same layout as the input data used at PCA phase, that is, if + DATA_AS_ROW are specified, then `vec.cols==data.cols` + (vector dimensionality) and `vec.rows` is the number of vectors to + project, and the same is true for the PCA::DATA_AS_COL case. + @param result output vectors; in case of PCA::DATA_AS_COL, the + output matrix has as many columns as the number of input vectors, this + means that `result.cols==vec.cols` and the number of rows match the + number of principal components (for example, `maxComponents` parameter + passed to the constructor). + */ + void project(InputArray vec, OutputArray result) const; + + /** @brief Reconstructs vectors from their PC projections. + + The methods are inverse operations to PCA::project. They take PC + coordinates of projected vectors and reconstruct the original vectors. + Unless all the principal components have been retained, the + reconstructed vectors are different from the originals. But typically, + the difference is small if the number of components is large enough (but + still much smaller than the original vector dimensionality). As a + result, PCA is used. + @param vec coordinates of the vectors in the principal component + subspace, the layout and size are the same as of PCA::project output + vectors. + */ + Mat backProject(InputArray vec) const; + + /** @overload + @param vec coordinates of the vectors in the principal component + subspace, the layout and size are the same as of PCA::project output + vectors. + @param result reconstructed vectors; the layout and size are the same as + of PCA::project input vectors. + */ + void backProject(InputArray vec, OutputArray result) const; + + /** @brief write PCA objects + + Writes @ref eigenvalues @ref eigenvectors and @ref mean to specified + FileStorage + */ + void write(FileStorage &fs) const; + + /** @brief load PCA objects + + Loads @ref eigenvalues @ref eigenvectors and @ref mean from specified FileNode + */ + void read(const FileNode &fn); + + Mat eigenvectors; //!< eigenvectors of the covariation matrix + Mat eigenvalues; //!< eigenvalues of the covariation matrix + Mat mean; //!< mean value subtracted before the projection and added after the + //!< back projection +}; + +/** @example samples/cpp/pca.cpp +An example using %PCA for dimensionality reduction while maintaining an amount +of variance +*/ + +/** @example +samples/cpp/tutorial_code/ml/introduction_to_pca/introduction_to_pca.cpp Check +@ref tutorial_introduction_to_pca "the corresponding tutorial" for more details +*/ + +/** +@brief Linear Discriminant Analysis +@todo document this class +*/ +class CV_EXPORTS LDA { +public: + /** @brief constructor + Initializes a LDA with num_components (default 0). + */ + explicit LDA(int num_components = 0); + + /** Initializes and performs a Discriminant Analysis with Fisher's + Optimization Criterion on given data in src and corresponding labels + in labels. If 0 (or less) number of components are given, they are + automatically determined for given data in computation. + */ + LDA(InputArrayOfArrays src, InputArray labels, int num_components = 0); + + /** Serializes this object to a given filename. + */ + void save(const String &filename) const; + + /** Deserializes this object from a given filename. + */ + void load(const String &filename); + + /** Serializes this object to a given cv::FileStorage. + */ + void save(FileStorage &fs) const; + + /** Deserializes this object from a given cv::FileStorage. + */ + void load(const FileStorage &node); + + /** destructor + */ + ~LDA(); + + /** Compute the discriminants for data in src (row aligned) and labels. + */ + void compute(InputArrayOfArrays src, InputArray labels); + + /** Projects samples into the LDA subspace. + src may be one or more row aligned samples. + */ + Mat project(InputArray src); + + /** Reconstructs projections from the LDA subspace. + src may be one or more row aligned projections. + */ + Mat reconstruct(InputArray src); + + /** Returns the eigenvectors of this LDA. + */ + Mat eigenvectors() const { return _eigenvectors; } + + /** Returns the eigenvalues of this LDA. + */ + Mat eigenvalues() const { return _eigenvalues; } + + static Mat subspaceProject(InputArray W, InputArray mean, InputArray src); + static Mat subspaceReconstruct(InputArray W, InputArray mean, InputArray src); + +protected: + int _num_components; + Mat _eigenvectors; + Mat _eigenvalues; + void lda(InputArrayOfArrays src, InputArray labels); +}; + +/** @brief Singular Value Decomposition + +Class for computing Singular Value Decomposition of a floating-point +matrix. The Singular Value Decomposition is used to solve least-square +problems, under-determined linear systems, invert matrices, compute +condition numbers, and so on. + +If you want to compute a condition number of a matrix or an absolute value of +its determinant, you do not need `u` and `vt`. You can pass +flags=SVD::NO_UV|... . Another flag SVD::FULL_UV indicates that full-size u +and vt must be computed, which is not necessary most of the time. + +@sa invert, solve, eigen, determinant +*/ +class CV_EXPORTS SVD { +public: + enum Flags { + /** allow the algorithm to modify the decomposed matrix; it can save space + and speed up processing. currently ignored. */ + MODIFY_A = 1, + /** indicates that only a vector of singular values `w` is to be processed, + while u and vt will be set to empty matrices */ + NO_UV = 2, + /** when the matrix is not square, by default the algorithm produces u and + vt matrices of sufficiently large size for the further A reconstruction; + if, however, FULL_UV flag is specified, u and vt will be full-size square + orthogonal matrices.*/ + FULL_UV = 4 + }; + + /** @brief the default constructor + + initializes an empty SVD structure + */ + SVD(); + + /** @overload + initializes an empty SVD structure and then calls SVD::operator() + @param src decomposed matrix. The depth has to be CV_32F or CV_64F. + @param flags operation flags (SVD::Flags) + */ + SVD(InputArray src, int flags = 0); + + /** @brief the operator that performs SVD. The previously allocated u, w and + vt are released. + + The operator performs the singular value decomposition of the supplied + matrix. The u,`vt` , and the vector of singular values w are stored in + the structure. The same SVD structure can be reused many times with + different matrices. Each time, if needed, the previous u,`vt` , and w + are reclaimed and the new matrices are created, which is all handled by + Mat::create. + @param src decomposed matrix. The depth has to be CV_32F or CV_64F. + @param flags operation flags (SVD::Flags) + */ + SVD &operator()(InputArray src, int flags = 0); + + /** @brief decomposes matrix and stores the results to user-provided matrices + + The methods/functions perform SVD of matrix. Unlike SVD::SVD constructor + and SVD::operator(), they store the results to the user-provided + matrices: + + @code{.cpp} + Mat A, w, u, vt; + SVD::compute(A, w, u, vt); + @endcode + + @param src decomposed matrix. The depth has to be CV_32F or CV_64F. + @param w calculated singular values + @param u calculated left singular vectors + @param vt transposed matrix of right singular vectors + @param flags operation flags - see SVD::Flags. + */ + static void compute(InputArray src, OutputArray w, OutputArray u, + OutputArray vt, int flags = 0); + + /** @overload + computes singular values of a matrix + @param src decomposed matrix. The depth has to be CV_32F or CV_64F. + @param w calculated singular values + @param flags operation flags - see SVD::Flags. + */ + static void compute(InputArray src, OutputArray w, int flags = 0); + + /** @brief performs back substitution + */ + static void backSubst(InputArray w, InputArray u, InputArray vt, + InputArray rhs, OutputArray dst); + + /** @brief solves an under-determined singular linear system + + The method finds a unit-length solution x of a singular linear system + A\*x = 0. Depending on the rank of A, there can be no solutions, a + single solution or an infinite number of solutions. In general, the + algorithm solves the following problem: + \f[dst = \arg \min _{x: \| x \| =1} \| src \cdot x \|\f] + @param src left-hand-side matrix. + @param dst found solution. + */ + static void solveZ(InputArray src, OutputArray dst); + + /** @brief performs a singular value back substitution. + + The method calculates a back substitution for the specified right-hand + side: + + \f[\texttt{x} = \texttt{vt} ^T \cdot diag( \texttt{w} )^{-1} \cdot + \texttt{u} ^T \cdot \texttt{rhs} \sim \texttt{A} ^{-1} \cdot \texttt{rhs}\f] + + Using this technique you can either get a very accurate solution of the + convenient linear system, or the best (in the least-squares terms) + pseudo-solution of an overdetermined linear system. + + @param rhs right-hand side of a linear system (u\*w\*v')\*dst = rhs to + be solved, where A has been previously decomposed. + + @param dst found solution of the system. + + @note Explicit SVD with the further back substitution only makes sense + if you need to solve many linear systems with the same left-hand side + (for example, src ). If all you need is to solve a single system + (possibly with multiple rhs immediately available), simply call solve + add pass #DECOMP_SVD there. It does absolutely the same thing. + */ + void backSubst(InputArray rhs, OutputArray dst) const; + + /** @todo document */ + template + static void compute(const Matx<_Tp, m, n> &a, Matx<_Tp, nm, 1> &w, + Matx<_Tp, m, nm> &u, Matx<_Tp, n, nm> &vt); + + /** @todo document */ + template + static void compute(const Matx<_Tp, m, n> &a, Matx<_Tp, nm, 1> &w); + + /** @todo document */ + template + static void backSubst(const Matx<_Tp, nm, 1> &w, const Matx<_Tp, m, nm> &u, + const Matx<_Tp, n, nm> &vt, const Matx<_Tp, m, nb> &rhs, + Matx<_Tp, n, nb> &dst); + + Mat u, w, vt; +}; + +/** @brief Random Number Generator + +Random number generator. It encapsulates the state (currently, a 64-bit +integer) and has methods to return scalar random values and to fill +arrays with random values. Currently it supports uniform and Gaussian +(normal) distributions. The generator uses Multiply-With-Carry +algorithm, introduced by G. Marsaglia ( + ). +Gaussian-distribution random numbers are generated using the Ziggurat +algorithm ( ), +introduced by G. Marsaglia and W. W. Tsang. +*/ +class CV_EXPORTS RNG { +public: + enum { UNIFORM = 0, NORMAL = 1 }; + + /** @brief constructor + + These are the RNG constructors. The first form sets the state to some + pre-defined value, equal to 2\*\*32-1 in the current implementation. The + second form sets the state to the specified value. If you passed state=0 + , the constructor uses the above default value instead to avoid the + singular random number sequence, consisting of all zeros. + */ + RNG(); + /** @overload + @param state 64-bit value used to initialize the RNG. + */ + RNG(uint64 state); + /**The method updates the state using the MWC algorithm and returns the + next 32-bit random number.*/ + unsigned next(); + + /**Each of the methods updates the state using the MWC algorithm and + returns the next random number of the specified type. In case of integer + types, the returned number is from the available value range for the + specified type. In case of floating-point types, the returned value is + from [0,1) range. + */ + operator uchar(); + /** @overload */ + operator schar(); + /** @overload */ + operator ushort(); + /** @overload */ + operator short(); + /** @overload */ + operator unsigned(); + /** @overload */ + operator int(); + /** @overload */ + operator float(); + /** @overload */ + operator double(); + + /** @brief returns a random integer sampled uniformly from [0, N). + + The methods transform the state using the MWC algorithm and return the + next random number. The first form is equivalent to RNG::next . The + second form returns the random number modulo N, which means that the + result is in the range [0, N) . + */ + unsigned operator()(); + /** @overload + @param N upper non-inclusive boundary of the returned random number. + */ + unsigned operator()(unsigned N); + + /** @brief returns uniformly distributed integer random number from [a,b) + range + + The methods transform the state using the MWC algorithm and return the + next uniformly-distributed random number of the specified type, deduced + from the input parameter type, from the range [a, b) . There is a nuance + illustrated by the following sample: + + @code{.cpp} + RNG rng; + + // always produces 0 + double a = rng.uniform(0, 1); + + // produces double from [0, 1) + double a1 = rng.uniform((double)0, (double)1); + + // produces float from [0, 1) + float b = rng.uniform(0.f, 1.f); + + // produces double from [0, 1) + double c = rng.uniform(0., 1.); + + // may cause compiler error because of ambiguity: + // RNG::uniform(0, (int)0.999999)? or RNG::uniform((double)0, 0.99999)? + double d = rng.uniform(0, 0.999999); + @endcode + + The compiler does not take into account the type of the variable to + which you assign the result of RNG::uniform . The only thing that + matters to the compiler is the type of a and b parameters. So, if you + want a floating-point random number, but the range boundaries are + integer numbers, either put dots in the end, if they are constants, or + use explicit type cast operators, as in the a1 initialization above. + @param a lower inclusive boundary of the returned random number. + @param b upper non-inclusive boundary of the returned random number. + */ + int uniform(int a, int b); + /** @overload */ + float uniform(float a, float b); + /** @overload */ + double uniform(double a, double b); + + /** @brief Fills arrays with random numbers. + + @param mat 2D or N-dimensional matrix; currently matrices with more than + 4 channels are not supported by the methods, use Mat::reshape as a + possible workaround. + @param distType distribution type, RNG::UNIFORM or RNG::NORMAL. + @param a first distribution parameter; in case of the uniform + distribution, this is an inclusive lower boundary, in case of the normal + distribution, this is a mean value. + @param b second distribution parameter; in case of the uniform + distribution, this is a non-inclusive upper boundary, in case of the + normal distribution, this is a standard deviation (diagonal of the + standard deviation matrix or the full standard deviation matrix). + @param saturateRange pre-saturation flag; for uniform distribution only; + if true, the method will first convert a and b to the acceptable value + range (according to the mat datatype) and then will generate uniformly + distributed random numbers within the range [saturate(a), saturate(b)), + if saturateRange=false, the method will generate uniformly distributed + random numbers in the original range [a, b) and then will saturate them, + it means, for example, that + theRNG().fill(mat_8u, RNG::UNIFORM, -DBL_MAX, DBL_MAX) will likely + produce array mostly filled with 0's and 255's, since the range (0, 255) + is significantly smaller than [-DBL_MAX, DBL_MAX). + + Each of the methods fills the matrix with the random values from the + specified distribution. As the new numbers are generated, the RNG state + is updated accordingly. In case of multiple-channel images, every + channel is filled independently, which means that RNG cannot generate + samples from the multi-dimensional Gaussian distribution with + non-diagonal covariance matrix directly. To do that, the method + generates samples from multi-dimensional standard Gaussian distribution + with zero mean and identity covariation matrix, and then transforms them + using transform to get samples from the specified Gaussian distribution. + */ + void fill(InputOutputArray mat, int distType, InputArray a, InputArray b, + bool saturateRange = false); + + /** @brief Returns the next random number sampled from the Gaussian + distribution + @param sigma standard deviation of the distribution. + + The method transforms the state using the MWC algorithm and returns the + next random number from the Gaussian distribution N(0,sigma) . That is, + the mean value of the returned random numbers is zero and the standard + deviation is the specified sigma . + */ + double gaussian(double sigma); + + uint64 state; + + bool operator==(const RNG &other) const; +}; + +/** @brief Mersenne Twister random number generator + +Inspired by +http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c +@todo document +*/ +class CV_EXPORTS RNG_MT19937 { +public: + RNG_MT19937(); + RNG_MT19937(unsigned s); + void seed(unsigned s); + + unsigned next(); + + operator int(); + operator unsigned(); + operator float(); + operator double(); + + unsigned operator()(unsigned N); + unsigned operator()(); + + /** @brief returns uniformly distributed integer random number from [a,b) + * range*/ + int uniform(int a, int b); + /** @brief returns uniformly distributed floating-point random number from + * [a,b) range*/ + float uniform(float a, float b); + /** @brief returns uniformly distributed double-precision floating-point + * random number from [a,b) range*/ + double uniform(double a, double b); + +private: + enum PeriodParameters { N = 624, M = 397 }; + unsigned state[N]; + int mti; +}; + +//! @} core_array + +//! @addtogroup core_cluster +//! @{ + +//! k-means flags +enum KmeansFlags { + /** Select random initial centers in each attempt.*/ + KMEANS_RANDOM_CENTERS = 0, + /** Use kmeans++ center initialization by Arthur and Vassilvitskii + [Arthur2007].*/ + KMEANS_PP_CENTERS = 2, + /** During the first (and possibly the only) attempt, use the + user-supplied labels instead of computing them from the initial centers. + For the second and further attempts, use the random or semi-random centers. + Use one of KMEANS_\*_CENTERS flag to specify the exact method.*/ + KMEANS_USE_INITIAL_LABELS = 1 +}; + +/** @example samples/cpp/kmeans.cpp +An example on k-means clustering +*/ + +/** @brief Finds centers of clusters and groups input samples around the +clusters. + +The function kmeans implements a k-means algorithm that finds the centers of +cluster_count clusters and groups the input samples around the clusters. As an +output, \f$\texttt{bestLabels}_i\f$ contains a 0-based cluster index for the +sample stored in the \f$i^{th}\f$ row of the samples matrix. + +@note +- (Python) An example on k-means clustering can be found at + opencv_source_code/samples/python/kmeans.py +@param data Data for clustering. An array of N-Dimensional points with float +coordinates is needed. Examples of this array can be: +- Mat points(count, 2, CV_32F); +- Mat points(count, 1, CV_32FC2); +- Mat points(1, count, CV_32FC2); +- std::vector\ points(sampleCount); +@param K Number of clusters to split the set by. +@param bestLabels Input/output integer array that stores the cluster indices for +every sample. +@param criteria The algorithm termination criteria, that is, the maximum number +of iterations and/or the desired accuracy. The accuracy is specified as +criteria.epsilon. As soon as each of the cluster centers moves by less than +criteria.epsilon on some iteration, the algorithm stops. +@param attempts Flag to specify the number of times the algorithm is executed +using different initial labellings. The algorithm returns the labels that yield +the best compactness (see the last function parameter). +@param flags Flag that can take values of cv::KmeansFlags +@param centers Output matrix of the cluster centers, one row per each cluster +center. +@return The function returns the compactness measure that is computed as +\f[\sum _i \| \texttt{samples} _i - \texttt{centers} _{ \texttt{labels} _i} \| +^2\f] after every attempt. The best (minimum) value is chosen and the +corresponding labels and the compactness value are returned by the function. +Basically, you can use only the core of the function, set the number of attempts +to 1, initialize labels each time using a custom algorithm, pass them with the ( +flags = #KMEANS_USE_INITIAL_LABELS ) flag, and then choose the best +(most-compact) clustering. +*/ +CV_EXPORTS_W double kmeans(InputArray data, int K, InputOutputArray bestLabels, + TermCriteria criteria, int attempts, int flags, + OutputArray centers = noArray()); + +//! @} core_cluster + +//! @addtogroup core_basic +//! @{ + +/////////////////////////////// Formatted output of cv::Mat +////////////////////////////// + +/** @todo document */ +class CV_EXPORTS Formatted { +public: + virtual const char *next() = 0; + virtual void reset() = 0; + virtual ~Formatted(); +}; + +/** @todo document */ +class CV_EXPORTS Formatter { +public: + enum FormatType { + FMT_DEFAULT = 0, + FMT_MATLAB = 1, + FMT_CSV = 2, + FMT_PYTHON = 3, + FMT_NUMPY = 4, + FMT_C = 5 + }; + + virtual ~Formatter(); + + virtual Ptr format(const Mat &mtx) const = 0; + + virtual void set16fPrecision(int p = 4) = 0; + virtual void set32fPrecision(int p = 8) = 0; + virtual void set64fPrecision(int p = 16) = 0; + virtual void setMultiline(bool ml = true) = 0; + + static Ptr get(Formatter::FormatType fmt = FMT_DEFAULT); +}; + +static inline String &operator<<(String &out, Ptr fmtd) { + fmtd->reset(); + for (const char *str = fmtd->next(); str; str = fmtd->next()) + out += cv::String(str); + return out; +} + +static inline String &operator<<(String &out, const Mat &mtx) { + return out << Formatter::get()->format(mtx); +} + +//////////////////////////////////////// Algorithm +/////////////////////////////////////// + +class CV_EXPORTS Algorithm; + +template struct ParamType {}; + +/** @brief This is a base class for all more or less complex algorithms in +OpenCV + +especially for classes of algorithms, for which there can be multiple +implementations. The examples are stereo correspondence (for which there are +algorithms like block matching, semi-global block matching, graph-cut etc.), +background subtraction (which can be done using mixture-of-gaussians models, +codebook-based algorithm etc.), optical flow (block matching, Lucas-Kanade, +Horn-Schunck etc.). + +Here is example of SimpleBlobDetector use in your application via Algorithm +interface: +@snippet snippets/core_various.cpp Algorithm +*/ +class CV_EXPORTS_W Algorithm { +public: + Algorithm(); + virtual ~Algorithm(); + + /** @brief Clears the algorithm state + */ + CV_WRAP virtual void clear() {} + + /** @brief Stores algorithm parameters in a file storage + */ + CV_WRAP virtual void write(FileStorage &fs) const { CV_UNUSED(fs); } + + /** + * @overload + */ + CV_WRAP void write(FileStorage &fs, const String &name) const; +#if CV_VERSION_MAJOR < 5 + /** @deprecated */ + void write(const Ptr &fs, const String &name = String()) const; +#endif + + /** @brief Reads algorithm parameters from a file storage + */ + CV_WRAP virtual void read(const FileNode &fn) { CV_UNUSED(fn); } + + /** @brief Returns true if the Algorithm is empty (e.g. in the very beginning + * or after unsuccessful read + */ + CV_WRAP virtual bool empty() const { return false; } + + /** @brief Reads algorithm from the file node + + This is static template method of Algorithm. It's usage is following (in the + case of SVM): + @code + cv::FileStorage fsRead("example.xml", FileStorage::READ); + Ptr svm = Algorithm::read(fsRead.root()); + @endcode + In order to make this method work, the derived class must overwrite + Algorithm::read(const FileNode& fn) and also have static create() method + without parameters (or with all the optional parameters) + */ + template static Ptr<_Tp> read(const FileNode &fn) { + Ptr<_Tp> obj = _Tp::create(); + obj->read(fn); + return !obj->empty() ? obj : Ptr<_Tp>(); + } + + /** @brief Loads algorithm from the file + + @param filename Name of the file to read. + @param objname The optional name of the node to read (if empty, the first + top-level node will be used) + + This is static template method of Algorithm. It's usage is following (in the + case of SVM): + @code + Ptr svm = Algorithm::load("my_svm_model.xml"); + @endcode + In order to make this method work, the derived class must overwrite + Algorithm::read(const FileNode& fn). + */ + template + static Ptr<_Tp> load(const String &filename, + const String &objname = String()) { + FileStorage fs(filename, FileStorage::READ); + CV_Assert(fs.isOpened()); + FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname]; + if (fn.empty()) + return Ptr<_Tp>(); + Ptr<_Tp> obj = _Tp::create(); + obj->read(fn); + return !obj->empty() ? obj : Ptr<_Tp>(); + } + + /** @brief Loads algorithm from a String + + @param strModel The string variable containing the model you want to load. + @param objname The optional name of the node to read (if empty, the first + top-level node will be used) + + This is static template method of Algorithm. It's usage is following (in the + case of SVM): + @code + Ptr svm = Algorithm::loadFromString(myStringModel); + @endcode + */ + template + static Ptr<_Tp> loadFromString(const String &strModel, + const String &objname = String()) { + FileStorage fs(strModel, FileStorage::READ + FileStorage::MEMORY); + FileNode fn = objname.empty() ? fs.getFirstTopLevelNode() : fs[objname]; + Ptr<_Tp> obj = _Tp::create(); + obj->read(fn); + return !obj->empty() ? obj : Ptr<_Tp>(); + } + + /** Saves the algorithm to a file. + In order to make this method work, the derived class must implement + Algorithm::write(FileStorage& fs). */ + CV_WRAP virtual void save(const String &filename) const; + + /** Returns the algorithm string identifier. + This string is used as top level xml/yml node tag when the object is saved to + a file or string. */ + CV_WRAP virtual String getDefaultName() const; + +protected: + void writeFormat(FileStorage &fs) const; +}; + +enum struct Param { + INT = 0, + BOOLEAN = 1, + REAL = 2, + STRING = 3, + MAT = 4, + MAT_VECTOR = 5, + ALGORITHM = 6, + FLOAT = 7, + UNSIGNED_INT = 8, + UINT64 = 9, + UCHAR = 11, + SCALAR = 12 +}; + +template <> struct ParamType { + typedef bool const_param_type; + typedef bool member_type; + + static const Param type = Param::BOOLEAN; +}; + +template <> struct ParamType { + typedef int const_param_type; + typedef int member_type; + + static const Param type = Param::INT; +}; + +template <> struct ParamType { + typedef double const_param_type; + typedef double member_type; + + static const Param type = Param::REAL; +}; + +template <> struct ParamType { + typedef const String &const_param_type; + typedef String member_type; + + static const Param type = Param::STRING; +}; + +template <> struct ParamType { + typedef const Mat &const_param_type; + typedef Mat member_type; + + static const Param type = Param::MAT; +}; + +template <> struct ParamType> { + typedef const std::vector &const_param_type; + typedef std::vector member_type; + + static const Param type = Param::MAT_VECTOR; +}; + +template <> struct ParamType { + typedef const Ptr &const_param_type; + typedef Ptr member_type; + + static const Param type = Param::ALGORITHM; +}; + +template <> struct ParamType { + typedef float const_param_type; + typedef float member_type; + + static const Param type = Param::FLOAT; +}; + +template <> struct ParamType { + typedef unsigned const_param_type; + typedef unsigned member_type; + + static const Param type = Param::UNSIGNED_INT; +}; + +template <> struct ParamType { + typedef uint64 const_param_type; + typedef uint64 member_type; + + static const Param type = Param::UINT64; +}; + +template <> struct ParamType { + typedef uchar const_param_type; + typedef uchar member_type; + + static const Param type = Param::UCHAR; +}; + +template <> struct ParamType { + typedef const Scalar &const_param_type; + typedef Scalar member_type; + + static const Param type = Param::SCALAR; +}; + +template +struct ParamType<_Tp, typename std::enable_if::value>::type> { + typedef typename std::underlying_type<_Tp>::type const_param_type; + typedef typename std::underlying_type<_Tp>::type member_type; + + static const Param type = Param::INT; +}; + +//! @} core_basic + +} // namespace cv + +#include "opencv2/core/cvstd.inl.hpp" +#include "opencv2/core/operations.hpp" +#include "opencv2/core/optim.hpp" +#include "opencv2/core/utility.hpp" + +#endif /*OPENCV_CORE_HPP*/ diff --git a/third-party/include/opencv2/core/affine.hpp b/third-party/include/opencv2/core/affine.hpp new file mode 100644 index 000000000..f4aabb409 --- /dev/null +++ b/third-party/include/opencv2/core/affine.hpp @@ -0,0 +1,676 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this +license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without +modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's 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. +// +// * The name of the copyright holders may not be used to endorse or promote +products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "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 Intel Corporation or contributors 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. +// +//M*/ + +#ifndef OPENCV_CORE_AFFINE3_HPP +#define OPENCV_CORE_AFFINE3_HPP + +#ifdef __cplusplus + +#include + +namespace cv { + +//! @addtogroup core_eigen +//! @{ + +/** @brief Affine transform + * + * It represents a 4x4 homogeneous transformation matrix \f$T\f$ + * + * \f[T = + * \begin{bmatrix} + * R & t\\ + * 0 & 1\\ + * \end{bmatrix} + * \f] + * + * where \f$R\f$ is a 3x3 rotation matrix and \f$t\f$ is a 3x1 translation + * vector. + * + * You can specify \f$R\f$ either by a 3x3 rotation matrix or by a 3x1 rotation + * vector, which is converted to a 3x3 rotation matrix by the Rodrigues formula. + * + * To construct a matrix \f$T\f$ representing first rotation around the axis + * \f$r\f$ with rotation angle \f$|r|\f$ in radian (right hand rule) and then + * translation by the vector \f$t\f$, you can use + * + * @code + * cv::Vec3f r, t; + * cv::Affine3f T(r, t); + * @endcode + * + * If you already have the rotation matrix \f$R\f$, then you can use + * + * @code + * cv::Matx33f R; + * cv::Affine3f T(R, t); + * @endcode + * + * To extract the rotation matrix \f$R\f$ from \f$T\f$, use + * + * @code + * cv::Matx33f R = T.rotation(); + * @endcode + * + * To extract the translation vector \f$t\f$ from \f$T\f$, use + * + * @code + * cv::Vec3f t = T.translation(); + * @endcode + * + * To extract the rotation vector \f$r\f$ from \f$T\f$, use + * + * @code + * cv::Vec3f r = T.rvec(); + * @endcode + * + * Note that since the mapping from rotation vectors to rotation matrices + * is many to one. The returned rotation vector is not necessarily the one + * you used before to set the matrix. + * + * If you have two transformations \f$T = T_1 * T_2\f$, use + * + * @code + * cv::Affine3f T, T1, T2; + * T = T2.concatenate(T1); + * @endcode + * + * To get the inverse transform of \f$T\f$, use + * + * @code + * cv::Affine3f T, T_inv; + * T_inv = T.inv(); + * @endcode + * + */ +template class Affine3 { +public: + typedef T float_type; + typedef Matx Mat3; + typedef Matx Mat4; + typedef Vec Vec3; + + //! Default constructor. It represents a 4x4 identity matrix. + Affine3(); + + //! Augmented affine matrix + Affine3(const Mat4 &affine); + + /** + * The resulting 4x4 matrix is + * + * \f[ + * \begin{bmatrix} + * R & t\\ + * 0 & 1\\ + * \end{bmatrix} + * \f] + * + * @param R 3x3 rotation matrix. + * @param t 3x1 translation vector. + */ + Affine3(const Mat3 &R, const Vec3 &t = Vec3::all(0)); + + /** + * Rodrigues vector. + * + * The last row of the current matrix is set to [0,0,0,1]. + * + * @param rvec 3x1 rotation vector. Its direction indicates the rotation axis + * and its length indicates the rotation angle in radian (using right hand + * rule). + * @param t 3x1 translation vector. + */ + Affine3(const Vec3 &rvec, const Vec3 &t = Vec3::all(0)); + + /** + * Combines all constructors above. Supports 4x4, 3x4, 3x3, 1x3, 3x1 sizes of + * data matrix. + * + * The last row of the current matrix is set to [0,0,0,1] when data is not + * 4x4. + * + * @param data 1-channel matrix. + * when it is 4x4, it is copied to the current matrix and t is not + * used. When it is 3x4, it is copied to the upper part 3x4 of the current + * matrix and t is not used. When it is 3x3, it is copied to the upper left + * 3x3 part of the current matrix. When it is 3x1 or 1x3, it is treated as a + * rotation vector and the Rodrigues formula is used to compute a 3x3 rotation + * matrix. + * @param t 3x1 translation vector. It is used only when data is neither 4x4 + * nor 3x4. + */ + explicit Affine3(const Mat &data, const Vec3 &t = Vec3::all(0)); + + //! From 16-element array + explicit Affine3(const float_type *vals); + + //! Create an 4x4 identity transform + static Affine3 Identity(); + + /** + * Rotation matrix. + * + * Copy the rotation matrix to the upper left 3x3 part of the current matrix. + * The remaining elements of the current matrix are not changed. + * + * @param R 3x3 rotation matrix. + * + */ + void rotation(const Mat3 &R); + + /** + * Rodrigues vector. + * + * It sets the upper left 3x3 part of the matrix. The remaining part is + * unaffected. + * + * @param rvec 3x1 rotation vector. The direction indicates the rotation axis + * and its length indicates the rotation angle in radian (using the right + * thumb convention). + */ + void rotation(const Vec3 &rvec); + + /** + * Combines rotation methods above. Supports 3x3, 1x3, 3x1 sizes of data + * matrix. + * + * It sets the upper left 3x3 part of the matrix. The remaining part is + * unaffected. + * + * @param data 1-channel matrix. + * When it is a 3x3 matrix, it sets the upper left 3x3 part of the + * current matrix. When it is a 1x3 or 3x1 matrix, it is used as a rotation + * vector. The Rodrigues formula is used to compute the rotation matrix and + * sets the upper left 3x3 part of the current matrix. + */ + void rotation(const Mat &data); + + /** + * Copy the 3x3 matrix L to the upper left part of the current matrix + * + * It sets the upper left 3x3 part of the matrix. The remaining part is + * unaffected. + * + * @param L 3x3 matrix. + */ + void linear(const Mat3 &L); + + /** + * Copy t to the first three elements of the last column of the current matrix + * + * It sets the upper right 3x1 part of the matrix. The remaining part is + * unaffected. + * + * @param t 3x1 translation vector. + */ + void translation(const Vec3 &t); + + //! @return the upper left 3x3 part + Mat3 rotation() const; + + //! @return the upper left 3x3 part + Mat3 linear() const; + + //! @return the upper right 3x1 part + Vec3 translation() const; + + //! Rodrigues vector. + //! @return a vector representing the upper left 3x3 rotation matrix of the + //! current matrix. + //! @warning Since the mapping between rotation vectors and rotation matrices + //! is many to one, + //! this function returns only one rotation vector that represents + //! the current rotation matrix, which is not necessarily the same + //! one set by `rotation(const Vec3& rvec)`. + Vec3 rvec() const; + + //! @return the inverse of the current matrix. + Affine3 inv(int method = cv::DECOMP_SVD) const; + + //! a.rotate(R) is equivalent to Affine(R, 0) * a; + Affine3 rotate(const Mat3 &R) const; + + //! a.rotate(rvec) is equivalent to Affine(rvec, 0) * a; + Affine3 rotate(const Vec3 &rvec) const; + + //! a.translate(t) is equivalent to Affine(E, t) * a, where E is an identity + //! matrix + Affine3 translate(const Vec3 &t) const; + + //! a.concatenate(affine) is equivalent to affine * a; + Affine3 concatenate(const Affine3 &affine) const; + + template operator Affine3() const; + + template Affine3 cast() const; + + Mat4 matrix; + +#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H + Affine3( + const Eigen::Transform &affine); + Affine3(const Eigen::Transform &affine); + operator Eigen::Transform() const; + operator Eigen::Transform() const; +#endif +}; + +template +static Affine3 operator*(const Affine3 &affine1, + const Affine3 &affine2); + +//! V is a 3-element vector with member fields x, y and z +template +static V operator*(const Affine3 &affine, const V &vector); + +typedef Affine3 Affine3f; +typedef Affine3 Affine3d; + +static Vec3f operator*(const Affine3f &affine, const Vec3f &vector); +static Vec3d operator*(const Affine3d &affine, const Vec3d &vector); + +template class DataType> { +public: + typedef Affine3<_Tp> value_type; + typedef Affine3::work_type> work_type; + typedef _Tp channel_type; + + enum { + generic_type = 0, + channels = 16, + fmt = traits::SafeFmt::fmt + ((channels - 1) << 8) +#ifdef OPENCV_TRAITS_ENABLE_DEPRECATED + , + depth = DataType::depth, + type = CV_MAKETYPE(depth, channels) +#endif + }; + + typedef Vec vec_type; +}; + +namespace traits { +template struct Depth> { + enum { value = Depth<_Tp>::value }; +}; +template struct Type> { + enum { value = CV_MAKETYPE(Depth<_Tp>::value, 16) }; +}; +} // namespace traits + +//! @} core + +} // namespace cv + +//! @cond IGNORED + +/////////////////////////////////////////////////////////////////////////////////// +// Implementation + +template inline cv::Affine3::Affine3() : matrix(Mat4::eye()) {} + +template +inline cv::Affine3::Affine3(const Mat4 &affine) : matrix(affine) {} + +template +inline cv::Affine3::Affine3(const Mat3 &R, const Vec3 &t) { + rotation(R); + translation(t); + matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; + matrix.val[15] = 1; +} + +template +inline cv::Affine3::Affine3(const Vec3 &_rvec, const Vec3 &t) { + rotation(_rvec); + translation(t); + matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; + matrix.val[15] = 1; +} + +template +inline cv::Affine3::Affine3(const cv::Mat &data, const Vec3 &t) { + CV_Assert(data.type() == cv::traits::Type::value); + CV_Assert(data.channels() == 1); + + if (data.cols == 4 && data.rows == 4) { + data.copyTo(matrix); + return; + } else if (data.cols == 4 && data.rows == 3) { + rotation(data(Rect(0, 0, 3, 3))); + translation(data(Rect(3, 0, 1, 3))); + } else { + rotation(data); + translation(t); + } + + matrix.val[12] = matrix.val[13] = matrix.val[14] = 0; + matrix.val[15] = 1; +} + +template +inline cv::Affine3::Affine3(const float_type *vals) : matrix(vals) {} + +template inline cv::Affine3 cv::Affine3::Identity() { + return Affine3(cv::Affine3::Mat4::eye()); +} + +template inline void cv::Affine3::rotation(const Mat3 &R) { + linear(R); +} + +template inline void cv::Affine3::rotation(const Vec3 &_rvec) { + double theta = norm(_rvec); + + if (theta < DBL_EPSILON) + rotation(Mat3::eye()); + else { + double c = std::cos(theta); + double s = std::sin(theta); + double c1 = 1. - c; + double itheta = (theta != 0) ? 1. / theta : 0.; + + Point3_ r = _rvec * itheta; + + Mat3 rrt(r.x * r.x, r.x * r.y, r.x * r.z, r.x * r.y, r.y * r.y, r.y * r.z, + r.x * r.z, r.y * r.z, r.z * r.z); + Mat3 r_x(0, -r.z, r.y, r.z, 0, -r.x, -r.y, r.x, 0); + + // R = cos(theta)*I + (1 - cos(theta))*r*rT + sin(theta)*[r_x] + // where [r_x] is [0 -rz ry; rz 0 -rx; -ry rx 0] + Mat3 R = c * Mat3::eye() + c1 * rrt + s * r_x; + + rotation(R); + } +} + +// Combines rotation methods above. Supports 3x3, 1x3, 3x1 sizes of data matrix; +template +inline void cv::Affine3::rotation(const cv::Mat &data) { + CV_Assert(data.type() == cv::traits::Type::value); + CV_Assert(data.channels() == 1); + + if (data.cols == 3 && data.rows == 3) { + Mat3 R; + data.copyTo(R); + rotation(R); + } else if ((data.cols == 3 && data.rows == 1) || + (data.cols == 1 && data.rows == 3)) { + Vec3 _rvec; + data.reshape(1, 3).copyTo(_rvec); + rotation(_rvec); + } else + CV_Error(Error::StsError, "Input matrix can only be 3x3, 1x3 or 3x1"); +} + +template inline void cv::Affine3::linear(const Mat3 &L) { + matrix.val[0] = L.val[0]; + matrix.val[1] = L.val[1]; + matrix.val[2] = L.val[2]; + matrix.val[4] = L.val[3]; + matrix.val[5] = L.val[4]; + matrix.val[6] = L.val[5]; + matrix.val[8] = L.val[6]; + matrix.val[9] = L.val[7]; + matrix.val[10] = L.val[8]; +} + +template inline void cv::Affine3::translation(const Vec3 &t) { + matrix.val[3] = t[0]; + matrix.val[7] = t[1]; + matrix.val[11] = t[2]; +} + +template +inline typename cv::Affine3::Mat3 cv::Affine3::rotation() const { + return linear(); +} + +template +inline typename cv::Affine3::Mat3 cv::Affine3::linear() const { + typename cv::Affine3::Mat3 R; + R.val[0] = matrix.val[0]; + R.val[1] = matrix.val[1]; + R.val[2] = matrix.val[2]; + R.val[3] = matrix.val[4]; + R.val[4] = matrix.val[5]; + R.val[5] = matrix.val[6]; + R.val[6] = matrix.val[8]; + R.val[7] = matrix.val[9]; + R.val[8] = matrix.val[10]; + return R; +} + +template +inline typename cv::Affine3::Vec3 cv::Affine3::translation() const { + return Vec3(matrix.val[3], matrix.val[7], matrix.val[11]); +} + +template +inline typename cv::Affine3::Vec3 cv::Affine3::rvec() const { + cv::Vec3d w; + cv::Matx33d u, vt, R = rotation(); + cv::SVD::compute(R, w, u, vt, cv::SVD::FULL_UV + cv::SVD::MODIFY_A); + R = u * vt; + + double rx = R.val[7] - R.val[5]; + double ry = R.val[2] - R.val[6]; + double rz = R.val[3] - R.val[1]; + + double s = std::sqrt((rx * rx + ry * ry + rz * rz) * 0.25); + double c = (R.val[0] + R.val[4] + R.val[8] - 1) * 0.5; + c = c > 1.0 ? 1.0 : c < -1.0 ? -1.0 : c; + double theta = std::acos(c); + + if (s < 1e-5) { + if (c > 0) + rx = ry = rz = 0; + else { + double t; + t = (R.val[0] + 1) * 0.5; + rx = std::sqrt(std::max(t, 0.0)); + t = (R.val[4] + 1) * 0.5; + ry = std::sqrt(std::max(t, 0.0)) * (R.val[1] < 0 ? -1.0 : 1.0); + t = (R.val[8] + 1) * 0.5; + rz = std::sqrt(std::max(t, 0.0)) * (R.val[2] < 0 ? -1.0 : 1.0); + + if (fabs(rx) < fabs(ry) && fabs(rx) < fabs(rz) && + (R.val[5] > 0) != (ry * rz > 0)) + rz = -rz; + theta /= std::sqrt(rx * rx + ry * ry + rz * rz); + rx *= theta; + ry *= theta; + rz *= theta; + } + } else { + double vth = 1 / (2 * s); + vth *= theta; + rx *= vth; + ry *= vth; + rz *= vth; + } + + return cv::Vec3d(rx, ry, rz); +} + +template +inline cv::Affine3 cv::Affine3::inv(int method) const { + return matrix.inv(method); +} + +template +inline cv::Affine3 cv::Affine3::rotate(const Mat3 &R) const { + Mat3 Lc = linear(); + Vec3 tc = translation(); + Mat4 result; + result.val[12] = result.val[13] = result.val[14] = 0; + result.val[15] = 1; + + for (int j = 0; j < 3; ++j) { + for (int i = 0; i < 3; ++i) { + float_type value = 0; + for (int k = 0; k < 3; ++k) + value += R(j, k) * Lc(k, i); + result(j, i) = value; + } + + result(j, 3) = R.row(j).dot(tc.t()); + } + return result; +} + +template +inline cv::Affine3 cv::Affine3::rotate(const Vec3 &_rvec) const { + return rotate(Affine3f(_rvec).rotation()); +} + +template +inline cv::Affine3 cv::Affine3::translate(const Vec3 &t) const { + Mat4 m = matrix; + m.val[3] += t[0]; + m.val[7] += t[1]; + m.val[11] += t[2]; + return m; +} + +template +inline cv::Affine3 +cv::Affine3::concatenate(const Affine3 &affine) const { + return (*this).rotate(affine.rotation()).translate(affine.translation()); +} + +template +template +inline cv::Affine3::operator Affine3() const { + return Affine3(matrix); +} + +template +template +inline cv::Affine3 cv::Affine3::cast() const { + return Affine3(matrix); +} + +template +inline cv::Affine3 cv::operator*(const cv::Affine3 &affine1, + const cv::Affine3 &affine2) { + return affine2.concatenate(affine1); +} + +template +inline V cv::operator*(const cv::Affine3 &affine, const V &v) { + const typename Affine3::Mat4 &m = affine.matrix; + + V r; + r.x = m.val[0] * v.x + m.val[1] * v.y + m.val[2] * v.z + m.val[3]; + r.y = m.val[4] * v.x + m.val[5] * v.y + m.val[6] * v.z + m.val[7]; + r.z = m.val[8] * v.x + m.val[9] * v.y + m.val[10] * v.z + m.val[11]; + return r; +} + +static inline cv::Vec3f cv::operator*(const cv::Affine3f &affine, + const cv::Vec3f &v) { + const cv::Matx44f &m = affine.matrix; + cv::Vec3f r; + r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[2] * v[2] + m.val[3]; + r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[6] * v[2] + m.val[7]; + r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11]; + return r; +} + +static inline cv::Vec3d cv::operator*(const cv::Affine3d &affine, + const cv::Vec3d &v) { + const cv::Matx44d &m = affine.matrix; + cv::Vec3d r; + r.val[0] = m.val[0] * v[0] + m.val[1] * v[1] + m.val[2] * v[2] + m.val[3]; + r.val[1] = m.val[4] * v[0] + m.val[5] * v[1] + m.val[6] * v[2] + m.val[7]; + r.val[2] = m.val[8] * v[0] + m.val[9] * v[1] + m.val[10] * v[2] + m.val[11]; + return r; +} + +#if defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H + +template +inline cv::Affine3::Affine3( + const Eigen::Transform &affine) { + cv::Mat(4, 4, cv::traits::Type::value, affine.matrix().data()) + .copyTo(matrix); +} + +template +inline cv::Affine3::Affine3( + const Eigen::Transform &affine) { + Eigen::Transform a = affine; + cv::Mat(4, 4, cv::traits::Type::value, a.matrix().data()).copyTo(matrix); +} + +template +inline cv::Affine3::operator Eigen::Transform() const { + Eigen::Transform r; + cv::Mat hdr(4, 4, cv::traits::Type::value, r.matrix().data()); + cv::Mat(matrix, false).copyTo(hdr); + return r; +} + +template +inline cv::Affine3::operator Eigen::Transform() const { + return this + ->operator Eigen::Transform(); +} + +#endif /* defined EIGEN_WORLD_VERSION && defined EIGEN_GEOMETRY_MODULE_H */ + +//! @endcond + +#endif /* __cplusplus */ + +#endif /* OPENCV_CORE_AFFINE3_HPP */ diff --git a/third-party/include/opencv2/core/async.hpp b/third-party/include/opencv2/core/async.hpp new file mode 100644 index 000000000..9c48f1625 --- /dev/null +++ b/third-party/include/opencv2/core/async.hpp @@ -0,0 +1,107 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level +// directory of this distribution and at http://opencv.org/license.html. + +#ifndef OPENCV_CORE_ASYNC_HPP +#define OPENCV_CORE_ASYNC_HPP + +#include + +// #include +#include + +namespace cv { + +/** @addtogroup core_async + +@{ +*/ + +/** @brief Returns result of asynchronous operations + +Object has attached asynchronous state. +Assignment operator doesn't clone asynchronous state (it is shared between all +instances). + +Result can be fetched via get() method only once. + +*/ +class CV_EXPORTS_W AsyncArray { +public: + ~AsyncArray() CV_NOEXCEPT; + CV_WRAP AsyncArray() CV_NOEXCEPT; + AsyncArray(const AsyncArray &o) CV_NOEXCEPT; + AsyncArray &operator=(const AsyncArray &o) CV_NOEXCEPT; + CV_WRAP void release() CV_NOEXCEPT; + + /** Fetch the result. + @param[out] dst destination array + + Waits for result until container has valid result. + Throws exception if exception was stored as a result. + + Throws exception on invalid container state. + + @note Result or stored exception can be fetched only once. + */ + CV_WRAP void get(OutputArray dst) const; + + /** Retrieving the result with timeout + @param[out] dst destination array + @param[in] timeoutNs timeout in nanoseconds, -1 for infinite wait + + @returns true if result is ready, false if the timeout has expired + + @note Result or stored exception can be fetched only once. + */ + bool get(OutputArray dst, int64 timeoutNs) const; + + CV_WRAP inline bool get(OutputArray dst, double timeoutNs) const { + return get(dst, (int64)timeoutNs); + } + + bool wait_for(int64 timeoutNs) const; + + CV_WRAP inline bool wait_for(double timeoutNs) const { + return wait_for((int64)timeoutNs); + } + + CV_WRAP bool valid() const CV_NOEXCEPT; + + inline AsyncArray(AsyncArray &&o) { + p = o.p; + o.p = NULL; + } + inline AsyncArray &operator=(AsyncArray &&o) CV_NOEXCEPT { + std::swap(p, o.p); + return *this; + } + + template + inline bool get(OutputArray dst, + const std::chrono::duration<_Rep, _Period> &timeout) { + return get(dst, (int64)(std::chrono::nanoseconds(timeout).count())); + } + + template + inline bool wait_for(const std::chrono::duration<_Rep, _Period> &timeout) { + return wait_for((int64)(std::chrono::nanoseconds(timeout).count())); + } + +#if 0 + std::future getFutureMat() const; + std::future getFutureUMat() const; +#endif + + // PImpl + struct Impl; + friend struct Impl; + inline void *_getImpl() const CV_NOEXCEPT { return p; } + +protected: + Impl *p; +}; + +//! @} +} // namespace cv +#endif // OPENCV_CORE_ASYNC_HPP diff --git a/third-party/include/opencv2/core/base.hpp b/third-party/include/opencv2/core/base.hpp new file mode 100644 index 000000000..3dfa243df --- /dev/null +++ b/third-party/include/opencv2/core/base.hpp @@ -0,0 +1,735 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this +license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Copyright (C) 2014, Itseez Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without +modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's 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. +// +// * The name of the copyright holders may not be used to endorse or promote +products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "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 Intel Corporation or contributors 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. +// +//M*/ + +#ifndef OPENCV_CORE_BASE_HPP +#define OPENCV_CORE_BASE_HPP + +#ifndef __cplusplus +#error base.hpp header must be compiled as C++ +#endif + +#include "opencv2/opencv_modules.hpp" + +#include +#include + +#include "opencv2/core/cvdef.h" +#include "opencv2/core/cvstd.hpp" + +namespace cv { + +//! @addtogroup core_utils +//! @{ + +namespace Error { +//! error codes +enum Code { + StsOk = 0, //!< everything is ok + StsBackTrace = -1, //!< pseudo error for back trace + StsError = -2, //!< unknown /unspecified error + StsInternal = -3, //!< internal error (bad state) + StsNoMem = -4, //!< insufficient memory + StsBadArg = -5, //!< function arg/param is bad + StsBadFunc = -6, //!< unsupported function + StsNoConv = -7, //!< iteration didn't converge + StsAutoTrace = -8, //!< tracing + HeaderIsNull = -9, //!< image header is NULL + BadImageSize = -10, //!< image size is invalid + BadOffset = -11, //!< offset is invalid + BadDataPtr = -12, //!< + BadStep = -13, //!< image step is wrong, this may happen for a non-continuous + //!< matrix. + BadModelOrChSeq = -14, //!< + BadNumChannels = -15, //!< bad number of channels, for example, some functions + //!< accept only single channel matrices. + BadNumChannel1U = -16, //!< + BadDepth = -17, //!< input image depth is not supported by the function + BadAlphaChannel = -18, //!< + BadOrder = -19, //!< number of dimensions is out of range + BadOrigin = -20, //!< incorrect input origin + BadAlign = -21, //!< incorrect input align + BadCallBack = -22, //!< + BadTileSize = -23, //!< + BadCOI = -24, //!< input COI is not supported + BadROISize = -25, //!< incorrect input roi + MaskIsTiled = -26, //!< + StsNullPtr = -27, //!< null pointer + StsVecLengthErr = -28, //!< incorrect vector length + StsFilterStructContentErr = -29, //!< incorrect filter structure content + StsKernelStructContentErr = -30, //!< incorrect transform kernel content + StsFilterOffsetErr = -31, //!< incorrect filter offset value + StsBadSize = -201, //!< the input/output structure size is incorrect + StsDivByZero = -202, //!< division by zero + StsInplaceNotSupported = -203, //!< in-place operation is not supported + StsObjectNotFound = -204, //!< request can't be completed + StsUnmatchedFormats = -205, //!< formats of input/output arrays differ + StsBadFlag = -206, //!< flag is wrong or not supported + StsBadPoint = -207, //!< bad CvPoint + StsBadMask = -208, //!< bad format of mask (neither 8uC1 nor 8sC1) + StsUnmatchedSizes = -209, //!< sizes of input/output structures do not match + StsUnsupportedFormat = + -210, //!< the data format/type is not supported by the function + StsOutOfRange = -211, //!< some of parameters are out of range + StsParseError = -212, //!< invalid syntax/structure of the parsed file + StsNotImplemented = + -213, //!< the requested function/feature is not implemented + StsBadMemBlock = -214, //!< an allocated block has been corrupted + StsAssert = -215, //!< assertion failed + GpuNotSupported = -216, //!< no CUDA support + GpuApiCallError = -217, //!< GPU API call error + OpenGlNotSupported = -218, //!< no OpenGL support + OpenGlApiCallError = -219, //!< OpenGL API call error + OpenCLApiCallError = -220, //!< OpenCL API call error + OpenCLDoubleNotSupported = -221, + OpenCLInitError = -222, //!< OpenCL initialization error + OpenCLNoAMDBlasFft = -223 +}; +} // namespace Error + +//! @} core_utils + +//! @addtogroup core_array +//! @{ + +//! matrix decomposition types +enum DecompTypes { + /** Gaussian elimination with the optimal pivot element chosen. */ + DECOMP_LU = 0, + /** singular value decomposition (SVD) method; the system can be over-defined + and/or the matrix src1 can be singular */ + DECOMP_SVD = 1, + /** eigenvalue decomposition; the matrix src1 must be symmetrical */ + DECOMP_EIG = 2, + /** Cholesky \f$LL^T\f$ factorization; the matrix src1 must be symmetrical and + positively defined */ + DECOMP_CHOLESKY = 3, + /** QR factorization; the system can be over-defined and/or the matrix src1 + can be singular */ + DECOMP_QR = 4, + /** while all the previous flags are mutually exclusive, this flag can be used + together with any of the previous; it means that the normal equations + \f$\texttt{src1}^T\cdot\texttt{src1}\cdot\texttt{dst}=\texttt{src1}^T\texttt{src2}\f$ + are solved instead of the original system + \f$\texttt{src1}\cdot\texttt{dst}=\texttt{src2}\f$ */ + DECOMP_NORMAL = 16 +}; + +/** norm types + +src1 and src2 denote input arrays. +*/ + +enum NormTypes { + /** + \f[ + norm = \forkthree + {\|\texttt{src1}\|_{L_{\infty}} = \max _I | \texttt{src1} (I)|}{if + \(\texttt{normType} = \texttt{NORM_INF}\) } + {\|\texttt{src1}-\texttt{src2}\|_{L_{\infty}} = \max _I | \texttt{src1} (I) - + \texttt{src2} (I)|}{if \(\texttt{normType} = \texttt{NORM_INF}\) } + {\frac{\|\texttt{src1}-\texttt{src2}\|_{L_{\infty}} + }{\|\texttt{src2}\|_{L_{\infty}} }}{if \(\texttt{normType} = + \texttt{NORM_RELATIVE | NORM_INF}\) } + \f] + */ + NORM_INF = 1, + /** + \f[ + norm = \forkthree + {\| \texttt{src1} \| _{L_1} = \sum _I | \texttt{src1} (I)|}{if + \(\texttt{normType} = \texttt{NORM_L1}\)} { \| \texttt{src1} - \texttt{src2} + \| _{L_1} = \sum _I | \texttt{src1} (I) - \texttt{src2} (I)|}{if + \(\texttt{normType} = \texttt{NORM_L1}\) } { + \frac{\|\texttt{src1}-\texttt{src2}\|_{L_1} }{\|\texttt{src2}\|_{L_1}} }{if + \(\texttt{normType} = \texttt{NORM_RELATIVE | NORM_L1}\) } + \f]*/ + NORM_L1 = 2, + /** + \f[ + norm = \forkthree + { \| \texttt{src1} \| _{L_2} = \sqrt{\sum_I \texttt{src1}(I)^2} }{if + \(\texttt{normType} = \texttt{NORM_L2}\) } { \| \texttt{src1} - \texttt{src2} + \| _{L_2} = \sqrt{\sum_I (\texttt{src1}(I) - \texttt{src2}(I))^2} }{if + \(\texttt{normType} = \texttt{NORM_L2}\) } { + \frac{\|\texttt{src1}-\texttt{src2}\|_{L_2} }{\|\texttt{src2}\|_{L_2}} }{if + \(\texttt{normType} = \texttt{NORM_RELATIVE | NORM_L2}\) } + \f] + */ + NORM_L2 = 4, + /** + \f[ + norm = \forkthree + { \| \texttt{src1} \| _{L_2} ^{2} = \sum_I \texttt{src1}(I)^2} {if + \(\texttt{normType} = \texttt{NORM_L2SQR}\)} { \| \texttt{src1} - + \texttt{src2} \| _{L_2} ^{2} = \sum_I (\texttt{src1}(I) - \texttt{src2}(I))^2 + }{if \(\texttt{normType} = \texttt{NORM_L2SQR}\) } { + \left(\frac{\|\texttt{src1}-\texttt{src2}\|_{L_2} + }{\|\texttt{src2}\|_{L_2}}\right)^2 }{if \(\texttt{normType} = + \texttt{NORM_RELATIVE | NORM_L2SQR}\) } + \f] + */ + NORM_L2SQR = 5, + /** + In the case of one input array, calculates the Hamming distance of the array + from zero, In the case of two input arrays, calculates the Hamming distance + between the arrays. + */ + NORM_HAMMING = 6, + /** + Similar to NORM_HAMMING, but in the calculation, each two bits of the input + sequence will be added and treated as a single bit to be used in the same + calculation as NORM_HAMMING. + */ + NORM_HAMMING2 = 7, + NORM_TYPE_MASK = + 7, //!< bit-mask which can be used to separate norm type from norm flags + NORM_RELATIVE = 8, //!< flag + NORM_MINMAX = 32 //!< flag +}; + +//! comparison types +enum CmpTypes { + CMP_EQ = 0, //!< src1 is equal to src2. + CMP_GT = 1, //!< src1 is greater than src2. + CMP_GE = 2, //!< src1 is greater than or equal to src2. + CMP_LT = 3, //!< src1 is less than src2. + CMP_LE = 4, //!< src1 is less than or equal to src2. + CMP_NE = 5 //!< src1 is unequal to src2. +}; + +//! generalized matrix multiplication flags +enum GemmFlags { + GEMM_1_T = 1, //!< transposes src1 + GEMM_2_T = 2, //!< transposes src2 + GEMM_3_T = 4 //!< transposes src3 +}; + +enum DftFlags { + /** performs an inverse 1D or 2D transform instead of the default forward + transform. */ + DFT_INVERSE = 1, + /** scales the result: divide it by the number of array elements. Normally, it + is combined with DFT_INVERSE. */ + DFT_SCALE = 2, + /** performs a forward or inverse transform of every individual row of the + input matrix; this flag enables you to transform multiple vectors + simultaneously and can be used to decrease the overhead (which is sometimes + several times larger than the processing itself) to perform 3D and + higher-dimensional transformations and so forth.*/ + DFT_ROWS = 4, + /** performs a forward transformation of 1D or 2D real array; the result, + though being a complex array, has complex-conjugate symmetry (*CCS*, see + the function description below for details), and such an array can be + packed into a real array of the same size as input, which is the fastest + option and which is what the function does by default; however, you may + wish to get a full complex array (for simpler spectrum analysis, and so on) + - pass the flag to enable the function to produce a full-size complex + output array. */ + DFT_COMPLEX_OUTPUT = 16, + /** performs an inverse transformation of a 1D or 2D complex array; the + result is normally a complex array of the same size, however, if the input + array has conjugate-complex symmetry (for example, it is a result of + forward transformation with DFT_COMPLEX_OUTPUT flag), the output is a real + array; while the function itself does not check whether the input is + symmetrical or not, you can pass the flag and then the function will assume + the symmetry and produce the real output array (note that when the input is + packed into a real array and inverse transformation is executed, the + function treats the input as a packed complex-conjugate symmetrical array, + and the output will also be a real array). */ + DFT_REAL_OUTPUT = 32, + /** specifies that input is complex input. If this flag is set, the input must + have 2 channels. On the other hand, for backwards compatibility reason, if + input has 2 channels, input is already considered complex. */ + DFT_COMPLEX_INPUT = 64, + /** performs an inverse 1D or 2D transform instead of the default forward + transform. */ + DCT_INVERSE = DFT_INVERSE, + /** performs a forward or inverse transform of every individual row of the + input matrix. This flag enables you to transform multiple vectors + simultaneously and can be used to decrease the overhead (which is sometimes + several times larger than the processing itself) to perform 3D and + higher-dimensional transforms and so forth.*/ + DCT_ROWS = DFT_ROWS +}; + +//! Various border types, image boundaries are denoted with `|` +//! @see borderInterpolate, copyMakeBorder +enum BorderTypes { + BORDER_CONSTANT = 0, //!< `iiiiii|abcdefgh|iiiiiii` with some specified `i` + BORDER_REPLICATE = 1, //!< `aaaaaa|abcdefgh|hhhhhhh` + BORDER_REFLECT = 2, //!< `fedcba|abcdefgh|hgfedcb` + BORDER_WRAP = 3, //!< `cdefgh|abcdefgh|abcdefg` + BORDER_REFLECT_101 = 4, //!< `gfedcb|abcdefgh|gfedcba` + BORDER_TRANSPARENT = + 5, //!< `uvwxyz|abcdefgh|ijklmno` - Treats outliers as transparent. + + BORDER_REFLECT101 = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101 + BORDER_DEFAULT = BORDER_REFLECT_101, //!< same as BORDER_REFLECT_101 + BORDER_ISOLATED = 16 //!< Interpolation restricted within the ROI boundaries. +}; + +//! @} core_array + +//! @addtogroup core_utils +//! @{ + +/*! @brief Signals an error and raises the exception. + +By default the function prints information about the error to stderr, +then it either stops if setBreakOnError() had been called before or raises the +exception. It is possible to alternate error processing by using +redirectError(). +@param code - error code (Error::Code) +@param err - error description +@param func - function name. Available only when the compiler supports getting +it +@param file - source file name where the error has occurred +@param line - line number in the source file where the error has occurred +@see CV_Error, CV_Error_, CV_Assert, CV_DbgAssert + */ +CV_EXPORTS CV_NORETURN void error(int code, const String &err, const char *func, + const char *file, int line); + +/*! @brief Signals an error and terminate application. + +By default the function prints information about the error to stderr, then it +terminates application with std::terminate. The function is designed for +invariants check in functions and methods with noexcept attribute. +@param code - error code (Error::Code) +@param err - error description +@param func - function name. Available only when the compiler supports getting +it +@param file - source file name where the error has occurred +@param line - line number in the source file where the error has occurred +@see CV_AssertTerminate + */ +CV_EXPORTS CV_NORETURN void terminate(int code, const String &err, + const char *func, const char *file, + int line) CV_NOEXCEPT; + +#ifdef CV_STATIC_ANALYSIS + +// In practice, some macro are not processed correctly (noreturn is not +// detected). We need to use simplified definition for them. +#define CV_Error(code, msg) \ + do { \ + (void)(code); \ + (void)(msg); \ + abort(); \ + } while (0) +#define CV_Error_(code, args) \ + do { \ + (void)(code); \ + (void)(cv::format args); \ + abort(); \ + } while (0) +#define CV_Assert(expr) \ + do { \ + if (!(expr)) \ + abort(); \ + } while (0) + +#else // CV_STATIC_ANALYSIS + +/** @brief Call the error handler. + +Currently, the error handler prints the error code and the error message to the +standard error stream `stderr`. In the Debug configuration, it then provokes +memory access violation, so that the execution stack and all the parameters can +be analyzed by the debugger. In the Release configuration, the exception is +thrown. + +@param code one of Error::Code +@param msg error message +*/ +#define CV_Error(code, msg) cv::error(code, msg, CV_Func, __FILE__, __LINE__) + +/** @brief Call the error handler. + +This macro can be used to construct an error message on-fly to include some +dynamic information, for example: +@code + // note the extra parentheses around the formatted text message + CV_Error_(Error::StsOutOfRange, + ("the value at (%d, %d)=%g is out of range", badPt.x, badPt.y, badValue)); +@endcode +@param code one of Error::Code +@param args printf-like formatted error message in parentheses +*/ +#define CV_Error_(code, args) \ + cv::error(code, cv::format args, CV_Func, __FILE__, __LINE__) + +/** @brief Checks a condition at runtime and throws exception if it fails + +The macros CV_Assert (and CV_DbgAssert(expr)) evaluate the specified expression. +If it is 0, the macros raise an error (see cv::error). The macro CV_Assert +checks the condition in both Debug and Release configurations while CV_DbgAssert +is only retained in the Debug configuration. CV_AssertTerminate is analog of +CV_Assert for invariants check in functions with noexcept attribute. It does not +throw exception, but terminates the application. +*/ +#define CV_Assert(expr) \ + do { \ + if (!!(expr)) \ + ; \ + else \ + cv::error(cv::Error::StsAssert, #expr, CV_Func, __FILE__, __LINE__); \ + } while (0) +#define CV_AssertTerminate(expr) \ + do { \ + if (!!(expr)) \ + ; \ + else \ + cv::terminate(#expr, CV_Func, __FILE__, __LINE__); \ + } while (0) + +#endif // CV_STATIC_ANALYSIS + +//! @cond IGNORED +#if !defined(__OPENCV_BUILD) // TODO: backward compatibility only +#ifndef CV_ErrorNoReturn +#define CV_ErrorNoReturn CV_Error +#endif +#ifndef CV_ErrorNoReturn_ +#define CV_ErrorNoReturn_ CV_Error_ +#endif +#endif + +#define CV_Assert_1 CV_Assert +#define CV_Assert_2(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_1(__VA_ARGS__)) +#define CV_Assert_3(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_2(__VA_ARGS__)) +#define CV_Assert_4(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_3(__VA_ARGS__)) +#define CV_Assert_5(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_4(__VA_ARGS__)) +#define CV_Assert_6(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_5(__VA_ARGS__)) +#define CV_Assert_7(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_6(__VA_ARGS__)) +#define CV_Assert_8(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_7(__VA_ARGS__)) +#define CV_Assert_9(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_8(__VA_ARGS__)) +#define CV_Assert_10(expr, ...) \ + CV_Assert_1(expr); \ + __CV_EXPAND(CV_Assert_9(__VA_ARGS__)) + +#define CV_Assert_N(...) \ + do { \ + __CV_EXPAND( \ + __CV_CAT(CV_Assert_, __CV_VA_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)); \ + } while (0) + +//! @endcond + +#if defined _DEBUG || defined CV_STATIC_ANALYSIS +#define CV_DbgAssert(expr) CV_Assert(expr) +#else +/** replaced with CV_Assert(expr) in Debug configuration */ +#define CV_DbgAssert(expr) +#endif + +/* + * Hamming distance functor - counts the bit differences between two strings - + * useful for the Brief descriptor bit count of A exclusive XOR'ed with B + */ +struct CV_EXPORTS Hamming { + static const NormTypes normType = NORM_HAMMING; + typedef unsigned char ValueType; + typedef int ResultType; + + /** this will count the bits in a ^ b + */ + ResultType operator()(const unsigned char *a, const unsigned char *b, + int size) const; +}; + +typedef Hamming HammingLUT; + +/////////////////////////////////// inline norms +/////////////////////////////////////// + +template inline _Tp cv_abs(_Tp x) { return std::abs(x); } +inline int cv_abs(uchar x) { return x; } +inline int cv_abs(schar x) { return std::abs(x); } +inline int cv_abs(ushort x) { return x; } +inline int cv_abs(short x) { return std::abs(x); } + +template +static inline _AccTp normL2Sqr(const _Tp *a, int n) { + _AccTp s = 0; + int i = 0; +#if CV_ENABLE_UNROLLED + for (; i <= n - 4; i += 4) { + _AccTp v0 = a[i], v1 = a[i + 1], v2 = a[i + 2], v3 = a[i + 3]; + s += v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3; + } +#endif + for (; i < n; i++) { + _AccTp v = a[i]; + s += v * v; + } + return s; +} + +template +static inline _AccTp normL1(const _Tp *a, int n) { + _AccTp s = 0; + int i = 0; +#if CV_ENABLE_UNROLLED + for (; i <= n - 4; i += 4) { + s += (_AccTp)cv_abs(a[i]) + (_AccTp)cv_abs(a[i + 1]) + + (_AccTp)cv_abs(a[i + 2]) + (_AccTp)cv_abs(a[i + 3]); + } +#endif + for (; i < n; i++) + s += cv_abs(a[i]); + return s; +} + +template +static inline _AccTp normInf(const _Tp *a, int n) { + _AccTp s = 0; + for (int i = 0; i < n; i++) + s = std::max(s, (_AccTp)cv_abs(a[i])); + return s; +} + +template +static inline _AccTp normL2Sqr(const _Tp *a, const _Tp *b, int n) { + _AccTp s = 0; + int i = 0; +#if CV_ENABLE_UNROLLED + for (; i <= n - 4; i += 4) { + _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i + 1] - b[i + 1]), + v2 = _AccTp(a[i + 2] - b[i + 2]), v3 = _AccTp(a[i + 3] - b[i + 3]); + s += v0 * v0 + v1 * v1 + v2 * v2 + v3 * v3; + } +#endif + for (; i < n; i++) { + _AccTp v = _AccTp(a[i] - b[i]); + s += v * v; + } + return s; +} + +static inline float normL2Sqr(const float *a, const float *b, int n) { + float s = 0.f; + for (int i = 0; i < n; i++) { + float v = a[i] - b[i]; + s += v * v; + } + return s; +} + +template +static inline _AccTp normL1(const _Tp *a, const _Tp *b, int n) { + _AccTp s = 0; + int i = 0; +#if CV_ENABLE_UNROLLED + for (; i <= n - 4; i += 4) { + _AccTp v0 = _AccTp(a[i] - b[i]), v1 = _AccTp(a[i + 1] - b[i + 1]), + v2 = _AccTp(a[i + 2] - b[i + 2]), v3 = _AccTp(a[i + 3] - b[i + 3]); + s += std::abs(v0) + std::abs(v1) + std::abs(v2) + std::abs(v3); + } +#endif + for (; i < n; i++) { + _AccTp v = _AccTp(a[i] - b[i]); + s += std::abs(v); + } + return s; +} + +inline float normL1(const float *a, const float *b, int n) { + float s = 0.f; + for (int i = 0; i < n; i++) { + s += std::abs(a[i] - b[i]); + } + return s; +} + +inline int normL1(const uchar *a, const uchar *b, int n) { + int s = 0; + for (int i = 0; i < n; i++) { + s += std::abs(a[i] - b[i]); + } + return s; +} + +template +static inline _AccTp normInf(const _Tp *a, const _Tp *b, int n) { + _AccTp s = 0; + for (int i = 0; i < n; i++) { + _AccTp v0 = a[i] - b[i]; + s = std::max(s, std::abs(v0)); + } + return s; +} + +/** @brief Computes the cube root of an argument. + + The function cubeRoot computes \f$\sqrt[3]{\texttt{val}}\f$. Negative arguments + are handled correctly. NaN and Inf are not handled. The accuracy approaches the + maximum possible accuracy for single-precision data. + @param val A function argument. + */ +CV_EXPORTS_W float cubeRoot(float val); + +/** @overload + +cubeRoot with argument of `double` type calls `std::cbrt(double)` +*/ +static inline double cubeRoot(double val) { return std::cbrt(val); } + +/** @brief Calculates the angle of a 2D vector in degrees. + + The function fastAtan2 calculates the full-range angle of an input 2D vector. + The angle is measured in degrees and varies from 0 to 360 degrees. The accuracy + is about 0.3 degrees. + @param x x-coordinate of the vector. + @param y y-coordinate of the vector. + */ +CV_EXPORTS_W float fastAtan2(float y, float x); + +/** proxy for hal::LU */ +CV_EXPORTS int LU(float *A, size_t astep, int m, float *b, size_t bstep, int n); +/** proxy for hal::LU */ +CV_EXPORTS int LU(double *A, size_t astep, int m, double *b, size_t bstep, + int n); +/** proxy for hal::Cholesky */ +CV_EXPORTS bool Cholesky(float *A, size_t astep, int m, float *b, size_t bstep, + int n); +/** proxy for hal::Cholesky */ +CV_EXPORTS bool Cholesky(double *A, size_t astep, int m, double *b, + size_t bstep, int n); + +////////////////// forward declarations for important OpenCV types +///////////////////// + +//! @cond IGNORED + +template class Vec; +template class Matx; + +template class Complex; +template class Point_; +template class Point3_; +template class Size_; +template class Rect_; +template class Scalar_; + +class CV_EXPORTS RotatedRect; +class CV_EXPORTS Range; +class CV_EXPORTS TermCriteria; +class CV_EXPORTS KeyPoint; +class CV_EXPORTS DMatch; +class CV_EXPORTS RNG; + +class CV_EXPORTS Mat; +class CV_EXPORTS MatExpr; + +class CV_EXPORTS SparseMat; +typedef Mat MatND; + +template class Mat_; +template class SparseMat_; + +class CV_EXPORTS MatConstIterator; +class CV_EXPORTS SparseMatIterator; +class CV_EXPORTS SparseMatConstIterator; +template class MatIterator_; +template class MatConstIterator_; +template class SparseMatIterator_; +template class SparseMatConstIterator_; + +namespace ipp { +CV_EXPORTS unsigned long long getIppFeatures(); +CV_EXPORTS void setIppStatus(int status, const char *const funcname = NULL, + const char *const filename = NULL, int line = 0); +CV_EXPORTS int getIppStatus(); +CV_EXPORTS String getIppErrorLocation(); +CV_EXPORTS_W bool useIPP(); +CV_EXPORTS_W void setUseIPP(bool flag); +CV_EXPORTS_W String getIppVersion(); + +// IPP Not-Exact mode. This function may force use of IPP then both IPP and +// OpenCV provide proper results but have internal accuracy differences which +// have too much direct or indirect impact on accuracy tests. +CV_EXPORTS_W bool useIPP_NotExact(); +CV_EXPORTS_W void setUseIPP_NotExact(bool flag); +#ifndef DISABLE_OPENCV_3_COMPATIBILITY +static inline bool useIPP_NE() { return useIPP_NotExact(); } +static inline void setUseIPP_NE(bool flag) { setUseIPP_NotExact(flag); } +#endif + +} // namespace ipp + +//! @endcond + +//! @} core_utils + +} // namespace cv + +#include "opencv2/core/check.hpp" +#include "opencv2/core/neon_utils.hpp" +#include "opencv2/core/vsx_utils.hpp" + +#endif // OPENCV_CORE_BASE_HPP diff --git a/third-party/include/opencv2/core/bindings_utils.hpp b/third-party/include/opencv2/core/bindings_utils.hpp new file mode 100644 index 000000000..416f3d474 --- /dev/null +++ b/third-party/include/opencv2/core/bindings_utils.hpp @@ -0,0 +1,279 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level +// directory of this distribution and at http://opencv.org/license.html. + +#ifndef OPENCV_CORE_BINDINGS_UTILS_HPP +#define OPENCV_CORE_BINDINGS_UTILS_HPP + +#include +#include +#include + +#include + +namespace cv { +namespace utils { +//! @addtogroup core_utils +//! @{ + +CV_EXPORTS_W String dumpInputArray(InputArray argument); + +CV_EXPORTS_W String dumpInputArrayOfArrays(InputArrayOfArrays argument); + +CV_EXPORTS_W String dumpInputOutputArray(InputOutputArray argument); + +CV_EXPORTS_W String +dumpInputOutputArrayOfArrays(InputOutputArrayOfArrays argument); + +CV_WRAP static inline String dumpBool(bool argument) { + return (argument) ? String("Bool: True") : String("Bool: False"); +} + +CV_WRAP static inline String dumpInt(int argument) { + return cv::format("Int: %d", argument); +} + +CV_WRAP static inline String dumpInt64(int64 argument) { + std::ostringstream oss("Int64: ", std::ios::ate); + oss << argument; + return oss.str(); +} + +CV_WRAP static inline String dumpSizeT(size_t argument) { + std::ostringstream oss("size_t: ", std::ios::ate); + oss << argument; + return oss.str(); +} + +CV_WRAP static inline String dumpFloat(float argument) { + return cv::format("Float: %.2f", argument); +} + +CV_WRAP static inline String dumpDouble(double argument) { + return cv::format("Double: %.2f", argument); +} + +CV_WRAP static inline String dumpCString(const char *argument) { + return cv::format("String: %s", argument); +} + +CV_WRAP static inline String dumpString(const String &argument) { + return cv::format("String: %s", argument.c_str()); +} + +CV_WRAP static inline String dumpRect(const Rect &argument) { + return format("rect: (x=%d, y=%d, w=%d, h=%d)", argument.x, argument.y, + argument.width, argument.height); +} + +CV_WRAP static inline String dumpTermCriteria(const TermCriteria &argument) { + return format("term_criteria: (type=%d, max_count=%d, epsilon=%lf", + argument.type, argument.maxCount, argument.epsilon); +} + +CV_WRAP static inline String dumpRotatedRect(const RotatedRect &argument) { + return format("rotated_rect: (c_x=%f, c_y=%f, w=%f, h=%f, a=%f)", + argument.center.x, argument.center.y, argument.size.width, + argument.size.height, argument.angle); +} + +CV_WRAP static inline String dumpRange(const Range &argument) { + if (argument == Range::all()) { + return "range: all"; + } else { + return format("range: (s=%d, e=%d)", argument.start, argument.end); + } +} + +CV_EXPORTS_W String dumpVectorOfInt(const std::vector &vec); + +CV_EXPORTS_W String dumpVectorOfDouble(const std::vector &vec); + +CV_EXPORTS_W String dumpVectorOfRect(const std::vector &vec); + +//! @cond IGNORED + +CV_WRAP static inline String +testOverloadResolution(int value, const Point &point = Point(42, 24)) { + return format("overload (int=%d, point=(x=%d, y=%d))", value, point.x, + point.y); +} + +CV_WRAP static inline String testOverloadResolution(const Rect &rect) { + return format("overload (rect=(x=%d, y=%d, w=%d, h=%d))", rect.x, rect.y, + rect.width, rect.height); +} + +CV_WRAP static inline RotatedRect testRotatedRect(float x, float y, float w, + float h, float angle) { + return RotatedRect(Point2f(x, y), Size2f(w, h), angle); +} + +CV_WRAP static inline std::vector +testRotatedRectVector(float x, float y, float w, float h, float angle) { + std::vector result; + for (int i = 0; i < 10; i++) + result.push_back( + RotatedRect(Point2f(x + i, y + 2 * i), Size2f(w, h), angle + 10 * i)); + return result; +} + +CV_WRAP static inline int testOverwriteNativeMethod(int argument) { + return argument; +} + +CV_WRAP static inline String +testReservedKeywordConversion(int positional_argument, int lambda = 2, + int from = 3) { + return format("arg=%d, lambda=%d, from=%d", positional_argument, lambda, + from); +} + +CV_WRAP static inline void generateVectorOfRect(size_t len, + CV_OUT std::vector &vec) { + vec.resize(len); + if (len > 0) { + RNG rng(12345); + Mat tmp(static_cast(len), 1, CV_32SC4); + rng.fill(tmp, RNG::UNIFORM, 10, 20); + tmp.copyTo(vec); + } +} + +CV_WRAP static inline void generateVectorOfInt(size_t len, + CV_OUT std::vector &vec) { + vec.resize(len); + if (len > 0) { + RNG rng(554433); + Mat tmp(static_cast(len), 1, CV_32SC1); + rng.fill(tmp, RNG::UNIFORM, -10, 10); + tmp.copyTo(vec); + } +} + +CV_WRAP static inline void generateVectorOfMat(size_t len, int rows, int cols, + int dtype, + CV_OUT std::vector &vec) { + vec.resize(len); + if (len > 0) { + RNG rng(65431); + for (size_t i = 0; i < len; ++i) { + vec[i].create(rows, cols, dtype); + rng.fill(vec[i], RNG::UNIFORM, 0, 10); + } + } +} + +CV_WRAP static inline AsyncArray testAsyncArray(InputArray argument) { + AsyncPromise p; + p.setValue(argument); + return p.getArrayResult(); +} + +CV_WRAP static inline AsyncArray testAsyncException() { + AsyncPromise p; + return p.getArrayResult(); +} + +CV_WRAP static inline String dumpVec2i(const cv::Vec2i value = cv::Vec2i(42, + 24)) { + return format("Vec2i(%d, %d)", value[0], value[1]); +} + +struct CV_EXPORTS_W_SIMPLE ClassWithKeywordProperties { + CV_PROP_RW int lambda; + CV_PROP int except; + + CV_WRAP explicit ClassWithKeywordProperties(int lambda_arg = 24, + int except_arg = 42) { + lambda = lambda_arg; + except = except_arg; + } +}; + +struct CV_EXPORTS_W_PARAMS FunctionParams { + CV_PROP_RW int lambda = -1; + CV_PROP_RW float sigma = 0.0f; + + FunctionParams &setLambda(int value) CV_NOEXCEPT { + lambda = value; + return *this; + } + + FunctionParams &setSigma(float value) CV_NOEXCEPT { + sigma = value; + return *this; + } +}; + +CV_WRAP static inline String +copyMatAndDumpNamedArguments(InputArray src, OutputArray dst, + const FunctionParams ¶ms = FunctionParams()) { + src.copyTo(dst); + return format("lambda=%d, sigma=%.1f", params.lambda, params.sigma); +} + +namespace nested { +CV_WRAP static inline bool testEchoBooleanFunction(bool flag) { return flag; } + +class CV_EXPORTS_W CV_WRAP_AS(ExportClassName) OriginalClassName { +public: + struct CV_EXPORTS_W_SIMPLE Params { + CV_PROP_RW int int_value; + CV_PROP_RW float float_value; + + CV_WRAP explicit Params(int int_param = 123, float float_param = 3.5f) { + int_value = int_param; + float_value = float_param; + } + }; + + explicit OriginalClassName( + const OriginalClassName::Params ¶ms = OriginalClassName::Params()) { + params_ = params; + } + + CV_WRAP int getIntParam() const { return params_.int_value; } + + CV_WRAP float getFloatParam() const { return params_.float_value; } + + CV_WRAP static std::string originalName() { return "OriginalClassName"; } + + CV_WRAP static Ptr create( + const OriginalClassName::Params ¶ms = OriginalClassName::Params()) { + return makePtr(params); + } + +private: + OriginalClassName::Params params_; +}; + +typedef OriginalClassName::Params OriginalClassName_Params; +} // namespace nested + +//! @endcond IGNORED + +namespace fs { +CV_EXPORTS_W cv::String getCacheDirectoryForDownloads(); +} // namespace fs + +//! @} // core_utils +} // namespace utils + +//! @cond IGNORED + +CV_WRAP static inline int setLogLevel(int level) { + // NB: Binding generators doesn't work with enums properly yet, so we define + // separate overload here + return cv::utils::logging::setLogLevel((cv::utils::logging::LogLevel)level); +} + +CV_WRAP static inline int getLogLevel() { + return cv::utils::logging::getLogLevel(); +} + +//! @endcond IGNORED + +} // namespace cv + +#endif // OPENCV_CORE_BINDINGS_UTILS_HPP diff --git a/third-party/include/opencv2/core/bufferpool.hpp b/third-party/include/opencv2/core/bufferpool.hpp new file mode 100644 index 000000000..8796de938 --- /dev/null +++ b/third-party/include/opencv2/core/bufferpool.hpp @@ -0,0 +1,39 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level +// directory of this distribution and at http://opencv.org/license.html. +// +// Copyright (C) 2014, Advanced Micro Devices, Inc., all rights reserved. + +#ifndef OPENCV_CORE_BUFFER_POOL_HPP +#define OPENCV_CORE_BUFFER_POOL_HPP + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4265) +#endif + +namespace cv { + +//! @addtogroup core_opencl +//! @{ + +class BufferPoolController { +protected: + ~BufferPoolController() {} + +public: + virtual size_t getReservedSize() const = 0; + virtual size_t getMaxReservedSize() const = 0; + virtual void setMaxReservedSize(size_t size) = 0; + virtual void freeAllReservedBuffers() = 0; +}; + +//! @} + +} // namespace cv + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#endif // OPENCV_CORE_BUFFER_POOL_HPP diff --git a/third-party/include/opencv2/core/check.hpp b/third-party/include/opencv2/core/check.hpp new file mode 100644 index 000000000..cfcfe0e81 --- /dev/null +++ b/third-party/include/opencv2/core/check.hpp @@ -0,0 +1,231 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level +// directory of this distribution and at http://opencv.org/license.html. + +#ifndef OPENCV_CORE_CHECK_HPP +#define OPENCV_CORE_CHECK_HPP + +#include + +namespace cv { + +/** Returns string of cv::Mat depth value: CV_8U -> "CV_8U" or "" + */ +CV_EXPORTS const char *depthToString(int depth); + +/** Returns string of cv::Mat depth value: CV_8UC3 -> "CV_8UC3" or "" */ +CV_EXPORTS String typeToString(int type); + +//! @cond IGNORED +namespace detail { + +/** Returns string of cv::Mat depth value: CV_8U -> "CV_8U" or NULL */ +CV_EXPORTS const char *depthToString_(int depth); + +/** Returns string of cv::Mat depth value: CV_8UC3 -> "CV_8UC3" or cv::String() + */ +CV_EXPORTS cv::String typeToString_(int type); + +enum TestOp { + TEST_CUSTOM = 0, + TEST_EQ = 1, + TEST_NE = 2, + TEST_LE = 3, + TEST_LT = 4, + TEST_GE = 5, + TEST_GT = 6, + CV__LAST_TEST_OP +}; + +struct CheckContext { + const char *func; + const char *file; + int line; + enum TestOp testOp; + const char *message; + const char *p1_str; + const char *p2_str; +}; + +#ifndef CV__CHECK_FILENAME +#define CV__CHECK_FILENAME __FILE__ +#endif + +#ifndef CV__CHECK_FUNCTION +#if defined _MSC_VER +#define CV__CHECK_FUNCTION __FUNCSIG__ +#elif defined __GNUC__ +#define CV__CHECK_FUNCTION __PRETTY_FUNCTION__ +#else +#define CV__CHECK_FUNCTION "" +#endif +#endif + +#define CV__CHECK_LOCATION_VARNAME(id) \ + CVAUX_CONCAT(CVAUX_CONCAT(__cv_check_, id), __LINE__) +#define CV__DEFINE_CHECK_CONTEXT(id, message, testOp, p1_str, p2_str) \ + static const cv::detail::CheckContext CV__CHECK_LOCATION_VARNAME(id) = { \ + CV__CHECK_FUNCTION, CV__CHECK_FILENAME, __LINE__, testOp, \ + "" message, "" p1_str, "" p2_str} + +CV_EXPORTS void CV_NORETURN check_failed_auto(const bool v1, const bool v2, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const int v1, const int v2, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const size_t v1, const size_t v2, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const float v1, const float v2, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const double v1, const double v2, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const Size_ v1, + const Size_ v2, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_MatDepth(const int v1, const int v2, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_MatType(const int v1, const int v2, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_MatChannels(const int v1, const int v2, + const CheckContext &ctx); + +CV_EXPORTS void CV_NORETURN check_failed_true(const bool v, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_false(const bool v, + const CheckContext &ctx); + +CV_EXPORTS void CV_NORETURN check_failed_auto(const int v, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const size_t v, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const float v, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const double v, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const Size_ v, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_auto(const std::string &v1, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_MatDepth(const int v, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_MatType(const int v, + const CheckContext &ctx); +CV_EXPORTS void CV_NORETURN check_failed_MatChannels(const int v, + const CheckContext &ctx); + +#define CV__TEST_EQ(v1, v2) ((v1) == (v2)) +#define CV__TEST_NE(v1, v2) ((v1) != (v2)) +#define CV__TEST_LE(v1, v2) ((v1) <= (v2)) +#define CV__TEST_LT(v1, v2) ((v1) < (v2)) +#define CV__TEST_GE(v1, v2) ((v1) >= (v2)) +#define CV__TEST_GT(v1, v2) ((v1) > (v2)) + +#define CV__CHECK(id, op, type, v1, v2, v1_str, v2_str, msg_str) \ + do { \ + if (CV__TEST_##op((v1), (v2))) \ + ; \ + else { \ + CV__DEFINE_CHECK_CONTEXT(id, msg_str, cv::detail::TEST_##op, v1_str, \ + v2_str); \ + cv::detail::check_failed_##type((v1), (v2), \ + CV__CHECK_LOCATION_VARNAME(id)); \ + } \ + } while (0) + +#define CV__CHECK_CUSTOM_TEST(id, type, v, test_expr, v_str, test_expr_str, \ + msg_str) \ + do { \ + if (!!(test_expr)) \ + ; \ + else { \ + CV__DEFINE_CHECK_CONTEXT(id, msg_str, cv::detail::TEST_CUSTOM, v_str, \ + test_expr_str); \ + cv::detail::check_failed_##type((v), CV__CHECK_LOCATION_VARNAME(id)); \ + } \ + } while (0) + +} // namespace detail +//! @endcond + +/// Supported values of these types: int, float, double +#define CV_CheckEQ(v1, v2, msg) CV__CHECK(_, EQ, auto, v1, v2, #v1, #v2, msg) +#define CV_CheckNE(v1, v2, msg) CV__CHECK(_, NE, auto, v1, v2, #v1, #v2, msg) +#define CV_CheckLE(v1, v2, msg) CV__CHECK(_, LE, auto, v1, v2, #v1, #v2, msg) +#define CV_CheckLT(v1, v2, msg) CV__CHECK(_, LT, auto, v1, v2, #v1, #v2, msg) +#define CV_CheckGE(v1, v2, msg) CV__CHECK(_, GE, auto, v1, v2, #v1, #v2, msg) +#define CV_CheckGT(v1, v2, msg) CV__CHECK(_, GT, auto, v1, v2, #v1, #v2, msg) + +/// Check with additional "decoding" of type values in error message +#define CV_CheckTypeEQ(t1, t2, msg) \ + CV__CHECK(_, EQ, MatType, t1, t2, #t1, #t2, msg) +/// Check with additional "decoding" of depth values in error message +#define CV_CheckDepthEQ(d1, d2, msg) \ + CV__CHECK(_, EQ, MatDepth, d1, d2, #d1, #d2, msg) + +#define CV_CheckChannelsEQ(c1, c2, msg) \ + CV__CHECK(_, EQ, MatChannels, c1, c2, #c1, #c2, msg) + +/// Example: type == CV_8UC1 || type == CV_8UC3 +#define CV_CheckType(t, test_expr, msg) \ + CV__CHECK_CUSTOM_TEST(_, MatType, t, (test_expr), #t, #test_expr, msg) + +/// Example: depth == CV_32F || depth == CV_64F +#define CV_CheckDepth(t, test_expr, msg) \ + CV__CHECK_CUSTOM_TEST(_, MatDepth, t, (test_expr), #t, #test_expr, msg) + +/// Example: channel == 1 || channel == 3 +#define CV_CheckChannels(t, test_expr, msg) \ + CV__CHECK_CUSTOM_TEST(_, MatChannels, t, (test_expr), #t, #test_expr, msg) + +/// Example: v == A || v == B +#define CV_Check(v, test_expr, msg) \ + CV__CHECK_CUSTOM_TEST(_, auto, v, (test_expr), #v, #test_expr, msg) + +/// Example: v == true +#define CV_CheckTrue(v, msg) CV__CHECK_CUSTOM_TEST(_, true, v, v, #v, "", msg) + +/// Example: v == false +#define CV_CheckFalse(v, msg) \ + CV__CHECK_CUSTOM_TEST(_, false, v, (!(v)), #v, "", msg) + +/// Some complex conditions: CV_Check(src2, src2.empty() || (src2.type() == +/// src1.type() && src2.size() == src1.size()), "src2 should have same size/type +/// as src1") +// TODO define pretty-printers + +#ifndef NDEBUG +#define CV_DbgCheck(v, test_expr, msg) \ + CV__CHECK_CUSTOM_TEST(_, auto, v, (test_expr), #v, #test_expr, msg) +#define CV_DbgCheckEQ(v1, v2, msg) CV__CHECK(_, EQ, auto, v1, v2, #v1, #v2, msg) +#define CV_DbgCheckNE(v1, v2, msg) CV__CHECK(_, NE, auto, v1, v2, #v1, #v2, msg) +#define CV_DbgCheckLE(v1, v2, msg) CV__CHECK(_, LE, auto, v1, v2, #v1, #v2, msg) +#define CV_DbgCheckLT(v1, v2, msg) CV__CHECK(_, LT, auto, v1, v2, #v1, #v2, msg) +#define CV_DbgCheckGE(v1, v2, msg) CV__CHECK(_, GE, auto, v1, v2, #v1, #v2, msg) +#define CV_DbgCheckGT(v1, v2, msg) CV__CHECK(_, GT, auto, v1, v2, #v1, #v2, msg) +#else +#define CV_DbgCheck(v, test_expr, msg) \ + do { \ + } while (0) +#define CV_DbgCheckEQ(v1, v2, msg) \ + do { \ + } while (0) +#define CV_DbgCheckNE(v1, v2, msg) \ + do { \ + } while (0) +#define CV_DbgCheckLE(v1, v2, msg) \ + do { \ + } while (0) +#define CV_DbgCheckLT(v1, v2, msg) \ + do { \ + } while (0) +#define CV_DbgCheckGE(v1, v2, msg) \ + do { \ + } while (0) +#define CV_DbgCheckGT(v1, v2, msg) \ + do { \ + } while (0) +#endif + +} // namespace cv + +#endif // OPENCV_CORE_CHECK_HPP diff --git a/third-party/include/opencv2/core/core.hpp b/third-party/include/opencv2/core/core.hpp new file mode 100644 index 000000000..a81cf5663 --- /dev/null +++ b/third-party/include/opencv2/core/core.hpp @@ -0,0 +1,55 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this +license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without +modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's 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. +// +// * The name of the copyright holders may not be used to endorse or promote +products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "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 Intel Corporation or contributors 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. +// +//M*/ + +#ifdef __OPENCV_BUILD +#error this is a compatibility header which should not be used inside the OpenCV library +#endif + +#include "opencv2/core.hpp" diff --git a/third-party/include/opencv2/core/core_c.h b/third-party/include/opencv2/core/core_c.h new file mode 100644 index 000000000..657d6bfd5 --- /dev/null +++ b/third-party/include/opencv2/core/core_c.h @@ -0,0 +1,3261 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this +license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without +modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's 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. +// +// * The name of the copyright holders may not be used to endorse or promote +products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "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 Intel Corporation or contributors 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. +// +//M*/ + +#ifndef OPENCV_CORE_C_H +#define OPENCV_CORE_C_H + +#include "opencv2/core/types_c.h" + +#ifdef __cplusplus +/* disable MSVC warning C4190 / clang-cl -Wreturn-type-c-linkage: + 'function' has C-linkage specified, but returns UDT 'typename' + which is incompatible with C + + It is OK to disable it because we only extend few plain structures with + C++ constructors for simpler interoperability with C++ API of the library +*/ +#if defined(__clang__) +// handle clang on Linux and clang-cl (i. e. clang on Windows) first +#pragma GCC diagnostic ignored "-Wreturn-type-c-linkage" +#elif defined(_MSC_VER) +// then handle MSVC +#pragma warning(disable : 4190) +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** @addtogroup core_c + @{ +*/ + +/****************************************************************************************\ +* Array allocation, deallocation, initialization and access to elements +* +\****************************************************************************************/ + +/** `malloc` wrapper. + If there is no enough memory, the function + (as well as other OpenCV functions that call cvAlloc) + raises an error. */ +CVAPI(void *) cvAlloc(size_t size); + +/** `free` wrapper. + Here and further all the memory releasing functions + (that all call cvFree) take double pointer in order to + to clear pointer to the data after releasing it. + Passing pointer to NULL pointer is Ok: nothing happens in this case +*/ +CVAPI(void) cvFree_(void *ptr); +#define cvFree(ptr) (cvFree_(*(ptr)), *(ptr) = 0) + +/** @brief Creates an image header but does not allocate the image data. + +@param size Image width and height +@param depth Image depth (see cvCreateImage ) +@param channels Number of channels (see cvCreateImage ) + */ +CVAPI(IplImage *) cvCreateImageHeader(CvSize size, int depth, int channels); + +/** @brief Initializes an image header that was previously allocated. + +The returned IplImage\* points to the initialized header. +@param image Image header to initialize +@param size Image width and height +@param depth Image depth (see cvCreateImage ) +@param channels Number of channels (see cvCreateImage ) +@param origin Top-left IPL_ORIGIN_TL or bottom-left IPL_ORIGIN_BL +@param align Alignment for image rows, typically 4 or 8 bytes + */ +CVAPI(IplImage *) +cvInitImageHeader(IplImage *image, CvSize size, int depth, int channels, + int origin CV_DEFAULT(0), int align CV_DEFAULT(4)); + +/** @brief Creates an image header and allocates the image data. + +This function call is equivalent to the following code: +@code + header = cvCreateImageHeader(size, depth, channels); + cvCreateData(header); +@endcode +@param size Image width and height +@param depth Bit depth of image elements. See IplImage for valid depths. +@param channels Number of channels per pixel. See IplImage for details. This +function only creates images with interleaved channels. + */ +CVAPI(IplImage *) cvCreateImage(CvSize size, int depth, int channels); + +/** @brief Deallocates an image header. + +This call is an analogue of : +@code + if(image ) + { + iplDeallocate(*image, IPL_IMAGE_HEADER | IPL_IMAGE_ROI); + *image = 0; + } +@endcode +but it does not use IPL functions by default (see the +CV_TURN_ON_IPL_COMPATIBILITY macro). +@param image Double pointer to the image header + */ +CVAPI(void) cvReleaseImageHeader(IplImage **image); + +/** @brief Deallocates the image header and the image data. + +This call is a shortened form of : +@code + if(*image ) + { + cvReleaseData(*image); + cvReleaseImageHeader(image); + } +@endcode +@param image Double pointer to the image header +*/ +CVAPI(void) cvReleaseImage(IplImage **image); + +/** Creates a copy of IPL image (widthStep may differ) */ +CVAPI(IplImage *) cvCloneImage(const IplImage *image); + +/** @brief Sets the channel of interest in an IplImage. + +If the ROI is set to NULL and the coi is *not* 0, the ROI is allocated. Most +OpenCV functions do *not* support the COI setting, so to process an individual +image/matrix channel one may copy (via cvCopy or cvSplit) the channel to a +separate image/matrix, process it and then copy the result back (via cvCopy or +cvMerge) if needed. +@param image A pointer to the image header +@param coi The channel of interest. 0 - all channels are selected, 1 - first +channel is selected, etc. Note that the channel indices become 1-based. + */ +CVAPI(void) cvSetImageCOI(IplImage *image, int coi); + +/** @brief Returns the index of the channel of interest. + +Returns the channel of interest of in an IplImage. Returned values correspond to +the coi in cvSetImageCOI. +@param image A pointer to the image header + */ +CVAPI(int) cvGetImageCOI(const IplImage *image); + +/** @brief Sets an image Region Of Interest (ROI) for a given rectangle. + +If the original image ROI was NULL and the rect is not the whole image, the ROI +structure is allocated. + +Most OpenCV functions support the use of ROI and treat the image rectangle as a +separate image. For example, all of the pixel coordinates are counted from the +top-left (or bottom-left) corner of the ROI, not the original image. +@param image A pointer to the image header +@param rect The ROI rectangle + */ +CVAPI(void) cvSetImageROI(IplImage *image, CvRect rect); + +/** @brief Resets the image ROI to include the entire image and releases the ROI +structure. + +This produces a similar result to the following, but in addition it releases the +ROI structure. : +@code + cvSetImageROI(image, cvRect(0, 0, image->width, image->height )); + cvSetImageCOI(image, 0); +@endcode +@param image A pointer to the image header + */ +CVAPI(void) cvResetImageROI(IplImage *image); + +/** @brief Returns the image ROI. + +If there is no ROI set, cvRect(0,0,image-\>width,image-\>height) is returned. +@param image A pointer to the image header + */ +CVAPI(CvRect) cvGetImageROI(const IplImage *image); + +/** @brief Creates a matrix header but does not allocate the matrix data. + +The function allocates a new matrix header and returns a pointer to it. The +matrix data can then be allocated using cvCreateData or set explicitly to +user-allocated data via cvSetData. +@param rows Number of rows in the matrix +@param cols Number of columns in the matrix +@param type Type of the matrix elements, see cvCreateMat + */ +CVAPI(CvMat *) cvCreateMatHeader(int rows, int cols, int type); + +#define CV_AUTOSTEP 0x7fffffff + +/** @brief Initializes a pre-allocated matrix header. + +This function is often used to process raw data with OpenCV matrix functions. +For example, the following code computes the matrix product of two matrices, +stored as ordinary arrays: +@code + double a[] = { 1, 2, 3, 4, + 5, 6, 7, 8, + 9, 10, 11, 12 }; + + double b[] = { 1, 5, 9, + 2, 6, 10, + 3, 7, 11, + 4, 8, 12 }; + + double c[9]; + CvMat Ma, Mb, Mc ; + + cvInitMatHeader(&Ma, 3, 4, CV_64FC1, a); + cvInitMatHeader(&Mb, 4, 3, CV_64FC1, b); + cvInitMatHeader(&Mc, 3, 3, CV_64FC1, c); + + cvMatMulAdd(&Ma, &Mb, 0, &Mc); + // the c array now contains the product of a (3x4) and b (4x3) +@endcode +@param mat A pointer to the matrix header to be initialized +@param rows Number of rows in the matrix +@param cols Number of columns in the matrix +@param type Type of the matrix elements, see cvCreateMat . +@param data Optional: data pointer assigned to the matrix header +@param step Optional: full row width in bytes of the assigned data. By default, +the minimal possible step is used which assumes there are no gaps between +subsequent rows of the matrix. + */ +CVAPI(CvMat *) +cvInitMatHeader(CvMat *mat, int rows, int cols, int type, + void *data CV_DEFAULT(NULL), int step CV_DEFAULT(CV_AUTOSTEP)); + +/** @brief Creates a matrix header and allocates the matrix data. + +The function call is equivalent to the following code: +@code + CvMat* mat = cvCreateMatHeader(rows, cols, type); + cvCreateData(mat); +@endcode +@param rows Number of rows in the matrix +@param cols Number of columns in the matrix +@param type The type of the matrix elements in the form +CV_\\C\ , where S=signed, U=unsigned, +F=float. For example, CV _ 8UC1 means the elements are 8-bit unsigned and the +there is 1 channel, and CV _ 32SC2 means the elements are 32-bit signed and +there are 2 channels. + */ +CVAPI(CvMat *) cvCreateMat(int rows, int cols, int type); + +/** @brief Deallocates a matrix. + +The function decrements the matrix data reference counter and deallocates matrix +header. If the data reference counter is 0, it also deallocates the data. : +@code + if(*mat ) + cvDecRefData(*mat); + cvFree((void**)mat); +@endcode +@param mat Double pointer to the matrix + */ +CVAPI(void) cvReleaseMat(CvMat **mat); + +/** @brief Decrements an array data reference counter. + +The function decrements the data reference counter in a CvMat or CvMatND if the +reference counter + +pointer is not NULL. If the counter reaches zero, the data is deallocated. In +the current implementation the reference counter is not NULL only if the data +was allocated using the cvCreateData function. The counter will be NULL in other +cases such as: external data was assigned to the header using cvSetData, header +is part of a larger matrix or image, or the header was converted from an image +or n-dimensional matrix header. +@param arr Pointer to an array header + */ +CV_INLINE void cvDecRefData(CvArr *arr) { + if (CV_IS_MAT(arr)) { + CvMat *mat = (CvMat *)arr; + mat->data.ptr = NULL; + if (mat->refcount != NULL && --*mat->refcount == 0) + cvFree(&mat->refcount); + mat->refcount = NULL; + } else if (CV_IS_MATND(arr)) { + CvMatND *mat = (CvMatND *)arr; + mat->data.ptr = NULL; + if (mat->refcount != NULL && --*mat->refcount == 0) + cvFree(&mat->refcount); + mat->refcount = NULL; + } +} + +/** @brief Increments array data reference counter. + +The function increments CvMat or CvMatND data reference counter and returns the +new counter value if the reference counter pointer is not NULL, otherwise it +returns zero. +@param arr Array header + */ +CV_INLINE int cvIncRefData(CvArr *arr) { + int refcount = 0; + if (CV_IS_MAT(arr)) { + CvMat *mat = (CvMat *)arr; + if (mat->refcount != NULL) + refcount = ++*mat->refcount; + } else if (CV_IS_MATND(arr)) { + CvMatND *mat = (CvMatND *)arr; + if (mat->refcount != NULL) + refcount = ++*mat->refcount; + } + return refcount; +} + +/** Creates an exact copy of the input matrix (except, may be, step value) */ +CVAPI(CvMat *) cvCloneMat(const CvMat *mat); + +/** @brief Returns matrix header corresponding to the rectangular sub-array of +input image or matrix. + +The function returns header, corresponding to a specified rectangle of the input +array. In other + +words, it allows the user to treat a rectangular part of input array as a +stand-alone array. ROI is taken into account by the function so the sub-array of +ROI is actually extracted. +@param arr Input array +@param submat Pointer to the resultant sub-array header +@param rect Zero-based coordinates of the rectangle of interest + */ +CVAPI(CvMat *) cvGetSubRect(const CvArr *arr, CvMat *submat, CvRect rect); +#define cvGetSubArr cvGetSubRect + +/** @brief Returns array row or row span. + +The function returns the header, corresponding to a specified row/row span of +the input array. cvGetRow(arr, submat, row) is a shortcut for cvGetRows(arr, +submat, row, row+1). +@param arr Input array +@param submat Pointer to the resulting sub-array header +@param start_row Zero-based index of the starting row (inclusive) of the span +@param end_row Zero-based index of the ending row (exclusive) of the span +@param delta_row Index step in the row span. That is, the function extracts +every delta_row -th row from start_row and up to (but not including) end_row . + */ +CVAPI(CvMat *) +cvGetRows(const CvArr *arr, CvMat *submat, int start_row, int end_row, + int delta_row CV_DEFAULT(1)); + +/** @overload +@param arr Input array +@param submat Pointer to the resulting sub-array header +@param row Zero-based index of the selected row +*/ +CV_INLINE CvMat *cvGetRow(const CvArr *arr, CvMat *submat, int row) { + return cvGetRows(arr, submat, row, row + 1, 1); +} + +/** @brief Returns one of more array columns. + +The function returns the header, corresponding to a specified column span of the +input array. That + +is, no data is copied. Therefore, any modifications of the submatrix will affect +the original array. If you need to copy the columns, use cvCloneMat. +cvGetCol(arr, submat, col) is a shortcut for cvGetCols(arr, submat, col, col+1). +@param arr Input array +@param submat Pointer to the resulting sub-array header +@param start_col Zero-based index of the starting column (inclusive) of the span +@param end_col Zero-based index of the ending column (exclusive) of the span + */ +CVAPI(CvMat *) +cvGetCols(const CvArr *arr, CvMat *submat, int start_col, int end_col); + +/** @overload +@param arr Input array +@param submat Pointer to the resulting sub-array header +@param col Zero-based index of the selected column +*/ +CV_INLINE CvMat *cvGetCol(const CvArr *arr, CvMat *submat, int col) { + return cvGetCols(arr, submat, col, col + 1); +} + +/** @brief Returns one of array diagonals. + +The function returns the header, corresponding to a specified diagonal of the +input array. +@param arr Input array +@param submat Pointer to the resulting sub-array header +@param diag Index of the array diagonal. Zero value corresponds to the main +diagonal, -1 corresponds to the diagonal above the main, 1 corresponds to the +diagonal below the main, and so forth. + */ +CVAPI(CvMat *) +cvGetDiag(const CvArr *arr, CvMat *submat, int diag CV_DEFAULT(0)); + +/** low-level scalar <-> raw data conversion functions */ +CVAPI(void) +cvScalarToRawData(const CvScalar *scalar, void *data, int type, + int extend_to_12 CV_DEFAULT(0)); + +CVAPI(void) cvRawDataToScalar(const void *data, int type, CvScalar *scalar); + +/** @brief Creates a new matrix header but does not allocate the matrix data. + +The function allocates a header for a multi-dimensional dense array. The array +data can further be allocated using cvCreateData or set explicitly to +user-allocated data via cvSetData. +@param dims Number of array dimensions +@param sizes Array of dimension sizes +@param type Type of array elements, see cvCreateMat + */ +CVAPI(CvMatND *) cvCreateMatNDHeader(int dims, const int *sizes, int type); + +/** @brief Creates the header and allocates the data for a multi-dimensional +dense array. + +This function call is equivalent to the following code: +@code + CvMatND* mat = cvCreateMatNDHeader(dims, sizes, type); + cvCreateData(mat); +@endcode +@param dims Number of array dimensions. This must not exceed CV_MAX_DIM (32 by +default, but can be changed at build time). +@param sizes Array of dimension sizes. +@param type Type of array elements, see cvCreateMat . + */ +CVAPI(CvMatND *) cvCreateMatND(int dims, const int *sizes, int type); + +/** @brief Initializes a pre-allocated multi-dimensional array header. + +@param mat A pointer to the array header to be initialized +@param dims The number of array dimensions +@param sizes An array of dimension sizes +@param type Type of array elements, see cvCreateMat +@param data Optional data pointer assigned to the matrix header + */ +CVAPI(CvMatND *) +cvInitMatNDHeader(CvMatND *mat, int dims, const int *sizes, int type, + void *data CV_DEFAULT(NULL)); + +/** @brief Deallocates a multi-dimensional array. + +The function decrements the array data reference counter and releases the array +header. If the reference counter reaches 0, it also deallocates the data. : +@code + if(*mat ) + cvDecRefData(*mat); + cvFree((void**)mat); +@endcode +@param mat Double pointer to the array + */ +CV_INLINE void cvReleaseMatND(CvMatND **mat) { cvReleaseMat((CvMat **)mat); } + +/** Creates a copy of CvMatND (except, may be, steps) */ +CVAPI(CvMatND *) cvCloneMatND(const CvMatND *mat); + +/** @brief Creates sparse array. + +The function allocates a multi-dimensional sparse array. Initially the array +contain no elements, that is PtrND and other related functions will return 0 for +every index. +@param dims Number of array dimensions. In contrast to the dense matrix, the +number of dimensions is practically unlimited (up to \f$2^{16}\f$ ). +@param sizes Array of dimension sizes +@param type Type of array elements. The same as for CvMat + */ +CVAPI(CvSparseMat *) cvCreateSparseMat(int dims, const int *sizes, int type); + +/** @brief Deallocates sparse array. + +The function releases the sparse array and clears the array pointer upon exit. +@param mat Double pointer to the array + */ +CVAPI(void) cvReleaseSparseMat(CvSparseMat **mat); + +/** Creates a copy of CvSparseMat (except, may be, zero items) */ +CVAPI(CvSparseMat *) cvCloneSparseMat(const CvSparseMat *mat); + +/** @brief Initializes sparse array elements iterator. + +The function initializes iterator of sparse array elements and returns pointer +to the first element, or NULL if the array is empty. +@param mat Input array +@param mat_iterator Initialized iterator + */ +CVAPI(CvSparseNode *) +cvInitSparseMatIterator(const CvSparseMat *mat, + CvSparseMatIterator *mat_iterator); + +/** @brief Returns the next sparse matrix element + +The function moves iterator to the next sparse matrix element and returns +pointer to it. In the current version there is no any particular order of the +elements, because they are stored in the hash table. The sample below +demonstrates how to iterate through the sparse matrix: +@code + // print all the non-zero sparse matrix elements and compute their sum + double sum = 0; + int i, dims = cvGetDims(sparsemat); + CvSparseMatIterator it; + CvSparseNode* node = cvInitSparseMatIterator(sparsemat, &it); + + for(; node != 0; node = cvGetNextSparseNode(&it)) + { + int* idx = CV_NODE_IDX(array, node); + float val = *(float*)CV_NODE_VAL(array, node); + printf("M"); + for(i = 0; i < dims; i++ ) + printf("[%d]", idx[i]); + printf("=%g\n", val); + + sum += val; + } + + printf("nTotal sum = %g\n", sum); +@endcode +@param mat_iterator Sparse array iterator + */ +CV_INLINE CvSparseNode *cvGetNextSparseNode(CvSparseMatIterator *mat_iterator) { + if (mat_iterator->node->next) + return mat_iterator->node = mat_iterator->node->next; + else { + int idx; + for (idx = ++mat_iterator->curidx; idx < mat_iterator->mat->hashsize; + idx++) { + CvSparseNode *node = (CvSparseNode *)mat_iterator->mat->hashtable[idx]; + if (node) { + mat_iterator->curidx = idx; + return mat_iterator->node = node; + } + } + return NULL; + } +} + +#define CV_MAX_ARR 10 + +/** matrix iterator: used for n-ary operations on dense arrays */ +typedef struct CvNArrayIterator { + int count; /**< number of arrays */ + int dims; /**< number of dimensions to iterate */ + CvSize size; /**< maximal common linear size: { width = size, height = 1 } */ + uchar *ptr[CV_MAX_ARR]; /**< pointers to the array slices */ + int stack[CV_MAX_DIM]; /**< for internal use */ + CvMatND *hdr[CV_MAX_ARR]; /**< pointers to the headers of the + matrices that are processed */ +} CvNArrayIterator; + +#define CV_NO_DEPTH_CHECK 1 +#define CV_NO_CN_CHECK 2 +#define CV_NO_SIZE_CHECK 4 + +/** initializes iterator that traverses through several arrays simultaneously + (the function together with cvNextArraySlice is used for + N-ari element-wise operations) */ +CVAPI(int) +cvInitNArrayIterator(int count, CvArr **arrs, const CvArr *mask, CvMatND *stubs, + CvNArrayIterator *array_iterator, int flags CV_DEFAULT(0)); + +/** returns zero value if iteration is finished, non-zero (slice length) + * otherwise */ +CVAPI(int) cvNextNArraySlice(CvNArrayIterator *array_iterator); + +/** @brief Returns type of array elements. + +The function returns type of the array elements. In the case of IplImage the +type is converted to CvMat-like representation. For example, if the image has +been created as: +@code + IplImage* img = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 3); +@endcode +The code cvGetElemType(img) will return CV_8UC3. +@param arr Input array + */ +CVAPI(int) cvGetElemType(const CvArr *arr); + +/** @brief Return number of array dimensions + +The function returns the array dimensionality and the array of dimension sizes. +In the case of IplImage or CvMat it always returns 2 regardless of number of +image/matrix rows. For example, the following code calculates total number of +array elements: +@code + int sizes[CV_MAX_DIM]; + int i, total = 1; + int dims = cvGetDims(arr, size); + for(i = 0; i < dims; i++ ) + total *= sizes[i]; +@endcode +@param arr Input array +@param sizes Optional output vector of the array dimension sizes. For 2d arrays +the number of rows (height) goes first, number of columns (width) next. + */ +CVAPI(int) cvGetDims(const CvArr *arr, int *sizes CV_DEFAULT(NULL)); + +/** @brief Returns array size along the specified dimension. + +@param arr Input array +@param index Zero-based dimension index (for matrices 0 means number of rows, 1 +means number of columns; for images 0 means height, 1 means width) + */ +CVAPI(int) cvGetDimSize(const CvArr *arr, int index); + +/** @brief Return pointer to a particular array element. + +The functions return a pointer to a specific array element. Number of array +dimension should match to the number of indices passed to the function except +for cvPtr1D function that can be used for sequential access to 1D, 2D or nD +dense arrays. + +The functions can be used for sparse arrays as well - if the requested node does +not exist they create it and set it to zero. + +All these as well as other functions accessing array elements ( cvGetND , +cvGetRealND , cvSet , cvSetND , cvSetRealND ) raise an error in case if the +element index is out of range. +@param arr Input array +@param idx0 The first zero-based component of the element index +@param type Optional output parameter: type of matrix elements + */ +CVAPI(uchar *) cvPtr1D(const CvArr *arr, int idx0, int *type CV_DEFAULT(NULL)); +/** @overload */ +CVAPI(uchar *) +cvPtr2D(const CvArr *arr, int idx0, int idx1, int *type CV_DEFAULT(NULL)); +/** @overload */ +CVAPI(uchar *) +cvPtr3D(const CvArr *arr, int idx0, int idx1, int idx2, + int *type CV_DEFAULT(NULL)); +/** @overload +@param arr Input array +@param idx Array of the element indices +@param type Optional output parameter: type of matrix elements +@param create_node Optional input parameter for sparse matrices. Non-zero value +of the parameter means that the requested element is created if it does not +exist already. +@param precalc_hashval Optional input parameter for sparse matrices. If the +pointer is not NULL, the function does not recalculate the node hash value, but +takes it from the specified location. It is useful for speeding up pair-wise +operations (TODO: provide an example) +*/ +CVAPI(uchar *) +cvPtrND(const CvArr *arr, const int *idx, int *type CV_DEFAULT(NULL), + int create_node CV_DEFAULT(1), + unsigned *precalc_hashval CV_DEFAULT(NULL)); + +/** @brief Return a specific array element. + +The functions return a specific array element. In the case of a sparse array the +functions return 0 if the requested node does not exist (no new node is created +by the functions). +@param arr Input array +@param idx0 The first zero-based component of the element index + */ +CVAPI(CvScalar) cvGet1D(const CvArr *arr, int idx0); +/** @overload */ +CVAPI(CvScalar) cvGet2D(const CvArr *arr, int idx0, int idx1); +/** @overload */ +CVAPI(CvScalar) cvGet3D(const CvArr *arr, int idx0, int idx1, int idx2); +/** @overload +@param arr Input array +@param idx Array of the element indices +*/ +CVAPI(CvScalar) cvGetND(const CvArr *arr, const int *idx); + +/** @brief Return a specific element of single-channel 1D, 2D, 3D or nD array. + +Returns a specific element of a single-channel array. If the array has multiple +channels, a runtime error is raised. Note that Get?D functions can be used +safely for both single-channel and multiple-channel arrays though they are a bit +slower. + +In the case of a sparse array the functions return 0 if the requested node does +not exist (no new node is created by the functions). +@param arr Input array. Must have a single channel. +@param idx0 The first zero-based component of the element index + */ +CVAPI(double) cvGetReal1D(const CvArr *arr, int idx0); +/** @overload */ +CVAPI(double) cvGetReal2D(const CvArr *arr, int idx0, int idx1); +/** @overload */ +CVAPI(double) cvGetReal3D(const CvArr *arr, int idx0, int idx1, int idx2); +/** @overload +@param arr Input array. Must have a single channel. +@param idx Array of the element indices +*/ +CVAPI(double) cvGetRealND(const CvArr *arr, const int *idx); + +/** @brief Change the particular array element. + +The functions assign the new value to a particular array element. In the case of +a sparse array the functions create the node if it does not exist yet. +@param arr Input array +@param idx0 The first zero-based component of the element index +@param value The assigned value + */ +CVAPI(void) cvSet1D(CvArr *arr, int idx0, CvScalar value); +/** @overload */ +CVAPI(void) cvSet2D(CvArr *arr, int idx0, int idx1, CvScalar value); +/** @overload */ +CVAPI(void) cvSet3D(CvArr *arr, int idx0, int idx1, int idx2, CvScalar value); +/** @overload +@param arr Input array +@param idx Array of the element indices +@param value The assigned value +*/ +CVAPI(void) cvSetND(CvArr *arr, const int *idx, CvScalar value); + +/** @brief Change a specific array element. + +The functions assign a new value to a specific element of a single-channel +array. If the array has multiple channels, a runtime error is raised. Note that +the Set\*D function can be used safely for both single-channel and +multiple-channel arrays, though they are a bit slower. + +In the case of a sparse array the functions create the node if it does not yet +exist. +@param arr Input array +@param idx0 The first zero-based component of the element index +@param value The assigned value + */ +CVAPI(void) cvSetReal1D(CvArr *arr, int idx0, double value); +/** @overload */ +CVAPI(void) cvSetReal2D(CvArr *arr, int idx0, int idx1, double value); +/** @overload */ +CVAPI(void) cvSetReal3D(CvArr *arr, int idx0, int idx1, int idx2, double value); +/** @overload +@param arr Input array +@param idx Array of the element indices +@param value The assigned value +*/ +CVAPI(void) cvSetRealND(CvArr *arr, const int *idx, double value); + +/** clears element of ND dense array, + in case of sparse arrays it deletes the specified node */ +CVAPI(void) cvClearND(CvArr *arr, const int *idx); + +/** @brief Returns matrix header for arbitrary array. + +The function returns a matrix header for the input array that can be a matrix - +CvMat, an image - IplImage, or a multi-dimensional dense array - CvMatND (the +third option is allowed only if allowND != 0) . In the case of matrix the +function simply returns the input pointer. In the case of IplImage\* or CvMatND +it initializes the header structure with parameters of the current image ROI and +returns &header. Because COI is not supported by CvMat, it is returned +separately. + +The function provides an easy way to handle both types of arrays - IplImage and +CvMat using the same code. Input array must have non-zero data pointer, +otherwise the function will report an error. + +@note If the input array is IplImage with planar data layout and COI set, the +function returns the pointer to the selected plane and COI == 0. This feature +allows user to process IplImage structures with planar data layout, even though +OpenCV does not support such images. +@param arr Input array +@param header Pointer to CvMat structure used as a temporary buffer +@param coi Optional output parameter for storing COI +@param allowND If non-zero, the function accepts multi-dimensional dense arrays +(CvMatND\*) and returns 2D matrix (if CvMatND has two dimensions) or 1D matrix +(when CvMatND has 1 dimension or more than 2 dimensions). The CvMatND array must +be continuous. +@sa cvGetImage, cvarrToMat. + */ +CVAPI(CvMat *) +cvGetMat(const CvArr *arr, CvMat *header, int *coi CV_DEFAULT(NULL), + int allowND CV_DEFAULT(0)); + +/** @brief Returns image header for arbitrary array. + +The function returns the image header for the input array that can be a matrix +(CvMat) or image (IplImage). In the case of an image the function simply returns +the input pointer. In the case of CvMat it initializes an image_header structure +with the parameters of the input matrix. Note that if we transform IplImage to +CvMat using cvGetMat and then transform CvMat back to IplImage using this +function, we will get different headers if the ROI is set in the original image. +@param arr Input array +@param image_header Pointer to IplImage structure used as a temporary buffer + */ +CVAPI(IplImage *) cvGetImage(const CvArr *arr, IplImage *image_header); + +/** @brief Changes the shape of a multi-dimensional array without copying the +data. + +The function is an advanced version of cvReshape that can work with +multi-dimensional arrays as well (though it can work with ordinary images and +matrices) and change the number of dimensions. + +Below are the two samples from the cvReshape description rewritten using +cvReshapeMatND: +@code + IplImage* color_img = cvCreateImage(cvSize(320,240), IPL_DEPTH_8U, 3); + IplImage gray_img_hdr, *gray_img; + gray_img = (IplImage*)cvReshapeMatND(color_img, sizeof(gray_img_hdr), +&gray_img_hdr, 1, 0, 0); + ... + int size[] = { 2, 2, 2 }; + CvMatND* mat = cvCreateMatND(3, size, CV_32F); + CvMat row_header, *row; + row = (CvMat*)cvReshapeMatND(mat, sizeof(row_header), &row_header, 0, 1, 0); +@endcode +In C, the header file for this function includes a convenient macro cvReshapeND +that does away with the sizeof_header parameter. So, the lines containing the +call to cvReshapeMatND in the examples may be replaced as follow: +@code + gray_img = (IplImage*)cvReshapeND(color_img, &gray_img_hdr, 1, 0, 0); + ... + row = (CvMat*)cvReshapeND(mat, &row_header, 0, 1, 0); +@endcode +@param arr Input array +@param sizeof_header Size of output header to distinguish between IplImage, +CvMat and CvMatND output headers +@param header Output header to be filled +@param new_cn New number of channels. new_cn = 0 means that the number of +channels remains unchanged. +@param new_dims New number of dimensions. new_dims = 0 means that the number of +dimensions remains the same. +@param new_sizes Array of new dimension sizes. Only new_dims-1 values are used, +because the total number of elements must remain the same. Thus, if new_dims = +1, new_sizes array is not used. + */ +CVAPI(CvArr *) +cvReshapeMatND(const CvArr *arr, int sizeof_header, CvArr *header, int new_cn, + int new_dims, int *new_sizes); + +#define cvReshapeND(arr, header, new_cn, new_dims, new_sizes) \ + cvReshapeMatND((arr), sizeof(*(header)), (header), (new_cn), (new_dims), \ + (new_sizes)) + +/** @brief Changes shape of matrix/image without copying data. + +The function initializes the CvMat header so that it points to the same data as +the original array but has a different shape - different number of channels, +different number of rows, or both. + +The following example code creates one image buffer and two image headers, the +first is for a 320x240x3 image and the second is for a 960x240x1 image: +@code + IplImage* color_img = cvCreateImage(cvSize(320,240), IPL_DEPTH_8U, 3); + CvMat gray_mat_hdr; + IplImage gray_img_hdr, *gray_img; + cvReshape(color_img, &gray_mat_hdr, 1); + gray_img = cvGetImage(&gray_mat_hdr, &gray_img_hdr); +@endcode +And the next example converts a 3x3 matrix to a single 1x9 vector: +@code + CvMat* mat = cvCreateMat(3, 3, CV_32F); + CvMat row_header, *row; + row = cvReshape(mat, &row_header, 0, 1); +@endcode +@param arr Input array +@param header Output header to be filled +@param new_cn New number of channels. 'new_cn = 0' means that the number of +channels remains unchanged. +@param new_rows New number of rows. 'new_rows = 0' means that the number of rows +remains unchanged unless it needs to be changed according to new_cn value. +*/ +CVAPI(CvMat *) +cvReshape(const CvArr *arr, CvMat *header, int new_cn, + int new_rows CV_DEFAULT(0)); + +/** Repeats source 2d array several times in both horizontal and + vertical direction to fill destination array */ +CVAPI(void) cvRepeat(const CvArr *src, CvArr *dst); + +/** @brief Allocates array data + +The function allocates image, matrix or multi-dimensional dense array data. Note +that in the case of matrix types OpenCV allocation functions are used. In the +case of IplImage they are used unless CV_TURN_ON_IPL_COMPATIBILITY() has been +called before. In the latter case IPL functions are used to allocate the data. +@param arr Array header + */ +CVAPI(void) cvCreateData(CvArr *arr); + +/** @brief Releases array data. + +The function releases the array data. In the case of CvMat or CvMatND it simply +calls cvDecRefData(), that is the function can not deallocate external data. See +also the note to cvCreateData . +@param arr Array header + */ +CVAPI(void) cvReleaseData(CvArr *arr); + +/** @brief Assigns user data to the array header. + +The function assigns user data to the array header. Header should be initialized +before using cvCreateMatHeader, cvCreateImageHeader, cvCreateMatNDHeader, +cvInitMatHeader, cvInitImageHeader or cvInitMatNDHeader. +@param arr Array header +@param data User data +@param step Full row length in bytes + */ +CVAPI(void) cvSetData(CvArr *arr, void *data, int step); + +/** @brief Retrieves low-level information about the array. + +The function fills output variables with low-level information about the array +data. All output + +parameters are optional, so some of the pointers may be set to NULL. If the +array is IplImage with ROI set, the parameters of ROI are returned. + +The following example shows how to get access to array elements. It computes +absolute values of the array elements : +@code + float* data; + int step; + CvSize size; + + cvGetRawData(array, (uchar**)&data, &step, &size); + step /= sizeof(data[0]); + + for(int y = 0; y < size.height; y++, data += step ) + for(int x = 0; x < size.width; x++ ) + data[x] = (float)fabs(data[x]); +@endcode +@param arr Array header +@param data Output pointer to the whole image origin or ROI origin if ROI is set +@param step Output full row length in bytes +@param roi_size Output ROI size + */ +CVAPI(void) +cvGetRawData(const CvArr *arr, uchar **data, int *step CV_DEFAULT(NULL), + CvSize *roi_size CV_DEFAULT(NULL)); + +/** @brief Returns size of matrix or image ROI. + +The function returns number of rows (CvSize::height) and number of columns +(CvSize::width) of the input matrix or image. In the case of image the size of +ROI is returned. +@param arr array header + */ +CVAPI(CvSize) cvGetSize(const CvArr *arr); + +/** @brief Copies one array to another. + +The function copies selected elements from an input array to an output array: + +\f[\texttt{dst} (I)= \texttt{src} (I) \quad \text{if} \quad \texttt{mask} (I) +\ne 0.\f] + +If any of the passed arrays is of IplImage type, then its ROI and COI fields are +used. Both arrays must have the same type, the same number of dimensions, and +the same size. The function can also copy sparse arrays (mask is not supported +in this case). +@param src The source array +@param dst The destination array +@param mask Operation mask, 8-bit single channel array; specifies elements of +the destination array to be changed + */ +CVAPI(void) +cvCopy(const CvArr *src, CvArr *dst, const CvArr *mask CV_DEFAULT(NULL)); + +/** @brief Sets every element of an array to a given value. + +The function copies the scalar value to every selected element of the +destination array: +\f[\texttt{arr} (I)= \texttt{value} \quad \text{if} \quad \texttt{mask} (I) \ne +0\f] If array arr is of IplImage type, then is ROI used, but COI must not be +set. +@param arr The destination array +@param value Fill value +@param mask Operation mask, 8-bit single channel array; specifies elements of +the destination array to be changed + */ +CVAPI(void) +cvSet(CvArr *arr, CvScalar value, const CvArr *mask CV_DEFAULT(NULL)); + +/** @brief Clears the array. + +The function clears the array. In the case of dense arrays (CvMat, CvMatND or +IplImage), cvZero(array) is equivalent to cvSet(array,cvScalarAll(0),0). In the +case of sparse arrays all the elements are removed. +@param arr Array to be cleared + */ +CVAPI(void) cvSetZero(CvArr *arr); +#define cvZero cvSetZero + +/** Splits a multi-channel array into the set of single-channel arrays or + extracts particular [color] plane */ +CVAPI(void) +cvSplit(const CvArr *src, CvArr *dst0, CvArr *dst1, CvArr *dst2, CvArr *dst3); + +/** Merges a set of single-channel arrays into the single multi-channel array + or inserts one particular [color] plane to the array */ +CVAPI(void) +cvMerge(const CvArr *src0, const CvArr *src1, const CvArr *src2, + const CvArr *src3, CvArr *dst); + +/** Copies several channels from input arrays to + certain channels of output arrays */ +CVAPI(void) +cvMixChannels(const CvArr **src, int src_count, CvArr **dst, int dst_count, + const int *from_to, int pair_count); + +/** @brief Converts one array to another with optional linear transformation. + +The function has several different purposes, and thus has several different +names. It copies one array to another with optional scaling, which is performed +first, and/or optional type conversion, performed after: + +\f[\texttt{dst} (I) = \texttt{scale} \texttt{src} (I) + ( \texttt{shift} _0, +\texttt{shift} _1,...)\f] + +All the channels of multi-channel arrays are processed independently. + +The type of conversion is done with rounding and saturation, that is if the +result of scaling + conversion can not be represented exactly by a value of the +destination array element type, it is set to the nearest representable value on +the real axis. +@param src Source array +@param dst Destination array +@param scale Scale factor +@param shift Value added to the scaled source array elements + */ +CVAPI(void) +cvConvertScale(const CvArr *src, CvArr *dst, double scale CV_DEFAULT(1), + double shift CV_DEFAULT(0)); +#define cvCvtScale cvConvertScale +#define cvScale cvConvertScale +#define cvConvert(src, dst) cvConvertScale((src), (dst), 1, 0) + +/** Performs linear transformation on every source array element, + stores absolute value of the result: + dst(x,y,c) = abs(scale*src(x,y,c)+shift). + destination array must have 8u type. + In other cases one may use cvConvertScale + cvAbsDiffS */ +CVAPI(void) +cvConvertScaleAbs(const CvArr *src, CvArr *dst, double scale CV_DEFAULT(1), + double shift CV_DEFAULT(0)); +#define cvCvtScaleAbs cvConvertScaleAbs + +/** checks termination criteria validity and + sets eps to default_eps (if it is not set), + max_iter to default_max_iters (if it is not set) +*/ +CVAPI(CvTermCriteria) +cvCheckTermCriteria(CvTermCriteria criteria, double default_eps, + int default_max_iters); + +/****************************************************************************************\ +* Arithmetic, logic and comparison operations * +\****************************************************************************************/ + +/** dst(mask) = src1(mask) + src2(mask) */ +CVAPI(void) +cvAdd(const CvArr *src1, const CvArr *src2, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(mask) = src(mask) + value */ +CVAPI(void) +cvAddS(const CvArr *src, CvScalar value, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(mask) = src1(mask) - src2(mask) */ +CVAPI(void) +cvSub(const CvArr *src1, const CvArr *src2, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(mask) = src(mask) - value = src(mask) + (-value) */ +CV_INLINE void cvSubS(const CvArr *src, CvScalar value, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)) { + cvAddS(src, + cvScalar(-value.val[0], -value.val[1], -value.val[2], -value.val[3]), + dst, mask); +} + +/** dst(mask) = value - src(mask) */ +CVAPI(void) +cvSubRS(const CvArr *src, CvScalar value, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(idx) = src1(idx) * src2(idx) * scale + (scaled element-wise multiplication of 2 arrays) */ +CVAPI(void) +cvMul(const CvArr *src1, const CvArr *src2, CvArr *dst, + double scale CV_DEFAULT(1)); + +/** element-wise division/inversion with scaling: + dst(idx) = src1(idx) * scale / src2(idx) + or dst(idx) = scale / src2(idx) if src1 == 0 */ +CVAPI(void) +cvDiv(const CvArr *src1, const CvArr *src2, CvArr *dst, + double scale CV_DEFAULT(1)); + +/** dst = src1 * scale + src2 */ +CVAPI(void) +cvScaleAdd(const CvArr *src1, CvScalar scale, const CvArr *src2, CvArr *dst); +#define cvAXPY(A, real_scalar, B, C) \ + cvScaleAdd(A, cvRealScalar(real_scalar), B, C) + +/** dst = src1 * alpha + src2 * beta + gamma */ +CVAPI(void) +cvAddWeighted(const CvArr *src1, double alpha, const CvArr *src2, double beta, + double gamma, CvArr *dst); + +/** @brief Calculates the dot product of two arrays in Euclidean metrics. + +The function calculates and returns the Euclidean dot product of two arrays. + +\f[src1 \bullet src2 = \sum _I ( \texttt{src1} (I) \texttt{src2} (I))\f] + +In the case of multiple channel arrays, the results for all channels are +accumulated. In particular, cvDotProduct(a,a) where a is a complex vector, will +return \f$||\texttt{a}||^2\f$. The function can process multi-dimensional +arrays, row by row, layer by layer, and so on. +@param src1 The first source array +@param src2 The second source array + */ +CVAPI(double) cvDotProduct(const CvArr *src1, const CvArr *src2); + +/** dst(idx) = src1(idx) & src2(idx) */ +CVAPI(void) +cvAnd(const CvArr *src1, const CvArr *src2, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(idx) = src(idx) & value */ +CVAPI(void) +cvAndS(const CvArr *src, CvScalar value, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(idx) = src1(idx) | src2(idx) */ +CVAPI(void) +cvOr(const CvArr *src1, const CvArr *src2, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(idx) = src(idx) | value */ +CVAPI(void) +cvOrS(const CvArr *src, CvScalar value, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(idx) = src1(idx) ^ src2(idx) */ +CVAPI(void) +cvXor(const CvArr *src1, const CvArr *src2, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(idx) = src(idx) ^ value */ +CVAPI(void) +cvXorS(const CvArr *src, CvScalar value, CvArr *dst, + const CvArr *mask CV_DEFAULT(NULL)); + +/** dst(idx) = ~src(idx) */ +CVAPI(void) cvNot(const CvArr *src, CvArr *dst); + +/** dst(idx) = lower(idx) <= src(idx) < upper(idx) */ +CVAPI(void) +cvInRange(const CvArr *src, const CvArr *lower, const CvArr *upper, CvArr *dst); + +/** dst(idx) = lower <= src(idx) < upper */ +CVAPI(void) +cvInRangeS(const CvArr *src, CvScalar lower, CvScalar upper, CvArr *dst); + +#define CV_CMP_EQ 0 +#define CV_CMP_GT 1 +#define CV_CMP_GE 2 +#define CV_CMP_LT 3 +#define CV_CMP_LE 4 +#define CV_CMP_NE 5 + +/** The comparison operation support single-channel arrays only. + Destination image should be 8uC1 or 8sC1 */ + +/** dst(idx) = src1(idx) _cmp_op_ src2(idx) */ +CVAPI(void) cvCmp(const CvArr *src1, const CvArr *src2, CvArr *dst, int cmp_op); + +/** dst(idx) = src1(idx) _cmp_op_ value */ +CVAPI(void) cvCmpS(const CvArr *src, double value, CvArr *dst, int cmp_op); + +/** dst(idx) = min(src1(idx),src2(idx)) */ +CVAPI(void) cvMin(const CvArr *src1, const CvArr *src2, CvArr *dst); + +/** dst(idx) = max(src1(idx),src2(idx)) */ +CVAPI(void) cvMax(const CvArr *src1, const CvArr *src2, CvArr *dst); + +/** dst(idx) = min(src(idx),value) */ +CVAPI(void) cvMinS(const CvArr *src, double value, CvArr *dst); + +/** dst(idx) = max(src(idx),value) */ +CVAPI(void) cvMaxS(const CvArr *src, double value, CvArr *dst); + +/** dst(x,y,c) = abs(src1(x,y,c) - src2(x,y,c)) */ +CVAPI(void) cvAbsDiff(const CvArr *src1, const CvArr *src2, CvArr *dst); + +/** dst(x,y,c) = abs(src(x,y,c) - value(c)) */ +CVAPI(void) cvAbsDiffS(const CvArr *src, CvArr *dst, CvScalar value); +#define cvAbs(src, dst) cvAbsDiffS((src), (dst), cvScalarAll(0)) + +/****************************************************************************************\ +* Math operations * +\****************************************************************************************/ + +/** Does cartesian->polar coordinates conversion. + Either of output components (magnitude or angle) is optional */ +CVAPI(void) +cvCartToPolar(const CvArr *x, const CvArr *y, CvArr *magnitude, + CvArr *angle CV_DEFAULT(NULL), + int angle_in_degrees CV_DEFAULT(0)); + +/** Does polar->cartesian coordinates conversion. + Either of output components (magnitude or angle) is optional. + If magnitude is missing it is assumed to be all 1's */ +CVAPI(void) +cvPolarToCart(const CvArr *magnitude, const CvArr *angle, CvArr *x, CvArr *y, + int angle_in_degrees CV_DEFAULT(0)); + +/** Does powering: dst(idx) = src(idx)^power */ +CVAPI(void) cvPow(const CvArr *src, CvArr *dst, double power); + +/** Does exponention: dst(idx) = exp(src(idx)). + Overflow is not handled yet. Underflow is handled. + Maximal relative error is ~7e-6 for single-precision input */ +CVAPI(void) cvExp(const CvArr *src, CvArr *dst); + +/** Calculates natural logarithms: dst(idx) = log(abs(src(idx))). + Logarithm of 0 gives large negative number(~-700) + Maximal relative error is ~3e-7 for single-precision output +*/ +CVAPI(void) cvLog(const CvArr *src, CvArr *dst); + +/** Fast arctangent calculation */ +CVAPI(float) cvFastArctan(float y, float x); + +/** Fast cubic root calculation */ +CVAPI(float) cvCbrt(float value); + +#define CV_CHECK_RANGE 1 +#define CV_CHECK_QUIET 2 +/** Checks array values for NaNs, Infs or simply for too large numbers + (if CV_CHECK_RANGE is set). If CV_CHECK_QUIET is set, + no runtime errors is raised (function returns zero value in case of "bad" + values). Otherwise cvError is called */ +CVAPI(int) +cvCheckArr(const CvArr *arr, int flags CV_DEFAULT(0), + double min_val CV_DEFAULT(0), double max_val CV_DEFAULT(0)); +#define cvCheckArray cvCheckArr + +#define CV_RAND_UNI 0 +#define CV_RAND_NORMAL 1 + +/** @brief Fills an array with random numbers and updates the RNG state. + +The function fills the destination array with uniformly or normally distributed +random numbers. +@param rng CvRNG state initialized by cvRNG +@param arr The destination array +@param dist_type Distribution type +> - **CV_RAND_UNI** uniform distribution +> - **CV_RAND_NORMAL** normal or Gaussian distribution +@param param1 The first parameter of the distribution. In the case of a uniform +distribution it is the inclusive lower boundary of the random numbers range. In +the case of a normal distribution it is the mean value of the random numbers. +@param param2 The second parameter of the distribution. In the case of a uniform +distribution it is the exclusive upper boundary of the random numbers range. In +the case of a normal distribution it is the standard deviation of the random +numbers. +@sa randu, randn, RNG::fill. + */ +CVAPI(void) +cvRandArr(CvRNG *rng, CvArr *arr, int dist_type, CvScalar param1, + CvScalar param2); + +CVAPI(void) +cvRandShuffle(CvArr *mat, CvRNG *rng, double iter_factor CV_DEFAULT(1.)); + +#define CV_SORT_EVERY_ROW 0 +#define CV_SORT_EVERY_COLUMN 1 +#define CV_SORT_ASCENDING 0 +#define CV_SORT_DESCENDING 16 + +CVAPI(void) +cvSort(const CvArr *src, CvArr *dst CV_DEFAULT(NULL), + CvArr *idxmat CV_DEFAULT(NULL), int flags CV_DEFAULT(0)); + +/** Finds real roots of a cubic equation */ +CVAPI(int) cvSolveCubic(const CvMat *coeffs, CvMat *roots); + +/** Finds all real and complex roots of a polynomial equation */ +CVAPI(void) +cvSolvePoly(const CvMat *coeffs, CvMat *roots2, int maxiter CV_DEFAULT(20), + int fig CV_DEFAULT(100)); + +/****************************************************************************************\ +* Matrix operations * +\****************************************************************************************/ + +/** @brief Calculates the cross product of two 3D vectors. + +The function calculates the cross product of two 3D vectors: +\f[\texttt{dst} = \texttt{src1} \times \texttt{src2}\f] +or: +\f[\begin{array}{l} \texttt{dst} _1 = \texttt{src1} _2 \texttt{src2} _3 - +\texttt{src1} _3 \texttt{src2} _2 \\ \texttt{dst} _2 = \texttt{src1} _3 +\texttt{src2} _1 - \texttt{src1} _1 \texttt{src2} _3 \\ \texttt{dst} _3 = +\texttt{src1} _1 \texttt{src2} _2 - \texttt{src1} _2 \texttt{src2} _1 +\end{array}\f] +@param src1 The first source vector +@param src2 The second source vector +@param dst The destination vector + */ +CVAPI(void) cvCrossProduct(const CvArr *src1, const CvArr *src2, CvArr *dst); + +/** Matrix transform: dst = A*B + C, C is optional */ +#define cvMatMulAdd(src1, src2, src3, dst) \ + cvGEMM((src1), (src2), 1., (src3), 1., (dst), 0) +#define cvMatMul(src1, src2, dst) cvMatMulAdd((src1), (src2), NULL, (dst)) + +#define CV_GEMM_A_T 1 +#define CV_GEMM_B_T 2 +#define CV_GEMM_C_T 4 +/** Extended matrix transform: + dst = alpha*op(A)*op(B) + beta*op(C), where op(X) is X or X^T */ +CVAPI(void) +cvGEMM(const CvArr *src1, const CvArr *src2, double alpha, const CvArr *src3, + double beta, CvArr *dst, int tABC CV_DEFAULT(0)); +#define cvMatMulAddEx cvGEMM + +/** Transforms each element of source array and stores + resultant vectors in destination array */ +CVAPI(void) +cvTransform(const CvArr *src, CvArr *dst, const CvMat *transmat, + const CvMat *shiftvec CV_DEFAULT(NULL)); +#define cvMatMulAddS cvTransform + +/** Does perspective transform on every element of input array */ +CVAPI(void) +cvPerspectiveTransform(const CvArr *src, CvArr *dst, const CvMat *mat); + +/** Calculates (A-delta)*(A-delta)^T (order=0) or (A-delta)^T*(A-delta) + * (order=1) */ +CVAPI(void) +cvMulTransposed(const CvArr *src, CvArr *dst, int order, + const CvArr *delta CV_DEFAULT(NULL), + double scale CV_DEFAULT(1.)); + +/** Transposes matrix. Square matrices can be transposed in-place */ +CVAPI(void) cvTranspose(const CvArr *src, CvArr *dst); +#define cvT cvTranspose + +/** Completes the symmetric matrix from the lower (LtoR=0) or from the upper + * (LtoR!=0) part */ +CVAPI(void) cvCompleteSymm(CvMat *matrix, int LtoR CV_DEFAULT(0)); + +/** Mirror array data around horizontal (flip=0), + vertical (flip=1) or both(flip=-1) axises: + cvFlip(src) flips images vertically and sequences horizontally (inplace) */ +CVAPI(void) +cvFlip(const CvArr *src, CvArr *dst CV_DEFAULT(NULL), + int flip_mode CV_DEFAULT(0)); +#define cvMirror cvFlip + +#define CV_SVD_MODIFY_A 1 +#define CV_SVD_U_T 2 +#define CV_SVD_V_T 4 + +/** Performs Singular Value Decomposition of a matrix */ +CVAPI(void) +cvSVD(CvArr *A, CvArr *W, CvArr *U CV_DEFAULT(NULL), CvArr *V CV_DEFAULT(NULL), + int flags CV_DEFAULT(0)); + +/** Performs Singular Value Back Substitution (solves A*X = B): + flags must be the same as in cvSVD */ +CVAPI(void) +cvSVBkSb(const CvArr *W, const CvArr *U, const CvArr *V, const CvArr *B, + CvArr *X, int flags); + +#define CV_LU 0 +#define CV_SVD 1 +#define CV_SVD_SYM 2 +#define CV_CHOLESKY 3 +#define CV_QR 4 +#define CV_NORMAL 16 + +/** Inverts matrix */ +CVAPI(double) +cvInvert(const CvArr *src, CvArr *dst, int method CV_DEFAULT(CV_LU)); +#define cvInv cvInvert + +/** Solves linear system (src1)*(dst) = (src2) + (returns 0 if src1 is a singular and CV_LU method is used) */ +CVAPI(int) +cvSolve(const CvArr *src1, const CvArr *src2, CvArr *dst, + int method CV_DEFAULT(CV_LU)); + +/** Calculates determinant of input matrix */ +CVAPI(double) cvDet(const CvArr *mat); + +/** Calculates trace of the matrix (sum of elements on the main diagonal) */ +CVAPI(CvScalar) cvTrace(const CvArr *mat); + +/** Finds eigen values and vectors of a symmetric matrix */ +CVAPI(void) +cvEigenVV(CvArr *mat, CvArr *evects, CvArr *evals, double eps CV_DEFAULT(0), + int lowindex CV_DEFAULT(-1), int highindex CV_DEFAULT(-1)); + +///* Finds selected eigen values and vectors of a symmetric matrix */ +// CVAPI(void) cvSelectedEigenVV( CvArr* mat, CvArr* evects, CvArr* evals, +// int lowindex, int highindex ); + +/** Makes an identity matrix (mat_ij = i == j) */ +CVAPI(void) +cvSetIdentity(CvArr *mat, CvScalar value CV_DEFAULT(cvRealScalar(1))); + +/** Fills matrix with given range of numbers */ +CVAPI(CvArr *) cvRange(CvArr *mat, double start, double end); + +/** @anchor core_c_CovarFlags +@name Flags for cvCalcCovarMatrix +@see cvCalcCovarMatrix + @{ +*/ + +/** flag for cvCalcCovarMatrix, transpose([v1-avg, v2-avg,...]) * + * [v1-avg,v2-avg,...] */ +#define CV_COVAR_SCRAMBLED 0 + +/** flag for cvCalcCovarMatrix, [v1-avg, v2-avg,...] * + * transpose([v1-avg,v2-avg,...]) */ +#define CV_COVAR_NORMAL 1 + +/** flag for cvCalcCovarMatrix, do not calc average (i.e. mean vector) - use the + input vector instead (useful for calculating covariance matrix by parts) */ +#define CV_COVAR_USE_AVG 2 + +/** flag for cvCalcCovarMatrix, scale the covariance matrix coefficients by + * number of the vectors */ +#define CV_COVAR_SCALE 4 + +/** flag for cvCalcCovarMatrix, all the input vectors are stored in a single + * matrix, as its rows */ +#define CV_COVAR_ROWS 8 + +/** flag for cvCalcCovarMatrix, all the input vectors are stored in a single + * matrix, as its columns */ +#define CV_COVAR_COLS 16 + +/** @} */ + +/** Calculates covariation matrix for a set of vectors +@see @ref core_c_CovarFlags "flags" +*/ +CVAPI(void) +cvCalcCovarMatrix(const CvArr **vects, int count, CvArr *cov_mat, CvArr *avg, + int flags); + +#define CV_PCA_DATA_AS_ROW 0 +#define CV_PCA_DATA_AS_COL 1 +#define CV_PCA_USE_AVG 2 +CVAPI(void) +cvCalcPCA(const CvArr *data, CvArr *mean, CvArr *eigenvals, CvArr *eigenvects, + int flags); + +CVAPI(void) +cvProjectPCA(const CvArr *data, const CvArr *mean, const CvArr *eigenvects, + CvArr *result); + +CVAPI(void) +cvBackProjectPCA(const CvArr *proj, const CvArr *mean, const CvArr *eigenvects, + CvArr *result); + +/** Calculates Mahalanobis(weighted) distance */ +CVAPI(double) +cvMahalanobis(const CvArr *vec1, const CvArr *vec2, const CvArr *mat); +#define cvMahalonobis cvMahalanobis + +/****************************************************************************************\ +* Array Statistics * +\****************************************************************************************/ + +/** Finds sum of array elements */ +CVAPI(CvScalar) cvSum(const CvArr *arr); + +/** Calculates number of non-zero pixels */ +CVAPI(int) cvCountNonZero(const CvArr *arr); + +/** Calculates mean value of array elements */ +CVAPI(CvScalar) cvAvg(const CvArr *arr, const CvArr *mask CV_DEFAULT(NULL)); + +/** Calculates mean and standard deviation of pixel values */ +CVAPI(void) +cvAvgSdv(const CvArr *arr, CvScalar *mean, CvScalar *std_dev, + const CvArr *mask CV_DEFAULT(NULL)); + +/** Finds global minimum, maximum and their positions */ +CVAPI(void) +cvMinMaxLoc(const CvArr *arr, double *min_val, double *max_val, + CvPoint *min_loc CV_DEFAULT(NULL), + CvPoint *max_loc CV_DEFAULT(NULL), + const CvArr *mask CV_DEFAULT(NULL)); + +/** @anchor core_c_NormFlags + @name Flags for cvNorm and cvNormalize + @{ +*/ +#define CV_C 1 +#define CV_L1 2 +#define CV_L2 4 +#define CV_NORM_MASK 7 +#define CV_RELATIVE 8 +#define CV_DIFF 16 +#define CV_MINMAX 32 + +#define CV_DIFF_C (CV_DIFF | CV_C) +#define CV_DIFF_L1 (CV_DIFF | CV_L1) +#define CV_DIFF_L2 (CV_DIFF | CV_L2) +#define CV_RELATIVE_C (CV_RELATIVE | CV_C) +#define CV_RELATIVE_L1 (CV_RELATIVE | CV_L1) +#define CV_RELATIVE_L2 (CV_RELATIVE | CV_L2) +/** @} */ + +/** Finds norm, difference norm or relative difference norm for an array (or two +arrays) +@see ref core_c_NormFlags "flags" +*/ +CVAPI(double) +cvNorm(const CvArr *arr1, const CvArr *arr2 CV_DEFAULT(NULL), + int norm_type CV_DEFAULT(CV_L2), const CvArr *mask CV_DEFAULT(NULL)); + +/** @see ref core_c_NormFlags "flags" */ +CVAPI(void) +cvNormalize(const CvArr *src, CvArr *dst, double a CV_DEFAULT(1.), + double b CV_DEFAULT(0.), int norm_type CV_DEFAULT(CV_L2), + const CvArr *mask CV_DEFAULT(NULL)); + +/** @anchor core_c_ReduceFlags + @name Flags for cvReduce + @{ +*/ +#define CV_REDUCE_SUM 0 +#define CV_REDUCE_AVG 1 +#define CV_REDUCE_MAX 2 +#define CV_REDUCE_MIN 3 +/** @} */ + +/** @see @ref core_c_ReduceFlags "flags" */ +CVAPI(void) +cvReduce(const CvArr *src, CvArr *dst, int dim CV_DEFAULT(-1), + int op CV_DEFAULT(CV_REDUCE_SUM)); + +/****************************************************************************************\ +* Discrete Linear Transforms and Related Functions * +\****************************************************************************************/ + +/** @anchor core_c_DftFlags + @name Flags for cvDFT, cvDCT and cvMulSpectrums + @{ + */ +#define CV_DXT_FORWARD 0 +#define CV_DXT_INVERSE 1 +#define CV_DXT_SCALE 2 /**< divide result by size of array */ +#define CV_DXT_INV_SCALE (CV_DXT_INVERSE + CV_DXT_SCALE) +#define CV_DXT_INVERSE_SCALE CV_DXT_INV_SCALE +#define CV_DXT_ROWS 4 /**< transform each row individually */ +#define CV_DXT_MUL_CONJ \ + 8 /**< conjugate the second argument of cvMulSpectrums */ +/** @} */ + +/** Discrete Fourier Transform: + complex->complex, + real->ccs (forward), + ccs->real (inverse) +@see core_c_DftFlags "flags" +*/ +CVAPI(void) +cvDFT(const CvArr *src, CvArr *dst, int flags, int nonzero_rows CV_DEFAULT(0)); +#define cvFFT cvDFT + +/** Multiply results of DFTs: DFT(X)*DFT(Y) or DFT(X)*conj(DFT(Y)) +@see core_c_DftFlags "flags" +*/ +CVAPI(void) +cvMulSpectrums(const CvArr *src1, const CvArr *src2, CvArr *dst, int flags); + +/** Finds optimal DFT vector size >= size0 */ +CVAPI(int) cvGetOptimalDFTSize(int size0); + +/** Discrete Cosine Transform +@see core_c_DftFlags "flags" +*/ +CVAPI(void) cvDCT(const CvArr *src, CvArr *dst, int flags); + +/****************************************************************************************\ +* Dynamic data structures * +\****************************************************************************************/ + +/** Calculates length of sequence slice (with support of negative indices). */ +CVAPI(int) cvSliceLength(CvSlice slice, const CvSeq *seq); + +/** Creates new memory storage. + block_size == 0 means that default, + somewhat optimal size, is used (currently, it is 64K) */ +CVAPI(CvMemStorage *) cvCreateMemStorage(int block_size CV_DEFAULT(0)); + +/** Creates a memory storage that will borrow memory blocks from parent storage + */ +CVAPI(CvMemStorage *) cvCreateChildMemStorage(CvMemStorage *parent); + +/** Releases memory storage. All the children of a parent must be released + before the parent. A child storage returns all the blocks to parent when it + is released */ +CVAPI(void) cvReleaseMemStorage(CvMemStorage **storage); + +/** Clears memory storage. This is the only way(!!!) (besides + cvRestoreMemStoragePos) to reuse memory allocated for the storage - + cvClearSeq,cvClearSet ... do not free any memory. A child storage returns all + the blocks to the parent when it is cleared */ +CVAPI(void) cvClearMemStorage(CvMemStorage *storage); + +/** Remember a storage "free memory" position */ +CVAPI(void) +cvSaveMemStoragePos(const CvMemStorage *storage, CvMemStoragePos *pos); + +/** Restore a storage "free memory" position */ +CVAPI(void) cvRestoreMemStoragePos(CvMemStorage *storage, CvMemStoragePos *pos); + +/** Allocates continuous buffer of the specified size in the storage */ +CVAPI(void *) cvMemStorageAlloc(CvMemStorage *storage, size_t size); + +/** Allocates string in memory storage */ +// CVAPI(CvString) cvMemStorageAllocString( CvMemStorage* storage, const char* +// ptr, +// int len CV_DEFAULT(-1) ); + +/** Creates new empty sequence that will reside in the specified storage */ +CVAPI(CvSeq *) +cvCreateSeq(int seq_flags, size_t header_size, size_t elem_size, + CvMemStorage *storage); + +/** Changes default size (granularity) of sequence blocks. + The default size is ~1Kbyte */ +CVAPI(void) cvSetSeqBlockSize(CvSeq *seq, int delta_elems); + +/** Adds new element to the end of sequence. Returns pointer to the element */ +CVAPI(schar *) cvSeqPush(CvSeq *seq, const void *element CV_DEFAULT(NULL)); + +/** Adds new element to the beginning of sequence. Returns pointer to it */ +CVAPI(schar *) cvSeqPushFront(CvSeq *seq, const void *element CV_DEFAULT(NULL)); + +/** Removes the last element from sequence and optionally saves it */ +CVAPI(void) cvSeqPop(CvSeq *seq, void *element CV_DEFAULT(NULL)); + +/** Removes the first element from sequence and optioanally saves it */ +CVAPI(void) cvSeqPopFront(CvSeq *seq, void *element CV_DEFAULT(NULL)); + +#define CV_FRONT 1 +#define CV_BACK 0 +/** Adds several new elements to the end of sequence */ +CVAPI(void) +cvSeqPushMulti(CvSeq *seq, const void *elements, int count, + int in_front CV_DEFAULT(0)); + +/** Removes several elements from the end of sequence and optionally saves them + */ +CVAPI(void) +cvSeqPopMulti(CvSeq *seq, void *elements, int count, + int in_front CV_DEFAULT(0)); + +/** Inserts a new element in the middle of sequence. + cvSeqInsert(seq,0,elem) == cvSeqPushFront(seq,elem) */ +CVAPI(schar *) +cvSeqInsert(CvSeq *seq, int before_index, const void *element CV_DEFAULT(NULL)); + +/** Removes specified sequence element */ +CVAPI(void) cvSeqRemove(CvSeq *seq, int index); + +/** Removes all the elements from the sequence. The freed memory + can be reused later only by the same sequence unless cvClearMemStorage + or cvRestoreMemStoragePos is called */ +CVAPI(void) cvClearSeq(CvSeq *seq); + +/** Retrieves pointer to specified sequence element. + Negative indices are supported and mean counting from the end + (e.g -1 means the last sequence element) */ +CVAPI(schar *) cvGetSeqElem(const CvSeq *seq, int index); + +/** Calculates index of the specified sequence element. + Returns -1 if element does not belong to the sequence */ +CVAPI(int) +cvSeqElemIdx(const CvSeq *seq, const void *element, + CvSeqBlock **block CV_DEFAULT(NULL)); + +/** Initializes sequence writer. The new elements will be added to the end of + * sequence */ +CVAPI(void) cvStartAppendToSeq(CvSeq *seq, CvSeqWriter *writer); + +/** Combination of cvCreateSeq and cvStartAppendToSeq */ +CVAPI(void) +cvStartWriteSeq(int seq_flags, int header_size, int elem_size, + CvMemStorage *storage, CvSeqWriter *writer); + +/** Closes sequence writer, updates sequence header and returns pointer + to the resultant sequence + (which may be useful if the sequence was created using cvStartWriteSeq)) +*/ +CVAPI(CvSeq *) cvEndWriteSeq(CvSeqWriter *writer); + +/** Updates sequence header. May be useful to get access to some of previously + written elements via cvGetSeqElem or sequence reader */ +CVAPI(void) cvFlushSeqWriter(CvSeqWriter *writer); + +/** Initializes sequence reader. + The sequence can be read in forward or backward direction */ +CVAPI(void) +cvStartReadSeq(const CvSeq *seq, CvSeqReader *reader, + int reverse CV_DEFAULT(0)); + +/** Returns current sequence reader position (currently observed sequence + * element) */ +CVAPI(int) cvGetSeqReaderPos(CvSeqReader *reader); + +/** Changes sequence reader position. It may seek to an absolute or + to relative to the current position */ +CVAPI(void) +cvSetSeqReaderPos(CvSeqReader *reader, int index, + int is_relative CV_DEFAULT(0)); + +/** Copies sequence content to a continuous piece of memory */ +CVAPI(void *) +cvCvtSeqToArray(const CvSeq *seq, void *elements, + CvSlice slice CV_DEFAULT(CV_WHOLE_SEQ)); + +/** Creates sequence header for array. + After that all the operations on sequences that do not alter the content + can be applied to the resultant sequence */ +CVAPI(CvSeq *) +cvMakeSeqHeaderForArray(int seq_type, int header_size, int elem_size, + void *elements, int total, CvSeq *seq, + CvSeqBlock *block); + +/** Extracts sequence slice (with or without copying sequence elements) */ +CVAPI(CvSeq *) +cvSeqSlice(const CvSeq *seq, CvSlice slice, + CvMemStorage *storage CV_DEFAULT(NULL), int copy_data CV_DEFAULT(0)); + +CV_INLINE CvSeq *cvCloneSeq(const CvSeq *seq, + CvMemStorage *storage CV_DEFAULT(NULL)) { + return cvSeqSlice(seq, CV_WHOLE_SEQ, storage, 1); +} + +/** Removes sequence slice */ +CVAPI(void) cvSeqRemoveSlice(CvSeq *seq, CvSlice slice); + +/** Inserts a sequence or array into another sequence */ +CVAPI(void) +cvSeqInsertSlice(CvSeq *seq, int before_index, const CvArr *from_arr); + +/** a < b ? -1 : a > b ? 1 : 0 */ +typedef int(CV_CDECL *CvCmpFunc)(const void *a, const void *b, void *userdata); + +/** Sorts sequence in-place given element comparison function */ +CVAPI(void) +cvSeqSort(CvSeq *seq, CvCmpFunc func, void *userdata CV_DEFAULT(NULL)); + +/** Finds element in a [sorted] sequence */ +CVAPI(schar *) +cvSeqSearch(CvSeq *seq, const void *elem, CvCmpFunc func, int is_sorted, + int *elem_idx, void *userdata CV_DEFAULT(NULL)); + +/** Reverses order of sequence elements in-place */ +CVAPI(void) cvSeqInvert(CvSeq *seq); + +/** Splits sequence into one or more equivalence classes using the specified + * criteria */ +CVAPI(int) +cvSeqPartition(const CvSeq *seq, CvMemStorage *storage, CvSeq **labels, + CvCmpFunc is_equal, void *userdata); + +/************ Internal sequence functions ************/ +CVAPI(void) cvChangeSeqBlock(void *reader, int direction); +CVAPI(void) cvCreateSeqBlock(CvSeqWriter *writer); + +/** Creates a new set */ +CVAPI(CvSet *) +cvCreateSet(int set_flags, int header_size, int elem_size, + CvMemStorage *storage); + +/** Adds new element to the set and returns pointer to it */ +CVAPI(int) +cvSetAdd(CvSet *set_header, CvSetElem *elem CV_DEFAULT(NULL), + CvSetElem **inserted_elem CV_DEFAULT(NULL)); + +/** Fast variant of cvSetAdd */ +CV_INLINE CvSetElem *cvSetNew(CvSet *set_header) { + CvSetElem *elem = set_header->free_elems; + if (elem) { + set_header->free_elems = elem->next_free; + elem->flags = elem->flags & CV_SET_ELEM_IDX_MASK; + set_header->active_count++; + } else + cvSetAdd(set_header, NULL, &elem); + return elem; +} + +/** Removes set element given its pointer */ +CV_INLINE void cvSetRemoveByPtr(CvSet *set_header, void *elem) { + CvSetElem *_elem = (CvSetElem *)elem; + assert(_elem->flags >= + 0 /*&& (elem->flags & CV_SET_ELEM_IDX_MASK) < set_header->total*/); + _elem->next_free = set_header->free_elems; + _elem->flags = (_elem->flags & CV_SET_ELEM_IDX_MASK) | CV_SET_ELEM_FREE_FLAG; + set_header->free_elems = _elem; + set_header->active_count--; +} + +/** Removes element from the set by its index */ +CVAPI(void) cvSetRemove(CvSet *set_header, int index); + +/** Returns a set element by index. If the element doesn't belong to the set, + NULL is returned */ +CV_INLINE CvSetElem *cvGetSetElem(const CvSet *set_header, int idx) { + CvSetElem *elem = (CvSetElem *)(void *)cvGetSeqElem((CvSeq *)set_header, idx); + return elem && CV_IS_SET_ELEM(elem) ? elem : 0; +} + +/** Removes all the elements from the set */ +CVAPI(void) cvClearSet(CvSet *set_header); + +/** Creates new graph */ +CVAPI(CvGraph *) +cvCreateGraph(int graph_flags, int header_size, int vtx_size, int edge_size, + CvMemStorage *storage); + +/** Adds new vertex to the graph */ +CVAPI(int) +cvGraphAddVtx(CvGraph *graph, const CvGraphVtx *vtx CV_DEFAULT(NULL), + CvGraphVtx **inserted_vtx CV_DEFAULT(NULL)); + +/** Removes vertex from the graph together with all incident edges */ +CVAPI(int) cvGraphRemoveVtx(CvGraph *graph, int index); +CVAPI(int) cvGraphRemoveVtxByPtr(CvGraph *graph, CvGraphVtx *vtx); + +/** Link two vertices specified by indices or pointers if they + are not connected or return pointer to already existing edge + connecting the vertices. + Functions return 1 if a new edge was created, 0 otherwise */ +CVAPI(int) +cvGraphAddEdge(CvGraph *graph, int start_idx, int end_idx, + const CvGraphEdge *edge CV_DEFAULT(NULL), + CvGraphEdge **inserted_edge CV_DEFAULT(NULL)); + +CVAPI(int) +cvGraphAddEdgeByPtr(CvGraph *graph, CvGraphVtx *start_vtx, CvGraphVtx *end_vtx, + const CvGraphEdge *edge CV_DEFAULT(NULL), + CvGraphEdge **inserted_edge CV_DEFAULT(NULL)); + +/** Remove edge connecting two vertices */ +CVAPI(void) cvGraphRemoveEdge(CvGraph *graph, int start_idx, int end_idx); +CVAPI(void) +cvGraphRemoveEdgeByPtr(CvGraph *graph, CvGraphVtx *start_vtx, + CvGraphVtx *end_vtx); + +/** Find edge connecting two vertices */ +CVAPI(CvGraphEdge *) +cvFindGraphEdge(const CvGraph *graph, int start_idx, int end_idx); +CVAPI(CvGraphEdge *) +cvFindGraphEdgeByPtr(const CvGraph *graph, const CvGraphVtx *start_vtx, + const CvGraphVtx *end_vtx); +#define cvGraphFindEdge cvFindGraphEdge +#define cvGraphFindEdgeByPtr cvFindGraphEdgeByPtr + +/** Remove all vertices and edges from the graph */ +CVAPI(void) cvClearGraph(CvGraph *graph); + +/** Count number of edges incident to the vertex */ +CVAPI(int) cvGraphVtxDegree(const CvGraph *graph, int vtx_idx); +CVAPI(int) cvGraphVtxDegreeByPtr(const CvGraph *graph, const CvGraphVtx *vtx); + +/** Retrieves graph vertex by given index */ +#define cvGetGraphVtx(graph, idx) \ + (CvGraphVtx *)cvGetSetElem((CvSet *)(graph), (idx)) + +/** Retrieves index of a graph vertex given its pointer */ +#define cvGraphVtxIdx(graph, vtx) ((vtx)->flags & CV_SET_ELEM_IDX_MASK) + +/** Retrieves index of a graph edge given its pointer */ +#define cvGraphEdgeIdx(graph, edge) ((edge)->flags & CV_SET_ELEM_IDX_MASK) + +#define cvGraphGetVtxCount(graph) ((graph)->active_count) +#define cvGraphGetEdgeCount(graph) ((graph)->edges->active_count) + +#define CV_GRAPH_VERTEX 1 +#define CV_GRAPH_TREE_EDGE 2 +#define CV_GRAPH_BACK_EDGE 4 +#define CV_GRAPH_FORWARD_EDGE 8 +#define CV_GRAPH_CROSS_EDGE 16 +#define CV_GRAPH_ANY_EDGE 30 +#define CV_GRAPH_NEW_TREE 32 +#define CV_GRAPH_BACKTRACKING 64 +#define CV_GRAPH_OVER -1 + +#define CV_GRAPH_ALL_ITEMS -1 + +/** flags for graph vertices and edges */ +#define CV_GRAPH_ITEM_VISITED_FLAG (1 << 30) +#define CV_IS_GRAPH_VERTEX_VISITED(vtx) \ + (((CvGraphVtx *)(vtx))->flags & CV_GRAPH_ITEM_VISITED_FLAG) +#define CV_IS_GRAPH_EDGE_VISITED(edge) \ + (((CvGraphEdge *)(edge))->flags & CV_GRAPH_ITEM_VISITED_FLAG) +#define CV_GRAPH_SEARCH_TREE_NODE_FLAG (1 << 29) +#define CV_GRAPH_FORWARD_EDGE_FLAG (1 << 28) + +typedef struct CvGraphScanner { + CvGraphVtx *vtx; /* current graph vertex (or current edge origin) */ + CvGraphVtx *dst; /* current graph edge destination vertex */ + CvGraphEdge *edge; /* current edge */ + + CvGraph *graph; /* the graph */ + CvSeq *stack; /* the graph vertex stack */ + int index; /* the lower bound of certainly visited vertices */ + int mask; /* event mask */ +} CvGraphScanner; + +/** Creates new graph scanner. */ +CVAPI(CvGraphScanner *) +cvCreateGraphScanner(CvGraph *graph, CvGraphVtx *vtx CV_DEFAULT(NULL), + int mask CV_DEFAULT(CV_GRAPH_ALL_ITEMS)); + +/** Releases graph scanner. */ +CVAPI(void) cvReleaseGraphScanner(CvGraphScanner **scanner); + +/** Get next graph element */ +CVAPI(int) cvNextGraphItem(CvGraphScanner *scanner); + +/** Creates a copy of graph */ +CVAPI(CvGraph *) cvCloneGraph(const CvGraph *graph, CvMemStorage *storage); + +/** Does look-up transformation. Elements of the source array + (that should be 8uC1 or 8sC1) are used as indexes in lutarr 256-element table + */ +CVAPI(void) cvLUT(const CvArr *src, CvArr *dst, const CvArr *lut); + +/******************* Iteration through the sequence tree *****************/ +typedef struct CvTreeNodeIterator { + const void *node; + int level; + int max_level; +} CvTreeNodeIterator; + +CVAPI(void) +cvInitTreeNodeIterator(CvTreeNodeIterator *tree_iterator, const void *first, + int max_level); +CVAPI(void *) cvNextTreeNode(CvTreeNodeIterator *tree_iterator); +CVAPI(void *) cvPrevTreeNode(CvTreeNodeIterator *tree_iterator); + +/** Inserts sequence into tree with specified "parent" sequence. + If parent is equal to frame (e.g. the most external contour), + then added contour will have null pointer to parent. */ +CVAPI(void) cvInsertNodeIntoTree(void *node, void *parent, void *frame); + +/** Removes contour from tree (together with the contour children). */ +CVAPI(void) cvRemoveNodeFromTree(void *node, void *frame); + +/** Gathers pointers to all the sequences, + accessible from the `first`, to the single sequence */ +CVAPI(CvSeq *) +cvTreeToNodeSeq(const void *first, int header_size, CvMemStorage *storage); + +/** The function implements the K-means algorithm for clustering an array of + sample vectors in a specified number of classes */ +#define CV_KMEANS_USE_INITIAL_LABELS 1 +CVAPI(int) +cvKMeans2(const CvArr *samples, int cluster_count, CvArr *labels, + CvTermCriteria termcrit, int attempts CV_DEFAULT(1), + CvRNG *rng CV_DEFAULT(0), int flags CV_DEFAULT(0), + CvArr *_centers CV_DEFAULT(0), double *compactness CV_DEFAULT(0)); + +/****************************************************************************************\ +* System functions * +\****************************************************************************************/ + +/** Loads optimized functions from IPP, MKL etc. or switches back to pure C code + */ +CVAPI(int) cvUseOptimized(int on_off); + +typedef IplImage *(CV_STDCALL *Cv_iplCreateImageHeader)(int, int, int, char *, + char *, int, int, int, + int, int, IplROI *, + IplImage *, void *, + IplTileInfo *); +typedef void(CV_STDCALL *Cv_iplAllocateImageData)(IplImage *, int, int); +typedef void(CV_STDCALL *Cv_iplDeallocate)(IplImage *, int); +typedef IplROI *(CV_STDCALL *Cv_iplCreateROI)(int, int, int, int, int); +typedef IplImage *(CV_STDCALL *Cv_iplCloneImage)(const IplImage *); + +/** @brief Makes OpenCV use IPL functions for allocating IplImage and IplROI +structures. + +Normally, the function is not called directly. Instead, a simple macro +CV_TURN_ON_IPL_COMPATIBILITY() is used that calls cvSetIPLAllocators and passes +there pointers to IPL allocation functions. : +@code + ... + CV_TURN_ON_IPL_COMPATIBILITY() + ... +@endcode +@param create_header pointer to a function, creating IPL image header. +@param allocate_data pointer to a function, allocating IPL image data. +@param deallocate pointer to a function, deallocating IPL image. +@param create_roi pointer to a function, creating IPL image ROI (i.e. Region of +Interest). +@param clone_image pointer to a function, cloning an IPL image. + */ +CVAPI(void) +cvSetIPLAllocators(Cv_iplCreateImageHeader create_header, + Cv_iplAllocateImageData allocate_data, + Cv_iplDeallocate deallocate, Cv_iplCreateROI create_roi, + Cv_iplCloneImage clone_image); + +#define CV_TURN_ON_IPL_COMPATIBILITY() \ + cvSetIPLAllocators(iplCreateImageHeader, iplAllocateImage, iplDeallocate, \ + iplCreateROI, iplCloneImage) + +/****************************************************************************************\ +* Data Persistence * +\****************************************************************************************/ + +#if 0 +/********************************** High-level functions ********************************/ + +/** @brief Opens file storage for reading or writing data. + +The function opens file storage for reading or writing data. In the latter case, a new file is +created or an existing file is rewritten. The type of the read or written file is determined by the +filename extension: .xml for XML, .yml or .yaml for YAML and .json for JSON. + +At the same time, it also supports adding parameters like "example.xml?base64". + +The function returns a pointer to the CvFileStorage structure. +If the file cannot be opened then the function returns NULL. +@param filename Name of the file associated with the storage +@param memstorage Memory storage used for temporary data and for +: storing dynamic structures, such as CvSeq or CvGraph . If it is NULL, a temporary memory + storage is created and used. +@param flags Can be one of the following: +> - **CV_STORAGE_READ** the storage is open for reading +> - **CV_STORAGE_WRITE** the storage is open for writing + (use **CV_STORAGE_WRITE | CV_STORAGE_WRITE_BASE64** to write rawdata in Base64) +@param encoding + */ +CVAPI(CvFileStorage*) cvOpenFileStorage( const char* filename, CvMemStorage* memstorage, + int flags, const char* encoding CV_DEFAULT(NULL) ); + +/** @brief Releases file storage. + +The function closes the file associated with the storage and releases all the temporary structures. +It must be called after all I/O operations with the storage are finished. +@param fs Double pointer to the released file storage + */ +CVAPI(void) cvReleaseFileStorage( CvFileStorage** fs ); + +/** returns attribute value or 0 (NULL) if there is no such attribute */ +CVAPI(const char*) cvAttrValue( const CvAttrList* attr, const char* attr_name ); + +/** @brief Starts writing a new structure. + +The function starts writing a compound structure (collection) that can be a sequence or a map. After +all the structure fields, which can be scalars or structures, are written, cvEndWriteStruct should +be called. The function can be used to group some objects or to implement the write function for a +some user object (see CvTypeInfo). +@param fs File storage +@param name Name of the written structure. The structure can be accessed by this name when the +storage is read. +@param struct_flags A combination one of the following values: +- **CV_NODE_SEQ** the written structure is a sequence (see discussion of CvFileStorage ), + that is, its elements do not have a name. +- **CV_NODE_MAP** the written structure is a map (see discussion of CvFileStorage ), that + is, all its elements have names. +One and only one of the two above flags must be specified +- **CV_NODE_FLOW** the optional flag that makes sense only for YAML streams. It means that + the structure is written as a flow (not as a block), which is more compact. It is + recommended to use this flag for structures or arrays whose elements are all scalars. +@param type_name Optional parameter - the object type name. In + case of XML it is written as a type_id attribute of the structure opening tag. In the case of + YAML it is written after a colon following the structure name (see the example in + CvFileStorage description). In case of JSON it is written as a name/value pair. + Mainly it is used with user objects. When the storage is read, the + encoded type name is used to determine the object type (see CvTypeInfo and cvFindType ). +@param attributes This parameter is not used in the current implementation + */ +CVAPI(void) cvStartWriteStruct( CvFileStorage* fs, const char* name, + int struct_flags, const char* type_name CV_DEFAULT(NULL), + CvAttrList attributes CV_DEFAULT(cvAttrList())); + +/** @brief Finishes writing to a file node collection. +@param fs File storage +@sa cvStartWriteStruct. + */ +CVAPI(void) cvEndWriteStruct( CvFileStorage* fs ); + +/** @brief Writes an integer value. + +The function writes a single integer value (with or without a name) to the file storage. +@param fs File storage +@param name Name of the written value. Should be NULL if and only if the parent structure is a +sequence. +@param value The written value + */ +CVAPI(void) cvWriteInt( CvFileStorage* fs, const char* name, int value ); + +/** @brief Writes a floating-point value. + +The function writes a single floating-point value (with or without a name) to file storage. Special +values are encoded as follows: NaN (Not A Number) as .NaN, infinity as +.Inf or -.Inf. + +The following example shows how to use the low-level writing functions to store custom structures, +such as termination criteria, without registering a new type. : +@code + void write_termcriteria( CvFileStorage* fs, const char* struct_name, + CvTermCriteria* termcrit ) + { + cvStartWriteStruct( fs, struct_name, CV_NODE_MAP, NULL, cvAttrList(0,0)); + cvWriteComment( fs, "termination criteria", 1 ); // just a description + if( termcrit->type & CV_TERMCRIT_ITER ) + cvWriteInteger( fs, "max_iterations", termcrit->max_iter ); + if( termcrit->type & CV_TERMCRIT_EPS ) + cvWriteReal( fs, "accuracy", termcrit->epsilon ); + cvEndWriteStruct( fs ); + } +@endcode +@param fs File storage +@param name Name of the written value. Should be NULL if and only if the parent structure is a +sequence. +@param value The written value +*/ +CVAPI(void) cvWriteReal( CvFileStorage* fs, const char* name, double value ); + +/** @brief Writes a text string. + +The function writes a text string to file storage. +@param fs File storage +@param name Name of the written string . Should be NULL if and only if the parent structure is a +sequence. +@param str The written text string +@param quote If non-zero, the written string is put in quotes, regardless of whether they are +required. Otherwise, if the flag is zero, quotes are used only when they are required (e.g. when +the string starts with a digit or contains spaces). + */ +CVAPI(void) cvWriteString( CvFileStorage* fs, const char* name, + const char* str, int quote CV_DEFAULT(0) ); + +/** @brief Writes a comment. + +The function writes a comment into file storage. The comments are skipped when the storage is read. +@param fs File storage +@param comment The written comment, single-line or multi-line +@param eol_comment If non-zero, the function tries to put the comment at the end of current line. +If the flag is zero, if the comment is multi-line, or if it does not fit at the end of the current +line, the comment starts a new line. + */ +CVAPI(void) cvWriteComment( CvFileStorage* fs, const char* comment, + int eol_comment ); + +/** @brief Writes an object to file storage. + +The function writes an object to file storage. First, the appropriate type info is found using +cvTypeOf. Then, the write method associated with the type info is called. + +Attributes are used to customize the writing procedure. The standard types support the following +attributes (all the dt attributes have the same format as in cvWriteRawData): + +-# CvSeq + - **header_dt** description of user fields of the sequence header that follow CvSeq, or + CvChain (if the sequence is a Freeman chain) or CvContour (if the sequence is a contour or + point sequence) + - **dt** description of the sequence elements. + - **recursive** if the attribute is present and is not equal to "0" or "false", the whole + tree of sequences (contours) is stored. +-# CvGraph + - **header_dt** description of user fields of the graph header that follows CvGraph; + - **vertex_dt** description of user fields of graph vertices + - **edge_dt** description of user fields of graph edges (note that the edge weight is + always written, so there is no need to specify it explicitly) + +Below is the code that creates the YAML file shown in the CvFileStorage description: +@code + #include "cxcore.h" + + int main( int argc, char** argv ) + { + CvMat* mat = cvCreateMat( 3, 3, CV_32F ); + CvFileStorage* fs = cvOpenFileStorage( "example.yml", 0, CV_STORAGE_WRITE ); + + cvSetIdentity( mat ); + cvWrite( fs, "A", mat, cvAttrList(0,0) ); + + cvReleaseFileStorage( &fs ); + cvReleaseMat( &mat ); + return 0; + } +@endcode +@param fs File storage +@param name Name of the written object. Should be NULL if and only if the parent structure is a +sequence. +@param ptr Pointer to the object +@param attributes The attributes of the object. They are specific for each particular type (see +the discussion below). + */ +CVAPI(void) cvWrite( CvFileStorage* fs, const char* name, const void* ptr, + CvAttrList attributes CV_DEFAULT(cvAttrList())); + +/** @brief Starts the next stream. + +The function finishes the currently written stream and starts the next stream. In the case of XML +the file with multiple streams looks like this: +@code{.xml} + + + + + + + ... +@endcode +The YAML file will look like this: +@code{.yaml} + %YAML 1.0 + # stream #1 data + ... + --- + # stream #2 data +@endcode +This is useful for concatenating files or for resuming the writing process. +@param fs File storage + */ +CVAPI(void) cvStartNextStream( CvFileStorage* fs ); + +/** @brief Writes multiple numbers. + +The function writes an array, whose elements consist of single or multiple numbers. The function +call can be replaced with a loop containing a few cvWriteInt and cvWriteReal calls, but a single +call is more efficient. Note that because none of the elements have a name, they should be written +to a sequence rather than a map. +@param fs File storage +@param src Pointer to the written array +@param len Number of the array elements to write +@param dt Specification of each array element, see @ref format_spec "format specification" + */ +CVAPI(void) cvWriteRawData( CvFileStorage* fs, const void* src, + int len, const char* dt ); + +/** @brief Writes multiple numbers in Base64. + +If either CV_STORAGE_WRITE_BASE64 or cv::FileStorage::WRITE_BASE64 is used, +this function will be the same as cvWriteRawData. If neither, the main +difference is that it outputs a sequence in Base64 encoding rather than +in plain text. + +This function can only be used to write a sequence with a type "binary". + +@param fs File storage +@param src Pointer to the written array +@param len Number of the array elements to write +@param dt Specification of each array element, see @ref format_spec "format specification" +*/ +CVAPI(void) cvWriteRawDataBase64( CvFileStorage* fs, const void* src, + int len, const char* dt ); + +/** @brief Returns a unique pointer for a given name. + +The function returns a unique pointer for each particular file node name. This pointer can be then +passed to the cvGetFileNode function that is faster than cvGetFileNodeByName because it compares +text strings by comparing pointers rather than the strings' content. + +Consider the following example where an array of points is encoded as a sequence of 2-entry maps: +@code + points: + - { x: 10, y: 10 } + - { x: 20, y: 20 } + - { x: 30, y: 30 } + # ... +@endcode +Then, it is possible to get hashed "x" and "y" pointers to speed up decoding of the points. : +@code + #include "cxcore.h" + + int main( int argc, char** argv ) + { + CvFileStorage* fs = cvOpenFileStorage( "points.yml", 0, CV_STORAGE_READ ); + CvStringHashNode* x_key = cvGetHashedNode( fs, "x", -1, 1 ); + CvStringHashNode* y_key = cvGetHashedNode( fs, "y", -1, 1 ); + CvFileNode* points = cvGetFileNodeByName( fs, 0, "points" ); + + if( CV_NODE_IS_SEQ(points->tag) ) + { + CvSeq* seq = points->data.seq; + int i, total = seq->total; + CvSeqReader reader; + cvStartReadSeq( seq, &reader, 0 ); + for( i = 0; i < total; i++ ) + { + CvFileNode* pt = (CvFileNode*)reader.ptr; + #if 1 // faster variant + CvFileNode* xnode = cvGetFileNode( fs, pt, x_key, 0 ); + CvFileNode* ynode = cvGetFileNode( fs, pt, y_key, 0 ); + assert( xnode && CV_NODE_IS_INT(xnode->tag) && + ynode && CV_NODE_IS_INT(ynode->tag)); + int x = xnode->data.i; // or x = cvReadInt( xnode, 0 ); + int y = ynode->data.i; // or y = cvReadInt( ynode, 0 ); + #elif 1 // slower variant; does not use x_key & y_key + CvFileNode* xnode = cvGetFileNodeByName( fs, pt, "x" ); + CvFileNode* ynode = cvGetFileNodeByName( fs, pt, "y" ); + assert( xnode && CV_NODE_IS_INT(xnode->tag) && + ynode && CV_NODE_IS_INT(ynode->tag)); + int x = xnode->data.i; // or x = cvReadInt( xnode, 0 ); + int y = ynode->data.i; // or y = cvReadInt( ynode, 0 ); + #else // the slowest yet the easiest to use variant + int x = cvReadIntByName( fs, pt, "x", 0 ); + int y = cvReadIntByName( fs, pt, "y", 0 ); + #endif + CV_NEXT_SEQ_ELEM( seq->elem_size, reader ); + printf(" + } + } + cvReleaseFileStorage( &fs ); + return 0; + } +@endcode +Please note that whatever method of accessing a map you are using, it is still much slower than +using plain sequences; for example, in the above example, it is more efficient to encode the points +as pairs of integers in a single numeric sequence. +@param fs File storage +@param name Literal node name +@param len Length of the name (if it is known apriori), or -1 if it needs to be calculated +@param create_missing Flag that specifies, whether an absent key should be added into the hash table +*/ +CVAPI(CvStringHashNode*) cvGetHashedKey( CvFileStorage* fs, const char* name, + int len CV_DEFAULT(-1), + int create_missing CV_DEFAULT(0)); + +/** @brief Retrieves one of the top-level nodes of the file storage. + +The function returns one of the top-level file nodes. The top-level nodes do not have a name, they +correspond to the streams that are stored one after another in the file storage. If the index is out +of range, the function returns a NULL pointer, so all the top-level nodes can be iterated by +subsequent calls to the function with stream_index=0,1,..., until the NULL pointer is returned. +This function can be used as a base for recursive traversal of the file storage. +@param fs File storage +@param stream_index Zero-based index of the stream. See cvStartNextStream . In most cases, +there is only one stream in the file; however, there can be several. + */ +CVAPI(CvFileNode*) cvGetRootFileNode( const CvFileStorage* fs, + int stream_index CV_DEFAULT(0) ); + +/** @brief Finds a node in a map or file storage. + +The function finds a file node. It is a faster version of cvGetFileNodeByName (see +cvGetHashedKey discussion). Also, the function can insert a new node, if it is not in the map yet. +@param fs File storage +@param map The parent map. If it is NULL, the function searches a top-level node. If both map and +key are NULLs, the function returns the root file node - a map that contains top-level nodes. +@param key Unique pointer to the node name, retrieved with cvGetHashedKey +@param create_missing Flag that specifies whether an absent node should be added to the map + */ +CVAPI(CvFileNode*) cvGetFileNode( CvFileStorage* fs, CvFileNode* map, + const CvStringHashNode* key, + int create_missing CV_DEFAULT(0) ); + +/** @brief Finds a node in a map or file storage. + +The function finds a file node by name. The node is searched either in map or, if the pointer is +NULL, among the top-level file storage nodes. Using this function for maps and cvGetSeqElem (or +sequence reader) for sequences, it is possible to navigate through the file storage. To speed up +multiple queries for a certain key (e.g., in the case of an array of structures) one may use a +combination of cvGetHashedKey and cvGetFileNode. +@param fs File storage +@param map The parent map. If it is NULL, the function searches in all the top-level nodes +(streams), starting with the first one. +@param name The file node name + */ +CVAPI(CvFileNode*) cvGetFileNodeByName( const CvFileStorage* fs, + const CvFileNode* map, + const char* name ); + +/** @brief Retrieves an integer value from a file node. + +The function returns an integer that is represented by the file node. If the file node is NULL, the +default_value is returned (thus, it is convenient to call the function right after cvGetFileNode +without checking for a NULL pointer). If the file node has type CV_NODE_INT, then node-\>data.i is +returned. If the file node has type CV_NODE_REAL, then node-\>data.f is converted to an integer +and returned. Otherwise the error is reported. +@param node File node +@param default_value The value that is returned if node is NULL + */ +CV_INLINE int cvReadInt( const CvFileNode* node, int default_value CV_DEFAULT(0) ) +{ + return !node ? default_value : + CV_NODE_IS_INT(node->tag) ? node->data.i : + CV_NODE_IS_REAL(node->tag) ? cvRound(node->data.f) : 0x7fffffff; +} + +/** @brief Finds a file node and returns its value. + +The function is a simple superposition of cvGetFileNodeByName and cvReadInt. +@param fs File storage +@param map The parent map. If it is NULL, the function searches a top-level node. +@param name The node name +@param default_value The value that is returned if the file node is not found + */ +CV_INLINE int cvReadIntByName( const CvFileStorage* fs, const CvFileNode* map, + const char* name, int default_value CV_DEFAULT(0) ) +{ + return cvReadInt( cvGetFileNodeByName( fs, map, name ), default_value ); +} + +/** @brief Retrieves a floating-point value from a file node. + +The function returns a floating-point value that is represented by the file node. If the file node +is NULL, the default_value is returned (thus, it is convenient to call the function right after +cvGetFileNode without checking for a NULL pointer). If the file node has type CV_NODE_REAL , +then node-\>data.f is returned. If the file node has type CV_NODE_INT , then node-:math:\>data.f +is converted to floating-point and returned. Otherwise the result is not determined. +@param node File node +@param default_value The value that is returned if node is NULL + */ +CV_INLINE double cvReadReal( const CvFileNode* node, double default_value CV_DEFAULT(0.) ) +{ + return !node ? default_value : + CV_NODE_IS_INT(node->tag) ? (double)node->data.i : + CV_NODE_IS_REAL(node->tag) ? node->data.f : 1e300; +} + +/** @brief Finds a file node and returns its value. + +The function is a simple superposition of cvGetFileNodeByName and cvReadReal . +@param fs File storage +@param map The parent map. If it is NULL, the function searches a top-level node. +@param name The node name +@param default_value The value that is returned if the file node is not found + */ +CV_INLINE double cvReadRealByName( const CvFileStorage* fs, const CvFileNode* map, + const char* name, double default_value CV_DEFAULT(0.) ) +{ + return cvReadReal( cvGetFileNodeByName( fs, map, name ), default_value ); +} + +/** @brief Retrieves a text string from a file node. + +The function returns a text string that is represented by the file node. If the file node is NULL, +the default_value is returned (thus, it is convenient to call the function right after +cvGetFileNode without checking for a NULL pointer). If the file node has type CV_NODE_STR , then +node-:math:\>data.str.ptr is returned. Otherwise the result is not determined. +@param node File node +@param default_value The value that is returned if node is NULL + */ +CV_INLINE const char* cvReadString( const CvFileNode* node, + const char* default_value CV_DEFAULT(NULL) ) +{ + return !node ? default_value : CV_NODE_IS_STRING(node->tag) ? node->data.str.ptr : 0; +} + +/** @brief Finds a file node by its name and returns its value. + +The function is a simple superposition of cvGetFileNodeByName and cvReadString . +@param fs File storage +@param map The parent map. If it is NULL, the function searches a top-level node. +@param name The node name +@param default_value The value that is returned if the file node is not found + */ +CV_INLINE const char* cvReadStringByName( const CvFileStorage* fs, const CvFileNode* map, + const char* name, const char* default_value CV_DEFAULT(NULL) ) +{ + return cvReadString( cvGetFileNodeByName( fs, map, name ), default_value ); +} + + +/** @brief Decodes an object and returns a pointer to it. + +The function decodes a user object (creates an object in a native representation from the file +storage subtree) and returns it. The object to be decoded must be an instance of a registered type +that supports the read method (see CvTypeInfo). The type of the object is determined by the type +name that is encoded in the file. If the object is a dynamic structure, it is created either in +memory storage and passed to cvOpenFileStorage or, if a NULL pointer was passed, in temporary +memory storage, which is released when cvReleaseFileStorage is called. Otherwise, if the object is +not a dynamic structure, it is created in a heap and should be released with a specialized function +or by using the generic cvRelease. +@param fs File storage +@param node The root object node +@param attributes Unused parameter + */ +CVAPI(void*) cvRead( CvFileStorage* fs, CvFileNode* node, + CvAttrList* attributes CV_DEFAULT(NULL)); + +/** @brief Finds an object by name and decodes it. + +The function is a simple superposition of cvGetFileNodeByName and cvRead. +@param fs File storage +@param map The parent map. If it is NULL, the function searches a top-level node. +@param name The node name +@param attributes Unused parameter + */ +CV_INLINE void* cvReadByName( CvFileStorage* fs, const CvFileNode* map, + const char* name, CvAttrList* attributes CV_DEFAULT(NULL) ) +{ + return cvRead( fs, cvGetFileNodeByName( fs, map, name ), attributes ); +} + + +/** @brief Initializes the file node sequence reader. + +The function initializes the sequence reader to read data from a file node. The initialized reader +can be then passed to cvReadRawDataSlice. +@param fs File storage +@param src The file node (a sequence) to read numbers from +@param reader Pointer to the sequence reader + */ +CVAPI(void) cvStartReadRawData( const CvFileStorage* fs, const CvFileNode* src, + CvSeqReader* reader ); + +/** @brief Initializes file node sequence reader. + +The function reads one or more elements from the file node, representing a sequence, to a +user-specified array. The total number of read sequence elements is a product of total and the +number of components in each array element. For example, if dt=2if, the function will read total\*3 +sequence elements. As with any sequence, some parts of the file node sequence can be skipped or read +repeatedly by repositioning the reader using cvSetSeqReaderPos. +@param fs File storage +@param reader The sequence reader. Initialize it with cvStartReadRawData . +@param count The number of elements to read +@param dst Pointer to the destination array +@param dt Specification of each array element. It has the same format as in cvWriteRawData . + */ +CVAPI(void) cvReadRawDataSlice( const CvFileStorage* fs, CvSeqReader* reader, + int count, void* dst, const char* dt ); + +/** @brief Reads multiple numbers. + +The function reads elements from a file node that represents a sequence of scalars. +@param fs File storage +@param src The file node (a sequence) to read numbers from +@param dst Pointer to the destination array +@param dt Specification of each array element. It has the same format as in cvWriteRawData . + */ +CVAPI(void) cvReadRawData( const CvFileStorage* fs, const CvFileNode* src, + void* dst, const char* dt ); + +/** @brief Writes a file node to another file storage. + +The function writes a copy of a file node to file storage. Possible applications of the function are +merging several file storages into one and conversion between XML, YAML and JSON formats. +@param fs Destination file storage +@param new_node_name New name of the file node in the destination file storage. To keep the +existing name, use cvcvGetFileNodeName +@param node The written node +@param embed If the written node is a collection and this parameter is not zero, no extra level of +hierarchy is created. Instead, all the elements of node are written into the currently written +structure. Of course, map elements can only be embedded into another map, and sequence elements +can only be embedded into another sequence. + */ +CVAPI(void) cvWriteFileNode( CvFileStorage* fs, const char* new_node_name, + const CvFileNode* node, int embed ); + +/** @brief Returns the name of a file node. + +The function returns the name of a file node or NULL, if the file node does not have a name or if +node is NULL. +@param node File node + */ +CVAPI(const char*) cvGetFileNodeName( const CvFileNode* node ); + +/*********************************** Adding own types ***********************************/ + +/** @brief Registers a new type. + +The function registers a new type, which is described by info . The function creates a copy of the +structure, so the user should delete it after calling the function. +@param info Type info structure + */ +CVAPI(void) cvRegisterType( const CvTypeInfo* info ); + +/** @brief Unregisters the type. + +The function unregisters a type with a specified name. If the name is unknown, it is possible to +locate the type info by an instance of the type using cvTypeOf or by iterating the type list, +starting from cvFirstType, and then calling cvUnregisterType(info-\>typeName). +@param type_name Name of an unregistered type + */ +CVAPI(void) cvUnregisterType( const char* type_name ); + +/** @brief Returns the beginning of a type list. + +The function returns the first type in the list of registered types. Navigation through the list can +be done via the prev and next fields of the CvTypeInfo structure. + */ +CVAPI(CvTypeInfo*) cvFirstType(void); + +/** @brief Finds a type by its name. + +The function finds a registered type by its name. It returns NULL if there is no type with the +specified name. +@param type_name Type name + */ +CVAPI(CvTypeInfo*) cvFindType( const char* type_name ); + +/** @brief Returns the type of an object. + +The function finds the type of a given object. It iterates through the list of registered types and +calls the is_instance function/method for every type info structure with that object until one of +them returns non-zero or until the whole list has been traversed. In the latter case, the function +returns NULL. +@param struct_ptr The object pointer + */ +CVAPI(CvTypeInfo*) cvTypeOf( const void* struct_ptr ); + +#endif + +/** @brief Releases an object. + + The function finds the type of a given object and calls release with the double + pointer. + @param struct_ptr Double pointer to the object + */ +CVAPI(void) cvRelease(void **struct_ptr); + +/** @brief Makes a clone of an object. + +The function finds the type of a given object and calls clone with the passed +object. Of course, if you know the object type, for example, struct_ptr is +CvMat\*, it is faster to call the specific function, like cvCloneMat. +@param struct_ptr The object to clone + */ +CVAPI(void *) cvClone(const void *struct_ptr); + +/*********************************** Measuring Execution Time + * ***************************/ + +/** helper functions for RNG initialization and accurate time measurement: + uses internal clock counter on x86 */ +CVAPI(int64) cvGetTickCount(void); +CVAPI(double) cvGetTickFrequency(void); + +/*********************************** CPU capabilities + * ***********************************/ + +CVAPI(int) cvCheckHardwareSupport(int feature); + +/*********************************** Multi-Threading + * ************************************/ + +/** retrieve/set the number of threads used in OpenMP implementations */ +CVAPI(int) cvGetNumThreads(void); +CVAPI(void) cvSetNumThreads(int threads CV_DEFAULT(0)); +/** get index of the thread being executed */ +CVAPI(int) cvGetThreadNum(void); + +/********************************** Error Handling + * **************************************/ + +/** Get current OpenCV error status */ +CVAPI(int) cvGetErrStatus(void); + +/** Sets error status silently */ +CVAPI(void) cvSetErrStatus(int status); + +#define CV_ErrModeLeaf 0 /* Print error and exit program */ +#define CV_ErrModeParent 1 /* Print error and continue */ +#define CV_ErrModeSilent 2 /* Don't print and continue */ + +/** Retrieves current error processing mode */ +CVAPI(int) cvGetErrMode(void); + +/** Sets error processing mode, returns previously used mode */ +CVAPI(int) cvSetErrMode(int mode); + +/** Sets error status and performs some additional actions (displaying message + box, writing message to stderr, terminating application etc.) depending on the + current error mode */ +CVAPI(void) +cvError(int status, const char *func_name, const char *err_msg, + const char *file_name, int line); + +/** Retrieves textual description of the error given its code */ +CVAPI(const char *) cvErrorStr(int status); + +/** Retrieves detailed information about the last error occurred */ +CVAPI(int) +cvGetErrInfo(const char **errcode_desc, const char **description, + const char **filename, int *line); + +/** Maps IPP error codes to the counterparts from OpenCV */ +CVAPI(int) cvErrorFromIppStatus(int ipp_status); + +typedef int(CV_CDECL *CvErrorCallback)(int status, const char *func_name, + const char *err_msg, + const char *file_name, int line, + void *userdata); + +/** Assigns a new error-handling function */ +CVAPI(CvErrorCallback) +cvRedirectError(CvErrorCallback error_handler, void *userdata CV_DEFAULT(NULL), + void **prev_userdata CV_DEFAULT(NULL)); + +/** Output nothing */ +CVAPI(int) +cvNulDevReport(int status, const char *func_name, const char *err_msg, + const char *file_name, int line, void *userdata); + +/** Output to console(fprintf(stderr,...)) */ +CVAPI(int) +cvStdErrReport(int status, const char *func_name, const char *err_msg, + const char *file_name, int line, void *userdata); + +/** Output to MessageBox(WIN32) */ +CVAPI(int) +cvGuiBoxReport(int status, const char *func_name, const char *err_msg, + const char *file_name, int line, void *userdata); + +#define OPENCV_ERROR(status, func, context) \ + cvError((status), (func), (context), __FILE__, __LINE__) + +#define OPENCV_ASSERT(expr, func, context) \ + { \ + if (!(expr)) { \ + OPENCV_ERROR(CV_StsInternal, (func), (context)); \ + } \ + } + +#define OPENCV_CALL(Func) \ + { \ + Func; \ + } + +/** CV_FUNCNAME macro defines icvFuncName constant which is used by CV_ERROR + * macro */ +#ifdef CV_NO_FUNC_NAMES +#define CV_FUNCNAME(Name) +#define cvFuncName "" +#else +#define CV_FUNCNAME(Name) static char cvFuncName[] = Name +#endif + +/** + CV_ERROR macro unconditionally raises error with passed code and message. + After raising error, control will be transferred to the exit label. + */ +#define CV_ERROR(Code, Msg) \ + { \ + cvError((Code), cvFuncName, Msg, __FILE__, __LINE__); \ + __CV_EXIT__; \ + } + +/** + CV_CHECK macro checks error status after CV (or IPL) + function call. If error detected, control will be transferred to the exit + label. + */ +#define CV_CHECK() \ + { \ + if (cvGetErrStatus() < 0) \ + CV_ERROR(CV_StsBackTrace, "Inner function failed."); \ + } + +/** + CV_CALL macro calls CV (or IPL) function, checks error status and + signals a error if the function failed. Useful in "parent node" + error processing mode + */ +#define CV_CALL(Func) \ + { \ + Func; \ + CV_CHECK(); \ + } + +/** Runtime assertion macro */ +#define CV_ASSERT(Condition) \ + { \ + if (!(Condition)) \ + CV_ERROR(CV_StsInternal, "Assertion: " #Condition " failed"); \ + } + +#define __CV_BEGIN__ { +#define __CV_END__ \ + goto exit; \ + exit:; \ + } +#define __CV_EXIT__ goto exit + +/** @} core_c */ + +#ifdef __cplusplus +} // extern "C" +#endif + +#ifdef __cplusplus + +#include "opencv2/core/utility.hpp" + +namespace cv { + +//! @addtogroup core_c_glue +//! @{ + +/////////////////////////////////////////// glue +////////////////////////////////////////////// + +//! converts array (CvMat or IplImage) to cv::Mat +CV_EXPORTS Mat cvarrToMat(const CvArr *arr, bool copyData = false, + bool allowND = true, int coiMode = 0, + AutoBuffer *buf = 0); + +static inline Mat cvarrToMatND(const CvArr *arr, bool copyData = false, + int coiMode = 0) { + return cvarrToMat(arr, copyData, true, coiMode); +} + +//! extracts Channel of Interest from CvMat or IplImage and makes cv::Mat out of +//! it. +CV_EXPORTS void extractImageCOI(const CvArr *arr, OutputArray coiimg, + int coi = -1); +//! inserts single-channel cv::Mat into a multi-channel CvMat or IplImage +CV_EXPORTS void insertImageCOI(InputArray coiimg, CvArr *arr, int coi = -1); + +////// specialized implementations of DefaultDeleter::operator() for classic +/// OpenCV types ////// + +template <> struct DefaultDeleter { + CV_EXPORTS void operator()(CvMat *obj) const; +}; +template <> struct DefaultDeleter { + CV_EXPORTS void operator()(IplImage *obj) const; +}; +template <> struct DefaultDeleter { + CV_EXPORTS void operator()(CvMatND *obj) const; +}; +template <> struct DefaultDeleter { + CV_EXPORTS void operator()(CvSparseMat *obj) const; +}; +template <> struct DefaultDeleter { + CV_EXPORTS void operator()(CvMemStorage *obj) const; +}; + +////////////// convenient wrappers for operating old-style dynamic structures +///////////////// + +template class SeqIterator; + +typedef Ptr MemStorage; + +/*! + Template Sequence Class derived from CvSeq + + The class provides more convenient access to sequence elements, + STL-style operations and iterators. + + \note The class is targeted for simple data types, + i.e. no constructors or destructors + are called for the sequence elements. +*/ +template class Seq { +public: + typedef SeqIterator<_Tp> iterator; + typedef SeqIterator<_Tp> const_iterator; + + //! the default constructor + Seq(); + //! the constructor for wrapping CvSeq structure. The real element type in + //! CvSeq should match _Tp. + Seq(const CvSeq *seq); + //! creates the empty sequence that resides in the specified storage + Seq(MemStorage &storage, int headerSize = sizeof(CvSeq)); + //! returns read-write reference to the specified element + _Tp &operator[](int idx); + //! returns read-only reference to the specified element + const _Tp &operator[](int idx) const; + //! returns iterator pointing to the beginning of the sequence + SeqIterator<_Tp> begin() const; + //! returns iterator pointing to the element following the last sequence + //! element + SeqIterator<_Tp> end() const; + //! returns the number of elements in the sequence + size_t size() const; + //! returns the type of sequence elements (CV_8UC1 ... CV_64FC(CV_CN_MAX) ...) + int type() const; + //! returns the depth of sequence elements (CV_8U ... CV_64F) + int depth() const; + //! returns the number of channels in each sequence element + int channels() const; + //! returns the size of each sequence element + size_t elemSize() const; + //! returns index of the specified sequence element + size_t index(const _Tp &elem) const; + //! appends the specified element to the end of the sequence + void push_back(const _Tp &elem); + //! appends the specified element to the front of the sequence + void push_front(const _Tp &elem); + //! appends zero or more elements to the end of the sequence + void push_back(const _Tp *elems, size_t count); + //! appends zero or more elements to the front of the sequence + void push_front(const _Tp *elems, size_t count); + //! inserts the specified element to the specified position + void insert(int idx, const _Tp &elem); + //! inserts zero or more elements to the specified position + void insert(int idx, const _Tp *elems, size_t count); + //! removes element at the specified position + void remove(int idx); + //! removes the specified subsequence + void remove(const Range &r); + + //! returns reference to the first sequence element + _Tp &front(); + //! returns read-only reference to the first sequence element + const _Tp &front() const; + //! returns reference to the last sequence element + _Tp &back(); + //! returns read-only reference to the last sequence element + const _Tp &back() const; + //! returns true iff the sequence contains no elements + bool empty() const; + + //! removes all the elements from the sequence + void clear(); + //! removes the first element from the sequence + void pop_front(); + //! removes the last element from the sequence + void pop_back(); + //! removes zero or more elements from the beginning of the sequence + void pop_front(_Tp *elems, size_t count); + //! removes zero or more elements from the end of the sequence + void pop_back(_Tp *elems, size_t count); + + //! copies the whole sequence or the sequence slice to the specified vector + void copyTo(std::vector<_Tp> &vec, const Range &range = Range::all()) const; + //! returns the vector containing all the sequence elements + operator std::vector<_Tp>() const; + + CvSeq *seq; +}; + +/*! + STL-style Sequence Iterator inherited from the CvSeqReader structure +*/ +template class SeqIterator : public CvSeqReader { +public: + //! the default constructor + SeqIterator(); + //! the constructor setting the iterator to the beginning or to the end of the + //! sequence + SeqIterator(const Seq<_Tp> &seq, bool seekEnd = false); + //! positions the iterator within the sequence + void seek(size_t pos); + //! reports the current iterator position + size_t tell() const; + //! returns reference to the current sequence element + _Tp &operator*(); + //! returns read-only reference to the current sequence element + const _Tp &operator*() const; + //! moves iterator to the next sequence element + SeqIterator &operator++(); + //! moves iterator to the next sequence element + SeqIterator operator++(int) const; + //! moves iterator to the previous sequence element + SeqIterator &operator--(); + //! moves iterator to the previous sequence element + SeqIterator operator--(int) const; + + //! moves iterator forward by the specified offset (possibly negative) + SeqIterator &operator+=(int); + //! moves iterator backward by the specified offset (possibly negative) + SeqIterator &operator-=(int); + + // this is index of the current element module seq->total*2 + // (to distinguish between 0 and seq->total) + int index; +}; + +// bridge C++ => C Seq API +CV_EXPORTS schar *seqPush(CvSeq *seq, const void *element = 0); +CV_EXPORTS schar *seqPushFront(CvSeq *seq, const void *element = 0); +CV_EXPORTS void seqPop(CvSeq *seq, void *element = 0); +CV_EXPORTS void seqPopFront(CvSeq *seq, void *element = 0); +CV_EXPORTS void seqPopMulti(CvSeq *seq, void *elements, int count, + int in_front = 0); +CV_EXPORTS void seqRemove(CvSeq *seq, int index); +CV_EXPORTS void clearSeq(CvSeq *seq); +CV_EXPORTS schar *getSeqElem(const CvSeq *seq, int index); +CV_EXPORTS void seqRemoveSlice(CvSeq *seq, CvSlice slice); +CV_EXPORTS void seqInsertSlice(CvSeq *seq, int before_index, + const CvArr *from_arr); + +template inline Seq<_Tp>::Seq() : seq(0) {} +template +inline Seq<_Tp>::Seq(const CvSeq *_seq) : seq((CvSeq *)_seq) { + CV_Assert(!_seq || _seq->elem_size == sizeof(_Tp)); +} + +template +inline Seq<_Tp>::Seq(MemStorage &storage, int headerSize) { + CV_Assert(headerSize >= (int)sizeof(CvSeq)); + seq = cvCreateSeq(DataType<_Tp>::type, headerSize, sizeof(_Tp), storage); +} + +template inline _Tp &Seq<_Tp>::operator[](int idx) { + return *(_Tp *)getSeqElem(seq, idx); +} + +template inline const _Tp &Seq<_Tp>::operator[](int idx) const { + return *(_Tp *)getSeqElem(seq, idx); +} + +template inline SeqIterator<_Tp> Seq<_Tp>::begin() const { + return SeqIterator<_Tp>(*this); +} + +template inline SeqIterator<_Tp> Seq<_Tp>::end() const { + return SeqIterator<_Tp>(*this, true); +} + +template inline size_t Seq<_Tp>::size() const { + return seq ? seq->total : 0; +} + +template inline int Seq<_Tp>::type() const { + return seq ? CV_MAT_TYPE(seq->flags) : 0; +} + +template inline int Seq<_Tp>::depth() const { + return seq ? CV_MAT_DEPTH(seq->flags) : 0; +} + +template inline int Seq<_Tp>::channels() const { + return seq ? CV_MAT_CN(seq->flags) : 0; +} + +template inline size_t Seq<_Tp>::elemSize() const { + return seq ? seq->elem_size : 0; +} + +template inline size_t Seq<_Tp>::index(const _Tp &elem) const { + return cvSeqElemIdx(seq, &elem); +} + +template inline void Seq<_Tp>::push_back(const _Tp &elem) { + cvSeqPush(seq, &elem); +} + +template inline void Seq<_Tp>::push_front(const _Tp &elem) { + cvSeqPushFront(seq, &elem); +} + +template +inline void Seq<_Tp>::push_back(const _Tp *elem, size_t count) { + cvSeqPushMulti(seq, elem, (int)count, 0); +} + +template +inline void Seq<_Tp>::push_front(const _Tp *elem, size_t count) { + cvSeqPushMulti(seq, elem, (int)count, 1); +} + +template inline _Tp &Seq<_Tp>::back() { + return *(_Tp *)getSeqElem(seq, -1); +} + +template inline const _Tp &Seq<_Tp>::back() const { + return *(const _Tp *)getSeqElem(seq, -1); +} + +template inline _Tp &Seq<_Tp>::front() { + return *(_Tp *)getSeqElem(seq, 0); +} + +template inline const _Tp &Seq<_Tp>::front() const { + return *(const _Tp *)getSeqElem(seq, 0); +} + +template inline bool Seq<_Tp>::empty() const { + return !seq || seq->total == 0; +} + +template inline void Seq<_Tp>::clear() { + if (seq) + clearSeq(seq); +} + +template inline void Seq<_Tp>::pop_back() { seqPop(seq); } + +template inline void Seq<_Tp>::pop_front() { seqPopFront(seq); } + +template +inline void Seq<_Tp>::pop_back(_Tp *elem, size_t count) { + seqPopMulti(seq, elem, (int)count, 0); +} + +template +inline void Seq<_Tp>::pop_front(_Tp *elem, size_t count) { + seqPopMulti(seq, elem, (int)count, 1); +} + +template inline void Seq<_Tp>::insert(int idx, const _Tp &elem) { + seqInsert(seq, idx, &elem); +} + +template +inline void Seq<_Tp>::insert(int idx, const _Tp *elems, size_t count) { + CvMat m = cvMat(1, count, DataType<_Tp>::type, elems); + seqInsertSlice(seq, idx, &m); +} + +template inline void Seq<_Tp>::remove(int idx) { + seqRemove(seq, idx); +} + +template inline void Seq<_Tp>::remove(const Range &r) { + seqRemoveSlice(seq, cvSlice(r.start, r.end)); +} + +template +inline void Seq<_Tp>::copyTo(std::vector<_Tp> &vec, const Range &range) const { + size_t len = !seq ? 0 + : range == Range::all() ? seq->total + : range.end - range.start; + vec.resize(len); + if (seq && len) + cvCvtSeqToArray(seq, &vec[0], cvSlice(range)); +} + +template inline Seq<_Tp>::operator std::vector<_Tp>() const { + std::vector<_Tp> vec; + copyTo(vec); + return vec; +} + +template inline SeqIterator<_Tp>::SeqIterator() { + memset(this, 0, sizeof(*this)); +} + +template +inline SeqIterator<_Tp>::SeqIterator(const Seq<_Tp> &_seq, bool seekEnd) { + cvStartReadSeq(_seq.seq, this); + index = seekEnd ? _seq.seq->total : 0; +} + +template inline void SeqIterator<_Tp>::seek(size_t pos) { + cvSetSeqReaderPos(this, (int)pos, false); + index = pos; +} + +template inline size_t SeqIterator<_Tp>::tell() const { + return index; +} + +template inline _Tp &SeqIterator<_Tp>::operator*() { + return *(_Tp *)ptr; +} + +template inline const _Tp &SeqIterator<_Tp>::operator*() const { + return *(const _Tp *)ptr; +} + +template +inline SeqIterator<_Tp> &SeqIterator<_Tp>::operator++() { + CV_NEXT_SEQ_ELEM(sizeof(_Tp), *this); + if (++index >= seq->total * 2) + index = 0; + return *this; +} + +template +inline SeqIterator<_Tp> SeqIterator<_Tp>::operator++(int) const { + SeqIterator<_Tp> it = *this; + ++*this; + return it; +} + +template +inline SeqIterator<_Tp> &SeqIterator<_Tp>::operator--() { + CV_PREV_SEQ_ELEM(sizeof(_Tp), *this); + if (--index < 0) + index = seq->total * 2 - 1; + return *this; +} + +template +inline SeqIterator<_Tp> SeqIterator<_Tp>::operator--(int) const { + SeqIterator<_Tp> it = *this; + --*this; + return it; +} + +template +inline SeqIterator<_Tp> &SeqIterator<_Tp>::operator+=(int delta) { + cvSetSeqReaderPos(this, delta, 1); + index += delta; + int n = seq->total * 2; + if (index < 0) + index += n; + if (index >= n) + index -= n; + return *this; +} + +template +inline SeqIterator<_Tp> &SeqIterator<_Tp>::operator-=(int delta) { + return (*this += -delta); +} + +template +inline ptrdiff_t operator-(const SeqIterator<_Tp> &a, + const SeqIterator<_Tp> &b) { + ptrdiff_t delta = a.index - b.index, n = a.seq->total; + if (delta > n || delta < -n) + delta += delta < 0 ? n : -n; + return delta; +} + +template +inline bool operator==(const SeqIterator<_Tp> &a, const SeqIterator<_Tp> &b) { + return a.seq == b.seq && a.index == b.index; +} + +template +inline bool operator!=(const SeqIterator<_Tp> &a, const SeqIterator<_Tp> &b) { + return !(a == b); +} + +//! @} + +} // namespace cv + +#endif + +#endif diff --git a/third-party/include/opencv2/core/cv_cpu_dispatch.h b/third-party/include/opencv2/core/cv_cpu_dispatch.h new file mode 100644 index 000000000..8a0c1b393 --- /dev/null +++ b/third-party/include/opencv2/core/cv_cpu_dispatch.h @@ -0,0 +1,404 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level +// directory of this distribution and at http://opencv.org/license.html. + +#if defined __OPENCV_BUILD + +#include "cv_cpu_config.h" +#include "cv_cpu_helper.h" + +#ifdef CV_CPU_DISPATCH_MODE +#define CV_CPU_OPTIMIZATION_NAMESPACE __CV_CAT(opt_, CV_CPU_DISPATCH_MODE) +#define CV_CPU_OPTIMIZATION_NAMESPACE_BEGIN \ + namespace __CV_CAT(opt_, CV_CPU_DISPATCH_MODE) { +#define CV_CPU_OPTIMIZATION_NAMESPACE_END } +#else +#define CV_CPU_OPTIMIZATION_NAMESPACE cpu_baseline +#define CV_CPU_OPTIMIZATION_NAMESPACE_BEGIN namespace cpu_baseline { +#define CV_CPU_OPTIMIZATION_NAMESPACE_END } +#define CV_CPU_BASELINE_MODE 1 +#endif + +#define __CV_CPU_DISPATCH_CHAIN_END(fn, args, mode, ...) /* done */ +#define __CV_CPU_DISPATCH(fn, args, mode, ...) \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) +#define __CV_CPU_DISPATCH_EXPAND(fn, args, ...) \ + __CV_EXPAND(__CV_CPU_DISPATCH(fn, args, __VA_ARGS__)) +#define CV_CPU_DISPATCH(fn, args, ...) \ + __CV_CPU_DISPATCH_EXPAND(fn, args, __VA_ARGS__, END) // expand macros + +#if defined CV_ENABLE_INTRINSICS && !defined CV_DISABLE_OPTIMIZATION && \ + !defined __CUDACC__ /* do not include SSE/AVX/NEON headers for NVCC \ + compiler */ + +#ifdef CV_CPU_COMPILE_SSE2 +#include +#define CV_MMX 1 +#define CV_SSE 1 +#define CV_SSE2 1 +#endif +#ifdef CV_CPU_COMPILE_SSE3 +#include +#define CV_SSE3 1 +#endif +#ifdef CV_CPU_COMPILE_SSSE3 +#include +#define CV_SSSE3 1 +#endif +#ifdef CV_CPU_COMPILE_SSE4_1 +#include +#define CV_SSE4_1 1 +#endif +#ifdef CV_CPU_COMPILE_SSE4_2 +#include +#define CV_SSE4_2 1 +#endif +#ifdef CV_CPU_COMPILE_POPCNT +#ifdef _MSC_VER +#include +#if defined(_M_X64) +#define CV_POPCNT_U64 (int)_mm_popcnt_u64 +#endif +#define CV_POPCNT_U32 _mm_popcnt_u32 +#else +#include +#if defined(__x86_64__) +#define CV_POPCNT_U64 __builtin_popcountll +#endif +#define CV_POPCNT_U32 __builtin_popcount +#endif +#define CV_POPCNT 1 +#endif +#ifdef CV_CPU_COMPILE_AVX +#include +#define CV_AVX 1 +#endif +#ifdef CV_CPU_COMPILE_FP16 +#if defined(__arm__) || defined(__aarch64__) || defined(_M_ARM) || \ + defined(_M_ARM64) +#include +#else +#include +#endif +#define CV_FP16 1 +#endif +#ifdef CV_CPU_COMPILE_NEON_DOTPROD +#include +#define CV_NEON_DOT 1 +#endif +#ifdef CV_CPU_COMPILE_AVX2 +#include +#define CV_AVX2 1 +#endif +#ifdef CV_CPU_COMPILE_AVX_512F +#include +#define CV_AVX_512F 1 +#endif +#ifdef CV_CPU_COMPILE_AVX512_COMMON +#define CV_AVX512_COMMON 1 +#define CV_AVX_512CD 1 +#endif +#ifdef CV_CPU_COMPILE_AVX512_KNL +#define CV_AVX512_KNL 1 +#define CV_AVX_512ER 1 +#define CV_AVX_512PF 1 +#endif +#ifdef CV_CPU_COMPILE_AVX512_KNM +#define CV_AVX512_KNM 1 +#define CV_AVX_5124FMAPS 1 +#define CV_AVX_5124VNNIW 1 +#define CV_AVX_512VPOPCNTDQ 1 +#endif +#ifdef CV_CPU_COMPILE_AVX512_SKX +#define CV_AVX512_SKX 1 +#define CV_AVX_512VL 1 +#define CV_AVX_512BW 1 +#define CV_AVX_512DQ 1 +#endif +#ifdef CV_CPU_COMPILE_AVX512_CNL +#define CV_AVX512_CNL 1 +#define CV_AVX_512IFMA 1 +#define CV_AVX_512VBMI 1 +#endif +#ifdef CV_CPU_COMPILE_AVX512_CLX +#define CV_AVX512_CLX 1 +#define CV_AVX_512VNNI 1 +#endif +#ifdef CV_CPU_COMPILE_AVX512_ICL +#define CV_AVX512_ICL 1 +#undef CV_AVX_512IFMA +#define CV_AVX_512IFMA 1 +#undef CV_AVX_512VBMI +#define CV_AVX_512VBMI 1 +#undef CV_AVX_512VNNI +#define CV_AVX_512VNNI 1 +#define CV_AVX_512VBMI2 1 +#define CV_AVX_512BITALG 1 +#define CV_AVX_512VPOPCNTDQ 1 +#endif +#ifdef CV_CPU_COMPILE_FMA3 +#define CV_FMA3 1 +#endif + +#if defined _WIN32 && (defined(_M_ARM) || defined(_M_ARM64)) && \ + (defined(CV_CPU_COMPILE_NEON) || !defined(_MSC_VER)) +#include +#include +#define CV_NEON 1 +#elif defined(__ARM_NEON) +#include +#define CV_NEON 1 +#endif + +/* RVV-related macro states with different compiler +// +--------------------+----------+----------+ +// | Macro | Upstream | XuanTie | +// +--------------------+----------+----------+ +// | CV_CPU_COMPILE_RVV | defined | defined | +// | CV_RVV | 1 | 0 | +// | CV_RVV071 | 0 | 1 | +// | CV_TRY_RVV | 1 | 1 | +// +--------------------+----------+----------+ +*/ +#ifdef CV_CPU_COMPILE_RVV +#ifdef __riscv_vector_071 +#define CV_RVV071 1 +#else +#define CV_RVV 1 +#endif +#include +#endif + +#ifdef CV_CPU_COMPILE_VSX +#include +#undef vector +#undef pixel +#undef bool +#define CV_VSX 1 +#endif + +#ifdef CV_CPU_COMPILE_VSX3 +#define CV_VSX3 1 +#endif + +#ifdef CV_CPU_COMPILE_MSA +#include "hal/msa_macros.h" +#define CV_MSA 1 +#endif + +#ifdef CV_CPU_COMPILE_LSX +#include +#define CV_LSX 1 +#endif + +#ifdef CV_CPU_COMPILE_LASX +#include +#define CV_LASX 1 +#endif + +#ifdef __EMSCRIPTEN__ +#define CV_WASM_SIMD 1 +#include +#endif + +#endif // CV_ENABLE_INTRINSICS && !CV_DISABLE_OPTIMIZATION && !__CUDACC__ + +#if defined CV_CPU_COMPILE_AVX && !defined CV_CPU_BASELINE_COMPILE_AVX +struct VZeroUpperGuard { +#ifdef __GNUC__ + __attribute__((always_inline)) +#endif + inline VZeroUpperGuard() { + _mm256_zeroupper(); + } +#ifdef __GNUC__ + __attribute__((always_inline)) +#endif + inline ~VZeroUpperGuard() { + _mm256_zeroupper(); + } +}; +#define __CV_AVX_GUARD \ + VZeroUpperGuard __vzeroupper_guard; \ + CV_UNUSED(__vzeroupper_guard); +#endif + +#ifdef __CV_AVX_GUARD +#define CV_AVX_GUARD __CV_AVX_GUARD +#else +#define CV_AVX_GUARD +#endif + +#endif // __OPENCV_BUILD + +#if !defined __OPENCV_BUILD /* Compatibility code */ \ + && !defined __CUDACC__ /* do not include SSE/AVX/NEON headers for NVCC \ + compiler */ +#if defined __SSE2__ || defined _M_X64 || \ + (defined _M_IX86_FP && _M_IX86_FP >= 2) +#include +#define CV_MMX 1 +#define CV_SSE 1 +#define CV_SSE2 1 +#elif defined _WIN32 && (defined(_M_ARM) || defined(_M_ARM64)) && \ + (defined(CV_CPU_COMPILE_NEON) || !defined(_MSC_VER)) +#include +#include +#define CV_NEON 1 +#elif defined(__ARM_NEON) +#include +#define CV_NEON 1 +#elif defined(__VSX__) && defined(__PPC64__) && defined(__LITTLE_ENDIAN__) +#include +#undef vector +#undef pixel +#undef bool +#define CV_VSX 1 +#endif + +#ifdef __F16C__ +#include +#define CV_FP16 1 +#endif + +#endif // !__OPENCV_BUILD && !__CUDACC (Compatibility code) + +#ifndef CV_MMX +#define CV_MMX 0 +#endif +#ifndef CV_SSE +#define CV_SSE 0 +#endif +#ifndef CV_SSE2 +#define CV_SSE2 0 +#endif +#ifndef CV_SSE3 +#define CV_SSE3 0 +#endif +#ifndef CV_SSSE3 +#define CV_SSSE3 0 +#endif +#ifndef CV_SSE4_1 +#define CV_SSE4_1 0 +#endif +#ifndef CV_SSE4_2 +#define CV_SSE4_2 0 +#endif +#ifndef CV_POPCNT +#define CV_POPCNT 0 +#endif +#ifndef CV_AVX +#define CV_AVX 0 +#endif +#ifndef CV_FP16 +#define CV_FP16 0 +#endif +#ifndef CV_AVX2 +#define CV_AVX2 0 +#endif +#ifndef CV_FMA3 +#define CV_FMA3 0 +#endif +#ifndef CV_AVX_512F +#define CV_AVX_512F 0 +#endif +#ifndef CV_AVX_512BW +#define CV_AVX_512BW 0 +#endif +#ifndef CV_AVX_512CD +#define CV_AVX_512CD 0 +#endif +#ifndef CV_AVX_512DQ +#define CV_AVX_512DQ 0 +#endif +#ifndef CV_AVX_512ER +#define CV_AVX_512ER 0 +#endif +#ifndef CV_AVX_512IFMA +#define CV_AVX_512IFMA 0 +#endif +#define CV_AVX_512IFMA512 CV_AVX_512IFMA // deprecated +#ifndef CV_AVX_512PF +#define CV_AVX_512PF 0 +#endif +#ifndef CV_AVX_512VBMI +#define CV_AVX_512VBMI 0 +#endif +#ifndef CV_AVX_512VL +#define CV_AVX_512VL 0 +#endif +#ifndef CV_AVX_5124FMAPS +#define CV_AVX_5124FMAPS 0 +#endif +#ifndef CV_AVX_5124VNNIW +#define CV_AVX_5124VNNIW 0 +#endif +#ifndef CV_AVX_512VPOPCNTDQ +#define CV_AVX_512VPOPCNTDQ 0 +#endif +#ifndef CV_AVX_512VNNI +#define CV_AVX_512VNNI 0 +#endif +#ifndef CV_AVX_512VBMI2 +#define CV_AVX_512VBMI2 0 +#endif +#ifndef CV_AVX_512BITALG +#define CV_AVX_512BITALG 0 +#endif +#ifndef CV_AVX512_COMMON +#define CV_AVX512_COMMON 0 +#endif +#ifndef CV_AVX512_KNL +#define CV_AVX512_KNL 0 +#endif +#ifndef CV_AVX512_KNM +#define CV_AVX512_KNM 0 +#endif +#ifndef CV_AVX512_SKX +#define CV_AVX512_SKX 0 +#endif +#ifndef CV_AVX512_CNL +#define CV_AVX512_CNL 0 +#endif +#ifndef CV_AVX512_CLX +#define CV_AVX512_CLX 0 +#endif +#ifndef CV_AVX512_ICL +#define CV_AVX512_ICL 0 +#endif + +#ifndef CV_NEON +#define CV_NEON 0 +#endif + +#ifndef CV_RVV071 +#define CV_RVV071 0 +#endif + +#ifndef CV_VSX +#define CV_VSX 0 +#endif + +#ifndef CV_VSX3 +#define CV_VSX3 0 +#endif + +#ifndef CV_MSA +#define CV_MSA 0 +#endif + +#ifndef CV_WASM_SIMD +#define CV_WASM_SIMD 0 +#endif + +#ifndef CV_RVV +#define CV_RVV 0 +#endif + +#ifndef CV_LSX +#define CV_LSX 0 +#endif + +#ifndef CV_LASX +#define CV_LASX 0 +#endif diff --git a/third-party/include/opencv2/core/cv_cpu_helper.h b/third-party/include/opencv2/core/cv_cpu_helper.h new file mode 100644 index 000000000..088eb47c0 --- /dev/null +++ b/third-party/include/opencv2/core/cv_cpu_helper.h @@ -0,0 +1,856 @@ +// AUTOGENERATED, DO NOT EDIT + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_SSE +#define CV_TRY_SSE 1 +#define CV_CPU_FORCE_SSE 1 +#define CV_CPU_HAS_SUPPORT_SSE 1 +#define CV_CPU_CALL_SSE(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_SSE_(fn, args) return (opt_SSE::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_SSE +#define CV_TRY_SSE 1 +#define CV_CPU_FORCE_SSE 0 +#define CV_CPU_HAS_SUPPORT_SSE (cv::checkHardwareSupport(CV_CPU_SSE)) +#define CV_CPU_CALL_SSE(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE) \ + return (opt_SSE::fn args) +#define CV_CPU_CALL_SSE_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE) \ + return (opt_SSE::fn args) +#else +#define CV_TRY_SSE 0 +#define CV_CPU_FORCE_SSE 0 +#define CV_CPU_HAS_SUPPORT_SSE 0 +#define CV_CPU_CALL_SSE(fn, args) +#define CV_CPU_CALL_SSE_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_SSE(fn, args, mode, ...) \ + CV_CPU_CALL_SSE(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_SSE2 +#define CV_TRY_SSE2 1 +#define CV_CPU_FORCE_SSE2 1 +#define CV_CPU_HAS_SUPPORT_SSE2 1 +#define CV_CPU_CALL_SSE2(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_SSE2_(fn, args) return (opt_SSE2::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_SSE2 +#define CV_TRY_SSE2 1 +#define CV_CPU_FORCE_SSE2 0 +#define CV_CPU_HAS_SUPPORT_SSE2 (cv::checkHardwareSupport(CV_CPU_SSE2)) +#define CV_CPU_CALL_SSE2(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE2) \ + return (opt_SSE2::fn args) +#define CV_CPU_CALL_SSE2_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE2) \ + return (opt_SSE2::fn args) +#else +#define CV_TRY_SSE2 0 +#define CV_CPU_FORCE_SSE2 0 +#define CV_CPU_HAS_SUPPORT_SSE2 0 +#define CV_CPU_CALL_SSE2(fn, args) +#define CV_CPU_CALL_SSE2_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_SSE2(fn, args, mode, ...) \ + CV_CPU_CALL_SSE2(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_SSE3 +#define CV_TRY_SSE3 1 +#define CV_CPU_FORCE_SSE3 1 +#define CV_CPU_HAS_SUPPORT_SSE3 1 +#define CV_CPU_CALL_SSE3(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_SSE3_(fn, args) return (opt_SSE3::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_SSE3 +#define CV_TRY_SSE3 1 +#define CV_CPU_FORCE_SSE3 0 +#define CV_CPU_HAS_SUPPORT_SSE3 (cv::checkHardwareSupport(CV_CPU_SSE3)) +#define CV_CPU_CALL_SSE3(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE3) \ + return (opt_SSE3::fn args) +#define CV_CPU_CALL_SSE3_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE3) \ + return (opt_SSE3::fn args) +#else +#define CV_TRY_SSE3 0 +#define CV_CPU_FORCE_SSE3 0 +#define CV_CPU_HAS_SUPPORT_SSE3 0 +#define CV_CPU_CALL_SSE3(fn, args) +#define CV_CPU_CALL_SSE3_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_SSE3(fn, args, mode, ...) \ + CV_CPU_CALL_SSE3(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_SSSE3 +#define CV_TRY_SSSE3 1 +#define CV_CPU_FORCE_SSSE3 1 +#define CV_CPU_HAS_SUPPORT_SSSE3 1 +#define CV_CPU_CALL_SSSE3(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_SSSE3_(fn, args) return (opt_SSSE3::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_SSSE3 +#define CV_TRY_SSSE3 1 +#define CV_CPU_FORCE_SSSE3 0 +#define CV_CPU_HAS_SUPPORT_SSSE3 (cv::checkHardwareSupport(CV_CPU_SSSE3)) +#define CV_CPU_CALL_SSSE3(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSSE3) \ + return (opt_SSSE3::fn args) +#define CV_CPU_CALL_SSSE3_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSSE3) \ + return (opt_SSSE3::fn args) +#else +#define CV_TRY_SSSE3 0 +#define CV_CPU_FORCE_SSSE3 0 +#define CV_CPU_HAS_SUPPORT_SSSE3 0 +#define CV_CPU_CALL_SSSE3(fn, args) +#define CV_CPU_CALL_SSSE3_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_SSSE3(fn, args, mode, ...) \ + CV_CPU_CALL_SSSE3(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_SSE4_1 +#define CV_TRY_SSE4_1 1 +#define CV_CPU_FORCE_SSE4_1 1 +#define CV_CPU_HAS_SUPPORT_SSE4_1 1 +#define CV_CPU_CALL_SSE4_1(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_SSE4_1_(fn, args) return (opt_SSE4_1::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_SSE4_1 +#define CV_TRY_SSE4_1 1 +#define CV_CPU_FORCE_SSE4_1 0 +#define CV_CPU_HAS_SUPPORT_SSE4_1 (cv::checkHardwareSupport(CV_CPU_SSE4_1)) +#define CV_CPU_CALL_SSE4_1(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE4_1) \ + return (opt_SSE4_1::fn args) +#define CV_CPU_CALL_SSE4_1_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE4_1) \ + return (opt_SSE4_1::fn args) +#else +#define CV_TRY_SSE4_1 0 +#define CV_CPU_FORCE_SSE4_1 0 +#define CV_CPU_HAS_SUPPORT_SSE4_1 0 +#define CV_CPU_CALL_SSE4_1(fn, args) +#define CV_CPU_CALL_SSE4_1_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_SSE4_1(fn, args, mode, ...) \ + CV_CPU_CALL_SSE4_1(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_SSE4_2 +#define CV_TRY_SSE4_2 1 +#define CV_CPU_FORCE_SSE4_2 1 +#define CV_CPU_HAS_SUPPORT_SSE4_2 1 +#define CV_CPU_CALL_SSE4_2(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_SSE4_2_(fn, args) return (opt_SSE4_2::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_SSE4_2 +#define CV_TRY_SSE4_2 1 +#define CV_CPU_FORCE_SSE4_2 0 +#define CV_CPU_HAS_SUPPORT_SSE4_2 (cv::checkHardwareSupport(CV_CPU_SSE4_2)) +#define CV_CPU_CALL_SSE4_2(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE4_2) \ + return (opt_SSE4_2::fn args) +#define CV_CPU_CALL_SSE4_2_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_SSE4_2) \ + return (opt_SSE4_2::fn args) +#else +#define CV_TRY_SSE4_2 0 +#define CV_CPU_FORCE_SSE4_2 0 +#define CV_CPU_HAS_SUPPORT_SSE4_2 0 +#define CV_CPU_CALL_SSE4_2(fn, args) +#define CV_CPU_CALL_SSE4_2_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_SSE4_2(fn, args, mode, ...) \ + CV_CPU_CALL_SSE4_2(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_POPCNT +#define CV_TRY_POPCNT 1 +#define CV_CPU_FORCE_POPCNT 1 +#define CV_CPU_HAS_SUPPORT_POPCNT 1 +#define CV_CPU_CALL_POPCNT(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_POPCNT_(fn, args) return (opt_POPCNT::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_POPCNT +#define CV_TRY_POPCNT 1 +#define CV_CPU_FORCE_POPCNT 0 +#define CV_CPU_HAS_SUPPORT_POPCNT (cv::checkHardwareSupport(CV_CPU_POPCNT)) +#define CV_CPU_CALL_POPCNT(fn, args) \ + if (CV_CPU_HAS_SUPPORT_POPCNT) \ + return (opt_POPCNT::fn args) +#define CV_CPU_CALL_POPCNT_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_POPCNT) \ + return (opt_POPCNT::fn args) +#else +#define CV_TRY_POPCNT 0 +#define CV_CPU_FORCE_POPCNT 0 +#define CV_CPU_HAS_SUPPORT_POPCNT 0 +#define CV_CPU_CALL_POPCNT(fn, args) +#define CV_CPU_CALL_POPCNT_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_POPCNT(fn, args, mode, ...) \ + CV_CPU_CALL_POPCNT(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX +#define CV_TRY_AVX 1 +#define CV_CPU_FORCE_AVX 1 +#define CV_CPU_HAS_SUPPORT_AVX 1 +#define CV_CPU_CALL_AVX(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX_(fn, args) return (opt_AVX::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX +#define CV_TRY_AVX 1 +#define CV_CPU_FORCE_AVX 0 +#define CV_CPU_HAS_SUPPORT_AVX (cv::checkHardwareSupport(CV_CPU_AVX)) +#define CV_CPU_CALL_AVX(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX) \ + return (opt_AVX::fn args) +#define CV_CPU_CALL_AVX_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX) \ + return (opt_AVX::fn args) +#else +#define CV_TRY_AVX 0 +#define CV_CPU_FORCE_AVX 0 +#define CV_CPU_HAS_SUPPORT_AVX 0 +#define CV_CPU_CALL_AVX(fn, args) +#define CV_CPU_CALL_AVX_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX(fn, args, mode, ...) \ + CV_CPU_CALL_AVX(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_FP16 +#define CV_TRY_FP16 1 +#define CV_CPU_FORCE_FP16 1 +#define CV_CPU_HAS_SUPPORT_FP16 1 +#define CV_CPU_CALL_FP16(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_FP16_(fn, args) return (opt_FP16::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_FP16 +#define CV_TRY_FP16 1 +#define CV_CPU_FORCE_FP16 0 +#define CV_CPU_HAS_SUPPORT_FP16 (cv::checkHardwareSupport(CV_CPU_FP16)) +#define CV_CPU_CALL_FP16(fn, args) \ + if (CV_CPU_HAS_SUPPORT_FP16) \ + return (opt_FP16::fn args) +#define CV_CPU_CALL_FP16_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_FP16) \ + return (opt_FP16::fn args) +#else +#define CV_TRY_FP16 0 +#define CV_CPU_FORCE_FP16 0 +#define CV_CPU_HAS_SUPPORT_FP16 0 +#define CV_CPU_CALL_FP16(fn, args) +#define CV_CPU_CALL_FP16_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_FP16(fn, args, mode, ...) \ + CV_CPU_CALL_FP16(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX2 +#define CV_TRY_AVX2 1 +#define CV_CPU_FORCE_AVX2 1 +#define CV_CPU_HAS_SUPPORT_AVX2 1 +#define CV_CPU_CALL_AVX2(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX2_(fn, args) return (opt_AVX2::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX2 +#define CV_TRY_AVX2 1 +#define CV_CPU_FORCE_AVX2 0 +#define CV_CPU_HAS_SUPPORT_AVX2 (cv::checkHardwareSupport(CV_CPU_AVX2)) +#define CV_CPU_CALL_AVX2(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX2) \ + return (opt_AVX2::fn args) +#define CV_CPU_CALL_AVX2_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX2) \ + return (opt_AVX2::fn args) +#else +#define CV_TRY_AVX2 0 +#define CV_CPU_FORCE_AVX2 0 +#define CV_CPU_HAS_SUPPORT_AVX2 0 +#define CV_CPU_CALL_AVX2(fn, args) +#define CV_CPU_CALL_AVX2_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX2(fn, args, mode, ...) \ + CV_CPU_CALL_AVX2(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_FMA3 +#define CV_TRY_FMA3 1 +#define CV_CPU_FORCE_FMA3 1 +#define CV_CPU_HAS_SUPPORT_FMA3 1 +#define CV_CPU_CALL_FMA3(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_FMA3_(fn, args) return (opt_FMA3::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_FMA3 +#define CV_TRY_FMA3 1 +#define CV_CPU_FORCE_FMA3 0 +#define CV_CPU_HAS_SUPPORT_FMA3 (cv::checkHardwareSupport(CV_CPU_FMA3)) +#define CV_CPU_CALL_FMA3(fn, args) \ + if (CV_CPU_HAS_SUPPORT_FMA3) \ + return (opt_FMA3::fn args) +#define CV_CPU_CALL_FMA3_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_FMA3) \ + return (opt_FMA3::fn args) +#else +#define CV_TRY_FMA3 0 +#define CV_CPU_FORCE_FMA3 0 +#define CV_CPU_HAS_SUPPORT_FMA3 0 +#define CV_CPU_CALL_FMA3(fn, args) +#define CV_CPU_CALL_FMA3_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_FMA3(fn, args, mode, ...) \ + CV_CPU_CALL_FMA3(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX_512F +#define CV_TRY_AVX_512F 1 +#define CV_CPU_FORCE_AVX_512F 1 +#define CV_CPU_HAS_SUPPORT_AVX_512F 1 +#define CV_CPU_CALL_AVX_512F(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX_512F_(fn, args) return (opt_AVX_512F::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX_512F +#define CV_TRY_AVX_512F 1 +#define CV_CPU_FORCE_AVX_512F 0 +#define CV_CPU_HAS_SUPPORT_AVX_512F (cv::checkHardwareSupport(CV_CPU_AVX_512F)) +#define CV_CPU_CALL_AVX_512F(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX_512F) \ + return (opt_AVX_512F::fn args) +#define CV_CPU_CALL_AVX_512F_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX_512F) \ + return (opt_AVX_512F::fn args) +#else +#define CV_TRY_AVX_512F 0 +#define CV_CPU_FORCE_AVX_512F 0 +#define CV_CPU_HAS_SUPPORT_AVX_512F 0 +#define CV_CPU_CALL_AVX_512F(fn, args) +#define CV_CPU_CALL_AVX_512F_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX_512F(fn, args, mode, ...) \ + CV_CPU_CALL_AVX_512F(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX512_COMMON +#define CV_TRY_AVX512_COMMON 1 +#define CV_CPU_FORCE_AVX512_COMMON 1 +#define CV_CPU_HAS_SUPPORT_AVX512_COMMON 1 +#define CV_CPU_CALL_AVX512_COMMON(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX512_COMMON_(fn, args) return (opt_AVX512_COMMON::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX512_COMMON +#define CV_TRY_AVX512_COMMON 1 +#define CV_CPU_FORCE_AVX512_COMMON 0 +#define CV_CPU_HAS_SUPPORT_AVX512_COMMON \ + (cv::checkHardwareSupport(CV_CPU_AVX512_COMMON)) +#define CV_CPU_CALL_AVX512_COMMON(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_COMMON) \ + return (opt_AVX512_COMMON::fn args) +#define CV_CPU_CALL_AVX512_COMMON_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_COMMON) \ + return (opt_AVX512_COMMON::fn args) +#else +#define CV_TRY_AVX512_COMMON 0 +#define CV_CPU_FORCE_AVX512_COMMON 0 +#define CV_CPU_HAS_SUPPORT_AVX512_COMMON 0 +#define CV_CPU_CALL_AVX512_COMMON(fn, args) +#define CV_CPU_CALL_AVX512_COMMON_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX512_COMMON(fn, args, mode, ...) \ + CV_CPU_CALL_AVX512_COMMON(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX512_KNL +#define CV_TRY_AVX512_KNL 1 +#define CV_CPU_FORCE_AVX512_KNL 1 +#define CV_CPU_HAS_SUPPORT_AVX512_KNL 1 +#define CV_CPU_CALL_AVX512_KNL(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX512_KNL_(fn, args) return (opt_AVX512_KNL::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX512_KNL +#define CV_TRY_AVX512_KNL 1 +#define CV_CPU_FORCE_AVX512_KNL 0 +#define CV_CPU_HAS_SUPPORT_AVX512_KNL \ + (cv::checkHardwareSupport(CV_CPU_AVX512_KNL)) +#define CV_CPU_CALL_AVX512_KNL(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_KNL) \ + return (opt_AVX512_KNL::fn args) +#define CV_CPU_CALL_AVX512_KNL_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_KNL) \ + return (opt_AVX512_KNL::fn args) +#else +#define CV_TRY_AVX512_KNL 0 +#define CV_CPU_FORCE_AVX512_KNL 0 +#define CV_CPU_HAS_SUPPORT_AVX512_KNL 0 +#define CV_CPU_CALL_AVX512_KNL(fn, args) +#define CV_CPU_CALL_AVX512_KNL_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX512_KNL(fn, args, mode, ...) \ + CV_CPU_CALL_AVX512_KNL(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX512_KNM +#define CV_TRY_AVX512_KNM 1 +#define CV_CPU_FORCE_AVX512_KNM 1 +#define CV_CPU_HAS_SUPPORT_AVX512_KNM 1 +#define CV_CPU_CALL_AVX512_KNM(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX512_KNM_(fn, args) return (opt_AVX512_KNM::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX512_KNM +#define CV_TRY_AVX512_KNM 1 +#define CV_CPU_FORCE_AVX512_KNM 0 +#define CV_CPU_HAS_SUPPORT_AVX512_KNM \ + (cv::checkHardwareSupport(CV_CPU_AVX512_KNM)) +#define CV_CPU_CALL_AVX512_KNM(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_KNM) \ + return (opt_AVX512_KNM::fn args) +#define CV_CPU_CALL_AVX512_KNM_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_KNM) \ + return (opt_AVX512_KNM::fn args) +#else +#define CV_TRY_AVX512_KNM 0 +#define CV_CPU_FORCE_AVX512_KNM 0 +#define CV_CPU_HAS_SUPPORT_AVX512_KNM 0 +#define CV_CPU_CALL_AVX512_KNM(fn, args) +#define CV_CPU_CALL_AVX512_KNM_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX512_KNM(fn, args, mode, ...) \ + CV_CPU_CALL_AVX512_KNM(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX512_SKX +#define CV_TRY_AVX512_SKX 1 +#define CV_CPU_FORCE_AVX512_SKX 1 +#define CV_CPU_HAS_SUPPORT_AVX512_SKX 1 +#define CV_CPU_CALL_AVX512_SKX(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX512_SKX_(fn, args) return (opt_AVX512_SKX::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX512_SKX +#define CV_TRY_AVX512_SKX 1 +#define CV_CPU_FORCE_AVX512_SKX 0 +#define CV_CPU_HAS_SUPPORT_AVX512_SKX \ + (cv::checkHardwareSupport(CV_CPU_AVX512_SKX)) +#define CV_CPU_CALL_AVX512_SKX(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_SKX) \ + return (opt_AVX512_SKX::fn args) +#define CV_CPU_CALL_AVX512_SKX_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_SKX) \ + return (opt_AVX512_SKX::fn args) +#else +#define CV_TRY_AVX512_SKX 0 +#define CV_CPU_FORCE_AVX512_SKX 0 +#define CV_CPU_HAS_SUPPORT_AVX512_SKX 0 +#define CV_CPU_CALL_AVX512_SKX(fn, args) +#define CV_CPU_CALL_AVX512_SKX_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX512_SKX(fn, args, mode, ...) \ + CV_CPU_CALL_AVX512_SKX(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX512_CNL +#define CV_TRY_AVX512_CNL 1 +#define CV_CPU_FORCE_AVX512_CNL 1 +#define CV_CPU_HAS_SUPPORT_AVX512_CNL 1 +#define CV_CPU_CALL_AVX512_CNL(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX512_CNL_(fn, args) return (opt_AVX512_CNL::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX512_CNL +#define CV_TRY_AVX512_CNL 1 +#define CV_CPU_FORCE_AVX512_CNL 0 +#define CV_CPU_HAS_SUPPORT_AVX512_CNL \ + (cv::checkHardwareSupport(CV_CPU_AVX512_CNL)) +#define CV_CPU_CALL_AVX512_CNL(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_CNL) \ + return (opt_AVX512_CNL::fn args) +#define CV_CPU_CALL_AVX512_CNL_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_CNL) \ + return (opt_AVX512_CNL::fn args) +#else +#define CV_TRY_AVX512_CNL 0 +#define CV_CPU_FORCE_AVX512_CNL 0 +#define CV_CPU_HAS_SUPPORT_AVX512_CNL 0 +#define CV_CPU_CALL_AVX512_CNL(fn, args) +#define CV_CPU_CALL_AVX512_CNL_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX512_CNL(fn, args, mode, ...) \ + CV_CPU_CALL_AVX512_CNL(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX512_CLX +#define CV_TRY_AVX512_CLX 1 +#define CV_CPU_FORCE_AVX512_CLX 1 +#define CV_CPU_HAS_SUPPORT_AVX512_CLX 1 +#define CV_CPU_CALL_AVX512_CLX(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX512_CLX_(fn, args) return (opt_AVX512_CLX::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX512_CLX +#define CV_TRY_AVX512_CLX 1 +#define CV_CPU_FORCE_AVX512_CLX 0 +#define CV_CPU_HAS_SUPPORT_AVX512_CLX \ + (cv::checkHardwareSupport(CV_CPU_AVX512_CLX)) +#define CV_CPU_CALL_AVX512_CLX(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_CLX) \ + return (opt_AVX512_CLX::fn args) +#define CV_CPU_CALL_AVX512_CLX_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_CLX) \ + return (opt_AVX512_CLX::fn args) +#else +#define CV_TRY_AVX512_CLX 0 +#define CV_CPU_FORCE_AVX512_CLX 0 +#define CV_CPU_HAS_SUPPORT_AVX512_CLX 0 +#define CV_CPU_CALL_AVX512_CLX(fn, args) +#define CV_CPU_CALL_AVX512_CLX_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX512_CLX(fn, args, mode, ...) \ + CV_CPU_CALL_AVX512_CLX(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_AVX512_ICL +#define CV_TRY_AVX512_ICL 1 +#define CV_CPU_FORCE_AVX512_ICL 1 +#define CV_CPU_HAS_SUPPORT_AVX512_ICL 1 +#define CV_CPU_CALL_AVX512_ICL(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_AVX512_ICL_(fn, args) return (opt_AVX512_ICL::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_AVX512_ICL +#define CV_TRY_AVX512_ICL 1 +#define CV_CPU_FORCE_AVX512_ICL 0 +#define CV_CPU_HAS_SUPPORT_AVX512_ICL \ + (cv::checkHardwareSupport(CV_CPU_AVX512_ICL)) +#define CV_CPU_CALL_AVX512_ICL(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_ICL) \ + return (opt_AVX512_ICL::fn args) +#define CV_CPU_CALL_AVX512_ICL_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_AVX512_ICL) \ + return (opt_AVX512_ICL::fn args) +#else +#define CV_TRY_AVX512_ICL 0 +#define CV_CPU_FORCE_AVX512_ICL 0 +#define CV_CPU_HAS_SUPPORT_AVX512_ICL 0 +#define CV_CPU_CALL_AVX512_ICL(fn, args) +#define CV_CPU_CALL_AVX512_ICL_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_AVX512_ICL(fn, args, mode, ...) \ + CV_CPU_CALL_AVX512_ICL(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_NEON +#define CV_TRY_NEON 1 +#define CV_CPU_FORCE_NEON 1 +#define CV_CPU_HAS_SUPPORT_NEON 1 +#define CV_CPU_CALL_NEON(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_NEON_(fn, args) return (opt_NEON::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_NEON +#define CV_TRY_NEON 1 +#define CV_CPU_FORCE_NEON 0 +#define CV_CPU_HAS_SUPPORT_NEON (cv::checkHardwareSupport(CV_CPU_NEON)) +#define CV_CPU_CALL_NEON(fn, args) \ + if (CV_CPU_HAS_SUPPORT_NEON) \ + return (opt_NEON::fn args) +#define CV_CPU_CALL_NEON_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_NEON) \ + return (opt_NEON::fn args) +#else +#define CV_TRY_NEON 0 +#define CV_CPU_FORCE_NEON 0 +#define CV_CPU_HAS_SUPPORT_NEON 0 +#define CV_CPU_CALL_NEON(fn, args) +#define CV_CPU_CALL_NEON_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_NEON(fn, args, mode, ...) \ + CV_CPU_CALL_NEON(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_NEON_DOTPROD +#define CV_TRY_NEON_DOTPROD 1 +#define CV_CPU_FORCE_NEON_DOTPROD 1 +#define CV_CPU_HAS_SUPPORT_NEON_DOTPROD 1 +#define CV_CPU_CALL_NEON_DOTPROD(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_NEON_DOTPROD_(fn, args) return (opt_NEON_DOTPROD::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_NEON_DOTPROD +#define CV_TRY_NEON_DOTPROD 1 +#define CV_CPU_FORCE_NEON_DOTPROD 0 +#define CV_CPU_HAS_SUPPORT_NEON_DOTPROD \ + (cv::checkHardwareSupport(CV_CPU_NEON_DOTPROD)) +#define CV_CPU_CALL_NEON_DOTPROD(fn, args) \ + if (CV_CPU_HAS_SUPPORT_NEON_DOTPROD) \ + return (opt_NEON_DOTPROD::fn args) +#define CV_CPU_CALL_NEON_DOTPROD_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_NEON_DOTPROD) \ + return (opt_NEON_DOTPROD::fn args) +#else +#define CV_TRY_NEON_DOTPROD 0 +#define CV_CPU_FORCE_NEON_DOTPROD 0 +#define CV_CPU_HAS_SUPPORT_NEON_DOTPROD 0 +#define CV_CPU_CALL_NEON_DOTPROD(fn, args) +#define CV_CPU_CALL_NEON_DOTPROD_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_NEON_DOTPROD(fn, args, mode, ...) \ + CV_CPU_CALL_NEON_DOTPROD(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_NEON_FP16 +#define CV_TRY_NEON_FP16 1 +#define CV_CPU_FORCE_NEON_FP16 1 +#define CV_CPU_HAS_SUPPORT_NEON_FP16 1 +#define CV_CPU_CALL_NEON_FP16(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_NEON_FP16_(fn, args) return (opt_NEON_FP16::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_NEON_FP16 +#define CV_TRY_NEON_FP16 1 +#define CV_CPU_FORCE_NEON_FP16 0 +#define CV_CPU_HAS_SUPPORT_NEON_FP16 \ + (cv::checkHardwareSupport(CV_CPU_NEON_FP16)) +#define CV_CPU_CALL_NEON_FP16(fn, args) \ + if (CV_CPU_HAS_SUPPORT_NEON_FP16) \ + return (opt_NEON_FP16::fn args) +#define CV_CPU_CALL_NEON_FP16_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_NEON_FP16) \ + return (opt_NEON_FP16::fn args) +#else +#define CV_TRY_NEON_FP16 0 +#define CV_CPU_FORCE_NEON_FP16 0 +#define CV_CPU_HAS_SUPPORT_NEON_FP16 0 +#define CV_CPU_CALL_NEON_FP16(fn, args) +#define CV_CPU_CALL_NEON_FP16_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_NEON_FP16(fn, args, mode, ...) \ + CV_CPU_CALL_NEON_FP16(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_NEON_BF16 +#define CV_TRY_NEON_BF16 1 +#define CV_CPU_FORCE_NEON_BF16 1 +#define CV_CPU_HAS_SUPPORT_NEON_BF16 1 +#define CV_CPU_CALL_NEON_BF16(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_NEON_BF16_(fn, args) return (opt_NEON_BF16::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_NEON_BF16 +#define CV_TRY_NEON_BF16 1 +#define CV_CPU_FORCE_NEON_BF16 0 +#define CV_CPU_HAS_SUPPORT_NEON_BF16 \ + (cv::checkHardwareSupport(CV_CPU_NEON_BF16)) +#define CV_CPU_CALL_NEON_BF16(fn, args) \ + if (CV_CPU_HAS_SUPPORT_NEON_BF16) \ + return (opt_NEON_BF16::fn args) +#define CV_CPU_CALL_NEON_BF16_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_NEON_BF16) \ + return (opt_NEON_BF16::fn args) +#else +#define CV_TRY_NEON_BF16 0 +#define CV_CPU_FORCE_NEON_BF16 0 +#define CV_CPU_HAS_SUPPORT_NEON_BF16 0 +#define CV_CPU_CALL_NEON_BF16(fn, args) +#define CV_CPU_CALL_NEON_BF16_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_NEON_BF16(fn, args, mode, ...) \ + CV_CPU_CALL_NEON_BF16(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_MSA +#define CV_TRY_MSA 1 +#define CV_CPU_FORCE_MSA 1 +#define CV_CPU_HAS_SUPPORT_MSA 1 +#define CV_CPU_CALL_MSA(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_MSA_(fn, args) return (opt_MSA::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_MSA +#define CV_TRY_MSA 1 +#define CV_CPU_FORCE_MSA 0 +#define CV_CPU_HAS_SUPPORT_MSA (cv::checkHardwareSupport(CV_CPU_MSA)) +#define CV_CPU_CALL_MSA(fn, args) \ + if (CV_CPU_HAS_SUPPORT_MSA) \ + return (opt_MSA::fn args) +#define CV_CPU_CALL_MSA_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_MSA) \ + return (opt_MSA::fn args) +#else +#define CV_TRY_MSA 0 +#define CV_CPU_FORCE_MSA 0 +#define CV_CPU_HAS_SUPPORT_MSA 0 +#define CV_CPU_CALL_MSA(fn, args) +#define CV_CPU_CALL_MSA_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_MSA(fn, args, mode, ...) \ + CV_CPU_CALL_MSA(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_VSX +#define CV_TRY_VSX 1 +#define CV_CPU_FORCE_VSX 1 +#define CV_CPU_HAS_SUPPORT_VSX 1 +#define CV_CPU_CALL_VSX(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_VSX_(fn, args) return (opt_VSX::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_VSX +#define CV_TRY_VSX 1 +#define CV_CPU_FORCE_VSX 0 +#define CV_CPU_HAS_SUPPORT_VSX (cv::checkHardwareSupport(CV_CPU_VSX)) +#define CV_CPU_CALL_VSX(fn, args) \ + if (CV_CPU_HAS_SUPPORT_VSX) \ + return (opt_VSX::fn args) +#define CV_CPU_CALL_VSX_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_VSX) \ + return (opt_VSX::fn args) +#else +#define CV_TRY_VSX 0 +#define CV_CPU_FORCE_VSX 0 +#define CV_CPU_HAS_SUPPORT_VSX 0 +#define CV_CPU_CALL_VSX(fn, args) +#define CV_CPU_CALL_VSX_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_VSX(fn, args, mode, ...) \ + CV_CPU_CALL_VSX(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_VSX3 +#define CV_TRY_VSX3 1 +#define CV_CPU_FORCE_VSX3 1 +#define CV_CPU_HAS_SUPPORT_VSX3 1 +#define CV_CPU_CALL_VSX3(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_VSX3_(fn, args) return (opt_VSX3::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_VSX3 +#define CV_TRY_VSX3 1 +#define CV_CPU_FORCE_VSX3 0 +#define CV_CPU_HAS_SUPPORT_VSX3 (cv::checkHardwareSupport(CV_CPU_VSX3)) +#define CV_CPU_CALL_VSX3(fn, args) \ + if (CV_CPU_HAS_SUPPORT_VSX3) \ + return (opt_VSX3::fn args) +#define CV_CPU_CALL_VSX3_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_VSX3) \ + return (opt_VSX3::fn args) +#else +#define CV_TRY_VSX3 0 +#define CV_CPU_FORCE_VSX3 0 +#define CV_CPU_HAS_SUPPORT_VSX3 0 +#define CV_CPU_CALL_VSX3(fn, args) +#define CV_CPU_CALL_VSX3_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_VSX3(fn, args, mode, ...) \ + CV_CPU_CALL_VSX3(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_RVV +#define CV_TRY_RVV 1 +#define CV_CPU_FORCE_RVV 1 +#define CV_CPU_HAS_SUPPORT_RVV 1 +#define CV_CPU_CALL_RVV(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_RVV_(fn, args) return (opt_RVV::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_RVV +#define CV_TRY_RVV 1 +#define CV_CPU_FORCE_RVV 0 +#define CV_CPU_HAS_SUPPORT_RVV (cv::checkHardwareSupport(CV_CPU_RVV)) +#define CV_CPU_CALL_RVV(fn, args) \ + if (CV_CPU_HAS_SUPPORT_RVV) \ + return (opt_RVV::fn args) +#define CV_CPU_CALL_RVV_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_RVV) \ + return (opt_RVV::fn args) +#else +#define CV_TRY_RVV 0 +#define CV_CPU_FORCE_RVV 0 +#define CV_CPU_HAS_SUPPORT_RVV 0 +#define CV_CPU_CALL_RVV(fn, args) +#define CV_CPU_CALL_RVV_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_RVV(fn, args, mode, ...) \ + CV_CPU_CALL_RVV(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_LSX +#define CV_TRY_LSX 1 +#define CV_CPU_FORCE_LSX 1 +#define CV_CPU_HAS_SUPPORT_LSX 1 +#define CV_CPU_CALL_LSX(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_LSX_(fn, args) return (opt_LSX::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_LSX +#define CV_TRY_LSX 1 +#define CV_CPU_FORCE_LSX 0 +#define CV_CPU_HAS_SUPPORT_LSX (cv::checkHardwareSupport(CV_CPU_LSX)) +#define CV_CPU_CALL_LSX(fn, args) \ + if (CV_CPU_HAS_SUPPORT_LSX) \ + return (opt_LSX::fn args) +#define CV_CPU_CALL_LSX_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_LSX) \ + return (opt_LSX::fn args) +#else +#define CV_TRY_LSX 0 +#define CV_CPU_FORCE_LSX 0 +#define CV_CPU_HAS_SUPPORT_LSX 0 +#define CV_CPU_CALL_LSX(fn, args) +#define CV_CPU_CALL_LSX_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_LSX(fn, args, mode, ...) \ + CV_CPU_CALL_LSX(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#if !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_COMPILE_LASX +#define CV_TRY_LASX 1 +#define CV_CPU_FORCE_LASX 1 +#define CV_CPU_HAS_SUPPORT_LASX 1 +#define CV_CPU_CALL_LASX(fn, args) return (cpu_baseline::fn args) +#define CV_CPU_CALL_LASX_(fn, args) return (opt_LASX::fn args) +#elif !defined CV_DISABLE_OPTIMIZATION && defined CV_ENABLE_INTRINSICS && \ + defined CV_CPU_DISPATCH_COMPILE_LASX +#define CV_TRY_LASX 1 +#define CV_CPU_FORCE_LASX 0 +#define CV_CPU_HAS_SUPPORT_LASX (cv::checkHardwareSupport(CV_CPU_LASX)) +#define CV_CPU_CALL_LASX(fn, args) \ + if (CV_CPU_HAS_SUPPORT_LASX) \ + return (opt_LASX::fn args) +#define CV_CPU_CALL_LASX_(fn, args) \ + if (CV_CPU_HAS_SUPPORT_LASX) \ + return (opt_LASX::fn args) +#else +#define CV_TRY_LASX 0 +#define CV_CPU_FORCE_LASX 0 +#define CV_CPU_HAS_SUPPORT_LASX 0 +#define CV_CPU_CALL_LASX(fn, args) +#define CV_CPU_CALL_LASX_(fn, args) +#endif +#define __CV_CPU_DISPATCH_CHAIN_LASX(fn, args, mode, ...) \ + CV_CPU_CALL_LASX(fn, args); \ + __CV_EXPAND(__CV_CPU_DISPATCH_CHAIN_##mode(fn, args, __VA_ARGS__)) + +#define CV_CPU_CALL_BASELINE(fn, args) return (cpu_baseline::fn args) +#define __CV_CPU_DISPATCH_CHAIN_BASELINE(fn, args, mode, ...) \ + CV_CPU_CALL_BASELINE(fn, args) /* last in sequence */ diff --git a/third-party/include/opencv2/core/cvdef.h b/third-party/include/opencv2/core/cvdef.h new file mode 100644 index 000000000..105a4c338 --- /dev/null +++ b/third-party/include/opencv2/core/cvdef.h @@ -0,0 +1,1003 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this +license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Copyright (C) 2015, Itseez Inc., all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without +modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's 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. +// +// * The name of the copyright holders may not be used to endorse or promote +products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "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 Intel Corporation or contributors 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. +// +//M*/ + +#ifndef OPENCV_CORE_CVDEF_H +#define OPENCV_CORE_CVDEF_H + +#include "opencv2/core/version.hpp" + +//! @addtogroup core_utils +//! @{ + +#ifdef OPENCV_INCLUDE_PORT_FILE // User-provided header file with custom + // platform configuration +#include OPENCV_INCLUDE_PORT_FILE +#endif + +#if !defined CV_DOXYGEN && !defined CV_IGNORE_DEBUG_BUILD_GUARD +#if (defined(_MSC_VER) && (defined(DEBUG) || defined(_DEBUG))) || \ + (defined(_GLIBCXX_DEBUG) || defined(_GLIBCXX_DEBUG_PEDANTIC)) +// Guard to prevent using of binary incompatible binaries / runtimes +// https://github.com/opencv/opencv/pull/9161 +#define CV__DEBUG_NS_BEGIN namespace debug_build_guard { +#define CV__DEBUG_NS_END } +namespace cv { +namespace debug_build_guard {} +using namespace debug_build_guard; +} // namespace cv +#endif +#endif + +#ifndef CV__DEBUG_NS_BEGIN +#define CV__DEBUG_NS_BEGIN +#define CV__DEBUG_NS_END +#endif + +#ifdef __OPENCV_BUILD +#include "cvconfig.h" +#endif + +#ifndef __CV_EXPAND +#define __CV_EXPAND(x) x +#endif + +#ifndef __CV_CAT +#define __CV_CAT__(x, y) x##y +#define __CV_CAT_(x, y) __CV_CAT__(x, y) +#define __CV_CAT(x, y) __CV_CAT_(x, y) +#endif + +#define __CV_VA_NUM_ARGS_HELPER(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, N, \ + ...) \ + N +#define __CV_VA_NUM_ARGS(...) \ + __CV_EXPAND( \ + __CV_VA_NUM_ARGS_HELPER(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) + +#ifdef CV_Func +// keep current value (through OpenCV port file) +#elif defined __GNUC__ || (defined(__cpluscplus) && (__cpluscplus >= 201103)) +#define CV_Func __func__ +#elif defined __clang__ && (__clang_minor__ * 100 + __clang_major__ >= 305) +#define CV_Func __func__ +#elif defined(__STDC_VERSION__) && (__STDC_VERSION >= 199901) +#define CV_Func __func__ +#elif defined _MSC_VER +#define CV_Func __FUNCTION__ +#elif defined(__INTEL_COMPILER) && (_INTEL_COMPILER >= 600) +#define CV_Func __FUNCTION__ +#elif defined __IBMCPP__ && __IBMCPP__ >= 500 +#define CV_Func __FUNCTION__ +#elif defined __BORLAND__ && (__BORLANDC__ >= 0x550) +#define CV_Func __FUNC__ +#else +#define CV_Func "" +#endif + +//! @cond IGNORED + +//////////////// static assert ///////////////// +#define CVAUX_CONCAT_EXP(a, b) a##b +#define CVAUX_CONCAT(a, b) CVAUX_CONCAT_EXP(a, b) + +#if defined(__clang__) +#ifndef __has_extension +#define __has_extension \ + __has_feature /* compatibility, for older versions of clang */ +#endif +#if __has_extension(cxx_static_assert) +#define CV_StaticAssert(condition, reason) \ + static_assert((condition), reason " " #condition) +#elif __has_extension(c_static_assert) +#define CV_StaticAssert(condition, reason) \ + _Static_assert((condition), reason " " #condition) +#endif +#elif defined(__GNUC__) +#if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L) +#define CV_StaticAssert(condition, reason) \ + static_assert((condition), reason " " #condition) +#endif +#elif defined(_MSC_VER) +#if _MSC_VER >= 1600 /* MSVC 10 */ +#define CV_StaticAssert(condition, reason) \ + static_assert((condition), reason " " #condition) +#endif +#endif +#ifndef CV_StaticAssert +#if !defined(__clang__) && defined(__GNUC__) && \ + (__GNUC__ * 100 + __GNUC_MINOR__ > 302) +#define CV_StaticAssert(condition, reason) \ + ({ \ + extern int \ + __attribute__((error("CV_StaticAssert: " reason " " #condition))) \ + CV_StaticAssert(); \ + ((condition) ? 0 : CV_StaticAssert()); \ + }) +#else +namespace cv { +template struct CV_StaticAssert_failed; +template <> struct CV_StaticAssert_failed { + enum { val = 1 }; +}; +template struct CV_StaticAssert_test {}; +} // namespace cv +#define CV_StaticAssert(condition, reason) \ + typedef cv::CV_StaticAssert_test(condition)>)> \ + CVAUX_CONCAT(CV_StaticAssert_failed_at_, __LINE__) +#endif +#endif + +// Suppress warning "-Wdeprecated-declarations" / C4996 +#if defined(_MSC_VER) +#define CV_DO_PRAGMA(x) __pragma(x) +#elif defined(__GNUC__) +#define CV_DO_PRAGMA(x) _Pragma(#x) +#else +#define CV_DO_PRAGMA(x) +#endif + +#ifdef _MSC_VER +#define CV_SUPPRESS_DEPRECATED_START \ + CV_DO_PRAGMA(warning(push)) \ + CV_DO_PRAGMA(warning(disable : 4996)) +#define CV_SUPPRESS_DEPRECATED_END CV_DO_PRAGMA(warning(pop)) +#elif defined(__clang__) || \ + ((__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ > 405)) +#define CV_SUPPRESS_DEPRECATED_START \ + CV_DO_PRAGMA(GCC diagnostic push) \ + CV_DO_PRAGMA(GCC diagnostic ignored "-Wdeprecated-declarations") +#define CV_SUPPRESS_DEPRECATED_END CV_DO_PRAGMA(GCC diagnostic pop) +#else +#define CV_SUPPRESS_DEPRECATED_START +#define CV_SUPPRESS_DEPRECATED_END +#endif + +#define CV_UNUSED(name) (void)name + +//! @endcond + +// undef problematic defines sometimes defined by system headers (windows.h in +// particular) +#undef small +#undef min +#undef max +#undef abs +#undef Complex + +#if defined __cplusplus +#include +#else +#include +#endif + +#include "opencv2/core/hal/interface.h" + +#if defined __ICL +#define CV_ICC __ICL +#elif defined __ICC +#define CV_ICC __ICC +#elif defined __ECL +#define CV_ICC __ECL +#elif defined __ECC +#define CV_ICC __ECC +#elif defined __INTEL_COMPILER +#define CV_ICC __INTEL_COMPILER +#endif + +#if defined _WIN32 +#define CV_CDECL __cdecl +#define CV_STDCALL __stdcall +#else +#define CV_CDECL +#define CV_STDCALL +#endif + +#ifndef CV_INLINE +#if defined __cplusplus +#define CV_INLINE static inline +#elif defined _MSC_VER +#define CV_INLINE __inline +#else +#define CV_INLINE static +#endif +#endif + +#ifndef CV_ALWAYS_INLINE +#if defined(__GNUC__) && \ + (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +#define CV_ALWAYS_INLINE inline __attribute__((always_inline)) +#elif defined(_MSC_VER) +#define CV_ALWAYS_INLINE __forceinline +#else +#define CV_ALWAYS_INLINE inline +#endif +#endif + +#if defined CV_DISABLE_OPTIMIZATION || \ + (defined CV_ICC && !defined CV_ENABLE_UNROLLED) +#define CV_ENABLE_UNROLLED 0 +#else +#define CV_ENABLE_UNROLLED 1 +#endif + +#ifdef __GNUC__ +#define CV_DECL_ALIGNED(x) __attribute__((aligned(x))) +#elif defined _MSC_VER +#define CV_DECL_ALIGNED(x) __declspec(align(x)) +#else +#define CV_DECL_ALIGNED(x) +#endif + +/* CPU features and intrinsics support */ +#define CV_CPU_NONE 0 +#define CV_CPU_MMX 1 +#define CV_CPU_SSE 2 +#define CV_CPU_SSE2 3 +#define CV_CPU_SSE3 4 +#define CV_CPU_SSSE3 5 +#define CV_CPU_SSE4_1 6 +#define CV_CPU_SSE4_2 7 +#define CV_CPU_POPCNT 8 +#define CV_CPU_FP16 9 +#define CV_CPU_AVX 10 +#define CV_CPU_AVX2 11 +#define CV_CPU_FMA3 12 + +#define CV_CPU_AVX_512F 13 +#define CV_CPU_AVX_512BW 14 +#define CV_CPU_AVX_512CD 15 +#define CV_CPU_AVX_512DQ 16 +#define CV_CPU_AVX_512ER 17 +#define CV_CPU_AVX_512IFMA512 18 // deprecated +#define CV_CPU_AVX_512IFMA 18 +#define CV_CPU_AVX_512PF 19 +#define CV_CPU_AVX_512VBMI 20 +#define CV_CPU_AVX_512VL 21 +#define CV_CPU_AVX_512VBMI2 22 +#define CV_CPU_AVX_512VNNI 23 +#define CV_CPU_AVX_512BITALG 24 +#define CV_CPU_AVX_512VPOPCNTDQ 25 +#define CV_CPU_AVX_5124VNNIW 26 +#define CV_CPU_AVX_5124FMAPS 27 + +#define CV_CPU_NEON 100 +#define CV_CPU_NEON_DOTPROD 101 +#define CV_CPU_NEON_FP16 102 +#define CV_CPU_NEON_BF16 103 + +#define CV_CPU_MSA 150 + +#define CV_CPU_RISCVV 170 + +#define CV_CPU_VSX 200 +#define CV_CPU_VSX3 201 + +#define CV_CPU_RVV 210 + +#define CV_CPU_LSX 230 +#define CV_CPU_LASX 231 + +// CPU features groups +#define CV_CPU_AVX512_SKX 256 +#define CV_CPU_AVX512_COMMON 257 +#define CV_CPU_AVX512_KNL 258 +#define CV_CPU_AVX512_KNM 259 +#define CV_CPU_AVX512_CNL 260 +#define CV_CPU_AVX512_CLX 261 +#define CV_CPU_AVX512_ICL 262 + +// when adding to this list remember to update the following enum +#define CV_HARDWARE_MAX_FEATURE 512 + +/** @brief Available CPU features. + */ +enum CpuFeatures { + CPU_MMX = 1, + CPU_SSE = 2, + CPU_SSE2 = 3, + CPU_SSE3 = 4, + CPU_SSSE3 = 5, + CPU_SSE4_1 = 6, + CPU_SSE4_2 = 7, + CPU_POPCNT = 8, + CPU_FP16 = 9, + CPU_AVX = 10, + CPU_AVX2 = 11, + CPU_FMA3 = 12, + + CPU_AVX_512F = 13, + CPU_AVX_512BW = 14, + CPU_AVX_512CD = 15, + CPU_AVX_512DQ = 16, + CPU_AVX_512ER = 17, + CPU_AVX_512IFMA512 = 18, // deprecated + CPU_AVX_512IFMA = 18, + CPU_AVX_512PF = 19, + CPU_AVX_512VBMI = 20, + CPU_AVX_512VL = 21, + CPU_AVX_512VBMI2 = 22, + CPU_AVX_512VNNI = 23, + CPU_AVX_512BITALG = 24, + CPU_AVX_512VPOPCNTDQ = 25, + CPU_AVX_5124VNNIW = 26, + CPU_AVX_5124FMAPS = 27, + + CPU_NEON = 100, + CPU_NEON_DOTPROD = 101, + CPU_NEON_FP16 = 102, + CPU_NEON_BF16 = 103, + + CPU_MSA = 150, + + CPU_RISCVV = 170, + + CPU_VSX = 200, + CPU_VSX3 = 201, + + CPU_RVV = 210, + + CPU_LSX = 230, + CPU_LASX = 231, + + CPU_AVX512_SKX = 256, //!< Skylake-X with AVX-512F/CD/BW/DQ/VL + CPU_AVX512_COMMON = 257, //!< Common instructions AVX-512F/CD for all CPUs + //!< that support AVX-512 + CPU_AVX512_KNL = 258, //!< Knights Landing with AVX-512F/CD/ER/PF + CPU_AVX512_KNM = + 259, //!< Knights Mill with AVX-512F/CD/ER/PF/4FMAPS/4VNNIW/VPOPCNTDQ + CPU_AVX512_CNL = 260, //!< Cannon Lake with AVX-512F/CD/BW/DQ/VL/IFMA/VBMI + CPU_AVX512_CLX = 261, //!< Cascade Lake with AVX-512F/CD/BW/DQ/VL/VNNI + CPU_AVX512_ICL = + 262, //!< Ice Lake with + //!< AVX-512F/CD/BW/DQ/VL/IFMA/VBMI/VNNI/VBMI2/BITALG/VPOPCNTDQ + + CPU_MAX_FEATURE = 512 // see CV_HARDWARE_MAX_FEATURE +}; + +#include "cv_cpu_dispatch.h" + +#if !defined(CV_STRONG_ALIGNMENT) && defined(__arm__) && \ + !(defined(__aarch64__) || defined(_M_ARM64)) +// int*, int64* should be propertly aligned pointers on ARMv7 +#define CV_STRONG_ALIGNMENT 1 +#endif +#if !defined(CV_STRONG_ALIGNMENT) +#define CV_STRONG_ALIGNMENT 0 +#endif + +/* fundamental constants */ +#define CV_PI 3.1415926535897932384626433832795 +#define CV_2PI 6.283185307179586476925286766559 +#define CV_LOG2 0.69314718055994530941723212145818 + +#if defined __ARM_FP16_FORMAT_IEEE && !defined __CUDACC__ +#define CV_FP16_TYPE 1 +#else +#define CV_FP16_TYPE 0 +#endif + +typedef union Cv16suf { + short i; + ushort u; +#if CV_FP16_TYPE + __fp16 h; +#endif +} Cv16suf; + +typedef union Cv32suf { + int i; + unsigned u; + float f; +} Cv32suf; + +typedef union Cv64suf { + int64 i; + uint64 u; + double f; +} Cv64suf; + +#ifndef OPENCV_ABI_COMPATIBILITY +#define OPENCV_ABI_COMPATIBILITY 400 +#endif + +#ifdef __OPENCV_BUILD +#define DISABLE_OPENCV_3_COMPATIBILITY +#define OPENCV_DISABLE_DEPRECATED_COMPATIBILITY +#endif + +#ifndef CV_EXPORTS +#if (defined _WIN32 || defined WINCE || defined __CYGWIN__) && \ + defined(CVAPI_EXPORTS) +#define CV_EXPORTS __declspec(dllexport) +#elif defined __GNUC__ && __GNUC__ >= 4 && \ + (defined(CVAPI_EXPORTS) || defined(__APPLE__)) +#define CV_EXPORTS __attribute__((visibility("default"))) +#endif +#endif + +#ifndef CV_EXPORTS +#define CV_EXPORTS +#endif + +#ifdef _MSC_VER +#define CV_EXPORTS_TEMPLATE +#else +#define CV_EXPORTS_TEMPLATE CV_EXPORTS +#endif + +#ifndef CV_DEPRECATED +#if defined(__GNUC__) +#define CV_DEPRECATED __attribute__((deprecated)) +#elif defined(_MSC_VER) +#define CV_DEPRECATED __declspec(deprecated) +#else +#define CV_DEPRECATED +#endif +#endif + +#ifndef CV_DEPRECATED_EXTERNAL +#if defined(__OPENCV_BUILD) +#define CV_DEPRECATED_EXTERNAL /* nothing */ +#else +#define CV_DEPRECATED_EXTERNAL CV_DEPRECATED +#endif +#endif + +#ifndef CV_EXTERN_C +#ifdef __cplusplus +#define CV_EXTERN_C extern "C" +#else +#define CV_EXTERN_C +#endif +#endif + +/* special informative macros for wrapper generators */ +#define CV_EXPORTS_W CV_EXPORTS +#define CV_EXPORTS_W_SIMPLE CV_EXPORTS +#define CV_EXPORTS_AS(synonym) CV_EXPORTS +#define CV_EXPORTS_W_MAP CV_EXPORTS +#define CV_EXPORTS_W_PARAMS CV_EXPORTS +#define CV_IN_OUT +#define CV_OUT +#define CV_PROP +#define CV_PROP_RW +#define CV_ND // Indicates that input data should be parsed into Mat without + // channels +#define CV_WRAP +#define CV_WRAP_AS(synonym) +#define CV_WRAP_MAPPABLE(mappable) +#define CV_WRAP_PHANTOM(phantom_header) +#define CV_WRAP_DEFAULT(val) +/* Indicates that the function parameter has filesystem path semantic */ +#define CV_WRAP_FILE_PATH + +/****************************************************************************************\ +* Matrix type (Mat) * +\****************************************************************************************/ + +#define CV_MAX_DIM 32 +#define CV_MAT_CN_MASK ((CV_CN_MAX - 1) << CV_CN_SHIFT) +#define CV_MAT_CN(flags) ((((flags) & CV_MAT_CN_MASK) >> CV_CN_SHIFT) + 1) +#define CV_MAT_TYPE_MASK (CV_DEPTH_MAX * CV_CN_MAX - 1) +#define CV_MAT_TYPE(flags) ((flags) & CV_MAT_TYPE_MASK) +#define CV_MAT_CONT_FLAG_SHIFT 14 +#define CV_MAT_CONT_FLAG (1 << CV_MAT_CONT_FLAG_SHIFT) +#define CV_IS_MAT_CONT(flags) ((flags) & CV_MAT_CONT_FLAG) +#define CV_IS_CONT_MAT CV_IS_MAT_CONT +#define CV_SUBMAT_FLAG_SHIFT 15 +#define CV_SUBMAT_FLAG (1 << CV_SUBMAT_FLAG_SHIFT) +#define CV_IS_SUBMAT(flags) ((flags) & CV_MAT_SUBMAT_FLAG) + +/** Size of each channel item, + 0x28442211 = 0010 1000 0100 0100 0010 0010 0001 0001 ~ array of + sizeof(arr_type_elem) */ +#define CV_ELEM_SIZE1(type) ((0x28442211 >> CV_MAT_DEPTH(type) * 4) & 15) + +#define CV_ELEM_SIZE(type) (CV_MAT_CN(type) * CV_ELEM_SIZE1(type)) + +#ifndef MIN +#define MIN(a, b) ((a) > (b) ? (b) : (a)) +#endif + +#ifndef MAX +#define MAX(a, b) ((a) < (b) ? (b) : (a)) +#endif + +/** min & max without jumps */ +#define CV_IMIN(a, b) ((a) ^ (((a) ^ (b)) & (((a) < (b)) - 1))) +#define CV_IMAX(a, b) ((a) ^ (((a) ^ (b)) & (((a) > (b)) - 1))) +#define CV_SWAP(a, b, t) ((t) = (a), (a) = (b), (b) = (t)) +#define CV_CMP(a, b) (((a) > (b)) - ((a) < (b))) +#define CV_SIGN(a) CV_CMP((a), 0) + +///////////////////////////////////////// Enum operators +////////////////////////////////////////// + +/** + +Provides compatibility operators for both classical and C++11 enum classes, +as well as exposing the C++11 enum class members for backwards compatibility + +@code + // Provides operators required for flag enums + CV_ENUM_FLAGS(AccessFlag) + + // Exposes the listed members of the enum class AccessFlag to the current +namespace CV_ENUM_CLASS_EXPOSE(AccessFlag, ACCESS_READ [, ACCESS_WRITE [, ...] +]); +@endcode +*/ + +#define __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST) \ + static const EnumType MEMBER_CONST = EnumType::MEMBER_CONST; + +#define __CV_ENUM_CLASS_EXPOSE_2(EnumType, MEMBER_CONST, ...) \ + __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST); \ + __CV_EXPAND(__CV_ENUM_CLASS_EXPOSE_1(EnumType, __VA_ARGS__)); + +#define __CV_ENUM_CLASS_EXPOSE_3(EnumType, MEMBER_CONST, ...) \ + __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST); \ + __CV_EXPAND(__CV_ENUM_CLASS_EXPOSE_2(EnumType, __VA_ARGS__)); + +#define __CV_ENUM_CLASS_EXPOSE_4(EnumType, MEMBER_CONST, ...) \ + __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST); \ + __CV_EXPAND(__CV_ENUM_CLASS_EXPOSE_3(EnumType, __VA_ARGS__)); + +#define __CV_ENUM_CLASS_EXPOSE_5(EnumType, MEMBER_CONST, ...) \ + __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST); \ + __CV_EXPAND(__CV_ENUM_CLASS_EXPOSE_4(EnumType, __VA_ARGS__)); + +#define __CV_ENUM_CLASS_EXPOSE_6(EnumType, MEMBER_CONST, ...) \ + __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST); \ + __CV_EXPAND(__CV_ENUM_CLASS_EXPOSE_5(EnumType, __VA_ARGS__)); + +#define __CV_ENUM_CLASS_EXPOSE_7(EnumType, MEMBER_CONST, ...) \ + __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST); \ + __CV_EXPAND(__CV_ENUM_CLASS_EXPOSE_6(EnumType, __VA_ARGS__)); + +#define __CV_ENUM_CLASS_EXPOSE_8(EnumType, MEMBER_CONST, ...) \ + __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST); \ + __CV_EXPAND(__CV_ENUM_CLASS_EXPOSE_7(EnumType, __VA_ARGS__)); + +#define __CV_ENUM_CLASS_EXPOSE_9(EnumType, MEMBER_CONST, ...) \ + __CV_ENUM_CLASS_EXPOSE_1(EnumType, MEMBER_CONST); \ + __CV_EXPAND(__CV_ENUM_CLASS_EXPOSE_8(EnumType, __VA_ARGS__)); + +#define __CV_ENUM_FLAGS_LOGICAL_NOT(EnumType) \ + static inline bool operator!(const EnumType &val) { \ + typedef std::underlying_type::type UnderlyingType; \ + return !static_cast(val); \ + } + +#define __CV_ENUM_FLAGS_LOGICAL_NOT_EQ(Arg1Type, Arg2Type) \ + static inline bool operator!=(const Arg1Type &a, const Arg2Type &b) { \ + return static_cast(a) != static_cast(b); \ + } + +#define __CV_ENUM_FLAGS_LOGICAL_EQ(Arg1Type, Arg2Type) \ + static inline bool operator==(const Arg1Type &a, const Arg2Type &b) { \ + return static_cast(a) == static_cast(b); \ + } + +#define __CV_ENUM_FLAGS_BITWISE_NOT(EnumType) \ + static inline EnumType operator~(const EnumType &val) { \ + typedef std::underlying_type::type UnderlyingType; \ + return static_cast(~static_cast(val)); \ + } + +#define __CV_ENUM_FLAGS_BITWISE_OR(EnumType, Arg1Type, Arg2Type) \ + static inline EnumType operator|(const Arg1Type &a, const Arg2Type &b) { \ + typedef std::underlying_type::type UnderlyingType; \ + return static_cast(static_cast(a) | \ + static_cast(b)); \ + } + +#define __CV_ENUM_FLAGS_BITWISE_AND(EnumType, Arg1Type, Arg2Type) \ + static inline EnumType operator&(const Arg1Type &a, const Arg2Type &b) { \ + typedef std::underlying_type::type UnderlyingType; \ + return static_cast(static_cast(a) & \ + static_cast(b)); \ + } + +#define __CV_ENUM_FLAGS_BITWISE_XOR(EnumType, Arg1Type, Arg2Type) \ + static inline EnumType operator^(const Arg1Type &a, const Arg2Type &b) { \ + typedef std::underlying_type::type UnderlyingType; \ + return static_cast(static_cast(a) ^ \ + static_cast(b)); \ + } + +#define __CV_ENUM_FLAGS_BITWISE_OR_EQ(EnumType, Arg1Type) \ + static inline EnumType &operator|=(EnumType &_this, const Arg1Type &val) { \ + _this = static_cast(static_cast(_this) | \ + static_cast(val)); \ + return _this; \ + } + +#define __CV_ENUM_FLAGS_BITWISE_AND_EQ(EnumType, Arg1Type) \ + static inline EnumType &operator&=(EnumType &_this, const Arg1Type &val) { \ + _this = static_cast(static_cast(_this) & \ + static_cast(val)); \ + return _this; \ + } + +#define __CV_ENUM_FLAGS_BITWISE_XOR_EQ(EnumType, Arg1Type) \ + static inline EnumType &operator^=(EnumType &_this, const Arg1Type &val) { \ + _this = static_cast(static_cast(_this) ^ \ + static_cast(val)); \ + return _this; \ + } + +#define CV_ENUM_CLASS_EXPOSE(EnumType, ...) \ + __CV_EXPAND(__CV_CAT(__CV_ENUM_CLASS_EXPOSE_, \ + __CV_VA_NUM_ARGS(__VA_ARGS__))(EnumType, __VA_ARGS__)); + +#define CV_ENUM_FLAGS(EnumType) \ + __CV_ENUM_FLAGS_LOGICAL_NOT(EnumType) \ + __CV_ENUM_FLAGS_LOGICAL_EQ(EnumType, int) \ + __CV_ENUM_FLAGS_LOGICAL_NOT_EQ(EnumType, int) \ + \ + __CV_ENUM_FLAGS_BITWISE_NOT(EnumType) \ + __CV_ENUM_FLAGS_BITWISE_OR(EnumType, EnumType, EnumType) \ + __CV_ENUM_FLAGS_BITWISE_AND(EnumType, EnumType, EnumType) \ + __CV_ENUM_FLAGS_BITWISE_XOR(EnumType, EnumType, EnumType) \ + \ + __CV_ENUM_FLAGS_BITWISE_OR_EQ(EnumType, EnumType) \ + __CV_ENUM_FLAGS_BITWISE_AND_EQ(EnumType, EnumType) \ + __CV_ENUM_FLAGS_BITWISE_XOR_EQ(EnumType, EnumType) + +/****************************************************************************************\ +* static analysys * +\****************************************************************************************/ + +// In practice, some macro are not processed correctly (noreturn is not +// detected). We need to use simplified definition for them. +#ifndef CV_STATIC_ANALYSIS +#if defined(__KLOCWORK__) || defined(__clang_analyzer__) || \ + defined(__COVERITY__) +#define CV_STATIC_ANALYSIS 1 +#endif +#else +#if defined(CV_STATIC_ANALYSIS) && \ + !(__CV_CAT(1, CV_STATIC_ANALYSIS) == 1) // defined and not empty +#if 0 == CV_STATIC_ANALYSIS +#undef CV_STATIC_ANALYSIS +#endif +#endif +#endif + +/****************************************************************************************\ +* Thread sanitizer * +\****************************************************************************************/ +#ifndef CV_THREAD_SANITIZER +#if defined(__has_feature) +#if __has_feature(thread_sanitizer) +#define CV_THREAD_SANITIZER +#endif +#endif +#endif + +/****************************************************************************************\ +* exchange-add operation for atomic operations on reference counters * +\****************************************************************************************/ + +#ifdef CV_XADD +// allow to use user-defined macro +#elif defined __GNUC__ || defined __clang__ +#if defined __clang__ && __clang_major__ >= 3 && !defined __ANDROID__ && \ + !defined __EMSCRIPTEN__ && !defined(__CUDACC__) && \ + !defined __INTEL_COMPILER +#ifdef __ATOMIC_ACQ_REL +#define CV_XADD(addr, delta) \ + __c11_atomic_fetch_add((_Atomic(int) *)(addr), delta, __ATOMIC_ACQ_REL) +#else +#define CV_XADD(addr, delta) \ + __atomic_fetch_add((_Atomic(int) *)(addr), delta, 4) +#endif +#else +#if defined __ATOMIC_ACQ_REL && !defined __clang__ +// version for gcc >= 4.7 +#define CV_XADD(addr, delta) \ + (int)__atomic_fetch_add((unsigned *)(addr), (unsigned)(delta), \ + __ATOMIC_ACQ_REL) +#else +#define CV_XADD(addr, delta) \ + (int)__sync_fetch_and_add((unsigned *)(addr), (unsigned)(delta)) +#endif +#endif +#elif defined _MSC_VER && !defined RC_INVOKED +#include +#define CV_XADD(addr, delta) \ + (int)_InterlockedExchangeAdd((long volatile *)addr, delta) +#else +#ifdef OPENCV_FORCE_UNSAFE_XADD +CV_INLINE int CV_XADD(int *addr, int delta) { + int tmp = *addr; + *addr += delta; + return tmp; +} +#else +#error \ + "OpenCV: can't define safe CV_XADD macro for current platform (unsupported). Define CV_XADD macro through custom port header (see OPENCV_INCLUDE_PORT_FILE)" +#endif +#endif + +/****************************************************************************************\ +* CV_NORETURN attribute * +\****************************************************************************************/ + +#ifndef CV_NORETURN +#if defined(__GNUC__) +#define CV_NORETURN __attribute__((__noreturn__)) +#elif defined(_MSC_VER) && (_MSC_VER >= 1300) +#define CV_NORETURN __declspec(noreturn) +#else +#define CV_NORETURN /* nothing by default */ +#endif +#endif + +/****************************************************************************************\ +* CV_NODISCARD_STD attribute (C++17) * +* encourages the compiler to issue a warning if the return value is discarded * +\****************************************************************************************/ +#ifndef CV_NODISCARD_STD +#ifndef __has_cpp_attribute +// workaround preprocessor non-compliance https://reviews.llvm.org/D57851 +#define __has_cpp_attribute(__x) 0 +#endif +#if __has_cpp_attribute(nodiscard) +#if defined(__NVCC__) && __CUDACC_VER_MAJOR__ < 12 +#define CV_NODISCARD_STD +#else +#define CV_NODISCARD_STD [[nodiscard]] +#endif +#elif __cplusplus >= 201703L +// available when compiler is C++17 compliant +#define CV_NODISCARD_STD [[nodiscard]] +#elif defined(__INTEL_COMPILER) +// see above, available when C++17 is enabled +#elif defined(_MSC_VER) && _MSC_VER >= 1911 && _MSVC_LANG >= 201703L +// available with VS2017 v15.3+ with /std:c++17 or higher; works on functions +// and classes +#define CV_NODISCARD_STD [[nodiscard]] +#elif defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 700) && \ + (__cplusplus >= 201103L) +// available with GCC 7.0+; works on functions, works or silently fails on +// classes +#define CV_NODISCARD_STD [[nodiscard]] +#elif defined(__GNUC__) && (((__GNUC__ * 100) + __GNUC_MINOR__) >= 408) && \ + (__cplusplus >= 201103L) +// available with GCC 4.8+ but it usually does nothing and can fail noisily -- +// therefore not used define CV_NODISCARD_STD [[gnu::warn_unused_result]] +#endif +#endif +#ifndef CV_NODISCARD_STD +#define CV_NODISCARD_STD /* nothing by default */ +#endif + +/****************************************************************************************\ +* C++ 11 * +\****************************************************************************************/ +#ifdef __cplusplus +// MSVC was stuck at __cplusplus == 199711L for a long time, even where it +// supports C++11, so check _MSC_VER instead. See: +// +#if defined(_MSC_VER) +#if _MSC_VER < 1800 +#error "OpenCV 4.x+ requires enabled C++11 support" +#endif +#elif __cplusplus < 201103L +#error "OpenCV 4.x+ requires enabled C++11 support" +#endif +#endif + +#ifndef CV_CXX11 +#define CV_CXX11 1 +#endif + +#ifndef CV_OVERRIDE +#define CV_OVERRIDE override +#endif + +#ifndef CV_FINAL +#define CV_FINAL final +#endif + +#ifndef CV_NOEXCEPT +#define CV_NOEXCEPT noexcept +#endif + +#ifndef CV_CONSTEXPR +#define CV_CONSTEXPR constexpr +#endif + +// Integer types portability +#ifdef __cplusplus +#include +namespace cv { +using std::int16_t; +using std::int32_t; +using std::int64_t; +using std::int8_t; +using std::uint16_t; +using std::uint32_t; +using std::uint64_t; +using std::uint8_t; +} // namespace cv +#else // pure C +#include +#endif + +#ifdef __cplusplus +namespace cv { + +class hfloat { +public: +#if CV_FP16_TYPE + + hfloat() : h(0) {} + explicit hfloat(float x) { h = (__fp16)x; } + operator float() const { return (float)h; } + +protected: + __fp16 h; + +#else + hfloat() : w(0) {} + explicit hfloat(float x) { +#if CV_FP16 && CV_AVX2 + __m128 v = _mm_load_ss(&x); + w = (ushort)_mm_cvtsi128_si32(_mm_cvtps_ph(v, 0)); +#else + Cv32suf in; + in.f = x; + unsigned sign = in.u & 0x80000000; + in.u ^= sign; + + if (in.u >= 0x47800000) + w = (ushort)(in.u > 0x7f800000 ? 0x7e00 : 0x7c00); + else { + if (in.u < 0x38800000) { + in.f += 0.5f; + w = (ushort)(in.u - 0x3f000000); + } else { + unsigned t = in.u + 0xc8000fff; + w = (ushort)((t + ((in.u >> 13) & 1)) >> 13); + } + } + + w = (ushort)(w | (sign >> 16)); +#endif + } + + operator float() const { +#if CV_FP16 && CV_AVX2 + float f; + _mm_store_ss(&f, _mm_cvtph_ps(_mm_cvtsi32_si128(w))); + return f; +#else + Cv32suf out; + + unsigned t = ((w & 0x7fff) << 13) + 0x38000000; + unsigned sign = (w & 0x8000) << 16; + unsigned e = w & 0x7c00; + + out.u = t + (1 << 23); + out.u = (e >= 0x7c00 ? t + 0x38000000 + : e == 0 ? (static_cast(out.f -= 6.103515625e-05f), out.u) + : t) | + sign; + return out.f; +#endif + } + +protected: + ushort w; + +#endif +}; + +inline hfloat hfloatFromBits(ushort w) { +#if CV_FP16_TYPE + Cv16suf u; + u.u = w; + hfloat res(float(u.h)); + return res; +#else + Cv32suf out; + + unsigned t = ((w & 0x7fff) << 13) + 0x38000000; + unsigned sign = (w & 0x8000) << 16; + unsigned e = w & 0x7c00; + + out.u = t + (1 << 23); + out.u = (e >= 0x7c00 ? t + 0x38000000 + : e == 0 ? (static_cast(out.f -= 6.103515625e-05f), out.u) + : t) | + sign; + hfloat res(out.f); + return res; +#endif +} + +#if !defined(__OPENCV_BUILD) && !(defined __STDCPP_FLOAT16_T__) && \ + !(defined __ARM_NEON) +typedef hfloat float16_t; +#endif + +} // namespace cv +#endif + +/** @brief Constructs the 'fourcc' code, used in video codecs and many other + places. Simply call it with 4 chars like `CV_FOURCC('I', 'Y', 'U', 'V')` +*/ +CV_INLINE int CV_FOURCC(char c1, char c2, char c3, char c4) { + return (c1 & 255) + ((c2 & 255) << 8) + ((c3 & 255) << 16) + + ((c4 & 255) << 24); +} + +//! Macro to construct the fourcc code of the codec. Same as CV_FOURCC() +#define CV_FOURCC_MACRO(c1, c2, c3, c4) \ + (((c1) & 255) + (((c2) & 255) << 8) + (((c3) & 255) << 16) + \ + (((c4) & 255) << 24)) + +//! @} + +#ifndef __cplusplus +#include "opencv2/core/fast_math.hpp" // define cvRound(double) +#endif + +#define CV_OCL_RUN_(condition, func, ...) +#define CV_OCL_RUN(condition, func) CV_OCL_RUN_(condition, func) + +#define CV_OVX_RUN(condition, func, ...) + +#endif // OPENCV_CORE_CVDEF_H diff --git a/third-party/include/opencv2/core/cvstd.hpp b/third-party/include/opencv2/core/cvstd.hpp new file mode 100644 index 000000000..481cf8da1 --- /dev/null +++ b/third-party/include/opencv2/core/cvstd.hpp @@ -0,0 +1,196 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this +license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without +modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's 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. +// +// * The name of the copyright holders may not be used to endorse or promote +products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "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 Intel Corporation or contributors 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. +// +//M*/ + +#ifndef OPENCV_CORE_CVSTD_HPP +#define OPENCV_CORE_CVSTD_HPP + +#ifndef __cplusplus +#error cvstd.hpp header must be compiled as C++ +#endif + +#include "opencv2/core/cvdef.h" +#include +#include +#include + +#include + +// import useful primitives from stl +#include +#include +#include //for abs(int) +#include + +namespace cv { +static inline uchar abs(uchar a) { return a; } +static inline ushort abs(ushort a) { return a; } +static inline unsigned abs(unsigned a) { return a; } +static inline uint64 abs(uint64 a) { return a; } + +using std::abs; +using std::exp; +using std::log; +using std::max; +using std::min; +using std::pow; +using std::sqrt; +using std::swap; +} // namespace cv + +#include "cvstd_wrapper.hpp" + +namespace cv { + +//! @addtogroup core_utils +//! @{ + +//////////////////////////// memory management functions +/////////////////////////////// + +/** @brief Allocates an aligned memory buffer. + +The function allocates the buffer of the specified size and returns it. When the +buffer size is 16 bytes or more, the returned buffer is aligned to 16 bytes. +@param bufSize Allocated buffer size. + */ +CV_EXPORTS void *fastMalloc(size_t bufSize); + +/** @brief Deallocates a memory buffer. + +The function deallocates the buffer allocated with fastMalloc . If NULL pointer +is passed, the function does nothing. C version of the function clears the +pointer *pptr* to avoid problems with double memory deallocation. +@param ptr Pointer to the allocated buffer. + */ +CV_EXPORTS void fastFree(void *ptr); + +/*! + The STL-compliant memory Allocator based on cv::fastMalloc() and + cv::fastFree() +*/ +template class Allocator { +public: + typedef _Tp value_type; + typedef value_type *pointer; + typedef const value_type *const_pointer; + typedef value_type &reference; + typedef const value_type &const_reference; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + template class rebind { + typedef Allocator other; + }; + + explicit Allocator() {} + ~Allocator() {} + explicit Allocator(Allocator const &) {} + template explicit Allocator(Allocator const &) {} + + // address + pointer address(reference r) { return &r; } + const_pointer address(const_reference r) { return &r; } + + pointer allocate(size_type count, const void * = 0) { + return reinterpret_cast(fastMalloc(count * sizeof(_Tp))); + } + void deallocate(pointer p, size_type) { fastFree(p); } + + void construct(pointer p, const _Tp &v) { + new (static_cast(p)) _Tp(v); + } + void destroy(pointer p) { p->~_Tp(); } + + size_type max_size() const { + return cv::max(static_cast<_Tp>(-1) / sizeof(_Tp), 1); + } +}; + +//! @} core_utils + +//! @addtogroup core_basic +//! @{ + +//////////////////////////////// string class //////////////////////////////// + +class CV_EXPORTS FileNode; // for string constructor from FileNode + +typedef std::string String; + +#ifndef OPENCV_DISABLE_STRING_LOWER_UPPER_CONVERSIONS + +//! @cond IGNORED +namespace details { +// std::tolower is int->int +static inline char char_tolower(char ch) { return (char)std::tolower((int)ch); } +// std::toupper is int->int +static inline char char_toupper(char ch) { return (char)std::toupper((int)ch); } +} // namespace details +//! @endcond + +static inline std::string toLowerCase(const std::string &str) { + std::string result(str); + std::transform(result.begin(), result.end(), result.begin(), + details::char_tolower); + return result; +} + +static inline std::string toUpperCase(const std::string &str) { + std::string result(str); + std::transform(result.begin(), result.end(), result.begin(), + details::char_toupper); + return result; +} + +#endif // OPENCV_DISABLE_STRING_LOWER_UPPER_CONVERSIONS + +//! @} core_basic +} // namespace cv + +#endif // OPENCV_CORE_CVSTD_HPP diff --git a/third-party/include/opencv2/core/cvstd.inl.hpp b/third-party/include/opencv2/core/cvstd.inl.hpp new file mode 100644 index 000000000..0a18f7569 --- /dev/null +++ b/third-party/include/opencv2/core/cvstd.inl.hpp @@ -0,0 +1,188 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this +license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2000-2008, Intel Corporation, all rights reserved. +// Copyright (C) 2009, Willow Garage Inc., all rights reserved. +// Copyright (C) 2013, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without +modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's 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. +// +// * The name of the copyright holders may not be used to endorse or promote +products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "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 Intel Corporation or contributors 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. +// +//M*/ + +#ifndef OPENCV_CORE_CVSTDINL_HPP +#define OPENCV_CORE_CVSTDINL_HPP + +#include +#include +#include + +//! @cond IGNORED + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4127) +#endif + +namespace cv { + +template class DataType> { +public: + typedef std::complex<_Tp> value_type; + typedef value_type work_type; + typedef _Tp channel_type; + + enum { + generic_type = 0, + depth = DataType::depth, + channels = 2, + fmt = DataType::fmt + ((channels - 1) << 8), + type = CV_MAKETYPE(depth, channels) + }; + + typedef Vec vec_type; +}; + +static inline std::ostream &operator<<(std::ostream &out, Ptr fmtd) { + fmtd->reset(); + for (const char *str = fmtd->next(); str; str = fmtd->next()) + out << str; + return out; +} + +static inline std::ostream &operator<<(std::ostream &out, const Mat &mtx) { + return out << Formatter::get()->format(mtx); +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const Complex<_Tp> &c) { + return out << "(" << c.re << "," << c.im << ")"; +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const std::vector> &vec) { + return out << Formatter::get()->format(Mat(vec)); +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const std::vector> &vec) { + return out << Formatter::get()->format(Mat(vec)); +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const Matx<_Tp, m, n> &matx) { + return out << Formatter::get()->format(Mat(matx)); +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const Point_<_Tp> &p) { + out << "[" << p.x << ", " << p.y << "]"; + return out; +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const Point3_<_Tp> &p) { + out << "[" << p.x << ", " << p.y << ", " << p.z << "]"; + return out; +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const Vec<_Tp, n> &vec) { + out << "["; + if (cv::traits::Depth<_Tp>::value <= CV_32S) { + for (int i = 0; i < n - 1; ++i) { + out << (int)vec[i] << ", "; + } + out << (int)vec[n - 1] << "]"; + } else { + for (int i = 0; i < n - 1; ++i) { + out << vec[i] << ", "; + } + out << vec[n - 1] << "]"; + } + + return out; +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const Size_<_Tp> &size) { + return out << "[" << size.width << " x " << size.height << "]"; +} + +template +static inline std::ostream &operator<<(std::ostream &out, + const Rect_<_Tp> &rect) { + return out << "[" << rect.width << " x " << rect.height << " from (" << rect.x + << ", " << rect.y << ")]"; +} + +static inline std::ostream &operator<<(std::ostream &out, + const MatSize &msize) { + int i, dims = msize.dims(); + for (i = 0; i < dims; i++) { + out << msize[i]; + if (i < dims - 1) + out << " x "; + } + return out; +} + +static inline std::ostream &operator<<(std::ostream &s, cv::Range &r) { + return s << "[" << r.start << " : " << r.end << ")"; +} + +} // namespace cv + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +//! @endcond + +#endif // OPENCV_CORE_CVSTDINL_HPP diff --git a/third-party/include/opencv2/core/cvstd_wrapper.hpp b/third-party/include/opencv2/core/cvstd_wrapper.hpp new file mode 100644 index 000000000..8725beb75 --- /dev/null +++ b/third-party/include/opencv2/core/cvstd_wrapper.hpp @@ -0,0 +1,187 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level +// directory of this distribution and at http://opencv.org/license.html. + +#ifndef OPENCV_CORE_CVSTD_WRAPPER_HPP +#define OPENCV_CORE_CVSTD_WRAPPER_HPP + +#include "opencv2/core/cvdef.h" + +#include // std::shared_ptr +#include +#include // std::enable_if + +namespace cv { + +using std::nullptr_t; + +//! @addtogroup core_basic +//! @{ + +#ifdef CV_DOXYGEN + +template +using Ptr = + std::shared_ptr<_Tp>; // In ideal world it should look like this, but we + // need some compatibility workarounds below + +template +static inline Ptr<_Tp> makePtr(const A1 &...a1) { + return std::make_shared<_Tp>(a1...); +} + +#else // cv::Ptr with compatibility workarounds + +// It should be defined for C-API types only. +// C++ types should use regular "delete" operator. +template struct DefaultDeleter; +#if 0 +{ + void operator()(Y* p) const; +}; +#endif + +namespace sfinae { +template +struct has_parenthesis_operator { +private: + template + static CV_CONSTEXPR std::true_type has_parenthesis_operator_check( + typename std::is_same< + typename std::decay().operator()( + std::declval()...))>::type, + Ret>::type *); + + template + static CV_CONSTEXPR std::false_type has_parenthesis_operator_check(...); + + typedef decltype(has_parenthesis_operator_check(0)) type; + +public: +#if __cplusplus >= 201103L || \ + (defined(_MSC_VER) && _MSC_VER >= 1900 /*MSVS 2015*/) + static CV_CONSTEXPR bool value = type::value; +#else + // support MSVS 2013 + static const int value = type::value; +#endif +}; +} // namespace sfinae + +template +struct has_custom_delete : public std::false_type {}; + +// Force has_custom_delete to std::false_type when NVCC is compiling CUDA source +// files +#ifndef __CUDACC__ +template +struct has_custom_delete< + T, typename std::enable_if, void, T *>::value>::type> + : public std::true_type {}; +#endif + +template struct Ptr : public std::shared_ptr { +#if 0 + using std::shared_ptr::shared_ptr; // GCC 5.x can't handle this +#else + inline Ptr() CV_NOEXCEPT : std::shared_ptr() {} + inline Ptr(nullptr_t) CV_NOEXCEPT : std::shared_ptr(nullptr) {} + template + inline Ptr(Y *p, D d) : std::shared_ptr(p, d) {} + template + inline Ptr(nullptr_t, D d) : std::shared_ptr(nullptr, d) {} + + template + inline Ptr(const Ptr &r, T *ptr) CV_NOEXCEPT : std::shared_ptr(r, ptr) { + } + + inline Ptr(const Ptr &o) CV_NOEXCEPT : std::shared_ptr(o) {} + inline Ptr(Ptr &&o) CV_NOEXCEPT : std::shared_ptr(std::move(o)) {} + + template + inline Ptr(const Ptr &o) CV_NOEXCEPT : std::shared_ptr(o) {} + template + inline Ptr(Ptr &&o) CV_NOEXCEPT : std::shared_ptr(std::move(o)) {} +#endif + inline Ptr(const std::shared_ptr &o) CV_NOEXCEPT : std::shared_ptr(o) {} + inline Ptr(std::shared_ptr &&o) CV_NOEXCEPT + : std::shared_ptr(std::move(o)) {} + + // Overload with custom DefaultDeleter: Ptr(...) + template + inline Ptr(const std::true_type &, Y *ptr) + : std::shared_ptr(ptr, DefaultDeleter()) {} + + // Overload without custom deleter: Ptr(...); + template + inline Ptr(const std::false_type &, Y *ptr) : std::shared_ptr(ptr) {} + + template + inline Ptr(Y *ptr) : Ptr(has_custom_delete(), ptr) {} + + // Overload with custom DefaultDeleter: Ptr(...) + template inline void reset(const std::true_type &, Y *ptr) { + std::shared_ptr::reset(ptr, DefaultDeleter()); + } + + // Overload without custom deleter: Ptr(...); + template inline void reset(const std::false_type &, Y *ptr) { + std::shared_ptr::reset(ptr); + } + + template inline void reset(Y *ptr) { + Ptr::reset(has_custom_delete(), ptr); + } + + template void reset(Y *ptr, Deleter d) { + std::shared_ptr::reset(ptr, d); + } + + void reset() CV_NOEXCEPT { std::shared_ptr::reset(); } + + Ptr &operator=(const Ptr &o) { + std::shared_ptr::operator=(o); + return *this; + } + template inline Ptr &operator=(const Ptr &o) { + std::shared_ptr::operator=(o); + return *this; + } + + T *operator->() const CV_NOEXCEPT { return std::shared_ptr::get(); } + typename std::add_lvalue_reference::type operator*() const CV_NOEXCEPT { + return *std::shared_ptr::get(); + } + + // OpenCV 3.x methods (not a part of standard C++ library) + inline void release() { std::shared_ptr::reset(); } + inline operator T *() const { return std::shared_ptr::get(); } + inline bool empty() const { return std::shared_ptr::get() == nullptr; } + + template inline Ptr staticCast() const CV_NOEXCEPT { + return std::static_pointer_cast(*this); + } + + template inline Ptr constCast() const CV_NOEXCEPT { + return std::const_pointer_cast(*this); + } + + template inline Ptr dynamicCast() const CV_NOEXCEPT { + return std::dynamic_pointer_cast(*this); + } +}; + +template +static inline Ptr<_Tp> makePtr(const A1 &...a1) { + static_assert(!has_custom_delete<_Tp>::value, + "Can't use this makePtr with custom DefaultDeleter"); + return (Ptr<_Tp>)std::make_shared<_Tp>(a1...); +} + +#endif // CV_DOXYGEN + +//! @} core_basic +} // namespace cv + +#endif // OPENCV_CORE_CVSTD_WRAPPER_HPP diff --git a/third-party/include/opencv2/core/detail/async_promise.hpp b/third-party/include/opencv2/core/detail/async_promise.hpp new file mode 100644 index 000000000..136727549 --- /dev/null +++ b/third-party/include/opencv2/core/detail/async_promise.hpp @@ -0,0 +1,73 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level +// directory of this distribution and at http://opencv.org/license.html. + +#ifndef OPENCV_CORE_ASYNC_PROMISE_HPP +#define OPENCV_CORE_ASYNC_PROMISE_HPP + +#include "../async.hpp" + +#include "exception_ptr.hpp" + +namespace cv { + +/** @addtogroup core_async +@{ +*/ + +/** @brief Provides result of asynchronous operations + +*/ +class CV_EXPORTS AsyncPromise { +public: + ~AsyncPromise() CV_NOEXCEPT; + AsyncPromise() CV_NOEXCEPT; + explicit AsyncPromise(const AsyncPromise &o) CV_NOEXCEPT; + AsyncPromise &operator=(const AsyncPromise &o) CV_NOEXCEPT; + void release() CV_NOEXCEPT; + + /** Returns associated AsyncArray + @note Can be called once + */ + AsyncArray getArrayResult(); + + /** Stores asynchronous result. + @param[in] value result + */ + void setValue(InputArray value); + + // TODO "move" setters + +#if CV__EXCEPTION_PTR + /** Stores exception. + @param[in] exception exception to be raised in AsyncArray + */ + void setException(std::exception_ptr exception); +#endif + + /** Stores exception. + @param[in] exception exception to be raised in AsyncArray + */ + void setException(const cv::Exception &exception); + + explicit AsyncPromise(AsyncPromise &&o) { + p = o.p; + o.p = NULL; + } + AsyncPromise &operator=(AsyncPromise &&o) CV_NOEXCEPT { + std::swap(p, o.p); + return *this; + } + + // PImpl + typedef struct AsyncArray::Impl Impl; + friend struct AsyncArray::Impl; + inline void *_getImpl() const CV_NOEXCEPT { return p; } + +protected: + Impl *p; +}; + +//! @} +} // namespace cv +#endif // OPENCV_CORE_ASYNC_PROMISE_HPP diff --git a/third-party/include/opencv2/core/detail/dispatch_helper.impl.hpp b/third-party/include/opencv2/core/detail/dispatch_helper.impl.hpp new file mode 100644 index 000000000..e4ccc39e9 --- /dev/null +++ b/third-party/include/opencv2/core/detail/dispatch_helper.impl.hpp @@ -0,0 +1,48 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level +// directory of this distribution and at http://opencv.org/license.html. + +#ifndef OPENCV_CORE_DETAIL_DISPATCH_HELPER_IMPL_HPP +#define OPENCV_CORE_DETAIL_DISPATCH_HELPER_IMPL_HPP + +//! @cond IGNORED + +namespace cv { +namespace detail { + +template