diff --git a/OAT.xml b/OAT.xml index 1a67ebc2da5f0708956df8d1dd45227f848fd947..5d8a8bd5c8e86805323a9003b823bb53ea96c367 100644 --- a/OAT.xml +++ b/OAT.xml @@ -57,6 +57,37 @@ Note:If the text contains special characters, please escape them according to th + + + + + + + + + + + + + + + + + + + + + @@ -119,6 +166,27 @@ Note:If the text contains special characters, please escape them according to th + + + + + + + + + + + + + + + + + + + + + @@ -2083,6 +2151,47 @@ Note:If the text contains special characters, please escape them according to th + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2090,6 +2199,14 @@ Note:If the text contains special characters, please escape them according to th + + + + + + + + @@ -2150,6 +2267,41 @@ Note:If the text contains special characters, please escape them according to th + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2179,7 +2331,20 @@ Note:If the text contains special characters, please escape them according to th + + + + + + + + + + + + + diff --git a/code/ArkTS1.2/ANISample/.gitignore b/code/ArkTS1.2/ANISample/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d2ff20141ceed86d87c0ea5d99481973005bab2b --- /dev/null +++ b/code/ArkTS1.2/ANISample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/AppScope/app.json5 b/code/ArkTS1.2/ANISample/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..f708e8b9a0d035f26b26ad40d4e80bd1b385cb7d --- /dev/null +++ b/code/ArkTS1.2/ANISample/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.samples.aniTest", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/ArkTS1.2/ANISample/AppScope/resources/base/element/string.json b/code/ArkTS1.2/ANISample/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..37c0a94520cf0ccf7baddb6e00b1c38d3c4e95c7 --- /dev/null +++ b/code/ArkTS1.2/ANISample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "ANITest" + } + ] +} diff --git a/code/ArkTS1.2/ANISample/AppScope/resources/base/media/app_icon.png b/code/ArkTS1.2/ANISample/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 Binary files /dev/null and b/code/ArkTS1.2/ANISample/AppScope/resources/base/media/app_icon.png differ diff --git a/code/ArkTS1.2/ANISample/build-profile.json5 b/code/ArkTS1.2/ANISample/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..6a325164e4f9f873bcb884a635ef0e36a15a06cc --- /dev/null +++ b/code/ArkTS1.2/ANISample/build-profile.json5 @@ -0,0 +1,42 @@ +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "arkTSVersion": "1.2", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + }, + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/code-linter.json5 b/code/ArkTS1.2/ANISample/code-linter.json5 new file mode 100644 index 0000000000000000000000000000000000000000..073990fa45394e1f8e85d85418ee60a8953f9b99 --- /dev/null +++ b/code/ArkTS1.2/ANISample/code-linter.json5 @@ -0,0 +1,32 @@ +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@security/no-unsafe-aes": "error", + "@security/no-unsafe-hash": "error", + "@security/no-unsafe-mac": "warn", + "@security/no-unsafe-dh": "error", + "@security/no-unsafe-dsa": "error", + "@security/no-unsafe-ecdsa": "error", + "@security/no-unsafe-rsa-encrypt": "error", + "@security/no-unsafe-rsa-sign": "error", + "@security/no-unsafe-rsa-key": "error", + "@security/no-unsafe-dsa-key": "error", + "@security/no-unsafe-dh-key": "error", + "@security/no-unsafe-3des": "error" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/.gitignore b/code/ArkTS1.2/ANISample/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/build-profile.json5 b/code/ArkTS1.2/ANISample/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..48bbe2b7d7b95e4d6f4ee0741a8c6c088a13609b --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/build-profile.json5 @@ -0,0 +1,34 @@ +{ + "apiType": "stageMode", + "arkTSVersion": "1.2", + "buildOption": { + "externalNativeOptions": { + "path": "./src/main/cpp/CMakeLists.txt", + "arguments": "", + "cppFlags": "", + } + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/hvigorfile.ts b/code/ArkTS1.2/ANISample/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..c6edcd90486dd5a853cf7d34c8647f08414ca7a3 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ANISample/entry/obfuscation-rules.txt b/code/ArkTS1.2/ANISample/entry/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/oh-package.json5 b/code/ArkTS1.2/ANISample/entry/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..248c3b7541a589682a250f86a6d3ecf7414d2d6a --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/oh-package.json5 @@ -0,0 +1,10 @@ +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/CMakeLists.txt b/code/ArkTS1.2/ANISample/entry/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..98943cf74cccc3f98d0a8f276cd697c55c9be6c2 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/CMakeLists.txt @@ -0,0 +1,14 @@ +# the minimum version of CMake. +cmake_minimum_required(VERSION 3.5.0) +project(ANITest) + +set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR}) +set(CMAKE_CXX_STANDARD 17) +if(DEFINED PACKAGE_FIND_FILE) + include(${PACKAGE_FIND_FILE}) +endif() + +include_directories(${NATIVERENDER_ROOT_PATH} + ${NATIVERENDER_ROOT_PATH}/include) +add_library(entry SHARED ani_init.cpp) +target_link_libraries(entry PUBLIC libhilog_ndk.z.so) \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_accessing_fields.cpp b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_accessing_fields.cpp new file mode 100644 index 0000000000000000000000000000000000000000..794f49807d56eadb622e0d812d2d767d18b37aee --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_accessing_fields.cpp @@ -0,0 +1,485 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "ani/ani.h" +#include "hilog/log.h" +#include + +#define CHAR_A 'A' +#define CHAR_B 'B' +#define CHAR_G 'G' +#define CHAR_U 'U' +#define CHAR_Z 'Z' +#define NUM15 15 +#define NUM2 2 +#define NUM120 120 +#define NUM255 255 +#define NUM65538 65538 +#define NUM12345678910 12345678910 +#define NUM3_12 3.12 +#define NUM3_14 3.14 +#define NUM4_56 4.56 +#define NUM15_23 15.23 +#define NUM15_2365941 15.2365941 +#define NUM12365478941 12365478941 + +#undef LOG_DOMAIN +#undef LOG_TAG +#define LOG_DOMAIN 0x3200 // 全局domain宏,标识业务领域 +#define LOG_TAG "MY_TAG" // 全局tag宏,标识模块日志tag + +// Accessing Fields of Objects Class Operations +static void UpdateFields(ani_env *env, ani_object obj) +{ + std::cout << "Update Field in native" << std::endl; + const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_field boolField; + if (ANI_OK != env->Class_FindField(cls, "boolField", &boolField)) { + std::cerr << "Get Field Fail" << className << "'" << std::endl; + return; + } + ani_field doubleField; + if (ANI_OK != env->Class_FindField(cls, "doubleField", &doubleField)) { + std::cerr << "Get Field Fail" << className << "'" << std::endl; + return; + } + ani_field floatField; + if (ANI_OK != env->Class_FindField(cls, "floatField", &floatField)) { + std::cerr << "Get Field Fail" << className << "'" << std::endl; + return; + } + ani_field charField; + if (ANI_OK != env->Class_FindField(cls, "charField", &charField)) { + std::cerr << "Get Field Fail" << className << "'" << std::endl; + return; + } + ani_boolean boolValue = ANI_TRUE; + if (ANI_OK != env->Object_SetField_Boolean(obj, boolField, boolValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_double doubleValue = NUM3_14; + if (ANI_OK != env->Object_SetField_Double(obj, doubleField, doubleValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_float floatValue = NUM4_56; + if (ANI_OK != env->Object_SetField_Float(obj, floatField, floatValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_char charValue = CHAR_Z; + if (ANI_OK != env->Object_SetField_Char(obj, charField, charValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + return; +} + +static void UpdateFields2(ani_env *env, ani_object obj) +{ + std::cout << "Update Field in native" << std::endl; + const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_field intField; + if (ANI_OK != env->Class_FindField(cls, "intField", &intField)) { + std::cerr << "Get Field Fail" << className << "'" << std::endl; + return; + } + ani_field shortField; + if (ANI_OK != env->Class_FindField(cls, "shortField", &shortField)) { + std::cerr << "Get Field Fail" << className << "'" << std::endl; + return; + } + ani_field longField; + if (ANI_OK != env->Class_FindField(cls, "longField", &longField)) { + std::cerr << "Get Field Fail" << className << "'" << std::endl; + return; + } + ani_field byteField; + if (ANI_OK != env->Class_FindField(cls, "byteField", &byteField)) { + std::cerr << "Get Field Fail" << className << "'" << std::endl; + return; + } + ani_int intValue = NUM15; + if (ANI_OK != env->Object_SetField_Int(obj, intField, intValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_short shortValue = NUM255; + if (ANI_OK != env->Object_SetField_Short(obj, shortField, shortValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_long longValue = NUM12345678910; + if (ANI_OK != env->Object_SetField_Long(obj, longField, longValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_byte byteValue = CHAR_A; + if (ANI_OK != env->Object_SetField_Byte(obj, byteField, byteValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } +} + +static ani_int UpdateIntFields([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_int intField; + if (ANI_OK != env->Object_GetFieldByName_Int(obj, "getIntField", &intField)) { + std::cerr << "Get Field Fail" << std::endl; + return 0; + } + return intField; +} + +static ani_double UpdateDoubleFields([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_double doubleField; + if (ANI_OK != env->Object_GetFieldByName_Double(obj, "getDoubleField", &doubleField)) { + std::cerr << "Get Field Fail" << std::endl; + return 0.0; + } + return doubleField; +} + +static ani_boolean UpdateBoolFields([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_boolean boolField; + if (ANI_OK != env->Object_GetFieldByName_Boolean(obj, "getBoolField", &boolField)) { + std::cerr << "Get Field Fail" << std::endl; + return false; + } + return boolField; +} + +static ani_short UpdateShortFields([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_short shortField; + if (ANI_OK != env->Object_GetFieldByName_Short(obj, "getShortField", &shortField)) { + std::cerr << "Get Field Fail" << std::endl; + return 0; + } + return shortField; +} + +static ani_long UpdateLongFields([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_long longField; + if (ANI_OK != env->Object_GetFieldByName_Long(obj, "getLongField", &longField)) { + std::cerr << "Get Field Fail" << std::endl; + return 0; + } + return longField; +} + +static ani_char UpdateCharFields([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_char charField; + if (ANI_OK != env->Object_GetFieldByName_Char(obj, "getCharField", &charField)) { + std::cerr << "Get Field Fail" << std::endl; + return 0; + } + return charField; +} + +static ani_float UpdateFloatFields([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_float floatField; + if (ANI_OK != env->Object_GetFieldByName_Float(obj, "getFloatField", &floatField)) { + std::cerr << "Get Field Fail" << std::endl; + return 0.0; + } + return floatField; +} + +static ani_byte UpdateByteFields([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_byte byteField; + if (ANI_OK != env->Object_GetFieldByName_Byte(obj, "getByteField", &byteField)) { + std::cerr << "Get Field Fail" << std::endl; + return 0x0; + } + return byteField; +} + +static void UpdateByNameFields(ani_env *env, ani_object obj) +{ + std::cout << "Update Field in native" << std::endl; + const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_byte byteValue = CHAR_B; + if (ANI_OK != env->Object_SetFieldByName_Byte(obj, "fieldByName_Byte", byteValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_double doubleValue = NUM4_56; + if (ANI_OK != env->Object_SetFieldByName_Double(obj, "fieldByName_Double", doubleValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_short shortValue = NUM255; + if (ANI_OK != env->Object_SetFieldByName_Short(obj, "fieldByName_Short", shortValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_boolean boolValue = true; + if (ANI_OK != env->Object_SetFieldByName_Boolean(obj, "fieldByName_Bool", boolValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + return; +} + +static void UpdateByNameFields2(ani_env *env, ani_object obj) +{ + std::cout << "Update Field in native" << std::endl; + const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_float floatValue = NUM15_23; + if (ANI_OK != env->Object_SetFieldByName_Float(obj, "fieldByName_Float", floatValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_long longValue = NUM12365478941; + if (ANI_OK != env->Object_SetFieldByName_Long(obj, "fieldByName_Long", longValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_char charValue = CHAR_G; + if (ANI_OK != env->Object_SetFieldByName_Char(obj, "fieldByName_Char", charValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + ani_int intValue = NUM120; + if (ANI_OK != env->Object_SetFieldByName_Int(obj, "fieldByName_Int", intValue)) { + std::cerr << "Set Field Fail" << className << "'" << std::endl; + } + return; +} + +// Accessing Static Fields Class Operations +static void UpdateStaticFields(ani_env *env, ani_object obj) +{ + std::cout << "Update Field in native" << std::endl; + const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_static_field intField; + if (ANI_OK != env->Class_FindStaticField(cls, "intStaticField", &intField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field shortField; + if (ANI_OK != env->Class_FindStaticField(cls, "shortStaticField", &shortField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field longField; + if (ANI_OK != env->Class_FindStaticField(cls, "longStaticField", &longField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field charField; + if (ANI_OK != env->Class_FindStaticField(cls, "charStaticField", &charField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_int intValue = NUM65538; + if (ANI_OK != env->Class_SetStaticField_Int(cls, intField, intValue)) { + std::cerr << "Set StaticField Fail" << className << "'" << std::endl; + } + ani_short shortValue = NUM2; + if (ANI_OK != env->Class_SetStaticField_Short(cls, shortField, shortValue)) { + std::cerr << "Set StaticField Fail" << className << "'" << std::endl; + } + ani_long longValue = NUM12345678910; + if (ANI_OK != env->Class_SetStaticField_Long(cls, longField, longValue)) { + std::cerr << "Set StaticField Fail" << className << "'" << std::endl; + } + ani_char charValue = CHAR_U; + if (ANI_OK != env->Class_SetStaticField_Char(cls, charField, charValue)) { + std::cerr << "Set StaticField Fail" << className << "'" << std::endl; + } + return; +} + +static void UpdateStaticFields2(ani_env *env, ani_object obj) +{ + std::cout << "Update Field in native" << std::endl; + const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_static_field doubleField; + if (ANI_OK != env->Class_FindStaticField(cls, "doubleStaticField", &doubleField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field floatField; + if (ANI_OK != env->Class_FindStaticField(cls, "floatStaticField", &floatField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field boolField; + if (ANI_OK != env->Class_FindStaticField(cls, "boolStaticField", &boolField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field byteField; + if (ANI_OK != env->Class_FindStaticField(cls, "byteStaticField", &byteField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_double doubleValue = NUM15_2365941; + if (ANI_OK != env->Class_SetStaticField_Double(cls, doubleField, doubleValue)) { + std::cerr << "Set StaticField Fail" << className << "'" << std::endl; + } + ani_float floatValue = NUM3_12; + if (ANI_OK != env->Class_SetStaticField_Float(cls, floatField, floatValue)) { + std::cerr << "Set StaticField Fail" << className << "'" << std::endl; + } + ani_boolean boolValue = true; + if (ANI_OK != env->Class_SetStaticField_Boolean(cls, boolField, boolValue)) { + std::cerr << "Set StaticField Fail" << className << "'" << std::endl; + } + ani_byte byteValue = CHAR_U; + if (ANI_OK != env->Class_SetStaticField_Byte(cls, byteField, byteValue)) { + std::cerr << "Set StaticField Fail" << className << "'" << std::endl; + } + return; +} + +static void GetStaticFields(ani_env *env, ani_object obj) +{ + std::cout << "Get Field in native" << std::endl; + const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_static_field intField; + if (ANI_OK != env->Class_FindStaticField(cls, "intStaticField", &intField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field shortField; + if (ANI_OK != env->Class_FindStaticField(cls, "shortStaticField", &shortField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field longField; + if (ANI_OK != env->Class_FindStaticField(cls, "longStaticField", &longField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field charField; + if (ANI_OK != env->Class_FindStaticField(cls, "charStaticField", &charField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_int intValue; + if (ANI_OK != env->Class_GetStaticField_Int(cls, intField, &intValue)) { + std::cerr << "Set StaticField Fail " << className << "'" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Class_GetStaticField_Int result: %{public}d", intValue); + ani_short shortValue; + if (ANI_OK != env->Class_GetStaticField_Short(cls, shortField, &shortValue)) { + std::cerr << "Set StaticField Fail " << className << "'" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Class_GetStaticField_Short result: %{public}h", shortValue); + ani_long longValue; + if (ANI_OK != env->Class_GetStaticField_Long(cls, longField, &longValue)) { + std::cerr << "Set StaticField Fail " << className << "'" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Class_GetStaticField_Long result: %{public}l", longValue); + ani_char charValue; + if (ANI_OK != env->Class_GetStaticField_Char(cls, charField, &charValue)) { + std::cerr << "Set StaticField Fail " << className << "'" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Class_GetStaticField_Char result: %{public}c", charValue); + return; +} + +static void GetStaticFields2(ani_env *env, ani_object obj) +{ + std::cout << "Get Field in native" << std::endl; + const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_static_field byteField; + if (ANI_OK != env->Class_FindStaticField(cls, "byteStaticField", &byteField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field doubleField; + if (ANI_OK != env->Class_FindStaticField(cls, "doubleStaticField", &doubleField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field floatField; + if (ANI_OK != env->Class_FindStaticField(cls, "floatStaticField", &floatField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_static_field boolField; + if (ANI_OK != env->Class_FindStaticField(cls, "boolStaticField", &boolField)) { + std::cerr << "Get StaticField Fail" << className << "'" << std::endl; + return; + } + ani_byte byteValue; + if (ANI_OK != env->Class_GetStaticField_Byte(cls, byteField, &byteValue)) { + std::cerr << "Set StaticField Fail " << className << "'" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Class_GetStaticField_Byte result: %{public}c", byteValue); + ani_double doubleValue; + if (ANI_OK != env->Class_GetStaticField_Double(cls, doubleField, &doubleValue)) { + std::cerr << "Set StaticField Fail " << className << "'" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Class_GetStaticField_Double result: %{public}lf", doubleValue); + ani_boolean boolValue; + if (ANI_OK != env->Class_GetStaticField_Boolean(cls, boolField, &boolValue)) { + std::cerr << "Set StaticField Fail " << className << "'" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Class_GetStaticField_Boolean result: %{public}d", static_cast(boolValue)); + ani_float floatValue; + if (ANI_OK != env->Class_GetStaticField_Float(cls, floatField, &floatValue)) { + std::cerr << "Set StaticField Fail " << className << "'" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Class_GetStaticField_Boolean result: %{public}f", floatValue); + return; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_array.cpp b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_array.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ebd2e63d52917a91170d97630db2d721b359a68b --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_array.cpp @@ -0,0 +1,121 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "ani/ani.h" +#include "hilog/log.h" +#include + +#undef LOG_DOMAIN +#undef LOG_TAG +#define LOG_DOMAIN 0x3200 // 全局domain宏,标识业务领域 +#define LOG_TAG "MY_TAG" // 全局tag宏,标识模块日志tag +// Array Operations +static void ProcessArray(ani_env *env, ani_object object, ani_array_double doubleArray) +{ + ani_size length; + if (ANI_OK != env->Array_GetLength(doubleArray, &length)) { + std::cerr << "Array_GetLength FAILED" << std::endl; + return; + } + OH_LOG_ERROR(LOG_APP, "testTag Array_GetLength result: %{public}d", length); + ani_array_double doubleValue; + if (ANI_OK != env->Array_New_Double(length, &doubleValue)) { + std::cerr << "Array_New_Double FAILED" << std::endl; + return; + } + for (ani_int i = 0; i < length; ++i) { + OH_LOG_ERROR(LOG_APP, "testTag Array_New_Double result: %{public}f", doubleValue[i]); + } + + ani_array_int intValue; + if (ANI_OK != env->Array_New_Int(length, &intValue)) { + std::cerr << "Array_New_Int FAILED" << std::endl; + return; + } + for (ani_int i = 0; i < length; ++i) { + OH_LOG_ERROR(LOG_APP, "testTag Array_New_Int result: %{public}d", intValue[i]); + } + + ani_array_short shortValue; + if (ANI_OK != env->Array_New_Short(length, &shortValue)) { + std::cerr << "Array_New_Short FAILED" << std::endl; + return; + } + for (ani_int i = 0; i < length; ++i) { + OH_LOG_ERROR(LOG_APP, "testTag Array_New_Short result: %{public}d", shortValue[i]); + } + + ani_array_char charValue; + if (ANI_OK != env->Array_New_Char(length, &charValue)) { + std::cerr << "Array_New_Char FAILED" << std::endl; + return; + } + std::cout << "Array int Content:" << doubleArray << std::endl; +} + +static void ProcessArray2(ani_env *env, ani_object object, ani_array_double doubleArray) +{ + ani_size length; + if (ANI_OK != env->Array_GetLength(doubleArray, &length)) { + std::cerr << "Array_GetLength FAILED" << std::endl; + return; + } + ani_array_char charValue; + if (ANI_OK != env->Array_New_Char(length, &charValue)) { + std::cerr << "Array_New_Char FAILED" << std::endl; + return; + } + for (ani_int i = 0; i < length; ++i) { + OH_LOG_ERROR(LOG_APP, "testTag Array_New_Char result: %{public}c", charValue[i]); + } + + ani_array_boolean boolValue; + if (ANI_OK != env->Array_New_Boolean(length, &boolValue)) { + std::cerr << "Array_New_Boolean FAILED" << std::endl; + return; + } + for (ani_int i = 0; i < length; ++i) { + OH_LOG_ERROR(LOG_APP, "testTag Array_New_Boolean result: %{public}d", boolValue[i]); + } + + ani_array_long longValue; + if (ANI_OK != env->Array_New_Long(length, &longValue)) { + std::cerr << "Array_New_Long FAILED" << std::endl; + return; + } + for (ani_int i = 0; i < length; ++i) { + OH_LOG_ERROR(LOG_APP, "testTag Array_New_Long result: %{public}ld", longValue[i]); + } + + ani_array_float floatValue; + if (ANI_OK != env->Array_New_Float(length, &floatValue)) { + std::cerr << "Array_New_Float FAILED" << std::endl; + return; + } + for (ani_int i = 0; i < length; ++i) { + OH_LOG_ERROR(LOG_APP, "testTag Array_New_Float result: %{public}f", floatValue[i]); + } + std::cout << "Array int Content:" << doubleArray << std::endl; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_calling_methods.cpp b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_calling_methods.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bdbff7eec3a405acfd3fd7890f53891e5dc27733 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_calling_methods.cpp @@ -0,0 +1,335 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "ani/ani.h" +#include + +// Calling Instance Methods +static void NativeVoidFunc(ani_env *env, ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedVoidFunc", ":V", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return; + } + std::cout << "Print in Native Func" << std::endl; + if (ANI_OK != env->Object_CallMethod_Void(obj, managedMethod)) { + std::cerr << "Object_CallMethod_Void Fail" << std::endl; + return; + } +} + +static ani_boolean NativeBoolFunc(ani_env *env, ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return false; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedBoolFunc", ":Z", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return false; + } + std::cout << "Print in Native Func" << std::endl; + ani_boolean boolValue; + if (ANI_OK != env->Object_CallMethod_Boolean(obj, managedMethod, &boolValue)) { + std::cerr << "Object_CallMethod_Boolean Fail" << std::endl; + return false; + } + return boolValue; +} + +static ani_int NativeIntFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return 0; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedIntFunc", ":I", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return 0; + } + std::cout << "Print in Native Func" << std::endl; + ani_int intValue; + if (ANI_OK != env->Object_CallMethod_Int(obj, managedMethod, &intValue)) { + std::cerr << "Object_CallMethod_Int Fail" << std::endl; + return 0; + } + return intValue; +} + + +static ani_short NativeShortFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return 0; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedShortFunc", ":S", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return 0; + } + std::cout << "Print in Native Func" << std::endl; + ani_short shortValue; + if (ANI_OK != env->Object_CallMethod_Short(obj, managedMethod, &shortValue)) { + std::cerr << "Object_CallMethod_Short Fail" << std::endl; + return 0; + } + return shortValue; +} + +static ani_long NativeLongFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return 0; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedLongFunc", ":J", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return 0; + } + std::cout << "Print in Native Func" << std::endl; + ani_long longValue; + if (ANI_OK != env->Object_CallMethod_Long(obj, managedMethod, &longValue)) { + std::cerr << "Object_CallMethod_Long Fail" << std::endl; + return 0; + } + return longValue; +} + +static ani_double NativeDoubleFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return 0; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedDoubleFunc", ":D", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return 0; + } + std::cout << "Print in Native Func" << std::endl; + ani_double doubleValue; + if (ANI_OK != env->Object_CallMethod_Double(obj, managedMethod, &doubleValue)) { + std::cerr << "Object_CallMethod_Double Fail" << std::endl; + return 0; + } + return doubleValue; +} + +static ani_float NativeFloatFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return 0.0; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedFloatFunc", ":F", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return 0.0; + } + std::cout << "Print in Native Func" << std::endl; + ani_float floatValue; + if (ANI_OK != env->Object_CallMethod_Float(obj, managedMethod, &floatValue)) { + std::cerr << "Object_CallMethod_Float Fail" << std::endl; + return 0.0; + } + return floatValue; +} + +static ani_char NativeCharFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return 0; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedCharFunc", ":C", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return 0; + } + std::cout << "Print in Native Func" << std::endl; + ani_char charValue; + if (ANI_OK != env->Object_CallMethod_Char(obj, managedMethod, &charValue)) { + std::cerr << "Object_CallMethod_Char Fail" << std::endl; + return 0; + } + return charValue; +} + +static ani_byte NativeByteFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return 0; + } + ani_method managedMethod; + if (ANI_OK != env->Class_FindMethod(cls, "ManagedByteFunc", ":B", &managedMethod)) { + std::cerr << "Class_FindMethod Fail" << std::endl; + return 0; + } + std::cout << "Print in Native Func" << std::endl; + ani_byte byteValue; + if (ANI_OK != env->Object_CallMethod_Byte(obj, managedMethod, &byteValue)) { + std::cerr << "Object_CallMethod_Byte Fail" << std::endl; + return 0; + } + return byteValue; +} + +static void NativeByNameFunc(ani_env *env, ani_object obj) +{ + std::cout << "Print in Native Func" << std::endl; + if (ANI_OK != env->Object_CallMethodByName_Void(obj, "ManagedByNameVoidFunc", ":V")) { + std::cerr << "Object_CallMethodByName_Void Fail" << std::endl; + return; + } +} + +static ani_double NativeByNameDoubleFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_double doubleValue; + if (ANI_OK != env->Object_CallMethodByName_Double(obj, "ManagedByNameDoubleFunc", ":D", &doubleValue)) { + std::cerr << "Object_CallMethodByName_Double Fail" << std::endl; + return 0.0; + } + return doubleValue; +} + +static ani_boolean NativeByNameBoolFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_boolean boolValue; + if (ANI_OK != env->Object_CallMethodByName_Boolean(obj, "ManagedByNameBoolFunc", ":Z", &boolValue)) { + std::cerr << "Object_CallMethodByName_Double Fail" << std::endl; + return false; + } + return boolValue; +} + +static ani_int NativeByNameIntFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_int intValue; + if (ANI_OK != env->Object_CallMethodByName_Int(obj, "ManagedByNameIntFunc", ":I", &intValue)) { + std::cerr << "Object_CallMethodByName_Int Fail" << std::endl; + return false; + } + return intValue; +} + +static ani_short NativeByNameShortFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_short shortValue; + if (ANI_OK != env->Object_CallMethodByName_Short(obj, "ManagedByNameShortFunc", ":S", &shortValue)) { + std::cerr << "Object_CallMethodByName_Short Fail" << std::endl; + return 0; + } + return shortValue; +} + +static ani_long NativeByNameLongFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_long longValue; + if (ANI_OK != env->Object_CallMethodByName_Long(obj, "ManagedByNameLongFunc", ":J", &longValue)) { + std::cerr << "Object_CallMethodByName_Long Fail" << std::endl; + return 0; + } + return longValue; +} + +static ani_char NativeByNameCharFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_char charValue; + if (ANI_OK != env->Object_CallMethodByName_Char(obj, "ManagedByNameCharFunc", ":C", &charValue)) { + std::cerr << "Object_CallMethodByName_Char Fail" << std::endl; + return '0'; + } + return charValue; +} + +static ani_float NativeByNameFloatFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_float floatValue; + if (ANI_OK != env->Object_CallMethodByName_Float(obj, "ManagedByNameFloatFunc", ":F", &floatValue)) { + std::cerr << "Object_CallMethodByName_Float Fail" << std::endl; + return 0.0; + } + return floatValue; +} + +static ani_byte NativeByNameByteFunc([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + ani_byte byteValue; + if (ANI_OK != env->Object_CallMethodByName_Byte(obj, "ManagedByNameByteFunc", ":B", &byteValue)) { + std::cerr << "Object_CallMethodByName_Byte Fail" << std::endl; + return 0x0; + } + return byteValue; +} + +// todo Calling Static Methods +static void NativeStaticFunc(ani_env *env, ani_object obj) +{ + static const char *className = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls; + if (ANI_OK != env->FindClass(className, &cls)) { + std::cerr << "Not found '" << className << "'" << std::endl; + return; + } + ani_static_method managedMethod; + if (ANI_OK != env->Class_FindStaticMethod(cls, "ManagedStaticFunc", ":V", &managedMethod)) { + std::cerr << "Class_FindStaticMethod Fail" << std::endl; + return; + } + std::cout << "Print in ManagedStaticFunc " << std::endl; + if (ANI_OK != env->Class_CallStaticMethod_Void(cls, managedMethod, ":V")) { + std::cerr << "Class_CallStaticMethod_Void Fail" << std::endl; + return; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_init.cpp b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_init.cpp new file mode 100644 index 0000000000000000000000000000000000000000..529d5290c9ff94009f30c382c46ed1810da7296a --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_init.cpp @@ -0,0 +1,114 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "ani/ani.h" +#include "ani_accessing_fields.cpp" +#include "ani_array.cpp" +#include "ani_calling_methods.cpp" +#include "ani_object.cpp" +#include "ani_references.cpp" +#include "ani_string.cpp" +#include "ani_versionInfo.cpp" +#include +#include +#include +#include "hilog/log.h" + +#undef LOG_DOMAIN +#undef LOG_TAG +#define LOG_DOMAIN 0x3200 // 全局domain宏,标识业务领域 +#define LOG_TAG "MY_TAG" // 全局tag宏,标识模块日志tag + +auto Methods() +{ + std::array method = { + ani_native_function{"UpdateFields", ":V", reinterpret_cast(UpdateFields)}, + ani_native_function{"UpdateFields2", ":V", reinterpret_cast(UpdateFields2)}, + ani_native_function{"UpdateIntFields", ":I", reinterpret_cast(UpdateIntFields)}, + ani_native_function{"UpdateDoubleFields", ":D", reinterpret_cast(UpdateDoubleFields)}, + ani_native_function{"UpdateBoolFields", ":Z", reinterpret_cast(UpdateBoolFields)}, + ani_native_function{"UpdateShortFields", ":S", reinterpret_cast(UpdateShortFields)}, + ani_native_function{"UpdateLongFields", ":J", reinterpret_cast(UpdateLongFields)}, + ani_native_function{"UpdateCharFields", ":C", reinterpret_cast(UpdateCharFields)}, + ani_native_function{"UpdateFloatFields", ":F", reinterpret_cast(UpdateFloatFields)}, + ani_native_function{"UpdateByteFields", ":B", reinterpret_cast(UpdateByteFields)}, + ani_native_function{"UpdateByNameFields", ":V", reinterpret_cast(UpdateByNameFields)}, + ani_native_function{"UpdateByNameFields2", ":V", reinterpret_cast(UpdateByNameFields2)}, + ani_native_function{"UpdateStaticFields", ":V", reinterpret_cast(UpdateStaticFields)}, + ani_native_function{"UpdateStaticFields2", ":V", reinterpret_cast(UpdateStaticFields2)}, + ani_native_function{"ProcessArray", "[D:V", reinterpret_cast(ProcessArray)}, + ani_native_function{"ProcessArray2", "[D:V", reinterpret_cast(ProcessArray2)}, + ani_native_function{"NativeVoidFunc", ":V", reinterpret_cast(NativeVoidFunc)}, + ani_native_function{"NativeBoolFunc", ":Z", reinterpret_cast(NativeBoolFunc)}, + ani_native_function{"NativeIntFunc", ":I", reinterpret_cast(NativeIntFunc)}, + ani_native_function{"NativeLongFunc", ":J", reinterpret_cast(NativeLongFunc)}, + ani_native_function{"NativeDoubleFunc", ":D", reinterpret_cast(NativeDoubleFunc)}, + ani_native_function{"NativeFloatFunc", ":F", reinterpret_cast(NativeFloatFunc)}, + ani_native_function{"NativeCharFunc", ":C", reinterpret_cast(NativeCharFunc)}, + ani_native_function{"NativeByteFunc", ":B", reinterpret_cast(NativeByteFunc)}, + ani_native_function{"NativeStaticFunc", ":V", reinterpret_cast(NativeStaticFunc)}, + ani_native_function{"GetVersionInfo", ":I", reinterpret_cast(GetVersionInfo)}, + ani_native_function{"Global_Local_References", ":V", reinterpret_cast(Global_Local_References)}, + ani_native_function{"Weak_Global_References", ":V", reinterpret_cast(Weak_Global_References)}, + ani_native_function{"String_Operations", ":Lstd/core/String;", reinterpret_cast(String_Operations)}, + ani_native_function{"NativeByNameFunc", ":V", reinterpret_cast(NativeByNameFunc)}, + ani_native_function{"NativeByNameDoubleFunc", ":D", reinterpret_cast(NativeByNameDoubleFunc)}, + ani_native_function{"NativeByNameBoolFunc", ":Z", reinterpret_cast(NativeByNameBoolFunc)}, + ani_native_function{"NativeByNameIntFunc", ":I", reinterpret_cast(NativeByNameIntFunc)}, + ani_native_function{"NativeByNameShortFunc", ":S", reinterpret_cast(NativeByNameShortFunc)}, + ani_native_function{"NativeByNameLongFunc", ":J", reinterpret_cast(NativeByNameLongFunc)}, + ani_native_function{"NativeByNameCharFunc", ":C", reinterpret_cast(NativeByNameCharFunc)}, + ani_native_function{"NativeByNameFloatFunc", ":F", reinterpret_cast(NativeByNameFloatFunc)}, + ani_native_function{"NativeByNameByteFunc", ":B", reinterpret_cast(NativeByNameByteFunc)}, + ani_native_function{"HandleDoubleData", "D:D", reinterpret_cast(HandleDoubleData)}, + }; + return method; +} + +ANI_EXPORT ani_status ANI_Constructor(ani_vm *vm, uint32_t *result) +{ + ani_env *env; + if (ANI_OK != vm->GetEnv(ANI_VERSION_1, &env)) { + std::cerr << "Unsupported ANI_VERSION_1" << std::endl; + return ANI_OUT_OF_REF; + } + OH_LOG_ERROR(LOG_APP, "testTag get vm success start"); + if (ANI_OK != env->GetVM(&vm)) { + std::cerr << "GetVM Fail" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag get vm success end"); + static const char *clsName = "Lentry/src/main/ets/entryability/EntryAbility/Calc;"; + ani_class cls{}; + if (ANI_OK != env->FindClass(clsName, &cls)) { + std::cerr << "Not found '" << clsName << "'" << std::endl; + return ANI_INVALID_ARGS; + } + std::array method = Methods(); + if (ANI_OK != env->Class_BindNativeMethods(cls, method.data(), method.size())) { + return ANI_INVALID_TYPE; + }; + *result = ANI_VERSION_1; + return ANI_OK; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_object.cpp b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_object.cpp new file mode 100644 index 0000000000000000000000000000000000000000..14624ffa900c231e887e29f6c8bf7e3ac8633d6d --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_object.cpp @@ -0,0 +1,63 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "ani/ani.h" +#include "hilog/log.h" +#include + +#undef LOG_DOMAIN +#undef LOG_TAG +#define LOG_DOMAIN 0x3200 // 全局domain宏,标识业务领域 +#define LOG_TAG "MY_TAG" // 全局tag宏,标识模块日志tag + +static ani_double HandleDoubleData([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_fn_object fnObj, + ani_double val_double1) +{ + ani_class cls; + if (ANI_OK != env->FindClass("Lstd/core/Double;", &cls)) { + std::cerr << "Not found " << std::endl; + return 0.0; + } + ani_method ctor; + if (ANI_OK != env->Class_FindMethod(cls, "", "D:V", &ctor)) { + std::cerr << "Not found " << std::endl; + } + ani_object rs; + if (ANI_OK != env->Object_New(cls, ctor, &rs, val_double1)) { + std::cerr << "Object_New fail " << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Object_New success"); + ani_type result; + if (ANI_OK != env->Object_GetType(rs, &result)) { + std::cerr << "Object_GetType fail " << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Object_GetType success"); + ani_boolean boolresult; + if (ANI_OK != env->Object_InstanceOf(fnObj, cls, &boolresult)) { + std::cerr << "Object_InstanceOf fail " << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag Object_InstanceOf result: %{public}d", boolresult); + return val_double1; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_references.cpp b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_references.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6807640b0f32f5f6cd74eab4dd2fc3b78b89a891 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_references.cpp @@ -0,0 +1,79 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "ani/ani.h" +#include "hilog/log.h" +#include +#undef LOG_DOMAIN +#undef LOG_TAG +#define LOG_DOMAIN 0x3200 // 全局domain宏,标识业务领域 +#define LOG_TAG "MY_TAG" // 全局tag宏,标识模块日志tag + +//// Global and Local References +static void Global_Local_References([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object object) +{ + ani_ref ref; + ani_ref result; + if (ANI_OK != env->GlobalReference_Create(ref, &result)) { + std::cerr << "GlobalReference_Create FAILED" << std::endl; + return; + } + OH_LOG_ERROR(LOG_APP, "testTag GlobalReference_Create success"); + ani_boolean isNull; + if (ANI_OK != env->Reference_IsNull(result, &isNull)) { + std::cerr << "Reference_IsNull" << std::endl; + return; + } + ani_ref ref0 = nullptr; + ani_ref ref1 = nullptr; + ani_boolean boolresult; + if (ANI_OK != env->Reference_StrictEquals(ref0, ref1, &boolresult)) { + std::cerr << "Reference_StrictEquals" << std::endl; + return; + } + + if (ANI_OK != env->GlobalReference_Delete(result)) { + std::cerr << "Reference_IsNull" << std::endl; + return; + } + OH_LOG_ERROR(LOG_APP, "testTag GlobalReference_Delete success"); +} + +// Weak Global References; +static void Weak_Global_References([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object object) +{ + ani_ref ref; + ani_wref result; + if (ANI_OK != env->WeakReference_Create(ref, &result)) { + std::cerr << "WeakReference_Create FAILED" << std::endl; + return; + } + OH_LOG_ERROR(LOG_APP, "testTag WeakReference_Create success"); + if (ANI_OK != env->WeakReference_Delete(result)) { + std::cerr << "WeakReference_Delete FAILED" << std::endl; + return; + } + OH_LOG_ERROR(LOG_APP, "testTag WeakReference_Delete success"); +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_string.cpp b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_string.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5a97a096a35628a7bf44ea1e5dca6902a150b085 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_string.cpp @@ -0,0 +1,49 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "ani/ani.h" +#include "hilog/log.h" +#include + +#undef LOG_DOMAIN +#undef LOG_TAG +#define LOG_DOMAIN 0x3200 // 全局domain宏,标识业务领域 +#define LOG_TAG "MY_TAG" // 全局tag宏,标识模块日志tag +// String Operations + +static ani_string String_Operations(ani_env *env, [[maybe_unused]] ani_object obj) +{ + std::string msg = "testTag this message in cpp"; + ani_string ani_str; + if (ANI_OK != env->String_NewUTF8(msg.c_str(), msg.size(), &ani_str)) { + std::cerr << "String_NewUTF8 fail" << std::endl; + } + ani_size strSize; + if (ANI_OK != env->String_GetUTF8Size(ani_str, &strSize)) { + std::cerr << "String_NewUTF8 fail" << std::endl; + } + OH_LOG_ERROR(LOG_APP, "testTag String_GetUTF8Size result: %{public}ld", strSize); + return ani_str; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_versionInfo.cpp b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_versionInfo.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e2fdf19277d48ac223d3f9ce8d8b4d35bf75e9dd --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/cpp/ani_versionInfo.cpp @@ -0,0 +1,39 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "ani/ani.h" +#include +#include + +// Version Information +static uint32_t GetVersionInfo([[maybe_unused]] ani_env *env, [[maybe_unused]] ani_object obj) +{ + uint32_t version; + if (ANI_OK != env->GetVersion(&version)) { + std::cerr << "GetVersion Fail" << std::endl; + return 0; + } + return version; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/ets/entryability/EntryAbility.ets b/code/ArkTS1.2/ANISample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..1c9dfb7a3b2dea0797cc8550a296cbab68159d19 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,338 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import hilog from '@ohos.hilog' + +class Calc { + native UpdateFields(): void; + + native UpdateFields2(): void; + + byteField: byte; + charField: char; + boolField: boolean; + floatField: float; + doubleField: double; + shortField: short; + intField: int; + longField: long; + + native UpdateStaticFields(): void; + + native UpdateStaticFields2(): void; + + static intStaticField: int; + static shortStaticField: short; + static longStaticField: long; + static charStaticField: char; + static doubleStaticField: double; + static floatStaticField: float; + static boolStaticField: boolean; + static byteStaticField: byte; + + constructor(a: int, b: double, c: boolean, f: long) { + this.getIntField = a; + this.getDoubleField = b; + this.getBoolField = c; + this.getLongField = f; + } + + getDoubleField: double; + getIntField: int; + getBoolField: boolean; + getShortField: short = 15; + getLongField: long; + getCharField: char = 'D'; + getFloatField: float = 10.23; + getByteField: byte = 0x1; + + native UpdateIntFields(): int; + + native UpdateDoubleFields(): double; + + native UpdateBoolFields(): boolean; + + native UpdateShortFields(): short; + + native UpdateLongFields(): long; + + native UpdateCharFields(): char; + + native UpdateFloatFields(): float; + + native UpdateByteFields(): byte; + + fieldByName_Byte: byte; + fieldByName_Double: double; + fieldByName_Short: short; + fieldByName_Float: float; + fieldByName_Int: int; + fieldByName_Long: long; + fieldByName_Char: char; + fieldByName_Bool: boolean; + + native UpdateByNameFields(): void; + + native UpdateByNameFields2(): void; + + native GetVersionInfo(): int; + + native NativeVoidFunc(): void; + + ManagedVoidFunc(): void { + hilog.error(0x0000, 'testTag', "Print in ManagedVoidFunc"); + } + + native NativeIntFunc(): int; + + ManagedIntFunc(): int { + hilog.error(0x0000, 'testTag', "Print in ManagedIntFunc"); + return 10; + } + + native NativeBoolFunc(): boolean; + + ManagedBoolFunc(): boolean { + hilog.error(0x0000, 'testTag', "Print in ManagedBoolFunc"); + return true; + } + + native NativeShortFunc(): short; + + ManagedShortFunc(): short { + hilog.error(0x0000, 'testTag', "Print in ManagedShortFunc"); + return 22; + } + + native NativeLongFunc(): long; + + ManagedLongFunc(): long { + hilog.error(0x0000, 'testTag', "Print in ManagedLongFunc"); + return 12365478965; + } + + native NativeDoubleFunc(): double; + + ManagedDoubleFunc(): double { + hilog.error(0x0000, 'testTag', "Print in ManagedDoubleFunc"); + return 12.35; + } + + native NativeCharFunc(): char; + + ManagedCharFunc(): char { + hilog.error(0x0000, 'testTag', "Print in ManagedCharFunc"); + return 'I'; + } + + native NativeFloatFunc(): float; + + ManagedFloatFunc(): float { + hilog.error(0x0000, 'testTag', "Print in ManagedFloatFunc"); + return 45.32; + } + + native NativeByteFunc(): byte; + + ManagedByteFunc(): byte { + hilog.error(0x0000, 'testTag', "Print in ManagedByteFunc"); + return 0x1; + } + + native NativeStaticFunc(): void; + + static ManagedStaticFunc(): void { + hilog.error(0x0000, 'testTag', "Print in ManagedStaticFunc"); + } + + native NativeByNameFunc(): void; + + ManagedByNameVoidFunc(): void { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameVoidFunc"); + } + + native NativeByNameDoubleFunc(): double; + + ManagedByNameDoubleFunc(): double { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameDoubleFunc"); + return 3.33; + } + + native NativeByNameBoolFunc(): boolean; + + ManagedByNameBoolFunc(): boolean { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameBoolFunc"); + return true; + } + + native NativeByNameIntFunc(): int; + + ManagedByNameIntFunc(): int { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameIntFunc"); + return 10; + } + + native NativeByNameShortFunc(): short; + + ManagedByNameShortFunc(): short { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameShortFunc"); + return 1456; + } + + native NativeByNameLongFunc(): long; + + ManagedByNameLongFunc(): long { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameLongFunc"); + return 12345679852; + } + + native NativeByNameCharFunc(): char; + + ManagedByNameCharFunc(): char { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameCharFunc"); + return 'K'; + } + + native NativeByNameFloatFunc(): float; + + ManagedByNameFloatFunc(): float { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameFloatFunc"); + return 15.655; + } + + native NativeByNameByteFunc(): byte; + + ManagedByNameByteFunc(): byte { + hilog.error(0x0000, 'testTag', "Print in ManagedByNameByteFunc"); + return 0x3; + } + + native Global_Local_References(): void; + + native Weak_Global_References(): void; + + native VMInterface(): void; + + native String_Operations(): string; + + native HandleDoubleData(val1: double): double + + native ProcessArray(a: double[]): void; + + native ProcessArray2(a: double[]): void; +} + +class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onCreate'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onWindowStageCreate'); + try { + loadLibrary("entry") + } catch (e: Error) { + hilog.error(0x0000, 'testTag', 'loadFailed', e.message); + } + hilog.error(0x0000, 'testTag', 'AfterLoading the library'); + let cls = new Calc(20, 1.23, true, 14785236951); + cls.UpdateFields(); + cls.UpdateFields2(); + hilog.error(0x0000, 'testTag', 'UpdateField result byteField ' + cls.byteField); + hilog.error(0x0000, 'testTag', 'UpdateField result charField ' + cls.charField); + hilog.error(0x0000, 'testTag', 'UpdateField result doubleField ' + cls.doubleField); + hilog.error(0x0000, 'testTag', 'UpdateField result boolField ' + cls.boolField); + hilog.error(0x0000, 'testTag', 'UpdateField result floatField ' + cls.floatField); + hilog.error(0x0000, 'testTag', 'UpdateField result shortField ' + cls.shortField); + hilog.error(0x0000, 'testTag', 'UpdateField result intField : ' + cls.intField); + hilog.error(0x0000, 'testTag', 'UpdateField result longField ' + cls.longField); + cls.UpdateStaticFields(); + cls.UpdateStaticFields2(); + hilog.error(0x0000, 'testTag', 'UpdateStaticFields intStaticField : ' + Calc.intStaticField); + hilog.error(0x0000, 'testTag', 'UpdateStaticFields shortStaticField : ' + Calc.shortStaticField); + hilog.error(0x0000, 'testTag', 'UpdateStaticFields longStaticField : ' + Calc.longStaticField); + hilog.error(0x0000, 'testTag', 'UpdateStaticFields charStaticField : ' + Calc.charStaticField); + hilog.error(0x0000, 'testTag', 'UpdateStaticFields intStaticField : ' + Calc.doubleStaticField); + hilog.error(0x0000, 'testTag', 'UpdateStaticFields shortStaticField : ' + Calc.floatStaticField); + hilog.error(0x0000, 'testTag', 'UpdateStaticFields longStaticField : ' + Calc.boolStaticField); + hilog.error(0x0000, 'testTag', 'UpdateStaticFields charStaticField : ' + Calc.byteStaticField); + hilog.error(0x0000, 'testTag', 'Get Ets UpdateIntFields result : ' + cls.UpdateIntFields()); + hilog.error(0x0000, 'testTag', 'Get Ets UpdateDoubleFields result : ' + cls.UpdateDoubleFields()); + hilog.error(0x0000, 'testTag', 'Get Ets UpdateBoolFields result : ' + cls.UpdateBoolFields()); + hilog.error(0x0000, 'testTag', 'Get Ets UpdateShortFields result : ' + cls.UpdateShortFields()); + hilog.error(0x0000, 'testTag', 'Get Ets UpdateLongFields result : ' + cls.UpdateLongFields()); + hilog.error(0x0000, 'testTag', 'Get Ets UpdateCharFields result : ' + cls.UpdateCharFields()); + hilog.error(0x0000, 'testTag', 'Get Ets UpdateFloatFields result : ' + cls.UpdateFloatFields()); + hilog.error(0x0000, 'testTag', 'Get Ets UpdateByteFields result : ' + cls.UpdateByteFields()); + cls.NativeVoidFunc(); + cls.NativeBoolFunc(); + cls.NativeIntFunc(); + cls.NativeLongFunc(); + cls.NativeDoubleFunc(); + cls.NativeFloatFunc(); + cls.NativeCharFunc(); + cls.NativeByteFunc(); + cls.NativeStaticFunc(); + cls.UpdateByNameFields(); + cls.UpdateByNameFields2(); + hilog.error(0x0000, 'testTag', 'UpdateByNameFields result fieldByName_Bytes ' + cls.fieldByName_Byte); + hilog.error(0x0000, 'testTag', 'UpdateByNameFields result fieldByName_Double ' + cls.fieldByName_Double); + hilog.error(0x0000, 'testTag', 'UpdateByNameFields result fieldByName_Short ' + cls.fieldByName_Short); + hilog.error(0x0000, 'testTag', 'UpdateByNameFields result fieldByName_Bool ' + cls.fieldByName_Bool); + hilog.error(0x0000, 'testTag', 'UpdateByNameFields result fieldByName_Float ' + cls.fieldByName_Float); + hilog.error(0x0000, 'testTag', 'UpdateByNameFields result fieldByName_Int ' + cls.fieldByName_Int); + hilog.error(0x0000, 'testTag', 'UpdateByNameFields result fieldByName_Long ' + cls.fieldByName_Long); + hilog.error(0x0000, 'testTag', 'UpdateByNameFields result fieldByName_Char ' + cls.fieldByName_Char); + hilog.error(0x0000, 'testTag', 'GetVersionInfo result : ' + cls.GetVersionInfo()); + cls.Global_Local_References(); + cls.Weak_Global_References(); + cls.NativeByNameFunc(); + hilog.error(0x0000, 'testTag', 'NativeByNameDoubleFunc() result ' + cls.NativeByNameDoubleFunc()); + hilog.error(0x0000, 'testTag', 'NativeByNameBoolFunc() result ' + cls.NativeByNameBoolFunc()); + hilog.error(0x0000, 'testTag', 'NativeByNameIntFunc() result ' + cls.NativeByNameIntFunc()); + hilog.error(0x0000, 'testTag', 'NativeByNameShortFunc() result ' + cls.NativeByNameShortFunc()); + hilog.error(0x0000, 'testTag', 'NativeByNameLongFunc() result ' + cls.NativeByNameLongFunc()); + hilog.error(0x0000, 'testTag', 'NativeByNameCharFunc() result ' + cls.NativeByNameCharFunc()); + hilog.error(0x0000, 'testTag', 'NativeByNameFloatFunc() result ' + cls.NativeByNameFloatFunc()); + hilog.error(0x0000, 'testTag', 'NativeByNameByteFunc() result ' + cls.NativeByNameByteFunc()); + hilog.error(0x0000, 'testTag', 'HandleDoubleData() result ' + cls.HandleDoubleData(15)); + hilog.error(0x0000, 'testTag', 'String_Operations result : ' + cls.String_Operations()) + let s: double[] = [5, 15, 20]; + cls.ProcessArray(s); + cls.ProcessArray2(s); + + try { + windowStage.loadContent('pages/Index', (err: Error): void => { + hilog.info(0x0000, 'testTag', 'loadContent entering'); + }); + } catch (e: Error) { + hilog.info(0x0000, 'testTag', 'loadContent catch error:-----------' + e.message); + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/ets/pages/Index.ets b/code/ArkTS1.2/ANISample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..aa9a598eee61c2ae46ea198c7cfc523c484cd0db --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,59 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { Text } from "@koalaui.arkts-arkui.Text" +import { Column } from "@koalaui.arkts-arkui.Column" +import { Button } from "@koalaui.arkts-arkui.Button" +import { Component } from "@koalaui.arkts-arkui.Common" +import { UserView, UserViewBuilder } from "@koalaui.arkts-arkui.UserView" +import { __memo_context_type, __memo_id_type } from "@ohos.arkui.StateManagement.runtime" +import hilog from '@ohos.hilog' + +@Component +struct MyStateSample { + build() { + Column() { + Text("Hello World!") + Button('change') + } + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder(): UserViewBuilder { + hilog.info(0x0000, 'testTag', 'ComExampleTrivialApplication'); + let wrapper = (__memo_context: __memo_context_type, __memo_id: __memo_id_type) => { + hilog.info(0x0000, 'testTag', 'MyStateSample.instantiateImpl'); + MyStateSample.instantiateImpl( + undefined, + (): MyStateSample => new MyStateSample(), + {} as __Options_MyStateSample, + undefined + ) + } + hilog.info(0x0000, 'testTag', 'getBuilder.end'); + return wrapper + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/module.json5 b/code/ArkTS1.2/ANISample/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..de78b5cae3b2ba99788048311e5d0cd34d075039 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/module.json5 @@ -0,0 +1,38 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/color.json b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..3c712962da3c2751c2b9ddb53559afcbd2b54a02 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/float.json b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/string.json b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..40984558a53e71c1c1356b7fdcab4db94d4de078 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "aniTest" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/background.png b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f Binary files /dev/null and b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/background.png differ diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/foreground.png b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..97014d3e10e5ff511409c378cd4255713aecd85f Binary files /dev/null and b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/foreground.png differ diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/layered_image.json b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000000000000000000000000000000000000..fb49920440fb4d246c82f9ada275e26123a2136a --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:background", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/startIcon.png b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/media/startIcon.png differ diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/profile/backup_config.json b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000000000000000000000000000000000..78f40ae7c494d71e2482278f359ec790ca73471a --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/base/profile/main_pages.json b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..1898d94f58d6128ab712be2c68acc7c98e9ab9ce --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/ArkTS1.2/ANISample/entry/src/main/resources/dark/element/color.json b/code/ArkTS1.2/ANISample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..79b11c2747aec33e710fd3a7b2b3c94dd9965499 --- /dev/null +++ b/code/ArkTS1.2/ANISample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ANISample/hvigor/hvigor-config.json5 b/code/ArkTS1.2/ANISample/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..85e8d4b2175fc4747650344f025e7d145bc3d361 --- /dev/null +++ b/code/ArkTS1.2/ANISample/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.1.0", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/ArkTS1.2/ANISample/hvigorfile.ts b/code/ArkTS1.2/ANISample/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3cb9f1a87a81687554a76283af8df27d8bda775 --- /dev/null +++ b/code/ArkTS1.2/ANISample/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ANISample/oh-package.json5 b/code/ArkTS1.2/ANISample/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..7f512c9632708e85a7ea34e739c01b0b8f1ad92e --- /dev/null +++ b/code/ArkTS1.2/ANISample/oh-package.json5 @@ -0,0 +1,8 @@ +{ + "modelVersion": "5.1.0", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + } +} diff --git a/code/ArkTS1.2/ComponentSample/.gitignore b/code/ArkTS1.2/ComponentSample/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d2ff20141ceed86d87c0ea5d99481973005bab2b --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/AppScope/app.json5 b/code/ArkTS1.2/ComponentSample/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..4459be73fa80092f61b55a4bfdf16e630f933bbd --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/AppScope/app.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "app": { + "bundleName": "com.samples.componentSampleTest", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/ArkTS1.2/ComponentSample/AppScope/resources/base/element/string.json b/code/ArkTS1.2/ComponentSample/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..2b122b5a83fa120fe673cea575d07613d85c2518 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "componentSampleTest" + } + ] +} diff --git a/code/ArkTS1.2/ComponentSample/AppScope/resources/base/media/app_icon.png b/code/ArkTS1.2/ComponentSample/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/AppScope/resources/base/media/app_icon.png differ diff --git a/code/ArkTS1.2/ComponentSample/README.md b/code/ArkTS1.2/ComponentSample/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a6d7b232d4d463c89efa8e92a9540429d5f7c1de --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/README.md @@ -0,0 +1,102 @@ +# 组件复用示例 + +### 介绍 + +1.主页实现图文混排组件复用场景; +2.实现日历场景的组件复用,属于高负载刷新的组件复用场景; + +### 效果预览 + +效果如下所示: + +|主界面|列表二级联动|自定义日历选择器|跨文件样式复用和组件复用|合理处理高负载组件的渲染文章示例代码| +|--------------------------------|--------------------------------|--------------------------------|--------------------------------|--------------------------------| +|![Alt text](entry/src/main/resources/base/media/main.png)|![Alt text](entry/src/main/resources/base/media/example1.PNG)|![Alt text](entry/src/main/resources/base/media/example2.PNG)|![Alt text](entry/src/main/resources/base/media/example3.PNG)|![Alt text](entry/src/main/resources/base/media/example4.PNG)| + +使用说明 + +1. 在主界面,点击蓝色按钮"列表二级联动"。 + * 滑动二级列表侧控件,一级列表随之滚动。 + * 点击一级列表,二级列表随之滚动。 +2. 在主界面,点击蓝色按钮"自定义日历选择器"。 + * 点击购物车页面的list列表跳转商品详情页。 +3. 在主界面,点击蓝色按钮"跨文件样式复用和组件复用"。 + * 加载完成后显示主界面,点当前日期后会显示日历选择器,选择日期后会关闭日历选择器,主页面日期会变成选定的日期。 +4. 在主界面,点击蓝色按钮"合理处理高负载组件的渲染文章示例代码"。 + * 加载10年的日历数据。 + + +### 工程目录 + +``` +entry/src/main/ets/ +|---pages +| |---Example1 +| | |---DataType.ets // 数据类型定义 +| | |---Example1.ets +| | |---SecondaryLinkExample.ets // 二级联动功能实现页面 +| |---Example2 +| | |---components +| | | |---DateModel.ets // 数据类型定义 +| | | |---GetDate.ets // 获取日期信息 +| | | |---MonthDataSource.ets // 数据类型定义 +| | |----view +| | | |---CalendarView.ets // 场景主页面 + 自定义日历 +| | |---Example2.ets +| |---Example3 +| | |---components +| | | |---CommonText.ets // 自定义组件封装 +| | | |---LazyForEach.ets // 懒加载 +| | |----view +| | | |---Details.ets // 页面:详情页 +| | | |---ShoppingCart.ets // 页面:购物车 +| | |---Example3.ets +| |---Example4 +| | |---GetDate.ets // 获取日期信息 +| | |---MonthDataSource.ets // 懒加载数据类型 +| | |---Example4.ets +| | |---ReusePage.ets // 正常加载数据的页面 +| |---index.ets // 首页 +``` + +### 具体实现 + +* Example1(列表二级联动) 源码参考: [Example1](entry/src/main/ets/pages/Example1) + * 构造懒加载数据源类型[MyDataSource](entry/src/main/ets/pages/Example1/DataType.ets) + * 一二级列表分别绑定不同的Scroller对象,一级列表(tagLists)绑定classifyScroller对象,二级列表绑定scroller对象。 + * 通过循环,构造一二级列表数据。 + * 点击一级列表后,通过一级列表的索引获取二级列表的索引,调用scrollToIndex方法将一二级列表滚动到指定索引值。 + * 通过二级列表索引获取一级列表索引,调用scrollToIndex方法将一级列表滚动到指定索引值。 +* Example2(自定义日历选择器) 源码参考: [Example2](entry/src/main/ets/pages/Example2) + * 获取当前月和下个月的日期信息。源码参考[GetDate.ets](entry/src/main/ets/pages/Example2/components/GetDate.ets) + * 通过Flex类初始化自定义日历界面。源码参考[CalendarView.ets](entry/src/main/ets/pages/Example2/view/CalendarView.ets)。 +* Example3(跨文件样式复用和组件复用) 源码参考: [Example3](entry/src/main/ets/pages/Example3) + * 使用了自定义封装的Image+Text的图文复合组件[ImageText](entry/src/main/ets/pages/Example3/common/CommonText.ets) +* Example4(合理处理高负载组件的渲染文章示例代码) 源码参考: [Example4](entry/src/main/ets/pages/Example4) + * 通过组件复用,加载10年的日历数据。源码参考:[ReusePage.ets](entry/src/main/ets/pages/Example4/ReusePage.ets) + +### 相关权限 + +无 + +### 依赖 + +无 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:Phone; +2. 本示例为Stage模型,支持API20版本SDK,SDK版本号(API Version 20),镜像版本号(5.0.1.5)。 +3. 本示例需要使用DevEco Studio 版本号(6.0.0.6)版本才可编译运行。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +``` +git init +git config core.sparsecheckout true +echo code/ArkTS1.2/ComponentSample/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/openharmony/applications_app_samples.git +git pull +``` \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/build-profile.json5 b/code/ArkTS1.2/ComponentSample/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..c83260a8d4a7c41693901753e0c0ea562824569c --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/build-profile.json5 @@ -0,0 +1,68 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "arkTSVersion": "1.2", + "compatibleSdkVersion": "6.0.0(20)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/code-linter.json5 b/code/ArkTS1.2/ComponentSample/code-linter.json5 new file mode 100644 index 0000000000000000000000000000000000000000..87b3919d419c09728067f1b545b7e2d5116adc07 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/code-linter.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@security/no-unsafe-aes": "error", + "@security/no-unsafe-hash": "error", + "@security/no-unsafe-mac": "warn", + "@security/no-unsafe-dh": "error", + "@security/no-unsafe-dsa": "error", + "@security/no-unsafe-ecdsa": "error", + "@security/no-unsafe-rsa-encrypt": "error", + "@security/no-unsafe-rsa-sign": "error", + "@security/no-unsafe-rsa-key": "error", + "@security/no-unsafe-dsa-key": "error", + "@security/no-unsafe-dh-key": "error", + "@security/no-unsafe-3des": "error" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/.gitignore b/code/ArkTS1.2/ComponentSample/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/build-profile.json5 b/code/ArkTS1.2/ComponentSample/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..36f9e65afb2abbbbdda625e86543807eee16240c --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/build-profile.json5 @@ -0,0 +1,54 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/hvigorfile.ts b/code/ArkTS1.2/ComponentSample/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f830cdfd5bfdd8bde92ebfc27fc0562423dca3d --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ComponentSample/entry/obfuscation-rules.txt b/code/ArkTS1.2/ComponentSample/entry/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/oh-package.json5 b/code/ArkTS1.2/ComponentSample/entry/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..39ab3f901494a87d5ab258dfaa9e6882de1f5166 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/oh-package.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..7cfa74313136d60906a788b73684b8d3539b7120 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,56 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import { BusinessError } from '@ohos.base'; +import hilog from '@ohos.hilog'; +import {globalContext} from './GlobalContext'; + +class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onCreate'); + globalContext.setAbilityContext(this.context); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onWindowStageCreate'); + try { + windowStage.loadContent('pages/Index', (err: BusinessError): void => { + hilog.info(0x0000, 'testTag', 'loadContent entering'); + if (err.code) { + hilog.error(0x0000, 'testTag', 'loadContent error'); + return; + } + hilog.info(0x0000, 'testTag', 'loadContent ok'); + }); + } catch (e: Error) { + hilog.error(0x0000, 'testTag', 'loadContent catch error:-----------' + e.message); + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/entryability/GlobalContext.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/entryability/GlobalContext.ets new file mode 100644 index 0000000000000000000000000000000000000000..e63a822c2f8aa9b43da8394a626367dcc5d94b93 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/entryability/GlobalContext.ets @@ -0,0 +1,44 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import common from '@ohos.app.ability.common'; + +export class GlobalContext { + private abilityContext: common.UIAbilityContext | null = null; + + setAbilityContext(context: common.UIAbilityContext): void { + this.abilityContext = context; + } + + getAbilityContext(): common.UIAbilityContext { + if (!this.abilityContext) { + throw new Error('AbilityContext'); + } + return this.abilityContext!; + } +} + +export const globalContext = new GlobalContext(); \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/DataType.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/DataType.ets new file mode 100644 index 0000000000000000000000000000000000000000..27179e3ffdfa36b338246d5f83d40d2911463fce --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/DataType.ets @@ -0,0 +1,206 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import {IDataSource,DataChangeListener,Text, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView ,Image,Row} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { State, StateDecoratedVariable, MutableState, stateOf, observableProxy ,Provide} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +const CONTENT_PER_TAG = 10; // 每个TAG对应多少个元素 +/** + * 代表自定义类型数据的接口。 + * + * @interface + * @property {string} desc - 描述。 + * @property {string} tag - 类别。 + */ +export interface CustomDataType { + desc: string, + tag: string, +} + +/** + * 一级列表可视区域的起始索引和终点索引。 + * + * @interface + * @property {number} start - 可视区域起点索引。 + * @property {number} end - 可视区域终点索引。 + */ +export interface ListIndexPosition { + start: number, + end: number +} + +/** + * Basic implementation of IDataSource to handle data listener + * + * @class + * @implements {IDataSource} + */ +class BasicDataSource implements IDataSource { + private listeners: DataChangeListener[] = Array(); + private originDataArray: CustomDataType[] = Array(); + + /** + * 获取数组长度。 + * @returns {number} 返回数组长度。 + */ + public totalCount(): double { + return 0; + } + + /** + * 获取指定索引数据。 + * @param {number} index - 索引值。 + * @returns {CustomDataType} 返回指定索引数据。 + */ + public getData(index: double): CustomDataType { + return this.originDataArray[index]; + } + + /** + * 为LazyForEach组件向其数据源处添加listener监听。 + * @param {DataChangeListener} listener - 监听对象。 + */ + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + console.info('add listener'); + this.listeners.push(listener); + } + } + + /** + * 为对应的LazyForEach组件在数据源处去除listener监听。 + * @param {DataChangeListener} listener - 监听对象。 + */ + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener); + if (pos >= 0) { + console.info('remove listener'); + this.listeners.splice(pos, 1); + } + } + + /** + * 通知LazyForEach组件需要在index对应索引处添加子组件。 + * @param {number} index - 索引值。 + */ + notifyDataAdd(index: double): void { + this.listeners.forEach(listener => { + listener.onDataAdd(index); + }) + } + + /** + * 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件。 + * @param {number} index - 索引值。 + */ + notifyDataChange(index: double): void { + this.listeners.forEach(listener => { + listener.onDataChange(index); + }) + } + + /** + * 通知LazyForEach组件需要在index对应索引处删除该子组件 + * @param {number} index - 索引值。 + */ + notifyDataDelete(index: double): void { + this.listeners.forEach(listener => { + listener.onDataDelete(index); + }) + } + + /** + * 通知LazyForEach组件将from索引和to索引处的子组件进行交换 + * @param {number} from - 起始值。 + * @param {number} to - 终点值。 + */ + notifyDataMove(from: double, to: double): void { + this.listeners.forEach(listener => { + listener.onDataMove(from, to); + }) + } +} + +/** + * 继承自BasicDataSource的子类,重写了方法。 + * + * @class + * @extends {BasicDataSource} + */ +export class MyDataSource extends BasicDataSource { + public dataArray: CustomDataType[] = Array(); + + /** + * 获取数组长度。 + * @returns {number} 返回数组长度。 + */ + public totalCount(): double { + return this.dataArray.length; + } + + /** + * 获取指定索引数据。 + * @param {number} index - 索引值。 + * @returns {CustomDataType} 返回指定索引数据。 + */ + public getData(index: double): CustomDataType { + return this.dataArray[index]; + } + + /** + * 改变单个数据。 + * @param {number} index - 索引值。 + * @param {CustomDataType} data - 修改后的值。 + */ + public addData(index: double, data: CustomDataType): void { + this.dataArray.splice(index, 0, data); + this.notifyDataAdd(index); + } + + /** + * 添加数据。 + * @param {CustomDataType} data - 需要添加的数据。 + */ + public pushData(data: CustomDataType[]): void { + if (Array.isArray(data)) { + for (let i = 0; i < CONTENT_PER_TAG; ++i) { + this.dataArray.push(data[i]); + } + } + this.notifyDataAdd(this.dataArray.length - 1); + } +} + +// 常量数据 +export enum ComponentStyle { + ITEM_GUTTER = 12, + TAG_TEXT_HEIGHT= 75, + SUB_ITEM_GUTTER= 7, + SUB_ITEM_HEIGHT= 96, + SUB_ITEM_TEXT_WIDTH_TITLE= 56, + SUB_ITEM_TEXT_HEIGHT= 12, + SUB_ITEM_TEXT_WIDTH_BODY= 120, + BOTTOM_TOAST_TEXT_MAX_HEIGHT= 200 +}; \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/Example1.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/Example1.ets new file mode 100644 index 0000000000000000000000000000000000000000..d6a441efa42453c14d35e0feaf21a157ac12d58a --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/Example1.ets @@ -0,0 +1,83 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Row, + TextAlign, + Entry +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { + State, + Link, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import hilog from '@ohos.hilog' +import { Context,UIContext} from '@ohos.arkui.UIContext' +import { SecondaryLinkExample } from './SecondaryLinkExample'; +@Entry +@Component +struct Example1Test { + aboutToAppear() { + + } + build() { + Column() { + Row() { + Text('← ').fontSize(20) + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }).width('100%') + }.height('5%') + SecondaryLinkExample() + } + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo() =>{ + hilog.info(0x0000, 'testTag', 'Example1Test'); + Example1Test(undefined); + } + return wrapper; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/SecondaryLinkExample.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/SecondaryLinkExample.ets new file mode 100644 index 0000000000000000000000000000000000000000..a6df27159d2f3e5acf0ab78477768c32bedf8b2b --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example1/SecondaryLinkExample.ets @@ -0,0 +1,307 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { CustomDataType, MyDataSource, ListIndexPosition, ComponentStyle } from './DataType'; +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { + WordBreak, + TextOverflow, + TouchType, + TextAlign, + FontWeight, + FlexAlign, + HorizontalAlign, + BarState, + Scroller, + Scroll, + SafeAreaType, + SafeAreaEdge, + ListItem, + Axis, + LazyForEach, + List, + TouchEvent, + ForEach, + Flex, + FlexWrap, + Builder, + NavDestination, + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Image, + Row, + CalendarPickerDialog,$r +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { + State, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy, + Watch +} from '@ohos.arkui.stateManagement';// should be insert by ui-plugins +import hilog from '@ohos.hilog'; + +const TAG_LIST_LENGTH = 12; // TagList长度 +const CONTENT_PER_TAG = 10; // 每个TAG对应多少个元素 + +/** + * 功能描述: 本示例主要介绍了List组件实现二级联动(Cascading List)的场景 + * + * 推荐场景: 需要使用多级列表联合滚动的场景,如:外卖点单页面等 + * + * 核心组件: + * 1. SecondaryLinkExample.tagListItemBuilder + * + * 实现步骤: + * 1. 一二级列表分别绑定不同的Scroller对象,一级列表(tagLists)绑定classifyScroller对象,二级列表绑定scroller对象 + * 2. 点击一级列表后,通过一级列表的索引获取二级列表的索引,调用scrollToIndex方法将一二级列表滚动到指定索引值 + * 3. 滑动二级列表触发组件滚动事件后,获取到列表可视区域第一个item对应的索引值,通过二级列表索引获取一级列表索引,调用scrollToIndex方法将一级列表滚动到指定索引值 + */ +@Component +export struct SecondaryLinkExample { + private tagIndexPosition: ListIndexPosition = { start: 0, end: 0 } as ListIndexPosition; // 一级列表可视区域的起始索引和终点索引 初始化失败 + @State @Watch('onIndexChange') currentTagIndex: number = 0; // 一级列表焦点索引值 + private tagLists: Array = new Array(); // 一级列表数据 + @State contentData: MyDataSource = new MyDataSource(); // 二级列表数据 + private records: Array = new Array(); // 二级列表分组count数量 + // TODO:知识点: 1.级联列表分别绑定不同的Scroller对象,通过调用Scroller对象方法实现控制列表滚动 + private classifyScroller: Scroller = new Scroller(); // 一级列表Scroller对象 + private scroller: Scroller = new Scroller(); // 二级列表Scroller对象 + private isClickTagList: boolean = false; // 是否点击一级列表 + + /** + * 生命周期函数 + */ + aboutToAppear(): void { + // 构造数据 + for (let i = 0; i < TAG_LIST_LENGTH; i++) { + this.tagLists.push(`类别${i + 1}`); + const tempData: Array = new Array(CONTENT_PER_TAG).fill({ + desc: '内容数据', + tag: `类别${i + 1}` + }); + this.records.push(i * CONTENT_PER_TAG); + this.contentData.pushData(tempData); + } + this.records.push(CONTENT_PER_TAG * TAG_LIST_LENGTH); + this.tagIndexPosition = { start: 0, end: 0 }; + } + + build() { + Column() { + Column() { + Text($r('app.string.secondarylinkage_secondary_link')) + .fontSize(20) + Text($r('app.string.secondarylinkage_secondary_link_desc')) + .fontSize(20) + .wordBreak(WordBreak.BREAK_ALL) + } + .width('100%') + .backgroundColor('#ffcac6c6') + .borderRadius(12) + .padding(12) + + Row() { + // TODO:知识点: 2.一级列表绑定Scroller对象 + List({ scroller: this.classifyScroller, initialIndex: 0 }) { + ForEach(this.tagLists, (item: string, index: number) => { + this.tagListItemBuilder(item, index); + }, (item: string, index: number) => item) + } + .backgroundColor('#ffe3e3e3') + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + .onScrollIndex((start: number, end: number): void => { + this.tagIndexPosition = { start, end }; + }) + .listDirection(Axis.Vertical) + .scrollBar(BarState.Off) + .height('100%') + .width('30%') + // 二级列表 + List({ scroller: this.scroller}) { + ForEach(this.contentData.dataArray, (item: CustomDataType, index: number) => { + this.contentListItemBuilder(item, index); + }) + this.contentListNoMoreBuilder(); + } + .backgroundColor('#ffffffff') + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + .id('list_content') + .scrollBar(BarState.Off) + .listDirection(Axis.Vertical) // 列表排列方向水平 + .flexShrink(1) + .onTouch((event: TouchEvent): void => { + if (event.type === TouchType.Down) { + this.isClickTagList = false; // 当前点击的非一级列表 + } + }) + // 性能知识点:onScrollIndex事件在列表滚动时频繁执行,在回调中需要尽量减少耗时和冗余操作,例如减少不必要的日志打印 + .onScrollIndex((start: number): void => { + // TODO:知识点: 4.滑动二级列表触发组件滚动事件后,返回列表可视区域的第一个item对应的索引值,当前通过二级列表索引获取一级列表索引,操作一级列表Scroller对象使列表滚动到指定位置 + const currentClassIndex = this.findClassIndex(start); + if (currentClassIndex !== this.currentTagIndex && this.isClickTagList !== true) { + this.currentTagIndex = currentClassIndex; + this.classifyScroller.scrollToIndex(currentClassIndex, true); + } + }) + } + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + .width('100%') + .layoutWeight(1) + } + } + + /** + * 内容底部'没有更多'视图 + */ + @Builder + contentListNoMoreBuilder() { + ListItem() { + Text($r('app.string.secondarylinkage_nomore')) + .fontSize(20) + .backgroundColor('#ffb8b8b8') + } + .width('100%') + } + + /** + * 右侧内容视图 + */ + @Builder + contentListItemBuilder(item: CustomDataType, index: number) { + ListItem() { + Row() { + Text() + .aspectRatio(1) + .height('100%') + .backgroundColor('#ffe5e5e5') + .borderRadius(15) + Column() { + Text(item.desc + index) + Text(item.tag) + .fontSize(20) + .fontColor('#ff1dee06') + Text() + .height(ComponentStyle.SUB_ITEM_TEXT_HEIGHT) + .width(ComponentStyle.SUB_ITEM_TEXT_WIDTH_TITLE) + .backgroundColor('#ffb8b8b8') + Text() + .height(ComponentStyle.SUB_ITEM_TEXT_HEIGHT) + .width(ComponentStyle.SUB_ITEM_TEXT_WIDTH_BODY) + .backgroundColor('#ff8f8f8f') + } + .width('100%') + .alignItems(HorizontalAlign.Start) + .justifyContent(FlexAlign.SpaceEvenly) + .height('100%') + } + .backgroundColor('#ffffffff') + .height(ComponentStyle.SUB_ITEM_HEIGHT) + } + .id('content_' + index) + } + + /** + * 左侧类别视图 + */ + @Builder + tagListItemBuilder(item: string, index: number) { + ListItem() { + Text(item) + .width('100%') + .height(ComponentStyle.TAG_TEXT_HEIGHT) + .textAlign(TextAlign.Center) + .onTouch((event: TouchEvent) => { + if (event.type === TouchType.Down) { + this.isClickTagList = true; // 当前点击的是一级列表 + } + }) + .onClick((e: ClickEvent): void => { + // TODO:知识点: 3.点击一级列表后,通过一级列表索引获取二级列表索引,分别操作不同的Scroller对象使列表滚动到指定位置 + this.currentTagIndex = index; + const itemIndex = this.findItemIndex(index); + this.scroller.scrollToIndex(itemIndex, true); + }) + .backgroundColor(this.currentTagIndex === index ? '#ffffffff' : '#ffe3e3e3') + } + .id(this.currentTagIndex === index ? 'type_' + index : 'type_' + index + '_selected') + } + + /** + * 根据一级列表索引值获取二级列表索引值 + * + * @param {number} index - 一级列表索引值 + * @returns {number} 二级列表索引值 + */ + findItemIndex(index: number): number { + return this.records[index]; + } + + /** + * 根据二级列表索引值获取对应一级列表索引 + * + * @param {number} index - 二级列表索引值 + * @returns {number} 一级列表索引值 + */ + findClassIndex(index: number): number { + let ans = 0; + for (let i = 0; i < this.records.length; i++) { + if (index >= this.records[i] && index < this.records[i + 1]) { + ans = i; + break; + } + } + return ans; + } + + /** + * 监听一级列表获焦索引变化 + */ + onIndexChange(s: string) { + const start = this.tagIndexPosition.start; + const end = this.tagIndexPosition.end; + if ((this.currentTagIndex === end || this.currentTagIndex === end - 1)) { + let leftScrollCount: number = this.currentTagIndex + 1; + leftScrollCount = leftScrollCount >= this.tagLists.length - 1 ? this.tagLists.length - 1 : leftScrollCount; + this.classifyScroller.scrollToIndex(leftScrollCount, true); // 使获焦item向左滚动 + } + if (this.currentTagIndex === start || this.currentTagIndex === start + 1) { + let rightScrollCount: number = this.currentTagIndex - 1; + rightScrollCount = rightScrollCount <= 0 ? 0 : rightScrollCount; + this.classifyScroller.scrollToIndex(rightScrollCount, true); // 使获焦item向右滚动 + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/Example2.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/Example2.ets new file mode 100644 index 0000000000000000000000000000000000000000..996989afb923303ef15f0241a5b4669bf122437f --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/Example2.ets @@ -0,0 +1,82 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Row, + Entry +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { + State, + Link, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import hilog from '@ohos.hilog'; +import { Context,UIContext} from '@ohos.arkui.UIContext'; +import { CalendarView } from './view/CalendarView'; +@Entry +@Component +struct Example2Test { + aboutToAppear() { + } + + build() { + Column() { + Row() { + Text('← ').fontSize(20) + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back() + }).width('100%') + }.height('5%') + CalendarView(); + } + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo() =>{ + hilog.info(0x0000, 'testTag', 'Example2Test'); + Example2Test(undefined); + } + return wrapper; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/DateModel.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/DateModel.ets new file mode 100644 index 0000000000000000000000000000000000000000..c0e58c878e8f4e88d434afdbf6f3547842c51e4c --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/DateModel.ets @@ -0,0 +1,41 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * 设置项的数据类 + */ +export class DateModel { + public day: number; + public week: number; + public month: number; + public year: number; + + constructor(day: number, week: number, month: number, year: number) { + this.day = day; + this.week = week; + this.month = month; + this.year = year; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/GetDate.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/GetDate.ets new file mode 100644 index 0000000000000000000000000000000000000000..e04e442193f4518010f0b9ccf51df64b78e9a17d --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/GetDate.ets @@ -0,0 +1,72 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { DateModel } from './DateModel'; + +const SATURDAY = 6; // 日历表上周六对应的序列号,从周日开始算起,取值0~6 + +/* + * 根据指定年份和月份获取该月在日历表上的日期排布数据 + * @param { number } specifiedMonth - 指定月份 + * @param { number } specifiedYear - 指定年份 + */ +export function getMonthDate(specifiedMonth: number, specifiedYear: number): number[] { + let currentFirstWeekDay: number = 0; // 初始化指定月的第一天是周几 + let currentLastWeekDay: number = 0; // 初始化指定月的最后一天是周几 + let currentAllDay: number[] = []; // 初始化指定月的日期排列数组 + let totalDays = new Date(specifiedYear, specifiedMonth, 0).getDate(); // 初始化指定月总天数 + currentFirstWeekDay = new Date(specifiedYear, specifiedMonth - 1, 1).getDay(); // 获取指定月的第一天是周几 + currentLastWeekDay = new Date(specifiedYear, specifiedMonth - 1, totalDays).getDay(); // 获取指定月的最后一天是周几 + // 将月份中显示上个月日期的内容置0 + for (let item = 0; item < currentFirstWeekDay; item++) { + currentAllDay.push(0); + } + // 将本月日期内容存入数组 + for (let item = 1; item <= totalDays; item++) { + currentAllDay.push(item); + } + // 将月份中显示下个月日期的内容置0 + for (let item = 0; item < SATURDAY - currentLastWeekDay; item++) { + currentAllDay.push(0); + } + return currentAllDay; +} + +/* + * 获取当前日期,年月日星期几 + */ +export function getRealTimeDate(): DateModel { + const nowDate = new Date(); // 创建Date对象,设置当前日期和时间 + let currentMonth = nowDate.getMonth() + 1; // 获取当前月份,getMonth()获得的值是0~11,实际月份需要+1 + let currentDay = nowDate.getDate(); // 获取当前日 + let currentYear = nowDate.getFullYear(); // 获取当前年份 + let currentWeekDay = new Date(currentYear, currentMonth - 1, currentDay).getDay(); // 获取当前星期几 + let nowDateModel = new DateModel(0, 0, 0, 0); // 创建DateModel实例 + nowDateModel.day = currentDay; + nowDateModel.week = currentWeekDay; + nowDateModel.month = currentMonth; + nowDateModel.year = currentYear; + return nowDateModel; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/MonthDataSource.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/MonthDataSource.ets new file mode 100644 index 0000000000000000000000000000000000000000..a8f22172fe21ce2b3773d1aec48cee4c43b377f5 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/components/MonthDataSource.ets @@ -0,0 +1,150 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { + IDataSource, + DataChangeListener, + Component, + UserView, + Builder,Resource,$r,Row +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { State, Link, StorageLink, Watch } from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins + +export interface Month { + month: string; // 具体年月 + num: number; // 月份 + days: number[]; // 该月日期 +} + +/** + * Basic implementation of IDataSource to handle data listener + * + * @class + * @implements {IDataSource} + */ +export class MonthDataSource implements IDataSource { + private listeners: DataChangeListener[] = []; + public dataArray: Month[] = new Array(); + + /** + * 获取数组长度。 + * @returns {number} 返回数组长度。 + */ + public totalCount(): number { + return this.dataArray.length; + } + + /** + * 获取指定索引数据。 + * @param {number} index - 索引值。 + * @returns {CustomDataType} 返回指定索引数据。 + */ + public getData(index: number): Month { + return this.dataArray[index]; + } + + /** + * 为LazyForEach组件向其数据源处添加listener监听。 + * @param {DataChangeListener} listener - 监听对象。 + */ + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + console.info('add listener'); + this.listeners.push(listener); + } + } + + /** + * 为对应的LazyForEach组件在数据源处去除listener监听。 + * @param {DataChangeListener} listener - 监听对象。 + */ + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener); + if (pos >= 0) { + console.info('remove listener'); + this.listeners.splice(pos, 1); + } + } + + /** + * 通知LazyForEach组件需要在index对应索引处添加子组件。 + * @param {number} index - 索引值。 + */ + notifyDataAdd(index: number): void { + this.listeners.forEach(listener => { + listener.onDataAdd(index); + }) + } + + /** + * 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件。 + * @param {number} index - 索引值。 + */ + notifyDataChange(index: number): void { + this.listeners.forEach(listener => { + listener.onDataChange(index); + }) + } + + /** + * 通知LazyForEach组件需要在index对应索引处删除该子组件 + * @param {number} index - 索引值。 + */ + notifyDataDelete(index: number): void { + this.listeners.forEach(listener => { + listener.onDataDelete(index); + }) + } + + /** + * 通知LazyForEach组件将from索引和to索引处的子组件进行交换 + * @param {number} from - 起始值。 + * @param {number} to - 终点值。 + */ + notifyDataMove(from: number, to: number): void { + this.listeners.forEach(listener => { + listener.onDataMove(from, to); + }) + } + + /** + * 改变单个数据。 + * @param {number} index - 索引值。 + * @param {CustomDataType} data - 修改后的值。 + */ + public addData(index: number, data: Month): void { + this.dataArray.splice(index, 0, data); + this.notifyDataAdd(index); + } + + /** + * 添加数据。 + * @param {CustomDataType} data - 需要添加的数据。 + */ + public pushData(data: Month): void { + this.dataArray.push(data); + this.notifyDataAdd(this.dataArray.length - 1); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/view/CalendarView.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/view/CalendarView.ets new file mode 100644 index 0000000000000000000000000000000000000000..2cb86b8eef9588b01c69fc80303fb260b4fbe57d --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example2/view/CalendarView.ets @@ -0,0 +1,281 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { DateModel } from '../components/DateModel'; +import { getRealTimeDate, getMonthDate } from '../components/GetDate'; +import promptAction from '@ohos.promptAction'; +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + FlexAlign, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + List, + ListItem, + Image, + Tabs, + TabContent, + Row, + ButtonType, + Builder, + CustomDialogController, + DismissDialogAction, + DialogAlignment, + $r, + Resource, + Entry, + TextInput, + Scroller, + Flex, + HorizontalAlign, + SafeAreaType, + SafeAreaEdge, + FlexWrap, + TextAlign, + ForEach, + Scroll, + Color, + Span, + ItemAlign, + Margin +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { State, Link, StorageLink, Consume } from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import hilog from '@ohos.hilog'; +import { Context, UIContext } from '@ohos.arkui.UIContext'; +import { Month, MonthDataSource } from '../components/MonthDataSource'; + +const ELEMENTS_MARGIN_L = 24; +const ELEMENTS_MARGIN_M = 8; +const TRANSITION_DURATION = 200; +const MONDAY = '一'; +const TUESDAY = '二'; +const WEDNESDAY = '三'; +const THURSDAY = '四'; +const FRIDAY = '五'; +const SATURDAY = '六'; +const SUNDAY = '日'; +const WEEK: string[] = [SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY]; // 设置日历周,从周日开始 +const MONTH: string = '月'; +const YEAR: string = '年'; +const MONTHS = 12; +const JANUARY = 1; +const WEEK_NUMBER = 7; +const MONTH_NUMBER = 35; +const GRID_HEIGHT_L = 360; +const GRID_HEIGHT_M = 300; +const ELEMENTS_MARGIN = 12; + +@Entry +@Component +export struct CalendarView { + private week: string[] = ['日', '一', '二', '三', '四', '五', '六']; // 设置日历周,从周日开始 + @State dateModel: DateModel = new DateModel(0, 0, 0, 0); // 初始化dateModel数据 + @State flag: boolean = false; + @State contentData: MonthDataSource = new MonthDataSource(); // 列表数据 + nowDate: Date = new Date(); + currentMonth: number = this.nowDate.getMonth() + 1; // 当前月份 + currentDay: number = this.nowDate.getDate(); // 当前日 + currentYear: number = this.nowDate.getFullYear(); // 当前年份 + currentWeekDay: number = new Date(this.currentYear, this.currentMonth - 1, this.currentDay).getDay(); // 当前周几 + private scroller: Scroller = new Scroller(); // 二级列表Scroller对象 + @State nextMonth: number = 1; // 初始化下一个月月份 + @State nextYear: number = 1; // 初始化下一个月年份 + @State nextMonthDay: number[] = new Array(); // 初始化下一个月的日期排列数组 + @State currentMonthDay: number[] = new Array(); // 初始化当前月的日期排列数组 + + // 获取当前日期 + aboutToAppear(): void { + this.dateModel = getRealTimeDate(); // 获取当前年月日信息 + this.currentMonth = this.dateModel.month; // 获取当前月份 + this.currentDay = this.dateModel.day; // 获取当前日 + this.currentYear = this.dateModel.year; // 获取当前年份 + + this.currentMonthDay = getMonthDate(this.currentMonth, this.currentYear); + // 如果下个月是在下一年,则下个月是1月份,年份要+1 + if (this.currentMonth === MONTHS) { + this.nextMonth = JANUARY; + this.nextYear = this.currentYear + 1; + } else { + this.nextMonth = this.currentMonth + 1; + this.nextYear = this.currentYear; + } + this.nextMonthDay = getMonthDate(this.nextMonth, this.nextYear); + // 获取当前月和下个月的日期数据 + const months: Month = + { + month: `${this.currentYear}年 ${this.currentMonth}月`, + num: this.currentMonth, + days: this.currentMonthDay + } + const months2: Month = + { + month: `${this.nextYear}年 ${this.nextMonth}月`, + num: this.nextMonth, + days: this.nextMonthDay + } + this.contentData.pushData(months); + this.contentData.pushData(months2); + } + + @State strss: string | Resource = $r('app.string.customcalendarpickerdialog_departure'); + + @Builder + calendarMainView() { + Column() { + Column() { + // 出发地和目的地显示 + Row() { + Text($r('app.string.customcalendarpickerdialog_departure')) + .fontSize(20) + Image($r('app.media.app_icon')) + .height(20) + .width(20) + Text($r('app.string.customcalendarpickerdialog_destination')) + .fontSize(20) + } + .justifyContent(FlexAlign.SpaceBetween) + .width('100%') + + // 当前日期显示 + Row() { + Text(`${this.dateModel.month}月${this.dateModel.day}日`) + .fontSize(20) + Text(`星期${this.week[this.dateModel.week]}`) + .fontSize(20) + } + .id('calender_click') + .justifyContent(FlexAlign.Start) + .width('100%') + .margin(8) + .onClick((e: ClickEvent) => { + // 点击当前日期后打开自定义弹窗显示日历 + hilog.info(0x0000, 'testTag', '查询车票按钮显示 onClick'); + this.flag = !this.flag; + }) + + // 查询车票按钮显示 + Button($r('app.string.customcalendarpickerdialog_check_ticket')) + .fontSize(20) + .width('100%') + .onClick((e: ClickEvent) => { + }) + } + .margin(10) + .borderRadius($r('app.string.ohos_id_corner_radius_default_m')) + + Flex({ wrap: FlexWrap.Wrap }) { + Text($r('app.string.customcalendarpickerdialog_departure_date')) + .fontSize(20) + .height(20).width('100%') + .textAlign(TextAlign.Center) + // 显示周信息,从周日开始到周六 + ForEach(WEEK, (weekday: string) => { + Text(weekday) + .fontSize(20) + .width(50) + .height(30) + .fontColor(weekday === SUNDAY || weekday === SATURDAY ? Color.Red : Color.Black) + .borderRadius(10) + .textAlign(TextAlign.Center) + .layoutWeight(1) + }) + List() { + ForEach(this.contentData.dataArray, (monthItem: Month) => { + ListItem() { + Flex({ wrap: FlexWrap.Wrap }) { + // 月份信息 + Text(monthItem.month) + .width('100%') + .height(40) + .fontSize(20) + .fontColor(Color.Black) + .backgroundColor($r('app.color.highlyloadedcomponentrender_color_year_background')) + .textAlign(TextAlign.Center) + .id('id_highly_loaded_component_render_title') + // 日期信息 + ForEach(monthItem.days, (day: number, index: number) => { + Text() { + Span(JSON.stringify(day)) + .fontSize(20) + } + .height(50) + .width(50) + .opacity(day === 0 ? 0 : 1) + .fontColor(day < this.currentDay && monthItem.num === this.currentMonth ? Color.Grey : + Color.Black) + .borderRadius(10) + .textAlign(TextAlign.Center) + .backgroundColor(day === this.currentDay && monthItem.num === this.currentMonth ? + $r('app.color.ohos_id_color_palette9') : Color.Transparent) + .onClick((e: ClickEvent) => { + if (day >= this.currentDay || monthItem.num > this.currentMonth || + Number(monthItem.month.substring(0, 4)) > this.currentYear) { + let weekIndex = monthItem.days.indexOf(day) % WEEK_NUMBER; // 将当前日转换成星期显示 + let dateModelTmp: DateModel = new DateModel(0, 0, 0, 0); + dateModelTmp.day = day; + dateModelTmp.week = weekIndex; + dateModelTmp.month = monthItem.num; + dateModelTmp.year = Number(monthItem.month.substring(0, 4)); + this.dateModel = dateModelTmp; + if (this.flag == true) { + this.flag = false; + } + } + }) + }) + }.width('100%') + } + }) + } + .width('100%') + .height('100%') + .backgroundColor($r('app.color.ohos_id_color_background')) + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + } + .width('100%') + .height('60%') + .margin(10) + .opacity(this.flag === true ? 1 : 0) + .borderRadius($r('app.string.ohos_id_corner_radius_default_m')) + }.height('100%') + } + + build() { + Column() { + this.calendarMainView(); + } + .width('100%') + .height('100%') + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/Example3.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/Example3.ets new file mode 100644 index 0000000000000000000000000000000000000000..85dc4814ccdb79988b3be4ab43a9ad33884a6057 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/Example3.ets @@ -0,0 +1,87 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Row, + TextAlign, + Entry +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { + State, + Link, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import hilog from '@ohos.hilog'; +import { Context, UIContext } from '@ohos.arkui.UIContext'; +import { ShoppingCart } from './view/ShoppingCart'; + +@Entry +@Component +struct Example3Test { + aboutToAppear() { + + } + + build() { + Column() { + Row() { + Text('← ').fontSize(20) + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }).width('100%') + }.height('5%') + + ShoppingCart(); + } + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo() => + { + hilog.info(0x0000, 'testTag', 'Example3Test'); + Example3Test(undefined); + } + return wrapper; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/common/CommonText.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/common/CommonText.ets new file mode 100644 index 0000000000000000000000000000000000000000..6409ad445849e61dd9e3c8b827424fe557a83d74 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/common/CommonText.ets @@ -0,0 +1,165 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement' +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + AttributeModifier, + RowAttribute, + ImageAttribute, + CheckboxAttribute, + Row, + Checkbox, + $r, + Resource, + Image, + TextAlign, + FlexAlign +} from '@ohos.arkui.component' +import { + State, + Consume, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement' +import hilog from '@ohos.hilog' +import promptAction from '@ohos.promptAction'; + +const COLUMN_SPACE = 10; // column间隙 + +/** + * 自定义封装公共文本组件 + */ +@Component +export struct CommonText { + build() { + Row() { + Text($r('app.string.dynamicattributes_text_one')) + .fontSize(12) + .fontColor($r('app.color.dynamicattributes_orange')) + .textAlign(TextAlign.Center) + Text($r('app.string.dynamicattributes_text_two')) + .fontSize(12) + .fontColor($r('app.color.dynamicattributes_orange')) + .textAlign(TextAlign.Center) + .margin(10); + Text($r('app.string.dynamicattributes_text_three')) + .fontSize(12) + .fontColor($r('app.color.dynamicattributes_orange')) + .textAlign(TextAlign.Center) + }.width($r('app.string.dynamicattributes_max_size')) + } +} + +/** + * 自定义封装底部bar组件 + */ +@Component +export struct BottomBar { + @State buttonName: Resource = $r('app.string.dynamicattributes_settlement'); + @State barType: BarType = BarType.SHOPPING_CART; + + build() { + Row() { + Column() { + if (this.barType === BarType.DETAILS) { + Button($r('app.string.dynamicattributes_add_cart')) + .height(30) + .width(90) + .backgroundColor(($r('app.color.dynamicattributes_orange'))) + .onClick((e: ClickEvent) => { + }) + } + } + + Button(this.buttonName) + .height(30) + .width(90) + .backgroundColor(($r('app.color.dynamicattributes_orange'))) + .onClick((e: ClickEvent) => { + }) + } + .height(60) + .width($r('app.string.dynamicattributes_max_size')) + .padding(15) + .backgroundColor($r('app.color.dynamicattributes_barColor')) + .justifyContent(FlexAlign.End) + } +} + +/** + * 自定义封装图文组件 + */ +@Component +export struct ImageText { + @State item: string | Resource = $r('app.string.dynamicattributes_text'); + @State textOneContent: string | Resource = $r('app.string.dynamicattributes_text'); + @State textTwoContent: string | Resource = $r('app.string.dynamicattributes_text'); + @State textThreeContent: string | Resource = $r('app.string.dynamicattributes_text'); + @State imageSrc: Resource = $r('app.media.icon'); + + build() { + Row() { + Row() { + Image($r('app.media.icon')) + .height(100) + .width(100) + .borderRadius(15) + .onClick((e: ClickEvent) => { + }) + } + + Column() { + Text(this.item) + .fontSize(20).width($r('app.string.dynamicattributes_max_size')) + Text(this.textThreeContent) + .fontSize(20).width($r('app.string.dynamicattributes_max_size')) + CommonText() + Text(this.textOneContent) + .fontSize(20).width($r('app.string.dynamicattributes_max_size')) + .fontColor($r('app.color.dynamicattributes_orange')) + }.margin(15) + } + .width($r('app.string.dynamicattributes_max_size')) + .height($r('app.string.dynamicattributes_max_size')) + } +} + +/* + 枚举底部bar类型 +*/ +export enum BarType { + SHOPPING_CART, // 购物车 + DETAILS, // 详情页 +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/common/LazyForEach.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/common/LazyForEach.ets new file mode 100644 index 0000000000000000000000000000000000000000..e1c4e89ce5ff3e696306379b29a8f5c082bdb30b --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/common/LazyForEach.ets @@ -0,0 +1,171 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement'; +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + IDataSource, + DataChangeListener +} from '@ohos.arkui.component'; +import { State, StateDecoratedVariable, MutableState, stateOf, observableProxy } from '@ohos.arkui.stateManagement'; + +class BasicDataSource implements IDataSource { + private listeners: DataChangeListener[] = []; + private originDataArray: string[] = []; + + /** + * 获取数组长度。 + * @returns {number} 返回数组长度。 + */ + public totalCount(): number { + return 0; + } + + /** + * 获取指定索引数据。 + * @param {number} index - 索引值。 + * @returns {string} 返回指定索引数据。 + */ + public getData(index: number): string { + return this.originDataArray[index]; + } + + /** + * 为LazyForEach组件向其数据源处添加listener监听。 + * @param {DataChangeListener} listener - 监听对象。 + */ + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + console.info('add listener'); + this.listeners.push(listener); + } + } + + /** + * 为对应的LazyForEach组件在数据源处去除listener监听。 + * @param {DataChangeListener} listener - 监听对象。 + */ + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener); + if (pos >= 0) { + console.info('remove listener'); + this.listeners.splice(pos, 1); + } + } + + /** + * 通知LazyForEach组件需要在index对应索引处添加子组件。 + * @param {number} index - 索引值。 + */ + notifyDataAdd(index: number): void { + this.listeners.forEach(listener => { + listener.onDataAdd(index); + }) + } + + /** + * 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件。 + * @param {number} index - 索引值。 + */ + notifyDataChange(index: number): void { + this.listeners.forEach(listener => { + listener.onDataChange(index); + }) + } + + /** + * 通知LazyForEach组件需要在index对应索引处删除该子组件 + * @param {number} index - 索引值。 + */ + notifyDataDelete(index: number): void { + this.listeners.forEach(listener => { + listener.onDataDelete(index); + }) + } + + /** + * 通知LazyForEach组件将from索引和to索引处的子组件进行交换 + * @param {number} from - 起始值。 + * @param {number} to - 终点值。 + */ + notifyDataMove(from: number, to: number): void { + this.listeners.forEach(listener => { + listener.onDataMove(from, to); + }) + } +} + +/** + * 继承自BasicDataSource的子类,重写了方法。 + * + * @class + * @extends {BasicDataSource} + */ +export class MyDataSource extends BasicDataSource { + public dataArray: string[] = []; + + /** + * 获取数组长度。 + * @returns {number} 返回数组长度。 + */ + public totalCount(): number { + return this.dataArray.length; + } + + /** + * 获取指定索引数据。 + * @param {number} index - 索引值。 + * @returns {string} 返回指定索引数据。 + */ + public getData(index: number): string { + return this.dataArray[index]; + } + + /** + * 改变单个数据。 + * @param {number} index - 索引值。 + * @param {string} data - 修改后的值。 + */ + public addData(index: number, data: string): void { + this.dataArray.splice(index, 0, data); + this.notifyDataAdd(index); + } + + /** + * 添加数据。 + * @param {string} data - 需要添加的数据。 + */ + public pushData(data: string): void { + this.dataArray.push(data); + this.notifyDataAdd(this.dataArray.length - 1); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/view/Details.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/view/Details.ets new file mode 100644 index 0000000000000000000000000000000000000000..940f73dfe82b2ceb615c719ea7b8f1644922b14c --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/view/Details.ets @@ -0,0 +1,127 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement'; +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Stack, + Row, + FlexAlign, + Image, + $r, + FontWeight, + Color, + Entry, + SafeAreaEdge, + SafeAreaType +} from '@ohos.arkui.component'; +import { State, StateDecoratedVariable, MutableState, stateOf, observableProxy } from '@ohos.arkui.stateManagement'; +import hilog from '@ohos.hilog'; +import { BarType, BottomBar, CommonText } from '../common/CommonText'; + +const COLUMN_SPACE = 20; // column间隙 +const TEXT_SIZE = 15; // 自定义组件中text大小 + +@Entry +@Component +export struct Details { + build() { + Column() { + Column() { + Text('← ').fontSize(20) + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back() + }).width('100%').height('5%') + + // 商品图片 + Image($r('app.media.icon')) + .height('60%').width('100%') + // 商品详情区 + ProductInfo() + }.width('100%').height('95%') + + // 底部购买区 + BottomBar({ + buttonName: $r('app.string.dynamicattributes_settlement'), + barType: BarType.DETAILS + }) + }.width('100%').height('100%').backgroundColor(Color.White) + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]) + } +} + +@Component +struct ProductInfo { + build() { + Row() { + Column() { + Row() { + Text($r('app.string.dynamicattributes_commodity_price'))// 动态设置组件样式 + .width(100) + .fontSize(30) + Text($r('app.string.dynamicattributes_sold')) + .fontSize(15) + .width(60) + } + .width($r('app.string.dynamicattributes_max_size')) + .justifyContent(FlexAlign.SpaceBetween) + + Row() { + Text($r('app.string.dynamicattributes_full_reduction')) + .fontColor($r('app.color.dynamicattributes_red')) + .fontSize(20) + + Button($r('app.string.dynamicattributes_coupon_collection')) + .height(20) + .backgroundColor($r('app.color.dynamicattributes_red')) + } + .justifyContent(FlexAlign.SpaceBetween) + .width($r('app.string.dynamicattributes_max_size')) + + Text($r('app.string.dynamicattributes_commodity_name')) + .fontWeight(FontWeight.Bold) + .fontSize(25) + .width('100%') + Text($r('app.string.dynamicattributes_commodity_model')) + .fontSize(25) + .fontColor(Color.Gray) + .width('100%') + CommonText() + } + .backgroundColor($r('app.color.dynamicattributes_white')) + .height('100%') + } + .padding(10) + .height('40%') + .width($r('app.string.dynamicattributes_max_size')) + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/view/ShoppingCart.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/view/ShoppingCart.ets new file mode 100644 index 0000000000000000000000000000000000000000..275f17eec734e7e6eb7811874a995ed695cd7554 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example3/view/ShoppingCart.ets @@ -0,0 +1,150 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement'; +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + PixelMap, + ResourceStr, + DrawableDescriptor, + Row, + Checkbox, + Stack, + NavDestination, + FontWeight, + Alignment, + List, + NavPathStack, + Builder, + Navigation, + $r, + SafeAreaType, + SafeAreaEdge, + Color, + Scroll, + ForEach, + LazyForEach, + ListItem +} from '@ohos.arkui.component'; +import { + State, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy, + Prop +} from '@ohos.arkui.stateManagement'; + +import hilog from '@ohos.hilog'; +import { Context, UIContext } from '@ohos.arkui.UIContext'; +import { MyDataSource } from '../common/LazyForEach'; +import { BottomBar, ImageText } from '../common/CommonText'; +import { Details } from './Details'; + +@Component +export struct ShoppingCart { + private data: MyDataSource = new MyDataSource(); + + aboutToAppear() { + for (let i = 1; i <= 20; i++) { + this.data.pushData('商品' + i); + } + } + + build() { + Column() { + Column() { + Text($r('app.string.dynamicattributes_shopping_cart')) + .fontSize(20) + .fontWeight(FontWeight.Bold) + .width('100%') + .height(50) + .padding(20) + .align(Alignment.Bottom) + List() { + LazyForEach(this.data, (item: string) => { + ListItem() { + ShoppingInfo({ item: item }); + }.width('100%') + }) + }.width('100%') + }.backgroundColor('#ffc4c6c6') + .height('90%') + .width('100%') + + BottomBar({ + buttonName: $r('app.string.dynamicattributes_settlement') + }) + } + .width('100%') + .height('100%') + .backgroundColor(Color.White) + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM]) + } +} + + +@Component +struct ShoppingInfo { + @Prop item: string = ' '; + + build() { + Column() { + // 店铺信息 + Row() { + Row() + .borderRadius(5) + .width(20) + .height(20) + .backgroundColor($r('app.color.dynamicattributes_iconColor')) + + Text($r('app.string.dynamicattributes_store_name')) + .fontSize(15) + .margin($r('app.float.dynamicattributes_float_5')) + } + .width(($r('app.string.dynamicattributes_max_size'))) + .height($r('app.float.dynamicattributes_float_20')) + + // 商品信息 + Row() { + ImageText({ item: this.item }) + }.onClick((e: ClickEvent) => { + this.getUIContext().getRouter().pushUrl({ url: 'pages/Example3/view/Details' }); + }) + } + .padding($r('app.float.dynamicattributes_float_15')) + .margin(10) + .height($r('app.float.dynamicattributes_float_160')) + .backgroundColor($r('app.color.dynamicattributes_white')) + .borderRadius($r('app.float.dynamicattributes_float_20')) + } +} diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/Example4.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/Example4.ets new file mode 100644 index 0000000000000000000000000000000000000000..3fc075ce160b7dc0625add11c9bbddf0bf2521b3 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/Example4.ets @@ -0,0 +1,85 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Row, + Entry +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { + State, + Link, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import hilog from '@ohos.hilog'; +import { Context, UIContext } from '@ohos.arkui.UIContext'; +import { ReusePage } from './ReusePage'; + +@Entry +@Component +struct Example4Test { + aboutToAppear() { + } + + build() { + Column() { + Row() { + Text('← ').fontSize(20) + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }).width('100%') + }.height('5%') + + ReusePage(); + } + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo() => + { + hilog.info(0x0000, 'testTag', 'Example4Test'); + Example4Test(undefined); + } + return wrapper; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/GetDate.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/GetDate.ets new file mode 100644 index 0000000000000000000000000000000000000000..398669d1b58da919e2dd5e4c9aa69252e9d7f2e6 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/GetDate.ets @@ -0,0 +1,80 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Entry +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins + +import { + State, + Link, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import hilog from '@ohos.hilog'; + +const SATURDAY: number = 6; // 日历表上周六对应的序列号,从周日开始算起,取值0~6 + +/* + * 根据指定年份和月份获取该月在日历表上的日期排布数据 + * @param {number} specifiedMonth - 指定月份 + * @param {number} specifiedYear - 指定年份 +// */ +export function getMonthDate(specifiedMonth: number, specifiedYear: number): number[] { + let currentFirstWeekDay: number = 0; // 初始化指定月的第一天是周几 + let currentLastWeekDay: number = 0; // 初始化指定月的最后一天是周几 + let currentAllDay: number[] = []; // 初始化指定月的日期排列数组 + let totalDays = new Date(specifiedYear, specifiedMonth, 0).getDate(); // 初始化指定月总天数 + currentFirstWeekDay = new Date(specifiedYear, specifiedMonth - 1, 1).getDay(); // 获取指定月的第一天是周几 + currentLastWeekDay = new Date(specifiedYear, specifiedMonth - 1, totalDays).getDay(); // 获取指定月的最后一天是周几 + // 将月份中显示上个月日期的内容置0 + for (let item = 0; item < currentFirstWeekDay; item++) { + currentAllDay.push(0); + } + // 将本月日期内容存入数组 + for (let item = 1; item <= totalDays; item++) { + currentAllDay.push(item); + } + // 将月份中显示下个月日期的内容置0 + for (let item = 0; item < SATURDAY - currentLastWeekDay; item++) { + currentAllDay.push(0); + } + return currentAllDay; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/MonthDataSource.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/MonthDataSource.ets new file mode 100644 index 0000000000000000000000000000000000000000..111f12ab48c3972c43ae62f0c7d166f411eaec4c --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/MonthDataSource.ets @@ -0,0 +1,178 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Entry, + IDataSource, + DataChangeListener +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { + State, + Link, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins + +export interface Month { + month: string; // 具体年月 + num: number; // 月份 + days: number[]; // 该月日期 + year: number; // 年份 +} + +/** + * Basic implementation of IDataSource to handle data listener + * + * @class + * @implements {IDataSource} + */ +export class MonthDataSource implements IDataSource { + private listeners: DataChangeListener[] = []; + public dataArray: Month[] = new Array(); + + /** + * 获取数组长度。 + * @returns {number} 返回数组长度。 + */ + public totalCount(): number { + return this.dataArray.length; + } + + /** + * 获取指定索引数据。 + * @param {number} index - 索引值。 + * @returns {CustomDataType} 返回指定索引数据。 + */ + public getData(index: number): Month { + return this.dataArray[index]; + } + + public setData(index: number, data: Month[]) { + + } + + /** + * 为LazyForEach组件向其数据源处添加listener监听。 + * @param {DataChangeListener} listener - 监听对象。 + */ + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + this.listeners.push(listener); + } + } + + /** + * 为对应的LazyForEach组件在数据源处去除listener监听。 + * @param {DataChangeListener} listener - 监听对象。 + */ + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener); + if (pos >= 0) { + this.listeners.splice(pos, 1); + } + } + + notifyDataReload(): void { + this.listeners.forEach(listener => { + listener.onDataReloaded(); + }) + } + + /** + * 通知LazyForEach组件需要在index对应索引处添加子组件。 + * @param {number} index - 索引值。 + */ + notifyDataAdd(index: number): void { + this.listeners.forEach(listener => { + listener.onDataAdd(index); + }) + } + + /** + * 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件。 + * @param {number} index - 索引值。 + */ + notifyDataChange(index: number): void { + this.listeners.forEach(listener => { + listener.onDataChange(index); + }) + } + + /** + * 通知LazyForEach组件需要在index对应索引处删除该子组件 + * @param {number} index - 索引值。 + */ + notifyDataDelete(index: number): void { + this.listeners.forEach(listener => { + listener.onDataDelete(index); + }) + } + + /** + * 通知LazyForEach组件将from索引和to索引处的子组件进行交换 + * @param {number} from - 起始值。 + * @param {number} to - 终点值。 + */ + notifyDataMove(from: number, to: number): void { + this.listeners.forEach(listener => { + listener.onDataMove(from, to); + }) + } + + /** + * 改变单个数据。 + * @param {number} index - 索引值。 + * @param {CustomDataType} data - 修改后的值。 + */ + public addData(index: number, data: Month): void { + this.dataArray.splice(index, 0, data); + this.notifyDataAdd(index); + } + + /** + * 添加数据。 + * @param {CustomDataType} data - 需要添加的数据。 + */ + public pushData(data: Month): void { + this.dataArray.push(data); + this.notifyDataAdd(this.dataArray.length - 1); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/ReusePage.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/ReusePage.ets new file mode 100644 index 0000000000000000000000000000000000000000..dd39e128368efe113026a25e46595332c2dbf062 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Example4/ReusePage.ets @@ -0,0 +1,217 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import hilog from '@ohos.hilog' +import { getMonthDate } from './GetDate'; +import { Month, MonthDataSource } from './MonthDataSource'; +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Flex, + ItemAlign, + ForEach, + FlexWrap, + Entry, + TextAlign, + $r, + Color, + HorizontalAlign, + SafeAreaType, + Row, + LazyForEach, + SafeAreaEdge, + Span, + List, + EdgeEffect, + BarState, + Scroll, + Scroller, + ExpectedFrameRateRange, + ListItem +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { + State, + Link, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { Context, UIContext } from '@ohos.arkui.UIContext'; + +const MONDAY = '一'; +const TUESDAY = '二'; +const WEDNESDAY = '三'; +const THURSDAY = '四'; +const FRIDAY = '五'; +const SATURDAY = '六'; +const SUNDAY = '日'; +const WEEK: string[] = [SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY]; // 设置日历周,从周日开始 +const MONTH: string = '月'; +const YEAR: string = '年'; + +/** + * 通过组件复用,加载每个月份的数据,当数据量较多时,快速滑动到底部,会出现掉帧的情况。 + */ + +@Component +export struct ReusePage { + @State contentData: MonthDataSource = new MonthDataSource(); // 列表数据 + nowDate: Date = new Date(); + currentMonth: number = this.nowDate.getMonth() + 1; // 当前月份 + currentDay: number = this.nowDate.getDate(); // 当前日 + currentYear: number = this.nowDate.getFullYear(); // 当前年份 + currentWeekDay: number = new Date(this.currentYear, this.currentMonth - 1, this.currentDay).getDay(); // 当前周几 + private scroller: Scroller = new Scroller(); // 二级列表Scroller对象 + + // 初始化日历中一年的数据 + initCalenderData() { + for (let k = this.currentYear; k < 2035; ++k) { + for (let i = 1; i <= 12; i++) { + // 获取每个月的日数据 + const monthDays: number[] = getMonthDate(i, k); + const month: Month = { + month: i + MONTH, + num: i, + days: monthDays, + year: k + }; + this.contentData.pushData(month); + } + } + } + + aboutToAppear() { + this.initCalenderData(); + } + + build() { + Column() { + Text(this.currentYear + YEAR) + .width('100%') + .height(40) + .fontSize(20) + .fontColor(Color.Black) + .backgroundColor($r('app.color.highlyloadedcomponentrender_color_year_background')) + .textAlign(TextAlign.Center) + .id('id_highly_loaded_component_render_title') + List() { + LazyForEach(this.contentData, (monthItem: Month) => { + ListItem() { + ItemView({ + monthItem: monthItem, + currentMonth: this.currentMonth, + currentDay: this.currentDay, + currentYear: this.currentYear + }) + }.width('100%') + }) + } + .width('100%') + } + .width('100%') + .height('100%') + .backgroundColor($r('app.color.ohos_id_color_background')) + .alignItems(HorizontalAlign.Center) + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + } +} + +// @Reusable +@Component +struct ItemView { + @State monthItem: Month = { + month: '', + num: 0, + days: [], + year: 0 + } as Month; + private currentMonth: number = 0; + private currentYear: number = 0; // 当前年份 + private currentDay: number = 0; + private temp: Month[] = new Array(); + private step: number = 0; + private maxStep: number = 2; // 最多执行的帧数 + readonly MAX_EVERY_FRAME: number = 5; // 每帧最多处理的数据量 + @State month: string = ''; + @State monthNumber: number = 0; + @State days: number[] = new Array(); + @State year: number = 0; + + build() { + Flex({ wrap: FlexWrap.Wrap }) { + // 月份信息 + Text(this.monthItem.month) + .fontSize(25) + .height(40) + .fontColor(Color.Black) + .width('100%') + .textAlign(TextAlign.Start) + .layoutWeight(1) + + ForEach(WEEK, (weekday: string) => { + Text(weekday) + .fontSize(20) + .width(50) + .height(30) + .fontColor(weekday === SUNDAY || weekday === SATURDAY ? Color.Red : Color.Black) + .borderRadius(10) + .textAlign(TextAlign.Center) + .layoutWeight(1) + }) + // 日期信息 + ForEach(this.monthItem.days, (day: number, index: number) => { + Text() { + Span(JSON.stringify(day)) + .fontSize(20) + } + .height(50) + .width(50) + .opacity(day === 0 ? 0 : 1) + .fontColor(Color.Black) + .borderRadius(10) + .textAlign(TextAlign.Center) + .backgroundColor(day === this.currentDay && this.monthItem.num === this.currentMonth && + this.monthItem.year === this.currentYear ? + $r('app.color.ohos_id_color_palette9') : Color.Transparent) + .layoutWeight(1) + }) + } + .alignSelf(ItemAlign.Start) + .backgroundColor(Color.Transparent) + .width(350) + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Index.ets b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..e0b990e190e0f953208751c6153eea0ee95efe58 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,71 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import { Text, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView, Row, TextAlign, Visibility, + List, WordBreak,ListItem,TextInput, InputType,TextOverflow, Image, HorizontalAlign,Tabs,$r,TabContent, Progress, ProgressType} from '@ohos.arkui.component' // TextAttribute should be insert by ui-plugins +import { State, Link, StateDecoratedVariable, MutableState, stateOf, observableProxy } from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import hilog from '@ohos.hilog' +import common from '@ohos.app.ability.common'; +import {globalContext} from '../entryability/GlobalContext'; +import { Context,UIContext} from '@ohos.arkui.UIContext' + +@Component +struct MyStateSample { + private context :common.UIAbilityContext = globalContext.getAbilityContext(); + build() { + Column() { + Button($r('app.string.example4')) + .onClick((e: ClickEvent)=>{ + this.getUIContext().getRouter().pushUrl({url:'pages/Example4/Example4'}) + }).fontSize(18).margin(15).width('100%') + Button($r('app.string.example3')) + .onClick((e: ClickEvent)=>{ + this.getUIContext().getRouter().pushUrl({url:'pages/Example3/Example3'}) + }).fontSize(20).width('100%') + Button($r('app.string.example2')) + .onClick((e: ClickEvent)=>{ + this.getUIContext().getRouter().pushUrl({url:'pages/Example2/Example2'}) + }).fontSize(20).margin(15).width('100%') + Button($r('app.string.example1')) + .onClick((e: ClickEvent)=>{ + this.getUIContext().getRouter().pushUrl({url:'pages/Example1/Example1'}) + }).fontSize(20).width('100%') + } + .padding(15) + .width('100%') + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo () => { + hilog.info(0x0000, 'testTag', 'MyStateSample'); + MyStateSample(undefined) + } + return wrapper; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/module.json5 b/code/ArkTS1.2/ComponentSample/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..f95f9a6e69c03b1b6da379b36fc7aa9ee2c41ac4 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/module.json5 @@ -0,0 +1,64 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/color.json b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..2d7ab60c091671985af6c3d8bac9f4a567cbf694 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,88 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + }, + { + "name": "ohos_id_color_sub_background", + "value": "#F1F3F5" + }, + { + "name": "ohos_id_color_background", + "value": "#FFFFFF" + }, + { + "name": "ohos_id_color_warning", + "value": "#E84026" + }, + { + "name": "ohos_id_color_text_primary", + "value": "#E5000000" + }, + { + "name": "ohos_id_color_palette9", + "value": "#ED6F21" + }, + { + "name": "ohos_id_color_text_secondary", + "value": "#99000000" + }, + { + "name": "highlyloadedcomponentrender_color_year_background", + "value": "#33000000" + }, + { + "name": "dynamicattributes_white", + "value": "#FFFFFF" + }, + { + "name": "dynamicattributes_red", + "value": "#FF0000" + }, + { + "name": "dynamicattributes_orange", + "value": "#FF4500" + }, + { + "name": "dynamicattributes_buttonColor", + "value": "#EE7600" + }, + { + "name": "dynamicattributes_iconColor", + "value": "#B22222" + }, + { + "name": "dynamicattributes_imageColor", + "value": "#ccc" + }, + { + "name": "dynamicattributes_selectColor", + "value": "#FF8247" + }, + { + "name": "dynamicattributes_barColor", + "value": "#F5F5F5" + }, + { + "name": "calendar_switch_border_color", + "value": "#24A844" + }, + { + "name": "calendar_switch_segment_button_bgcolor", + "value": "#FFFEFEFE" + }, + { + "name": "calendar_switch_segment_button_font_color", + "value": "#4e4e4e" + }, + { + "name": "calendar_switch_segment_button_row_bgcolor", + "value": "#e7e7e7" + }, + { + "name": "calendar_switch_schedule_point_color", + "value": "#ffababab" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/float.json b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..5cccb549a0248f44ada3a242006b67d76db9c525 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/float.json @@ -0,0 +1,60 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + }, + { + "name": "dynamicattributes_float_1", + "value": "1vp" + }, + { + "name": "dynamicattributes_float_5", + "value": "5vp" + }, + { + "name": "dynamicattributes_float_10", + "value": "10vp" + }, + { + "name": "dynamicattributes_float_12", + "value": "12vp" + }, + { + "name": "dynamicattributes_float_15", + "value": "15vp" + }, + { + "name": "dynamicattributes_float_20", + "value": "20vp" + }, + { + "name": "dynamicattributes_float_25", + "value": "25vp" + }, + { + "name": "dynamicattributes_float_30", + "value": "30vp" + }, + { + "name": "dynamicattributes_float_50", + "value": "50vp" + }, + { + "name": "dynamicattributes_float_60", + "value": "60vp" + }, + { + "name": "dynamicattributes_float_90", + "value": "90" + }, + { + "name": "dynamicattributes_float_100", + "value": "100vp" + }, + { + "name": "dynamicattributes_float_160", + "value": "160vp" + } + ] +} diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/integer.json b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/integer.json new file mode 100644 index 0000000000000000000000000000000000000000..eb56fd598c3b9b1fe165e4f600a2e4ebab0fda39 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/integer.json @@ -0,0 +1,256 @@ +{ + "integer": [ + { + "name": "customcalendarpickerdialog_train_image_size", + "value": 20 + }, + { + "name": "customcalendarpickerdialog_check_button_height", + "value": 40 + }, + { + "name": "customcalendarpickerdialog_card_padding", + "value": 16 + }, + { + "name": "customcalendarpickerdialog_text_height", + "value": 40 + }, + { + "name": "customcalendarpickerdialog_month_text", + "value": 240 + }, + { + "name": "highlyloadedcomponentrender_list_padding_left", + "value": 10 + }, + { + "name": "highlyloadedcomponentrender_list_padding_right", + "value": 10 + }, + { + "name": "highlyloadedcomponentrender_column_padding_bottom", + "value": 12 + }, + { + "name": "highlyloadedcomponentrender_year_height", + "value": 40 + }, + { + "name": "highlyloadedcomponentrender_month_font_size", + "value": 25 + }, + { + "name": "highlyloadedcomponentrender_month_height", + "value": 40 + }, + { + "name": "highlyloadedcomponentrender_month_width", + "value": 350 + }, + { + "name": "highlyloadedcomponentrender_month_margin_top", + "value": 5 + }, + { + "name": "highlyloadedcomponentrender_week_font_size", + "value": 20 + }, + { + "name": "highlyloadedcomponentrender_year_font_size", + "value": 20 + }, + { + "name": "highlyloadedcomponentrender_week_height", + "value": 30 + }, + { + "name": "highlyloadedcomponentrender_week_width", + "value": 50 + }, + { + "name": "highlyloadedcomponentrender_week_border_radius", + "value": 10 + }, + { + "name": "highlyloadedcomponentrender_day_font_size", + "value": 20 + }, + { + "name": "highlyloadedcomponentrender_day_lunar_font_size", + "value": 15 + }, + { + "name": "highlyloadedcomponentrender_day_height", + "value": 50 + }, + { + "name": "highlyloadedcomponentrender_day_width", + "value": 50 + }, + { + "name": "highlyloadedcomponentrender_day_border_radius", + "value": 10 + }, + { + "name": "customreusablepool_title_view_padding_left_side", + "value": 20 + },{ + "name": "customreusablepool_title_view_padding_right_side", + "value": 20 + },{ + "name": "customreusablepool_title_view_padding_left", + "value": 10 + },{ + "name": "customreusablepool_title_view_padding_right", + "value": 10 + },{ + "name": "customreusablepool_title_view_list_height", + "value": 30 + },{ + "name": "customreusablepool_home_button_margin_top", + "value": 20 + },{ + "name": "customreusablepool_item_name_margin_top", + "value": 10 + },{ + "name": "customreusablepool_flow_item_comp_border_radius", + "value": 10 + },{ + "name": "customreusablepool_flow_item_comp_name_font_size", + "value": 14 + },{ + "name": "customreusablepool_flow_item_comp_des_font_size", + "value": 12 + },{ + "name": "customreusablepool_flow_swiper_height", + "value": 200 + },{ + "name": "customreusablepool_flow_columns_Gap", + "value": 10 + },{ + "name": "customreusablepool_flow_rows_Gap", + "value": 5 + }, + { + "name": "calendar_switch_size_forty", + "value":40 + }, + { + "name": "calendar_switch_size_ten", + "value":10 + }, + { + "name": "calendar_switch_size_twenty_five", + "value":25 + }, + { + "name": "calendar_switch_size_three", + "value":3 + }, + { + "name": "calendar_switch_size_four", + "value":4 + }, + { + "name": "calendar_switch_size_seven", + "value":7 + }, + { + "name": "calendar_switch_margin_left", + "value":6 + }, + { + "name": "calendar_switch_margin_bottom", + "value":5 + }, + { + "name": "calendar_switch_margin_size_twelve", + "value":12 + }, + { + "name": "calendar_switch_size_fifteen", + "value": 15 + }, + { + "name": "calendar_switch_columns_gap", + "value": 0 + }, + { + "name": "calendar_switch_rows_gap", + "value": 10 + }, + { + "name": "calendar_switch_size_thirty_five", + "value": 35 + }, + { + "name": "calendar_switch_size_fourteen", + "value": 14 + }, + { + "name": "calendar_switch_border_radius", + "value": 20 + }, + { + "name": "calendar_switch_zero", + "value": 0 + }, + { + "name": "calendar_switch_size_eighteen", + "value": 18 + }, + { + "name": "calendar_switch_size_twenty", + "value": 20 + }, + { + "name": "calendar_switch_size_thirty", + "value": 30 + }, + { + "name": "calendar_switch_size_forty_six", + "value": 46 + }, + { + "name": "calendar_switch_size_one", + "value": 1 + }, + { + "name": "calendar_switch_size_forty_eight", + "value": 48 + }, + { + "name": "calendar_switch_size_eighty", + "value": 80 + }, + { + "name": "calendar_switch_size_ninety", + "value": 90 + }, + { + "name": "calendar_switch_size_hundred", + "value": 100 + }, + { + "name": "calendar_switch_size_sixteen", + "value": 16 + }, + { + "name": "calendar_switch_size_twenty_two", + "value": 22 + }, + { + "name": "calendar_switch_size_eight", + "value": 8 + }, + { + "name": "calendar_switch_size_sixty", + "value": 60 + }, + { + "name": "calendar_switch_two_hundred_fifty", + "value": 250 + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/string.json b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..fe112d5f2eb100bb9a256e38497a0f05f47796cb --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,215 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "componentSampleTest" + }, + { + "name": "customcalendarpickerdialog_departure", + "value": "北京" + }, + { + "name": "customcalendarpickerdialog_destination", + "value": "上海" + }, + { + "name": "customcalendarpickerdialog_check_ticket", + "value": "检查车票" + }, + { + "name": "customcalendarpickerdialog_departure_date", + "value": "出发日期" + }, + { + "name": "customcalendarpickerdialog_button_text", + "value": "仅演示,可自行实现业务功能" + }, + { + "name": "customcalendarpickerdialog_week_width", + "value": "14.3%" + }, + { + "name": "customcalendarpickerdialog_calendar_height", + "value": "90%" + }, + { + "name": "ohos_id_text_size_body2", + "value": "14" + }, + { + "name": "ohos_id_corner_radius_default_l", + "value": "16" + }, + { + "name": "ohos_id_corner_radius_default_m", + "value": "12" + }, + { + "name": "ohos_id_text_size_headline", + "value": "20" + }, + { + "name": "ohos_id_text_size_body1", + "value": "14" + }, + { + "name": "percent_100", + "value": "100%" + }, + { + "name": "dynamicattributes_shopping_cart", + "value": "购物车" + },{ + "name": "dynamicattributes_store_name", + "value": "xxx旗舰店" + }, + { + "name": "dynamicattributes_commodity_name", + "value": "商品" + }, + { + "name": "dynamicattributes_commodity_model", + "value": "商品型号" + }, + { + "name": "dynamicattributes_commodity_price", + "value": "¥300" + }, + { + "name": "dynamicattributes_text", + "value": "文本" + }, + { + "name": "dynamicattributes_text_one", + "value": "文本1" + }, + { + "name": "dynamicattributes_text_two", + "value": "文本2" + }, + { + "name": "dynamicattributes_text_three", + "value": "文本3" + }, + { + "name": "dynamicattributes_full_reduction", + "value": "每满300减40" + }, + { + "name": "dynamicattributes_sold", + "value": "已售88" + }, + { + "name": "dynamicattributes_coupon_collection", + "value": "领券" + }, + { + "name": "dynamicattributes_buy_now", + "value": "立即购买" + }, + { + "name": "dynamicattributes_add_cart", + "value": "加入购物车" + }, + { + "name": "dynamicattributes_settlement", + "value": "结算" + }, + { + "name": "dynamicattributes_only_show", + "value": "此样式仅为案例展示" + }, + { + "name": "dynamicattributes_text_proportion", + "value": "40%" + }, + { + "name": "dynamicattributes_image_proportion", + "value": "60%" + }, + { + "name": "dynamicattributes_max_size", + "value": "100%" + }, + { + "name": "dynamicattributes_list_height", + "value": "calc(100% - 50vp)" + }, + { + "name": "customreusablepool_percent_100", + "value": "100%" + }, + { + "name": "customreusablepool_percent_60", + "value": "60%" + }, + { + "name": "customreusablepool_button_normal", + "value": "常规复用" + }, + { + "name": "customreusablepool_button_custom", + "value": "全局自定义组件复用池" + }, + { + "name": "customreusablepool_water_flow_background_color", + "value": "#FAEEE0" + }, + { + "name": "calendar_switch_full_size", + "value": "100%" + }, + { + "name": "calendar_switch_size_twenty_three", + "value": "23%" + }, + { + "name": "calendar_switch_size_twenty_five", + "value": "25%" + }, + { + "name": "calendar_switch_button_style", + "value": "20fp" + }, + { + "name": "calendar_switch_describe", + "value": "说明" + }, + { + "name": "secondarylinkage_secondary_link", + "value": "二级联动" + }, + { + "name": "secondarylinkage_secondary_link_desc", + "value": "当前界面主要展示了通过选择一个列表(一级列表),来更新另一个列表(二级列表)的选项的效果" + }, + { + "name": "secondarylinkage_nomore", + "value": "没有更多了" + }, + { + "name": "example1", + "value": "列表二级联动" + }, + { + "name": "example2", + "value": "自定义日历选择器" + }, + { + "name": "example3", + "value": "跨文件样式复用和组件复用" + }, + { + "name": "example4", + "value": "合理处理高负载组件的渲染文章示例代码" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/background.png b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/background.png differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example1.PNG b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example1.PNG new file mode 100644 index 0000000000000000000000000000000000000000..c8752a57e193034ae76e92c305dbf7107257185c Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example1.PNG differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example2.PNG b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example2.PNG new file mode 100644 index 0000000000000000000000000000000000000000..737d1927ff24eabc36a32bbe9701236874d63423 Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example2.PNG differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example3.PNG b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example3.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2cb413a6355d651de06603d7a641edb9452b5f96 Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example3.PNG differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example4.PNG b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example4.PNG new file mode 100644 index 0000000000000000000000000000000000000000..63541569adb03b5f45432a9ea578681ef215928e Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/example4.PNG differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/foreground.png b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..97014d3e10e5ff511409c378cd4255713aecd85f Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/foreground.png differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/icon.png b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a080ea61211d400b777aecb5e68667e898df5964 Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/icon.png differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/layered_image.json b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000000000000000000000000000000000000..fb49920440fb4d246c82f9ada275e26123a2136a --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:background", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/main.png b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/main.png new file mode 100644 index 0000000000000000000000000000000000000000..63ccfe01a130f56fb98b6b5e7c7e2f7223193827 Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/main.png differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/startIcon.png b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/startIcon.png differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/train_icon.png b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/train_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..44ed5a9bdbbda8701231fb067643a2f9451d03d1 Binary files /dev/null and b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/media/train_icon.png differ diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/profile/backup_config.json b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000000000000000000000000000000000..78f40ae7c494d71e2482278f359ec790ca73471a --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/profile/main_pages.json b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..1898d94f58d6128ab712be2c68acc7c98e9ab9ce --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/ArkTS1.2/ComponentSample/entry/src/main/resources/dark/element/color.json b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..79b11c2747aec33e710fd3a7b2b3c94dd9965499 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ComponentSample/hvigor/hvigor-config.json5 b/code/ArkTS1.2/ComponentSample/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..57c58e3641a0b085f39f7f137b9a938ecb20f2fd --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/hvigor/hvigor-config.json5 @@ -0,0 +1,49 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "modelVersion": "5.0.2", + "dependencies": { + "@ohos/hvigor-ohos-online-sign-plugin": "4.0.2" + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/ArkTS1.2/ComponentSample/hvigorfile.ts b/code/ArkTS1.2/ComponentSample/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f435606b5766719f7203539113d84a2b281b0353 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ComponentSample/oh-package.json5 b/code/ArkTS1.2/ComponentSample/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..e31dcff151dbff2d8d883823b5de6609fd8c5c28 --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/oh-package.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "modelVersion": "5.0.2", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.21", + "@ohos/hamock": "1.0.0" + } +} diff --git a/code/ArkTS1.2/ComponentSample/ohosTest.md b/code/ArkTS1.2/ComponentSample/ohosTest.md new file mode 100644 index 0000000000000000000000000000000000000000..6934f2657f7f73cb19be54c6f9b0663429d01ecf --- /dev/null +++ b/code/ArkTS1.2/ComponentSample/ohosTest.md @@ -0,0 +1,10 @@ +# 组件复用案例测试用例 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +|-----------------------------------|-------------------------------------|----------------------|------------------------------------|------|------| +| 页面滑动是否正常显示 | 1. 需在真机测试
2. 构建并安装测试hap
3.进入【合理处理高负载组件的渲染文章示例代码】| 在页面上上下滑动 | 页面显示当前年份和日历列表,列表可以正常滑动 | 否 | Pass | +| 购物车页面的list列表跳转商品详情页 | 1. 需在真机测试
2. 构建并安装测试hap
3.进入【跨文件样式复用和组件复用案例】| 点击购物车页面的list列表 | 跳转商品详情页 | 否 | Pass | +| 日历面板切换显示 | 1. 需在真机测试
2. 构建并安装测试hap
3.进入【自定义日历选择器案例】| 1、点击日期时间
2、上下滑动日历
3、点击日期| 1、下方显示近两个月的日期面板,默认当天高亮显示
2、日历数据刷新显示,无卡顿
3、日期面板消失,主页日期变更为选择的日期,当天以前的日期无法点击选中 | 否 | Pass | +| 列表二级联动 | 1. 需在真机测试
2. 构建并安装测试hap
3.进入【列表二级联动】| 1、点击一级列表类别3
2、滑动二级列表到类别5 | 1、二级列表滚动到类别3
2、一级列表选中类别5| 否 | Pass | \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/.gitignore b/code/ArkTS1.2/ModuleSample/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d2ff20141ceed86d87c0ea5d99481973005bab2b --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/AppScope/app.json5 b/code/ArkTS1.2/ModuleSample/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..cdd1a5787752af6705758af1814af2c9707e0879 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.samples.modulesample", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/ArkTS1.2/ModuleSample/AppScope/resources/base/element/string.json b/code/ArkTS1.2/ModuleSample/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..ccf7946f11e6c6a570c43737e992046e0bb6a95e --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "ModuleSample" + } + ] +} diff --git a/code/ArkTS1.2/ModuleSample/AppScope/resources/base/media/app_icon.png b/code/ArkTS1.2/ModuleSample/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 Binary files /dev/null and b/code/ArkTS1.2/ModuleSample/AppScope/resources/base/media/app_icon.png differ diff --git a/code/ArkTS1.2/ModuleSample/build-profile.json5 b/code/ArkTS1.2/ModuleSample/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..daf68e32f799c00a252c48351cc0f1728af610f0 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/build-profile.json5 @@ -0,0 +1,46 @@ +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "arkTSVersion": "1.2", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + }, + { + "name": "importHar", + "srcPath": "./importHar", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/code-linter.json5 b/code/ArkTS1.2/ModuleSample/code-linter.json5 new file mode 100644 index 0000000000000000000000000000000000000000..073990fa45394e1f8e85d85418ee60a8953f9b99 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/code-linter.json5 @@ -0,0 +1,32 @@ +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@security/no-unsafe-aes": "error", + "@security/no-unsafe-hash": "error", + "@security/no-unsafe-mac": "warn", + "@security/no-unsafe-dh": "error", + "@security/no-unsafe-dsa": "error", + "@security/no-unsafe-ecdsa": "error", + "@security/no-unsafe-rsa-encrypt": "error", + "@security/no-unsafe-rsa-sign": "error", + "@security/no-unsafe-rsa-key": "error", + "@security/no-unsafe-dsa-key": "error", + "@security/no-unsafe-dh-key": "error", + "@security/no-unsafe-3des": "error" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/.gitignore b/code/ArkTS1.2/ModuleSample/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/build-profile.json5 b/code/ArkTS1.2/ModuleSample/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..8ac81840b69fd7c78c2024c6570ed01e4292cf6d --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/build-profile.json5 @@ -0,0 +1,29 @@ +{ + "apiType": "stageMode", + "arkTSVersion": "1.2", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/hvigorfile.ts b/code/ArkTS1.2/ModuleSample/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..c6edcd90486dd5a853cf7d34c8647f08414ca7a3 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ModuleSample/entry/obfuscation-rules.txt b/code/ArkTS1.2/ModuleSample/entry/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/oh-package.json5 b/code/ArkTS1.2/ModuleSample/entry/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..93573fec95ec2a32332e855b6bb1d70aa255bb0d --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/oh-package.json5 @@ -0,0 +1,12 @@ +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + "importhar": "file:../importHar" + } +} + diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..b892d18a00d879e20ee20840d94a2e06f10ae1c5 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,31 @@ +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import { BusinessError } from '@ohos.base'; +import hilog from '@ohos.hilog'; +import { MyCallback } from '../models/MyCallback'; + + +class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onCreate'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onWindowStageCreate'); + try { + windowStage.loadContent('pages/Index', (err: BusinessError): void => { + hilog.info(0x0000, 'testTag', 'loadContent entering'); + MyCallback.runCasesOfCallback(); + if (err.code) { + hilog.info(0x0000, 'testTag', 'loadContent error'); + return; + } + hilog.info(0x0000, 'testTag', 'loadContent ok'); + }); + } catch (e: Error) { + hilog.info(0x0000, 'testTag', 'loadContent catch error:-----------' + e.message); + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/models/MyCallback.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/models/MyCallback.ets new file mode 100644 index 0000000000000000000000000000000000000000..5827b846dc824ef26c25e0a8612717cb7b448a3a --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/models/MyCallback.ets @@ -0,0 +1,38 @@ +import { AsyncCallback, BusinessError, Callback, ErrorCallback } from '@ohos.base'; +import hilog from '@ohos.hilog'; + +const SYNTAX_ERROR_CODE: double = 1002; + +export class MyCallback { + static myCallback(callback: Callback): void { + hilog.info(0x0000, 'testTag', 'myCallback'); + callback('myCallback'); + } + + static myAsyncCallback(callback: AsyncCallback): void { + hilog.info(0x0000, 'testTag', 'myAsyncCallback'); + let error = new Error('Business Error', 'basicError2 message', undefined); + let be2: BusinessError = new BusinessError(SYNTAX_ERROR_CODE, error); + callback(be2, 'yAsyncCallback'); + } + + static myErrorCallback(callback: ErrorCallback>): void { + hilog.info(0x0000, 'testTag', 'myErrorCallback'); + let error = new Error('Business Error', 'myErrorCallback message', undefined); + let result: string = 'test'; + let be: BusinessError = new BusinessError(SYNTAX_ERROR_CODE, result, error); + callback(be); + } + + static runCasesOfCallback() { + MyCallback.myCallback((data: string) => { + hilog.info(0x0000, 'testTag', 'MyCallback' + data); + }) + MyCallback.myAsyncCallback((error: BusinessError, result: string) => { + hilog.info(0x0000, 'testTag', `myAsyncCallback, error: ${error.message}, result:${result}`); + }) + MyCallback.myErrorCallback((error: BusinessError) => { + hilog.info(0x0000, 'testTag', `myAsyncCallback, error: ${error.message}`); + }) + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/Index.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..a387639744400a8d8761409110ce0f01f517ab85 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,48 @@ +import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import { Text, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView } from '@ohos.arkui.component' // TextAttribute should be insert by ui-plugins +import { State, StateDecoratedVariable, MutableState, stateOf, observableProxy } from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import hilog from '@ohos.hilog' +import { Mod1 } from './mod/mod1' +import { Mod2 } from './mod/mod2'; +import { A, E } from './mod/mod3'; +import { ExportSmallClassTest } from './mod/mod4' +import { ExportSmallClass } from './mod/mod5' +import { Har } from 'importhar' + + +@Component +struct MyStateSample { + aboutToAppear() { + hilog.info(0x0000, 'testTag', 'executeModule modTest start'); + let mod1 = new Mod1; + let mod2 = new Mod2; + let modA = new A(); + let modE = new E(); + hilog.info(0x0000, 'testTag', 'executeModule E.count:' + E.count); + let mod5 = new ExportSmallClass(); + hilog.info(0x0000, 'testTag', 'executeModule ExportSmallClass.isExportOtherClass:' + ExportSmallClass.isExportOtherClass); + let har: Har = new Har(); + } + @State stateVar: string = 'state var'; + message: string = 'var'; + build() { + Column(undefined) { + Button(this.message).backgroundColor('#FFFF00FF') + .onClick((e: ClickEvent) => { + hilog.info(0x0000, 'testTag', 'On Click'); + }) + Text(this.stateVar).fontSize(20) + } + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo () => { + hilog.info(0x0000, 'testTag', 'MyStateSample'); + MyStateSample(undefined) + } + return wrapper + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod1.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod1.ets new file mode 100644 index 0000000000000000000000000000000000000000..822a00deaaf736794c7cd99a3ec3d34dbea57ac9 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod1.ets @@ -0,0 +1,8 @@ +import hilog from '@ohos.hilog' +export class Mod1 { + nna: string = ''; + static { + hilog.info(0x0000, 'testTag', 'executeModule mod mod1'); + } +} +hilog.info(0x0000, 'testTag', 'executeModule import 顶层语句'); \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod2.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod2.ets new file mode 100644 index 0000000000000000000000000000000000000000..3c5c83d3c055f4ff6e66215cf6c42d9fb90da068 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod2.ets @@ -0,0 +1,8 @@ +import hilog from '@ohos.hilog' +export class Mod2 { + name: string = ''; + static { + hilog.info(0x0000, 'testTag', 'executeModule mod2'); + } +} +hilog.info(0x0000, 'testTag', 'executeModule export 顶层语句'); \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod3.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod3.ets new file mode 100644 index 0000000000000000000000000000000000000000..6a6a370f8b742cd873b8f19ff639ac61e466e7da --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod3.ets @@ -0,0 +1,36 @@ +import hilog from '@ohos.hilog' +export class A { + static count = 1; + static { + hilog.info(0x0000, 'testTag', 'executeModule execute A'); + } +} +A.count = 101; +export class B { + static count = 0; + static { + B.count = ++A.count; + hilog.info(0x0000, 'testTag', 'executeModule execute B'); + } +} +export class C { + static count = 0; + static { + C.count = ++A.count; + hilog.info(0x0000, 'testTag', 'executeModule execute C'); + } +} +export class D { + static count = 0; + static { + D.count = ++A.count; + hilog.info(0x0000, 'testTag', 'executeModule execute D'); + } +} +export class E { + static count = 0; + static { + E.count = ++A.count; + hilog.info(0x0000, 'testTag', 'executeModule execute E'); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod4.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod4.ets new file mode 100644 index 0000000000000000000000000000000000000000..965019320a819e761993065c55848e74e0f2e28b --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod4.ets @@ -0,0 +1,10 @@ +import hilog from '@ohos.hilog' +export class ExportSmallClassTest { + static exportTime: double = 0; + static isExportOtherClass = false; + static { + ExportSmallClassTest.exportTime = Date.now(); + hilog.info(0x0000, 'testTag', 'executeModule mod4 smallclass'); + } + static na = 'zhangsan'; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod5.ets b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod5.ets new file mode 100644 index 0000000000000000000000000000000000000000..d973bb56cd52db8bc5c1e40cdea8453ccbbdbf6f --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/ets/pages/mod/mod5.ets @@ -0,0 +1,15018 @@ +import hilog from '@ohos.hilog' +export class ExportSmallClass { + static exportTime: double = 0; + static isExportOtherClass = false; + static { + ExportSmallClass.exportTime = Date.now(); + hilog.info(0x0000, 'testTag', 'executeModule mod5 smallclass'); + } + static na = 'zhangsan'; +} +export class ExportBigClass { + static exportTime: double = 0; + static { + ExportBigClass.exportTime = Date.now(); + ExportSmallClass.isExportOtherClass = true; + hilog.info(0x0000, 'testTag', 'executeModule mod5 bigclass'); + } + static attribute_0 = 0; + static attribute_1 = 1; + static attribute_2 = 2; + static attribute_3 = 3; + static attribute_4 = 4; + static attribute_5 = 5; + static attribute_6 = 6; + static attribute_7 = 7; + static attribute_8 = 8; + static attribute_9 = 9; + static attribute_10 = 10; + static attribute_11 = 11; + static attribute_12 = 12; + static attribute_13 = 13; + static attribute_14 = 14; + static attribute_15 = 15; + static attribute_16 = 16; + static attribute_17 = 17; + static attribute_18 = 18; + static attribute_19 = 19; + static attribute_20 = 20; + static attribute_21 = 21; + static attribute_22 = 22; + static attribute_23 = 23; + static attribute_24 = 24; + static attribute_25 = 25; + static attribute_26 = 26; + static attribute_27 = 27; + static attribute_28 = 28; + static attribute_29 = 29; + static attribute_30 = 30; + static attribute_31 = 31; + static attribute_32 = 32; + static attribute_33 = 33; + static attribute_34 = 34; + static attribute_35 = 35; + static attribute_36 = 36; + static attribute_37 = 37; + static attribute_38 = 38; + static attribute_39 = 39; + static attribute_40 = 40; + static attribute_41 = 41; + static attribute_42 = 42; + static attribute_43 = 43; + static attribute_44 = 44; + static attribute_45 = 45; + static attribute_46 = 46; + static attribute_47 = 47; + static attribute_48 = 48; + static attribute_49 = 49; + static attribute_50 = 50; + static attribute_51 = 51; + static attribute_52 = 52; + static attribute_53 = 53; + static attribute_54 = 54; + static attribute_55 = 55; + static attribute_56 = 56; + static attribute_57 = 57; + static attribute_58 = 58; + static attribute_59 = 59; + static attribute_60 = 60; + static attribute_61 = 61; + static attribute_62 = 62; + static attribute_63 = 63; + static attribute_64 = 64; + static attribute_65 = 65; + static attribute_66 = 66; + static attribute_67 = 67; + static attribute_68 = 68; + static attribute_69 = 69; + static attribute_70 = 70; + static attribute_71 = 71; + static attribute_72 = 72; + static attribute_73 = 73; + static attribute_74 = 74; + static attribute_75 = 75; + static attribute_76 = 76; + static attribute_77 = 77; + static attribute_78 = 78; + static attribute_79 = 79; + static attribute_80 = 80; + static attribute_81 = 81; + static attribute_82 = 82; + static attribute_83 = 83; + static attribute_84 = 84; + static attribute_85 = 85; + static attribute_86 = 86; + static attribute_87 = 87; + static attribute_88 = 88; + static attribute_89 = 89; + static attribute_90 = 90; + static attribute_91 = 91; + static attribute_92 = 92; + static attribute_93 = 93; + static attribute_94 = 94; + static attribute_95 = 95; + static attribute_96 = 96; + static attribute_97 = 97; + static attribute_98 = 98; + static attribute_99 = 99; + static attribute_100 = 100; + static attribute_101 = 101; + static attribute_102 = 102; + static attribute_103 = 103; + static attribute_104 = 104; + static attribute_105 = 105; + static attribute_106 = 106; + static attribute_107 = 107; + static attribute_108 = 108; + static attribute_109 = 109; + static attribute_110 = 110; + static attribute_111 = 111; + static attribute_112 = 112; + static attribute_113 = 113; + static attribute_114 = 114; + static attribute_115 = 115; + static attribute_116 = 116; + static attribute_117 = 117; + static attribute_118 = 118; + static attribute_119 = 119; + static attribute_120 = 120; + static attribute_121 = 121; + static attribute_122 = 122; + static attribute_123 = 123; + static attribute_124 = 124; + static attribute_125 = 125; + static attribute_126 = 126; + static attribute_127 = 127; + static attribute_128 = 128; + static attribute_129 = 129; + static attribute_130 = 130; + static attribute_131 = 131; + static attribute_132 = 132; + static attribute_133 = 133; + static attribute_134 = 134; + static attribute_135 = 135; + static attribute_136 = 136; + static attribute_137 = 137; + static attribute_138 = 138; + static attribute_139 = 139; + static attribute_140 = 140; + static attribute_141 = 141; + static attribute_142 = 142; + static attribute_143 = 143; + static attribute_144 = 144; + static attribute_145 = 145; + static attribute_146 = 146; + static attribute_147 = 147; + static attribute_148 = 148; + static attribute_149 = 149; + static attribute_150 = 150; + static attribute_151 = 151; + static attribute_152 = 152; + static attribute_153 = 153; + static attribute_154 = 154; + static attribute_155 = 155; + static attribute_156 = 156; + static attribute_157 = 157; + static attribute_158 = 158; + static attribute_159 = 159; + static attribute_160 = 160; + static attribute_161 = 161; + static attribute_162 = 162; + static attribute_163 = 163; + static attribute_164 = 164; + static attribute_165 = 165; + static attribute_166 = 166; + static attribute_167 = 167; + static attribute_168 = 168; + static attribute_169 = 169; + static attribute_170 = 170; + static attribute_171 = 171; + static attribute_172 = 172; + static attribute_173 = 173; + static attribute_174 = 174; + static attribute_175 = 175; + static attribute_176 = 176; + static attribute_177 = 177; + static attribute_178 = 178; + static attribute_179 = 179; + static attribute_180 = 180; + static attribute_181 = 181; + static attribute_182 = 182; + static attribute_183 = 183; + static attribute_184 = 184; + static attribute_185 = 185; + static attribute_186 = 186; + static attribute_187 = 187; + static attribute_188 = 188; + static attribute_189 = 189; + static attribute_190 = 190; + static attribute_191 = 191; + static attribute_192 = 192; + static attribute_193 = 193; + static attribute_194 = 194; + static attribute_195 = 195; + static attribute_196 = 196; + static attribute_197 = 197; + static attribute_198 = 198; + static attribute_199 = 199; + static attribute_200 = 200; + static attribute_201 = 201; + static attribute_202 = 202; + static attribute_203 = 203; + static attribute_204 = 204; + static attribute_205 = 205; + static attribute_206 = 206; + static attribute_207 = 207; + static attribute_208 = 208; + static attribute_209 = 209; + static attribute_210 = 210; + static attribute_211 = 211; + static attribute_212 = 212; + static attribute_213 = 213; + static attribute_214 = 214; + static attribute_215 = 215; + static attribute_216 = 216; + static attribute_217 = 217; + static attribute_218 = 218; + static attribute_219 = 219; + static attribute_220 = 220; + static attribute_221 = 221; + static attribute_222 = 222; + static attribute_223 = 223; + static attribute_224 = 224; + static attribute_225 = 225; + static attribute_226 = 226; + static attribute_227 = 227; + static attribute_228 = 228; + static attribute_229 = 229; + static attribute_230 = 230; + static attribute_231 = 231; + static attribute_232 = 232; + static attribute_233 = 233; + static attribute_234 = 234; + static attribute_235 = 235; + static attribute_236 = 236; + static attribute_237 = 237; + static attribute_238 = 238; + static attribute_239 = 239; + static attribute_240 = 240; + static attribute_241 = 241; + static attribute_242 = 242; + static attribute_243 = 243; + static attribute_244 = 244; + static attribute_245 = 245; + static attribute_246 = 246; + static attribute_247 = 247; + static attribute_248 = 248; + static attribute_249 = 249; + static attribute_250 = 250; + static attribute_251 = 251; + static attribute_252 = 252; + static attribute_253 = 253; + static attribute_254 = 254; + static attribute_255 = 255; + static attribute_256 = 256; + static attribute_257 = 257; + static attribute_258 = 258; + static attribute_259 = 259; + static attribute_260 = 260; + static attribute_261 = 261; + static attribute_262 = 262; + static attribute_263 = 263; + static attribute_264 = 264; + static attribute_265 = 265; + static attribute_266 = 266; + static attribute_267 = 267; + static attribute_268 = 268; + static attribute_269 = 269; + static attribute_270 = 270; + static attribute_271 = 271; + static attribute_272 = 272; + static attribute_273 = 273; + static attribute_274 = 274; + static attribute_275 = 275; + static attribute_276 = 276; + static attribute_277 = 277; + static attribute_278 = 278; + static attribute_279 = 279; + static attribute_280 = 280; + static attribute_281 = 281; + static attribute_282 = 282; + static attribute_283 = 283; + static attribute_284 = 284; + static attribute_285 = 285; + static attribute_286 = 286; + static attribute_287 = 287; + static attribute_288 = 288; + static attribute_289 = 289; + static attribute_290 = 290; + static attribute_291 = 291; + static attribute_292 = 292; + static attribute_293 = 293; + static attribute_294 = 294; + static attribute_295 = 295; + static attribute_296 = 296; + static attribute_297 = 297; + static attribute_298 = 298; + static attribute_299 = 299; + static attribute_300 = 300; + static attribute_301 = 301; + static attribute_302 = 302; + static attribute_303 = 303; + static attribute_304 = 304; + static attribute_305 = 305; + static attribute_306 = 306; + static attribute_307 = 307; + static attribute_308 = 308; + static attribute_309 = 309; + static attribute_310 = 310; + static attribute_311 = 311; + static attribute_312 = 312; + static attribute_313 = 313; + static attribute_314 = 314; + static attribute_315 = 315; + static attribute_316 = 316; + static attribute_317 = 317; + static attribute_318 = 318; + static attribute_319 = 319; + static attribute_320 = 320; + static attribute_321 = 321; + static attribute_322 = 322; + static attribute_323 = 323; + static attribute_324 = 324; + static attribute_325 = 325; + static attribute_326 = 326; + static attribute_327 = 327; + static attribute_328 = 328; + static attribute_329 = 329; + static attribute_330 = 330; + static attribute_331 = 331; + static attribute_332 = 332; + static attribute_333 = 333; + static attribute_334 = 334; + static attribute_335 = 335; + static attribute_336 = 336; + static attribute_337 = 337; + static attribute_338 = 338; + static attribute_339 = 339; + static attribute_340 = 340; + static attribute_341 = 341; + static attribute_342 = 342; + static attribute_343 = 343; + static attribute_344 = 344; + static attribute_345 = 345; + static attribute_346 = 346; + static attribute_347 = 347; + static attribute_348 = 348; + static attribute_349 = 349; + static attribute_350 = 350; + static attribute_351 = 351; + static attribute_352 = 352; + static attribute_353 = 353; + static attribute_354 = 354; + static attribute_355 = 355; + static attribute_356 = 356; + static attribute_357 = 357; + static attribute_358 = 358; + static attribute_359 = 359; + static attribute_360 = 360; + static attribute_361 = 361; + static attribute_362 = 362; + static attribute_363 = 363; + static attribute_364 = 364; + static attribute_365 = 365; + static attribute_366 = 366; + static attribute_367 = 367; + static attribute_368 = 368; + static attribute_369 = 369; + static attribute_370 = 370; + static attribute_371 = 371; + static attribute_372 = 372; + static attribute_373 = 373; + static attribute_374 = 374; + static attribute_375 = 375; + static attribute_376 = 376; + static attribute_377 = 377; + static attribute_378 = 378; + static attribute_379 = 379; + static attribute_380 = 380; + static attribute_381 = 381; + static attribute_382 = 382; + static attribute_383 = 383; + static attribute_384 = 384; + static attribute_385 = 385; + static attribute_386 = 386; + static attribute_387 = 387; + static attribute_388 = 388; + static attribute_389 = 389; + static attribute_390 = 390; + static attribute_391 = 391; + static attribute_392 = 392; + static attribute_393 = 393; + static attribute_394 = 394; + static attribute_395 = 395; + static attribute_396 = 396; + static attribute_397 = 397; + static attribute_398 = 398; + static attribute_399 = 399; + static attribute_400 = 400; + static attribute_401 = 401; + static attribute_402 = 402; + static attribute_403 = 403; + static attribute_404 = 404; + static attribute_405 = 405; + static attribute_406 = 406; + static attribute_407 = 407; + static attribute_408 = 408; + static attribute_409 = 409; + static attribute_410 = 410; + static attribute_411 = 411; + static attribute_412 = 412; + static attribute_413 = 413; + static attribute_414 = 414; + static attribute_415 = 415; + static attribute_416 = 416; + static attribute_417 = 417; + static attribute_418 = 418; + static attribute_419 = 419; + static attribute_420 = 420; + static attribute_421 = 421; + static attribute_422 = 422; + static attribute_423 = 423; + static attribute_424 = 424; + static attribute_425 = 425; + static attribute_426 = 426; + static attribute_427 = 427; + static attribute_428 = 428; + static attribute_429 = 429; + static attribute_430 = 430; + static attribute_431 = 431; + static attribute_432 = 432; + static attribute_433 = 433; + static attribute_434 = 434; + static attribute_435 = 435; + static attribute_436 = 436; + static attribute_437 = 437; + static attribute_438 = 438; + static attribute_439 = 439; + static attribute_440 = 440; + static attribute_441 = 441; + static attribute_442 = 442; + static attribute_443 = 443; + static attribute_444 = 444; + static attribute_445 = 445; + static attribute_446 = 446; + static attribute_447 = 447; + static attribute_448 = 448; + static attribute_449 = 449; + static attribute_450 = 450; + static attribute_451 = 451; + static attribute_452 = 452; + static attribute_453 = 453; + static attribute_454 = 454; + static attribute_455 = 455; + static attribute_456 = 456; + static attribute_457 = 457; + static attribute_458 = 458; + static attribute_459 = 459; + static attribute_460 = 460; + static attribute_461 = 461; + static attribute_462 = 462; + static attribute_463 = 463; + static attribute_464 = 464; + static attribute_465 = 465; + static attribute_466 = 466; + static attribute_467 = 467; + static attribute_468 = 468; + static attribute_469 = 469; + static attribute_470 = 470; + static attribute_471 = 471; + static attribute_472 = 472; + static attribute_473 = 473; + static attribute_474 = 474; + static attribute_475 = 475; + static attribute_476 = 476; + static attribute_477 = 477; + static attribute_478 = 478; + static attribute_479 = 479; + static attribute_480 = 480; + static attribute_481 = 481; + static attribute_482 = 482; + static attribute_483 = 483; + static attribute_484 = 484; + static attribute_485 = 485; + static attribute_486 = 486; + static attribute_487 = 487; + static attribute_488 = 488; + static attribute_489 = 489; + static attribute_490 = 490; + static attribute_491 = 491; + static attribute_492 = 492; + static attribute_493 = 493; + static attribute_494 = 494; + static attribute_495 = 495; + static attribute_496 = 496; + static attribute_497 = 497; + static attribute_498 = 498; + static attribute_499 = 499; + static attribute_500 = 500; + static attribute_501 = 501; + static attribute_502 = 502; + static attribute_503 = 503; + static attribute_504 = 504; + static attribute_505 = 505; + static attribute_506 = 506; + static attribute_507 = 507; + static attribute_508 = 508; + static attribute_509 = 509; + static attribute_510 = 510; + static attribute_511 = 511; + static attribute_512 = 512; + static attribute_513 = 513; + static attribute_514 = 514; + static attribute_515 = 515; + static attribute_516 = 516; + static attribute_517 = 517; + static attribute_518 = 518; + static attribute_519 = 519; + static attribute_520 = 520; + static attribute_521 = 521; + static attribute_522 = 522; + static attribute_523 = 523; + static attribute_524 = 524; + static attribute_525 = 525; + static attribute_526 = 526; + static attribute_527 = 527; + static attribute_528 = 528; + static attribute_529 = 529; + static attribute_530 = 530; + static attribute_531 = 531; + static attribute_532 = 532; + static attribute_533 = 533; + static attribute_534 = 534; + static attribute_535 = 535; + static attribute_536 = 536; + static attribute_537 = 537; + static attribute_538 = 538; + static attribute_539 = 539; + static attribute_540 = 540; + static attribute_541 = 541; + static attribute_542 = 542; + static attribute_543 = 543; + static attribute_544 = 544; + static attribute_545 = 545; + static attribute_546 = 546; + static attribute_547 = 547; + static attribute_548 = 548; + static attribute_549 = 549; + static attribute_550 = 550; + static attribute_551 = 551; + static attribute_552 = 552; + static attribute_553 = 553; + static attribute_554 = 554; + static attribute_555 = 555; + static attribute_556 = 556; + static attribute_557 = 557; + static attribute_558 = 558; + static attribute_559 = 559; + static attribute_560 = 560; + static attribute_561 = 561; + static attribute_562 = 562; + static attribute_563 = 563; + static attribute_564 = 564; + static attribute_565 = 565; + static attribute_566 = 566; + static attribute_567 = 567; + static attribute_568 = 568; + static attribute_569 = 569; + static attribute_570 = 570; + static attribute_571 = 571; + static attribute_572 = 572; + static attribute_573 = 573; + static attribute_574 = 574; + static attribute_575 = 575; + static attribute_576 = 576; + static attribute_577 = 577; + static attribute_578 = 578; + static attribute_579 = 579; + static attribute_580 = 580; + static attribute_581 = 581; + static attribute_582 = 582; + static attribute_583 = 583; + static attribute_584 = 584; + static attribute_585 = 585; + static attribute_586 = 586; + static attribute_587 = 587; + static attribute_588 = 588; + static attribute_589 = 589; + static attribute_590 = 590; + static attribute_591 = 591; + static attribute_592 = 592; + static attribute_593 = 593; + static attribute_594 = 594; + static attribute_595 = 595; + static attribute_596 = 596; + static attribute_597 = 597; + static attribute_598 = 598; + static attribute_599 = 599; + static attribute_600 = 600; + static attribute_601 = 601; + static attribute_602 = 602; + static attribute_603 = 603; + static attribute_604 = 604; + static attribute_605 = 605; + static attribute_606 = 606; + static attribute_607 = 607; + static attribute_608 = 608; + static attribute_609 = 609; + static attribute_610 = 610; + static attribute_611 = 611; + static attribute_612 = 612; + static attribute_613 = 613; + static attribute_614 = 614; + static attribute_615 = 615; + static attribute_616 = 616; + static attribute_617 = 617; + static attribute_618 = 618; + static attribute_619 = 619; + static attribute_620 = 620; + static attribute_621 = 621; + static attribute_622 = 622; + static attribute_623 = 623; + static attribute_624 = 624; + static attribute_625 = 625; + static attribute_626 = 626; + static attribute_627 = 627; + static attribute_628 = 628; + static attribute_629 = 629; + static attribute_630 = 630; + static attribute_631 = 631; + static attribute_632 = 632; + static attribute_633 = 633; + static attribute_634 = 634; + static attribute_635 = 635; + static attribute_636 = 636; + static attribute_637 = 637; + static attribute_638 = 638; + static attribute_639 = 639; + static attribute_640 = 640; + static attribute_641 = 641; + static attribute_642 = 642; + static attribute_643 = 643; + static attribute_644 = 644; + static attribute_645 = 645; + static attribute_646 = 646; + static attribute_647 = 647; + static attribute_648 = 648; + static attribute_649 = 649; + static attribute_650 = 650; + static attribute_651 = 651; + static attribute_652 = 652; + static attribute_653 = 653; + static attribute_654 = 654; + static attribute_655 = 655; + static attribute_656 = 656; + static attribute_657 = 657; + static attribute_658 = 658; + static attribute_659 = 659; + static attribute_660 = 660; + static attribute_661 = 661; + static attribute_662 = 662; + static attribute_663 = 663; + static attribute_664 = 664; + static attribute_665 = 665; + static attribute_666 = 666; + static attribute_667 = 667; + static attribute_668 = 668; + static attribute_669 = 669; + static attribute_670 = 670; + static attribute_671 = 671; + static attribute_672 = 672; + static attribute_673 = 673; + static attribute_674 = 674; + static attribute_675 = 675; + static attribute_676 = 676; + static attribute_677 = 677; + static attribute_678 = 678; + static attribute_679 = 679; + static attribute_680 = 680; + static attribute_681 = 681; + static attribute_682 = 682; + static attribute_683 = 683; + static attribute_684 = 684; + static attribute_685 = 685; + static attribute_686 = 686; + static attribute_687 = 687; + static attribute_688 = 688; + static attribute_689 = 689; + static attribute_690 = 690; + static attribute_691 = 691; + static attribute_692 = 692; + static attribute_693 = 693; + static attribute_694 = 694; + static attribute_695 = 695; + static attribute_696 = 696; + static attribute_697 = 697; + static attribute_698 = 698; + static attribute_699 = 699; + static attribute_700 = 700; + static attribute_701 = 701; + static attribute_702 = 702; + static attribute_703 = 703; + static attribute_704 = 704; + static attribute_705 = 705; + static attribute_706 = 706; + static attribute_707 = 707; + static attribute_708 = 708; + static attribute_709 = 709; + static attribute_710 = 710; + static attribute_711 = 711; + static attribute_712 = 712; + static attribute_713 = 713; + static attribute_714 = 714; + static attribute_715 = 715; + static attribute_716 = 716; + static attribute_717 = 717; + static attribute_718 = 718; + static attribute_719 = 719; + static attribute_720 = 720; + static attribute_721 = 721; + static attribute_722 = 722; + static attribute_723 = 723; + static attribute_724 = 724; + static attribute_725 = 725; + static attribute_726 = 726; + static attribute_727 = 727; + static attribute_728 = 728; + static attribute_729 = 729; + static attribute_730 = 730; + static attribute_731 = 731; + static attribute_732 = 732; + static attribute_733 = 733; + static attribute_734 = 734; + static attribute_735 = 735; + static attribute_736 = 736; + static attribute_737 = 737; + static attribute_738 = 738; + static attribute_739 = 739; + static attribute_740 = 740; + static attribute_741 = 741; + static attribute_742 = 742; + static attribute_743 = 743; + static attribute_744 = 744; + static attribute_745 = 745; + static attribute_746 = 746; + static attribute_747 = 747; + static attribute_748 = 748; + static attribute_749 = 749; + static attribute_750 = 750; + static attribute_751 = 751; + static attribute_752 = 752; + static attribute_753 = 753; + static attribute_754 = 754; + static attribute_755 = 755; + static attribute_756 = 756; + static attribute_757 = 757; + static attribute_758 = 758; + static attribute_759 = 759; + static attribute_760 = 760; + static attribute_761 = 761; + static attribute_762 = 762; + static attribute_763 = 763; + static attribute_764 = 764; + static attribute_765 = 765; + static attribute_766 = 766; + static attribute_767 = 767; + static attribute_768 = 768; + static attribute_769 = 769; + static attribute_770 = 770; + static attribute_771 = 771; + static attribute_772 = 772; + static attribute_773 = 773; + static attribute_774 = 774; + static attribute_775 = 775; + static attribute_776 = 776; + static attribute_777 = 777; + static attribute_778 = 778; + static attribute_779 = 779; + static attribute_780 = 780; + static attribute_781 = 781; + static attribute_782 = 782; + static attribute_783 = 783; + static attribute_784 = 784; + static attribute_785 = 785; + static attribute_786 = 786; + static attribute_787 = 787; + static attribute_788 = 788; + static attribute_789 = 789; + static attribute_790 = 790; + static attribute_791 = 791; + static attribute_792 = 792; + static attribute_793 = 793; + static attribute_794 = 794; + static attribute_795 = 795; + static attribute_796 = 796; + static attribute_797 = 797; + static attribute_798 = 798; + static attribute_799 = 799; + static attribute_800 = 800; + static attribute_801 = 801; + static attribute_802 = 802; + static attribute_803 = 803; + static attribute_804 = 804; + static attribute_805 = 805; + static attribute_806 = 806; + static attribute_807 = 807; + static attribute_808 = 808; + static attribute_809 = 809; + static attribute_810 = 810; + static attribute_811 = 811; + static attribute_812 = 812; + static attribute_813 = 813; + static attribute_814 = 814; + static attribute_815 = 815; + static attribute_816 = 816; + static attribute_817 = 817; + static attribute_818 = 818; + static attribute_819 = 819; + static attribute_820 = 820; + static attribute_821 = 821; + static attribute_822 = 822; + static attribute_823 = 823; + static attribute_824 = 824; + static attribute_825 = 825; + static attribute_826 = 826; + static attribute_827 = 827; + static attribute_828 = 828; + static attribute_829 = 829; + static attribute_830 = 830; + static attribute_831 = 831; + static attribute_832 = 832; + static attribute_833 = 833; + static attribute_834 = 834; + static attribute_835 = 835; + static attribute_836 = 836; + static attribute_837 = 837; + static attribute_838 = 838; + static attribute_839 = 839; + static attribute_840 = 840; + static attribute_841 = 841; + static attribute_842 = 842; + static attribute_843 = 843; + static attribute_844 = 844; + static attribute_845 = 845; + static attribute_846 = 846; + static attribute_847 = 847; + static attribute_848 = 848; + static attribute_849 = 849; + static attribute_850 = 850; + static attribute_851 = 851; + static attribute_852 = 852; + static attribute_853 = 853; + static attribute_854 = 854; + static attribute_855 = 855; + static attribute_856 = 856; + static attribute_857 = 857; + static attribute_858 = 858; + static attribute_859 = 859; + static attribute_860 = 860; + static attribute_861 = 861; + static attribute_862 = 862; + static attribute_863 = 863; + static attribute_864 = 864; + static attribute_865 = 865; + static attribute_866 = 866; + static attribute_867 = 867; + static attribute_868 = 868; + static attribute_869 = 869; + static attribute_870 = 870; + static attribute_871 = 871; + static attribute_872 = 872; + static attribute_873 = 873; + static attribute_874 = 874; + static attribute_875 = 875; + static attribute_876 = 876; + static attribute_877 = 877; + static attribute_878 = 878; + static attribute_879 = 879; + static attribute_880 = 880; + static attribute_881 = 881; + static attribute_882 = 882; + static attribute_883 = 883; + static attribute_884 = 884; + static attribute_885 = 885; + static attribute_886 = 886; + static attribute_887 = 887; + static attribute_888 = 888; + static attribute_889 = 889; + static attribute_890 = 890; + static attribute_891 = 891; + static attribute_892 = 892; + static attribute_893 = 893; + static attribute_894 = 894; + static attribute_895 = 895; + static attribute_896 = 896; + static attribute_897 = 897; + static attribute_898 = 898; + static attribute_899 = 899; + static attribute_900 = 900; + static attribute_901 = 901; + static attribute_902 = 902; + static attribute_903 = 903; + static attribute_904 = 904; + static attribute_905 = 905; + static attribute_906 = 906; + static attribute_907 = 907; + static attribute_908 = 908; + static attribute_909 = 909; + static attribute_910 = 910; + static attribute_911 = 911; + static attribute_912 = 912; + static attribute_913 = 913; + static attribute_914 = 914; + static attribute_915 = 915; + static attribute_916 = 916; + static attribute_917 = 917; + static attribute_918 = 918; + static attribute_919 = 919; + static attribute_920 = 920; + static attribute_921 = 921; + static attribute_922 = 922; + static attribute_923 = 923; + static attribute_924 = 924; + static attribute_925 = 925; + static attribute_926 = 926; + static attribute_927 = 927; + static attribute_928 = 928; + static attribute_929 = 929; + static attribute_930 = 930; + static attribute_931 = 931; + static attribute_932 = 932; + static attribute_933 = 933; + static attribute_934 = 934; + static attribute_935 = 935; + static attribute_936 = 936; + static attribute_937 = 937; + static attribute_938 = 938; + static attribute_939 = 939; + static attribute_940 = 940; + static attribute_941 = 941; + static attribute_942 = 942; + static attribute_943 = 943; + static attribute_944 = 944; + static attribute_945 = 945; + static attribute_946 = 946; + static attribute_947 = 947; + static attribute_948 = 948; + static attribute_949 = 949; + static attribute_950 = 950; + static attribute_951 = 951; + static attribute_952 = 952; + static attribute_953 = 953; + static attribute_954 = 954; + static attribute_955 = 955; + static attribute_956 = 956; + static attribute_957 = 957; + static attribute_958 = 958; + static attribute_959 = 959; + static attribute_960 = 960; + static attribute_961 = 961; + static attribute_962 = 962; + static attribute_963 = 963; + static attribute_964 = 964; + static attribute_965 = 965; + static attribute_966 = 966; + static attribute_967 = 967; + static attribute_968 = 968; + static attribute_969 = 969; + static attribute_970 = 970; + static attribute_971 = 971; + static attribute_972 = 972; + static attribute_973 = 973; + static attribute_974 = 974; + static attribute_975 = 975; + static attribute_976 = 976; + static attribute_977 = 977; + static attribute_978 = 978; + static attribute_979 = 979; + static attribute_980 = 980; + static attribute_981 = 981; + static attribute_982 = 982; + static attribute_983 = 983; + static attribute_984 = 984; + static attribute_985 = 985; + static attribute_986 = 986; + static attribute_987 = 987; + static attribute_988 = 988; + static attribute_989 = 989; + static attribute_990 = 990; + static attribute_991 = 991; + static attribute_992 = 992; + static attribute_993 = 993; + static attribute_994 = 994; + static attribute_995 = 995; + static attribute_996 = 996; + static attribute_997 = 997; + static attribute_998 = 998; + static attribute_999 = 999; + static attribute_1000 = 1000; + static attribute_1001 = 1001; + static attribute_1002 = 1002; + static attribute_1003 = 1003; + static attribute_1004 = 1004; + static attribute_1005 = 1005; + static attribute_1006 = 1006; + static attribute_1007 = 1007; + static attribute_1008 = 1008; + static attribute_1009 = 1009; + static attribute_1010 = 1010; + static attribute_1011 = 1011; + static attribute_1012 = 1012; + static attribute_1013 = 1013; + static attribute_1014 = 1014; + static attribute_1015 = 1015; + static attribute_1016 = 1016; + static attribute_1017 = 1017; + static attribute_1018 = 1018; + static attribute_1019 = 1019; + static attribute_1020 = 1020; + static attribute_1021 = 1021; + static attribute_1022 = 1022; + static attribute_1023 = 1023; + static attribute_1024 = 1024; + static attribute_1025 = 1025; + static attribute_1026 = 1026; + static attribute_1027 = 1027; + static attribute_1028 = 1028; + static attribute_1029 = 1029; + static attribute_1030 = 1030; + static attribute_1031 = 1031; + static attribute_1032 = 1032; + static attribute_1033 = 1033; + static attribute_1034 = 1034; + static attribute_1035 = 1035; + static attribute_1036 = 1036; + static attribute_1037 = 1037; + static attribute_1038 = 1038; + static attribute_1039 = 1039; + static attribute_1040 = 1040; + static attribute_1041 = 1041; + static attribute_1042 = 1042; + static attribute_1043 = 1043; + static attribute_1044 = 1044; + static attribute_1045 = 1045; + static attribute_1046 = 1046; + static attribute_1047 = 1047; + static attribute_1048 = 1048; + static attribute_1049 = 1049; + static attribute_1050 = 1050; + static attribute_1051 = 1051; + static attribute_1052 = 1052; + static attribute_1053 = 1053; + static attribute_1054 = 1054; + static attribute_1055 = 1055; + static attribute_1056 = 1056; + static attribute_1057 = 1057; + static attribute_1058 = 1058; + static attribute_1059 = 1059; + static attribute_1060 = 1060; + static attribute_1061 = 1061; + static attribute_1062 = 1062; + static attribute_1063 = 1063; + static attribute_1064 = 1064; + static attribute_1065 = 1065; + static attribute_1066 = 1066; + static attribute_1067 = 1067; + static attribute_1068 = 1068; + static attribute_1069 = 1069; + static attribute_1070 = 1070; + static attribute_1071 = 1071; + static attribute_1072 = 1072; + static attribute_1073 = 1073; + static attribute_1074 = 1074; + static attribute_1075 = 1075; + static attribute_1076 = 1076; + static attribute_1077 = 1077; + static attribute_1078 = 1078; + static attribute_1079 = 1079; + static attribute_1080 = 1080; + static attribute_1081 = 1081; + static attribute_1082 = 1082; + static attribute_1083 = 1083; + static attribute_1084 = 1084; + static attribute_1085 = 1085; + static attribute_1086 = 1086; + static attribute_1087 = 1087; + static attribute_1088 = 1088; + static attribute_1089 = 1089; + static attribute_1090 = 1090; + static attribute_1091 = 1091; + static attribute_1092 = 1092; + static attribute_1093 = 1093; + static attribute_1094 = 1094; + static attribute_1095 = 1095; + static attribute_1096 = 1096; + static attribute_1097 = 1097; + static attribute_1098 = 1098; + static attribute_1099 = 1099; + static attribute_1100 = 1100; + static attribute_1101 = 1101; + static attribute_1102 = 1102; + static attribute_1103 = 1103; + static attribute_1104 = 1104; + static attribute_1105 = 1105; + static attribute_1106 = 1106; + static attribute_1107 = 1107; + static attribute_1108 = 1108; + static attribute_1109 = 1109; + static attribute_1110 = 1110; + static attribute_1111 = 1111; + static attribute_1112 = 1112; + static attribute_1113 = 1113; + static attribute_1114 = 1114; + static attribute_1115 = 1115; + static attribute_1116 = 1116; + static attribute_1117 = 1117; + static attribute_1118 = 1118; + static attribute_1119 = 1119; + static attribute_1120 = 1120; + static attribute_1121 = 1121; + static attribute_1122 = 1122; + static attribute_1123 = 1123; + static attribute_1124 = 1124; + static attribute_1125 = 1125; + static attribute_1126 = 1126; + static attribute_1127 = 1127; + static attribute_1128 = 1128; + static attribute_1129 = 1129; + static attribute_1130 = 1130; + static attribute_1131 = 1131; + static attribute_1132 = 1132; + static attribute_1133 = 1133; + static attribute_1134 = 1134; + static attribute_1135 = 1135; + static attribute_1136 = 1136; + static attribute_1137 = 1137; + static attribute_1138 = 1138; + static attribute_1139 = 1139; + static attribute_1140 = 1140; + static attribute_1141 = 1141; + static attribute_1142 = 1142; + static attribute_1143 = 1143; + static attribute_1144 = 1144; + static attribute_1145 = 1145; + static attribute_1146 = 1146; + static attribute_1147 = 1147; + static attribute_1148 = 1148; + static attribute_1149 = 1149; + static attribute_1150 = 1150; + static attribute_1151 = 1151; + static attribute_1152 = 1152; + static attribute_1153 = 1153; + static attribute_1154 = 1154; + static attribute_1155 = 1155; + static attribute_1156 = 1156; + static attribute_1157 = 1157; + static attribute_1158 = 1158; + static attribute_1159 = 1159; + static attribute_1160 = 1160; + static attribute_1161 = 1161; + static attribute_1162 = 1162; + static attribute_1163 = 1163; + static attribute_1164 = 1164; + static attribute_1165 = 1165; + static attribute_1166 = 1166; + static attribute_1167 = 1167; + static attribute_1168 = 1168; + static attribute_1169 = 1169; + static attribute_1170 = 1170; + static attribute_1171 = 1171; + static attribute_1172 = 1172; + static attribute_1173 = 1173; + static attribute_1174 = 1174; + static attribute_1175 = 1175; + static attribute_1176 = 1176; + static attribute_1177 = 1177; + static attribute_1178 = 1178; + static attribute_1179 = 1179; + static attribute_1180 = 1180; + static attribute_1181 = 1181; + static attribute_1182 = 1182; + static attribute_1183 = 1183; + static attribute_1184 = 1184; + static attribute_1185 = 1185; + static attribute_1186 = 1186; + static attribute_1187 = 1187; + static attribute_1188 = 1188; + static attribute_1189 = 1189; + static attribute_1190 = 1190; + static attribute_1191 = 1191; + static attribute_1192 = 1192; + static attribute_1193 = 1193; + static attribute_1194 = 1194; + static attribute_1195 = 1195; + static attribute_1196 = 1196; + static attribute_1197 = 1197; + static attribute_1198 = 1198; + static attribute_1199 = 1199; + static attribute_1200 = 1200; + static attribute_1201 = 1201; + static attribute_1202 = 1202; + static attribute_1203 = 1203; + static attribute_1204 = 1204; + static attribute_1205 = 1205; + static attribute_1206 = 1206; + static attribute_1207 = 1207; + static attribute_1208 = 1208; + static attribute_1209 = 1209; + static attribute_1210 = 1210; + static attribute_1211 = 1211; + static attribute_1212 = 1212; + static attribute_1213 = 1213; + static attribute_1214 = 1214; + static attribute_1215 = 1215; + static attribute_1216 = 1216; + static attribute_1217 = 1217; + static attribute_1218 = 1218; + static attribute_1219 = 1219; + static attribute_1220 = 1220; + static attribute_1221 = 1221; + static attribute_1222 = 1222; + static attribute_1223 = 1223; + static attribute_1224 = 1224; + static attribute_1225 = 1225; + static attribute_1226 = 1226; + static attribute_1227 = 1227; + static attribute_1228 = 1228; + static attribute_1229 = 1229; + static attribute_1230 = 1230; + static attribute_1231 = 1231; + static attribute_1232 = 1232; + static attribute_1233 = 1233; + static attribute_1234 = 1234; + static attribute_1235 = 1235; + static attribute_1236 = 1236; + static attribute_1237 = 1237; + static attribute_1238 = 1238; + static attribute_1239 = 1239; + static attribute_1240 = 1240; + static attribute_1241 = 1241; + static attribute_1242 = 1242; + static attribute_1243 = 1243; + static attribute_1244 = 1244; + static attribute_1245 = 1245; + static attribute_1246 = 1246; + static attribute_1247 = 1247; + static attribute_1248 = 1248; + static attribute_1249 = 1249; + static attribute_1250 = 1250; + static attribute_1251 = 1251; + static attribute_1252 = 1252; + static attribute_1253 = 1253; + static attribute_1254 = 1254; + static attribute_1255 = 1255; + static attribute_1256 = 1256; + static attribute_1257 = 1257; + static attribute_1258 = 1258; + static attribute_1259 = 1259; + static attribute_1260 = 1260; + static attribute_1261 = 1261; + static attribute_1262 = 1262; + static attribute_1263 = 1263; + static attribute_1264 = 1264; + static attribute_1265 = 1265; + static attribute_1266 = 1266; + static attribute_1267 = 1267; + static attribute_1268 = 1268; + static attribute_1269 = 1269; + static attribute_1270 = 1270; + static attribute_1271 = 1271; + static attribute_1272 = 1272; + static attribute_1273 = 1273; + static attribute_1274 = 1274; + static attribute_1275 = 1275; + static attribute_1276 = 1276; + static attribute_1277 = 1277; + static attribute_1278 = 1278; + static attribute_1279 = 1279; + static attribute_1280 = 1280; + static attribute_1281 = 1281; + static attribute_1282 = 1282; + static attribute_1283 = 1283; + static attribute_1284 = 1284; + static attribute_1285 = 1285; + static attribute_1286 = 1286; + static attribute_1287 = 1287; + static attribute_1288 = 1288; + static attribute_1289 = 1289; + static attribute_1290 = 1290; + static attribute_1291 = 1291; + static attribute_1292 = 1292; + static attribute_1293 = 1293; + static attribute_1294 = 1294; + static attribute_1295 = 1295; + static attribute_1296 = 1296; + static attribute_1297 = 1297; + static attribute_1298 = 1298; + static attribute_1299 = 1299; + static attribute_1300 = 1300; + static attribute_1301 = 1301; + static attribute_1302 = 1302; + static attribute_1303 = 1303; + static attribute_1304 = 1304; + static attribute_1305 = 1305; + static attribute_1306 = 1306; + static attribute_1307 = 1307; + static attribute_1308 = 1308; + static attribute_1309 = 1309; + static attribute_1310 = 1310; + static attribute_1311 = 1311; + static attribute_1312 = 1312; + static attribute_1313 = 1313; + static attribute_1314 = 1314; + static attribute_1315 = 1315; + static attribute_1316 = 1316; + static attribute_1317 = 1317; + static attribute_1318 = 1318; + static attribute_1319 = 1319; + static attribute_1320 = 1320; + static attribute_1321 = 1321; + static attribute_1322 = 1322; + static attribute_1323 = 1323; + static attribute_1324 = 1324; + static attribute_1325 = 1325; + static attribute_1326 = 1326; + static attribute_1327 = 1327; + static attribute_1328 = 1328; + static attribute_1329 = 1329; + static attribute_1330 = 1330; + static attribute_1331 = 1331; + static attribute_1332 = 1332; + static attribute_1333 = 1333; + static attribute_1334 = 1334; + static attribute_1335 = 1335; + static attribute_1336 = 1336; + static attribute_1337 = 1337; + static attribute_1338 = 1338; + static attribute_1339 = 1339; + static attribute_1340 = 1340; + static attribute_1341 = 1341; + static attribute_1342 = 1342; + static attribute_1343 = 1343; + static attribute_1344 = 1344; + static attribute_1345 = 1345; + static attribute_1346 = 1346; + static attribute_1347 = 1347; + static attribute_1348 = 1348; + static attribute_1349 = 1349; + static attribute_1350 = 1350; + static attribute_1351 = 1351; + static attribute_1352 = 1352; + static attribute_1353 = 1353; + static attribute_1354 = 1354; + static attribute_1355 = 1355; + static attribute_1356 = 1356; + static attribute_1357 = 1357; + static attribute_1358 = 1358; + static attribute_1359 = 1359; + static attribute_1360 = 1360; + static attribute_1361 = 1361; + static attribute_1362 = 1362; + static attribute_1363 = 1363; + static attribute_1364 = 1364; + static attribute_1365 = 1365; + static attribute_1366 = 1366; + static attribute_1367 = 1367; + static attribute_1368 = 1368; + static attribute_1369 = 1369; + static attribute_1370 = 1370; + static attribute_1371 = 1371; + static attribute_1372 = 1372; + static attribute_1373 = 1373; + static attribute_1374 = 1374; + static attribute_1375 = 1375; + static attribute_1376 = 1376; + static attribute_1377 = 1377; + static attribute_1378 = 1378; + static attribute_1379 = 1379; + static attribute_1380 = 1380; + static attribute_1381 = 1381; + static attribute_1382 = 1382; + static attribute_1383 = 1383; + static attribute_1384 = 1384; + static attribute_1385 = 1385; + static attribute_1386 = 1386; + static attribute_1387 = 1387; + static attribute_1388 = 1388; + static attribute_1389 = 1389; + static attribute_1390 = 1390; + static attribute_1391 = 1391; + static attribute_1392 = 1392; + static attribute_1393 = 1393; + static attribute_1394 = 1394; + static attribute_1395 = 1395; + static attribute_1396 = 1396; + static attribute_1397 = 1397; + static attribute_1398 = 1398; + static attribute_1399 = 1399; + static attribute_1400 = 1400; + static attribute_1401 = 1401; + static attribute_1402 = 1402; + static attribute_1403 = 1403; + static attribute_1404 = 1404; + static attribute_1405 = 1405; + static attribute_1406 = 1406; + static attribute_1407 = 1407; + static attribute_1408 = 1408; + static attribute_1409 = 1409; + static attribute_1410 = 1410; + static attribute_1411 = 1411; + static attribute_1412 = 1412; + static attribute_1413 = 1413; + static attribute_1414 = 1414; + static attribute_1415 = 1415; + static attribute_1416 = 1416; + static attribute_1417 = 1417; + static attribute_1418 = 1418; + static attribute_1419 = 1419; + static attribute_1420 = 1420; + static attribute_1421 = 1421; + static attribute_1422 = 1422; + static attribute_1423 = 1423; + static attribute_1424 = 1424; + static attribute_1425 = 1425; + static attribute_1426 = 1426; + static attribute_1427 = 1427; + static attribute_1428 = 1428; + static attribute_1429 = 1429; + static attribute_1430 = 1430; + static attribute_1431 = 1431; + static attribute_1432 = 1432; + static attribute_1433 = 1433; + static attribute_1434 = 1434; + static attribute_1435 = 1435; + static attribute_1436 = 1436; + static attribute_1437 = 1437; + static attribute_1438 = 1438; + static attribute_1439 = 1439; + static attribute_1440 = 1440; + static attribute_1441 = 1441; + static attribute_1442 = 1442; + static attribute_1443 = 1443; + static attribute_1444 = 1444; + static attribute_1445 = 1445; + static attribute_1446 = 1446; + static attribute_1447 = 1447; + static attribute_1448 = 1448; + static attribute_1449 = 1449; + static attribute_1450 = 1450; + static attribute_1451 = 1451; + static attribute_1452 = 1452; + static attribute_1453 = 1453; + static attribute_1454 = 1454; + static attribute_1455 = 1455; + static attribute_1456 = 1456; + static attribute_1457 = 1457; + static attribute_1458 = 1458; + static attribute_1459 = 1459; + static attribute_1460 = 1460; + static attribute_1461 = 1461; + static attribute_1462 = 1462; + static attribute_1463 = 1463; + static attribute_1464 = 1464; + static attribute_1465 = 1465; + static attribute_1466 = 1466; + static attribute_1467 = 1467; + static attribute_1468 = 1468; + static attribute_1469 = 1469; + static attribute_1470 = 1470; + static attribute_1471 = 1471; + static attribute_1472 = 1472; + static attribute_1473 = 1473; + static attribute_1474 = 1474; + static attribute_1475 = 1475; + static attribute_1476 = 1476; + static attribute_1477 = 1477; + static attribute_1478 = 1478; + static attribute_1479 = 1479; + static attribute_1480 = 1480; + static attribute_1481 = 1481; + static attribute_1482 = 1482; + static attribute_1483 = 1483; + static attribute_1484 = 1484; + static attribute_1485 = 1485; + static attribute_1486 = 1486; + static attribute_1487 = 1487; + static attribute_1488 = 1488; + static attribute_1489 = 1489; + static attribute_1490 = 1490; + static attribute_1491 = 1491; + static attribute_1492 = 1492; + static attribute_1493 = 1493; + static attribute_1494 = 1494; + static attribute_1495 = 1495; + static attribute_1496 = 1496; + static attribute_1497 = 1497; + static attribute_1498 = 1498; + static attribute_1499 = 1499; + static attribute_1500 = 1500; + static attribute_1501 = 1501; + static attribute_1502 = 1502; + static attribute_1503 = 1503; + static attribute_1504 = 1504; + static attribute_1505 = 1505; + static attribute_1506 = 1506; + static attribute_1507 = 1507; + static attribute_1508 = 1508; + static attribute_1509 = 1509; + static attribute_1510 = 1510; + static attribute_1511 = 1511; + static attribute_1512 = 1512; + static attribute_1513 = 1513; + static attribute_1514 = 1514; + static attribute_1515 = 1515; + static attribute_1516 = 1516; + static attribute_1517 = 1517; + static attribute_1518 = 1518; + static attribute_1519 = 1519; + static attribute_1520 = 1520; + static attribute_1521 = 1521; + static attribute_1522 = 1522; + static attribute_1523 = 1523; + static attribute_1524 = 1524; + static attribute_1525 = 1525; + static attribute_1526 = 1526; + static attribute_1527 = 1527; + static attribute_1528 = 1528; + static attribute_1529 = 1529; + static attribute_1530 = 1530; + static attribute_1531 = 1531; + static attribute_1532 = 1532; + static attribute_1533 = 1533; + static attribute_1534 = 1534; + static attribute_1535 = 1535; + static attribute_1536 = 1536; + static attribute_1537 = 1537; + static attribute_1538 = 1538; + static attribute_1539 = 1539; + static attribute_1540 = 1540; + static attribute_1541 = 1541; + static attribute_1542 = 1542; + static attribute_1543 = 1543; + static attribute_1544 = 1544; + static attribute_1545 = 1545; + static attribute_1546 = 1546; + static attribute_1547 = 1547; + static attribute_1548 = 1548; + static attribute_1549 = 1549; + static attribute_1550 = 1550; + static attribute_1551 = 1551; + static attribute_1552 = 1552; + static attribute_1553 = 1553; + static attribute_1554 = 1554; + static attribute_1555 = 1555; + static attribute_1556 = 1556; + static attribute_1557 = 1557; + static attribute_1558 = 1558; + static attribute_1559 = 1559; + static attribute_1560 = 1560; + static attribute_1561 = 1561; + static attribute_1562 = 1562; + static attribute_1563 = 1563; + static attribute_1564 = 1564; + static attribute_1565 = 1565; + static attribute_1566 = 1566; + static attribute_1567 = 1567; + static attribute_1568 = 1568; + static attribute_1569 = 1569; + static attribute_1570 = 1570; + static attribute_1571 = 1571; + static attribute_1572 = 1572; + static attribute_1573 = 1573; + static attribute_1574 = 1574; + static attribute_1575 = 1575; + static attribute_1576 = 1576; + static attribute_1577 = 1577; + static attribute_1578 = 1578; + static attribute_1579 = 1579; + static attribute_1580 = 1580; + static attribute_1581 = 1581; + static attribute_1582 = 1582; + static attribute_1583 = 1583; + static attribute_1584 = 1584; + static attribute_1585 = 1585; + static attribute_1586 = 1586; + static attribute_1587 = 1587; + static attribute_1588 = 1588; + static attribute_1589 = 1589; + static attribute_1590 = 1590; + static attribute_1591 = 1591; + static attribute_1592 = 1592; + static attribute_1593 = 1593; + static attribute_1594 = 1594; + static attribute_1595 = 1595; + static attribute_1596 = 1596; + static attribute_1597 = 1597; + static attribute_1598 = 1598; + static attribute_1599 = 1599; + static attribute_1600 = 1600; + static attribute_1601 = 1601; + static attribute_1602 = 1602; + static attribute_1603 = 1603; + static attribute_1604 = 1604; + static attribute_1605 = 1605; + static attribute_1606 = 1606; + static attribute_1607 = 1607; + static attribute_1608 = 1608; + static attribute_1609 = 1609; + static attribute_1610 = 1610; + static attribute_1611 = 1611; + static attribute_1612 = 1612; + static attribute_1613 = 1613; + static attribute_1614 = 1614; + static attribute_1615 = 1615; + static attribute_1616 = 1616; + static attribute_1617 = 1617; + static attribute_1618 = 1618; + static attribute_1619 = 1619; + static attribute_1620 = 1620; + static attribute_1621 = 1621; + static attribute_1622 = 1622; + static attribute_1623 = 1623; + static attribute_1624 = 1624; + static attribute_1625 = 1625; + static attribute_1626 = 1626; + static attribute_1627 = 1627; + static attribute_1628 = 1628; + static attribute_1629 = 1629; + static attribute_1630 = 1630; + static attribute_1631 = 1631; + static attribute_1632 = 1632; + static attribute_1633 = 1633; + static attribute_1634 = 1634; + static attribute_1635 = 1635; + static attribute_1636 = 1636; + static attribute_1637 = 1637; + static attribute_1638 = 1638; + static attribute_1639 = 1639; + static attribute_1640 = 1640; + static attribute_1641 = 1641; + static attribute_1642 = 1642; + static attribute_1643 = 1643; + static attribute_1644 = 1644; + static attribute_1645 = 1645; + static attribute_1646 = 1646; + static attribute_1647 = 1647; + static attribute_1648 = 1648; + static attribute_1649 = 1649; + static attribute_1650 = 1650; + static attribute_1651 = 1651; + static attribute_1652 = 1652; + static attribute_1653 = 1653; + static attribute_1654 = 1654; + static attribute_1655 = 1655; + static attribute_1656 = 1656; + static attribute_1657 = 1657; + static attribute_1658 = 1658; + static attribute_1659 = 1659; + static attribute_1660 = 1660; + static attribute_1661 = 1661; + static attribute_1662 = 1662; + static attribute_1663 = 1663; + static attribute_1664 = 1664; + static attribute_1665 = 1665; + static attribute_1666 = 1666; + static attribute_1667 = 1667; + static attribute_1668 = 1668; + static attribute_1669 = 1669; + static attribute_1670 = 1670; + static attribute_1671 = 1671; + static attribute_1672 = 1672; + static attribute_1673 = 1673; + static attribute_1674 = 1674; + static attribute_1675 = 1675; + static attribute_1676 = 1676; + static attribute_1677 = 1677; + static attribute_1678 = 1678; + static attribute_1679 = 1679; + static attribute_1680 = 1680; + static attribute_1681 = 1681; + static attribute_1682 = 1682; + static attribute_1683 = 1683; + static attribute_1684 = 1684; + static attribute_1685 = 1685; + static attribute_1686 = 1686; + static attribute_1687 = 1687; + static attribute_1688 = 1688; + static attribute_1689 = 1689; + static attribute_1690 = 1690; + static attribute_1691 = 1691; + static attribute_1692 = 1692; + static attribute_1693 = 1693; + static attribute_1694 = 1694; + static attribute_1695 = 1695; + static attribute_1696 = 1696; + static attribute_1697 = 1697; + static attribute_1698 = 1698; + static attribute_1699 = 1699; + static attribute_1700 = 1700; + static attribute_1701 = 1701; + static attribute_1702 = 1702; + static attribute_1703 = 1703; + static attribute_1704 = 1704; + static attribute_1705 = 1705; + static attribute_1706 = 1706; + static attribute_1707 = 1707; + static attribute_1708 = 1708; + static attribute_1709 = 1709; + static attribute_1710 = 1710; + static attribute_1711 = 1711; + static attribute_1712 = 1712; + static attribute_1713 = 1713; + static attribute_1714 = 1714; + static attribute_1715 = 1715; + static attribute_1716 = 1716; + static attribute_1717 = 1717; + static attribute_1718 = 1718; + static attribute_1719 = 1719; + static attribute_1720 = 1720; + static attribute_1721 = 1721; + static attribute_1722 = 1722; + static attribute_1723 = 1723; + static attribute_1724 = 1724; + static attribute_1725 = 1725; + static attribute_1726 = 1726; + static attribute_1727 = 1727; + static attribute_1728 = 1728; + static attribute_1729 = 1729; + static attribute_1730 = 1730; + static attribute_1731 = 1731; + static attribute_1732 = 1732; + static attribute_1733 = 1733; + static attribute_1734 = 1734; + static attribute_1735 = 1735; + static attribute_1736 = 1736; + static attribute_1737 = 1737; + static attribute_1738 = 1738; + static attribute_1739 = 1739; + static attribute_1740 = 1740; + static attribute_1741 = 1741; + static attribute_1742 = 1742; + static attribute_1743 = 1743; + static attribute_1744 = 1744; + static attribute_1745 = 1745; + static attribute_1746 = 1746; + static attribute_1747 = 1747; + static attribute_1748 = 1748; + static attribute_1749 = 1749; + static attribute_1750 = 1750; + static attribute_1751 = 1751; + static attribute_1752 = 1752; + static attribute_1753 = 1753; + static attribute_1754 = 1754; + static attribute_1755 = 1755; + static attribute_1756 = 1756; + static attribute_1757 = 1757; + static attribute_1758 = 1758; + static attribute_1759 = 1759; + static attribute_1760 = 1760; + static attribute_1761 = 1761; + static attribute_1762 = 1762; + static attribute_1763 = 1763; + static attribute_1764 = 1764; + static attribute_1765 = 1765; + static attribute_1766 = 1766; + static attribute_1767 = 1767; + static attribute_1768 = 1768; + static attribute_1769 = 1769; + static attribute_1770 = 1770; + static attribute_1771 = 1771; + static attribute_1772 = 1772; + static attribute_1773 = 1773; + static attribute_1774 = 1774; + static attribute_1775 = 1775; + static attribute_1776 = 1776; + static attribute_1777 = 1777; + static attribute_1778 = 1778; + static attribute_1779 = 1779; + static attribute_1780 = 1780; + static attribute_1781 = 1781; + static attribute_1782 = 1782; + static attribute_1783 = 1783; + static attribute_1784 = 1784; + static attribute_1785 = 1785; + static attribute_1786 = 1786; + static attribute_1787 = 1787; + static attribute_1788 = 1788; + static attribute_1789 = 1789; + static attribute_1790 = 1790; + static attribute_1791 = 1791; + static attribute_1792 = 1792; + static attribute_1793 = 1793; + static attribute_1794 = 1794; + static attribute_1795 = 1795; + static attribute_1796 = 1796; + static attribute_1797 = 1797; + static attribute_1798 = 1798; + static attribute_1799 = 1799; + static attribute_1800 = 1800; + static attribute_1801 = 1801; + static attribute_1802 = 1802; + static attribute_1803 = 1803; + static attribute_1804 = 1804; + static attribute_1805 = 1805; + static attribute_1806 = 1806; + static attribute_1807 = 1807; + static attribute_1808 = 1808; + static attribute_1809 = 1809; + static attribute_1810 = 1810; + static attribute_1811 = 1811; + static attribute_1812 = 1812; + static attribute_1813 = 1813; + static attribute_1814 = 1814; + static attribute_1815 = 1815; + static attribute_1816 = 1816; + static attribute_1817 = 1817; + static attribute_1818 = 1818; + static attribute_1819 = 1819; + static attribute_1820 = 1820; + static attribute_1821 = 1821; + static attribute_1822 = 1822; + static attribute_1823 = 1823; + static attribute_1824 = 1824; + static attribute_1825 = 1825; + static attribute_1826 = 1826; + static attribute_1827 = 1827; + static attribute_1828 = 1828; + static attribute_1829 = 1829; + static attribute_1830 = 1830; + static attribute_1831 = 1831; + static attribute_1832 = 1832; + static attribute_1833 = 1833; + static attribute_1834 = 1834; + static attribute_1835 = 1835; + static attribute_1836 = 1836; + static attribute_1837 = 1837; + static attribute_1838 = 1838; + static attribute_1839 = 1839; + static attribute_1840 = 1840; + static attribute_1841 = 1841; + static attribute_1842 = 1842; + static attribute_1843 = 1843; + static attribute_1844 = 1844; + static attribute_1845 = 1845; + static attribute_1846 = 1846; + static attribute_1847 = 1847; + static attribute_1848 = 1848; + static attribute_1849 = 1849; + static attribute_1850 = 1850; + static attribute_1851 = 1851; + static attribute_1852 = 1852; + static attribute_1853 = 1853; + static attribute_1854 = 1854; + static attribute_1855 = 1855; + static attribute_1856 = 1856; + static attribute_1857 = 1857; + static attribute_1858 = 1858; + static attribute_1859 = 1859; + static attribute_1860 = 1860; + static attribute_1861 = 1861; + static attribute_1862 = 1862; + static attribute_1863 = 1863; + static attribute_1864 = 1864; + static attribute_1865 = 1865; + static attribute_1866 = 1866; + static attribute_1867 = 1867; + static attribute_1868 = 1868; + static attribute_1869 = 1869; + static attribute_1870 = 1870; + static attribute_1871 = 1871; + static attribute_1872 = 1872; + static attribute_1873 = 1873; + static attribute_1874 = 1874; + static attribute_1875 = 1875; + static attribute_1876 = 1876; + static attribute_1877 = 1877; + static attribute_1878 = 1878; + static attribute_1879 = 1879; + static attribute_1880 = 1880; + static attribute_1881 = 1881; + static attribute_1882 = 1882; + static attribute_1883 = 1883; + static attribute_1884 = 1884; + static attribute_1885 = 1885; + static attribute_1886 = 1886; + static attribute_1887 = 1887; + static attribute_1888 = 1888; + static attribute_1889 = 1889; + static attribute_1890 = 1890; + static attribute_1891 = 1891; + static attribute_1892 = 1892; + static attribute_1893 = 1893; + static attribute_1894 = 1894; + static attribute_1895 = 1895; + static attribute_1896 = 1896; + static attribute_1897 = 1897; + static attribute_1898 = 1898; + static attribute_1899 = 1899; + static attribute_1900 = 1900; + static attribute_1901 = 1901; + static attribute_1902 = 1902; + static attribute_1903 = 1903; + static attribute_1904 = 1904; + static attribute_1905 = 1905; + static attribute_1906 = 1906; + static attribute_1907 = 1907; + static attribute_1908 = 1908; + static attribute_1909 = 1909; + static attribute_1910 = 1910; + static attribute_1911 = 1911; + static attribute_1912 = 1912; + static attribute_1913 = 1913; + static attribute_1914 = 1914; + static attribute_1915 = 1915; + static attribute_1916 = 1916; + static attribute_1917 = 1917; + static attribute_1918 = 1918; + static attribute_1919 = 1919; + static attribute_1920 = 1920; + static attribute_1921 = 1921; + static attribute_1922 = 1922; + static attribute_1923 = 1923; + static attribute_1924 = 1924; + static attribute_1925 = 1925; + static attribute_1926 = 1926; + static attribute_1927 = 1927; + static attribute_1928 = 1928; + static attribute_1929 = 1929; + static attribute_1930 = 1930; + static attribute_1931 = 1931; + static attribute_1932 = 1932; + static attribute_1933 = 1933; + static attribute_1934 = 1934; + static attribute_1935 = 1935; + static attribute_1936 = 1936; + static attribute_1937 = 1937; + static attribute_1938 = 1938; + static attribute_1939 = 1939; + static attribute_1940 = 1940; + static attribute_1941 = 1941; + static attribute_1942 = 1942; + static attribute_1943 = 1943; + static attribute_1944 = 1944; + static attribute_1945 = 1945; + static attribute_1946 = 1946; + static attribute_1947 = 1947; + static attribute_1948 = 1948; + static attribute_1949 = 1949; + static attribute_1950 = 1950; + static attribute_1951 = 1951; + static attribute_1952 = 1952; + static attribute_1953 = 1953; + static attribute_1954 = 1954; + static attribute_1955 = 1955; + static attribute_1956 = 1956; + static attribute_1957 = 1957; + static attribute_1958 = 1958; + static attribute_1959 = 1959; + static attribute_1960 = 1960; + static attribute_1961 = 1961; + static attribute_1962 = 1962; + static attribute_1963 = 1963; + static attribute_1964 = 1964; + static attribute_1965 = 1965; + static attribute_1966 = 1966; + static attribute_1967 = 1967; + static attribute_1968 = 1968; + static attribute_1969 = 1969; + static attribute_1970 = 1970; + static attribute_1971 = 1971; + static attribute_1972 = 1972; + static attribute_1973 = 1973; + static attribute_1974 = 1974; + static attribute_1975 = 1975; + static attribute_1976 = 1976; + static attribute_1977 = 1977; + static attribute_1978 = 1978; + static attribute_1979 = 1979; + static attribute_1980 = 1980; + static attribute_1981 = 1981; + static attribute_1982 = 1982; + static attribute_1983 = 1983; + static attribute_1984 = 1984; + static attribute_1985 = 1985; + static attribute_1986 = 1986; + static attribute_1987 = 1987; + static attribute_1988 = 1988; + static attribute_1989 = 1989; + static attribute_1990 = 1990; + static attribute_1991 = 1991; + static attribute_1992 = 1992; + static attribute_1993 = 1993; + static attribute_1994 = 1994; + static attribute_1995 = 1995; + static attribute_1996 = 1996; + static attribute_1997 = 1997; + static attribute_1998 = 1998; + static attribute_1999 = 1999; + static attribute_2000 = 2000; + static attribute_2001 = 2001; + static attribute_2002 = 2002; + static attribute_2003 = 2003; + static attribute_2004 = 2004; + static attribute_2005 = 2005; + static attribute_2006 = 2006; + static attribute_2007 = 2007; + static attribute_2008 = 2008; + static attribute_2009 = 2009; + static attribute_2010 = 2010; + static attribute_2011 = 2011; + static attribute_2012 = 2012; + static attribute_2013 = 2013; + static attribute_2014 = 2014; + static attribute_2015 = 2015; + static attribute_2016 = 2016; + static attribute_2017 = 2017; + static attribute_2018 = 2018; + static attribute_2019 = 2019; + static attribute_2020 = 2020; + static attribute_2021 = 2021; + static attribute_2022 = 2022; + static attribute_2023 = 2023; + static attribute_2024 = 2024; + static attribute_2025 = 2025; + static attribute_2026 = 2026; + static attribute_2027 = 2027; + static attribute_2028 = 2028; + static attribute_2029 = 2029; + static attribute_2030 = 2030; + static attribute_2031 = 2031; + static attribute_2032 = 2032; + static attribute_2033 = 2033; + static attribute_2034 = 2034; + static attribute_2035 = 2035; + static attribute_2036 = 2036; + static attribute_2037 = 2037; + static attribute_2038 = 2038; + static attribute_2039 = 2039; + static attribute_2040 = 2040; + static attribute_2041 = 2041; + static attribute_2042 = 2042; + static attribute_2043 = 2043; + static attribute_2044 = 2044; + static attribute_2045 = 2045; + static attribute_2046 = 2046; + static attribute_2047 = 2047; + static attribute_2048 = 2048; + static attribute_2049 = 2049; + static attribute_2050 = 2050; + static attribute_2051 = 2051; + static attribute_2052 = 2052; + static attribute_2053 = 2053; + static attribute_2054 = 2054; + static attribute_2055 = 2055; + static attribute_2056 = 2056; + static attribute_2057 = 2057; + static attribute_2058 = 2058; + static attribute_2059 = 2059; + static attribute_2060 = 2060; + static attribute_2061 = 2061; + static attribute_2062 = 2062; + static attribute_2063 = 2063; + static attribute_2064 = 2064; + static attribute_2065 = 2065; + static attribute_2066 = 2066; + static attribute_2067 = 2067; + static attribute_2068 = 2068; + static attribute_2069 = 2069; + static attribute_2070 = 2070; + static attribute_2071 = 2071; + static attribute_2072 = 2072; + static attribute_2073 = 2073; + static attribute_2074 = 2074; + static attribute_2075 = 2075; + static attribute_2076 = 2076; + static attribute_2077 = 2077; + static attribute_2078 = 2078; + static attribute_2079 = 2079; + static attribute_2080 = 2080; + static attribute_2081 = 2081; + static attribute_2082 = 2082; + static attribute_2083 = 2083; + static attribute_2084 = 2084; + static attribute_2085 = 2085; + static attribute_2086 = 2086; + static attribute_2087 = 2087; + static attribute_2088 = 2088; + static attribute_2089 = 2089; + static attribute_2090 = 2090; + static attribute_2091 = 2091; + static attribute_2092 = 2092; + static attribute_2093 = 2093; + static attribute_2094 = 2094; + static attribute_2095 = 2095; + static attribute_2096 = 2096; + static attribute_2097 = 2097; + static attribute_2098 = 2098; + static attribute_2099 = 2099; + static attribute_2100 = 2100; + static attribute_2101 = 2101; + static attribute_2102 = 2102; + static attribute_2103 = 2103; + static attribute_2104 = 2104; + static attribute_2105 = 2105; + static attribute_2106 = 2106; + static attribute_2107 = 2107; + static attribute_2108 = 2108; + static attribute_2109 = 2109; + static attribute_2110 = 2110; + static attribute_2111 = 2111; + static attribute_2112 = 2112; + static attribute_2113 = 2113; + static attribute_2114 = 2114; + static attribute_2115 = 2115; + static attribute_2116 = 2116; + static attribute_2117 = 2117; + static attribute_2118 = 2118; + static attribute_2119 = 2119; + static attribute_2120 = 2120; + static attribute_2121 = 2121; + static attribute_2122 = 2122; + static attribute_2123 = 2123; + static attribute_2124 = 2124; + static attribute_2125 = 2125; + static attribute_2126 = 2126; + static attribute_2127 = 2127; + static attribute_2128 = 2128; + static attribute_2129 = 2129; + static attribute_2130 = 2130; + static attribute_2131 = 2131; + static attribute_2132 = 2132; + static attribute_2133 = 2133; + static attribute_2134 = 2134; + static attribute_2135 = 2135; + static attribute_2136 = 2136; + static attribute_2137 = 2137; + static attribute_2138 = 2138; + static attribute_2139 = 2139; + static attribute_2140 = 2140; + static attribute_2141 = 2141; + static attribute_2142 = 2142; + static attribute_2143 = 2143; + static attribute_2144 = 2144; + static attribute_2145 = 2145; + static attribute_2146 = 2146; + static attribute_2147 = 2147; + static attribute_2148 = 2148; + static attribute_2149 = 2149; + static attribute_2150 = 2150; + static attribute_2151 = 2151; + static attribute_2152 = 2152; + static attribute_2153 = 2153; + static attribute_2154 = 2154; + static attribute_2155 = 2155; + static attribute_2156 = 2156; + static attribute_2157 = 2157; + static attribute_2158 = 2158; + static attribute_2159 = 2159; + static attribute_2160 = 2160; + static attribute_2161 = 2161; + static attribute_2162 = 2162; + static attribute_2163 = 2163; + static attribute_2164 = 2164; + static attribute_2165 = 2165; + static attribute_2166 = 2166; + static attribute_2167 = 2167; + static attribute_2168 = 2168; + static attribute_2169 = 2169; + static attribute_2170 = 2170; + static attribute_2171 = 2171; + static attribute_2172 = 2172; + static attribute_2173 = 2173; + static attribute_2174 = 2174; + static attribute_2175 = 2175; + static attribute_2176 = 2176; + static attribute_2177 = 2177; + static attribute_2178 = 2178; + static attribute_2179 = 2179; + static attribute_2180 = 2180; + static attribute_2181 = 2181; + static attribute_2182 = 2182; + static attribute_2183 = 2183; + static attribute_2184 = 2184; + static attribute_2185 = 2185; + static attribute_2186 = 2186; + static attribute_2187 = 2187; + static attribute_2188 = 2188; + static attribute_2189 = 2189; + static attribute_2190 = 2190; + static attribute_2191 = 2191; + static attribute_2192 = 2192; + static attribute_2193 = 2193; + static attribute_2194 = 2194; + static attribute_2195 = 2195; + static attribute_2196 = 2196; + static attribute_2197 = 2197; + static attribute_2198 = 2198; + static attribute_2199 = 2199; + static attribute_2200 = 2200; + static attribute_2201 = 2201; + static attribute_2202 = 2202; + static attribute_2203 = 2203; + static attribute_2204 = 2204; + static attribute_2205 = 2205; + static attribute_2206 = 2206; + static attribute_2207 = 2207; + static attribute_2208 = 2208; + static attribute_2209 = 2209; + static attribute_2210 = 2210; + static attribute_2211 = 2211; + static attribute_2212 = 2212; + static attribute_2213 = 2213; + static attribute_2214 = 2214; + static attribute_2215 = 2215; + static attribute_2216 = 2216; + static attribute_2217 = 2217; + static attribute_2218 = 2218; + static attribute_2219 = 2219; + static attribute_2220 = 2220; + static attribute_2221 = 2221; + static attribute_2222 = 2222; + static attribute_2223 = 2223; + static attribute_2224 = 2224; + static attribute_2225 = 2225; + static attribute_2226 = 2226; + static attribute_2227 = 2227; + static attribute_2228 = 2228; + static attribute_2229 = 2229; + static attribute_2230 = 2230; + static attribute_2231 = 2231; + static attribute_2232 = 2232; + static attribute_2233 = 2233; + static attribute_2234 = 2234; + static attribute_2235 = 2235; + static attribute_2236 = 2236; + static attribute_2237 = 2237; + static attribute_2238 = 2238; + static attribute_2239 = 2239; + static attribute_2240 = 2240; + static attribute_2241 = 2241; + static attribute_2242 = 2242; + static attribute_2243 = 2243; + static attribute_2244 = 2244; + static attribute_2245 = 2245; + static attribute_2246 = 2246; + static attribute_2247 = 2247; + static attribute_2248 = 2248; + static attribute_2249 = 2249; + static attribute_2250 = 2250; + static attribute_2251 = 2251; + static attribute_2252 = 2252; + static attribute_2253 = 2253; + static attribute_2254 = 2254; + static attribute_2255 = 2255; + static attribute_2256 = 2256; + static attribute_2257 = 2257; + static attribute_2258 = 2258; + static attribute_2259 = 2259; + static attribute_2260 = 2260; + static attribute_2261 = 2261; + static attribute_2262 = 2262; + static attribute_2263 = 2263; + static attribute_2264 = 2264; + static attribute_2265 = 2265; + static attribute_2266 = 2266; + static attribute_2267 = 2267; + static attribute_2268 = 2268; + static attribute_2269 = 2269; + static attribute_2270 = 2270; + static attribute_2271 = 2271; + static attribute_2272 = 2272; + static attribute_2273 = 2273; + static attribute_2274 = 2274; + static attribute_2275 = 2275; + static attribute_2276 = 2276; + static attribute_2277 = 2277; + static attribute_2278 = 2278; + static attribute_2279 = 2279; + static attribute_2280 = 2280; + static attribute_2281 = 2281; + static attribute_2282 = 2282; + static attribute_2283 = 2283; + static attribute_2284 = 2284; + static attribute_2285 = 2285; + static attribute_2286 = 2286; + static attribute_2287 = 2287; + static attribute_2288 = 2288; + static attribute_2289 = 2289; + static attribute_2290 = 2290; + static attribute_2291 = 2291; + static attribute_2292 = 2292; + static attribute_2293 = 2293; + static attribute_2294 = 2294; + static attribute_2295 = 2295; + static attribute_2296 = 2296; + static attribute_2297 = 2297; + static attribute_2298 = 2298; + static attribute_2299 = 2299; + static attribute_2300 = 2300; + static attribute_2301 = 2301; + static attribute_2302 = 2302; + static attribute_2303 = 2303; + static attribute_2304 = 2304; + static attribute_2305 = 2305; + static attribute_2306 = 2306; + static attribute_2307 = 2307; + static attribute_2308 = 2308; + static attribute_2309 = 2309; + static attribute_2310 = 2310; + static attribute_2311 = 2311; + static attribute_2312 = 2312; + static attribute_2313 = 2313; + static attribute_2314 = 2314; + static attribute_2315 = 2315; + static attribute_2316 = 2316; + static attribute_2317 = 2317; + static attribute_2318 = 2318; + static attribute_2319 = 2319; + static attribute_2320 = 2320; + static attribute_2321 = 2321; + static attribute_2322 = 2322; + static attribute_2323 = 2323; + static attribute_2324 = 2324; + static attribute_2325 = 2325; + static attribute_2326 = 2326; + static attribute_2327 = 2327; + static attribute_2328 = 2328; + static attribute_2329 = 2329; + static attribute_2330 = 2330; + static attribute_2331 = 2331; + static attribute_2332 = 2332; + static attribute_2333 = 2333; + static attribute_2334 = 2334; + static attribute_2335 = 2335; + static attribute_2336 = 2336; + static attribute_2337 = 2337; + static attribute_2338 = 2338; + static attribute_2339 = 2339; + static attribute_2340 = 2340; + static attribute_2341 = 2341; + static attribute_2342 = 2342; + static attribute_2343 = 2343; + static attribute_2344 = 2344; + static attribute_2345 = 2345; + static attribute_2346 = 2346; + static attribute_2347 = 2347; + static attribute_2348 = 2348; + static attribute_2349 = 2349; + static attribute_2350 = 2350; + static attribute_2351 = 2351; + static attribute_2352 = 2352; + static attribute_2353 = 2353; + static attribute_2354 = 2354; + static attribute_2355 = 2355; + static attribute_2356 = 2356; + static attribute_2357 = 2357; + static attribute_2358 = 2358; + static attribute_2359 = 2359; + static attribute_2360 = 2360; + static attribute_2361 = 2361; + static attribute_2362 = 2362; + static attribute_2363 = 2363; + static attribute_2364 = 2364; + static attribute_2365 = 2365; + static attribute_2366 = 2366; + static attribute_2367 = 2367; + static attribute_2368 = 2368; + static attribute_2369 = 2369; + static attribute_2370 = 2370; + static attribute_2371 = 2371; + static attribute_2372 = 2372; + static attribute_2373 = 2373; + static attribute_2374 = 2374; + static attribute_2375 = 2375; + static attribute_2376 = 2376; + static attribute_2377 = 2377; + static attribute_2378 = 2378; + static attribute_2379 = 2379; + static attribute_2380 = 2380; + static attribute_2381 = 2381; + static attribute_2382 = 2382; + static attribute_2383 = 2383; + static attribute_2384 = 2384; + static attribute_2385 = 2385; + static attribute_2386 = 2386; + static attribute_2387 = 2387; + static attribute_2388 = 2388; + static attribute_2389 = 2389; + static attribute_2390 = 2390; + static attribute_2391 = 2391; + static attribute_2392 = 2392; + static attribute_2393 = 2393; + static attribute_2394 = 2394; + static attribute_2395 = 2395; + static attribute_2396 = 2396; + static attribute_2397 = 2397; + static attribute_2398 = 2398; + static attribute_2399 = 2399; + static attribute_2400 = 2400; + static attribute_2401 = 2401; + static attribute_2402 = 2402; + static attribute_2403 = 2403; + static attribute_2404 = 2404; + static attribute_2405 = 2405; + static attribute_2406 = 2406; + static attribute_2407 = 2407; + static attribute_2408 = 2408; + static attribute_2409 = 2409; + static attribute_2410 = 2410; + static attribute_2411 = 2411; + static attribute_2412 = 2412; + static attribute_2413 = 2413; + static attribute_2414 = 2414; + static attribute_2415 = 2415; + static attribute_2416 = 2416; + static attribute_2417 = 2417; + static attribute_2418 = 2418; + static attribute_2419 = 2419; + static attribute_2420 = 2420; + static attribute_2421 = 2421; + static attribute_2422 = 2422; + static attribute_2423 = 2423; + static attribute_2424 = 2424; + static attribute_2425 = 2425; + static attribute_2426 = 2426; + static attribute_2427 = 2427; + static attribute_2428 = 2428; + static attribute_2429 = 2429; + static attribute_2430 = 2430; + static attribute_2431 = 2431; + static attribute_2432 = 2432; + static attribute_2433 = 2433; + static attribute_2434 = 2434; + static attribute_2435 = 2435; + static attribute_2436 = 2436; + static attribute_2437 = 2437; + static attribute_2438 = 2438; + static attribute_2439 = 2439; + static attribute_2440 = 2440; + static attribute_2441 = 2441; + static attribute_2442 = 2442; + static attribute_2443 = 2443; + static attribute_2444 = 2444; + static attribute_2445 = 2445; + static attribute_2446 = 2446; + static attribute_2447 = 2447; + static attribute_2448 = 2448; + static attribute_2449 = 2449; + static attribute_2450 = 2450; + static attribute_2451 = 2451; + static attribute_2452 = 2452; + static attribute_2453 = 2453; + static attribute_2454 = 2454; + static attribute_2455 = 2455; + static attribute_2456 = 2456; + static attribute_2457 = 2457; + static attribute_2458 = 2458; + static attribute_2459 = 2459; + static attribute_2460 = 2460; + static attribute_2461 = 2461; + static attribute_2462 = 2462; + static attribute_2463 = 2463; + static attribute_2464 = 2464; + static attribute_2465 = 2465; + static attribute_2466 = 2466; + static attribute_2467 = 2467; + static attribute_2468 = 2468; + static attribute_2469 = 2469; + static attribute_2470 = 2470; + static attribute_2471 = 2471; + static attribute_2472 = 2472; + static attribute_2473 = 2473; + static attribute_2474 = 2474; + static attribute_2475 = 2475; + static attribute_2476 = 2476; + static attribute_2477 = 2477; + static attribute_2478 = 2478; + static attribute_2479 = 2479; + static attribute_2480 = 2480; + static attribute_2481 = 2481; + static attribute_2482 = 2482; + static attribute_2483 = 2483; + static attribute_2484 = 2484; + static attribute_2485 = 2485; + static attribute_2486 = 2486; + static attribute_2487 = 2487; + static attribute_2488 = 2488; + static attribute_2489 = 2489; + static attribute_2490 = 2490; + static attribute_2491 = 2491; + static attribute_2492 = 2492; + static attribute_2493 = 2493; + static attribute_2494 = 2494; + static attribute_2495 = 2495; + static attribute_2496 = 2496; + static attribute_2497 = 2497; + static attribute_2498 = 2498; + static attribute_2499 = 2499; + static attribute_2500 = 2500; + static attribute_2501 = 2501; + static attribute_2502 = 2502; + static attribute_2503 = 2503; + static attribute_2504 = 2504; + static attribute_2505 = 2505; + static attribute_2506 = 2506; + static attribute_2507 = 2507; + static attribute_2508 = 2508; + static attribute_2509 = 2509; + static attribute_2510 = 2510; + static attribute_2511 = 2511; + static attribute_2512 = 2512; + static attribute_2513 = 2513; + static attribute_2514 = 2514; + static attribute_2515 = 2515; + static attribute_2516 = 2516; + static attribute_2517 = 2517; + static attribute_2518 = 2518; + static attribute_2519 = 2519; + static attribute_2520 = 2520; + static attribute_2521 = 2521; + static attribute_2522 = 2522; + static attribute_2523 = 2523; + static attribute_2524 = 2524; + static attribute_2525 = 2525; + static attribute_2526 = 2526; + static attribute_2527 = 2527; + static attribute_2528 = 2528; + static attribute_2529 = 2529; + static attribute_2530 = 2530; + static attribute_2531 = 2531; + static attribute_2532 = 2532; + static attribute_2533 = 2533; + static attribute_2534 = 2534; + static attribute_2535 = 2535; + static attribute_2536 = 2536; + static attribute_2537 = 2537; + static attribute_2538 = 2538; + static attribute_2539 = 2539; + static attribute_2540 = 2540; + static attribute_2541 = 2541; + static attribute_2542 = 2542; + static attribute_2543 = 2543; + static attribute_2544 = 2544; + static attribute_2545 = 2545; + static attribute_2546 = 2546; + static attribute_2547 = 2547; + static attribute_2548 = 2548; + static attribute_2549 = 2549; + static attribute_2550 = 2550; + static attribute_2551 = 2551; + static attribute_2552 = 2552; + static attribute_2553 = 2553; + static attribute_2554 = 2554; + static attribute_2555 = 2555; + static attribute_2556 = 2556; + static attribute_2557 = 2557; + static attribute_2558 = 2558; + static attribute_2559 = 2559; + static attribute_2560 = 2560; + static attribute_2561 = 2561; + static attribute_2562 = 2562; + static attribute_2563 = 2563; + static attribute_2564 = 2564; + static attribute_2565 = 2565; + static attribute_2566 = 2566; + static attribute_2567 = 2567; + static attribute_2568 = 2568; + static attribute_2569 = 2569; + static attribute_2570 = 2570; + static attribute_2571 = 2571; + static attribute_2572 = 2572; + static attribute_2573 = 2573; + static attribute_2574 = 2574; + static attribute_2575 = 2575; + static attribute_2576 = 2576; + static attribute_2577 = 2577; + static attribute_2578 = 2578; + static attribute_2579 = 2579; + static attribute_2580 = 2580; + static attribute_2581 = 2581; + static attribute_2582 = 2582; + static attribute_2583 = 2583; + static attribute_2584 = 2584; + static attribute_2585 = 2585; + static attribute_2586 = 2586; + static attribute_2587 = 2587; + static attribute_2588 = 2588; + static attribute_2589 = 2589; + static attribute_2590 = 2590; + static attribute_2591 = 2591; + static attribute_2592 = 2592; + static attribute_2593 = 2593; + static attribute_2594 = 2594; + static attribute_2595 = 2595; + static attribute_2596 = 2596; + static attribute_2597 = 2597; + static attribute_2598 = 2598; + static attribute_2599 = 2599; + static attribute_2600 = 2600; + static attribute_2601 = 2601; + static attribute_2602 = 2602; + static attribute_2603 = 2603; + static attribute_2604 = 2604; + static attribute_2605 = 2605; + static attribute_2606 = 2606; + static attribute_2607 = 2607; + static attribute_2608 = 2608; + static attribute_2609 = 2609; + static attribute_2610 = 2610; + static attribute_2611 = 2611; + static attribute_2612 = 2612; + static attribute_2613 = 2613; + static attribute_2614 = 2614; + static attribute_2615 = 2615; + static attribute_2616 = 2616; + static attribute_2617 = 2617; + static attribute_2618 = 2618; + static attribute_2619 = 2619; + static attribute_2620 = 2620; + static attribute_2621 = 2621; + static attribute_2622 = 2622; + static attribute_2623 = 2623; + static attribute_2624 = 2624; + static attribute_2625 = 2625; + static attribute_2626 = 2626; + static attribute_2627 = 2627; + static attribute_2628 = 2628; + static attribute_2629 = 2629; + static attribute_2630 = 2630; + static attribute_2631 = 2631; + static attribute_2632 = 2632; + static attribute_2633 = 2633; + static attribute_2634 = 2634; + static attribute_2635 = 2635; + static attribute_2636 = 2636; + static attribute_2637 = 2637; + static attribute_2638 = 2638; + static attribute_2639 = 2639; + static attribute_2640 = 2640; + static attribute_2641 = 2641; + static attribute_2642 = 2642; + static attribute_2643 = 2643; + static attribute_2644 = 2644; + static attribute_2645 = 2645; + static attribute_2646 = 2646; + static attribute_2647 = 2647; + static attribute_2648 = 2648; + static attribute_2649 = 2649; + static attribute_2650 = 2650; + static attribute_2651 = 2651; + static attribute_2652 = 2652; + static attribute_2653 = 2653; + static attribute_2654 = 2654; + static attribute_2655 = 2655; + static attribute_2656 = 2656; + static attribute_2657 = 2657; + static attribute_2658 = 2658; + static attribute_2659 = 2659; + static attribute_2660 = 2660; + static attribute_2661 = 2661; + static attribute_2662 = 2662; + static attribute_2663 = 2663; + static attribute_2664 = 2664; + static attribute_2665 = 2665; + static attribute_2666 = 2666; + static attribute_2667 = 2667; + static attribute_2668 = 2668; + static attribute_2669 = 2669; + static attribute_2670 = 2670; + static attribute_2671 = 2671; + static attribute_2672 = 2672; + static attribute_2673 = 2673; + static attribute_2674 = 2674; + static attribute_2675 = 2675; + static attribute_2676 = 2676; + static attribute_2677 = 2677; + static attribute_2678 = 2678; + static attribute_2679 = 2679; + static attribute_2680 = 2680; + static attribute_2681 = 2681; + static attribute_2682 = 2682; + static attribute_2683 = 2683; + static attribute_2684 = 2684; + static attribute_2685 = 2685; + static attribute_2686 = 2686; + static attribute_2687 = 2687; + static attribute_2688 = 2688; + static attribute_2689 = 2689; + static attribute_2690 = 2690; + static attribute_2691 = 2691; + static attribute_2692 = 2692; + static attribute_2693 = 2693; + static attribute_2694 = 2694; + static attribute_2695 = 2695; + static attribute_2696 = 2696; + static attribute_2697 = 2697; + static attribute_2698 = 2698; + static attribute_2699 = 2699; + static attribute_2700 = 2700; + static attribute_2701 = 2701; + static attribute_2702 = 2702; + static attribute_2703 = 2703; + static attribute_2704 = 2704; + static attribute_2705 = 2705; + static attribute_2706 = 2706; + static attribute_2707 = 2707; + static attribute_2708 = 2708; + static attribute_2709 = 2709; + static attribute_2710 = 2710; + static attribute_2711 = 2711; + static attribute_2712 = 2712; + static attribute_2713 = 2713; + static attribute_2714 = 2714; + static attribute_2715 = 2715; + static attribute_2716 = 2716; + static attribute_2717 = 2717; + static attribute_2718 = 2718; + static attribute_2719 = 2719; + static attribute_2720 = 2720; + static attribute_2721 = 2721; + static attribute_2722 = 2722; + static attribute_2723 = 2723; + static attribute_2724 = 2724; + static attribute_2725 = 2725; + static attribute_2726 = 2726; + static attribute_2727 = 2727; + static attribute_2728 = 2728; + static attribute_2729 = 2729; + static attribute_2730 = 2730; + static attribute_2731 = 2731; + static attribute_2732 = 2732; + static attribute_2733 = 2733; + static attribute_2734 = 2734; + static attribute_2735 = 2735; + static attribute_2736 = 2736; + static attribute_2737 = 2737; + static attribute_2738 = 2738; + static attribute_2739 = 2739; + static attribute_2740 = 2740; + static attribute_2741 = 2741; + static attribute_2742 = 2742; + static attribute_2743 = 2743; + static attribute_2744 = 2744; + static attribute_2745 = 2745; + static attribute_2746 = 2746; + static attribute_2747 = 2747; + static attribute_2748 = 2748; + static attribute_2749 = 2749; + static attribute_2750 = 2750; + static attribute_2751 = 2751; + static attribute_2752 = 2752; + static attribute_2753 = 2753; + static attribute_2754 = 2754; + static attribute_2755 = 2755; + static attribute_2756 = 2756; + static attribute_2757 = 2757; + static attribute_2758 = 2758; + static attribute_2759 = 2759; + static attribute_2760 = 2760; + static attribute_2761 = 2761; + static attribute_2762 = 2762; + static attribute_2763 = 2763; + static attribute_2764 = 2764; + static attribute_2765 = 2765; + static attribute_2766 = 2766; + static attribute_2767 = 2767; + static attribute_2768 = 2768; + static attribute_2769 = 2769; + static attribute_2770 = 2770; + static attribute_2771 = 2771; + static attribute_2772 = 2772; + static attribute_2773 = 2773; + static attribute_2774 = 2774; + static attribute_2775 = 2775; + static attribute_2776 = 2776; + static attribute_2777 = 2777; + static attribute_2778 = 2778; + static attribute_2779 = 2779; + static attribute_2780 = 2780; + static attribute_2781 = 2781; + static attribute_2782 = 2782; + static attribute_2783 = 2783; + static attribute_2784 = 2784; + static attribute_2785 = 2785; + static attribute_2786 = 2786; + static attribute_2787 = 2787; + static attribute_2788 = 2788; + static attribute_2789 = 2789; + static attribute_2790 = 2790; + static attribute_2791 = 2791; + static attribute_2792 = 2792; + static attribute_2793 = 2793; + static attribute_2794 = 2794; + static attribute_2795 = 2795; + static attribute_2796 = 2796; + static attribute_2797 = 2797; + static attribute_2798 = 2798; + static attribute_2799 = 2799; + static attribute_2800 = 2800; + static attribute_2801 = 2801; + static attribute_2802 = 2802; + static attribute_2803 = 2803; + static attribute_2804 = 2804; + static attribute_2805 = 2805; + static attribute_2806 = 2806; + static attribute_2807 = 2807; + static attribute_2808 = 2808; + static attribute_2809 = 2809; + static attribute_2810 = 2810; + static attribute_2811 = 2811; + static attribute_2812 = 2812; + static attribute_2813 = 2813; + static attribute_2814 = 2814; + static attribute_2815 = 2815; + static attribute_2816 = 2816; + static attribute_2817 = 2817; + static attribute_2818 = 2818; + static attribute_2819 = 2819; + static attribute_2820 = 2820; + static attribute_2821 = 2821; + static attribute_2822 = 2822; + static attribute_2823 = 2823; + static attribute_2824 = 2824; + static attribute_2825 = 2825; + static attribute_2826 = 2826; + static attribute_2827 = 2827; + static attribute_2828 = 2828; + static attribute_2829 = 2829; + static attribute_2830 = 2830; + static attribute_2831 = 2831; + static attribute_2832 = 2832; + static attribute_2833 = 2833; + static attribute_2834 = 2834; + static attribute_2835 = 2835; + static attribute_2836 = 2836; + static attribute_2837 = 2837; + static attribute_2838 = 2838; + static attribute_2839 = 2839; + static attribute_2840 = 2840; + static attribute_2841 = 2841; + static attribute_2842 = 2842; + static attribute_2843 = 2843; + static attribute_2844 = 2844; + static attribute_2845 = 2845; + static attribute_2846 = 2846; + static attribute_2847 = 2847; + static attribute_2848 = 2848; + static attribute_2849 = 2849; + static attribute_2850 = 2850; + static attribute_2851 = 2851; + static attribute_2852 = 2852; + static attribute_2853 = 2853; + static attribute_2854 = 2854; + static attribute_2855 = 2855; + static attribute_2856 = 2856; + static attribute_2857 = 2857; + static attribute_2858 = 2858; + static attribute_2859 = 2859; + static attribute_2860 = 2860; + static attribute_2861 = 2861; + static attribute_2862 = 2862; + static attribute_2863 = 2863; + static attribute_2864 = 2864; + static attribute_2865 = 2865; + static attribute_2866 = 2866; + static attribute_2867 = 2867; + static attribute_2868 = 2868; + static attribute_2869 = 2869; + static attribute_2870 = 2870; + static attribute_2871 = 2871; + static attribute_2872 = 2872; + static attribute_2873 = 2873; + static attribute_2874 = 2874; + static attribute_2875 = 2875; + static attribute_2876 = 2876; + static attribute_2877 = 2877; + static attribute_2878 = 2878; + static attribute_2879 = 2879; + static attribute_2880 = 2880; + static attribute_2881 = 2881; + static attribute_2882 = 2882; + static attribute_2883 = 2883; + static attribute_2884 = 2884; + static attribute_2885 = 2885; + static attribute_2886 = 2886; + static attribute_2887 = 2887; + static attribute_2888 = 2888; + static attribute_2889 = 2889; + static attribute_2890 = 2890; + static attribute_2891 = 2891; + static attribute_2892 = 2892; + static attribute_2893 = 2893; + static attribute_2894 = 2894; + static attribute_2895 = 2895; + static attribute_2896 = 2896; + static attribute_2897 = 2897; + static attribute_2898 = 2898; + static attribute_2899 = 2899; + static attribute_2900 = 2900; + static attribute_2901 = 2901; + static attribute_2902 = 2902; + static attribute_2903 = 2903; + static attribute_2904 = 2904; + static attribute_2905 = 2905; + static attribute_2906 = 2906; + static attribute_2907 = 2907; + static attribute_2908 = 2908; + static attribute_2909 = 2909; + static attribute_2910 = 2910; + static attribute_2911 = 2911; + static attribute_2912 = 2912; + static attribute_2913 = 2913; + static attribute_2914 = 2914; + static attribute_2915 = 2915; + static attribute_2916 = 2916; + static attribute_2917 = 2917; + static attribute_2918 = 2918; + static attribute_2919 = 2919; + static attribute_2920 = 2920; + static attribute_2921 = 2921; + static attribute_2922 = 2922; + static attribute_2923 = 2923; + static attribute_2924 = 2924; + static attribute_2925 = 2925; + static attribute_2926 = 2926; + static attribute_2927 = 2927; + static attribute_2928 = 2928; + static attribute_2929 = 2929; + static attribute_2930 = 2930; + static attribute_2931 = 2931; + static attribute_2932 = 2932; + static attribute_2933 = 2933; + static attribute_2934 = 2934; + static attribute_2935 = 2935; + static attribute_2936 = 2936; + static attribute_2937 = 2937; + static attribute_2938 = 2938; + static attribute_2939 = 2939; + static attribute_2940 = 2940; + static attribute_2941 = 2941; + static attribute_2942 = 2942; + static attribute_2943 = 2943; + static attribute_2944 = 2944; + static attribute_2945 = 2945; + static attribute_2946 = 2946; + static attribute_2947 = 2947; + static attribute_2948 = 2948; + static attribute_2949 = 2949; + static attribute_2950 = 2950; + static attribute_2951 = 2951; + static attribute_2952 = 2952; + static attribute_2953 = 2953; + static attribute_2954 = 2954; + static attribute_2955 = 2955; + static attribute_2956 = 2956; + static attribute_2957 = 2957; + static attribute_2958 = 2958; + static attribute_2959 = 2959; + static attribute_2960 = 2960; + static attribute_2961 = 2961; + static attribute_2962 = 2962; + static attribute_2963 = 2963; + static attribute_2964 = 2964; + static attribute_2965 = 2965; + static attribute_2966 = 2966; + static attribute_2967 = 2967; + static attribute_2968 = 2968; + static attribute_2969 = 2969; + static attribute_2970 = 2970; + static attribute_2971 = 2971; + static attribute_2972 = 2972; + static attribute_2973 = 2973; + static attribute_2974 = 2974; + static attribute_2975 = 2975; + static attribute_2976 = 2976; + static attribute_2977 = 2977; + static attribute_2978 = 2978; + static attribute_2979 = 2979; + static attribute_2980 = 2980; + static attribute_2981 = 2981; + static attribute_2982 = 2982; + static attribute_2983 = 2983; + static attribute_2984 = 2984; + static attribute_2985 = 2985; + static attribute_2986 = 2986; + static attribute_2987 = 2987; + static attribute_2988 = 2988; + static attribute_2989 = 2989; + static attribute_2990 = 2990; + static attribute_2991 = 2991; + static attribute_2992 = 2992; + static attribute_2993 = 2993; + static attribute_2994 = 2994; + static attribute_2995 = 2995; + static attribute_2996 = 2996; + static attribute_2997 = 2997; + static attribute_2998 = 2998; + static attribute_2999 = 2999; + static attribute_3000 = 3000; + static attribute_3001 = 3001; + static attribute_3002 = 3002; + static attribute_3003 = 3003; + static attribute_3004 = 3004; + static attribute_3005 = 3005; + static attribute_3006 = 3006; + static attribute_3007 = 3007; + static attribute_3008 = 3008; + static attribute_3009 = 3009; + static attribute_3010 = 3010; + static attribute_3011 = 3011; + static attribute_3012 = 3012; + static attribute_3013 = 3013; + static attribute_3014 = 3014; + static attribute_3015 = 3015; + static attribute_3016 = 3016; + static attribute_3017 = 3017; + static attribute_3018 = 3018; + static attribute_3019 = 3019; + static attribute_3020 = 3020; + static attribute_3021 = 3021; + static attribute_3022 = 3022; + static attribute_3023 = 3023; + static attribute_3024 = 3024; + static attribute_3025 = 3025; + static attribute_3026 = 3026; + static attribute_3027 = 3027; + static attribute_3028 = 3028; + static attribute_3029 = 3029; + static attribute_3030 = 3030; + static attribute_3031 = 3031; + static attribute_3032 = 3032; + static attribute_3033 = 3033; + static attribute_3034 = 3034; + static attribute_3035 = 3035; + static attribute_3036 = 3036; + static attribute_3037 = 3037; + static attribute_3038 = 3038; + static attribute_3039 = 3039; + static attribute_3040 = 3040; + static attribute_3041 = 3041; + static attribute_3042 = 3042; + static attribute_3043 = 3043; + static attribute_3044 = 3044; + static attribute_3045 = 3045; + static attribute_3046 = 3046; + static attribute_3047 = 3047; + static attribute_3048 = 3048; + static attribute_3049 = 3049; + static attribute_3050 = 3050; + static attribute_3051 = 3051; + static attribute_3052 = 3052; + static attribute_3053 = 3053; + static attribute_3054 = 3054; + static attribute_3055 = 3055; + static attribute_3056 = 3056; + static attribute_3057 = 3057; + static attribute_3058 = 3058; + static attribute_3059 = 3059; + static attribute_3060 = 3060; + static attribute_3061 = 3061; + static attribute_3062 = 3062; + static attribute_3063 = 3063; + static attribute_3064 = 3064; + static attribute_3065 = 3065; + static attribute_3066 = 3066; + static attribute_3067 = 3067; + static attribute_3068 = 3068; + static attribute_3069 = 3069; + static attribute_3070 = 3070; + static attribute_3071 = 3071; + static attribute_3072 = 3072; + static attribute_3073 = 3073; + static attribute_3074 = 3074; + static attribute_3075 = 3075; + static attribute_3076 = 3076; + static attribute_3077 = 3077; + static attribute_3078 = 3078; + static attribute_3079 = 3079; + static attribute_3080 = 3080; + static attribute_3081 = 3081; + static attribute_3082 = 3082; + static attribute_3083 = 3083; + static attribute_3084 = 3084; + static attribute_3085 = 3085; + static attribute_3086 = 3086; + static attribute_3087 = 3087; + static attribute_3088 = 3088; + static attribute_3089 = 3089; + static attribute_3090 = 3090; + static attribute_3091 = 3091; + static attribute_3092 = 3092; + static attribute_3093 = 3093; + static attribute_3094 = 3094; + static attribute_3095 = 3095; + static attribute_3096 = 3096; + static attribute_3097 = 3097; + static attribute_3098 = 3098; + static attribute_3099 = 3099; + static attribute_3100 = 3100; + static attribute_3101 = 3101; + static attribute_3102 = 3102; + static attribute_3103 = 3103; + static attribute_3104 = 3104; + static attribute_3105 = 3105; + static attribute_3106 = 3106; + static attribute_3107 = 3107; + static attribute_3108 = 3108; + static attribute_3109 = 3109; + static attribute_3110 = 3110; + static attribute_3111 = 3111; + static attribute_3112 = 3112; + static attribute_3113 = 3113; + static attribute_3114 = 3114; + static attribute_3115 = 3115; + static attribute_3116 = 3116; + static attribute_3117 = 3117; + static attribute_3118 = 3118; + static attribute_3119 = 3119; + static attribute_3120 = 3120; + static attribute_3121 = 3121; + static attribute_3122 = 3122; + static attribute_3123 = 3123; + static attribute_3124 = 3124; + static attribute_3125 = 3125; + static attribute_3126 = 3126; + static attribute_3127 = 3127; + static attribute_3128 = 3128; + static attribute_3129 = 3129; + static attribute_3130 = 3130; + static attribute_3131 = 3131; + static attribute_3132 = 3132; + static attribute_3133 = 3133; + static attribute_3134 = 3134; + static attribute_3135 = 3135; + static attribute_3136 = 3136; + static attribute_3137 = 3137; + static attribute_3138 = 3138; + static attribute_3139 = 3139; + static attribute_3140 = 3140; + static attribute_3141 = 3141; + static attribute_3142 = 3142; + static attribute_3143 = 3143; + static attribute_3144 = 3144; + static attribute_3145 = 3145; + static attribute_3146 = 3146; + static attribute_3147 = 3147; + static attribute_3148 = 3148; + static attribute_3149 = 3149; + static attribute_3150 = 3150; + static attribute_3151 = 3151; + static attribute_3152 = 3152; + static attribute_3153 = 3153; + static attribute_3154 = 3154; + static attribute_3155 = 3155; + static attribute_3156 = 3156; + static attribute_3157 = 3157; + static attribute_3158 = 3158; + static attribute_3159 = 3159; + static attribute_3160 = 3160; + static attribute_3161 = 3161; + static attribute_3162 = 3162; + static attribute_3163 = 3163; + static attribute_3164 = 3164; + static attribute_3165 = 3165; + static attribute_3166 = 3166; + static attribute_3167 = 3167; + static attribute_3168 = 3168; + static attribute_3169 = 3169; + static attribute_3170 = 3170; + static attribute_3171 = 3171; + static attribute_3172 = 3172; + static attribute_3173 = 3173; + static attribute_3174 = 3174; + static attribute_3175 = 3175; + static attribute_3176 = 3176; + static attribute_3177 = 3177; + static attribute_3178 = 3178; + static attribute_3179 = 3179; + static attribute_3180 = 3180; + static attribute_3181 = 3181; + static attribute_3182 = 3182; + static attribute_3183 = 3183; + static attribute_3184 = 3184; + static attribute_3185 = 3185; + static attribute_3186 = 3186; + static attribute_3187 = 3187; + static attribute_3188 = 3188; + static attribute_3189 = 3189; + static attribute_3190 = 3190; + static attribute_3191 = 3191; + static attribute_3192 = 3192; + static attribute_3193 = 3193; + static attribute_3194 = 3194; + static attribute_3195 = 3195; + static attribute_3196 = 3196; + static attribute_3197 = 3197; + static attribute_3198 = 3198; + static attribute_3199 = 3199; + static attribute_3200 = 3200; + static attribute_3201 = 3201; + static attribute_3202 = 3202; + static attribute_3203 = 3203; + static attribute_3204 = 3204; + static attribute_3205 = 3205; + static attribute_3206 = 3206; + static attribute_3207 = 3207; + static attribute_3208 = 3208; + static attribute_3209 = 3209; + static attribute_3210 = 3210; + static attribute_3211 = 3211; + static attribute_3212 = 3212; + static attribute_3213 = 3213; + static attribute_3214 = 3214; + static attribute_3215 = 3215; + static attribute_3216 = 3216; + static attribute_3217 = 3217; + static attribute_3218 = 3218; + static attribute_3219 = 3219; + static attribute_3220 = 3220; + static attribute_3221 = 3221; + static attribute_3222 = 3222; + static attribute_3223 = 3223; + static attribute_3224 = 3224; + static attribute_3225 = 3225; + static attribute_3226 = 3226; + static attribute_3227 = 3227; + static attribute_3228 = 3228; + static attribute_3229 = 3229; + static attribute_3230 = 3230; + static attribute_3231 = 3231; + static attribute_3232 = 3232; + static attribute_3233 = 3233; + static attribute_3234 = 3234; + static attribute_3235 = 3235; + static attribute_3236 = 3236; + static attribute_3237 = 3237; + static attribute_3238 = 3238; + static attribute_3239 = 3239; + static attribute_3240 = 3240; + static attribute_3241 = 3241; + static attribute_3242 = 3242; + static attribute_3243 = 3243; + static attribute_3244 = 3244; + static attribute_3245 = 3245; + static attribute_3246 = 3246; + static attribute_3247 = 3247; + static attribute_3248 = 3248; + static attribute_3249 = 3249; + static attribute_3250 = 3250; + static attribute_3251 = 3251; + static attribute_3252 = 3252; + static attribute_3253 = 3253; + static attribute_3254 = 3254; + static attribute_3255 = 3255; + static attribute_3256 = 3256; + static attribute_3257 = 3257; + static attribute_3258 = 3258; + static attribute_3259 = 3259; + static attribute_3260 = 3260; + static attribute_3261 = 3261; + static attribute_3262 = 3262; + static attribute_3263 = 3263; + static attribute_3264 = 3264; + static attribute_3265 = 3265; + static attribute_3266 = 3266; + static attribute_3267 = 3267; + static attribute_3268 = 3268; + static attribute_3269 = 3269; + static attribute_3270 = 3270; + static attribute_3271 = 3271; + static attribute_3272 = 3272; + static attribute_3273 = 3273; + static attribute_3274 = 3274; + static attribute_3275 = 3275; + static attribute_3276 = 3276; + static attribute_3277 = 3277; + static attribute_3278 = 3278; + static attribute_3279 = 3279; + static attribute_3280 = 3280; + static attribute_3281 = 3281; + static attribute_3282 = 3282; + static attribute_3283 = 3283; + static attribute_3284 = 3284; + static attribute_3285 = 3285; + static attribute_3286 = 3286; + static attribute_3287 = 3287; + static attribute_3288 = 3288; + static attribute_3289 = 3289; + static attribute_3290 = 3290; + static attribute_3291 = 3291; + static attribute_3292 = 3292; + static attribute_3293 = 3293; + static attribute_3294 = 3294; + static attribute_3295 = 3295; + static attribute_3296 = 3296; + static attribute_3297 = 3297; + static attribute_3298 = 3298; + static attribute_3299 = 3299; + static attribute_3300 = 3300; + static attribute_3301 = 3301; + static attribute_3302 = 3302; + static attribute_3303 = 3303; + static attribute_3304 = 3304; + static attribute_3305 = 3305; + static attribute_3306 = 3306; + static attribute_3307 = 3307; + static attribute_3308 = 3308; + static attribute_3309 = 3309; + static attribute_3310 = 3310; + static attribute_3311 = 3311; + static attribute_3312 = 3312; + static attribute_3313 = 3313; + static attribute_3314 = 3314; + static attribute_3315 = 3315; + static attribute_3316 = 3316; + static attribute_3317 = 3317; + static attribute_3318 = 3318; + static attribute_3319 = 3319; + static attribute_3320 = 3320; + static attribute_3321 = 3321; + static attribute_3322 = 3322; + static attribute_3323 = 3323; + static attribute_3324 = 3324; + static attribute_3325 = 3325; + static attribute_3326 = 3326; + static attribute_3327 = 3327; + static attribute_3328 = 3328; + static attribute_3329 = 3329; + static attribute_3330 = 3330; + static attribute_3331 = 3331; + static attribute_3332 = 3332; + static attribute_3333 = 3333; + static attribute_3334 = 3334; + static attribute_3335 = 3335; + static attribute_3336 = 3336; + static attribute_3337 = 3337; + static attribute_3338 = 3338; + static attribute_3339 = 3339; + static attribute_3340 = 3340; + static attribute_3341 = 3341; + static attribute_3342 = 3342; + static attribute_3343 = 3343; + static attribute_3344 = 3344; + static attribute_3345 = 3345; + static attribute_3346 = 3346; + static attribute_3347 = 3347; + static attribute_3348 = 3348; + static attribute_3349 = 3349; + static attribute_3350 = 3350; + static attribute_3351 = 3351; + static attribute_3352 = 3352; + static attribute_3353 = 3353; + static attribute_3354 = 3354; + static attribute_3355 = 3355; + static attribute_3356 = 3356; + static attribute_3357 = 3357; + static attribute_3358 = 3358; + static attribute_3359 = 3359; + static attribute_3360 = 3360; + static attribute_3361 = 3361; + static attribute_3362 = 3362; + static attribute_3363 = 3363; + static attribute_3364 = 3364; + static attribute_3365 = 3365; + static attribute_3366 = 3366; + static attribute_3367 = 3367; + static attribute_3368 = 3368; + static attribute_3369 = 3369; + static attribute_3370 = 3370; + static attribute_3371 = 3371; + static attribute_3372 = 3372; + static attribute_3373 = 3373; + static attribute_3374 = 3374; + static attribute_3375 = 3375; + static attribute_3376 = 3376; + static attribute_3377 = 3377; + static attribute_3378 = 3378; + static attribute_3379 = 3379; + static attribute_3380 = 3380; + static attribute_3381 = 3381; + static attribute_3382 = 3382; + static attribute_3383 = 3383; + static attribute_3384 = 3384; + static attribute_3385 = 3385; + static attribute_3386 = 3386; + static attribute_3387 = 3387; + static attribute_3388 = 3388; + static attribute_3389 = 3389; + static attribute_3390 = 3390; + static attribute_3391 = 3391; + static attribute_3392 = 3392; + static attribute_3393 = 3393; + static attribute_3394 = 3394; + static attribute_3395 = 3395; + static attribute_3396 = 3396; + static attribute_3397 = 3397; + static attribute_3398 = 3398; + static attribute_3399 = 3399; + static attribute_3400 = 3400; + static attribute_3401 = 3401; + static attribute_3402 = 3402; + static attribute_3403 = 3403; + static attribute_3404 = 3404; + static attribute_3405 = 3405; + static attribute_3406 = 3406; + static attribute_3407 = 3407; + static attribute_3408 = 3408; + static attribute_3409 = 3409; + static attribute_3410 = 3410; + static attribute_3411 = 3411; + static attribute_3412 = 3412; + static attribute_3413 = 3413; + static attribute_3414 = 3414; + static attribute_3415 = 3415; + static attribute_3416 = 3416; + static attribute_3417 = 3417; + static attribute_3418 = 3418; + static attribute_3419 = 3419; + static attribute_3420 = 3420; + static attribute_3421 = 3421; + static attribute_3422 = 3422; + static attribute_3423 = 3423; + static attribute_3424 = 3424; + static attribute_3425 = 3425; + static attribute_3426 = 3426; + static attribute_3427 = 3427; + static attribute_3428 = 3428; + static attribute_3429 = 3429; + static attribute_3430 = 3430; + static attribute_3431 = 3431; + static attribute_3432 = 3432; + static attribute_3433 = 3433; + static attribute_3434 = 3434; + static attribute_3435 = 3435; + static attribute_3436 = 3436; + static attribute_3437 = 3437; + static attribute_3438 = 3438; + static attribute_3439 = 3439; + static attribute_3440 = 3440; + static attribute_3441 = 3441; + static attribute_3442 = 3442; + static attribute_3443 = 3443; + static attribute_3444 = 3444; + static attribute_3445 = 3445; + static attribute_3446 = 3446; + static attribute_3447 = 3447; + static attribute_3448 = 3448; + static attribute_3449 = 3449; + static attribute_3450 = 3450; + static attribute_3451 = 3451; + static attribute_3452 = 3452; + static attribute_3453 = 3453; + static attribute_3454 = 3454; + static attribute_3455 = 3455; + static attribute_3456 = 3456; + static attribute_3457 = 3457; + static attribute_3458 = 3458; + static attribute_3459 = 3459; + static attribute_3460 = 3460; + static attribute_3461 = 3461; + static attribute_3462 = 3462; + static attribute_3463 = 3463; + static attribute_3464 = 3464; + static attribute_3465 = 3465; + static attribute_3466 = 3466; + static attribute_3467 = 3467; + static attribute_3468 = 3468; + static attribute_3469 = 3469; + static attribute_3470 = 3470; + static attribute_3471 = 3471; + static attribute_3472 = 3472; + static attribute_3473 = 3473; + static attribute_3474 = 3474; + static attribute_3475 = 3475; + static attribute_3476 = 3476; + static attribute_3477 = 3477; + static attribute_3478 = 3478; + static attribute_3479 = 3479; + static attribute_3480 = 3480; + static attribute_3481 = 3481; + static attribute_3482 = 3482; + static attribute_3483 = 3483; + static attribute_3484 = 3484; + static attribute_3485 = 3485; + static attribute_3486 = 3486; + static attribute_3487 = 3487; + static attribute_3488 = 3488; + static attribute_3489 = 3489; + static attribute_3490 = 3490; + static attribute_3491 = 3491; + static attribute_3492 = 3492; + static attribute_3493 = 3493; + static attribute_3494 = 3494; + static attribute_3495 = 3495; + static attribute_3496 = 3496; + static attribute_3497 = 3497; + static attribute_3498 = 3498; + static attribute_3499 = 3499; + static attribute_3500 = 3500; + static attribute_3501 = 3501; + static attribute_3502 = 3502; + static attribute_3503 = 3503; + static attribute_3504 = 3504; + static attribute_3505 = 3505; + static attribute_3506 = 3506; + static attribute_3507 = 3507; + static attribute_3508 = 3508; + static attribute_3509 = 3509; + static attribute_3510 = 3510; + static attribute_3511 = 3511; + static attribute_3512 = 3512; + static attribute_3513 = 3513; + static attribute_3514 = 3514; + static attribute_3515 = 3515; + static attribute_3516 = 3516; + static attribute_3517 = 3517; + static attribute_3518 = 3518; + static attribute_3519 = 3519; + static attribute_3520 = 3520; + static attribute_3521 = 3521; + static attribute_3522 = 3522; + static attribute_3523 = 3523; + static attribute_3524 = 3524; + static attribute_3525 = 3525; + static attribute_3526 = 3526; + static attribute_3527 = 3527; + static attribute_3528 = 3528; + static attribute_3529 = 3529; + static attribute_3530 = 3530; + static attribute_3531 = 3531; + static attribute_3532 = 3532; + static attribute_3533 = 3533; + static attribute_3534 = 3534; + static attribute_3535 = 3535; + static attribute_3536 = 3536; + static attribute_3537 = 3537; + static attribute_3538 = 3538; + static attribute_3539 = 3539; + static attribute_3540 = 3540; + static attribute_3541 = 3541; + static attribute_3542 = 3542; + static attribute_3543 = 3543; + static attribute_3544 = 3544; + static attribute_3545 = 3545; + static attribute_3546 = 3546; + static attribute_3547 = 3547; + static attribute_3548 = 3548; + static attribute_3549 = 3549; + static attribute_3550 = 3550; + static attribute_3551 = 3551; + static attribute_3552 = 3552; + static attribute_3553 = 3553; + static attribute_3554 = 3554; + static attribute_3555 = 3555; + static attribute_3556 = 3556; + static attribute_3557 = 3557; + static attribute_3558 = 3558; + static attribute_3559 = 3559; + static attribute_3560 = 3560; + static attribute_3561 = 3561; + static attribute_3562 = 3562; + static attribute_3563 = 3563; + static attribute_3564 = 3564; + static attribute_3565 = 3565; + static attribute_3566 = 3566; + static attribute_3567 = 3567; + static attribute_3568 = 3568; + static attribute_3569 = 3569; + static attribute_3570 = 3570; + static attribute_3571 = 3571; + static attribute_3572 = 3572; + static attribute_3573 = 3573; + static attribute_3574 = 3574; + static attribute_3575 = 3575; + static attribute_3576 = 3576; + static attribute_3577 = 3577; + static attribute_3578 = 3578; + static attribute_3579 = 3579; + static attribute_3580 = 3580; + static attribute_3581 = 3581; + static attribute_3582 = 3582; + static attribute_3583 = 3583; + static attribute_3584 = 3584; + static attribute_3585 = 3585; + static attribute_3586 = 3586; + static attribute_3587 = 3587; + static attribute_3588 = 3588; + static attribute_3589 = 3589; + static attribute_3590 = 3590; + static attribute_3591 = 3591; + static attribute_3592 = 3592; + static attribute_3593 = 3593; + static attribute_3594 = 3594; + static attribute_3595 = 3595; + static attribute_3596 = 3596; + static attribute_3597 = 3597; + static attribute_3598 = 3598; + static attribute_3599 = 3599; + static attribute_3600 = 3600; + static attribute_3601 = 3601; + static attribute_3602 = 3602; + static attribute_3603 = 3603; + static attribute_3604 = 3604; + static attribute_3605 = 3605; + static attribute_3606 = 3606; + static attribute_3607 = 3607; + static attribute_3608 = 3608; + static attribute_3609 = 3609; + static attribute_3610 = 3610; + static attribute_3611 = 3611; + static attribute_3612 = 3612; + static attribute_3613 = 3613; + static attribute_3614 = 3614; + static attribute_3615 = 3615; + static attribute_3616 = 3616; + static attribute_3617 = 3617; + static attribute_3618 = 3618; + static attribute_3619 = 3619; + static attribute_3620 = 3620; + static attribute_3621 = 3621; + static attribute_3622 = 3622; + static attribute_3623 = 3623; + static attribute_3624 = 3624; + static attribute_3625 = 3625; + static attribute_3626 = 3626; + static attribute_3627 = 3627; + static attribute_3628 = 3628; + static attribute_3629 = 3629; + static attribute_3630 = 3630; + static attribute_3631 = 3631; + static attribute_3632 = 3632; + static attribute_3633 = 3633; + static attribute_3634 = 3634; + static attribute_3635 = 3635; + static attribute_3636 = 3636; + static attribute_3637 = 3637; + static attribute_3638 = 3638; + static attribute_3639 = 3639; + static attribute_3640 = 3640; + static attribute_3641 = 3641; + static attribute_3642 = 3642; + static attribute_3643 = 3643; + static attribute_3644 = 3644; + static attribute_3645 = 3645; + static attribute_3646 = 3646; + static attribute_3647 = 3647; + static attribute_3648 = 3648; + static attribute_3649 = 3649; + static attribute_3650 = 3650; + static attribute_3651 = 3651; + static attribute_3652 = 3652; + static attribute_3653 = 3653; + static attribute_3654 = 3654; + static attribute_3655 = 3655; + static attribute_3656 = 3656; + static attribute_3657 = 3657; + static attribute_3658 = 3658; + static attribute_3659 = 3659; + static attribute_3660 = 3660; + static attribute_3661 = 3661; + static attribute_3662 = 3662; + static attribute_3663 = 3663; + static attribute_3664 = 3664; + static attribute_3665 = 3665; + static attribute_3666 = 3666; + static attribute_3667 = 3667; + static attribute_3668 = 3668; + static attribute_3669 = 3669; + static attribute_3670 = 3670; + static attribute_3671 = 3671; + static attribute_3672 = 3672; + static attribute_3673 = 3673; + static attribute_3674 = 3674; + static attribute_3675 = 3675; + static attribute_3676 = 3676; + static attribute_3677 = 3677; + static attribute_3678 = 3678; + static attribute_3679 = 3679; + static attribute_3680 = 3680; + static attribute_3681 = 3681; + static attribute_3682 = 3682; + static attribute_3683 = 3683; + static attribute_3684 = 3684; + static attribute_3685 = 3685; + static attribute_3686 = 3686; + static attribute_3687 = 3687; + static attribute_3688 = 3688; + static attribute_3689 = 3689; + static attribute_3690 = 3690; + static attribute_3691 = 3691; + static attribute_3692 = 3692; + static attribute_3693 = 3693; + static attribute_3694 = 3694; + static attribute_3695 = 3695; + static attribute_3696 = 3696; + static attribute_3697 = 3697; + static attribute_3698 = 3698; + static attribute_3699 = 3699; + static attribute_3700 = 3700; + static attribute_3701 = 3701; + static attribute_3702 = 3702; + static attribute_3703 = 3703; + static attribute_3704 = 3704; + static attribute_3705 = 3705; + static attribute_3706 = 3706; + static attribute_3707 = 3707; + static attribute_3708 = 3708; + static attribute_3709 = 3709; + static attribute_3710 = 3710; + static attribute_3711 = 3711; + static attribute_3712 = 3712; + static attribute_3713 = 3713; + static attribute_3714 = 3714; + static attribute_3715 = 3715; + static attribute_3716 = 3716; + static attribute_3717 = 3717; + static attribute_3718 = 3718; + static attribute_3719 = 3719; + static attribute_3720 = 3720; + static attribute_3721 = 3721; + static attribute_3722 = 3722; + static attribute_3723 = 3723; + static attribute_3724 = 3724; + static attribute_3725 = 3725; + static attribute_3726 = 3726; + static attribute_3727 = 3727; + static attribute_3728 = 3728; + static attribute_3729 = 3729; + static attribute_3730 = 3730; + static attribute_3731 = 3731; + static attribute_3732 = 3732; + static attribute_3733 = 3733; + static attribute_3734 = 3734; + static attribute_3735 = 3735; + static attribute_3736 = 3736; + static attribute_3737 = 3737; + static attribute_3738 = 3738; + static attribute_3739 = 3739; + static attribute_3740 = 3740; + static attribute_3741 = 3741; + static attribute_3742 = 3742; + static attribute_3743 = 3743; + static attribute_3744 = 3744; + static attribute_3745 = 3745; + static attribute_3746 = 3746; + static attribute_3747 = 3747; + static attribute_3748 = 3748; + static attribute_3749 = 3749; + static attribute_3750 = 3750; + static attribute_3751 = 3751; + static attribute_3752 = 3752; + static attribute_3753 = 3753; + static attribute_3754 = 3754; + static attribute_3755 = 3755; + static attribute_3756 = 3756; + static attribute_3757 = 3757; + static attribute_3758 = 3758; + static attribute_3759 = 3759; + static attribute_3760 = 3760; + static attribute_3761 = 3761; + static attribute_3762 = 3762; + static attribute_3763 = 3763; + static attribute_3764 = 3764; + static attribute_3765 = 3765; + static attribute_3766 = 3766; + static attribute_3767 = 3767; + static attribute_3768 = 3768; + static attribute_3769 = 3769; + static attribute_3770 = 3770; + static attribute_3771 = 3771; + static attribute_3772 = 3772; + static attribute_3773 = 3773; + static attribute_3774 = 3774; + static attribute_3775 = 3775; + static attribute_3776 = 3776; + static attribute_3777 = 3777; + static attribute_3778 = 3778; + static attribute_3779 = 3779; + static attribute_3780 = 3780; + static attribute_3781 = 3781; + static attribute_3782 = 3782; + static attribute_3783 = 3783; + static attribute_3784 = 3784; + static attribute_3785 = 3785; + static attribute_3786 = 3786; + static attribute_3787 = 3787; + static attribute_3788 = 3788; + static attribute_3789 = 3789; + static attribute_3790 = 3790; + static attribute_3791 = 3791; + static attribute_3792 = 3792; + static attribute_3793 = 3793; + static attribute_3794 = 3794; + static attribute_3795 = 3795; + static attribute_3796 = 3796; + static attribute_3797 = 3797; + static attribute_3798 = 3798; + static attribute_3799 = 3799; + static attribute_3800 = 3800; + static attribute_3801 = 3801; + static attribute_3802 = 3802; + static attribute_3803 = 3803; + static attribute_3804 = 3804; + static attribute_3805 = 3805; + static attribute_3806 = 3806; + static attribute_3807 = 3807; + static attribute_3808 = 3808; + static attribute_3809 = 3809; + static attribute_3810 = 3810; + static attribute_3811 = 3811; + static attribute_3812 = 3812; + static attribute_3813 = 3813; + static attribute_3814 = 3814; + static attribute_3815 = 3815; + static attribute_3816 = 3816; + static attribute_3817 = 3817; + static attribute_3818 = 3818; + static attribute_3819 = 3819; + static attribute_3820 = 3820; + static attribute_3821 = 3821; + static attribute_3822 = 3822; + static attribute_3823 = 3823; + static attribute_3824 = 3824; + static attribute_3825 = 3825; + static attribute_3826 = 3826; + static attribute_3827 = 3827; + static attribute_3828 = 3828; + static attribute_3829 = 3829; + static attribute_3830 = 3830; + static attribute_3831 = 3831; + static attribute_3832 = 3832; + static attribute_3833 = 3833; + static attribute_3834 = 3834; + static attribute_3835 = 3835; + static attribute_3836 = 3836; + static attribute_3837 = 3837; + static attribute_3838 = 3838; + static attribute_3839 = 3839; + static attribute_3840 = 3840; + static attribute_3841 = 3841; + static attribute_3842 = 3842; + static attribute_3843 = 3843; + static attribute_3844 = 3844; + static attribute_3845 = 3845; + static attribute_3846 = 3846; + static attribute_3847 = 3847; + static attribute_3848 = 3848; + static attribute_3849 = 3849; + static attribute_3850 = 3850; + static attribute_3851 = 3851; + static attribute_3852 = 3852; + static attribute_3853 = 3853; + static attribute_3854 = 3854; + static attribute_3855 = 3855; + static attribute_3856 = 3856; + static attribute_3857 = 3857; + static attribute_3858 = 3858; + static attribute_3859 = 3859; + static attribute_3860 = 3860; + static attribute_3861 = 3861; + static attribute_3862 = 3862; + static attribute_3863 = 3863; + static attribute_3864 = 3864; + static attribute_3865 = 3865; + static attribute_3866 = 3866; + static attribute_3867 = 3867; + static attribute_3868 = 3868; + static attribute_3869 = 3869; + static attribute_3870 = 3870; + static attribute_3871 = 3871; + static attribute_3872 = 3872; + static attribute_3873 = 3873; + static attribute_3874 = 3874; + static attribute_3875 = 3875; + static attribute_3876 = 3876; + static attribute_3877 = 3877; + static attribute_3878 = 3878; + static attribute_3879 = 3879; + static attribute_3880 = 3880; + static attribute_3881 = 3881; + static attribute_3882 = 3882; + static attribute_3883 = 3883; + static attribute_3884 = 3884; + static attribute_3885 = 3885; + static attribute_3886 = 3886; + static attribute_3887 = 3887; + static attribute_3888 = 3888; + static attribute_3889 = 3889; + static attribute_3890 = 3890; + static attribute_3891 = 3891; + static attribute_3892 = 3892; + static attribute_3893 = 3893; + static attribute_3894 = 3894; + static attribute_3895 = 3895; + static attribute_3896 = 3896; + static attribute_3897 = 3897; + static attribute_3898 = 3898; + static attribute_3899 = 3899; + static attribute_3900 = 3900; + static attribute_3901 = 3901; + static attribute_3902 = 3902; + static attribute_3903 = 3903; + static attribute_3904 = 3904; + static attribute_3905 = 3905; + static attribute_3906 = 3906; + static attribute_3907 = 3907; + static attribute_3908 = 3908; + static attribute_3909 = 3909; + static attribute_3910 = 3910; + static attribute_3911 = 3911; + static attribute_3912 = 3912; + static attribute_3913 = 3913; + static attribute_3914 = 3914; + static attribute_3915 = 3915; + static attribute_3916 = 3916; + static attribute_3917 = 3917; + static attribute_3918 = 3918; + static attribute_3919 = 3919; + static attribute_3920 = 3920; + static attribute_3921 = 3921; + static attribute_3922 = 3922; + static attribute_3923 = 3923; + static attribute_3924 = 3924; + static attribute_3925 = 3925; + static attribute_3926 = 3926; + static attribute_3927 = 3927; + static attribute_3928 = 3928; + static attribute_3929 = 3929; + static attribute_3930 = 3930; + static attribute_3931 = 3931; + static attribute_3932 = 3932; + static attribute_3933 = 3933; + static attribute_3934 = 3934; + static attribute_3935 = 3935; + static attribute_3936 = 3936; + static attribute_3937 = 3937; + static attribute_3938 = 3938; + static attribute_3939 = 3939; + static attribute_3940 = 3940; + static attribute_3941 = 3941; + static attribute_3942 = 3942; + static attribute_3943 = 3943; + static attribute_3944 = 3944; + static attribute_3945 = 3945; + static attribute_3946 = 3946; + static attribute_3947 = 3947; + static attribute_3948 = 3948; + static attribute_3949 = 3949; + static attribute_3950 = 3950; + static attribute_3951 = 3951; + static attribute_3952 = 3952; + static attribute_3953 = 3953; + static attribute_3954 = 3954; + static attribute_3955 = 3955; + static attribute_3956 = 3956; + static attribute_3957 = 3957; + static attribute_3958 = 3958; + static attribute_3959 = 3959; + static attribute_3960 = 3960; + static attribute_3961 = 3961; + static attribute_3962 = 3962; + static attribute_3963 = 3963; + static attribute_3964 = 3964; + static attribute_3965 = 3965; + static attribute_3966 = 3966; + static attribute_3967 = 3967; + static attribute_3968 = 3968; + static attribute_3969 = 3969; + static attribute_3970 = 3970; + static attribute_3971 = 3971; + static attribute_3972 = 3972; + static attribute_3973 = 3973; + static attribute_3974 = 3974; + static attribute_3975 = 3975; + static attribute_3976 = 3976; + static attribute_3977 = 3977; + static attribute_3978 = 3978; + static attribute_3979 = 3979; + static attribute_3980 = 3980; + static attribute_3981 = 3981; + static attribute_3982 = 3982; + static attribute_3983 = 3983; + static attribute_3984 = 3984; + static attribute_3985 = 3985; + static attribute_3986 = 3986; + static attribute_3987 = 3987; + static attribute_3988 = 3988; + static attribute_3989 = 3989; + static attribute_3990 = 3990; + static attribute_3991 = 3991; + static attribute_3992 = 3992; + static attribute_3993 = 3993; + static attribute_3994 = 3994; + static attribute_3995 = 3995; + static attribute_3996 = 3996; + static attribute_3997 = 3997; + static attribute_3998 = 3998; + static attribute_3999 = 3999; + static attribute_4000 = 4000; + static attribute_4001 = 4001; + static attribute_4002 = 4002; + static attribute_4003 = 4003; + static attribute_4004 = 4004; + static attribute_4005 = 4005; + static attribute_4006 = 4006; + static attribute_4007 = 4007; + static attribute_4008 = 4008; + static attribute_4009 = 4009; + static attribute_4010 = 4010; + static attribute_4011 = 4011; + static attribute_4012 = 4012; + static attribute_4013 = 4013; + static attribute_4014 = 4014; + static attribute_4015 = 4015; + static attribute_4016 = 4016; + static attribute_4017 = 4017; + static attribute_4018 = 4018; + static attribute_4019 = 4019; + static attribute_4020 = 4020; + static attribute_4021 = 4021; + static attribute_4022 = 4022; + static attribute_4023 = 4023; + static attribute_4024 = 4024; + static attribute_4025 = 4025; + static attribute_4026 = 4026; + static attribute_4027 = 4027; + static attribute_4028 = 4028; + static attribute_4029 = 4029; + static attribute_4030 = 4030; + static attribute_4031 = 4031; + static attribute_4032 = 4032; + static attribute_4033 = 4033; + static attribute_4034 = 4034; + static attribute_4035 = 4035; + static attribute_4036 = 4036; + static attribute_4037 = 4037; + static attribute_4038 = 4038; + static attribute_4039 = 4039; + static attribute_4040 = 4040; + static attribute_4041 = 4041; + static attribute_4042 = 4042; + static attribute_4043 = 4043; + static attribute_4044 = 4044; + static attribute_4045 = 4045; + static attribute_4046 = 4046; + static attribute_4047 = 4047; + static attribute_4048 = 4048; + static attribute_4049 = 4049; + static attribute_4050 = 4050; + static attribute_4051 = 4051; + static attribute_4052 = 4052; + static attribute_4053 = 4053; + static attribute_4054 = 4054; + static attribute_4055 = 4055; + static attribute_4056 = 4056; + static attribute_4057 = 4057; + static attribute_4058 = 4058; + static attribute_4059 = 4059; + static attribute_4060 = 4060; + static attribute_4061 = 4061; + static attribute_4062 = 4062; + static attribute_4063 = 4063; + static attribute_4064 = 4064; + static attribute_4065 = 4065; + static attribute_4066 = 4066; + static attribute_4067 = 4067; + static attribute_4068 = 4068; + static attribute_4069 = 4069; + static attribute_4070 = 4070; + static attribute_4071 = 4071; + static attribute_4072 = 4072; + static attribute_4073 = 4073; + static attribute_4074 = 4074; + static attribute_4075 = 4075; + static attribute_4076 = 4076; + static attribute_4077 = 4077; + static attribute_4078 = 4078; + static attribute_4079 = 4079; + static attribute_4080 = 4080; + static attribute_4081 = 4081; + static attribute_4082 = 4082; + static attribute_4083 = 4083; + static attribute_4084 = 4084; + static attribute_4085 = 4085; + static attribute_4086 = 4086; + static attribute_4087 = 4087; + static attribute_4088 = 4088; + static attribute_4089 = 4089; + static attribute_4090 = 4090; + static attribute_4091 = 4091; + static attribute_4092 = 4092; + static attribute_4093 = 4093; + static attribute_4094 = 4094; + static attribute_4095 = 4095; + static attribute_4096 = 4096; + static attribute_4097 = 4097; + static attribute_4098 = 4098; + static attribute_4099 = 4099; + static attribute_4100 = 4100; + static attribute_4101 = 4101; + static attribute_4102 = 4102; + static attribute_4103 = 4103; + static attribute_4104 = 4104; + static attribute_4105 = 4105; + static attribute_4106 = 4106; + static attribute_4107 = 4107; + static attribute_4108 = 4108; + static attribute_4109 = 4109; + static attribute_4110 = 4110; + static attribute_4111 = 4111; + static attribute_4112 = 4112; + static attribute_4113 = 4113; + static attribute_4114 = 4114; + static attribute_4115 = 4115; + static attribute_4116 = 4116; + static attribute_4117 = 4117; + static attribute_4118 = 4118; + static attribute_4119 = 4119; + static attribute_4120 = 4120; + static attribute_4121 = 4121; + static attribute_4122 = 4122; + static attribute_4123 = 4123; + static attribute_4124 = 4124; + static attribute_4125 = 4125; + static attribute_4126 = 4126; + static attribute_4127 = 4127; + static attribute_4128 = 4128; + static attribute_4129 = 4129; + static attribute_4130 = 4130; + static attribute_4131 = 4131; + static attribute_4132 = 4132; + static attribute_4133 = 4133; + static attribute_4134 = 4134; + static attribute_4135 = 4135; + static attribute_4136 = 4136; + static attribute_4137 = 4137; + static attribute_4138 = 4138; + static attribute_4139 = 4139; + static attribute_4140 = 4140; + static attribute_4141 = 4141; + static attribute_4142 = 4142; + static attribute_4143 = 4143; + static attribute_4144 = 4144; + static attribute_4145 = 4145; + static attribute_4146 = 4146; + static attribute_4147 = 4147; + static attribute_4148 = 4148; + static attribute_4149 = 4149; + static attribute_4150 = 4150; + static attribute_4151 = 4151; + static attribute_4152 = 4152; + static attribute_4153 = 4153; + static attribute_4154 = 4154; + static attribute_4155 = 4155; + static attribute_4156 = 4156; + static attribute_4157 = 4157; + static attribute_4158 = 4158; + static attribute_4159 = 4159; + static attribute_4160 = 4160; + static attribute_4161 = 4161; + static attribute_4162 = 4162; + static attribute_4163 = 4163; + static attribute_4164 = 4164; + static attribute_4165 = 4165; + static attribute_4166 = 4166; + static attribute_4167 = 4167; + static attribute_4168 = 4168; + static attribute_4169 = 4169; + static attribute_4170 = 4170; + static attribute_4171 = 4171; + static attribute_4172 = 4172; + static attribute_4173 = 4173; + static attribute_4174 = 4174; + static attribute_4175 = 4175; + static attribute_4176 = 4176; + static attribute_4177 = 4177; + static attribute_4178 = 4178; + static attribute_4179 = 4179; + static attribute_4180 = 4180; + static attribute_4181 = 4181; + static attribute_4182 = 4182; + static attribute_4183 = 4183; + static attribute_4184 = 4184; + static attribute_4185 = 4185; + static attribute_4186 = 4186; + static attribute_4187 = 4187; + static attribute_4188 = 4188; + static attribute_4189 = 4189; + static attribute_4190 = 4190; + static attribute_4191 = 4191; + static attribute_4192 = 4192; + static attribute_4193 = 4193; + static attribute_4194 = 4194; + static attribute_4195 = 4195; + static attribute_4196 = 4196; + static attribute_4197 = 4197; + static attribute_4198 = 4198; + static attribute_4199 = 4199; + static attribute_4200 = 4200; + static attribute_4201 = 4201; + static attribute_4202 = 4202; + static attribute_4203 = 4203; + static attribute_4204 = 4204; + static attribute_4205 = 4205; + static attribute_4206 = 4206; + static attribute_4207 = 4207; + static attribute_4208 = 4208; + static attribute_4209 = 4209; + static attribute_4210 = 4210; + static attribute_4211 = 4211; + static attribute_4212 = 4212; + static attribute_4213 = 4213; + static attribute_4214 = 4214; + static attribute_4215 = 4215; + static attribute_4216 = 4216; + static attribute_4217 = 4217; + static attribute_4218 = 4218; + static attribute_4219 = 4219; + static attribute_4220 = 4220; + static attribute_4221 = 4221; + static attribute_4222 = 4222; + static attribute_4223 = 4223; + static attribute_4224 = 4224; + static attribute_4225 = 4225; + static attribute_4226 = 4226; + static attribute_4227 = 4227; + static attribute_4228 = 4228; + static attribute_4229 = 4229; + static attribute_4230 = 4230; + static attribute_4231 = 4231; + static attribute_4232 = 4232; + static attribute_4233 = 4233; + static attribute_4234 = 4234; + static attribute_4235 = 4235; + static attribute_4236 = 4236; + static attribute_4237 = 4237; + static attribute_4238 = 4238; + static attribute_4239 = 4239; + static attribute_4240 = 4240; + static attribute_4241 = 4241; + static attribute_4242 = 4242; + static attribute_4243 = 4243; + static attribute_4244 = 4244; + static attribute_4245 = 4245; + static attribute_4246 = 4246; + static attribute_4247 = 4247; + static attribute_4248 = 4248; + static attribute_4249 = 4249; + static attribute_4250 = 4250; + static attribute_4251 = 4251; + static attribute_4252 = 4252; + static attribute_4253 = 4253; + static attribute_4254 = 4254; + static attribute_4255 = 4255; + static attribute_4256 = 4256; + static attribute_4257 = 4257; + static attribute_4258 = 4258; + static attribute_4259 = 4259; + static attribute_4260 = 4260; + static attribute_4261 = 4261; + static attribute_4262 = 4262; + static attribute_4263 = 4263; + static attribute_4264 = 4264; + static attribute_4265 = 4265; + static attribute_4266 = 4266; + static attribute_4267 = 4267; + static attribute_4268 = 4268; + static attribute_4269 = 4269; + static attribute_4270 = 4270; + static attribute_4271 = 4271; + static attribute_4272 = 4272; + static attribute_4273 = 4273; + static attribute_4274 = 4274; + static attribute_4275 = 4275; + static attribute_4276 = 4276; + static attribute_4277 = 4277; + static attribute_4278 = 4278; + static attribute_4279 = 4279; + static attribute_4280 = 4280; + static attribute_4281 = 4281; + static attribute_4282 = 4282; + static attribute_4283 = 4283; + static attribute_4284 = 4284; + static attribute_4285 = 4285; + static attribute_4286 = 4286; + static attribute_4287 = 4287; + static attribute_4288 = 4288; + static attribute_4289 = 4289; + static attribute_4290 = 4290; + static attribute_4291 = 4291; + static attribute_4292 = 4292; + static attribute_4293 = 4293; + static attribute_4294 = 4294; + static attribute_4295 = 4295; + static attribute_4296 = 4296; + static attribute_4297 = 4297; + static attribute_4298 = 4298; + static attribute_4299 = 4299; + static attribute_4300 = 4300; + static attribute_4301 = 4301; + static attribute_4302 = 4302; + static attribute_4303 = 4303; + static attribute_4304 = 4304; + static attribute_4305 = 4305; + static attribute_4306 = 4306; + static attribute_4307 = 4307; + static attribute_4308 = 4308; + static attribute_4309 = 4309; + static attribute_4310 = 4310; + static attribute_4311 = 4311; + static attribute_4312 = 4312; + static attribute_4313 = 4313; + static attribute_4314 = 4314; + static attribute_4315 = 4315; + static attribute_4316 = 4316; + static attribute_4317 = 4317; + static attribute_4318 = 4318; + static attribute_4319 = 4319; + static attribute_4320 = 4320; + static attribute_4321 = 4321; + static attribute_4322 = 4322; + static attribute_4323 = 4323; + static attribute_4324 = 4324; + static attribute_4325 = 4325; + static attribute_4326 = 4326; + static attribute_4327 = 4327; + static attribute_4328 = 4328; + static attribute_4329 = 4329; + static attribute_4330 = 4330; + static attribute_4331 = 4331; + static attribute_4332 = 4332; + static attribute_4333 = 4333; + static attribute_4334 = 4334; + static attribute_4335 = 4335; + static attribute_4336 = 4336; + static attribute_4337 = 4337; + static attribute_4338 = 4338; + static attribute_4339 = 4339; + static attribute_4340 = 4340; + static attribute_4341 = 4341; + static attribute_4342 = 4342; + static attribute_4343 = 4343; + static attribute_4344 = 4344; + static attribute_4345 = 4345; + static attribute_4346 = 4346; + static attribute_4347 = 4347; + static attribute_4348 = 4348; + static attribute_4349 = 4349; + static attribute_4350 = 4350; + static attribute_4351 = 4351; + static attribute_4352 = 4352; + static attribute_4353 = 4353; + static attribute_4354 = 4354; + static attribute_4355 = 4355; + static attribute_4356 = 4356; + static attribute_4357 = 4357; + static attribute_4358 = 4358; + static attribute_4359 = 4359; + static attribute_4360 = 4360; + static attribute_4361 = 4361; + static attribute_4362 = 4362; + static attribute_4363 = 4363; + static attribute_4364 = 4364; + static attribute_4365 = 4365; + static attribute_4366 = 4366; + static attribute_4367 = 4367; + static attribute_4368 = 4368; + static attribute_4369 = 4369; + static attribute_4370 = 4370; + static attribute_4371 = 4371; + static attribute_4372 = 4372; + static attribute_4373 = 4373; + static attribute_4374 = 4374; + static attribute_4375 = 4375; + static attribute_4376 = 4376; + static attribute_4377 = 4377; + static attribute_4378 = 4378; + static attribute_4379 = 4379; + static attribute_4380 = 4380; + static attribute_4381 = 4381; + static attribute_4382 = 4382; + static attribute_4383 = 4383; + static attribute_4384 = 4384; + static attribute_4385 = 4385; + static attribute_4386 = 4386; + static attribute_4387 = 4387; + static attribute_4388 = 4388; + static attribute_4389 = 4389; + static attribute_4390 = 4390; + static attribute_4391 = 4391; + static attribute_4392 = 4392; + static attribute_4393 = 4393; + static attribute_4394 = 4394; + static attribute_4395 = 4395; + static attribute_4396 = 4396; + static attribute_4397 = 4397; + static attribute_4398 = 4398; + static attribute_4399 = 4399; + static attribute_4400 = 4400; + static attribute_4401 = 4401; + static attribute_4402 = 4402; + static attribute_4403 = 4403; + static attribute_4404 = 4404; + static attribute_4405 = 4405; + static attribute_4406 = 4406; + static attribute_4407 = 4407; + static attribute_4408 = 4408; + static attribute_4409 = 4409; + static attribute_4410 = 4410; + static attribute_4411 = 4411; + static attribute_4412 = 4412; + static attribute_4413 = 4413; + static attribute_4414 = 4414; + static attribute_4415 = 4415; + static attribute_4416 = 4416; + static attribute_4417 = 4417; + static attribute_4418 = 4418; + static attribute_4419 = 4419; + static attribute_4420 = 4420; + static attribute_4421 = 4421; + static attribute_4422 = 4422; + static attribute_4423 = 4423; + static attribute_4424 = 4424; + static attribute_4425 = 4425; + static attribute_4426 = 4426; + static attribute_4427 = 4427; + static attribute_4428 = 4428; + static attribute_4429 = 4429; + static attribute_4430 = 4430; + static attribute_4431 = 4431; + static attribute_4432 = 4432; + static attribute_4433 = 4433; + static attribute_4434 = 4434; + static attribute_4435 = 4435; + static attribute_4436 = 4436; + static attribute_4437 = 4437; + static attribute_4438 = 4438; + static attribute_4439 = 4439; + static attribute_4440 = 4440; + static attribute_4441 = 4441; + static attribute_4442 = 4442; + static attribute_4443 = 4443; + static attribute_4444 = 4444; + static attribute_4445 = 4445; + static attribute_4446 = 4446; + static attribute_4447 = 4447; + static attribute_4448 = 4448; + static attribute_4449 = 4449; + static attribute_4450 = 4450; + static attribute_4451 = 4451; + static attribute_4452 = 4452; + static attribute_4453 = 4453; + static attribute_4454 = 4454; + static attribute_4455 = 4455; + static attribute_4456 = 4456; + static attribute_4457 = 4457; + static attribute_4458 = 4458; + static attribute_4459 = 4459; + static attribute_4460 = 4460; + static attribute_4461 = 4461; + static attribute_4462 = 4462; + static attribute_4463 = 4463; + static attribute_4464 = 4464; + static attribute_4465 = 4465; + static attribute_4466 = 4466; + static attribute_4467 = 4467; + static attribute_4468 = 4468; + static attribute_4469 = 4469; + static attribute_4470 = 4470; + static attribute_4471 = 4471; + static attribute_4472 = 4472; + static attribute_4473 = 4473; + static attribute_4474 = 4474; + static attribute_4475 = 4475; + static attribute_4476 = 4476; + static attribute_4477 = 4477; + static attribute_4478 = 4478; + static attribute_4479 = 4479; + static attribute_4480 = 4480; + static attribute_4481 = 4481; + static attribute_4482 = 4482; + static attribute_4483 = 4483; + static attribute_4484 = 4484; + static attribute_4485 = 4485; + static attribute_4486 = 4486; + static attribute_4487 = 4487; + static attribute_4488 = 4488; + static attribute_4489 = 4489; + static attribute_4490 = 4490; + static attribute_4491 = 4491; + static attribute_4492 = 4492; + static attribute_4493 = 4493; + static attribute_4494 = 4494; + static attribute_4495 = 4495; + static attribute_4496 = 4496; + static attribute_4497 = 4497; + static attribute_4498 = 4498; + static attribute_4499 = 4499; + static attribute_4500 = 4500; + static attribute_4501 = 4501; + static attribute_4502 = 4502; + static attribute_4503 = 4503; + static attribute_4504 = 4504; + static attribute_4505 = 4505; + static attribute_4506 = 4506; + static attribute_4507 = 4507; + static attribute_4508 = 4508; + static attribute_4509 = 4509; + static attribute_4510 = 4510; + static attribute_4511 = 4511; + static attribute_4512 = 4512; + static attribute_4513 = 4513; + static attribute_4514 = 4514; + static attribute_4515 = 4515; + static attribute_4516 = 4516; + static attribute_4517 = 4517; + static attribute_4518 = 4518; + static attribute_4519 = 4519; + static attribute_4520 = 4520; + static attribute_4521 = 4521; + static attribute_4522 = 4522; + static attribute_4523 = 4523; + static attribute_4524 = 4524; + static attribute_4525 = 4525; + static attribute_4526 = 4526; + static attribute_4527 = 4527; + static attribute_4528 = 4528; + static attribute_4529 = 4529; + static attribute_4530 = 4530; + static attribute_4531 = 4531; + static attribute_4532 = 4532; + static attribute_4533 = 4533; + static attribute_4534 = 4534; + static attribute_4535 = 4535; + static attribute_4536 = 4536; + static attribute_4537 = 4537; + static attribute_4538 = 4538; + static attribute_4539 = 4539; + static attribute_4540 = 4540; + static attribute_4541 = 4541; + static attribute_4542 = 4542; + static attribute_4543 = 4543; + static attribute_4544 = 4544; + static attribute_4545 = 4545; + static attribute_4546 = 4546; + static attribute_4547 = 4547; + static attribute_4548 = 4548; + static attribute_4549 = 4549; + static attribute_4550 = 4550; + static attribute_4551 = 4551; + static attribute_4552 = 4552; + static attribute_4553 = 4553; + static attribute_4554 = 4554; + static attribute_4555 = 4555; + static attribute_4556 = 4556; + static attribute_4557 = 4557; + static attribute_4558 = 4558; + static attribute_4559 = 4559; + static attribute_4560 = 4560; + static attribute_4561 = 4561; + static attribute_4562 = 4562; + static attribute_4563 = 4563; + static attribute_4564 = 4564; + static attribute_4565 = 4565; + static attribute_4566 = 4566; + static attribute_4567 = 4567; + static attribute_4568 = 4568; + static attribute_4569 = 4569; + static attribute_4570 = 4570; + static attribute_4571 = 4571; + static attribute_4572 = 4572; + static attribute_4573 = 4573; + static attribute_4574 = 4574; + static attribute_4575 = 4575; + static attribute_4576 = 4576; + static attribute_4577 = 4577; + static attribute_4578 = 4578; + static attribute_4579 = 4579; + static attribute_4580 = 4580; + static attribute_4581 = 4581; + static attribute_4582 = 4582; + static attribute_4583 = 4583; + static attribute_4584 = 4584; + static attribute_4585 = 4585; + static attribute_4586 = 4586; + static attribute_4587 = 4587; + static attribute_4588 = 4588; + static attribute_4589 = 4589; + static attribute_4590 = 4590; + static attribute_4591 = 4591; + static attribute_4592 = 4592; + static attribute_4593 = 4593; + static attribute_4594 = 4594; + static attribute_4595 = 4595; + static attribute_4596 = 4596; + static attribute_4597 = 4597; + static attribute_4598 = 4598; + static attribute_4599 = 4599; + static attribute_4600 = 4600; + static attribute_4601 = 4601; + static attribute_4602 = 4602; + static attribute_4603 = 4603; + static attribute_4604 = 4604; + static attribute_4605 = 4605; + static attribute_4606 = 4606; + static attribute_4607 = 4607; + static attribute_4608 = 4608; + static attribute_4609 = 4609; + static attribute_4610 = 4610; + static attribute_4611 = 4611; + static attribute_4612 = 4612; + static attribute_4613 = 4613; + static attribute_4614 = 4614; + static attribute_4615 = 4615; + static attribute_4616 = 4616; + static attribute_4617 = 4617; + static attribute_4618 = 4618; + static attribute_4619 = 4619; + static attribute_4620 = 4620; + static attribute_4621 = 4621; + static attribute_4622 = 4622; + static attribute_4623 = 4623; + static attribute_4624 = 4624; + static attribute_4625 = 4625; + static attribute_4626 = 4626; + static attribute_4627 = 4627; + static attribute_4628 = 4628; + static attribute_4629 = 4629; + static attribute_4630 = 4630; + static attribute_4631 = 4631; + static attribute_4632 = 4632; + static attribute_4633 = 4633; + static attribute_4634 = 4634; + static attribute_4635 = 4635; + static attribute_4636 = 4636; + static attribute_4637 = 4637; + static attribute_4638 = 4638; + static attribute_4639 = 4639; + static attribute_4640 = 4640; + static attribute_4641 = 4641; + static attribute_4642 = 4642; + static attribute_4643 = 4643; + static attribute_4644 = 4644; + static attribute_4645 = 4645; + static attribute_4646 = 4646; + static attribute_4647 = 4647; + static attribute_4648 = 4648; + static attribute_4649 = 4649; + static attribute_4650 = 4650; + static attribute_4651 = 4651; + static attribute_4652 = 4652; + static attribute_4653 = 4653; + static attribute_4654 = 4654; + static attribute_4655 = 4655; + static attribute_4656 = 4656; + static attribute_4657 = 4657; + static attribute_4658 = 4658; + static attribute_4659 = 4659; + static attribute_4660 = 4660; + static attribute_4661 = 4661; + static attribute_4662 = 4662; + static attribute_4663 = 4663; + static attribute_4664 = 4664; + static attribute_4665 = 4665; + static attribute_4666 = 4666; + static attribute_4667 = 4667; + static attribute_4668 = 4668; + static attribute_4669 = 4669; + static attribute_4670 = 4670; + static attribute_4671 = 4671; + static attribute_4672 = 4672; + static attribute_4673 = 4673; + static attribute_4674 = 4674; + static attribute_4675 = 4675; + static attribute_4676 = 4676; + static attribute_4677 = 4677; + static attribute_4678 = 4678; + static attribute_4679 = 4679; + static attribute_4680 = 4680; + static attribute_4681 = 4681; + static attribute_4682 = 4682; + static attribute_4683 = 4683; + static attribute_4684 = 4684; + static attribute_4685 = 4685; + static attribute_4686 = 4686; + static attribute_4687 = 4687; + static attribute_4688 = 4688; + static attribute_4689 = 4689; + static attribute_4690 = 4690; + static attribute_4691 = 4691; + static attribute_4692 = 4692; + static attribute_4693 = 4693; + static attribute_4694 = 4694; + static attribute_4695 = 4695; + static attribute_4696 = 4696; + static attribute_4697 = 4697; + static attribute_4698 = 4698; + static attribute_4699 = 4699; + static attribute_4700 = 4700; + static attribute_4701 = 4701; + static attribute_4702 = 4702; + static attribute_4703 = 4703; + static attribute_4704 = 4704; + static attribute_4705 = 4705; + static attribute_4706 = 4706; + static attribute_4707 = 4707; + static attribute_4708 = 4708; + static attribute_4709 = 4709; + static attribute_4710 = 4710; + static attribute_4711 = 4711; + static attribute_4712 = 4712; + static attribute_4713 = 4713; + static attribute_4714 = 4714; + static attribute_4715 = 4715; + static attribute_4716 = 4716; + static attribute_4717 = 4717; + static attribute_4718 = 4718; + static attribute_4719 = 4719; + static attribute_4720 = 4720; + static attribute_4721 = 4721; + static attribute_4722 = 4722; + static attribute_4723 = 4723; + static attribute_4724 = 4724; + static attribute_4725 = 4725; + static attribute_4726 = 4726; + static attribute_4727 = 4727; + static attribute_4728 = 4728; + static attribute_4729 = 4729; + static attribute_4730 = 4730; + static attribute_4731 = 4731; + static attribute_4732 = 4732; + static attribute_4733 = 4733; + static attribute_4734 = 4734; + static attribute_4735 = 4735; + static attribute_4736 = 4736; + static attribute_4737 = 4737; + static attribute_4738 = 4738; + static attribute_4739 = 4739; + static attribute_4740 = 4740; + static attribute_4741 = 4741; + static attribute_4742 = 4742; + static attribute_4743 = 4743; + static attribute_4744 = 4744; + static attribute_4745 = 4745; + static attribute_4746 = 4746; + static attribute_4747 = 4747; + static attribute_4748 = 4748; + static attribute_4749 = 4749; + static attribute_4750 = 4750; + static attribute_4751 = 4751; + static attribute_4752 = 4752; + static attribute_4753 = 4753; + static attribute_4754 = 4754; + static attribute_4755 = 4755; + static attribute_4756 = 4756; + static attribute_4757 = 4757; + static attribute_4758 = 4758; + static attribute_4759 = 4759; + static attribute_4760 = 4760; + static attribute_4761 = 4761; + static attribute_4762 = 4762; + static attribute_4763 = 4763; + static attribute_4764 = 4764; + static attribute_4765 = 4765; + static attribute_4766 = 4766; + static attribute_4767 = 4767; + static attribute_4768 = 4768; + static attribute_4769 = 4769; + static attribute_4770 = 4770; + static attribute_4771 = 4771; + static attribute_4772 = 4772; + static attribute_4773 = 4773; + static attribute_4774 = 4774; + static attribute_4775 = 4775; + static attribute_4776 = 4776; + static attribute_4777 = 4777; + static attribute_4778 = 4778; + static attribute_4779 = 4779; + static attribute_4780 = 4780; + static attribute_4781 = 4781; + static attribute_4782 = 4782; + static attribute_4783 = 4783; + static attribute_4784 = 4784; + static attribute_4785 = 4785; + static attribute_4786 = 4786; + static attribute_4787 = 4787; + static attribute_4788 = 4788; + static attribute_4789 = 4789; + static attribute_4790 = 4790; + static attribute_4791 = 4791; + static attribute_4792 = 4792; + static attribute_4793 = 4793; + static attribute_4794 = 4794; + static attribute_4795 = 4795; + static attribute_4796 = 4796; + static attribute_4797 = 4797; + static attribute_4798 = 4798; + static attribute_4799 = 4799; + static attribute_4800 = 4800; + static attribute_4801 = 4801; + static attribute_4802 = 4802; + static attribute_4803 = 4803; + static attribute_4804 = 4804; + static attribute_4805 = 4805; + static attribute_4806 = 4806; + static attribute_4807 = 4807; + static attribute_4808 = 4808; + static attribute_4809 = 4809; + static attribute_4810 = 4810; + static attribute_4811 = 4811; + static attribute_4812 = 4812; + static attribute_4813 = 4813; + static attribute_4814 = 4814; + static attribute_4815 = 4815; + static attribute_4816 = 4816; + static attribute_4817 = 4817; + static attribute_4818 = 4818; + static attribute_4819 = 4819; + static attribute_4820 = 4820; + static attribute_4821 = 4821; + static attribute_4822 = 4822; + static attribute_4823 = 4823; + static attribute_4824 = 4824; + static attribute_4825 = 4825; + static attribute_4826 = 4826; + static attribute_4827 = 4827; + static attribute_4828 = 4828; + static attribute_4829 = 4829; + static attribute_4830 = 4830; + static attribute_4831 = 4831; + static attribute_4832 = 4832; + static attribute_4833 = 4833; + static attribute_4834 = 4834; + static attribute_4835 = 4835; + static attribute_4836 = 4836; + static attribute_4837 = 4837; + static attribute_4838 = 4838; + static attribute_4839 = 4839; + static attribute_4840 = 4840; + static attribute_4841 = 4841; + static attribute_4842 = 4842; + static attribute_4843 = 4843; + static attribute_4844 = 4844; + static attribute_4845 = 4845; + static attribute_4846 = 4846; + static attribute_4847 = 4847; + static attribute_4848 = 4848; + static attribute_4849 = 4849; + static attribute_4850 = 4850; + static attribute_4851 = 4851; + static attribute_4852 = 4852; + static attribute_4853 = 4853; + static attribute_4854 = 4854; + static attribute_4855 = 4855; + static attribute_4856 = 4856; + static attribute_4857 = 4857; + static attribute_4858 = 4858; + static attribute_4859 = 4859; + static attribute_4860 = 4860; + static attribute_4861 = 4861; + static attribute_4862 = 4862; + static attribute_4863 = 4863; + static attribute_4864 = 4864; + static attribute_4865 = 4865; + static attribute_4866 = 4866; + static attribute_4867 = 4867; + static attribute_4868 = 4868; + static attribute_4869 = 4869; + static attribute_4870 = 4870; + static attribute_4871 = 4871; + static attribute_4872 = 4872; + static attribute_4873 = 4873; + static attribute_4874 = 4874; + static attribute_4875 = 4875; + static attribute_4876 = 4876; + static attribute_4877 = 4877; + static attribute_4878 = 4878; + static attribute_4879 = 4879; + static attribute_4880 = 4880; + static attribute_4881 = 4881; + static attribute_4882 = 4882; + static attribute_4883 = 4883; + static attribute_4884 = 4884; + static attribute_4885 = 4885; + static attribute_4886 = 4886; + static attribute_4887 = 4887; + static attribute_4888 = 4888; + static attribute_4889 = 4889; + static attribute_4890 = 4890; + static attribute_4891 = 4891; + static attribute_4892 = 4892; + static attribute_4893 = 4893; + static attribute_4894 = 4894; + static attribute_4895 = 4895; + static attribute_4896 = 4896; + static attribute_4897 = 4897; + static attribute_4898 = 4898; + static attribute_4899 = 4899; + static attribute_4900 = 4900; + static attribute_4901 = 4901; + static attribute_4902 = 4902; + static attribute_4903 = 4903; + static attribute_4904 = 4904; + static attribute_4905 = 4905; + static attribute_4906 = 4906; + static attribute_4907 = 4907; + static attribute_4908 = 4908; + static attribute_4909 = 4909; + static attribute_4910 = 4910; + static attribute_4911 = 4911; + static attribute_4912 = 4912; + static attribute_4913 = 4913; + static attribute_4914 = 4914; + static attribute_4915 = 4915; + static attribute_4916 = 4916; + static attribute_4917 = 4917; + static attribute_4918 = 4918; + static attribute_4919 = 4919; + static attribute_4920 = 4920; + static attribute_4921 = 4921; + static attribute_4922 = 4922; + static attribute_4923 = 4923; + static attribute_4924 = 4924; + static attribute_4925 = 4925; + static attribute_4926 = 4926; + static attribute_4927 = 4927; + static attribute_4928 = 4928; + static attribute_4929 = 4929; + static attribute_4930 = 4930; + static attribute_4931 = 4931; + static attribute_4932 = 4932; + static attribute_4933 = 4933; + static attribute_4934 = 4934; + static attribute_4935 = 4935; + static attribute_4936 = 4936; + static attribute_4937 = 4937; + static attribute_4938 = 4938; + static attribute_4939 = 4939; + static attribute_4940 = 4940; + static attribute_4941 = 4941; + static attribute_4942 = 4942; + static attribute_4943 = 4943; + static attribute_4944 = 4944; + static attribute_4945 = 4945; + static attribute_4946 = 4946; + static attribute_4947 = 4947; + static attribute_4948 = 4948; + static attribute_4949 = 4949; + static attribute_4950 = 4950; + static attribute_4951 = 4951; + static attribute_4952 = 4952; + static attribute_4953 = 4953; + static attribute_4954 = 4954; + static attribute_4955 = 4955; + static attribute_4956 = 4956; + static attribute_4957 = 4957; + static attribute_4958 = 4958; + static attribute_4959 = 4959; + static attribute_4960 = 4960; + static attribute_4961 = 4961; + static attribute_4962 = 4962; + static attribute_4963 = 4963; + static attribute_4964 = 4964; + static attribute_4965 = 4965; + static attribute_4966 = 4966; + static attribute_4967 = 4967; + static attribute_4968 = 4968; + static attribute_4969 = 4969; + static attribute_4970 = 4970; + static attribute_4971 = 4971; + static attribute_4972 = 4972; + static attribute_4973 = 4973; + static attribute_4974 = 4974; + static attribute_4975 = 4975; + static attribute_4976 = 4976; + static attribute_4977 = 4977; + static attribute_4978 = 4978; + static attribute_4979 = 4979; + static attribute_4980 = 4980; + static attribute_4981 = 4981; + static attribute_4982 = 4982; + static attribute_4983 = 4983; + static attribute_4984 = 4984; + static attribute_4985 = 4985; + static attribute_4986 = 4986; + static attribute_4987 = 4987; + static attribute_4988 = 4988; + static attribute_4989 = 4989; + static attribute_4990 = 4990; + static attribute_4991 = 4991; + static attribute_4992 = 4992; + static attribute_4993 = 4993; + static attribute_4994 = 4994; + static attribute_4995 = 4995; + static attribute_4996 = 4996; + static attribute_4997 = 4997; + static attribute_4998 = 4998; + static attribute_4999 = 4999; + static attribute_5000 = 5000; + static attribute_5001 = 5001; + static attribute_5002 = 5002; + static attribute_5003 = 5003; + static attribute_5004 = 5004; + static attribute_5005 = 5005; + static attribute_5006 = 5006; + static attribute_5007 = 5007; + static attribute_5008 = 5008; + static attribute_5009 = 5009; + static attribute_5010 = 5010; + static attribute_5011 = 5011; + static attribute_5012 = 5012; + static attribute_5013 = 5013; + static attribute_5014 = 5014; + static attribute_5015 = 5015; + static attribute_5016 = 5016; + static attribute_5017 = 5017; + static attribute_5018 = 5018; + static attribute_5019 = 5019; + static attribute_5020 = 5020; + static attribute_5021 = 5021; + static attribute_5022 = 5022; + static attribute_5023 = 5023; + static attribute_5024 = 5024; + static attribute_5025 = 5025; + static attribute_5026 = 5026; + static attribute_5027 = 5027; + static attribute_5028 = 5028; + static attribute_5029 = 5029; + static attribute_5030 = 5030; + static attribute_5031 = 5031; + static attribute_5032 = 5032; + static attribute_5033 = 5033; + static attribute_5034 = 5034; + static attribute_5035 = 5035; + static attribute_5036 = 5036; + static attribute_5037 = 5037; + static attribute_5038 = 5038; + static attribute_5039 = 5039; + static attribute_5040 = 5040; + static attribute_5041 = 5041; + static attribute_5042 = 5042; + static attribute_5043 = 5043; + static attribute_5044 = 5044; + static attribute_5045 = 5045; + static attribute_5046 = 5046; + static attribute_5047 = 5047; + static attribute_5048 = 5048; + static attribute_5049 = 5049; + static attribute_5050 = 5050; + static attribute_5051 = 5051; + static attribute_5052 = 5052; + static attribute_5053 = 5053; + static attribute_5054 = 5054; + static attribute_5055 = 5055; + static attribute_5056 = 5056; + static attribute_5057 = 5057; + static attribute_5058 = 5058; + static attribute_5059 = 5059; + static attribute_5060 = 5060; + static attribute_5061 = 5061; + static attribute_5062 = 5062; + static attribute_5063 = 5063; + static attribute_5064 = 5064; + static attribute_5065 = 5065; + static attribute_5066 = 5066; + static attribute_5067 = 5067; + static attribute_5068 = 5068; + static attribute_5069 = 5069; + static attribute_5070 = 5070; + static attribute_5071 = 5071; + static attribute_5072 = 5072; + static attribute_5073 = 5073; + static attribute_5074 = 5074; + static attribute_5075 = 5075; + static attribute_5076 = 5076; + static attribute_5077 = 5077; + static attribute_5078 = 5078; + static attribute_5079 = 5079; + static attribute_5080 = 5080; + static attribute_5081 = 5081; + static attribute_5082 = 5082; + static attribute_5083 = 5083; + static attribute_5084 = 5084; + static attribute_5085 = 5085; + static attribute_5086 = 5086; + static attribute_5087 = 5087; + static attribute_5088 = 5088; + static attribute_5089 = 5089; + static attribute_5090 = 5090; + static attribute_5091 = 5091; + static attribute_5092 = 5092; + static attribute_5093 = 5093; + static attribute_5094 = 5094; + static attribute_5095 = 5095; + static attribute_5096 = 5096; + static attribute_5097 = 5097; + static attribute_5098 = 5098; + static attribute_5099 = 5099; + static attribute_5100 = 5100; + static attribute_5101 = 5101; + static attribute_5102 = 5102; + static attribute_5103 = 5103; + static attribute_5104 = 5104; + static attribute_5105 = 5105; + static attribute_5106 = 5106; + static attribute_5107 = 5107; + static attribute_5108 = 5108; + static attribute_5109 = 5109; + static attribute_5110 = 5110; + static attribute_5111 = 5111; + static attribute_5112 = 5112; + static attribute_5113 = 5113; + static attribute_5114 = 5114; + static attribute_5115 = 5115; + static attribute_5116 = 5116; + static attribute_5117 = 5117; + static attribute_5118 = 5118; + static attribute_5119 = 5119; + static attribute_5120 = 5120; + static attribute_5121 = 5121; + static attribute_5122 = 5122; + static attribute_5123 = 5123; + static attribute_5124 = 5124; + static attribute_5125 = 5125; + static attribute_5126 = 5126; + static attribute_5127 = 5127; + static attribute_5128 = 5128; + static attribute_5129 = 5129; + static attribute_5130 = 5130; + static attribute_5131 = 5131; + static attribute_5132 = 5132; + static attribute_5133 = 5133; + static attribute_5134 = 5134; + static attribute_5135 = 5135; + static attribute_5136 = 5136; + static attribute_5137 = 5137; + static attribute_5138 = 5138; + static attribute_5139 = 5139; + static attribute_5140 = 5140; + static attribute_5141 = 5141; + static attribute_5142 = 5142; + static attribute_5143 = 5143; + static attribute_5144 = 5144; + static attribute_5145 = 5145; + static attribute_5146 = 5146; + static attribute_5147 = 5147; + static attribute_5148 = 5148; + static attribute_5149 = 5149; + static attribute_5150 = 5150; + static attribute_5151 = 5151; + static attribute_5152 = 5152; + static attribute_5153 = 5153; + static attribute_5154 = 5154; + static attribute_5155 = 5155; + static attribute_5156 = 5156; + static attribute_5157 = 5157; + static attribute_5158 = 5158; + static attribute_5159 = 5159; + static attribute_5160 = 5160; + static attribute_5161 = 5161; + static attribute_5162 = 5162; + static attribute_5163 = 5163; + static attribute_5164 = 5164; + static attribute_5165 = 5165; + static attribute_5166 = 5166; + static attribute_5167 = 5167; + static attribute_5168 = 5168; + static attribute_5169 = 5169; + static attribute_5170 = 5170; + static attribute_5171 = 5171; + static attribute_5172 = 5172; + static attribute_5173 = 5173; + static attribute_5174 = 5174; + static attribute_5175 = 5175; + static attribute_5176 = 5176; + static attribute_5177 = 5177; + static attribute_5178 = 5178; + static attribute_5179 = 5179; + static attribute_5180 = 5180; + static attribute_5181 = 5181; + static attribute_5182 = 5182; + static attribute_5183 = 5183; + static attribute_5184 = 5184; + static attribute_5185 = 5185; + static attribute_5186 = 5186; + static attribute_5187 = 5187; + static attribute_5188 = 5188; + static attribute_5189 = 5189; + static attribute_5190 = 5190; + static attribute_5191 = 5191; + static attribute_5192 = 5192; + static attribute_5193 = 5193; + static attribute_5194 = 5194; + static attribute_5195 = 5195; + static attribute_5196 = 5196; + static attribute_5197 = 5197; + static attribute_5198 = 5198; + static attribute_5199 = 5199; + static attribute_5200 = 5200; + static attribute_5201 = 5201; + static attribute_5202 = 5202; + static attribute_5203 = 5203; + static attribute_5204 = 5204; + static attribute_5205 = 5205; + static attribute_5206 = 5206; + static attribute_5207 = 5207; + static attribute_5208 = 5208; + static attribute_5209 = 5209; + static attribute_5210 = 5210; + static attribute_5211 = 5211; + static attribute_5212 = 5212; + static attribute_5213 = 5213; + static attribute_5214 = 5214; + static attribute_5215 = 5215; + static attribute_5216 = 5216; + static attribute_5217 = 5217; + static attribute_5218 = 5218; + static attribute_5219 = 5219; + static attribute_5220 = 5220; + static attribute_5221 = 5221; + static attribute_5222 = 5222; + static attribute_5223 = 5223; + static attribute_5224 = 5224; + static attribute_5225 = 5225; + static attribute_5226 = 5226; + static attribute_5227 = 5227; + static attribute_5228 = 5228; + static attribute_5229 = 5229; + static attribute_5230 = 5230; + static attribute_5231 = 5231; + static attribute_5232 = 5232; + static attribute_5233 = 5233; + static attribute_5234 = 5234; + static attribute_5235 = 5235; + static attribute_5236 = 5236; + static attribute_5237 = 5237; + static attribute_5238 = 5238; + static attribute_5239 = 5239; + static attribute_5240 = 5240; + static attribute_5241 = 5241; + static attribute_5242 = 5242; + static attribute_5243 = 5243; + static attribute_5244 = 5244; + static attribute_5245 = 5245; + static attribute_5246 = 5246; + static attribute_5247 = 5247; + static attribute_5248 = 5248; + static attribute_5249 = 5249; + static attribute_5250 = 5250; + static attribute_5251 = 5251; + static attribute_5252 = 5252; + static attribute_5253 = 5253; + static attribute_5254 = 5254; + static attribute_5255 = 5255; + static attribute_5256 = 5256; + static attribute_5257 = 5257; + static attribute_5258 = 5258; + static attribute_5259 = 5259; + static attribute_5260 = 5260; + static attribute_5261 = 5261; + static attribute_5262 = 5262; + static attribute_5263 = 5263; + static attribute_5264 = 5264; + static attribute_5265 = 5265; + static attribute_5266 = 5266; + static attribute_5267 = 5267; + static attribute_5268 = 5268; + static attribute_5269 = 5269; + static attribute_5270 = 5270; + static attribute_5271 = 5271; + static attribute_5272 = 5272; + static attribute_5273 = 5273; + static attribute_5274 = 5274; + static attribute_5275 = 5275; + static attribute_5276 = 5276; + static attribute_5277 = 5277; + static attribute_5278 = 5278; + static attribute_5279 = 5279; + static attribute_5280 = 5280; + static attribute_5281 = 5281; + static attribute_5282 = 5282; + static attribute_5283 = 5283; + static attribute_5284 = 5284; + static attribute_5285 = 5285; + static attribute_5286 = 5286; + static attribute_5287 = 5287; + static attribute_5288 = 5288; + static attribute_5289 = 5289; + static attribute_5290 = 5290; + static attribute_5291 = 5291; + static attribute_5292 = 5292; + static attribute_5293 = 5293; + static attribute_5294 = 5294; + static attribute_5295 = 5295; + static attribute_5296 = 5296; + static attribute_5297 = 5297; + static attribute_5298 = 5298; + static attribute_5299 = 5299; + static attribute_5300 = 5300; + static attribute_5301 = 5301; + static attribute_5302 = 5302; + static attribute_5303 = 5303; + static attribute_5304 = 5304; + static attribute_5305 = 5305; + static attribute_5306 = 5306; + static attribute_5307 = 5307; + static attribute_5308 = 5308; + static attribute_5309 = 5309; + static attribute_5310 = 5310; + static attribute_5311 = 5311; + static attribute_5312 = 5312; + static attribute_5313 = 5313; + static attribute_5314 = 5314; + static attribute_5315 = 5315; + static attribute_5316 = 5316; + static attribute_5317 = 5317; + static attribute_5318 = 5318; + static attribute_5319 = 5319; + static attribute_5320 = 5320; + static attribute_5321 = 5321; + static attribute_5322 = 5322; + static attribute_5323 = 5323; + static attribute_5324 = 5324; + static attribute_5325 = 5325; + static attribute_5326 = 5326; + static attribute_5327 = 5327; + static attribute_5328 = 5328; + static attribute_5329 = 5329; + static attribute_5330 = 5330; + static attribute_5331 = 5331; + static attribute_5332 = 5332; + static attribute_5333 = 5333; + static attribute_5334 = 5334; + static attribute_5335 = 5335; + static attribute_5336 = 5336; + static attribute_5337 = 5337; + static attribute_5338 = 5338; + static attribute_5339 = 5339; + static attribute_5340 = 5340; + static attribute_5341 = 5341; + static attribute_5342 = 5342; + static attribute_5343 = 5343; + static attribute_5344 = 5344; + static attribute_5345 = 5345; + static attribute_5346 = 5346; + static attribute_5347 = 5347; + static attribute_5348 = 5348; + static attribute_5349 = 5349; + static attribute_5350 = 5350; + static attribute_5351 = 5351; + static attribute_5352 = 5352; + static attribute_5353 = 5353; + static attribute_5354 = 5354; + static attribute_5355 = 5355; + static attribute_5356 = 5356; + static attribute_5357 = 5357; + static attribute_5358 = 5358; + static attribute_5359 = 5359; + static attribute_5360 = 5360; + static attribute_5361 = 5361; + static attribute_5362 = 5362; + static attribute_5363 = 5363; + static attribute_5364 = 5364; + static attribute_5365 = 5365; + static attribute_5366 = 5366; + static attribute_5367 = 5367; + static attribute_5368 = 5368; + static attribute_5369 = 5369; + static attribute_5370 = 5370; + static attribute_5371 = 5371; + static attribute_5372 = 5372; + static attribute_5373 = 5373; + static attribute_5374 = 5374; + static attribute_5375 = 5375; + static attribute_5376 = 5376; + static attribute_5377 = 5377; + static attribute_5378 = 5378; + static attribute_5379 = 5379; + static attribute_5380 = 5380; + static attribute_5381 = 5381; + static attribute_5382 = 5382; + static attribute_5383 = 5383; + static attribute_5384 = 5384; + static attribute_5385 = 5385; + static attribute_5386 = 5386; + static attribute_5387 = 5387; + static attribute_5388 = 5388; + static attribute_5389 = 5389; + static attribute_5390 = 5390; + static attribute_5391 = 5391; + static attribute_5392 = 5392; + static attribute_5393 = 5393; + static attribute_5394 = 5394; + static attribute_5395 = 5395; + static attribute_5396 = 5396; + static attribute_5397 = 5397; + static attribute_5398 = 5398; + static attribute_5399 = 5399; + static attribute_5400 = 5400; + static attribute_5401 = 5401; + static attribute_5402 = 5402; + static attribute_5403 = 5403; + static attribute_5404 = 5404; + static attribute_5405 = 5405; + static attribute_5406 = 5406; + static attribute_5407 = 5407; + static attribute_5408 = 5408; + static attribute_5409 = 5409; + static attribute_5410 = 5410; + static attribute_5411 = 5411; + static attribute_5412 = 5412; + static attribute_5413 = 5413; + static attribute_5414 = 5414; + static attribute_5415 = 5415; + static attribute_5416 = 5416; + static attribute_5417 = 5417; + static attribute_5418 = 5418; + static attribute_5419 = 5419; + static attribute_5420 = 5420; + static attribute_5421 = 5421; + static attribute_5422 = 5422; + static attribute_5423 = 5423; + static attribute_5424 = 5424; + static attribute_5425 = 5425; + static attribute_5426 = 5426; + static attribute_5427 = 5427; + static attribute_5428 = 5428; + static attribute_5429 = 5429; + static attribute_5430 = 5430; + static attribute_5431 = 5431; + static attribute_5432 = 5432; + static attribute_5433 = 5433; + static attribute_5434 = 5434; + static attribute_5435 = 5435; + static attribute_5436 = 5436; + static attribute_5437 = 5437; + static attribute_5438 = 5438; + static attribute_5439 = 5439; + static attribute_5440 = 5440; + static attribute_5441 = 5441; + static attribute_5442 = 5442; + static attribute_5443 = 5443; + static attribute_5444 = 5444; + static attribute_5445 = 5445; + static attribute_5446 = 5446; + static attribute_5447 = 5447; + static attribute_5448 = 5448; + static attribute_5449 = 5449; + static attribute_5450 = 5450; + static attribute_5451 = 5451; + static attribute_5452 = 5452; + static attribute_5453 = 5453; + static attribute_5454 = 5454; + static attribute_5455 = 5455; + static attribute_5456 = 5456; + static attribute_5457 = 5457; + static attribute_5458 = 5458; + static attribute_5459 = 5459; + static attribute_5460 = 5460; + static attribute_5461 = 5461; + static attribute_5462 = 5462; + static attribute_5463 = 5463; + static attribute_5464 = 5464; + static attribute_5465 = 5465; + static attribute_5466 = 5466; + static attribute_5467 = 5467; + static attribute_5468 = 5468; + static attribute_5469 = 5469; + static attribute_5470 = 5470; + static attribute_5471 = 5471; + static attribute_5472 = 5472; + static attribute_5473 = 5473; + static attribute_5474 = 5474; + static attribute_5475 = 5475; + static attribute_5476 = 5476; + static attribute_5477 = 5477; + static attribute_5478 = 5478; + static attribute_5479 = 5479; + static attribute_5480 = 5480; + static attribute_5481 = 5481; + static attribute_5482 = 5482; + static attribute_5483 = 5483; + static attribute_5484 = 5484; + static attribute_5485 = 5485; + static attribute_5486 = 5486; + static attribute_5487 = 5487; + static attribute_5488 = 5488; + static attribute_5489 = 5489; + static attribute_5490 = 5490; + static attribute_5491 = 5491; + static attribute_5492 = 5492; + static attribute_5493 = 5493; + static attribute_5494 = 5494; + static attribute_5495 = 5495; + static attribute_5496 = 5496; + static attribute_5497 = 5497; + static attribute_5498 = 5498; + static attribute_5499 = 5499; + static attribute_5500 = 5500; + static attribute_5501 = 5501; + static attribute_5502 = 5502; + static attribute_5503 = 5503; + static attribute_5504 = 5504; + static attribute_5505 = 5505; + static attribute_5506 = 5506; + static attribute_5507 = 5507; + static attribute_5508 = 5508; + static attribute_5509 = 5509; + static attribute_5510 = 5510; + static attribute_5511 = 5511; + static attribute_5512 = 5512; + static attribute_5513 = 5513; + static attribute_5514 = 5514; + static attribute_5515 = 5515; + static attribute_5516 = 5516; + static attribute_5517 = 5517; + static attribute_5518 = 5518; + static attribute_5519 = 5519; + static attribute_5520 = 5520; + static attribute_5521 = 5521; + static attribute_5522 = 5522; + static attribute_5523 = 5523; + static attribute_5524 = 5524; + static attribute_5525 = 5525; + static attribute_5526 = 5526; + static attribute_5527 = 5527; + static attribute_5528 = 5528; + static attribute_5529 = 5529; + static attribute_5530 = 5530; + static attribute_5531 = 5531; + static attribute_5532 = 5532; + static attribute_5533 = 5533; + static attribute_5534 = 5534; + static attribute_5535 = 5535; + static attribute_5536 = 5536; + static attribute_5537 = 5537; + static attribute_5538 = 5538; + static attribute_5539 = 5539; + static attribute_5540 = 5540; + static attribute_5541 = 5541; + static attribute_5542 = 5542; + static attribute_5543 = 5543; + static attribute_5544 = 5544; + static attribute_5545 = 5545; + static attribute_5546 = 5546; + static attribute_5547 = 5547; + static attribute_5548 = 5548; + static attribute_5549 = 5549; + static attribute_5550 = 5550; + static attribute_5551 = 5551; + static attribute_5552 = 5552; + static attribute_5553 = 5553; + static attribute_5554 = 5554; + static attribute_5555 = 5555; + static attribute_5556 = 5556; + static attribute_5557 = 5557; + static attribute_5558 = 5558; + static attribute_5559 = 5559; + static attribute_5560 = 5560; + static attribute_5561 = 5561; + static attribute_5562 = 5562; + static attribute_5563 = 5563; + static attribute_5564 = 5564; + static attribute_5565 = 5565; + static attribute_5566 = 5566; + static attribute_5567 = 5567; + static attribute_5568 = 5568; + static attribute_5569 = 5569; + static attribute_5570 = 5570; + static attribute_5571 = 5571; + static attribute_5572 = 5572; + static attribute_5573 = 5573; + static attribute_5574 = 5574; + static attribute_5575 = 5575; + static attribute_5576 = 5576; + static attribute_5577 = 5577; + static attribute_5578 = 5578; + static attribute_5579 = 5579; + static attribute_5580 = 5580; + static attribute_5581 = 5581; + static attribute_5582 = 5582; + static attribute_5583 = 5583; + static attribute_5584 = 5584; + static attribute_5585 = 5585; + static attribute_5586 = 5586; + static attribute_5587 = 5587; + static attribute_5588 = 5588; + static attribute_5589 = 5589; + static attribute_5590 = 5590; + static attribute_5591 = 5591; + static attribute_5592 = 5592; + static attribute_5593 = 5593; + static attribute_5594 = 5594; + static attribute_5595 = 5595; + static attribute_5596 = 5596; + static attribute_5597 = 5597; + static attribute_5598 = 5598; + static attribute_5599 = 5599; + static attribute_5600 = 5600; + static attribute_5601 = 5601; + static attribute_5602 = 5602; + static attribute_5603 = 5603; + static attribute_5604 = 5604; + static attribute_5605 = 5605; + static attribute_5606 = 5606; + static attribute_5607 = 5607; + static attribute_5608 = 5608; + static attribute_5609 = 5609; + static attribute_5610 = 5610; + static attribute_5611 = 5611; + static attribute_5612 = 5612; + static attribute_5613 = 5613; + static attribute_5614 = 5614; + static attribute_5615 = 5615; + static attribute_5616 = 5616; + static attribute_5617 = 5617; + static attribute_5618 = 5618; + static attribute_5619 = 5619; + static attribute_5620 = 5620; + static attribute_5621 = 5621; + static attribute_5622 = 5622; + static attribute_5623 = 5623; + static attribute_5624 = 5624; + static attribute_5625 = 5625; + static attribute_5626 = 5626; + static attribute_5627 = 5627; + static attribute_5628 = 5628; + static attribute_5629 = 5629; + static attribute_5630 = 5630; + static attribute_5631 = 5631; + static attribute_5632 = 5632; + static attribute_5633 = 5633; + static attribute_5634 = 5634; + static attribute_5635 = 5635; + static attribute_5636 = 5636; + static attribute_5637 = 5637; + static attribute_5638 = 5638; + static attribute_5639 = 5639; + static attribute_5640 = 5640; + static attribute_5641 = 5641; + static attribute_5642 = 5642; + static attribute_5643 = 5643; + static attribute_5644 = 5644; + static attribute_5645 = 5645; + static attribute_5646 = 5646; + static attribute_5647 = 5647; + static attribute_5648 = 5648; + static attribute_5649 = 5649; + static attribute_5650 = 5650; + static attribute_5651 = 5651; + static attribute_5652 = 5652; + static attribute_5653 = 5653; + static attribute_5654 = 5654; + static attribute_5655 = 5655; + static attribute_5656 = 5656; + static attribute_5657 = 5657; + static attribute_5658 = 5658; + static attribute_5659 = 5659; + static attribute_5660 = 5660; + static attribute_5661 = 5661; + static attribute_5662 = 5662; + static attribute_5663 = 5663; + static attribute_5664 = 5664; + static attribute_5665 = 5665; + static attribute_5666 = 5666; + static attribute_5667 = 5667; + static attribute_5668 = 5668; + static attribute_5669 = 5669; + static attribute_5670 = 5670; + static attribute_5671 = 5671; + static attribute_5672 = 5672; + static attribute_5673 = 5673; + static attribute_5674 = 5674; + static attribute_5675 = 5675; + static attribute_5676 = 5676; + static attribute_5677 = 5677; + static attribute_5678 = 5678; + static attribute_5679 = 5679; + static attribute_5680 = 5680; + static attribute_5681 = 5681; + static attribute_5682 = 5682; + static attribute_5683 = 5683; + static attribute_5684 = 5684; + static attribute_5685 = 5685; + static attribute_5686 = 5686; + static attribute_5687 = 5687; + static attribute_5688 = 5688; + static attribute_5689 = 5689; + static attribute_5690 = 5690; + static attribute_5691 = 5691; + static attribute_5692 = 5692; + static attribute_5693 = 5693; + static attribute_5694 = 5694; + static attribute_5695 = 5695; + static attribute_5696 = 5696; + static attribute_5697 = 5697; + static attribute_5698 = 5698; + static attribute_5699 = 5699; + static attribute_5700 = 5700; + static attribute_5701 = 5701; + static attribute_5702 = 5702; + static attribute_5703 = 5703; + static attribute_5704 = 5704; + static attribute_5705 = 5705; + static attribute_5706 = 5706; + static attribute_5707 = 5707; + static attribute_5708 = 5708; + static attribute_5709 = 5709; + static attribute_5710 = 5710; + static attribute_5711 = 5711; + static attribute_5712 = 5712; + static attribute_5713 = 5713; + static attribute_5714 = 5714; + static attribute_5715 = 5715; + static attribute_5716 = 5716; + static attribute_5717 = 5717; + static attribute_5718 = 5718; + static attribute_5719 = 5719; + static attribute_5720 = 5720; + static attribute_5721 = 5721; + static attribute_5722 = 5722; + static attribute_5723 = 5723; + static attribute_5724 = 5724; + static attribute_5725 = 5725; + static attribute_5726 = 5726; + static attribute_5727 = 5727; + static attribute_5728 = 5728; + static attribute_5729 = 5729; + static attribute_5730 = 5730; + static attribute_5731 = 5731; + static attribute_5732 = 5732; + static attribute_5733 = 5733; + static attribute_5734 = 5734; + static attribute_5735 = 5735; + static attribute_5736 = 5736; + static attribute_5737 = 5737; + static attribute_5738 = 5738; + static attribute_5739 = 5739; + static attribute_5740 = 5740; + static attribute_5741 = 5741; + static attribute_5742 = 5742; + static attribute_5743 = 5743; + static attribute_5744 = 5744; + static attribute_5745 = 5745; + static attribute_5746 = 5746; + static attribute_5747 = 5747; + static attribute_5748 = 5748; + static attribute_5749 = 5749; + static attribute_5750 = 5750; + static attribute_5751 = 5751; + static attribute_5752 = 5752; + static attribute_5753 = 5753; + static attribute_5754 = 5754; + static attribute_5755 = 5755; + static attribute_5756 = 5756; + static attribute_5757 = 5757; + static attribute_5758 = 5758; + static attribute_5759 = 5759; + static attribute_5760 = 5760; + static attribute_5761 = 5761; + static attribute_5762 = 5762; + static attribute_5763 = 5763; + static attribute_5764 = 5764; + static attribute_5765 = 5765; + static attribute_5766 = 5766; + static attribute_5767 = 5767; + static attribute_5768 = 5768; + static attribute_5769 = 5769; + static attribute_5770 = 5770; + static attribute_5771 = 5771; + static attribute_5772 = 5772; + static attribute_5773 = 5773; + static attribute_5774 = 5774; + static attribute_5775 = 5775; + static attribute_5776 = 5776; + static attribute_5777 = 5777; + static attribute_5778 = 5778; + static attribute_5779 = 5779; + static attribute_5780 = 5780; + static attribute_5781 = 5781; + static attribute_5782 = 5782; + static attribute_5783 = 5783; + static attribute_5784 = 5784; + static attribute_5785 = 5785; + static attribute_5786 = 5786; + static attribute_5787 = 5787; + static attribute_5788 = 5788; + static attribute_5789 = 5789; + static attribute_5790 = 5790; + static attribute_5791 = 5791; + static attribute_5792 = 5792; + static attribute_5793 = 5793; + static attribute_5794 = 5794; + static attribute_5795 = 5795; + static attribute_5796 = 5796; + static attribute_5797 = 5797; + static attribute_5798 = 5798; + static attribute_5799 = 5799; + static attribute_5800 = 5800; + static attribute_5801 = 5801; + static attribute_5802 = 5802; + static attribute_5803 = 5803; + static attribute_5804 = 5804; + static attribute_5805 = 5805; + static attribute_5806 = 5806; + static attribute_5807 = 5807; + static attribute_5808 = 5808; + static attribute_5809 = 5809; + static attribute_5810 = 5810; + static attribute_5811 = 5811; + static attribute_5812 = 5812; + static attribute_5813 = 5813; + static attribute_5814 = 5814; + static attribute_5815 = 5815; + static attribute_5816 = 5816; + static attribute_5817 = 5817; + static attribute_5818 = 5818; + static attribute_5819 = 5819; + static attribute_5820 = 5820; + static attribute_5821 = 5821; + static attribute_5822 = 5822; + static attribute_5823 = 5823; + static attribute_5824 = 5824; + static attribute_5825 = 5825; + static attribute_5826 = 5826; + static attribute_5827 = 5827; + static attribute_5828 = 5828; + static attribute_5829 = 5829; + static attribute_5830 = 5830; + static attribute_5831 = 5831; + static attribute_5832 = 5832; + static attribute_5833 = 5833; + static attribute_5834 = 5834; + static attribute_5835 = 5835; + static attribute_5836 = 5836; + static attribute_5837 = 5837; + static attribute_5838 = 5838; + static attribute_5839 = 5839; + static attribute_5840 = 5840; + static attribute_5841 = 5841; + static attribute_5842 = 5842; + static attribute_5843 = 5843; + static attribute_5844 = 5844; + static attribute_5845 = 5845; + static attribute_5846 = 5846; + static attribute_5847 = 5847; + static attribute_5848 = 5848; + static attribute_5849 = 5849; + static attribute_5850 = 5850; + static attribute_5851 = 5851; + static attribute_5852 = 5852; + static attribute_5853 = 5853; + static attribute_5854 = 5854; + static attribute_5855 = 5855; + static attribute_5856 = 5856; + static attribute_5857 = 5857; + static attribute_5858 = 5858; + static attribute_5859 = 5859; + static attribute_5860 = 5860; + static attribute_5861 = 5861; + static attribute_5862 = 5862; + static attribute_5863 = 5863; + static attribute_5864 = 5864; + static attribute_5865 = 5865; + static attribute_5866 = 5866; + static attribute_5867 = 5867; + static attribute_5868 = 5868; + static attribute_5869 = 5869; + static attribute_5870 = 5870; + static attribute_5871 = 5871; + static attribute_5872 = 5872; + static attribute_5873 = 5873; + static attribute_5874 = 5874; + static attribute_5875 = 5875; + static attribute_5876 = 5876; + static attribute_5877 = 5877; + static attribute_5878 = 5878; + static attribute_5879 = 5879; + static attribute_5880 = 5880; + static attribute_5881 = 5881; + static attribute_5882 = 5882; + static attribute_5883 = 5883; + static attribute_5884 = 5884; + static attribute_5885 = 5885; + static attribute_5886 = 5886; + static attribute_5887 = 5887; + static attribute_5888 = 5888; + static attribute_5889 = 5889; + static attribute_5890 = 5890; + static attribute_5891 = 5891; + static attribute_5892 = 5892; + static attribute_5893 = 5893; + static attribute_5894 = 5894; + static attribute_5895 = 5895; + static attribute_5896 = 5896; + static attribute_5897 = 5897; + static attribute_5898 = 5898; + static attribute_5899 = 5899; + static attribute_5900 = 5900; + static attribute_5901 = 5901; + static attribute_5902 = 5902; + static attribute_5903 = 5903; + static attribute_5904 = 5904; + static attribute_5905 = 5905; + static attribute_5906 = 5906; + static attribute_5907 = 5907; + static attribute_5908 = 5908; + static attribute_5909 = 5909; + static attribute_5910 = 5910; + static attribute_5911 = 5911; + static attribute_5912 = 5912; + static attribute_5913 = 5913; + static attribute_5914 = 5914; + static attribute_5915 = 5915; + static attribute_5916 = 5916; + static attribute_5917 = 5917; + static attribute_5918 = 5918; + static attribute_5919 = 5919; + static attribute_5920 = 5920; + static attribute_5921 = 5921; + static attribute_5922 = 5922; + static attribute_5923 = 5923; + static attribute_5924 = 5924; + static attribute_5925 = 5925; + static attribute_5926 = 5926; + static attribute_5927 = 5927; + static attribute_5928 = 5928; + static attribute_5929 = 5929; + static attribute_5930 = 5930; + static attribute_5931 = 5931; + static attribute_5932 = 5932; + static attribute_5933 = 5933; + static attribute_5934 = 5934; + static attribute_5935 = 5935; + static attribute_5936 = 5936; + static attribute_5937 = 5937; + static attribute_5938 = 5938; + static attribute_5939 = 5939; + static attribute_5940 = 5940; + static attribute_5941 = 5941; + static attribute_5942 = 5942; + static attribute_5943 = 5943; + static attribute_5944 = 5944; + static attribute_5945 = 5945; + static attribute_5946 = 5946; + static attribute_5947 = 5947; + static attribute_5948 = 5948; + static attribute_5949 = 5949; + static attribute_5950 = 5950; + static attribute_5951 = 5951; + static attribute_5952 = 5952; + static attribute_5953 = 5953; + static attribute_5954 = 5954; + static attribute_5955 = 5955; + static attribute_5956 = 5956; + static attribute_5957 = 5957; + static attribute_5958 = 5958; + static attribute_5959 = 5959; + static attribute_5960 = 5960; + static attribute_5961 = 5961; + static attribute_5962 = 5962; + static attribute_5963 = 5963; + static attribute_5964 = 5964; + static attribute_5965 = 5965; + static attribute_5966 = 5966; + static attribute_5967 = 5967; + static attribute_5968 = 5968; + static attribute_5969 = 5969; + static attribute_5970 = 5970; + static attribute_5971 = 5971; + static attribute_5972 = 5972; + static attribute_5973 = 5973; + static attribute_5974 = 5974; + static attribute_5975 = 5975; + static attribute_5976 = 5976; + static attribute_5977 = 5977; + static attribute_5978 = 5978; + static attribute_5979 = 5979; + static attribute_5980 = 5980; + static attribute_5981 = 5981; + static attribute_5982 = 5982; + static attribute_5983 = 5983; + static attribute_5984 = 5984; + static attribute_5985 = 5985; + static attribute_5986 = 5986; + static attribute_5987 = 5987; + static attribute_5988 = 5988; + static attribute_5989 = 5989; + static attribute_5990 = 5990; + static attribute_5991 = 5991; + static attribute_5992 = 5992; + static attribute_5993 = 5993; + static attribute_5994 = 5994; + static attribute_5995 = 5995; + static attribute_5996 = 5996; + static attribute_5997 = 5997; + static attribute_5998 = 5998; + static attribute_5999 = 5999; + static attribute_6000 = 6000; + static attribute_6001 = 6001; + static attribute_6002 = 6002; + static attribute_6003 = 6003; + static attribute_6004 = 6004; + static attribute_6005 = 6005; + static attribute_6006 = 6006; + static attribute_6007 = 6007; + static attribute_6008 = 6008; + static attribute_6009 = 6009; + static attribute_6010 = 6010; + static attribute_6011 = 6011; + static attribute_6012 = 6012; + static attribute_6013 = 6013; + static attribute_6014 = 6014; + static attribute_6015 = 6015; + static attribute_6016 = 6016; + static attribute_6017 = 6017; + static attribute_6018 = 6018; + static attribute_6019 = 6019; + static attribute_6020 = 6020; + static attribute_6021 = 6021; + static attribute_6022 = 6022; + static attribute_6023 = 6023; + static attribute_6024 = 6024; + static attribute_6025 = 6025; + static attribute_6026 = 6026; + static attribute_6027 = 6027; + static attribute_6028 = 6028; + static attribute_6029 = 6029; + static attribute_6030 = 6030; + static attribute_6031 = 6031; + static attribute_6032 = 6032; + static attribute_6033 = 6033; + static attribute_6034 = 6034; + static attribute_6035 = 6035; + static attribute_6036 = 6036; + static attribute_6037 = 6037; + static attribute_6038 = 6038; + static attribute_6039 = 6039; + static attribute_6040 = 6040; + static attribute_6041 = 6041; + static attribute_6042 = 6042; + static attribute_6043 = 6043; + static attribute_6044 = 6044; + static attribute_6045 = 6045; + static attribute_6046 = 6046; + static attribute_6047 = 6047; + static attribute_6048 = 6048; + static attribute_6049 = 6049; + static attribute_6050 = 6050; + static attribute_6051 = 6051; + static attribute_6052 = 6052; + static attribute_6053 = 6053; + static attribute_6054 = 6054; + static attribute_6055 = 6055; + static attribute_6056 = 6056; + static attribute_6057 = 6057; + static attribute_6058 = 6058; + static attribute_6059 = 6059; + static attribute_6060 = 6060; + static attribute_6061 = 6061; + static attribute_6062 = 6062; + static attribute_6063 = 6063; + static attribute_6064 = 6064; + static attribute_6065 = 6065; + static attribute_6066 = 6066; + static attribute_6067 = 6067; + static attribute_6068 = 6068; + static attribute_6069 = 6069; + static attribute_6070 = 6070; + static attribute_6071 = 6071; + static attribute_6072 = 6072; + static attribute_6073 = 6073; + static attribute_6074 = 6074; + static attribute_6075 = 6075; + static attribute_6076 = 6076; + static attribute_6077 = 6077; + static attribute_6078 = 6078; + static attribute_6079 = 6079; + static attribute_6080 = 6080; + static attribute_6081 = 6081; + static attribute_6082 = 6082; + static attribute_6083 = 6083; + static attribute_6084 = 6084; + static attribute_6085 = 6085; + static attribute_6086 = 6086; + static attribute_6087 = 6087; + static attribute_6088 = 6088; + static attribute_6089 = 6089; + static attribute_6090 = 6090; + static attribute_6091 = 6091; + static attribute_6092 = 6092; + static attribute_6093 = 6093; + static attribute_6094 = 6094; + static attribute_6095 = 6095; + static attribute_6096 = 6096; + static attribute_6097 = 6097; + static attribute_6098 = 6098; + static attribute_6099 = 6099; + static attribute_6100 = 6100; + static attribute_6101 = 6101; + static attribute_6102 = 6102; + static attribute_6103 = 6103; + static attribute_6104 = 6104; + static attribute_6105 = 6105; + static attribute_6106 = 6106; + static attribute_6107 = 6107; + static attribute_6108 = 6108; + static attribute_6109 = 6109; + static attribute_6110 = 6110; + static attribute_6111 = 6111; + static attribute_6112 = 6112; + static attribute_6113 = 6113; + static attribute_6114 = 6114; + static attribute_6115 = 6115; + static attribute_6116 = 6116; + static attribute_6117 = 6117; + static attribute_6118 = 6118; + static attribute_6119 = 6119; + static attribute_6120 = 6120; + static attribute_6121 = 6121; + static attribute_6122 = 6122; + static attribute_6123 = 6123; + static attribute_6124 = 6124; + static attribute_6125 = 6125; + static attribute_6126 = 6126; + static attribute_6127 = 6127; + static attribute_6128 = 6128; + static attribute_6129 = 6129; + static attribute_6130 = 6130; + static attribute_6131 = 6131; + static attribute_6132 = 6132; + static attribute_6133 = 6133; + static attribute_6134 = 6134; + static attribute_6135 = 6135; + static attribute_6136 = 6136; + static attribute_6137 = 6137; + static attribute_6138 = 6138; + static attribute_6139 = 6139; + static attribute_6140 = 6140; + static attribute_6141 = 6141; + static attribute_6142 = 6142; + static attribute_6143 = 6143; + static attribute_6144 = 6144; + static attribute_6145 = 6145; + static attribute_6146 = 6146; + static attribute_6147 = 6147; + static attribute_6148 = 6148; + static attribute_6149 = 6149; + static attribute_6150 = 6150; + static attribute_6151 = 6151; + static attribute_6152 = 6152; + static attribute_6153 = 6153; + static attribute_6154 = 6154; + static attribute_6155 = 6155; + static attribute_6156 = 6156; + static attribute_6157 = 6157; + static attribute_6158 = 6158; + static attribute_6159 = 6159; + static attribute_6160 = 6160; + static attribute_6161 = 6161; + static attribute_6162 = 6162; + static attribute_6163 = 6163; + static attribute_6164 = 6164; + static attribute_6165 = 6165; + static attribute_6166 = 6166; + static attribute_6167 = 6167; + static attribute_6168 = 6168; + static attribute_6169 = 6169; + static attribute_6170 = 6170; + static attribute_6171 = 6171; + static attribute_6172 = 6172; + static attribute_6173 = 6173; + static attribute_6174 = 6174; + static attribute_6175 = 6175; + static attribute_6176 = 6176; + static attribute_6177 = 6177; + static attribute_6178 = 6178; + static attribute_6179 = 6179; + static attribute_6180 = 6180; + static attribute_6181 = 6181; + static attribute_6182 = 6182; + static attribute_6183 = 6183; + static attribute_6184 = 6184; + static attribute_6185 = 6185; + static attribute_6186 = 6186; + static attribute_6187 = 6187; + static attribute_6188 = 6188; + static attribute_6189 = 6189; + static attribute_6190 = 6190; + static attribute_6191 = 6191; + static attribute_6192 = 6192; + static attribute_6193 = 6193; + static attribute_6194 = 6194; + static attribute_6195 = 6195; + static attribute_6196 = 6196; + static attribute_6197 = 6197; + static attribute_6198 = 6198; + static attribute_6199 = 6199; + static attribute_6200 = 6200; + static attribute_6201 = 6201; + static attribute_6202 = 6202; + static attribute_6203 = 6203; + static attribute_6204 = 6204; + static attribute_6205 = 6205; + static attribute_6206 = 6206; + static attribute_6207 = 6207; + static attribute_6208 = 6208; + static attribute_6209 = 6209; + static attribute_6210 = 6210; + static attribute_6211 = 6211; + static attribute_6212 = 6212; + static attribute_6213 = 6213; + static attribute_6214 = 6214; + static attribute_6215 = 6215; + static attribute_6216 = 6216; + static attribute_6217 = 6217; + static attribute_6218 = 6218; + static attribute_6219 = 6219; + static attribute_6220 = 6220; + static attribute_6221 = 6221; + static attribute_6222 = 6222; + static attribute_6223 = 6223; + static attribute_6224 = 6224; + static attribute_6225 = 6225; + static attribute_6226 = 6226; + static attribute_6227 = 6227; + static attribute_6228 = 6228; + static attribute_6229 = 6229; + static attribute_6230 = 6230; + static attribute_6231 = 6231; + static attribute_6232 = 6232; + static attribute_6233 = 6233; + static attribute_6234 = 6234; + static attribute_6235 = 6235; + static attribute_6236 = 6236; + static attribute_6237 = 6237; + static attribute_6238 = 6238; + static attribute_6239 = 6239; + static attribute_6240 = 6240; + static attribute_6241 = 6241; + static attribute_6242 = 6242; + static attribute_6243 = 6243; + static attribute_6244 = 6244; + static attribute_6245 = 6245; + static attribute_6246 = 6246; + static attribute_6247 = 6247; + static attribute_6248 = 6248; + static attribute_6249 = 6249; + static attribute_6250 = 6250; + static attribute_6251 = 6251; + static attribute_6252 = 6252; + static attribute_6253 = 6253; + static attribute_6254 = 6254; + static attribute_6255 = 6255; + static attribute_6256 = 6256; + static attribute_6257 = 6257; + static attribute_6258 = 6258; + static attribute_6259 = 6259; + static attribute_6260 = 6260; + static attribute_6261 = 6261; + static attribute_6262 = 6262; + static attribute_6263 = 6263; + static attribute_6264 = 6264; + static attribute_6265 = 6265; + static attribute_6266 = 6266; + static attribute_6267 = 6267; + static attribute_6268 = 6268; + static attribute_6269 = 6269; + static attribute_6270 = 6270; + static attribute_6271 = 6271; + static attribute_6272 = 6272; + static attribute_6273 = 6273; + static attribute_6274 = 6274; + static attribute_6275 = 6275; + static attribute_6276 = 6276; + static attribute_6277 = 6277; + static attribute_6278 = 6278; + static attribute_6279 = 6279; + static attribute_6280 = 6280; + static attribute_6281 = 6281; + static attribute_6282 = 6282; + static attribute_6283 = 6283; + static attribute_6284 = 6284; + static attribute_6285 = 6285; + static attribute_6286 = 6286; + static attribute_6287 = 6287; + static attribute_6288 = 6288; + static attribute_6289 = 6289; + static attribute_6290 = 6290; + static attribute_6291 = 6291; + static attribute_6292 = 6292; + static attribute_6293 = 6293; + static attribute_6294 = 6294; + static attribute_6295 = 6295; + static attribute_6296 = 6296; + static attribute_6297 = 6297; + static attribute_6298 = 6298; + static attribute_6299 = 6299; + static attribute_6300 = 6300; + static attribute_6301 = 6301; + static attribute_6302 = 6302; + static attribute_6303 = 6303; + static attribute_6304 = 6304; + static attribute_6305 = 6305; + static attribute_6306 = 6306; + static attribute_6307 = 6307; + static attribute_6308 = 6308; + static attribute_6309 = 6309; + static attribute_6310 = 6310; + static attribute_6311 = 6311; + static attribute_6312 = 6312; + static attribute_6313 = 6313; + static attribute_6314 = 6314; + static attribute_6315 = 6315; + static attribute_6316 = 6316; + static attribute_6317 = 6317; + static attribute_6318 = 6318; + static attribute_6319 = 6319; + static attribute_6320 = 6320; + static attribute_6321 = 6321; + static attribute_6322 = 6322; + static attribute_6323 = 6323; + static attribute_6324 = 6324; + static attribute_6325 = 6325; + static attribute_6326 = 6326; + static attribute_6327 = 6327; + static attribute_6328 = 6328; + static attribute_6329 = 6329; + static attribute_6330 = 6330; + static attribute_6331 = 6331; + static attribute_6332 = 6332; + static attribute_6333 = 6333; + static attribute_6334 = 6334; + static attribute_6335 = 6335; + static attribute_6336 = 6336; + static attribute_6337 = 6337; + static attribute_6338 = 6338; + static attribute_6339 = 6339; + static attribute_6340 = 6340; + static attribute_6341 = 6341; + static attribute_6342 = 6342; + static attribute_6343 = 6343; + static attribute_6344 = 6344; + static attribute_6345 = 6345; + static attribute_6346 = 6346; + static attribute_6347 = 6347; + static attribute_6348 = 6348; + static attribute_6349 = 6349; + static attribute_6350 = 6350; + static attribute_6351 = 6351; + static attribute_6352 = 6352; + static attribute_6353 = 6353; + static attribute_6354 = 6354; + static attribute_6355 = 6355; + static attribute_6356 = 6356; + static attribute_6357 = 6357; + static attribute_6358 = 6358; + static attribute_6359 = 6359; + static attribute_6360 = 6360; + static attribute_6361 = 6361; + static attribute_6362 = 6362; + static attribute_6363 = 6363; + static attribute_6364 = 6364; + static attribute_6365 = 6365; + static attribute_6366 = 6366; + static attribute_6367 = 6367; + static attribute_6368 = 6368; + static attribute_6369 = 6369; + static attribute_6370 = 6370; + static attribute_6371 = 6371; + static attribute_6372 = 6372; + static attribute_6373 = 6373; + static attribute_6374 = 6374; + static attribute_6375 = 6375; + static attribute_6376 = 6376; + static attribute_6377 = 6377; + static attribute_6378 = 6378; + static attribute_6379 = 6379; + static attribute_6380 = 6380; + static attribute_6381 = 6381; + static attribute_6382 = 6382; + static attribute_6383 = 6383; + static attribute_6384 = 6384; + static attribute_6385 = 6385; + static attribute_6386 = 6386; + static attribute_6387 = 6387; + static attribute_6388 = 6388; + static attribute_6389 = 6389; + static attribute_6390 = 6390; + static attribute_6391 = 6391; + static attribute_6392 = 6392; + static attribute_6393 = 6393; + static attribute_6394 = 6394; + static attribute_6395 = 6395; + static attribute_6396 = 6396; + static attribute_6397 = 6397; + static attribute_6398 = 6398; + static attribute_6399 = 6399; + static attribute_6400 = 6400; + static attribute_6401 = 6401; + static attribute_6402 = 6402; + static attribute_6403 = 6403; + static attribute_6404 = 6404; + static attribute_6405 = 6405; + static attribute_6406 = 6406; + static attribute_6407 = 6407; + static attribute_6408 = 6408; + static attribute_6409 = 6409; + static attribute_6410 = 6410; + static attribute_6411 = 6411; + static attribute_6412 = 6412; + static attribute_6413 = 6413; + static attribute_6414 = 6414; + static attribute_6415 = 6415; + static attribute_6416 = 6416; + static attribute_6417 = 6417; + static attribute_6418 = 6418; + static attribute_6419 = 6419; + static attribute_6420 = 6420; + static attribute_6421 = 6421; + static attribute_6422 = 6422; + static attribute_6423 = 6423; + static attribute_6424 = 6424; + static attribute_6425 = 6425; + static attribute_6426 = 6426; + static attribute_6427 = 6427; + static attribute_6428 = 6428; + static attribute_6429 = 6429; + static attribute_6430 = 6430; + static attribute_6431 = 6431; + static attribute_6432 = 6432; + static attribute_6433 = 6433; + static attribute_6434 = 6434; + static attribute_6435 = 6435; + static attribute_6436 = 6436; + static attribute_6437 = 6437; + static attribute_6438 = 6438; + static attribute_6439 = 6439; + static attribute_6440 = 6440; + static attribute_6441 = 6441; + static attribute_6442 = 6442; + static attribute_6443 = 6443; + static attribute_6444 = 6444; + static attribute_6445 = 6445; + static attribute_6446 = 6446; + static attribute_6447 = 6447; + static attribute_6448 = 6448; + static attribute_6449 = 6449; + static attribute_6450 = 6450; + static attribute_6451 = 6451; + static attribute_6452 = 6452; + static attribute_6453 = 6453; + static attribute_6454 = 6454; + static attribute_6455 = 6455; + static attribute_6456 = 6456; + static attribute_6457 = 6457; + static attribute_6458 = 6458; + static attribute_6459 = 6459; + static attribute_6460 = 6460; + static attribute_6461 = 6461; + static attribute_6462 = 6462; + static attribute_6463 = 6463; + static attribute_6464 = 6464; + static attribute_6465 = 6465; + static attribute_6466 = 6466; + static attribute_6467 = 6467; + static attribute_6468 = 6468; + static attribute_6469 = 6469; + static attribute_6470 = 6470; + static attribute_6471 = 6471; + static attribute_6472 = 6472; + static attribute_6473 = 6473; + static attribute_6474 = 6474; + static attribute_6475 = 6475; + static attribute_6476 = 6476; + static attribute_6477 = 6477; + static attribute_6478 = 6478; + static attribute_6479 = 6479; + static attribute_6480 = 6480; + static attribute_6481 = 6481; + static attribute_6482 = 6482; + static attribute_6483 = 6483; + static attribute_6484 = 6484; + static attribute_6485 = 6485; + static attribute_6486 = 6486; + static attribute_6487 = 6487; + static attribute_6488 = 6488; + static attribute_6489 = 6489; + static attribute_6490 = 6490; + static attribute_6491 = 6491; + static attribute_6492 = 6492; + static attribute_6493 = 6493; + static attribute_6494 = 6494; + static attribute_6495 = 6495; + static attribute_6496 = 6496; + static attribute_6497 = 6497; + static attribute_6498 = 6498; + static attribute_6499 = 6499; + static attribute_6500 = 6500; + static attribute_6501 = 6501; + static attribute_6502 = 6502; + static attribute_6503 = 6503; + static attribute_6504 = 6504; + static attribute_6505 = 6505; + static attribute_6506 = 6506; + static attribute_6507 = 6507; + static attribute_6508 = 6508; + static attribute_6509 = 6509; + static attribute_6510 = 6510; + static attribute_6511 = 6511; + static attribute_6512 = 6512; + static attribute_6513 = 6513; + static attribute_6514 = 6514; + static attribute_6515 = 6515; + static attribute_6516 = 6516; + static attribute_6517 = 6517; + static attribute_6518 = 6518; + static attribute_6519 = 6519; + static attribute_6520 = 6520; + static attribute_6521 = 6521; + static attribute_6522 = 6522; + static attribute_6523 = 6523; + static attribute_6524 = 6524; + static attribute_6525 = 6525; + static attribute_6526 = 6526; + static attribute_6527 = 6527; + static attribute_6528 = 6528; + static attribute_6529 = 6529; + static attribute_6530 = 6530; + static attribute_6531 = 6531; + static attribute_6532 = 6532; + static attribute_6533 = 6533; + static attribute_6534 = 6534; + static attribute_6535 = 6535; + static attribute_6536 = 6536; + static attribute_6537 = 6537; + static attribute_6538 = 6538; + static attribute_6539 = 6539; + static attribute_6540 = 6540; + static attribute_6541 = 6541; + static attribute_6542 = 6542; + static attribute_6543 = 6543; + static attribute_6544 = 6544; + static attribute_6545 = 6545; + static attribute_6546 = 6546; + static attribute_6547 = 6547; + static attribute_6548 = 6548; + static attribute_6549 = 6549; + static attribute_6550 = 6550; + static attribute_6551 = 6551; + static attribute_6552 = 6552; + static attribute_6553 = 6553; + static attribute_6554 = 6554; + static attribute_6555 = 6555; + static attribute_6556 = 6556; + static attribute_6557 = 6557; + static attribute_6558 = 6558; + static attribute_6559 = 6559; + static attribute_6560 = 6560; + static attribute_6561 = 6561; + static attribute_6562 = 6562; + static attribute_6563 = 6563; + static attribute_6564 = 6564; + static attribute_6565 = 6565; + static attribute_6566 = 6566; + static attribute_6567 = 6567; + static attribute_6568 = 6568; + static attribute_6569 = 6569; + static attribute_6570 = 6570; + static attribute_6571 = 6571; + static attribute_6572 = 6572; + static attribute_6573 = 6573; + static attribute_6574 = 6574; + static attribute_6575 = 6575; + static attribute_6576 = 6576; + static attribute_6577 = 6577; + static attribute_6578 = 6578; + static attribute_6579 = 6579; + static attribute_6580 = 6580; + static attribute_6581 = 6581; + static attribute_6582 = 6582; + static attribute_6583 = 6583; + static attribute_6584 = 6584; + static attribute_6585 = 6585; + static attribute_6586 = 6586; + static attribute_6587 = 6587; + static attribute_6588 = 6588; + static attribute_6589 = 6589; + static attribute_6590 = 6590; + static attribute_6591 = 6591; + static attribute_6592 = 6592; + static attribute_6593 = 6593; + static attribute_6594 = 6594; + static attribute_6595 = 6595; + static attribute_6596 = 6596; + static attribute_6597 = 6597; + static attribute_6598 = 6598; + static attribute_6599 = 6599; + static attribute_6600 = 6600; + static attribute_6601 = 6601; + static attribute_6602 = 6602; + static attribute_6603 = 6603; + static attribute_6604 = 6604; + static attribute_6605 = 6605; + static attribute_6606 = 6606; + static attribute_6607 = 6607; + static attribute_6608 = 6608; + static attribute_6609 = 6609; + static attribute_6610 = 6610; + static attribute_6611 = 6611; + static attribute_6612 = 6612; + static attribute_6613 = 6613; + static attribute_6614 = 6614; + static attribute_6615 = 6615; + static attribute_6616 = 6616; + static attribute_6617 = 6617; + static attribute_6618 = 6618; + static attribute_6619 = 6619; + static attribute_6620 = 6620; + static attribute_6621 = 6621; + static attribute_6622 = 6622; + static attribute_6623 = 6623; + static attribute_6624 = 6624; + static attribute_6625 = 6625; + static attribute_6626 = 6626; + static attribute_6627 = 6627; + static attribute_6628 = 6628; + static attribute_6629 = 6629; + static attribute_6630 = 6630; + static attribute_6631 = 6631; + static attribute_6632 = 6632; + static attribute_6633 = 6633; + static attribute_6634 = 6634; + static attribute_6635 = 6635; + static attribute_6636 = 6636; + static attribute_6637 = 6637; + static attribute_6638 = 6638; + static attribute_6639 = 6639; + static attribute_6640 = 6640; + static attribute_6641 = 6641; + static attribute_6642 = 6642; + static attribute_6643 = 6643; + static attribute_6644 = 6644; + static attribute_6645 = 6645; + static attribute_6646 = 6646; + static attribute_6647 = 6647; + static attribute_6648 = 6648; + static attribute_6649 = 6649; + static attribute_6650 = 6650; + static attribute_6651 = 6651; + static attribute_6652 = 6652; + static attribute_6653 = 6653; + static attribute_6654 = 6654; + static attribute_6655 = 6655; + static attribute_6656 = 6656; + static attribute_6657 = 6657; + static attribute_6658 = 6658; + static attribute_6659 = 6659; + static attribute_6660 = 6660; + static attribute_6661 = 6661; + static attribute_6662 = 6662; + static attribute_6663 = 6663; + static attribute_6664 = 6664; + static attribute_6665 = 6665; + static attribute_6666 = 6666; + static attribute_6667 = 6667; + static attribute_6668 = 6668; + static attribute_6669 = 6669; + static attribute_6670 = 6670; + static attribute_6671 = 6671; + static attribute_6672 = 6672; + static attribute_6673 = 6673; + static attribute_6674 = 6674; + static attribute_6675 = 6675; + static attribute_6676 = 6676; + static attribute_6677 = 6677; + static attribute_6678 = 6678; + static attribute_6679 = 6679; + static attribute_6680 = 6680; + static attribute_6681 = 6681; + static attribute_6682 = 6682; + static attribute_6683 = 6683; + static attribute_6684 = 6684; + static attribute_6685 = 6685; + static attribute_6686 = 6686; + static attribute_6687 = 6687; + static attribute_6688 = 6688; + static attribute_6689 = 6689; + static attribute_6690 = 6690; + static attribute_6691 = 6691; + static attribute_6692 = 6692; + static attribute_6693 = 6693; + static attribute_6694 = 6694; + static attribute_6695 = 6695; + static attribute_6696 = 6696; + static attribute_6697 = 6697; + static attribute_6698 = 6698; + static attribute_6699 = 6699; + static attribute_6700 = 6700; + static attribute_6701 = 6701; + static attribute_6702 = 6702; + static attribute_6703 = 6703; + static attribute_6704 = 6704; + static attribute_6705 = 6705; + static attribute_6706 = 6706; + static attribute_6707 = 6707; + static attribute_6708 = 6708; + static attribute_6709 = 6709; + static attribute_6710 = 6710; + static attribute_6711 = 6711; + static attribute_6712 = 6712; + static attribute_6713 = 6713; + static attribute_6714 = 6714; + static attribute_6715 = 6715; + static attribute_6716 = 6716; + static attribute_6717 = 6717; + static attribute_6718 = 6718; + static attribute_6719 = 6719; + static attribute_6720 = 6720; + static attribute_6721 = 6721; + static attribute_6722 = 6722; + static attribute_6723 = 6723; + static attribute_6724 = 6724; + static attribute_6725 = 6725; + static attribute_6726 = 6726; + static attribute_6727 = 6727; + static attribute_6728 = 6728; + static attribute_6729 = 6729; + static attribute_6730 = 6730; + static attribute_6731 = 6731; + static attribute_6732 = 6732; + static attribute_6733 = 6733; + static attribute_6734 = 6734; + static attribute_6735 = 6735; + static attribute_6736 = 6736; + static attribute_6737 = 6737; + static attribute_6738 = 6738; + static attribute_6739 = 6739; + static attribute_6740 = 6740; + static attribute_6741 = 6741; + static attribute_6742 = 6742; + static attribute_6743 = 6743; + static attribute_6744 = 6744; + static attribute_6745 = 6745; + static attribute_6746 = 6746; + static attribute_6747 = 6747; + static attribute_6748 = 6748; + static attribute_6749 = 6749; + static attribute_6750 = 6750; + static attribute_6751 = 6751; + static attribute_6752 = 6752; + static attribute_6753 = 6753; + static attribute_6754 = 6754; + static attribute_6755 = 6755; + static attribute_6756 = 6756; + static attribute_6757 = 6757; + static attribute_6758 = 6758; + static attribute_6759 = 6759; + static attribute_6760 = 6760; + static attribute_6761 = 6761; + static attribute_6762 = 6762; + static attribute_6763 = 6763; + static attribute_6764 = 6764; + static attribute_6765 = 6765; + static attribute_6766 = 6766; + static attribute_6767 = 6767; + static attribute_6768 = 6768; + static attribute_6769 = 6769; + static attribute_6770 = 6770; + static attribute_6771 = 6771; + static attribute_6772 = 6772; + static attribute_6773 = 6773; + static attribute_6774 = 6774; + static attribute_6775 = 6775; + static attribute_6776 = 6776; + static attribute_6777 = 6777; + static attribute_6778 = 6778; + static attribute_6779 = 6779; + static attribute_6780 = 6780; + static attribute_6781 = 6781; + static attribute_6782 = 6782; + static attribute_6783 = 6783; + static attribute_6784 = 6784; + static attribute_6785 = 6785; + static attribute_6786 = 6786; + static attribute_6787 = 6787; + static attribute_6788 = 6788; + static attribute_6789 = 6789; + static attribute_6790 = 6790; + static attribute_6791 = 6791; + static attribute_6792 = 6792; + static attribute_6793 = 6793; + static attribute_6794 = 6794; + static attribute_6795 = 6795; + static attribute_6796 = 6796; + static attribute_6797 = 6797; + static attribute_6798 = 6798; + static attribute_6799 = 6799; + static attribute_6800 = 6800; + static attribute_6801 = 6801; + static attribute_6802 = 6802; + static attribute_6803 = 6803; + static attribute_6804 = 6804; + static attribute_6805 = 6805; + static attribute_6806 = 6806; + static attribute_6807 = 6807; + static attribute_6808 = 6808; + static attribute_6809 = 6809; + static attribute_6810 = 6810; + static attribute_6811 = 6811; + static attribute_6812 = 6812; + static attribute_6813 = 6813; + static attribute_6814 = 6814; + static attribute_6815 = 6815; + static attribute_6816 = 6816; + static attribute_6817 = 6817; + static attribute_6818 = 6818; + static attribute_6819 = 6819; + static attribute_6820 = 6820; + static attribute_6821 = 6821; + static attribute_6822 = 6822; + static attribute_6823 = 6823; + static attribute_6824 = 6824; + static attribute_6825 = 6825; + static attribute_6826 = 6826; + static attribute_6827 = 6827; + static attribute_6828 = 6828; + static attribute_6829 = 6829; + static attribute_6830 = 6830; + static attribute_6831 = 6831; + static attribute_6832 = 6832; + static attribute_6833 = 6833; + static attribute_6834 = 6834; + static attribute_6835 = 6835; + static attribute_6836 = 6836; + static attribute_6837 = 6837; + static attribute_6838 = 6838; + static attribute_6839 = 6839; + static attribute_6840 = 6840; + static attribute_6841 = 6841; + static attribute_6842 = 6842; + static attribute_6843 = 6843; + static attribute_6844 = 6844; + static attribute_6845 = 6845; + static attribute_6846 = 6846; + static attribute_6847 = 6847; + static attribute_6848 = 6848; + static attribute_6849 = 6849; + static attribute_6850 = 6850; + static attribute_6851 = 6851; + static attribute_6852 = 6852; + static attribute_6853 = 6853; + static attribute_6854 = 6854; + static attribute_6855 = 6855; + static attribute_6856 = 6856; + static attribute_6857 = 6857; + static attribute_6858 = 6858; + static attribute_6859 = 6859; + static attribute_6860 = 6860; + static attribute_6861 = 6861; + static attribute_6862 = 6862; + static attribute_6863 = 6863; + static attribute_6864 = 6864; + static attribute_6865 = 6865; + static attribute_6866 = 6866; + static attribute_6867 = 6867; + static attribute_6868 = 6868; + static attribute_6869 = 6869; + static attribute_6870 = 6870; + static attribute_6871 = 6871; + static attribute_6872 = 6872; + static attribute_6873 = 6873; + static attribute_6874 = 6874; + static attribute_6875 = 6875; + static attribute_6876 = 6876; + static attribute_6877 = 6877; + static attribute_6878 = 6878; + static attribute_6879 = 6879; + static attribute_6880 = 6880; + static attribute_6881 = 6881; + static attribute_6882 = 6882; + static attribute_6883 = 6883; + static attribute_6884 = 6884; + static attribute_6885 = 6885; + static attribute_6886 = 6886; + static attribute_6887 = 6887; + static attribute_6888 = 6888; + static attribute_6889 = 6889; + static attribute_6890 = 6890; + static attribute_6891 = 6891; + static attribute_6892 = 6892; + static attribute_6893 = 6893; + static attribute_6894 = 6894; + static attribute_6895 = 6895; + static attribute_6896 = 6896; + static attribute_6897 = 6897; + static attribute_6898 = 6898; + static attribute_6899 = 6899; + static attribute_6900 = 6900; + static attribute_6901 = 6901; + static attribute_6902 = 6902; + static attribute_6903 = 6903; + static attribute_6904 = 6904; + static attribute_6905 = 6905; + static attribute_6906 = 6906; + static attribute_6907 = 6907; + static attribute_6908 = 6908; + static attribute_6909 = 6909; + static attribute_6910 = 6910; + static attribute_6911 = 6911; + static attribute_6912 = 6912; + static attribute_6913 = 6913; + static attribute_6914 = 6914; + static attribute_6915 = 6915; + static attribute_6916 = 6916; + static attribute_6917 = 6917; + static attribute_6918 = 6918; + static attribute_6919 = 6919; + static attribute_6920 = 6920; + static attribute_6921 = 6921; + static attribute_6922 = 6922; + static attribute_6923 = 6923; + static attribute_6924 = 6924; + static attribute_6925 = 6925; + static attribute_6926 = 6926; + static attribute_6927 = 6927; + static attribute_6928 = 6928; + static attribute_6929 = 6929; + static attribute_6930 = 6930; + static attribute_6931 = 6931; + static attribute_6932 = 6932; + static attribute_6933 = 6933; + static attribute_6934 = 6934; + static attribute_6935 = 6935; + static attribute_6936 = 6936; + static attribute_6937 = 6937; + static attribute_6938 = 6938; + static attribute_6939 = 6939; + static attribute_6940 = 6940; + static attribute_6941 = 6941; + static attribute_6942 = 6942; + static attribute_6943 = 6943; + static attribute_6944 = 6944; + static attribute_6945 = 6945; + static attribute_6946 = 6946; + static attribute_6947 = 6947; + static attribute_6948 = 6948; + static attribute_6949 = 6949; + static attribute_6950 = 6950; + static attribute_6951 = 6951; + static attribute_6952 = 6952; + static attribute_6953 = 6953; + static attribute_6954 = 6954; + static attribute_6955 = 6955; + static attribute_6956 = 6956; + static attribute_6957 = 6957; + static attribute_6958 = 6958; + static attribute_6959 = 6959; + static attribute_6960 = 6960; + static attribute_6961 = 6961; + static attribute_6962 = 6962; + static attribute_6963 = 6963; + static attribute_6964 = 6964; + static attribute_6965 = 6965; + static attribute_6966 = 6966; + static attribute_6967 = 6967; + static attribute_6968 = 6968; + static attribute_6969 = 6969; + static attribute_6970 = 6970; + static attribute_6971 = 6971; + static attribute_6972 = 6972; + static attribute_6973 = 6973; + static attribute_6974 = 6974; + static attribute_6975 = 6975; + static attribute_6976 = 6976; + static attribute_6977 = 6977; + static attribute_6978 = 6978; + static attribute_6979 = 6979; + static attribute_6980 = 6980; + static attribute_6981 = 6981; + static attribute_6982 = 6982; + static attribute_6983 = 6983; + static attribute_6984 = 6984; + static attribute_6985 = 6985; + static attribute_6986 = 6986; + static attribute_6987 = 6987; + static attribute_6988 = 6988; + static attribute_6989 = 6989; + static attribute_6990 = 6990; + static attribute_6991 = 6991; + static attribute_6992 = 6992; + static attribute_6993 = 6993; + static attribute_6994 = 6994; + static attribute_6995 = 6995; + static attribute_6996 = 6996; + static attribute_6997 = 6997; + static attribute_6998 = 6998; + static attribute_6999 = 6999; + static attribute_7000 = 7000; + static attribute_7001 = 7001; + static attribute_7002 = 7002; + static attribute_7003 = 7003; + static attribute_7004 = 7004; + static attribute_7005 = 7005; + static attribute_7006 = 7006; + static attribute_7007 = 7007; + static attribute_7008 = 7008; + static attribute_7009 = 7009; + static attribute_7010 = 7010; + static attribute_7011 = 7011; + static attribute_7012 = 7012; + static attribute_7013 = 7013; + static attribute_7014 = 7014; + static attribute_7015 = 7015; + static attribute_7016 = 7016; + static attribute_7017 = 7017; + static attribute_7018 = 7018; + static attribute_7019 = 7019; + static attribute_7020 = 7020; + static attribute_7021 = 7021; + static attribute_7022 = 7022; + static attribute_7023 = 7023; + static attribute_7024 = 7024; + static attribute_7025 = 7025; + static attribute_7026 = 7026; + static attribute_7027 = 7027; + static attribute_7028 = 7028; + static attribute_7029 = 7029; + static attribute_7030 = 7030; + static attribute_7031 = 7031; + static attribute_7032 = 7032; + static attribute_7033 = 7033; + static attribute_7034 = 7034; + static attribute_7035 = 7035; + static attribute_7036 = 7036; + static attribute_7037 = 7037; + static attribute_7038 = 7038; + static attribute_7039 = 7039; + static attribute_7040 = 7040; + static attribute_7041 = 7041; + static attribute_7042 = 7042; + static attribute_7043 = 7043; + static attribute_7044 = 7044; + static attribute_7045 = 7045; + static attribute_7046 = 7046; + static attribute_7047 = 7047; + static attribute_7048 = 7048; + static attribute_7049 = 7049; + static attribute_7050 = 7050; + static attribute_7051 = 7051; + static attribute_7052 = 7052; + static attribute_7053 = 7053; + static attribute_7054 = 7054; + static attribute_7055 = 7055; + static attribute_7056 = 7056; + static attribute_7057 = 7057; + static attribute_7058 = 7058; + static attribute_7059 = 7059; + static attribute_7060 = 7060; + static attribute_7061 = 7061; + static attribute_7062 = 7062; + static attribute_7063 = 7063; + static attribute_7064 = 7064; + static attribute_7065 = 7065; + static attribute_7066 = 7066; + static attribute_7067 = 7067; + static attribute_7068 = 7068; + static attribute_7069 = 7069; + static attribute_7070 = 7070; + static attribute_7071 = 7071; + static attribute_7072 = 7072; + static attribute_7073 = 7073; + static attribute_7074 = 7074; + static attribute_7075 = 7075; + static attribute_7076 = 7076; + static attribute_7077 = 7077; + static attribute_7078 = 7078; + static attribute_7079 = 7079; + static attribute_7080 = 7080; + static attribute_7081 = 7081; + static attribute_7082 = 7082; + static attribute_7083 = 7083; + static attribute_7084 = 7084; + static attribute_7085 = 7085; + static attribute_7086 = 7086; + static attribute_7087 = 7087; + static attribute_7088 = 7088; + static attribute_7089 = 7089; + static attribute_7090 = 7090; + static attribute_7091 = 7091; + static attribute_7092 = 7092; + static attribute_7093 = 7093; + static attribute_7094 = 7094; + static attribute_7095 = 7095; + static attribute_7096 = 7096; + static attribute_7097 = 7097; + static attribute_7098 = 7098; + static attribute_7099 = 7099; + static attribute_7100 = 7100; + static attribute_7101 = 7101; + static attribute_7102 = 7102; + static attribute_7103 = 7103; + static attribute_7104 = 7104; + static attribute_7105 = 7105; + static attribute_7106 = 7106; + static attribute_7107 = 7107; + static attribute_7108 = 7108; + static attribute_7109 = 7109; + static attribute_7110 = 7110; + static attribute_7111 = 7111; + static attribute_7112 = 7112; + static attribute_7113 = 7113; + static attribute_7114 = 7114; + static attribute_7115 = 7115; + static attribute_7116 = 7116; + static attribute_7117 = 7117; + static attribute_7118 = 7118; + static attribute_7119 = 7119; + static attribute_7120 = 7120; + static attribute_7121 = 7121; + static attribute_7122 = 7122; + static attribute_7123 = 7123; + static attribute_7124 = 7124; + static attribute_7125 = 7125; + static attribute_7126 = 7126; + static attribute_7127 = 7127; + static attribute_7128 = 7128; + static attribute_7129 = 7129; + static attribute_7130 = 7130; + static attribute_7131 = 7131; + static attribute_7132 = 7132; + static attribute_7133 = 7133; + static attribute_7134 = 7134; + static attribute_7135 = 7135; + static attribute_7136 = 7136; + static attribute_7137 = 7137; + static attribute_7138 = 7138; + static attribute_7139 = 7139; + static attribute_7140 = 7140; + static attribute_7141 = 7141; + static attribute_7142 = 7142; + static attribute_7143 = 7143; + static attribute_7144 = 7144; + static attribute_7145 = 7145; + static attribute_7146 = 7146; + static attribute_7147 = 7147; + static attribute_7148 = 7148; + static attribute_7149 = 7149; + static attribute_7150 = 7150; + static attribute_7151 = 7151; + static attribute_7152 = 7152; + static attribute_7153 = 7153; + static attribute_7154 = 7154; + static attribute_7155 = 7155; + static attribute_7156 = 7156; + static attribute_7157 = 7157; + static attribute_7158 = 7158; + static attribute_7159 = 7159; + static attribute_7160 = 7160; + static attribute_7161 = 7161; + static attribute_7162 = 7162; + static attribute_7163 = 7163; + static attribute_7164 = 7164; + static attribute_7165 = 7165; + static attribute_7166 = 7166; + static attribute_7167 = 7167; + static attribute_7168 = 7168; + static attribute_7169 = 7169; + static attribute_7170 = 7170; + static attribute_7171 = 7171; + static attribute_7172 = 7172; + static attribute_7173 = 7173; + static attribute_7174 = 7174; + static attribute_7175 = 7175; + static attribute_7176 = 7176; + static attribute_7177 = 7177; + static attribute_7178 = 7178; + static attribute_7179 = 7179; + static attribute_7180 = 7180; + static attribute_7181 = 7181; + static attribute_7182 = 7182; + static attribute_7183 = 7183; + static attribute_7184 = 7184; + static attribute_7185 = 7185; + static attribute_7186 = 7186; + static attribute_7187 = 7187; + static attribute_7188 = 7188; + static attribute_7189 = 7189; + static attribute_7190 = 7190; + static attribute_7191 = 7191; + static attribute_7192 = 7192; + static attribute_7193 = 7193; + static attribute_7194 = 7194; + static attribute_7195 = 7195; + static attribute_7196 = 7196; + static attribute_7197 = 7197; + static attribute_7198 = 7198; + static attribute_7199 = 7199; + static attribute_7200 = 7200; + static attribute_7201 = 7201; + static attribute_7202 = 7202; + static attribute_7203 = 7203; + static attribute_7204 = 7204; + static attribute_7205 = 7205; + static attribute_7206 = 7206; + static attribute_7207 = 7207; + static attribute_7208 = 7208; + static attribute_7209 = 7209; + static attribute_7210 = 7210; + static attribute_7211 = 7211; + static attribute_7212 = 7212; + static attribute_7213 = 7213; + static attribute_7214 = 7214; + static attribute_7215 = 7215; + static attribute_7216 = 7216; + static attribute_7217 = 7217; + static attribute_7218 = 7218; + static attribute_7219 = 7219; + static attribute_7220 = 7220; + static attribute_7221 = 7221; + static attribute_7222 = 7222; + static attribute_7223 = 7223; + static attribute_7224 = 7224; + static attribute_7225 = 7225; + static attribute_7226 = 7226; + static attribute_7227 = 7227; + static attribute_7228 = 7228; + static attribute_7229 = 7229; + static attribute_7230 = 7230; + static attribute_7231 = 7231; + static attribute_7232 = 7232; + static attribute_7233 = 7233; + static attribute_7234 = 7234; + static attribute_7235 = 7235; + static attribute_7236 = 7236; + static attribute_7237 = 7237; + static attribute_7238 = 7238; + static attribute_7239 = 7239; + static attribute_7240 = 7240; + static attribute_7241 = 7241; + static attribute_7242 = 7242; + static attribute_7243 = 7243; + static attribute_7244 = 7244; + static attribute_7245 = 7245; + static attribute_7246 = 7246; + static attribute_7247 = 7247; + static attribute_7248 = 7248; + static attribute_7249 = 7249; + static attribute_7250 = 7250; + static attribute_7251 = 7251; + static attribute_7252 = 7252; + static attribute_7253 = 7253; + static attribute_7254 = 7254; + static attribute_7255 = 7255; + static attribute_7256 = 7256; + static attribute_7257 = 7257; + static attribute_7258 = 7258; + static attribute_7259 = 7259; + static attribute_7260 = 7260; + static attribute_7261 = 7261; + static attribute_7262 = 7262; + static attribute_7263 = 7263; + static attribute_7264 = 7264; + static attribute_7265 = 7265; + static attribute_7266 = 7266; + static attribute_7267 = 7267; + static attribute_7268 = 7268; + static attribute_7269 = 7269; + static attribute_7270 = 7270; + static attribute_7271 = 7271; + static attribute_7272 = 7272; + static attribute_7273 = 7273; + static attribute_7274 = 7274; + static attribute_7275 = 7275; + static attribute_7276 = 7276; + static attribute_7277 = 7277; + static attribute_7278 = 7278; + static attribute_7279 = 7279; + static attribute_7280 = 7280; + static attribute_7281 = 7281; + static attribute_7282 = 7282; + static attribute_7283 = 7283; + static attribute_7284 = 7284; + static attribute_7285 = 7285; + static attribute_7286 = 7286; + static attribute_7287 = 7287; + static attribute_7288 = 7288; + static attribute_7289 = 7289; + static attribute_7290 = 7290; + static attribute_7291 = 7291; + static attribute_7292 = 7292; + static attribute_7293 = 7293; + static attribute_7294 = 7294; + static attribute_7295 = 7295; + static attribute_7296 = 7296; + static attribute_7297 = 7297; + static attribute_7298 = 7298; + static attribute_7299 = 7299; + static attribute_7300 = 7300; + static attribute_7301 = 7301; + static attribute_7302 = 7302; + static attribute_7303 = 7303; + static attribute_7304 = 7304; + static attribute_7305 = 7305; + static attribute_7306 = 7306; + static attribute_7307 = 7307; + static attribute_7308 = 7308; + static attribute_7309 = 7309; + static attribute_7310 = 7310; + static attribute_7311 = 7311; + static attribute_7312 = 7312; + static attribute_7313 = 7313; + static attribute_7314 = 7314; + static attribute_7315 = 7315; + static attribute_7316 = 7316; + static attribute_7317 = 7317; + static attribute_7318 = 7318; + static attribute_7319 = 7319; + static attribute_7320 = 7320; + static attribute_7321 = 7321; + static attribute_7322 = 7322; + static attribute_7323 = 7323; + static attribute_7324 = 7324; + static attribute_7325 = 7325; + static attribute_7326 = 7326; + static attribute_7327 = 7327; + static attribute_7328 = 7328; + static attribute_7329 = 7329; + static attribute_7330 = 7330; + static attribute_7331 = 7331; + static attribute_7332 = 7332; + static attribute_7333 = 7333; + static attribute_7334 = 7334; + static attribute_7335 = 7335; + static attribute_7336 = 7336; + static attribute_7337 = 7337; + static attribute_7338 = 7338; + static attribute_7339 = 7339; + static attribute_7340 = 7340; + static attribute_7341 = 7341; + static attribute_7342 = 7342; + static attribute_7343 = 7343; + static attribute_7344 = 7344; + static attribute_7345 = 7345; + static attribute_7346 = 7346; + static attribute_7347 = 7347; + static attribute_7348 = 7348; + static attribute_7349 = 7349; + static attribute_7350 = 7350; + static attribute_7351 = 7351; + static attribute_7352 = 7352; + static attribute_7353 = 7353; + static attribute_7354 = 7354; + static attribute_7355 = 7355; + static attribute_7356 = 7356; + static attribute_7357 = 7357; + static attribute_7358 = 7358; + static attribute_7359 = 7359; + static attribute_7360 = 7360; + static attribute_7361 = 7361; + static attribute_7362 = 7362; + static attribute_7363 = 7363; + static attribute_7364 = 7364; + static attribute_7365 = 7365; + static attribute_7366 = 7366; + static attribute_7367 = 7367; + static attribute_7368 = 7368; + static attribute_7369 = 7369; + static attribute_7370 = 7370; + static attribute_7371 = 7371; + static attribute_7372 = 7372; + static attribute_7373 = 7373; + static attribute_7374 = 7374; + static attribute_7375 = 7375; + static attribute_7376 = 7376; + static attribute_7377 = 7377; + static attribute_7378 = 7378; + static attribute_7379 = 7379; + static attribute_7380 = 7380; + static attribute_7381 = 7381; + static attribute_7382 = 7382; + static attribute_7383 = 7383; + static attribute_7384 = 7384; + static attribute_7385 = 7385; + static attribute_7386 = 7386; + static attribute_7387 = 7387; + static attribute_7388 = 7388; + static attribute_7389 = 7389; + static attribute_7390 = 7390; + static attribute_7391 = 7391; + static attribute_7392 = 7392; + static attribute_7393 = 7393; + static attribute_7394 = 7394; + static attribute_7395 = 7395; + static attribute_7396 = 7396; + static attribute_7397 = 7397; + static attribute_7398 = 7398; + static attribute_7399 = 7399; + static attribute_7400 = 7400; + static attribute_7401 = 7401; + static attribute_7402 = 7402; + static attribute_7403 = 7403; + static attribute_7404 = 7404; + static attribute_7405 = 7405; + static attribute_7406 = 7406; + static attribute_7407 = 7407; + static attribute_7408 = 7408; + static attribute_7409 = 7409; + static attribute_7410 = 7410; + static attribute_7411 = 7411; + static attribute_7412 = 7412; + static attribute_7413 = 7413; + static attribute_7414 = 7414; + static attribute_7415 = 7415; + static attribute_7416 = 7416; + static attribute_7417 = 7417; + static attribute_7418 = 7418; + static attribute_7419 = 7419; + static attribute_7420 = 7420; + static attribute_7421 = 7421; + static attribute_7422 = 7422; + static attribute_7423 = 7423; + static attribute_7424 = 7424; + static attribute_7425 = 7425; + static attribute_7426 = 7426; + static attribute_7427 = 7427; + static attribute_7428 = 7428; + static attribute_7429 = 7429; + static attribute_7430 = 7430; + static attribute_7431 = 7431; + static attribute_7432 = 7432; + static attribute_7433 = 7433; + static attribute_7434 = 7434; + static attribute_7435 = 7435; + static attribute_7436 = 7436; + static attribute_7437 = 7437; + static attribute_7438 = 7438; + static attribute_7439 = 7439; + static attribute_7440 = 7440; + static attribute_7441 = 7441; + static attribute_7442 = 7442; + static attribute_7443 = 7443; + static attribute_7444 = 7444; + static attribute_7445 = 7445; + static attribute_7446 = 7446; + static attribute_7447 = 7447; + static attribute_7448 = 7448; + static attribute_7449 = 7449; + static attribute_7450 = 7450; + static attribute_7451 = 7451; + static attribute_7452 = 7452; + static attribute_7453 = 7453; + static attribute_7454 = 7454; + static attribute_7455 = 7455; + static attribute_7456 = 7456; + static attribute_7457 = 7457; + static attribute_7458 = 7458; + static attribute_7459 = 7459; + static attribute_7460 = 7460; + static attribute_7461 = 7461; + static attribute_7462 = 7462; + static attribute_7463 = 7463; + static attribute_7464 = 7464; + static attribute_7465 = 7465; + static attribute_7466 = 7466; + static attribute_7467 = 7467; + static attribute_7468 = 7468; + static attribute_7469 = 7469; + static attribute_7470 = 7470; + static attribute_7471 = 7471; + static attribute_7472 = 7472; + static attribute_7473 = 7473; + static attribute_7474 = 7474; + static attribute_7475 = 7475; + static attribute_7476 = 7476; + static attribute_7477 = 7477; + static attribute_7478 = 7478; + static attribute_7479 = 7479; + static attribute_7480 = 7480; + static attribute_7481 = 7481; + static attribute_7482 = 7482; + static attribute_7483 = 7483; + static attribute_7484 = 7484; + static attribute_7485 = 7485; + static attribute_7486 = 7486; + static attribute_7487 = 7487; + static attribute_7488 = 7488; + static attribute_7489 = 7489; + static attribute_7490 = 7490; + static attribute_7491 = 7491; + static attribute_7492 = 7492; + static attribute_7493 = 7493; + static attribute_7494 = 7494; + static attribute_7495 = 7495; + static attribute_7496 = 7496; + static attribute_7497 = 7497; + static attribute_7498 = 7498; + static attribute_7499 = 7499; + static attribute_7500 = 7500; + static attribute_7501 = 7501; + static attribute_7502 = 7502; + static attribute_7503 = 7503; + static attribute_7504 = 7504; + static attribute_7505 = 7505; + static attribute_7506 = 7506; + static attribute_7507 = 7507; + static attribute_7508 = 7508; + static attribute_7509 = 7509; + static attribute_7510 = 7510; + static attribute_7511 = 7511; + static attribute_7512 = 7512; + static attribute_7513 = 7513; + static attribute_7514 = 7514; + static attribute_7515 = 7515; + static attribute_7516 = 7516; + static attribute_7517 = 7517; + static attribute_7518 = 7518; + static attribute_7519 = 7519; + static attribute_7520 = 7520; + static attribute_7521 = 7521; + static attribute_7522 = 7522; + static attribute_7523 = 7523; + static attribute_7524 = 7524; + static attribute_7525 = 7525; + static attribute_7526 = 7526; + static attribute_7527 = 7527; + static attribute_7528 = 7528; + static attribute_7529 = 7529; + static attribute_7530 = 7530; + static attribute_7531 = 7531; + static attribute_7532 = 7532; + static attribute_7533 = 7533; + static attribute_7534 = 7534; + static attribute_7535 = 7535; + static attribute_7536 = 7536; + static attribute_7537 = 7537; + static attribute_7538 = 7538; + static attribute_7539 = 7539; + static attribute_7540 = 7540; + static attribute_7541 = 7541; + static attribute_7542 = 7542; + static attribute_7543 = 7543; + static attribute_7544 = 7544; + static attribute_7545 = 7545; + static attribute_7546 = 7546; + static attribute_7547 = 7547; + static attribute_7548 = 7548; + static attribute_7549 = 7549; + static attribute_7550 = 7550; + static attribute_7551 = 7551; + static attribute_7552 = 7552; + static attribute_7553 = 7553; + static attribute_7554 = 7554; + static attribute_7555 = 7555; + static attribute_7556 = 7556; + static attribute_7557 = 7557; + static attribute_7558 = 7558; + static attribute_7559 = 7559; + static attribute_7560 = 7560; + static attribute_7561 = 7561; + static attribute_7562 = 7562; + static attribute_7563 = 7563; + static attribute_7564 = 7564; + static attribute_7565 = 7565; + static attribute_7566 = 7566; + static attribute_7567 = 7567; + static attribute_7568 = 7568; + static attribute_7569 = 7569; + static attribute_7570 = 7570; + static attribute_7571 = 7571; + static attribute_7572 = 7572; + static attribute_7573 = 7573; + static attribute_7574 = 7574; + static attribute_7575 = 7575; + static attribute_7576 = 7576; + static attribute_7577 = 7577; + static attribute_7578 = 7578; + static attribute_7579 = 7579; + static attribute_7580 = 7580; + static attribute_7581 = 7581; + static attribute_7582 = 7582; + static attribute_7583 = 7583; + static attribute_7584 = 7584; + static attribute_7585 = 7585; + static attribute_7586 = 7586; + static attribute_7587 = 7587; + static attribute_7588 = 7588; + static attribute_7589 = 7589; + static attribute_7590 = 7590; + static attribute_7591 = 7591; + static attribute_7592 = 7592; + static attribute_7593 = 7593; + static attribute_7594 = 7594; + static attribute_7595 = 7595; + static attribute_7596 = 7596; + static attribute_7597 = 7597; + static attribute_7598 = 7598; + static attribute_7599 = 7599; + static attribute_7600 = 7600; + static attribute_7601 = 7601; + static attribute_7602 = 7602; + static attribute_7603 = 7603; + static attribute_7604 = 7604; + static attribute_7605 = 7605; + static attribute_7606 = 7606; + static attribute_7607 = 7607; + static attribute_7608 = 7608; + static attribute_7609 = 7609; + static attribute_7610 = 7610; + static attribute_7611 = 7611; + static attribute_7612 = 7612; + static attribute_7613 = 7613; + static attribute_7614 = 7614; + static attribute_7615 = 7615; + static attribute_7616 = 7616; + static attribute_7617 = 7617; + static attribute_7618 = 7618; + static attribute_7619 = 7619; + static attribute_7620 = 7620; + static attribute_7621 = 7621; + static attribute_7622 = 7622; + static attribute_7623 = 7623; + static attribute_7624 = 7624; + static attribute_7625 = 7625; + static attribute_7626 = 7626; + static attribute_7627 = 7627; + static attribute_7628 = 7628; + static attribute_7629 = 7629; + static attribute_7630 = 7630; + static attribute_7631 = 7631; + static attribute_7632 = 7632; + static attribute_7633 = 7633; + static attribute_7634 = 7634; + static attribute_7635 = 7635; + static attribute_7636 = 7636; + static attribute_7637 = 7637; + static attribute_7638 = 7638; + static attribute_7639 = 7639; + static attribute_7640 = 7640; + static attribute_7641 = 7641; + static attribute_7642 = 7642; + static attribute_7643 = 7643; + static attribute_7644 = 7644; + static attribute_7645 = 7645; + static attribute_7646 = 7646; + static attribute_7647 = 7647; + static attribute_7648 = 7648; + static attribute_7649 = 7649; + static attribute_7650 = 7650; + static attribute_7651 = 7651; + static attribute_7652 = 7652; + static attribute_7653 = 7653; + static attribute_7654 = 7654; + static attribute_7655 = 7655; + static attribute_7656 = 7656; + static attribute_7657 = 7657; + static attribute_7658 = 7658; + static attribute_7659 = 7659; + static attribute_7660 = 7660; + static attribute_7661 = 7661; + static attribute_7662 = 7662; + static attribute_7663 = 7663; + static attribute_7664 = 7664; + static attribute_7665 = 7665; + static attribute_7666 = 7666; + static attribute_7667 = 7667; + static attribute_7668 = 7668; + static attribute_7669 = 7669; + static attribute_7670 = 7670; + static attribute_7671 = 7671; + static attribute_7672 = 7672; + static attribute_7673 = 7673; + static attribute_7674 = 7674; + static attribute_7675 = 7675; + static attribute_7676 = 7676; + static attribute_7677 = 7677; + static attribute_7678 = 7678; + static attribute_7679 = 7679; + static attribute_7680 = 7680; + static attribute_7681 = 7681; + static attribute_7682 = 7682; + static attribute_7683 = 7683; + static attribute_7684 = 7684; + static attribute_7685 = 7685; + static attribute_7686 = 7686; + static attribute_7687 = 7687; + static attribute_7688 = 7688; + static attribute_7689 = 7689; + static attribute_7690 = 7690; + static attribute_7691 = 7691; + static attribute_7692 = 7692; + static attribute_7693 = 7693; + static attribute_7694 = 7694; + static attribute_7695 = 7695; + static attribute_7696 = 7696; + static attribute_7697 = 7697; + static attribute_7698 = 7698; + static attribute_7699 = 7699; + static attribute_7700 = 7700; + static attribute_7701 = 7701; + static attribute_7702 = 7702; + static attribute_7703 = 7703; + static attribute_7704 = 7704; + static attribute_7705 = 7705; + static attribute_7706 = 7706; + static attribute_7707 = 7707; + static attribute_7708 = 7708; + static attribute_7709 = 7709; + static attribute_7710 = 7710; + static attribute_7711 = 7711; + static attribute_7712 = 7712; + static attribute_7713 = 7713; + static attribute_7714 = 7714; + static attribute_7715 = 7715; + static attribute_7716 = 7716; + static attribute_7717 = 7717; + static attribute_7718 = 7718; + static attribute_7719 = 7719; + static attribute_7720 = 7720; + static attribute_7721 = 7721; + static attribute_7722 = 7722; + static attribute_7723 = 7723; + static attribute_7724 = 7724; + static attribute_7725 = 7725; + static attribute_7726 = 7726; + static attribute_7727 = 7727; + static attribute_7728 = 7728; + static attribute_7729 = 7729; + static attribute_7730 = 7730; + static attribute_7731 = 7731; + static attribute_7732 = 7732; + static attribute_7733 = 7733; + static attribute_7734 = 7734; + static attribute_7735 = 7735; + static attribute_7736 = 7736; + static attribute_7737 = 7737; + static attribute_7738 = 7738; + static attribute_7739 = 7739; + static attribute_7740 = 7740; + static attribute_7741 = 7741; + static attribute_7742 = 7742; + static attribute_7743 = 7743; + static attribute_7744 = 7744; + static attribute_7745 = 7745; + static attribute_7746 = 7746; + static attribute_7747 = 7747; + static attribute_7748 = 7748; + static attribute_7749 = 7749; + static attribute_7750 = 7750; + static attribute_7751 = 7751; + static attribute_7752 = 7752; + static attribute_7753 = 7753; + static attribute_7754 = 7754; + static attribute_7755 = 7755; + static attribute_7756 = 7756; + static attribute_7757 = 7757; + static attribute_7758 = 7758; + static attribute_7759 = 7759; + static attribute_7760 = 7760; + static attribute_7761 = 7761; + static attribute_7762 = 7762; + static attribute_7763 = 7763; + static attribute_7764 = 7764; + static attribute_7765 = 7765; + static attribute_7766 = 7766; + static attribute_7767 = 7767; + static attribute_7768 = 7768; + static attribute_7769 = 7769; + static attribute_7770 = 7770; + static attribute_7771 = 7771; + static attribute_7772 = 7772; + static attribute_7773 = 7773; + static attribute_7774 = 7774; + static attribute_7775 = 7775; + static attribute_7776 = 7776; + static attribute_7777 = 7777; + static attribute_7778 = 7778; + static attribute_7779 = 7779; + static attribute_7780 = 7780; + static attribute_7781 = 7781; + static attribute_7782 = 7782; + static attribute_7783 = 7783; + static attribute_7784 = 7784; + static attribute_7785 = 7785; + static attribute_7786 = 7786; + static attribute_7787 = 7787; + static attribute_7788 = 7788; + static attribute_7789 = 7789; + static attribute_7790 = 7790; + static attribute_7791 = 7791; + static attribute_7792 = 7792; + static attribute_7793 = 7793; + static attribute_7794 = 7794; + static attribute_7795 = 7795; + static attribute_7796 = 7796; + static attribute_7797 = 7797; + static attribute_7798 = 7798; + static attribute_7799 = 7799; + static attribute_7800 = 7800; + static attribute_7801 = 7801; + static attribute_7802 = 7802; + static attribute_7803 = 7803; + static attribute_7804 = 7804; + static attribute_7805 = 7805; + static attribute_7806 = 7806; + static attribute_7807 = 7807; + static attribute_7808 = 7808; + static attribute_7809 = 7809; + static attribute_7810 = 7810; + static attribute_7811 = 7811; + static attribute_7812 = 7812; + static attribute_7813 = 7813; + static attribute_7814 = 7814; + static attribute_7815 = 7815; + static attribute_7816 = 7816; + static attribute_7817 = 7817; + static attribute_7818 = 7818; + static attribute_7819 = 7819; + static attribute_7820 = 7820; + static attribute_7821 = 7821; + static attribute_7822 = 7822; + static attribute_7823 = 7823; + static attribute_7824 = 7824; + static attribute_7825 = 7825; + static attribute_7826 = 7826; + static attribute_7827 = 7827; + static attribute_7828 = 7828; + static attribute_7829 = 7829; + static attribute_7830 = 7830; + static attribute_7831 = 7831; + static attribute_7832 = 7832; + static attribute_7833 = 7833; + static attribute_7834 = 7834; + static attribute_7835 = 7835; + static attribute_7836 = 7836; + static attribute_7837 = 7837; + static attribute_7838 = 7838; + static attribute_7839 = 7839; + static attribute_7840 = 7840; + static attribute_7841 = 7841; + static attribute_7842 = 7842; + static attribute_7843 = 7843; + static attribute_7844 = 7844; + static attribute_7845 = 7845; + static attribute_7846 = 7846; + static attribute_7847 = 7847; + static attribute_7848 = 7848; + static attribute_7849 = 7849; + static attribute_7850 = 7850; + static attribute_7851 = 7851; + static attribute_7852 = 7852; + static attribute_7853 = 7853; + static attribute_7854 = 7854; + static attribute_7855 = 7855; + static attribute_7856 = 7856; + static attribute_7857 = 7857; + static attribute_7858 = 7858; + static attribute_7859 = 7859; + static attribute_7860 = 7860; + static attribute_7861 = 7861; + static attribute_7862 = 7862; + static attribute_7863 = 7863; + static attribute_7864 = 7864; + static attribute_7865 = 7865; + static attribute_7866 = 7866; + static attribute_7867 = 7867; + static attribute_7868 = 7868; + static attribute_7869 = 7869; + static attribute_7870 = 7870; + static attribute_7871 = 7871; + static attribute_7872 = 7872; + static attribute_7873 = 7873; + static attribute_7874 = 7874; + static attribute_7875 = 7875; + static attribute_7876 = 7876; + static attribute_7877 = 7877; + static attribute_7878 = 7878; + static attribute_7879 = 7879; + static attribute_7880 = 7880; + static attribute_7881 = 7881; + static attribute_7882 = 7882; + static attribute_7883 = 7883; + static attribute_7884 = 7884; + static attribute_7885 = 7885; + static attribute_7886 = 7886; + static attribute_7887 = 7887; + static attribute_7888 = 7888; + static attribute_7889 = 7889; + static attribute_7890 = 7890; + static attribute_7891 = 7891; + static attribute_7892 = 7892; + static attribute_7893 = 7893; + static attribute_7894 = 7894; + static attribute_7895 = 7895; + static attribute_7896 = 7896; + static attribute_7897 = 7897; + static attribute_7898 = 7898; + static attribute_7899 = 7899; + static attribute_7900 = 7900; + static attribute_7901 = 7901; + static attribute_7902 = 7902; + static attribute_7903 = 7903; + static attribute_7904 = 7904; + static attribute_7905 = 7905; + static attribute_7906 = 7906; + static attribute_7907 = 7907; + static attribute_7908 = 7908; + static attribute_7909 = 7909; + static attribute_7910 = 7910; + static attribute_7911 = 7911; + static attribute_7912 = 7912; + static attribute_7913 = 7913; + static attribute_7914 = 7914; + static attribute_7915 = 7915; + static attribute_7916 = 7916; + static attribute_7917 = 7917; + static attribute_7918 = 7918; + static attribute_7919 = 7919; + static attribute_7920 = 7920; + static attribute_7921 = 7921; + static attribute_7922 = 7922; + static attribute_7923 = 7923; + static attribute_7924 = 7924; + static attribute_7925 = 7925; + static attribute_7926 = 7926; + static attribute_7927 = 7927; + static attribute_7928 = 7928; + static attribute_7929 = 7929; + static attribute_7930 = 7930; + static attribute_7931 = 7931; + static attribute_7932 = 7932; + static attribute_7933 = 7933; + static attribute_7934 = 7934; + static attribute_7935 = 7935; + static attribute_7936 = 7936; + static attribute_7937 = 7937; + static attribute_7938 = 7938; + static attribute_7939 = 7939; + static attribute_7940 = 7940; + static attribute_7941 = 7941; + static attribute_7942 = 7942; + static attribute_7943 = 7943; + static attribute_7944 = 7944; + static attribute_7945 = 7945; + static attribute_7946 = 7946; + static attribute_7947 = 7947; + static attribute_7948 = 7948; + static attribute_7949 = 7949; + static attribute_7950 = 7950; + static attribute_7951 = 7951; + static attribute_7952 = 7952; + static attribute_7953 = 7953; + static attribute_7954 = 7954; + static attribute_7955 = 7955; + static attribute_7956 = 7956; + static attribute_7957 = 7957; + static attribute_7958 = 7958; + static attribute_7959 = 7959; + static attribute_7960 = 7960; + static attribute_7961 = 7961; + static attribute_7962 = 7962; + static attribute_7963 = 7963; + static attribute_7964 = 7964; + static attribute_7965 = 7965; + static attribute_7966 = 7966; + static attribute_7967 = 7967; + static attribute_7968 = 7968; + static attribute_7969 = 7969; + static attribute_7970 = 7970; + static attribute_7971 = 7971; + static attribute_7972 = 7972; + static attribute_7973 = 7973; + static attribute_7974 = 7974; + static attribute_7975 = 7975; + static attribute_7976 = 7976; + static attribute_7977 = 7977; + static attribute_7978 = 7978; + static attribute_7979 = 7979; + static attribute_7980 = 7980; + static attribute_7981 = 7981; + static attribute_7982 = 7982; + static attribute_7983 = 7983; + static attribute_7984 = 7984; + static attribute_7985 = 7985; + static attribute_7986 = 7986; + static attribute_7987 = 7987; + static attribute_7988 = 7988; + static attribute_7989 = 7989; + static attribute_7990 = 7990; + static attribute_7991 = 7991; + static attribute_7992 = 7992; + static attribute_7993 = 7993; + static attribute_7994 = 7994; + static attribute_7995 = 7995; + static attribute_7996 = 7996; + static attribute_7997 = 7997; + static attribute_7998 = 7998; + static attribute_7999 = 7999; + static attribute_8000 = 8000; + static attribute_8001 = 8001; + static attribute_8002 = 8002; + static attribute_8003 = 8003; + static attribute_8004 = 8004; + static attribute_8005 = 8005; + static attribute_8006 = 8006; + static attribute_8007 = 8007; + static attribute_8008 = 8008; + static attribute_8009 = 8009; + static attribute_8010 = 8010; + static attribute_8011 = 8011; + static attribute_8012 = 8012; + static attribute_8013 = 8013; + static attribute_8014 = 8014; + static attribute_8015 = 8015; + static attribute_8016 = 8016; + static attribute_8017 = 8017; + static attribute_8018 = 8018; + static attribute_8019 = 8019; + static attribute_8020 = 8020; + static attribute_8021 = 8021; + static attribute_8022 = 8022; + static attribute_8023 = 8023; + static attribute_8024 = 8024; + static attribute_8025 = 8025; + static attribute_8026 = 8026; + static attribute_8027 = 8027; + static attribute_8028 = 8028; + static attribute_8029 = 8029; + static attribute_8030 = 8030; + static attribute_8031 = 8031; + static attribute_8032 = 8032; + static attribute_8033 = 8033; + static attribute_8034 = 8034; + static attribute_8035 = 8035; + static attribute_8036 = 8036; + static attribute_8037 = 8037; + static attribute_8038 = 8038; + static attribute_8039 = 8039; + static attribute_8040 = 8040; + static attribute_8041 = 8041; + static attribute_8042 = 8042; + static attribute_8043 = 8043; + static attribute_8044 = 8044; + static attribute_8045 = 8045; + static attribute_8046 = 8046; + static attribute_8047 = 8047; + static attribute_8048 = 8048; + static attribute_8049 = 8049; + static attribute_8050 = 8050; + static attribute_8051 = 8051; + static attribute_8052 = 8052; + static attribute_8053 = 8053; + static attribute_8054 = 8054; + static attribute_8055 = 8055; + static attribute_8056 = 8056; + static attribute_8057 = 8057; + static attribute_8058 = 8058; + static attribute_8059 = 8059; + static attribute_8060 = 8060; + static attribute_8061 = 8061; + static attribute_8062 = 8062; + static attribute_8063 = 8063; + static attribute_8064 = 8064; + static attribute_8065 = 8065; + static attribute_8066 = 8066; + static attribute_8067 = 8067; + static attribute_8068 = 8068; + static attribute_8069 = 8069; + static attribute_8070 = 8070; + static attribute_8071 = 8071; + static attribute_8072 = 8072; + static attribute_8073 = 8073; + static attribute_8074 = 8074; + static attribute_8075 = 8075; + static attribute_8076 = 8076; + static attribute_8077 = 8077; + static attribute_8078 = 8078; + static attribute_8079 = 8079; + static attribute_8080 = 8080; + static attribute_8081 = 8081; + static attribute_8082 = 8082; + static attribute_8083 = 8083; + static attribute_8084 = 8084; + static attribute_8085 = 8085; + static attribute_8086 = 8086; + static attribute_8087 = 8087; + static attribute_8088 = 8088; + static attribute_8089 = 8089; + static attribute_8090 = 8090; + static attribute_8091 = 8091; + static attribute_8092 = 8092; + static attribute_8093 = 8093; + static attribute_8094 = 8094; + static attribute_8095 = 8095; + static attribute_8096 = 8096; + static attribute_8097 = 8097; + static attribute_8098 = 8098; + static attribute_8099 = 8099; + static attribute_8100 = 8100; + static attribute_8101 = 8101; + static attribute_8102 = 8102; + static attribute_8103 = 8103; + static attribute_8104 = 8104; + static attribute_8105 = 8105; + static attribute_8106 = 8106; + static attribute_8107 = 8107; + static attribute_8108 = 8108; + static attribute_8109 = 8109; + static attribute_8110 = 8110; + static attribute_8111 = 8111; + static attribute_8112 = 8112; + static attribute_8113 = 8113; + static attribute_8114 = 8114; + static attribute_8115 = 8115; + static attribute_8116 = 8116; + static attribute_8117 = 8117; + static attribute_8118 = 8118; + static attribute_8119 = 8119; + static attribute_8120 = 8120; + static attribute_8121 = 8121; + static attribute_8122 = 8122; + static attribute_8123 = 8123; + static attribute_8124 = 8124; + static attribute_8125 = 8125; + static attribute_8126 = 8126; + static attribute_8127 = 8127; + static attribute_8128 = 8128; + static attribute_8129 = 8129; + static attribute_8130 = 8130; + static attribute_8131 = 8131; + static attribute_8132 = 8132; + static attribute_8133 = 8133; + static attribute_8134 = 8134; + static attribute_8135 = 8135; + static attribute_8136 = 8136; + static attribute_8137 = 8137; + static attribute_8138 = 8138; + static attribute_8139 = 8139; + static attribute_8140 = 8140; + static attribute_8141 = 8141; + static attribute_8142 = 8142; + static attribute_8143 = 8143; + static attribute_8144 = 8144; + static attribute_8145 = 8145; + static attribute_8146 = 8146; + static attribute_8147 = 8147; + static attribute_8148 = 8148; + static attribute_8149 = 8149; + static attribute_8150 = 8150; + static attribute_8151 = 8151; + static attribute_8152 = 8152; + static attribute_8153 = 8153; + static attribute_8154 = 8154; + static attribute_8155 = 8155; + static attribute_8156 = 8156; + static attribute_8157 = 8157; + static attribute_8158 = 8158; + static attribute_8159 = 8159; + static attribute_8160 = 8160; + static attribute_8161 = 8161; + static attribute_8162 = 8162; + static attribute_8163 = 8163; + static attribute_8164 = 8164; + static attribute_8165 = 8165; + static attribute_8166 = 8166; + static attribute_8167 = 8167; + static attribute_8168 = 8168; + static attribute_8169 = 8169; + static attribute_8170 = 8170; + static attribute_8171 = 8171; + static attribute_8172 = 8172; + static attribute_8173 = 8173; + static attribute_8174 = 8174; + static attribute_8175 = 8175; + static attribute_8176 = 8176; + static attribute_8177 = 8177; + static attribute_8178 = 8178; + static attribute_8179 = 8179; + static attribute_8180 = 8180; + static attribute_8181 = 8181; + static attribute_8182 = 8182; + static attribute_8183 = 8183; + static attribute_8184 = 8184; + static attribute_8185 = 8185; + static attribute_8186 = 8186; + static attribute_8187 = 8187; + static attribute_8188 = 8188; + static attribute_8189 = 8189; + static attribute_8190 = 8190; + static attribute_8191 = 8191; + static attribute_8192 = 8192; + static attribute_8193 = 8193; + static attribute_8194 = 8194; + static attribute_8195 = 8195; + static attribute_8196 = 8196; + static attribute_8197 = 8197; + static attribute_8198 = 8198; + static attribute_8199 = 8199; + static attribute_8200 = 8200; + static attribute_8201 = 8201; + static attribute_8202 = 8202; + static attribute_8203 = 8203; + static attribute_8204 = 8204; + static attribute_8205 = 8205; + static attribute_8206 = 8206; + static attribute_8207 = 8207; + static attribute_8208 = 8208; + static attribute_8209 = 8209; + static attribute_8210 = 8210; + static attribute_8211 = 8211; + static attribute_8212 = 8212; + static attribute_8213 = 8213; + static attribute_8214 = 8214; + static attribute_8215 = 8215; + static attribute_8216 = 8216; + static attribute_8217 = 8217; + static attribute_8218 = 8218; + static attribute_8219 = 8219; + static attribute_8220 = 8220; + static attribute_8221 = 8221; + static attribute_8222 = 8222; + static attribute_8223 = 8223; + static attribute_8224 = 8224; + static attribute_8225 = 8225; + static attribute_8226 = 8226; + static attribute_8227 = 8227; + static attribute_8228 = 8228; + static attribute_8229 = 8229; + static attribute_8230 = 8230; + static attribute_8231 = 8231; + static attribute_8232 = 8232; + static attribute_8233 = 8233; + static attribute_8234 = 8234; + static attribute_8235 = 8235; + static attribute_8236 = 8236; + static attribute_8237 = 8237; + static attribute_8238 = 8238; + static attribute_8239 = 8239; + static attribute_8240 = 8240; + static attribute_8241 = 8241; + static attribute_8242 = 8242; + static attribute_8243 = 8243; + static attribute_8244 = 8244; + static attribute_8245 = 8245; + static attribute_8246 = 8246; + static attribute_8247 = 8247; + static attribute_8248 = 8248; + static attribute_8249 = 8249; + static attribute_8250 = 8250; + static attribute_8251 = 8251; + static attribute_8252 = 8252; + static attribute_8253 = 8253; + static attribute_8254 = 8254; + static attribute_8255 = 8255; + static attribute_8256 = 8256; + static attribute_8257 = 8257; + static attribute_8258 = 8258; + static attribute_8259 = 8259; + static attribute_8260 = 8260; + static attribute_8261 = 8261; + static attribute_8262 = 8262; + static attribute_8263 = 8263; + static attribute_8264 = 8264; + static attribute_8265 = 8265; + static attribute_8266 = 8266; + static attribute_8267 = 8267; + static attribute_8268 = 8268; + static attribute_8269 = 8269; + static attribute_8270 = 8270; + static attribute_8271 = 8271; + static attribute_8272 = 8272; + static attribute_8273 = 8273; + static attribute_8274 = 8274; + static attribute_8275 = 8275; + static attribute_8276 = 8276; + static attribute_8277 = 8277; + static attribute_8278 = 8278; + static attribute_8279 = 8279; + static attribute_8280 = 8280; + static attribute_8281 = 8281; + static attribute_8282 = 8282; + static attribute_8283 = 8283; + static attribute_8284 = 8284; + static attribute_8285 = 8285; + static attribute_8286 = 8286; + static attribute_8287 = 8287; + static attribute_8288 = 8288; + static attribute_8289 = 8289; + static attribute_8290 = 8290; + static attribute_8291 = 8291; + static attribute_8292 = 8292; + static attribute_8293 = 8293; + static attribute_8294 = 8294; + static attribute_8295 = 8295; + static attribute_8296 = 8296; + static attribute_8297 = 8297; + static attribute_8298 = 8298; + static attribute_8299 = 8299; + static attribute_8300 = 8300; + static attribute_8301 = 8301; + static attribute_8302 = 8302; + static attribute_8303 = 8303; + static attribute_8304 = 8304; + static attribute_8305 = 8305; + static attribute_8306 = 8306; + static attribute_8307 = 8307; + static attribute_8308 = 8308; + static attribute_8309 = 8309; + static attribute_8310 = 8310; + static attribute_8311 = 8311; + static attribute_8312 = 8312; + static attribute_8313 = 8313; + static attribute_8314 = 8314; + static attribute_8315 = 8315; + static attribute_8316 = 8316; + static attribute_8317 = 8317; + static attribute_8318 = 8318; + static attribute_8319 = 8319; + static attribute_8320 = 8320; + static attribute_8321 = 8321; + static attribute_8322 = 8322; + static attribute_8323 = 8323; + static attribute_8324 = 8324; + static attribute_8325 = 8325; + static attribute_8326 = 8326; + static attribute_8327 = 8327; + static attribute_8328 = 8328; + static attribute_8329 = 8329; + static attribute_8330 = 8330; + static attribute_8331 = 8331; + static attribute_8332 = 8332; + static attribute_8333 = 8333; + static attribute_8334 = 8334; + static attribute_8335 = 8335; + static attribute_8336 = 8336; + static attribute_8337 = 8337; + static attribute_8338 = 8338; + static attribute_8339 = 8339; + static attribute_8340 = 8340; + static attribute_8341 = 8341; + static attribute_8342 = 8342; + static attribute_8343 = 8343; + static attribute_8344 = 8344; + static attribute_8345 = 8345; + static attribute_8346 = 8346; + static attribute_8347 = 8347; + static attribute_8348 = 8348; + static attribute_8349 = 8349; + static attribute_8350 = 8350; + static attribute_8351 = 8351; + static attribute_8352 = 8352; + static attribute_8353 = 8353; + static attribute_8354 = 8354; + static attribute_8355 = 8355; + static attribute_8356 = 8356; + static attribute_8357 = 8357; + static attribute_8358 = 8358; + static attribute_8359 = 8359; + static attribute_8360 = 8360; + static attribute_8361 = 8361; + static attribute_8362 = 8362; + static attribute_8363 = 8363; + static attribute_8364 = 8364; + static attribute_8365 = 8365; + static attribute_8366 = 8366; + static attribute_8367 = 8367; + static attribute_8368 = 8368; + static attribute_8369 = 8369; + static attribute_8370 = 8370; + static attribute_8371 = 8371; + static attribute_8372 = 8372; + static attribute_8373 = 8373; + static attribute_8374 = 8374; + static attribute_8375 = 8375; + static attribute_8376 = 8376; + static attribute_8377 = 8377; + static attribute_8378 = 8378; + static attribute_8379 = 8379; + static attribute_8380 = 8380; + static attribute_8381 = 8381; + static attribute_8382 = 8382; + static attribute_8383 = 8383; + static attribute_8384 = 8384; + static attribute_8385 = 8385; + static attribute_8386 = 8386; + static attribute_8387 = 8387; + static attribute_8388 = 8388; + static attribute_8389 = 8389; + static attribute_8390 = 8390; + static attribute_8391 = 8391; + static attribute_8392 = 8392; + static attribute_8393 = 8393; + static attribute_8394 = 8394; + static attribute_8395 = 8395; + static attribute_8396 = 8396; + static attribute_8397 = 8397; + static attribute_8398 = 8398; + static attribute_8399 = 8399; + static attribute_8400 = 8400; + static attribute_8401 = 8401; + static attribute_8402 = 8402; + static attribute_8403 = 8403; + static attribute_8404 = 8404; + static attribute_8405 = 8405; + static attribute_8406 = 8406; + static attribute_8407 = 8407; + static attribute_8408 = 8408; + static attribute_8409 = 8409; + static attribute_8410 = 8410; + static attribute_8411 = 8411; + static attribute_8412 = 8412; + static attribute_8413 = 8413; + static attribute_8414 = 8414; + static attribute_8415 = 8415; + static attribute_8416 = 8416; + static attribute_8417 = 8417; + static attribute_8418 = 8418; + static attribute_8419 = 8419; + static attribute_8420 = 8420; + static attribute_8421 = 8421; + static attribute_8422 = 8422; + static attribute_8423 = 8423; + static attribute_8424 = 8424; + static attribute_8425 = 8425; + static attribute_8426 = 8426; + static attribute_8427 = 8427; + static attribute_8428 = 8428; + static attribute_8429 = 8429; + static attribute_8430 = 8430; + static attribute_8431 = 8431; + static attribute_8432 = 8432; + static attribute_8433 = 8433; + static attribute_8434 = 8434; + static attribute_8435 = 8435; + static attribute_8436 = 8436; + static attribute_8437 = 8437; + static attribute_8438 = 8438; + static attribute_8439 = 8439; + static attribute_8440 = 8440; + static attribute_8441 = 8441; + static attribute_8442 = 8442; + static attribute_8443 = 8443; + static attribute_8444 = 8444; + static attribute_8445 = 8445; + static attribute_8446 = 8446; + static attribute_8447 = 8447; + static attribute_8448 = 8448; + static attribute_8449 = 8449; + static attribute_8450 = 8450; + static attribute_8451 = 8451; + static attribute_8452 = 8452; + static attribute_8453 = 8453; + static attribute_8454 = 8454; + static attribute_8455 = 8455; + static attribute_8456 = 8456; + static attribute_8457 = 8457; + static attribute_8458 = 8458; + static attribute_8459 = 8459; + static attribute_8460 = 8460; + static attribute_8461 = 8461; + static attribute_8462 = 8462; + static attribute_8463 = 8463; + static attribute_8464 = 8464; + static attribute_8465 = 8465; + static attribute_8466 = 8466; + static attribute_8467 = 8467; + static attribute_8468 = 8468; + static attribute_8469 = 8469; + static attribute_8470 = 8470; + static attribute_8471 = 8471; + static attribute_8472 = 8472; + static attribute_8473 = 8473; + static attribute_8474 = 8474; + static attribute_8475 = 8475; + static attribute_8476 = 8476; + static attribute_8477 = 8477; + static attribute_8478 = 8478; + static attribute_8479 = 8479; + static attribute_8480 = 8480; + static attribute_8481 = 8481; + static attribute_8482 = 8482; + static attribute_8483 = 8483; + static attribute_8484 = 8484; + static attribute_8485 = 8485; + static attribute_8486 = 8486; + static attribute_8487 = 8487; + static attribute_8488 = 8488; + static attribute_8489 = 8489; + static attribute_8490 = 8490; + static attribute_8491 = 8491; + static attribute_8492 = 8492; + static attribute_8493 = 8493; + static attribute_8494 = 8494; + static attribute_8495 = 8495; + static attribute_8496 = 8496; + static attribute_8497 = 8497; + static attribute_8498 = 8498; + static attribute_8499 = 8499; + static attribute_8500 = 8500; + static attribute_8501 = 8501; + static attribute_8502 = 8502; + static attribute_8503 = 8503; + static attribute_8504 = 8504; + static attribute_8505 = 8505; + static attribute_8506 = 8506; + static attribute_8507 = 8507; + static attribute_8508 = 8508; + static attribute_8509 = 8509; + static attribute_8510 = 8510; + static attribute_8511 = 8511; + static attribute_8512 = 8512; + static attribute_8513 = 8513; + static attribute_8514 = 8514; + static attribute_8515 = 8515; + static attribute_8516 = 8516; + static attribute_8517 = 8517; + static attribute_8518 = 8518; + static attribute_8519 = 8519; + static attribute_8520 = 8520; + static attribute_8521 = 8521; + static attribute_8522 = 8522; + static attribute_8523 = 8523; + static attribute_8524 = 8524; + static attribute_8525 = 8525; + static attribute_8526 = 8526; + static attribute_8527 = 8527; + static attribute_8528 = 8528; + static attribute_8529 = 8529; + static attribute_8530 = 8530; + static attribute_8531 = 8531; + static attribute_8532 = 8532; + static attribute_8533 = 8533; + static attribute_8534 = 8534; + static attribute_8535 = 8535; + static attribute_8536 = 8536; + static attribute_8537 = 8537; + static attribute_8538 = 8538; + static attribute_8539 = 8539; + static attribute_8540 = 8540; + static attribute_8541 = 8541; + static attribute_8542 = 8542; + static attribute_8543 = 8543; + static attribute_8544 = 8544; + static attribute_8545 = 8545; + static attribute_8546 = 8546; + static attribute_8547 = 8547; + static attribute_8548 = 8548; + static attribute_8549 = 8549; + static attribute_8550 = 8550; + static attribute_8551 = 8551; + static attribute_8552 = 8552; + static attribute_8553 = 8553; + static attribute_8554 = 8554; + static attribute_8555 = 8555; + static attribute_8556 = 8556; + static attribute_8557 = 8557; + static attribute_8558 = 8558; + static attribute_8559 = 8559; + static attribute_8560 = 8560; + static attribute_8561 = 8561; + static attribute_8562 = 8562; + static attribute_8563 = 8563; + static attribute_8564 = 8564; + static attribute_8565 = 8565; + static attribute_8566 = 8566; + static attribute_8567 = 8567; + static attribute_8568 = 8568; + static attribute_8569 = 8569; + static attribute_8570 = 8570; + static attribute_8571 = 8571; + static attribute_8572 = 8572; + static attribute_8573 = 8573; + static attribute_8574 = 8574; + static attribute_8575 = 8575; + static attribute_8576 = 8576; + static attribute_8577 = 8577; + static attribute_8578 = 8578; + static attribute_8579 = 8579; + static attribute_8580 = 8580; + static attribute_8581 = 8581; + static attribute_8582 = 8582; + static attribute_8583 = 8583; + static attribute_8584 = 8584; + static attribute_8585 = 8585; + static attribute_8586 = 8586; + static attribute_8587 = 8587; + static attribute_8588 = 8588; + static attribute_8589 = 8589; + static attribute_8590 = 8590; + static attribute_8591 = 8591; + static attribute_8592 = 8592; + static attribute_8593 = 8593; + static attribute_8594 = 8594; + static attribute_8595 = 8595; + static attribute_8596 = 8596; + static attribute_8597 = 8597; + static attribute_8598 = 8598; + static attribute_8599 = 8599; + static attribute_8600 = 8600; + static attribute_8601 = 8601; + static attribute_8602 = 8602; + static attribute_8603 = 8603; + static attribute_8604 = 8604; + static attribute_8605 = 8605; + static attribute_8606 = 8606; + static attribute_8607 = 8607; + static attribute_8608 = 8608; + static attribute_8609 = 8609; + static attribute_8610 = 8610; + static attribute_8611 = 8611; + static attribute_8612 = 8612; + static attribute_8613 = 8613; + static attribute_8614 = 8614; + static attribute_8615 = 8615; + static attribute_8616 = 8616; + static attribute_8617 = 8617; + static attribute_8618 = 8618; + static attribute_8619 = 8619; + static attribute_8620 = 8620; + static attribute_8621 = 8621; + static attribute_8622 = 8622; + static attribute_8623 = 8623; + static attribute_8624 = 8624; + static attribute_8625 = 8625; + static attribute_8626 = 8626; + static attribute_8627 = 8627; + static attribute_8628 = 8628; + static attribute_8629 = 8629; + static attribute_8630 = 8630; + static attribute_8631 = 8631; + static attribute_8632 = 8632; + static attribute_8633 = 8633; + static attribute_8634 = 8634; + static attribute_8635 = 8635; + static attribute_8636 = 8636; + static attribute_8637 = 8637; + static attribute_8638 = 8638; + static attribute_8639 = 8639; + static attribute_8640 = 8640; + static attribute_8641 = 8641; + static attribute_8642 = 8642; + static attribute_8643 = 8643; + static attribute_8644 = 8644; + static attribute_8645 = 8645; + static attribute_8646 = 8646; + static attribute_8647 = 8647; + static attribute_8648 = 8648; + static attribute_8649 = 8649; + static attribute_8650 = 8650; + static attribute_8651 = 8651; + static attribute_8652 = 8652; + static attribute_8653 = 8653; + static attribute_8654 = 8654; + static attribute_8655 = 8655; + static attribute_8656 = 8656; + static attribute_8657 = 8657; + static attribute_8658 = 8658; + static attribute_8659 = 8659; + static attribute_8660 = 8660; + static attribute_8661 = 8661; + static attribute_8662 = 8662; + static attribute_8663 = 8663; + static attribute_8664 = 8664; + static attribute_8665 = 8665; + static attribute_8666 = 8666; + static attribute_8667 = 8667; + static attribute_8668 = 8668; + static attribute_8669 = 8669; + static attribute_8670 = 8670; + static attribute_8671 = 8671; + static attribute_8672 = 8672; + static attribute_8673 = 8673; + static attribute_8674 = 8674; + static attribute_8675 = 8675; + static attribute_8676 = 8676; + static attribute_8677 = 8677; + static attribute_8678 = 8678; + static attribute_8679 = 8679; + static attribute_8680 = 8680; + static attribute_8681 = 8681; + static attribute_8682 = 8682; + static attribute_8683 = 8683; + static attribute_8684 = 8684; + static attribute_8685 = 8685; + static attribute_8686 = 8686; + static attribute_8687 = 8687; + static attribute_8688 = 8688; + static attribute_8689 = 8689; + static attribute_8690 = 8690; + static attribute_8691 = 8691; + static attribute_8692 = 8692; + static attribute_8693 = 8693; + static attribute_8694 = 8694; + static attribute_8695 = 8695; + static attribute_8696 = 8696; + static attribute_8697 = 8697; + static attribute_8698 = 8698; + static attribute_8699 = 8699; + static attribute_8700 = 8700; + static attribute_8701 = 8701; + static attribute_8702 = 8702; + static attribute_8703 = 8703; + static attribute_8704 = 8704; + static attribute_8705 = 8705; + static attribute_8706 = 8706; + static attribute_8707 = 8707; + static attribute_8708 = 8708; + static attribute_8709 = 8709; + static attribute_8710 = 8710; + static attribute_8711 = 8711; + static attribute_8712 = 8712; + static attribute_8713 = 8713; + static attribute_8714 = 8714; + static attribute_8715 = 8715; + static attribute_8716 = 8716; + static attribute_8717 = 8717; + static attribute_8718 = 8718; + static attribute_8719 = 8719; + static attribute_8720 = 8720; + static attribute_8721 = 8721; + static attribute_8722 = 8722; + static attribute_8723 = 8723; + static attribute_8724 = 8724; + static attribute_8725 = 8725; + static attribute_8726 = 8726; + static attribute_8727 = 8727; + static attribute_8728 = 8728; + static attribute_8729 = 8729; + static attribute_8730 = 8730; + static attribute_8731 = 8731; + static attribute_8732 = 8732; + static attribute_8733 = 8733; + static attribute_8734 = 8734; + static attribute_8735 = 8735; + static attribute_8736 = 8736; + static attribute_8737 = 8737; + static attribute_8738 = 8738; + static attribute_8739 = 8739; + static attribute_8740 = 8740; + static attribute_8741 = 8741; + static attribute_8742 = 8742; + static attribute_8743 = 8743; + static attribute_8744 = 8744; + static attribute_8745 = 8745; + static attribute_8746 = 8746; + static attribute_8747 = 8747; + static attribute_8748 = 8748; + static attribute_8749 = 8749; + static attribute_8750 = 8750; + static attribute_8751 = 8751; + static attribute_8752 = 8752; + static attribute_8753 = 8753; + static attribute_8754 = 8754; + static attribute_8755 = 8755; + static attribute_8756 = 8756; + static attribute_8757 = 8757; + static attribute_8758 = 8758; + static attribute_8759 = 8759; + static attribute_8760 = 8760; + static attribute_8761 = 8761; + static attribute_8762 = 8762; + static attribute_8763 = 8763; + static attribute_8764 = 8764; + static attribute_8765 = 8765; + static attribute_8766 = 8766; + static attribute_8767 = 8767; + static attribute_8768 = 8768; + static attribute_8769 = 8769; + static attribute_8770 = 8770; + static attribute_8771 = 8771; + static attribute_8772 = 8772; + static attribute_8773 = 8773; + static attribute_8774 = 8774; + static attribute_8775 = 8775; + static attribute_8776 = 8776; + static attribute_8777 = 8777; + static attribute_8778 = 8778; + static attribute_8779 = 8779; + static attribute_8780 = 8780; + static attribute_8781 = 8781; + static attribute_8782 = 8782; + static attribute_8783 = 8783; + static attribute_8784 = 8784; + static attribute_8785 = 8785; + static attribute_8786 = 8786; + static attribute_8787 = 8787; + static attribute_8788 = 8788; + static attribute_8789 = 8789; + static attribute_8790 = 8790; + static attribute_8791 = 8791; + static attribute_8792 = 8792; + static attribute_8793 = 8793; + static attribute_8794 = 8794; + static attribute_8795 = 8795; + static attribute_8796 = 8796; + static attribute_8797 = 8797; + static attribute_8798 = 8798; + static attribute_8799 = 8799; + static attribute_8800 = 8800; + static attribute_8801 = 8801; + static attribute_8802 = 8802; + static attribute_8803 = 8803; + static attribute_8804 = 8804; + static attribute_8805 = 8805; + static attribute_8806 = 8806; + static attribute_8807 = 8807; + static attribute_8808 = 8808; + static attribute_8809 = 8809; + static attribute_8810 = 8810; + static attribute_8811 = 8811; + static attribute_8812 = 8812; + static attribute_8813 = 8813; + static attribute_8814 = 8814; + static attribute_8815 = 8815; + static attribute_8816 = 8816; + static attribute_8817 = 8817; + static attribute_8818 = 8818; + static attribute_8819 = 8819; + static attribute_8820 = 8820; + static attribute_8821 = 8821; + static attribute_8822 = 8822; + static attribute_8823 = 8823; + static attribute_8824 = 8824; + static attribute_8825 = 8825; + static attribute_8826 = 8826; + static attribute_8827 = 8827; + static attribute_8828 = 8828; + static attribute_8829 = 8829; + static attribute_8830 = 8830; + static attribute_8831 = 8831; + static attribute_8832 = 8832; + static attribute_8833 = 8833; + static attribute_8834 = 8834; + static attribute_8835 = 8835; + static attribute_8836 = 8836; + static attribute_8837 = 8837; + static attribute_8838 = 8838; + static attribute_8839 = 8839; + static attribute_8840 = 8840; + static attribute_8841 = 8841; + static attribute_8842 = 8842; + static attribute_8843 = 8843; + static attribute_8844 = 8844; + static attribute_8845 = 8845; + static attribute_8846 = 8846; + static attribute_8847 = 8847; + static attribute_8848 = 8848; + static attribute_8849 = 8849; + static attribute_8850 = 8850; + static attribute_8851 = 8851; + static attribute_8852 = 8852; + static attribute_8853 = 8853; + static attribute_8854 = 8854; + static attribute_8855 = 8855; + static attribute_8856 = 8856; + static attribute_8857 = 8857; + static attribute_8858 = 8858; + static attribute_8859 = 8859; + static attribute_8860 = 8860; + static attribute_8861 = 8861; + static attribute_8862 = 8862; + static attribute_8863 = 8863; + static attribute_8864 = 8864; + static attribute_8865 = 8865; + static attribute_8866 = 8866; + static attribute_8867 = 8867; + static attribute_8868 = 8868; + static attribute_8869 = 8869; + static attribute_8870 = 8870; + static attribute_8871 = 8871; + static attribute_8872 = 8872; + static attribute_8873 = 8873; + static attribute_8874 = 8874; + static attribute_8875 = 8875; + static attribute_8876 = 8876; + static attribute_8877 = 8877; + static attribute_8878 = 8878; + static attribute_8879 = 8879; + static attribute_8880 = 8880; + static attribute_8881 = 8881; + static attribute_8882 = 8882; + static attribute_8883 = 8883; + static attribute_8884 = 8884; + static attribute_8885 = 8885; + static attribute_8886 = 8886; + static attribute_8887 = 8887; + static attribute_8888 = 8888; + static attribute_8889 = 8889; + static attribute_8890 = 8890; + static attribute_8891 = 8891; + static attribute_8892 = 8892; + static attribute_8893 = 8893; + static attribute_8894 = 8894; + static attribute_8895 = 8895; + static attribute_8896 = 8896; + static attribute_8897 = 8897; + static attribute_8898 = 8898; + static attribute_8899 = 8899; + static attribute_8900 = 8900; + static attribute_8901 = 8901; + static attribute_8902 = 8902; + static attribute_8903 = 8903; + static attribute_8904 = 8904; + static attribute_8905 = 8905; + static attribute_8906 = 8906; + static attribute_8907 = 8907; + static attribute_8908 = 8908; + static attribute_8909 = 8909; + static attribute_8910 = 8910; + static attribute_8911 = 8911; + static attribute_8912 = 8912; + static attribute_8913 = 8913; + static attribute_8914 = 8914; + static attribute_8915 = 8915; + static attribute_8916 = 8916; + static attribute_8917 = 8917; + static attribute_8918 = 8918; + static attribute_8919 = 8919; + static attribute_8920 = 8920; + static attribute_8921 = 8921; + static attribute_8922 = 8922; + static attribute_8923 = 8923; + static attribute_8924 = 8924; + static attribute_8925 = 8925; + static attribute_8926 = 8926; + static attribute_8927 = 8927; + static attribute_8928 = 8928; + static attribute_8929 = 8929; + static attribute_8930 = 8930; + static attribute_8931 = 8931; + static attribute_8932 = 8932; + static attribute_8933 = 8933; + static attribute_8934 = 8934; + static attribute_8935 = 8935; + static attribute_8936 = 8936; + static attribute_8937 = 8937; + static attribute_8938 = 8938; + static attribute_8939 = 8939; + static attribute_8940 = 8940; + static attribute_8941 = 8941; + static attribute_8942 = 8942; + static attribute_8943 = 8943; + static attribute_8944 = 8944; + static attribute_8945 = 8945; + static attribute_8946 = 8946; + static attribute_8947 = 8947; + static attribute_8948 = 8948; + static attribute_8949 = 8949; + static attribute_8950 = 8950; + static attribute_8951 = 8951; + static attribute_8952 = 8952; + static attribute_8953 = 8953; + static attribute_8954 = 8954; + static attribute_8955 = 8955; + static attribute_8956 = 8956; + static attribute_8957 = 8957; + static attribute_8958 = 8958; + static attribute_8959 = 8959; + static attribute_8960 = 8960; + static attribute_8961 = 8961; + static attribute_8962 = 8962; + static attribute_8963 = 8963; + static attribute_8964 = 8964; + static attribute_8965 = 8965; + static attribute_8966 = 8966; + static attribute_8967 = 8967; + static attribute_8968 = 8968; + static attribute_8969 = 8969; + static attribute_8970 = 8970; + static attribute_8971 = 8971; + static attribute_8972 = 8972; + static attribute_8973 = 8973; + static attribute_8974 = 8974; + static attribute_8975 = 8975; + static attribute_8976 = 8976; + static attribute_8977 = 8977; + static attribute_8978 = 8978; + static attribute_8979 = 8979; + static attribute_8980 = 8980; + static attribute_8981 = 8981; + static attribute_8982 = 8982; + static attribute_8983 = 8983; + static attribute_8984 = 8984; + static attribute_8985 = 8985; + static attribute_8986 = 8986; + static attribute_8987 = 8987; + static attribute_8988 = 8988; + static attribute_8989 = 8989; + static attribute_8990 = 8990; + static attribute_8991 = 8991; + static attribute_8992 = 8992; + static attribute_8993 = 8993; + static attribute_8994 = 8994; + static attribute_8995 = 8995; + static attribute_8996 = 8996; + static attribute_8997 = 8997; + static attribute_8998 = 8998; + static attribute_8999 = 8999; + static attribute_9000 = 9000; + static attribute_9001 = 9001; + static attribute_9002 = 9002; + static attribute_9003 = 9003; + static attribute_9004 = 9004; + static attribute_9005 = 9005; + static attribute_9006 = 9006; + static attribute_9007 = 9007; + static attribute_9008 = 9008; + static attribute_9009 = 9009; + static attribute_9010 = 9010; + static attribute_9011 = 9011; + static attribute_9012 = 9012; + static attribute_9013 = 9013; + static attribute_9014 = 9014; + static attribute_9015 = 9015; + static attribute_9016 = 9016; + static attribute_9017 = 9017; + static attribute_9018 = 9018; + static attribute_9019 = 9019; + static attribute_9020 = 9020; + static attribute_9021 = 9021; + static attribute_9022 = 9022; + static attribute_9023 = 9023; + static attribute_9024 = 9024; + static attribute_9025 = 9025; + static attribute_9026 = 9026; + static attribute_9027 = 9027; + static attribute_9028 = 9028; + static attribute_9029 = 9029; + static attribute_9030 = 9030; + static attribute_9031 = 9031; + static attribute_9032 = 9032; + static attribute_9033 = 9033; + static attribute_9034 = 9034; + static attribute_9035 = 9035; + static attribute_9036 = 9036; + static attribute_9037 = 9037; + static attribute_9038 = 9038; + static attribute_9039 = 9039; + static attribute_9040 = 9040; + static attribute_9041 = 9041; + static attribute_9042 = 9042; + static attribute_9043 = 9043; + static attribute_9044 = 9044; + static attribute_9045 = 9045; + static attribute_9046 = 9046; + static attribute_9047 = 9047; + static attribute_9048 = 9048; + static attribute_9049 = 9049; + static attribute_9050 = 9050; + static attribute_9051 = 9051; + static attribute_9052 = 9052; + static attribute_9053 = 9053; + static attribute_9054 = 9054; + static attribute_9055 = 9055; + static attribute_9056 = 9056; + static attribute_9057 = 9057; + static attribute_9058 = 9058; + static attribute_9059 = 9059; + static attribute_9060 = 9060; + static attribute_9061 = 9061; + static attribute_9062 = 9062; + static attribute_9063 = 9063; + static attribute_9064 = 9064; + static attribute_9065 = 9065; + static attribute_9066 = 9066; + static attribute_9067 = 9067; + static attribute_9068 = 9068; + static attribute_9069 = 9069; + static attribute_9070 = 9070; + static attribute_9071 = 9071; + static attribute_9072 = 9072; + static attribute_9073 = 9073; + static attribute_9074 = 9074; + static attribute_9075 = 9075; + static attribute_9076 = 9076; + static attribute_9077 = 9077; + static attribute_9078 = 9078; + static attribute_9079 = 9079; + static attribute_9080 = 9080; + static attribute_9081 = 9081; + static attribute_9082 = 9082; + static attribute_9083 = 9083; + static attribute_9084 = 9084; + static attribute_9085 = 9085; + static attribute_9086 = 9086; + static attribute_9087 = 9087; + static attribute_9088 = 9088; + static attribute_9089 = 9089; + static attribute_9090 = 9090; + static attribute_9091 = 9091; + static attribute_9092 = 9092; + static attribute_9093 = 9093; + static attribute_9094 = 9094; + static attribute_9095 = 9095; + static attribute_9096 = 9096; + static attribute_9097 = 9097; + static attribute_9098 = 9098; + static attribute_9099 = 9099; + static attribute_9100 = 9100; + static attribute_9101 = 9101; + static attribute_9102 = 9102; + static attribute_9103 = 9103; + static attribute_9104 = 9104; + static attribute_9105 = 9105; + static attribute_9106 = 9106; + static attribute_9107 = 9107; + static attribute_9108 = 9108; + static attribute_9109 = 9109; + static attribute_9110 = 9110; + static attribute_9111 = 9111; + static attribute_9112 = 9112; + static attribute_9113 = 9113; + static attribute_9114 = 9114; + static attribute_9115 = 9115; + static attribute_9116 = 9116; + static attribute_9117 = 9117; + static attribute_9118 = 9118; + static attribute_9119 = 9119; + static attribute_9120 = 9120; + static attribute_9121 = 9121; + static attribute_9122 = 9122; + static attribute_9123 = 9123; + static attribute_9124 = 9124; + static attribute_9125 = 9125; + static attribute_9126 = 9126; + static attribute_9127 = 9127; + static attribute_9128 = 9128; + static attribute_9129 = 9129; + static attribute_9130 = 9130; + static attribute_9131 = 9131; + static attribute_9132 = 9132; + static attribute_9133 = 9133; + static attribute_9134 = 9134; + static attribute_9135 = 9135; + static attribute_9136 = 9136; + static attribute_9137 = 9137; + static attribute_9138 = 9138; + static attribute_9139 = 9139; + static attribute_9140 = 9140; + static attribute_9141 = 9141; + static attribute_9142 = 9142; + static attribute_9143 = 9143; + static attribute_9144 = 9144; + static attribute_9145 = 9145; + static attribute_9146 = 9146; + static attribute_9147 = 9147; + static attribute_9148 = 9148; + static attribute_9149 = 9149; + static attribute_9150 = 9150; + static attribute_9151 = 9151; + static attribute_9152 = 9152; + static attribute_9153 = 9153; + static attribute_9154 = 9154; + static attribute_9155 = 9155; + static attribute_9156 = 9156; + static attribute_9157 = 9157; + static attribute_9158 = 9158; + static attribute_9159 = 9159; + static attribute_9160 = 9160; + static attribute_9161 = 9161; + static attribute_9162 = 9162; + static attribute_9163 = 9163; + static attribute_9164 = 9164; + static attribute_9165 = 9165; + static attribute_9166 = 9166; + static attribute_9167 = 9167; + static attribute_9168 = 9168; + static attribute_9169 = 9169; + static attribute_9170 = 9170; + static attribute_9171 = 9171; + static attribute_9172 = 9172; + static attribute_9173 = 9173; + static attribute_9174 = 9174; + static attribute_9175 = 9175; + static attribute_9176 = 9176; + static attribute_9177 = 9177; + static attribute_9178 = 9178; + static attribute_9179 = 9179; + static attribute_9180 = 9180; + static attribute_9181 = 9181; + static attribute_9182 = 9182; + static attribute_9183 = 9183; + static attribute_9184 = 9184; + static attribute_9185 = 9185; + static attribute_9186 = 9186; + static attribute_9187 = 9187; + static attribute_9188 = 9188; + static attribute_9189 = 9189; + static attribute_9190 = 9190; + static attribute_9191 = 9191; + static attribute_9192 = 9192; + static attribute_9193 = 9193; + static attribute_9194 = 9194; + static attribute_9195 = 9195; + static attribute_9196 = 9196; + static attribute_9197 = 9197; + static attribute_9198 = 9198; + static attribute_9199 = 9199; + static attribute_9200 = 9200; + static attribute_9201 = 9201; + static attribute_9202 = 9202; + static attribute_9203 = 9203; + static attribute_9204 = 9204; + static attribute_9205 = 9205; + static attribute_9206 = 9206; + static attribute_9207 = 9207; + static attribute_9208 = 9208; + static attribute_9209 = 9209; + static attribute_9210 = 9210; + static attribute_9211 = 9211; + static attribute_9212 = 9212; + static attribute_9213 = 9213; + static attribute_9214 = 9214; + static attribute_9215 = 9215; + static attribute_9216 = 9216; + static attribute_9217 = 9217; + static attribute_9218 = 9218; + static attribute_9219 = 9219; + static attribute_9220 = 9220; + static attribute_9221 = 9221; + static attribute_9222 = 9222; + static attribute_9223 = 9223; + static attribute_9224 = 9224; + static attribute_9225 = 9225; + static attribute_9226 = 9226; + static attribute_9227 = 9227; + static attribute_9228 = 9228; + static attribute_9229 = 9229; + static attribute_9230 = 9230; + static attribute_9231 = 9231; + static attribute_9232 = 9232; + static attribute_9233 = 9233; + static attribute_9234 = 9234; + static attribute_9235 = 9235; + static attribute_9236 = 9236; + static attribute_9237 = 9237; + static attribute_9238 = 9238; + static attribute_9239 = 9239; + static attribute_9240 = 9240; + static attribute_9241 = 9241; + static attribute_9242 = 9242; + static attribute_9243 = 9243; + static attribute_9244 = 9244; + static attribute_9245 = 9245; + static attribute_9246 = 9246; + static attribute_9247 = 9247; + static attribute_9248 = 9248; + static attribute_9249 = 9249; + static attribute_9250 = 9250; + static attribute_9251 = 9251; + static attribute_9252 = 9252; + static attribute_9253 = 9253; + static attribute_9254 = 9254; + static attribute_9255 = 9255; + static attribute_9256 = 9256; + static attribute_9257 = 9257; + static attribute_9258 = 9258; + static attribute_9259 = 9259; + static attribute_9260 = 9260; + static attribute_9261 = 9261; + static attribute_9262 = 9262; + static attribute_9263 = 9263; + static attribute_9264 = 9264; + static attribute_9265 = 9265; + static attribute_9266 = 9266; + static attribute_9267 = 9267; + static attribute_9268 = 9268; + static attribute_9269 = 9269; + static attribute_9270 = 9270; + static attribute_9271 = 9271; + static attribute_9272 = 9272; + static attribute_9273 = 9273; + static attribute_9274 = 9274; + static attribute_9275 = 9275; + static attribute_9276 = 9276; + static attribute_9277 = 9277; + static attribute_9278 = 9278; + static attribute_9279 = 9279; + static attribute_9280 = 9280; + static attribute_9281 = 9281; + static attribute_9282 = 9282; + static attribute_9283 = 9283; + static attribute_9284 = 9284; + static attribute_9285 = 9285; + static attribute_9286 = 9286; + static attribute_9287 = 9287; + static attribute_9288 = 9288; + static attribute_9289 = 9289; + static attribute_9290 = 9290; + static attribute_9291 = 9291; + static attribute_9292 = 9292; + static attribute_9293 = 9293; + static attribute_9294 = 9294; + static attribute_9295 = 9295; + static attribute_9296 = 9296; + static attribute_9297 = 9297; + static attribute_9298 = 9298; + static attribute_9299 = 9299; + static attribute_9300 = 9300; + static attribute_9301 = 9301; + static attribute_9302 = 9302; + static attribute_9303 = 9303; + static attribute_9304 = 9304; + static attribute_9305 = 9305; + static attribute_9306 = 9306; + static attribute_9307 = 9307; + static attribute_9308 = 9308; + static attribute_9309 = 9309; + static attribute_9310 = 9310; + static attribute_9311 = 9311; + static attribute_9312 = 9312; + static attribute_9313 = 9313; + static attribute_9314 = 9314; + static attribute_9315 = 9315; + static attribute_9316 = 9316; + static attribute_9317 = 9317; + static attribute_9318 = 9318; + static attribute_9319 = 9319; + static attribute_9320 = 9320; + static attribute_9321 = 9321; + static attribute_9322 = 9322; + static attribute_9323 = 9323; + static attribute_9324 = 9324; + static attribute_9325 = 9325; + static attribute_9326 = 9326; + static attribute_9327 = 9327; + static attribute_9328 = 9328; + static attribute_9329 = 9329; + static attribute_9330 = 9330; + static attribute_9331 = 9331; + static attribute_9332 = 9332; + static attribute_9333 = 9333; + static attribute_9334 = 9334; + static attribute_9335 = 9335; + static attribute_9336 = 9336; + static attribute_9337 = 9337; + static attribute_9338 = 9338; + static attribute_9339 = 9339; + static attribute_9340 = 9340; + static attribute_9341 = 9341; + static attribute_9342 = 9342; + static attribute_9343 = 9343; + static attribute_9344 = 9344; + static attribute_9345 = 9345; + static attribute_9346 = 9346; + static attribute_9347 = 9347; + static attribute_9348 = 9348; + static attribute_9349 = 9349; + static attribute_9350 = 9350; + static attribute_9351 = 9351; + static attribute_9352 = 9352; + static attribute_9353 = 9353; + static attribute_9354 = 9354; + static attribute_9355 = 9355; + static attribute_9356 = 9356; + static attribute_9357 = 9357; + static attribute_9358 = 9358; + static attribute_9359 = 9359; + static attribute_9360 = 9360; + static attribute_9361 = 9361; + static attribute_9362 = 9362; + static attribute_9363 = 9363; + static attribute_9364 = 9364; + static attribute_9365 = 9365; + static attribute_9366 = 9366; + static attribute_9367 = 9367; + static attribute_9368 = 9368; + static attribute_9369 = 9369; + static attribute_9370 = 9370; + static attribute_9371 = 9371; + static attribute_9372 = 9372; + static attribute_9373 = 9373; + static attribute_9374 = 9374; + static attribute_9375 = 9375; + static attribute_9376 = 9376; + static attribute_9377 = 9377; + static attribute_9378 = 9378; + static attribute_9379 = 9379; + static attribute_9380 = 9380; + static attribute_9381 = 9381; + static attribute_9382 = 9382; + static attribute_9383 = 9383; + static attribute_9384 = 9384; + static attribute_9385 = 9385; + static attribute_9386 = 9386; + static attribute_9387 = 9387; + static attribute_9388 = 9388; + static attribute_9389 = 9389; + static attribute_9390 = 9390; + static attribute_9391 = 9391; + static attribute_9392 = 9392; + static attribute_9393 = 9393; + static attribute_9394 = 9394; + static attribute_9395 = 9395; + static attribute_9396 = 9396; + static attribute_9397 = 9397; + static attribute_9398 = 9398; + static attribute_9399 = 9399; + static attribute_9400 = 9400; + static attribute_9401 = 9401; + static attribute_9402 = 9402; + static attribute_9403 = 9403; + static attribute_9404 = 9404; + static attribute_9405 = 9405; + static attribute_9406 = 9406; + static attribute_9407 = 9407; + static attribute_9408 = 9408; + static attribute_9409 = 9409; + static attribute_9410 = 9410; + static attribute_9411 = 9411; + static attribute_9412 = 9412; + static attribute_9413 = 9413; + static attribute_9414 = 9414; + static attribute_9415 = 9415; + static attribute_9416 = 9416; + static attribute_9417 = 9417; + static attribute_9418 = 9418; + static attribute_9419 = 9419; + static attribute_9420 = 9420; + static attribute_9421 = 9421; + static attribute_9422 = 9422; + static attribute_9423 = 9423; + static attribute_9424 = 9424; + static attribute_9425 = 9425; + static attribute_9426 = 9426; + static attribute_9427 = 9427; + static attribute_9428 = 9428; + static attribute_9429 = 9429; + static attribute_9430 = 9430; + static attribute_9431 = 9431; + static attribute_9432 = 9432; + static attribute_9433 = 9433; + static attribute_9434 = 9434; + static attribute_9435 = 9435; + static attribute_9436 = 9436; + static attribute_9437 = 9437; + static attribute_9438 = 9438; + static attribute_9439 = 9439; + static attribute_9440 = 9440; + static attribute_9441 = 9441; + static attribute_9442 = 9442; + static attribute_9443 = 9443; + static attribute_9444 = 9444; + static attribute_9445 = 9445; + static attribute_9446 = 9446; + static attribute_9447 = 9447; + static attribute_9448 = 9448; + static attribute_9449 = 9449; + static attribute_9450 = 9450; + static attribute_9451 = 9451; + static attribute_9452 = 9452; + static attribute_9453 = 9453; + static attribute_9454 = 9454; + static attribute_9455 = 9455; + static attribute_9456 = 9456; + static attribute_9457 = 9457; + static attribute_9458 = 9458; + static attribute_9459 = 9459; + static attribute_9460 = 9460; + static attribute_9461 = 9461; + static attribute_9462 = 9462; + static attribute_9463 = 9463; + static attribute_9464 = 9464; + static attribute_9465 = 9465; + static attribute_9466 = 9466; + static attribute_9467 = 9467; + static attribute_9468 = 9468; + static attribute_9469 = 9469; + static attribute_9470 = 9470; + static attribute_9471 = 9471; + static attribute_9472 = 9472; + static attribute_9473 = 9473; + static attribute_9474 = 9474; + static attribute_9475 = 9475; + static attribute_9476 = 9476; + static attribute_9477 = 9477; + static attribute_9478 = 9478; + static attribute_9479 = 9479; + static attribute_9480 = 9480; + static attribute_9481 = 9481; + static attribute_9482 = 9482; + static attribute_9483 = 9483; + static attribute_9484 = 9484; + static attribute_9485 = 9485; + static attribute_9486 = 9486; + static attribute_9487 = 9487; + static attribute_9488 = 9488; + static attribute_9489 = 9489; + static attribute_9490 = 9490; + static attribute_9491 = 9491; + static attribute_9492 = 9492; + static attribute_9493 = 9493; + static attribute_9494 = 9494; + static attribute_9495 = 9495; + static attribute_9496 = 9496; + static attribute_9497 = 9497; + static attribute_9498 = 9498; + static attribute_9499 = 9499; + static attribute_9500 = 9500; + static attribute_9501 = 9501; + static attribute_9502 = 9502; + static attribute_9503 = 9503; + static attribute_9504 = 9504; + static attribute_9505 = 9505; + static attribute_9506 = 9506; + static attribute_9507 = 9507; + static attribute_9508 = 9508; + static attribute_9509 = 9509; + static attribute_9510 = 9510; + static attribute_9511 = 9511; + static attribute_9512 = 9512; + static attribute_9513 = 9513; + static attribute_9514 = 9514; + static attribute_9515 = 9515; + static attribute_9516 = 9516; + static attribute_9517 = 9517; + static attribute_9518 = 9518; + static attribute_9519 = 9519; + static attribute_9520 = 9520; + static attribute_9521 = 9521; + static attribute_9522 = 9522; + static attribute_9523 = 9523; + static attribute_9524 = 9524; + static attribute_9525 = 9525; + static attribute_9526 = 9526; + static attribute_9527 = 9527; + static attribute_9528 = 9528; + static attribute_9529 = 9529; + static attribute_9530 = 9530; + static attribute_9531 = 9531; + static attribute_9532 = 9532; + static attribute_9533 = 9533; + static attribute_9534 = 9534; + static attribute_9535 = 9535; + static attribute_9536 = 9536; + static attribute_9537 = 9537; + static attribute_9538 = 9538; + static attribute_9539 = 9539; + static attribute_9540 = 9540; + static attribute_9541 = 9541; + static attribute_9542 = 9542; + static attribute_9543 = 9543; + static attribute_9544 = 9544; + static attribute_9545 = 9545; + static attribute_9546 = 9546; + static attribute_9547 = 9547; + static attribute_9548 = 9548; + static attribute_9549 = 9549; + static attribute_9550 = 9550; + static attribute_9551 = 9551; + static attribute_9552 = 9552; + static attribute_9553 = 9553; + static attribute_9554 = 9554; + static attribute_9555 = 9555; + static attribute_9556 = 9556; + static attribute_9557 = 9557; + static attribute_9558 = 9558; + static attribute_9559 = 9559; + static attribute_9560 = 9560; + static attribute_9561 = 9561; + static attribute_9562 = 9562; + static attribute_9563 = 9563; + static attribute_9564 = 9564; + static attribute_9565 = 9565; + static attribute_9566 = 9566; + static attribute_9567 = 9567; + static attribute_9568 = 9568; + static attribute_9569 = 9569; + static attribute_9570 = 9570; + static attribute_9571 = 9571; + static attribute_9572 = 9572; + static attribute_9573 = 9573; + static attribute_9574 = 9574; + static attribute_9575 = 9575; + static attribute_9576 = 9576; + static attribute_9577 = 9577; + static attribute_9578 = 9578; + static attribute_9579 = 9579; + static attribute_9580 = 9580; + static attribute_9581 = 9581; + static attribute_9582 = 9582; + static attribute_9583 = 9583; + static attribute_9584 = 9584; + static attribute_9585 = 9585; + static attribute_9586 = 9586; + static attribute_9587 = 9587; + static attribute_9588 = 9588; + static attribute_9589 = 9589; + static attribute_9590 = 9590; + static attribute_9591 = 9591; + static attribute_9592 = 9592; + static attribute_9593 = 9593; + static attribute_9594 = 9594; + static attribute_9595 = 9595; + static attribute_9596 = 9596; + static attribute_9597 = 9597; + static attribute_9598 = 9598; + static attribute_9599 = 9599; + static attribute_9600 = 9600; + static attribute_9601 = 9601; + static attribute_9602 = 9602; + static attribute_9603 = 9603; + static attribute_9604 = 9604; + static attribute_9605 = 9605; + static attribute_9606 = 9606; + static attribute_9607 = 9607; + static attribute_9608 = 9608; + static attribute_9609 = 9609; + static attribute_9610 = 9610; + static attribute_9611 = 9611; + static attribute_9612 = 9612; + static attribute_9613 = 9613; + static attribute_9614 = 9614; + static attribute_9615 = 9615; + static attribute_9616 = 9616; + static attribute_9617 = 9617; + static attribute_9618 = 9618; + static attribute_9619 = 9619; + static attribute_9620 = 9620; + static attribute_9621 = 9621; + static attribute_9622 = 9622; + static attribute_9623 = 9623; + static attribute_9624 = 9624; + static attribute_9625 = 9625; + static attribute_9626 = 9626; + static attribute_9627 = 9627; + static attribute_9628 = 9628; + static attribute_9629 = 9629; + static attribute_9630 = 9630; + static attribute_9631 = 9631; + static attribute_9632 = 9632; + static attribute_9633 = 9633; + static attribute_9634 = 9634; + static attribute_9635 = 9635; + static attribute_9636 = 9636; + static attribute_9637 = 9637; + static attribute_9638 = 9638; + static attribute_9639 = 9639; + static attribute_9640 = 9640; + static attribute_9641 = 9641; + static attribute_9642 = 9642; + static attribute_9643 = 9643; + static attribute_9644 = 9644; + static attribute_9645 = 9645; + static attribute_9646 = 9646; + static attribute_9647 = 9647; + static attribute_9648 = 9648; + static attribute_9649 = 9649; + static attribute_9650 = 9650; + static attribute_9651 = 9651; + static attribute_9652 = 9652; + static attribute_9653 = 9653; + static attribute_9654 = 9654; + static attribute_9655 = 9655; + static attribute_9656 = 9656; + static attribute_9657 = 9657; + static attribute_9658 = 9658; + static attribute_9659 = 9659; + static attribute_9660 = 9660; + static attribute_9661 = 9661; + static attribute_9662 = 9662; + static attribute_9663 = 9663; + static attribute_9664 = 9664; + static attribute_9665 = 9665; + static attribute_9666 = 9666; + static attribute_9667 = 9667; + static attribute_9668 = 9668; + static attribute_9669 = 9669; + static attribute_9670 = 9670; + static attribute_9671 = 9671; + static attribute_9672 = 9672; + static attribute_9673 = 9673; + static attribute_9674 = 9674; + static attribute_9675 = 9675; + static attribute_9676 = 9676; + static attribute_9677 = 9677; + static attribute_9678 = 9678; + static attribute_9679 = 9679; + static attribute_9680 = 9680; + static attribute_9681 = 9681; + static attribute_9682 = 9682; + static attribute_9683 = 9683; + static attribute_9684 = 9684; + static attribute_9685 = 9685; + static attribute_9686 = 9686; + static attribute_9687 = 9687; + static attribute_9688 = 9688; + static attribute_9689 = 9689; + static attribute_9690 = 9690; + static attribute_9691 = 9691; + static attribute_9692 = 9692; + static attribute_9693 = 9693; + static attribute_9694 = 9694; + static attribute_9695 = 9695; + static attribute_9696 = 9696; + static attribute_9697 = 9697; + static attribute_9698 = 9698; + static attribute_9699 = 9699; + static attribute_9700 = 9700; + static attribute_9701 = 9701; + static attribute_9702 = 9702; + static attribute_9703 = 9703; + static attribute_9704 = 9704; + static attribute_9705 = 9705; + static attribute_9706 = 9706; + static attribute_9707 = 9707; + static attribute_9708 = 9708; + static attribute_9709 = 9709; + static attribute_9710 = 9710; + static attribute_9711 = 9711; + static attribute_9712 = 9712; + static attribute_9713 = 9713; + static attribute_9714 = 9714; + static attribute_9715 = 9715; + static attribute_9716 = 9716; + static attribute_9717 = 9717; + static attribute_9718 = 9718; + static attribute_9719 = 9719; + static attribute_9720 = 9720; + static attribute_9721 = 9721; + static attribute_9722 = 9722; + static attribute_9723 = 9723; + static attribute_9724 = 9724; + static attribute_9725 = 9725; + static attribute_9726 = 9726; + static attribute_9727 = 9727; + static attribute_9728 = 9728; + static attribute_9729 = 9729; + static attribute_9730 = 9730; + static attribute_9731 = 9731; + static attribute_9732 = 9732; + static attribute_9733 = 9733; + static attribute_9734 = 9734; + static attribute_9735 = 9735; + static attribute_9736 = 9736; + static attribute_9737 = 9737; + static attribute_9738 = 9738; + static attribute_9739 = 9739; + static attribute_9740 = 9740; + static attribute_9741 = 9741; + static attribute_9742 = 9742; + static attribute_9743 = 9743; + static attribute_9744 = 9744; + static attribute_9745 = 9745; + static attribute_9746 = 9746; + static attribute_9747 = 9747; + static attribute_9748 = 9748; + static attribute_9749 = 9749; + static attribute_9750 = 9750; + static attribute_9751 = 9751; + static attribute_9752 = 9752; + static attribute_9753 = 9753; + static attribute_9754 = 9754; + static attribute_9755 = 9755; + static attribute_9756 = 9756; + static attribute_9757 = 9757; + static attribute_9758 = 9758; + static attribute_9759 = 9759; + static attribute_9760 = 9760; + static attribute_9761 = 9761; + static attribute_9762 = 9762; + static attribute_9763 = 9763; + static attribute_9764 = 9764; + static attribute_9765 = 9765; + static attribute_9766 = 9766; + static attribute_9767 = 9767; + static attribute_9768 = 9768; + static attribute_9769 = 9769; + static attribute_9770 = 9770; + static attribute_9771 = 9771; + static attribute_9772 = 9772; + static attribute_9773 = 9773; + static attribute_9774 = 9774; + static attribute_9775 = 9775; + static attribute_9776 = 9776; + static attribute_9777 = 9777; + static attribute_9778 = 9778; + static attribute_9779 = 9779; + static attribute_9780 = 9780; + static attribute_9781 = 9781; + static attribute_9782 = 9782; + static attribute_9783 = 9783; + static attribute_9784 = 9784; + static attribute_9785 = 9785; + static attribute_9786 = 9786; + static attribute_9787 = 9787; + static attribute_9788 = 9788; + static attribute_9789 = 9789; + static attribute_9790 = 9790; + static attribute_9791 = 9791; + static attribute_9792 = 9792; + static attribute_9793 = 9793; + static attribute_9794 = 9794; + static attribute_9795 = 9795; + static attribute_9796 = 9796; + static attribute_9797 = 9797; + static attribute_9798 = 9798; + static attribute_9799 = 9799; + static attribute_9800 = 9800; + static attribute_9801 = 9801; + static attribute_9802 = 9802; + static attribute_9803 = 9803; + static attribute_9804 = 9804; + static attribute_9805 = 9805; + static attribute_9806 = 9806; + static attribute_9807 = 9807; + static attribute_9808 = 9808; + static attribute_9809 = 9809; + static attribute_9810 = 9810; + static attribute_9811 = 9811; + static attribute_9812 = 9812; + static attribute_9813 = 9813; + static attribute_9814 = 9814; + static attribute_9815 = 9815; + static attribute_9816 = 9816; + static attribute_9817 = 9817; + static attribute_9818 = 9818; + static attribute_9819 = 9819; + static attribute_9820 = 9820; + static attribute_9821 = 9821; + static attribute_9822 = 9822; + static attribute_9823 = 9823; + static attribute_9824 = 9824; + static attribute_9825 = 9825; + static attribute_9826 = 9826; + static attribute_9827 = 9827; + static attribute_9828 = 9828; + static attribute_9829 = 9829; + static attribute_9830 = 9830; + static attribute_9831 = 9831; + static attribute_9832 = 9832; + static attribute_9833 = 9833; + static attribute_9834 = 9834; + static attribute_9835 = 9835; + static attribute_9836 = 9836; + static attribute_9837 = 9837; + static attribute_9838 = 9838; + static attribute_9839 = 9839; + static attribute_9840 = 9840; + static attribute_9841 = 9841; + static attribute_9842 = 9842; + static attribute_9843 = 9843; + static attribute_9844 = 9844; + static attribute_9845 = 9845; + static attribute_9846 = 9846; + static attribute_9847 = 9847; + static attribute_9848 = 9848; + static attribute_9849 = 9849; + static attribute_9850 = 9850; + static attribute_9851 = 9851; + static attribute_9852 = 9852; + static attribute_9853 = 9853; + static attribute_9854 = 9854; + static attribute_9855 = 9855; + static attribute_9856 = 9856; + static attribute_9857 = 9857; + static attribute_9858 = 9858; + static attribute_9859 = 9859; + static attribute_9860 = 9860; + static attribute_9861 = 9861; + static attribute_9862 = 9862; + static attribute_9863 = 9863; + static attribute_9864 = 9864; + static attribute_9865 = 9865; + static attribute_9866 = 9866; + static attribute_9867 = 9867; + static attribute_9868 = 9868; + static attribute_9869 = 9869; + static attribute_9870 = 9870; + static attribute_9871 = 9871; + static attribute_9872 = 9872; + static attribute_9873 = 9873; + static attribute_9874 = 9874; + static attribute_9875 = 9875; + static attribute_9876 = 9876; + static attribute_9877 = 9877; + static attribute_9878 = 9878; + static attribute_9879 = 9879; + static attribute_9880 = 9880; + static attribute_9881 = 9881; + static attribute_9882 = 9882; + static attribute_9883 = 9883; + static attribute_9884 = 9884; + static attribute_9885 = 9885; + static attribute_9886 = 9886; + static attribute_9887 = 9887; + static attribute_9888 = 9888; + static attribute_9889 = 9889; + static attribute_9890 = 9890; + static attribute_9891 = 9891; + static attribute_9892 = 9892; + static attribute_9893 = 9893; + static attribute_9894 = 9894; + static attribute_9895 = 9895; + static attribute_9896 = 9896; + static attribute_9897 = 9897; + static attribute_9898 = 9898; + static attribute_9899 = 9899; + static attribute_9900 = 9900; + static attribute_9901 = 9901; + static attribute_9902 = 9902; + static attribute_9903 = 9903; + static attribute_9904 = 9904; + static attribute_9905 = 9905; + static attribute_9906 = 9906; + static attribute_9907 = 9907; + static attribute_9908 = 9908; + static attribute_9909 = 9909; + static attribute_9910 = 9910; + static attribute_9911 = 9911; + static attribute_9912 = 9912; + static attribute_9913 = 9913; + static attribute_9914 = 9914; + static attribute_9915 = 9915; + static attribute_9916 = 9916; + static attribute_9917 = 9917; + static attribute_9918 = 9918; + static attribute_9919 = 9919; + static attribute_9920 = 9920; + static attribute_9921 = 9921; + static attribute_9922 = 9922; + static attribute_9923 = 9923; + static attribute_9924 = 9924; + static attribute_9925 = 9925; + static attribute_9926 = 9926; + static attribute_9927 = 9927; + static attribute_9928 = 9928; + static attribute_9929 = 9929; + static attribute_9930 = 9930; + static attribute_9931 = 9931; + static attribute_9932 = 9932; + static attribute_9933 = 9933; + static attribute_9934 = 9934; + static attribute_9935 = 9935; + static attribute_9936 = 9936; + static attribute_9937 = 9937; + static attribute_9938 = 9938; + static attribute_9939 = 9939; + static attribute_9940 = 9940; + static attribute_9941 = 9941; + static attribute_9942 = 9942; + static attribute_9943 = 9943; + static attribute_9944 = 9944; + static attribute_9945 = 9945; + static attribute_9946 = 9946; + static attribute_9947 = 9947; + static attribute_9948 = 9948; + static attribute_9949 = 9949; + static attribute_9950 = 9950; + static attribute_9951 = 9951; + static attribute_9952 = 9952; + static attribute_9953 = 9953; + static attribute_9954 = 9954; + static attribute_9955 = 9955; + static attribute_9956 = 9956; + static attribute_9957 = 9957; + static attribute_9958 = 9958; + static attribute_9959 = 9959; + static attribute_9960 = 9960; + static attribute_9961 = 9961; + static attribute_9962 = 9962; + static attribute_9963 = 9963; + static attribute_9964 = 9964; + static attribute_9965 = 9965; + static attribute_9966 = 9966; + static attribute_9967 = 9967; + static attribute_9968 = 9968; + static attribute_9969 = 9969; + static attribute_9970 = 9970; + static attribute_9971 = 9971; + static attribute_9972 = 9972; + static attribute_9973 = 9973; + static attribute_9974 = 9974; + static attribute_9975 = 9975; + static attribute_9976 = 9976; + static attribute_9977 = 9977; + static attribute_9978 = 9978; + static attribute_9979 = 9979; + static attribute_9980 = 9980; + static attribute_9981 = 9981; + static attribute_9982 = 9982; + static attribute_9983 = 9983; + static attribute_9984 = 9984; + static attribute_9985 = 9985; + static attribute_9986 = 9986; + static attribute_9987 = 9987; + static attribute_9988 = 9988; + static attribute_9989 = 9989; + static attribute_9990 = 9990; + static attribute_9991 = 9991; + static attribute_9992 = 9992; + static attribute_9993 = 9993; + static attribute_9994 = 9994; + static attribute_9995 = 9995; + static attribute_9996 = 9996; + static attribute_9997 = 9997; + static attribute_9998 = 9998; + static attribute_9999 = 9999; + static attribute_10000 = 10000; + static attribute_10001 = 10001; + static attribute_10002 = 10002; + static attribute_10003 = 10003; + static attribute_10004 = 10004; + static attribute_10005 = 10005; + static attribute_10006 = 10006; + static attribute_10007 = 10007; + static attribute_10008 = 10008; + static attribute_10009 = 10009; + static attribute_10010 = 10010; + static attribute_10011 = 10011; + static attribute_10012 = 10012; + static attribute_10013 = 10013; + static attribute_10014 = 10014; + static attribute_10015 = 10015; + static attribute_10016 = 10016; + static attribute_10017 = 10017; + static attribute_10018 = 10018; + static attribute_10019 = 10019; + static attribute_10020 = 10020; + static attribute_10021 = 10021; + static attribute_10022 = 10022; + static attribute_10023 = 10023; + static attribute_10024 = 10024; + static attribute_10025 = 10025; + static attribute_10026 = 10026; + static attribute_10027 = 10027; + static attribute_10028 = 10028; + static attribute_10029 = 10029; + static attribute_10030 = 10030; + static attribute_10031 = 10031; + static attribute_10032 = 10032; + static attribute_10033 = 10033; + static attribute_10034 = 10034; + static attribute_10035 = 10035; + static attribute_10036 = 10036; + static attribute_10037 = 10037; + static attribute_10038 = 10038; + static attribute_10039 = 10039; + static attribute_10040 = 10040; + static attribute_10041 = 10041; + static attribute_10042 = 10042; + static attribute_10043 = 10043; + static attribute_10044 = 10044; + static attribute_10045 = 10045; + static attribute_10046 = 10046; + static attribute_10047 = 10047; + static attribute_10048 = 10048; + static attribute_10049 = 10049; + static attribute_10050 = 10050; + static attribute_10051 = 10051; + static attribute_10052 = 10052; + static attribute_10053 = 10053; + static attribute_10054 = 10054; + static attribute_10055 = 10055; + static attribute_10056 = 10056; + static attribute_10057 = 10057; + static attribute_10058 = 10058; + static attribute_10059 = 10059; + static attribute_10060 = 10060; + static attribute_10061 = 10061; + static attribute_10062 = 10062; + static attribute_10063 = 10063; + static attribute_10064 = 10064; + static attribute_10065 = 10065; + static attribute_10066 = 10066; + static attribute_10067 = 10067; + static attribute_10068 = 10068; + static attribute_10069 = 10069; + static attribute_10070 = 10070; + static attribute_10071 = 10071; + static attribute_10072 = 10072; + static attribute_10073 = 10073; + static attribute_10074 = 10074; + static attribute_10075 = 10075; + static attribute_10076 = 10076; + static attribute_10077 = 10077; + static attribute_10078 = 10078; + static attribute_10079 = 10079; + static attribute_10080 = 10080; + static attribute_10081 = 10081; + static attribute_10082 = 10082; + static attribute_10083 = 10083; + static attribute_10084 = 10084; + static attribute_10085 = 10085; + static attribute_10086 = 10086; + static attribute_10087 = 10087; + static attribute_10088 = 10088; + static attribute_10089 = 10089; + static attribute_10090 = 10090; + static attribute_10091 = 10091; + static attribute_10092 = 10092; + static attribute_10093 = 10093; + static attribute_10094 = 10094; + static attribute_10095 = 10095; + static attribute_10096 = 10096; + static attribute_10097 = 10097; + static attribute_10098 = 10098; + static attribute_10099 = 10099; + static attribute_10100 = 10100; + static attribute_10101 = 10101; + static attribute_10102 = 10102; + static attribute_10103 = 10103; + static attribute_10104 = 10104; + static attribute_10105 = 10105; + static attribute_10106 = 10106; + static attribute_10107 = 10107; + static attribute_10108 = 10108; + static attribute_10109 = 10109; + static attribute_10110 = 10110; + static attribute_10111 = 10111; + static attribute_10112 = 10112; + static attribute_10113 = 10113; + static attribute_10114 = 10114; + static attribute_10115 = 10115; + static attribute_10116 = 10116; + static attribute_10117 = 10117; + static attribute_10118 = 10118; + static attribute_10119 = 10119; + static attribute_10120 = 10120; + static attribute_10121 = 10121; + static attribute_10122 = 10122; + static attribute_10123 = 10123; + static attribute_10124 = 10124; + static attribute_10125 = 10125; + static attribute_10126 = 10126; + static attribute_10127 = 10127; + static attribute_10128 = 10128; + static attribute_10129 = 10129; + static attribute_10130 = 10130; + static attribute_10131 = 10131; + static attribute_10132 = 10132; + static attribute_10133 = 10133; + static attribute_10134 = 10134; + static attribute_10135 = 10135; + static attribute_10136 = 10136; + static attribute_10137 = 10137; + static attribute_10138 = 10138; + static attribute_10139 = 10139; + static attribute_10140 = 10140; + static attribute_10141 = 10141; + static attribute_10142 = 10142; + static attribute_10143 = 10143; + static attribute_10144 = 10144; + static attribute_10145 = 10145; + static attribute_10146 = 10146; + static attribute_10147 = 10147; + static attribute_10148 = 10148; + static attribute_10149 = 10149; + static attribute_10150 = 10150; + static attribute_10151 = 10151; + static attribute_10152 = 10152; + static attribute_10153 = 10153; + static attribute_10154 = 10154; + static attribute_10155 = 10155; + static attribute_10156 = 10156; + static attribute_10157 = 10157; + static attribute_10158 = 10158; + static attribute_10159 = 10159; + static attribute_10160 = 10160; + static attribute_10161 = 10161; + static attribute_10162 = 10162; + static attribute_10163 = 10163; + static attribute_10164 = 10164; + static attribute_10165 = 10165; + static attribute_10166 = 10166; + static attribute_10167 = 10167; + static attribute_10168 = 10168; + static attribute_10169 = 10169; + static attribute_10170 = 10170; + static attribute_10171 = 10171; + static attribute_10172 = 10172; + static attribute_10173 = 10173; + static attribute_10174 = 10174; + static attribute_10175 = 10175; + static attribute_10176 = 10176; + static attribute_10177 = 10177; + static attribute_10178 = 10178; + static attribute_10179 = 10179; + static attribute_10180 = 10180; + static attribute_10181 = 10181; + static attribute_10182 = 10182; + static attribute_10183 = 10183; + static attribute_10184 = 10184; + static attribute_10185 = 10185; + static attribute_10186 = 10186; + static attribute_10187 = 10187; + static attribute_10188 = 10188; + static attribute_10189 = 10189; + static attribute_10190 = 10190; + static attribute_10191 = 10191; + static attribute_10192 = 10192; + static attribute_10193 = 10193; + static attribute_10194 = 10194; + static attribute_10195 = 10195; + static attribute_10196 = 10196; + static attribute_10197 = 10197; + static attribute_10198 = 10198; + static attribute_10199 = 10199; + static attribute_10200 = 10200; + static attribute_10201 = 10201; + static attribute_10202 = 10202; + static attribute_10203 = 10203; + static attribute_10204 = 10204; + static attribute_10205 = 10205; + static attribute_10206 = 10206; + static attribute_10207 = 10207; + static attribute_10208 = 10208; + static attribute_10209 = 10209; + static attribute_10210 = 10210; + static attribute_10211 = 10211; + static attribute_10212 = 10212; + static attribute_10213 = 10213; + static attribute_10214 = 10214; + static attribute_10215 = 10215; + static attribute_10216 = 10216; + static attribute_10217 = 10217; + static attribute_10218 = 10218; + static attribute_10219 = 10219; + static attribute_10220 = 10220; + static attribute_10221 = 10221; + static attribute_10222 = 10222; + static attribute_10223 = 10223; + static attribute_10224 = 10224; + static attribute_10225 = 10225; + static attribute_10226 = 10226; + static attribute_10227 = 10227; + static attribute_10228 = 10228; + static attribute_10229 = 10229; + static attribute_10230 = 10230; + static attribute_10231 = 10231; + static attribute_10232 = 10232; + static attribute_10233 = 10233; + static attribute_10234 = 10234; + static attribute_10235 = 10235; + static attribute_10236 = 10236; + static attribute_10237 = 10237; + static attribute_10238 = 10238; + static attribute_10239 = 10239; + static attribute_10240 = 10240; + static attribute_10241 = 10241; + static attribute_10242 = 10242; + static attribute_10243 = 10243; + static attribute_10244 = 10244; + static attribute_10245 = 10245; + static attribute_10246 = 10246; + static attribute_10247 = 10247; + static attribute_10248 = 10248; + static attribute_10249 = 10249; + static attribute_10250 = 10250; + static attribute_10251 = 10251; + static attribute_10252 = 10252; + static attribute_10253 = 10253; + static attribute_10254 = 10254; + static attribute_10255 = 10255; + static attribute_10256 = 10256; + static attribute_10257 = 10257; + static attribute_10258 = 10258; + static attribute_10259 = 10259; + static attribute_10260 = 10260; + static attribute_10261 = 10261; + static attribute_10262 = 10262; + static attribute_10263 = 10263; + static attribute_10264 = 10264; + static attribute_10265 = 10265; + static attribute_10266 = 10266; + static attribute_10267 = 10267; + static attribute_10268 = 10268; + static attribute_10269 = 10269; + static attribute_10270 = 10270; + static attribute_10271 = 10271; + static attribute_10272 = 10272; + static attribute_10273 = 10273; + static attribute_10274 = 10274; + static attribute_10275 = 10275; + static attribute_10276 = 10276; + static attribute_10277 = 10277; + static attribute_10278 = 10278; + static attribute_10279 = 10279; + static attribute_10280 = 10280; + static attribute_10281 = 10281; + static attribute_10282 = 10282; + static attribute_10283 = 10283; + static attribute_10284 = 10284; + static attribute_10285 = 10285; + static attribute_10286 = 10286; + static attribute_10287 = 10287; + static attribute_10288 = 10288; + static attribute_10289 = 10289; + static attribute_10290 = 10290; + static attribute_10291 = 10291; + static attribute_10292 = 10292; + static attribute_10293 = 10293; + static attribute_10294 = 10294; + static attribute_10295 = 10295; + static attribute_10296 = 10296; + static attribute_10297 = 10297; + static attribute_10298 = 10298; + static attribute_10299 = 10299; + static attribute_10300 = 10300; + static attribute_10301 = 10301; + static attribute_10302 = 10302; + static attribute_10303 = 10303; + static attribute_10304 = 10304; + static attribute_10305 = 10305; + static attribute_10306 = 10306; + static attribute_10307 = 10307; + static attribute_10308 = 10308; + static attribute_10309 = 10309; + static attribute_10310 = 10310; + static attribute_10311 = 10311; + static attribute_10312 = 10312; + static attribute_10313 = 10313; + static attribute_10314 = 10314; + static attribute_10315 = 10315; + static attribute_10316 = 10316; + static attribute_10317 = 10317; + static attribute_10318 = 10318; + static attribute_10319 = 10319; + static attribute_10320 = 10320; + static attribute_10321 = 10321; + static attribute_10322 = 10322; + static attribute_10323 = 10323; + static attribute_10324 = 10324; + static attribute_10325 = 10325; + static attribute_10326 = 10326; + static attribute_10327 = 10327; + static attribute_10328 = 10328; + static attribute_10329 = 10329; + static attribute_10330 = 10330; + static attribute_10331 = 10331; + static attribute_10332 = 10332; + static attribute_10333 = 10333; + static attribute_10334 = 10334; + static attribute_10335 = 10335; + static attribute_10336 = 10336; + static attribute_10337 = 10337; + static attribute_10338 = 10338; + static attribute_10339 = 10339; + static attribute_10340 = 10340; + static attribute_10341 = 10341; + static attribute_10342 = 10342; + static attribute_10343 = 10343; + static attribute_10344 = 10344; + static attribute_10345 = 10345; + static attribute_10346 = 10346; + static attribute_10347 = 10347; + static attribute_10348 = 10348; + static attribute_10349 = 10349; + static attribute_10350 = 10350; + static attribute_10351 = 10351; + static attribute_10352 = 10352; + static attribute_10353 = 10353; + static attribute_10354 = 10354; + static attribute_10355 = 10355; + static attribute_10356 = 10356; + static attribute_10357 = 10357; + static attribute_10358 = 10358; + static attribute_10359 = 10359; + static attribute_10360 = 10360; + static attribute_10361 = 10361; + static attribute_10362 = 10362; + static attribute_10363 = 10363; + static attribute_10364 = 10364; + static attribute_10365 = 10365; + static attribute_10366 = 10366; + static attribute_10367 = 10367; + static attribute_10368 = 10368; + static attribute_10369 = 10369; + static attribute_10370 = 10370; + static attribute_10371 = 10371; + static attribute_10372 = 10372; + static attribute_10373 = 10373; + static attribute_10374 = 10374; + static attribute_10375 = 10375; + static attribute_10376 = 10376; + static attribute_10377 = 10377; + static attribute_10378 = 10378; + static attribute_10379 = 10379; + static attribute_10380 = 10380; + static attribute_10381 = 10381; + static attribute_10382 = 10382; + static attribute_10383 = 10383; + static attribute_10384 = 10384; + static attribute_10385 = 10385; + static attribute_10386 = 10386; + static attribute_10387 = 10387; + static attribute_10388 = 10388; + static attribute_10389 = 10389; + static attribute_10390 = 10390; + static attribute_10391 = 10391; + static attribute_10392 = 10392; + static attribute_10393 = 10393; + static attribute_10394 = 10394; + static attribute_10395 = 10395; + static attribute_10396 = 10396; + static attribute_10397 = 10397; + static attribute_10398 = 10398; + static attribute_10399 = 10399; + static attribute_10400 = 10400; + static attribute_10401 = 10401; + static attribute_10402 = 10402; + static attribute_10403 = 10403; + static attribute_10404 = 10404; + static attribute_10405 = 10405; + static attribute_10406 = 10406; + static attribute_10407 = 10407; + static attribute_10408 = 10408; + static attribute_10409 = 10409; + static attribute_10410 = 10410; + static attribute_10411 = 10411; + static attribute_10412 = 10412; + static attribute_10413 = 10413; + static attribute_10414 = 10414; + static attribute_10415 = 10415; + static attribute_10416 = 10416; + static attribute_10417 = 10417; + static attribute_10418 = 10418; + static attribute_10419 = 10419; + static attribute_10420 = 10420; + static attribute_10421 = 10421; + static attribute_10422 = 10422; + static attribute_10423 = 10423; + static attribute_10424 = 10424; + static attribute_10425 = 10425; + static attribute_10426 = 10426; + static attribute_10427 = 10427; + static attribute_10428 = 10428; + static attribute_10429 = 10429; + static attribute_10430 = 10430; + static attribute_10431 = 10431; + static attribute_10432 = 10432; + static attribute_10433 = 10433; + static attribute_10434 = 10434; + static attribute_10435 = 10435; + static attribute_10436 = 10436; + static attribute_10437 = 10437; + static attribute_10438 = 10438; + static attribute_10439 = 10439; + static attribute_10440 = 10440; + static attribute_10441 = 10441; + static attribute_10442 = 10442; + static attribute_10443 = 10443; + static attribute_10444 = 10444; + static attribute_10445 = 10445; + static attribute_10446 = 10446; + static attribute_10447 = 10447; + static attribute_10448 = 10448; + static attribute_10449 = 10449; + static attribute_10450 = 10450; + static attribute_10451 = 10451; + static attribute_10452 = 10452; + static attribute_10453 = 10453; + static attribute_10454 = 10454; + static attribute_10455 = 10455; + static attribute_10456 = 10456; + static attribute_10457 = 10457; + static attribute_10458 = 10458; + static attribute_10459 = 10459; + static attribute_10460 = 10460; + static attribute_10461 = 10461; + static attribute_10462 = 10462; + static attribute_10463 = 10463; + static attribute_10464 = 10464; + static attribute_10465 = 10465; + static attribute_10466 = 10466; + static attribute_10467 = 10467; + static attribute_10468 = 10468; + static attribute_10469 = 10469; + static attribute_10470 = 10470; + static attribute_10471 = 10471; + static attribute_10472 = 10472; + static attribute_10473 = 10473; + static attribute_10474 = 10474; + static attribute_10475 = 10475; + static attribute_10476 = 10476; + static attribute_10477 = 10477; + static attribute_10478 = 10478; + static attribute_10479 = 10479; + static attribute_10480 = 10480; + static attribute_10481 = 10481; + static attribute_10482 = 10482; + static attribute_10483 = 10483; + static attribute_10484 = 10484; + static attribute_10485 = 10485; + static attribute_10486 = 10486; + static attribute_10487 = 10487; + static attribute_10488 = 10488; + static attribute_10489 = 10489; + static attribute_10490 = 10490; + static attribute_10491 = 10491; + static attribute_10492 = 10492; + static attribute_10493 = 10493; + static attribute_10494 = 10494; + static attribute_10495 = 10495; + static attribute_10496 = 10496; + static attribute_10497 = 10497; + static attribute_10498 = 10498; + static attribute_10499 = 10499; + static attribute_10500 = 10500; + static attribute_10501 = 10501; + static attribute_10502 = 10502; + static attribute_10503 = 10503; + static attribute_10504 = 10504; + static attribute_10505 = 10505; + static attribute_10506 = 10506; + static attribute_10507 = 10507; + static attribute_10508 = 10508; + static attribute_10509 = 10509; + static attribute_10510 = 10510; + static attribute_10511 = 10511; + static attribute_10512 = 10512; + static attribute_10513 = 10513; + static attribute_10514 = 10514; + static attribute_10515 = 10515; + static attribute_10516 = 10516; + static attribute_10517 = 10517; + static attribute_10518 = 10518; + static attribute_10519 = 10519; + static attribute_10520 = 10520; + static attribute_10521 = 10521; + static attribute_10522 = 10522; + static attribute_10523 = 10523; + static attribute_10524 = 10524; + static attribute_10525 = 10525; + static attribute_10526 = 10526; + static attribute_10527 = 10527; + static attribute_10528 = 10528; + static attribute_10529 = 10529; + static attribute_10530 = 10530; + static attribute_10531 = 10531; + static attribute_10532 = 10532; + static attribute_10533 = 10533; + static attribute_10534 = 10534; + static attribute_10535 = 10535; + static attribute_10536 = 10536; + static attribute_10537 = 10537; + static attribute_10538 = 10538; + static attribute_10539 = 10539; + static attribute_10540 = 10540; + static attribute_10541 = 10541; + static attribute_10542 = 10542; + static attribute_10543 = 10543; + static attribute_10544 = 10544; + static attribute_10545 = 10545; + static attribute_10546 = 10546; + static attribute_10547 = 10547; + static attribute_10548 = 10548; + static attribute_10549 = 10549; + static attribute_10550 = 10550; + static attribute_10551 = 10551; + static attribute_10552 = 10552; + static attribute_10553 = 10553; + static attribute_10554 = 10554; + static attribute_10555 = 10555; + static attribute_10556 = 10556; + static attribute_10557 = 10557; + static attribute_10558 = 10558; + static attribute_10559 = 10559; + static attribute_10560 = 10560; + static attribute_10561 = 10561; + static attribute_10562 = 10562; + static attribute_10563 = 10563; + static attribute_10564 = 10564; + static attribute_10565 = 10565; + static attribute_10566 = 10566; + static attribute_10567 = 10567; + static attribute_10568 = 10568; + static attribute_10569 = 10569; + static attribute_10570 = 10570; + static attribute_10571 = 10571; + static attribute_10572 = 10572; + static attribute_10573 = 10573; + static attribute_10574 = 10574; + static attribute_10575 = 10575; + static attribute_10576 = 10576; + static attribute_10577 = 10577; + static attribute_10578 = 10578; + static attribute_10579 = 10579; + static attribute_10580 = 10580; + static attribute_10581 = 10581; + static attribute_10582 = 10582; + static attribute_10583 = 10583; + static attribute_10584 = 10584; + static attribute_10585 = 10585; + static attribute_10586 = 10586; + static attribute_10587 = 10587; + static attribute_10588 = 10588; + static attribute_10589 = 10589; + static attribute_10590 = 10590; + static attribute_10591 = 10591; + static attribute_10592 = 10592; + static attribute_10593 = 10593; + static attribute_10594 = 10594; + static attribute_10595 = 10595; + static attribute_10596 = 10596; + static attribute_10597 = 10597; + static attribute_10598 = 10598; + static attribute_10599 = 10599; + static attribute_10600 = 10600; + static attribute_10601 = 10601; + static attribute_10602 = 10602; + static attribute_10603 = 10603; + static attribute_10604 = 10604; + static attribute_10605 = 10605; + static attribute_10606 = 10606; + static attribute_10607 = 10607; + static attribute_10608 = 10608; + static attribute_10609 = 10609; + static attribute_10610 = 10610; + static attribute_10611 = 10611; + static attribute_10612 = 10612; + static attribute_10613 = 10613; + static attribute_10614 = 10614; + static attribute_10615 = 10615; + static attribute_10616 = 10616; + static attribute_10617 = 10617; + static attribute_10618 = 10618; + static attribute_10619 = 10619; + static attribute_10620 = 10620; + static attribute_10621 = 10621; + static attribute_10622 = 10622; + static attribute_10623 = 10623; + static attribute_10624 = 10624; + static attribute_10625 = 10625; + static attribute_10626 = 10626; + static attribute_10627 = 10627; + static attribute_10628 = 10628; + static attribute_10629 = 10629; + static attribute_10630 = 10630; + static attribute_10631 = 10631; + static attribute_10632 = 10632; + static attribute_10633 = 10633; + static attribute_10634 = 10634; + static attribute_10635 = 10635; + static attribute_10636 = 10636; + static attribute_10637 = 10637; + static attribute_10638 = 10638; + static attribute_10639 = 10639; + static attribute_10640 = 10640; + static attribute_10641 = 10641; + static attribute_10642 = 10642; + static attribute_10643 = 10643; + static attribute_10644 = 10644; + static attribute_10645 = 10645; + static attribute_10646 = 10646; + static attribute_10647 = 10647; + static attribute_10648 = 10648; + static attribute_10649 = 10649; + static attribute_10650 = 10650; + static attribute_10651 = 10651; + static attribute_10652 = 10652; + static attribute_10653 = 10653; + static attribute_10654 = 10654; + static attribute_10655 = 10655; + static attribute_10656 = 10656; + static attribute_10657 = 10657; + static attribute_10658 = 10658; + static attribute_10659 = 10659; + static attribute_10660 = 10660; + static attribute_10661 = 10661; + static attribute_10662 = 10662; + static attribute_10663 = 10663; + static attribute_10664 = 10664; + static attribute_10665 = 10665; + static attribute_10666 = 10666; + static attribute_10667 = 10667; + static attribute_10668 = 10668; + static attribute_10669 = 10669; + static attribute_10670 = 10670; + static attribute_10671 = 10671; + static attribute_10672 = 10672; + static attribute_10673 = 10673; + static attribute_10674 = 10674; + static attribute_10675 = 10675; + static attribute_10676 = 10676; + static attribute_10677 = 10677; + static attribute_10678 = 10678; + static attribute_10679 = 10679; + static attribute_10680 = 10680; + static attribute_10681 = 10681; + static attribute_10682 = 10682; + static attribute_10683 = 10683; + static attribute_10684 = 10684; + static attribute_10685 = 10685; + static attribute_10686 = 10686; + static attribute_10687 = 10687; + static attribute_10688 = 10688; + static attribute_10689 = 10689; + static attribute_10690 = 10690; + static attribute_10691 = 10691; + static attribute_10692 = 10692; + static attribute_10693 = 10693; + static attribute_10694 = 10694; + static attribute_10695 = 10695; + static attribute_10696 = 10696; + static attribute_10697 = 10697; + static attribute_10698 = 10698; + static attribute_10699 = 10699; + static attribute_10700 = 10700; + static attribute_10701 = 10701; + static attribute_10702 = 10702; + static attribute_10703 = 10703; + static attribute_10704 = 10704; + static attribute_10705 = 10705; + static attribute_10706 = 10706; + static attribute_10707 = 10707; + static attribute_10708 = 10708; + static attribute_10709 = 10709; + static attribute_10710 = 10710; + static attribute_10711 = 10711; + static attribute_10712 = 10712; + static attribute_10713 = 10713; + static attribute_10714 = 10714; + static attribute_10715 = 10715; + static attribute_10716 = 10716; + static attribute_10717 = 10717; + static attribute_10718 = 10718; + static attribute_10719 = 10719; + static attribute_10720 = 10720; + static attribute_10721 = 10721; + static attribute_10722 = 10722; + static attribute_10723 = 10723; + static attribute_10724 = 10724; + static attribute_10725 = 10725; + static attribute_10726 = 10726; + static attribute_10727 = 10727; + static attribute_10728 = 10728; + static attribute_10729 = 10729; + static attribute_10730 = 10730; + static attribute_10731 = 10731; + static attribute_10732 = 10732; + static attribute_10733 = 10733; + static attribute_10734 = 10734; + static attribute_10735 = 10735; + static attribute_10736 = 10736; + static attribute_10737 = 10737; + static attribute_10738 = 10738; + static attribute_10739 = 10739; + static attribute_10740 = 10740; + static attribute_10741 = 10741; + static attribute_10742 = 10742; + static attribute_10743 = 10743; + static attribute_10744 = 10744; + static attribute_10745 = 10745; + static attribute_10746 = 10746; + static attribute_10747 = 10747; + static attribute_10748 = 10748; + static attribute_10749 = 10749; + static attribute_10750 = 10750; + static attribute_10751 = 10751; + static attribute_10752 = 10752; + static attribute_10753 = 10753; + static attribute_10754 = 10754; + static attribute_10755 = 10755; + static attribute_10756 = 10756; + static attribute_10757 = 10757; + static attribute_10758 = 10758; + static attribute_10759 = 10759; + static attribute_10760 = 10760; + static attribute_10761 = 10761; + static attribute_10762 = 10762; + static attribute_10763 = 10763; + static attribute_10764 = 10764; + static attribute_10765 = 10765; + static attribute_10766 = 10766; + static attribute_10767 = 10767; + static attribute_10768 = 10768; + static attribute_10769 = 10769; + static attribute_10770 = 10770; + static attribute_10771 = 10771; + static attribute_10772 = 10772; + static attribute_10773 = 10773; + static attribute_10774 = 10774; + static attribute_10775 = 10775; + static attribute_10776 = 10776; + static attribute_10777 = 10777; + static attribute_10778 = 10778; + static attribute_10779 = 10779; + static attribute_10780 = 10780; + static attribute_10781 = 10781; + static attribute_10782 = 10782; + static attribute_10783 = 10783; + static attribute_10784 = 10784; + static attribute_10785 = 10785; + static attribute_10786 = 10786; + static attribute_10787 = 10787; + static attribute_10788 = 10788; + static attribute_10789 = 10789; + static attribute_10790 = 10790; + static attribute_10791 = 10791; + static attribute_10792 = 10792; + static attribute_10793 = 10793; + static attribute_10794 = 10794; + static attribute_10795 = 10795; + static attribute_10796 = 10796; + static attribute_10797 = 10797; + static attribute_10798 = 10798; + static attribute_10799 = 10799; + static attribute_10800 = 10800; + static attribute_10801 = 10801; + static attribute_10802 = 10802; + static attribute_10803 = 10803; + static attribute_10804 = 10804; + static attribute_10805 = 10805; + static attribute_10806 = 10806; + static attribute_10807 = 10807; + static attribute_10808 = 10808; + static attribute_10809 = 10809; + static attribute_10810 = 10810; + static attribute_10811 = 10811; + static attribute_10812 = 10812; + static attribute_10813 = 10813; + static attribute_10814 = 10814; + static attribute_10815 = 10815; + static attribute_10816 = 10816; + static attribute_10817 = 10817; + static attribute_10818 = 10818; + static attribute_10819 = 10819; + static attribute_10820 = 10820; + static attribute_10821 = 10821; + static attribute_10822 = 10822; + static attribute_10823 = 10823; + static attribute_10824 = 10824; + static attribute_10825 = 10825; + static attribute_10826 = 10826; + static attribute_10827 = 10827; + static attribute_10828 = 10828; + static attribute_10829 = 10829; + static attribute_10830 = 10830; + static attribute_10831 = 10831; + static attribute_10832 = 10832; + static attribute_10833 = 10833; + static attribute_10834 = 10834; + static attribute_10835 = 10835; + static attribute_10836 = 10836; + static attribute_10837 = 10837; + static attribute_10838 = 10838; + static attribute_10839 = 10839; + static attribute_10840 = 10840; + static attribute_10841 = 10841; + static attribute_10842 = 10842; + static attribute_10843 = 10843; + static attribute_10844 = 10844; + static attribute_10845 = 10845; + static attribute_10846 = 10846; + static attribute_10847 = 10847; + static attribute_10848 = 10848; + static attribute_10849 = 10849; + static attribute_10850 = 10850; + static attribute_10851 = 10851; + static attribute_10852 = 10852; + static attribute_10853 = 10853; + static attribute_10854 = 10854; + static attribute_10855 = 10855; + static attribute_10856 = 10856; + static attribute_10857 = 10857; + static attribute_10858 = 10858; + static attribute_10859 = 10859; + static attribute_10860 = 10860; + static attribute_10861 = 10861; + static attribute_10862 = 10862; + static attribute_10863 = 10863; + static attribute_10864 = 10864; + static attribute_10865 = 10865; + static attribute_10866 = 10866; + static attribute_10867 = 10867; + static attribute_10868 = 10868; + static attribute_10869 = 10869; + static attribute_10870 = 10870; + static attribute_10871 = 10871; + static attribute_10872 = 10872; + static attribute_10873 = 10873; + static attribute_10874 = 10874; + static attribute_10875 = 10875; + static attribute_10876 = 10876; + static attribute_10877 = 10877; + static attribute_10878 = 10878; + static attribute_10879 = 10879; + static attribute_10880 = 10880; + static attribute_10881 = 10881; + static attribute_10882 = 10882; + static attribute_10883 = 10883; + static attribute_10884 = 10884; + static attribute_10885 = 10885; + static attribute_10886 = 10886; + static attribute_10887 = 10887; + static attribute_10888 = 10888; + static attribute_10889 = 10889; + static attribute_10890 = 10890; + static attribute_10891 = 10891; + static attribute_10892 = 10892; + static attribute_10893 = 10893; + static attribute_10894 = 10894; + static attribute_10895 = 10895; + static attribute_10896 = 10896; + static attribute_10897 = 10897; + static attribute_10898 = 10898; + static attribute_10899 = 10899; + static attribute_10900 = 10900; + static attribute_10901 = 10901; + static attribute_10902 = 10902; + static attribute_10903 = 10903; + static attribute_10904 = 10904; + static attribute_10905 = 10905; + static attribute_10906 = 10906; + static attribute_10907 = 10907; + static attribute_10908 = 10908; + static attribute_10909 = 10909; + static attribute_10910 = 10910; + static attribute_10911 = 10911; + static attribute_10912 = 10912; + static attribute_10913 = 10913; + static attribute_10914 = 10914; + static attribute_10915 = 10915; + static attribute_10916 = 10916; + static attribute_10917 = 10917; + static attribute_10918 = 10918; + static attribute_10919 = 10919; + static attribute_10920 = 10920; + static attribute_10921 = 10921; + static attribute_10922 = 10922; + static attribute_10923 = 10923; + static attribute_10924 = 10924; + static attribute_10925 = 10925; + static attribute_10926 = 10926; + static attribute_10927 = 10927; + static attribute_10928 = 10928; + static attribute_10929 = 10929; + static attribute_10930 = 10930; + static attribute_10931 = 10931; + static attribute_10932 = 10932; + static attribute_10933 = 10933; + static attribute_10934 = 10934; + static attribute_10935 = 10935; + static attribute_10936 = 10936; + static attribute_10937 = 10937; + static attribute_10938 = 10938; + static attribute_10939 = 10939; + static attribute_10940 = 10940; + static attribute_10941 = 10941; + static attribute_10942 = 10942; + static attribute_10943 = 10943; + static attribute_10944 = 10944; + static attribute_10945 = 10945; + static attribute_10946 = 10946; + static attribute_10947 = 10947; + static attribute_10948 = 10948; + static attribute_10949 = 10949; + static attribute_10950 = 10950; + static attribute_10951 = 10951; + static attribute_10952 = 10952; + static attribute_10953 = 10953; + static attribute_10954 = 10954; + static attribute_10955 = 10955; + static attribute_10956 = 10956; + static attribute_10957 = 10957; + static attribute_10958 = 10958; + static attribute_10959 = 10959; + static attribute_10960 = 10960; + static attribute_10961 = 10961; + static attribute_10962 = 10962; + static attribute_10963 = 10963; + static attribute_10964 = 10964; + static attribute_10965 = 10965; + static attribute_10966 = 10966; + static attribute_10967 = 10967; + static attribute_10968 = 10968; + static attribute_10969 = 10969; + static attribute_10970 = 10970; + static attribute_10971 = 10971; + static attribute_10972 = 10972; + static attribute_10973 = 10973; + static attribute_10974 = 10974; + static attribute_10975 = 10975; + static attribute_10976 = 10976; + static attribute_10977 = 10977; + static attribute_10978 = 10978; + static attribute_10979 = 10979; + static attribute_10980 = 10980; + static attribute_10981 = 10981; + static attribute_10982 = 10982; + static attribute_10983 = 10983; + static attribute_10984 = 10984; + static attribute_10985 = 10985; + static attribute_10986 = 10986; + static attribute_10987 = 10987; + static attribute_10988 = 10988; + static attribute_10989 = 10989; + static attribute_10990 = 10990; + static attribute_10991 = 10991; + static attribute_10992 = 10992; + static attribute_10993 = 10993; + static attribute_10994 = 10994; + static attribute_10995 = 10995; + static attribute_10996 = 10996; + static attribute_10997 = 10997; + static attribute_10998 = 10998; + static attribute_10999 = 10999; + static attribute_11000 = 11000; + static attribute_11001 = 11001; + static attribute_11002 = 11002; + static attribute_11003 = 11003; + static attribute_11004 = 11004; + static attribute_11005 = 11005; + static attribute_11006 = 11006; + static attribute_11007 = 11007; + static attribute_11008 = 11008; + static attribute_11009 = 11009; + static attribute_11010 = 11010; + static attribute_11011 = 11011; + static attribute_11012 = 11012; + static attribute_11013 = 11013; + static attribute_11014 = 11014; + static attribute_11015 = 11015; + static attribute_11016 = 11016; + static attribute_11017 = 11017; + static attribute_11018 = 11018; + static attribute_11019 = 11019; + static attribute_11020 = 11020; + static attribute_11021 = 11021; + static attribute_11022 = 11022; + static attribute_11023 = 11023; + static attribute_11024 = 11024; + static attribute_11025 = 11025; + static attribute_11026 = 11026; + static attribute_11027 = 11027; + static attribute_11028 = 11028; + static attribute_11029 = 11029; + static attribute_11030 = 11030; + static attribute_11031 = 11031; + static attribute_11032 = 11032; + static attribute_11033 = 11033; + static attribute_11034 = 11034; + static attribute_11035 = 11035; + static attribute_11036 = 11036; + static attribute_11037 = 11037; + static attribute_11038 = 11038; + static attribute_11039 = 11039; + static attribute_11040 = 11040; + static attribute_11041 = 11041; + static attribute_11042 = 11042; + static attribute_11043 = 11043; + static attribute_11044 = 11044; + static attribute_11045 = 11045; + static attribute_11046 = 11046; + static attribute_11047 = 11047; + static attribute_11048 = 11048; + static attribute_11049 = 11049; + static attribute_11050 = 11050; + static attribute_11051 = 11051; + static attribute_11052 = 11052; + static attribute_11053 = 11053; + static attribute_11054 = 11054; + static attribute_11055 = 11055; + static attribute_11056 = 11056; + static attribute_11057 = 11057; + static attribute_11058 = 11058; + static attribute_11059 = 11059; + static attribute_11060 = 11060; + static attribute_11061 = 11061; + static attribute_11062 = 11062; + static attribute_11063 = 11063; + static attribute_11064 = 11064; + static attribute_11065 = 11065; + static attribute_11066 = 11066; + static attribute_11067 = 11067; + static attribute_11068 = 11068; + static attribute_11069 = 11069; + static attribute_11070 = 11070; + static attribute_11071 = 11071; + static attribute_11072 = 11072; + static attribute_11073 = 11073; + static attribute_11074 = 11074; + static attribute_11075 = 11075; + static attribute_11076 = 11076; + static attribute_11077 = 11077; + static attribute_11078 = 11078; + static attribute_11079 = 11079; + static attribute_11080 = 11080; + static attribute_11081 = 11081; + static attribute_11082 = 11082; + static attribute_11083 = 11083; + static attribute_11084 = 11084; + static attribute_11085 = 11085; + static attribute_11086 = 11086; + static attribute_11087 = 11087; + static attribute_11088 = 11088; + static attribute_11089 = 11089; + static attribute_11090 = 11090; + static attribute_11091 = 11091; + static attribute_11092 = 11092; + static attribute_11093 = 11093; + static attribute_11094 = 11094; + static attribute_11095 = 11095; + static attribute_11096 = 11096; + static attribute_11097 = 11097; + static attribute_11098 = 11098; + static attribute_11099 = 11099; + static attribute_11100 = 11100; + static attribute_11101 = 11101; + static attribute_11102 = 11102; + static attribute_11103 = 11103; + static attribute_11104 = 11104; + static attribute_11105 = 11105; + static attribute_11106 = 11106; + static attribute_11107 = 11107; + static attribute_11108 = 11108; + static attribute_11109 = 11109; + static attribute_11110 = 11110; + static attribute_11111 = 11111; + static attribute_11112 = 11112; + static attribute_11113 = 11113; + static attribute_11114 = 11114; + static attribute_11115 = 11115; + static attribute_11116 = 11116; + static attribute_11117 = 11117; + static attribute_11118 = 11118; + static attribute_11119 = 11119; + static attribute_11120 = 11120; + static attribute_11121 = 11121; + static attribute_11122 = 11122; + static attribute_11123 = 11123; + static attribute_11124 = 11124; + static attribute_11125 = 11125; + static attribute_11126 = 11126; + static attribute_11127 = 11127; + static attribute_11128 = 11128; + static attribute_11129 = 11129; + static attribute_11130 = 11130; + static attribute_11131 = 11131; + static attribute_11132 = 11132; + static attribute_11133 = 11133; + static attribute_11134 = 11134; + static attribute_11135 = 11135; + static attribute_11136 = 11136; + static attribute_11137 = 11137; + static attribute_11138 = 11138; + static attribute_11139 = 11139; + static attribute_11140 = 11140; + static attribute_11141 = 11141; + static attribute_11142 = 11142; + static attribute_11143 = 11143; + static attribute_11144 = 11144; + static attribute_11145 = 11145; + static attribute_11146 = 11146; + static attribute_11147 = 11147; + static attribute_11148 = 11148; + static attribute_11149 = 11149; + static attribute_11150 = 11150; + static attribute_11151 = 11151; + static attribute_11152 = 11152; + static attribute_11153 = 11153; + static attribute_11154 = 11154; + static attribute_11155 = 11155; + static attribute_11156 = 11156; + static attribute_11157 = 11157; + static attribute_11158 = 11158; + static attribute_11159 = 11159; + static attribute_11160 = 11160; + static attribute_11161 = 11161; + static attribute_11162 = 11162; + static attribute_11163 = 11163; + static attribute_11164 = 11164; + static attribute_11165 = 11165; + static attribute_11166 = 11166; + static attribute_11167 = 11167; + static attribute_11168 = 11168; + static attribute_11169 = 11169; + static attribute_11170 = 11170; + static attribute_11171 = 11171; + static attribute_11172 = 11172; + static attribute_11173 = 11173; + static attribute_11174 = 11174; + static attribute_11175 = 11175; + static attribute_11176 = 11176; + static attribute_11177 = 11177; + static attribute_11178 = 11178; + static attribute_11179 = 11179; + static attribute_11180 = 11180; + static attribute_11181 = 11181; + static attribute_11182 = 11182; + static attribute_11183 = 11183; + static attribute_11184 = 11184; + static attribute_11185 = 11185; + static attribute_11186 = 11186; + static attribute_11187 = 11187; + static attribute_11188 = 11188; + static attribute_11189 = 11189; + static attribute_11190 = 11190; + static attribute_11191 = 11191; + static attribute_11192 = 11192; + static attribute_11193 = 11193; + static attribute_11194 = 11194; + static attribute_11195 = 11195; + static attribute_11196 = 11196; + static attribute_11197 = 11197; + static attribute_11198 = 11198; + static attribute_11199 = 11199; + static attribute_11200 = 11200; + static attribute_11201 = 11201; + static attribute_11202 = 11202; + static attribute_11203 = 11203; + static attribute_11204 = 11204; + static attribute_11205 = 11205; + static attribute_11206 = 11206; + static attribute_11207 = 11207; + static attribute_11208 = 11208; + static attribute_11209 = 11209; + static attribute_11210 = 11210; + static attribute_11211 = 11211; + static attribute_11212 = 11212; + static attribute_11213 = 11213; + static attribute_11214 = 11214; + static attribute_11215 = 11215; + static attribute_11216 = 11216; + static attribute_11217 = 11217; + static attribute_11218 = 11218; + static attribute_11219 = 11219; + static attribute_11220 = 11220; + static attribute_11221 = 11221; + static attribute_11222 = 11222; + static attribute_11223 = 11223; + static attribute_11224 = 11224; + static attribute_11225 = 11225; + static attribute_11226 = 11226; + static attribute_11227 = 11227; + static attribute_11228 = 11228; + static attribute_11229 = 11229; + static attribute_11230 = 11230; + static attribute_11231 = 11231; + static attribute_11232 = 11232; + static attribute_11233 = 11233; + static attribute_11234 = 11234; + static attribute_11235 = 11235; + static attribute_11236 = 11236; + static attribute_11237 = 11237; + static attribute_11238 = 11238; + static attribute_11239 = 11239; + static attribute_11240 = 11240; + static attribute_11241 = 11241; + static attribute_11242 = 11242; + static attribute_11243 = 11243; + static attribute_11244 = 11244; + static attribute_11245 = 11245; + static attribute_11246 = 11246; + static attribute_11247 = 11247; + static attribute_11248 = 11248; + static attribute_11249 = 11249; + static attribute_11250 = 11250; + static attribute_11251 = 11251; + static attribute_11252 = 11252; + static attribute_11253 = 11253; + static attribute_11254 = 11254; + static attribute_11255 = 11255; + static attribute_11256 = 11256; + static attribute_11257 = 11257; + static attribute_11258 = 11258; + static attribute_11259 = 11259; + static attribute_11260 = 11260; + static attribute_11261 = 11261; + static attribute_11262 = 11262; + static attribute_11263 = 11263; + static attribute_11264 = 11264; + static attribute_11265 = 11265; + static attribute_11266 = 11266; + static attribute_11267 = 11267; + static attribute_11268 = 11268; + static attribute_11269 = 11269; + static attribute_11270 = 11270; + static attribute_11271 = 11271; + static attribute_11272 = 11272; + static attribute_11273 = 11273; + static attribute_11274 = 11274; + static attribute_11275 = 11275; + static attribute_11276 = 11276; + static attribute_11277 = 11277; + static attribute_11278 = 11278; + static attribute_11279 = 11279; + static attribute_11280 = 11280; + static attribute_11281 = 11281; + static attribute_11282 = 11282; + static attribute_11283 = 11283; + static attribute_11284 = 11284; + static attribute_11285 = 11285; + static attribute_11286 = 11286; + static attribute_11287 = 11287; + static attribute_11288 = 11288; + static attribute_11289 = 11289; + static attribute_11290 = 11290; + static attribute_11291 = 11291; + static attribute_11292 = 11292; + static attribute_11293 = 11293; + static attribute_11294 = 11294; + static attribute_11295 = 11295; + static attribute_11296 = 11296; + static attribute_11297 = 11297; + static attribute_11298 = 11298; + static attribute_11299 = 11299; + static attribute_11300 = 11300; + static attribute_11301 = 11301; + static attribute_11302 = 11302; + static attribute_11303 = 11303; + static attribute_11304 = 11304; + static attribute_11305 = 11305; + static attribute_11306 = 11306; + static attribute_11307 = 11307; + static attribute_11308 = 11308; + static attribute_11309 = 11309; + static attribute_11310 = 11310; + static attribute_11311 = 11311; + static attribute_11312 = 11312; + static attribute_11313 = 11313; + static attribute_11314 = 11314; + static attribute_11315 = 11315; + static attribute_11316 = 11316; + static attribute_11317 = 11317; + static attribute_11318 = 11318; + static attribute_11319 = 11319; + static attribute_11320 = 11320; + static attribute_11321 = 11321; + static attribute_11322 = 11322; + static attribute_11323 = 11323; + static attribute_11324 = 11324; + static attribute_11325 = 11325; + static attribute_11326 = 11326; + static attribute_11327 = 11327; + static attribute_11328 = 11328; + static attribute_11329 = 11329; + static attribute_11330 = 11330; + static attribute_11331 = 11331; + static attribute_11332 = 11332; + static attribute_11333 = 11333; + static attribute_11334 = 11334; + static attribute_11335 = 11335; + static attribute_11336 = 11336; + static attribute_11337 = 11337; + static attribute_11338 = 11338; + static attribute_11339 = 11339; + static attribute_11340 = 11340; + static attribute_11341 = 11341; + static attribute_11342 = 11342; + static attribute_11343 = 11343; + static attribute_11344 = 11344; + static attribute_11345 = 11345; + static attribute_11346 = 11346; + static attribute_11347 = 11347; + static attribute_11348 = 11348; + static attribute_11349 = 11349; + static attribute_11350 = 11350; + static attribute_11351 = 11351; + static attribute_11352 = 11352; + static attribute_11353 = 11353; + static attribute_11354 = 11354; + static attribute_11355 = 11355; + static attribute_11356 = 11356; + static attribute_11357 = 11357; + static attribute_11358 = 11358; + static attribute_11359 = 11359; + static attribute_11360 = 11360; + static attribute_11361 = 11361; + static attribute_11362 = 11362; + static attribute_11363 = 11363; + static attribute_11364 = 11364; + static attribute_11365 = 11365; + static attribute_11366 = 11366; + static attribute_11367 = 11367; + static attribute_11368 = 11368; + static attribute_11369 = 11369; + static attribute_11370 = 11370; + static attribute_11371 = 11371; + static attribute_11372 = 11372; + static attribute_11373 = 11373; + static attribute_11374 = 11374; + static attribute_11375 = 11375; + static attribute_11376 = 11376; + static attribute_11377 = 11377; + static attribute_11378 = 11378; + static attribute_11379 = 11379; + static attribute_11380 = 11380; + static attribute_11381 = 11381; + static attribute_11382 = 11382; + static attribute_11383 = 11383; + static attribute_11384 = 11384; + static attribute_11385 = 11385; + static attribute_11386 = 11386; + static attribute_11387 = 11387; + static attribute_11388 = 11388; + static attribute_11389 = 11389; + static attribute_11390 = 11390; + static attribute_11391 = 11391; + static attribute_11392 = 11392; + static attribute_11393 = 11393; + static attribute_11394 = 11394; + static attribute_11395 = 11395; + static attribute_11396 = 11396; + static attribute_11397 = 11397; + static attribute_11398 = 11398; + static attribute_11399 = 11399; + static attribute_11400 = 11400; + static attribute_11401 = 11401; + static attribute_11402 = 11402; + static attribute_11403 = 11403; + static attribute_11404 = 11404; + static attribute_11405 = 11405; + static attribute_11406 = 11406; + static attribute_11407 = 11407; + static attribute_11408 = 11408; + static attribute_11409 = 11409; + static attribute_11410 = 11410; + static attribute_11411 = 11411; + static attribute_11412 = 11412; + static attribute_11413 = 11413; + static attribute_11414 = 11414; + static attribute_11415 = 11415; + static attribute_11416 = 11416; + static attribute_11417 = 11417; + static attribute_11418 = 11418; + static attribute_11419 = 11419; + static attribute_11420 = 11420; + static attribute_11421 = 11421; + static attribute_11422 = 11422; + static attribute_11423 = 11423; + static attribute_11424 = 11424; + static attribute_11425 = 11425; + static attribute_11426 = 11426; + static attribute_11427 = 11427; + static attribute_11428 = 11428; + static attribute_11429 = 11429; + static attribute_11430 = 11430; + static attribute_11431 = 11431; + static attribute_11432 = 11432; + static attribute_11433 = 11433; + static attribute_11434 = 11434; + static attribute_11435 = 11435; + static attribute_11436 = 11436; + static attribute_11437 = 11437; + static attribute_11438 = 11438; + static attribute_11439 = 11439; + static attribute_11440 = 11440; + static attribute_11441 = 11441; + static attribute_11442 = 11442; + static attribute_11443 = 11443; + static attribute_11444 = 11444; + static attribute_11445 = 11445; + static attribute_11446 = 11446; + static attribute_11447 = 11447; + static attribute_11448 = 11448; + static attribute_11449 = 11449; + static attribute_11450 = 11450; + static attribute_11451 = 11451; + static attribute_11452 = 11452; + static attribute_11453 = 11453; + static attribute_11454 = 11454; + static attribute_11455 = 11455; + static attribute_11456 = 11456; + static attribute_11457 = 11457; + static attribute_11458 = 11458; + static attribute_11459 = 11459; + static attribute_11460 = 11460; + static attribute_11461 = 11461; + static attribute_11462 = 11462; + static attribute_11463 = 11463; + static attribute_11464 = 11464; + static attribute_11465 = 11465; + static attribute_11466 = 11466; + static attribute_11467 = 11467; + static attribute_11468 = 11468; + static attribute_11469 = 11469; + static attribute_11470 = 11470; + static attribute_11471 = 11471; + static attribute_11472 = 11472; + static attribute_11473 = 11473; + static attribute_11474 = 11474; + static attribute_11475 = 11475; + static attribute_11476 = 11476; + static attribute_11477 = 11477; + static attribute_11478 = 11478; + static attribute_11479 = 11479; + static attribute_11480 = 11480; + static attribute_11481 = 11481; + static attribute_11482 = 11482; + static attribute_11483 = 11483; + static attribute_11484 = 11484; + static attribute_11485 = 11485; + static attribute_11486 = 11486; + static attribute_11487 = 11487; + static attribute_11488 = 11488; + static attribute_11489 = 11489; + static attribute_11490 = 11490; + static attribute_11491 = 11491; + static attribute_11492 = 11492; + static attribute_11493 = 11493; + static attribute_11494 = 11494; + static attribute_11495 = 11495; + static attribute_11496 = 11496; + static attribute_11497 = 11497; + static attribute_11498 = 11498; + static attribute_11499 = 11499; + static attribute_11500 = 11500; + static attribute_11501 = 11501; + static attribute_11502 = 11502; + static attribute_11503 = 11503; + static attribute_11504 = 11504; + static attribute_11505 = 11505; + static attribute_11506 = 11506; + static attribute_11507 = 11507; + static attribute_11508 = 11508; + static attribute_11509 = 11509; + static attribute_11510 = 11510; + static attribute_11511 = 11511; + static attribute_11512 = 11512; + static attribute_11513 = 11513; + static attribute_11514 = 11514; + static attribute_11515 = 11515; + static attribute_11516 = 11516; + static attribute_11517 = 11517; + static attribute_11518 = 11518; + static attribute_11519 = 11519; + static attribute_11520 = 11520; + static attribute_11521 = 11521; + static attribute_11522 = 11522; + static attribute_11523 = 11523; + static attribute_11524 = 11524; + static attribute_11525 = 11525; + static attribute_11526 = 11526; + static attribute_11527 = 11527; + static attribute_11528 = 11528; + static attribute_11529 = 11529; + static attribute_11530 = 11530; + static attribute_11531 = 11531; + static attribute_11532 = 11532; + static attribute_11533 = 11533; + static attribute_11534 = 11534; + static attribute_11535 = 11535; + static attribute_11536 = 11536; + static attribute_11537 = 11537; + static attribute_11538 = 11538; + static attribute_11539 = 11539; + static attribute_11540 = 11540; + static attribute_11541 = 11541; + static attribute_11542 = 11542; + static attribute_11543 = 11543; + static attribute_11544 = 11544; + static attribute_11545 = 11545; + static attribute_11546 = 11546; + static attribute_11547 = 11547; + static attribute_11548 = 11548; + static attribute_11549 = 11549; + static attribute_11550 = 11550; + static attribute_11551 = 11551; + static attribute_11552 = 11552; + static attribute_11553 = 11553; + static attribute_11554 = 11554; + static attribute_11555 = 11555; + static attribute_11556 = 11556; + static attribute_11557 = 11557; + static attribute_11558 = 11558; + static attribute_11559 = 11559; + static attribute_11560 = 11560; + static attribute_11561 = 11561; + static attribute_11562 = 11562; + static attribute_11563 = 11563; + static attribute_11564 = 11564; + static attribute_11565 = 11565; + static attribute_11566 = 11566; + static attribute_11567 = 11567; + static attribute_11568 = 11568; + static attribute_11569 = 11569; + static attribute_11570 = 11570; + static attribute_11571 = 11571; + static attribute_11572 = 11572; + static attribute_11573 = 11573; + static attribute_11574 = 11574; + static attribute_11575 = 11575; + static attribute_11576 = 11576; + static attribute_11577 = 11577; + static attribute_11578 = 11578; + static attribute_11579 = 11579; + static attribute_11580 = 11580; + static attribute_11581 = 11581; + static attribute_11582 = 11582; + static attribute_11583 = 11583; + static attribute_11584 = 11584; + static attribute_11585 = 11585; + static attribute_11586 = 11586; + static attribute_11587 = 11587; + static attribute_11588 = 11588; + static attribute_11589 = 11589; + static attribute_11590 = 11590; + static attribute_11591 = 11591; + static attribute_11592 = 11592; + static attribute_11593 = 11593; + static attribute_11594 = 11594; + static attribute_11595 = 11595; + static attribute_11596 = 11596; + static attribute_11597 = 11597; + static attribute_11598 = 11598; + static attribute_11599 = 11599; + static attribute_11600 = 11600; + static attribute_11601 = 11601; + static attribute_11602 = 11602; + static attribute_11603 = 11603; + static attribute_11604 = 11604; + static attribute_11605 = 11605; + static attribute_11606 = 11606; + static attribute_11607 = 11607; + static attribute_11608 = 11608; + static attribute_11609 = 11609; + static attribute_11610 = 11610; + static attribute_11611 = 11611; + static attribute_11612 = 11612; + static attribute_11613 = 11613; + static attribute_11614 = 11614; + static attribute_11615 = 11615; + static attribute_11616 = 11616; + static attribute_11617 = 11617; + static attribute_11618 = 11618; + static attribute_11619 = 11619; + static attribute_11620 = 11620; + static attribute_11621 = 11621; + static attribute_11622 = 11622; + static attribute_11623 = 11623; + static attribute_11624 = 11624; + static attribute_11625 = 11625; + static attribute_11626 = 11626; + static attribute_11627 = 11627; + static attribute_11628 = 11628; + static attribute_11629 = 11629; + static attribute_11630 = 11630; + static attribute_11631 = 11631; + static attribute_11632 = 11632; + static attribute_11633 = 11633; + static attribute_11634 = 11634; + static attribute_11635 = 11635; + static attribute_11636 = 11636; + static attribute_11637 = 11637; + static attribute_11638 = 11638; + static attribute_11639 = 11639; + static attribute_11640 = 11640; + static attribute_11641 = 11641; + static attribute_11642 = 11642; + static attribute_11643 = 11643; + static attribute_11644 = 11644; + static attribute_11645 = 11645; + static attribute_11646 = 11646; + static attribute_11647 = 11647; + static attribute_11648 = 11648; + static attribute_11649 = 11649; + static attribute_11650 = 11650; + static attribute_11651 = 11651; + static attribute_11652 = 11652; + static attribute_11653 = 11653; + static attribute_11654 = 11654; + static attribute_11655 = 11655; + static attribute_11656 = 11656; + static attribute_11657 = 11657; + static attribute_11658 = 11658; + static attribute_11659 = 11659; + static attribute_11660 = 11660; + static attribute_11661 = 11661; + static attribute_11662 = 11662; + static attribute_11663 = 11663; + static attribute_11664 = 11664; + static attribute_11665 = 11665; + static attribute_11666 = 11666; + static attribute_11667 = 11667; + static attribute_11668 = 11668; + static attribute_11669 = 11669; + static attribute_11670 = 11670; + static attribute_11671 = 11671; + static attribute_11672 = 11672; + static attribute_11673 = 11673; + static attribute_11674 = 11674; + static attribute_11675 = 11675; + static attribute_11676 = 11676; + static attribute_11677 = 11677; + static attribute_11678 = 11678; + static attribute_11679 = 11679; + static attribute_11680 = 11680; + static attribute_11681 = 11681; + static attribute_11682 = 11682; + static attribute_11683 = 11683; + static attribute_11684 = 11684; + static attribute_11685 = 11685; + static attribute_11686 = 11686; + static attribute_11687 = 11687; + static attribute_11688 = 11688; + static attribute_11689 = 11689; + static attribute_11690 = 11690; + static attribute_11691 = 11691; + static attribute_11692 = 11692; + static attribute_11693 = 11693; + static attribute_11694 = 11694; + static attribute_11695 = 11695; + static attribute_11696 = 11696; + static attribute_11697 = 11697; + static attribute_11698 = 11698; + static attribute_11699 = 11699; + static attribute_11700 = 11700; + static attribute_11701 = 11701; + static attribute_11702 = 11702; + static attribute_11703 = 11703; + static attribute_11704 = 11704; + static attribute_11705 = 11705; + static attribute_11706 = 11706; + static attribute_11707 = 11707; + static attribute_11708 = 11708; + static attribute_11709 = 11709; + static attribute_11710 = 11710; + static attribute_11711 = 11711; + static attribute_11712 = 11712; + static attribute_11713 = 11713; + static attribute_11714 = 11714; + static attribute_11715 = 11715; + static attribute_11716 = 11716; + static attribute_11717 = 11717; + static attribute_11718 = 11718; + static attribute_11719 = 11719; + static attribute_11720 = 11720; + static attribute_11721 = 11721; + static attribute_11722 = 11722; + static attribute_11723 = 11723; + static attribute_11724 = 11724; + static attribute_11725 = 11725; + static attribute_11726 = 11726; + static attribute_11727 = 11727; + static attribute_11728 = 11728; + static attribute_11729 = 11729; + static attribute_11730 = 11730; + static attribute_11731 = 11731; + static attribute_11732 = 11732; + static attribute_11733 = 11733; + static attribute_11734 = 11734; + static attribute_11735 = 11735; + static attribute_11736 = 11736; + static attribute_11737 = 11737; + static attribute_11738 = 11738; + static attribute_11739 = 11739; + static attribute_11740 = 11740; + static attribute_11741 = 11741; + static attribute_11742 = 11742; + static attribute_11743 = 11743; + static attribute_11744 = 11744; + static attribute_11745 = 11745; + static attribute_11746 = 11746; + static attribute_11747 = 11747; + static attribute_11748 = 11748; + static attribute_11749 = 11749; + static attribute_11750 = 11750; + static attribute_11751 = 11751; + static attribute_11752 = 11752; + static attribute_11753 = 11753; + static attribute_11754 = 11754; + static attribute_11755 = 11755; + static attribute_11756 = 11756; + static attribute_11757 = 11757; + static attribute_11758 = 11758; + static attribute_11759 = 11759; + static attribute_11760 = 11760; + static attribute_11761 = 11761; + static attribute_11762 = 11762; + static attribute_11763 = 11763; + static attribute_11764 = 11764; + static attribute_11765 = 11765; + static attribute_11766 = 11766; + static attribute_11767 = 11767; + static attribute_11768 = 11768; + static attribute_11769 = 11769; + static attribute_11770 = 11770; + static attribute_11771 = 11771; + static attribute_11772 = 11772; + static attribute_11773 = 11773; + static attribute_11774 = 11774; + static attribute_11775 = 11775; + static attribute_11776 = 11776; + static attribute_11777 = 11777; + static attribute_11778 = 11778; + static attribute_11779 = 11779; + static attribute_11780 = 11780; + static attribute_11781 = 11781; + static attribute_11782 = 11782; + static attribute_11783 = 11783; + static attribute_11784 = 11784; + static attribute_11785 = 11785; + static attribute_11786 = 11786; + static attribute_11787 = 11787; + static attribute_11788 = 11788; + static attribute_11789 = 11789; + static attribute_11790 = 11790; + static attribute_11791 = 11791; + static attribute_11792 = 11792; + static attribute_11793 = 11793; + static attribute_11794 = 11794; + static attribute_11795 = 11795; + static attribute_11796 = 11796; + static attribute_11797 = 11797; + static attribute_11798 = 11798; + static attribute_11799 = 11799; + static attribute_11800 = 11800; + static attribute_11801 = 11801; + static attribute_11802 = 11802; + static attribute_11803 = 11803; + static attribute_11804 = 11804; + static attribute_11805 = 11805; + static attribute_11806 = 11806; + static attribute_11807 = 11807; + static attribute_11808 = 11808; + static attribute_11809 = 11809; + static attribute_11810 = 11810; + static attribute_11811 = 11811; + static attribute_11812 = 11812; + static attribute_11813 = 11813; + static attribute_11814 = 11814; + static attribute_11815 = 11815; + static attribute_11816 = 11816; + static attribute_11817 = 11817; + static attribute_11818 = 11818; + static attribute_11819 = 11819; + static attribute_11820 = 11820; + static attribute_11821 = 11821; + static attribute_11822 = 11822; + static attribute_11823 = 11823; + static attribute_11824 = 11824; + static attribute_11825 = 11825; + static attribute_11826 = 11826; + static attribute_11827 = 11827; + static attribute_11828 = 11828; + static attribute_11829 = 11829; + static attribute_11830 = 11830; + static attribute_11831 = 11831; + static attribute_11832 = 11832; + static attribute_11833 = 11833; + static attribute_11834 = 11834; + static attribute_11835 = 11835; + static attribute_11836 = 11836; + static attribute_11837 = 11837; + static attribute_11838 = 11838; + static attribute_11839 = 11839; + static attribute_11840 = 11840; + static attribute_11841 = 11841; + static attribute_11842 = 11842; + static attribute_11843 = 11843; + static attribute_11844 = 11844; + static attribute_11845 = 11845; + static attribute_11846 = 11846; + static attribute_11847 = 11847; + static attribute_11848 = 11848; + static attribute_11849 = 11849; + static attribute_11850 = 11850; + static attribute_11851 = 11851; + static attribute_11852 = 11852; + static attribute_11853 = 11853; + static attribute_11854 = 11854; + static attribute_11855 = 11855; + static attribute_11856 = 11856; + static attribute_11857 = 11857; + static attribute_11858 = 11858; + static attribute_11859 = 11859; + static attribute_11860 = 11860; + static attribute_11861 = 11861; + static attribute_11862 = 11862; + static attribute_11863 = 11863; + static attribute_11864 = 11864; + static attribute_11865 = 11865; + static attribute_11866 = 11866; + static attribute_11867 = 11867; + static attribute_11868 = 11868; + static attribute_11869 = 11869; + static attribute_11870 = 11870; + static attribute_11871 = 11871; + static attribute_11872 = 11872; + static attribute_11873 = 11873; + static attribute_11874 = 11874; + static attribute_11875 = 11875; + static attribute_11876 = 11876; + static attribute_11877 = 11877; + static attribute_11878 = 11878; + static attribute_11879 = 11879; + static attribute_11880 = 11880; + static attribute_11881 = 11881; + static attribute_11882 = 11882; + static attribute_11883 = 11883; + static attribute_11884 = 11884; + static attribute_11885 = 11885; + static attribute_11886 = 11886; + static attribute_11887 = 11887; + static attribute_11888 = 11888; + static attribute_11889 = 11889; + static attribute_11890 = 11890; + static attribute_11891 = 11891; + static attribute_11892 = 11892; + static attribute_11893 = 11893; + static attribute_11894 = 11894; + static attribute_11895 = 11895; + static attribute_11896 = 11896; + static attribute_11897 = 11897; + static attribute_11898 = 11898; + static attribute_11899 = 11899; + static attribute_11900 = 11900; + static attribute_11901 = 11901; + static attribute_11902 = 11902; + static attribute_11903 = 11903; + static attribute_11904 = 11904; + static attribute_11905 = 11905; + static attribute_11906 = 11906; + static attribute_11907 = 11907; + static attribute_11908 = 11908; + static attribute_11909 = 11909; + static attribute_11910 = 11910; + static attribute_11911 = 11911; + static attribute_11912 = 11912; + static attribute_11913 = 11913; + static attribute_11914 = 11914; + static attribute_11915 = 11915; + static attribute_11916 = 11916; + static attribute_11917 = 11917; + static attribute_11918 = 11918; + static attribute_11919 = 11919; + static attribute_11920 = 11920; + static attribute_11921 = 11921; + static attribute_11922 = 11922; + static attribute_11923 = 11923; + static attribute_11924 = 11924; + static attribute_11925 = 11925; + static attribute_11926 = 11926; + static attribute_11927 = 11927; + static attribute_11928 = 11928; + static attribute_11929 = 11929; + static attribute_11930 = 11930; + static attribute_11931 = 11931; + static attribute_11932 = 11932; + static attribute_11933 = 11933; + static attribute_11934 = 11934; + static attribute_11935 = 11935; + static attribute_11936 = 11936; + static attribute_11937 = 11937; + static attribute_11938 = 11938; + static attribute_11939 = 11939; + static attribute_11940 = 11940; + static attribute_11941 = 11941; + static attribute_11942 = 11942; + static attribute_11943 = 11943; + static attribute_11944 = 11944; + static attribute_11945 = 11945; + static attribute_11946 = 11946; + static attribute_11947 = 11947; + static attribute_11948 = 11948; + static attribute_11949 = 11949; + static attribute_11950 = 11950; + static attribute_11951 = 11951; + static attribute_11952 = 11952; + static attribute_11953 = 11953; + static attribute_11954 = 11954; + static attribute_11955 = 11955; + static attribute_11956 = 11956; + static attribute_11957 = 11957; + static attribute_11958 = 11958; + static attribute_11959 = 11959; + static attribute_11960 = 11960; + static attribute_11961 = 11961; + static attribute_11962 = 11962; + static attribute_11963 = 11963; + static attribute_11964 = 11964; + static attribute_11965 = 11965; + static attribute_11966 = 11966; + static attribute_11967 = 11967; + static attribute_11968 = 11968; + static attribute_11969 = 11969; + static attribute_11970 = 11970; + static attribute_11971 = 11971; + static attribute_11972 = 11972; + static attribute_11973 = 11973; + static attribute_11974 = 11974; + static attribute_11975 = 11975; + static attribute_11976 = 11976; + static attribute_11977 = 11977; + static attribute_11978 = 11978; + static attribute_11979 = 11979; + static attribute_11980 = 11980; + static attribute_11981 = 11981; + static attribute_11982 = 11982; + static attribute_11983 = 11983; + static attribute_11984 = 11984; + static attribute_11985 = 11985; + static attribute_11986 = 11986; + static attribute_11987 = 11987; + static attribute_11988 = 11988; + static attribute_11989 = 11989; + static attribute_11990 = 11990; + static attribute_11991 = 11991; + static attribute_11992 = 11992; + static attribute_11993 = 11993; + static attribute_11994 = 11994; + static attribute_11995 = 11995; + static attribute_11996 = 11996; + static attribute_11997 = 11997; + static attribute_11998 = 11998; + static attribute_11999 = 11999; + static attribute_12000 = 12000; + static attribute_12001 = 12001; + static attribute_12002 = 12002; + static attribute_12003 = 12003; + static attribute_12004 = 12004; + static attribute_12005 = 12005; + static attribute_12006 = 12006; + static attribute_12007 = 12007; + static attribute_12008 = 12008; + static attribute_12009 = 12009; + static attribute_12010 = 12010; + static attribute_12011 = 12011; + static attribute_12012 = 12012; + static attribute_12013 = 12013; + static attribute_12014 = 12014; + static attribute_12015 = 12015; + static attribute_12016 = 12016; + static attribute_12017 = 12017; + static attribute_12018 = 12018; + static attribute_12019 = 12019; + static attribute_12020 = 12020; + static attribute_12021 = 12021; + static attribute_12022 = 12022; + static attribute_12023 = 12023; + static attribute_12024 = 12024; + static attribute_12025 = 12025; + static attribute_12026 = 12026; + static attribute_12027 = 12027; + static attribute_12028 = 12028; + static attribute_12029 = 12029; + static attribute_12030 = 12030; + static attribute_12031 = 12031; + static attribute_12032 = 12032; + static attribute_12033 = 12033; + static attribute_12034 = 12034; + static attribute_12035 = 12035; + static attribute_12036 = 12036; + static attribute_12037 = 12037; + static attribute_12038 = 12038; + static attribute_12039 = 12039; + static attribute_12040 = 12040; + static attribute_12041 = 12041; + static attribute_12042 = 12042; + static attribute_12043 = 12043; + static attribute_12044 = 12044; + static attribute_12045 = 12045; + static attribute_12046 = 12046; + static attribute_12047 = 12047; + static attribute_12048 = 12048; + static attribute_12049 = 12049; + static attribute_12050 = 12050; + static attribute_12051 = 12051; + static attribute_12052 = 12052; + static attribute_12053 = 12053; + static attribute_12054 = 12054; + static attribute_12055 = 12055; + static attribute_12056 = 12056; + static attribute_12057 = 12057; + static attribute_12058 = 12058; + static attribute_12059 = 12059; + static attribute_12060 = 12060; + static attribute_12061 = 12061; + static attribute_12062 = 12062; + static attribute_12063 = 12063; + static attribute_12064 = 12064; + static attribute_12065 = 12065; + static attribute_12066 = 12066; + static attribute_12067 = 12067; + static attribute_12068 = 12068; + static attribute_12069 = 12069; + static attribute_12070 = 12070; + static attribute_12071 = 12071; + static attribute_12072 = 12072; + static attribute_12073 = 12073; + static attribute_12074 = 12074; + static attribute_12075 = 12075; + static attribute_12076 = 12076; + static attribute_12077 = 12077; + static attribute_12078 = 12078; + static attribute_12079 = 12079; + static attribute_12080 = 12080; + static attribute_12081 = 12081; + static attribute_12082 = 12082; + static attribute_12083 = 12083; + static attribute_12084 = 12084; + static attribute_12085 = 12085; + static attribute_12086 = 12086; + static attribute_12087 = 12087; + static attribute_12088 = 12088; + static attribute_12089 = 12089; + static attribute_12090 = 12090; + static attribute_12091 = 12091; + static attribute_12092 = 12092; + static attribute_12093 = 12093; + static attribute_12094 = 12094; + static attribute_12095 = 12095; + static attribute_12096 = 12096; + static attribute_12097 = 12097; + static attribute_12098 = 12098; + static attribute_12099 = 12099; + static attribute_12100 = 12100; + static attribute_12101 = 12101; + static attribute_12102 = 12102; + static attribute_12103 = 12103; + static attribute_12104 = 12104; + static attribute_12105 = 12105; + static attribute_12106 = 12106; + static attribute_12107 = 12107; + static attribute_12108 = 12108; + static attribute_12109 = 12109; + static attribute_12110 = 12110; + static attribute_12111 = 12111; + static attribute_12112 = 12112; + static attribute_12113 = 12113; + static attribute_12114 = 12114; + static attribute_12115 = 12115; + static attribute_12116 = 12116; + static attribute_12117 = 12117; + static attribute_12118 = 12118; + static attribute_12119 = 12119; + static attribute_12120 = 12120; + static attribute_12121 = 12121; + static attribute_12122 = 12122; + static attribute_12123 = 12123; + static attribute_12124 = 12124; + static attribute_12125 = 12125; + static attribute_12126 = 12126; + static attribute_12127 = 12127; + static attribute_12128 = 12128; + static attribute_12129 = 12129; + static attribute_12130 = 12130; + static attribute_12131 = 12131; + static attribute_12132 = 12132; + static attribute_12133 = 12133; + static attribute_12134 = 12134; + static attribute_12135 = 12135; + static attribute_12136 = 12136; + static attribute_12137 = 12137; + static attribute_12138 = 12138; + static attribute_12139 = 12139; + static attribute_12140 = 12140; + static attribute_12141 = 12141; + static attribute_12142 = 12142; + static attribute_12143 = 12143; + static attribute_12144 = 12144; + static attribute_12145 = 12145; + static attribute_12146 = 12146; + static attribute_12147 = 12147; + static attribute_12148 = 12148; + static attribute_12149 = 12149; + static attribute_12150 = 12150; + static attribute_12151 = 12151; + static attribute_12152 = 12152; + static attribute_12153 = 12153; + static attribute_12154 = 12154; + static attribute_12155 = 12155; + static attribute_12156 = 12156; + static attribute_12157 = 12157; + static attribute_12158 = 12158; + static attribute_12159 = 12159; + static attribute_12160 = 12160; + static attribute_12161 = 12161; + static attribute_12162 = 12162; + static attribute_12163 = 12163; + static attribute_12164 = 12164; + static attribute_12165 = 12165; + static attribute_12166 = 12166; + static attribute_12167 = 12167; + static attribute_12168 = 12168; + static attribute_12169 = 12169; + static attribute_12170 = 12170; + static attribute_12171 = 12171; + static attribute_12172 = 12172; + static attribute_12173 = 12173; + static attribute_12174 = 12174; + static attribute_12175 = 12175; + static attribute_12176 = 12176; + static attribute_12177 = 12177; + static attribute_12178 = 12178; + static attribute_12179 = 12179; + static attribute_12180 = 12180; + static attribute_12181 = 12181; + static attribute_12182 = 12182; + static attribute_12183 = 12183; + static attribute_12184 = 12184; + static attribute_12185 = 12185; + static attribute_12186 = 12186; + static attribute_12187 = 12187; + static attribute_12188 = 12188; + static attribute_12189 = 12189; + static attribute_12190 = 12190; + static attribute_12191 = 12191; + static attribute_12192 = 12192; + static attribute_12193 = 12193; + static attribute_12194 = 12194; + static attribute_12195 = 12195; + static attribute_12196 = 12196; + static attribute_12197 = 12197; + static attribute_12198 = 12198; + static attribute_12199 = 12199; + static attribute_12200 = 12200; + static attribute_12201 = 12201; + static attribute_12202 = 12202; + static attribute_12203 = 12203; + static attribute_12204 = 12204; + static attribute_12205 = 12205; + static attribute_12206 = 12206; + static attribute_12207 = 12207; + static attribute_12208 = 12208; + static attribute_12209 = 12209; + static attribute_12210 = 12210; + static attribute_12211 = 12211; + static attribute_12212 = 12212; + static attribute_12213 = 12213; + static attribute_12214 = 12214; + static attribute_12215 = 12215; + static attribute_12216 = 12216; + static attribute_12217 = 12217; + static attribute_12218 = 12218; + static attribute_12219 = 12219; + static attribute_12220 = 12220; + static attribute_12221 = 12221; + static attribute_12222 = 12222; + static attribute_12223 = 12223; + static attribute_12224 = 12224; + static attribute_12225 = 12225; + static attribute_12226 = 12226; + static attribute_12227 = 12227; + static attribute_12228 = 12228; + static attribute_12229 = 12229; + static attribute_12230 = 12230; + static attribute_12231 = 12231; + static attribute_12232 = 12232; + static attribute_12233 = 12233; + static attribute_12234 = 12234; + static attribute_12235 = 12235; + static attribute_12236 = 12236; + static attribute_12237 = 12237; + static attribute_12238 = 12238; + static attribute_12239 = 12239; + static attribute_12240 = 12240; + static attribute_12241 = 12241; + static attribute_12242 = 12242; + static attribute_12243 = 12243; + static attribute_12244 = 12244; + static attribute_12245 = 12245; + static attribute_12246 = 12246; + static attribute_12247 = 12247; + static attribute_12248 = 12248; + static attribute_12249 = 12249; + static attribute_12250 = 12250; + static attribute_12251 = 12251; + static attribute_12252 = 12252; + static attribute_12253 = 12253; + static attribute_12254 = 12254; + static attribute_12255 = 12255; + static attribute_12256 = 12256; + static attribute_12257 = 12257; + static attribute_12258 = 12258; + static attribute_12259 = 12259; + static attribute_12260 = 12260; + static attribute_12261 = 12261; + static attribute_12262 = 12262; + static attribute_12263 = 12263; + static attribute_12264 = 12264; + static attribute_12265 = 12265; + static attribute_12266 = 12266; + static attribute_12267 = 12267; + static attribute_12268 = 12268; + static attribute_12269 = 12269; + static attribute_12270 = 12270; + static attribute_12271 = 12271; + static attribute_12272 = 12272; + static attribute_12273 = 12273; + static attribute_12274 = 12274; + static attribute_12275 = 12275; + static attribute_12276 = 12276; + static attribute_12277 = 12277; + static attribute_12278 = 12278; + static attribute_12279 = 12279; + static attribute_12280 = 12280; + static attribute_12281 = 12281; + static attribute_12282 = 12282; + static attribute_12283 = 12283; + static attribute_12284 = 12284; + static attribute_12285 = 12285; + static attribute_12286 = 12286; + static attribute_12287 = 12287; + static attribute_12288 = 12288; + static attribute_12289 = 12289; + static attribute_12290 = 12290; + static attribute_12291 = 12291; + static attribute_12292 = 12292; + static attribute_12293 = 12293; + static attribute_12294 = 12294; + static attribute_12295 = 12295; + static attribute_12296 = 12296; + static attribute_12297 = 12297; + static attribute_12298 = 12298; + static attribute_12299 = 12299; + static attribute_12300 = 12300; + static attribute_12301 = 12301; + static attribute_12302 = 12302; + static attribute_12303 = 12303; + static attribute_12304 = 12304; + static attribute_12305 = 12305; + static attribute_12306 = 12306; + static attribute_12307 = 12307; + static attribute_12308 = 12308; + static attribute_12309 = 12309; + static attribute_12310 = 12310; + static attribute_12311 = 12311; + static attribute_12312 = 12312; + static attribute_12313 = 12313; + static attribute_12314 = 12314; + static attribute_12315 = 12315; + static attribute_12316 = 12316; + static attribute_12317 = 12317; + static attribute_12318 = 12318; + static attribute_12319 = 12319; + static attribute_12320 = 12320; + static attribute_12321 = 12321; + static attribute_12322 = 12322; + static attribute_12323 = 12323; + static attribute_12324 = 12324; + static attribute_12325 = 12325; + static attribute_12326 = 12326; + static attribute_12327 = 12327; + static attribute_12328 = 12328; + static attribute_12329 = 12329; + static attribute_12330 = 12330; + static attribute_12331 = 12331; + static attribute_12332 = 12332; + static attribute_12333 = 12333; + static attribute_12334 = 12334; + static attribute_12335 = 12335; + static attribute_12336 = 12336; + static attribute_12337 = 12337; + static attribute_12338 = 12338; + static attribute_12339 = 12339; + static attribute_12340 = 12340; + static attribute_12341 = 12341; + static attribute_12342 = 12342; + static attribute_12343 = 12343; + static attribute_12344 = 12344; + static attribute_12345 = 12345; + static attribute_12346 = 12346; + static attribute_12347 = 12347; + static attribute_12348 = 12348; + static attribute_12349 = 12349; + static attribute_12350 = 12350; + static attribute_12351 = 12351; + static attribute_12352 = 12352; + static attribute_12353 = 12353; + static attribute_12354 = 12354; + static attribute_12355 = 12355; + static attribute_12356 = 12356; + static attribute_12357 = 12357; + static attribute_12358 = 12358; + static attribute_12359 = 12359; + static attribute_12360 = 12360; + static attribute_12361 = 12361; + static attribute_12362 = 12362; + static attribute_12363 = 12363; + static attribute_12364 = 12364; + static attribute_12365 = 12365; + static attribute_12366 = 12366; + static attribute_12367 = 12367; + static attribute_12368 = 12368; + static attribute_12369 = 12369; + static attribute_12370 = 12370; + static attribute_12371 = 12371; + static attribute_12372 = 12372; + static attribute_12373 = 12373; + static attribute_12374 = 12374; + static attribute_12375 = 12375; + static attribute_12376 = 12376; + static attribute_12377 = 12377; + static attribute_12378 = 12378; + static attribute_12379 = 12379; + static attribute_12380 = 12380; + static attribute_12381 = 12381; + static attribute_12382 = 12382; + static attribute_12383 = 12383; + static attribute_12384 = 12384; + static attribute_12385 = 12385; + static attribute_12386 = 12386; + static attribute_12387 = 12387; + static attribute_12388 = 12388; + static attribute_12389 = 12389; + static attribute_12390 = 12390; + static attribute_12391 = 12391; + static attribute_12392 = 12392; + static attribute_12393 = 12393; + static attribute_12394 = 12394; + static attribute_12395 = 12395; + static attribute_12396 = 12396; + static attribute_12397 = 12397; + static attribute_12398 = 12398; + static attribute_12399 = 12399; + static attribute_12400 = 12400; + static attribute_12401 = 12401; + static attribute_12402 = 12402; + static attribute_12403 = 12403; + static attribute_12404 = 12404; + static attribute_12405 = 12405; + static attribute_12406 = 12406; + static attribute_12407 = 12407; + static attribute_12408 = 12408; + static attribute_12409 = 12409; + static attribute_12410 = 12410; + static attribute_12411 = 12411; + static attribute_12412 = 12412; + static attribute_12413 = 12413; + static attribute_12414 = 12414; + static attribute_12415 = 12415; + static attribute_12416 = 12416; + static attribute_12417 = 12417; + static attribute_12418 = 12418; + static attribute_12419 = 12419; + static attribute_12420 = 12420; + static attribute_12421 = 12421; + static attribute_12422 = 12422; + static attribute_12423 = 12423; + static attribute_12424 = 12424; + static attribute_12425 = 12425; + static attribute_12426 = 12426; + static attribute_12427 = 12427; + static attribute_12428 = 12428; + static attribute_12429 = 12429; + static attribute_12430 = 12430; + static attribute_12431 = 12431; + static attribute_12432 = 12432; + static attribute_12433 = 12433; + static attribute_12434 = 12434; + static attribute_12435 = 12435; + static attribute_12436 = 12436; + static attribute_12437 = 12437; + static attribute_12438 = 12438; + static attribute_12439 = 12439; + static attribute_12440 = 12440; + static attribute_12441 = 12441; + static attribute_12442 = 12442; + static attribute_12443 = 12443; + static attribute_12444 = 12444; + static attribute_12445 = 12445; + static attribute_12446 = 12446; + static attribute_12447 = 12447; + static attribute_12448 = 12448; + static attribute_12449 = 12449; + static attribute_12450 = 12450; + static attribute_12451 = 12451; + static attribute_12452 = 12452; + static attribute_12453 = 12453; + static attribute_12454 = 12454; + static attribute_12455 = 12455; + static attribute_12456 = 12456; + static attribute_12457 = 12457; + static attribute_12458 = 12458; + static attribute_12459 = 12459; + static attribute_12460 = 12460; + static attribute_12461 = 12461; + static attribute_12462 = 12462; + static attribute_12463 = 12463; + static attribute_12464 = 12464; + static attribute_12465 = 12465; + static attribute_12466 = 12466; + static attribute_12467 = 12467; + static attribute_12468 = 12468; + static attribute_12469 = 12469; + static attribute_12470 = 12470; + static attribute_12471 = 12471; + static attribute_12472 = 12472; + static attribute_12473 = 12473; + static attribute_12474 = 12474; + static attribute_12475 = 12475; + static attribute_12476 = 12476; + static attribute_12477 = 12477; + static attribute_12478 = 12478; + static attribute_12479 = 12479; + static attribute_12480 = 12480; + static attribute_12481 = 12481; + static attribute_12482 = 12482; + static attribute_12483 = 12483; + static attribute_12484 = 12484; + static attribute_12485 = 12485; + static attribute_12486 = 12486; + static attribute_12487 = 12487; + static attribute_12488 = 12488; + static attribute_12489 = 12489; + static attribute_12490 = 12490; + static attribute_12491 = 12491; + static attribute_12492 = 12492; + static attribute_12493 = 12493; + static attribute_12494 = 12494; + static attribute_12495 = 12495; + static attribute_12496 = 12496; + static attribute_12497 = 12497; + static attribute_12498 = 12498; + static attribute_12499 = 12499; + static attribute_12500 = 12500; + static attribute_12501 = 12501; + static attribute_12502 = 12502; + static attribute_12503 = 12503; + static attribute_12504 = 12504; + static attribute_12505 = 12505; + static attribute_12506 = 12506; + static attribute_12507 = 12507; + static attribute_12508 = 12508; + static attribute_12509 = 12509; + static attribute_12510 = 12510; + static attribute_12511 = 12511; + static attribute_12512 = 12512; + static attribute_12513 = 12513; + static attribute_12514 = 12514; + static attribute_12515 = 12515; + static attribute_12516 = 12516; + static attribute_12517 = 12517; + static attribute_12518 = 12518; + static attribute_12519 = 12519; + static attribute_12520 = 12520; + static attribute_12521 = 12521; + static attribute_12522 = 12522; + static attribute_12523 = 12523; + static attribute_12524 = 12524; + static attribute_12525 = 12525; + static attribute_12526 = 12526; + static attribute_12527 = 12527; + static attribute_12528 = 12528; + static attribute_12529 = 12529; + static attribute_12530 = 12530; + static attribute_12531 = 12531; + static attribute_12532 = 12532; + static attribute_12533 = 12533; + static attribute_12534 = 12534; + static attribute_12535 = 12535; + static attribute_12536 = 12536; + static attribute_12537 = 12537; + static attribute_12538 = 12538; + static attribute_12539 = 12539; + static attribute_12540 = 12540; + static attribute_12541 = 12541; + static attribute_12542 = 12542; + static attribute_12543 = 12543; + static attribute_12544 = 12544; + static attribute_12545 = 12545; + static attribute_12546 = 12546; + static attribute_12547 = 12547; + static attribute_12548 = 12548; + static attribute_12549 = 12549; + static attribute_12550 = 12550; + static attribute_12551 = 12551; + static attribute_12552 = 12552; + static attribute_12553 = 12553; + static attribute_12554 = 12554; + static attribute_12555 = 12555; + static attribute_12556 = 12556; + static attribute_12557 = 12557; + static attribute_12558 = 12558; + static attribute_12559 = 12559; + static attribute_12560 = 12560; + static attribute_12561 = 12561; + static attribute_12562 = 12562; + static attribute_12563 = 12563; + static attribute_12564 = 12564; + static attribute_12565 = 12565; + static attribute_12566 = 12566; + static attribute_12567 = 12567; + static attribute_12568 = 12568; + static attribute_12569 = 12569; + static attribute_12570 = 12570; + static attribute_12571 = 12571; + static attribute_12572 = 12572; + static attribute_12573 = 12573; + static attribute_12574 = 12574; + static attribute_12575 = 12575; + static attribute_12576 = 12576; + static attribute_12577 = 12577; + static attribute_12578 = 12578; + static attribute_12579 = 12579; + static attribute_12580 = 12580; + static attribute_12581 = 12581; + static attribute_12582 = 12582; + static attribute_12583 = 12583; + static attribute_12584 = 12584; + static attribute_12585 = 12585; + static attribute_12586 = 12586; + static attribute_12587 = 12587; + static attribute_12588 = 12588; + static attribute_12589 = 12589; + static attribute_12590 = 12590; + static attribute_12591 = 12591; + static attribute_12592 = 12592; + static attribute_12593 = 12593; + static attribute_12594 = 12594; + static attribute_12595 = 12595; + static attribute_12596 = 12596; + static attribute_12597 = 12597; + static attribute_12598 = 12598; + static attribute_12599 = 12599; + static attribute_12600 = 12600; + static attribute_12601 = 12601; + static attribute_12602 = 12602; + static attribute_12603 = 12603; + static attribute_12604 = 12604; + static attribute_12605 = 12605; + static attribute_12606 = 12606; + static attribute_12607 = 12607; + static attribute_12608 = 12608; + static attribute_12609 = 12609; + static attribute_12610 = 12610; + static attribute_12611 = 12611; + static attribute_12612 = 12612; + static attribute_12613 = 12613; + static attribute_12614 = 12614; + static attribute_12615 = 12615; + static attribute_12616 = 12616; + static attribute_12617 = 12617; + static attribute_12618 = 12618; + static attribute_12619 = 12619; + static attribute_12620 = 12620; + static attribute_12621 = 12621; + static attribute_12622 = 12622; + static attribute_12623 = 12623; + static attribute_12624 = 12624; + static attribute_12625 = 12625; + static attribute_12626 = 12626; + static attribute_12627 = 12627; + static attribute_12628 = 12628; + static attribute_12629 = 12629; + static attribute_12630 = 12630; + static attribute_12631 = 12631; + static attribute_12632 = 12632; + static attribute_12633 = 12633; + static attribute_12634 = 12634; + static attribute_12635 = 12635; + static attribute_12636 = 12636; + static attribute_12637 = 12637; + static attribute_12638 = 12638; + static attribute_12639 = 12639; + static attribute_12640 = 12640; + static attribute_12641 = 12641; + static attribute_12642 = 12642; + static attribute_12643 = 12643; + static attribute_12644 = 12644; + static attribute_12645 = 12645; + static attribute_12646 = 12646; + static attribute_12647 = 12647; + static attribute_12648 = 12648; + static attribute_12649 = 12649; + static attribute_12650 = 12650; + static attribute_12651 = 12651; + static attribute_12652 = 12652; + static attribute_12653 = 12653; + static attribute_12654 = 12654; + static attribute_12655 = 12655; + static attribute_12656 = 12656; + static attribute_12657 = 12657; + static attribute_12658 = 12658; + static attribute_12659 = 12659; + static attribute_12660 = 12660; + static attribute_12661 = 12661; + static attribute_12662 = 12662; + static attribute_12663 = 12663; + static attribute_12664 = 12664; + static attribute_12665 = 12665; + static attribute_12666 = 12666; + static attribute_12667 = 12667; + static attribute_12668 = 12668; + static attribute_12669 = 12669; + static attribute_12670 = 12670; + static attribute_12671 = 12671; + static attribute_12672 = 12672; + static attribute_12673 = 12673; + static attribute_12674 = 12674; + static attribute_12675 = 12675; + static attribute_12676 = 12676; + static attribute_12677 = 12677; + static attribute_12678 = 12678; + static attribute_12679 = 12679; + static attribute_12680 = 12680; + static attribute_12681 = 12681; + static attribute_12682 = 12682; + static attribute_12683 = 12683; + static attribute_12684 = 12684; + static attribute_12685 = 12685; + static attribute_12686 = 12686; + static attribute_12687 = 12687; + static attribute_12688 = 12688; + static attribute_12689 = 12689; + static attribute_12690 = 12690; + static attribute_12691 = 12691; + static attribute_12692 = 12692; + static attribute_12693 = 12693; + static attribute_12694 = 12694; + static attribute_12695 = 12695; + static attribute_12696 = 12696; + static attribute_12697 = 12697; + static attribute_12698 = 12698; + static attribute_12699 = 12699; + static attribute_12700 = 12700; + static attribute_12701 = 12701; + static attribute_12702 = 12702; + static attribute_12703 = 12703; + static attribute_12704 = 12704; + static attribute_12705 = 12705; + static attribute_12706 = 12706; + static attribute_12707 = 12707; + static attribute_12708 = 12708; + static attribute_12709 = 12709; + static attribute_12710 = 12710; + static attribute_12711 = 12711; + static attribute_12712 = 12712; + static attribute_12713 = 12713; + static attribute_12714 = 12714; + static attribute_12715 = 12715; + static attribute_12716 = 12716; + static attribute_12717 = 12717; + static attribute_12718 = 12718; + static attribute_12719 = 12719; + static attribute_12720 = 12720; + static attribute_12721 = 12721; + static attribute_12722 = 12722; + static attribute_12723 = 12723; + static attribute_12724 = 12724; + static attribute_12725 = 12725; + static attribute_12726 = 12726; + static attribute_12727 = 12727; + static attribute_12728 = 12728; + static attribute_12729 = 12729; + static attribute_12730 = 12730; + static attribute_12731 = 12731; + static attribute_12732 = 12732; + static attribute_12733 = 12733; + static attribute_12734 = 12734; + static attribute_12735 = 12735; + static attribute_12736 = 12736; + static attribute_12737 = 12737; + static attribute_12738 = 12738; + static attribute_12739 = 12739; + static attribute_12740 = 12740; + static attribute_12741 = 12741; + static attribute_12742 = 12742; + static attribute_12743 = 12743; + static attribute_12744 = 12744; + static attribute_12745 = 12745; + static attribute_12746 = 12746; + static attribute_12747 = 12747; + static attribute_12748 = 12748; + static attribute_12749 = 12749; + static attribute_12750 = 12750; + static attribute_12751 = 12751; + static attribute_12752 = 12752; + static attribute_12753 = 12753; + static attribute_12754 = 12754; + static attribute_12755 = 12755; + static attribute_12756 = 12756; + static attribute_12757 = 12757; + static attribute_12758 = 12758; + static attribute_12759 = 12759; + static attribute_12760 = 12760; + static attribute_12761 = 12761; + static attribute_12762 = 12762; + static attribute_12763 = 12763; + static attribute_12764 = 12764; + static attribute_12765 = 12765; + static attribute_12766 = 12766; + static attribute_12767 = 12767; + static attribute_12768 = 12768; + static attribute_12769 = 12769; + static attribute_12770 = 12770; + static attribute_12771 = 12771; + static attribute_12772 = 12772; + static attribute_12773 = 12773; + static attribute_12774 = 12774; + static attribute_12775 = 12775; + static attribute_12776 = 12776; + static attribute_12777 = 12777; + static attribute_12778 = 12778; + static attribute_12779 = 12779; + static attribute_12780 = 12780; + static attribute_12781 = 12781; + static attribute_12782 = 12782; + static attribute_12783 = 12783; + static attribute_12784 = 12784; + static attribute_12785 = 12785; + static attribute_12786 = 12786; + static attribute_12787 = 12787; + static attribute_12788 = 12788; + static attribute_12789 = 12789; + static attribute_12790 = 12790; + static attribute_12791 = 12791; + static attribute_12792 = 12792; + static attribute_12793 = 12793; + static attribute_12794 = 12794; + static attribute_12795 = 12795; + static attribute_12796 = 12796; + static attribute_12797 = 12797; + static attribute_12798 = 12798; + static attribute_12799 = 12799; + static attribute_12800 = 12800; + static attribute_12801 = 12801; + static attribute_12802 = 12802; + static attribute_12803 = 12803; + static attribute_12804 = 12804; + static attribute_12805 = 12805; + static attribute_12806 = 12806; + static attribute_12807 = 12807; + static attribute_12808 = 12808; + static attribute_12809 = 12809; + static attribute_12810 = 12810; + static attribute_12811 = 12811; + static attribute_12812 = 12812; + static attribute_12813 = 12813; + static attribute_12814 = 12814; + static attribute_12815 = 12815; + static attribute_12816 = 12816; + static attribute_12817 = 12817; + static attribute_12818 = 12818; + static attribute_12819 = 12819; + static attribute_12820 = 12820; + static attribute_12821 = 12821; + static attribute_12822 = 12822; + static attribute_12823 = 12823; + static attribute_12824 = 12824; + static attribute_12825 = 12825; + static attribute_12826 = 12826; + static attribute_12827 = 12827; + static attribute_12828 = 12828; + static attribute_12829 = 12829; + static attribute_12830 = 12830; + static attribute_12831 = 12831; + static attribute_12832 = 12832; + static attribute_12833 = 12833; + static attribute_12834 = 12834; + static attribute_12835 = 12835; + static attribute_12836 = 12836; + static attribute_12837 = 12837; + static attribute_12838 = 12838; + static attribute_12839 = 12839; + static attribute_12840 = 12840; + static attribute_12841 = 12841; + static attribute_12842 = 12842; + static attribute_12843 = 12843; + static attribute_12844 = 12844; + static attribute_12845 = 12845; + static attribute_12846 = 12846; + static attribute_12847 = 12847; + static attribute_12848 = 12848; + static attribute_12849 = 12849; + static attribute_12850 = 12850; + static attribute_12851 = 12851; + static attribute_12852 = 12852; + static attribute_12853 = 12853; + static attribute_12854 = 12854; + static attribute_12855 = 12855; + static attribute_12856 = 12856; + static attribute_12857 = 12857; + static attribute_12858 = 12858; + static attribute_12859 = 12859; + static attribute_12860 = 12860; + static attribute_12861 = 12861; + static attribute_12862 = 12862; + static attribute_12863 = 12863; + static attribute_12864 = 12864; + static attribute_12865 = 12865; + static attribute_12866 = 12866; + static attribute_12867 = 12867; + static attribute_12868 = 12868; + static attribute_12869 = 12869; + static attribute_12870 = 12870; + static attribute_12871 = 12871; + static attribute_12872 = 12872; + static attribute_12873 = 12873; + static attribute_12874 = 12874; + static attribute_12875 = 12875; + static attribute_12876 = 12876; + static attribute_12877 = 12877; + static attribute_12878 = 12878; + static attribute_12879 = 12879; + static attribute_12880 = 12880; + static attribute_12881 = 12881; + static attribute_12882 = 12882; + static attribute_12883 = 12883; + static attribute_12884 = 12884; + static attribute_12885 = 12885; + static attribute_12886 = 12886; + static attribute_12887 = 12887; + static attribute_12888 = 12888; + static attribute_12889 = 12889; + static attribute_12890 = 12890; + static attribute_12891 = 12891; + static attribute_12892 = 12892; + static attribute_12893 = 12893; + static attribute_12894 = 12894; + static attribute_12895 = 12895; + static attribute_12896 = 12896; + static attribute_12897 = 12897; + static attribute_12898 = 12898; + static attribute_12899 = 12899; + static attribute_12900 = 12900; + static attribute_12901 = 12901; + static attribute_12902 = 12902; + static attribute_12903 = 12903; + static attribute_12904 = 12904; + static attribute_12905 = 12905; + static attribute_12906 = 12906; + static attribute_12907 = 12907; + static attribute_12908 = 12908; + static attribute_12909 = 12909; + static attribute_12910 = 12910; + static attribute_12911 = 12911; + static attribute_12912 = 12912; + static attribute_12913 = 12913; + static attribute_12914 = 12914; + static attribute_12915 = 12915; + static attribute_12916 = 12916; + static attribute_12917 = 12917; + static attribute_12918 = 12918; + static attribute_12919 = 12919; + static attribute_12920 = 12920; + static attribute_12921 = 12921; + static attribute_12922 = 12922; + static attribute_12923 = 12923; + static attribute_12924 = 12924; + static attribute_12925 = 12925; + static attribute_12926 = 12926; + static attribute_12927 = 12927; + static attribute_12928 = 12928; + static attribute_12929 = 12929; + static attribute_12930 = 12930; + static attribute_12931 = 12931; + static attribute_12932 = 12932; + static attribute_12933 = 12933; + static attribute_12934 = 12934; + static attribute_12935 = 12935; + static attribute_12936 = 12936; + static attribute_12937 = 12937; + static attribute_12938 = 12938; + static attribute_12939 = 12939; + static attribute_12940 = 12940; + static attribute_12941 = 12941; + static attribute_12942 = 12942; + static attribute_12943 = 12943; + static attribute_12944 = 12944; + static attribute_12945 = 12945; + static attribute_12946 = 12946; + static attribute_12947 = 12947; + static attribute_12948 = 12948; + static attribute_12949 = 12949; + static attribute_12950 = 12950; + static attribute_12951 = 12951; + static attribute_12952 = 12952; + static attribute_12953 = 12953; + static attribute_12954 = 12954; + static attribute_12955 = 12955; + static attribute_12956 = 12956; + static attribute_12957 = 12957; + static attribute_12958 = 12958; + static attribute_12959 = 12959; + static attribute_12960 = 12960; + static attribute_12961 = 12961; + static attribute_12962 = 12962; + static attribute_12963 = 12963; + static attribute_12964 = 12964; + static attribute_12965 = 12965; + static attribute_12966 = 12966; + static attribute_12967 = 12967; + static attribute_12968 = 12968; + static attribute_12969 = 12969; + static attribute_12970 = 12970; + static attribute_12971 = 12971; + static attribute_12972 = 12972; + static attribute_12973 = 12973; + static attribute_12974 = 12974; + static attribute_12975 = 12975; + static attribute_12976 = 12976; + static attribute_12977 = 12977; + static attribute_12978 = 12978; + static attribute_12979 = 12979; + static attribute_12980 = 12980; + static attribute_12981 = 12981; + static attribute_12982 = 12982; + static attribute_12983 = 12983; + static attribute_12984 = 12984; + static attribute_12985 = 12985; + static attribute_12986 = 12986; + static attribute_12987 = 12987; + static attribute_12988 = 12988; + static attribute_12989 = 12989; + static attribute_12990 = 12990; + static attribute_12991 = 12991; + static attribute_12992 = 12992; + static attribute_12993 = 12993; + static attribute_12994 = 12994; + static attribute_12995 = 12995; + static attribute_12996 = 12996; + static attribute_12997 = 12997; + static attribute_12998 = 12998; + static attribute_12999 = 12999; + static attribute_13000 = 13000; + static attribute_13001 = 13001; + static attribute_13002 = 13002; + static attribute_13003 = 13003; + static attribute_13004 = 13004; + static attribute_13005 = 13005; + static attribute_13006 = 13006; + static attribute_13007 = 13007; + static attribute_13008 = 13008; + static attribute_13009 = 13009; + static attribute_13010 = 13010; + static attribute_13011 = 13011; + static attribute_13012 = 13012; + static attribute_13013 = 13013; + static attribute_13014 = 13014; + static attribute_13015 = 13015; + static attribute_13016 = 13016; + static attribute_13017 = 13017; + static attribute_13018 = 13018; + static attribute_13019 = 13019; + static attribute_13020 = 13020; + static attribute_13021 = 13021; + static attribute_13022 = 13022; + static attribute_13023 = 13023; + static attribute_13024 = 13024; + static attribute_13025 = 13025; + static attribute_13026 = 13026; + static attribute_13027 = 13027; + static attribute_13028 = 13028; + static attribute_13029 = 13029; + static attribute_13030 = 13030; + static attribute_13031 = 13031; + static attribute_13032 = 13032; + static attribute_13033 = 13033; + static attribute_13034 = 13034; + static attribute_13035 = 13035; + static attribute_13036 = 13036; + static attribute_13037 = 13037; + static attribute_13038 = 13038; + static attribute_13039 = 13039; + static attribute_13040 = 13040; + static attribute_13041 = 13041; + static attribute_13042 = 13042; + static attribute_13043 = 13043; + static attribute_13044 = 13044; + static attribute_13045 = 13045; + static attribute_13046 = 13046; + static attribute_13047 = 13047; + static attribute_13048 = 13048; + static attribute_13049 = 13049; + static attribute_13050 = 13050; + static attribute_13051 = 13051; + static attribute_13052 = 13052; + static attribute_13053 = 13053; + static attribute_13054 = 13054; + static attribute_13055 = 13055; + static attribute_13056 = 13056; + static attribute_13057 = 13057; + static attribute_13058 = 13058; + static attribute_13059 = 13059; + static attribute_13060 = 13060; + static attribute_13061 = 13061; + static attribute_13062 = 13062; + static attribute_13063 = 13063; + static attribute_13064 = 13064; + static attribute_13065 = 13065; + static attribute_13066 = 13066; + static attribute_13067 = 13067; + static attribute_13068 = 13068; + static attribute_13069 = 13069; + static attribute_13070 = 13070; + static attribute_13071 = 13071; + static attribute_13072 = 13072; + static attribute_13073 = 13073; + static attribute_13074 = 13074; + static attribute_13075 = 13075; + static attribute_13076 = 13076; + static attribute_13077 = 13077; + static attribute_13078 = 13078; + static attribute_13079 = 13079; + static attribute_13080 = 13080; + static attribute_13081 = 13081; + static attribute_13082 = 13082; + static attribute_13083 = 13083; + static attribute_13084 = 13084; + static attribute_13085 = 13085; + static attribute_13086 = 13086; + static attribute_13087 = 13087; + static attribute_13088 = 13088; + static attribute_13089 = 13089; + static attribute_13090 = 13090; + static attribute_13091 = 13091; + static attribute_13092 = 13092; + static attribute_13093 = 13093; + static attribute_13094 = 13094; + static attribute_13095 = 13095; + static attribute_13096 = 13096; + static attribute_13097 = 13097; + static attribute_13098 = 13098; + static attribute_13099 = 13099; + static attribute_13100 = 13100; + static attribute_13101 = 13101; + static attribute_13102 = 13102; + static attribute_13103 = 13103; + static attribute_13104 = 13104; + static attribute_13105 = 13105; + static attribute_13106 = 13106; + static attribute_13107 = 13107; + static attribute_13108 = 13108; + static attribute_13109 = 13109; + static attribute_13110 = 13110; + static attribute_13111 = 13111; + static attribute_13112 = 13112; + static attribute_13113 = 13113; + static attribute_13114 = 13114; + static attribute_13115 = 13115; + static attribute_13116 = 13116; + static attribute_13117 = 13117; + static attribute_13118 = 13118; + static attribute_13119 = 13119; + static attribute_13120 = 13120; + static attribute_13121 = 13121; + static attribute_13122 = 13122; + static attribute_13123 = 13123; + static attribute_13124 = 13124; + static attribute_13125 = 13125; + static attribute_13126 = 13126; + static attribute_13127 = 13127; + static attribute_13128 = 13128; + static attribute_13129 = 13129; + static attribute_13130 = 13130; + static attribute_13131 = 13131; + static attribute_13132 = 13132; + static attribute_13133 = 13133; + static attribute_13134 = 13134; + static attribute_13135 = 13135; + static attribute_13136 = 13136; + static attribute_13137 = 13137; + static attribute_13138 = 13138; + static attribute_13139 = 13139; + static attribute_13140 = 13140; + static attribute_13141 = 13141; + static attribute_13142 = 13142; + static attribute_13143 = 13143; + static attribute_13144 = 13144; + static attribute_13145 = 13145; + static attribute_13146 = 13146; + static attribute_13147 = 13147; + static attribute_13148 = 13148; + static attribute_13149 = 13149; + static attribute_13150 = 13150; + static attribute_13151 = 13151; + static attribute_13152 = 13152; + static attribute_13153 = 13153; + static attribute_13154 = 13154; + static attribute_13155 = 13155; + static attribute_13156 = 13156; + static attribute_13157 = 13157; + static attribute_13158 = 13158; + static attribute_13159 = 13159; + static attribute_13160 = 13160; + static attribute_13161 = 13161; + static attribute_13162 = 13162; + static attribute_13163 = 13163; + static attribute_13164 = 13164; + static attribute_13165 = 13165; + static attribute_13166 = 13166; + static attribute_13167 = 13167; + static attribute_13168 = 13168; + static attribute_13169 = 13169; + static attribute_13170 = 13170; + static attribute_13171 = 13171; + static attribute_13172 = 13172; + static attribute_13173 = 13173; + static attribute_13174 = 13174; + static attribute_13175 = 13175; + static attribute_13176 = 13176; + static attribute_13177 = 13177; + static attribute_13178 = 13178; + static attribute_13179 = 13179; + static attribute_13180 = 13180; + static attribute_13181 = 13181; + static attribute_13182 = 13182; + static attribute_13183 = 13183; + static attribute_13184 = 13184; + static attribute_13185 = 13185; + static attribute_13186 = 13186; + static attribute_13187 = 13187; + static attribute_13188 = 13188; + static attribute_13189 = 13189; + static attribute_13190 = 13190; + static attribute_13191 = 13191; + static attribute_13192 = 13192; + static attribute_13193 = 13193; + static attribute_13194 = 13194; + static attribute_13195 = 13195; + static attribute_13196 = 13196; + static attribute_13197 = 13197; + static attribute_13198 = 13198; + static attribute_13199 = 13199; + static attribute_13200 = 13200; + static attribute_13201 = 13201; + static attribute_13202 = 13202; + static attribute_13203 = 13203; + static attribute_13204 = 13204; + static attribute_13205 = 13205; + static attribute_13206 = 13206; + static attribute_13207 = 13207; + static attribute_13208 = 13208; + static attribute_13209 = 13209; + static attribute_13210 = 13210; + static attribute_13211 = 13211; + static attribute_13212 = 13212; + static attribute_13213 = 13213; + static attribute_13214 = 13214; + static attribute_13215 = 13215; + static attribute_13216 = 13216; + static attribute_13217 = 13217; + static attribute_13218 = 13218; + static attribute_13219 = 13219; + static attribute_13220 = 13220; + static attribute_13221 = 13221; + static attribute_13222 = 13222; + static attribute_13223 = 13223; + static attribute_13224 = 13224; + static attribute_13225 = 13225; + static attribute_13226 = 13226; + static attribute_13227 = 13227; + static attribute_13228 = 13228; + static attribute_13229 = 13229; + static attribute_13230 = 13230; + static attribute_13231 = 13231; + static attribute_13232 = 13232; + static attribute_13233 = 13233; + static attribute_13234 = 13234; + static attribute_13235 = 13235; + static attribute_13236 = 13236; + static attribute_13237 = 13237; + static attribute_13238 = 13238; + static attribute_13239 = 13239; + static attribute_13240 = 13240; + static attribute_13241 = 13241; + static attribute_13242 = 13242; + static attribute_13243 = 13243; + static attribute_13244 = 13244; + static attribute_13245 = 13245; + static attribute_13246 = 13246; + static attribute_13247 = 13247; + static attribute_13248 = 13248; + static attribute_13249 = 13249; + static attribute_13250 = 13250; + static attribute_13251 = 13251; + static attribute_13252 = 13252; + static attribute_13253 = 13253; + static attribute_13254 = 13254; + static attribute_13255 = 13255; + static attribute_13256 = 13256; + static attribute_13257 = 13257; + static attribute_13258 = 13258; + static attribute_13259 = 13259; + static attribute_13260 = 13260; + static attribute_13261 = 13261; + static attribute_13262 = 13262; + static attribute_13263 = 13263; + static attribute_13264 = 13264; + static attribute_13265 = 13265; + static attribute_13266 = 13266; + static attribute_13267 = 13267; + static attribute_13268 = 13268; + static attribute_13269 = 13269; + static attribute_13270 = 13270; + static attribute_13271 = 13271; + static attribute_13272 = 13272; + static attribute_13273 = 13273; + static attribute_13274 = 13274; + static attribute_13275 = 13275; + static attribute_13276 = 13276; + static attribute_13277 = 13277; + static attribute_13278 = 13278; + static attribute_13279 = 13279; + static attribute_13280 = 13280; + static attribute_13281 = 13281; + static attribute_13282 = 13282; + static attribute_13283 = 13283; + static attribute_13284 = 13284; + static attribute_13285 = 13285; + static attribute_13286 = 13286; + static attribute_13287 = 13287; + static attribute_13288 = 13288; + static attribute_13289 = 13289; + static attribute_13290 = 13290; + static attribute_13291 = 13291; + static attribute_13292 = 13292; + static attribute_13293 = 13293; + static attribute_13294 = 13294; + static attribute_13295 = 13295; + static attribute_13296 = 13296; + static attribute_13297 = 13297; + static attribute_13298 = 13298; + static attribute_13299 = 13299; + static attribute_13300 = 13300; + static attribute_13301 = 13301; + static attribute_13302 = 13302; + static attribute_13303 = 13303; + static attribute_13304 = 13304; + static attribute_13305 = 13305; + static attribute_13306 = 13306; + static attribute_13307 = 13307; + static attribute_13308 = 13308; + static attribute_13309 = 13309; + static attribute_13310 = 13310; + static attribute_13311 = 13311; + static attribute_13312 = 13312; + static attribute_13313 = 13313; + static attribute_13314 = 13314; + static attribute_13315 = 13315; + static attribute_13316 = 13316; + static attribute_13317 = 13317; + static attribute_13318 = 13318; + static attribute_13319 = 13319; + static attribute_13320 = 13320; + static attribute_13321 = 13321; + static attribute_13322 = 13322; + static attribute_13323 = 13323; + static attribute_13324 = 13324; + static attribute_13325 = 13325; + static attribute_13326 = 13326; + static attribute_13327 = 13327; + static attribute_13328 = 13328; + static attribute_13329 = 13329; + static attribute_13330 = 13330; + static attribute_13331 = 13331; + static attribute_13332 = 13332; + static attribute_13333 = 13333; + static attribute_13334 = 13334; + static attribute_13335 = 13335; + static attribute_13336 = 13336; + static attribute_13337 = 13337; + static attribute_13338 = 13338; + static attribute_13339 = 13339; + static attribute_13340 = 13340; + static attribute_13341 = 13341; + static attribute_13342 = 13342; + static attribute_13343 = 13343; + static attribute_13344 = 13344; + static attribute_13345 = 13345; + static attribute_13346 = 13346; + static attribute_13347 = 13347; + static attribute_13348 = 13348; + static attribute_13349 = 13349; + static attribute_13350 = 13350; + static attribute_13351 = 13351; + static attribute_13352 = 13352; + static attribute_13353 = 13353; + static attribute_13354 = 13354; + static attribute_13355 = 13355; + static attribute_13356 = 13356; + static attribute_13357 = 13357; + static attribute_13358 = 13358; + static attribute_13359 = 13359; + static attribute_13360 = 13360; + static attribute_13361 = 13361; + static attribute_13362 = 13362; + static attribute_13363 = 13363; + static attribute_13364 = 13364; + static attribute_13365 = 13365; + static attribute_13366 = 13366; + static attribute_13367 = 13367; + static attribute_13368 = 13368; + static attribute_13369 = 13369; + static attribute_13370 = 13370; + static attribute_13371 = 13371; + static attribute_13372 = 13372; + static attribute_13373 = 13373; + static attribute_13374 = 13374; + static attribute_13375 = 13375; + static attribute_13376 = 13376; + static attribute_13377 = 13377; + static attribute_13378 = 13378; + static attribute_13379 = 13379; + static attribute_13380 = 13380; + static attribute_13381 = 13381; + static attribute_13382 = 13382; + static attribute_13383 = 13383; + static attribute_13384 = 13384; + static attribute_13385 = 13385; + static attribute_13386 = 13386; + static attribute_13387 = 13387; + static attribute_13388 = 13388; + static attribute_13389 = 13389; + static attribute_13390 = 13390; + static attribute_13391 = 13391; + static attribute_13392 = 13392; + static attribute_13393 = 13393; + static attribute_13394 = 13394; + static attribute_13395 = 13395; + static attribute_13396 = 13396; + static attribute_13397 = 13397; + static attribute_13398 = 13398; + static attribute_13399 = 13399; + static attribute_13400 = 13400; + static attribute_13401 = 13401; + static attribute_13402 = 13402; + static attribute_13403 = 13403; + static attribute_13404 = 13404; + static attribute_13405 = 13405; + static attribute_13406 = 13406; + static attribute_13407 = 13407; + static attribute_13408 = 13408; + static attribute_13409 = 13409; + static attribute_13410 = 13410; + static attribute_13411 = 13411; + static attribute_13412 = 13412; + static attribute_13413 = 13413; + static attribute_13414 = 13414; + static attribute_13415 = 13415; + static attribute_13416 = 13416; + static attribute_13417 = 13417; + static attribute_13418 = 13418; + static attribute_13419 = 13419; + static attribute_13420 = 13420; + static attribute_13421 = 13421; + static attribute_13422 = 13422; + static attribute_13423 = 13423; + static attribute_13424 = 13424; + static attribute_13425 = 13425; + static attribute_13426 = 13426; + static attribute_13427 = 13427; + static attribute_13428 = 13428; + static attribute_13429 = 13429; + static attribute_13430 = 13430; + static attribute_13431 = 13431; + static attribute_13432 = 13432; + static attribute_13433 = 13433; + static attribute_13434 = 13434; + static attribute_13435 = 13435; + static attribute_13436 = 13436; + static attribute_13437 = 13437; + static attribute_13438 = 13438; + static attribute_13439 = 13439; + static attribute_13440 = 13440; + static attribute_13441 = 13441; + static attribute_13442 = 13442; + static attribute_13443 = 13443; + static attribute_13444 = 13444; + static attribute_13445 = 13445; + static attribute_13446 = 13446; + static attribute_13447 = 13447; + static attribute_13448 = 13448; + static attribute_13449 = 13449; + static attribute_13450 = 13450; + static attribute_13451 = 13451; + static attribute_13452 = 13452; + static attribute_13453 = 13453; + static attribute_13454 = 13454; + static attribute_13455 = 13455; + static attribute_13456 = 13456; + static attribute_13457 = 13457; + static attribute_13458 = 13458; + static attribute_13459 = 13459; + static attribute_13460 = 13460; + static attribute_13461 = 13461; + static attribute_13462 = 13462; + static attribute_13463 = 13463; + static attribute_13464 = 13464; + static attribute_13465 = 13465; + static attribute_13466 = 13466; + static attribute_13467 = 13467; + static attribute_13468 = 13468; + static attribute_13469 = 13469; + static attribute_13470 = 13470; + static attribute_13471 = 13471; + static attribute_13472 = 13472; + static attribute_13473 = 13473; + static attribute_13474 = 13474; + static attribute_13475 = 13475; + static attribute_13476 = 13476; + static attribute_13477 = 13477; + static attribute_13478 = 13478; + static attribute_13479 = 13479; + static attribute_13480 = 13480; + static attribute_13481 = 13481; + static attribute_13482 = 13482; + static attribute_13483 = 13483; + static attribute_13484 = 13484; + static attribute_13485 = 13485; + static attribute_13486 = 13486; + static attribute_13487 = 13487; + static attribute_13488 = 13488; + static attribute_13489 = 13489; + static attribute_13490 = 13490; + static attribute_13491 = 13491; + static attribute_13492 = 13492; + static attribute_13493 = 13493; + static attribute_13494 = 13494; + static attribute_13495 = 13495; + static attribute_13496 = 13496; + static attribute_13497 = 13497; + static attribute_13498 = 13498; + static attribute_13499 = 13499; + static attribute_13500 = 13500; + static attribute_13501 = 13501; + static attribute_13502 = 13502; + static attribute_13503 = 13503; + static attribute_13504 = 13504; + static attribute_13505 = 13505; + static attribute_13506 = 13506; + static attribute_13507 = 13507; + static attribute_13508 = 13508; + static attribute_13509 = 13509; + static attribute_13510 = 13510; + static attribute_13511 = 13511; + static attribute_13512 = 13512; + static attribute_13513 = 13513; + static attribute_13514 = 13514; + static attribute_13515 = 13515; + static attribute_13516 = 13516; + static attribute_13517 = 13517; + static attribute_13518 = 13518; + static attribute_13519 = 13519; + static attribute_13520 = 13520; + static attribute_13521 = 13521; + static attribute_13522 = 13522; + static attribute_13523 = 13523; + static attribute_13524 = 13524; + static attribute_13525 = 13525; + static attribute_13526 = 13526; + static attribute_13527 = 13527; + static attribute_13528 = 13528; + static attribute_13529 = 13529; + static attribute_13530 = 13530; + static attribute_13531 = 13531; + static attribute_13532 = 13532; + static attribute_13533 = 13533; + static attribute_13534 = 13534; + static attribute_13535 = 13535; + static attribute_13536 = 13536; + static attribute_13537 = 13537; + static attribute_13538 = 13538; + static attribute_13539 = 13539; + static attribute_13540 = 13540; + static attribute_13541 = 13541; + static attribute_13542 = 13542; + static attribute_13543 = 13543; + static attribute_13544 = 13544; + static attribute_13545 = 13545; + static attribute_13546 = 13546; + static attribute_13547 = 13547; + static attribute_13548 = 13548; + static attribute_13549 = 13549; + static attribute_13550 = 13550; + static attribute_13551 = 13551; + static attribute_13552 = 13552; + static attribute_13553 = 13553; + static attribute_13554 = 13554; + static attribute_13555 = 13555; + static attribute_13556 = 13556; + static attribute_13557 = 13557; + static attribute_13558 = 13558; + static attribute_13559 = 13559; + static attribute_13560 = 13560; + static attribute_13561 = 13561; + static attribute_13562 = 13562; + static attribute_13563 = 13563; + static attribute_13564 = 13564; + static attribute_13565 = 13565; + static attribute_13566 = 13566; + static attribute_13567 = 13567; + static attribute_13568 = 13568; + static attribute_13569 = 13569; + static attribute_13570 = 13570; + static attribute_13571 = 13571; + static attribute_13572 = 13572; + static attribute_13573 = 13573; + static attribute_13574 = 13574; + static attribute_13575 = 13575; + static attribute_13576 = 13576; + static attribute_13577 = 13577; + static attribute_13578 = 13578; + static attribute_13579 = 13579; + static attribute_13580 = 13580; + static attribute_13581 = 13581; + static attribute_13582 = 13582; + static attribute_13583 = 13583; + static attribute_13584 = 13584; + static attribute_13585 = 13585; + static attribute_13586 = 13586; + static attribute_13587 = 13587; + static attribute_13588 = 13588; + static attribute_13589 = 13589; + static attribute_13590 = 13590; + static attribute_13591 = 13591; + static attribute_13592 = 13592; + static attribute_13593 = 13593; + static attribute_13594 = 13594; + static attribute_13595 = 13595; + static attribute_13596 = 13596; + static attribute_13597 = 13597; + static attribute_13598 = 13598; + static attribute_13599 = 13599; + static attribute_13600 = 13600; + static attribute_13601 = 13601; + static attribute_13602 = 13602; + static attribute_13603 = 13603; + static attribute_13604 = 13604; + static attribute_13605 = 13605; + static attribute_13606 = 13606; + static attribute_13607 = 13607; + static attribute_13608 = 13608; + static attribute_13609 = 13609; + static attribute_13610 = 13610; + static attribute_13611 = 13611; + static attribute_13612 = 13612; + static attribute_13613 = 13613; + static attribute_13614 = 13614; + static attribute_13615 = 13615; + static attribute_13616 = 13616; + static attribute_13617 = 13617; + static attribute_13618 = 13618; + static attribute_13619 = 13619; + static attribute_13620 = 13620; + static attribute_13621 = 13621; + static attribute_13622 = 13622; + static attribute_13623 = 13623; + static attribute_13624 = 13624; + static attribute_13625 = 13625; + static attribute_13626 = 13626; + static attribute_13627 = 13627; + static attribute_13628 = 13628; + static attribute_13629 = 13629; + static attribute_13630 = 13630; + static attribute_13631 = 13631; + static attribute_13632 = 13632; + static attribute_13633 = 13633; + static attribute_13634 = 13634; + static attribute_13635 = 13635; + static attribute_13636 = 13636; + static attribute_13637 = 13637; + static attribute_13638 = 13638; + static attribute_13639 = 13639; + static attribute_13640 = 13640; + static attribute_13641 = 13641; + static attribute_13642 = 13642; + static attribute_13643 = 13643; + static attribute_13644 = 13644; + static attribute_13645 = 13645; + static attribute_13646 = 13646; + static attribute_13647 = 13647; + static attribute_13648 = 13648; + static attribute_13649 = 13649; + static attribute_13650 = 13650; + static attribute_13651 = 13651; + static attribute_13652 = 13652; + static attribute_13653 = 13653; + static attribute_13654 = 13654; + static attribute_13655 = 13655; + static attribute_13656 = 13656; + static attribute_13657 = 13657; + static attribute_13658 = 13658; + static attribute_13659 = 13659; + static attribute_13660 = 13660; + static attribute_13661 = 13661; + static attribute_13662 = 13662; + static attribute_13663 = 13663; + static attribute_13664 = 13664; + static attribute_13665 = 13665; + static attribute_13666 = 13666; + static attribute_13667 = 13667; + static attribute_13668 = 13668; + static attribute_13669 = 13669; + static attribute_13670 = 13670; + static attribute_13671 = 13671; + static attribute_13672 = 13672; + static attribute_13673 = 13673; + static attribute_13674 = 13674; + static attribute_13675 = 13675; + static attribute_13676 = 13676; + static attribute_13677 = 13677; + static attribute_13678 = 13678; + static attribute_13679 = 13679; + static attribute_13680 = 13680; + static attribute_13681 = 13681; + static attribute_13682 = 13682; + static attribute_13683 = 13683; + static attribute_13684 = 13684; + static attribute_13685 = 13685; + static attribute_13686 = 13686; + static attribute_13687 = 13687; + static attribute_13688 = 13688; + static attribute_13689 = 13689; + static attribute_13690 = 13690; + static attribute_13691 = 13691; + static attribute_13692 = 13692; + static attribute_13693 = 13693; + static attribute_13694 = 13694; + static attribute_13695 = 13695; + static attribute_13696 = 13696; + static attribute_13697 = 13697; + static attribute_13698 = 13698; + static attribute_13699 = 13699; + static attribute_13700 = 13700; + static attribute_13701 = 13701; + static attribute_13702 = 13702; + static attribute_13703 = 13703; + static attribute_13704 = 13704; + static attribute_13705 = 13705; + static attribute_13706 = 13706; + static attribute_13707 = 13707; + static attribute_13708 = 13708; + static attribute_13709 = 13709; + static attribute_13710 = 13710; + static attribute_13711 = 13711; + static attribute_13712 = 13712; + static attribute_13713 = 13713; + static attribute_13714 = 13714; + static attribute_13715 = 13715; + static attribute_13716 = 13716; + static attribute_13717 = 13717; + static attribute_13718 = 13718; + static attribute_13719 = 13719; + static attribute_13720 = 13720; + static attribute_13721 = 13721; + static attribute_13722 = 13722; + static attribute_13723 = 13723; + static attribute_13724 = 13724; + static attribute_13725 = 13725; + static attribute_13726 = 13726; + static attribute_13727 = 13727; + static attribute_13728 = 13728; + static attribute_13729 = 13729; + static attribute_13730 = 13730; + static attribute_13731 = 13731; + static attribute_13732 = 13732; + static attribute_13733 = 13733; + static attribute_13734 = 13734; + static attribute_13735 = 13735; + static attribute_13736 = 13736; + static attribute_13737 = 13737; + static attribute_13738 = 13738; + static attribute_13739 = 13739; + static attribute_13740 = 13740; + static attribute_13741 = 13741; + static attribute_13742 = 13742; + static attribute_13743 = 13743; + static attribute_13744 = 13744; + static attribute_13745 = 13745; + static attribute_13746 = 13746; + static attribute_13747 = 13747; + static attribute_13748 = 13748; + static attribute_13749 = 13749; + static attribute_13750 = 13750; + static attribute_13751 = 13751; + static attribute_13752 = 13752; + static attribute_13753 = 13753; + static attribute_13754 = 13754; + static attribute_13755 = 13755; + static attribute_13756 = 13756; + static attribute_13757 = 13757; + static attribute_13758 = 13758; + static attribute_13759 = 13759; + static attribute_13760 = 13760; + static attribute_13761 = 13761; + static attribute_13762 = 13762; + static attribute_13763 = 13763; + static attribute_13764 = 13764; + static attribute_13765 = 13765; + static attribute_13766 = 13766; + static attribute_13767 = 13767; + static attribute_13768 = 13768; + static attribute_13769 = 13769; + static attribute_13770 = 13770; + static attribute_13771 = 13771; + static attribute_13772 = 13772; + static attribute_13773 = 13773; + static attribute_13774 = 13774; + static attribute_13775 = 13775; + static attribute_13776 = 13776; + static attribute_13777 = 13777; + static attribute_13778 = 13778; + static attribute_13779 = 13779; + static attribute_13780 = 13780; + static attribute_13781 = 13781; + static attribute_13782 = 13782; + static attribute_13783 = 13783; + static attribute_13784 = 13784; + static attribute_13785 = 13785; + static attribute_13786 = 13786; + static attribute_13787 = 13787; + static attribute_13788 = 13788; + static attribute_13789 = 13789; + static attribute_13790 = 13790; + static attribute_13791 = 13791; + static attribute_13792 = 13792; + static attribute_13793 = 13793; + static attribute_13794 = 13794; + static attribute_13795 = 13795; + static attribute_13796 = 13796; + static attribute_13797 = 13797; + static attribute_13798 = 13798; + static attribute_13799 = 13799; + static attribute_13800 = 13800; + static attribute_13801 = 13801; + static attribute_13802 = 13802; + static attribute_13803 = 13803; + static attribute_13804 = 13804; + static attribute_13805 = 13805; + static attribute_13806 = 13806; + static attribute_13807 = 13807; + static attribute_13808 = 13808; + static attribute_13809 = 13809; + static attribute_13810 = 13810; + static attribute_13811 = 13811; + static attribute_13812 = 13812; + static attribute_13813 = 13813; + static attribute_13814 = 13814; + static attribute_13815 = 13815; + static attribute_13816 = 13816; + static attribute_13817 = 13817; + static attribute_13818 = 13818; + static attribute_13819 = 13819; + static attribute_13820 = 13820; + static attribute_13821 = 13821; + static attribute_13822 = 13822; + static attribute_13823 = 13823; + static attribute_13824 = 13824; + static attribute_13825 = 13825; + static attribute_13826 = 13826; + static attribute_13827 = 13827; + static attribute_13828 = 13828; + static attribute_13829 = 13829; + static attribute_13830 = 13830; + static attribute_13831 = 13831; + static attribute_13832 = 13832; + static attribute_13833 = 13833; + static attribute_13834 = 13834; + static attribute_13835 = 13835; + static attribute_13836 = 13836; + static attribute_13837 = 13837; + static attribute_13838 = 13838; + static attribute_13839 = 13839; + static attribute_13840 = 13840; + static attribute_13841 = 13841; + static attribute_13842 = 13842; + static attribute_13843 = 13843; + static attribute_13844 = 13844; + static attribute_13845 = 13845; + static attribute_13846 = 13846; + static attribute_13847 = 13847; + static attribute_13848 = 13848; + static attribute_13849 = 13849; + static attribute_13850 = 13850; + static attribute_13851 = 13851; + static attribute_13852 = 13852; + static attribute_13853 = 13853; + static attribute_13854 = 13854; + static attribute_13855 = 13855; + static attribute_13856 = 13856; + static attribute_13857 = 13857; + static attribute_13858 = 13858; + static attribute_13859 = 13859; + static attribute_13860 = 13860; + static attribute_13861 = 13861; + static attribute_13862 = 13862; + static attribute_13863 = 13863; + static attribute_13864 = 13864; + static attribute_13865 = 13865; + static attribute_13866 = 13866; + static attribute_13867 = 13867; + static attribute_13868 = 13868; + static attribute_13869 = 13869; + static attribute_13870 = 13870; + static attribute_13871 = 13871; + static attribute_13872 = 13872; + static attribute_13873 = 13873; + static attribute_13874 = 13874; + static attribute_13875 = 13875; + static attribute_13876 = 13876; + static attribute_13877 = 13877; + static attribute_13878 = 13878; + static attribute_13879 = 13879; + static attribute_13880 = 13880; + static attribute_13881 = 13881; + static attribute_13882 = 13882; + static attribute_13883 = 13883; + static attribute_13884 = 13884; + static attribute_13885 = 13885; + static attribute_13886 = 13886; + static attribute_13887 = 13887; + static attribute_13888 = 13888; + static attribute_13889 = 13889; + static attribute_13890 = 13890; + static attribute_13891 = 13891; + static attribute_13892 = 13892; + static attribute_13893 = 13893; + static attribute_13894 = 13894; + static attribute_13895 = 13895; + static attribute_13896 = 13896; + static attribute_13897 = 13897; + static attribute_13898 = 13898; + static attribute_13899 = 13899; + static attribute_13900 = 13900; + static attribute_13901 = 13901; + static attribute_13902 = 13902; + static attribute_13903 = 13903; + static attribute_13904 = 13904; + static attribute_13905 = 13905; + static attribute_13906 = 13906; + static attribute_13907 = 13907; + static attribute_13908 = 13908; + static attribute_13909 = 13909; + static attribute_13910 = 13910; + static attribute_13911 = 13911; + static attribute_13912 = 13912; + static attribute_13913 = 13913; + static attribute_13914 = 13914; + static attribute_13915 = 13915; + static attribute_13916 = 13916; + static attribute_13917 = 13917; + static attribute_13918 = 13918; + static attribute_13919 = 13919; + static attribute_13920 = 13920; + static attribute_13921 = 13921; + static attribute_13922 = 13922; + static attribute_13923 = 13923; + static attribute_13924 = 13924; + static attribute_13925 = 13925; + static attribute_13926 = 13926; + static attribute_13927 = 13927; + static attribute_13928 = 13928; + static attribute_13929 = 13929; + static attribute_13930 = 13930; + static attribute_13931 = 13931; + static attribute_13932 = 13932; + static attribute_13933 = 13933; + static attribute_13934 = 13934; + static attribute_13935 = 13935; + static attribute_13936 = 13936; + static attribute_13937 = 13937; + static attribute_13938 = 13938; + static attribute_13939 = 13939; + static attribute_13940 = 13940; + static attribute_13941 = 13941; + static attribute_13942 = 13942; + static attribute_13943 = 13943; + static attribute_13944 = 13944; + static attribute_13945 = 13945; + static attribute_13946 = 13946; + static attribute_13947 = 13947; + static attribute_13948 = 13948; + static attribute_13949 = 13949; + static attribute_13950 = 13950; + static attribute_13951 = 13951; + static attribute_13952 = 13952; + static attribute_13953 = 13953; + static attribute_13954 = 13954; + static attribute_13955 = 13955; + static attribute_13956 = 13956; + static attribute_13957 = 13957; + static attribute_13958 = 13958; + static attribute_13959 = 13959; + static attribute_13960 = 13960; + static attribute_13961 = 13961; + static attribute_13962 = 13962; + static attribute_13963 = 13963; + static attribute_13964 = 13964; + static attribute_13965 = 13965; + static attribute_13966 = 13966; + static attribute_13967 = 13967; + static attribute_13968 = 13968; + static attribute_13969 = 13969; + static attribute_13970 = 13970; + static attribute_13971 = 13971; + static attribute_13972 = 13972; + static attribute_13973 = 13973; + static attribute_13974 = 13974; + static attribute_13975 = 13975; + static attribute_13976 = 13976; + static attribute_13977 = 13977; + static attribute_13978 = 13978; + static attribute_13979 = 13979; + static attribute_13980 = 13980; + static attribute_13981 = 13981; + static attribute_13982 = 13982; + static attribute_13983 = 13983; + static attribute_13984 = 13984; + static attribute_13985 = 13985; + static attribute_13986 = 13986; + static attribute_13987 = 13987; + static attribute_13988 = 13988; + static attribute_13989 = 13989; + static attribute_13990 = 13990; + static attribute_13991 = 13991; + static attribute_13992 = 13992; + static attribute_13993 = 13993; + static attribute_13994 = 13994; + static attribute_13995 = 13995; + static attribute_13996 = 13996; + static attribute_13997 = 13997; + static attribute_13998 = 13998; + static attribute_13999 = 13999; + static attribute_14000 = 14000; + static attribute_14001 = 14001; + static attribute_14002 = 14002; + static attribute_14003 = 14003; + static attribute_14004 = 14004; + static attribute_14005 = 14005; + static attribute_14006 = 14006; + static attribute_14007 = 14007; + static attribute_14008 = 14008; + static attribute_14009 = 14009; + static attribute_14010 = 14010; + static attribute_14011 = 14011; + static attribute_14012 = 14012; + static attribute_14013 = 14013; + static attribute_14014 = 14014; + static attribute_14015 = 14015; + static attribute_14016 = 14016; + static attribute_14017 = 14017; + static attribute_14018 = 14018; + static attribute_14019 = 14019; + static attribute_14020 = 14020; + static attribute_14021 = 14021; + static attribute_14022 = 14022; + static attribute_14023 = 14023; + static attribute_14024 = 14024; + static attribute_14025 = 14025; + static attribute_14026 = 14026; + static attribute_14027 = 14027; + static attribute_14028 = 14028; + static attribute_14029 = 14029; + static attribute_14030 = 14030; + static attribute_14031 = 14031; + static attribute_14032 = 14032; + static attribute_14033 = 14033; + static attribute_14034 = 14034; + static attribute_14035 = 14035; + static attribute_14036 = 14036; + static attribute_14037 = 14037; + static attribute_14038 = 14038; + static attribute_14039 = 14039; + static attribute_14040 = 14040; + static attribute_14041 = 14041; + static attribute_14042 = 14042; + static attribute_14043 = 14043; + static attribute_14044 = 14044; + static attribute_14045 = 14045; + static attribute_14046 = 14046; + static attribute_14047 = 14047; + static attribute_14048 = 14048; + static attribute_14049 = 14049; + static attribute_14050 = 14050; + static attribute_14051 = 14051; + static attribute_14052 = 14052; + static attribute_14053 = 14053; + static attribute_14054 = 14054; + static attribute_14055 = 14055; + static attribute_14056 = 14056; + static attribute_14057 = 14057; + static attribute_14058 = 14058; + static attribute_14059 = 14059; + static attribute_14060 = 14060; + static attribute_14061 = 14061; + static attribute_14062 = 14062; + static attribute_14063 = 14063; + static attribute_14064 = 14064; + static attribute_14065 = 14065; + static attribute_14066 = 14066; + static attribute_14067 = 14067; + static attribute_14068 = 14068; + static attribute_14069 = 14069; + static attribute_14070 = 14070; + static attribute_14071 = 14071; + static attribute_14072 = 14072; + static attribute_14073 = 14073; + static attribute_14074 = 14074; + static attribute_14075 = 14075; + static attribute_14076 = 14076; + static attribute_14077 = 14077; + static attribute_14078 = 14078; + static attribute_14079 = 14079; + static attribute_14080 = 14080; + static attribute_14081 = 14081; + static attribute_14082 = 14082; + static attribute_14083 = 14083; + static attribute_14084 = 14084; + static attribute_14085 = 14085; + static attribute_14086 = 14086; + static attribute_14087 = 14087; + static attribute_14088 = 14088; + static attribute_14089 = 14089; + static attribute_14090 = 14090; + static attribute_14091 = 14091; + static attribute_14092 = 14092; + static attribute_14093 = 14093; + static attribute_14094 = 14094; + static attribute_14095 = 14095; + static attribute_14096 = 14096; + static attribute_14097 = 14097; + static attribute_14098 = 14098; + static attribute_14099 = 14099; + static attribute_14100 = 14100; + static attribute_14101 = 14101; + static attribute_14102 = 14102; + static attribute_14103 = 14103; + static attribute_14104 = 14104; + static attribute_14105 = 14105; + static attribute_14106 = 14106; + static attribute_14107 = 14107; + static attribute_14108 = 14108; + static attribute_14109 = 14109; + static attribute_14110 = 14110; + static attribute_14111 = 14111; + static attribute_14112 = 14112; + static attribute_14113 = 14113; + static attribute_14114 = 14114; + static attribute_14115 = 14115; + static attribute_14116 = 14116; + static attribute_14117 = 14117; + static attribute_14118 = 14118; + static attribute_14119 = 14119; + static attribute_14120 = 14120; + static attribute_14121 = 14121; + static attribute_14122 = 14122; + static attribute_14123 = 14123; + static attribute_14124 = 14124; + static attribute_14125 = 14125; + static attribute_14126 = 14126; + static attribute_14127 = 14127; + static attribute_14128 = 14128; + static attribute_14129 = 14129; + static attribute_14130 = 14130; + static attribute_14131 = 14131; + static attribute_14132 = 14132; + static attribute_14133 = 14133; + static attribute_14134 = 14134; + static attribute_14135 = 14135; + static attribute_14136 = 14136; + static attribute_14137 = 14137; + static attribute_14138 = 14138; + static attribute_14139 = 14139; + static attribute_14140 = 14140; + static attribute_14141 = 14141; + static attribute_14142 = 14142; + static attribute_14143 = 14143; + static attribute_14144 = 14144; + static attribute_14145 = 14145; + static attribute_14146 = 14146; + static attribute_14147 = 14147; + static attribute_14148 = 14148; + static attribute_14149 = 14149; + static attribute_14150 = 14150; + static attribute_14151 = 14151; + static attribute_14152 = 14152; + static attribute_14153 = 14153; + static attribute_14154 = 14154; + static attribute_14155 = 14155; + static attribute_14156 = 14156; + static attribute_14157 = 14157; + static attribute_14158 = 14158; + static attribute_14159 = 14159; + static attribute_14160 = 14160; + static attribute_14161 = 14161; + static attribute_14162 = 14162; + static attribute_14163 = 14163; + static attribute_14164 = 14164; + static attribute_14165 = 14165; + static attribute_14166 = 14166; + static attribute_14167 = 14167; + static attribute_14168 = 14168; + static attribute_14169 = 14169; + static attribute_14170 = 14170; + static attribute_14171 = 14171; + static attribute_14172 = 14172; + static attribute_14173 = 14173; + static attribute_14174 = 14174; + static attribute_14175 = 14175; + static attribute_14176 = 14176; + static attribute_14177 = 14177; + static attribute_14178 = 14178; + static attribute_14179 = 14179; + static attribute_14180 = 14180; + static attribute_14181 = 14181; + static attribute_14182 = 14182; + static attribute_14183 = 14183; + static attribute_14184 = 14184; + static attribute_14185 = 14185; + static attribute_14186 = 14186; + static attribute_14187 = 14187; + static attribute_14188 = 14188; + static attribute_14189 = 14189; + static attribute_14190 = 14190; + static attribute_14191 = 14191; + static attribute_14192 = 14192; + static attribute_14193 = 14193; + static attribute_14194 = 14194; + static attribute_14195 = 14195; + static attribute_14196 = 14196; + static attribute_14197 = 14197; + static attribute_14198 = 14198; + static attribute_14199 = 14199; + static attribute_14200 = 14200; + static attribute_14201 = 14201; + static attribute_14202 = 14202; + static attribute_14203 = 14203; + static attribute_14204 = 14204; + static attribute_14205 = 14205; + static attribute_14206 = 14206; + static attribute_14207 = 14207; + static attribute_14208 = 14208; + static attribute_14209 = 14209; + static attribute_14210 = 14210; + static attribute_14211 = 14211; + static attribute_14212 = 14212; + static attribute_14213 = 14213; + static attribute_14214 = 14214; + static attribute_14215 = 14215; + static attribute_14216 = 14216; + static attribute_14217 = 14217; + static attribute_14218 = 14218; + static attribute_14219 = 14219; + static attribute_14220 = 14220; + static attribute_14221 = 14221; + static attribute_14222 = 14222; + static attribute_14223 = 14223; + static attribute_14224 = 14224; + static attribute_14225 = 14225; + static attribute_14226 = 14226; + static attribute_14227 = 14227; + static attribute_14228 = 14228; + static attribute_14229 = 14229; + static attribute_14230 = 14230; + static attribute_14231 = 14231; + static attribute_14232 = 14232; + static attribute_14233 = 14233; + static attribute_14234 = 14234; + static attribute_14235 = 14235; + static attribute_14236 = 14236; + static attribute_14237 = 14237; + static attribute_14238 = 14238; + static attribute_14239 = 14239; + static attribute_14240 = 14240; + static attribute_14241 = 14241; + static attribute_14242 = 14242; + static attribute_14243 = 14243; + static attribute_14244 = 14244; + static attribute_14245 = 14245; + static attribute_14246 = 14246; + static attribute_14247 = 14247; + static attribute_14248 = 14248; + static attribute_14249 = 14249; + static attribute_14250 = 14250; + static attribute_14251 = 14251; + static attribute_14252 = 14252; + static attribute_14253 = 14253; + static attribute_14254 = 14254; + static attribute_14255 = 14255; + static attribute_14256 = 14256; + static attribute_14257 = 14257; + static attribute_14258 = 14258; + static attribute_14259 = 14259; + static attribute_14260 = 14260; + static attribute_14261 = 14261; + static attribute_14262 = 14262; + static attribute_14263 = 14263; + static attribute_14264 = 14264; + static attribute_14265 = 14265; + static attribute_14266 = 14266; + static attribute_14267 = 14267; + static attribute_14268 = 14268; + static attribute_14269 = 14269; + static attribute_14270 = 14270; + static attribute_14271 = 14271; + static attribute_14272 = 14272; + static attribute_14273 = 14273; + static attribute_14274 = 14274; + static attribute_14275 = 14275; + static attribute_14276 = 14276; + static attribute_14277 = 14277; + static attribute_14278 = 14278; + static attribute_14279 = 14279; + static attribute_14280 = 14280; + static attribute_14281 = 14281; + static attribute_14282 = 14282; + static attribute_14283 = 14283; + static attribute_14284 = 14284; + static attribute_14285 = 14285; + static attribute_14286 = 14286; + static attribute_14287 = 14287; + static attribute_14288 = 14288; + static attribute_14289 = 14289; + static attribute_14290 = 14290; + static attribute_14291 = 14291; + static attribute_14292 = 14292; + static attribute_14293 = 14293; + static attribute_14294 = 14294; + static attribute_14295 = 14295; + static attribute_14296 = 14296; + static attribute_14297 = 14297; + static attribute_14298 = 14298; + static attribute_14299 = 14299; + static attribute_14300 = 14300; + static attribute_14301 = 14301; + static attribute_14302 = 14302; + static attribute_14303 = 14303; + static attribute_14304 = 14304; + static attribute_14305 = 14305; + static attribute_14306 = 14306; + static attribute_14307 = 14307; + static attribute_14308 = 14308; + static attribute_14309 = 14309; + static attribute_14310 = 14310; + static attribute_14311 = 14311; + static attribute_14312 = 14312; + static attribute_14313 = 14313; + static attribute_14314 = 14314; + static attribute_14315 = 14315; + static attribute_14316 = 14316; + static attribute_14317 = 14317; + static attribute_14318 = 14318; + static attribute_14319 = 14319; + static attribute_14320 = 14320; + static attribute_14321 = 14321; + static attribute_14322 = 14322; + static attribute_14323 = 14323; + static attribute_14324 = 14324; + static attribute_14325 = 14325; + static attribute_14326 = 14326; + static attribute_14327 = 14327; + static attribute_14328 = 14328; + static attribute_14329 = 14329; + static attribute_14330 = 14330; + static attribute_14331 = 14331; + static attribute_14332 = 14332; + static attribute_14333 = 14333; + static attribute_14334 = 14334; + static attribute_14335 = 14335; + static attribute_14336 = 14336; + static attribute_14337 = 14337; + static attribute_14338 = 14338; + static attribute_14339 = 14339; + static attribute_14340 = 14340; + static attribute_14341 = 14341; + static attribute_14342 = 14342; + static attribute_14343 = 14343; + static attribute_14344 = 14344; + static attribute_14345 = 14345; + static attribute_14346 = 14346; + static attribute_14347 = 14347; + static attribute_14348 = 14348; + static attribute_14349 = 14349; + static attribute_14350 = 14350; + static attribute_14351 = 14351; + static attribute_14352 = 14352; + static attribute_14353 = 14353; + static attribute_14354 = 14354; + static attribute_14355 = 14355; + static attribute_14356 = 14356; + static attribute_14357 = 14357; + static attribute_14358 = 14358; + static attribute_14359 = 14359; + static attribute_14360 = 14360; + static attribute_14361 = 14361; + static attribute_14362 = 14362; + static attribute_14363 = 14363; + static attribute_14364 = 14364; + static attribute_14365 = 14365; + static attribute_14366 = 14366; + static attribute_14367 = 14367; + static attribute_14368 = 14368; + static attribute_14369 = 14369; + static attribute_14370 = 14370; + static attribute_14371 = 14371; + static attribute_14372 = 14372; + static attribute_14373 = 14373; + static attribute_14374 = 14374; + static attribute_14375 = 14375; + static attribute_14376 = 14376; + static attribute_14377 = 14377; + static attribute_14378 = 14378; + static attribute_14379 = 14379; + static attribute_14380 = 14380; + static attribute_14381 = 14381; + static attribute_14382 = 14382; + static attribute_14383 = 14383; + static attribute_14384 = 14384; + static attribute_14385 = 14385; + static attribute_14386 = 14386; + static attribute_14387 = 14387; + static attribute_14388 = 14388; + static attribute_14389 = 14389; + static attribute_14390 = 14390; + static attribute_14391 = 14391; + static attribute_14392 = 14392; + static attribute_14393 = 14393; + static attribute_14394 = 14394; + static attribute_14395 = 14395; + static attribute_14396 = 14396; + static attribute_14397 = 14397; + static attribute_14398 = 14398; + static attribute_14399 = 14399; + static attribute_14400 = 14400; + static attribute_14401 = 14401; + static attribute_14402 = 14402; + static attribute_14403 = 14403; + static attribute_14404 = 14404; + static attribute_14405 = 14405; + static attribute_14406 = 14406; + static attribute_14407 = 14407; + static attribute_14408 = 14408; + static attribute_14409 = 14409; + static attribute_14410 = 14410; + static attribute_14411 = 14411; + static attribute_14412 = 14412; + static attribute_14413 = 14413; + static attribute_14414 = 14414; + static attribute_14415 = 14415; + static attribute_14416 = 14416; + static attribute_14417 = 14417; + static attribute_14418 = 14418; + static attribute_14419 = 14419; + static attribute_14420 = 14420; + static attribute_14421 = 14421; + static attribute_14422 = 14422; + static attribute_14423 = 14423; + static attribute_14424 = 14424; + static attribute_14425 = 14425; + static attribute_14426 = 14426; + static attribute_14427 = 14427; + static attribute_14428 = 14428; + static attribute_14429 = 14429; + static attribute_14430 = 14430; + static attribute_14431 = 14431; + static attribute_14432 = 14432; + static attribute_14433 = 14433; + static attribute_14434 = 14434; + static attribute_14435 = 14435; + static attribute_14436 = 14436; + static attribute_14437 = 14437; + static attribute_14438 = 14438; + static attribute_14439 = 14439; + static attribute_14440 = 14440; + static attribute_14441 = 14441; + static attribute_14442 = 14442; + static attribute_14443 = 14443; + static attribute_14444 = 14444; + static attribute_14445 = 14445; + static attribute_14446 = 14446; + static attribute_14447 = 14447; + static attribute_14448 = 14448; + static attribute_14449 = 14449; + static attribute_14450 = 14450; + static attribute_14451 = 14451; + static attribute_14452 = 14452; + static attribute_14453 = 14453; + static attribute_14454 = 14454; + static attribute_14455 = 14455; + static attribute_14456 = 14456; + static attribute_14457 = 14457; + static attribute_14458 = 14458; + static attribute_14459 = 14459; + static attribute_14460 = 14460; + static attribute_14461 = 14461; + static attribute_14462 = 14462; + static attribute_14463 = 14463; + static attribute_14464 = 14464; + static attribute_14465 = 14465; + static attribute_14466 = 14466; + static attribute_14467 = 14467; + static attribute_14468 = 14468; + static attribute_14469 = 14469; + static attribute_14470 = 14470; + static attribute_14471 = 14471; + static attribute_14472 = 14472; + static attribute_14473 = 14473; + static attribute_14474 = 14474; + static attribute_14475 = 14475; + static attribute_14476 = 14476; + static attribute_14477 = 14477; + static attribute_14478 = 14478; + static attribute_14479 = 14479; + static attribute_14480 = 14480; + static attribute_14481 = 14481; + static attribute_14482 = 14482; + static attribute_14483 = 14483; + static attribute_14484 = 14484; + static attribute_14485 = 14485; + static attribute_14486 = 14486; + static attribute_14487 = 14487; + static attribute_14488 = 14488; + static attribute_14489 = 14489; + static attribute_14490 = 14490; + static attribute_14491 = 14491; + static attribute_14492 = 14492; + static attribute_14493 = 14493; + static attribute_14494 = 14494; + static attribute_14495 = 14495; + static attribute_14496 = 14496; + static attribute_14497 = 14497; + static attribute_14498 = 14498; + static attribute_14499 = 14499; + static attribute_14500 = 14500; + static attribute_14501 = 14501; + static attribute_14502 = 14502; + static attribute_14503 = 14503; + static attribute_14504 = 14504; + static attribute_14505 = 14505; + static attribute_14506 = 14506; + static attribute_14507 = 14507; + static attribute_14508 = 14508; + static attribute_14509 = 14509; + static attribute_14510 = 14510; + static attribute_14511 = 14511; + static attribute_14512 = 14512; + static attribute_14513 = 14513; + static attribute_14514 = 14514; + static attribute_14515 = 14515; + static attribute_14516 = 14516; + static attribute_14517 = 14517; + static attribute_14518 = 14518; + static attribute_14519 = 14519; + static attribute_14520 = 14520; + static attribute_14521 = 14521; + static attribute_14522 = 14522; + static attribute_14523 = 14523; + static attribute_14524 = 14524; + static attribute_14525 = 14525; + static attribute_14526 = 14526; + static attribute_14527 = 14527; + static attribute_14528 = 14528; + static attribute_14529 = 14529; + static attribute_14530 = 14530; + static attribute_14531 = 14531; + static attribute_14532 = 14532; + static attribute_14533 = 14533; + static attribute_14534 = 14534; + static attribute_14535 = 14535; + static attribute_14536 = 14536; + static attribute_14537 = 14537; + static attribute_14538 = 14538; + static attribute_14539 = 14539; + static attribute_14540 = 14540; + static attribute_14541 = 14541; + static attribute_14542 = 14542; + static attribute_14543 = 14543; + static attribute_14544 = 14544; + static attribute_14545 = 14545; + static attribute_14546 = 14546; + static attribute_14547 = 14547; + static attribute_14548 = 14548; + static attribute_14549 = 14549; + static attribute_14550 = 14550; + static attribute_14551 = 14551; + static attribute_14552 = 14552; + static attribute_14553 = 14553; + static attribute_14554 = 14554; + static attribute_14555 = 14555; + static attribute_14556 = 14556; + static attribute_14557 = 14557; + static attribute_14558 = 14558; + static attribute_14559 = 14559; + static attribute_14560 = 14560; + static attribute_14561 = 14561; + static attribute_14562 = 14562; + static attribute_14563 = 14563; + static attribute_14564 = 14564; + static attribute_14565 = 14565; + static attribute_14566 = 14566; + static attribute_14567 = 14567; + static attribute_14568 = 14568; + static attribute_14569 = 14569; + static attribute_14570 = 14570; + static attribute_14571 = 14571; + static attribute_14572 = 14572; + static attribute_14573 = 14573; + static attribute_14574 = 14574; + static attribute_14575 = 14575; + static attribute_14576 = 14576; + static attribute_14577 = 14577; + static attribute_14578 = 14578; + static attribute_14579 = 14579; + static attribute_14580 = 14580; + static attribute_14581 = 14581; + static attribute_14582 = 14582; + static attribute_14583 = 14583; + static attribute_14584 = 14584; + static attribute_14585 = 14585; + static attribute_14586 = 14586; + static attribute_14587 = 14587; + static attribute_14588 = 14588; + static attribute_14589 = 14589; + static attribute_14590 = 14590; + static attribute_14591 = 14591; + static attribute_14592 = 14592; + static attribute_14593 = 14593; + static attribute_14594 = 14594; + static attribute_14595 = 14595; + static attribute_14596 = 14596; + static attribute_14597 = 14597; + static attribute_14598 = 14598; + static attribute_14599 = 14599; + static attribute_14600 = 14600; + static attribute_14601 = 14601; + static attribute_14602 = 14602; + static attribute_14603 = 14603; + static attribute_14604 = 14604; + static attribute_14605 = 14605; + static attribute_14606 = 14606; + static attribute_14607 = 14607; + static attribute_14608 = 14608; + static attribute_14609 = 14609; + static attribute_14610 = 14610; + static attribute_14611 = 14611; + static attribute_14612 = 14612; + static attribute_14613 = 14613; + static attribute_14614 = 14614; + static attribute_14615 = 14615; + static attribute_14616 = 14616; + static attribute_14617 = 14617; + static attribute_14618 = 14618; + static attribute_14619 = 14619; + static attribute_14620 = 14620; + static attribute_14621 = 14621; + static attribute_14622 = 14622; + static attribute_14623 = 14623; + static attribute_14624 = 14624; + static attribute_14625 = 14625; + static attribute_14626 = 14626; + static attribute_14627 = 14627; + static attribute_14628 = 14628; + static attribute_14629 = 14629; + static attribute_14630 = 14630; + static attribute_14631 = 14631; + static attribute_14632 = 14632; + static attribute_14633 = 14633; + static attribute_14634 = 14634; + static attribute_14635 = 14635; + static attribute_14636 = 14636; + static attribute_14637 = 14637; + static attribute_14638 = 14638; + static attribute_14639 = 14639; + static attribute_14640 = 14640; + static attribute_14641 = 14641; + static attribute_14642 = 14642; + static attribute_14643 = 14643; + static attribute_14644 = 14644; + static attribute_14645 = 14645; + static attribute_14646 = 14646; + static attribute_14647 = 14647; + static attribute_14648 = 14648; + static attribute_14649 = 14649; + static attribute_14650 = 14650; + static attribute_14651 = 14651; + static attribute_14652 = 14652; + static attribute_14653 = 14653; + static attribute_14654 = 14654; + static attribute_14655 = 14655; + static attribute_14656 = 14656; + static attribute_14657 = 14657; + static attribute_14658 = 14658; + static attribute_14659 = 14659; + static attribute_14660 = 14660; + static attribute_14661 = 14661; + static attribute_14662 = 14662; + static attribute_14663 = 14663; + static attribute_14664 = 14664; + static attribute_14665 = 14665; + static attribute_14666 = 14666; + static attribute_14667 = 14667; + static attribute_14668 = 14668; + static attribute_14669 = 14669; + static attribute_14670 = 14670; + static attribute_14671 = 14671; + static attribute_14672 = 14672; + static attribute_14673 = 14673; + static attribute_14674 = 14674; + static attribute_14675 = 14675; + static attribute_14676 = 14676; + static attribute_14677 = 14677; + static attribute_14678 = 14678; + static attribute_14679 = 14679; + static attribute_14680 = 14680; + static attribute_14681 = 14681; + static attribute_14682 = 14682; + static attribute_14683 = 14683; + static attribute_14684 = 14684; + static attribute_14685 = 14685; + static attribute_14686 = 14686; + static attribute_14687 = 14687; + static attribute_14688 = 14688; + static attribute_14689 = 14689; + static attribute_14690 = 14690; + static attribute_14691 = 14691; + static attribute_14692 = 14692; + static attribute_14693 = 14693; + static attribute_14694 = 14694; + static attribute_14695 = 14695; + static attribute_14696 = 14696; + static attribute_14697 = 14697; + static attribute_14698 = 14698; + static attribute_14699 = 14699; + static attribute_14700 = 14700; + static attribute_14701 = 14701; + static attribute_14702 = 14702; + static attribute_14703 = 14703; + static attribute_14704 = 14704; + static attribute_14705 = 14705; + static attribute_14706 = 14706; + static attribute_14707 = 14707; + static attribute_14708 = 14708; + static attribute_14709 = 14709; + static attribute_14710 = 14710; + static attribute_14711 = 14711; + static attribute_14712 = 14712; + static attribute_14713 = 14713; + static attribute_14714 = 14714; + static attribute_14715 = 14715; + static attribute_14716 = 14716; + static attribute_14717 = 14717; + static attribute_14718 = 14718; + static attribute_14719 = 14719; + static attribute_14720 = 14720; + static attribute_14721 = 14721; + static attribute_14722 = 14722; + static attribute_14723 = 14723; + static attribute_14724 = 14724; + static attribute_14725 = 14725; + static attribute_14726 = 14726; + static attribute_14727 = 14727; + static attribute_14728 = 14728; + static attribute_14729 = 14729; + static attribute_14730 = 14730; + static attribute_14731 = 14731; + static attribute_14732 = 14732; + static attribute_14733 = 14733; + static attribute_14734 = 14734; + static attribute_14735 = 14735; + static attribute_14736 = 14736; + static attribute_14737 = 14737; + static attribute_14738 = 14738; + static attribute_14739 = 14739; + static attribute_14740 = 14740; + static attribute_14741 = 14741; + static attribute_14742 = 14742; + static attribute_14743 = 14743; + static attribute_14744 = 14744; + static attribute_14745 = 14745; + static attribute_14746 = 14746; + static attribute_14747 = 14747; + static attribute_14748 = 14748; + static attribute_14749 = 14749; + static attribute_14750 = 14750; + static attribute_14751 = 14751; + static attribute_14752 = 14752; + static attribute_14753 = 14753; + static attribute_14754 = 14754; + static attribute_14755 = 14755; + static attribute_14756 = 14756; + static attribute_14757 = 14757; + static attribute_14758 = 14758; + static attribute_14759 = 14759; + static attribute_14760 = 14760; + static attribute_14761 = 14761; + static attribute_14762 = 14762; + static attribute_14763 = 14763; + static attribute_14764 = 14764; + static attribute_14765 = 14765; + static attribute_14766 = 14766; + static attribute_14767 = 14767; + static attribute_14768 = 14768; + static attribute_14769 = 14769; + static attribute_14770 = 14770; + static attribute_14771 = 14771; + static attribute_14772 = 14772; + static attribute_14773 = 14773; + static attribute_14774 = 14774; + static attribute_14775 = 14775; + static attribute_14776 = 14776; + static attribute_14777 = 14777; + static attribute_14778 = 14778; + static attribute_14779 = 14779; + static attribute_14780 = 14780; + static attribute_14781 = 14781; + static attribute_14782 = 14782; + static attribute_14783 = 14783; + static attribute_14784 = 14784; + static attribute_14785 = 14785; + static attribute_14786 = 14786; + static attribute_14787 = 14787; + static attribute_14788 = 14788; + static attribute_14789 = 14789; + static attribute_14790 = 14790; + static attribute_14791 = 14791; + static attribute_14792 = 14792; + static attribute_14793 = 14793; + static attribute_14794 = 14794; + static attribute_14795 = 14795; + static attribute_14796 = 14796; + static attribute_14797 = 14797; + static attribute_14798 = 14798; + static attribute_14799 = 14799; + static attribute_14800 = 14800; + static attribute_14801 = 14801; + static attribute_14802 = 14802; + static attribute_14803 = 14803; + static attribute_14804 = 14804; + static attribute_14805 = 14805; + static attribute_14806 = 14806; + static attribute_14807 = 14807; + static attribute_14808 = 14808; + static attribute_14809 = 14809; + static attribute_14810 = 14810; + static attribute_14811 = 14811; + static attribute_14812 = 14812; + static attribute_14813 = 14813; + static attribute_14814 = 14814; + static attribute_14815 = 14815; + static attribute_14816 = 14816; + static attribute_14817 = 14817; + static attribute_14818 = 14818; + static attribute_14819 = 14819; + static attribute_14820 = 14820; + static attribute_14821 = 14821; + static attribute_14822 = 14822; + static attribute_14823 = 14823; + static attribute_14824 = 14824; + static attribute_14825 = 14825; + static attribute_14826 = 14826; + static attribute_14827 = 14827; + static attribute_14828 = 14828; + static attribute_14829 = 14829; + static attribute_14830 = 14830; + static attribute_14831 = 14831; + static attribute_14832 = 14832; + static attribute_14833 = 14833; + static attribute_14834 = 14834; + static attribute_14835 = 14835; + static attribute_14836 = 14836; + static attribute_14837 = 14837; + static attribute_14838 = 14838; + static attribute_14839 = 14839; + static attribute_14840 = 14840; + static attribute_14841 = 14841; + static attribute_14842 = 14842; + static attribute_14843 = 14843; + static attribute_14844 = 14844; + static attribute_14845 = 14845; + static attribute_14846 = 14846; + static attribute_14847 = 14847; + static attribute_14848 = 14848; + static attribute_14849 = 14849; + static attribute_14850 = 14850; + static attribute_14851 = 14851; + static attribute_14852 = 14852; + static attribute_14853 = 14853; + static attribute_14854 = 14854; + static attribute_14855 = 14855; + static attribute_14856 = 14856; + static attribute_14857 = 14857; + static attribute_14858 = 14858; + static attribute_14859 = 14859; + static attribute_14860 = 14860; + static attribute_14861 = 14861; + static attribute_14862 = 14862; + static attribute_14863 = 14863; + static attribute_14864 = 14864; + static attribute_14865 = 14865; + static attribute_14866 = 14866; + static attribute_14867 = 14867; + static attribute_14868 = 14868; + static attribute_14869 = 14869; + static attribute_14870 = 14870; + static attribute_14871 = 14871; + static attribute_14872 = 14872; + static attribute_14873 = 14873; + static attribute_14874 = 14874; + static attribute_14875 = 14875; + static attribute_14876 = 14876; + static attribute_14877 = 14877; + static attribute_14878 = 14878; + static attribute_14879 = 14879; + static attribute_14880 = 14880; + static attribute_14881 = 14881; + static attribute_14882 = 14882; + static attribute_14883 = 14883; + static attribute_14884 = 14884; + static attribute_14885 = 14885; + static attribute_14886 = 14886; + static attribute_14887 = 14887; + static attribute_14888 = 14888; + static attribute_14889 = 14889; + static attribute_14890 = 14890; + static attribute_14891 = 14891; + static attribute_14892 = 14892; + static attribute_14893 = 14893; + static attribute_14894 = 14894; + static attribute_14895 = 14895; + static attribute_14896 = 14896; + static attribute_14897 = 14897; + static attribute_14898 = 14898; + static attribute_14899 = 14899; + static attribute_14900 = 14900; + static attribute_14901 = 14901; + static attribute_14902 = 14902; + static attribute_14903 = 14903; + static attribute_14904 = 14904; + static attribute_14905 = 14905; + static attribute_14906 = 14906; + static attribute_14907 = 14907; + static attribute_14908 = 14908; + static attribute_14909 = 14909; + static attribute_14910 = 14910; + static attribute_14911 = 14911; + static attribute_14912 = 14912; + static attribute_14913 = 14913; + static attribute_14914 = 14914; + static attribute_14915 = 14915; + static attribute_14916 = 14916; + static attribute_14917 = 14917; + static attribute_14918 = 14918; + static attribute_14919 = 14919; + static attribute_14920 = 14920; + static attribute_14921 = 14921; + static attribute_14922 = 14922; + static attribute_14923 = 14923; + static attribute_14924 = 14924; + static attribute_14925 = 14925; + static attribute_14926 = 14926; + static attribute_14927 = 14927; + static attribute_14928 = 14928; + static attribute_14929 = 14929; + static attribute_14930 = 14930; + static attribute_14931 = 14931; + static attribute_14932 = 14932; + static attribute_14933 = 14933; + static attribute_14934 = 14934; + static attribute_14935 = 14935; + static attribute_14936 = 14936; + static attribute_14937 = 14937; + static attribute_14938 = 14938; + static attribute_14939 = 14939; + static attribute_14940 = 14940; + static attribute_14941 = 14941; + static attribute_14942 = 14942; + static attribute_14943 = 14943; + static attribute_14944 = 14944; + static attribute_14945 = 14945; + static attribute_14946 = 14946; + static attribute_14947 = 14947; + static attribute_14948 = 14948; + static attribute_14949 = 14949; + static attribute_14950 = 14950; + static attribute_14951 = 14951; + static attribute_14952 = 14952; + static attribute_14953 = 14953; + static attribute_14954 = 14954; + static attribute_14955 = 14955; + static attribute_14956 = 14956; + static attribute_14957 = 14957; + static attribute_14958 = 14958; + static attribute_14959 = 14959; + static attribute_14960 = 14960; + static attribute_14961 = 14961; + static attribute_14962 = 14962; + static attribute_14963 = 14963; + static attribute_14964 = 14964; + static attribute_14965 = 14965; + static attribute_14966 = 14966; + static attribute_14967 = 14967; + static attribute_14968 = 14968; + static attribute_14969 = 14969; + static attribute_14970 = 14970; + static attribute_14971 = 14971; + static attribute_14972 = 14972; + static attribute_14973 = 14973; + static attribute_14974 = 14974; + static attribute_14975 = 14975; + static attribute_14976 = 14976; + static attribute_14977 = 14977; + static attribute_14978 = 14978; + static attribute_14979 = 14979; + static attribute_14980 = 14980; + static attribute_14981 = 14981; + static attribute_14982 = 14982; + static attribute_14983 = 14983; + static attribute_14984 = 14984; + static attribute_14985 = 14985; + static attribute_14986 = 14986; + static attribute_14987 = 14987; + static attribute_14988 = 14988; + static attribute_14989 = 14989; + static attribute_14990 = 14990; + static attribute_14991 = 14991; + static attribute_14992 = 14992; + static attribute_14993 = 14993; + static attribute_14994 = 14994; + static attribute_14995 = 14995; + static attribute_14996 = 14996; + static attribute_14997 = 14997; + static attribute_14998 = 14998; + static attribute_14999 = 14999; +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/module.json5 b/code/ArkTS1.2/ModuleSample/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..de78b5cae3b2ba99788048311e5d0cd34d075039 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/module.json5 @@ -0,0 +1,38 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/color.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..3c712962da3c2751c2b9ddb53559afcbd2b54a02 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/float.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/string.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..3224d66293285b31e7d8c95d6723fa7ff1e1378c --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "模块化引用" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/background.png b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f Binary files /dev/null and b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/background.png differ diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/foreground.png b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..97014d3e10e5ff511409c378cd4255713aecd85f Binary files /dev/null and b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/foreground.png differ diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/layered_image.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000000000000000000000000000000000000..fb49920440fb4d246c82f9ada275e26123a2136a --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:background", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/startIcon.png b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/media/startIcon.png differ diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/backup_config.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000000000000000000000000000000000..78f40ae7c494d71e2482278f359ec790ca73471a --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/main_pages.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..1898d94f58d6128ab712be2c68acc7c98e9ab9ce --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/ArkTS1.2/ModuleSample/entry/src/main/resources/dark/element/color.json b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..79b11c2747aec33e710fd3a7b2b3c94dd9965499 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/hvigor/hvigor-config.json5 b/code/ArkTS1.2/ModuleSample/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..85e8d4b2175fc4747650344f025e7d145bc3d361 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.1.0", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/ArkTS1.2/ModuleSample/hvigorfile.ts b/code/ArkTS1.2/ModuleSample/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3cb9f1a87a81687554a76283af8df27d8bda775 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ModuleSample/importHar/.gitignore b/code/ArkTS1.2/ModuleSample/importHar/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/importHar/Index.ets b/code/ArkTS1.2/ModuleSample/importHar/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..58fb0e066e441949f3098fdb2fcabd51da944629 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/Index.ets @@ -0,0 +1 @@ +export { Har } from './src/main/ets/components/MainPage'; diff --git a/code/ArkTS1.2/ModuleSample/importHar/build-profile.json5 b/code/ArkTS1.2/ModuleSample/importHar/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..e6773f9f5d76a66d6d19fddc9c6ddb3f5621d3b1 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/build-profile.json5 @@ -0,0 +1,31 @@ +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest" + } + ] +} diff --git a/code/ArkTS1.2/ModuleSample/importHar/consumer-rules.txt b/code/ArkTS1.2/ModuleSample/importHar/consumer-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/code/ArkTS1.2/ModuleSample/importHar/hvigorfile.ts b/code/ArkTS1.2/ModuleSample/importHar/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..42187071482d292588ad40babeda74f7b8d97a23 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/hvigorfile.ts @@ -0,0 +1,6 @@ +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ModuleSample/importHar/obfuscation-rules.txt b/code/ArkTS1.2/ModuleSample/importHar/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/importHar/oh-package.json5 b/code/ArkTS1.2/ModuleSample/importHar/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..3a9964ae3a3c5192a079b841f35a58ce86f59c17 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/oh-package.json5 @@ -0,0 +1,9 @@ +{ + "name": "importhar", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "Index.ets", + "author": "", + "license": "Apache-2.0", + "dependencies": {} +} diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/main/ets/components/MainPage.ets b/code/ArkTS1.2/ModuleSample/importHar/src/main/ets/components/MainPage.ets new file mode 100644 index 0000000000000000000000000000000000000000..fd735bf62414e9606b287e5e237e7dc67761c898 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/main/ets/components/MainPage.ets @@ -0,0 +1,6 @@ +import hilog from '@ohos.hilog' +export class Har { + static { + hilog.info(0x0000, 'testTag', 'executeModule mod 导入har包'); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/main/module.json5 b/code/ArkTS1.2/ModuleSample/importHar/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..189a591c84d1c39e5520d8bf6ed5165eef4cc883 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/main/module.json5 @@ -0,0 +1,11 @@ +{ + "module": { + "name": "importHar", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ] + } +} diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/main/resources/base/element/float.json b/code/ArkTS1.2/ModuleSample/importHar/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/main/resources/base/element/string.json b/code/ArkTS1.2/ModuleSample/importHar/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..f51a9c8461a55f6312ef950344e3145b7f82d607 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/main/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/ets/test/Ability.test.ets b/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..85c78f67579d6e31b5f5aeea463e216b9b141048 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,35 @@ +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/ets/test/List.test.ets b/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..794c7dc4ed66bd98fa3865e07922906e2fcef545 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,5 @@ +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/module.json5 b/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..ea8114c9c6c687b74fde6f529fc5dc8aa6de43e2 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/ohosTest/module.json5 @@ -0,0 +1,13 @@ +{ + "module": { + "name": "importHar_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/test/List.test.ets b/code/ArkTS1.2/ModuleSample/importHar/src/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..bb5b5c3731e283dd507c847560ee59bde477bbc7 --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/test/List.test.ets @@ -0,0 +1,5 @@ +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/importHar/src/test/LocalUnit.test.ets b/code/ArkTS1.2/ModuleSample/importHar/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..165fc1615ee8618b4cb6a622f144a9a707eee99f --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/importHar/src/test/LocalUnit.test.ets @@ -0,0 +1,33 @@ +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/code/ArkTS1.2/ModuleSample/oh-package.json5 b/code/ArkTS1.2/ModuleSample/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..7f512c9632708e85a7ea34e739c01b0b8f1ad92e --- /dev/null +++ b/code/ArkTS1.2/ModuleSample/oh-package.json5 @@ -0,0 +1,8 @@ +{ + "modelVersion": "5.1.0", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + } +} diff --git a/code/ArkTS1.2/ParallelSample/.gitignore b/code/ArkTS1.2/ParallelSample/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d2ff20141ceed86d87c0ea5d99481973005bab2b --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/AppScope/app.json5 b/code/ArkTS1.2/ParallelSample/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..eeae94b156aeffc44e73c7fcfe868ff3c0e3c6b3 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/AppScope/app.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "app": { + "bundleName": "com.samples.parallelTest", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/ArkTS1.2/ParallelSample/AppScope/resources/base/element/string.json b/code/ArkTS1.2/ParallelSample/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..89809692052f1e629b3f0e1ddbed4521c3d6932a --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "parallelTest" + } + ] +} diff --git a/code/ArkTS1.2/ParallelSample/AppScope/resources/base/media/app_icon.png b/code/ArkTS1.2/ParallelSample/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 Binary files /dev/null and b/code/ArkTS1.2/ParallelSample/AppScope/resources/base/media/app_icon.png differ diff --git a/code/ArkTS1.2/ParallelSample/README.md b/code/ArkTS1.2/ParallelSample/README.md new file mode 100644 index 0000000000000000000000000000000000000000..9b05cd8f90402ba0e9f964d505b081b5aa587b31 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/README.md @@ -0,0 +1,89 @@ +# 并行化处理 + +### 介绍 + +### EAWorker介绍 +EACoroutine特性是为开发者提供一个能够独占线程的协程,用于执行特定的任务。 +ArkTS演进的世界里只有协程的概念,用户创建的并发/异步任务实际通过不同的协程执行,当用户抛出重载任务会导致某个协程执行任务耗时过长影响系统调用,或用户期望有一个能够独立执行特定任务的协程,因此此处补充独占协程(Exclusive ArkTS Coroutine)。 + +### EAWorker工作机制 +在创建 EAWorker 时,可选择是否启用 interop 功能。不过,创建 EAWorker 会产生一定的内存和性能开销,而且大量创建 EAWorker 会抢占系统线程资源,因此需要对 EAWorker 的创建数量进行限制。 +若要创建 EAWorker,可调用 EAWorker 构造函数并传入一个布尔值参数,该参数用于控制是否启用 interop 功能,此功能仅在混合虚拟机环境下生效。 + +在混合虚拟机环境中,创建EAWorker,EAWorker对象可以调用run方法向EAWorker抛任务,利用EACoroutine设置并行化使用场景。 +创建打开interop的EAWorker对象,创建多个任务,用EAWorker对象并行地执行这些任务。观察结果是否和预期一致。 + +### AsyncLock(异步锁) + +为了解决多并发实例间的数据竞争问题,ArkTS语言基础库引入了异步锁能力。为了开发者的开发效率,AsyncLock对象支持跨并发实例引用传递。 + +使用异步锁的方法需要标记为async,调用方需要await修饰调用,才能保证时序正确。因此会导致外层调用函数全部标记成async。 + +### TaskPool介绍 +任务池(TaskPool)作用是为应用程序提供一个多线程的运行环境,降低整体资源的消耗、提高系统的整体性能,且无需关心线程实例的生命周期。 + +### TaskPool工作机制 +该接口设计简洁,易于使用,支持对任务进行执行、取消操作,同时具备指定任务优先级的能力。此外,通过系统统一的线程管理机制,结合动态调度和负载均衡算法,能够有效节省系统资源。 +当长时间没有任务需要分发时,工作线程会自动缩容,从而减少工作线程的数量。 + +### 效果预览 + +效果如下所示: + +|EAWorker|taskPool| +|--------------------------------|--------------------------------| +|![Alt text](entry/src/main/resources/base/media/eaworker.PNG)|![Alt text](entry/src/main/resources/base/media/taskpool.PNG)| + +使用说明 + +1. 在EAworker界面,依次点击蓝色按钮会在对应下方预期结果部分打印出对应日志; +2. 在taskPool界面,依次点击蓝色按钮会在对应下方预期结果部分打印出对应日志; + + +### 工程目录 + +``` +entry/src/main/ets/ +|---pages +| |---index.ets // 并行化首页 +``` + +### 具体实现 + +* EAWorker 源码参考: [Index.ets](entry/src/main/ets/pages/Index.ets) + * 不同线程共同操作一个函数-加锁 在[Index.ets](entry/src/main/ets/pages/Index.ets)中创建EAWoker线程,调用foo(),并且foo()加锁; + * 不同线程共同操作一个函数-不加锁 在[Index.ets](entry/src/main/ets/pages/Index.ets)中创建EAWoker线程,调用fooUnlock(); + * 不同线程操作不同函数-加锁 在[Index.ets](entry/src/main/ets/pages/Index.ets)中创建EAWoker线程,调用fooTest() fooTest2() fooTest3(),并且fooTest() fooTest2() fooTest3() 函数都加锁; + * 不同线程操作不同函数-不加锁 在[Index.ets](entry/src/main/ets/pages/Index.ets)中创建EAWoker线程,调用fooTestUnlock() fooTestUnlock2() fooTestUnlock3(); + * 不同线程共享一个容器 在[Index.ets](entry/src/main/ets/pages/Index.ets)中创建EAWoker线程 map容器,调用fooMapTest() fooMapTest2(); + * 不同线程操作一个文件 在[Index.ets](entry/src/main/ets/pages/Index.ets)中创建EAWoker线程,主线程调用createFileTest() 子线程调用readFile(); +* taskPool 源码参考: [Index.ets](entry/src/main/ets/pages/Index.ets) + * 执行一组有关联的任务 在[Index.ets](entry/src/main/ets/pages/Index.ets)中调用taskTest()函数创建一组TaskPoll线程; + * 任务优先级 在[Index.ets](entry/src/main/ets/pages/Index.ets)中 调用concurrentFunc()函数循环创建TaskPoll线程; + * 并发函数计算两数之和 在[Index.ets](entry/src/main/ets/pages/Index.ets)中 调用concurrentFuncAdd()函数创建TaskPoll线程计算两数之和; + +### 相关权限 + +无 + +### 依赖 + +无 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:Phone; +2. 本示例为Stage模型,支持API20版本SDK,SDK版本号(API Version 20),镜像版本号(5.0.1.57)。 +3. 本示例需要使用DevEco Studio 版本号(6.0.0.6)版本才可编译运行。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +``` +git init +git config core.sparsecheckout true +echo code/ArkTS1.2/ParallelSample/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/openharmony/applications_app_samples.git +git pull +``` \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/build-profile.json5 b/code/ArkTS1.2/ParallelSample/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..c83260a8d4a7c41693901753e0c0ea562824569c --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/build-profile.json5 @@ -0,0 +1,68 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "arkTSVersion": "1.2", + "compatibleSdkVersion": "6.0.0(20)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/code-linter.json5 b/code/ArkTS1.2/ParallelSample/code-linter.json5 new file mode 100644 index 0000000000000000000000000000000000000000..87b3919d419c09728067f1b545b7e2d5116adc07 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/code-linter.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@security/no-unsafe-aes": "error", + "@security/no-unsafe-hash": "error", + "@security/no-unsafe-mac": "warn", + "@security/no-unsafe-dh": "error", + "@security/no-unsafe-dsa": "error", + "@security/no-unsafe-ecdsa": "error", + "@security/no-unsafe-rsa-encrypt": "error", + "@security/no-unsafe-rsa-sign": "error", + "@security/no-unsafe-rsa-key": "error", + "@security/no-unsafe-dsa-key": "error", + "@security/no-unsafe-dh-key": "error", + "@security/no-unsafe-3des": "error" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/.gitignore b/code/ArkTS1.2/ParallelSample/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/build-profile.json5 b/code/ArkTS1.2/ParallelSample/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..36f9e65afb2abbbbdda625e86543807eee16240c --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/build-profile.json5 @@ -0,0 +1,54 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/hvigorfile.ts b/code/ArkTS1.2/ParallelSample/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f830cdfd5bfdd8bde92ebfc27fc0562423dca3d --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ParallelSample/entry/obfuscation-rules.txt b/code/ArkTS1.2/ParallelSample/entry/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/oh-package.json5 b/code/ArkTS1.2/ParallelSample/entry/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..39ab3f901494a87d5ab258dfaa9e6882de1f5166 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/oh-package.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/ArkTS1.2/ParallelSample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..943de5a185e8d422b1831b3130b185e212823bcd --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,54 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import { BusinessError } from '@ohos.base'; +import hilog from '@ohos.hilog'; + +class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onCreate'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onWindowStageCreate'); + try { + windowStage.loadContent('pages/Index', (err: BusinessError): void => { + hilog.info(0x0000, 'testTag', 'loadContent entering'); + if (err.code) { + hilog.error(0x0000, 'testTag', 'loadContent error'); + return; + } + hilog.info(0x0000, 'testTag', 'loadContent ok'); + }); + } catch (e: Error) { + hilog.error(0x0000, 'testTag', 'loadContent catch error:-----------' + e.message); + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/ets/pages/Index.ets b/code/ArkTS1.2/ParallelSample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..515ec255f12e61987bb3394916f94e9400bab278 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,461 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { + memo, + __memo_context_type, + __memo_id_type +} from "@ohos.arkui.stateManagement" // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Row,$r +} from "@ohos.arkui.component" // TextAttribute should be insert by ui-plugins +import { + State, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from "@ohos.arkui.stateManagement" // should be insert by ui-plugins +import hilog from '@ohos.hilog' +import fs from '@ohos.file.fs' + +let lockName = 'isAvailableLock'; +let lockTest = AsyncLock.request(lockName); +let lockTest2 = new AsyncLock(); +let lock = new AsyncLock(); +let lock2 = new AsyncLock(); +let lock3 = new AsyncLock(); +let lockFile = new AsyncLock(); +let mapTest: Map = new Map(); +let lockTest3 = new AsyncLock(); +const NUM_50 = 50; +const NUM_25 = 25; +const NUM_8 = 8; +const NUM_100 = 100; +const NUM_200 = 200; + +function createFileTest(fileName: string, context: string): void { + try { + let res = fs.accessSync(fileName); + let file = fs.openSync(fileName, 0o100 | 0o2); + let byteNumber = fs.writeSync(file.fd, context); + fs.closeSync(file.fd); + } catch (e) { + hilog.error(0x0000, 'testTag', 'openSync fail' + `${e}`); + } +} + +@Component +struct MyStateSample { + @State stringTest1LockSame: string = ""; + @State stringTest1Unlock: string = ""; + @State messageString: string = ""; + @State messageStringUnlock: string = ""; + @State mapString: string = ""; + messageStringTmp: string = ""; + messageStringTmpUnlock: string = ""; + stringTest1TmpLockSame: string = ""; + stringTest1TmpUnlock: string = ""; + @State stringTest2: string = ""; + @State stringFile: string = ""; + @State priorityString: string = ""; + @State addString: string = " "; + @State taskGroupString: string = " "; + + async readFile(fileName: string): Promise { + await lockFile.lockAsync(() => { + try { + let file = fs.openSync(fileName, 0o100 | 0o2); + let result = fs.readTextSync(fileName); + hilog.info(0x0000, 'testTag', 'foo file result ' + `${result}`); + this.stringFile = JSON.stringify(result); + fs.closeSync(file.fd); + } catch (e) { + hilog.error(0x0000, 'testTag', 'openSync fail' + `${e}`); + } + }); + } + + async fooTest(): Promise { + let p1 = await lockTest.lockAsync(() => { + for (let i = 0; i < NUM_25; ++i) { + this.stringTest1TmpLockSame += "1"; + } + }); + this.stringTest1LockSame = this.stringTest1TmpLockSame; + } + + async fooTest2(): Promise { + let p2 = await lockTest.lockAsync(() => { + for (let i = 0; i < NUM_25; ++i) { + this.stringTest1TmpLockSame += "2"; + } + }); + this.stringTest1LockSame = this.stringTest1TmpLockSame; + } + + async fooTest3(): Promise { + let p2 = await lockTest.lockAsync(() => { + for (let i = 0; i < NUM_25; ++i) { + this.stringTest1TmpLockSame += "3"; + } + }); + this.stringTest1LockSame = this.stringTest1TmpLockSame; + } + + fooTestUnlock(): void { + for (let i = 0; i < NUM_25; ++i) { + this.stringTest1TmpUnlock += "1"; + } + this.stringTest1Unlock = this.stringTest1TmpUnlock; + } + + fooTestUnlock2(): void { + for (let i = 0; i < NUM_25; ++i) { + this.stringTest1TmpUnlock += "2"; + } + this.stringTest1Unlock = this.stringTest1TmpUnlock; + } + + fooTestUnlock3(): void { + for (let i = 0; i < NUM_25; ++i) { + this.stringTest1TmpUnlock += "3"; + } + this.stringTest1Unlock = this.stringTest1TmpUnlock; + } + + foo(s: string): void { + lock.lockAsync(() => { + for (let i = 0; i < NUM_25; ++i) { + this.messageStringTmp += s; + } + }) + } + + fooUnLock(s: string): void { + for (let i = 0; i < NUM_50; ++i) { + this.messageStringTmpUnlock += s; + } + } + + fooMapTest(): void { + lockTest3.lockAsync(() => { + for (let i = 0; i < NUM_100; ++i) { + mapTest.set(i, "num " + i); + } + }); + } + + fooMapTest2(): void { + lockTest3.lockAsync(() => { + for (let i = 0; i < NUM_50; ++i) { + if (mapTest.has(i)) { + mapTest.delete(i); + } + } + }); + } + + add(num1: int, num2: int): int { + return num1 + num2; + } + + concurrentFuncAdd() { + const task = new taskpool.Task(this.add, 2, 10); // 2 10: test number + taskpool.execute(task).then((value: NullishType) => { + hilog.info(0x0000, 'testTag', 'taskpool ' + value); + this.addString += JSON.stringify(value); + }); + } + + args(args: int): int { + return args; + } + + taskTest() { + let taskGroup1: taskpool.TaskGroup = new taskpool.TaskGroup(); + taskGroup1.addTask(this.args, 10); // 10: test number + taskGroup1.addTask(this.args, 20); // 20: test number + taskGroup1.addTask(this.args, 30); // 30: test number + + let taskGroup2: taskpool.TaskGroup = new taskpool.TaskGroup(); + let task1: taskpool.Task = new taskpool.Task(this.args, 100); // 100: test number + let task2: taskpool.Task = new taskpool.Task(this.args, 200); // NUM_200: test number + let task3: taskpool.Task = new taskpool.Task(this.args, 300); // 300: test number + taskGroup2.addTask(task1); + taskGroup2.addTask(task2); + taskGroup2.addTask(task3); + + taskpool.execute(taskGroup2).then((res: Array) => { + hilog.info(0x0000, 'testTag', 'openSync fail' + res); + this.taskGroupString += JSON.stringify(res); + }); + + taskpool.execute(taskGroup1).then((res: Array) => { + hilog.info(0x0000, 'testTag', 'openSync fail' + res); + this.taskGroupString += JSON.stringify(res); + }); + } + + priorityLOW() { + this.priorityString += "L"; + } + + priorityHIGH() { + this.priorityString += "H"; + } + + priorityMEDIUM() { + this.priorityString += "M"; + } + + concurrentFunc() { + for (let i = 0; i < 10; ++i) { + const task = new taskpool.Task(this.priorityHIGH) + const task2 = new taskpool.Task(this.priorityMEDIUM) + const task3 = new taskpool.Task(this.priorityLOW) + taskpool.execute(task, taskpool.Priority.HIGH).then((value: NullishType) => { + hilog.info(0x0000, 'testTag', 'taskpool ' + this.priorityString); + }); + taskpool.execute(task2, taskpool.Priority.MEDIUM).then((value: NullishType) => { + hilog.info(0x0000, 'testTag', 'taskpool ' + this.priorityString); + }); + taskpool.execute(task3, taskpool.Priority.LOW).then((value: NullishType) => { + hilog.info(0x0000, 'testTag', 'taskpool ' + this.priorityString); + }); + } + } + + build() { + Column() { + Column() { + Text("-------------------EAWorker------------------").width("100%") + Button($r('app.string.EAWorkerButtonTest')) + .onClick((e: ClickEvent) => { + let eaw: EAWorker = new EAWorker(true); + let eaw2: EAWorker = new EAWorker(true); + let eaw3: EAWorker = new EAWorker(true); + eaw.run(this.foo, "&"); + eaw2.run(this.foo, "*"); + eaw3.run(this.foo, "@"); + eaw.join(); + eaw2.join(); + eaw3.join(); + setTimeout(() => { + hilog.info(0x0000, 'testTag', 'messageString' + this.messageStringTmp); + this.messageString = this.messageStringTmp; + this.messageStringTmp = " "; + }, 100) + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text($r('app.string.EAWorkerTextTest')).height(NUM_50) + Text(this.messageStringUnlock).width("90%") + } + + Button($r('app.string.EAWorkerButtonTest2')) + .onClick((e: ClickEvent) => { + let eaw: EAWorker = new EAWorker(true); + let eaw2: EAWorker = new EAWorker(true); + let eaw3: EAWorker = new EAWorker(true); + eaw.run(this.fooUnLock, "&"); + eaw2.run(this.fooUnLock, "*"); + eaw3.run(this.fooUnLock, "@"); + eaw.join(); + eaw2.join(); + eaw3.join(); + setTimeout(() => { + this.messageStringUnlock = this.messageStringTmpUnlock; + this.messageStringTmpUnlock = " "; + }, 100) + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text($r('app.string.EAWorkerTextTest2')).height(NUM_50) + Text(this.messageStringUnlock).width("90%") + } + }.height(NUM_200) + + Column() { + Button($r('app.string.EAWorkerButtonTest3')) + .onClick((e: ClickEvent) => { + let eaw: EAWorker = new EAWorker(true); + let eaw2: EAWorker = new EAWorker(true); + let eaw3: EAWorker = new EAWorker(true); + eaw.run(this.fooTest); + eaw2.run(this.fooTest2); + eaw3.run(this.fooTest3); + eaw.join(); + eaw2.join(); + eaw3.join(); + this.stringTest1TmpLockSame = " "; + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text($r('app.string.EAWorkerTextTest3')).height(NUM_50) + Text(this.stringTest1LockSame).width("90%") + } + }.height(NUM_200) + + Column() { + Button($r('app.string.EAWorkerButtonTest4')) + .onClick((e: ClickEvent) => { + let eaw: EAWorker = new EAWorker(true); + let eaw2: EAWorker = new EAWorker(true); + let eaw3: EAWorker = new EAWorker(true); + eaw.run(this.fooTestUnlock); + eaw2.run(this.fooTestUnlock2); + eaw3.run(this.fooTestUnlock3); + eaw.join(); + eaw2.join(); + eaw3.join(); + this.stringTest1TmpUnlock = " "; + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text("$r('app.string.EAWorkerTextTest4')").height(NUM_50) + Text(this.stringTest1Unlock).width("90%") + } + }.height(NUM_200) + + Column() { + Button($r('app.string.EAWorkerButtonTest5')) + .onClick((e: ClickEvent) => { + let eaw: EAWorker = new EAWorker(true); + let eaw2: EAWorker = new EAWorker(true); + eaw.run(this.fooMapTest); + eaw2.run(this.fooMapTest2); + eaw.join(); + eaw2.join(); + setTimeout(() => { + this.mapString = JSON.stringify(mapTest.size); + }, 100) + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text($r('app.string.EAWorkerTextTest5')).height(NUM_50) + Text(this.mapString).width("90%") + } + }.height(NUM_200) + + Column() { + Button($r('app.string.EAWorkerButtonTest6')) + .onClick((e: ClickEvent) => { + hilog.info(0x0000, 'testTag', 'On Click'); + let path: string = "/data/storage/el2/base/haps/entry/files/test.txt"; + let str: string = "com.samples.EAWorker successfully launched"; + createFileTest(path, str); + let eaw: EAWorker = new EAWorker(true); + eaw.run(this.readFile, path); + eaw.join(); + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text($r('app.string.EAWorkerTextTest6')).height(NUM_50) + Text(this.stringFile).width("90%") + } + }.height(NUM_200) + + Text("-------------------taskPool------------------").width("100%") + Column() { + Button($r('app.string.TaskPoolButtonTest')) + .onClick((e: ClickEvent) => { + hilog.info(0x0000, 'testTag', 'On Click'); + this.taskTest(); + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text($r('app.string.TaskPoolTextTest')).height(NUM_50) + Text(this.taskGroupString).width("90%") + } + }.height(NUM_200) + + Column() { + Button($r('app.string.TaskPoolButtonTest2')) + .onClick((e: ClickEvent) => { + this.concurrentFunc(); + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text($r('app.string.TaskPoolTextTest2')).height(NUM_50) + .height(NUM_50) + Text(this.priorityString).width("90%") + } + }.height(NUM_200) + + Column() { + Button($r('app.string.TaskPoolButtonTest3')) + .onClick((e: ClickEvent) => { + hilog.info(0x0000, 'testTag', 'On Click'); + this.concurrentFuncAdd(); + }) + .borderRadius(NUM_8) + .backgroundColor(0x317aff) + .width("80%") + Column() { + Text($r('app.string.TaskPoolTextTest3')) + .height(NUM_50) + Text(this.addString).width("90%") + } + }.height(NUM_200) + } + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo() =>{ + hilog.info(0x0000, 'testTag', 'MyStateSample'); + MyStateSample(undefined); + } + return wrapper; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/module.json5 b/code/ArkTS1.2/ParallelSample/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..f95f9a6e69c03b1b6da379b36fc7aa9ee2c41ac4 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/module.json5 @@ -0,0 +1,64 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/color.json b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..3c712962da3c2751c2b9ddb53559afcbd2b54a02 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/float.json b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/string.json b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..69c99dba858600a285b06c9ef9a81da3e2939ed0 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,100 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + }, + { + "name": "LOW", + "value": "低" + }, + { + "name": "MEDIUM", + "value": "中" + }, + { + "name": "HIGH", + "value": "高" + }, + { + "name": "EAWorkerButtonTest", + "value": "EAWorker-不同线程共同操作一个函数-加锁" + }, + { + "name": "EAWorkerTextTest", + "value": "说明:不会出现交替打印的问题" + }, + { + "name": "EAWorkerButtonTest2", + "value": "EAWorker-不同线程共同操作一个函数-不加锁" + }, + { + "name": "EAWorkerTextTest2", + "value": "说明:资源竞争,可能会出现交替打印" + }, + { + "name": "EAWorkerButtonTest3", + "value": "EAWorker-不同线程操作不同函数-加锁" + }, + { + "name": "EAWorkerTextTest3", + "value": "说明:不会出现交替打印的问题" + }, + { + "name": "EAWorkerButtonTest4", + "value": "EAWorker-不同线程操作不同函数-不加锁" + }, + { + "name": "EAWorkerTextTest4", + "value": "说明:会出现交替打印的问题-不使用锁" + }, + { + "name": "EAWorkerButtonTest5", + "value": "EAWorker-不同线程共享一个容器" + }, + { + "name": "EAWorkerTextTest5", + "value": "说明:一个线程让map插入100个数据 另一个线程让map删除50个数据,并且map大小应为50,目前EAWorker子线程控制不了时序,可能会出现100(先删除空map,后加100数据)" + }, + { + "name": "EAWorkerButtonTest6", + "value": "EAWorker-不同线程读写同一个文件" + }, + { + "name": "EAWorkerTextTest6", + "value": "说明:一个线程在文件写入文本,另一个线程从文件中读取文本" + }, + { + "name": "TaskPoolButtonTest", + "value": "taskPool-执行一组有关联的任务" + }, + { + "name": "TaskPoolTextTest", + "value": "说明:任务组中任务全部执行完成后,结果数组统一返回" + }, + { + "name": "TaskPoolButtonTest2", + "value": "taskPool-任务优先级" + }, + { + "name": "TaskPoolTextTest2", + "value": "说明:创建实例可以给第二个参数设置权重,假设有两个多线程任务,可以决定优先执行那一个多线程任务" + }, + { + "name": "TaskPoolButtonTest3", + "value": "taskPool-计算两数之和" + }, + { + "name": "TaskPoolTextTest3", + "value": "说明:输入2和10输出 12" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/background.png b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f Binary files /dev/null and b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/background.png differ diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/eaworker.PNG b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/eaworker.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d31de1b819449588d5044742b503f2754519ebe4 Binary files /dev/null and b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/eaworker.PNG differ diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/foreground.png b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..97014d3e10e5ff511409c378cd4255713aecd85f Binary files /dev/null and b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/foreground.png differ diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/layered_image.json b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000000000000000000000000000000000000..fb49920440fb4d246c82f9ada275e26123a2136a --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:background", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/startIcon.png b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/startIcon.png differ diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/taskpool.PNG b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/taskpool.PNG new file mode 100644 index 0000000000000000000000000000000000000000..bfb24abba16948f1f666ba70e7c5834b4d8f94bd Binary files /dev/null and b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/media/taskpool.PNG differ diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/profile/backup_config.json b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000000000000000000000000000000000..78f40ae7c494d71e2482278f359ec790ca73471a --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/profile/main_pages.json b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..1898d94f58d6128ab712be2c68acc7c98e9ab9ce --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/ArkTS1.2/ParallelSample/entry/src/main/resources/dark/element/color.json b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..79b11c2747aec33e710fd3a7b2b3c94dd9965499 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ParallelSample/hvigor/hvigor-config.json5 b/code/ArkTS1.2/ParallelSample/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..57c58e3641a0b085f39f7f137b9a938ecb20f2fd --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/hvigor/hvigor-config.json5 @@ -0,0 +1,49 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "modelVersion": "5.0.2", + "dependencies": { + "@ohos/hvigor-ohos-online-sign-plugin": "4.0.2" + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/ArkTS1.2/ParallelSample/hvigorfile.ts b/code/ArkTS1.2/ParallelSample/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f435606b5766719f7203539113d84a2b281b0353 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ParallelSample/oh-package.json5 b/code/ArkTS1.2/ParallelSample/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..e31dcff151dbff2d8d883823b5de6609fd8c5c28 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/oh-package.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "modelVersion": "5.0.2", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.21", + "@ohos/hamock": "1.0.0" + } +} diff --git a/code/ArkTS1.2/ParallelSample/ohosTest.md b/code/ArkTS1.2/ParallelSample/ohosTest.md new file mode 100644 index 0000000000000000000000000000000000000000..31b7c9a06d032d62e4b67c11987d76534f77ecb0 --- /dev/null +++ b/code/ArkTS1.2/ParallelSample/ohosTest.md @@ -0,0 +1,15 @@ +# 并行化使用示例测试用例 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +|-----------------------------------|-------------------------------------|----------------------|------------------------------------|------|------| +| EAWorker-不同线程共同操作一个函数-加锁 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程共同操作一个函数-加锁】按钮 | 打印日志参考如下:(不会出现交替打印)
*************************@@@@@@@@@@@@@@@@@@@@@@@@@&&&&&&&&&&&&&&&&&&&&&&&&& | 否 | Pass | +| EAWorker-不同线程共同操作一个函数-不加锁 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程共同操作一个函数-不加锁】按钮 | 打印日志参考如下:(可能会出现交替打印)
&&&&&&&&&&&&&&&&&&&&&&&*&*&&&&&&&&*****************************************@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | 否 | Pass | +| EAWorker-不同线程操作不同函数-加锁 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程操作不同函数-加锁】按钮 | 打印日志参考如下:
111111111111111111111111133333333333333333333333332222222222222222222222222 | 否 | Pass | +| EAWorker-不同线程操作不同函数-不加锁 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程操作不同函数-加锁】按钮 | 打印日志参考如下:
1111111111111111131333133333333333323222222222222222222222 | 否 | Pass | +| EAWorker-不同线程共享一个容器 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程共享一个容器】按钮 | 显示计算结果:
50或100 | 否 | Pass | +| EAWorker-不同线程读写同一个文件 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程读写同一个文件】按钮 | 打印日志如下:
com.samples.EAWorker successfully launched | 否 | Pass | +| taskPool-执行一组有关联的任务 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【taskPool-执行一组有关联的任务】按钮 | 打印日志如下:
[100,200,300][10,20,30] | 否 | Pass | +| taskPool-任务优先级 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【taskPool-任务优先级】按钮 | 打印日志如下:
HMHHHHHMHHHHMMMLMMMMMLLLLLLLLL | 否 | Pass | +| taskPool-计算两数之和 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【taskPool-计算两数之和】按钮 | 打印日志如下:
12 | 否 | Pass | \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/.gitignore b/code/ArkTS1.2/TabsSample/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d2ff20141ceed86d87c0ea5d99481973005bab2b --- /dev/null +++ b/code/ArkTS1.2/TabsSample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/AppScope/app.json5 b/code/ArkTS1.2/TabsSample/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..3f3c2bc7b2263b713952b365e9c4866b490d0bb2 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/AppScope/app.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "app": { + "bundleName": "com.examples.TabsSample", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/ArkTS1.2/TabsSample/AppScope/resources/base/element/string.json b/code/ArkTS1.2/TabsSample/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..89809692052f1e629b3f0e1ddbed4521c3d6932a --- /dev/null +++ b/code/ArkTS1.2/TabsSample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "parallelTest" + } + ] +} diff --git a/code/ArkTS1.2/TabsSample/AppScope/resources/base/media/app_icon.png b/code/ArkTS1.2/TabsSample/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/AppScope/resources/base/media/app_icon.png differ diff --git a/code/ArkTS1.2/TabsSample/README.md b/code/ArkTS1.2/TabsSample/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6f206d3729bf25a090ca50e1dad0a6c237fd794f --- /dev/null +++ b/code/ArkTS1.2/TabsSample/README.md @@ -0,0 +1,101 @@ +# 主页Tabs嵌套场景 + +### 介绍 + +1.主页嵌套场景,使用tabContent嵌套; +2.实现预加载; +3.主页使用自定义tabbar; +4.主页数据加载使用网络数据,轮播图片和列表信息; + +### 效果预览 + +效果如下所示: + +|主界面|主页瀑布流实现案例|折叠面板案例|自定义TabBar页签案例|TabContent内容可以在TabBar上显示并响应滑动事件案例| +|--------------------------------|--------------------------------|--------------------------------|--------------------------------|--------------------------------| +|![Alt text](entry/src/main/resources/base/media/main.png)|![Alt text](entry/src/main/resources/base/media/example1.png)|![Alt text](entry/src/main/resources/base/media/example2.png)|![Alt text](entry/src/main/resources/base/media/example3.png)|![Alt text](entry/src/main/resources/base/media/example4.png)| + +使用说明 + +1. 在主界面,点击蓝色按钮"主页瀑布流实现案例"。 + * 加载完成后显示整个列表,超过一屏时可以上下滑动。 +2. 在主界面,点击蓝色按钮"折叠面板案例"。 + * 进入性能文章标签页面。 + * 点击多层级列表,展开子列表。 +3. 在主界面,点击蓝色按钮"自定义TabBar页签案例"。 + * 依次点击TabBar页面,除了视频图标外,其他图标往上移动一小段距离。 +4. 在主界面,点击蓝色按钮"TabContent内容可以在TabBar上显示并响应滑动事件案例"。 + * 点击播放按钮进行视频播放,按住进度条按钮和进度条下方区域可以拖动进度条,更改视频播放进度。 + +### 工程目录 + +``` +entry/src/main/ets/ +|---constants +| |---constants.ets +|---model +| |---collapsemenu +| | |---ArticleNode.ets +| | |---BasicDataSource.ets +| | |---MockData.ets +| | |---MockXrData.ets +| | |---TreeNode.ets +| |---functionalScenes +| | |---SceneModuleDatas.ets +| | |---SceneModuleInfo.ets +| | |---TabsData.ets +| | |---WaterFlowDataSource.ets +| |---constantsData.ets +|---pages +| |---collapsemenu +| | |---CollapseMenuSection.ets +| | |---Concent.ets +| |---functionalScenes +| | |---FunctionalScenes.ets +| |---tabBar +| | |---TabBar.ets +| |---tabContentOverFlow +| | |---TabContentOverFlow.ets +| |---Index.ets +``` + +### 具体实现 + +* Example1(主页瀑布流案例),源码参考:[Example1](entry/src/main/ets/pages/functionalScenes/FunctionalScenes.ets) + * 构造懒加载数据源类型。 + * 通过LazyForEach循环构造列表数据。 +* Example2(折叠面板案例),源码参考:[Example2](entry/src/main/ets/pages/collapsemenu/CollapseMenuSection.ets) + * 构造懒加载数据源类型。 + * 使用LazyForEach构造列表数据。 + * 通过点击事件更改expand的值,调用updateData方法通知监听器重新渲染页面,从而实现展开与折叠效果。 +* Example3(自定义TabBar页签案例),源码参考:[Example3](entry/src/main/ets/pages/tabBar/TabBar.ets) + * 创建自定义组件做为TabBar的内容区。 +* Example4(TabContent内容可以在TabBar上显示并响应滑动事件案例),源码参考:[Example4](entry/src/main/ets/pages/tabContentOverFlow/TabContentOverFlow.ets) + * TabContent加载Video组件。 + * 使用自定义进度条并添加PanGesture手势,实现在自定义TabBar上拖动进度条更改视频播放进度的功能。 + +### 相关权限 + +无 + +### 依赖 + +无 + +### 约束与限制 + +1. 本示例仅支持标准系统上运行,支持设备:Phone; +2. 本示例为Stage模型,支持API20版本SDK,SDK版本号(API Version 20),镜像版本号(5.0.1.5)。 +3. 本示例需要使用DevEco Studio 版本号(6.0.0.6)版本才可编译运行。 + +### 下载 + +如需单独下载本工程,执行如下命令: + +``` +git init +git config core.sparsecheckout true +echo code/ArkTS1.2/ComponentSample/ > .git/info/sparse-checkout +git remote add origin https://gitee.com/openharmony/applications_app_samples.git +git pull +``` \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/build-profile.json5 b/code/ArkTS1.2/TabsSample/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..c83260a8d4a7c41693901753e0c0ea562824569c --- /dev/null +++ b/code/ArkTS1.2/TabsSample/build-profile.json5 @@ -0,0 +1,68 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "arkTSVersion": "1.2", + "compatibleSdkVersion": "6.0.0(20)", + "runtimeOS": "HarmonyOS", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/code-linter.json5 b/code/ArkTS1.2/TabsSample/code-linter.json5 new file mode 100644 index 0000000000000000000000000000000000000000..87b3919d419c09728067f1b545b7e2d5116adc07 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/code-linter.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@security/no-unsafe-aes": "error", + "@security/no-unsafe-hash": "error", + "@security/no-unsafe-mac": "warn", + "@security/no-unsafe-dh": "error", + "@security/no-unsafe-dsa": "error", + "@security/no-unsafe-ecdsa": "error", + "@security/no-unsafe-rsa-encrypt": "error", + "@security/no-unsafe-rsa-sign": "error", + "@security/no-unsafe-rsa-key": "error", + "@security/no-unsafe-dsa-key": "error", + "@security/no-unsafe-dh-key": "error", + "@security/no-unsafe-3des": "error" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/.gitignore b/code/ArkTS1.2/TabsSample/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/build-profile.json5 b/code/ArkTS1.2/TabsSample/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..36f9e65afb2abbbbdda625e86543807eee16240c --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/build-profile.json5 @@ -0,0 +1,54 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/hvigorfile.ts b/code/ArkTS1.2/TabsSample/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f830cdfd5bfdd8bde92ebfc27fc0562423dca3d --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/TabsSample/entry/obfuscation-rules.txt b/code/ArkTS1.2/TabsSample/entry/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/oh-package.json5 b/code/ArkTS1.2/TabsSample/entry/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..39ab3f901494a87d5ab258dfaa9e6882de1f5166 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/oh-package.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/constants/Constants.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/constants/Constants.ets new file mode 100644 index 0000000000000000000000000000000000000000..a57991e01895fd1b59f274a58b93f2b1864d82cb --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/constants/Constants.ets @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export class Constants { + // 普通面板 + static readonly ORDINARY_MENU: number = 1; + // 折叠面板 + static readonly COLLAPSE_MENU: number = 2; +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..a767a87e77c1dcbad5a5e077de77ce11c76a443b --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,29 @@ +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import { BusinessError } from '@ohos.base' +import hilog from '@ohos.hilog' + +class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onCreate'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onWindowStageCreate'); + try { + // windowStage.loadContent('pages/AnimateTo', (err: BusinessError): void => { + windowStage.loadContent('pages/Index', (err: BusinessError): void => { + hilog.info(0x0000, 'testTag', 'loadContent entering'); + if (err.code) { + hilog.info(0x0000, 'testTag', 'loadContent error'); + return; + } + hilog.info(0x0000, 'testTag', 'loadContent ok'); + }); + } catch (e: Error) { + hilog.info(0x0000, 'testTag', 'loadContent catch error:-----------' + e.message); + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/ArticleNode.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/ArticleNode.ets new file mode 100644 index 0000000000000000000000000000000000000000..4849cf4d1c14bad7f33b5b3aadee4f21deedfa37 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/ArticleNode.ets @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 数据类型(开发者可以自行扩展数据属性) + * + * @param {number} type - 数据类型 + * @param {string} title - 数据标题 + * @param {string} url - 文章地址 + * @param {ArticleNode[]} children - 子数据列表 + */ + +export class ArticleNode { + type: number = 0 + title: string = '' + url?: string = '' + children?:ArticleNode[] = [] +} diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/BasicDataSource.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/BasicDataSource.ets new file mode 100644 index 0000000000000000000000000000000000000000..4681ce2623105cd713258ebd81a157a6a971f8b3 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/BasicDataSource.ets @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DataChangeListener, IDataSource } from "@ohos.arkui.component" + +/** + * IDataSource处理数据监听的基本实现 + */ +export abstract class BasicDataSource implements IDataSource { + private listeners: DataChangeListener[] = []; + + // 获取数组长度 + public abstract totalCount(): number; + + // 获取指定索引数据 + // public getData(index: number): T { + // return 'kl' + // // console.info('getData, index:' + index); + // // hilog.info(0x0000, 'testTag', 'On Click'); + // } + public abstract getData(index: number): T; + + // 为LazyForEach组件向其数据源处添加listener监听 + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + this.listeners.push(listener); + } + } + + // 为对应的LazyForEach组件在数据源处去除listener监听 + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener); + if (pos >= 0) { + this.listeners.splice(pos, 1); + } + } + // + // // 通知LazyForEach组件需要重载所有子组件 + notifyDataReload(): void { + this.listeners.forEach((listener: DataChangeListener) => { + listener.onDataReloaded(); + }); + } + + // 通知LazyForEach组件需要在index对应索引处添加子组件 + notifyDataAdd(index: number): void { + this.listeners.forEach((listener: DataChangeListener) => { + listener.onDataAdd(index); + }) + } + + // 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件 + notifyDataChange(index: number): void { + this.listeners.forEach((listener: DataChangeListener) => { + listener.onDataChange(index); + }) + } + + // 通知LazyForEach组件需要在index对应索引处删除该子组件 + notifyDataDelete(index: number): void { + this.listeners.forEach((listener: DataChangeListener) => { + listener.onDataDelete(index); + }) + } +} + +export class ArticleSource extends BasicDataSource { + articleData: Array = []; + + constructor(data: T[] = []) { + super(); + this.pushData(data); + } + + // // 获取数组长度 + public totalCount(): number { + return this.articleData.length; + } + + // 获取指定索引数据 + public getData(index: number): T { + return this.articleData[index]; + } + + // 插入单个数据 + public addData(index: number, data: T): void { + this.articleData.splice(index, 0, data); + this.notifyDataAdd(index); + } + + public updateData(index: number, data: T): void { + this.articleData.splice(index, 1, data); + this.notifyDataChange(index); + } + + // 添加数据 + public pushData(data: T[]): void { + data.forEach((item: T) => { + this.articleData.push(item); + this.notifyDataAdd(this.articleData.length - 1); + }) + } +} diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/MockData.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/MockData.ets new file mode 100644 index 0000000000000000000000000000000000000000..3bc0378c6c71a2b9dd4e647a13facf3497e43765 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/MockData.ets @@ -0,0 +1,358 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + **/ +import { ArticleNode } from './ArticleNode'; + +export const ARTICLE_DATA: ArticleNode[] = [ + { + type: 1, + title: 'HarmonyOS NEXT应用开发性能优化入门引导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/README.md', + }, + { + type: 1, + title: '性能优化实操宝典', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/performance-optimization-practical-guidance.md', + }, + { + type: 2, + title: 'ArkTS高性能编程', + children: [ + { + type: 1, + title: '高性能编程规范', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/high-performance-programming.md' + }, + { + type: 1, + title: '高效并发编程', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/efficient-concurrent-programming.md' + }, + { + type: 1, + title: 'N-API高效开发指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/develop-Native-modules-using-NAPI-safely-and-efficiently.md' + }, + { + type: 1, + title: '多线程能力场景化', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/multi_thread_capability.md' + }, + { + type: 1, + title: '利用native的方式实现跨线程调用', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/native-threads-call-js.md' + }, + { + type: 1, + title: '避免开发过程中的冗余操作', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/avoiding-redundant-operations.md' + } + ] + }, + { + type: 2, + title: '减少卡顿丢帧', + children: [ + { + type: 1, + title: '正确使用LazyForEach优化', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/lazyforeach_optimization.md' + }, + { + type: 1, + title: '组件复用使用指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/component-recycle.md' + }, + { + type: 1, + title: '组件复用四板斧', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/component_recycle_case.md' + }, + { + type: 1, + title: '组件复用总览', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/component-reuse-overview.md' + }, + { + type: 1, + title: 'WaterFlow高性能开发指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/waterflow_optimization.md' + }, + { + type: 1, + title: 'Swiper高性能开发指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/swiper_optimization.md' + }, + { + type: 1, + title: '合理进行状态管理', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/proper_state_management.md' + }, + { + type: 1, + title: '精准控制组件的更新范围', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/precisely-control-render-scope.md' + }, + { + type: 1, + title: '合理使用renderGroup', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable-using-renderGroup.md' + }, + { + type: 1, + title: '合理使用多线程共享内存', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/thread_memory_shared.md' + }, + { + type: 1, + title: 'Grid高性能开发指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/grid_optimization.md' + }, + { + type: 1, + title: '状态管理优秀实践', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/arkts-state-management-best-practices.md' + }, + { + type: 1, + title: '合理使用renderGroup', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable-using-renderGroup.md' + }, + { + type: 1, + title: '合理处理高负载组件的渲染', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonably-dispose-highly-loaded-component-render.md' + }, + { + type: 1, + title: '合理使用自定义组件冻结功能', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/custom_component_freeze.md' + }, + { + type: 1, + title: '避免在滑动场景的高频回调接口中处理耗时操作', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/avoid_high_frequency_callback_execute_lengthy_operation.md' + }, + { + type: 1, + title: '合理使用renderGroup', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable-using-renderGroup.md' + }, + { + type: 1, + title: '避免在主线程中执行耗时操作', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/avoid_time_consuming_operations_in_mainthread.md' + }, + { + type: 1, + title: '避免在主线程中执行耗时操作', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/avoid_time_consuming_operations_in_mainthread.md' + }, + { + type: 1, + title: '合理使用系统接口', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable_using_system_interfaces.md' + } + ] + }, + { + type: 2, + title: '提升应用启动和响应速度', + children: [ + { + type: 1, + title: '提升应用冷启动速度', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/improve-application-cold-start-speed.md' + }, + { + type: 1, + title: '提升应用响应速度', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/improve-application-response.md' + }, + { + type: 1, + title: 'Flex布局性能提升使用指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/flex-development-performance-boost.md' + }, + { + type: 1, + title: '优化布局性能', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reduce-view-nesting-levels.md' + }, + { + type: 1, + title: '合理选择条件渲染和显隐控制', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/proper-choice-between-if-and-visibility.md' + }, + { + type: 1, + title: '合理使用IPC通信', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable-using-ipc.md' + }, + { + type: 1, + title: '合理进行状态管理', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable-using-ipc.md' + }, + { + type: 1, + title: '文件上传下载性能提升指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/improve-file-upload-and-download-performance.md' + }, + { + type: 1, + title: '减少首帧绘制时的冗余操作', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reduce-redundant-operations-when-render-first-frame.md' + }, + { + type: 1, + title: '合理使用多线程共享内存', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/thread_memory_shared.md' + }, + { + type: 1, + title: '动效能力实践', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/animation_practice.md' + }, + { + type: 1, + title: '性能提升的其他方法', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/arkts-performance-improvement-recommendation.md' + }, + { + type: 1, + title: '合理使用renderGroup', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable-using-renderGroup.md' + }, + { + type: 1, + title: '运行时动态加载页面提升性能', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/performance-dynamic-import.md' + }, + { + type: 1, + title: '合理运行后台任务', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable-running-backgroundTask.md' + }, + { + type: 1, + title: 'Web组件开发性能提升指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/performance-web-import.md' + }, + { + type: 1, + title: '使用同层渲染在Web上渲染原生组件', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/webview-render-app-components.md' + }, + { + type: 1, + title: '全局自定义组件复用实现', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/node_custom_component_reusable_pool.md' + } + ] + }, + { + type: 2, + title: '性能工具', + children: [ + { + type: 1, + title: '性能分析工具CPU Profiler', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/application-performance-analysis.md' + }, + { + type: 1, + title: '页面布局检查器ArkUI Inspector', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/arkUI-inspector.md' + }, + { + type: 1, + title: '内存分析器Allocation Profiler', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/profiler-allocation.md' + }, + { + type: 1, + title: '帧率分析工具 Frame Profiler', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/profiler-frame.md' + }, + { + type: 1, + title: '启动分析工具Launch Profiler', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/profiler-launch.md' + }, + { + type: 1, + title: '内存快照Snapshot Profiler', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/profiler-snapshot.md' + }, + { + type: 1, + title: '耗时分析器Time Profiler', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/profiler-time.md' + }, + { + type: 1, + title: '性能测试工具SmartPerf Editor', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/smartperf-editor.md' + }, + { + type: 1, + title: '性能优化工具HiDumper', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/performance-optimization-using-hidumper.md' + }, + { + type: 1, + title: '性能优化工具SmartPerf-Host', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/performance-optimization-using-smartperf-host.md' + }, + { + type: 1, + title: '常用trace使用指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/common-trace-using-instructions.md' + }, + { + type: 1, + title: '性能提升的其他方法', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/arkts-performance-improvement-recommendation.md' + }, + { + type: 1, + title: '合理使用renderGroup', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reasonable-using-renderGroup.md' + }, + { + type: 1, + title: '状态变量组件定位工具实践', + url:'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/state_variable_dfx_pratice.md' + }, + { + type: 1, + title: '应用滑动场景帧率问题分析实践', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/long-frame-optimization.md' + }, + { + type: 1, + title: 'Web性能问题分析案例', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/web-analyse.md' + }, + { + type: 1, + title: '时延类性能问题分析实践', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/delay_related_performance.md' + } + ] + } +] \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/MockXrData.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/MockXrData.ets new file mode 100644 index 0000000000000000000000000000000000000000..565a0b8e8f0e4665c474466267c926876cd930e4 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/MockXrData.ets @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + **/ +import { TreeNode } from './TreeNode'; + +export const ARTICLE_DATA1: TreeNode[] = [ + { + expand: true, + type: 1, + title: 'HarmonyOS NEXT应用开发性能优化入门引导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/README.md', + }, + { + expand: false, + type: 1, + title: '性能优化实操宝典', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/performance-optimization-practical-guidance.md', + }, + { + expand: false, + type: 2, + title: 'ArkTS高性能编程', + children: [ + { + expand: false, + type: 1, + title: '高性能编程规范', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/high-performance-programming.md' + }, + { + expand: false, + type: 1, + title: '高效并发编程', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/efficient-concurrent-programming.md' + }, + { + expand: false, + type: 1, + title: '避免开发过程中的冗余操作', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/avoiding-redundant-operations.md' + } + ] + }, + { + expand: false, + type: 2, + title: '减少卡顿丢帧', + children: [ + { + expand: false, + type: 1, + title: '正确使用LazyForEach优化', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/lazyforeach_optimization.md' + }, + { + expand: false, + type: 1, + title: '组件复用使用指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/component-recycle.md' + } + ] + }, + { + expand: false, + type: 2, + title: '提升应用启动和响应速度', + children: [ + { + expand: false, + type: 1, + title: '提升应用冷启动速度', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/improve-application-cold-start-speed.md' + }, + { + expand: false, + type: 1, + title: '提升应用响应速度', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/improve-application-response.md' + }, + { + expand: false, + type: 1, + title: 'Flex布局性能提升使用指导', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/flex-development-performance-boost.md' + } + ] + }, + { + expand: false, + type: 2, + title: '性能工具', + children: [ + { + expand: false, + type: 1, + title: '性能分析工具CPU Profiler', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/application-performance-analysis.md' + }, + { + expand: false, + type: 1, + title: '页面布局检查器ArkUI Inspector', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/arkUI-inspector.md' + }, + { + expand: false, + type: 1, + title: '内存分析器Allocation Profiler', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/profiler-allocation.md' + }, + { + expand: false, + type: 1, + title: '性能测试工具SmartPerf Editor', + url: 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/smartperf-editor.md' + } + ] + } + +] \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/TreeNode.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/TreeNode.ets new file mode 100644 index 0000000000000000000000000000000000000000..f5bdff3e281e28626571ee075ef26ee4e36a1737 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/collapsemenu/TreeNode.ets @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Observed } from "@ohos.arkui.stateManagement" +@Observed +export class TreeNode { + expand: boolean = false; + type: number | string | ESObject = 0 + title: string = '' + url?: string = '' + children?: TreeNode[] = []; +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/constantsData.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/constantsData.ets new file mode 100644 index 0000000000000000000000000000000000000000..916ece14d0c3f063ac3ba1e75a51741a9a85dccf --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/constantsData.ets @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TreeNode } from './collapsemenu/TreeNode'; +export const STYLE_CONFIGURATION: Record = { + 'TAB_BAR_HEIGHT': 48, // 页签高度 + 'ICON_SIZE': 16, // 图标尺寸 + 'TAB_BAR_CONTENT_GUTTER': 6, // 页签内元素间距 + 'TAB_BAR_ITEM_GUTTER': 6, // 页签间距 + 'SEPARATOR_STROKE_WIDTH': 2, // 分割线宽度 + 'CONTENT_GUTTER_M': 12, // 元素间距 + 'CONTENT_GUTTER_S': 8, // 元素间距 + 'GRID_HEIGHT': 170, // 快捷方式高度 + 'GRID_MARGIN': 48, // 快捷方式外边距 + 'TAB_SHEET_PADDING': 6, // 页签内边距 + 'IMAGE_SIZE': 56, // 图片尺寸 + 'IMAGE_RADIUS': 32, // 图片圆角 + 'TEXT_HEIGHT': 12, // 文本高度 + 'TEXT_WIDTH': 48, // 文本宽度 + 'SEARCH_HEIGHT': 28, // 工具栏搜索框高度 + 'BIG_ICON_SIZE': 30, // 添加和删除按钮的尺寸 + 'BIG_ICON_PADDING': 7, // 添加和删除按钮的padding值 + 'IMAGE_MARGIN':12 // 当添加到第六个标签删除按钮的margin值 +} + +export const ARTICLENODE_DATAS: TreeNode[] = [ + { + expand: true, + type: 2, + title: '第一章:基础入门', + url: 'https://example.com/video1', + children: [ + { + expand: true, + type: 2, + title: '1.1 介绍', + url: 'https://example.com/video1-1', + children: [] + }, + { + expand: true, + type: 2, + title: '1.2 安装环境', + url: 'https://example.com/video1-2', + children: [] + } + ] + }, + { + expand: false, + type: 1, + title: '第二章:进阶技巧', + url: 'https://example.com/video2', + children: [ + { + expand: false, + type: 2, + title: '2.1 性能优化', + url: 'https://example.com/video2-1', + children: [] + } + ] + } +]; + diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/SceneModuleDatas.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/SceneModuleDatas.ets new file mode 100644 index 0000000000000000000000000000000000000000..2f23848750c06f2882540cacffe8918f6eed8653 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/SceneModuleDatas.ets @@ -0,0 +1,70 @@ +import { SceneModuleInfo } from './SceneModuleInfo'; +import { $r } from "@ohos.arkui.component" +export const SCENE_MODULE_LIST: SceneModuleInfo[] = [ + new SceneModuleInfo( + $r('app.media.backgroundblur_my_select'), + 'HarmonyOS NEXT应用开发性能优化入门引导', + 'performance/PerformanceIntroView', + '性能优化', + 1, + 3, + $r('app.media.backgroundblur_my_select'), + '', + 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/README.md' + ), + new SceneModuleInfo( + $r('app.media.backgroundblur_my_select'), + '性能优化实操宝典', + 'performance/PerformancePracticeView', + '性能优化', + 2, + 4, + $r('app.media.backgroundblur_my_select'), + '', + 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/performance-optimization-practical-guidance.md' + ), + new SceneModuleInfo( + $r('app.media.backgroundblur_my_select'), + 'UI 框架基础使用', + 'uiframework/UIFrameworkBasicsView', + '界面开发', + 3, + 2, + $r('app.media.backgroundblur_my_select'), + '', + 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/ui/ui-framework.md' + ), + new SceneModuleInfo( + $r('app.media.backgroundblur_my_select'), + '动效开发实战', + 'animation/AnimationPracticeView', + '界面开发', + 4, + 4, + $r('app.media.backgroundblur_my_select'), + '', + 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/ui/animation-guide.md' + ), + new SceneModuleInfo( + $r('app.media.backgroundblur_my_select'), + '数据存储与文件操作', + 'storage/StorageModuleView', + '基础能力', + 5, + 3, + $r('app.media.backgroundblur_my_select'), + '', + 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/basics/storage-and-file.md' + ), + new SceneModuleInfo( + $r('app.media.backgroundblur_my_select'), + '路由与模块解耦', + 'router/RouterNavigationView', + '路由跳转', + 6, + 3, + $r('app.media.backgroundblur_my_select'), + '', + 'https://gitee.com/harmonyos-cases/cases/blob/master/docs/basics/router-guide.md' + ) +]; diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/SceneModuleInfo.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/SceneModuleInfo.ets new file mode 100644 index 0000000000000000000000000000000000000000..5ed296773a5a28b762b60cbfe1f917efad9e9009 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/SceneModuleInfo.ets @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ResourceStr } from "@ohos.arkui.component" +/** + * 首页瀑布流列表信息 + */ +export class SceneModuleInfo { + // 首页列表图片 + imageSrc: ResourceStr; + // 首页列表名称 + name: string; + // 路由信息,自动生成路由时,在自定义装饰器中AppRouter中配置的参数,使用新版本自动路由时需要添加此参数,用于动态路由的跳转。使用规则:模块名/需要加载的自定义组件名,如addressexchange/AddressExchangeView + appUri: string; + // 路由传参数据 + param: string; + // 难度星级 + ratingNumber: number; + // 分类 + category: string; + // 序号 + serialNumber: number; + // 首页轮播静态图 + swiperImage: ResourceStr; + // 案例README地址 + helperUrl: string; + + constructor(imageSrc: ResourceStr, name: string, appUri: string, category: string, serialNumber: number, + ratingNumber?: number, swiperImage?: ResourceStr, param?: string, helperUrl?: string) { + this.imageSrc = imageSrc; + this.name = name; + this.appUri = appUri; + this.param = param === undefined ? '' : param; + this.ratingNumber = ratingNumber === undefined ? 2 : ratingNumber; + this.category = category; + this.serialNumber = serialNumber; + this.swiperImage = swiperImage === undefined ? '' : swiperImage; + this.helperUrl = helperUrl === undefined ? '' : helperUrl; + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/TabsData.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/TabsData.ets new file mode 100644 index 0000000000000000000000000000000000000000..e5019b68bb885fda7c7cc02d23bbb552b88f15a0 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/TabsData.ets @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { DataChangeListener, IDataSource } from "@ohos.arkui.component" + +/** + * 首页tabBar信息 + */ +export class TabDataModel { + // tabId用户切换tabContent + id: number = 0; + // tab类别 + navData: string | undefined = undefined; + + constructor(id: number, navData: string) { + this.navData = navData; + this.id = id; + } +} + +export const TAB_DATA: Array = [ + new TabDataModel(0, '全部'), + new TabDataModel(1, 'Native'), + new TabDataModel(2, '动效'), + new TabDataModel(3, '三方库'), + new TabDataModel(4, 'UI布局'), + new TabDataModel(5, '性能示例'), + new TabDataModel(6, '其他'), + new TabDataModel(7, '性能文章') +] + +// Basic implementation of IDataSource to handle data listener +class BasicDataSource implements IDataSource { + private listeners: DataChangeListener[] = []; + private originDataArray: TabDataModel[] = []; + + public totalCount(): number { + return 0; + } + + public getData(index: number): TabDataModel { + return this.originDataArray[index]; + } + + /** + * 该方法为框架侧调用,为LazyForEach组件向其数据源处添加listener监听 + */ + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + console.info('add listener'); + this.listeners.push(listener); + } + } + + /** + * 该方法为框架侧调用,为对应的LazyForEach组件在数据源处去除listener监听 + */ + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener); + if (pos >= 0) { + console.info('remove listener'); + this.listeners.splice(pos, 1); + } + } + + /** + * 通知LazyForEach组件需要重载所有子组件 + */ + notifyDataReload(): void { + this.listeners.forEach(listener => { + listener.onDataReloaded(); + }) + } + + /** + * 通知LazyForEach组件需要在index对应索引处添加子组件 + */ + notifyDataAdd(index: number): void { + this.listeners.forEach(listener => { + listener.onDataAdd(index); + }) + } + + /** + * 通知LazyForEach组件在index对应索引处数据有变化,需要重建该子组件 + */ + notifyDataChange(index: number): void { + this.listeners.forEach(listener => { + listener.onDataChange(index); + }) + } + + /** + * 通知LazyForEach组件需要在index对应索引处删除该子组件 + */ + notifyDataDelete(index: number): void { + this.listeners.forEach(listener => { + listener.onDataDelete(index); + }) + } +} + +/** + * 实现TabDataSource接口的对象,用于tabs加载数据 + */ +export class TabDataSource extends BasicDataSource { + private dataArray: TabDataModel[] = []; + + /** + * 获取数据总数 + * @returns + */ + public totalCount(): number { + return this.dataArray.length; + } + + /** + * 获取索引对应的数据 + * @param index 数组索引 + * @returns + */ + public getData(index: number): TabDataModel { + return this.dataArray[index]; + } + + /** + * 在指定索引位置增加一个元素 + * @param index + */ + public addData(index: number, data: TabDataModel): void { + this.dataArray.splice(index, 0, data); + this.notifyDataAdd(index); + } + + /** + * 在数据尾部增加一个元素 + */ + public pushData(data: TabDataModel): void { + this.dataArray.push(data); + this.notifyDataAdd(this.dataArray.length - 1); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/WaterFlowDataSource.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/WaterFlowDataSource.ets new file mode 100644 index 0000000000000000000000000000000000000000..5fdad4e114a498a3da191af9cff5b9a7c63b0979 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/model/functionalScenes/WaterFlowDataSource.ets @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2024 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { SceneModuleInfo } from './SceneModuleInfo' +import { DataChangeListener, IDataSource } from "@ohos.arkui.component" +/** + * 实现IDataSource接口的对象,用于瀑布流组件加载数据 + */ +export class WaterFlowDataSource implements IDataSource { + private dataArray: SceneModuleInfo[] = []; + private listeners: DataChangeListener[] = []; + + constructor(dataArray: SceneModuleInfo[]) { + for (let i = 0; i < dataArray.length; i++) { + this.dataArray.push(dataArray[i]); + } + } + + /** + * 获取索引对应的数据 + * @param index 数组索引 + * @returns + */ + public getData(index: number): SceneModuleInfo { + return this.dataArray[index]; + } + + /** + * 通知控制器数据重新加载 + */ + notifyDataReload(): void { + this.listeners.forEach(listener => { + listener.onDataReloaded(); + }) + } + + /** + * 通知控制器数据增加 + * @param index 数组索引 + */ + notifyDataAdd(index: number): void { + this.listeners.forEach(listener => { + listener.onDataAdd(index); + }) + } + + /** + * 通知控制器数据变化 + * @param index 数组索引 + */ + notifyDataChange(index: number): void { + this.listeners.forEach(listener => { + listener.onDataChange(index); + }) + } + + /** + * 通知控制器数据删除 + * @param index 数组索引 + */ + notifyDataDelete(index: number): void { + this.listeners.forEach(listener => { + listener.onDataDelete(index); + }) + } + + /** + * 通知控制器数据位置变化 + * @param from 起始位置 + * @param to 最终位置 + */ + notifyDataMove(from: number, to: number): void { + this.listeners.forEach(listener => { + listener.onDataMove(from, to); + }) + } + + /** + * 获取数据总数 + * @returns + */ + public totalCount(): number { + return this.dataArray.length; + } + + /** + * 注册改变数据的控制器 + * @param listener 数据控制器 + */ + registerDataChangeListener(listener: DataChangeListener): void { + if (this.listeners.indexOf(listener) < 0) { + this.listeners.push(listener); + } + } + + /** + * 注销改变数据的控制器 + * @param listener 数据控制器 + */ + unregisterDataChangeListener(listener: DataChangeListener): void { + const pos = this.listeners.indexOf(listener) + if (pos >= 0) { + this.listeners.splice(pos, 1); + } + } + + /** + * 增加数据 + */ + public add1stItem(): void { + this.dataArray.splice(0, 0, this.dataArray[this.dataArray.length]); + this.notifyDataAdd(0); + } + + /** + * 在数据尾部增加一个元素 + */ + public addLastItem(): void { + this.dataArray.splice(this.dataArray.length, 0, this.dataArray[this.dataArray.length]); + this.notifyDataAdd(this.dataArray.length - 1); + } + + /** + * 在指定索引位置增加一个元素 + * @param index + */ + public addItem(index: number): void { + this.dataArray.splice(index, 0, this.dataArray[this.dataArray.length]); + this.notifyDataAdd(index); + } + + /** + * 删除第一个元素 + */ + public delete1stItem(): void { + this.dataArray.splice(0, 1); + this.notifyDataDelete(0); + } + + /** + * 删除第二个元素 + */ + public delete2ndItem(): void { + this.dataArray.splice(1, 1); + this.notifyDataDelete(1); + } + + /** + * 删除最后一个元素 + */ + public deleteLastItem(): void { + this.dataArray.splice(-1, 1); + this.notifyDataDelete(this.dataArray.length); + } + + /** + * 重新加载数据 + */ + public reload(): void { + this.notifyDataReload(); + } + + /** + * 改变数组数据 + * @param data:新数组 + */ + public modifyAllData(data: SceneModuleInfo[]): void { + this.dataArray = data; + this.notifyDataReload(); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/Index.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..458d25fd5cc252adc34cf8c85755f3c0e10eff4d --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { memo, __memo_context_type, __memo_id_type } from "@ohos.arkui.stateManagement"; // should be insert by ui-plugins +import { Margin, Column, Component, Entry, UserView } from "@ohos.arkui.component"; // TextAttribute should be insert by ui-plugins +import { Text, List, ListItem, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView, $r,FlexAlign, + Image, Margin, Blank, Row, Builder, Alignment, ForEach, Padding, Color, Divider, Tabs, TabContent, BuilderParam, JSON, + LazyForEach, ListItemGroup, Entry, Canvas, CanvasRenderingContext2D, RenderingContextSettings +} from "@ohos.arkui.component"; // TextAttribute should be insert by ui-plugins +import hilog from '@ohos.hilog'; +import camera from '@ohos.multimedia.camera'; +import { UIContext } from '@ohos.arkui.UIContext' + +@Entry +@Component +struct MyStateSample { + build() { + Column(undefined) { + Button('折叠面板案例') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().pushUrl({url: 'pages/collapsemenu/CollapseMenuSection'}) + }) + .width('80%') + Button('主页瀑布流实现案例') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().pushUrl({url: 'pages/functionalScenes/FunctionalScenes'}) + }) + .width('80%') + .margin({top: 20} as Margin) + Button('自定义TabBar页签案例') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().pushUrl({url: 'pages/tabBar/TabBar'}) + }) + .width('80%') + .margin({top: 20} as Margin) + Button('tabContent内容可以在tabBar上显示并响应滑动事件案例') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().pushUrl({url: 'pages/tabContentOverFlow/TabContentOverFlow'}) + }) + .width('80%') + .margin({top: 20} as Margin) + } + .justifyContent(FlexAlign.Center) + .width('100%') + } +} + + + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo () => { + hilog.info(0x0000, 'testTag', 'MyStateSample'); + MyStateSample(undefined) + } + return wrapper + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/collapsemenu/CollapseMenuSection.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/collapsemenu/CollapseMenuSection.ets new file mode 100644 index 0000000000000000000000000000000000000000..41029bc0e8728a335186e4202fddbf10a7abc0e6 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/collapsemenu/CollapseMenuSection.ets @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + **/ + +import { Constants } from '../../constants/Constants'; +import { ArticleSource } from '../../model/collapsemenu/BasicDataSource'; +import { TreeNode } from '../../model/collapsemenu/TreeNode'; +import { Text, List, ListItem, Column, LazyForEach, Button, Image, Row, ForEach, + ButtonAttribute, ClickEvent, Component, BuilderParam, Padding, $r, + BarState, NestedScrollOptions, NestedScrollMode, Color, JSON, Alignment, + ListItemGroup, Divider, Builder, Margin, Blank, Entry + } from "@ohos.arkui.component" +import { Provide, State, ObjectLink, Consume } from "@ohos.arkui.stateManagement" +import { ARTICLENODE_DATAS } from '../../model/constantsData' +import { ARTICLE_DATA1 } from '../../model/collapsemenu/MockXrData'; +import hilog from '@ohos.hilog' +import { UIContext } from '@ohos.arkui.UIContext' + +/** + * 功能描述: + * 1. 进入页面,呈现面板列表,点击普通面板,跳转到对应文章的网页。 + * 2. 点击折叠面板,面板展开,再次点击,面板收起。 + * + * 实现原理: + * 1. 使用List组件遍历折叠面板数据,如果数据含有children数据,使用ListGroup进行二次遍历渲染。(当前场景只支持嵌套层次为两级,多层级待扩展) + * 2. 点击ListGroup的header组件以及visibility来控制子列表的显示和隐藏。 + * + * @param {ArticleNode[]} articleNodes - 折叠面板列表数据 + * @param {(articleNode: ArticleNode)=>void} articleItemBuilder - 列表项视图 + * @param {(articleNode: ArticleNode, isExpand:boolean)=>void} articleHeaderBuilder - 列表头部视图 + */ + +@Entry +@Component +export struct CollapseMenuSection { + // 折叠面板列表数据 + articleNodes: TreeNode[] = ARTICLE_DATA1; + // 懒加载数据 + articleSource: ArticleSource = new ArticleSource(this.articleNodes); + + build() { + Column() { + Row() { + Text(' ← 返回') + } + .margin(3) + .width('100%') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + List({ space: 10 }) { + LazyForEach(this.articleSource, (item: TreeNode, index: number) => { + if (item.children?.length) { + ListItemGroup() { + ListItem() { + this.articleHeaderBuilder(item) + } + .onClick((e: ClickEvent) => { + item.expand = !item.expand; + this.articleSource.updateData(index, item); + hilog.info(0x0000, '数据改变', 'getBuilder:' + this.articleNodes[index]); + }) + + if (item.expand && item.children) { + this.treeBuilder(item.children as TreeNode[], 1, index) + } + } + .width('100%') + .borderRadius(12) + .backgroundColor(Color.White) + .padding({ + left: 12, + right: 12, + bottom: 4, + top: 4 + } as Padding) + .align(Alignment.TopStart) + + } else { + ListItem() { + this.articleItemBuilder(item); + } + .width('100%') + .borderRadius(12) + .backgroundColor(Color.White) + .padding({ + left: 12, + right: 12, + bottom: 4, + top: 4 + } as Padding) + .align(Alignment.TopStart) + } + }, (itemj: TreeNode ,index: number ) => {return itemj.title + itemj.expand + index}) + } + .width('100%') + .padding({ + left: 12, + right: 12, + bottom: 12 + } as Padding) + .backgroundColor('#F3F3F3') + } + } + + @Builder + articleItemBuilder(articleNode: TreeNode) { + Column() { + Row() { + Text(articleNode.title) + .fontSize($r('app.integer.collapse_menu_text_font_size')) + .layoutWeight(1) + .align(Alignment.Start) + .fontFamily('HarmonyHeiTi-Medium') + .fontColor($r('app.color.font_color_dark')) + Blank() + } + .height(48) + .width('100%') + .onClick((e: ClickEvent) => { + if (articleNode.url) { + + } + }) + } + } + + @Builder + articleHeaderBuilder(articleNode: TreeNode) { + Row() { + Text(articleNode.title) + .fontSize($r('app.integer.collapse_menu_text_font_size')) + .fontFamily('HarmonyHeiTi-Medium') + .fontColor($r('app.color.font_color_dark')) + + Blank() + + Image(articleNode.expand ? $r('app.media.ic_down_arrow') : $r('app.media.ic_right_arrow')) + .width(articleNode.expand ? 24 : + 12) + .height(articleNode.expand ? 12 : + 24) + .margin({ right: 6} as Margin) + } + .height(56) + .width('100%') + } + + @Builder + treeBuilder(articleNodes: TreeNode[], count: number, parentIndex: number) { + ForEach(articleNodes, (articleNode: TreeNode, index: number) => { + this.createBuilder(articleNode, count, parentIndex) + if (articleNode.expand === true && articleNode?.children?.length) { + this.treeBuilder(articleNode.children as TreeNode[], count + 1, index) + } + + }) + } + + + @Builder + createBuilder(articleNode: TreeNode, count: number, parentIndex: number) { + ArticleItem({ + articleNode: articleNode, + + count, + articleGroupIndex: parentIndex + }) + } + +} + + +@Component +struct ArticleItem { + articleNode: TreeNode = {} as TreeNode; + count: number = 0; + @State articleSource: ArticleSource = {} as ArticleSource; + articleGroupIndex: number = -1; + + build() { + ListItem() { + Column() { + Column() { + if (this.articleNode.type === Constants.COLLAPSE_MENU) { + Column() { + this.articleHeaderBuilder({ + expand: this.articleNode.expand, + type: this.articleNode.type, + title: this.articleNode.title, + url: this.articleNode.url, + children: this.articleNode.children, + } as TreeNode) + } + .onClick((e: ClickEvent) => { + + }) + } else { + this.articleItemBuilder(this.articleNode); + } + } + .width('100%') + Divider() + .height(1) + .opacity(0.2) + .color($r('app.color.font_color_dark')) + } + } + } + + @Builder + articleItemBuilder(articleNode: TreeNode) { + Column() { + Row() { + Text(articleNode.title) + .fontSize($r('app.integer.collapse_menu_text_font_size')) + .layoutWeight(1) + .align(Alignment.Start) + .fontFamily('HarmonyHeiTi-Medium') + .fontColor($r('app.color.font_color_dark')) + Blank() + } + .height(48) + .width('100%') + .onClick((e: ClickEvent) => { + if (articleNode.url) { + this.getUIContext().getRouter().pushUrl({url: 'pages/collapsemenu/Concent'}); + } + }) + } + } + + @Builder + articleHeaderBuilder(articleNode: TreeNode) { + Row() { + Text(articleNode.title) + .fontSize($r('app.integer.collapse_menu_text_font_size')) + .fontFamily('HarmonyHeiTi-Medium') + .fontColor($r('app.color.font_color_dark')) + + Blank() + + Image(articleNode.expand ? $r('app.media.ic_down_arrow') : $r('app.media.ic_right_arrow')) + .width(articleNode.expand ? 24 : + 12) + .height(articleNode.expand ? 12 : + 24) + .margin({ right: 6} as Margin) + } + .height(56) + .width('100%') + } + +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/collapsemenu/Concent.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/collapsemenu/Concent.ets new file mode 100644 index 0000000000000000000000000000000000000000..a586d4595c6461b00353084050d9f1fcf9ae687c --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/collapsemenu/Concent.ets @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { UIContext } from '@ohos.arkui.UIContext' +import { Text, List, ListItem, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView, $r, + Image, Margin, Blank, Row, Builder, Alignment, ForEach, Padding, Color, Divider, Tabs, TabContent, BuilderParam, JSON, + LazyForEach, ListItemGroup, Entry, Canvas, CanvasRenderingContext2D, RenderingContextSettings,FlexAlign +} from "@ohos.arkui.component"; +@Entry +@Component +struct Concent { + build() { + Column(undefined) { + Row() { + Text(' ← 返回') + } + .margin(3) + .width('100%') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + Column() { + Text('详情内容').fontSize(20) + } + .height('100%') + .width('100%') + .justifyContent(FlexAlign.Center) + .align(Alignment.Center) + + } + .margin({ + bottom: 24, + } as Margin) + .height('110%') + .width('100%') + .backgroundColor('#F3F3F3') + } +} diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/functionalScenes/FunctionalScenes.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/functionalScenes/FunctionalScenes.ets new file mode 100644 index 0000000000000000000000000000000000000000..d1c6563ae821e0544e6be2bca7262f7d88107573 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/functionalScenes/FunctionalScenes.ets @@ -0,0 +1,417 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import promptAction from '@ohos.promptAction'; +import { Text, List, ListItem, Column, Button, Image, Row, Stack,ListItemGroup, Divider, Blank, + Tabs, TabContent, Flex, FlexOptions, Callback, px2vp, ItemAlign, BackgroundBrightnessOptions, + ButtonAttribute, ClickEvent, Component, BuilderParam, Padding, $r, SafeAreaEdge, BackgroundBlurStyleOptions, + BarState, NestedScrollOptions, NestedScrollMode, Color, JSON, Alignment, FlexDirection, BarPosition, + FlexAlign, BlurStyle, LazyForEach, ForEach, Builder, Margin, SafeAreaType, MenuItemOptions, + TabsController, TabsOptions ,StackOptions, ThemeColorMode, AdaptiveColor, ResourceStr, SizeOptions, + Reusable, TextOverflowOptions, ListOptions, LinearGradientOptions, Menu, MenuItem, Axis, BorderRadiuses, + WaterFlow, FlowItem, ImageFit, TextAlign, Scroll, ScrollAlign, Scroller, TextOverflow, ShadowStyle, TabsAnimationEvent, + OnTabsAnimationStartCallback, Rating, RatingOptions, GestureGroup, GestureEvent, GestureMode, TapGesture, $$, + SheetSize, SheetType, ScrollSizeMode, SheetOptions, CustomBuilder, Entry +} from "@ohos.arkui.component" + +import { State, StateDecoratedVariable, MutableState, stateOf, AppStorage, + observableProxy,ObjectLink, Observed, Consume, Link, Provide, Watch} from "@ohos.arkui.stateManagement" +import display from '@ohos.display'; +import { SceneModuleInfo } from '../../model/functionalScenes/SceneModuleInfo'; +import { WaterFlowDataSource } from '../../model/functionalScenes/WaterFlowDataSource'; +import { TAB_DATA, TabDataModel } from '../../model/functionalScenes/TabsData'; +import { SCENE_MODULE_LIST } from '../../model/functionalScenes/SceneModuleDatas' +import { CollapseMenuSection } from '../collapsemenu/CollapseMenuSection'; +import { UIContext } from '@ohos.arkui.UIContext' + + +/** + * 主页瀑布流列表 + */ +@Entry +@Component +export struct FunctionalScenes { + listData: SceneModuleInfo[] = SCENE_MODULE_LIST; + dataSource: WaterFlowDataSource = new WaterFlowDataSource(this.listData); + @State tabsIndex: number = 0; + tabsController: TabsController = new TabsController(); + private scrollController: Scroller = new Scroller(); + items:number[] = [1,2,3,4,5,6,7,8,9,10] as number[]; + @Builder + tabBuilder(index: number, name: string | undefined) { + Stack() { + Column() { + } + .width(this.tabsIndex === index ? 97 : 71) + .backgroundColor(this.tabsIndex === index ? '#0A59F7' : '#000000') + .opacity(this.tabsIndex === index ? 1 : 0.05) + .height(38) + .borderRadius(21) + + Text(name) + .fontSize(14) + .fontColor(this.tabsIndex === index ? Color.White : Color.Black) + .opacity(this.tabsIndex === index ? 1 : 0.8) + .height('100%') + .id('section') + } + .margin(index !== 0 && index !== TAB_DATA.length ? { left: 9 } as Margin : { + left: 0, + right: 0 + } as Margin) + .align(Alignment.Center) + .onClick((e: ClickEvent) => { + this.tabsIndex = index; + this.tabsController.changeIndex(index); + }) + } + + @Builder + tabsMenu() { + Menu() { + ForEach(TAB_DATA, (item: TabDataModel) => { + MenuItem({ content: item.navData } as MenuItemOptions) + .onClick((e: ClickEvent) => { + this.tabsIndex = item.id; + this.tabsController.changeIndex(item.id); + }) + .id('menu_item') + }) + } + } + + /** + * 主页通过瀑布流和LazyForeach加载 + * WaterFlow+LazyForEach详细用法可参考性能范例: + * https://docs.openharmony.cn/pages/v4.0/zh-cn/application-dev/performance/waterflow_optimization.md/ + */ + build() { + Column() { + Row() { + Text(' ← 返回') + } + .margin(3) + .width('100%') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + Row() { + Stack() { + List({ scroller: this.scrollController } as ListOptions) { + ForEach(TAB_DATA, (tabItem: TabDataModel) => { + ListItem() { + this.tabBuilder(tabItem.id, tabItem.navData); + } + }) + } + .id("MainList") + .margin({ top: 3 } as Margin) + .height(38) + .listDirection(Axis.Horizontal) + .padding({ right: 46 } as Padding) + .scrollBar(BarState.Off) + + Row() { + Row() { + Image($r('app.media.ic_public_more')) + .width(20) + .id('mainPageTabsImage') + } + .bindMenu(this.tabsMenu) + .justifyContent(FlexAlign.Center) + .width(43) + .height(43) + .borderRadius(100) + .backgroundColor('#D8D8D8') + .id('menu_button') + } + .linearGradient({ + angle: 90, + colors: [['rgba(241, 241, 241, 0)', 0], ['#F1F3F5', 0.2], ['#F1F3F5', 1]] + } as LinearGradientOptions) + .justifyContent(FlexAlign.End) + .width(60) + .height(43) + } + .alignContent(Alignment.TopEnd) + } + + .padding({ + left: 13, + right: 13 + } as Padding) + .margin({ top: 8 } as Margin) + Tabs({ controller: this.tabsController } as TabsOptions) { + ForEach(TAB_DATA, (tabItem: TabDataModel) => { + TabContent() { + if (tabItem.navData === '全部') { + List() { + LazyForEach(this.dataSource, (waterFlowItem: SceneModuleInfo) => { + ListItem(){ + methodPoints({ listData: waterFlowItem }) + } + }, (waterFlowItem: SceneModuleInfo) => JSON.stringify(waterFlowItem)) + } + .nestedScroll({ + scrollForward: NestedScrollMode.PARENT_FIRST, + scrollBackward: NestedScrollMode.SELF_FIRST + } as NestedScrollOptions) + .width('100%') + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + .padding({ bottom: $r('app.integer.functional_scenes_water_flow_padding_bottom') } as Padding) + } else { + Column() { + Text(tabItem.navData).fontSize(20) + } + .height('100%') + .width('100%') + .justifyContent(FlexAlign.Center) + .align(Alignment.Center) + } + } + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + .align(Alignment.TopStart) + .alignSelf(ItemAlign.Start) + }) + } + .margin({ top: 8 } as Margin) + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + .padding({ + left: 13, + right: 13 + } as Padding) + .barWidth(0) + .barHeight(0) + .onAnimationStart((index: number, targetIndex: number, extraInfo: TabsAnimationEvent) => { + this.tabsIndex = targetIndex; + this.scrollController.scrollToIndex(targetIndex, true, ScrollAlign.START); + } as OnTabsAnimationStartCallback) + + } + .height('100%') + .backgroundColor("#F1F1F1") + .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.BOTTOM]) + } +} + +/** + * 瀑布流列表项组件布局 + * + * @param listData 组件列表信息 + */ +// TODO:知识点: +// 1.@Reusable标识自定义组件具备可复用的能力,它可以被添加到任意的自定义组件上。 +// 2.复用自定义组件时避免一切可能改变自定义组件的组件树结构和可能使可复用组件中产生重新布局的操作以将组件复用的性能提升到最高。 + +@Reusable +@Component +struct methodPoints { + @State listData: SceneModuleInfo = + new SceneModuleInfo($r("app.media.functional_scenes_address_exchange"), '地址交换动画', + 'addressexchange/AddressExchangeView', '动效', 1); + @State helperUrl: string = 'about://blank'; + @State screenW: number = px2vp(display.getDefaultDisplaySync().width); + @State isNeedClear: boolean = false; + private deviceSize: number = 600; // 依据Navigation的mode属性说明,如使用Auto,窗口宽度>=600vp时,采用Split模式显示;窗口宽度<600vp时,采用Stack模式显示。 + // 当前屏幕折叠态(仅折叠屏设备下有效) + curFoldStatus: display.FoldStatus = display.FoldStatus.FOLD_STATUS_UNKNOWN; + // 从AppStorage中获取设别类别,判断是否为折叠屏 + isFoldable: boolean | undefined = AppStorage.get('isFoldable'); + @State @Watch("onShowReadMeChange") isShowReadMe: boolean = false; + + aboutToAppear(): void { + if (display.isFoldable()) { + this.regDisplayListener(); + } else { + if (this.screenW >= this.deviceSize) { + this.isNeedClear = true; + } else { + this.isNeedClear = false; + } + } + } + + /** + * 组件的生命周期回调,在可复用组件从复用缓存中加入到组件树之前调用 + * @param params:组件更新时所需参数 + */ + aboutToReuse(params: Record): void { + const listData = params['listData']; + if (listData) { + this.listData = listData as SceneModuleInfo; + } + } + + /** + * 注册屏幕状态监听 (仅限折叠屏) + * @returns {void} + */ + regDisplayListener(): void { + this.changeNeedClear(display.getFoldStatus()); + display.on('foldStatusChange', (curFoldStatus: display.FoldStatus) => { + // 同一个状态重复触发不做处理 + if (this.curFoldStatus === curFoldStatus) { + return; + } + // 缓存当前折叠状态 + this.curFoldStatus = curFoldStatus; + this.changeNeedClear(this.curFoldStatus); + }) + } + + changeNeedClear(status: number): void { + if (status === display.FoldStatus.FOLD_STATUS_FOLDED) { + this.isNeedClear = false; + } else { + this.isNeedClear = true; + } + } + + changeHelpUrl(): void { + this.helperUrl = this.listData.helperUrl; + } + + onShowReadMeChange(text: string): void { + if (!this.isShowReadMe) { + + } + } + + // 帮助功能:半模态弹窗显示对应案例README + @Builder + buildReadMeSheet(): void { + Column() { + Row() { + Row() { + Text(this.listData.name) + .textOverflow({ overflow: TextOverflow.Clip } as TextOverflowOptions) + .fontColor(Color.White) + .fontWeight(700) + .fontSize($r('app.integer.nav_destination_title_text_size')) + } + .width($r('app.integer.readme_sheet_text_size')) + + Column() { + Stack() { + Column() { + } + .width($r('app.integer.readme_sheet_size')) + .height($r('app.integer.readme_sheet_size')) + .borderRadius($r('app.integer.nav_destination_title_image_border_radius')) + .backgroundColor(Color.White) + .opacity(0.05) + + Image($r('app.media.ic_public_cancel')) + .fillColor(Color.White) + .width($r('app.integer.readme_sheet_cancel_image_width')) + } + } + .onClick((e: ClickEvent) => { + this.isShowReadMe = false; + }) + .justifyContent(FlexAlign.Center) + .width($r('app.integer.readme_sheet_size')) + .height($r('app.integer.readme_sheet_size')) + .borderRadius($r('app.integer.nav_destination_title_image_border_radius')) + } + .padding({ left: $r('app.integer.readme_sheet_padding'), right: $r('app.integer.readme_sheet_padding') } as Padding) + .margin({ top: $r('app.integer.readme_sheet_margin')} as Margin) + .justifyContent(FlexAlign.SpaceBetween) + .width('100%') + + } + .width('100%') + .height('100%') + } + + build() { + Column() { + Image($r('app.media.background_pic_3')) + .borderRadius({ + topLeft: 8, + topRight: 8, + bottomLeft: 0, + bottomRight: 0 + } as BorderRadiuses) + .objectFit(ImageFit.Contain) + .width('100%') + + Text(this.listData?.serialNumber?.toString() + '. ' + this.listData.name) + .padding({ + left: 10, + right: 10 + } as Padding) + .width('100%') + .fontColor(Color.Black) + .textAlign(TextAlign.Start) + .maxLines(2) + .fontSize(14) + .margin({ + top: 10, + bottom: 10 + } as Margin) + .textOverflow({ overflow: TextOverflow.Ellipsis } as TextOverflowOptions) + + Row() { + Button($r('app.string.functional_scenes_readme')) + .fontSize(12) + .fontColor(Color.White) + .height(25) + .width(100) + .margin({ left: 6, right: 10 } as Margin) + .gesture( + GestureGroup( + GestureMode.Exclusive, + TapGesture({ fingers: 1, count: 1 }) + .onAction(() => { + this.getUIContext().getRouter().pushUrl({url: 'pages/collapsemenu/Concent'}) + }) + ) + ) + + Text($r('app.string.functional_scenes_difficulty')) + .fontColor(Color.Black) + .opacity(0.6) + .textAlign(TextAlign.Start) + .maxLines(1) + .height(18) + .fontSize(12) + .width(25) + + Rating({ + rating: this.listData.ratingNumber, + indicator: true + } as RatingOptions) + .stars(5) + .width(70) + } + .margin({ bottom: 10 } as Margin) + .width('100%') + .justifyContent(FlexAlign.Start) + + } + .shadow(ShadowStyle.OUTER_DEFAULT_XS) + .backgroundColor(Color.White) + .width('100%') + .borderRadius(8) + .margin({ + top: 4, + bottom: 4 + } as Margin) + .onClick((e: ClickEvent) => { + }) + } +} + diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/tabBar/TabBar.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/tabBar/TabBar.ets new file mode 100644 index 0000000000000000000000000000000000000000..a91252ba015bbffd86ddbd1f92cacba44ba73808 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/tabBar/TabBar.ets @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { memo, __memo_context_type, __memo_id_type } from "@ohos.arkui.stateManagement" // should be insert by ui-plugins +import { Text, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView, Entry, Tabs, TabContent, SubTabBarStyle, + Row, ForEach, Position, Builder, Margin, BarMode, OnTabsAnimationStartCallback, TabsAnimationEvent, TabsOptions, + Color, FlexAlign, $r, Image, SizeOptions, Position, AnimateParam, Flex,FlexDirection,FlexAlign,ItemAlign} from "@ohos.arkui.component" // TextAttribute should be insert by ui-plugins +import { State, Link, StateDecoratedVariable, MutableState, stateOf, observableProxy } from "@ohos.arkui.stateManagement" // should be insert by ui-plugins +import hilog from '@ohos.hilog' +import { UIContext, Router } from "@ohos.arkui.UIContext" +import router from "@ohos.router" + +@Entry +@Component +export struct TabViewComponent { + // 配置起始的页签索引 + @State selectedIndex: number = 0; + // 初始化Tab控制器 + + @State tabArray: string[] = ["首页", "新闻", + "视频", "朋友圈", '我的']; + @State imageArray: string[] = + ['app.media.custom_tab_home', 'app.media.custom_tab_new', 'app.media.custom_tab_video', + 'app.media.custom_tab_friend','app.media.custom_tab_user']; + @State imageClickArray: string[] = + ['app.media.custom_tab_home_selected', 'app.media.custom_tab_new_selected', 'app.media.custom_tab_video_selected', + 'app.media.custom_tab_friend_selected','app.media.custom_tab_user_selected']; + + @State fontColor: string = '#182431'; + @State selectedFontColor: string = '#007DFF'; + + @Builder tabBuilder(item: string, index: number) { + Column() { + if (index === 2) { + Column() { + Image(this.selectedIndex === index ? $r("app.media.custom_tab_video_selected") : + $r("app.media.custom_tab_video")) + .size({ + width: 43, + height: 43 + } as SizeOptions) + } + .width(52) + .height(52) + // TODO:知识点:通过设置borderRadius以及margin的top值实现圆弧外轮廓效果。 + .borderRadius(24) + .margin({ top: -15 } as Margin) + .backgroundColor(Color.White) + .justifyContent(FlexAlign.Center) + } else { + Image(this.selectedIndex === index ? $r(this.imageClickArray[index]) : $r(this.imageArray[index])) + .width(24) + .height(24) + .margin({ bottom: 4 } as Margin) + .size({ + width: 28, + height: 28 + } as SizeOptions)// TODO:知识点:通过offset控制图片的纵向偏移。 + .offset({ + y: (this.selectedIndex === index && + this.selectedIndex !== 2) ? + -3 : 0 + } as Position)// TODO:知识点:组件的某些通用属性变化时,可以通过属性动画animation实现过渡效果。本示例的动画效果是tabBar的图片向上偏移一小段距离 + .animation({ + duration: 400, + iterations: 1, + } as AnimateParam) + } + Text(item) + .fontColor(this.selectedIndex === index ? this.selectedFontColor : this.fontColor) + .fontSize(10) + .fontWeight(500) + .lineHeight(14) + }.width('100%') + .onClick((e: ClickEvent) => { + // 更新被选中的tabBar下标 + this.selectedIndex = index; + // 此处控制tabBar的Image图片向上偏移 + }) + } + + build() { + Column() { + Row() { + Text(' ← 返回') + } + .margin(3) + .width('100%') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + Tabs({ index: this.selectedIndex } as TabsOptions) { + // 首页模块,可根据开发者实际业务替换TabContent中的布局 + TabContent() { + Text('首页') + .fontSize(26) + .padding(20) + } + + // 新闻模块,可根据开发者实际业务替换TabContent中的布局 + TabContent() { + Text("新闻") + .fontSize(26) + } + + // 视频模块,可根据开发者实际业务替换TabContent中的布局 + TabContent() { + Text("视频") + .fontSize(26) + } + + // 朋友圈模块,可根据开发者实际业务替换TabContent中的布局 + TabContent() { + Text("朋友圈") + .fontSize(26) + } + + // 我的模块,可根据开发者实际业务替换TabContent中的布局 + TabContent() { + Text("我的") + .fontSize(26) + } + } + .vertical(false) + .scrollable(true) + .layoutWeight(1) + .backgroundColor('#ffdbd9d9') + .barHeight(1) + .onAnimationStart((index: number, targetIndex: number) => { + this.selectedIndex = targetIndex; + } as OnTabsAnimationStartCallback) + /** + * 自定义TabBar组件 + * selectedIndex: 配置起始的页签索引 + * tabsInfo: tab数据源,类型为TabBarInfo + */ + Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceAround, alignItems: ItemAlign.Center }) { + ForEach(this.tabArray, (item: string, tabBarIndex: number) => { + // 单独一个TabBar组件 + this.tabBuilder(item, tabBarIndex) + }) + } + } + .width("100%") + .height("100%") + } +} + diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/tabContentOverFlow/TabContentOverFlow.ets b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/tabContentOverFlow/TabContentOverFlow.ets new file mode 100644 index 0000000000000000000000000000000000000000..2da45220c78fa2fd4b385fbcb45517a17623fcfa --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/ets/pages/tabContentOverFlow/TabContentOverFlow.ets @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { memo, __memo_context_type, __memo_id_type } from "@ohos.arkui.stateManagement" // should be insert by ui-plugins +import { Text, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView, Entry, Tabs, TabContent, SubTabBarStyle, + Row, ForEach, Position, Builder, Margin, BarMode, OnTabsAnimationStartCallback, TabsAnimationEvent, TabsOptions,animateTo,Alignment, + Color, FlexAlign, $r, Image, SizeOptions, Position, AnimateParam, Flex,FlexDirection,FlexAlign,ItemAlign,VideoController, TranslateOptions, SeekMode, VoidCallback, PlaybackInfo, PreparedInfo, + Video,$rawfile, GestureType, PanGesture, GestureEvent, RelativeContainer, Color, HitTestMode, Visibility} from "@ohos.arkui.component" // TextAttribute should be insert by ui-plugins +import { State, Link, StateDecoratedVariable, MutableState, stateOf, observableProxy } from "@ohos.arkui.stateManagement" // should be insert by ui-plugins +import {Callback} from "@ohos.arkui.component" +import hilog from '@ohos.hilog' +import { UIContext, Router } from "@ohos.arkui.UIContext" +import router from "@ohos.router" + +@Entry +@Component +export struct TabContentOverFlowComponent { + @State tabArray: string[] = ["首页", "视频", + "商城", "我的"]; + @State imageArray: string[] = + ['app.media.tabcontentoverflow_homepage', 'app.media.tabcontentoverflow_video', 'app.media.tabcontentoverflow_mall', + 'app.media.tabcontentoverflow_mine']; + @State imageClickArray: string[] = + ['app.media.tabcontentoverflow_homepage_filled', 'app.media.tabcontentoverflow_video_filled', + 'app.media.tabcontentoverflow_mall_filled', 'app.media.tabcontentoverflow_mine_filled']; + @State index: number = 1; + @State offsetX: number = 0; // 用来记录实时拖动的距离 + @State positionX: number = 0; // 用来记录拖动后的距离 + @State playTime: string = ''; // 用来记录现在播放的时间 + @State totalTime: number = 0; // 用来记录视频全部时长 + @State isPlay: boolean = false; // 用来控制播放状态 + @State isTouch: boolean = false; // 是否处于拖动状态 + @State isTextButtonVisible: boolean = true; + private isSeek: boolean = false; // 是否拖拽跳转 + private videoController: VideoController = new VideoController(); + private screenW: number = 480; // 获取设备宽度 + + private dragAnimation() { + this.getUIContext()?.animateTo({ + duration: 300, + }, () => { + hilog.info(0x0000, 'testTag', 'animateTo动画触发'); + this.isTouch = true; + }); + } + + @Builder + videoTabContent() { + /** + * TODO: 高性能知识点: 界面嵌套带来了渲染和计算的大量开销,造成性能的衰退。使用扁平化布局优化嵌套层级,建议采用相对布局RelativeContainer进行扁平化布局,有效减少容器的嵌套层级,减少组件的创建时间。 + * 优化布局性能:https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/reduce-view-nesting-levels.md#%E4%BC%98%E5%8C%96%E5%B8%83%E5%B1%80%E6%80%A7%E8%83%BD + */ + Column() { + Row() { + Text(' ← 返回') + } + .margin(3) + .width('100%') + .onClick((e: ClickEvent) => { + this.getUIContext().getRouter().back(); + }) + Video({ + src: $r('app.media.tabcontentoverflow_play_video'), + controller: this.videoController + }) + .height("90%") + .width("100%") + .autoPlay(false) + .controls(false) + .onPrepared((event: PreparedInfo) => { + if (event !== undefined) { + hilog.info(0x0000, 'testTag', '准备'); + this.totalTime = event.duration; + } + } as Callback) + .onFinish(() => { + hilog.info(0x0000, 'testTag', '完成播放'); + this.isPlay = false; + } as VoidCallback) + .onUpdate((event: PlaybackInfo) => { + hilog.info(0x0000, 'testTag', '更新:'+event.time); + if (event !== undefined) { + if (!this.isTouch) { + if (!this.isSeek) { + // 当没有进行拖动进度条时,进度条根据播放进度进行变化。 + this.offsetX = + event.time / this.totalTime * (this.screenW - 30); + this.positionX = this.offsetX; + } else { + this.isSeek = false; + } + } + } + } as Callback) + .id('video') + // 播放按钮 + Image($r('app.media.tabcontentoverflow_play')) + .width(50) + .height(50) + .position({x: '45%', y: '45%'} as Position) + .id('image') + .onClick((e: ClickEvent) => { + if (this.isPlay) { + this.isPlay = false; + this.videoController.pause(); + } else { + this.isPlay = true; + this.videoController.start(); + } + }) + .visibility(this.isPlay ? Visibility.Hidden : Visibility.Visible) + // 拖动进度条时展示现在播放哪个到具体的时间点 + Text('00:' + this.playTime) + .fontSize(20) + .width(100) + .height(30) + .id('playTimeText') + .fontColor("#ffff0000") + .visibility(this.isTouch ? Visibility.Visible : Visibility.Hidden) + .margin({ + left: -100, + top: -100 + } as Margin) + // 拖动进度条时展示视频总时长 + Text('/00:' + this.totalTime) + .fontSize(20) + .width(100) + .height(30) + .id('totalTimeText') + .fontColor("#ffffffff") + .visibility(this.isTouch ? Visibility.Visible : Visibility.Hidden) + // TODO: 知识点:使用三个Text组件来模拟播放进度条,第一个text位置不变,宽度不变。第二个text根据this.offsetX来变换宽度。第三个text根据this.offsetX来translate该组件在x轴的位置。 + RelativeContainer() { + Text() + .width(this.screenW - 30) + .height(this.isTouch ? 20 : + 5) + .borderRadius(this.isTouch ? 0 : + 5) + .backgroundColor("#804e4c4d") + .translate({ + y: this.isTouch ? -15 : + 0 + } as TranslateOptions) + .id('text1') + .margin({ + top: 8, + left: 15 + } as Margin) + Text() + .width(this.offsetX) + .height(this.isTouch ? 20 : + 5) + .borderRadius(this.isTouch ? 0 : + 5) + .backgroundColor("#999999") + .translate({ + y: this.isTouch ? -15 : 0 + } as TranslateOptions) + .id('text2') + Text() + .width(20) + .height(20) + .borderRadius(10) + .backgroundColor("#999999") + .translate({ x: this.offsetX } as TranslateOptions) + .visibility(this.isTextButtonVisible ? Visibility.Visible : Visibility.None) + .id('text3') + .margin({ + top: -7.5, + left: -10 + } as Margin) + } + .id('RelativeContainer') + .margin({ + top: 30, + } as Margin) + + .width(this.screenW) + .height(70) + // 左右拖动触发该手势事件 + .gesture( + PanGesture() + .onActionStart((event: GestureEvent) => { + hilog.info(0x0000, 'testTag', 'onActionStart触摸准备'); + this.dragAnimation(); + this.isTextButtonVisible = false; + this.isSeek = true; + })/** + * TODO: 性能知识点: onActionUpdate是系统高频回调函数,避免在函数中进行冗余或耗时操作,例如应该减少或避免在函数打印日志,会有较大的性能损耗。 + * 合理使用系统接口,避免冗余操作:https://gitee.com/harmonyos-cases/cases/blob/master/docs/performance/README.md + */ + .onActionUpdate((event: GestureEvent) => { + let playTime = + Math.floor(this.offsetX / (this.screenW - 30) * + this.totalTime); + this.offsetX = this.positionX + event.offsetX; + if (this.offsetX <= 0) { + this.offsetX = 0; + } + if (this.offsetX >= this.screenW - 30) { + this.offsetX = this.screenW - 30; + } + if (playTime >= 10) { + this.playTime = (playTime as Number).toString(); + } else { + this.playTime = '0' + (playTime as Number).toString(); + } + }) + .onActionEnd((event: GestureEvent) => { + hilog.info(0x0000, 'testTag', 'onActionEnd触摸结束'); + if (this.positionX === this.offsetX) { // 进度条未发生改变 + this.isSeek = false; + } else { + // 拖动进度条发生改变后通过this.videoController.setCurrentTime来精准定位视频现在播放位置。 + this.videoController.setCurrentTime(Number(((this.offsetX / + (this.screenW - 30) * this.totalTime) as Number).toFixed(3)), + SeekMode.Accurate); + this.positionX = this.offsetX; + } + this.isTextButtonVisible = true; + this.isTouch = false; + }) as GestureType + ) + } + + } + + build() { + Column() { + // TODO: 知识点:将barHeight设置为0,预留60vp给自定义tabBar,TabContent的高度则可以使用calc(100% - 60vp)获取。 + Tabs({ index: this.index } as TabsOptions) { + TabContent() { + Text('首页界面,仅供Tabs展示。') + .fontSize(20) + } + .align(Alignment.Center) + .height("calc(100% - 60vp)") + .width("100%") + + TabContent() { + this.videoTabContent(); + } + .align(Alignment.Top) + + TabContent() { + Text('商城界面,仅供Tabs展示。') + .fontSize(20) + } + .align(Alignment.Center) + .height("calc(100% - 60vp)") + .width("100%") + + TabContent() { + Text('我的界面,仅供Tabs展示。') + .fontSize(20) + } + .align(Alignment.Center) + .height("calc(100% - 60vp)") + .width("100%") + } + // TODO: 知识点:将zIndex设置为2,TabContent将在tabBar之上,显示的效果就是TabContent外溢的部分在tabBar上。 + .zIndex(2) + .scrollable(false) + .barHeight(1) + .animationDuration(100) + // TODO: 知识点:hitTestBehavior属性可以实现在复杂的多层级场景下,一些组件能够响应手势和事件,而一些组件不能响应手势和事件。HitTestMode.Transparent的效果为,自身响应触摸测试,不会阻塞兄弟节点的触摸测试。 + .hitTestBehavior(HitTestMode.Transparent) + .id('tabs') + + // 页签 + Row() { + ForEach(this.tabArray, (item: string, index: number) => { + Column() { + Image(this.index === index ? $r(this.imageClickArray[index]) : $r(this.imageArray[index])) + .width(30) + .height(30) + Text(item) + .fontSize(12) + .fontColor(this.index === index ? "#e40d0d" : + "#FFFFFFFF") + } + .width(50) + .margin({ top: 10 } as Margin) + // 为将底部视图扩展到非安全区域,可将原本60vp的高度设置为100vp。 + .height(100) + .onClick((e: ClickEvent) => { + hilog.info(0x0000, 'testTag', 'tabs点击'); + this.index = index; + }) + }) + } + .width("100%") + .backgroundColor("#FF000000") + .margin({top: "-60vp"} as Margin) + .justifyContent(FlexAlign.SpaceAround) + .id('tabbar') + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/module.json5 b/code/ArkTS1.2/TabsSample/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..f95f9a6e69c03b1b6da379b36fc7aa9ee2c41ac4 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/module.json5 @@ -0,0 +1,64 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/color.json b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..7bccbbf2e9ec34fdab062feaef5506390d2cfa9a --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,24 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + }, + { + "name": "font_color_dark", + "value": "#000000" + }, + { + "name": "helper_bindsheet_bgc", + "value": "#303643" + }, + { + "name": "background_blur_selected_text_color", + "value": "#FFEC0707" + }, + { + "name": "background_blur_tabs_bar_background_color", + "value": "#FFE9E9E9" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/float.json b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/integer.json b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/integer.json new file mode 100644 index 0000000000000000000000000000000000000000..ce96b23157ebaf0cddbee69137edb1458ea6e143 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/integer.json @@ -0,0 +1,248 @@ +{ + "integer": [ + { + "name": "helper_size", + "value": 30 + }, + { + "name": "nav_destination_title_image_size", + "value": 28 + }, + { + "name": "nav_destination_title_image_background_size", + "value": 40 + }, + { + "name": "nav_destination_title_text_size", + "value": 20 + }, + { + "name": "nav_destination_title_text_margin", + "value": 9 + }, + { + "name": "nav_destination_title_width", + "value": 328 + }, + { + "name": "nav_destination_title_height", + "value": 56 + }, + { + "name": "nav_destination_title_bottom", + "value": 8 + }, + { + "name": "nav_destination_title_image_border_radius", + "value": 100 + }, + { + "name": "swiper_width", + "value": 353 + }, + { + "name": "swiper_height", + "value": 160 + }, + { + "name": "swiper_border_radius", + "value": 16 + }, + { + "name": "swiper_margin_top", + "value": 8 + }, + { + "name": "swiper_margin_bottom", + "value": 8 + }, + { + "name": "helper_help_image_size", + "value": 18 + }, + { + "name": "helper_width", + "value": 40 + }, + { + "name": "helper_border_radius", + "value": 40 + }, + { + "name": "readme_sheet_text_size", + "value": 276 + }, + { + "name": "readme_sheet_size", + "value": 40 + }, + { + "name": "readme_sheet_cancel_image_width", + "value": 20 + }, + { + "name": "readme_sheet_padding", + "value": 17 + }, + { + "name": "readme_sheet_margin", + "value": 16 + }, + { + "name": "nav_destination_padding_bottom", + "value": 64 + }, + { + "name": "nav_destination_padding_bottom_no_title", + "value": 8 + }, + { + "name": "nav_destination_title_text_width", + "value": 250 + }, + { + "name": "collapse_menu_list_border_radius", + "value": 12 + }, + { + "name": "collapse_menu_list_margin_top", + "value": 4 + }, + { + "name": "collapse_menu_list_padding_right", + "value": 12 + }, + { + "name": "collapse_menu_list_margin_left", + "value": 12 + }, + { + "name": "collapse_menu_list_item_margin_top", + "value": 6 + }, + { + "name": "collapse_menu_text_font_size", + "value": 16 + }, + { + "name": "collapse_menu_text_margin_left", + "value": 16 + }, + { + "name": "collapse_menu_arrow_unfold_width", + "value": 24 + }, + { + "name": "collapse_menu_arrow_width", + "value": 12 + }, + { + "name": "collapse_menu_arrow_fold_margin_right", + "value": 6 + }, + { + "name": "collapse_menu_divide_margin_left", + "value": 42 + }, + { + "name": "collapse_menu_divide_margin_right", + "value": 8 + }, + { + "name": "collapse_menu_fourth_level_height", + "value": 48 + }, + { + "name": "background_blur_tab_bar_height", + "value": 60 + }, + { + "name": "functional_scenes_tab_bar_background_width1", + "value": 97 + }, + { + "name": "functional_scenes_tab_bar_background_width2", + "value": 71 + }, + { + "name": "functional_scenes_tab_bar_background_height", + "value": 38 + }, + { + "name": "functional_scenes_tab_bar_background_border_radius", + "value": 21 + }, + { + "name": "functional_scenes_tab_bar_margin", + "value": 9 + }, + { + "name": "functional_scenes_tab_bar_list_margin", + "value": 3 + }, + { + "name": "functional_scenes_tab_bar_list_height", + "value": 38 + }, + { + "name": "functional_scenes_tab_bar_list_padding", + "value": 46 + }, + { + "name": "functional_scenes_tab_bar_image_more", + "value": 20 + }, + { + "name": "functional_scenes_tab_bar_image_more_background_size", + "value": 43 + }, + { + "name": "functional_scenes_tab_bar_image_more_border_radius", + "value": 100 + }, + { + "name": "functional_scenes_tab_bar_image_more_row_width", + "value": 60 + }, + { + "name": "functional_scenes_tab_bar_image_more_row_height", + "value": 43 + }, + { + "name": "functional_scenes_tab_bar_image_more_row_padding", + "value": 13 + }, + { + "name": "functional_scenes_tab_bar_image_more_row_margin", + "value": 8 + }, + { + "name": "functional_scenes_item_width", + "value": 177 + }, + { + "name": "functional_scenes_water_flow_padding_bottom", + "value": 53 + }, + { + "name": "functional_scenes_item_foldable_width", + "value": 158 + }, + { + "name": "functional_scenes_readme_width", + "value": 60 + }, + { + "name": "functional_scenes_readme_height", + "value": 25 + }, + { + "name": "functional_scenes_readme_font_size", + "value": 12 + }, + { + "name": "functional_scenes_rating_width", + "value": 70 + } + ] +} diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/string.json b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..fa6c171dc1e440d5dde5c026d26862e2de4cebe5 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,160 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + }, + { + "name": "background_blur_main", + "value": "背景模糊" + }, + { + "name": "background_blur_discover", + "value": "折叠面板" + }, + { + "name": "background_blur_hot", + "value": "瀑布流" + }, + { + "name": "background_blur_my", + "value": "我的" + }, + { + "name": "functional_scenes_page_show", + "value": "page from package" + }, + { + "name": "functional_scenes_difficulty", + "value": "难度 " + }, + { + "name": "functional_scenes_tab_title_data_Native", + "value": "Native" + }, + { + "name": "functional_scenes_tab_title_data_arkui", + "value": "UI布局" + }, + { + "name": "functional_scenes_tab_title_data_other", + "value": "其他" + }, + { + "name": "functional_scenes_tab_title_data_tripartite_library", + "value": "三方库" + }, + { + "name": "functional_scenes_tab_title_data_dynamic_effect", + "value": "动效" + }, + { + "name": "functional_scenes_main_page_top_borderRadius", + "value": "8" + }, + { + "name": "functional_scenes_main_page_list_borderRadius", + "value": "8" + }, + { + "name": "functional_scenes_main_page_padding1", + "value": "10" + }, + { + "name": "functional_scenes_main_page_padding2", + "value": "12" + }, + { + "name": "functional_scenes_main_page_padding3", + "value": "16" + }, + { + "name": "functional_scenes_main_page_padding4", + "value": "18" + }, + { + "name": "functional_scenes_main_page_padding5", + "value": "8" + }, + { + "name": "functional_scenes_main_page_padding6", + "value": "10" + }, + { + "name": "functional_scenes_main_page_padding_list_bottom", + "value": "350" + }, + { + "name": "functional_scenes_main_page_swiper_height", + "value": "200" + }, + { + "name": "functional_scenes_main_page_text_height", + "value": "18" + }, + { + "name": "functional_scenes_main_page_text_width", + "value": "25" + }, + { + "name": "functional_scenes_main_page_text_font_size", + "value": "12" + }, + { + "name": "functional_scenes_main_page_margin1", + "value": "10" + }, + { + "name": "functional_scenes_main_page_margin2", + "value": "12" + }, + { + "name": "functional_scenes_main_page_tab_text_underline", + "value": "2" + }, + { + "name": "functional_scenes_main_page_water_flow_gap", + "value": "6" + }, + { + "name": "functional_scenes_item_gap_half", + "value": "4" + }, + { + "name": "functional_scenes_network_message", + "value": "此功能需联网使用" + }, + { + "name": "functional_scenes_readme", + "value": "查看源码" + }, + { + "name": "functional_scenes_full_size", + "value": "100%" + }, + { + "name": "custom_tab_home", + "value": "首页" + }, + { + "name": "custom_tab_news", + "value": "新品" + }, + { + "name": "custom_tab_friend", + "value": "商城" + }, + { + "name": "custom_tab_mine", + "value": "我的" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/back_index.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/back_index.svg new file mode 100644 index 0000000000000000000000000000000000000000..0818cbcea6789ebc5b4f337fb232252299b7e45c --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/back_index.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_1.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_1.png new file mode 100644 index 0000000000000000000000000000000000000000..74ce3af508d55e47d47a49450bdc745a48a627bb Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_1.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_2.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5411e7ac8de507b7219a1e2d073c98ec725795f5 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_2.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_3.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_3.png new file mode 100644 index 0000000000000000000000000000000000000000..431bc51bab0d0e21736c89fd9eb3836212f81969 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_3.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_4.webp b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_4.webp new file mode 100644 index 0000000000000000000000000000000000000000..3abb5a617a2b3cd397606343ce9d5f017bf0ca80 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/background_pic_4.webp differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_find_normal.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_find_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..69eafb561c07a739bc29b15f38c7fc4e08c346d7 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_find_normal.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_find_select.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_find_select.png new file mode 100644 index 0000000000000000000000000000000000000000..19aa62ec133a06053220699ab3e1d963fd7052b3 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_find_select.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_hot_normal.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_hot_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..3310b14196a8f2dadf76bbde2acae404c956f5e1 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_hot_normal.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_hot_select.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_hot_select.png new file mode 100644 index 0000000000000000000000000000000000000000..706e7c8dcd321b7b9c1a2e98c0481dc8e64306e6 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_hot_select.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_main_normal.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_main_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..ada79f5589d5af7c8a8ed9fa67dfa9f07435f2ee Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_main_normal.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_main_select.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_main_select.png new file mode 100644 index 0000000000000000000000000000000000000000..af4f621097b73b579741d17a549a01c1b9dfb482 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_main_select.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_my_normal.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_my_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..7e9c0747798aa3b4a7b385bc3957c94fa8dbcab3 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_my_normal.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_my_select.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_my_select.png new file mode 100644 index 0000000000000000000000000000000000000000..7895b8cb46876f1ad664cf413545a8f6f52b9957 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/backgroundblur_my_select.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_cart.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_cart.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cc936378606e7905915498a037f2c202acf8ff Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_cart.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_default_icon.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_default_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_default_icon.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_friend.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_friend.svg new file mode 100644 index 0000000000000000000000000000000000000000..37a37252b40ee12e8aa6db651e52f4f96c1d5b7a --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_friend.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_friend_selected.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_friend_selected.svg new file mode 100644 index 0000000000000000000000000000000000000000..db908b3247d4a387517af576a9d26e5bb4f51b96 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_friend_selected.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_home.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_home.svg new file mode 100644 index 0000000000000000000000000000000000000000..7392fa0daa0dec33090bbc10342bfa9aacfef2e6 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_home.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_home + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_home_selected.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_home_selected.svg new file mode 100644 index 0000000000000000000000000000000000000000..751a5c64cff15034e33f9eef3230636b0081c546 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_home_selected.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_home_filled + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_new.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_new.svg new file mode 100644 index 0000000000000000000000000000000000000000..41da014aa7ec77d322e070b0bf28b7cfce2e5051 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_new.svg @@ -0,0 +1,7 @@ + + + ic_gallery_discover + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_new_selected.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_new_selected.svg new file mode 100644 index 0000000000000000000000000000000000000000..40e140b5a2203bd0cf6b34c117dadc0ce7da13d4 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_new_selected.svg @@ -0,0 +1,8 @@ + + + xxhdpi/ic/navigation/discover_action + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_user.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_user.svg new file mode 100644 index 0000000000000000000000000000000000000000..a4c28ffbc49f7eb66f9ade5ab76f4cfb71469170 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_user.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_contacts + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_user_selected.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_user_selected.svg new file mode 100644 index 0000000000000000000000000000000000000000..07e3a3daa5225872b7139417f2dbecd9440d122a --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_user_selected.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_contacts_filled + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_video.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_video.svg new file mode 100644 index 0000000000000000000000000000000000000000..f5cd90d004e9812c74ef9ac4224de439b5070541 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_video.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_video_selected.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_video_selected.svg new file mode 100644 index 0000000000000000000000000000000000000000..d9fe4874cb1742f5cdff75867a25b2221d0dc78f --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/custom_tab_video_selected.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example1.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example1.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e732fc32efa11eb701e09afe5bc2a16b0a29e0 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example1.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example2.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example2.png new file mode 100644 index 0000000000000000000000000000000000000000..e15a9d5b2ae016cf216f5c8beb457ef835fe642f Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example2.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example3.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example3.png new file mode 100644 index 0000000000000000000000000000000000000000..9a5ac68ad513acc8c29d8668d7c000424f9e2142 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example3.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example4.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example4.png new file mode 100644 index 0000000000000000000000000000000000000000..75e06829c832abf33153c9b21997abfb5cd04e34 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/example4.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/foreground.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..97014d3e10e5ff511409c378cd4255713aecd85f Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/foreground.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/functional_scenes_address_exchange.gif b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/functional_scenes_address_exchange.gif new file mode 100644 index 0000000000000000000000000000000000000000..bd9a070650d123b2231d3384e677767830622120 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/functional_scenes_address_exchange.gif differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_down_arrow.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_down_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..351af3d6742d880a5fe8a06d57bff53a6624c85b Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_down_arrow.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_public_cancel.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_public_cancel.svg new file mode 100644 index 0000000000000000000000000000000000000000..11708cc009ca6519b732405a53da6e79ab99f989 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_public_cancel.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_cancel + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_public_more.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_public_more.svg new file mode 100644 index 0000000000000000000000000000000000000000..88fd9e2a80e4c489790c3f835d2bedd7b9a9e330 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_public_more.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_more + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_right_arrow.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_right_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..d5dc67eec85664a24889404b40174e62278f3c74 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/ic_right_arrow.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/layered_image.json b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000000000000000000000000000000000000..fb49920440fb4d246c82f9ada275e26123a2136a --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:background", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/main.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/main.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd9e54d78378aebb0dba831068237f97ba31db9 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/main.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/startIcon.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/startIcon.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_cart.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_cart.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cc936378606e7905915498a037f2c202acf8ff Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_cart.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_cart_selected.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_cart_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..b49a8b0cbde6bd938a1944ca26283d77facc54fd Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_cart_selected.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_community.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_community.svg new file mode 100644 index 0000000000000000000000000000000000000000..4036c8ec8019c307db7e88a909833436d62b63f2 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_community.svg @@ -0,0 +1,17 @@ + + + discover_shequ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_community_selected.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_community_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..3f922ba641740d06c53c2d90941ab806414275f0 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_community_selected.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_home.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_home.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6ea867d64f3e90b278ec86f10ee39de825781f Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_home.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_new.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_new.png new file mode 100644 index 0000000000000000000000000000000000000000..81efdfd2eb83a97dbf59fb28e5baa4de1fc5f62c Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_new.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_new_selected.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_new_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..8bad8514f88c682521a790486e720858fd16afd4 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_new_selected.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_tabBarMain.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_tabBarMain.png new file mode 100644 index 0000000000000000000000000000000000000000..72852d0769e6e8db449f5273ca0943d908123a9b Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_tabBarMain.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_user.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_user.png new file mode 100644 index 0000000000000000000000000000000000000000..19d7c4de69f30526df035f37fd4a494e510d44a8 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_user.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_user_selected.png b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_user_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..eb04cc0172cec9bb87de3658619927631cbe2823 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tab_user_selected.png differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_homepage.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_homepage.svg new file mode 100644 index 0000000000000000000000000000000000000000..cd456ad983dd898f22b2cd28892aab323d3a8280 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_homepage.svg @@ -0,0 +1,13 @@ + + + ic_edit company + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_homepage_filled.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_homepage_filled.svg new file mode 100644 index 0000000000000000000000000000000000000000..336374e3489a254c74aa6d402afb423d005fc0cf --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_homepage_filled.svg @@ -0,0 +1,13 @@ + + + ic_edit company_filled + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mall.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mall.svg new file mode 100644 index 0000000000000000000000000000000000000000..486947ef9ca03bfdbd7de48d26164e420a8880f9 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mall.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_appstore + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mall_filled.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mall_filled.svg new file mode 100644 index 0000000000000000000000000000000000000000..302452914b5467edb8715cdeb764500d26b56614 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mall_filled.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_appstore_filled + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mine.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mine.svg new file mode 100644 index 0000000000000000000000000000000000000000..271077d92a4f6bcb2e89e365b5f7e9f4d8f7d270 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mine.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_contacts + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mine_filled.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mine_filled.svg new file mode 100644 index 0000000000000000000000000000000000000000..c8cb6dede78796728f24f27b2c9c02af3b2c6a37 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_mine_filled.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_contacts_filled + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_play.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_play.svg new file mode 100644 index 0000000000000000000000000000000000000000..fd027d5b3e27c8bab499c8ad84cf55734abd13d4 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_play.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_play + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_play_video.MP4 b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_play_video.MP4 new file mode 100644 index 0000000000000000000000000000000000000000..9bcf0eaee14311ad17b1dd01043e4da04cbff4c5 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_play_video.MP4 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:48f6dc6969fd44c46ad3e3940e13b770d2a383ecaa61ca36a9da8d42e69835c3 +size 3043166 diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_preview.jpg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..391c783cb7d1ae1485ca9f02e9d57e02f5531a81 Binary files /dev/null and b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_preview.jpg differ diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_video.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_video.svg new file mode 100644 index 0000000000000000000000000000000000000000..4efd2acd00dec11e18b69d57a1aa2cb490c22c3f --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_video.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_play_norm + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_video_filled.svg b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_video_filled.svg new file mode 100644 index 0000000000000000000000000000000000000000..39ed68dbc9c54a368f9dbb084b0162c7eef12788 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/media/tabcontentoverflow_video_filled.svg @@ -0,0 +1,13 @@ + + + Public/ic_public_play_norm + + + + + + + + + + \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/profile/backup_config.json b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000000000000000000000000000000000..78f40ae7c494d71e2482278f359ec790ca73471a --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/profile/main_pages.json b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..963e00499cda601f41e50576498ed9e47dbb44b4 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,10 @@ +{ + "src": [ + "pages/Index", + "pages/tabBar/TabBar", + "pages/tabContentOverFlow/TabContentOverFlow", + "pages/functionalScenes/FunctionalScenes", + "pages/collapsemenu/CollapseMenuSection", + "pages/collapsemenu/Concent" + ] +} diff --git a/code/ArkTS1.2/TabsSample/entry/src/main/resources/dark/element/color.json b/code/ArkTS1.2/TabsSample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..79b11c2747aec33e710fd3a7b2b3c94dd9965499 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/TabsSample/hvigor/hvigor-config.json5 b/code/ArkTS1.2/TabsSample/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..57c58e3641a0b085f39f7f137b9a938ecb20f2fd --- /dev/null +++ b/code/ArkTS1.2/TabsSample/hvigor/hvigor-config.json5 @@ -0,0 +1,49 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "modelVersion": "5.0.2", + "dependencies": { + "@ohos/hvigor-ohos-online-sign-plugin": "4.0.2" + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/ArkTS1.2/TabsSample/hvigorfile.ts b/code/ArkTS1.2/TabsSample/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f435606b5766719f7203539113d84a2b281b0353 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/TabsSample/oh-package.json5 b/code/ArkTS1.2/TabsSample/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..b6f7090658c0e69d5582af5d236fde4eab954ed6 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/oh-package.json5 @@ -0,0 +1,34 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "modelVersion": "5.0.2", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + } +} diff --git a/code/ArkTS1.2/TabsSample/ohosTest.md b/code/ArkTS1.2/TabsSample/ohosTest.md new file mode 100644 index 0000000000000000000000000000000000000000..31b7c9a06d032d62e4b67c11987d76534f77ecb0 --- /dev/null +++ b/code/ArkTS1.2/TabsSample/ohosTest.md @@ -0,0 +1,15 @@ +# 并行化使用示例测试用例 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +|-----------------------------------|-------------------------------------|----------------------|------------------------------------|------|------| +| EAWorker-不同线程共同操作一个函数-加锁 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程共同操作一个函数-加锁】按钮 | 打印日志参考如下:(不会出现交替打印)
*************************@@@@@@@@@@@@@@@@@@@@@@@@@&&&&&&&&&&&&&&&&&&&&&&&&& | 否 | Pass | +| EAWorker-不同线程共同操作一个函数-不加锁 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程共同操作一个函数-不加锁】按钮 | 打印日志参考如下:(可能会出现交替打印)
&&&&&&&&&&&&&&&&&&&&&&&*&*&&&&&&&&*****************************************@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ | 否 | Pass | +| EAWorker-不同线程操作不同函数-加锁 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程操作不同函数-加锁】按钮 | 打印日志参考如下:
111111111111111111111111133333333333333333333333332222222222222222222222222 | 否 | Pass | +| EAWorker-不同线程操作不同函数-不加锁 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程操作不同函数-加锁】按钮 | 打印日志参考如下:
1111111111111111131333133333333333323222222222222222222222 | 否 | Pass | +| EAWorker-不同线程共享一个容器 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程共享一个容器】按钮 | 显示计算结果:
50或100 | 否 | Pass | +| EAWorker-不同线程读写同一个文件 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【EAWorker-不同线程读写同一个文件】按钮 | 打印日志如下:
com.samples.EAWorker successfully launched | 否 | Pass | +| taskPool-执行一组有关联的任务 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【taskPool-执行一组有关联的任务】按钮 | 打印日志如下:
[100,200,300][10,20,30] | 否 | Pass | +| taskPool-任务优先级 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【taskPool-任务优先级】按钮 | 打印日志如下:
HMHHHHHMHHHHMMMLMMMMMLLLLLLLLL | 否 | Pass | +| taskPool-计算两数之和 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【taskPool-计算两数之和】按钮 | 打印日志如下:
12 | 否 | Pass | \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/.gitignore b/code/ArkTS1.2/ThreadSafeContainersSample/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d2ff20141ceed86d87c0ea5d99481973005bab2b --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/app.json5 b/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..8b63a1f32a1fac14c4bafea21e3625acc92d49b4 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.samples.threadsafecontainerssample", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/resources/base/element/string.json b/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..dabdd969b5f7715611cef8e2e3f14d07522b2deb --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "ThreadSafeContainersSample" + } + ] +} diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/resources/base/media/app_icon.png b/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 Binary files /dev/null and b/code/ArkTS1.2/ThreadSafeContainersSample/AppScope/resources/base/media/app_icon.png differ diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/build-profile.json5 b/code/ArkTS1.2/ThreadSafeContainersSample/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..d5b13fa941f6f3912e974615e2e9a02f1a819a02 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/build-profile.json5 @@ -0,0 +1,42 @@ +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "arkTSVersion": "1.2", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/code-linter.json5 b/code/ArkTS1.2/ThreadSafeContainersSample/code-linter.json5 new file mode 100644 index 0000000000000000000000000000000000000000..073990fa45394e1f8e85d85418ee60a8953f9b99 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/code-linter.json5 @@ -0,0 +1,32 @@ +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@security/no-unsafe-aes": "error", + "@security/no-unsafe-hash": "error", + "@security/no-unsafe-mac": "warn", + "@security/no-unsafe-dh": "error", + "@security/no-unsafe-dsa": "error", + "@security/no-unsafe-ecdsa": "error", + "@security/no-unsafe-rsa-encrypt": "error", + "@security/no-unsafe-rsa-sign": "error", + "@security/no-unsafe-rsa-key": "error", + "@security/no-unsafe-dsa-key": "error", + "@security/no-unsafe-dh-key": "error", + "@security/no-unsafe-3des": "error" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/.gitignore b/code/ArkTS1.2/ThreadSafeContainersSample/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/build-profile.json5 b/code/ArkTS1.2/ThreadSafeContainersSample/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..8ac81840b69fd7c78c2024c6570ed01e4292cf6d --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/build-profile.json5 @@ -0,0 +1,29 @@ +{ + "apiType": "stageMode", + "arkTSVersion": "1.2", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/hvigorfile.ts b/code/ArkTS1.2/ThreadSafeContainersSample/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..c6edcd90486dd5a853cf7d34c8647f08414ca7a3 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/obfuscation-rules.txt b/code/ArkTS1.2/ThreadSafeContainersSample/entry/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/oh-package.json5 b/code/ArkTS1.2/ThreadSafeContainersSample/entry/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..248c3b7541a589682a250f86a6d3ecf7414d2d6a --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/oh-package.json5 @@ -0,0 +1,10 @@ +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..b892d18a00d879e20ee20840d94a2e06f10ae1c5 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,31 @@ +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import { BusinessError } from '@ohos.base'; +import hilog from '@ohos.hilog'; +import { MyCallback } from '../models/MyCallback'; + + +class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onCreate'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onWindowStageCreate'); + try { + windowStage.loadContent('pages/Index', (err: BusinessError): void => { + hilog.info(0x0000, 'testTag', 'loadContent entering'); + MyCallback.runCasesOfCallback(); + if (err.code) { + hilog.info(0x0000, 'testTag', 'loadContent error'); + return; + } + hilog.info(0x0000, 'testTag', 'loadContent ok'); + }); + } catch (e: Error) { + hilog.info(0x0000, 'testTag', 'loadContent catch error:-----------' + e.message); + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/models/MyCallback.ets b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/models/MyCallback.ets new file mode 100644 index 0000000000000000000000000000000000000000..5827b846dc824ef26c25e0a8612717cb7b448a3a --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/models/MyCallback.ets @@ -0,0 +1,38 @@ +import { AsyncCallback, BusinessError, Callback, ErrorCallback } from '@ohos.base'; +import hilog from '@ohos.hilog'; + +const SYNTAX_ERROR_CODE: double = 1002; + +export class MyCallback { + static myCallback(callback: Callback): void { + hilog.info(0x0000, 'testTag', 'myCallback'); + callback('myCallback'); + } + + static myAsyncCallback(callback: AsyncCallback): void { + hilog.info(0x0000, 'testTag', 'myAsyncCallback'); + let error = new Error('Business Error', 'basicError2 message', undefined); + let be2: BusinessError = new BusinessError(SYNTAX_ERROR_CODE, error); + callback(be2, 'yAsyncCallback'); + } + + static myErrorCallback(callback: ErrorCallback>): void { + hilog.info(0x0000, 'testTag', 'myErrorCallback'); + let error = new Error('Business Error', 'myErrorCallback message', undefined); + let result: string = 'test'; + let be: BusinessError = new BusinessError(SYNTAX_ERROR_CODE, result, error); + callback(be); + } + + static runCasesOfCallback() { + MyCallback.myCallback((data: string) => { + hilog.info(0x0000, 'testTag', 'MyCallback' + data); + }) + MyCallback.myAsyncCallback((error: BusinessError, result: string) => { + hilog.info(0x0000, 'testTag', `myAsyncCallback, error: ${error.message}, result:${result}`); + }) + MyCallback.myErrorCallback((error: BusinessError) => { + hilog.info(0x0000, 'testTag', `myAsyncCallback, error: ${error.message}`); + }) + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/Index.ets b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..98546ebff6b8c8c2ae054256ce39fff76667f922 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,80 @@ +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView +} from '@ohos.arkui.component' // TextAttribute should be insert by ui-plugins +import { + State, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import hilog from '@ohos.hilog' +import { ArrayBlockingQueueTest } from './containers/ArrayBlockingQueueTest'; +import { ConcurrentHashMapTest } from './containers/ConcurrentHashMapTest'; +import { ConcurrentSetTest } from './containers/ConcurrentSetTest'; +import { LinkedBlockingQueueTest } from './containers/LinkedBlockingQueueTest'; + + +@Component +struct MyStateSample { + aboutToAppear() { + let arrayQueue = new ArrayBlockingQueueTest(); + arrayQueue.basicScene(); + arrayQueue.concurrentInQueue(); + arrayQueue.concurrentOutQueue(); + arrayQueue.nullBlocking(); + let map = new ConcurrentHashMapTest(); + map.basicScene(); + map.concurrentInQueue(); + map.concurrentOutQueue(); + map.hashMapBenchmark(); + let set = new ConcurrentSetTest(); + set.basicScene(); + set.concurrentInSet(); + set.concurrentOutSet(); + let linkedQueue = new LinkedBlockingQueueTest(); + linkedQueue.basicScene(); + linkedQueue.concurrentInQueue(); + linkedQueue.concurrentOutQueue(); + linkedQueue.fullBlocking(); + linkedQueue.nullBlocking(); + } + + @State stateVar: string = 'state var'; + message: string = 'var'; + + build() { + Column(undefined) { + Button(this.message).backgroundColor('#FFFF00FF') + .onClick((e: ClickEvent) => { + hilog.info(0x0000, 'testTag', 'On Click'); + }) + Text(this.stateVar).fontSize(20) + } + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @ + memo() => + { + hilog.info(0x0000, 'testTag', 'MyStateSample'); + MyStateSample(undefined) + } + return wrapper + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ArrayBlockingQueueTest.ets b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ArrayBlockingQueueTest.ets new file mode 100644 index 0000000000000000000000000000000000000000..83802c8a2e54b3357090d5e571c5504c9537a617 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ArrayBlockingQueueTest.ets @@ -0,0 +1,118 @@ +import hilog from '@ohos.hilog'; + +function pushData1(queue: ArrayBlockingQueue, logs: Array) { + for (let i: int = 0; i < 100; i++) { + queue.push(i); + logs.push(`push: ${i}`); + } +} + +function pushData2(queue: ArrayBlockingQueue, logs: Array) { + for (let i: int = 100; i < 200; i++) { + queue.push(i); + logs.push(`push: ${i}`); + } +} + +function popData1(queue: ArrayBlockingQueue, logs: Array) { + for (let i = 0; i < 100; i++) { + queue.pop(); + logs.push(`pop: ${i}`); + } +} + +function popData2(queue: ArrayBlockingQueue, logs: Array) { + for (let i = 100; i < 200; i++) { + queue.pop(); + logs.push(`pop: ${i}`); + } +} + +function nullBlockingPop(queue: ArrayBlockingQueue, logs: Array) { + for (let i = 0; i < 3; i++) { + logs.push(`pop: ${i}`); + queue.pop(); + logs.push(`删除${i}成功 `); + } +} + +function nullBlockingPush(queue: ArrayBlockingQueue, logs: Array) { + for (let i = 0; i < 3; i++) { + logs.push(`push: ${i}`); + queue.push(i); + logs.push(`添加${i}成功 `); + } +} + +export class ArrayBlockingQueueTest { + basicScene() { + const queueCapacity: int = 10; + let queueInt: ArrayBlockingQueue = new ArrayBlockingQueue(queueCapacity); + let logs: Array = new Array(); + for (let i: int = 0; i < queueCapacity; i++) { + queueInt.push(i); + logs.push(`push: ${i}`); + } + const firstData = queueInt.getFirst(); + logs.push(`getFirst: ${firstData}`); + const endData = queueInt.getEnd(); + logs.push(`getEnd: ${endData}`); + const popData = queueInt.pop(); + logs.push(`pop: ${popData}`); + const queueSize = queueInt.size; + logs.push(`size: ${queueSize}`); + const isEmpty = queueInt.isEmpty(); + logs.push(`isEmpty: ${isEmpty}`); + hilog.info(0x0000, 'testTag', 'ArrayBlockingQueue basicScene ' + logs); + } + + concurrentInQueue() { + const queueCapacity: int = 200; + let queueInt: ArrayBlockingQueue = new ArrayBlockingQueue(queueCapacity); + let logs: Array = new Array(); + let p1 = launch + pushData1(queueInt, logs); + let p2 = launch + pushData2(queueInt, logs); + await p1; + await p2; + const queueSize = queueInt.size; + if (queueCapacity === queueSize) { + logs.push('测试成功'); + } + hilog.info(0x0000, 'testTag', 'ArrayBlockingQueue concurrentInQueue ' + logs); + } + + concurrentOutQueue() { + const queueCapacity = 200; + let queueInt: ArrayBlockingQueue = new ArrayBlockingQueue(queueCapacity); + let logs: Array = new Array(); + for (let i: int = 0; i < queueCapacity; i++) { + queueInt.push(i); + } + let p1 = launch + popData1(queueInt, logs); + let p2 = launch + popData2(queueInt, logs); + await p1; + await p2; + const isEmpty = queueInt.isEmpty(); + if (isEmpty) { + logs.push('测试成功'); + } + hilog.info(0x0000, 'testTag', 'ArrayBlockingQueue concurrentOutQueue ' + logs); + } + + nullBlocking() { + const queueCapacity = 3; + let queueInt: ArrayBlockingQueue = new ArrayBlockingQueue(queueCapacity); + let logs: Array = new Array(); + let p1 = launch + nullBlockingPop(queueInt, logs); + let p2 = launch + nullBlockingPush(queueInt, logs); + await p1; + await p2; + hilog.info(0x0000, 'testTag', 'ArrayBlockingQueue nullBlocking ' + logs); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ConcurrentHashMapTest.ets b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ConcurrentHashMapTest.ets new file mode 100644 index 0000000000000000000000000000000000000000..e0c8c69ae6109c61187b27fd15ce4e5906d42f2c --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ConcurrentHashMapTest.ets @@ -0,0 +1,196 @@ +import hilog from '@ohos.hilog'; + +const MAP_CAPACITY: number = 100; + +function setData1(map: ConcurrentHashMap, logs: Array) { + for (let i = 0; i < 50; i++) { + map.set(i, `v${i}`); + logs.push(`set key: ${i} value: v${i}`); + } +} + +function setData2(map: ConcurrentHashMap, logs: Array) { + for (let i = 50; i < 100; i++) { + map.set(i, `v${i}`); + logs.push(`set key: ${i} value: v${i}`); + } +} + +function deleteData1(map: ConcurrentHashMap, logs: Array) { + for (let i = 0; i < 50; i++) { + let isDelete = map.delete(i); + if (isDelete) { + logs.push(`delete key: ${i} 成功`); + } + } +} + +function deleteData2(map: ConcurrentHashMap, logs: Array) { + for (let i = 50; i < 100; i++) { + let isDelete = map.delete(i); + if (isDelete) { + logs.push(`delete key: ${i} 成功`); + } + } +} + +function setLargeData(map: ConcurrentHashMap, logs: ArrayBlockingQueue, quantity: number) { + for (let i = quantity; i < quantity * 2; i++) { + map.set(i, `v${i}`); + logs.push(`set key: ${i} value: v${i}`); + } +} + +function getLargeData(map: ConcurrentHashMap, logs: ArrayBlockingQueue, quantity: number) { + for (let i = quantity; i < quantity * 2; i++) { + let getData = map.get(i); + logs.push(`get key: ${i} value: ${getData}`); + } +} + +export class ConcurrentHashMapTest { + basicScene() { + let hashMapInt: ConcurrentHashMap = new ConcurrentHashMap(); + let logs: Array = new Array(); + for (let i = 0; i < 10; i++) { + hashMapInt.set(i, `v${i}`); + logs.push(`set: k${i}, v${i}`); + } + logs.push(`当前map: ${hashMapInt}`); + const getKey = 1; + const getData = hashMapInt.get(1); + logs.push(`get key=: ${getKey} value=: ${getData}`); + const hasKey = 2; + let isHas = hashMapInt.has(2); + logs.push(`key: ${hasKey} 是否存在: ${isHas}`); + const keys = hashMapInt.keys(); + let keysStr = ''; + while (true) { + const v = keys.next() + if (v.done) { + break; + } + let value = v.value; + keysStr += value + ' '; + } + ; + logs.push(`keys: ${keysStr}`); + const values = hashMapInt.values(); + let valuesStr = ''; + while (true) { + const v = values.next() + if (v.done) { + break; + } + let value = v.value; + valuesStr += value + ' '; + } + ; + logs.push(`values: ${valuesStr}`); + const entries = hashMapInt.entries(); + let entriesStr = ''; + while (true) { + const v = entries.next() + if (v.done) { + break; + } + let value = v.value; + entriesStr += value + ' '; + } + ; + logs.push(`entries: ${entriesStr}`); + const deleteKey = 3; + const isDelete = hashMapInt.delete(3); + if (isDelete) { + logs.push(`delete key= ${deleteKey},删除成功`); + } else { + logs.push(`delete key= ${deleteKey},删除失败`); + } + const removeKey = 4; + let isRemove = hashMapInt.remove(4); + if (isRemove) { + logs.push(`remove key= ${removeKey},移除成功`); + } else { + logs.push(`remove key= ${removeKey},移除失败`); + } + const replaceKey = 5; + const isReplace = hashMapInt.replace(5, 'five'); + if (isReplace) { + logs.push(`replace key= ${replaceKey},替换成功`); + } else { + logs.push(`replace key= ${replaceKey},替换失败`); + } + hashMapInt.clear(); + const isEmpty = hashMapInt.isEmpty(); + const mapSize = hashMapInt.size; + if (isEmpty) { + logs.push(`hashMapInt通过clear方法清空,hashMapInt.size = ${mapSize} `); + } + hilog.info(0x0000, 'testTag', 'ConcurrentHashMap basicScene ' + logs); + } + + concurrentInQueue() { + let hashMapInt: ConcurrentHashMap = new ConcurrentHashMap(); + let logs: Array = new Array(); + let p1 = launch + setData1(hashMapInt, logs); + let p2 = launch + setData2(hashMapInt, logs); + await p1; + await p2; + const mapSize = hashMapInt.size; + if (MAP_CAPACITY === mapSize) { + logs.push('测试成功'); + } + hilog.info(0x0000, 'testTag', 'ConcurrentHashMap concurrentInQueue ' + logs); + } + + concurrentOutQueue() { + let hashMapInt: ConcurrentHashMap = new ConcurrentHashMap(); + let logs: Array = new Array(); + for (let i = 0; i < MAP_CAPACITY; i++) { + hashMapInt.set(i, `v${i}`); + } + let p1 = launch + deleteData1(hashMapInt, logs); + let p2 = launch + deleteData2(hashMapInt, logs); + await p1; + await p2; + const isEmpty = hashMapInt.isEmpty(); + if (isEmpty) { + logs.push('测试成功'); + } + hilog.info(0x0000, 'testTag', 'ConcurrentHashMap concurrentOutQueue ' + logs); + } + + hashMapBenchmark() { + const startTime = new Date().getTime(); + let hashMapInt: ConcurrentHashMap = new ConcurrentHashMap(); + let logs: ArrayBlockingQueue = new ArrayBlockingQueue(2801); + let p1 = launch + setLargeData(hashMapInt, logs, 200); + let p2 = launch + setLargeData(hashMapInt, logs, 400); + let p3 = launch + setLargeData(hashMapInt, logs, 800); + let p4 = launch + getLargeData(hashMapInt, logs, 200); + let p5 = launch + getLargeData(hashMapInt, logs, 400); + let p6 = launch + getLargeData(hashMapInt, logs, 800); + await p1; + await p2; + await p3; + await p4; + await p5; + await p6; + + const duration = new Date().getTime() - startTime; + if (hashMapInt.size === 1400) { + logs.push(`测试成功 吞吐量: 6 tasks in ${duration}ms`); + } + hilog.info(0x0000, 'testTag', 'ConcurrentHashMap hashMapBenchmark ' + logs.getEnd()); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ConcurrentSetTest.ets b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ConcurrentSetTest.ets new file mode 100644 index 0000000000000000000000000000000000000000..4f067084d2ef3191fafa8ac691423bf84189a488 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/ConcurrentSetTest.ets @@ -0,0 +1,126 @@ +import hilog from '@ohos.hilog'; + +function addData1(setInt: ConcurrentSet, logs: Array) { + for (let i = 0; i < 100; i++) { + setInt.add(i); + logs.push(`add: ${i}`); + } +} + +function addData2(setInt: ConcurrentSet, logs: Array) { + for (let i = 100; i < 200; i++) { + setInt.add(i); + logs.push(`add: ${i}`); + } +} + +function deleteData1(setInt: ConcurrentSet, logs: Array) { + for (let i = 0; i < 100; i++) { + let isDelete = setInt.delete(i); + if (isDelete) { + logs.push(`delete: ${i}`); + } else { + logs.push(`删除失败`); + } + } +} + +function deleteData2(setInt: ConcurrentSet, logs: Array) { + for (let i = 100; i < 200; i++) { + let isDelete = setInt.delete(i); + if (isDelete) { + logs.push(`delete: ${i}`); + } else { + logs.push(`删除失败`); + } + } +} + +export class ConcurrentSetTest { + basicScene() { + let setInt: ConcurrentSet = new ConcurrentSet(); + let logs: Array = new Array(); + for (let i = 0; i < 10; i++) { + setInt.add(i); + logs.push(`add: ${i}`); + } + logs.push(`当前集合: ${setInt}`); + let zero = 1; + let isHas = setInt.has(zero); + if (isHas) { + logs.push(`集合存在数据${zero}`); + } + const size = setInt.size; + logs.push(`size: ${size}`); + let isDelete = setInt.delete(2); + logs.push(`delete: 2 删除是否成功: ${isDelete}`); + logs.push(`当前集合: ${setInt}`); + let keys = setInt.keys(); + let keyStr = ''; + while (true) { + const v = keys.next() + if (v.done) { + break; + } + let value = v.value; + keyStr += value + ' '; + } + ; + logs.push(`keys: ${keyStr}`); + let values = setInt.values(); + let valuesStr = ''; + while (true) { + const v = values.next() + if (v.done) { + break; + } + let value = v.value; + valuesStr += value + ' '; + } + ; + logs.push(`values: ${valuesStr}`); + logs.push(`当前集合: ${setInt}`); + setInt.clear(); + const setSize = setInt.size; + logs.push(`清空集合后size: ${setSize}`); + hilog.info(0x0000, 'testTag', 'ConcurrentSet basicScene ' + logs); + } + + concurrentInSet() { + const setCapacity = 200; + let set: Set = new Set(); + let setInt: ConcurrentSet = new ConcurrentSet(set); + let logs: Array = new Array(); + let p1 = launch + addData1(setInt, logs); + let p2 = launch + addData2(setInt, logs); + await p1; + await p2; + const setSize = setInt.size; + if (setCapacity === setSize) { + logs.push('测试成功'); + } + hilog.info(0x0000, 'testTag', 'ConcurrentSet concurrentInSet ' + logs); + } + + concurrentOutSet() { + const setCapacity = 200; + let set: Set = new Set(); + for (let i: number = 0; i < setCapacity; i++) { + set.add(i); + } + let setInt: ConcurrentSet = new ConcurrentSet(set); + let logs: Array = new Array(); + let p1 = launch + deleteData1(setInt, logs); + let p2 = launch + deleteData2(setInt, logs); + await p1; + await p2; + if (setInt.size === 0) { + logs.push('测试成功'); + } + hilog.info(0x0000, 'testTag', 'ConcurrentSet concurrentOutSet ' + logs); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/LinkedBlockingQueueTest.ets b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/LinkedBlockingQueueTest.ets new file mode 100644 index 0000000000000000000000000000000000000000..67588c246b3dd6d4afd598bd68dc8ec08891c17a --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/ets/pages/containers/LinkedBlockingQueueTest.ets @@ -0,0 +1,154 @@ +import hilog from '@ohos.hilog'; + +function pushData1(queue: LinkedBlockingQueue, logs: Array) { + for (let i = 0; i < 100; i++) { + queue.push(i); + logs.push(`push: ${i}`); + } +} + +function pushData2(queue: LinkedBlockingQueue, logs: Array) { + for (let i = 100; i < 200; i++) { + queue.push(i); + logs.push(`push: ${i}`); + } +} + +function popData1(queue: LinkedBlockingQueue, logs: Array) { + for (let i = 0; i < 100; i++) { + queue.pop(); + logs.push(`pop: ${i}`); + } +} + +function popData2(queue: LinkedBlockingQueue, logs: Array) { + for (let i = 100; i < 200; i++) { + queue.pop(); + logs.push(`pop: ${i}`); + } +} + +function fullBlockingPush(queue: LinkedBlockingQueue, logs: Array) { + for (let i = 0; i < 3; i++) { + logs.push(`push: ${i}`); + queue.push(i); + logs.push(`添加${i}成功 `); + } +} + +function fullBlockingPop(queue: LinkedBlockingQueue, logs: Array) { + for (let i = 0; i < 6; i++) { + logs.push(`pop: ${i}`); + queue.pop(); + logs.push(`删除${i}成功 `); + } +} + +function nullBlockingPop(queue: LinkedBlockingQueue, logs: Array) { + for (let i = 0; i < 3; i++) { + logs.push(`pop: ${i}`); + queue.pop(); + logs.push(`删除${i}成功 `); + } +} + +function nullBlockingPush(queue: LinkedBlockingQueue, logs: Array) { + for (let i = 0; i < 3; i++) { + logs.push(`push: ${i}`); + queue.push(i); + logs.push(`添加${i}成功 `); + } +} + +export class LinkedBlockingQueueTest { + basicScene() { + const queue = 10; + let queueInt: LinkedBlockingQueue = new LinkedBlockingQueue(queue); + let logs: Array = new Array(); + const capacity = queueInt.capacity; + logs.push(`队列capacity: ${capacity}`); + for (let i = 0; i < queue; i++) { + queueInt.push(i); + logs.push(`push: ${i}`); + } + const popData = queueInt.pop(); + logs.push(`pop: ${popData}`); + const addData = 10; + queueInt.add(addData); + logs.push(`add: ${addData}`); + const pollData = queueInt.poll(); + logs.push(`poll: ${pollData}`); + const size = queueInt.size; + logs.push(`size: ${size}`); + const remainingCapacity = queueInt.remainingCapacity(); + logs.push(`remainingCapacity: ${remainingCapacity}`); + + hilog.info(0x0000, 'testTag', 'LinkedBlockingQueueTest basicScene ' + logs); + } + + concurrentInQueue() { + const queueCapacity = 200; + let queueInt: LinkedBlockingQueue = new LinkedBlockingQueue(queueCapacity); + let logs: Array = new Array(); + let p1 = launch + pushData1(queueInt, logs); + let p2 = launch + pushData2(queueInt, logs); + await p1; + await p2; + const queueSize = queueInt.size; + if (queueCapacity === queueSize) { + logs.push('测试成功'); + } + hilog.info(0x0000, 'testTag', 'LinkedBlockingQueueTest concurrentInQueue ' + logs); + } + + concurrentOutQueue() { + const queueCapacity = 200; + let queueInt: LinkedBlockingQueue = new LinkedBlockingQueue(queueCapacity); + let logs: Array = new Array(); + for (let i = 0; i < queueCapacity; i++) { + queueInt.push(i); + } + let p1 = launch + popData1(queueInt, logs); + let p2 = launch + popData2(queueInt, logs); + await p1; + await p2; + const isEmpty = queueInt.isEmpty(); + if (isEmpty) { + logs.push('测试成功'); + } + hilog.info(0x0000, 'testTag', 'LinkedBlockingQueueTest concurrentOutQueue ' + logs); + } + + fullBlocking() { + const queueCapacity = 3; + let queueInt: LinkedBlockingQueue = new LinkedBlockingQueue(queueCapacity); + let logs: Array = new Array(); + for (let i = 0; i < queueCapacity; i++) { + queueInt.push(i); + } + let p1 = launch + fullBlockingPush(queueInt, logs); + let p2 = launch + fullBlockingPop(queueInt, logs); + await p1; + await p2; + hilog.info(0x0000, 'testTag', 'LinkedBlockingQueueTest fullBlocking ' + logs); + } + + nullBlocking() { + const queueCapacity = 3; + let queueInt: LinkedBlockingQueue = new LinkedBlockingQueue(queueCapacity); + let logs: Array = new Array(); + let p1 = launch + nullBlockingPop(queueInt, logs); + let p2 = launch + nullBlockingPush(queueInt, logs); + await p1; + await p2; + hilog.info(0x0000, 'testTag', 'LinkedBlockingQueueTest nullBlocking ' + logs); + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/module.json5 b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..de78b5cae3b2ba99788048311e5d0cd34d075039 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/module.json5 @@ -0,0 +1,38 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/color.json b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..3c712962da3c2751c2b9ddb53559afcbd2b54a02 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/float.json b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/string.json b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..7f6fcd10cfc441a3a6922a518a957647fd6c89dd --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "线程安全容器" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/background.png b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f Binary files /dev/null and b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/background.png differ diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/foreground.png b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..97014d3e10e5ff511409c378cd4255713aecd85f Binary files /dev/null and b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/foreground.png differ diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/layered_image.json b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000000000000000000000000000000000000..fb49920440fb4d246c82f9ada275e26123a2136a --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:background", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/startIcon.png b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/media/startIcon.png differ diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/profile/backup_config.json b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000000000000000000000000000000000..78f40ae7c494d71e2482278f359ec790ca73471a --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/profile/main_pages.json b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..1898d94f58d6128ab712be2c68acc7c98e9ab9ce --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/dark/element/color.json b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..79b11c2747aec33e710fd3a7b2b3c94dd9965499 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/hvigor/hvigor-config.json5 b/code/ArkTS1.2/ThreadSafeContainersSample/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..85e8d4b2175fc4747650344f025e7d145bc3d361 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.1.0", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/hvigorfile.ts b/code/ArkTS1.2/ThreadSafeContainersSample/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3cb9f1a87a81687554a76283af8df27d8bda775 --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/ThreadSafeContainersSample/oh-package.json5 b/code/ArkTS1.2/ThreadSafeContainersSample/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..7f512c9632708e85a7ea34e739c01b0b8f1ad92e --- /dev/null +++ b/code/ArkTS1.2/ThreadSafeContainersSample/oh-package.json5 @@ -0,0 +1,8 @@ +{ + "modelVersion": "5.1.0", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + } +} diff --git a/code/ArkTS1.2/interopSample/.gitignore b/code/ArkTS1.2/interopSample/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d2ff20141ceed86d87c0ea5d99481973005bab2b --- /dev/null +++ b/code/ArkTS1.2/interopSample/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/AppScope/app.json5 b/code/ArkTS1.2/interopSample/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..7c0288ca654fc4a2856eb7fd35ee76c7ea7f10a5 --- /dev/null +++ b/code/ArkTS1.2/interopSample/AppScope/app.json5 @@ -0,0 +1,36 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "app": { + "bundleName": "com.samples.interopsample", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/ArkTS1.2/interopSample/AppScope/resources/base/element/string.json b/code/ArkTS1.2/interopSample/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..6706d4a1db2e03281ad12dd1255b64584610307d --- /dev/null +++ b/code/ArkTS1.2/interopSample/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "InteropSample" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/AppScope/resources/base/media/app_icon.png b/code/ArkTS1.2/interopSample/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 Binary files /dev/null and b/code/ArkTS1.2/interopSample/AppScope/resources/base/media/app_icon.png differ diff --git a/code/ArkTS1.2/interopSample/README.md b/code/ArkTS1.2/interopSample/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1f50771f36bcfb54b3bb133828d748ad5f63fcc9 --- /dev/null +++ b/code/ArkTS1.2/interopSample/README.md @@ -0,0 +1,88 @@ +# interop配套示例 + +### Interop介绍 +Interop可以实现混合开发场景的模块相互通信场景,具体场景有ArkTS1.2中使用ArkTS1.0;ArkTS1.0中使用ArkTS1.2;ArkTS1.2中使用TS;ArkTS1.2中使用JS四种 + +### 实现思路 +以场景一:ArkTS1.2中使用ArkTS1.0为例 + +新建Har包arkts1_0har用arkTs1.0语法编写代码 +在arkts1_0har定义常量SUBJECT、类Student,类成员变量name、sex、studentID、age、height、phone、averageGrade、gradePoint、isBoarder和transcript等,定义错误类ReferenceError,类成员函数introduce和setSubjectScore,函数calTotalScore和calAverageScore + +在entry目录下新建1.2.ets文件导入常量SUBJECT、类Student,定义函数test和errorHandle调用har包中方法,点击按钮可调用test和errorHandle函数,将这两个函数的返回值显示在页面上 + +①文件导入 + +在1.2.ets文件中导入常量SUBJECT、类Student + +②类实例化 + +在test函数内,实例化类Student,新增一个学生student1为A + +③属性读写 + +读:访问A的年龄为20岁,写:更新A的年龄为20岁 + +④函数调用 + +调用calTotalScore计算总成绩 + +⑤对象方法调用 + +调用student1.introduce获取学生信息,比如姓名、学号、年龄、身高、电话、上次平均成绩、gradePoint和是否住校;调用student1.setSubjectScore,将A的成绩set到成绩表transcript中 + +⑥参数传递 + +调用calAverageScore计算平均成绩 + +⑦异常处理 + +在arkts1_0har中定义错误类ReferenceError,在1.2.ets中导入被捕获处理,正确返回错误信息reference error + +ArkTS1.0中使用ArkTS1.2;ArkTS1.2中使用TS;ArkTS1.2中使用JS等三个场景可以参考ArkTS1.2中使用ArkTS1.0 + +### 效果预览 + +使用说明 + +在首页,依次点击蓝色按钮会在按钮下方空白位置打印出对应日志 + +效果如下所示: + +![Alt text](entry/src/main/resources/base/media/RM002_preview.png)) +### 工程目录 + +``` +entry/src/main/ets/ +|---pages + |---Use1From2 + |---1.2.ets // 1.2代码 + |---Use2From1 + |---1.0.ets // 1.0代码 + |---UseJSFrom2 + |---1.2.ets // 1.2代码 + |---UseTSFrom2 + |---1.2.ets // 1.2代码 + |---index.ets // interop首页 +arkts1_0har/src/main/ets/ +|---components + |---ArkTSVersion_1.ets // 1.0代码 +arkts1_2har/src/main/ets/ +|---components + |---ArkTSVersion_2.ets // 1.2代码 +jshar/src/main/ets/ +|---components + |---JSTest.js // JS代码 +tshar/src/main/ets/ +|---components + |---TSTest.ts // TS代码 +``` + +### 相关权限 +无 +### 依赖 +无 +### 约束与限制 +1. 本示例仅支持标准系统上运行,支持设备:Phone; +2. 本示例支持API17版本SDK,SDK版本号(API Version 5.0.2(14)),镜像版本号(5.0.1); +3. 本示例需要使用DevEco Studio 版本号(6.0.0.4)版本才可编译运行。 \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/.gitignore b/code/ArkTS1.2/interopSample/arkts1_0har/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/Index.ets b/code/ArkTS1.2/interopSample/arkts1_0har/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..0893dda4f66a8b14eb48c9619c6480212474ef62 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/Index.ets @@ -0,0 +1,27 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export { MainPage } from './src/main/ets/components/MainPage'; diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/build-profile.json5 b/code/ArkTS1.2/interopSample/arkts1_0har/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..06b088fdc1b46c4e7622e411cbfd562831d79e83 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/build-profile.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "apiType": "stageMode", + "arkTSVersion": "1.0", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/hvigorfile.ts b/code/ArkTS1.2/interopSample/arkts1_0har/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7eae0674c85d936a85285ed5a7ad6d62e19340a --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/obfuscation-rules.txt b/code/ArkTS1.2/interopSample/arkts1_0har/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/oh-package.json5 b/code/ArkTS1.2/interopSample/arkts1_0har/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..722b1f7b074dde5f4257a35d08f9903b4887a247 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/oh-package.json5 @@ -0,0 +1,35 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "name": "arkts1_0har", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "Index.ets", + "author": "", + "license": "Apache-2.0", + "dependencies": {} +} diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/main/ets/components/ArkTSVersion_1.ets b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/ets/components/ArkTSVersion_1.ets new file mode 100644 index 0000000000000000000000000000000000000000..9d5666c5fc09e6da3dd978da926935b5ec55004a --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/ets/components/ArkTSVersion_1.ets @@ -0,0 +1,85 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export const SUBJECT: Set = new Set(['语文', '数学', '英语', '物理', '化学', '生物']); + +export class Student { + public name: string = ''; + public sex: string = ''; + public studentID: number = 1001; + public age: number = 18; + public height: number = 175; + public phone: number = 13820002025; + public averageGrade: number = 81.75; + public gradePoint: number = 3.85; + public isBoarder: boolean = true; + public transcript: Map = new Map(); + + constructor(name: string, sex: string, studentID: number, age: number, height: number, phone: number, + averageGrade: number, + gradePoint: number, isBoarder: boolean) { + this.name = name; + this.sex = sex; + this.studentID = studentID; + this.age = age; + this.height = height; + this.phone = phone; + this.averageGrade = averageGrade; + this.gradePoint = gradePoint; + this.isBoarder = isBoarder; + } + + introduce(): string { + let boarderStatus = this.isBoarder ? 'boarding student' : 'day student'; + return `姓名${this.name},学号${this.studentID},今年${this.age}岁,身高${this.height},电话${this.phone}, 上次平均成绩是${this.averageGrade},gradePoint: ${this.gradePoint}, 是一名${boarderStatus}`; + } + + setSubjectScore(subject: string, score: number): void { + if (score < 0 && score > 100) { + throw new Error(); + } + this.transcript.set(subject, score); + } +} + +export function calTotalScore(student: Student): number { + let total = 0; + for (let score of student.transcript.values()) { + total += score; + } + return total; +} + +export function calAverageScore(totalScore: number, subjectCount: number): string { + if (subjectCount === 0) { + throw new Error(); + } + let averageScore = totalScore / subjectCount; + let averageScoreStr = String(Math.round(averageScore * 100) / 100); + return averageScoreStr; +} + +export let referenceErr: ReferenceError = new ReferenceError('reference error'); \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/main/ets/components/MainPage.ets b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/ets/components/MainPage.ets new file mode 100644 index 0000000000000000000000000000000000000000..d82ad1e86cd116d4dd303a9077864b6f112d2b93 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/ets/components/MainPage.ets @@ -0,0 +1,43 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +@Component +export struct MainPage { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .onClick(() => { + this.message = 'Welcome'; + }) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/main/module.json5 b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..dfbb29d816ebff7ff48720f3180251d818ae2902 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/module.json5 @@ -0,0 +1,37 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "arkts1_0har", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ] + } +} diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/main/resources/base/element/float.json b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/main/resources/base/element/string.json b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..f51a9c8461a55f6312ef950344e3145b7f82d607 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/main/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/ets/test/Ability.test.ets b/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..211bee7e6b275f09ce219dce3efe678122150a51 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,61 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/ets/test/List.test.ets b/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..28a8c71666bc1e0c408f794ad64347f6684b9551 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/module.json5 b/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..61b82b5b3547ffb52157472a08fc85e47a4b525e --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/ohosTest/module.json5 @@ -0,0 +1,39 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "arkts1_0har_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/test/List.test.ets b/code/ArkTS1.2/interopSample/arkts1_0har/src/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..7fdc3847aa14a6bcd920343f38945f0fc9905d64 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_0har/src/test/LocalUnit.test.ets b/code/ArkTS1.2/interopSample/arkts1_0har/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..08ae899f9b1b32e7a34da4dd4150316b133de8bc --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_0har/src/test/LocalUnit.test.ets @@ -0,0 +1,59 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/.gitignore b/code/ArkTS1.2/interopSample/arkts1_2har/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/Index.ets b/code/ArkTS1.2/interopSample/arkts1_2har/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..942e14d9ba02af16e005d19ca01b6aed5fcd5256 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/Index.ets @@ -0,0 +1,29 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export { MainPage } from './src/main/ets/components/MainPage'; + +export { referenceErr, Student, SUBJECT, calTotalScore, calAverageScore } from './src/main/ets/components/ArkTSVersion_2'; \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/build-profile.json5 b/code/ArkTS1.2/interopSample/arkts1_2har/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..284c0311cdd170838d471b994cfeeb02a7f40ab3 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/build-profile.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "apiType": "stageMode", + "arkTSVersion": "1.2", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/hvigorfile.ts b/code/ArkTS1.2/interopSample/arkts1_2har/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..860122cb9535a5ff21a85e8f6b29312e7efa3ece --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/obfuscation-rules.txt b/code/ArkTS1.2/interopSample/arkts1_2har/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/oh-package.json5 b/code/ArkTS1.2/interopSample/arkts1_2har/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..f35fd582b294ff5d21951a10f6e3e2fa9a4a2a09 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/oh-package.json5 @@ -0,0 +1,35 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "name": "arkts1_2har", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "Index.ets", + "author": "", + "license": "Apache-2.0", + "dependencies": {} +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/main/ets/components/ArkTSVersion_2.ets b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/ets/components/ArkTSVersion_2.ets new file mode 100644 index 0000000000000000000000000000000000000000..03372dfb679741d3c615f6b653f2cf973def3a25 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/ets/components/ArkTSVersion_2.ets @@ -0,0 +1,84 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export const SUBJECT: Set = new Set(['语文', '数学', '英语', '物理', '化学', '生物']); + +export class Student { + public name: string = ''; + public sex: char = 'M'; + public studentID: number = 1001; + public age: number = 18; + public height: int = 175; + public phone: long = 13820002025; + public averageGrade: float = 81.75; + public gradePoint: double = 3.85; + public isBoarder: boolean = true; + public transcript: Map = new Map(); + + constructor(name: string, sex: char, studentID: number, age: number, height: int, phone: long, averageGrade: float, + gradePoint: double, isBoarder: boolean) { + this.name = name; + this.sex = sex; + this.studentID = studentID; + this.age = age; + this.height = height; + this.phone = phone; + this.averageGrade = averageGrade; + this.gradePoint = gradePoint; + this.isBoarder = isBoarder; + } + + introduce(): string { + let boarderStatus = this.isBoarder ? 'boarding student' : 'day student'; + return `姓名${this.name},学号${this.studentID},今年${this.age}岁,身高${this.height},电话${this.phone}, 上次平均成绩是${this.averageGrade},gradePoint: ${this.gradePoint}, 是一名${boarderStatus}`; + } + + setSubjectScore(subject: string, score: number): void { + if (score < 0 && score > 100) { + throw new Error(); + } + this.transcript.set(subject, score); + } +} + +export function calTotalScore(student: Student): number { + let total = 0; + for (let score of student.transcript.values()) { + total += score; + } + return total; +} + +export function calAverageScore(totalScore: number, subjectCount: number): string { + if (subjectCount === 0) { + throw new Error(); + } + let averageScore = totalScore / subjectCount; + let averageScoreStr = String(Math.round(averageScore * 100) / 100); + return averageScoreStr; +} + +export let referenceErr: ReferenceError = new ReferenceError('reference error'); diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/main/ets/components/MainPage.ets b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/ets/components/MainPage.ets new file mode 100644 index 0000000000000000000000000000000000000000..640e95221a213707b52d324d4ae4962aa038df96 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/ets/components/MainPage.ets @@ -0,0 +1,46 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { Row, Column, Text, TextAttribute, Component } from '@ohos.arkui.component'; +import { State, StateDecoratedVariable, } from '@ohos.arkui.stateManagement'; + +@Component +export struct MainPage { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .onClick(() => { + this.message = 'Welcome'; + }) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/main/module.json5 b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..4108e786930d5e51294e0bde944eba8de7974425 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/module.json5 @@ -0,0 +1,37 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "arkts1_2har", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ] + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/main/resources/base/element/float.json b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/main/resources/base/element/string.json b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..f51a9c8461a55f6312ef950344e3145b7f82d607 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/main/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/ets/test/Ability.test.ets b/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..211bee7e6b275f09ce219dce3efe678122150a51 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,61 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/ets/test/List.test.ets b/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..28a8c71666bc1e0c408f794ad64347f6684b9551 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/module.json5 b/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..8a4fabf3928e332c57b573758ef52a4b771ced7e --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/ohosTest/module.json5 @@ -0,0 +1,39 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "arkts1_2har_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/test/List.test.ets b/code/ArkTS1.2/interopSample/arkts1_2har/src/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..7fdc3847aa14a6bcd920343f38945f0fc9905d64 --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/arkts1_2har/src/test/LocalUnit.test.ets b/code/ArkTS1.2/interopSample/arkts1_2har/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..08ae899f9b1b32e7a34da4dd4150316b133de8bc --- /dev/null +++ b/code/ArkTS1.2/interopSample/arkts1_2har/src/test/LocalUnit.test.ets @@ -0,0 +1,59 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/build-profile.json5 b/code/ArkTS1.2/interopSample/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..cca8f87ad0d4849f636a5423253638106e85ce4b --- /dev/null +++ b/code/ArkTS1.2/interopSample/build-profile.json5 @@ -0,0 +1,84 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": "5.0.2(14)", + "runtimeOS": "HarmonyOS", + "arkTSVersion": "1.2", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + }, + { + "name": "jshar", + "srcPath": "./jshar" + }, + { + "name": "tshar", + "srcPath": "./tshar", + }, + { + "name": "arkts1_0har", + "srcPath": "./arkts1_0har", + }, + { + "name": "arkts1_2har", + "srcPath": "./arkts1_2har", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/code-linter.json5 b/code/ArkTS1.2/interopSample/code-linter.json5 new file mode 100644 index 0000000000000000000000000000000000000000..87b3919d419c09728067f1b545b7e2d5116adc07 --- /dev/null +++ b/code/ArkTS1.2/interopSample/code-linter.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@security/no-unsafe-aes": "error", + "@security/no-unsafe-hash": "error", + "@security/no-unsafe-mac": "warn", + "@security/no-unsafe-dh": "error", + "@security/no-unsafe-dsa": "error", + "@security/no-unsafe-ecdsa": "error", + "@security/no-unsafe-rsa-encrypt": "error", + "@security/no-unsafe-rsa-sign": "error", + "@security/no-unsafe-rsa-key": "error", + "@security/no-unsafe-dsa-key": "error", + "@security/no-unsafe-dh-key": "error", + "@security/no-unsafe-3des": "error" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/.gitignore b/code/ArkTS1.2/interopSample/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/build-profile.json5 b/code/ArkTS1.2/interopSample/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..c85d9db946f1f8a99e6833ea230546248cafcb69 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/build-profile.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "apiType": "stageMode", + "arkTSVersion": "1.2", + "buildOption": { + "sourceOption": { + "workers": [] + } + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/hvigorfile.ts b/code/ArkTS1.2/interopSample/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..76f0a1e1dc5d44f5397aa908a077812a4cdf167c --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/obfuscation-rules.txt b/code/ArkTS1.2/interopSample/entry/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/oh-package.json5 b/code/ArkTS1.2/interopSample/entry/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..42d66fea98ae52316540f943ee8a05ecf08fbab6 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/oh-package.json5 @@ -0,0 +1,40 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + "jshar": "file:../jshar", + "tshar": "file:../tshar", + "arkts1_0har": "file:../arkts1_0har", + "arkts1_2har": "file:../arkts1_2har" + } +} diff --git a/code/ArkTS1.2/interopSample/entry/src/main/ets/entryability/EntryAbility.ets b/code/ArkTS1.2/interopSample/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..943de5a185e8d422b1831b3130b185e212823bcd --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,54 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import { BusinessError } from '@ohos.base'; +import hilog from '@ohos.hilog'; + +class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onCreate'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onWindowStageCreate'); + try { + windowStage.loadContent('pages/Index', (err: BusinessError): void => { + hilog.info(0x0000, 'testTag', 'loadContent entering'); + if (err.code) { + hilog.error(0x0000, 'testTag', 'loadContent error'); + return; + } + hilog.info(0x0000, 'testTag', 'loadContent ok'); + }); + } catch (e: Error) { + hilog.error(0x0000, 'testTag', 'loadContent catch error:-----------' + e.message); + } + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/ets/models/MyCallback.ets b/code/ArkTS1.2/interopSample/entry/src/main/ets/models/MyCallback.ets new file mode 100644 index 0000000000000000000000000000000000000000..430e22de4fa5bfa011d66e22f32031967ca99119 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/ets/models/MyCallback.ets @@ -0,0 +1,64 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { AsyncCallback, BusinessError, Callback, ErrorCallback } from '@ohos.base'; +import hilog from '@ohos.hilog'; + +const SYNTAX_ERROR_CODE: double = 1002; + +export class MyCallback { + static myCallback(callback: Callback): void { + hilog.info(0x0000, 'testTag', 'myCallback'); + callback('myCallback'); + } + + static myAsyncCallback(callback: AsyncCallback): void { + hilog.info(0x0000, 'testTag', 'myAsyncCallback'); + let error = new Error('Business Error', 'basicError2 message', undefined); + let be2: BusinessError = new BusinessError(SYNTAX_ERROR_CODE, error); + callback(be2, 'yAsyncCallback'); + } + + static myErrorCallback(callback: ErrorCallback>): void { + hilog.info(0x0000, 'testTag', 'myErrorCallback'); + let error = new Error('Business Error', 'myErrorCallback message', undefined); + let result: string = 'test'; + let be: BusinessError = new BusinessError(SYNTAX_ERROR_CODE, result, error); + callback(be); + } + + static runCasesOfCallback() { + MyCallback.myCallback((data: string) => { + hilog.info(0x0000, 'testTag', 'MyCallback' + data); + }) + MyCallback.myAsyncCallback((error: BusinessError, result: string) => { + hilog.info(0x0000, 'testTag', `myAsyncCallback, error: ${error.message}, result:${result}`); + }) + MyCallback.myErrorCallback((error: BusinessError) => { + hilog.info(0x0000, 'testTag', `myAsyncCallback, error: ${error.message}`); + }) + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Index.ets b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..3251eb700dfe3c9e8323e104f7a6c61d56539ed1 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,143 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { + memo, + __memo_context_type, + __memo_id_type +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import { + Text, + TextAttribute, + Column, + Component, + Button, + ButtonAttribute, + ClickEvent, + UserView, + Row, + Scroll +} from '@ohos.arkui.component'; // TextAttribute should be insert by ui-plugins +import { + State, + StateDecoratedVariable, + MutableState, + stateOf, + observableProxy +} from '@ohos.arkui.stateManagement'; // should be insert by ui-plugins +import hilog from '@ohos.hilog'; +import { test, ErrorHandle } from './Use1From2/1.2.ets'; +import { test2, ErrorHandle2 } from './Use2From1/1.0.ets'; +import { test3, ErrorHandle3 } from './UseJSFrom2/1.2.ets'; +import { test4, ErrorHandle4 } from './UseTSFrom2/1.2.ets'; + +@Component +struct MyStateSample { + @State logs: Array = new Array(); + @State logs2: Array = new Array(); + @State logs3: Array = new Array(); + @State logs4: Array = new Array(); + @State message: string = '场景一:use 1.0 from 1.2'; + @State message2: string = '场景二:use 1.2 from 1.0'; + @State message3: string = '场景三:use JS from 1.2'; + @State message4: string = '场景四:use TS from 1.2'; + @State logsString: string = ''; + @State logsString2: string = ''; + @State logsString3: string = ''; + @State logsString4: string = ''; + + build() { + Scroll() { + Column() { + Button(this.message) + .width(`80%`) + .height(40) + .onClick((e: ClickEvent) => { + this.logs = test(); + let errorHandleLog = ErrorHandle(); + this.logs.push(errorHandleLog); + this.logsString = this.logs.join(`\n`); + }) + Text(this.logsString) + .width('80%') + .height(160) + .fontSize(16) + Button(this.message2) + .width(`80%`) + .height(40) + .onClick((e: ClickEvent) => { + this.logs2 = test2(); + let errorHandleLog = ErrorHandle2(); + this.logs2.push(errorHandleLog); + this.logsString2 = this.logs2.join(`\n`); + }) + Text(this.logsString2) + .width('80%') + .height(150) + .fontSize(16) + Button(this.message3) + .width(`80%`) + .height(40) + .onClick((e: ClickEvent) => { + this.logs3 = test3(); + let errorHandleLog = ErrorHandle3(); + this.logs3.push(errorHandleLog); + this.logsString3 = this.logs3.join(`\n`); + }) + Text(this.logsString3) + .width('80%') + .height(140) + .fontSize(16) + Button(this.message4) + .width(`80%`) + .height(40) + .onClick((e: ClickEvent) => { + this.logs4 = test4(); + let errorHandleLog = ErrorHandle4(); + this.logs4.push(errorHandleLog); + this.logsString4 = this.logs4.join(`\n`); + }) + Text(this.logsString4) + .width('80%') + .height(140) + .fontSize(16) + } + }.width('100%') + .height('100%') + } +} + +export class ComExampleTrivialApplication extends UserView { + getBuilder() { + hilog.info(0x0000, 'testTag', 'getBuilder'); + let wrapper = @memo() => + { + hilog.info(0x0000, 'testTag', 'MyStateSample'); + MyStateSample() + } + return wrapper + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Use1from2/1.2.ets b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Use1from2/1.2.ets new file mode 100644 index 0000000000000000000000000000000000000000..91f3c6325ae1953927e93e82778bab0157a4559e --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Use1from2/1.2.ets @@ -0,0 +1,84 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export function test(): Array { + let logs: Array = new Array(); + // 1.文件导入 + const module = + ESObject.load('@normalized:N&entry&com.samples.interopsample&arkts1_0har/src/main/ets/components/ArkTSVersion_1&1.0.0'); + let student = module.getProperty('Student'); + const SUBJECT = module.getProperty('SUBJECT'); + // 2.类实例化 + let argName: string = 'A'; + let argSex: char = 'M'; + let argstudentID: short = 1001; + let argAge: byte = 18; + let argHeight: int = 175; + let argPhone: long = 13820002025; + let argAverageGrade: float = 81.75; + let arggradePoint: double = 3.85; + let argIsBoarder: boolean = false; + let student1 = + student.instantiate(ESObject.wrapString(argName), argSex, ESObject.wrapShort(argstudentID), + ESObject.wrapByte(argAge), + ESObject.wrapInt(argHeight), + ESObject.wrapLong(argPhone), ESObject.wrapFloat(argAverageGrade), ESObject.wrapDouble(arggradePoint), + ESObject.wrapBoolean(argIsBoarder)); + let score = [75, 68, 80, 90, 92, 78]; + let index = 0; + for (let item of SUBJECT) { + student1.invokeMethod('setSubjectScore', item, score[index]); + index++; + } + // 3.属性读写 + let name = student1.getProperty('name').toString(); + let age = student1.getProperty('age').toNumber(); + let sex = student1.getProperty('sex').toString(); + let isBoarder = student1.getProperty('isBoarder').toBoolean(); + logs.push(`${name}的年龄为${age}岁。`); + student1.setProperty('age', 20); + let newAge = student1.getProperty('age').toNumber(); + logs.push(`更新${name}的年龄为${newAge}岁。`); + // 5.对象方法调用 + logs.push(`${name}的个人信息: ${student1.invokeMethod('introduce')}`); + // 4.函数调用 + let calTotalScore = module.getProperty('calTotalScore'); + let calAverageScore = module.getProperty('calAverageScore'); + let totalScore = calTotalScore.invoke(student1).toNumber(); + // 6.参数传递 + let averageScore = calAverageScore.invoke(ESObject.wrapNumber(totalScore), ESObject.wrapNumber(6)); + logs.push(`总成绩:${totalScore},平均分:${averageScore}`); + return logs; +} + +// 7.异常 +export function ErrorHandle(): string { + const module = + ESObject.load('@normalized:N&entry&com.samples.interopsample&arkts1_0har/src/main/ets/components/ArkTSVersion_1&1.0.0'); + let referenceErr = module.getProperty('referenceErr'); + let errorInfo = referenceErr.getProperty('message').toString(); + return errorInfo; +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Use2from1/1.0.ets b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Use2from1/1.0.ets new file mode 100644 index 0000000000000000000000000000000000000000..ca41237aa53577eed81ae59db035b907b582ae86 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/Use2from1/1.0.ets @@ -0,0 +1,67 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// 1.文件导入 +import { referenceErr, Student, SUBJECT, calTotalScore, calAverageScore } from 'arkts1_2har'; + +export function test2(): Array { + let logs: Array = new Array(); + let argName = 'B'; + let argSex = 'M'; + let argstudentID = 1002; + let argAge = 18; + let argHeight = 175; + let argPhone = 13820002025; + let argAverageGrade = 81; + let arggradePoint = 3.85; + let argIsBoarder = false; + // 2.类实例化 + let student1 = new Student('B', 'M', 1002, 18, 175, 13820002025, 81, 3.85, true); + let score = [70, 68, 80, 90, 92, 78]; + let index = 0; + for (let item of SUBJECT) { + student1.setSubjectScore(item, score[index]); + index++; + } + // 3.属性读写 + logs.push(`${student1.name}的年龄为${student1.age}岁。`); + let newAge = student1.age = 19; + logs.push(`更新${student1.name}的年龄为${newAge}岁。`); + // 5.属性方法调用 + logs.push(`${student1.name}的个人信息: ${student1.introduce()}`); + // 4.函数调用 + let totalScore = calTotalScore(student1); + // 6.参数传递 + let averageScore = calAverageScore(totalScore, SUBJECT.size); + logs.push(`总成绩:${totalScore},平均分:${averageScore}`); + return logs; +} + +// 7.异常处理 +export function ErrorHandle2(): string { + let errorInfo = referenceErr.message; + return errorInfo; +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/UseJSFrom2/1.2.ets b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/UseJSFrom2/1.2.ets new file mode 100644 index 0000000000000000000000000000000000000000..c71a70fc2b4cd640b685b9ab330daa4163700418 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/UseJSFrom2/1.2.ets @@ -0,0 +1,69 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export function test3(): Array { + let logs: Array = new Array(); + // 1.文件导入 + const module = ESObject.load('@normalized:N&entry&com.samples.interopsample&jshar/src/main/ets/components/JSTest&1.0.0'); + let student = module.getProperty('Student'); + const SUBJECT = module.getProperty('SUBJECT'); + // 2.类实例化 + let student1 = student.instantiate(ESObject.wrapString('C'), ESObject.wrapNumber(19), ESObject.wrapString('F'), + ESObject.wrapBoolean(false)); + let score = [90, 68, 80, 90, 92, 78]; + let index = 0; + for (let item of SUBJECT) { + student1.invokeMethod('setSubjectScore', item, score[index]); + index++; + } + // 3.属性读写 + let name = student1.getProperty('name').toString(); + let age = student1.getProperty('age').toNumber(); + let sex = student1.getProperty('sex').toString(); + let isBoarder = student1.getProperty('isBoarder').toBoolean(); + logs.push(`${name}的年龄为${age}岁。`); + student1.setProperty('age', 20); + let newAge = student1.getProperty('age').toNumber(); + logs.push(`更新${name}的年龄为${newAge}岁。`); + // 5.对象方法调用 + logs.push(`${name}的个人信息: ${student1.invokeMethod('introduce')}`); + // 4.函数调用 + let calTotalScore = module.getProperty('calTotalScore'); + let calAverageScore = module.getProperty('calAverageScore'); + let totalScore = calTotalScore.invoke(student1).toNumber(); + // 6.参数传递 + let averageScore = calAverageScore.invoke(ESObject.wrapNumber(totalScore), ESObject.wrapNumber(6)); + logs.push(`总成绩:${totalScore},平均分:${averageScore}`); + return logs; +} + +// 7.异常处理 +export function ErrorHandle3(): string { + const module = ESObject.load('@normalized:N&entry&com.samples.interopsample&jshar/src/main/ets/components/JSTest&1.0.0'); + let referenceErr = module.getProperty('referenceErr'); + let errorInfo = referenceErr.getProperty('message').toString(); + return errorInfo; +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/UseTSFrom2/1.2.ets b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/UseTSFrom2/1.2.ets new file mode 100644 index 0000000000000000000000000000000000000000..3e9e30e45f65a01784fdbdf26f5da76b404512d1 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/ets/pages/UseTSFrom2/1.2.ets @@ -0,0 +1,70 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export function test4(): Array { + let logs: Array = new Array(); + // 1.文件导入 + const module = ESObject.load('@normalized:N&entry&com.samples.interopsample&tshar/src/main/ets/components/TSTest&1.0.0'); + let student = module.getProperty('Student'); + const SUBJECT = module.getProperty('SUBJECT'); + // 2.类实例化 + let student1 = student.instantiate(ESObject.wrapString('D'), ESObject.wrapNumber(21), ESObject.wrapString('F'), + ESObject.wrapBoolean(true)); + let score = [78, 86, 90, 76, 82, 78]; + let index = 0; + for (let item of SUBJECT) { + student1.invokeMethod('setSubjectScore', item, score[index]); + index++; + } + // 3.属性读写 + let name = student1.getProperty('name').toString(); + let age = student1.getProperty('age').toNumber(); + let sex = student1.getProperty('sex').toString(); + let isBoarder = student1.getProperty('isBoarder').toBoolean(); + logs.push(`${name}的年龄为${age}岁。`); + student1.setProperty('age', 20); + let newAge = student1.getProperty('age').toNumber(); + logs.push(`更新${name}的年龄为${newAge}岁。`); + // 5.对象方法调用 + logs.push(`${name}的个人信息: ${student1.invokeMethod('introduce')}`); + // 4.函数调用 + let calTotalScore = module.getProperty('calTotalScore'); + let calAverageScore = module.getProperty('calAverageScore'); + let totalScore = calTotalScore.invoke(student1).toNumber(); + // 6.参数传递 + let averageScore = calAverageScore.invoke(ESObject.wrapNumber(totalScore), ESObject.wrapNumber(6)); + logs.push(`总成绩:${totalScore},平均分:${averageScore}`); + return logs; +} + +// 7.异常调用 +export function ErrorHandle4(): string { + let errorInfo = ''; + const module = ESObject.load('@normalized:N&entry&com.samples.interopsample&tshar/src/main/ets/components/TSTest&1.0.0'); + let referenceErr = module.getProperty('referenceErr'); + errorInfo = referenceErr.getProperty('message').toString(); + return errorInfo; +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/module.json5 b/code/ArkTS1.2/interopSample/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..271deb1fe5c1c857507053f4acdd27de8176756c --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/module.json5 @@ -0,0 +1,67 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ], + "extensionAbilities": [ + + ] + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/color.json b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..3c712962da3c2751c2b9ddb53559afcbd2b54a02 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/float.json b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/string.json b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..afb025e327cb19b57a2671c409b92d0b78007de6 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "interop sample" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/RM002_preview.png b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/RM002_preview.png new file mode 100644 index 0000000000000000000000000000000000000000..30000bece7034fb33c72d2b177ddcfa2e353d63c Binary files /dev/null and b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/RM002_preview.png differ diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/background.png b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f Binary files /dev/null and b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/background.png differ diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/foreground.png b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..97014d3e10e5ff511409c378cd4255713aecd85f Binary files /dev/null and b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/foreground.png differ diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/layered_image.json b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000000000000000000000000000000000000..fb49920440fb4d246c82f9ada275e26123a2136a --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:background", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/startIcon.png b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/media/startIcon.png differ diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/profile/backup_config.json b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000000000000000000000000000000000..78f40ae7c494d71e2482278f359ec790ca73471a --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/base/profile/main_pages.json b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..1898d94f58d6128ab712be2c68acc7c98e9ab9ce --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/ArkTS1.2/interopSample/entry/src/main/resources/dark/element/color.json b/code/ArkTS1.2/interopSample/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..79b11c2747aec33e710fd3a7b2b3c94dd9965499 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/mock/mock-config.json5 b/code/ArkTS1.2/interopSample/entry/src/mock/mock-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..161117712214f6774990ab796696de2e6bb264d3 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/mock/mock-config.json5 @@ -0,0 +1,27 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/ohosTest/ets/test/Ability.test.ets b/code/ArkTS1.2/interopSample/entry/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..211bee7e6b275f09ce219dce3efe678122150a51 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,61 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/ohosTest/ets/test/List.test.ets b/code/ArkTS1.2/interopSample/entry/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..28a8c71666bc1e0c408f794ad64347f6684b9551 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/ohosTest/module.json5 b/code/ArkTS1.2/interopSample/entry/src/ohosTest/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..ca39ec2b0a3734b56244b5cb2ff6575f04cfb652 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/ohosTest/module.json5 @@ -0,0 +1,39 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "entry_test", + "type": "feature", + "deviceTypes": [ + "phone", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/test/List.test.ets b/code/ArkTS1.2/interopSample/entry/src/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..7fdc3847aa14a6bcd920343f38945f0fc9905d64 --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/entry/src/test/LocalUnit.test.ets b/code/ArkTS1.2/interopSample/entry/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..348d9b7c204b4e5430a33a6c344a5425376ff16f --- /dev/null +++ b/code/ArkTS1.2/interopSample/entry/src/test/LocalUnit.test.ets @@ -0,0 +1,67 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + it('test01', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/hvigor/hvigor-config.json5 b/code/ArkTS1.2/interopSample/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..4bad6546d31beecbb0b581c648316763a23f7dab --- /dev/null +++ b/code/ArkTS1.2/interopSample/hvigor/hvigor-config.json5 @@ -0,0 +1,48 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "modelVersion": "5.1.0", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/ArkTS1.2/interopSample/hvigorfile.ts b/code/ArkTS1.2/interopSample/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f435606b5766719f7203539113d84a2b281b0353 --- /dev/null +++ b/code/ArkTS1.2/interopSample/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/interopSample/jshar/.gitignore b/code/ArkTS1.2/interopSample/jshar/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/jshar/Index.ets b/code/ArkTS1.2/interopSample/jshar/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..0893dda4f66a8b14eb48c9619c6480212474ef62 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/Index.ets @@ -0,0 +1,27 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export { MainPage } from './src/main/ets/components/MainPage'; diff --git a/code/ArkTS1.2/interopSample/jshar/build-profile.json5 b/code/ArkTS1.2/interopSample/jshar/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..06b088fdc1b46c4e7622e411cbfd562831d79e83 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/build-profile.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "apiType": "stageMode", + "arkTSVersion": "1.0", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/jshar/hvigorfile.ts b/code/ArkTS1.2/interopSample/jshar/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7eae0674c85d936a85285ed5a7ad6d62e19340a --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/interopSample/jshar/obfuscation-rules.txt b/code/ArkTS1.2/interopSample/jshar/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/jshar/oh-package.json5 b/code/ArkTS1.2/interopSample/jshar/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..fb229166404188175eac33729aa5f851c6517607 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/oh-package.json5 @@ -0,0 +1,35 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "name": "jshar", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "Index.ets", + "author": "", + "license": "Apache-2.0", + "dependencies": {} +} diff --git a/code/ArkTS1.2/interopSample/jshar/src/main/ets/components/JSTest.js b/code/ArkTS1.2/interopSample/jshar/src/main/ets/components/JSTest.js new file mode 100644 index 0000000000000000000000000000000000000000..6bc3e5605612dc56c4cc373ebbb8b9af61a81041 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/main/ets/components/JSTest.js @@ -0,0 +1,75 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export const SUBJECT = new Set(['语文', '数学', '英语', '物理', '化学', '生物']); + +export class Student { + name = ''; + age = 18; + sex = ''; + isBoarder = true; + transcript = new Map(); + + constructor(name, age, sex, isBoarder) { + this.name = name; + this.age = age; + this.sex = sex; + this.isBoarder = isBoarder; + this.transcript = new Map(); + } + + introduce() { + let boarderStatus = this.isBoarder ? 'boarding student' : 'day student'; + return `姓名${this.name},今年${this.age}岁,是一名${boarderStatus}`; + } + + setSubjectScore(subject, score) { + if (score < 0 && score > 100) { + throw new Error(); + } + this.transcript.set(subject, score); + } +} + +export function calTotalScore(student) { + let total = 0; + for (let score of student.transcript.values()) { + total += score; + } + return total; +} + +export function calAverageScore(totalScore, subjectCount) { + if (subjectCount === 0) { + throw new Error(); + } + let averageScore = totalScore / subjectCount; + let averageScoreStr = String(Math.round(averageScore * 100) / 100); + return averageScoreStr; +} + +// 7.异常处理 +export let referenceErr = new ReferenceError('reference error'); \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/jshar/src/main/ets/components/MainPage.ets b/code/ArkTS1.2/interopSample/jshar/src/main/ets/components/MainPage.ets new file mode 100644 index 0000000000000000000000000000000000000000..d82ad1e86cd116d4dd303a9077864b6f112d2b93 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/main/ets/components/MainPage.ets @@ -0,0 +1,43 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +@Component +export struct MainPage { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .onClick(() => { + this.message = 'Welcome'; + }) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/jshar/src/main/module.json5 b/code/ArkTS1.2/interopSample/jshar/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..20beda0583cb63b06e73b4dd2e8b3df1fb915a49 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/main/module.json5 @@ -0,0 +1,37 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "jshar", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ] + } +} diff --git a/code/ArkTS1.2/interopSample/jshar/src/main/resources/base/element/float.json b/code/ArkTS1.2/interopSample/jshar/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/jshar/src/main/resources/base/element/string.json b/code/ArkTS1.2/interopSample/jshar/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..f51a9c8461a55f6312ef950344e3145b7f82d607 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/main/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/jshar/src/ohosTest/ets/test/Ability.test.ets b/code/ArkTS1.2/interopSample/jshar/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..211bee7e6b275f09ce219dce3efe678122150a51 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,61 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/jshar/src/ohosTest/ets/test/List.test.ets b/code/ArkTS1.2/interopSample/jshar/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..28a8c71666bc1e0c408f794ad64347f6684b9551 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/jshar/src/ohosTest/module.json5 b/code/ArkTS1.2/interopSample/jshar/src/ohosTest/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..616608437424941258f01e0046869eb9ea576c9c --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/ohosTest/module.json5 @@ -0,0 +1,39 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "jshar_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/code/ArkTS1.2/interopSample/jshar/src/test/List.test.ets b/code/ArkTS1.2/interopSample/jshar/src/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..7fdc3847aa14a6bcd920343f38945f0fc9905d64 --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/jshar/src/test/LocalUnit.test.ets b/code/ArkTS1.2/interopSample/jshar/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..08ae899f9b1b32e7a34da4dd4150316b133de8bc --- /dev/null +++ b/code/ArkTS1.2/interopSample/jshar/src/test/LocalUnit.test.ets @@ -0,0 +1,59 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/oh-package.json5 b/code/ArkTS1.2/interopSample/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..7cdb63f478e4836dfd70cce6ced3f1d95f07a412 --- /dev/null +++ b/code/ArkTS1.2/interopSample/oh-package.json5 @@ -0,0 +1,34 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "modelVersion": "5.1.0", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + } +} diff --git a/code/ArkTS1.2/interopSample/ohosTest.md b/code/ArkTS1.2/interopSample/ohosTest.md new file mode 100644 index 0000000000000000000000000000000000000000..8f396b1ba0456bdb003cc55d9176bcc8a7d22537 --- /dev/null +++ b/code/ArkTS1.2/interopSample/ohosTest.md @@ -0,0 +1,10 @@ +# interop配套测试用例 + +## 用例表 + +| 测试功能 | 预置条件 | 输入 | 预期输出 | 是否自动 | 测试结果 | +|-----------------------------------|-------------------------------------|----------------------|------------------------------------|------|------| +| ArkTS1.2中使用ArkTS1.0 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【Use 1.0 from 1.2】按钮 | 打印以下日志:
A的年龄为18岁。
更新A的年龄为20岁
A的个人信息: 姓名A,学号1001,今年20岁,身高175,电话13820002025, 上次平均成绩是81.75,gradePoint: 3.85, 是一名day student
总成绩:483,平均分:80.5
reference error| 否 | Pass | +| ArkTS1.0中使用ArkTS1.2 | 1. 需在真机测试
2. 构建并安装测试hap | 点击【Use 1.2 from 1.0】按钮 | 打印以下日志:
B的年龄为18岁。
更新B的年龄为19岁。
B的个人信息: 姓名B,学号1002,今年19岁,身高175,电话13820002025, 上次平均成绩是81,gradePoint: 3.85, 是一名boarding student
总成绩:478,平均分:79.67
reference error | 否 | Pass | +| ArkTS1.2中使用JS | 1. 需在真机测试
2. 构建并安装测试hap | 点击【Use JS from 1.2】按钮 | 打印以下日志:
C的年龄为19岁。
更新C的年龄为20岁。
C的个人信息: 姓名C,今年20岁,是一名day student
总成绩:498,平均分:83
reference error | 否 | Pass | +| ArkTS1.2中使用TS | 1. 需在真机测试
2. 构建并安装测试hap | 点击【Use TS from 1.2】按钮 | 打印以下日志:
D的年龄为21岁。
更新D的年龄为20岁。
D的个人信息: 姓名D,今年20岁,是一名boarding student
总成绩:490,平均分:81.67
reference error | 否 | Pass | diff --git a/code/ArkTS1.2/interopSample/tshar/.gitignore b/code/ArkTS1.2/interopSample/tshar/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/tshar/Index.ets b/code/ArkTS1.2/interopSample/tshar/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..0893dda4f66a8b14eb48c9619c6480212474ef62 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/Index.ets @@ -0,0 +1,27 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export { MainPage } from './src/main/ets/components/MainPage'; diff --git a/code/ArkTS1.2/interopSample/tshar/build-profile.json5 b/code/ArkTS1.2/interopSample/tshar/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..06b088fdc1b46c4e7622e411cbfd562831d79e83 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/build-profile.json5 @@ -0,0 +1,58 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "apiType": "stageMode", + "arkTSVersion": "1.0", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/tshar/hvigorfile.ts b/code/ArkTS1.2/interopSample/tshar/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f7eae0674c85d936a85285ed5a7ad6d62e19340a --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/hvigorfile.ts @@ -0,0 +1,32 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/ArkTS1.2/interopSample/tshar/obfuscation-rules.txt b/code/ArkTS1.2/interopSample/tshar/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/tshar/oh-package.json5 b/code/ArkTS1.2/interopSample/tshar/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..6b2267fb907b6d69a25f35f0d9cde35199b17e9c --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/oh-package.json5 @@ -0,0 +1,35 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "name": "tshar", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "Index.ets", + "author": "", + "license": "Apache-2.0", + "dependencies": {} +} diff --git a/code/ArkTS1.2/interopSample/tshar/src/main/ets/components/MainPage.ets b/code/ArkTS1.2/interopSample/tshar/src/main/ets/components/MainPage.ets new file mode 100644 index 0000000000000000000000000000000000000000..d82ad1e86cd116d4dd303a9077864b6f112d2b93 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/main/ets/components/MainPage.ets @@ -0,0 +1,43 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +@Component +export struct MainPage { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .onClick(() => { + this.message = 'Welcome'; + }) + } + .width('100%') + } + .height('100%') + } +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/tshar/src/main/ets/components/TSTest.ts b/code/ArkTS1.2/interopSample/tshar/src/main/ets/components/TSTest.ts new file mode 100644 index 0000000000000000000000000000000000000000..5155e1004906cbf540b5be894c84c339998ff5a0 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/main/ets/components/TSTest.ts @@ -0,0 +1,74 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +export const SUBJECT = new Set(['语文', '数学', '英语', '物理', '化学', '生物']); + +export class Student { + public name: string = ''; + public age: number = 18; + public sex: string = ''; + public isBoarder: boolean = true; + public transcript: Map = new Map(); + + constructor(name: string, age: number, sex: string, isBoarder: boolean) { + this.name = name; + this.age = age; + this.sex = sex; + this.isBoarder = isBoarder; + } + + introduce(): string { + let boarderStatus: string = this.isBoarder ? 'boarding student' : 'day student'; + return `姓名${this.name},今年${this.age}岁,是一名${boarderStatus}`; + } + + setSubjectScore(subject: string, score: number): void { + if (score < 0 && score > 100) { + throw new Error(); + } + this.transcript.set(subject, score); + } +} + +export function calTotalScore(student: Student) { + let total: number = 0; + for (let score of student.transcript.values()) { + total += score; + } + return total; +} + +export function calAverageScore(totalScore: number, subjectCount: number) { + if (subjectCount === 0) { + throw new Error(); + } + let averageScore: number = totalScore / subjectCount; + let averageScoreStr: string = String(Math.round(averageScore * 100) / 100); + return averageScoreStr; +} + +// 7.异常处理 +export let referenceErr: ReferenceError = new ReferenceError('reference error'); \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/tshar/src/main/module.json5 b/code/ArkTS1.2/interopSample/tshar/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..1c796b73b48d8e1a58bafa06b4349bc11dbfe19a --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/main/module.json5 @@ -0,0 +1,37 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "tshar", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ] + } +} diff --git a/code/ArkTS1.2/interopSample/tshar/src/main/resources/base/element/float.json b/code/ArkTS1.2/interopSample/tshar/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..33ea22304f9b1485b5f22d811023701b5d4e35b6 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/tshar/src/main/resources/base/element/string.json b/code/ArkTS1.2/interopSample/tshar/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..f51a9c8461a55f6312ef950344e3145b7f82d607 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/main/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + } + ] +} diff --git a/code/ArkTS1.2/interopSample/tshar/src/ohosTest/ets/test/Ability.test.ets b/code/ArkTS1.2/interopSample/tshar/src/ohosTest/ets/test/Ability.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..211bee7e6b275f09ce219dce3efe678122150a51 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/ohosTest/ets/test/Ability.test.ets @@ -0,0 +1,61 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { hilog } from '@kit.PerformanceAnalysisKit'; +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function abilityTest() { + describe('ActsAbilityTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }) + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }) + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }) + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }) + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + hilog.info(0x0000, 'testTag', '%{public}s', 'it begin'); + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }) + }) +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/tshar/src/ohosTest/ets/test/List.test.ets b/code/ArkTS1.2/interopSample/tshar/src/ohosTest/ets/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..28a8c71666bc1e0c408f794ad64347f6684b9551 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/ohosTest/ets/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import abilityTest from './Ability.test'; + +export default function testsuite() { + abilityTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/tshar/src/ohosTest/module.json5 b/code/ArkTS1.2/interopSample/tshar/src/ohosTest/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..e7963a7a7f50fda39a90fb8e993e1210850d0ba1 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/ohosTest/module.json5 @@ -0,0 +1,39 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +{ + "module": { + "name": "tshar_test", + "type": "feature", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ], + "deliveryWithInstall": true, + "installationFree": false + } +} diff --git a/code/ArkTS1.2/interopSample/tshar/src/test/List.test.ets b/code/ArkTS1.2/interopSample/tshar/src/test/List.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..7fdc3847aa14a6bcd920343f38945f0fc9905d64 --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/test/List.test.ets @@ -0,0 +1,31 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/code/ArkTS1.2/interopSample/tshar/src/test/LocalUnit.test.ets b/code/ArkTS1.2/interopSample/tshar/src/test/LocalUnit.test.ets new file mode 100644 index 0000000000000000000000000000000000000000..08ae899f9b1b32e7a34da4dd4150316b133de8bc --- /dev/null +++ b/code/ArkTS1.2/interopSample/tshar/src/test/LocalUnit.test.ets @@ -0,0 +1,59 @@ +/** + * + * Copyright (c) 2025 Huawei Device Co., Ltd. + * + * All rights reserved. + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice,this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS 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 COPYRIGHT HOLDER 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, + * + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest', () => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file diff --git a/code/HelloWorld/.gitignore b/code/HelloWorld/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d2ff20141ceed86d87c0ea5d99481973005bab2b --- /dev/null +++ b/code/HelloWorld/.gitignore @@ -0,0 +1,12 @@ +/node_modules +/oh_modules +/local.properties +/.idea +**/build +/.hvigor +.cxx +/.clangd +/.clang-format +/.clang-tidy +**/.test +/.appanalyzer \ No newline at end of file diff --git a/code/HelloWorld/AppScope/app.json5 b/code/HelloWorld/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..27c73b40ae822e57166a857d945fdd5fea11bbde --- /dev/null +++ b/code/HelloWorld/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.example.helloworld", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/code/HelloWorld/AppScope/resources/base/element/string.json b/code/HelloWorld/AppScope/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..0f45ffda7c2ba8045db510d54fc1624d37afcf40 --- /dev/null +++ b/code/HelloWorld/AppScope/resources/base/element/string.json @@ -0,0 +1,8 @@ +{ + "string": [ + { + "name": "app_name", + "value": "HelloWorld" + } + ] +} diff --git a/code/HelloWorld/AppScope/resources/base/media/app_icon.png b/code/HelloWorld/AppScope/resources/base/media/app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a39445dc87828b76fed6d2ec470dd455c45319e3 Binary files /dev/null and b/code/HelloWorld/AppScope/resources/base/media/app_icon.png differ diff --git a/code/HelloWorld/build-profile.json5 b/code/HelloWorld/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..4eab39fe0b314443c811d6499da2120769d59b85 --- /dev/null +++ b/code/HelloWorld/build-profile.json5 @@ -0,0 +1,42 @@ +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compatibleSdkVersion": 14, + "compileSdkVersion": 20, + "runtimeOS": "OpenHarmony", + "buildOption": { + "strictMode": { + "caseSensitiveCheck": true, + "useNormalizedOHMUrl": true + } + } + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "entry", + "srcPath": "./entry", + "targets": [ + { + "name": "default", + "applyToProducts": [ + "default" + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/code/HelloWorld/code-linter.json5 b/code/HelloWorld/code-linter.json5 new file mode 100644 index 0000000000000000000000000000000000000000..073990fa45394e1f8e85d85418ee60a8953f9b99 --- /dev/null +++ b/code/HelloWorld/code-linter.json5 @@ -0,0 +1,32 @@ +{ + "files": [ + "**/*.ets" + ], + "ignore": [ + "**/src/ohosTest/**/*", + "**/src/test/**/*", + "**/src/mock/**/*", + "**/node_modules/**/*", + "**/oh_modules/**/*", + "**/build/**/*", + "**/.preview/**/*" + ], + "ruleSet": [ + "plugin:@performance/recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "@security/no-unsafe-aes": "error", + "@security/no-unsafe-hash": "error", + "@security/no-unsafe-mac": "warn", + "@security/no-unsafe-dh": "error", + "@security/no-unsafe-dsa": "error", + "@security/no-unsafe-ecdsa": "error", + "@security/no-unsafe-rsa-encrypt": "error", + "@security/no-unsafe-rsa-sign": "error", + "@security/no-unsafe-rsa-key": "error", + "@security/no-unsafe-dsa-key": "error", + "@security/no-unsafe-dh-key": "error", + "@security/no-unsafe-3des": "error" + } +} \ No newline at end of file diff --git a/code/HelloWorld/entry/.gitignore b/code/HelloWorld/entry/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e2713a2779c5a3e0eb879efe6115455592caeea5 --- /dev/null +++ b/code/HelloWorld/entry/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/code/HelloWorld/entry/build-profile.json5 b/code/HelloWorld/entry/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..ba86f7fda88cdd2113eaaca2639a93068f5a6096 --- /dev/null +++ b/code/HelloWorld/entry/build-profile.json5 @@ -0,0 +1,29 @@ +{ + "apiType": "stageMode", + "arkTSVersion": "1.2", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": false, + "files": [ + "./obfuscation-rules.txt" + ] + } + } + } + }, + ], + "targets": [ + { + "name": "default" + }, + { + "name": "ohosTest", + } + ] +} \ No newline at end of file diff --git a/code/HelloWorld/entry/hvigorfile.ts b/code/HelloWorld/entry/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..c6edcd90486dd5a853cf7d34c8647f08414ca7a3 --- /dev/null +++ b/code/HelloWorld/entry/hvigorfile.ts @@ -0,0 +1,6 @@ +import { hapTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/HelloWorld/entry/obfuscation-rules.txt b/code/HelloWorld/entry/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..272efb6ca3f240859091bbbfc7c5802d52793b0b --- /dev/null +++ b/code/HelloWorld/entry/obfuscation-rules.txt @@ -0,0 +1,23 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/source-obfuscation-V5 + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope + +-enable-property-obfuscation +-enable-toplevel-obfuscation +-enable-filename-obfuscation +-enable-export-obfuscation \ No newline at end of file diff --git a/code/HelloWorld/entry/oh-package.json5 b/code/HelloWorld/entry/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..2959d78c50285f912adb2cdff9f613df9a503b44 --- /dev/null +++ b/code/HelloWorld/entry/oh-package.json5 @@ -0,0 +1,10 @@ +{ + "name": "entry", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": {} +} + diff --git a/code/HelloWorld/entry/src/main/ets/entryability/EntryAbility.ets b/code/HelloWorld/entry/src/main/ets/entryability/EntryAbility.ets new file mode 100644 index 0000000000000000000000000000000000000000..5158b13b6f4392cb6e4920b90d87ee4d15ae7f23 --- /dev/null +++ b/code/HelloWorld/entry/src/main/ets/entryability/EntryAbility.ets @@ -0,0 +1,31 @@ +import UIAbility from '@ohos.app.ability.UIAbility'; +import AbilityConstant from '@ohos.app.ability.AbilityConstant'; +import Want from '@ohos.app.ability.Want'; +import window from '@ohos.window'; +import { BusinessError } from '@ohos.base'; +import hilog from '@ohos.hilog'; +import { MyCallback } from '../models/MyCallback'; + + +class EntryAbility extends UIAbility { + onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onCreate'); + } + + onWindowStageCreate(windowStage: window.WindowStage): void { + hilog.info(0x0000, 'testTag', 'EntryAbility onWindowStageCreate'); + try { + windowStage.loadContent('pages/Index', (err: BusinessError): void => { + hilog.info(0x0000, 'testTag', 'loadContent entering'); + MyCallback.runCasesOfCallback(); + if (err.code) { + hilog.info(0x0000, 'testTag', 'loadContent error'); + return; + } + hilog.info(0x0000, 'testTag', 'loadContent ok'); + }); + } catch (e: Error) { + hilog.info(0x0000, 'testTag', 'loadContent catch error:-----------' + e.message); + } + } +} \ No newline at end of file diff --git a/code/HelloWorld/entry/src/main/ets/models/MyCallback.ets b/code/HelloWorld/entry/src/main/ets/models/MyCallback.ets new file mode 100644 index 0000000000000000000000000000000000000000..5827b846dc824ef26c25e0a8612717cb7b448a3a --- /dev/null +++ b/code/HelloWorld/entry/src/main/ets/models/MyCallback.ets @@ -0,0 +1,38 @@ +import { AsyncCallback, BusinessError, Callback, ErrorCallback } from '@ohos.base'; +import hilog from '@ohos.hilog'; + +const SYNTAX_ERROR_CODE: double = 1002; + +export class MyCallback { + static myCallback(callback: Callback): void { + hilog.info(0x0000, 'testTag', 'myCallback'); + callback('myCallback'); + } + + static myAsyncCallback(callback: AsyncCallback): void { + hilog.info(0x0000, 'testTag', 'myAsyncCallback'); + let error = new Error('Business Error', 'basicError2 message', undefined); + let be2: BusinessError = new BusinessError(SYNTAX_ERROR_CODE, error); + callback(be2, 'yAsyncCallback'); + } + + static myErrorCallback(callback: ErrorCallback>): void { + hilog.info(0x0000, 'testTag', 'myErrorCallback'); + let error = new Error('Business Error', 'myErrorCallback message', undefined); + let result: string = 'test'; + let be: BusinessError = new BusinessError(SYNTAX_ERROR_CODE, result, error); + callback(be); + } + + static runCasesOfCallback() { + MyCallback.myCallback((data: string) => { + hilog.info(0x0000, 'testTag', 'MyCallback' + data); + }) + MyCallback.myAsyncCallback((error: BusinessError, result: string) => { + hilog.info(0x0000, 'testTag', `myAsyncCallback, error: ${error.message}, result:${result}`); + }) + MyCallback.myErrorCallback((error: BusinessError) => { + hilog.info(0x0000, 'testTag', `myAsyncCallback, error: ${error.message}`); + }) + } +} \ No newline at end of file diff --git a/code/HelloWorld/entry/src/main/ets/pages/Index.ets b/code/HelloWorld/entry/src/main/ets/pages/Index.ets new file mode 100644 index 0000000000000000000000000000000000000000..c840306f269d346c5ce67ce8a124920ee626b297 --- /dev/null +++ b/code/HelloWorld/entry/src/main/ets/pages/Index.ets @@ -0,0 +1,34 @@ +import { memo, __memo_context_type, __memo_id_type } from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import { Entry, Text, TextAttribute, Column, Component, Button, ButtonAttribute, ClickEvent, UserView } from '@ohos.arkui.component' // TextAttribute should be insert by ui-plugins +import { State, StateDecoratedVariable, MutableState, stateOf, observableProxy } from '@ohos.arkui.stateManagement' // should be insert by ui-plugins +import hilog from '@ohos.hilog' + +@Entry +@Component +struct MyStateSample { + @State stateVar: string = 'state var'; + message: string = 'var'; + changeValue() { + this.stateVar+='~' + } + build() { + Column(undefined) { + Text('Hello World').fontSize(20) + Button(this.message).backgroundColor('#FFFF00FF') + .onClick((e: ClickEvent) => { + hilog.info(0x0000, 'testTag', 'On Click'); + this.changeValue(); + }) + Text(this.stateVar).fontSize(20) + Child({stateVar: this.stateVar} as __Options_Child) + } + } +} + +@Component +struct Child { + @State stateVar: string = 'Child'; + build() { + Text(this.stateVar).fontSize(50) + } +} diff --git a/code/HelloWorld/entry/src/main/module.json5 b/code/HelloWorld/entry/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..b73e4682583084e417d967d9b6d273f95df7fea3 --- /dev/null +++ b/code/HelloWorld/entry/src/main/module.json5 @@ -0,0 +1,37 @@ +{ + "module": { + "name": "entry", + "type": "entry", + "description": "$string:module_desc", + "mainElement": "EntryAbility", + "deviceTypes": [ + "default", + "tablet", + ], + "deliveryWithInstall": true, + "installationFree": false, + "pages": "$profile:main_pages", + "abilities": [ + { + "name": "EntryAbility", + "srcEntry": "./ets/entryability/EntryAbility.ets", + "description": "$string:EntryAbility_desc", + "icon": "$media:layered_image", + "label": "$string:EntryAbility_label", + "startWindowIcon": "$media:startIcon", + "startWindowBackground": "$color:start_window_background", + "exported": true, + "skills": [ + { + "entities": [ + "entity.system.home" + ], + "actions": [ + "action.system.home" + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/code/HelloWorld/entry/src/main/resources/base/element/color.json b/code/HelloWorld/entry/src/main/resources/base/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..d66f9a7d4ac61fb8d215239ab3620b7bcd77bf33 --- /dev/null +++ b/code/HelloWorld/entry/src/main/resources/base/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#FFFFFF" + } + ] +} \ No newline at end of file diff --git a/code/HelloWorld/entry/src/main/resources/base/element/float.json b/code/HelloWorld/entry/src/main/resources/base/element/float.json new file mode 100644 index 0000000000000000000000000000000000000000..a8a5d404dcd8b0466194afc3aa25d90a8a327470 --- /dev/null +++ b/code/HelloWorld/entry/src/main/resources/base/element/float.json @@ -0,0 +1,8 @@ +{ + "float": [ + { + "name": "page_text_font_size", + "value": "50fp" + } + ] +} diff --git a/code/HelloWorld/entry/src/main/resources/base/element/string.json b/code/HelloWorld/entry/src/main/resources/base/element/string.json new file mode 100644 index 0000000000000000000000000000000000000000..f94595515a99e0c828807e243494f57f09251930 --- /dev/null +++ b/code/HelloWorld/entry/src/main/resources/base/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "module_desc", + "value": "module description" + }, + { + "name": "EntryAbility_desc", + "value": "description" + }, + { + "name": "EntryAbility_label", + "value": "label" + } + ] +} \ No newline at end of file diff --git a/code/HelloWorld/entry/src/main/resources/base/media/background.png b/code/HelloWorld/entry/src/main/resources/base/media/background.png new file mode 100644 index 0000000000000000000000000000000000000000..923f2b3f27e915d6871871deea0420eb45ce102f Binary files /dev/null and b/code/HelloWorld/entry/src/main/resources/base/media/background.png differ diff --git a/code/HelloWorld/entry/src/main/resources/base/media/foreground.png b/code/HelloWorld/entry/src/main/resources/base/media/foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..97014d3e10e5ff511409c378cd4255713aecd85f Binary files /dev/null and b/code/HelloWorld/entry/src/main/resources/base/media/foreground.png differ diff --git a/code/HelloWorld/entry/src/main/resources/base/media/layered_image.json b/code/HelloWorld/entry/src/main/resources/base/media/layered_image.json new file mode 100644 index 0000000000000000000000000000000000000000..fb49920440fb4d246c82f9ada275e26123a2136a --- /dev/null +++ b/code/HelloWorld/entry/src/main/resources/base/media/layered_image.json @@ -0,0 +1,7 @@ +{ + "layered-image": + { + "background" : "$media:background", + "foreground" : "$media:foreground" + } +} \ No newline at end of file diff --git a/code/HelloWorld/entry/src/main/resources/base/media/startIcon.png b/code/HelloWorld/entry/src/main/resources/base/media/startIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..205ad8b5a8a42e8762fbe4899b8e5e31ce822b8b Binary files /dev/null and b/code/HelloWorld/entry/src/main/resources/base/media/startIcon.png differ diff --git a/code/HelloWorld/entry/src/main/resources/base/profile/backup_config.json b/code/HelloWorld/entry/src/main/resources/base/profile/backup_config.json new file mode 100644 index 0000000000000000000000000000000000000000..d742c2f96e7dd0f406f499941f3147345e998f95 --- /dev/null +++ b/code/HelloWorld/entry/src/main/resources/base/profile/backup_config.json @@ -0,0 +1,3 @@ +{ + "allowToBackupRestore": true +} \ No newline at end of file diff --git a/code/HelloWorld/entry/src/main/resources/base/profile/main_pages.json b/code/HelloWorld/entry/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000000000000000000000000000000000000..1898d94f58d6128ab712be2c68acc7c98e9ab9ce --- /dev/null +++ b/code/HelloWorld/entry/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,5 @@ +{ + "src": [ + "pages/Index" + ] +} diff --git a/code/HelloWorld/entry/src/main/resources/dark/element/color.json b/code/HelloWorld/entry/src/main/resources/dark/element/color.json new file mode 100644 index 0000000000000000000000000000000000000000..438d5bc43bb23c59c210d586b96635a72da5b64a --- /dev/null +++ b/code/HelloWorld/entry/src/main/resources/dark/element/color.json @@ -0,0 +1,8 @@ +{ + "color": [ + { + "name": "start_window_background", + "value": "#000000" + } + ] +} \ No newline at end of file diff --git a/code/HelloWorld/hvigor/hvigor-config.json5 b/code/HelloWorld/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..3d2636d32ef0cad1df3e8dc11f691bb9dc870344 --- /dev/null +++ b/code/HelloWorld/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.0.2", + "dependencies": { + }, + "execution": { + // "analyze": "normal", /* Define the build analyze mode. Value: [ "normal" | "advanced" | false ]. Default: "normal" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 8192 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process. Default: 8192*/ + // "exposeGC": true /* Enable to trigger garbage collection explicitly. Default: true*/ + } +} diff --git a/code/HelloWorld/hvigorfile.ts b/code/HelloWorld/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3cb9f1a87a81687554a76283af8df27d8bda775 --- /dev/null +++ b/code/HelloWorld/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/code/HelloWorld/oh-package.json5 b/code/HelloWorld/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..78bf3d8322745df4174f5ac23de6f4da67182012 --- /dev/null +++ b/code/HelloWorld/oh-package.json5 @@ -0,0 +1,10 @@ +{ + "modelVersion": "5.0.2", + "description": "Please describe the basic information.", + "dependencies": { + }, + "devDependencies": { + "@ohos/hypium": "1.0.21", + "@ohos/hamock": "1.0.0" + } +}